diff --git a/.gitignore b/.gitignore index 5e43b6d9ba83..9dc5ec3c2314 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,6 @@ /config/* !/config/formats.ts -/logs/* +/logs/**/* /test/modlogs /test/replays/*.html /node_modules diff --git a/ARCHITECTURE.md b/ARCHITECTURE.md index fbca55dcdc13..c369b59a7b2d 100644 --- a/ARCHITECTURE.md +++ b/ARCHITECTURE.md @@ -3,11 +3,19 @@ Pokemon Showdown architecture At the highest level, PS is split into three parts: -- Client -- Login server -- Game server +- Game server (**[smogon/pokemon-showdown](https://github.com/smogon/pokemon-showdown)**) +- Client (**[smogon/pokemon-showdown-client](https://github.com/smogon/pokemon-showdown-client)**) +- Login server (**[smogon/pokemon-showdown-loginserver](https://github.com/smogon/pokemon-showdown-loginserver)**) -The game server is in this repository, **[smogon/pokemon-showdown](https://github.com/smogon/pokemon-showdown)**, while the client and login server are in **[smogon/pokemon-showdown-client](https://github.com/smogon/pokemon-showdown-client)**. All three communicate directly with each other. +All three communicate directly with each other. + +A user starts by visiting `https://play.pokemonshowdown.com/`. This is handled by an Apache server (in the Client), which serves mostly static files but uses some PHP (legacy, intended to be migrated to Loginserver). + +The user's web browser (running Client code) will then communicate with the Login server (mounted at `https://play.pokemonshowdown.com/api/` to handle logins mostly, or otherwise interface with the Client databases one way or another). + +The user's web browser will also connect to the Game server, through SockJS. The Game server handles the chat rooms, matchmaking, and actual battle simulation. + +The Game server also communicates with the Login server, to handle replay uploads (and, for the main server, ladder updates). Game server @@ -25,7 +33,7 @@ Its entry point is [server/index.ts](./server/index.ts), which launches several - [server/chat.ts](./server/chat.ts) sets up `Chat`, which handles chat commands and messages coming in from users (all client-to-server commands are routed through there) -`Rooms` also includes support for battle rooms, which is where the game simulation itself is done. Game simulation code is in [sim/](./sim/). +`Rooms` also includes support for battle rooms, which is where the server connects to the game simulator itself. Game simulation code is in [sim/](./sim/). Client @@ -33,14 +41,16 @@ Client The client is built in a mix of TypeScript and JavaScript, with a mostly hand-rolled framework built on Backbone. There’s a rewrite to migrate it to Preact but it’s very stalled. -Its entry point is [index.template.html](https://github.com/smogon/pokemon-showdown-client/blob/master/index.template.html). +Its entry point is [index.template.html](https://github.com/smogon/pokemon-showdown-client/blob/master/play.pokemonshowdown.com/index.template.html) -It was written long ago, so instead of a single JS entry point, it includes a lot of JS files. Everything important is launched from [js/client.js](https://github.com/smogon/pokemon-showdown-client/blob/master/js/client.js). +It was written long ago, so instead of a single JS entry point, it includes a lot of JS files. Everything important is launched from [js/client.js](https://github.com/smogon/pokemon-showdown-client/blob/master/play.pokemonshowdown.com/js/client.js) Login server ------------ -The client’s login server, which handles logins and most database interaction, is written in PHP, with a rewrite to TypeScript in progress. The backend is split between a MySQL InnoDB database and a Percona database, with a migration to Postgres planned. +The client’s login server, which handles logins and most database interaction, is written in TypeScript. The backend is currently split between a MySQL InnoDB database (for users, ladder, and most other things) and a Postgres (technically Cockroach) database (for Replays). + +Its entry point is [server.ts](https://github.com/smogon/pokemon-showdown-loginserver/blob/master/src/server.ts). -Its entry point is [action.php](https://github.com/smogon/pokemon-showdown-client/blob/master/action.php). +It's intended to replace all of the old PHP code in the Client, but that migration is only halfway done at the moment. diff --git a/CODEOWNERS b/CODEOWNERS index 64e398195f35..a309c8f878fd 100644 --- a/CODEOWNERS +++ b/CODEOWNERS @@ -1,6 +1,6 @@ config/formats.ts @KrisXV @Marty-D data/mods/*/random-teams.ts @AnnikaCodes -data/mods/ssb/ @HoeenCoder @KrisXV +data/mods/gen9ssb/ @HoeenCoder @HisuianZoroark @KrisXV data/random-sets.json @MathyFurret @ACakeWearingAHat @livid-washed @adrivrie data/random-teams.ts @AnnikaCodes @KrisXV @MathyFurret @ACakeWearingAHat @livid-washed @adrivrie data/text/ @Marty-D @@ -24,7 +24,6 @@ server/chat-plugins/sample-teams.ts @KrisXV server/chat-plugins/scavenger*.ts @xfix @sparkychildcharlie @PartMan7 sever/chat-plugins/teams.ts @mia-pi-git server/chat-plugins/the-studio.ts @KrisXV -server/chat-plugins/trivia/ @AnnikaCodes server/friends.ts @mia-pi-git server/private-messages/* @mia-pi-git server/chat-plugins/username-prefixes.ts @AnnikaCodes diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index f5e50d6d4551..7c6161b5af68 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -128,14 +128,14 @@ BAD: ```ts // if ten seconds have passed and the user is staff -if (now > then + 10_000 && '&@%'.includes(user.tempGroup)) { +if (now > then + 10_000 && '~@%'.includes(user.tempGroup)) { ``` GOOD: ```ts const tenSecondsPassed = now > then + 10_000; -const userIsStaff = '&@%'.includes(user.tempGroup); +const userIsStaff = '~@%'.includes(user.tempGroup); if (tenSecondsPassed && userIsStaff) { ``` diff --git a/LICENSE b/LICENSE index 251ec2a03ddb..f1bc80d3702a 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ The MIT License (MIT) -Copyright (c) 2011-2022 Guangcong Luo and other contributors http://pokemonshowdown.com/ +Copyright (c) 2011-2024 Guangcong Luo and other contributors http://pokemonshowdown.com/ Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in diff --git a/PROTOCOL.md b/PROTOCOL.md index 786dca933375..3695b1691324 100644 --- a/PROTOCOL.md +++ b/PROTOCOL.md @@ -40,7 +40,7 @@ Messages from the user to the server are in the form: `ROOMID` can optionally be left blank if unneeded (commands like `/join lobby` can be sent anywhere). Responses will be sent to a PM box with no username -(so `|/command` is equivalent to `|/pm &, /command`). +(so `|/command` is equivalent to `|/pm ~, /command`). `TEXT` can contain newlines, in which case it'll be treated the same way as if each line were sent to the room separately. diff --git a/README.md b/README.md index f6d12202cbe4..5696798b1d2e 100644 --- a/README.md +++ b/README.md @@ -89,7 +89,7 @@ Staff - Andrew Werner [HoeenHero] - Development - Annika L. [Annika] - Development - Chris Monsanto [chaos] - Development, Sysadmin -- Kris Johnson [Kris] - Development +- Kris Johnson [dhelmise] - Development - Leonard Craft III [DaWoblefet] - Research (game mechanics) - Mathieu Dias-Martins [Marty-D] - Research (game mechanics), Development - Mia A [Mia] - Development diff --git a/config/config-example.js b/config/config-example.js index c7630c8cd926..1ff0c2a716ba 100644 --- a/config/config-example.js +++ b/config/config-example.js @@ -555,7 +555,7 @@ exports.chatlogreader = 'fs'; */ exports.grouplist = [ { - symbol: '&', + symbol: '~', id: "admin", name: "Administrator", inherit: '@', @@ -565,7 +565,7 @@ exports.grouplist = [ console: true, bypassall: true, lockdown: true, - promote: '&u', + promote: '~u', roomowner: true, roombot: true, roommod: true, @@ -651,7 +651,7 @@ exports.grouplist = [ timer: true, modlog: true, alts: '%u', - bypassblocks: 'u%@&~', + bypassblocks: 'u%@~', receiveauthmessages: true, gamemoderation: true, jeopardy: true, @@ -660,13 +660,6 @@ exports.grouplist = [ modchat: true, hiderank: true, }, - { - symbol: '\u00a7', - id: "sectionleader", - name: "Section Leader", - inherit: '+', - jurisdiction: 'u', - }, { // Bots are ranked below Driver/Mod so that Global Bots can be kept out // of modjoin % rooms (namely, Staff). diff --git a/config/formats.ts b/config/formats.ts index 0eeef0507c7b..9bdbd6654166 100644 --- a/config/formats.ts +++ b/config/formats.ts @@ -17,7 +17,7 @@ New sections will be added to the bottom of the specified column. The column value will be ignored for repeat sections. */ -export const Formats: FormatList = [ +export const Formats: import('../sim/dex-formats').FormatList = [ // S/V Singles /////////////////////////////////////////////////////////////////// @@ -28,17 +28,12 @@ export const Formats: FormatList = [ { name: "[Gen 9] Random Battle", desc: `Randomized teams of Pokémon with sets that are generated to be competitively viable.`, - threads: [ - `• Random Battle Suggestions`, - ], - mod: 'gen9', team: 'random', ruleset: ['PotD', 'Obtainable', 'Species Clause', 'HP Percentage Mod', 'Cancel Mod', 'Sleep Clause Mod', 'Illusion Level Mod'], }, { name: "[Gen 9] Unrated Random Battle", - mod: 'gen9', team: 'random', challengeShow: false, @@ -47,7 +42,6 @@ export const Formats: FormatList = [ }, { name: "[Gen 9] Free-For-All Random Battle", - mod: 'gen9', team: 'random', gameType: 'freeforall', @@ -57,14 +51,12 @@ export const Formats: FormatList = [ }, { name: "[Gen 9] Random Battle (Blitz)", - mod: 'gen9', team: 'random', ruleset: ['[Gen 9] Random Battle', 'Blitz'], }, { name: "[Gen 9] Multi Random Battle", - mod: 'gen9', team: 'random', gameType: 'multi', @@ -78,182 +70,98 @@ export const Formats: FormatList = [ }, { name: "[Gen 9] OU", - threads: [ - `• SV OU Metagame Discussion`, - `• SV OU Sample Teams`, - `• SV OU Viability Rankings`, - ], - mod: 'gen9', - ruleset: ['Standard'], + ruleset: ['Standard', 'Sleep Moves Clause', '!Sleep Clause Mod'], banlist: ['Uber', 'AG', 'Arena Trap', 'Moody', 'Sand Veil', 'Shadow Tag', 'Snow Cloak', 'King\'s Rock', 'Razor Fang', 'Baton Pass', 'Last Respects', 'Shed Tail'], }, { name: "[Gen 9] Ubers", - threads: [ - `• Ubers Metagame Discussion`, - `• Ubers Viability Rankings`, - ], - mod: 'gen9', ruleset: ['Standard'], - banlist: ['AG', 'Moody', 'King\'s Rock', 'Razor Fang', 'Baton Pass'], + banlist: ['AG', 'Moody', 'King\'s Rock', 'Razor Fang', 'Baton Pass', 'Last Respects'], }, { name: "[Gen 9] UU", - threads: [ - `• UU Metagame Discussion`, - `• UU Viability Rankings`, - `• UU Sample Teams`, - ], - mod: 'gen9', ruleset: ['[Gen 9] OU'], banlist: ['OU', 'UUBL'], }, { name: "[Gen 9] RU", - threads: [ - `• RU Metagame Discussion`, - `• RU Viability Rankings`, - `• RU Sample Teams`, - ], - mod: 'gen9', ruleset: ['[Gen 9] UU'], banlist: ['UU', 'RUBL', 'Light Clay'], }, { name: "[Gen 9] NU", - threads: [ - `• NU Metagame Discussion`, - `• NU Viability Rankings`, - `• NU Sample Teams`, - ], - mod: 'gen9', ruleset: ['[Gen 9] RU'], - banlist: ['RU', 'NUBL'], + banlist: ['RU', 'NUBL', 'Drought', 'Quick Claw'], }, { name: "[Gen 9] PU", - threads: [ - `• PU Viability Rankings`, - `• PU Sample Teams`, - ], - mod: 'gen9', ruleset: ['[Gen 9] NU'], - banlist: ['NU', 'PUBL', 'Damp Rock', 'Heat Rock'], + banlist: ['NU', 'PUBL', 'Damp Rock'], }, { name: "[Gen 9] LC", - threads: [ - `• Little Cup Metagame Discussion`, - `• Little Cup Sample Teams`, - `• Little Cup Viability Rankings`, - ], - mod: 'gen9', ruleset: ['Little Cup', 'Standard'], banlist: [ - 'Aipom', 'Basculin-White-Striped', 'Cutiefly', 'Diglett-Base', 'Dunsparce', 'Duraludon', 'Flittle', 'Girafarig', 'Gligar', - 'Meditite', 'Misdreavus', 'Murkrow', 'Qwilfish-Hisui', 'Rufflet', 'Scyther', 'Sneasel', 'Sneasel-Hisui', 'Stantler', 'Vulpix', - 'Vulpix-Alola', 'Yanma', 'Moody', 'Baton Pass', 'Sticky Web', + 'Aipom', 'Basculin-White-Striped', 'Cutiefly', 'Diglett-Base', 'Dunsparce', 'Duraludon', 'Flittle', 'Gastly', 'Girafarig', 'Gligar', + 'Meditite', 'Misdreavus', 'Murkrow', 'Porygon', 'Qwilfish-Hisui', 'Rufflet', 'Scraggy', 'Scyther', 'Sneasel', 'Sneasel-Hisui', + 'Snivy', 'Stantler', 'Voltorb-Hisui', 'Vulpix', 'Vulpix-Alola', 'Yanma', 'Moody', 'Baton Pass', 'Sticky Web', ], }, { name: "[Gen 9] Monotype", - threads: [ - `• Monotype Metagame Discussion`, - `• Monotype Sample Teams`, - `• Monotype Viability Rankings`, - ], - mod: 'gen9', ruleset: ['Standard', 'Evasion Abilities Clause', 'Same Type Clause', 'Terastal Clause'], banlist: [ - 'Annihilape', 'Arceus', 'Calyrex-Ice', 'Calyrex-Shadow', 'Chi-Yu', 'Blaziken', 'Deoxys-Base', 'Deoxys-Attack', 'Dialga', - 'Dialga-Origin', 'Eternatus', 'Giratina', 'Giratina-Origin', 'Groudon', 'Ho-Oh', 'Iron Bundle', 'Koraidon', 'Kyogre', - 'Kyurem-Black', 'Kyurem-White', 'Lugia', 'Lunala', 'Magearna', 'Mewtwo', 'Miraidon', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', - 'Palafin', 'Palkia', 'Palkia-Origin', 'Rayquaza', 'Reshiram', 'Shaymin-Sky', 'Solgaleo', 'Urshifu-Base', 'Zacian', - 'Zacian-Crowned', 'Zamazenta-Crowned', 'Zekrom', 'Moody', 'Shadow Tag', 'Booster Energy', 'Damp Rock', 'Focus Band', - 'King\'s Rock', 'Quick Claw', 'Razor Fang', 'Smooth Rock', 'Acupressure', 'Baton Pass', 'Last Respects', 'Shed Tail', + 'Annihilape', 'Arceus', 'Baxcalibur', 'Calyrex-Ice', 'Calyrex-Shadow', 'Chi-Yu', 'Chien-Pao', 'Blaziken', 'Deoxys-Normal', 'Deoxys-Attack', + 'Dialga', 'Dialga-Origin', 'Espathra', 'Eternatus', 'Giratina', 'Giratina-Origin', 'Groudon', 'Ho-Oh', 'Iron Bundle', 'Kingambit', 'Koraidon', + 'Kyogre', 'Kyurem-Black', 'Kyurem-White', 'Lugia', 'Lunala', 'Magearna', 'Mewtwo', 'Miraidon', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', + 'Palafin', 'Palkia', 'Palkia-Origin', 'Rayquaza', 'Reshiram', 'Shaymin-Sky', 'Solgaleo', 'Ursaluna-Bloodmoon', 'Urshifu-Single-Strike', + 'Zacian', 'Zacian-Crowned', 'Zamazenta-Crowned', 'Zekrom', 'Moody', 'Shadow Tag', 'Booster Energy', 'Damp Rock', 'Focus Band', 'King\'s Rock', + 'Quick Claw', 'Razor Fang', 'Smooth Rock', 'Acupressure', 'Baton Pass', 'Last Respects', 'Shed Tail', ], }, { name: "[Gen 9] CAP", - threads: [ - `• SV CAP Metagame Discussion`, - `• SV CAP Sample Teams`, - `• SV CAP Viability Rankings`, - ], - + desc: "The Create-A-Pokémon project is a community dedicated to exploring and understanding the competitive Pokémon metagame by designing, creating, and playtesting new Pokémon concepts.", mod: 'gen9', ruleset: ['[Gen 9] OU', '+CAP'], banlist: ['Crucibellite'], }, { - name: "[Gen 9] Battle Stadium Singles Regulation D", - - mod: 'gen9predlc', + name: "[Gen 9] BSS Reg G", + mod: 'gen9', searchShow: false, bestOfDefault: true, - ruleset: ['Flat Rules', '!! Adjust Level = 50', 'Min Source Gen = 9', 'VGC Timer'], - banlist: ['Walking Wake', 'Iron Leaves'], - }, - { - name: "[Gen 9] Battle Stadium Singles Regulation E", - - mod: 'gen9dlc1', - bestOfDefault: true, - ruleset: ['Flat Rules', '!! Adjust Level = 50', 'Min Source Gen = 9', 'VGC Timer'], - banlist: ['Walking Wake', 'Iron Leaves'], + ruleset: ['Flat Rules', '!! Adjust Level = 50', 'Min Source Gen = 9', 'VGC Timer', 'Limit One Restricted'], + restricted: ['Restricted Legendary'], }, { - name: "[Gen 9] BSS Reg F", - + name: "[Gen 9] BSS Reg H", mod: 'gen9', - searchShow: false, bestOfDefault: true, ruleset: ['Flat Rules', '!! Adjust Level = 50', 'Min Source Gen = 9', 'VGC Timer'], - banlist: [], + banlist: ['Sub-Legendary', 'Paradox', 'Gouging Fire', 'Iron Boulder', 'Iron Crown', 'Raging Bolt'], }, { - name: "[Gen 9] Dragon King Cup", - + name: "[Gen 9] Team Star Challenge", mod: 'gen9', - ruleset: [ - 'Flat Rules', '!! Adjust Level = 50', 'Min Source Gen = 9', - '! Team Preview', '! Picked Team Size', 'Max Team Size = 3', 'VGC Timer', + ruleset: ['Flat Rules', '!! Adjust Level = 50', 'Force Select = Revavroom', 'Min Source Gen = 9', 'VGC Timer'], + banlist: ['All Pokemon'], + unbanlist: [ + 'Annihilape', 'Arcanine-Base', 'Armarouge', 'Azumarill', 'Cacturne', 'Coalossal', 'Dachsbun', 'Dragalge', 'Hatterene', 'Honchkrow', + 'Houndoom', 'Kingambit', 'Klefki', 'Krookodile', 'Lucario', 'Mabosstiff', 'Muk-Base', 'Passimian', 'Pawniard', 'Primeape', + 'Revavroom', 'Skuntank', 'Torkoal', 'Toxapex', 'Toxicroak', 'Wigglytuff', ], - unbanlist: ['Koraidon', 'Miraidon'], - onValidateTeam(team) { - let dragonCount = 0; - for (const set of team) { - if (set.species === 'Koraidon' || set.species === 'Miraidon') { - dragonCount++; - } - } - if (dragonCount !== 1) { - return [`You must have exactly one Koraidon or Miraidon in your team.`]; - } - }, - onBattleStart() { - this.add('clearpoke'); - for (const pokemon of this.getAllPokemon()) { - let details = pokemon.details.replace(', shiny', ''); - if (!this.ruleTable.has('speciesrevealclause')) { - details = details - .replace(/(Greninja|Gourgeist|Pumpkaboo|Xerneas|Silvally|Urshifu|Dudunsparce)(-[a-zA-Z?-]+)?/g, '$1-*'); - } - this.add('poke', pokemon.side.id, details, ''); - } - }, }, { name: "[Gen 9] Custom Game", - mod: 'gen9', searchShow: false, debug: true, @@ -270,18 +178,13 @@ export const Formats: FormatList = [ }, { name: "[Gen 9] Random Doubles Battle", - mod: 'gen9', gameType: 'doubles', team: 'random', - ruleset: ['PotD', 'Obtainable', 'Species Clause', 'HP Percentage Mod', 'Cancel Mod', 'Illusion Level Mod'], + ruleset: ['PotD', 'Obtainable', 'Species Clause', 'HP Percentage Mod', 'Cancel Mod', 'Illusion Level Mod', 'Sleep Clause Mod'], }, { name: "[Gen 9] Doubles OU", - threads: [ - `• Doubles OU Sample Teams`, - ], - mod: 'gen9', gameType: 'doubles', ruleset: ['Standard Doubles'], @@ -289,20 +192,12 @@ export const Formats: FormatList = [ }, { name: "[Gen 9] Doubles Ubers", - threads: [ - `• Doubles Ubers`, - ], - mod: 'gen9', gameType: 'doubles', ruleset: ['Standard Doubles', '!Gravity Sleep Clause'], }, { name: "[Gen 9] Doubles UU", - threads: [ - `• Doubles UU`, - ], - mod: 'gen9', gameType: 'doubles', ruleset: ['[Gen 9] Doubles OU', 'Evasion Abilities Clause'], @@ -310,19 +205,14 @@ export const Formats: FormatList = [ }, { name: "[Gen 9] Doubles LC", - threads: [ - `• Doubles LC`, - ], - mod: 'gen9', gameType: 'doubles', searchShow: false, ruleset: ['Standard Doubles', 'Little Cup', 'Sleep Clause Mod'], - banlist: ['Basculin-White-Striped', 'Dunsparce', 'Gligar', 'Murkrow', 'Qwilfish-Hisui', 'Scyther', 'Sneasel', 'Sneasel-Hisui', 'Vulpix', 'Vulpix-Alola', 'Yanma'], + banlist: ['Basculin-White-Striped', 'Dunsparce', 'Duraludon', 'Girafarig', 'Gligar', 'Murkrow', 'Qwilfish-Hisui', 'Scyther', 'Sneasel', 'Sneasel-Hisui', 'Vulpix', 'Vulpix-Alola', 'Yanma'], }, { - name: "[Gen 9] VGC 2023 Regulation D", - + name: "[Gen 9] VGC 2023 Reg D", mod: 'gen9predlc', gameType: 'doubles', searchShow: false, @@ -331,44 +221,32 @@ export const Formats: FormatList = [ banlist: ['Walking Wake', 'Iron Leaves'], }, { - name: "[Gen 9] VGC 2023 Regulation E", - - mod: 'gen9dlc1', + name: "[Gen 9] VGC 2024 Reg G", + mod: 'gen9', gameType: 'doubles', + searchShow: false, bestOfDefault: true, - ruleset: ['Flat Rules', '!! Adjust Level = 50', 'Min Source Gen = 9', 'VGC Timer', 'Open Team Sheets'], - banlist: ['Walking Wake', 'Iron Leaves'], - }, - { - name: "[Gen 9] VGC 2023 Regulation E (Bo3)", - - mod: 'gen9dlc1', - gameType: 'doubles', - challengeShow: false, - ruleset: ['Flat Rules', '!! Adjust Level = 50', 'Min Source Gen = 9', 'VGC Timer', 'Force Open Team Sheets', 'Best of = 3'], - banlist: ['Walking Wake', 'Iron Leaves'], + ruleset: ['Flat Rules', '!! Adjust Level = 50', 'Min Source Gen = 9', 'VGC Timer', 'Open Team Sheets', 'Limit One Restricted'], + restricted: ['Restricted Legendary'], }, { - name: "[Gen 9] VGC 2024 Reg F", - + name: "[Gen 9] VGC 2024 Reg H", mod: 'gen9', gameType: 'doubles', bestOfDefault: true, ruleset: ['Flat Rules', '!! Adjust Level = 50', 'Min Source Gen = 9', 'VGC Timer', 'Open Team Sheets'], - banlist: [], + banlist: ['Sub-Legendary', 'Paradox', 'Gouging Fire', 'Iron Boulder', 'Iron Crown', 'Raging Bolt'], }, { - name: "[Gen 9] VGC 2024 Reg F (Bo3)", - + name: "[Gen 9] VGC 2024 Reg H (Bo3)", mod: 'gen9', gameType: 'doubles', challengeShow: false, ruleset: ['Flat Rules', '!! Adjust Level = 50', 'Min Source Gen = 9', 'VGC Timer', 'Force Open Team Sheets', 'Best of = 3'], - banlist: [], + banlist: ['Sub-Legendary', 'Paradox', 'Gouging Fire', 'Iron Boulder', 'Iron Crown', 'Raging Bolt'], }, { name: "[Gen 9] Doubles Custom Game", - mod: 'gen9', gameType: 'doubles', searchShow: false, @@ -387,32 +265,23 @@ export const Formats: FormatList = [ { name: "[Gen 9] 1v1", desc: `Bring three Pokémon to Team Preview and choose one to battle.`, - threads: [ - `• 1v1 Metagame Discussion`, - `• 1v1 Viability Rankings`, - ], - mod: 'gen9', ruleset: [ 'Picked Team Size = 1', 'Max Team Size = 3', 'Standard', 'Terastal Clause', 'Sleep Moves Clause', 'Accuracy Moves Clause', '!Sleep Clause Mod', ], banlist: [ - 'Arceus', 'Calyrex-Ice', 'Calyrex-Shadow', 'Chi-Yu', 'Deoxys-Base', 'Deoxys-Attack', 'Deoxys-Defense', 'Dialga', 'Dialga-Origin', 'Dragonite', - 'Eternatus', 'Flutter Mane', 'Gholdengo', 'Giratina', 'Giratina-Origin', 'Groudon', 'Ho-Oh', 'Jirachi', 'Koraidon', 'Kyogre', 'Kyurem-Black', - 'Kyurem-White', 'Lugia', 'Lunala', 'Magearna', 'Mew', 'Mewtwo', 'Mimikyu', 'Miraidon', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', - 'Ogerpon-Cornerstone', 'Palkia', 'Palkia-Origin', 'Rayquaza', 'Reshiram', 'Scream Tail', 'Shaymin-Sky', 'Snorlax', 'Solgaleo', 'Terapagos', - 'Zacian', 'Zacian-Crowned', 'Zamazenta', 'Zamazenta-Crowned', 'Zekrom', 'Moody', 'Focus Band', 'Focus Sash', 'King\'s Rock', 'Razor Fang', - 'Quick Claw', 'Acupressure', 'Perish Song', + 'Arceus', 'Archaludon', 'Calyrex-Ice', 'Calyrex-Shadow', 'Chi-Yu', 'Cinderace', 'Deoxys', 'Deoxys-Attack', 'Deoxys-Defense', 'Deoxys-Speed', 'Dialga', + 'Dialga-Origin', 'Dragonite', 'Eternatus', 'Flutter Mane', 'Gholdengo', 'Giratina', 'Giratina-Origin', 'Gouging Fire', 'Groudon', 'Ho-Oh', 'Jirachi', + 'Koraidon', 'Kyogre', 'Kyurem-Black', 'Kyurem-White', 'Lugia', 'Lunala', 'Magearna', 'Meloetta', 'Mew', 'Mewtwo', 'Mimikyu', 'Miraidon', 'Necrozma', + 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Ogerpon-Cornerstone', 'Ogerpon-Hearthflame', 'Palkia', 'Palkia-Origin', 'Rayquaza', 'Reshiram', + 'Scream Tail', 'Shaymin-Sky', 'Snorlax', 'Solgaleo', 'Terapagos', 'Zacian', 'Zacian-Crowned', 'Zamazenta', 'Zamazenta-Crowned', 'Zekrom', 'Moody', + 'Focus Band', 'Focus Sash', 'King\'s Rock', 'Razor Fang', 'Quick Claw', 'Acupressure', 'Perish Song', ], }, { name: "[Gen 9] 2v2 Doubles", desc: `Double battle where you bring four Pokémon to Team Preview and choose only two.`, - threads: [ - `• 2v2 Doubles`, - ], - mod: 'gen9', gameType: 'doubles', ruleset: [ @@ -420,146 +289,75 @@ export const Formats: FormatList = [ 'Standard Doubles', 'Accuracy Moves Clause', 'Terastal Clause', 'Sleep Clause Mod', 'Evasion Items Clause', ], banlist: [ - 'Arceus', 'Calyrex-Ice', 'Calyrex-Shadow', 'Chi-Yu', 'Dialga', 'Dialga-Origin', 'Eternatus', 'Giratina', 'Giratina-Origin', 'Groudon', 'Iron Hands', - 'Koraidon', 'Kyogre', 'Magearna', 'Mewtwo', 'Miraidon', 'Palkia', 'Palkia-Origin', 'Rayquaza', 'Tornadus-Base', 'Urshifu', 'Urshifu-Rapid-Strike', - 'Zacian', 'Zacian-Crowned', 'Zamazenta', 'Zamazenta-Crowned', 'Commander', 'Moody', 'Focus Sash', 'King\'s Rock', 'Razor Fang', 'Ally Switch', - 'Final Gambit', 'Perish Song', 'Swagger', + 'Arceus', 'Calyrex-Ice', 'Calyrex-Shadow', 'Chi-Yu', 'Deoxys-Attack', 'Dialga', 'Dialga-Origin', 'Eternatus', 'Giratina', 'Giratina-Origin', 'Groudon', + 'Ho-Oh', 'Koraidon', 'Kyogre', 'Kyurem-White', 'Lugia', 'Lunala', 'Magearna', 'Mewtwo', 'Miraidon', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Palkia', + 'Palkia-Origin', 'Rayquaza', 'Reshiram', 'Solgaleo', 'Urshifu', 'Urshifu-Rapid-Strike', 'Zacian', 'Zacian-Crowned', 'Zamazenta', 'Zamazenta-Crowned', + 'Zekrom', 'Commander', 'Moody', 'Focus Sash', 'King\'s Rock', 'Razor Fang', 'Ally Switch', 'Final Gambit', 'Perish Song', 'Swagger', ], }, { name: "[Gen 9] Anything Goes", - threads: [ - `• AG Metagame Discussion`, - `• AG Viability Rankings`, - `• AG Sample Teams`, - ], - mod: 'gen9', ruleset: ['Min Source Gen = 9', 'Obtainable', 'Team Preview', 'HP Percentage Mod', 'Cancel Mod', 'Endless Battle Clause'], }, - { - name: "[Gen 9] NFE", - desc: `Only Pokémon that can evolve are allowed.`, - threads: [ - `• NFE`, - `• NFE Resources`, - ], - - mod: 'gen9', - ruleset: ['Standard OMs', 'Not Fully Evolved', 'Sleep Moves Clause', 'Terastal Clause', 'Min Source Gen = 9'], - banlist: [ - 'Basculin-White-Striped', 'Bisharp', 'Chansey', 'Duraludon', 'Haunter', 'Magneton', 'Porygon2', 'Primeape', 'Rhydon', 'Scyther', 'Sneasel-Hisui', - 'Ursaring', 'Arena Trap', 'Magnet Pull', 'Shadow Tag', 'Baton Pass', - ], - }, { name: "[Gen 9] Ubers UU", - threads: [ - `• Ubers UU Metagame Discussion`, - `• Ubers UU Viability Rankings`, - `• Ubers UU Sample Teams`, - ], - mod: 'gen9', ruleset: ['[Gen 9] Ubers'], banlist: [ - // New Pokemon - 'Alcremie', 'Araquanid', 'Archaludon', 'Bastiodon', 'Bellossom', 'Blastoise', 'Blaziken', 'Cinccino', 'Cobalion', 'Comfey', 'Deoxys', - 'Deoxys-Attack', 'Deoxys-Defense', 'Deoxys-Speed', 'Dewgong', 'Dodrio', 'Electivire', 'Emboar', 'Entei', 'Excadrill', 'Exeggutor', - 'Exeggutor-Alola', 'Feraligatr', 'Flygon', 'Galvantula', 'Golurk', 'Gouging Fire', 'Granbull', 'Hitmonchan', 'Hitmonlee', 'Hitmontop', - 'Ho-Oh', 'Hydrapple', 'Incineroar', 'Iron Boulder', 'Iron Crown', 'Keldeo', 'Kingdra', 'Kyurem', 'Kyurem-Black', 'Kyurem-White', - 'Lanturn', 'Lapras', 'Latias', 'Latios', 'Lugia', 'Lunala', 'Magmortar', 'Malamar', 'Meganium', 'Meowstic', 'Meowstic-F', 'Metagross', - 'Minior', 'Minun', 'Necrozma', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Plusle', 'Porygon-Z', 'Primarina', 'Raging Bolt', 'Raikou', - 'Rampardos', 'Regice', 'Regigigas', 'Regirock', 'Registeel', 'Reshiram', 'Reuniclus', 'Rhyperior', 'Sceptile', 'Scrafty', 'Serperior', - 'Skarmory', 'Smeargle', 'Solgaleo', 'Suicune', 'Swampert', 'Tentacruel', 'Terapagos', 'Terrakion', 'Toucannon', 'Venusaur', 'Vileplume', - 'Virizion', 'Whimsicott', 'Zebstrika', 'Zekrom', // Ubers OU - 'Annihilape', 'Arceus-Base', 'Arceus-Fairy', 'Arceus-Ground', 'Basculegion-Base', 'Calyrex-Ice', 'Chien-Pao', 'Clodsire', 'Ditto', 'Eternatus', - 'Flutter Mane', 'Glimmora', 'Gliscor', 'Giratina-Origin', 'Great Tusk', 'Grimmsnarl', 'Groudon', 'Hatterene', 'Iron Bundle', 'Iron Treads', - 'Kingambit', 'Koraidon', 'Kyogre', 'Landorus-Therian', 'Mewtwo', 'Miraidon', 'Ogerpon-Hearthflame', 'Rayquaza', 'Regieleki', 'Ribombee', - 'Skeledirge', 'Ting-Lu', 'Toxapex', 'Zacian-Crowned', - // Ubers UUBL - 'Arceus-Electric', 'Arceus-Flying', 'Arceus-Ghost', 'Arceus-Steel', 'Arceus-Water', 'Shaymin-Sky', 'Last Respects', + 'Arceus-Normal', 'Arceus-Fairy', 'Arceus-Ground', 'Calyrex-Ice', 'Chien-Pao', 'Deoxys-Attack', 'Eternatus', 'Flutter Mane', 'Giratina-Origin', 'Glimmora', + 'Gliscor', 'Grimmsnarl', 'Groudon', 'Ho-Oh', 'Iron Bundle', 'Iron Treads', 'Kingambit', 'Koraidon', 'Kyogre', 'Kyurem-Black', 'Landorus-Therian', 'Lunala', + 'Miraidon', 'Necrozma-Dusk-Mane', 'Rayquaza', 'Ribombee', 'Skeledirge', 'Ting-Lu', 'Zacian-Crowned', + // Ubers UUBL + Lunala + 'Arceus-Dragon', 'Arceus-Fire', 'Arceus-Flying', 'Arceus-Ghost', 'Arceus-Steel', 'Arceus-Water', 'Necrozma-Dawn-Wings', 'Shaymin-Sky', 'Zekrom', ], }, { name: "[Gen 9] ZU", - threads: [ - `• ZU Metagame Discussion`, - ], - mod: 'gen9', ruleset: ['[Gen 9] PU'], - banlist: ['PU', 'ZUBL'], + banlist: ['PU', 'ZUBL', 'Unburden'], }, { name: "[Gen 9] Free-For-All", - threads: [ - `• Free-For-All`, - ], - mod: 'gen9', gameType: 'freeforall', rated: false, tournamentShow: false, - ruleset: ['Standard', '!Evasion Items Clause'], + ruleset: ['Standard', 'Sleep Moves Clause', '!Sleep Clause Mod', '!Evasion Items Clause'], banlist: [ - 'Annihilape', 'Arceus', 'Calyrex-Ice', 'Calyrex-Shadow', 'Chi-Yu', 'Darkrai', 'Deoxys-Base', 'Deoxys-Attack', 'Dialga', 'Dialga-Origin', - 'Eternatus', 'Flutter Mane', 'Giratina', 'Giratina-Origin', 'Groudon', 'Ho-Oh', 'Hoopa-Unbound', 'Iron Bundle', 'Koraidon', 'Kyogre', - 'Kyurem-White', 'Landorus-Base', 'Lugia', 'Lunala', 'Magearna', 'Mewtwo', 'Miraidon', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', - 'Palkia', 'Palkia-Origin', 'Rayquaza', 'Reshiram', 'Shaymin-Sky', 'Solgaleo', 'Spectrier', 'Ursaluna', 'Ursaluna-Bloodmoon', 'Urshifu-Base', - 'Zacian', 'Zacian-Crowned', 'Zekrom', 'Moody', 'Shadow Tag', 'Toxic Chain', 'Toxic Debris', 'Acupressure', 'Aromatic Mist', 'Baton Pass', - 'Court Change', 'Final Gambit', 'Flatter', 'Follow Me', 'Heal Pulse', 'Last Respects', 'Poison Fang', 'Rage Powder', 'Spicy Extract', - 'Swagger', 'Toxic', 'Toxic Spikes', + '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', + 'Landorus-Incarnate', 'Lugia', 'Lunala', 'Magearna', 'Mewtwo', 'Miraidon', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Ogerpon-Hearthflame', 'Palkia', + 'Palkia-Origin', 'Rayquaza', 'Reshiram', 'Shaymin-Sky', 'Solgaleo', 'Spectrier', 'Terapagos', 'Ursaluna', 'Ursaluna-Bloodmoon', 'Urshifu', 'Urshifu-Rapid-Strike', + 'Zacian', 'Zacian-Crowned', 'Zekrom', 'Moody', 'Shadow Tag', 'Toxic Chain', 'Toxic Debris', 'Acupressure', 'Aromatic Mist', 'Baton Pass', 'Coaching', + 'Court Change', 'Decorate', 'Dragon Cheer', 'Final Gambit', 'Flatter', 'Fling', 'Floral Healing', 'Follow Me', 'Heal Pulse', 'Heart Swap', 'Last Respects', + 'Malignant Chain', 'Poison Fang', 'Rage Powder', 'Skill Swap', 'Spicy Extract', 'Swagger', 'Toxic', 'Toxic Spikes', ], }, { name: "[Gen 9] LC UU", - threads: [ - `• LC UU Metagame Discussion`, - ], - mod: 'gen9', searchShow: false, ruleset: ['[Gen 9] LC'], banlist: [ - 'Corphish', 'Diglett-Alola', 'Drifloon', 'Foongus', 'Glimmet', 'Gothita', 'Grimer-Alola', 'Grookey', 'Impidimp', 'Koffing', - 'Larvesta', 'Magnemite', 'Mienfoo', 'Mudbray', 'Numel', 'Pawniard', 'Sandshrew-Alola', 'Shellder', 'Shroodle', 'Snover', - 'Stunky', 'Timburr', 'Tinkatink', 'Toedscool', 'Voltorb-Hisui', 'Vullaby', 'Wattrel', 'Zorua-Hisui', + 'Diglett-Alola', 'Drilbur', 'Foongus', 'Glimmet', 'Gothita', 'Grookey', 'Growlithe-Hisui', 'Impidimp', 'Koffing', + 'Mareanie', 'Mienfoo', 'Mudbray', 'Pawniard', 'Shellder', 'Stunky', 'Tentacool', 'Timburr', 'Tinkatink', 'Toedscool', + 'Torchic', 'Trapinch', 'Vullaby', ], }, { - name: "[Gen 9] Monothreat Dark", - desc: `Monotype where every Pokémon is required to be part Dark.`, - - mod: 'gen9', - searchShow: false, - ruleset: ['[Gen 9] Monotype', 'Force Monotype = Dark'], - }, - { - name: "[Gen 9] Monotype CAP", - desc: `Monotype where CAP Pokémon are legal.`, - threads: [ - `• Monotype CAP`, - ], - + name: "[Gen 9] NFE", + desc: `Only Pokémon that can evolve are allowed.`, mod: 'gen9', searchShow: false, - ruleset: ['[Gen 9] Monotype', '+CAP'], - banlist: ['Cawmodore', 'Fidgit', 'Hemogoblin', 'Heat Rock'], - }, - { - name: "[Gen 9] Monotype LC", - desc: `Monotype where every Pokémon must be in the first stage in their evolution line.`, - threads: [ - `• Monotype LC`, + 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', 'Porygon2', 'Primeape', 'Qwilfish-Hisui', 'Rhydon', 'Scyther', 'Sneasel', 'Sneasel-Hisui', + 'Ursaring', 'Vulpix-Base', 'Arena Trap', 'Magnet Pull', 'Shadow Tag', 'Baton Pass', ], - - mod: 'gen9', - searchShow: false, - ruleset: ['[Gen 9] LC', 'Same Type Clause', 'Terastal Clause'], - banlist: ['Damp Rock', 'Focus Band', 'Heat Rock', 'Icy Rock', 'Quick Claw'], - unbanlist: ['Diglett-Base', 'Growlithe-Hisui', 'Vulpix', 'Vulpix-Alola', 'Sticky Web'], }, // Pet Mods @@ -569,42 +367,34 @@ export const Formats: FormatList = [ section: "Pet Mods", }, { - name: "[Gen 9] VaporeMons", - desc: `A Gen 9 mod where Pokémon, moves, items, abilities, and non-stat Pokémon adjustments are added to the game.`, - threads: [ - `• VaporeMons`, - `• Spreadsheet`, - ], - - mod: 'vaporemons', - ruleset: ['Standard', 'Terastal Clause', 'VaporeMons Mod'], - banlist: ['Uber', 'AG', 'Arena Trap', 'Moody', 'Shadow Tag', 'King\'s Rock', 'Baton Pass', 'Last Respects', 'Shed Tail', 'Light Clay'], - onSwitchIn(pokemon) { - this.add('-start', pokemon, 'typechange', (pokemon.illusion || pokemon).getTypes(true).join('/'), '[silent]'); + name: "[Gen 6] Megas Revisited", + desc: `A Gen 6 metagame where every Mega Evolution was reevaluated and redesigned.`, + mod: 'gen6megasrevisited', + ruleset: ['Standard', 'Swagger Clause', 'Mega Data Mod'], + banlist: ['Uber', 'Arena Trap', 'Shadow Tag', 'Soul Dew', 'Baton Pass', 'Blaziken + Speed Boost'], + onBegin() { + 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('-message', `You can find our thread and metagame resources here:`); + this.add('-message', `https://www.smogon.com/forums/threads/3713949/`); }, }, { - name: "[Gen 1] Modern Gen 1", - desc: `A Gen 1 solomod where all Pokémon and moves from future generations are legal.`, - threads: [ - `• Modern Gen 1`, - ], - - mod: 'moderngen1', - ruleset: ['Standard', 'Partial Trapping Clause', 'Protect Clause', 'Field Effect Clause', 'Sleep Moves Clause', 'Useless Moves Clause', 'MG1 Mod'], - banlist: ['Uber', 'Fake Out', 'Confuse Ray', 'Supersonic', 'Swagger', 'Sweet Kiss', 'Flatter'], - }, - { - name: "[Gen 6] NEXT OU", - threads: [ - `• Gen-NEXT Development Thread`, - ], - - mod: 'gennext', - searchShow: false, - challengeShow: false, - ruleset: ['Obtainable', 'Standard NEXT', 'Team Preview'], - banlist: ['Uber'], + name: "[Gen 1] RBY CAP", + desc: `A Gen 1 metagame where Fakemon are added in a similar fashion to Smogon's official Create-A-Pokemon Project.`, + mod: 'gen1rbycap', + ruleset: ['Standard'], + banlist: ['Uber', 'Camouflage'], + onBegin() { + this.add('-message', `Welcome to RBY CAP!`); + this.add('-message', `This is a Generation 1 OU-based Pet Mod where Fakemon are added in a similar way to the official CAP project.`); + this.add('-message', `You can find our thread and participate here:`); + this.add('-message', `https://www.smogon.com/forums/threads/3737699/`); + }, + onSwitchIn(pokemon) { + this.add('-start', pokemon, 'typechange', (pokemon.illusion || pokemon).getTypes(true).join('/'), '[silent]'); + pokemon.apparentType = pokemon.getTypes(true).join('/'); + }, }, // Draft League @@ -615,102 +405,91 @@ export const Formats: FormatList = [ column: 1, }, { - name: "[Gen 9] Paldea Dex Draft", - - mod: 'gen9', - searchShow: false, - ruleset: ['Draft', 'Min Source Gen = 9'], - }, - { - name: "[Gen 9] Tera Preview Paldea Dex Draft", - + name: "[Gen 9] Draft", mod: 'gen9', searchShow: false, - ruleset: ['[Gen 9] Paldea Dex Draft', 'Tera Type Preview'], + teraPreviewDefault: true, + ruleset: ['Standard Draft', 'Min Source Gen = 9'], }, { name: "[Gen 9] 6v6 Doubles Draft", - mod: 'gen9', gameType: 'doubles', searchShow: false, - ruleset: ['Draft', '!Sleep Clause Mod', '!Evasion Clause', 'Min Source Gen = 9'], + teraPreviewDefault: true, + ruleset: ['Standard Draft', '!Sleep Clause Mod', '!Evasion Clause', 'Min Source Gen = 9'], }, { name: "[Gen 9] 4v4 Doubles Draft", - mod: 'gen9', gameType: 'doubles', searchShow: false, - ruleset: ['Draft', 'Item Clause', 'VGC Timer', '!Sleep Clause Mod', '!OHKO Clause', '!Evasion Clause', 'Adjust Level = 50', 'Picked Team Size = 4', 'Min Source Gen = 9'], + bestOfDefault: true, + teraPreviewDefault: true, + ruleset: ['Standard Draft', 'Item Clause = 1', 'VGC Timer', '!Sleep Clause Mod', '!OHKO Clause', '!Evasion Clause', 'Adjust Level = 50', 'Picked Team Size = 4', 'Min Source Gen = 9'], }, { name: "[Gen 9] NatDex Draft", - - mod: 'gen9', - searchShow: false, - ruleset: ['Draft', '+Unobtainable', '+Past'], - }, - { - name: "[Gen 9] Tera Preview NatDex Draft", - mod: 'gen9', searchShow: false, - ruleset: ['[Gen 9] NatDex Draft', 'Tera Type Preview'], + teraPreviewDefault: true, + ruleset: ['Standard Draft', '+Unobtainable', '+Past'], }, { name: "[Gen 9] NatDex 6v6 Doubles Draft", - mod: 'gen9', gameType: 'doubles', searchShow: false, + teraPreviewDefault: true, ruleset: ['[Gen 9] 6v6 Doubles Draft', '+Unobtainable', '+Past', '!! Min Source Gen = 3'], }, { name: "[Gen 9] NatDex LC Draft", - mod: 'gen9', searchShow: false, - ruleset: ['[Gen 9] NatDex Draft', 'Double Item Clause', 'Little Cup'], + teraPreviewDefault: true, + ruleset: ['[Gen 9] NatDex Draft', 'Item Clause = 2', 'Little Cup'], banlist: ['Dragon Rage', 'Sonic Boom'], }, { name: "[Gen 8] Galar Dex Draft", - mod: 'gen8', searchShow: false, - ruleset: ['Draft', 'Dynamax Clause'], + ruleset: ['Standard Draft', 'Dynamax Clause'], }, { name: "[Gen 8] NatDex Draft", - mod: 'gen8', searchShow: false, - ruleset: ['Draft', 'Dynamax Clause', '+Past'], + ruleset: ['Standard Draft', 'Dynamax Clause', '+Past'], }, { name: "[Gen 8] NatDex 4v4 Doubles Draft", - mod: 'gen8', gameType: 'doubles', searchShow: false, - ruleset: ['Draft', 'Item Clause', '!Sleep Clause Mod', '!OHKO Clause', '!Evasion Moves Clause', 'Adjust Level = 50', 'Picked Team Size = 4', '+Past'], + ruleset: ['Standard Draft', 'Item Clause = 1', '!Sleep Clause Mod', '!OHKO Clause', '!Evasion Moves Clause', 'Adjust Level = 50', 'Picked Team Size = 4', '+Past'], }, { name: "[Gen 7] Draft", - mod: 'gen7', searchShow: false, - ruleset: ['Draft', '+LGPE'], + ruleset: ['Standard Draft', '+LGPE'], }, { name: "[Gen 6] Draft", - mod: 'gen6', searchShow: false, - ruleset: ['Draft', 'Moody Clause', 'Swagger Clause'], + ruleset: ['Standard Draft', 'Moody Clause', 'Swagger Clause'], banlist: ['Soul Dew'], }, + { + name: "[Gen 3] Draft", + mod: 'gen3', + searchShow: false, + ruleset: ['Standard Draft', 'Swagger Clause', 'DryPass Clause', '!Team Preview'], + banlist: ['King\'s Rock', 'Quick Claw', 'Assist'], + }, // OM of the Month /////////////////////////////////////////////////////////////////// @@ -720,65 +499,46 @@ export const Formats: FormatList = [ column: 2, }, { - name: "[Gen 9] Tier Shift", - desc: `Pokémon below OU get their stats, excluding HP, boosted. UU/RUBL get +15, RU/NUBL get +20, NU/PUBL get +25, and PU or lower get +30.`, - threads: [ - `• Use/ts [pokemon] to see their adjusted stats.`, - `• Tier Shift`, - ], - - mod: 'gen9', - ruleset: ['Standard OMs', 'Sleep Moves Clause', 'Evasion Abilities Clause', 'Evasion Items Clause', 'Terastal Clause', 'Tier Shift Mod', 'Min Source Gen = 9'], + name: "[Gen 9] Passive Aggressive", + desc: `All forms of passive damage deal type-based damage based on the primary type of the Pokémon that inflicted the passive damage against the target Pokémon.`, + mod: 'passiveaggressive', + // searchShow: false, + ruleset: ['Standard OMs', 'Sleep Moves Clause', 'Evasion Items Clause', 'Terastal Clause'], banlist: [ - 'Arceus', 'Azumarill', 'Calyrex-Ice', 'Calyrex-Shadow', 'Eternatus', 'Groudon', 'Hoopa-Unbound', 'Koraidon', 'Kyogre', 'Medicham', 'Mewtwo', - 'Miraidon', 'Rayquaza', 'Zacian', 'Zacian-Crowned', 'Arena Trap', 'Drizzle', 'Moody', 'Shadow Tag', 'Heat Rock', 'King\'s Rock', 'Light Clay', - 'Razor Fang', 'Baton Pass', 'Last Respects', 'Shed Tail', + 'Annihilape', 'Arceus', 'Baxcalibur', 'Calyrex-Ice', 'Calyrex-Shadow', 'Chi-Yu', 'Chien-Pao', 'Deoxys-Attack', 'Deoxys-Normal', 'Dialga', 'Dialga-Origin', 'Eternatus', 'Flutter Mane', + 'Gholdengo', 'Giratina', 'Giratina-Origin', 'Gouging Fire', 'Groudon', 'Ho-Oh', 'Iron Bundle', 'Koraidon', 'Kyogre', 'Kyurem', 'Kyurem-Black', 'Kyurem-White', 'Landorus-Incarnate', + 'Lugia', 'Lunala', 'Magearna', 'Mewtwo', 'Miraidon', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Ogerpon-Hearthflame', 'Palafin', 'Palkia', 'Palkia-Origin', 'Raging Bolt', 'Rayquaza', + 'Reshiram', 'Shaymin-Sky', 'Sneasler', 'Solgaleo', 'Spectrier', 'Ursaluna-Bloodmoon', 'Zacian', 'Zacian-Crowned', 'Zamazenta-Crowned', 'Zekrom', 'Arena Trap', 'Moody', 'Shadow Tag', + 'Speed Boost', 'Heat Rock', 'King\'s Rock', 'Razor Fang', 'Quick Claw', 'Baton Pass', 'Last Respects', 'Shed Tail', ], - unbanlist: ['Arceus-Bug'], }, { - name: "[Gen 9] Sketchmons", - desc: `Pokémon can learn one of any move they don't normally learn.`, - threads: [ - `• Sketchmons`, - ], - + name: "[Gen 9] Almost Any Ability UU", + desc: `Almost Any Ability, but any Pokémon ranked B or higher on the AAA Viability Ranking are banned, among a few others.`, mod: 'gen9', - ruleset: ['Standard OMs', 'Sleep Moves Clause', 'Evasion Items Clause', 'Sketchmons Move Legality', 'Terastal Clause', 'Min Source Gen = 9'], + ruleset: ['[Gen 9] Almost Any Ability'], banlist: [ - 'Annihilape', 'Arceus', 'Baxcalibur', 'Calyrex-Ice', 'Calyrex-Shadow', 'Chi-Yu', 'Chien-Pao', 'Darkrai', 'Deoxys-Base', 'Deoxys-Attack', - 'Dialga', 'Dialga-Origin', 'Dondozo', 'Dragapult', 'Dragonite', 'Enamorus-Base', 'Espathra', 'Eternatus', 'Flutter Mane', 'Gholdengo', - 'Giratina', 'Giratina-Origin', 'Groudon', 'Gliscor', 'Great Tusk', 'Greninja', 'Ho-oh', 'Iron Bundle', 'Iron Moth', 'Iron Valiant', 'Komala', - 'Koraidon', 'Kyogre', 'Kyurem', 'Kyurem-Black', 'Kyurem-White', 'Landorus-Base', 'Lilligant-Hisui', 'Lugia', 'Lunala', 'Magearna', 'Manaphy', - 'Mewtwo', 'Miraidon', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Ogerpon-Hearthflame', 'Ogerpon-Wellspring', 'Palafin', 'Palkia', 'Palkia-Origin', - 'Rayquaza', 'Regieleki', 'Reshiram', 'Roaring Moon', 'Scovillain', 'Shaymin-Sky', 'Sneasler', 'Solgaleo', 'Spectrier', 'Ursaluna-Bloodmoon', - 'Urshifu', 'Urshifu-Rapid-Strike', 'Volcarona', 'Walking Wake', 'Zacian', 'Zacian-Crowned', 'Zamazenta', 'Zamazenta-Crowned', 'Zekrom', 'Arena Trap', - 'Contrary', 'Libero', 'Magnet Pull', 'Moody', 'Protean', 'Shadow Tag', 'Stench', 'Damp Rock', 'King\'s Rock', 'Light Clay', 'Razor Fang', - 'Baton Pass', 'Last Respects', 'Shed Tail', - ], - restricted: [ - 'Astral Barrage', 'Belly Drum', 'Boomburst', 'Ceaseless Edge', 'Clangorous Soul', 'Dire Claw', 'Extreme Speed', 'Gigaton Hammer', 'Glacial Lance', - 'Fillet Away', 'Jet Punch', 'Lumina Crash', 'No Retreat', 'Quiver Dance', 'Rage Fist', 'Revival Blessing', 'Shell Smash', 'Shift Gear', 'Sticky Web', - 'Tail Glow', 'Torch Song', 'Transform', 'Triple Arrows', 'V-create', 'Victory Dance', 'Wicked Blow', + // AAA OU + 'Azelf', 'Ceruledge', 'Chien-Pao', 'Cinderace', 'Cobalion', 'Corviknight', 'Deoxys-Speed', 'Electrode-Hisui', 'Empoleon', 'Garchomp', 'Gholdengo', 'Great Tusk', + 'Heatran', 'Iron Boulder', 'Iron Crown', 'Iron Hands', 'Iron Moth', 'Iron Treads', 'Kingambit', 'Latios', 'Manaphy', 'Mandibuzz', 'Meowscarada', 'Moltres-Base', + 'Ogerpon-Cornerstone', 'Ogerpon-Hearthflame', 'Ogerpon-Wellspring', 'Pecharunt', 'Primarina', 'Roaring Moon', 'Sandy Shocks', 'Scream Tail', 'Skarmory', 'Swampert', + 'Ting-Lu', 'Volcarona', 'Zamazenta', 'Zapdos', + // AAA UUBL + 'Zapdos-Galar', 'Zarude', 'Light Clay', ], }, { name: "[Gen 9] Partners in Crime", desc: `Doubles-based metagame where both active ally Pokémon share abilities and moves.`, - threads: [ - `• Partners in Crime`, - ], - mod: 'partnersincrime', gameType: 'doubles', - ruleset: ['Standard Doubles'], + ruleset: ['Standard Doubles', 'Evasion Abilities Clause'], banlist: [ - 'Annihilape', 'Arceus', 'Calyrex-Ice', 'Calyrex-Shadow', 'Chi-Yu', 'Cresselia', 'Darkrai', 'Dialga', 'Dialga-Origin', 'Enamorus-Base', - 'Eternatus', 'Flutter Mane', 'Giratina', 'Giratina-Origin', 'Groudon', 'Ho-Oh', 'Koraidon', 'Kyogre', 'Kyurem-White', 'Lugia', - 'Lunala', 'Magearna', 'Mewtwo', 'Miraidon', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Palkia', 'Palkia-Origin', 'Rayquaza', - 'Reshiram', 'Smeargle', 'Solgaleo', 'Terapagos', 'Urshifu', 'Urshifu-Rapid-Strike', 'Zacian', 'Zacian-Crowned', 'Zamazenta', - 'Zamazenta-Crowned', 'Zekrom', 'Dancer', 'Huge Power', 'Moody', 'Pure Power', 'Serene Grace', 'Shadow Tag', 'Bright Powder', - 'King\'s Rock', 'Razor Fang', 'Ally Switch', 'Last Respects', 'Revival Blessing', 'Swagger', + 'Annihilape', 'Arceus', 'Calyrex-Ice', 'Calyrex-Shadow', 'Chi-Yu', 'Cresselia', 'Darkrai', 'Deoxys-Attack', 'Dialga', 'Dialga-Origin', 'Eternatus', 'Flutter Mane', + 'Giratina', 'Giratina-Origin', 'Groudon', 'Ho-Oh', 'Koraidon', 'Kyogre', 'Kyurem-Black', 'Kyurem-White', 'Lugia', 'Lunala', 'Magearna', 'Mewtwo', 'Miraidon', + 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Palkia', 'Palkia-Origin', 'Rayquaza', 'Reshiram', 'Smeargle', 'Solgaleo', 'Terapagos', 'Urshifu', 'Urshifu-Rapid-Strike', + 'Zacian', 'Zacian-Crowned', 'Zamazenta', 'Zamazenta-Crowned', 'Zekrom', 'Contrary', 'Dancer', 'Huge Power', 'Moody', 'Pure Power', 'Serene Grace', 'Shadow Tag', + 'Stench', 'Bright Powder', 'King\'s Rock', 'Razor Fang', 'Ally Switch', 'Dragon Cheer', 'Last Respects', 'Revival Blessing', 'Swagger', ], onBegin() { for (const pokemon of this.getAllPokemon()) { @@ -799,14 +559,14 @@ export const Formats: FormatList = [ if (ally && ally.ability !== pokemon.ability) { if (!pokemon.m.innate && !BAD_ABILITIES.includes(this.toID(ally.ability))) { pokemon.m.innate = 'ability:' + ally.ability; - if (!ngas || ally.getAbility().isPermanent || pokemon.hasItem('Ability Shield')) { + if (!ngas || ally.getAbility().flags['cantsuppress'] || pokemon.hasItem('Ability Shield')) { pokemon.volatiles[pokemon.m.innate] = {id: pokemon.m.innate, target: pokemon}; pokemon.m.startVolatile = true; } } if (!ally.m.innate && !BAD_ABILITIES.includes(this.toID(pokemon.ability))) { ally.m.innate = 'ability:' + pokemon.ability; - if (!ngas || pokemon.getAbility().isPermanent || ally.hasItem('Ability Shield')) { + if (!ngas || pokemon.getAbility().flags['cantsuppress'] || ally.hasItem('Ability Shield')) { ally.volatiles[ally.m.innate] = {id: ally.m.innate, target: ally}; ally.m.startVolatile = true; } @@ -848,87 +608,66 @@ export const Formats: FormatList = [ { name: "[Gen 9] Almost Any Ability", desc: `Pokémon have access to almost any ability.`, - threads: [ - `• Almost Any Ability`, - `• AAA Resources`, - ], - mod: 'gen9', - ruleset: ['Standard OMs', '!Obtainable Abilities', 'Ability Clause = 1', 'Sleep Moves Clause', 'Terastal Clause', 'Min Source Gen = 9'], + ruleset: ['Standard OMs', '!Obtainable Abilities', 'Ability Clause = 1', 'Sleep Moves Clause', 'Terastal Clause'], banlist: [ - 'Annihilape', 'Arceus', 'Baxcalibur', 'Calyrex-Ice', 'Calyrex-Shadow', 'Darkrai', 'Deoxys-Base', 'Deoxys-Attack', 'Dialga', 'Dialga-Origin', - 'Dragapult', 'Enamorus-Base', 'Eternatus', 'Flutter Mane', 'Giratina', 'Giratina-Origin', 'Groudon', 'Hariyama', 'Ho-Oh', 'Hoopa-Unbound', - 'Iron Hands', 'Iron Valiant', 'Koraidon', 'Kyogre', 'Kyurem', 'Kyurem-Black', 'Kyurem-White', 'Lugia', 'Lunala', 'Magearna', 'Mewtwo', - 'Miraidon', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Noivern', 'Palkia', 'Palkia-Origin', 'Raging Bolt', 'Rayquaza', 'Regigigas', - 'Reshiram', 'Shaymin-Sky', 'Slaking', 'Sneasler', 'Solgaleo', 'Spectrier', 'Ursaluna-Base', 'Urshifu', 'Urshifu-Rapid-Strike', 'Weavile', - 'Zacian', 'Zacian-Crowned', 'Zamazenta-Base', 'Zekrom', 'Arena Trap', 'Comatose', 'Contrary', 'Fur Coat', 'Good as Gold', 'Gorilla Tactics', - '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', 'Toxic Debris', 'Unburden', 'Water Bubble', - 'Wonder Guard', 'King\'s Rock', 'Razor Fang', 'Baton Pass', 'Last Respects', 'Revival Blessing', 'Shed Tail', + 'Annihilape', 'Arceus', 'Baxcalibur', 'Calyrex-Ice', 'Calyrex-Shadow', 'Darkrai', 'Deoxys-Normal', 'Deoxys-Attack', 'Dialga', 'Dialga-Origin', 'Dragapult', 'Dragonite', + 'Enamorus-Incarnate', 'Eternatus', 'Flutter Mane', 'Giratina', 'Giratina-Origin', 'Gouging Fire', 'Groudon', 'Ho-Oh', 'Hoopa-Unbound', 'Iron Bundle', 'Iron Valiant', 'Keldeo', + 'Koraidon', 'Kyogre', 'Kyurem', 'Kyurem-Black', 'Kyurem-White', 'Lugia', 'Lunala', 'Magearna', 'Mewtwo', 'Miraidon', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Noivern', + 'Palkia', 'Palkia-Origin', 'Raging Bolt', 'Rayquaza', 'Regigigas', 'Reshiram', 'Shaymin-Sky', 'Slaking', 'Sneasler', 'Solgaleo', 'Spectrier', 'Urshifu', 'Urshifu-Rapid-Strike', + 'Walking Wake', 'Weavile', 'Zacian', 'Zacian-Crowned', 'Zekrom', 'Arena Trap', 'Comatose', 'Contrary', 'Fur Coat', 'Good as Gold', 'Gorilla Tactics', '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', 'Toxic Debris', 'Triage', 'Unburden', 'Water Bubble', 'Wonder Guard', 'King\'s Rock', 'Razor Fang', 'Baton Pass', 'Last Respects', + 'Shed Tail', ], }, { name: "[Gen 9] Balanced Hackmons", desc: `Anything directly hackable onto a set (EVs, IVs, forme, ability, item, and move) and is usable in local battles is allowed.`, - threads: [ - `• Balanced Hackmons`, - `• BH Resources`, - ], - mod: 'gen9', 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', ], banlist: [ - 'Calyrex-Shadow', 'Gengar-Mega', 'Groudon-Primal', 'Kartana', 'Mewtwo-Mega-Y', 'Rayquaza-Mega', 'Regigigas', 'Shedinja', 'Slaking', - 'Arena Trap', 'Comatose', 'Contrary', 'Gorilla Tactics', 'Hadron Engine', 'Huge Power', 'Illusion', 'Innards Out', 'Libero', 'Magnet Pull', - 'Moody', 'Neutralizing Gas', 'Orichalcum Pulse', 'Parental Bond', 'Poison Heal', 'Protean', 'Pure Power', 'Shadow Tag', 'Stakeout', - 'Water Bubble', 'Wonder Guard', 'Baton Pass', 'Belly Drum', 'Ceaseless Edge', 'Dire Claw', 'Electro Shot', 'Fillet Away', 'Imprison', - 'Last Respects', 'Lumina Crash', 'Photon Geyser', 'Quiver Dance', 'Rage Fist', 'Revival Blessing', 'Shed Tail', 'Substitute', 'Shell Smash', - 'Tail Glow', + 'Calyrex-Shadow', 'Deoxys-Attack', 'Diancie-Mega', 'Gengar-Mega', 'Groudon-Primal', 'Kartana', 'Mewtwo-Mega-X', 'Mewtwo-Mega-Y', 'Rayquaza-Mega', + 'Regigigas', 'Shedinja', 'Slaking', 'Arena Trap', 'Comatose', 'Contrary', 'Gorilla Tactics', 'Hadron Engine', 'Huge Power', 'Illusion', 'Innards Out', + 'Libero', 'Liquid Ooze', 'Magnet Pull', 'Moody', 'Neutralizing Gas', 'Orichalcum Pulse', 'Parental Bond', 'Poison Heal', 'Protean', 'Pure Power', + 'Shadow Tag', 'Stakeout', 'Water Bubble', 'Wonder Guard', 'Baton Pass', 'Belly Drum', 'Ceaseless Edge', 'Clangorous Soul', 'Dire Claw', 'Electro Shot', + 'Fillet Away', 'Imprison', 'Last Respects', 'Lumina Crash', 'No Retreat', 'Photon Geyser', 'Quiver Dance', 'Rage Fist', 'Revival Blessing', 'Shed Tail', + 'Substitute', 'Shell Smash', 'Tail Glow', ], }, { name: "[Gen 9] Godly Gift", desc: `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.`, - threads: [ - `• Godly Gift`, - `• Godly Gift Resources`, - ], - mod: 'gen9', - ruleset: ['Standard OMs', 'Sleep Moves Clause', 'Godly Gift Mod', 'Min Source Gen = 9'], + ruleset: ['Standard OMs', 'Sleep Moves Clause', 'Godly Gift Mod'], banlist: [ - 'Blissey', 'Calyrex-Shadow', 'Chansey', 'Koraidon', 'Miraidon', 'Arena Trap', 'Huge Power', 'Moody', 'Pure Power', 'Shadow Tag', + 'Blissey', 'Calyrex-Shadow', 'Chansey', 'Deoxys-Attack', 'Koraidon', 'Kyurem-Black', 'Miraidon', 'Arena Trap', 'Huge Power', 'Moody', 'Pure Power', 'Shadow Tag', 'Swift Swim', 'Bright Powder', 'Focus Band', 'King\'s Rock', 'Quick Claw', 'Razor Fang', 'Baton Pass', 'Last Respects', 'Shed Tail', ], restricted: [ - 'Annihilape', 'Arceus', 'Calyrex-Ice', 'Chi-Yu', 'Crawdaunt', 'Deoxys-Base', 'Deoxys-Attack', 'Dialga', 'Dialga-Origin', 'Eternatus', - 'Giratina', 'Giratina-Origin', 'Gliscor', 'Groudon', 'Ho-Oh', 'Iron Bundle', 'Kingambit', 'Kyogre', 'Kyurem-Black', 'Kyurem-White', - 'Lugia', 'Lunala', 'Magearna', 'Mewtwo', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Ogerpon-Hearthflame', 'Palafin', 'Palkia', - 'Palkia-Origin', 'Rayquaza', 'Regieleki', 'Reshiram', 'Shaymin-Sky', 'Smeargle', 'Solgaleo', 'Terapagos', 'Toxapex', 'Ursaluna', - 'Ursaluna-Bloodmoon', 'Zacian', 'Zacian-Crowned', 'Zamazenta-Crowned', 'Zekrom', + 'Alomomola', 'Annihilape', 'Arceus', 'Baxcalibur', 'Calyrex-Ice', 'Chien-Pao', 'Chi-Yu', 'Crawdaunt', 'Deoxys-Normal', 'Deoxys-Speed', 'Dialga', 'Dialga-Origin', 'Dragapult', + 'Espathra', 'Eternatus', 'Flutter Mane', 'Gholdengo', 'Giratina', 'Giratina-Origin', 'Gliscor', 'Gouging Fire', 'Groudon', 'Hawlucha', 'Ho-Oh', 'Iron Bundle', 'Kingambit', + 'Kyogre', 'Kyurem', 'Kyurem-White', 'Lugia', 'Lunala', 'Magearna', 'Mewtwo', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Ogerpon-Hearthflame', 'Palafin', 'Palkia', 'Palkia-Origin', + 'Raging Bolt', 'Rayquaza', 'Regieleki', 'Reshiram', 'Serperior', 'Shaymin-Sky', 'Smeargle', 'Solgaleo', 'Spectrier', 'Terapagos', 'Toxapex', 'Ursaluna', 'Ursaluna-Bloodmoon', + 'Volcarona', 'Zacian', 'Zacian-Crowned', 'Zamazenta-Crowned', 'Zekrom', ], }, { name: "[Gen 9] Inheritance", desc: `Pokémon may use the ability and moves of another, as long as they forfeit their own learnset.`, - threads: [ - `• Inheritance`, - ], - mod: 'gen9', - ruleset: ['Standard OMs', 'Ability Clause = 1', 'Sleep Moves Clause', 'Terastal Clause', 'Min Source Gen = 9'], + ruleset: ['Standard OMs', 'Ability Clause = 1', 'Sleep Moves Clause', 'Terastal Clause'], banlist: [ - 'Arceus', 'Calyrex-Ice', 'Calyrex-Shadow', 'Cresselia', 'Deoxys-Base', 'Deoxys-Attack', 'Dialga', 'Dialga-Origin', 'Dondozo', 'Dragapult', - 'Enamorus-Base', 'Espathra', 'Eternatus', 'Flittle', 'Flutter Mane', 'Giratina', 'Giratina-Origin', 'Groudon', 'Hoopa-Unbound', 'Ho-Oh', - 'Iron Bundle', 'Iron Valiant', 'Koraidon', 'Kyogre', 'Kyurem', 'Kyurem-Black', 'Kyurem-White', 'Lugia', 'Lunala', 'Magearna', 'Mewtwo', - 'Miraidon', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Palkia', 'Palkia-Origin', 'Rayquaza', 'Regieleki', 'Regigigas', 'Reshiram', - 'Sableye', 'Samurott-Hisui', 'Scream Tail', 'Shaymin-Sky', 'Slaking', 'Smeargle', 'Solgaleo', 'Spectrier', 'Torkoal', 'Ursaluna-Base', - 'Urshifu-Base', 'Zacian', 'Zacian-Crowned', 'Zamazenta', 'Zamazenta-Crowned', 'Zekrom', 'Arena Trap', 'Drizzle', 'Huge Power', 'Imposter', - 'Magnet Pull', 'Moody', 'Poison Heal', 'Pure Power', 'Shadow Tag', 'Stakeout', 'King\'s Rock', 'Razor Fang', 'Baton Pass', 'Fillet Away', - 'Last Respects', 'Rage Fist', 'Shed Tail', 'Shell Smash', + 'Arceus', 'Calyrex-Ice', 'Calyrex-Shadow', 'Chien-Pao', 'Cresselia', 'Deoxys-Normal', 'Deoxys-Attack', 'Dialga', 'Dialga-Origin', 'Dondozo', 'Dragapult', 'Eternatus', + 'Flutter Mane', 'Giratina', 'Giratina-Origin', 'Groudon', 'Hoopa-Unbound', 'Ho-Oh', 'Iron Bundle', 'Iron Valiant', 'Koraidon', 'Kyogre', 'Kyurem', 'Kyurem-Black', + 'Kyurem-White', 'Lugia', 'Lunala', 'Magearna', 'Mewtwo', 'Miraidon', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Palkia', 'Palkia-Origin', 'Pecharunt', 'Rayquaza', + 'Regieleki', 'Regigigas', 'Reshiram', 'Sableye', 'Scream Tail', 'Shaymin-Sky', 'Slaking', 'Smeargle', 'Solgaleo', 'Spectrier', 'Urshifu-Single-Strike', 'Ursaluna-Base', + 'Weavile', 'Zacian', 'Zacian-Crowned', 'Zamazenta', 'Zamazenta-Crowned', 'Zekrom', 'Arena Trap', 'Drizzle', 'Drought', 'Good as Gold', 'Huge Power', 'Imposter', + 'Magic Bounce', 'Magnet Pull', 'Moody', 'Neutralizing Gas', 'Poison Heal', 'Pure Power', 'Shadow Tag', 'Speed Boost', 'Stakeout', 'Water Bubble', 'King\'s Rock', + 'Razor Fang', 'Baton Pass', 'Ceaseless Edge', 'Fillet Away', 'Last Respects', 'Quiver Dance', 'Rage Fist', 'Shed Tail', 'Shell Smash', ], getEvoFamily(speciesid) { let species = Dex.species.get(speciesid); @@ -940,11 +679,10 @@ export const Formats: FormatList = [ return species.id; }, validateSet(set, teamHas) { - const unreleased = (pokemon: Species) => pokemon.tier === "Unreleased" && pokemon.isNonstandard === "Unobtainable"; if (!teamHas.abilityMap) { teamHas.abilityMap = Object.create(null); for (const pokemon of Dex.species.all()) { - if (pokemon.isNonstandard || (unreleased(pokemon) && !this.ruleTable.has('+unobtainable'))) continue; + if (pokemon.isNonstandard && !this.ruleTable.has(`+pokemontag:${this.toID(pokemon.isNonstandard)}`)) continue; if (pokemon.battleOnly) continue; if (this.ruleTable.isBannedSpecies(pokemon)) continue; @@ -964,7 +702,7 @@ export const Formats: FormatList = [ const species = this.dex.species.get(set.species); if (!species.exists || species.num < 1) return [`The Pok\u00e9mon "${set.species}" does not exist.`]; - if (species.isNonstandard || (unreleased(species) && !this.ruleTable.has('+unobtainable'))) { + if (species.isNonstandard && !this.ruleTable.has(`+pokemontag:${this.toID(species.isNonstandard)}`)) { return [`${species.name} is not obtainable in Generation ${this.dex.gen}.`]; } @@ -995,8 +733,8 @@ export const Formats: FormatList = [ set.species = donorSpecies.name; set.name = donorSpecies.baseSpecies; - if (["Iron Leaves", "Walking Wake"].includes(donorSpecies.name) || - ["Iron Leaves", "Walking Wake"].includes(species.name)) { + const annoyingPokemon = ["Iron Leaves", "Walking Wake", "Iron Boulder", "Gouging Fire", "Iron Crown", "Raging Bolt"]; + if (annoyingPokemon.includes(donorSpecies.name) || annoyingPokemon.includes(species.name)) { set.hpType = "Dark"; } const problems = this.validateSet(set, teamHas); @@ -1017,14 +755,14 @@ export const Formats: FormatList = [ return [`${name} has an illegal set with an ability from ${this.dex.species.get(pokemonWithAbility[0]).name}.`]; } - // Protocol: Include the data of the donor species in the `ability` data slot. + // Protocol: Include the data of the donor species in the `pokeball` data slot. // Afterwards, we are going to reset the name to what the user intended. - set.ability = `${set.ability}0${canonicalSource}`; + set.pokeball = `${set.pokeball}0${canonicalSource}`; return null; }, onValidateTeam(team, f, teamHas) { if (this.ruleTable.has('abilityclause')) { - const abilityTable = new Map(); + const abilityTable = new this.dex.Multiset(); const base: {[k: string]: string} = { airlock: 'cloudnine', armortail: 'queenlymajesty', @@ -1050,13 +788,13 @@ export const Formats: FormatList = [ let ability = this.toID(set.ability.split('0')[0]); if (!ability) continue; if (ability in base) ability = base[ability] as ID; - if ((abilityTable.get(ability) || 0) >= num) { + if (abilityTable.get(ability) >= num) { return [ `You are limited to ${num} of each ability by ${num} Ability Clause.`, `(You have more than ${num} ${this.dex.abilities.get(ability).name} variants)`, ]; } - abilityTable.set(ability, (abilityTable.get(ability) || 0) + 1); + abilityTable.add(ability); } } @@ -1091,11 +829,11 @@ export const Formats: FormatList = [ }, onBegin() { for (const pokemon of this.getAllPokemon()) { - if (pokemon.baseAbility.includes('0')) { - const donor = pokemon.baseAbility.split('0')[1]; + if (pokemon.pokeball.includes('0')) { + const donor = pokemon.pokeball.split('0')[1]; pokemon.m.donor = this.toID(donor); - pokemon.baseAbility = this.toID(pokemon.baseAbility.split('0')[0]); - pokemon.ability = pokemon.baseAbility; + // @ts-ignore + pokemon.pokeball = this.toID(pokemon.pokeball.split('0')[0]); } } }, @@ -1110,22 +848,17 @@ export const Formats: FormatList = [ { name: "[Gen 9] Mix and Mega", desc: `Mega evolve any Pokémon with any mega stone, or transform them with Primal orbs, Origin orbs, and Rusted items with no limit. Mega and Primal boosts based on form changes from gen 7.`, - threads: [ - `• Mix and Mega`, - `• Mix and Mega Resources`, - ], - mod: 'mixandmega', - ruleset: ['Standard OMs', 'Evasion Items Clause', 'Evasion Abilities Clause', 'Sleep Moves Clause', 'Terastal Clause', 'Min Source Gen = 9'], + ruleset: ['Standard OMs', 'Evasion Items Clause', 'Evasion Abilities Clause', 'Sleep Moves Clause', 'Terastal Clause'], banlist: [ - 'Calyrex-Shadow', 'Koraidon', 'Kyogre', 'Miraidon', 'Moody', 'Rusted Sword', 'Shadow Tag', 'Beedrillite', 'Blazikenite', 'Gengarite', - 'Kangaskhanite', 'Mawilite', 'Medichamite', 'Pidgeotite', 'Baton Pass', 'Shed Tail', + 'Calyrex-Shadow', 'Koraidon', 'Kyogre', 'Miraidon', 'Moody', 'Shadow Tag', 'Beedrillite', 'Blazikenite', 'Gengarite', + 'Kangaskhanite', 'Mawilite', 'Medichamite', 'Pidgeotite', 'Red Orb', 'Rusted Sword', 'Baton Pass', 'Shed Tail', ], restricted: [ - 'Arceus', 'Basculegion-Base', 'Calyrex-Ice', 'Deoxys-Base', 'Deoxys-Attack', 'Dialga', 'Dragapult', 'Enamorus-Base', 'Eternatus', - 'Flutter Mane', 'Gengar', 'Gholdengo', 'Giratina', 'Groudon', 'Ho-Oh', 'Iron Bundle', 'Jolteon', 'Kilowattrel', 'Kyurem-Black', - 'Kyurem-White', 'Lunala', 'Manaphy', 'Mewtwo', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Palkia', 'Rayquaza', 'Regigigas', - 'Reshiram', 'Slaking', 'Sneasler', 'Ursaluna-Bloodmoon', 'Urshifu-Base', 'Zacian', 'Zekrom', + 'Arceus', 'Basculegion-M', 'Calyrex-Ice', 'Deoxys-Normal', 'Deoxys-Attack', 'Dialga', 'Dragapult', 'Eternatus', 'Flutter Mane', + 'Gengar', 'Gholdengo', 'Giratina', 'Gouging Fire', 'Groudon', 'Ho-Oh', 'Iron Bundle', 'Kyurem-Black', 'Kyurem-White', 'Lunala', + 'Manaphy', 'Mewtwo', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Palkia', 'Rayquaza', 'Regigigas', 'Reshiram', 'Slaking', + 'Sneasler', 'Solgaleo', 'Ursaluna-Bloodmoon', 'Urshifu-Single-Strike', 'Zacian', 'Zekrom', ], onValidateTeam(team) { const itemTable = new Set(); @@ -1183,25 +916,20 @@ export const Formats: FormatList = [ { name: "[Gen 9] Shared Power", desc: `Once a Pokémon switches in, its ability is shared with the rest of the team.`, - threads: [ - `• Shared Power`, - ], - mod: 'sharedpower', - ruleset: ['Standard OMs', 'Evasion Abilities Clause', 'Evasion Items Clause', 'Sleep Moves Clause', 'Min Source Gen = 9'], + ruleset: ['Standard OMs', 'Evasion Abilities Clause', 'Evasion Items Clause', 'Sleep Moves Clause'], banlist: [ - 'Arceus', 'Calyrex-Shadow', 'Chien-Pao', 'Clefable', 'Deoxys-Base', 'Deoxys-Attack', 'Dondozo', 'Eternatus', 'Flutter Mane', - 'Greninja', 'Kingambit', 'Koraidon', 'Magearna', 'Miraidon', 'Necrozma-Dusk-Mane', 'Ogerpon-Hearthflame', 'Rayquaza', 'Shaymin-Sky', - 'Terapagos', 'Zacian', 'Zacian-Crowned', 'Zamazenta-Crowned', 'Arena Trap', 'Chlorophyll', 'Magnet Pull', 'Moody', 'Neutralizing Gas', - 'Regenerator', 'Shadow Tag', 'Speed Boost', 'Stench', 'Swift Swim', 'Unburden', 'King\'s Rock', 'Leppa Berry', 'Razor Fang', - 'Starf Berry', 'Baton Pass', 'Extreme Speed', 'Last Respects', + 'Arceus', 'Calyrex-Ice', 'Calyrex-Shadow', 'Chi-Yu', 'Chien-Pao', 'Conkeldurr', 'Deoxys-Attack', 'Eternatus', 'Greninja', 'Iron Crown', 'Kingambit', 'Kyogre', 'Kyurem-Black', + 'Kyurem-White', 'Koraidon', 'Lunala', 'Magearna', 'Mewtwo', 'Miraidon', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Ogerpon-Hearthflame', 'Palafin', 'Rayquaza', 'Regieleki', + 'Reshiram', 'Rillaboom', 'Scizor', 'Shaymin-Sky', 'Zacian', 'Zacian-Crowned', 'Zamazenta-Crowned', 'Zekrom', 'Arena Trap', 'Moody', 'Neutralizing Gas', 'Shadow Tag', + 'Speed Boost', 'Stench', 'Swift Swim', 'King\'s Rock', 'Leppa Berry', 'Razor Fang', 'Starf Berry', 'Baton Pass', 'Extreme Speed', 'Last Respects', ], unbanlist: ['Arceus-Bug', 'Arceus-Dragon', 'Arceus-Fire', 'Arceus-Ice'], restricted: [ - 'Armor Tail', 'Comatose', 'Contrary', 'Dazzling', 'Fur Coat', 'Gale Wings', 'Good as Gold', 'Huge Power', 'Illusion', 'Imposter', - 'Magic Bounce', 'Magic Guard', 'Mold Breaker', 'Multiscale', 'Poison Heal', 'Prankster', 'Protosynthesis', 'Pure Power', 'Purifying Salt', - 'Queenly Majesty', 'Quick Draw', 'Quick Feet', 'Sand Rush', 'Shadow Shield', 'Simple', 'Slush Rush', 'Stakeout', 'Stamina', 'Sturdy', - 'Surge Surfer', 'Teravolt', 'Tinted Lens', 'Triage', 'Turboblaze', 'Unaware', 'Water Bubble', + 'Armor Tail', 'Chlorophyll', 'Comatose', 'Contrary', 'Dazzling', 'Fur Coat', 'Gale Wings', 'Good as Gold', 'Huge Power', 'Ice Scales', 'Illusion', 'Imposter', + 'Magic Bounce', 'Magic Guard', 'Magnet Pull', 'Mold Breaker', 'Multiscale', 'Poison Heal', 'Prankster', 'Protosynthesis', 'Psychic Surge', 'Pure Power', + 'Purifying Salt', 'Quark Drive', 'Queenly Majesty', 'Quick Draw', 'Quick Feet', 'Regenerator', 'Sand Rush', 'Simple', 'Slush Rush', 'Stakeout', 'Stamina', + 'Sturdy', 'Surge Surfer', 'Technician', 'Tinted Lens', 'Triage', 'Unaware', 'Unburden', 'Water Bubble', ], onValidateRule() { if (this.format.gameType !== 'singles') { @@ -1250,37 +978,26 @@ export const Formats: FormatList = [ { name: "[Gen 9] STABmons", desc: `Pokémon can use any move of their typing, in addition to the moves they can normally learn.`, - threads: [ - `• STABmons`, - `• STABmons Resources`, - ], - mod: 'gen9', - ruleset: ['Standard OMs', 'STABmons Move Legality', 'Sleep Moves Clause', 'Min Source Gen = 9'], + ruleset: ['Standard OMs', 'STABmons Move Legality', 'Sleep Moves Clause', 'Terastal Clause'], banlist: [ - 'Arceus', 'Azumarill', 'Basculegion', 'Basculegion-F', 'Baxcalibur', 'Calyrex-Ice', 'Calyrex-Shadow', 'Chi-Yu', 'Chien-Pao', 'Cloyster', - 'Darkrai', 'Deoxys-Base', 'Deoxys-Attack', 'Dialga', 'Dialga-Origin', 'Dragapult', 'Dragonite', 'Enamorus-Base', 'Eternatus', 'Flutter Mane', - 'Garchomp', 'Giratina', 'Giratina-Origin', 'Groudon', 'Ho-Oh', 'Iron Bundle', 'Komala', 'Koraidon', 'Kyogre', 'Kyurem-Black', 'Kyurem-White', - 'Landorus-Base', 'Lilligant-Hisui', 'Lugia', 'Lunala', 'Magearna', 'Manaphy', 'Mewtwo', 'Miraidon', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', - 'Ogerpon-Hearthflame', 'Palkia', 'Palkia-Origin', 'Porygon-Z', 'Rayquaza', 'Regieleki', 'Reshiram', 'Roaring Moon', 'Shaymin-Sky', 'Solgaleo', - 'Spectrier', 'Terapagos', 'Ursaluna', 'Ursaluna-Bloodmoon', 'Urshifu-Base', 'Walking Wake', 'Zacian', 'Zacian-Crowned', 'Zamazenta', - 'Zamazenta-Crowned', 'Zekrom', 'Zoroark-Hisui', 'Arena Trap', 'Moody', 'Shadow Tag', 'Damp Rock', 'King\'s Rock', 'Razor Fang', 'Baton Pass', - 'Shed Tail', + 'Araquanid', 'Arceus', 'Azumarill', 'Baxcalibur', 'Calyrex-Ice', 'Calyrex-Shadow', 'Chi-Yu', 'Chien-Pao', 'Deoxys-Normal', 'Deoxys-Attack', 'Dialga', 'Dialga-Origin', 'Dragapult', + 'Dragonite', 'Enamorus-Incarnate', 'Eternatus', 'Flutter Mane', 'Garchomp', 'Giratina', 'Giratina-Origin', 'Gouging Fire', 'Groudon', 'Ho-Oh', 'Iron Bundle', 'Kingambit', 'Komala', + 'Koraidon', 'Kyogre', 'Kyurem-Base', 'Kyurem-Black', 'Kyurem-White', 'Landorus-Incarnate', 'Lilligant-Hisui', 'Lugia', 'Lunala', 'Magearna', 'Manaphy', 'Mewtwo', 'Miraidon', + 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Ogerpon-Hearthflame', 'Ogerpon-Wellspring', 'Palkia', 'Palkia-Origin', 'Porygon-Z', 'Rayquaza', 'Reshiram', 'Roaring Moon', 'Shaymin-Sky', + 'Solgaleo', 'Spectrier', 'Terapagos', 'Ursaluna', 'Ursaluna-Bloodmoon', 'Urshifu-Single-Strike', 'Zacian', 'Zacian-Crowned', 'Zamazenta-Crowned', 'Zekrom', 'Zoroark-Hisui', 'Arena Trap', + 'Moody', 'Shadow Tag', 'King\'s Rock', 'Razor Fang', 'Baton Pass', 'Final Gambit', 'Last Respects', 'Rage Fist', 'Shed Tail', ], restricted: [ - 'Acupressure', 'Belly Drum', 'Clangorous Soul', 'Dire Claw', 'Extreme Speed', 'Fillet Away', 'Gigaton Hammer', 'Last Respects', 'No Retreat', - 'Revival Blessing', 'Shell Smash', 'Shift Gear', 'Triple Arrows', 'V-create', 'Victory Dance', 'Wicked Blow', + 'Astral Barrage', 'Acupressure', 'Belly Drum', 'Clangorous Soul', 'Ceaseless Edge', 'Dire Claw', 'Dragon Energy', 'Electro Shot', 'Extreme Speed', 'Fillet Away', + 'Gigaton Hammer', 'No Retreat', 'Revival Blessing', 'Shell Smash', 'Shift Gear', 'Triple Arrows', 'V-create', 'Victory Dance', 'Wicked Blow', 'Wicked Torque', ], }, { - name: "[Gen 6] Pure Hackmons", + name: "[Gen 7] Pure Hackmons", desc: `Anything that can be hacked in-game and is usable in local battles is allowed.`, - threads: [ - `• ORAS Pure Hackmons`, - ], - - mod: 'gen6', - ruleset: ['-Nonexistent', 'Team Preview', 'HP Percentage Mod', 'Cancel Mod', 'Endless Battle Clause', 'EV limit = 510'], + mod: 'gen7', + ruleset: ['-Nonexistent', 'Team Preview', 'HP Percentage Mod', 'Cancel Mod', 'Endless Battle Clause'], }, // Challengeable OMs @@ -1290,60 +1007,71 @@ export const Formats: FormatList = [ section: "Challengeable OMs", column: 2, }, + { + 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', 'Sleep Moves Clause', '350 Cup Mod', 'Evasion Clause'], + banlist: ['Calyrex-Shadow', 'Flittle', 'Gastly', 'Miraidon', 'Pikachu', 'Rufflet', 'Arena Trap', 'Moody', 'Shadow Tag', 'Eviolite', 'Baton Pass'], + }, { name: "[Gen 9] Camomons", desc: `Pokémon have their types set to match their first two moves.`, - threads: [ - `• Camomons`, - ], - mod: 'gen9', searchShow: false, - ruleset: ['Standard OMs', 'Sleep Clause Mod', 'Evasion Items Clause', 'Evasion Abilities Clause', 'Terastal Clause', 'Camomons Mod', 'Min Source Gen = 9'], + ruleset: ['Standard OMs', 'Sleep Clause Mod', 'Evasion Items Clause', 'Evasion Abilities Clause', 'Terastal Clause', 'Camomons Mod'], banlist: [ - 'Arceus', 'Baxcalibur', 'Calyrex-Ice', 'Calyrex-Shadow', 'Chi-Yu', 'Chien-Pao', 'Darkrai', 'Deoxys-Base', 'Deoxys-Attack', 'Dialga', 'Dialga-Origin', - 'Dragonite', 'Drednaw', 'Enamorus-Base', 'Espathra', 'Eternatus', 'Flutter Mane', 'Giratina', 'Giratina-Origin', 'Groudon', 'Ho-Oh', 'Iron Bundle', - 'Iron Valiant', 'Kommo-o', 'Koraidon', 'Kyogre', 'Kyurem', 'Kyurem-Black', 'Kyurem-White', 'Landorus-Base', 'Lugia', 'Lunala', 'Magearna', 'Manaphy', + 'Arceus', 'Baxcalibur', 'Calyrex-Ice', 'Calyrex-Shadow', 'Chi-Yu', 'Chien-Pao', 'Darkrai', 'Deoxys-Normal', 'Deoxys-Attack', 'Deoxys-Speed', 'Dialga', + 'Dialga-Origin', 'Dragonite', 'Drednaw', 'Enamorus-Incarnate', 'Espathra', 'Eternatus', 'Flutter Mane', 'Giratina', 'Giratina-Origin', 'Groudon', 'Ho-Oh', + 'Iron Bundle', 'Kommo-o', 'Koraidon', 'Kyogre', 'Kyurem', 'Kyurem-Black', 'Kyurem-White', 'Landorus-Incarnate', 'Lugia', 'Lunala', 'Magearna', 'Manaphy', 'Mewtwo', 'Miraidon', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Palkia', 'Palkia-Origin', 'Rayquaza', 'Reshiram', 'Roaring Moon', 'Shaymin-Sky', - 'Sneasler', 'Solgaleo', 'Spectrier', 'Tornadus-Therian', 'Volcarona', 'Zacian', 'Zacian-Crowned', 'Zamazenta-Crowned', 'Zekrom', 'Arena Trap', 'Moody', - 'Shadow Tag', 'King\'s Rock', 'Light Clay', 'Razor Fang', 'Baton Pass', 'Last Respects', 'Shed Tail', + 'Sneasler', 'Solgaleo', 'Spectrier', 'Tornadus-Therian', 'Ursaluna-Bloodmoon', 'Volcarona', 'Zacian', 'Zacian-Crowned', 'Zamazenta-Crowned', 'Zekrom', + 'Arena Trap', 'Moody', 'Shadow Tag', 'Booster Energy', 'King\'s Rock', 'Light Clay', 'Razor Fang', 'Baton Pass', 'Last Respects', 'Shed Tail', + ], + }, + { + name: "[Gen 9] Category Swap", + desc: `All Special moves become Physical, and all Physical moves become Special.`, + mod: 'gen9', + searchShow: false, + ruleset: ['Standard OMs', 'Sleep Clause Mod', 'Category Swap Mod'], + banlist: [ + 'Arceus', 'Calyrex-Ice', 'Calyrex-Shadow', 'Chi-Yu', 'Darkrai', 'Deoxys-Normal', 'Deoxys-Attack', 'Deoxys-Speed', 'Dialga', 'Dialga-Origin', 'Dragapult', 'Eternatus', + 'Giratina', 'Giratina-Origin', 'Groudon', 'Ho-Oh', 'Iron Valiant', 'Koraidon', 'Kyogre', 'Kyurem', 'Kyurem-Black', 'Kyurem-White', 'Landorus-Incarnate', 'Lugia', 'Lunala', + 'Magearna', 'Mewtwo', 'Miraidon', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Palkia', 'Palkia-Origin', 'Rayquaza', 'Regieleki', 'Reshiram', 'Roaring Moon', 'Solgaleo', + 'Spectrier', 'Terapagos', 'Volcarona', 'Zacian', 'Zacian-Crowned', 'Zamazenta-Crowned', 'Zekrom', 'Arena Trap', 'Moody', 'Shadow Tag', 'Damp Rock', 'King\'s Rock', + 'Razor Fang', 'Baton Pass', 'Draco Meteor', 'Last Respects', 'Overheat', 'Shed Tail', ], }, { name: "[Gen 9] Convergence", desc: `Allows all Pokémon that have identical types to share moves and abilities.`, - threads: [ - `• Convergence`, - ], - mod: 'gen9', searchShow: false, - ruleset: ['Standard OMs', 'Sleep Clause Mod', 'Convergence Legality', 'Terastal Clause', '!Obtainable Abilities', 'Min Source Gen = 9'], + ruleset: ['Standard OMs', 'Sleep Clause Mod', 'Convergence Legality', 'Terastal Clause', '!Obtainable Abilities'], banlist: [ - 'Arceus', 'Calyrex-Ice', 'Calyrex-Shadow', 'Chi-Yu', 'Chien-Pao', 'Darkrai', 'Dialga', 'Dialga-Origin', 'Dondozo', 'Eternatus', 'Flutter Mane', - 'Giratina', 'Giratina-Origin', 'Groudon', 'Inteleon', 'Iron Bundle', 'Iron Hands', 'Koraidon', 'Kyogre', 'Landorus-Base', 'Lilligant-Hisui', - 'Magearna', 'Manaphy', 'Mewtwo', 'Miraidon', 'Ogerpon-Hearthflame', 'Palafin', 'Palkia', 'Palkia-Origin', 'Rayquaza', 'Regieleki', 'Shaymin-Sky', - 'Slaking', 'Spectrier', 'Urshifu-Base', 'Urshifu-Rapid-Strike', 'Walking Wake', 'Zacian', 'Zacian-Crowned', 'Zamazenta', 'Zamazenta-Crowned', - 'Arena Trap', 'Comatose', 'Drizzle', 'Imposter', 'Moody', 'Pure Power', 'Shadow Tag', 'Speed Boost', 'Heat Rock', 'King\'s Rock', 'Light Clay', - 'Razor Fang', 'Baton Pass', 'Extreme Speed', 'Last Respects', 'Population Bomb', 'Quiver Dance', 'Rage Fist', 'Shed Tail', 'Shell Smash', 'Spore', - 'Transform', + 'Arceus', 'Calyrex-Ice', 'Calyrex-Shadow', 'Chi-Yu', 'Chien-Pao', 'Darkrai', 'Deoxys-Normal', 'Deoxys-Attack', 'Deoxys-Speed', 'Dialga', 'Dialga-Origin', + 'Dondozo', 'Eternatus', 'Flutter Mane', 'Giratina', 'Giratina-Origin', 'Groudon', 'Ho-oh', 'Inteleon', 'Iron Bundle', 'Iron Hands', 'Koraidon', 'Kyogre', + 'Kyurem-Black', 'Kyurem-White', 'Landorus-Incarnate', 'Lilligant-Hisui', 'Lugia', 'Lunala', 'Magearna', 'Manaphy', 'Mewtwo', 'Miraidon', 'Necrozma-Dawn-Wings', + 'Necrozma-Dusk-Mane', 'Ogerpon-Hearthflame', 'Palafin', 'Palkia', 'Palkia-Origin', 'Primarina', 'Rayquaza', 'Regieleki', 'Regigigas', 'Reshiram', 'Shaymin-Sky', + 'Solgaleo', 'Slaking', 'Smeargle', 'Spectrier', 'Urshifu-Single-Strike', 'Urshifu-Rapid-Strike', 'Walking Wake', 'Zacian', 'Zacian-Crowned', 'Zamazenta', + 'Zamazenta-Crowned', 'Zekrom', 'Arena Trap', 'Comatose', 'Contrary', 'Drizzle', 'Imposter', 'Moody', 'Pure Power', 'Shadow Tag', 'Speed Boost', 'Unburden', + 'Heat Rock', 'King\'s Rock', 'Light Clay', 'Razor Fang', 'Baton Pass', 'Boomburst', 'Extreme Speed', 'Last Respects', 'Population Bomb', '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.`, - threads: [ - `• Cross Evolution`, - ], - mod: 'gen9', searchShow: false, - ruleset: ['Standard OMs', 'Sleep Moves Clause', 'Terastal Clause', 'Min Source Gen = 9'], + ruleset: ['Standard OMs', 'Sleep Moves Clause', 'Terastal Clause'], banlist: [ - 'Basculin-White-Striped', 'Kyogre', 'Miraidon', 'Sneasel', 'Sneasel-Hisui', 'Ursaring', 'Arena Trap', 'Huge Power', 'Pure Power', - 'Shadow Tag', 'Speed Boost', 'Moody', 'King\'s Rock', 'Razor Fang', 'Baton Pass', 'Revival Blessing', + '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: ['Frosmoth', 'Gallade', 'Gholdengo', 'Lilligant-Hisui', 'Lunala', 'Solgaleo'], + restricted: ['Espathra', 'Frosmoth', 'Gallade', 'Lilligant-Hisui', 'Lunala', 'Solgaleo'], onValidateTeam(team) { const nums = new Set(); for (const set of team) { @@ -1466,27 +1194,86 @@ export const Formats: FormatList = [ } }, }, + { + 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.`, + mod: 'gen9', + searchShow: false, + ruleset: ['Standard OMs', 'Sleep Moves Clause', 'Fervent Impersonation Mod', '!Nickname Clause'], + banlist: ['Arena Trap', 'Moody', 'Shadow Tag', 'King\'s Rock', 'Razor Fang', 'Baton Pass', 'Dire Claw', 'Shed Tail', 'Last Respects'], + restricted: [ + 'Arceus', 'Calyrex-Ice', 'Calyrex-Shadow', 'Chi-Yu', 'Chien-Pao', 'Deoxys-Normal', 'Deoxys-Attack', 'Dialga', 'Dialga-Origin', 'Espathra', 'Eternatus', + 'Flutter Mane', 'Giratina', 'Giratina-Origin', 'Groudon', 'Ho-Oh', 'Koraidon', 'Kyogre', 'Kyurem-Black', 'Kyurem-White', 'Lugia', 'Lunala', 'Magearna', + 'Mewtwo', 'Miraidon', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Palafin', 'Palkia', 'Palkia-Origin', 'Rayquaza', 'Regieleki', 'Reshiram', 'Shaymin-Sky', + 'Solgaleo', 'Terapagos', 'Urshifu-Single-Strike', 'Zacian', 'Zacian-Crowned', 'Zamazenta-Crowned', 'Zekrom', + ], + // Implemented the mechanics as a Rule because I'm too lazy to make battles read base format for `onResidual` at the moment + }, + { + name: "[Gen 9] Foresighters", + desc: `Moves in the first moveslot will be delayed by two turns.`, + mod: 'gen9', + searchShow: false, + ruleset: ['Standard OMs', 'Sleep Moves Clause', 'Terastal Clause'], + banlist: [ + 'Annihilape', 'Arceus', 'Baxcalibur', 'Calyrex-Ice', 'Calyrex-Shadow', 'Chien-Pao', 'Chi-Yu', 'Deoxys-Normal', 'Deoxys-Attack', 'Dialga', 'Dialga-Origin', 'Espathra', + 'Eternatus', 'Flutter Mane', 'Giratina', 'Giratina-Origin', 'Groudon', 'Ho-Oh', 'Iron Bundle', 'Koraidon', 'Kyogre', 'Kyurem-Black', 'Kyurem-White', 'Landorus-Incarnate', + 'Lugia', 'Lunala', 'Magearna', 'Mewtwo', 'Miraidon', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Palafin', 'Palkia', 'Palkia-Origin', 'Rayquaza', 'Reshiram', 'Shaymin-Sky', + 'Solgaleo', 'Spectrier', 'Ursaluna-Bloodmoon', 'Urshifu', 'Urshifu-Rapid-Strike', 'Zacian', 'Zacian-Crowned', 'Zamazenta-Crowned', 'Zekrom', 'Arena Trap', 'Moody', 'Shadow Tag', + 'Sand Veil', 'Snow Cloak', 'King\'s Rock', 'Razor Fang', 'Baton Pass', 'Dire Claw', 'Last Respects', 'Shed Tail', + ], + restricted: [ + 'Belly Drum', 'Clangorous Soul', 'Dragon Dance', 'Endeavor', 'Quiver Dance', 'Shell Smash', 'Shift Gear', 'Tail Glow', 'Tidy Up', 'Victory Dance', + ], + onValidateSet(set) { + const fsMove = this.dex.moves.get(set.moves[0]); + if (this.ruleTable.isRestricted(`move:${fsMove.id}`)) { + return [`${set.name}'s move ${fsMove.name} cannot be used as a future move.`]; + } + }, + onModifyMove(move, pokemon) { + if (move.id === pokemon.moveSlots[0].id && !move.flags['futuremove']) { + move.flags['futuremove'] = 1; + delete move.flags['protect']; + move.onTry = function (source, t) { + if (!t.side.addSlotCondition(t, 'futuremove')) { + this.hint('Future moves fail when the targeted slot already has a future move focused on it.'); + return false; + } + const moveData = this.dex.getActiveMove(move.id); + moveData.flags['futuremove'] = 1; + delete moveData.flags['protect']; + if (moveData.id === 'beatup') this.singleEvent('ModifyMove', moveData, null, pokemon, null, null, moveData); + Object.assign(t.side.slotConditions[t.position]['futuremove'], { + duration: 3, + move: moveData.id, + source: source, + moveData: moveData, + }); + this.add('-message', `${source.name} foresaw an attack!`); + return this.NOT_FAIL; + }; + } + }, + }, { name: "[Gen 9] Fortemons", desc: `Put an attacking move in the item slot to have all of a Pokémon's attacks inherit its properties.`, - threads: [ - `• Fortemons`, - ], - mod: 'gen9', searchShow: false, - ruleset: ['Standard OMs', 'Sleep Clause Mod', 'Min Source Gen = 9'], + ruleset: ['Standard OMs', 'Sleep Moves Clause', 'Terastal Clause'], banlist: [ - 'Annihilape', 'Arceus', 'Calyrex-Ice', 'Calyrex-Shadow', 'Chi-Yu', 'Chien-Pao', 'Cloyster', 'Darkrai', 'Deoxys-Base', 'Deoxys-Speed', - 'Dialga-Base', 'Dragonite', 'Espathra', 'Eternatus', 'Flutter Mane', 'Giratina-Base', 'Great Tusk', 'Groudon', 'Ho-Oh', 'Iron Bundle', - 'Koraidon', 'Kyogre', 'Kyurem', 'Kyurem-Black', 'Kyurem-White', 'Lugia', 'Lunala', 'Magearna', 'Mewtwo', 'Miraidon', 'Necrozma-Dawn-Wings', - 'Necrozma-Dusk-Mane', 'Palafin', 'Palkia', 'Palkia-Origin', 'Rayquaza', 'Regieleki', 'Reshiram', 'Shaymin-Sky', 'Skeledirge', 'Solgaleo', - 'Spectrier', 'Sneasler', 'Urshifu-Base', 'Zacian', 'Zacian-Crowned', 'Zamazenta-Base', 'Zekrom', 'Arena Trap', 'Moody', 'Serene Grace', - 'Shadow Tag', 'Damp Rock', 'Heat Rock', 'Baton Pass', 'Beat Up', 'Last Respects', + 'Annihilape', 'Arceus', 'Archaludon', 'Azumarill', 'Calyrex-Ice', 'Calyrex-Shadow', 'Chi-Yu', 'Chien-Pao', 'Cloyster', 'Comfey', 'Deoxys-Normal', 'Deoxys-Attack', + 'Dialga-Base', 'Espathra', 'Eternatus', 'Flutter Mane', 'Giratina-Altered', 'Great Tusk', 'Groudon', 'Ho-Oh', 'Iron Bundle', 'Iron Treads', 'Koraidon', 'Kyogre', + 'Kyurem-Black', 'Kyurem-White', 'Lugia', 'Lunala', 'Magearna', 'Meowscarada', 'Mewtwo', 'Miraidon', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Palafin', + 'Palkia', 'Palkia-Origin', 'Rayquaza', 'Reshiram', 'Samurott-Hisui', 'Shaymin-Sky', 'Skeledirge', 'Smeargle', 'Solgaleo', 'Spectrier', 'Sneasler', 'Terapagos', + 'Urshifu', 'Urshifu-Rapid-Strike', 'Zacian', 'Zacian-Crowned', 'Zamazenta', 'Zamazenta-Crowned', 'Zekrom', 'Arena Trap', 'Moody', 'Serene Grace', 'Shadow Tag', + 'Damp Rock', 'Heat Rock', 'Light Clay', 'Baton Pass', 'Beat Up', 'Fake Out', 'Last Respects', 'Shed Tail', ], restricted: [ - 'Dynamic Punch', 'Flail', 'Flip Turn', 'Fury Cutter', 'Grass Knot', 'Grassy Glide', 'Heavy Slam', 'Inferno', - 'Low Kick', 'Nuzzle', 'Power Trip', 'Reversal', 'Spit Up', 'Stored Power', 'Volt Switch', 'Zap Cannon', + 'Doom Desire', 'Dynamic Punch', 'Electro Ball', 'Explosion', 'Gyro Ball', 'Final Gambit', 'Flail', 'Flip Turn', 'Fury Cutter', 'Future Sight', 'Grass Knot', + 'Grassy Glide', 'Hard Press', 'Heavy Slam', 'Heat Crash', 'Inferno', 'Low Kick', 'Misty Explosion', 'Nuzzle', 'Power Trip', 'Reversal', 'Self-Destruct', + 'Spit Up', 'Stored Power', 'Tera Blast', 'U-turn', 'Weather Ball', 'Zap Cannon', ], onValidateTeam(team) { const itemTable = new Set(); @@ -1654,58 +1441,65 @@ export const Formats: FormatList = [ { name: "[Gen 9] Frantic Fusions", desc: `Pokémon nicknamed after another Pokémon get their stats buffed by 1/4 of that Pokémon's stats, barring HP, and access to one of their abilities.`, - threads: [ - `• Frantic Fusions`, - ], - mod: 'gen9', searchShow: false, - ruleset: ['Standard OMs', '!Nickname Clause', '!Obtainable Abilities', 'Sleep Moves Clause', 'Frantic Fusions Mod', 'Terastal Clause', 'Min Source Gen = 9'], + ruleset: ['Standard OMs', '!Nickname Clause', '!Obtainable Abilities', 'Sleep Moves Clause', 'Frantic Fusions Mod', 'Terastal Clause'], banlist: [ - 'Annihilape', 'Arceus', 'Baxcalibur', 'Calyrex-Ice', 'Calyrex-Shadow', 'Chi-Yu', 'Chien-Pao', 'Cresselia', 'Darkrai', 'Dialga', 'Dialga-Origin', - 'Ditto', 'Dragapult', 'Enamorus-Base', 'Eternatus', 'Flutter Mane', 'Giratina', 'Giratina-Origin', 'Groudon', 'Hoopa-Unbound', 'Iron Bundle', - 'Iron Valiant', 'Koraidon', 'Komala', 'Kyogre', 'Landorus-Base', 'Magearna', 'Mewtwo', 'Miraidon', 'Numel', 'Ogerpon-Hearthflame', 'Palafin', - 'Palkia', 'Palkia-Origin', 'Persian-Alola', 'Rayquaza', 'Regieleki', 'Shaymin-Sky', 'Slaking', 'Spectrier', 'Toxapex', 'Urshifu', 'Urshifu-Rapid-Strike', - 'Walking Wake', 'Weavile', 'Zacian', 'Zacian-Crowned', 'Zamazenta', 'Zamazenta-Crowned', 'Arena Trap', 'Contrary', 'Huge Power', 'Ice Scales', - 'Illusion', 'Magnet Pull', 'Moody', 'Neutralizing Gas', 'Poison Heal', 'Pure Power', 'Shadow Tag', 'Stakeout', 'Stench', 'Speed Boost', 'Unburden', - 'Damp Rock', 'Heat Rock', 'King\'s Rock', 'Quick Claw', 'Razor Fang', 'Baton Pass', 'Last Respects', 'Revival Blessing', 'Shed Tail', + 'Annihilape', 'Arceus', 'Baxcalibur', 'Calyrex-Ice', 'Calyrex-Shadow', 'Chi-Yu', 'Chien-Pao', 'Comfey', 'Cresselia', 'Darkrai', 'Deoxys-Normal', 'Deoxys-Attack', + 'Deoxys-Speed', 'Dialga', 'Dialga-Origin', 'Ditto', 'Dragapult', 'Enamorus-Incarnate', 'Eternatus', 'Flutter Mane', 'Giratina', 'Giratina-Origin', 'Gouging Fire', + 'Groudon', 'Ho-Oh', 'Hoopa-Unbound', 'Iron Boulder', 'Iron Bundle', 'Iron Moth', 'Iron Valiant', 'Keldeo', 'Koraidon', 'Komala', 'Kyogre', 'Kyurem', 'Kyurem-Black', + 'Kyurem-White', 'Landorus-Incarnate', 'Lugia', 'Lunala', 'Magearna', 'Mewtwo', 'Miraidon', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Numel', 'Ogerpon-Hearthflame', + 'Ogerpon-Wellspring', 'Palafin', 'Palkia', 'Palkia-Origin', 'Persian-Alola', 'Rayquaza', 'Regieleki', 'Regigigas', 'Reshiram', 'Shaymin-Sky', 'Slaking', 'Sneasler', + 'Solgaleo', 'Spectrier', 'Toxapex', 'Urshifu', 'Urshifu-Rapid-Strike', 'Volcarona', 'Walking Wake', 'Weavile', 'Zacian', 'Zacian-Crowned', 'Zamazenta', 'Zamazenta-Crowned', + 'Zekrom', 'Arena Trap', 'Contrary', 'Huge Power', 'Ice Scales', 'Illusion', 'Magnet Pull', 'Moody', 'Neutralizing Gas', 'Poison Heal', 'Pure Power', 'Shadow Tag', + 'Stakeout', 'Stench', 'Speed Boost', 'Unburden', 'Water Bubble', 'Damp Rock', 'Heat Rock', 'King\'s Rock', 'Quick Claw', 'Razor Fang', 'Baton Pass', 'Last Respects', + 'Revival Blessing', 'Shed Tail', ], }, { name: "[Gen 9] Full Potential", desc: `Pokémon's moves hit off of their highest stat, except HP.`, - threads: [ - `• Full Potential`, - ], - mod: 'fullpotential', searchShow: false, - ruleset: ['Standard OMs', 'Evasion Abilities Clause', 'Evasion Items Clause', 'Sleep Moves Clause', 'Terastal Clause', 'Min Source Gen = 9'], + ruleset: ['Standard OMs', 'Evasion Abilities Clause', 'Evasion Items Clause', 'Sleep Moves Clause', 'Terastal Clause'], banlist: [ 'Arceus', 'Calyrex-Ice', 'Calyrex-Shadow', 'Deoxys', 'Deoxys-Attack', 'Deoxys-Defense', 'Deoxys-Speed', 'Dialga', 'Dialga-Origin', 'Dragapult', - 'Eternatus', 'Giratina', 'Giratina-Origin', 'Goodra-Hisui', 'Groudon', 'Ho-oh', 'Iron Bundle', 'Koraidon', 'Kyogre', 'Kyurem-Black', 'Kyurem-White', - 'Lugia', 'Lunala', 'Mewtwo', 'Miraidon', 'Necrozma-Dusk-Mane', 'Necrozma-Dawn-Wings', 'Palkia', 'Palkia-Origin', 'Rayquaza', 'Regieleki', 'Scream Tail', - 'Shaymin-Sky', 'Spectrier', 'Solgaleo', 'Zacian', 'Zacian-Crowned', 'Zamazenta', 'Zamazenta-Crowned', 'Zekrom', 'Arena Trap', 'Chlorophyll', 'Drought', - 'Moody', 'Sand Rush', 'Shadow Tag', 'Slush Rush', 'Swift Swim', 'Unburden', 'Booster Energy', 'Choice Scarf', 'Heat Rock', 'King\'s Rock', 'Razor Fang', - 'Baton Pass', 'Shed Tail', 'Tailwind', + 'Electrode-Hisui', 'Eternatus', 'Giratina', 'Giratina-Origin', 'Goodra-Hisui', 'Groudon', 'Ho-Oh', 'Iron Bundle', 'Koraidon', 'Kyogre', 'Kyurem-Black', + 'Kyurem-White', 'Lugia', 'Lunala', 'Mewtwo', 'Miraidon', 'Necrozma-Dusk-Mane', 'Necrozma-Dawn-Wings', 'Palkia', 'Palkia-Origin', 'Rayquaza', 'Regieleki', + 'Scream Tail', 'Shaymin-Sky', 'Spectrier', 'Solgaleo', 'Zacian', 'Zacian-Crowned', 'Zamazenta', 'Zamazenta-Crowned', 'Zekrom', 'Arena Trap', 'Chlorophyll', + 'Drought', 'Moody', 'Sand Rush', 'Shadow Tag', 'Slush Rush', 'Speed Boost', 'Surge Surfer', 'Swift Swim', 'Unburden', 'Booster Energy', 'Choice Scarf', + 'Heat Rock', 'King\'s Rock', 'Razor Fang', 'Baton Pass', 'Shed Tail', 'Tailwind', ], }, { - name: "[Gen 9] Pokebilities", - desc: `Pokémon have all of their released abilities simultaneously.`, - threads: [ - `• Pokébilities`, - ], - mod: 'pokebilities', + name: "[Gen 9] Inverse", + desc: `The type chart is inverted; weaknesses become resistances, while resistances and immunities become weaknesses.`, + mod: 'gen9', searchShow: false, - ruleset: ['Standard OMs', 'Sleep Clause Mod', 'Min Source Gen = 9'], + ruleset: ['Standard OMs', 'Sleep Moves Clause', 'Inverse Mod', 'Terastal Clause'], banlist: [ - 'Arceus', 'Calyrex-Ice', 'Calyrex-Shadow', 'Chi-Yu', 'Dialga', 'Dialga-Origin', 'Espathra', 'Eternatus', 'Flutter Mane', 'Giratina', - 'Giratina-Origin', 'Groudon', 'Iron Bundle', 'Koraidon', 'Kyogre', 'Landorus-Base', 'Miraidon', 'Mewtwo', 'Palafin', 'Palkia', - 'Palkia-Origin', 'Rayquaza', 'Regieleki', 'Spectrier', 'Zacian', 'Zacian-Crowned', 'Arena Trap', 'Moody', 'Shadow Tag', 'King\'s Rock', - 'Razor Fang', 'Baton Pass', 'Shed Tail', 'Last Respects', + 'Arceus', 'Baxcalibur', 'Calyrex-Ice', 'Calyrex-Shadow', 'Chien-Pao', 'Deoxys-Attack', 'Deoxys-Normal', 'Deoxys-Speed', 'Espathra', 'Eternatus', 'Flutter Mane', + 'Giratina-Origin', 'Groudon', 'Ho-Oh', 'Indeedee', 'Indeedee-F', 'Koraidon', 'Kyogre', 'Kyurem', 'Kyurem-Black', 'Kyurem-White', 'Lunala', 'Maushold', 'Mewtwo', + 'Miraidon', 'Necrozma-Dawn-Wings', 'Palafin', 'Palkia', 'Palkia-Origin', 'Porygon-Z', 'Rayquaza', 'Regidrago', 'Regieleki', 'Reshiram', 'Rillaboom', 'Shaymin-Sky', + 'Spectrier', 'Ursaluna', 'Ursaluna-Bloodmoon', 'Zacian', 'Zacian-Crowned', 'Zamazenta-Hero', 'Zekrom', 'Arena Trap', 'Moody', 'Shadow Tag', 'King\'s Rock', 'Light Clay', + 'Baton Pass', 'Last Respects', 'Shed Tail', ], - onValidateSet(set) { + }, + { + name: "[Gen 9] Pokebilities", + desc: `Pokémon have all of their released abilities simultaneously.`, + mod: 'pokebilities', + searchShow: false, + ruleset: ['Standard OMs', 'Sleep Moves Clause'], + banlist: [ + 'Arceus', 'Annihilape', 'Basculegion', 'Basculegion-F', 'Baxcalibur', 'Braviary-Hisui', 'Calyrex-Ice', 'Calyrex-Shadow', 'Chi-Yu', 'Chien-Pao', 'Conkeldurr', + 'Deoxys-Normal', 'Deoxys-Attack', 'Dialga', 'Dialga-Origin', 'Espathra', 'Eternatus', 'Excadrill', 'Flutter Mane', 'Giratina', 'Giratina-Origin', 'Groudon', + 'Ho-Oh', 'Iron Bundle', 'Koraidon', 'Kyogre', 'Kyurem-Black', 'Kyurem-White', 'Landorus-Incarnate', 'Lugia', 'Lunala', 'Magearna', 'Miraidon', 'Mewtwo', + 'Necrozma-Dusk-Mane', 'Necrozma-Dawn-Wings', 'Ogerpon-Hearthflame', 'Palafin', 'Palkia', 'Palkia-Origin', 'Porygon-Z', 'Rayquaza', 'Regieleki', 'Reshiram', + 'Shaymin-Sky', 'Smeargle', 'Sneasler', 'Solgaleo', 'Spectrier', 'Terapagos', 'Ursaluna-Bloodmoon', 'Urshifu-Single-Strike', 'Zacian', 'Zacian-Crowned', + 'Zamazenta-Crowned', 'Zekrom', 'Arena Trap', 'Moody', 'Shadow Tag', 'King\'s Rock', 'Razor Fang', 'Baton Pass', 'Shed Tail', 'Last Respects', + ], + onValidateSet(set) { const species = this.dex.species.get(set.species); const unSeenAbilities = Object.keys(species.abilities) .filter(key => key !== 'S' && (key !== 'H' || !species.unreleasedHidden)) @@ -1773,13 +1567,123 @@ export const Formats: FormatList = [ pokemon.m.innates = undefined; }, }, + { + name: "[Gen 9] Pokemoves", + desc: `Put a Pokémon's name in a moveslot to turn them into a move. The move has 8 PP, 100% accuracy, and a category and Base Power matching their highest attacking stat. Use /pokemove for more info.`, + mod: 'pokemoves', + searchShow: false, + ruleset: ['Standard OMs', 'Sleep Moves Clause', 'Terastal Clause', 'Evasion Abilities Clause', 'Evasion Items Clause', 'Allowed Pokemoves = 1', 'Unique Pokemoves = 1'], + banlist: [ + 'Arceus', 'Annihilape', 'Calyrex-Ice', 'Calyrex-Shadow', 'Chi-Yu', 'Chien-Pao', 'Darkrai', 'Deoxys-Normal', 'Deoxys-Attack', 'Dialga', 'Dialga-Origin', + 'Dragapult', 'Espathra', 'Eternatus', 'Flutter Mane', 'Giratina', 'Giratina-Origin', 'Groudon', 'Hoopa-Unbound', 'Ho-Oh', 'Iron Bundle', 'Koraidon', + 'Kyogre', 'Kyurem-Black', 'Kyurem-White', 'Lugia', 'Lunala', 'Magearna', 'Mewtwo', 'Miraidon', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Palafin', + 'Palkia', 'Palkia-Origin', 'Rayquaza', 'Reshiram', 'Regieleki', 'Shaymin-Sky', 'Solgaleo', 'Spectrier', 'Urshifu', 'Urshifu-Rapid-Strike', 'Zacian', + 'Zacian-Crowned', 'Zamazenta-Crowned', 'Zekrom', 'Arena Trap', 'Moody', 'Shadow Tag', 'Damp Rock', 'King\'s Rock', 'Razor Fang', 'Baton Pass', + 'Last Respects', 'Shed Tail', + ], + restricted: [ + 'Araquanid', 'Baxcalibur', 'Beartic', 'Cacnea', 'Cacturne', 'Chandelure', 'Conkeldurr', 'Crabominable', 'Cubchoo', 'Dewpider', 'Diglett', 'Diglett-Alola', 'Dragonite', + 'Dugtrio', 'Dugtrio-Alola', 'Enamorus', 'Enamorus-Therian', 'Excadrill', 'Froslass', 'Gabite', 'Garchomp', 'Gholdengo', 'Gible', 'Glaceon', 'Glastrier', 'Great Tusk', + 'Grimer-Base', 'Hatterene', 'Haxorus', 'Hoopa-Confined', 'Iron Hands', 'Iron Moth', 'Iron Thorns', 'Kingambit', 'Landorus-Therian', 'Medicham', 'Meditite', 'Metagross', + 'Muk-Base', 'Ninetales-Alola', 'Polteageist', 'Porygon-Z', 'Raging Bolt', 'Rampardos', 'Regigigas', 'Rhyperior', 'Roaring Moon', 'Salamence', 'Sandshrew', 'Sandshrew-Alola', + 'Sandslash', 'Sandslash-Alola', 'Skuntank', 'Slaking', 'Slither Wing', 'Stunky', 'Thundurus-Therian', 'Tyranitar', 'Ursaluna', 'Ursaluna-Bloodmoon', 'Vikavolt', 'Volcarona', + 'Vulpix-Alola', 'Yanma', 'Yanmega', + ], + validateSet(set, teamHas) { + let pokemoves = 0; + const problems: string[] = []; + const moves = []; + if (set.moves?.length) { + if (set.moves.length > this.ruleTable.maxMoveCount) { + problems.push(`${set.name} has ${set.moves.length} moves, which is more than the limit of ${this.ruleTable.maxMoveCount}.`); + return problems; + } + for (const [i, moveid] of set.moves.entries()) { + const pokemove = this.dex.species.get(moveid); + if (!pokemove.exists) continue; + if (pokemove.isNonstandard && + !(this.ruleTable.has(`+pokemontag:${this.toID(pokemove.isNonstandard)}`) || + this.ruleTable.has(`+pokemon:${pokemove.id}`) || + this.ruleTable.has(`+basepokemon:${this.toID(pokemove.baseSpecies)}`))) { + problems.push(`${pokemove.isNonstandard} Pok\u00e9mon are not allowed to be used as Pokemoves.`); + } + if (this.ruleTable.isRestrictedSpecies(pokemove) || this.ruleTable.isBannedSpecies(pokemove)) { + problems.push(`${pokemove.name} is unable to be used as a Pokemove.`); + } + pokemoves++; + moves.push(moveid); + set.moves.splice(i, 1); + } + } + const allowedPokemoves = this.ruleTable.valueRules.get('allowedpokemoves') || 1; + if (pokemoves > Number(allowedPokemoves)) { + problems.push( + `${set.species} has ${pokemoves} Pokemoves.`, + `(Pok\u00e9mon can only have ${allowedPokemoves} Pokemove${allowedPokemoves + '' === '1' ? '' : 's'} each.)` + ); + } + if (this.validateSet(set, teamHas)) { + return this.validateSet(set, teamHas); + } + set.moves.push(...moves); + return problems.length ? problems : null; + }, + onBegin() { + for (const pokemon of this.getAllPokemon()) { + for (const move of pokemon.moves) { + const pokemove = this.dex.species.get(move); + if (pokemove.exists) { + pokemon.m.pokemove = pokemove; + const idx = pokemon.moveSlots.findIndex(x => x.id === pokemove.id); + if (idx >= 0) { + pokemon.moveSlots[idx] = pokemon.baseMoveSlots[idx] = { + move: pokemove.name, + id: pokemove.id, + pp: 8, + maxpp: 8, + target: 'normal', + disabled: false, + disabledSource: '', + used: false, + }; + } + } + } + } + }, + onSwitchIn(pokemon) { + if (!pokemon.m.pokemove) return; + const pokemove = pokemon.m.pokemove; + if (!pokemove.exists) return; + // Place volatiles on the Pokémon to show the pokemove. + this.add('-start', pokemon, pokemove.name, '[silent]'); + }, + onModifyMovePriority: 999, + onModifyMove(move, pokemon, target) { + const species = this.dex.species.get(move.id); + if (species.exists) { + move.type = species.types[0]; + move.basePower = Math.max(species.baseStats['atk'], species.baseStats['spa']); + move.accuracy = 100; + move.flags = {}; + move.flags['protect'] = 1; + move.category = species.baseStats['spa'] >= species.baseStats['atk'] ? 'Special' : 'Physical'; + move.onAfterHit = function (t, s, m) { + if (s.getAbility().name === species.abilities['0']) return; + const effect = 'ability:' + this.toID(species.abilities['0']); + if (s.volatiles[effect]) return; + s.addVolatile(effect); + if (s.volatiles[effect]) { + (s.volatiles[effect] as any).id = this.toID(effect); + (s.volatiles[effect] as any).target = s; + } + }; + } + }, + }, { name: "[Gen 9] Pure Hackmons", desc: `Anything directly hackable onto a set (EVs, IVs, forme, ability, item, and move) and is usable in local battles is allowed.`, - threads: [ - `• Pure Hackmons`, - ], - mod: 'gen9', searchShow: false, ruleset: ['Team Preview', 'HP Percentage Mod', 'Cancel Mod', 'Hackmons Forme Legality', 'Species Reveal Clause', 'Endless Battle Clause'], @@ -1787,39 +1691,32 @@ export const Formats: FormatList = [ { name: "[Gen 9] Revelationmons", desc: `The moves in the first slot(s) of a Pokémon's set have their types changed to match the Pokémon's type(s).`, - threads: [ - `• Revelationmons`, - ], - mod: 'gen9', searchShow: false, - ruleset: ['Standard OMs', 'Sleep Moves Clause', 'Revelationmons Mod', 'Terastal Clause', 'Min Source Gen = 9'], + ruleset: ['Standard OMs', 'Sleep Clause Mod', 'Revelationmons Mod', 'Terastal Clause'], banlist: [ - 'Arceus', 'Barraskewda', 'Basculegion-Base', 'Baxcalibur', 'Calyrex-Ice', 'Calyrex-Shadow', 'Chi-Yu', 'Chien-Pao', 'Darkrai', 'Deoxys-Base', - 'Deoxys-Attack', 'Dialga', 'Dialga-Origin', 'Dragapult', 'Dragonite', 'Eternatus', 'Flutter Mane', 'Giratina', 'Giratina-Origin', 'Groudon', - 'Ho-Oh', 'Iron Bundle', 'Kommo-o', 'Koraidon', 'Kyogre', 'Kyurem-Black', 'Kyurem-White', 'Landorus-Base', 'Lugia', 'Lunala', 'Magearna', - 'Mewtwo', 'Miraidon', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Noivern', 'Ogerpon-Hearthflame', 'Palafin', 'Palkia', 'Palkia-Origin', - 'Polteageist', 'Rayquaza', 'Reshiram', 'Roaring Moon', 'Shaymin-Sky', 'Solgaleo', 'Spectrier', 'Urshifu-Base', 'Zacian', 'Zacian-Crowned', - 'Zekrom', 'Arena Trap', 'Moody', 'Shadow Tag', 'King\'s Rock', 'Razor Fang', 'Baton Pass', 'Last Respects', + 'Arceus', 'Archaludon', 'Barraskewda', 'Basculegion-M', 'Baxcalibur', 'Calyrex-Ice', 'Calyrex-Shadow', 'Chi-Yu', 'Chien-Pao', 'Darkrai', 'Deoxys-Normal', + 'Deoxys-Attack', 'Dialga', 'Dialga-Origin', 'Dragapult', 'Dragonite', 'Enamorus-Incarnate', 'Eternatus', 'Flutter Mane', 'Giratina', 'Giratina-Origin', + 'Gouging Fire', 'Groudon', 'Ho-Oh', 'Iron Bundle', 'Kommo-o', 'Koraidon', 'Kyogre', 'Kyurem', 'Kyurem-Black', 'Kyurem-White', 'Landorus-Incarnate', + 'Lugia', 'Lunala', 'Magearna', 'Mewtwo', 'Miraidon', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Noivern', 'Ogerpon-Hearthflame', 'Palafin', 'Palkia', + 'Palkia-Origin', 'Polteageist', 'Rayquaza', 'Reshiram', 'Roaring Moon', 'Shaymin-Sky', 'Solgaleo', 'Spectrier', 'Ursaluna-Bloodmoon', 'Urshifu-Single-Strike', + 'Zacian', 'Zacian-Crowned', 'Zekrom', 'Arena Trap', 'Moody', 'Shadow Tag', 'King\'s Rock', 'Razor Fang', 'Baton Pass', 'Last Respects', 'Shed Tail', ], restricted: ['U-turn', 'Volt Switch'], }, { name: "[Gen 9] Sharing is Caring", desc: `All Pokémon on a team share their items.`, - threads: [ - `• Sharing is Caring`, - ], - mod: 'sharingiscaring', searchShow: false, - ruleset: ['Standard OMs', 'Evasion Items Clause', 'Sleep Moves Clause', 'Min Source Gen = 9'], + ruleset: ['Standard OMs', 'Evasion Items Clause', 'Sleep Moves Clause', 'Terastal Clause'], banlist: [ - 'Arceus', 'Calyrex-Ice', 'Calyrex-Shadow', 'Chi-Yu', 'Chien-Pao', 'Darkrai', 'Dialga', 'Dialga-Origin', 'Espathra', 'Eternatus', 'Flutter Mane', - 'Giratina', 'Giratina-Origin', 'Groudon', 'Iron Bundle', 'Koraidon', 'Kyogre', 'Landorus-Base', 'Magearna', 'Mewtwo', 'Miraidon', 'Palafin', 'Palkia', - 'Palkia-Origin', 'Rayquaza', 'Regieleki', 'Shaymin-Sky', 'Spectrier', 'Urshifu-Base', 'Zacian', 'Zacian-Crowned', 'Zamazenta', 'Zamazenta-Crowned', - 'Arena Trap', 'Moody', 'Shadow Tag', 'Choice Scarf', 'Focus Band', 'Focus Sash', 'King\'s Rock', 'Quick Claw', 'Razor Fang', 'Baton Pass', - 'Last Respects', 'Revival Blessing', 'Shed Tail', + 'Arceus', 'Calyrex-Ice', 'Calyrex-Shadow', 'Chi-Yu', 'Chien-Pao', 'Darkrai', 'Deoxys-Normal', 'Deoxys-Attack', 'Dialga', 'Dialga-Origin', 'Espathra', + 'Eternatus', 'Flutter Mane', 'Giratina', 'Giratina-Origin', 'Groudon', 'Ho-Oh', 'Iron Bundle', 'Koraidon', 'Kyogre', 'Kyurem-Black', 'Kyurem-White', + 'Landorus-Incarnate', 'Lugia', 'Lunala', 'Magearna', 'Mewtwo', 'Miraidon', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Palafin', 'Palkia', + 'Palkia-Origin', 'Rayquaza', 'Regieleki', 'Reshiram', 'Shaymin-Sky', 'Solgaleo', 'Spectrier', 'Terapagos', 'Urshifu-Single-Strike', 'Zacian', + 'Zacian-Crowned', 'Zamazenta', 'Zamazenta-Crowned', 'Zekrom', 'Arena Trap', 'Moody', 'Scope Lens', 'Shadow Tag', 'Choice Band', 'Choice Scarf', + 'Choice Specs', 'Focus Band', 'Focus Sash', 'King\'s Rock', 'Quick Claw', 'Razor Fang', 'Baton Pass', 'Last Respects', 'Revival Blessing', 'Shed Tail', ], onValidateRule() { if (this.format.gameType !== 'singles') { @@ -1862,20 +1759,22 @@ export const Formats: FormatList = [ { name: "[Gen 9] Tera Donation", desc: `The first Pokémon sent out immediately terastallizes. The other Pokémon in the party inherit that Tera Type as an additional type.`, - threads: [ - `• Tera Donation`, - ], - mod: 'gen9', searchShow: false, - ruleset: ['Standard OMs', 'Sleep Moves CLause', 'Tera Type Preview', 'Min Source Gen = 9'], + ruleset: ['Standard OMs', 'Sleep Moves Clause', 'Tera Type Preview'], banlist: [ - 'Annihilape', 'Arceus', 'Calyrex-Ice', 'Calyrex-Shadow', 'Chi-Yu', 'Chien-Pao', 'Darkrai', 'Dialga', 'Dialga-Origin', 'Espathra', 'Eternatus', - 'Giratina', 'Giratina-Origin', 'Groudon', 'Flutter Mane', 'Hoopa-Unbound', 'Iron Bundle', 'Koraidon', 'Kyogre', 'Landorus-Base', 'Magearna', - 'Mewtwo', 'Miraidon', 'Palafin', 'Palkia', 'Palkia-Origin', 'Rayquaza', 'Regieleki', 'Shaymin-Sky', 'Spectrier', 'Urshifu', 'Urshifu-Rapid-Strike', - 'Volcarona', 'Zacian', 'Zacian-Crowned', 'Zamazenta-Crowned', 'Arena Trap', 'Moody', 'Shadow Tag', 'Booster Energy', 'Heat Rock', 'King\'s Rock', - 'Razor Fang', 'Baton Pass', 'Last Respects', 'Shed Tail', + 'Annihilape', 'Arceus', 'Calyrex-Ice', 'Calyrex-Shadow', 'Chi-Yu', 'Chien-Pao', 'Darkrai', 'Deoxys-Normal', 'Deoxys-Attack', 'Deoxys-Speed', 'Dialga', + 'Dialga-Origin', 'Espathra', 'Eternatus', 'Giratina', 'Giratina-Origin', 'Groudon', 'Flutter Mane', 'Ho-Oh', 'Hoopa-Unbound', 'Iron Bundle', 'Koraidon', + 'Kyogre', 'Kyurem', 'Kyurem-Black', 'Kyurem-White', 'Landorus-Incarnate', 'Lugia', 'Lunala', 'Magearna', 'Mewtwo', 'Miraidon', 'Necrozma-Dawn-Wings', + 'Necrozma-Dusk-Mane', 'Palafin', 'Palkia', 'Palkia-Origin', 'Rayquaza', 'Regieleki', 'Reshiram', 'Shaymin-Sky', 'Solgaleo', 'Spectrier', 'Terapagos', + 'Urshifu', 'Urshifu-Rapid-Strike', 'Volcarona', 'Zacian', 'Zacian-Crowned', 'Zamazenta-Crowned', 'Zekrom', 'Arena Trap', 'Moody', 'Shadow Tag', + 'Booster Energy', 'Heat Rock', 'King\'s Rock', 'Razor Fang', 'Baton Pass', 'Last Respects', 'Shed Tail', ], + onValidateRule() { + if (this.dex.gen !== 9) { + throw new Error(`Tera Donation is not supported in generations without terastallization.`); + } + }, onSwitchIn(pokemon) { if (this.turn === 0) { this.actions.terastallize(pokemon); @@ -1953,15 +1852,17 @@ export const Formats: FormatList = [ baseDamage = this.battle.randomizer(baseDamage); // STAB - const isTeraStellarBoosted = (pokemon.terastallized || pokemon.m.thirdType) === 'Stellar' && - !pokemon.stellarBoostedTypes.includes(type); - if (move.forceSTAB || (type !== '???' && - (pokemon.hasType(type) || (pokemon.terastallized && pokemon.getTypes(false, true).includes(type)) || - isTeraStellarBoosted))) { - // 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.) + // 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, @@ -1970,22 +1871,20 @@ export const Formats: FormatList = [ // 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. - - let stab: number | [number, number]; - if (isTeraStellarBoosted) { - stab = pokemon.getTypes(false, true).includes(type) ? 2 : [4915, 4096]; - if (pokemon.species.name !== 'Terapagos-Stellar') { - pokemon.stellarBoostedTypes.push(type); + if ((pokemon.terastallized || pokemon.m.thirdType) === 'Stellar') { + if (!pokemon.stellarBoostedTypes.includes(type)) { + stab = isSTAB ? 2 : [4915, 4096]; + if (pokemon.species.name !== 'Terapagos-Stellar') { + pokemon.stellarBoostedTypes.push(type); + } } } else { - stab = move.stab || 1.5; - if (type === pokemon.terastallized && pokemon.getTypes(false, true).includes(type)) { - // In my defense, the game hardcodes the Adaptability check like this, too. - stab = stab === 2 ? 2.25 : 2; - } else if (pokemon.terastallized && type !== pokemon.terastallized) { - stab = 1.5; + 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); } @@ -2040,13 +1939,11 @@ export const Formats: FormatList = [ return [this.terastallized]; } const types = this.battle.runEvent('Type', this, null, null, this.types); + if (!types.length) types.push(this.battle.gen >= 5 ? 'Normal' : '???'); if (!excludeAdded && this.addedType) return types.concat(this.addedType); const addTeraType = this.m.thirdType; - if (types.length) { - if (addTeraType) return Array.from(new Set([...types, addTeraType])); - return types; - } - return [this.battle.gen >= 5 ? 'Normal' : '???']; + if (addTeraType) return Array.from(new Set([...types, addTeraType])); + return types; }, runEffectiveness(move) { if ((this.terastallized || this.m.thirdType) && move.type === 'Stellar') return 1; @@ -2063,20 +1960,16 @@ export const Formats: FormatList = [ { name: "[Gen 9] The Card Game", desc: `The type chart is simplified based off of the Pokémon Trading Card Game.`, - threads: [ - `• The Card Game`, - ], - mod: 'thecardgame', searchShow: false, - ruleset: ['Standard OMs', 'Sleep Moves Clause', 'Evasion Abilities Clause', 'Evasion Items Clause', 'Terastal Clause', 'Min Source Gen = 9'], + ruleset: ['Standard OMs', 'Sleep Moves Clause', 'Evasion Abilities Clause', 'Evasion Items Clause', 'Terastal Clause'], banlist: [ - 'Annihilape', 'Arceus', 'Baxcalibur', 'Calyrex-Ice', 'Calyrex-Shadow', 'Chi-Yu', 'Chien-Pao', 'Deoxys-Base', 'Deoxys-Attack', 'Dialga', 'Dialga-Origin', + 'Annihilape', 'Arceus', 'Baxcalibur', 'Calyrex-Ice', 'Calyrex-Shadow', 'Chi-Yu', 'Chien-Pao', 'Deoxys-Normal', 'Deoxys-Attack', 'Dialga', 'Dialga-Origin', 'Dragapult', 'Dragonite', 'Dudunsparce', 'Eternatus', 'Garchomp', 'Giratina', 'Giratina-Origin', 'Gouging Fire', 'Groudon', 'Haxorus', 'Ho-Oh', 'Hydreigon', - 'Iron Valiant', 'Kommo-o', 'Koraidon', 'Kyogre', 'Kyurem', 'Kyurem-Black', 'Kyurem-White', 'Landorus-Base', 'Latias', 'Latios', 'Lugia', 'Lunala', 'Mewtwo', - 'Miraidon', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Noivern', 'Palafin', 'Palkia', 'Palkia-Origin', 'Rayquaza', 'Regidrago', 'Regieleki', 'Reshiram', - 'Roaring Moon', 'Salamence', 'Shaymin-Sky', 'Solgaleo', 'Ursaluna', 'Ursaluna-Bloodmoon', 'Urshifu-Base', 'Walking Wake', 'Zacian', 'Zacian-Crowned', 'Zekrom', - 'Arena Trap', 'Moody', 'Shadow Tag', 'Baton Pass', 'Last Respects', 'Shed Tail', + 'Iron Valiant', 'Kommo-o', 'Koraidon', 'Kyogre', 'Kyurem', 'Kyurem-Black', 'Kyurem-White', 'Landorus-Incarnate', 'Latias', 'Latios', 'Lugia', 'Lunala', + 'Mewtwo', 'Miraidon', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Noivern', 'Ogerpon-Hearthflame', 'Palafin', 'Palkia', 'Palkia-Origin', 'Raging Bolt', + 'Rayquaza', 'Regidrago', 'Regieleki', 'Reshiram', 'Roaring Moon', 'Salamence', 'Shaymin-Sky', 'Solgaleo', 'Ursaluna', 'Ursaluna-Bloodmoon', 'Urshifu-Single-Strike', + 'Walking Wake', 'Zacian', 'Zacian-Crowned', 'Zekrom', 'Arena Trap', 'Moody', 'Shadow Tag', 'Baton Pass', 'Last Respects', 'Shed Tail', ], onBegin() { for (const pokemon of this.getAllPokemon()) { @@ -2106,13 +1999,9 @@ export const Formats: FormatList = [ { name: "[Gen 9] The Loser's Game", desc: `The first player to lose all of their Pokémon wins.`, - threads: [ - `• The Loser's Game`, - ], - mod: 'gen9', searchShow: false, - ruleset: ['Standard OMs', 'Sleep Clause Mod', '!OHKO Clause', 'Picked Team Size = 6', 'Adjust Level = 100', 'Min Source Gen = 9'], + ruleset: ['Standard OMs', 'Sleep Clause Mod', '!OHKO Clause', 'Picked Team Size = 6', 'Adjust Level = 100'], banlist: ['Infiltrator', 'Choice Scarf', 'Explosion', 'Final Gambit', 'Healing Wish', 'Lunar Dance', 'Magic Room', 'Memento', 'Misty Explosion', 'Self-Destruct'], onValidateTeam(team) { const familyTable = new Set(); @@ -2192,17 +2081,14 @@ export const Formats: FormatList = [ { name: "[Gen 9] Trademarked", desc: `Sacrifice your Pokémon's ability for a status move that activates on switch-in.`, - threads: [ - `• Trademarked`, - ], - mod: 'trademarked', searchShow: false, - ruleset: ['Standard OMs', 'Sleep Moves Clause', 'Min Source Gen = 9'], + ruleset: ['Standard OMs', 'Sleep Moves Clause'], banlist: [ 'Arceus', 'Calyrex-Ice', 'Calyrex-Shadow', 'Dialga', 'Dialga-Origin', 'Eternatus', 'Flutter Mane', 'Giratina', 'Giratina-Origin', 'Groudon', - 'Koraidon', 'Kyogre', 'Landorus-Base', 'Magearna', 'Mewtwo', 'Miraidon', 'Palkia', 'Palkia-Origin', 'Rayquaza', 'Slaking', 'Spectrier', - 'Urshifu-Base', 'Zacian', 'Zacian-Crowned', 'Arena Trap', 'Magnet Pull', 'Moody', 'Shadow Tag', 'Baton Pass', 'Last Respects', 'Revival Blessing', + 'Koraidon', 'Kyogre', 'Landorus-Incarnate', 'Magearna', 'Mewtwo', 'Miraidon', 'Palkia', 'Palkia-Origin', 'Rayquaza', 'Slaking', 'Spectrier', + 'Urshifu-Single-Strike', 'Zacian', 'Zacian-Crowned', 'Arena Trap', 'Magnet Pull', 'Moody', 'Shadow Tag', 'Baton Pass', 'Last Respects', + 'Revival Blessing', ], restricted: [ 'Baneful Bunker', 'Block', 'Chilly Reception', 'Copycat', 'Detect', 'Destiny Bond', 'Encore', 'Fairy Lock', 'Ingrain', 'Instruct', @@ -2211,9 +2097,10 @@ export const Formats: FormatList = [ ], onValidateTeam(team, format, teamHas) { const problems = []; - for (const trademark in teamHas.trademarks) { - if (teamHas.trademarks[trademark] > 1) { - problems.push(`You are limited to 1 of each Trademark.`, `(You have ${teamHas.trademarks[trademark]} Pok\u00e9mon with ${trademark} as a Trademark.)`); + if (!teamHas.trademarks) return; + for (const trademark of teamHas.trademarks.keys()) { + if (teamHas.trademarks.get(trademark) > 1) { + problems.push(`You are limited to 1 of each Trademark.`, `(You have ${teamHas.trademarks.get(trademark)} Pok\u00e9mon with ${trademark} as a Trademark.)`); } } return problems; @@ -2252,11 +2139,57 @@ export const Formats: FormatList = [ set.ability = 'No Ability'; problems = problems.concat(validator.validateSet(set, teamHas) || []); set.ability = ability.id; - if (!teamHas.trademarks) teamHas.trademarks = {}; - teamHas.trademarks[ability.name] = (teamHas.trademarks[ability.name] || 0) + 1; + if (!teamHas.trademarks) teamHas.trademarks = new this.dex.Multiset(); + teamHas.trademarks.add(ability.name); return problems.length ? problems : null; }, }, + { + name: "[Gen 9] Triples", + mod: 'gen9', + gameType: 'triples', + searchShow: false, + ruleset: ['Standard Doubles', 'Evasion Abilities Clause'], + banlist: [ + 'Annihilape', 'Arceus', 'Calyrex-Ice', 'Calyrex-Shadow', 'Darkrai', 'Dialga', 'Dialga-Origin', 'Eternatus', 'Flutter Mane', 'Giratina', 'Giratina-Origin', + 'Groudon', 'Ho-Oh', 'Indeedee-M', 'Indeedee-F', 'Koraidon', 'Kyogre', 'Kyurem-Black', 'Kyurem-White', 'Lugia', 'Lunala', 'Magearna', 'Mewtwo', 'Miraidon', + 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Palkia', 'Palkia-Origin', 'Rayquaza', 'Reshiram', 'Solgaleo', 'Terapagos', 'Urshifu', 'Urshifu-Rapid-Strike', + 'Zacian', 'Zacian-Crowned', 'Zamazenta', 'Zamazenta-Crowned', 'Zekrom', 'Moody', 'Shadow Tag', 'Bright Powder', 'King\'s Rock', 'Razor Fang', + ], + }, + { + name: "[Gen 9] Type Split", + desc: `The Physical/Special split is reverted; All non-Status moves are Physical or Special depending on their type, no exceptions.`, + mod: 'gen9', + searchShow: false, + ruleset: ['Standard OMs', 'Sleep Moves Clause', 'Evasion Abilities Clause'], + banlist: [ + 'Annihilape', 'Arceus', 'Archaludon', 'Calyrex-Shadow', 'Chi-Yu', 'Darkrai', 'Deoxys-Normal', 'Deoxys-Attack', 'Dialga', 'Dialga-Origin', 'Espathra', + 'Eternatus', 'Flutter Mane', 'Giratina', 'Giratina-Origin', 'Groudon', 'Ho-Oh', 'Iron Bundle', 'Koraidon', 'Kyogre', 'Kyurem-White', 'Landorus-Incarnate', + 'Lugia', 'Lunala', 'Magearna', 'Mewtwo', 'Miraidon', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Palkia', 'Palkia-Origin', 'Rayquaza', 'Regieleki', + 'Reshiram', 'Shaymin-Sky', 'Sneasler', 'Solgaleo', 'Terapagos', 'Volcarona', 'Zacian-Crowned', 'Zamazenta-Crowned', 'Arena Trap', 'Moody', 'Shadow Tag', + 'Bright Powder', 'Damp Rock', 'King\'s Rock', 'Razor Fang', 'Baton Pass', 'Last Respects', 'Shed Tail', + ], + onModifyMovePriority: -1000, + onModifyMove(move, pokemon, target) { + if (move.category === 'Status') return; + const specialTypes = ['Dark', 'Dragon', 'Electric', 'Fairy', 'Fire', 'Grass', 'Ice', 'Psychic', 'Water']; + if (specialTypes.includes(move.type)) { + move.category = 'Special'; + } else if (move.type === 'Stellar') { + move.category = pokemon.getStat('atk', false, true) > pokemon.getStat('spa', false, true) ? 'Physical' : 'Special'; + } else { + move.category = 'Physical'; + } + }, + }, + { + name: "[Gen 6] Pure Hackmons", + desc: `Anything that can be hacked in-game and is usable in local battles is allowed.`, + mod: 'gen6', + searchShow: false, + ruleset: ['-Nonexistent', 'Team Preview', 'HP Percentage Mod', 'Cancel Mod', 'Endless Battle Clause', 'EV limit = 510'], + }, // National Dex /////////////////////////////////////////////////////////////////// @@ -2266,100 +2199,143 @@ export const Formats: FormatList = [ }, { name: "[Gen 9] National Dex", - threads: [ - `• National Dex Metagame Discussion`, - `• National Dex Ubers Viability Rankings`, - `• National Dex Ubers Sample Teams`, - ], - mod: 'gen9', - ruleset: ['Standard NatDex', 'OHKO Clause', 'Evasion Clause', 'Species Clause', 'Sleep Clause Mod'], + ruleset: ['Standard NatDex', 'OHKO Clause', 'Evasion Clause', 'Species Clause', 'Sleep Clause Mod', 'Terastal Clause'], banlist: [ 'ND Uber', 'ND AG', 'Arena Trap', 'Moody', 'Power Construct', 'Shadow Tag', 'King\'s Rock', 'Quick Claw', 'Razor Fang', 'Assist', 'Baton Pass', 'Last Respects', 'Shed Tail', ], }, { - name: "[Gen 9] National Dex Ubers", - threads: [ - `• National Dex Ubers Metagame Discussion`, - `• National Dex Ubers Sample Teams`, - `• National Dex Ubers Viability Rankings`, - ], + name: "[Gen 8] National Dex", + mod: 'gen8', + ruleset: ['Standard NatDex', 'OHKO Clause', 'Evasion Clause', 'Species Clause', 'Dynamax Clause', 'Sleep Clause Mod'], + banlist: ['ND Uber', 'Arena Trap', 'Moody', 'Power Construct', 'Shadow Tag', 'King\'s Rock', 'Razor Fang', 'Quick Claw', 'Baton Pass'], + }, + // National Dex Other Tiers + /////////////////////////////////////////////////////////////////// + + { + 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', 'OHKO Clause', 'Evasion Clause', 'DryPass Clause', + 'Sleep Clause Mod', 'Forme Clause', 'Z-Move Clause', 'Terastal 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', 'Shadow Tag', 'Berserk Gene', 'King\'s Rock', 'Quick Claw', 'Razor Fang', 'Acupressure', 'Last Respects', + ], + unbanlist: [ + 'Ampharos-Base', 'Appletun', 'Araquanid', 'Arbok', 'Centiskorch', 'Drampa', 'Dusknoir', 'Exeggutor-Alola', 'Exeggutor-Base', 'Frosmoth', 'Gabite', 'Galvantula', + 'Glaceon', 'Golduck', 'Gorebyss', 'Gourgeist-Average', 'Gourgeist-Super', 'Granbull', 'Gumshoos', 'Guzzlord', 'Kecleon', 'Ledian', 'Lurantis', 'Pinsir-Base', + 'Qwilfish-Base', 'Reuniclus', 'Shedinja', 'Shelgon', 'Spiritomb', 'Trapinch', 'Tsareena', 'Turtonator', 'Unown', 'Wigglytuff', 'Wishiwashi', + ], + // Stupid hardcode + onValidateSet(set, format, setHas, teamHas) { + if (set.item) { + const item = this.dex.items.get(set.item); + if (item.megaEvolves && !(this.ruleTable.has(`+item:${item.id}`) || this.ruleTable.has(`+pokemontag:mega`))) { + return [`Mega Evolution 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', ruleset: ['Standard NatDex', 'OHKO Clause', 'Evasion Moves Clause', 'Evasion Items Clause', 'Species Clause', 'Sleep Clause Mod', 'Mega Rayquaza Clause'], banlist: ['ND AG', 'Assist', 'Baton Pass'], }, { name: "[Gen 9] National Dex UU", - threads: [ - `• National Dex UU Metagame Discussion`, - `• National Dex UU Viability Rankings`, - `• National Dex UU Sample Teams`, - ], - mod: 'gen9', - ruleset: ['[Gen 9] National Dex', 'Terastal Clause'], - banlist: ['ND OU', 'ND UUBL', 'Battle Bond', 'Drizzle', 'Drought', 'Light Clay'], + ruleset: ['[Gen 9] National Dex'], + banlist: ['ND OU', 'ND UUBL', 'Drizzle', 'Drought', 'Light Clay'], }, { name: "[Gen 9] National Dex RU", - threads: [ - `• National Dex RU Metagame Discussion`, - `• National Dex RU Resources`, - ], - mod: 'gen9', searchShow: false, ruleset: ['[Gen 9] National Dex UU'], - banlist: ['ND UU', 'ND RUBL', 'Slowbro-Base + Slowbronite', 'Heat Rock'], + banlist: ['ND UU', 'ND RUBL', 'Slowbro-Base + Slowbronite'], }, { - name: "[Gen 9] National Dex Monotype", - threads: [ - `• National Dex Monotype Metagame Discussion`, - `• National Dex Monotype Sample Teams`, - `• National Dex Monotype Viability Rankings`, + name: "[Gen 9] National Dex LC", + mod: 'gen9', + searchShow: false, + ruleset: ['Standard NatDex', 'Little Cup', 'Species Clause', 'OHKO Clause', 'Evasion Clause', 'Sleep Clause Mod'], + banlist: [ + 'Aipom', 'Basculin-White-Striped', 'Clamperl', 'Corsola-Galar', 'Cutiefly', 'Drifloon', 'Dunsparce', 'Duraludon', 'Flittle', 'Girafarig', + 'Gligar', 'Meditite', 'Misdreavus', 'Murkrow', 'Porygon', 'Qwilfish-Hisui', 'Rufflet', 'Scraggy', 'Scyther', 'Sneasel', 'Sneasel-Hisui', + 'Stantler', 'Swirlix', 'Tangela', 'Vulpix-Alola', 'Woobat', 'Yanma', 'Zigzagoon-Base', 'Chlorophyll', 'Moody', 'Eevium Z', 'King\'s Rock', + 'Quick Claw', 'Razor Fang', 'Assist', 'Baton Pass', 'Dragon Rage', 'Sonic Boom', 'Sticky Web', ], - + }, + { + name: "[Gen 9] National Dex Monotype", mod: 'gen9', ruleset: ['Standard NatDex', 'Same Type Clause', 'Terastal Clause', 'Species Clause', 'OHKO Clause', 'Evasion Clause', 'Sleep Clause Mod'], banlist: [ - 'Annihilape', 'Arceus', 'Baxcalibur', 'Blastoise-Mega', 'Blaziken', 'Blaziken-Mega', 'Calyrex-Ice', 'Calyrex-Shadow', 'Chi-Yu', 'Chien-Pao', - 'Darkrai', 'Deoxys-Base', 'Deoxys-Attack', 'Dialga', 'Dracovish', 'Dragapult', 'Espathra', 'Eternatus', 'Flutter Mane', 'Genesect', 'Gengar-Mega', - 'Giratina', 'Giratina-Origin', 'Groudon', 'Ho-Oh', 'Hoopa-Unbound', 'Iron Bundle', 'Kangaskhan-Mega', 'Kartana', 'Kingambit', 'Koraidon', - 'Kyogre', 'Kyurem-Black', 'Kyurem-White', 'Lucario-Mega', 'Lugia', 'Lunala', 'Magearna', 'Marshadow', 'Mawile-Mega', 'Medicham-Mega', - 'Metagross-Mega', 'Mewtwo', 'Miraidon', 'Naganadel', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Ogerpon-Hearthflame', 'Palafin', 'Palkia', - 'Pheromosa', 'Rayquaza', 'Reshiram', 'Salamence-Mega', 'Shaymin-Sky', 'Solgaleo', 'Spectrier', 'Urshifu-Base', 'Xerneas', 'Yveltal', 'Zacian', - 'Zacian-Crowned', 'Zamazenta', 'Zamazenta-Crowned', 'Zekrom', 'Zygarde-Base', 'Zygarde-Complete', 'Moody', 'Shadow Tag', 'Power Construct', - 'Booster Energy', 'Damp Rock', 'Focus Band', 'Icy Rock', 'King\'s Rock', 'Leppa Berry', 'Quick Claw', 'Razor Fang', 'Smooth Rock', 'Terrain Extender', - 'Acupressure', 'Baton Pass', 'Last Respects', + 'Annihilape', 'Arceus', 'Baxcalibur', 'Blastoise-Mega', 'Blaziken', 'Blaziken-Mega', 'Calyrex-Ice', 'Calyrex-Shadow', 'Chi-Yu', 'Chien-Pao', 'Darkrai', + 'Deoxys-Normal', 'Deoxys-Attack', 'Dialga', 'Dracovish', 'Dragapult', 'Espathra', 'Eternatus', 'Flutter Mane', 'Genesect', 'Gengar-Mega', 'Giratina', + 'Giratina-Origin', 'Gouging Fire', 'Groudon', 'Ho-Oh', 'Hoopa-Unbound', 'Iron Bundle', 'Kangaskhan-Mega', 'Kartana', 'Kingambit', 'Koraidon', 'Kyogre', + 'Kyurem-Black', 'Kyurem-White', 'Lucario-Mega', 'Lugia', 'Lunala', 'Magearna', 'Marshadow', 'Mawile-Mega', 'Medicham-Mega', 'Metagross-Mega', 'Mewtwo', + 'Miraidon', 'Naganadel', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Ogerpon-Hearthflame', 'Palafin', 'Palkia', 'Pheromosa', 'Rayquaza', 'Reshiram', + 'Salamence-Mega', 'Shaymin-Sky', 'Solgaleo', 'Spectrier', 'Ursaluna-Bloodmoon', 'Urshifu-Single-Strike', 'Xerneas', 'Yveltal', 'Zacian', 'Zacian-Crowned', + 'Zamazenta', 'Zamazenta-Crowned', 'Zekrom', 'Zygarde-50%', 'Zygarde-Complete', 'Moody', 'Shadow Tag', 'Power Construct', 'Booster Energy', 'Damp Rock', + 'Focus Band', 'Icy Rock', 'King\'s Rock', 'Leppa Berry', 'Quick Claw', 'Razor Fang', 'Smooth Rock', 'Terrain Extender', 'Acupressure', 'Baton Pass', + 'Last Respects', 'Shed Tail', ], }, { name: "[Gen 9] National Dex Doubles", - threads: [ - `• National Dex Doubles Metagame Discussion`, - `• National Dex Doubles Resources`, - ], - mod: 'gen9', gameType: 'doubles', ruleset: ['Standard NatDex', 'OHKO Clause', 'Evasion Moves Clause', 'Evasion Abilities Clause', 'Species Clause', 'Gravity Sleep Clause'], banlist: [ - 'Annihilape', 'Arceus', 'Calyrex-Ice', 'Calyrex-Shadow', 'Dialga', 'Dialga-Origin', 'Eternatus', 'Genesect', 'Gengar-Mega', 'Giratina', 'Giratina-Origin', 'Groudon', - 'Ho-Oh', 'Koraidon', 'Kyogre', 'Kyurem-White', 'Lugia', 'Lunala', 'Magearna', 'Melmetal', 'Mewtwo', 'Miraidon', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', - 'Palkia', 'Palkia-Origin', 'Rayquaza', 'Reshiram', 'Shedinja', 'Solgaleo', 'Urshifu-Base', 'Xerneas', 'Yveltal', 'Zacian', 'Zacian-Crowned', 'Zamazenta-Crowned', - 'Zekrom', 'Commander', 'Power Construct', 'Assist', 'Dark Void', 'Swagger', + 'Annihilape', 'Arceus', 'Calyrex-Ice', 'Calyrex-Shadow', 'Dialga', 'Dialga-Origin', 'Eternatus', 'Genesect', 'Gengar-Mega', 'Giratina', 'Giratina-Origin', + 'Groudon', 'Ho-Oh', 'Koraidon', 'Kyogre', 'Kyurem-White', 'Lugia', 'Lunala', 'Magearna', 'Melmetal', 'Metagross-Mega', 'Mewtwo', 'Miraidon', 'Necrozma-Dawn-Wings', + 'Necrozma-Dusk-Mane', 'Necrozma-Ultra', 'Palkia', 'Palkia-Origin', 'Rayquaza', 'Reshiram', 'Shedinja', 'Solgaleo', 'Terapagos', 'Urshifu', 'Urshifu-Rapid-Strike', + 'Xerneas', 'Yveltal', 'Zacian', 'Zacian-Crowned', 'Zamazenta', 'Zamazenta-Crowned', 'Zekrom', 'Zygarde-50%', 'Zygarde-Complete', 'Commander', 'Power Construct', + 'Eevium Z', 'Assist', 'Coaching', 'Dark Void', 'Swagger', ], }, { - name: "[Gen 9] National Dex AG", - threads: [ - `• National Dex AG`, + name: "[Gen 9] National Dex Doubles Ubers", + mod: 'gen9', + gameType: 'doubles', + searchShow: false, + ruleset: ['Standard NatDex', 'OHKO Clause', 'Evasion Moves Clause', 'Evasion Abilities Clause', 'Species Clause'], + banlist: ['Shedinja', 'Assist'], + }, + { + name: "[Gen 9] National Dex Ubers UU", + mod: 'gen9', + searchShow: false, + ruleset: ['[Gen 9] National Dex Ubers'], + banlist: [ + 'Arceus-Normal', 'Arceus-Dark', 'Arceus-Ground', 'Calyrex-Ice', 'Chansey', 'Deoxys-Attack', 'Deoxys-Speed', 'Ditto', 'Dondozo', 'Eternatus', 'Glimmora', + 'Groudon-Primal', 'Ho-Oh', 'Kyogre-Primal', 'Lugia', 'Lunala', 'Marshadow', 'Melmetal', 'Mewtwo-Mega-Y', 'Necrozma-Dusk-Mane', 'Necrozma-Ultra', + 'Salamence-Mega', 'Smeargle', 'Yveltal', 'Zacian-Crowned', 'Zygarde-50%', + // UUBL + 'Arceus-Fairy', 'Arceus-Fire', 'Arceus-Ghost', 'Arceus-Water', 'Blaziken-Mega', 'Chi-Yu', 'Flutter Mane', 'Kyogre', 'Kyurem-Black', 'Rayquaza', + 'Shaymin-Sky', 'Zacian', 'Zekrom', 'Power Construct', 'Light Clay', 'Ultranecrozium Z', 'Last Respects', ], - + }, + { + name: "[Gen 9] National Dex AG", mod: 'gen9', searchShow: false, ruleset: ['Standard NatDex'], @@ -2367,27 +2343,23 @@ export const Formats: FormatList = [ { name: "[Gen 9] National Dex BH", desc: `Balanced Hackmons with National Dex elements mixed in.`, - threads: [ - `• National Dex BH`, - ], - mod: 'gen9', searchShow: false, ruleset: ['-Nonexistent', 'Standard NatDex', 'Forme Clause', 'Sleep Moves Clause', 'Ability Clause = 2', 'OHKO Clause', 'Evasion Moves Clause', 'Dynamax Clause', 'CFZ Clause', 'Terastal Clause', '!Obtainable'], banlist: [ - 'Cramorant-Gorging', 'Calyrex-Shadow', 'Darmanitan-Galar-Zen', 'Eternatus-Eternamax', 'Groudon-Primal', 'Rayquaza-Mega', 'Shedinja', 'Arena Trap', - 'Contrary', 'Gorilla Tactics', 'Huge Power', 'Illusion', 'Innards Out', 'Magnet Pull', 'Moody', 'Neutralizing Gas', 'Parental Bond', 'Pure Power', - 'Shadow Tag', 'Stakeout', 'Water Bubble', 'Wonder Guard', 'Gengarite', 'Berserk Gene', 'Belly Drum', 'Bolt Beak', 'Chatter', 'Double Iron Bash', - 'Electrify', 'Last Respects', 'Octolock', 'Rage Fist', 'Revival Blessing', 'Shed Tail', 'Shell Smash', 'Comatose + Sleep Talk', 'Imprison + Transform', + 'Cramorant-Gorging', 'Calyrex-Shadow', 'Darmanitan-Galar-Zen', 'Eternatus-Eternamax', 'Greninja-Ash', 'Groudon-Primal', 'Rayquaza-Mega', 'Shedinja', 'Terapagos-Terastal', 'Arena Trap', + 'Contrary', 'Gorilla Tactics', 'Hadron Engine', 'Huge Power', 'Illusion', 'Innards Out', 'Magnet Pull', 'Moody', 'Neutralizing Gas', 'Parental Bond', 'Pure Power', 'Shadow Tag', 'Stakeout', + 'Water Bubble', 'Wonder Guard', 'Gengarite', 'Berserk Gene', 'Belly Drum', 'Bolt Beak', 'Ceaseless Edge', 'Chatter', 'Double Iron Bash', 'Electrify', 'Last Respects', 'Octolock', 'Rage Fist', + 'Revival Blessing', 'Shed Tail', 'Shell Smash', 'Comatose + Sleep Talk', 'Imprison + Transform', ], restricted: ['Arceus'], onValidateTeam(team, format) { // baseSpecies:count - const restrictedPokemonCount = new Map(); + const restrictedPokemonCount = new this.dex.Multiset(); for (const set of team) { const species = this.dex.species.get(set.species); if (!this.ruleTable.isRestrictedSpecies(species)) continue; - restrictedPokemonCount.set(species.baseSpecies, (restrictedPokemonCount.get(species.baseSpecies) || 0) + 1); + restrictedPokemonCount.add(species.baseSpecies); } for (const [baseSpecies, count] of restrictedPokemonCount) { if (count > 1) { @@ -2400,25 +2372,29 @@ export const Formats: FormatList = [ }, }, { - name: "[Gen 8] National Dex", - threads: [ - `• SS National Dex Metagame Discussion`, - `• SS National Dex Sample Teams`, - `• SS National Dex Viability Rankings`, + name: "[Gen 9] National Dex STABmons", + mod: 'gen9', + // searchShow: false, + ruleset: ['Standard NatDex', 'OHKO Clause', 'Evasion Clause', 'Species Clause', 'STABmons Move Legality', 'Sleep Moves Clause', 'Terastal Clause'], + banlist: [ + 'Araquanid', 'Arceus', 'Azumarill', 'Baxcalibur', 'Blastoise-Mega', 'Blaziken-Mega', 'Basculegion', 'Basculegion-F', 'Calyrex-Ice', 'Calyrex-Shadow', 'Chi-Yu', 'Chien-Pao', + 'Cloyster', 'Darkrai', 'Darmanitan-Galar', 'Deoxys-Attack', 'Deoxys-Normal', 'Dialga', 'Dialga-Origin', 'Dracovish', 'Dragapult', 'Dragonite', 'Enamorus-Incarnate', 'Espathra', + 'Eternatus', 'Flutter Mane', 'Garchomp', 'Gengar-Mega', 'Genesect', 'Giratina', 'Giratina-Origin', 'Groudon', 'Gouging Fire', 'Ho-Oh', 'Iron Bundle', 'Kangaskhan-Mega', + 'Kartana', 'Koraidon', 'Komala', 'Kyogre', 'Kyurem', 'Kyurem-Black', 'Kyurem-White', 'Landorus-Incarnate', 'Lilligant-Hisui', 'Lucario-Mega', 'Lugia', 'Lunala', 'Magearna', + 'Manaphy', 'Marshadow', 'Metagross-Mega', 'Mewtwo', 'Miraidon', 'Naganadel', 'Necrozma-Dusk-Mane', 'Necrozma-Dawn-Wings', 'Ogerpon-Hearthflame', 'Ogerpon-Wellspring', 'Palkia', + 'Palkia-Origin', 'Porygon-Z', 'Pheromosa', 'Rayquaza', 'Reshiram', 'Salamence-Mega', 'Shaymin-Sky', 'Silvally', 'Solgaleo', 'Spectrier', 'Tapu Koko', 'Tapu Lele', 'Terapagos', + 'Ursaluna-Bloodmoon', 'Urshifu-Single-Strike', 'Walking Wake', 'Xerneas', 'Xurkitree', 'Yveltal', 'Zacian', 'Zacian-Crowned', 'Zamazenta-Crowned', 'Zekrom', 'Zoroark-Hisui', + 'Zygarde-50%', 'Arena Trap', 'Moody', 'Shadow Tag', 'Power Construct', 'Damp Rock', 'King\'s Rock', 'Quick Claw', 'Razor Fang', 'Assist', 'Baton Pass', 'Last Respects', + 'Shed Tail', 'Wicked Blow', 'Wicked Torque', + ], + restricted: [ + 'Acupressure', 'Astral Barrage', 'Belly Drum', 'Bolt Beak', 'Chatter', 'Clangorous Soul', 'Dire Claw', 'Double Iron Bash', 'Dragon Energy', 'Electrify', 'Extreme Speed', + 'Fillet Away', 'Final Gambit', 'Fishious Rend', 'Geomancy', 'Gigaton Hammer', 'No Retreat', 'Rage Fist', 'Revival Blessing', 'Shell Smash', 'Shift Gear', 'Thousand Arrows', + 'Trick-or-Treat', 'Triple Arrows', 'V-create', 'Victory Dance', ], - - mod: 'gen8', - ruleset: ['Standard NatDex', 'OHKO Clause', 'Evasion Clause', 'Species Clause', 'Dynamax Clause', 'Sleep Clause Mod'], - banlist: ['ND Uber', 'Arena Trap', 'Moody', 'Power Construct', 'Shadow Tag', 'King\'s Rock', 'Razor Fang', 'Quick Claw', 'Baton Pass'], }, { name: "[Gen 8] National Dex UU", - threads: [ - `• SS National Dex UU Metagame Discussion`, - `• SS National Dex UU Sample Teams`, - `• SS National Dex UU Viability Rankings`, - ], - mod: 'gen8', searchShow: false, ruleset: ['[Gen 8] National Dex'], @@ -2426,549 +2402,33 @@ export const Formats: FormatList = [ }, { name: "[Gen 8] National Dex Monotype", - threads: [ - `• SS National Dex Monotype`, - ], - mod: 'gen8', searchShow: false, ruleset: ['Standard NatDex', 'Same Type Clause', 'Species Clause', 'OHKO Clause', 'Evasion Moves Clause', 'Evasion Items Clause', 'Dynamax Clause', 'Sleep Clause Mod'], banlist: [ - 'Arceus', 'Blastoise-Mega', 'Blaziken', 'Blaziken-Mega', 'Calyrex-Ice', 'Calyrex-Shadow', 'Darkrai', 'Deoxys-Base', 'Deoxys-Attack', 'Dialga', 'Dracovish', 'Dragapult', - 'Eternatus', 'Genesect', 'Gengar-Mega', 'Giratina', 'Giratina-Origin', 'Greninja-Bond', 'Greninja-Ash', 'Groudon', 'Ho-Oh', 'Kangaskhan-Mega', 'Kartana', 'Kyogre', - 'Kyurem-Black', 'Kyurem-White', 'Lucario-Mega', 'Lugia', 'Lunala', 'Magearna', 'Marshadow', 'Mawile-Mega', 'Medicham-Mega', 'Metagross-Mega', 'Mewtwo', 'Moltres-Galar', + 'Arceus', 'Blastoise-Mega', 'Blaziken', 'Blaziken-Mega', 'Calyrex-Ice', 'Calyrex-Shadow', 'Darkrai', 'Deoxys-Normal', 'Deoxys-Attack', 'Dialga', 'Dracovish', 'Dragapult', + 'Eternatus', 'Genesect', 'Gengar-Mega', 'Giratina', 'Giratina-Origin', 'Greninja-Bond', 'Greninja-Ash', 'Groudon', 'Ho-Oh', 'Hoopa-Unbound', 'Kangaskhan-Mega', 'Kartana', + 'Kyogre', 'Kyurem-Black', 'Kyurem-White', 'Lucario-Mega', 'Lugia', 'Lunala', 'Magearna', 'Marshadow', 'Mawile-Mega', 'Medicham-Mega', 'Metagross-Mega', 'Mewtwo', 'Moltres-Galar', 'Naganadel', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Palkia', 'Pheromosa', 'Rayquaza', 'Reshiram', 'Salamence-Mega', 'Shaymin-Sky', 'Solgaleo', 'Spectrier', - 'Urshifu-Base', 'Xerneas', 'Yveltal', 'Zacian', 'Zacian-Crowned', 'Zamazenta', 'Zamazenta-Crowned', 'Zekrom', 'Zygarde-Base', 'Zygarde-Complete', 'Battle Bond', - 'Power Construct', 'Moody', 'Shadow Tag', 'Damp Rock', 'Focus Band', 'King\'s Rock', 'Quick Claw', 'Razor Fang', 'Smooth Rock', 'Terrain Extender', 'Baton Pass', - ], - }, - - // S/V DLC 1 - /////////////////////////////////////////////////////////////////// - - { - section: "S/V DLC 1", - }, - { - name: "[Gen 9 DLC 1] OU", - threads: [ - `• SV OU Metagame Discussion`, - `• SV OU Sample Teams`, - `• SV OU Viability Rankings`, - ], - - mod: 'gen9dlc1', - searchShow: false, - ruleset: ['Standard'], - banlist: ['Uber', 'AG', 'Arena Trap', 'Moody', 'Sand Veil', 'Shadow Tag', 'Snow Cloak', 'King\'s Rock', 'Razor Fang', 'Baton Pass', 'Last Respects', 'Shed Tail'], - }, - { - name: "[Gen 9 DLC 1] Ubers", - threads: [ - `• Ubers Metagame Discussion`, - `• Ubers Viability Rankings`, - ], - - mod: 'gen9dlc1', - searchShow: false, - ruleset: ['Standard'], - banlist: ['AG', 'Moody', 'King\'s Rock', 'Razor Fang', 'Baton Pass'], - }, - { - name: "[Gen 9 DLC 1] UU", - threads: [ - `• UU Metagame Discussion`, - `• UU Viability Rankings`, - `• UU Sample Teams`, - ], - - mod: 'gen9dlc1', - searchShow: false, - ruleset: ['[Gen 9 DLC 1] OU'], - banlist: ['OU', 'UUBL'], - }, - { - name: "[Gen 9 DLC 1] RU", - threads: [ - `• RU Metagame Discussion`, - `• RU Viability Rankings`, - `• RU Sample Teams`, - ], - - mod: 'gen9dlc1', - searchShow: false, - ruleset: ['[Gen 9 DLC 1] UU'], - banlist: ['UU', 'RUBL', 'Light Clay'], - }, - { - name: "[Gen 9 DLC 1] NU", - threads: [ - `• NU Metagame Discussion`, - `• NU Viability Rankings`, - `• NU Sample Teams`, - ], - - mod: 'gen9dlc1', - searchShow: false, - ruleset: ['[Gen 9 DLC 1] RU'], - banlist: ['RU', 'NUBL'], - }, - { - name: "[Gen 9 DLC 1] PU", - threads: [ - `• PU Viability Rankings`, - `• PU Sample Teams`, - ], - - mod: 'gen9dlc1', - searchShow: false, - ruleset: ['[Gen 9 DLC 1] NU'], - banlist: ['NU', 'PUBL', 'Damp Rock', 'Heat Rock'], - }, - { - name: "[Gen 9 DLC 1] LC", - threads: [ - `• Little Cup Metagame Discussion`, - `• Little Cup Sample Teams`, - `• Little Cup Viability Rankings`, - ], - - mod: 'gen9dlc1', - searchShow: false, - ruleset: ['Little Cup', 'Standard'], - banlist: [ - 'Aipom', 'Basculin-White-Striped', 'Cutiefly', 'Diglett-Base', 'Dunsparce', 'Flittle', 'Gastly', 'Girafarig', 'Gligar', 'Growlithe-Hisui', - 'Meditite', 'Misdreavus', 'Murkrow', 'Qwilfish-Hisui', 'Rufflet', 'Scyther', 'Sneasel', 'Sneasel-Hisui', 'Stantler', 'Vulpix', 'Vulpix-Alola', - 'Yanma', 'Moody', 'Baton Pass', 'Sticky Web', - ], - }, - { - name: "[Gen 9 DLC 1] Monotype", - threads: [ - `• Monotype Metagame Discussion`, - `• Monotype Sample Teams`, - `• Monotype Viability Rankings`, - ], - - mod: 'gen9dlc1', - searchShow: false, - ruleset: ['Standard', 'Evasion Abilities Clause', 'Same Type Clause', 'Terastal Clause'], - banlist: [ - 'Annihilape', 'Arceus', 'Calyrex-Ice', 'Calyrex-Shadow', 'Chi-Yu', 'Dialga', 'Dialga-Origin', 'Eternatus', 'Giratina', 'Giratina-Origin', - 'Groudon', 'Iron Bundle', 'Koraidon', 'Kyogre', 'Magearna', 'Mewtwo', 'Miraidon', 'Palafin', 'Palkia', 'Palkia-Origin', 'Rayquaza', - 'Shaymin-Sky', 'Urshifu-Base', 'Zacian', 'Zacian-Crowned', 'Zamazenta-Crowned', 'Moody', 'Shadow Tag', 'Booster Energy', 'Damp Rock', - 'Focus Band', 'King\'s Rock', 'Razor Fang', 'Quick Claw', 'Acupressure', 'Baton Pass', 'Last Respects', - ], - }, - { - name: "[Gen 9 DLC 1] Doubles OU", - threads: [ - `• Doubles OU Sample Teams`, - ], - - mod: 'gen9dlc1', - searchShow: false, - gameType: 'doubles', - ruleset: ['Standard Doubles'], - banlist: ['DUber', 'Shadow Tag'], - }, - { - name: "[Gen 9 DLC 1] Doubles UU", - threads: [ - `• Doubles UU`, - ], - - mod: 'gen9dlc1', - searchShow: false, - gameType: 'doubles', - ruleset: ['[Gen 9 DLC 1] Doubles OU', 'Evasion Abilities Clause'], - banlist: ['DOU', 'DBL'], - }, - { - name: "[Gen 9 DLC 1] Doubles LC", - threads: [ - `• Doubles LC`, - ], - - mod: 'gen9dlc1', - gameType: 'doubles', - searchShow: false, - ruleset: ['Standard Doubles', 'Little Cup', 'Sleep Clause Mod'], - banlist: ['Basculin-White-Striped', 'Dunsparce', 'Gligar', 'Murkrow', 'Qwilfish-Hisui', 'Scyther', 'Sneasel', 'Sneasel-Hisui', 'Vulpix', 'Vulpix-Alola', 'Yanma'], - }, - { - name: "[Gen 9 DLC 1] 1v1", - desc: `Bring three Pokémon to Team Preview and choose one to battle.`, - threads: [ - `• 1v1 Metagame Discussion`, - `• 1v1 Viability Rankings`, - ], - - mod: 'gen9dlc1', - searchShow: false, - ruleset: [ - 'Picked Team Size = 1', 'Max Team Size = 3', - 'Standard', 'Terastal Clause', 'Sleep Moves Clause', 'Accuracy Moves Clause', '!Sleep Clause Mod', - ], - banlist: [ - 'Arceus', 'Calyrex-Ice', 'Calyrex-Shadow', 'Chi-Yu', 'Cinderace', 'Dialga', 'Dialga-Origin', 'Dragonite', 'Eternatus', 'Flutter Mane', - 'Gholdengo', 'Giratina', 'Giratina-Origin', 'Groudon', 'Hoopa-Unbound', 'Jirachi', 'Koraidon', 'Kyogre', 'Magearna', 'Meloetta', 'Mew', - 'Mewtwo', 'Mimikyu', 'Miraidon', 'Ogerpon-Cornerstone', 'Palkia', 'Palkia-Origin', 'Rayquaza', 'Scream Tail', 'Shaymin-Sky', 'Snorlax', - 'Zacian', 'Zacian-Crowned', 'Zamazenta', 'Zamazenta-Crowned', 'Moody', 'Focus Band', 'Focus Sash', 'King\'s Rock', 'Razor Fang', - 'Quick Claw', 'Acupressure', 'Perish Song', - ], - }, - { - name: "[Gen 9 DLC 1] Anything Goes", - threads: [ - `• AG Metagame Discussion`, - `• AG Viability Rankings`, - `• AG Sample Teams`, - ], - - mod: 'gen9dlc1', - searchShow: false, - ruleset: ['Min Source Gen = 9', 'Obtainable', 'Team Preview', 'HP Percentage Mod', 'Cancel Mod', 'Endless Battle Clause'], - }, - { - name: "[Gen 9 DLC 1] ZU", - threads: [ - `• ZU Metagame Discussion`, - ], - - mod: 'gen9dlc1', - searchShow: false, - ruleset: ['[Gen 9 DLC 1] PU'], - banlist: ['PU', 'ZUBL'], - }, - { - name: "[Gen 9 DLC 1] NFE", - desc: `Only Pokémon that can evolve are allowed.`, - threads: [ - `• NFE`, - `• NFE Resources`, - ], - - mod: 'gen9dlc1', - searchShow: false, - ruleset: ['Standard OMs', 'Not Fully Evolved', 'Sleep Moves Clause', 'Terastal Clause', 'Min Source Gen = 9'], - banlist: [ - 'Basculin-White-Striped', 'Bisharp', 'Chansey', 'Haunter', 'Magneton', 'Primeape', 'Scyther', 'Sneasel-Hisui', 'Ursaring', 'Arena Trap', 'Magnet Pull', 'Shadow Tag', 'Baton Pass', - ], - }, - { - name: "[Gen 9 DLC 1] Almost Any Ability", - desc: `Pokémon have access to almost any ability.`, - threads: [ - `• Almost Any Ability`, - `• AAA Resources`, - ], - - mod: 'gen9dlc1', - searchShow: false, - ruleset: ['Standard OMs', '!Obtainable Abilities', 'Ability Clause = 1', 'Sleep Moves Clause', 'Terastal Clause', 'Min Source Gen = 9'], - banlist: [ - 'Annihilape', 'Arceus', 'Baxcalibur', 'Calyrex-Ice', 'Calyrex-Shadow', 'Darkrai', 'Dialga', 'Dialga-Origin', 'Dragapult', 'Enamorus-Base', - 'Eternatus', 'Flutter Mane', 'Giratina', 'Giratina-Origin', 'Groudon', 'Hariyama', 'Hoopa-Unbound', 'Iron Bundle', 'Iron Hands', - 'Iron Valiant', 'Koraidon', 'Kyogre', 'Magearna', 'Mewtwo', 'Miraidon', 'Noivern', 'Palkia', 'Palkia-Origin', 'Rayquaza', 'Shaymin-Sky', - 'Slaking', 'Sneasler', 'Spectrier', 'Ursaluna-Base', 'Urshifu', 'Urshifu-Rapid-Strike', 'Weavile', 'Zacian', 'Zacian-Crowned', 'Zamazenta-Base', - 'Zoroark-Hisui', 'Arena Trap', 'Comatose', 'Contrary', 'Fur Coat', 'Good as Gold', 'Gorilla Tactics', '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', 'Toxic Debris', 'Unburden', 'Water Bubble', 'Wonder Guard', 'King\'s Rock', - 'Razor Fang', 'Baton Pass', 'Last Respects', 'Revival Blessing', 'Shed Tail', - ], - }, - { - name: "[Gen 9 DLC 1] Balanced Hackmons", - desc: `Anything directly hackable onto a set (EVs, IVs, forme, ability, item, and move) and is usable in local battles is allowed.`, - threads: [ - `• Balanced Hackmons`, - `• BH Resources`, - ], - - mod: 'gen9dlc1', - 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', - ], - banlist: [ - 'Calyrex-Shadow', 'Gengar-Mega', 'Groudon-Primal', 'Mewtwo-Mega-Y', 'Rayquaza-Mega', 'Regigigas', 'Shedinja', 'Slaking', 'Arena Trap', - 'Comatose', 'Contrary', 'Gorilla Tactics', 'Hadron Engine', 'Huge Power', 'Illusion', 'Innards Out', 'Libero', 'Magnet Pull', 'Moody', - 'Neutralizing Gas', 'Orichalcum Pulse', 'Parental Bond', 'Poison Heal', 'Protean', 'Pure Power', 'Shadow Tag', 'Stakeout', 'Water Bubble', - 'Wonder Guard', 'Baton Pass', 'Belly Drum', 'Ceaseless Edge', 'Dire Claw', 'Fillet Away', 'Imprison', 'Last Respects', 'Lumina Crash', - 'Quiver Dance', 'Rage Fist', 'Revival Blessing', 'Shed Tail', 'Substitute', 'Shell Smash', 'Tail Glow', - ], - }, - { - name: "[Gen 9 DLC 1] Godly Gift", - desc: `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.`, - threads: [ - `• Godly Gift`, - `• Godly Gift Resources`, - ], - - mod: 'gen9dlc1', - searchShow: false, - ruleset: ['Standard OMs', 'Sleep Moves Clause', 'Godly Gift Mod', 'Min Source Gen = 9'], - banlist: [ - 'Blissey', 'Calyrex-Shadow', 'Chansey', 'Koraidon', 'Miraidon', 'Arena Trap', 'Huge Power', 'Moody', 'Pure Power', 'Shadow Tag', - 'Swift Swim', 'Bright Powder', 'Focus Band', 'King\'s Rock', 'Quick Claw', 'Razor Fang', 'Baton Pass', 'Last Respects', 'Shed Tail', - ], - restricted: [ - 'Annihilape', 'Arceus', 'Calyrex-Ice', 'Chi-Yu', 'Crawdaunt', 'Dialga', 'Dialga-Origin', 'Eternatus', 'Giratina', 'Giratina-Origin', 'Gliscor', 'Groudon', - 'Iron Bundle', 'Kingambit', 'Kyogre', 'Magearna', 'Mewtwo', 'Ogerpon-Hearthflame', 'Palafin', 'Palkia', 'Palkia-Origin', 'Rayquaza', 'Regieleki', 'Shaymin-Sky', - 'Toxapex', 'Ursaluna', 'Ursaluna-Bloodmoon', 'Zacian', 'Zacian-Crowned', 'Zamazenta-Crowned', - ], - }, - { - name: "[Gen 9 DLC 1] Mix and Mega", - desc: `Mega evolve any Pokémon with any mega stone, or transform them with Primal orbs, Origin orbs, and Rusted items with no limit. Mega and Primal boosts based on form changes from gen 7.`, - threads: [ - `• Mix and Mega`, - `• Mix and Mega Resources`, - ], - - mod: 'mnmdlc1', - searchShow: false, - ruleset: ['Standard OMs', 'Evasion Items Clause', 'Evasion Abilities Clause', 'Sleep Moves Clause', 'Terastal Clause', 'Min Source Gen = 9'], - banlist: [ - 'Calyrex-Shadow', 'Eternatus', 'Koraidon', 'Kyogre', 'Miraidon', 'Moody', 'Rusted Sword', 'Shadow Tag', 'Beedrillite', 'Blazikenite', 'Gengarite', - 'Kangaskhanite', 'Mawilite', 'Medichamite', 'Pidgeotite', 'Baton Pass', 'Shed Tail', - ], - restricted: [ - 'Arceus', 'Basculegion-Base', 'Calyrex-Ice', 'Dialga', 'Dragapult', 'Enamorus-Base', 'Flutter Mane', 'Gengar', 'Gholdengo', 'Giratina', 'Groudon', - 'Iron Bundle', 'Jolteon', 'Kilowattrel', 'Manaphy', 'Mewtwo', 'Palkia', 'Rayquaza', 'Slaking', 'Sneasler', 'Ursaluna-Bloodmoon', 'Urshifu', - 'Urshifu-Rapid-Strike', 'Zacian', - ], - onValidateTeam(team) { - const itemTable = new Set(); - for (const set of team) { - const item = this.dex.items.get(set.item); - if (!item.megaStone && !item.onPrimal && !item.forcedForme?.endsWith('Origin') && - !item.name.startsWith('Rusted') && !item.name.endsWith('Mask')) continue; - const natdex = this.ruleTable.has('standardnatdex'); - 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.megaStone && !item.onPrimal) || - (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/orb/rusted item/sinnoh item/mask.`, - `(You have more than one ${item.name})`, - ]; - } - itemTable.add(item.id); - } - }, - onBegin() { - for (const pokemon of this.getAllPokemon()) { - pokemon.m.originalSpecies = pokemon.baseSpecies.name; - } - }, - onSwitchIn(pokemon) { - // @ts-ignore - const originalFormeSecies = this.dex.species.get(pokemon.species.originalSpecies); - if (originalFormeSecies.exists && pokemon.m.originalSpecies !== originalFormeSecies.baseSpecies) { - // Place volatiles on the Pokémon to show its mega-evolved condition and details - this.add('-start', pokemon, originalFormeSecies.requiredItem || originalFormeSecies.requiredMove, '[silent]'); - const oSpecies = this.dex.species.get(pokemon.m.originalSpecies); - if (oSpecies.types.length !== pokemon.species.types.length || oSpecies.types[1] !== pokemon.species.types[1]) { - this.add('-start', pokemon, 'typechange', pokemon.species.types.join('/'), '[silent]'); - } - } - }, - onSwitchOut(pokemon) { - // @ts-ignore - const oMegaSpecies = this.dex.species.get(pokemon.species.originalSpecies); - if (oMegaSpecies.exists && pokemon.m.originalSpecies !== oMegaSpecies.baseSpecies) { - this.add('-end', pokemon, oMegaSpecies.requiredItem || oMegaSpecies.requiredMove, '[silent]'); - } - }, - }, - { - name: "[Gen 9 DLC 1] STABmons", - desc: `Pokémon can use any move of their typing, in addition to the moves they can normally learn.`, - threads: [ - `• STABmons`, - `• STABmons Resources`, - ], - - mod: 'gen9dlc1', - searchShow: false, - ruleset: ['Standard OMs', 'STABmons Move Legality', 'Sleep Moves Clause', 'Min Source Gen = 9'], - banlist: [ - 'Arceus', 'Azumarill', 'Basculegion', 'Basculegion-F', 'Baxcalibur', 'Calyrex-Ice', 'Calyrex-Shadow', 'Chi-Yu', 'Chien-Pao', 'Cloyster', - 'Darkrai', 'Dialga', 'Dialga-Origin', 'Dragapult', 'Dragonite', 'Enamorus-Base', 'Eternatus', 'Flutter Mane', 'Garchomp', 'Giratina', - 'Giratina-Origin', 'Groudon', 'Iron Bundle', 'Komala', 'Koraidon', 'Kyogre', 'Landorus-Base', 'Lilligant-Hisui', 'Magearna', 'Manaphy', - 'Mewtwo', 'Miraidon', 'Ogerpon-Hearthflame', 'Palkia', 'Palkia-Origin', 'Rayquaza', 'Regieleki', 'Roaring Moon', 'Shaymin-Sky', 'Spectrier', - 'Ursaluna', 'Ursaluna-Bloodmoon', 'Urshifu-Base', 'Walking Wake', 'Zacian', 'Zacian-Crowned', 'Zamazenta', 'Zamazenta-Crowned', 'Zoroark-Hisui', - 'Arena Trap', 'Moody', 'Shadow Tag', 'Damp Rock', 'King\'s Rock', 'Razor Fang', 'Baton Pass', 'Shed Tail', - ], - restricted: [ - 'Acupressure', 'Astral Barrage', 'Belly Drum', 'Clangorous Soul', 'Dire Claw', 'Extreme Speed', 'Fillet Away', 'Gigaton Hammer', 'Last Respects', - 'No Retreat', 'Revival Blessing', 'Shell Smash', 'Shift Gear', 'Triple Arrows', 'V-create', 'Victory Dance', 'Wicked Blow', - ], - }, - { - name: "[Gen 9 DLC 1] National Dex", - threads: [ - `• National Dex Metagame Discussion`, - `• National Dex Ubers Viability Rankings`, - `• National Dex Ubers Sample Teams`, - ], - - mod: 'gen9dlc1', - searchShow: false, - ruleset: ['Standard NatDex', 'OHKO Clause', 'Evasion Clause', 'Species Clause', 'Sleep Clause Mod'], - banlist: [ - 'ND Uber', 'ND AG', 'Arena Trap', 'Moody', 'Power Construct', 'Shadow Tag', 'King\'s Rock', - 'Quick Claw', 'Razor Fang', 'Assist', 'Baton Pass', 'Last Respects', 'Shed Tail', - ], - }, - { - name: "[Gen 9 DLC 1] National Dex Monotype", - threads: [ - `• National Dex Monotype Metagame Discussion`, - `• National Dex Monotype Sample Teams`, - `• National Dex Monotype Viability Rankings`, - ], - - mod: 'gen9dlc1', - searchShow: false, - ruleset: ['Standard NatDex', 'Same Type Clause', 'Terastal Clause', 'Species Clause', 'OHKO Clause', 'Evasion Clause', 'Sleep Clause Mod'], - banlist: [ - 'Annihilape', 'Arceus', 'Baxcalibur', 'Blastoise-Mega', 'Blaziken', 'Blaziken-Mega', 'Calyrex-Ice', 'Calyrex-Shadow', 'Chi-Yu', 'Chien-Pao', - 'Darkrai', 'Deoxys-Base', 'Deoxys-Attack', 'Dialga', 'Dracovish', 'Dragapult', 'Espathra', 'Eternatus', 'Flutter Mane', 'Genesect', 'Gengar-Mega', - 'Giratina', 'Giratina-Origin', 'Groudon', 'Ho-Oh', 'Hoopa-Unbound', 'Iron Bundle', 'Kangaskhan-Mega', 'Kartana', 'Kingambit', 'Koraidon', - 'Kyogre', 'Kyurem-Black', 'Kyurem-White', 'Lucario-Mega', 'Lugia', 'Lunala', 'Magearna', 'Marshadow', 'Mawile-Mega', 'Medicham-Mega', - 'Metagross-Mega', 'Mewtwo', 'Miraidon', 'Naganadel', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Ogerpon-Hearthflame', 'Palafin', 'Palkia', - 'Pheromosa', 'Rayquaza', 'Reshiram', 'Salamence-Mega', 'Shaymin-Sky', 'Solgaleo', 'Spectrier', 'Urshifu-Base', 'Xerneas', 'Yveltal', 'Zacian', - 'Zacian-Crowned', 'Zamazenta', 'Zamazenta-Crowned', 'Zekrom', 'Zygarde-Base', 'Zygarde-Complete', 'Moody', 'Shadow Tag', 'Power Construct', - 'Booster Energy', 'Damp Rock', 'Focus Band', 'Icy Rock', 'King\'s Rock', 'Leppa Berry', 'Quick Claw', 'Razor Fang', 'Smooth Rock', 'Terrain Extender', - 'Acupressure', 'Baton Pass', 'Last Respects', - ], - }, - { - name: "[Gen 9 DLC 1] National Dex Doubles", - threads: [ - `• National Dex Doubles Metagame Discussion`, - `• National Dex Doubles Resources`, - ], - - mod: 'gen9dlc1', - searchShow: false, - gameType: 'doubles', - ruleset: ['Standard NatDex', 'OHKO Clause', 'Evasion Moves Clause', 'Evasion Abilities Clause', 'Species Clause', 'Gravity Sleep Clause'], - banlist: [ - 'Annihilape', 'Arceus', 'Calyrex-Ice', 'Calyrex-Shadow', 'Dialga', 'Dialga-Origin', 'Eternatus', 'Genesect', 'Gengar-Mega', 'Giratina', 'Giratina-Origin', 'Groudon', - 'Ho-Oh', 'Koraidon', 'Kyogre', 'Kyurem-White', 'Lugia', 'Lunala', 'Magearna', 'Melmetal', 'Mewtwo', 'Miraidon', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', - 'Palkia', 'Palkia-Origin', 'Rayquaza', 'Reshiram', 'Shedinja', 'Solgaleo', 'Urshifu-Base', 'Xerneas', 'Yveltal', 'Zacian', 'Zacian-Crowned', 'Zamazenta-Crowned', - 'Zekrom', 'Commander', 'Power Construct', 'Assist', 'Dark Void', 'Swagger', - ], - }, - { - name: "[Gen 9 DLC 1] Paldea Dex Draft", - - mod: 'gen9dlc1', - searchShow: false, - ruleset: ['Draft', 'Min Source Gen = 9'], - }, - { - name: "[Gen 9 DLC 1] Tera Preview Paldea Dex Draft", - - mod: 'gen9dlc1', - searchShow: false, - ruleset: ['[Gen 9 DLC 1] Paldea Dex Draft', 'Tera Type Preview'], - }, - - // Randomized Format Spotlight - /////////////////////////////////////////////////////////////////// - - { - section: "Randomized Format Spotlight", - column: 3, - }, - { - name: "[Gen 9] Partners in Crime Random Battle", - desc: `Doubles-based metagame where both active ally Pokémon share abilities and moves.`, - - mod: 'partnersincrime', - gameType: 'doubles', - team: 'random', - ruleset: ['[Gen 9] Random Doubles Battle'], - onBegin() { - for (const pokemon of this.getAllPokemon()) { - pokemon.m.trackPP = new Map(); - } - }, - onBeforeSwitchIn(pokemon) { - pokemon.m.curMoves = this.dex.deepClone(pokemon.moves); - let ngas = false; - for (const poke of this.getAllActive()) { - if (this.toID(poke.ability) === ('neutralizinggas' as ID)) { - ngas = true; - break; - } - } - const BAD_ABILITIES = ['trace', 'imposter', 'neutralizinggas', 'illusion', 'wanderingspirit']; - const ally = pokemon.side.active.find(mon => mon && mon !== pokemon && !mon.fainted); - if (ally && ally.ability !== pokemon.ability) { - if (!pokemon.m.innate && !BAD_ABILITIES.includes(this.toID(ally.ability))) { - pokemon.m.innate = 'ability:' + ally.ability; - if (!ngas || ally.getAbility().isPermanent || pokemon.hasItem('Ability Shield')) { - pokemon.volatiles[pokemon.m.innate] = {id: pokemon.m.innate, target: pokemon}; - pokemon.m.startVolatile = true; - } - } - if (!ally.m.innate && !BAD_ABILITIES.includes(this.toID(pokemon.ability))) { - ally.m.innate = 'ability:' + pokemon.ability; - if (!ngas || pokemon.getAbility().isPermanent || ally.hasItem('Ability Shield')) { - ally.volatiles[ally.m.innate] = {id: ally.m.innate, target: ally}; - ally.m.startVolatile = true; - } - } - } - }, - // Starting innate abilities in scripts#actions - onSwitchOut(pokemon) { - if (pokemon.m.innate) { - pokemon.removeVolatile(pokemon.m.innate); - delete pokemon.m.innate; - } - const ally = pokemon.side.active.find(mon => mon && mon !== pokemon && !mon.fainted); - if (ally && ally.m.innate) { - ally.removeVolatile(ally.m.innate); - delete ally.m.innate; - } - }, - onFaint(pokemon) { - if (pokemon.m.innate) { - pokemon.removeVolatile(pokemon.m.innate); - delete pokemon.m.innate; - } - const ally = pokemon.side.active.find(mon => mon && mon !== pokemon && !mon.fainted); - if (ally && ally.m.innate) { - ally.removeVolatile(ally.m.innate); - delete ally.m.innate; - } - }, + 'Urshifu-Single-Strike', 'Xerneas', 'Yveltal', 'Zacian', 'Zacian-Crowned', 'Zamazenta', 'Zamazenta-Crowned', 'Zekrom', 'Zygarde-50%', 'Zygarde-Complete', 'Battle Bond', + 'Power Construct', 'Moody', 'Shadow Tag', 'Damp Rock', 'Focus Band', 'King\'s Rock', 'Quick Claw', 'Razor Fang', 'Smooth Rock', 'Terrain Extender', 'Baton Pass', + ], }, - { - name: "[Gen 9] Random Roulette", - desc: `Random Battles in a random generation! [Gen 1] Random Battle - [Gen 9] Random Battle.`, - mod: 'randomroulette', - team: 'random', - searchShow: false, + // Randomized Format Spotlight + /////////////////////////////////////////////////////////////////// + + { + section: "Randomized Format Spotlight", + column: 3, + }, + { + name: "[Gen 6] Triples Challenge Cup", + desc: `Get a randomized team of level-balanced Pokémon with absolutely any legal ability, moves, and item, and battle in a triples format.`, + mod: 'gen6', + team: 'randomCC', + gameType: 'triples', + ruleset: ['Obtainable', 'HP Percentage Mod', 'Cancel Mod'], }, // Randomized Metas @@ -2979,8 +2439,61 @@ export const Formats: FormatList = [ column: 3, }, { - name: "[Gen 9] Monotype Random Battle", + name: "[Gen 9] Random Roulette", + desc: `Random Battles in a random generation! [Gen 1] Random Battle - [Gen 9] Random Battle.`, + mod: 'randomroulette', + team: 'random', + searchShow: false, + }, + { + 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', + ruleset: ['HP Percentage Mod', 'Cancel Mod', 'Sleep Clause Mod'], + onBegin() { + // TODO look into making an event to put this right after turn|1 + // https://discordapp.com/channels/630837856075513856/630845310033330206/716126469528485909 + // Requires client change + this.add(`raw|
Wondering what all these custom moves, abilities, and items do?
Check out the Super Staff Bros: Ultimate Guide or use /ssb to find out!
`); + if (this.ruleTable.has('dynamaxclause')) { + // Old joke format we're bringing back + this.add('message', 'Fox only'); + this.add('message', 'No items'); + this.add('message', 'Final Destination'); + return; + } + this.add('message', 'EVERYONE IS HERE!'); + this.add('message', 'FIGHT!'); + }, + onSwitchInPriority: 100, + onSwitchIn(pokemon) { + let name: string = this.toID(pokemon.illusion ? pokemon.illusion.name : pokemon.name); + if (this.dex.species.get(name).exists || this.dex.moves.get(name).exists || + this.dex.abilities.get(name).exists || name === 'blitz') { + // Certain pokemon have volatiles named after their id + // To prevent overwriting those, and to prevent accidentaly leaking + // that a pokemon is on a team through the onStart even triggering + // at the start of a match, users with pokemon names will need their + // statuses to end in "user". + name = name + 'user'; + } + // Add the mon's status effect to it as a volatile. + const status = this.dex.conditions.get(name); + if (status?.exists) { + pokemon.addVolatile(name, 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 9] Monotype Random Battle", mod: 'gen9', team: 'random', ruleset: ['Obtainable', 'Same Type Clause', 'HP Percentage Mod', 'Cancel Mod', 'Sleep Clause Mod', 'Illusion Level Mod'], @@ -2988,7 +2501,6 @@ export const Formats: FormatList = [ { name: "[Gen 9] Random Battle Mayhem", desc: `[Gen 9] Random Battle with Team Preview and elements of Camomons, Inverse, Scalemons, and Shared Power.`, - mod: 'sharedpower', team: 'random', ruleset: ['[Gen 9] Random Battle', 'Team Preview', 'Camomons Mod', 'Inverse Mod', 'Scalemons Mod'], @@ -3022,12 +2534,24 @@ export const Formats: FormatList = [ }, }, + { + name: "[Gen 9] BSS Factory", + desc: `Randomized 3v3 Singles featuring Pokémon and movesets popular in Battle Stadium Singles.`, + mod: 'gen9', + team: 'randomBSSFactory', + ruleset: ['Flat Rules', 'VGC Timer'], + }, + { + name: "[Gen 9] Baby Random Battle", + mod: 'gen9', + team: 'randomBaby', + ruleset: ['Obtainable', 'Species Clause', 'HP Percentage Mod', 'Cancel Mod', 'Sleep Clause Mod', 'Illusion Level Mod'], + }, { name: "[Gen 9] Computer-Generated Teams", desc: `Teams generated automatically based on heuristics (rules), with levels based on previous success/failure in battle. ` + `Not affiliated with Random Battles formats. Some sets will by nature be worse than others, but you can report egregiously bad sets ` + `with this form.`, - mod: 'gen9', team: 'computerGenerated', ruleset: ['Obtainable', 'Species Clause', 'HP Percentage Mod', 'Cancel Mod', 'Sleep Clause Mod', 'Illusion Level Mod'], @@ -3035,17 +2559,15 @@ export const Formats: FormatList = [ { name: "[Gen 9] Hackmons Cup", desc: `Randomized teams of level-balanced Pokémon with absolutely any ability, moves, and item.`, - mod: 'gen9', team: 'randomHC', ruleset: ['HP Percentage Mod', 'Cancel Mod'], - banlist: ['CAP', 'LGPE', 'MissingNo.', 'Pikachu-Cosplay', 'Pichu-Spiky-eared', 'Pokestar Smeargle', 'Pokestar UFO', 'Pokestar UFO-2', 'Pokestar Brycen-Man', 'Pokestar MT', 'Pokestar MT2', 'Pokestar Transport', 'Pokestar Giant', 'Pokestar Humanoid', 'Pokestar Monster', 'Pokestar F-00', 'Pokestar F-002', 'Pokestar Spirit', 'Pokestar Black Door', 'Pokestar White Door', 'Pokestar Black Belt', 'Pokestar UFO-PropU2', 'Xerneas-Base'], + banlist: ['CAP', 'LGPE', 'MissingNo.', 'Pikachu-Cosplay', 'Pichu-Spiky-eared', 'Pokestar Smeargle', 'Pokestar UFO', 'Pokestar UFO-2', 'Pokestar Brycen-Man', 'Pokestar MT', 'Pokestar MT2', 'Pokestar Transport', 'Pokestar Giant', 'Pokestar Humanoid', 'Pokestar Monster', 'Pokestar F-00', 'Pokestar F-002', 'Pokestar Spirit', 'Pokestar Black Door', 'Pokestar White Door', 'Pokestar Black Belt', 'Pokestar UFO-PropU2', 'Xerneas-Neutral'], unbanlist: ['All Pokemon'], }, { name: "[Gen 9] Doubles Hackmons Cup", desc: `Randomized teams of level-balanced Pokémon with absolutely any ability, moves, and item. Now with TWICE the Pokémon per side!`, - mod: 'gen9', team: 'randomHC', searchShow: false, @@ -3061,118 +2583,114 @@ export const Formats: FormatList = [ ruleset: ['HP Percentage Mod', 'Cancel Mod'], banlist: ['All Pokemon', 'All Abilities', 'All Items', 'All Moves'], unbanlist: [ - '10,000,000 Volt Thunderbolt', 'Abomasnow-Mega', 'Absol-Mega', 'Accelerock', 'Acid Spray', 'Adaptability', - 'Aeroblast', 'Aerodactyl-Mega', 'Aggron', 'Aggron-Mega', 'Aguav Berry', 'Air Balloon', 'Air Slash', 'Alakazam-Mega', - 'Altaria-Mega', 'Ampharos-Mega', 'Analytic', 'Anchor Shot', 'Anger Shell', 'Annihilape', 'Anticipation', 'Apple Acid', - 'Aqua Step', 'Arcanine', 'Arcanine-Hisui', 'Archeops', 'Arena Trap', 'Armarouge', 'Armor Cannon', 'Aromatherapy', - 'Articuno', 'Articuno-Galar', 'Assault Vest', 'Astral Barrage', 'Attack Order', 'Audino-Mega', 'Aura Sphere', - 'Axe Kick', 'Azelf', 'Baddy Bad', 'Baneful Bunker', 'Banette-Mega', 'Barb Barrage', 'Basculegion', 'Basculegion-F', - 'Baton Pass', 'Baxcalibur', 'Beads of Ruin', 'Beak Blast', 'Beast Boost', 'Behemoth Bash', 'Behemoth Blade', - 'Belly Drum', 'Berserk', 'Bitter Blade', 'Bitter Malice', 'Blacephalon', 'Blastoise', 'Blastoise-Mega', 'Blaziken', - 'Blaziken-Mega', 'Blazing Torque', 'Bleakwind Storm', 'Blissey', 'Blizzard', 'Blood Moon', 'Blue Flare', 'Blunder Policy', - 'Body Press', 'Body Slam', 'Bolt Beak', 'Bolt Strike', 'Boomburst', 'Bouncy Bubble', 'Brave Bird', 'Bright Powder', - 'Brute Bonnet', 'Bug Buzz', 'Buginium Z', 'Bullet Punch', 'Buzzwole', 'Buzzy Buzz', 'Calm Mind', 'Calyrex-Ice', - 'Calyrex-Shadow', 'Camerupt-Mega', 'Catastropika', 'Ceaseless Edge', 'Celebi', 'Celesteela', 'Centiskorch', - 'Ceruledge', 'Charizard', 'Charizard-Mega-X', 'Charizard-Mega-Y', 'Chatter', 'Chesnaught', 'Chesto Berry', 'Chi-Yu', - 'Chien-Pao', 'Chilan Berry', 'Chilly Reception', 'Choice Band', 'Choice Scarf', 'Choice Specs', 'Cinderace', - 'Circle Throw', 'Clanging Scales', 'Clangorous Soul', 'Clangorous Soulblaze', 'Clear Amulet', 'Close Combat', - 'Cloyster', 'Cobalion', 'Coil', 'Collision Course', 'Comatose', 'Combat Torque', 'Competitive', 'Compound Eyes', - 'Contrary', 'Core Enforcer', 'Cosmic Power', 'Cotton Guard', 'Court Change', 'Covert Cloak', 'Crabhammer', - 'Cresselia', 'Crobat', 'Custap Berry', 'Dark Pulse', 'Darkest Lariat', 'Darkinium Z', 'Darkrai', 'Darmanitan-Galar-Zen', - 'Darmanitan-Zen', 'Decidueye', 'Decidueye-Hisui', 'Defend Order', 'Defiant', 'Defog', 'Delphox', 'Deoxys', - 'Deoxys-Attack', 'Deoxys-Defense', 'Deoxys-Speed', 'Desolate Land', 'Dialga', 'Dialga-Origin', 'Diamond Storm', - 'Diancie', 'Diancie-Mega', 'Dire Claw', 'Disable', 'Discharge', 'Dondozo', 'Doom Desire', 'Double Iron Bash', - 'Download', 'Draco Meteor', 'Draco Plate', 'Dragapult', 'Dragon Ascent', 'Dragon Dance', 'Dragon Darts', - 'Dragon Energy', 'Dragon Hammer', 'Dragon Pulse', 'Dragon Tail', 'Dragonite', 'Dragonium Z', 'Drain Punch', - 'Dread Plate', 'Drill Peck', 'Drizzle', 'Drought', 'Drum Beating', 'Dry Skin', 'Duraludon', 'Dusknoir', - 'Dynamax Cannon', 'Earth Eater', 'Earth Plate', 'Earth Power', 'Earthquake', 'Eerie Spell', 'Effect Spore', - 'Eject Pack', 'Electivire', 'Electric Surge', 'Electrium Z', 'Electro Drift', 'Emboar', 'Empoleon', 'Enamorus', - 'Enamorus-Therian', 'Encore', 'Energy Ball', 'Entei', 'Eruption', 'Espeon', 'Esper Wing', 'Eternatus', - 'Eternatus-Eternamax', 'Exeggutor', 'Exeggutor-Alola', 'Expanding Force', 'Expert Belt', 'Explosion', - 'Extreme Evoboost', 'Extreme Speed', 'Fairium Z', 'Fake Out', 'Feraligatr', 'Fezandipiti', 'Fiery Wrath', 'Fightinium Z', - 'Figy Berry', 'Filter', 'Fire Blast', 'Fire Lash', 'Firium Z', 'First Impression', 'Fishious Rend', 'Fist Plate', - 'Flame Body', 'Flame Charge', 'Flame Plate', 'Flamethrower', 'Flare Blitz', 'Flareon', 'Flash Cannon', 'Fleur Cannon', - 'Flip Turn', 'Floaty Fall', 'Florges', 'Flower Trick', 'Fluffy', 'Flutter Mane', 'Flyinium Z', 'Focus Blast', - 'Focus Sash', 'Forewarn', 'Foul Play', 'Freeze-Dry', 'Freezing Glare', 'Freezy Frost', 'Frost Breath', 'Fur Coat', - 'Fusion Bolt', 'Fusion Flare', 'Future Sight', 'G-Max Cannonade', 'G-Max Centiferno', 'G-Max Resonance', 'G-Max Steelsurge', - 'G-Max Stonesurge', 'G-Max Sweetness', 'G-Max Vine Lash', 'G-Max Volcalith', 'G-Max Wildfire', 'G-Max Wind Rage', - 'Gallade-Mega', 'Garchomp', 'Garchomp-Mega', 'Gardevoir-Mega', 'Gear Grind', 'Genesect', 'Genesis Supernova', - 'Gengar-Mega', 'Gholdengo', 'Ghostium Z', 'Giga Drain', 'Gigaton Hammer', 'Giratina', 'Giratina-Origin', - 'Glaceon', 'Glacial Lance', 'Glaive Rush', 'Glalie-Mega', 'Glare', 'Glastrier', 'Glimmora', 'Glitzy Glow', 'Gogoat', - 'Golisopod', 'Good as Gold', 'Goodra', 'Goodra-Hisui', 'Gooey', 'Gorilla Tactics', 'Grassium Z', 'Grassy Surge', - 'Grav Apple', 'Great Tusk', 'Greninja', 'Greninja-Ash', 'Groudon', 'Groudon-Primal', 'Groundium Z', + '10,000,000 Volt Thunderbolt', 'Abomasnow-Mega', 'Absol-Mega', 'Accelerock', 'Acid Spray', 'Adaptability', 'Aeroblast', + 'Aerodactyl-Mega', 'Aftermath', 'Aggron', 'Aggron-Mega', 'Aguav Berry', 'Air Balloon', 'Air Slash', 'Alakazam-Mega', + 'Alluring Voice', 'Altaria-Mega', 'Ampharos-Mega', 'Analytic', 'Anchor Shot', 'Anger Shell', 'Annihilape', 'Anticipation', + 'Apple Acid', 'Aqua Step', 'Arcanine', 'Arcanine-Hisui', 'Archaludon', 'Archeops', 'Arena Trap', 'Armarouge', 'Armor Cannon', + 'Aromatherapy', 'Articuno', 'Articuno-Galar', 'As One (Glastrier)', 'As One (Spectrier)', 'Assault Vest', 'Astral Barrage', + 'Attack Order', 'Audino-Mega', 'Aura Sphere', 'Axe Kick', 'Azelf', 'Baddy Bad', 'Baneful Bunker', 'Banette-Mega', + 'Barb Barrage', 'Basculegion', 'Basculegion-F', 'Baton Pass', 'Baxcalibur', 'Beads of Ruin', 'Beak Blast', 'Beast Boost', + 'Behemoth Bash', 'Behemoth Blade', 'Belly Drum', 'Berserk', 'Bitter Blade', 'Bitter Malice', 'Blacephalon', 'Blastoise', + 'Blastoise-Mega', 'Blaziken', 'Blaziken-Mega', 'Blazing Torque', 'Bleakwind Storm', 'Blissey', 'Blizzard', 'Blood Moon', + 'Blue Flare', 'Blunder Policy', 'Body Press', 'Body Slam', 'Bolt Beak', 'Bolt Strike', 'Boomburst', 'Bouncy Bubble', + 'Brave Bird', 'Bright Powder', 'Brute Bonnet', 'Bug Buzz', 'Bullet Punch', 'Burning Bulwark', 'Buzzwole', 'Buzzy Buzz', + 'Calm Mind', 'Calyrex-Ice', 'Calyrex-Shadow', 'Camerupt-Mega', 'Catastropika', 'Ceaseless Edge', 'Celebi', 'Celesteela', + 'Centiskorch', 'Ceruledge', 'Charizard', 'Charizard-Mega-X', 'Charizard-Mega-Y', 'Chatter', 'Chesnaught', 'Chesto Berry', + 'Chi-Yu', 'Chien-Pao', 'Chilan Berry', 'Chilling Neigh', 'Chilly Reception', 'Choice Band', 'Choice Scarf', 'Choice Specs', + 'Cinderace', 'Circle Throw', 'Clanging Scales', 'Clangorous Soul', 'Clangorous Soulblaze', 'Clear Amulet', 'Clear Body', + 'Clear Smog', 'Close Combat', 'Cloyster', 'Cobalion', 'Coil', 'Collision Course', 'Comatose', 'Combat Torque', 'Competitive', + 'Compound Eyes', 'Contrary', 'Core Enforcer', 'Cosmic Power', 'Cotton Guard', 'Court Change', 'Covert Cloak', 'Crabhammer', + 'Cresselia', 'Crobat', 'Cross Chop', 'Curse', 'Custap Berry', 'Dark Pulse', 'Darkest Lariat', 'Darkrai', + 'Darmanitan-Galar-Zen', 'Darmanitan-Zen', 'Decidueye', 'Decidueye-Hisui', 'Defend Order', 'Defiant', 'Defog', 'Delphox', + 'Deoxys', 'Deoxys-Attack', 'Deoxys-Defense', 'Deoxys-Speed', 'Desolate Land', 'Dialga', 'Dialga-Origin', 'Diamond Storm', + 'Diancie', 'Diancie-Mega', 'Dire Claw', 'Disable', 'Discharge', 'Dondozo', 'Doom Desire', 'Double Iron Bash', 'Download', + 'Draco Meteor', 'Draco Plate', 'Dragapult', 'Dragon Ascent', 'Dragon Dance', 'Dragon Darts', 'Dragon Energy', 'Dragon Hammer', + 'Dragon Pulse', 'Dragon Tail', 'Dragonite', 'Drain Punch', 'Dread Plate', 'Drill Peck', 'Drizzle', 'Drought', 'Drum Beating', + 'Dry Skin', 'Duraludon', 'Dusknoir', 'Dynamax Cannon', 'Earth Eater', 'Earth Plate', 'Earth Power', 'Earthquake', + 'Eerie Spell', 'Effect Spore', 'Eject Pack', 'Electivire', 'Electric Surge', 'Electro Drift', 'Emboar', 'Empoleon', + 'Enamorus', 'Enamorus-Therian', 'Encore', 'Energy Ball', 'Entei', 'Eruption', 'Espeon', 'Esper Wing', 'Eternatus', + 'Eternatus-Eternamax', 'Exeggutor', 'Exeggutor-Alola', 'Expanding Force', 'Expert Belt', 'Explosion', 'Extreme Evoboost', + 'Extreme Speed', 'Fake Out', 'Feraligatr', 'Fezandipiti', 'Fickle Beam', 'Fiery Wrath', 'Figy Berry', 'Filter', + 'Fire Blast', 'Fire Lash', 'First Impression', 'Fishious Rend', 'Fist Plate', 'Flame Body', 'Flame Charge', 'Flame Plate', + 'Flamethrower', 'Flare Blitz', 'Flareon', 'Flash Cannon', 'Fleur Cannon', 'Flip Turn', 'Floaty Fall', 'Florges', + 'Flower Trick', 'Fluffy', 'Flutter Mane', 'Focus Blast', 'Focus Sash', 'Forewarn', 'Foul Play', 'Freeze-Dry', 'Freezing Glare', + 'Freezy Frost', 'Frost Breath', 'Full Metal Body', 'Fur Coat', 'Fusion Bolt', 'Fusion Flare', 'Future Sight', 'G-Max Befuddle', + 'G-Max Cannonade', 'G-Max Centiferno', 'G-Max Resonance', 'G-Max Steelsurge', 'G-Max Stonesurge', 'G-Max Sweetness', + 'G-Max Vine Lash', 'G-Max Volcalith', 'G-Max Wildfire', 'G-Max Wind Rage', 'Gallade-Mega', 'Garchomp', 'Garchomp-Mega', + 'Gardevoir-Mega', 'Gear Grind', 'Genesect', 'Genesis Supernova', 'Gengar-Mega', 'Gholdengo', 'Giga Drain', 'Gigaton Hammer', + 'Giratina', 'Giratina-Origin', 'Glaceon', 'Glacial Lance', 'Glaive Rush', 'Glalie-Mega', 'Glare', 'Glastrier', 'Glimmora', + 'Glitzy Glow', 'Gogoat', 'Golisopod', 'Good as Gold', 'Goodra', 'Goodra-Hisui', 'Gooey', 'Gorilla Tactics', 'Gouging Fire', + 'Grassy Surge', 'Grav Apple', 'Great Tusk', 'Greninja', 'Greninja-Ash', 'Grim Neigh', 'Groudon', 'Groudon-Primal', 'Guardian of Alola', 'Gunk Shot', 'Guzzlord', 'Gyarados', 'Gyarados-Mega', 'Hadron Engine', 'Hammer Arm', 'Haxorus', - 'Haze', 'Head Charge', 'Head Smash', 'Headlong Rush', 'Heal Bell', 'Heal Order', 'Healing Wish', 'Heart Swap', - 'Heat Crash', 'Heat Wave', 'Heatran', 'Heavy-Duty Boots', 'Heracross-Mega', 'High Horsepower', 'High Jump Kick', - 'Hippowdon', 'Ho-Oh', 'Hoopa', 'Hoopa-Unbound', 'Horn Leech', 'Houndoom-Mega', 'Huge Power', 'Hurricane', 'Hydreigon', - 'Hydro Steam', 'Hyper Drill', 'Iapapa Berry', 'Ice Beam', 'Ice Hammer', 'Ice Scales', 'Ice Shard', 'Ice Spinner', - 'Icicle Plate', 'Icium Z', 'Illusion', 'Imposter', 'Incineroar', 'Infernape', 'Innards Out', 'Insect Plate', - 'Inteleon', 'Intimidate', 'Intrepid Sword', 'Iron Barbs', 'Iron Bundle', 'Iron Hands', 'Iron Head', 'Iron Jugulis', - 'Iron Leaves', 'Iron Moth', 'Iron Plate', 'Iron Thorns', 'Iron Treads', 'Iron Valiant', 'Ivy Cudgel', 'Jet Punch', 'Jirachi', - 'Jolteon', 'Judgment', 'Kangaskhan-Mega', 'Kartana', 'Keldeo', 'Keldeo-Resolute', 'King\'s Rock', 'King\'s Shield', - 'Kingambit', 'Kingdra', 'Knock Off', 'Kommo-o', 'Koraidon', 'Kyogre', 'Kyogre-Primal', 'Kyurem', 'Kyurem-Black', - 'Kyurem-White', 'Landorus', 'Landorus-Therian', 'Lapras', 'Last Respects', 'Latias', 'Latias-Mega', 'Latios', - 'Latios-Mega', 'Lava Plume', 'Leaf Blade', 'Leaf Storm', 'Leafeon', 'Leech Life', 'Leech Seed', 'Leftovers', - 'Leppa Berry', 'Let\'s Snuggle Forever', 'Levitate', 'Libero', 'Liechi Berry', 'Life Orb', 'Light Screen', - 'Light That Burns the Sky', 'Light of Ruin', 'Lightning Rod', 'Liquidation', 'Lopunny-Mega', 'Lovely Kiss', - 'Low Kick', 'Lucario', 'Lucario-Mega', 'Lugia', 'Lum Berry', 'Lumina Crash', 'Lunala', 'Lunar Blessing', - 'Lunar Dance', 'Lunge', 'Mach Punch', 'Magearna', 'Magic Bounce', 'Magic Guard', 'Magical Torque', 'Magma Storm', - 'Magmortar', 'Magnezone', 'Mago Berry', 'Make It Rain', 'Malicious Moonsault', 'Mamoswine', 'Manaphy', - 'Manectric-Mega', 'Marshadow', 'Matcha Gotcha', 'Max Guard', 'Meadow Plate', 'Megahorn', 'Meganium', 'Melmetal', 'Meloetta', + 'Haze', 'Head Charge', 'Head Smash', 'Headlong Rush', 'Heal Bell', 'Heal Order', 'Healing Wish', 'Heart Swap', 'Heat Crash', + 'Heat Wave', 'Heatran', 'Heavy-Duty Boots', 'Heracross-Mega', 'High Horsepower', 'High Jump Kick', 'Hippowdon', 'Ho-Oh', + 'Hone Claws', 'Hoopa', 'Hoopa-Unbound', 'Horn Leech', 'Houndoom-Mega', 'Huge Power', 'Hurricane', 'Hustle', 'Hydreigon', + 'Hydrapple', 'Hydro Pump', 'Hydro Steam', 'Hyper Drill', 'Iapapa Berry', 'Ice Beam', 'Ice Hammer', 'Ice Scales', 'Ice Shard', + 'Ice Spinner', 'Icicle Plate', 'Illusion', 'Imposter', 'Incineroar', 'Infernape', 'Innards Out', 'Insect Plate', 'Inteleon', + 'Intimidate', 'Intrepid Sword', 'Iron Barbs', 'Iron Boulder', 'Iron Bundle', 'Iron Crown', 'Iron Hands', 'Iron Head', + 'Iron Jugulis', 'Iron Leaves', 'Iron Moth', 'Iron Plate', 'Iron Tail', 'Iron Thorns', 'Iron Treads', 'Iron Valiant', + 'Ivy Cudgel', 'Jet Punch', 'Jirachi', 'Jolteon', 'Judgment', 'Jungle Healing', 'Kangaskhan-Mega', 'Kartana', 'Keldeo', + 'Keldeo-Resolute', 'King\'s Rock', 'King\'s Shield', 'Kingambit', 'Kingdra', 'Knock Off', 'Kommo-o', 'Koraidon', 'Kyogre', + 'Kyogre-Primal', 'Kyurem', 'Kyurem-Black', 'Kyurem-White', 'Landorus', 'Landorus-Therian', 'Lapras', 'Last Respects', 'Latias', + 'Latias-Mega', 'Latios', 'Latios-Mega', 'Lava Plume', 'Leaf Blade', 'Leaf Storm', 'Leafeon', 'Leech Life', 'Leech Seed', + 'Leftovers', 'Leppa Berry', 'Let\'s Snuggle Forever', 'Levitate', 'Libero', 'Liechi Berry', 'Life Orb', 'Light Screen', + 'Light That Burns the Sky', 'Light of Ruin', 'Lightning Rod', 'Liquidation', 'Lopunny-Mega', 'Lovely Kiss', 'Low Kick', + 'Lucario', 'Lucario-Mega', 'Lugia', 'Lum Berry', 'Lumina Crash', 'Lunala', 'Lunar Blessing', 'Lunar Dance', 'Lunge', + 'Luster Purge', 'Mach Punch', 'Magearna', 'Magic Bounce', 'Magic Guard', 'Magical Torque', 'Magma Storm', 'Magmortar', + 'Magnezone', 'Mago Berry', 'Make It Rain', 'Malicious Moonsault', 'Malignant Chain', 'Mamoswine', 'Manaphy', 'Manectric-Mega', + 'Marshadow', 'Marvel Scale', 'Matcha Gotcha', 'Max Guard', 'Meadow Plate', 'Megahorn', 'Meganium', 'Melmetal', 'Meloetta', 'Meloetta-Pirouette', 'Memento', 'Menacing Moonraze Maelstrom', 'Mental Herb', 'Meowscarada', 'Mesprit', 'Metagross', - 'Metagross-Mega', 'Meteor Beam', 'Meteor Mash', 'item: Metronome', 'Mew', 'Mewtwo', 'Mewtwo-Mega-X', 'Mewtwo-Mega-Y', - 'Milk Drink', 'Milotic', 'Mind Plate', 'Mind\'s Eye', 'Minimize', 'Miraidon', 'Mirror Herb', 'Misty Explosion', 'Misty Surge', - 'Mold Breaker', 'Moltres', 'Moltres-Galar', 'Moody', 'Moonblast', 'Moongeist Beam', 'Moonlight', 'Morning Sun', - 'Mortal Spin', 'Mountain Gale', 'Moxie', 'Multiscale', 'Munkidori', 'Muscle Band', 'Mystical Fire', 'Mystical Power', - 'Naganadel', 'Nasty Plot', 'Nature\'s Madness', 'Necrozma', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Necrozma-Ultra', - 'Neutralizing Gas', 'Night Daze', 'Night Shade', 'Nihilego', 'No Retreat', 'Noivern', 'Normalium Z', 'Noxious Torque', - 'Nuzzle', 'Oblivion Wing', 'Obstruct', 'Oceanic Operetta', 'Octolock', 'Ogerpon', 'Ogerpon-Cornerstone', - 'Ogerpon-Hearthflame', 'Ogerpon-Wellspring', 'Okidogi', 'Opportunist', 'Orichalcum Pulse', 'Origin Pulse', - 'Outrage', 'Overdrive', 'Overheat', 'Palafin-Hero', 'Palkia', 'Palkia-Origin', 'Parental Bond', - 'Parting Shot', 'Perish Body', 'Petaya Berry', 'Pheromosa', 'Photon Geyser', 'Pidgeot-Mega', 'Pinsir-Mega', - 'Pixie Plate', 'Plasma Fists', 'Play Rough', 'Poison Heal', 'Poisonium Z', 'Pollen Puff', 'Poltergeist', - 'Population Bomb', 'Porygon-Z', 'Power Gem', 'Power Trip', 'Power Whip', 'Prankster', 'Precipice Blades', 'Primarina', - 'Primordial Sea', 'Probopass', 'Protean', 'Protect', 'Psyblade', 'Psychic Fangs', 'Psychic Surge', 'Psychic', - 'Psychium Z', 'Psycho Boost', 'Psyshield Bash', 'Psystrike', 'Pulverizing Pancake', 'Pure Power', 'Purifying Salt', - 'Pursuit', 'Pyro Ball', 'Quaquaval', 'Quick Claw', 'Quiver Dance', 'Rage Fist', 'Raging Bull', 'Raging Fury', 'Raikou', - 'Rapid Spin', 'Rayquaza', 'Rayquaza-Mega', 'Razor Claw', 'Recover', 'Red Card', 'Reflect', 'Regenerator', 'Regice', - 'Regidrago', 'Regieleki', 'Regigigas', 'Regirock', 'Registeel', 'Reshiram', 'Rest', 'Revelation Dance', - 'Revival Blessing', 'Rhyperior', 'Rillaboom', 'Roaring Moon', 'Rockium Z', 'Rocky Helmet', 'Roost', 'Rough Skin', - 'Ruination', 'Sacred Fire', 'Sacred Sword', 'Salac Berry', 'Salamence', 'Salamence-Mega', 'Salt Cure', 'Samurott', - 'Samurott-Hisui', 'Sandsear Storm', 'Sandy Shocks', 'Sap Sipper', 'Sappy Seed', 'Scald', 'Sceptile', 'Sceptile-Mega', - 'Scizor-Mega', 'Scope Lens', 'Scream Tail', 'Searing Shot', 'Searing Sunraze Smash', 'Secret Sword', 'Seed Flare', - 'Seismic Toss', 'Serene Grace', 'Serperior', 'Shadow Ball', 'Shadow Bone', 'Shadow Shield', 'Shadow Sneak', - 'Shadow Tag', 'Sharpedo-Mega', 'Shaymin', 'Shaymin-Sky', 'Shed Tail', 'Sheer Force', 'Shell Side Arm', + 'Metagross-Mega', 'Meteor Mash', 'item: Metronome', 'Mew', 'Mewtwo', 'Mewtwo-Mega-X', 'Mewtwo-Mega-Y', 'Mighty Cleave', + 'Milk Drink', 'Milotic', 'Mind Plate', 'Mind\'s Eye', 'Minimize', 'Miraidon', 'Mirror Herb', 'Mist Ball', 'Misty Surge', + 'Mold Breaker', 'Moltres', 'Moltres-Galar', 'Moody', 'Moonblast', 'Moongeist Beam', 'Moonlight', 'Morning Sun', 'Mortal Spin', + 'Mountain Gale', 'Moxie', 'Multiscale', 'Munkidori', 'Muscle Band', 'Mystical Fire', 'Mystical Power', 'Naganadel', + 'Nasty Plot', 'Natural Cure', 'Nature\'s Madness', 'Necrozma', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Necrozma-Ultra', + 'Neuroforce', 'Neutralizing Gas', 'Night Daze', 'Night Shade', 'Nihilego', 'No Retreat', 'Noivern', 'Noxious Torque', + 'Nuzzle', 'Oblivion Wing', 'Obstruct', 'Oceanic Operetta', 'Octolock', 'Ogerpon', 'Ogerpon-Cornerstone', 'Ogerpon-Hearthflame', + 'Ogerpon-Wellspring', 'Okidogi', 'Opportunist', 'Orichalcum Pulse', 'Origin Pulse', 'Outrage', 'Overdrive', 'Overheat', + 'Pain Split', 'Palafin-Hero', 'Palkia', 'Palkia-Origin', 'Parental Bond', 'Parting Shot', 'Pecharunt', 'Perish Body', + 'Perish Song', 'Petaya Berry', 'Pheromosa', 'Photon Geyser', 'Pidgeot-Mega', 'Pinsir-Mega', 'Pixie Plate', 'Plasma Fists', + 'Play Rough', 'Poison Heal', 'Poison Point', 'Poison Touch', 'Pollen Puff', 'Poltergeist', 'Population Bomb', 'Porygon-Z', + 'Power Gem', 'Power Trip', 'Power Whip', 'Prankster', 'Precipice Blades', 'Primarina', 'Primordial Sea', 'Prism Armor', + 'Probopass', 'Protean', 'Protect', 'Psyblade', 'Psychic Fangs', 'Psychic Surge', 'Psychic', 'Psycho Boost', 'Psyshield Bash', + 'Psystrike', 'Pulverizing Pancake', 'Pure Power', 'Purifying Salt', 'Pursuit', 'Pyro Ball', 'Quaquaval', 'Quick Claw', + 'Quiver Dance', 'Rage Fist', 'Raging Bolt', 'Raging Bull', 'Raging Fury', 'Raikou', 'Rapid Spin', 'Rayquaza', 'Rayquaza-Mega', + 'Razor Claw', 'Recover', 'Red Card', 'Reflect', 'Regenerator', 'Regice', 'Regidrago', 'Regieleki', 'Regigigas', 'Regirock', + 'Registeel', 'Reshiram', 'Rest', 'Revelation Dance', 'Revival Blessing', 'Rhyperior', 'Rillaboom', 'Roar', 'Roaring Moon', + 'Rocky Helmet', 'Roost', 'Rough Skin', 'Ruination', 'Sacred Fire', 'Sacred Sword', 'Salac Berry', 'Salamence', 'Salamence-Mega', + 'Salt Cure', 'Samurott', 'Samurott-Hisui', 'Sandsear Storm', 'Sandy Shocks', 'Sap Sipper', 'Sappy Seed', 'Scald', 'Sceptile', + 'Sceptile-Mega', 'Scizor-Mega', 'Scope Lens', 'Scream Tail', 'Searing Shot', 'Searing Sunraze Smash', 'Secret Sword', + 'Seed Flare', 'Seismic Toss', 'Serene Grace', 'Serperior', 'Shadow Ball', 'Shadow Bone', 'Shadow Shield', 'Shadow Sneak', + 'Shadow Tag', 'Sharpedo-Mega', 'Shaymin', 'Shaymin-Sky', 'Shed Skin', 'Shed Tail', 'Sheer Force', 'Shell Side Arm', 'Shell Smash', 'Shield Dust', 'Shift Gear', 'Silk Scarf', 'Silk Trap', 'Silvally', 'Simple', 'Sinister Arrow Raid', 'Sitrus Berry', 'Sizzly Slide', 'Skeledirge', 'Sky Plate', 'Slack Off', 'Slaking', 'Sleep Powder', 'Slither Wing', - 'Slowbro-Mega', 'Sludge Bomb', 'Sludge Wave', 'Snarl', 'Snipe Shot', 'Snorlax', 'Soft-Boiled', 'Solgaleo', - 'Solid Rock', 'Soul-Heart', 'Soul-Stealing 7-Star Strike', 'Spacial Rend', 'Sparkly Swirl', 'Spectral Thief', - 'Spectrier', 'Speed Boost', 'Spikes', 'Spiky Shield', 'Spin Out', 'Spirit Break', 'Spirit Shackle', 'Splash Plate', - 'Splintered Stormshards', 'Splishy Splash', 'Spooky Plate', 'Spore', 'Springtide Storm', 'Stakataka', 'Stakeout', - 'Stamina', 'Stealth Rock', 'Steam Eruption', 'Steelium Z', 'Steelix-Mega', 'Sticky Web', 'Stoked Sparksurfer', - 'Stone Axe', 'Stone Edge', 'Stone Plate', 'Stored Power', 'Storm Drain', 'Storm Throw', 'Strange Steam', - 'Strength Sap', 'Sucker Punch', 'Suicune', 'Sunsteel Strike', 'Super Fang', 'Superpower', 'Supersweet Syrup', - 'Supreme Overlord', 'Surf', 'Surging Strikes', 'Swampert', 'Swampert-Mega', 'Sword of Ruin', 'Swords Dance', 'Sylveon', - 'Synthesis', 'Tablets of Ruin', 'Tail Glow', 'Tangrowth', 'Tapu Bulu', 'Tapu Fini', 'Tapu Koko', 'Tapu Lele', 'Taunt', - 'Techno Blast', 'Teleport', 'Tera Blast', 'Teravolt', 'Terrakion', 'Thick Fat', 'Thousand Arrows', 'Thousand Waves', - 'Throat Spray', 'Thunder Cage', 'Thunder Wave', 'Thunder', 'Thunderbolt', 'Thunderous Kick', 'Thundurus', 'Thundurus-Therian', - 'Tidy Up', 'Ting-Lu', 'Tinted Lens', 'Togekiss', 'Topsy-Turvy', 'Torch Song', 'Tornadus', 'Tornadus-Therian', 'Torterra', - 'Tough Claws', 'Toxic Chain', 'Toxic Debris', 'Toxic Plate', 'Toxic Spikes', 'Toxic', 'Tri Attack', 'Triage', 'Triple Arrows', - 'Triple Axel', 'Turboblaze', 'Type: Null', 'Typhlosion', 'Typhlosion-Hisui', 'Tyranitar', 'Tyranitar-Mega', 'U-turn', - 'Umbreon', 'Unaware', 'Unburden', 'Ursaluna', 'Ursaluna-Bloodmoon', 'Urshifu', 'Urshifu-Rapid-Strike', 'Uxie', 'V-create', - 'Vanilluxe', 'Vaporeon', 'Venusaur', 'Venusaur-Mega', 'Vessel of Ruin', 'Victini', 'Victory Dance', 'Virizion', 'Volcanion', - 'Volcarona', 'Volt Absorb', 'Volt Switch', 'Volt Tackle', 'Walking Wake', 'Walrein', 'Water Absorb', 'Water Bubble', - 'Water Shuriken', 'Water Spout', 'Waterfall', 'Waterium Z', 'Wave Crash', 'Weakness Policy', 'Well-Baked Body', - 'White Herb', 'Wicked Blow', 'Wicked Torque', 'Wide Lens', 'Wiki Berry', 'Wild Charge', 'Wildbolt Storm', - 'Will-O-Wisp', 'Wise Glasses', 'Wish', 'Wishiwashi-School', 'Wo-Chien', 'Wonder Guard', 'Wood Hammer', 'Wyrdeer', - 'Xerneas', 'Xurkitree', 'Yawn', 'Yveltal', 'Zacian', 'Zacian-Crowned', 'Zamazenta', 'Zamazenta-Crowned', 'Zap Plate', + 'Slowbro-Mega', 'Sludge Bomb', 'Sludge Wave', 'Snarl', 'Snipe Shot', 'Snorlax', 'Soft-Boiled', 'Solgaleo', 'Solid Rock', + 'Soul-Heart', 'Soul-Stealing 7-Star Strike', 'Spacial Rend', 'Sparkly Swirl', 'Spectral Thief', 'Spectrier', 'Speed Boost', + 'Spikes', 'Spiky Shield', 'Spin Out', 'Spirit Break', 'Spirit Shackle', 'Splash Plate', 'Splintered Stormshards', + 'Splishy Splash', 'Spooky Plate', 'Spore', 'Springtide Storm', 'Stakataka', 'Stakeout', 'Stamina', 'Static', 'Stealth Rock', + 'Steam Eruption', 'Steelix-Mega', 'Sticky Web', 'Stoked Sparksurfer', 'Stone Axe', 'Stone Edge', 'Stone Plate', 'Stored Power', + 'Storm Drain', 'Storm Throw', 'Strange Steam', 'Strength Sap', 'Sturdy', 'Sucker Punch', 'Suicune', 'Sunsteel Strike', + 'Super Fang', 'Supercell Slam', 'Superpower', 'Supreme Overlord', 'Surf', 'Surging Strikes', 'Swampert', 'Swampert-Mega', + 'Sword of Ruin', 'Swords Dance', 'Sylveon', 'Synthesis', 'Tablets of Ruin', 'Tachyon Cutter', 'Tail Glow', 'Tangling Hair', + 'Tangrowth', 'Tapu Bulu', 'Tapu Fini', 'Tapu Koko', 'Tapu Lele', 'Taunt', 'Techno Blast', 'Teleport', 'Tera Blast', + 'Tera Starstorm', 'Terapagos-Stellar', 'Terapagos-Terastal', 'Teravolt', 'Terrakion', 'Thermal Exchange', 'Thick Fat', + 'Thousand Arrows', 'Thousand Waves', 'Throat Spray', 'Thunder Cage', 'Thunder Wave', 'Thunder', 'Thunderbolt', 'Thunderclap', + 'Thunderous Kick', 'Thundurus', 'Thundurus-Therian', 'Tidy Up', 'Ting-Lu', 'Tinted Lens', 'Togekiss', 'Topsy-Turvy', + 'Torch Song', 'Tornadus', 'Tornadus-Therian', 'Torterra', 'Tough Claws', 'Toxic Chain', 'Toxic Debris', 'Toxic Plate', + 'Toxic Spikes', 'Toxic', 'Tri Attack', 'Triage', 'Triple Arrows', 'Triple Axel', 'Turboblaze', 'Type: Null', 'Typhlosion', + 'Typhlosion-Hisui', 'Tyranitar', 'Tyranitar-Mega', 'U-turn', 'Umbreon', 'Unaware', 'Unburden', 'Ursaluna', 'Ursaluna-Bloodmoon', + 'Urshifu', 'Urshifu-Rapid-Strike', 'Uxie', 'V-create', 'Vanilluxe', 'Vaporeon', 'Venusaur', 'Venusaur-Mega', 'Vessel of Ruin', + 'Victini', 'Victory Dance', 'Virizion', 'Volcanion', 'Volcarona', 'Volt Absorb', 'Volt Switch', 'Volt Tackle', 'Walking Wake', + 'Walrein', 'Water Absorb', 'Water Bubble', 'Water Shuriken', 'Water Spout', 'Waterfall', 'Wave Crash', 'Weakness Policy', + 'Well-Baked Body', 'Whirlwind', 'White Herb', 'Wicked Blow', 'Wicked Torque', 'Wide Lens', 'Wiki Berry', 'Wild Charge', + 'Wildbolt Storm', 'Will-O-Wisp', 'Wise Glasses', 'Wish', 'Wishiwashi-School', 'Wo-Chien', 'Wonder Guard', 'Wood Hammer', + 'Wyrdeer', 'Xerneas', 'Xurkitree', 'Yawn', 'Yveltal', 'Zacian', 'Zacian-Crowned', 'Zamazenta', 'Zamazenta-Crowned', 'Zap Plate', 'Zapdos', 'Zapdos-Galar', 'Zarude', 'Zekrom', 'Zeraora', 'Zing Zap', 'Zippy Zap', 'Zygarde', 'Zygarde-Complete', ], }, { name: "[Gen 9] Challenge Cup 1v1", desc: `Get a randomized team of level-balanced Pokémon with absolutely any legal ability, moves, and item, and choose one to battle.`, - mod: 'gen9', team: 'randomCC', ruleset: ['Obtainable', 'HP Percentage Mod', 'Cancel Mod', 'Team Preview', 'Terastal Clause', 'Picked Team Size = 1'], @@ -3180,7 +2698,6 @@ export const Formats: FormatList = [ { name: "[Gen 9] Challenge Cup 2v2", desc: `Get a randomized team of level-balanced Pokémon with absolutely any legal ability, moves, and item, and choose two to battle in a doubles format.`, - mod: 'gen9', team: 'randomCC', gameType: 'doubles', @@ -3189,7 +2706,6 @@ export const Formats: FormatList = [ { name: "[Gen 9] Challenge Cup 6v6", desc: `Randomized teams of level-balanced Pokémon with absolutely any legal ability, moves, and item.`, - mod: 'gen9', team: 'randomCC', searchShow: false, @@ -3197,21 +2713,16 @@ export const Formats: FormatList = [ }, { name: "[Gen 9] Metronome Battle", - threads: [ - `• Metronome Battle`, - ], - mod: 'gen9', gameType: 'doubles', ruleset: ['Max Team Size = 2', 'HP Percentage Mod', 'Cancel Mod'], banlist: [ - 'Pokestar Spirit', 'Shedinja + Sturdy', 'Cheek Pouch', 'Commander', 'Cursed Body', 'Dry Skin', 'Earth Eater', 'Fur Coat', 'Gorilla Tactics', + 'Pokestar Spirit', 'Terapagos', 'Shedinja + Sturdy', 'Cheek Pouch', 'Commander', 'Cursed Body', 'Dry Skin', 'Earth Eater', 'Fur Coat', 'Gorilla Tactics', 'Grassy Surge', 'Huge Power', 'Ice Body', 'Iron Barbs', 'Moody', 'Neutralizing Gas', 'Opportunist', 'Parental Bond', 'Perish Body', 'Poison Heal', - 'Power Construct', 'Pressure', 'Pure Power', 'Rain Dish', 'Rough Skin', 'Sand Spit', 'Sand Stream', 'Seed Sower', 'Stamina', - 'Volt Absorb', 'Water Absorb', 'Wonder Guard', 'Aguav Berry', 'Assault Vest', 'Berry', 'Berry Juice', 'Berserk Gene', - 'Black Sludge', 'Enigma Berry', 'Figy Berry', 'Gold Berry', 'Iapapa Berry', 'Kangaskhanite', 'Leftovers', 'Mago Berry', 'Medichamite', - 'Steel Memory', 'Oran Berry', 'Rocky Helmet', 'Shell Bell', 'Sitrus Berry', 'Wiki Berry', 'Harvest + Jaboca Berry', - 'Harvest + Rowap Berry', + 'Power Construct', 'Pressure', 'Pure Power', 'Rain Dish', 'Rough Skin', 'Sand Spit', 'Sand Stream', 'Seed Sower', 'Stamina', 'Toxic Chain', 'Volt Absorb', + 'Water Absorb', 'Wonder Guard', 'Harvest + Jaboca Berry', 'Harvest + Rowap Berry', 'Aguav Berry', 'Assault Vest', 'Berry', 'Berry Juice', 'Berserk Gene', + 'Black Sludge', 'Enigma Berry', 'Figy Berry', 'Gold Berry', 'Iapapa Berry', 'Kangaskhanite', 'Leftovers', 'Mago Berry', 'Medichamite', 'Steel Memory', + 'Oran Berry', 'Rocky Helmet', 'Shell Bell', 'Sitrus Berry', 'Wiki Berry', ], onValidateSet(set) { const species = this.dex.species.get(set.species); @@ -3241,17 +2752,12 @@ export const Formats: FormatList = [ { name: "[Gen 8] Random Battle", desc: `Randomized teams of level-balanced Pokémon with sets that are generated to be competitively viable.`, - threads: [ - `• Random Battle Suggestions`, - ], - mod: 'gen8', team: 'random', ruleset: ['PotD', 'Obtainable', 'Species Clause', 'HP Percentage Mod', 'Cancel Mod', 'Sleep Clause Mod', 'Illusion Level Mod'], }, { name: "[Gen 8] Random Doubles Battle", - mod: 'gen8', gameType: 'doubles', team: 'random', @@ -3259,7 +2765,6 @@ export const Formats: FormatList = [ }, { name: "[Gen 8] Free-For-All Random Battle", - mod: 'gen8', team: 'random', gameType: 'freeforall', @@ -3270,7 +2775,6 @@ export const Formats: FormatList = [ }, { name: "[Gen 8] Multi Random Battle", - mod: 'gen8', team: 'random', gameType: 'multi', @@ -3285,7 +2789,6 @@ export const Formats: FormatList = [ { name: "[Gen 8] Battle Factory", desc: `Randomized teams of Pokémon for a generated Smogon tier with sets that are competitively viable.`, - mod: 'gen8', team: 'randomFactory', ruleset: ['Standard', 'Dynamax Clause'], @@ -3296,81 +2799,14 @@ export const Formats: FormatList = [ { name: "[Gen 8] BSS Factory", desc: `Randomized 3v3 Singles featuring Pokémon and movesets popular in Battle Stadium Singles.`, - threads: [ - `• Information and Suggestions Thread`, - ], - mod: 'gen8', team: 'randomBSSFactory', searchShow: false, ruleset: ['Flat Rules'], }, - { - name: "[Gen 8] Super Staff Bros 4", - desc: `The fourth iteration of Super Staff Bros is here! Battle with a random team of Pokémon created by the sim staff.`, - threads: [ - `• Introduction & Roster`, - `• Discussion Thread`, - ], - - mod: 'ssb', - team: 'randomStaffBros', - ruleset: ['Dynamax Clause', 'HP Percentage Mod', 'Cancel Mod', 'Sleep Clause Mod'], - onBegin() { - if (!this.ruleTable.has('dynamaxclause')) { - // Old joke format we're bringing back - for (const side of this.sides) { - side.dynamaxUsed = true; - } - this.add('message', 'Delphox only'); - this.add('message', 'No items'); - this.add('message', 'Final Destination'); - return; - } - // TODO look into making an event to put this right after turn|1 - // https://discordapp.com/channels/630837856075513856/630845310033330206/716126469528485909 - // Requires client change - this.add(`raw|
Wondering what all these custom moves, abilities, and items do?
Check out the Super Staff Bros 4 Guide or use /ssb to find out!
`); - - this.add('message', [ - 'THE BATTLE FOR SURVIVAL BEGINS!', 'WHO WILL SURVIVE?', 'GET READY TO KEEP UP!', 'GET READY!', 'DARE TO BELIEVE YOU CAN SURVIVE!', 'THERE CAN BE ONLY ONE WINNER!', 'GET READY FOR THE FIGHT OF YOUR LIFE!', 'WHO WILL PREVAIL?', 'ONLY ONE TEAM WILL BE LEFT STANDING!', 'BATTLE WITHOUT LIMITS!', - ][this.random(10)]); - this.add('message', 'FIGHT!'); - }, - onSwitchInPriority: 100, - onSwitchIn(pokemon) { - let name: string = this.toID(pokemon.illusion ? pokemon.illusion.name : pokemon.name); - if (this.dex.species.get(name).exists || this.dex.moves.get(name).exists || this.dex.abilities.get(name).exists) { - // Certain pokemon have volatiles named after their id - // To prevent overwriting those, and to prevent accidentaly leaking - // that a pokemon is on a team through the onStart even triggering - // at the start of a match, users with pokemon names will need their - // statuses to end in "user". - name = name + 'user'; - } - // Add the mon's status effect to it as a volatile. - const status = this.dex.conditions.get(name); - if (status?.exists) { - pokemon.addVolatile(name, pokemon); - } - if (pokemon.m.hasBounty) this.add('-start', pokemon, 'bounty', '[silent]'); - const details = pokemon.species.name + (pokemon.level === 100 ? '' : ', L' + pokemon.level) + - (pokemon.gender === '' ? '' : ', ' + pokemon.gender) + (pokemon.set.shiny ? ', shiny' : ''); - if (pokemon.m.nowShiny) this.add('replace', pokemon, details); - }, - onFaint(target, source, effect) { - if (effect?.effectType !== 'Move') return; - if (!target.m.hasBounty) return; - if (source) { - this.add('-message', `${source.name} received the bounty!`); - this.boost({atk: 1, def: 1, spa: 1, spd: 1, spe: 1}, source, target, effect); - } - }, - }, { name: "[Gen 8] Hackmons Cup", desc: `Randomized teams of level-balanced Pokémon with absolutely any ability, moves, and item.`, - mod: 'gen8', team: 'randomHC', ruleset: ['HP Percentage Mod', 'Cancel Mod'], @@ -3378,21 +2814,17 @@ export const Formats: FormatList = [ }, { name: "[Gen 8] Metronome Battle", - threads: [ - `• Metronome Battle`, - ], - mod: 'gen8', gameType: 'doubles', searchShow: false, ruleset: ['Max Team Size = 2', 'HP Percentage Mod', 'Cancel Mod'], banlist: [ - 'Pokestar Spirit', 'Shedinja + Sturdy', 'Battle Bond', 'Cheek Pouch', 'Cursed Body', 'Dry Skin', 'Fur Coat', 'Gorilla Tactics', - 'Grassy Surge', 'Huge Power', 'Ice Body', 'Iron Barbs', 'Libero', 'Moody', 'Neutralizing Gas', 'Parental Bond', 'Perish Body', 'Poison Heal', - 'Power Construct', 'Pressure', 'Protean', 'Pure Power', 'Rain Dish', 'Rough Skin', 'Sand Spit', 'Sand Stream', 'Snow Warning', 'Stamina', - 'Volt Absorb', 'Water Absorb', 'Wonder Guard', 'Abomasite', 'Aguav Berry', 'Assault Vest', 'Berry', 'Berry Juice', 'Berserk Gene', - 'Black Sludge', 'Enigma Berry', 'Figy Berry', 'Gold Berry', 'Iapapa Berry', 'Kangaskhanite', 'Leftovers', 'Mago Berry', 'Medichamite', - 'Steel Memory', 'Oran Berry', 'Rocky Helmet', 'Shell Bell', 'Sitrus Berry', 'Wiki Berry', 'Harvest + Jaboca Berry', 'Harvest + Rowap Berry', + 'Pokestar Spirit', 'Shedinja + Sturdy', 'Battle Bond', 'Cheek Pouch', 'Cursed Body', 'Dry Skin', 'Fur Coat', 'Gorilla Tactics', 'Grassy Surge', + 'Huge Power', 'Ice Body', 'Iron Barbs', 'Libero', 'Moody', 'Neutralizing Gas', 'Parental Bond', 'Perish Body', 'Poison Heal', 'Power Construct', + 'Pressure', 'Protean', 'Pure Power', 'Rain Dish', 'Rough Skin', 'Sand Spit', 'Sand Stream', 'Snow Warning', 'Stamina', 'Volt Absorb', 'Water Absorb', + 'Wonder Guard', 'Abomasite', 'Aguav Berry', 'Assault Vest', 'Berry', 'Berry Juice', 'Berserk Gene', 'Black Sludge', 'Enigma Berry', 'Figy Berry', + 'Gold Berry', 'Iapapa Berry', 'Kangaskhanite', 'Leftovers', 'Mago Berry', 'Medichamite', 'Steel Memory', 'Oran Berry', 'Rocky Helmet', 'Shell Bell', + 'Sitrus Berry', 'Wiki Berry', 'Harvest + Jaboca Berry', 'Harvest + Rowap Berry', ], onValidateSet(set) { const species = this.dex.species.get(set.species); @@ -3429,10 +2861,6 @@ export const Formats: FormatList = [ { name: "[Gen 8] CAP 1v1", desc: `Randomly generated 1v1-style teams only including Pokémon made by the Create-A-Pokémon Project.`, - threads: [ - `• CAP 1v1`, - ], - mod: 'gen8', searchShow: false, team: 'randomCAP1v1', @@ -3445,10 +2873,6 @@ export const Formats: FormatList = [ { name: "[Gen 8 BDSP] Random Battle", desc: `Randomized teams of level-balanced Pokémon with sets that are generated to be competitively viable.`, - threads: [ - `• BDSP Random Battle Set Discussion`, - ], - mod: 'gen8bdsp', team: 'random', searchShow: false, @@ -3457,30 +2881,13 @@ export const Formats: FormatList = [ { name: "[Gen 7] Random Battle", desc: `Randomized teams of level-balanced Pokémon with sets that are generated to be competitively viable.`, - threads: [ - `• Sets and Suggestions`, - `• Role Compendium`, - ], - mod: 'gen7', team: 'random', ruleset: ['Obtainable', 'Sleep Clause Mod', 'HP Percentage Mod', 'Cancel Mod', 'Illusion Level Mod'], }, - { - name: "[Gen 7] Random Doubles Battle", - threads: [`• Sets and Suggestions`], - - mod: 'gen7', - gameType: 'doubles', - team: 'random', - searchShow: false, - challengeShow: false, - ruleset: ['Obtainable', 'HP Percentage Mod', 'Cancel Mod', 'Illusion Level Mod'], - }, { name: "[Gen 7] Battle Factory", desc: `Randomized teams of Pokémon for a generated Smogon tier with sets that are competitively viable.`, - mod: 'gen7', team: 'randomFactory', ruleset: ['Obtainable', 'Sleep Clause Mod', 'Team Preview', 'HP Percentage Mod', 'Cancel Mod', 'Mega Rayquaza Clause'], @@ -3491,10 +2898,6 @@ export const Formats: FormatList = [ { name: "[Gen 7] BSS Factory", desc: `Randomized 3v3 Singles featuring Pokémon and movesets popular in Battle Spot Singles.`, - threads: [ - `• Information and Suggestions Thread`, - ], - mod: 'gen7', team: 'randomBSSFactory', searchShow: false, @@ -3503,7 +2906,6 @@ export const Formats: FormatList = [ { name: "[Gen 7] Hackmons Cup", desc: `Randomized teams of level-balanced Pokémon with absolutely any ability, moves, and item.`, - mod: 'gen7', team: 'randomHC', searchShow: false, @@ -3512,7 +2914,6 @@ export const Formats: FormatList = [ }, { name: "[Gen 7 Let's Go] Random Battle", - mod: 'gen7letsgo', team: 'random', searchShow: false, @@ -3520,7 +2921,6 @@ export const Formats: FormatList = [ }, { name: "[Gen 6] Random Battle", - mod: 'gen6', team: 'random', ruleset: ['Obtainable', 'Sleep Clause Mod', 'HP Percentage Mod', 'Cancel Mod', 'Illusion Level Mod'], @@ -3528,7 +2928,6 @@ export const Formats: FormatList = [ { name: "[Gen 6] Battle Factory", desc: `Randomized teams of Pokémon for a generated Smogon tier with sets that are competitively viable.`, - mod: 'gen6', team: 'randomFactory', searchShow: false, @@ -3540,35 +2939,30 @@ export const Formats: FormatList = [ }, { name: "[Gen 5] Random Battle", - mod: 'gen5', team: 'random', ruleset: ['Obtainable', 'Sleep Clause Mod', 'HP Percentage Mod', 'Cancel Mod', 'Illusion Level Mod'], }, { name: "[Gen 4] Random Battle", - mod: 'gen4', team: 'random', ruleset: ['Obtainable', 'Sleep Clause Mod', 'HP Percentage Mod', 'Cancel Mod'], }, { name: "[Gen 3] Random Battle", - mod: 'gen3', team: 'random', ruleset: ['Standard'], }, { name: "[Gen 2] Random Battle", - mod: 'gen2', team: 'random', ruleset: ['Standard'], }, { name: "[Gen 1] Random Battle", - mod: 'gen1', team: 'random', ruleset: ['Standard'], @@ -3576,7 +2970,6 @@ export const Formats: FormatList = [ { name: "[Gen 1] Challenge Cup", desc: `Randomized teams of level-balanced Pokémon with absolutely any legal moves.`, - mod: 'gen1', team: 'randomCC', searchShow: false, @@ -3586,7 +2979,6 @@ export const Formats: FormatList = [ { name: "[Gen 1] Hackmons Cup", desc: `Randomized teams of level-balanced Pokémon with absolutely any moves, types, and stats.`, - mod: 'gen1', team: 'randomHC', searchShow: false, @@ -3614,38 +3006,26 @@ export const Formats: FormatList = [ column: 4, }, { - name: "[Gen 7] Ubers", - threads: [ - `• USM Ubers`, - ], - - mod: 'gen7', + name: "[Gen 4] Ubers", + mod: 'gen4', // searchShow: false, - ruleset: ['Standard', 'Mega Rayquaza Clause'], - banlist: ['Baton Pass'], + ruleset: ['Standard'], + banlist: ['AG'], }, { - name: "[Gen 1] UU", - threads: [ - `• RBY UU Metagame Discussion`, - `• RBY UU Viability Rankings`, - ], - - mod: 'gen1', + name: "[Gen 8 BDSP] OU", + mod: 'gen8bdsp', // searchShow: false, - ruleset: ['[Gen 1] OU', 'APT Clause'], - banlist: ['OU', 'UUBL'], + ruleset: ['Standard', 'Evasion Abilities Clause'], + banlist: ['Uber', 'Arena Trap', 'Drizzle', 'Moody', 'Shadow Tag', 'King\'s Rock', 'Razor Fang', 'Baton Pass'], }, { - name: "[Gen 4] Doubles OU", - threads: [`• DPP Doubles`], - - mod: 'gen4', + name: "[Gen 5] Doubles OU", + mod: 'gen5', gameType: 'doubles', // searchShow: false, - ruleset: ['Standard'], - banlist: ['AG', 'Uber', 'Soul Dew', 'Dark Void', 'Sand Veil'], - unbanlist: ['Manaphy', 'Mew', 'Salamence', 'Wobbuffet', 'Wynaut'], + ruleset: ['Standard', 'Evasion Abilities Clause', 'Swagger Clause', 'Sleep Clause Mod'], + banlist: ['DUber', 'Soul Dew', 'Dark Void', 'Gravity'], }, // Past Gens OU @@ -3657,92 +3037,48 @@ export const Formats: FormatList = [ }, { name: "[Gen 8] OU", - threads: [ - `• SS OU Metagame Discussion`, - `• SS OU Sample Teams`, - `• SS OU Viability Rankings`, - ], - mod: 'gen8', ruleset: ['Standard', 'Dynamax Clause'], banlist: ['Uber', 'AG', 'Arena Trap', 'Moody', 'Power Construct', 'Sand Veil', 'Shadow Tag', 'Snow Cloak', 'King\'s Rock', 'Baton Pass'], }, { name: "[Gen 7] OU", - threads: [ - `• USM OU Banlist`, - `• USM OU Sample Teams`, - `• USM OU Viability Rankings`, - ], - mod: 'gen7', ruleset: ['Standard'], banlist: ['Uber', 'Arena Trap', 'Power Construct', 'Shadow Tag', 'Baton Pass'], }, { name: "[Gen 6] OU", - threads: [ - `• ORAS OU Banlist`, - `• ORAS OU Sample Teams`, - `• ORAS OU Viability Rankings`, - ], - mod: 'gen6', ruleset: ['Standard', 'Swagger Clause'], banlist: ['Uber', 'Arena Trap', 'Shadow Tag', 'Soul Dew', 'Baton Pass'], }, { name: "[Gen 5] OU", - threads: [ - `• BW2 Sample Teams`, - `• BW2 OU Viability Rankings`, - ], - mod: 'gen5', ruleset: ['Standard', 'Evasion Abilities Clause', 'Sleep Moves Clause', 'Swagger Clause', 'Gems Clause', 'Baton Pass Stat Clause'], - banlist: ['Uber', 'Arena Trap', 'Drizzle ++ Swift Swim', 'Drought ++ Chlorophyll', 'Sand Rush', 'Shadow Tag', 'King\'s Rock', 'Razor Fang', 'Soul Dew', 'Assist'], + banlist: ['Uber', 'Arena Trap', 'Drizzle ++ Swift Swim', 'Drought ++ Chlorophyll', 'Sand Rush', 'Shadow Tag', 'King\'s Rock', 'Razor Fang', 'Soul Dew', 'Acupressure', 'Assist'], }, { name: "[Gen 4] OU", - threads: [ - `• DPP OU Metagame Discussion`, - `• DPP Sample Teams`, - `• DPP OU Viability Rankings`, - ], - mod: 'gen4', ruleset: ['Standard', 'Evasion Abilities Clause', 'Baton Pass Stat Trap Clause', 'Freeze Clause Mod'], banlist: ['AG', 'Uber', 'Arena Trap', 'Quick Claw', 'Soul Dew', 'Swagger'], }, { name: "[Gen 3] OU", - threads: [ - `• ADV Sample Teams`, - `• ADV OU Viability Rankings`, - ], - mod: 'gen3', ruleset: ['Standard', 'One Boost Passer Clause', 'Freeze Clause Mod'], - banlist: ['Uber', 'Sand Veil', 'Soundproof', 'Assist', 'Baton Pass + Block', 'Baton Pass + Mean Look', 'Baton Pass + Spider Web', 'Smeargle + Ingrain'], + banlist: ['Uber', 'Smeargle + Ingrain', 'Sand Veil', 'Soundproof', 'Assist', 'Baton Pass + Block', 'Baton Pass + Mean Look', 'Baton Pass + Spider Web', 'Swagger'], }, { name: "[Gen 2] OU", - threads: [ - `• GSC Sample Teams`, - `• GSC OU Viability Rankings`, - ], - mod: 'gen2', ruleset: ['Standard'], banlist: ['Uber', 'Mean Look + Baton Pass', 'Spider Web + Baton Pass'], }, { name: "[Gen 1] OU", - threads: [ - `• RBY Sample Teams`, - `• RBY OU Viability Rankings`, - ], - mod: 'gen1', ruleset: ['Standard'], banlist: ['Uber'], @@ -3757,12 +3093,6 @@ export const Formats: FormatList = [ }, { name: "[Gen 8] Doubles OU", - threads: [ - `• SS Doubles OU Metagame Discussion`, - `• SS Doubles OU Sample Teams`, - `• SS Doubles OU Viability Rankings`, - ], - mod: 'gen8', gameType: 'doubles', ruleset: ['Standard Doubles', 'Dynamax Clause', 'Swagger Clause'], @@ -3770,12 +3100,6 @@ export const Formats: FormatList = [ }, { name: "[Gen 7] Doubles OU", - threads: [ - `• USUM Doubles OU Metagame Discussion`, - `• USUM Doubles OU Viability Rankings`, - `• USUM Doubles OU Sample Teams`, - ], - mod: 'gen7', gameType: 'doubles', ruleset: ['Standard Doubles', 'Swagger Clause'], @@ -3783,43 +3107,28 @@ export const Formats: FormatList = [ }, { name: "[Gen 6] Doubles OU", - threads: [ - `• ORAS Doubles OU Discussion`, - `• ORAS Doubles OU Viability Rankings`, - `• ORAS Doubles OU Sample Teams`, - ], - mod: 'gen6', gameType: 'doubles', ruleset: ['Standard Doubles', 'Swagger Clause'], banlist: ['DUber', 'Soul Dew', 'Dark Void'], }, { - name: "[Gen 5] Doubles OU", - threads: [ - `• BW2 Doubles Metagame Discussion`, - `• BW2 Doubles Viability Rankings`, - `• BW2 Doubles Sample Teams`, - ], - - mod: 'gen5', + name: "[Gen 4] Doubles OU", + mod: 'gen4', gameType: 'doubles', searchShow: false, - ruleset: ['Standard', 'Evasion Abilities Clause', 'Swagger Clause', 'Sleep Clause Mod'], - banlist: ['DUber', 'Soul Dew', 'Dark Void', 'Gravity'], + ruleset: ['Standard', 'Evasion Abilities Clause'], + banlist: ['AG', 'Uber', 'Soul Dew', 'Dark Void', 'Thunder Wave'], + unbanlist: ['Manaphy', 'Mew', 'Salamence', 'Wobbuffet', 'Wynaut'], }, { name: "[Gen 3] Doubles OU", - threads: [ - `• ADV Doubles OU`, - ], - mod: 'gen3', gameType: 'doubles', searchShow: false, ruleset: ['Standard', '!Switch Priority Clause Mod'], - banlist: ['Uber', 'Soul Dew', 'Swagger'], - unbanlist: ['Latias', 'Wobbuffet', 'Wynaut'], + banlist: ['Uber', 'Quick Claw', 'Soul Dew', 'Explosion', 'Self-Destruct', 'Swagger'], + unbanlist: ['Wobbuffet', 'Wynaut'], }, // Sw/Sh Singles @@ -3831,10 +3140,6 @@ export const Formats: FormatList = [ }, { name: "[Gen 8] Ubers", - threads: [ - `• SS Ubers`, - ], - mod: 'gen8', searchShow: false, ruleset: ['Standard', 'Dynamax Clause'], @@ -3842,12 +3147,6 @@ export const Formats: FormatList = [ }, { name: "[Gen 8] UU", - threads: [ - `• UU Metagame Discussion`, - `• UU Sample Teams`, - `• UU Viability Rankings`, - ], - mod: 'gen8', searchShow: false, ruleset: ['[Gen 8] OU'], @@ -3855,12 +3154,6 @@ export const Formats: FormatList = [ }, { name: "[Gen 8] RU", - threads: [ - `• RU Metagame Discussion`, - `• RU Sample Teams`, - `• RU Viability Rankings`, - ], - mod: 'gen8', searchShow: false, ruleset: ['[Gen 8] UU'], @@ -3868,12 +3161,6 @@ export const Formats: FormatList = [ }, { name: "[Gen 8] NU", - threads: [ - `• NU Metagame Discussion`, - `• NU Sample Teams`, - `• NU Viability Rankings`, - ], - mod: 'gen8', searchShow: false, ruleset: ['[Gen 8] RU'], @@ -3881,11 +3168,6 @@ export const Formats: FormatList = [ }, { name: "[Gen 8] PU", - threads: [ - `• PU Metagame Discussion`, - `• PU Viability Rankings`, - ], - mod: 'gen8', searchShow: false, ruleset: ['[Gen 8] NU'], @@ -3893,49 +3175,31 @@ export const Formats: FormatList = [ }, { name: "[Gen 8] LC", - threads: [ - `• SS LC Metagame Discussion`, - `• SS LC Sample Teams`, - `• SS LC Viability Rankings`, - ], - mod: 'gen8', searchShow: false, ruleset: ['Little Cup', 'Standard', 'Dynamax Clause'], banlist: [ 'Corsola-Galar', 'Cutiefly', 'Drifloon', 'Gastly', 'Gothita', 'Magby', 'Rufflet', 'Scraggy', 'Scyther', 'Sneasel', 'Swirlix', - 'Tangela', 'Vullaby', 'Vulpix-Alola', 'Woobat', 'Zigzagoon-Base', 'Chlorophyll', 'Moody', 'Baton Pass', 'Sticky Web', + 'Tangela', 'Vulpix-Alola', 'Woobat', 'Zigzagoon-Base', 'Chlorophyll', 'Moody', 'Baton Pass', 'Sticky Web', ], }, { name: "[Gen 8] Monotype", desc: `All the Pokémon on a team must share a type.`, - threads: [ - `• SS Monotype Metagame Discussion`, - `• SS Monotype Sample Teams`, - `• SS Monotype Viability Rankings`, - ], - mod: 'gen8', searchShow: false, ruleset: ['Same Type Clause', 'Standard', 'Evasion Abilities Clause', 'Dynamax Clause'], banlist: [ 'Blaziken', 'Calyrex-Ice', 'Calyrex-Shadow', 'Dialga', 'Dracovish', 'Eternatus', 'Genesect', 'Giratina', 'Giratina-Origin', 'Groudon', 'Ho-Oh', - 'Kartana', 'Kyogre', 'Kyurem-Black', 'Kyurem-White', 'Landorus-Base', 'Lugia', 'Lunala', 'Magearna', 'Marshadow', 'Mewtwo', 'Naganadel', - 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Palkia', 'Pheromosa', 'Rayquaza', 'Reshiram', 'Solgaleo', 'Urshifu-Base', 'Xerneas', 'Yveltal', - 'Zacian', 'Zacian-Crowned', 'Zamazenta', 'Zamazenta-Crowned', 'Zekrom', 'Zygarde-Base', 'Moody', 'Power Construct', 'Shadow Tag', 'Damp Rock', - 'Focus Band', 'King\'s Rock', 'Quick Claw', 'Smooth Rock', 'Terrain Extender', 'Acupressure', 'Baton Pass', + 'Kartana', 'Kyogre', 'Kyurem-Black', 'Kyurem-White', 'Landorus-Incarnate', 'Lugia', 'Lunala', 'Magearna', 'Marshadow', 'Mewtwo', 'Naganadel', + 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Palkia', 'Pheromosa', 'Rayquaza', 'Reshiram', 'Solgaleo', 'Urshifu-Single-Strike', 'Xerneas', + 'Yveltal', 'Zacian', 'Zacian-Crowned', 'Zamazenta', 'Zamazenta-Crowned', 'Zekrom', 'Zygarde-50%', 'Moody', 'Power Construct', 'Shadow Tag', + 'Damp Rock', 'Focus Band', 'King\'s Rock', 'Quick Claw', 'Smooth Rock', 'Terrain Extender', 'Acupressure', 'Baton Pass', ], }, { name: "[Gen 8] 1v1", desc: `Bring three Pokémon to Team Preview and choose one to battle.`, - threads: [ - `• SS 1v1 Metagame Discussion`, - `• SS 1v1 Sample Teams`, - `• SS 1v1 Viability Rankings`, - ], - mod: 'gen8', searchShow: false, ruleset: [ @@ -3952,12 +3216,6 @@ export const Formats: FormatList = [ }, { name: "[Gen 8] Anything Goes", - threads: [ - `• AG Metagame Discussion`, - `• AG Sample Teams`, - `• AG Viability Rankings`, - ], - mod: 'gen8', searchShow: false, ruleset: ['Obtainable', 'Team Preview', 'HP Percentage Mod', 'Cancel Mod', 'Endless Battle Clause'], @@ -3965,12 +3223,6 @@ export const Formats: FormatList = [ { name: "[Gen 8] ZU", desc: `The unofficial usage-based tier below PU.`, - threads: [ - `• ZU Metagame Discussion`, - `• ZU Sample Teams`, - `• ZU Viability Rankings`, - ], - mod: 'gen8', searchShow: false, ruleset: ['[Gen 8] PU'], @@ -3978,12 +3230,7 @@ export const Formats: FormatList = [ }, { name: "[Gen 8] CAP", - threads: [ - `• SS CAP Metagame Discussion`, - `• SS CAP Sample Teams`, - `• SS CAP Viability Rankings`, - ], - + desc: "The Create-A-Pokémon project is a community dedicated to exploring and understanding the competitive Pokémon metagame by designing, creating, and playtesting new Pokémon concepts.", mod: 'gen8', searchShow: false, ruleset: ['[Gen 8] OU', '+CAP'], @@ -3991,7 +3238,6 @@ export const Formats: FormatList = [ }, { name: "[Gen 8] Battle Stadium Singles", - mod: 'gen8', searchShow: false, bestOfDefault: true, @@ -3999,21 +3245,14 @@ export const Formats: FormatList = [ restricted: ['Restricted Legendary'], }, { - name: "[Gen 8 BDSP] OU", - threads: [ - `• BDSP OU Metagame Discussion`, - `• BDSP OU Sample Teams`, - `• BDSP OU Viability Rankings`, - ], - + name: "[Gen 8 BDSP] Ubers", mod: 'gen8bdsp', searchShow: false, - ruleset: ['Standard', 'Evasion Abilities Clause'], - banlist: ['Uber', 'Arena Trap', 'Drizzle', 'Moody', 'Shadow Tag', 'King\'s Rock', 'Razor Fang', 'Baton Pass'], + ruleset: ['Standard'], + banlist: ['AG', 'Baton Pass'], }, { name: "[Gen 8] Custom Game", - mod: 'gen8', searchShow: false, debug: true, @@ -4031,10 +3270,6 @@ export const Formats: FormatList = [ }, { name: "[Gen 8] Doubles Ubers", - threads: [ - `• Doubles Ubers`, - ], - mod: 'gen8', gameType: 'doubles', searchShow: false, @@ -4043,10 +3278,6 @@ export const Formats: FormatList = [ }, { name: "[Gen 8] Doubles UU", - threads: [ - `• Doubles UU`, - ], - mod: 'gen8', gameType: 'doubles', searchShow: false, @@ -4055,12 +3286,6 @@ export const Formats: FormatList = [ }, { name: "[Gen 8] VGC 2022", - threads: [ - `• VGC 2022 Metagame Discussion`, - `• VGC 2022 Sample Teams`, - `• VGC 2022 Viability Rankings`, - ], - mod: 'gen8', gameType: 'doubles', searchShow: false, @@ -4070,7 +3295,6 @@ export const Formats: FormatList = [ }, { name: "[Gen 8] VGC 2021", - mod: 'gen8', gameType: 'doubles', searchShow: false, @@ -4079,7 +3303,6 @@ export const Formats: FormatList = [ }, { name: "[Gen 8] VGC 2020", - mod: 'gen8dlc1', gameType: 'doubles', searchShow: false, @@ -4088,10 +3311,6 @@ export const Formats: FormatList = [ }, { name: "[Gen 8 BDSP] Doubles OU", - threads: [ - `• BDSP Doubles OU`, - ], - mod: 'gen8bdsp', gameType: 'doubles', searchShow: false, @@ -4100,10 +3319,6 @@ export const Formats: FormatList = [ }, { name: "[Gen 8 BDSP] Battle Festival Doubles", - threads: [ - `• Battle Festival Doubles`, - ], - mod: 'gen8bdsp', gameType: 'doubles', searchShow: false, @@ -4111,7 +3326,6 @@ export const Formats: FormatList = [ }, { name: "[Gen 8] Doubles Custom Game", - mod: 'gen8', gameType: 'doubles', searchShow: false, @@ -4127,13 +3341,15 @@ export const Formats: FormatList = [ section: "US/UM Singles", column: 4, }, + { + name: "[Gen 7] Ubers", + mod: 'gen7', + searchShow: false, + ruleset: ['Standard', 'Mega Rayquaza Clause'], + banlist: ['Baton Pass'], + }, { name: "[Gen 7] UU", - threads: [ - `• USM UU Sample Teams`, - `• USM UU Viability Rankings`, - ], - mod: 'gen7', searchShow: false, ruleset: ['[Gen 7] OU'], @@ -4141,11 +3357,6 @@ export const Formats: FormatList = [ }, { name: "[Gen 7] RU", - threads: [ - `• USM RU Sample Teams`, - `• USM RU Viability Rankings`, - ], - mod: 'gen7', searchShow: false, ruleset: ['[Gen 7] UU'], @@ -4154,11 +3365,6 @@ export const Formats: FormatList = [ }, { name: "[Gen 7] NU", - threads: [ - `• USM NU Sample Teams`, - `• USM NU Viability Rankings`, - ], - mod: 'gen7', searchShow: false, ruleset: ['[Gen 7] RU'], @@ -4166,11 +3372,6 @@ export const Formats: FormatList = [ }, { name: "[Gen 7] PU", - threads: [ - `• USM PU Sample Teams`, - `• USM PU Viability Rankings`, - ], - mod: 'gen7', searchShow: false, ruleset: ['[Gen 7] NU'], @@ -4178,12 +3379,6 @@ export const Formats: FormatList = [ }, { name: "[Gen 7] LC", - threads: [ - `• USM LC Banlist`, - `• USM LC Sample Teams`, - `• USM LC Viability Rankings`, - ], - mod: 'gen7', searchShow: false, ruleset: ['Little Cup', 'Standard', 'Swagger Clause'], @@ -4196,15 +3391,11 @@ export const Formats: FormatList = [ { name: "[Gen 7] Monotype", desc: `All the Pokémon on a team must share a type.`, - threads: [ - `• USM Monotype`, - ], - mod: 'gen7', searchShow: false, ruleset: ['Same Type Clause', 'Standard', 'Evasion Abilities Clause', 'Swagger Clause'], banlist: [ - 'Aegislash', 'Arceus', 'Blaziken', 'Darkrai', 'Deoxys-Base', 'Deoxys-Attack', 'Dialga', 'Genesect', 'Gengar-Mega', 'Giratina', 'Giratina-Origin', + 'Aegislash', 'Arceus', 'Blaziken', 'Darkrai', 'Deoxys-Normal', 'Deoxys-Attack', 'Dialga', 'Genesect', 'Gengar-Mega', 'Giratina', 'Giratina-Origin', 'Groudon', 'Ho-Oh', 'Hoopa-Unbound', 'Kangaskhan-Mega', 'Kartana', 'Kyogre', 'Kyurem-White', 'Lucario-Mega', 'Lugia', 'Lunala', 'Magearna', 'Marshadow', 'Mawile-Mega', 'Medicham-Mega', 'Metagross-Mega', 'Mewtwo', 'Naganadel', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Palkia', 'Pheromosa', 'Rayquaza', 'Reshiram', 'Salamence-Mega', 'Shaymin-Sky', 'Solgaleo', 'Tapu Lele', 'Xerneas', 'Yveltal', 'Zekrom', 'Zygarde', @@ -4214,10 +3405,6 @@ export const Formats: FormatList = [ { name: "[Gen 7] 1v1", desc: `Bring three Pokémon to Team Preview and choose one to battle.`, - threads: [ - `• USUM 1v1`, - ], - mod: 'gen7', searchShow: false, ruleset: [ @@ -4225,7 +3412,7 @@ export const Formats: FormatList = [ 'Obtainable', 'Species Clause', 'Nickname Clause', 'OHKO Clause', 'Swagger Clause', 'Evasion Moves Clause', 'Accuracy Moves Clause', 'Team Preview', 'HP Percentage Mod', 'Cancel Mod', 'Endless Battle Clause', ], banlist: [ - 'Arceus', 'Darkrai', 'Deoxys-Base', 'Deoxys-Attack', 'Deoxys-Defense', 'Dialga', 'Giratina', 'Giratina-Origin', 'Groudon', + 'Arceus', 'Darkrai', 'Deoxys-Normal', 'Deoxys-Attack', 'Deoxys-Defense', 'Dialga', 'Giratina', 'Giratina-Origin', 'Groudon', 'Ho-Oh', 'Kangaskhan-Mega', 'Kyogre', 'Kyurem-Black', 'Kyurem-White', 'Lugia', 'Lunala', 'Marshadow', 'Mew', 'Mewtwo', 'Mimikyu', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Palkia', 'Rayquaza', 'Reshiram', 'Salamence-Mega', 'Shaymin-Sky', 'Snorlax', 'Solgaleo', 'Tapu Koko', 'Xerneas', 'Yveltal', 'Zekrom', 'Moody', 'Focus Sash', 'Grass Whistle', 'Hypnosis', @@ -4234,12 +3421,6 @@ export const Formats: FormatList = [ }, { name: "[Gen 7] Anything Goes", - threads: [ - `• Anything Goes Metagame Discussion`, - `• Anything Goes Viability Rankings`, - `• Anything Goes Sample Teams`, - ], - mod: 'gen7', searchShow: false, ruleset: ['Obtainable', 'Team Preview', 'HP Percentage Mod', 'Cancel Mod', 'Endless Battle Clause'], @@ -4247,12 +3428,6 @@ export const Formats: FormatList = [ { name: "[Gen 7] ZU", desc: `The unofficial usage-based tier below PU.`, - threads: [ - `• ZU Metagame Discussion`, - `• ZU Viability Rankings`, - `• ZU Sample Teams`, - ], - mod: 'gen7', searchShow: false, ruleset: ['[Gen 7] PU'], @@ -4260,25 +3435,13 @@ export const Formats: FormatList = [ }, { name: "[Gen 7] CAP", - threads: [ - `• USUM CAP Metagame Discussion`, - `• USUM CAP Viability Rankings`, - `• USUM CAP Sample Teams`, - ], - + desc: "The Create-A-Pokémon project is a community dedicated to exploring and understanding the competitive Pokémon metagame by designing, creating, and playtesting new Pokémon concepts.", mod: 'gen7', searchShow: false, ruleset: ['[Gen 7] OU', '+CAP'], }, { name: "[Gen 7] Battle Spot Singles", - threads: [ - `• Introduction to Battle Spot Singles`, - `• Battle Spot Singles Viability Rankings`, - `• Battle Spot Singles Role Compendium`, - `• Battle Spot Singles Sample Teams`, - ], - mod: 'gen7', searchShow: false, bestOfDefault: true, @@ -4287,19 +3450,13 @@ export const Formats: FormatList = [ }, { name: "[Gen 7 Let's Go] OU", - threads: [ - `• LGPE OU Metagame Discussion`, - `• LGPE OU Viability Rankings`, - ], - mod: 'gen7letsgo', searchShow: false, - ruleset: ['Adjust Level = 50', 'Obtainable', 'Species Clause', 'Nickname Clause', 'OHKO Clause', 'Evasion Moves Clause', 'Team Preview', 'HP Percentage Mod', 'Cancel Mod', 'Sleep Clause Mod'], + ruleset: ['Standard'], banlist: ['Uber'], }, { name: "[Gen 7] Custom Game", - mod: 'gen7', searchShow: false, debug: true, @@ -4317,8 +3474,6 @@ export const Formats: FormatList = [ }, { name: "[Gen 7] Doubles UU", - threads: [`• Doubles UU Metagame Discussion`], - mod: 'gen7', gameType: 'doubles', searchShow: false, @@ -4327,11 +3482,6 @@ export const Formats: FormatList = [ }, { name: "[Gen 7] VGC 2019", - threads: [ - `• VGC 2019 Discussion`, - `• VGC 2019 Viability Rankings`, - ], - mod: 'gen7', gameType: 'doubles', searchShow: false, @@ -4342,60 +3492,27 @@ export const Formats: FormatList = [ }, { name: "[Gen 7] VGC 2018", - threads: [ - `• VGC 2018 Discussion`, - `• VGC 2018 Viability Rankings`, - `• VGC 2018 Sample Teams`, - ], - mod: 'gen7', gameType: 'doubles', searchShow: false, bestOfDefault: true, - timer: { - starting: 5 * 60, - addPerTurn: 0, - maxPerTurn: 55, - maxFirstTurn: 90, - grace: 90, - timeoutAutoChoose: true, - dcTimerBank: false, - }, - ruleset: ['Flat Rules', '!! Adjust Level = 50', 'Min Source Gen = 7'], + ruleset: ['Flat Rules', '!! Adjust Level = 50', 'Min Source Gen = 7', 'VGC Timer', '!! Timer Starting = 300'], banlist: ['Oranguru + Symbiosis', 'Passimian + Defiant', 'Unown', 'Custap Berry', 'Enigma Berry', 'Jaboca Berry', 'Micle Berry', 'Rowap Berry', 'Battle Bond'], }, { name: "[Gen 7] VGC 2017", - threads: [ - `• VGC 2017 Discussion`, - `• VGC 2017 Viability Rankings`, - `• VGC 2017 Sample Teams`, - ], - mod: 'gen7sm', gameType: 'doubles', searchShow: false, bestOfDefault: true, - timer: { - starting: 15 * 60, - addPerTurn: 0, - maxPerTurn: 55, - maxFirstTurn: 90, - grace: 90, - timeoutAutoChoose: true, - dcTimerBank: false, - }, - ruleset: ['Flat Rules', 'Old Alola Pokedex', '!! Adjust Level = 50', 'Min Source Gen = 7'], + ruleset: [ + 'Flat Rules', 'Old Alola Pokedex', '!! Adjust Level = 50', 'Min Source Gen = 7', + 'VGC Timer', '!! Timer Starting = 900', + ], banlist: ['Mega', 'Custap Berry', 'Enigma Berry', 'Jaboca Berry', 'Micle Berry', 'Rowap Berry'], }, { name: "[Gen 7] Battle Spot Doubles", - threads: [ - `• Battle Spot Doubles Discussion`, - `• Battle Spot Doubles Viability Rankings`, - `• Battle Spot Doubles Sample Teams`, - ], - mod: 'gen7', gameType: 'doubles', searchShow: false, @@ -4405,19 +3522,14 @@ export const Formats: FormatList = [ }, { name: "[Gen 7 Let's Go] Doubles OU", - threads: [ - `• LGPE Doubles OU`, - ], - mod: 'gen7letsgo', gameType: 'doubles', searchShow: false, ruleset: ['Standard Doubles', 'Sleep Clause Mod'], - banlist: ['Mewtwo'], + banlist: ['DUber'], }, { name: "[Gen 7] Doubles Custom Game", - mod: 'gen7', gameType: 'doubles', searchShow: false, @@ -4435,34 +3547,20 @@ export const Formats: FormatList = [ column: 4, }, { - name: "[Gen 6] UU", - threads: [ - `• ORAS UU Banlist`, - `• ORAS UU Viability Rankings`, - ], - + name: "[Gen 6] Ubers", mod: 'gen6', searchShow: false, - ruleset: ['[Gen 6] OU'], - banlist: ['OU', 'UUBL', 'Drizzle', 'Drought'], + ruleset: ['Standard', 'Swagger Clause', 'Mega Rayquaza Clause'], }, { - name: "[Gen 6] Ubers", - threads: [ - `• ORAS Ubers`, - ], - + name: "[Gen 6] UU", mod: 'gen6', searchShow: false, - ruleset: ['Standard', 'Swagger Clause', 'Mega Rayquaza Clause'], + ruleset: ['[Gen 6] OU'], + banlist: ['OU', 'UUBL', 'Drizzle', 'Drought'], }, { name: "[Gen 6] RU", - threads: [ - `• ORAS RU Banlist`, - `• ORAS RU Viability Rankings`, - ], - mod: 'gen6', searchShow: false, ruleset: ['[Gen 6] UU'], @@ -4470,11 +3568,6 @@ export const Formats: FormatList = [ }, { name: "[Gen 6] NU", - threads: [ - `• ORAS NU Banlist`, - `• ORAS NU Viability Rankings`, - ], - mod: 'gen6', searchShow: false, ruleset: ['[Gen 6] RU'], @@ -4482,11 +3575,6 @@ export const Formats: FormatList = [ }, { name: "[Gen 6] PU", - threads: [ - `• ORAS PU Banlist`, - `• ORAS PU Viability Rankings`, - ], - mod: 'gen6', searchShow: false, ruleset: ['[Gen 6] NU'], @@ -4494,11 +3582,6 @@ export const Formats: FormatList = [ }, { name: "[Gen 6] LC", - threads: [ - `• ORAS LC Banlist`, - `• ORAS LC Viability Rankings`, - ], - mod: 'gen6', searchShow: false, ruleset: ['Standard', 'Little Cup'], @@ -4510,15 +3593,11 @@ export const Formats: FormatList = [ { name: "[Gen 6] Monotype", desc: `All the Pokémon on a team must share a type.`, - threads: [ - `• ORAS Monotype`, - ], - mod: 'gen6', searchShow: false, ruleset: ['Standard', 'Swagger Clause', 'Evasion Abilities Clause', 'Same Type Clause'], banlist: [ - 'Aegislash', 'Altaria-Mega', 'Arceus', 'Blaziken', 'Darkrai', 'Deoxys-Base', 'Deoxys-Attack', 'Deoxys-Speed', 'Dialga', 'Genesect', 'Gengar-Mega', + 'Aegislash', 'Altaria-Mega', 'Arceus', 'Blaziken', 'Darkrai', 'Deoxys-Normal', 'Deoxys-Attack', 'Deoxys-Speed', 'Dialga', 'Genesect', 'Gengar-Mega', 'Giratina', 'Giratina-Origin', 'Greninja', 'Groudon', 'Ho-Oh', 'Hoopa-Unbound', 'Kangaskhan-Mega', 'Keldeo', 'Kyogre', 'Kyurem-White', 'Lucario-Mega', 'Lugia', 'Mawile-Mega', 'Medicham-Mega', 'Metagross-Mega', 'Mewtwo', 'Palkia', 'Rayquaza', 'Reshiram', 'Sableye-Mega', 'Salamence-Mega', 'Shaymin-Sky', 'Slowbro-Mega', 'Talonflame', 'Xerneas', 'Yveltal', 'Zekrom', 'Shadow Tag', 'Damp Rock', 'Focus Band', 'King\'s Rock', 'Quick Claw', 'Razor Fang', @@ -4528,10 +3607,6 @@ export const Formats: FormatList = [ { name: "[Gen 6] 1v1", desc: `Bring three Pokémon to Team Preview and choose one to battle.`, - threads: [ - `• ORAS 1v1`, - ], - mod: 'gen6', searchShow: false, ruleset: [ @@ -4540,30 +3615,20 @@ export const Formats: FormatList = [ 'Cancel Mod', 'Team Preview', ], banlist: [ - 'Arceus', 'Blaziken', 'Charizard-Mega-Y', 'Darkrai', 'Deoxys-Base', 'Deoxys-Attack', 'Deoxys-Defense', 'Dialga', - 'Giratina', 'Giratina-Origin', 'Groudon', 'Ho-Oh', 'Kangaskhan-Mega', 'Kyogre', 'Kyurem-White', 'Lugia', 'Mewtwo', - 'Palkia', 'Rayquaza', 'Reshiram', 'Salamence-Mega', 'Shaymin-Sky', 'Snorlax', 'Xerneas', 'Yveltal', 'Zekrom', - 'Focus Sash', 'Soul Dew', 'Grass Whistle', 'Hypnosis', 'Perish Song', 'Sing', 'Sleep Powder', 'Yawn', + 'Arceus', 'Blaziken-Mega', 'Charizard-Mega-X', 'Charizard-Mega-Y', 'Deoxys-Normal', 'Deoxys-Attack', 'Deoxys-Defense', + 'Dialga', 'Giratina', 'Giratina-Origin', 'Groudon', 'Ho-Oh', 'Kangaskhan-Mega', 'Kyogre', 'Kyurem-White', 'Lugia', 'Mewtwo', + 'Palkia', 'Rayquaza', 'Reshiram', 'Salamence-Mega', 'Shaymin-Sky', 'Snorlax', 'Xerneas', 'Yveltal', 'Zekrom', 'Focus Sash', + 'Soul Dew', 'Dark Void', 'Grass Whistle', 'Hypnosis', 'Perish Song', 'Sing', 'Sleep Powder', 'Yawn', ], }, { name: "[Gen 6] Anything Goes", - threads: [ - `• ORAS Anything Goes`, - `• ORAS AG Resources`, - ], - mod: 'gen6', searchShow: false, ruleset: ['Obtainable', 'Team Preview', 'Endless Battle Clause', 'HP Percentage Mod', 'Cancel Mod'], }, { name: "[Gen 6] ZU", - threads: [ - `• ORAS ZU Banlist`, - `• ORAS ZU Viability Rankings`, - ], - mod: 'gen6', searchShow: false, ruleset: ['[Gen 6] PU'], @@ -4571,12 +3636,7 @@ export const Formats: FormatList = [ }, { name: "[Gen 6] CAP", - threads: [ - `• ORAS CAP Metagame Discussion`, - `• ORAS CAP Sample Teams`, - `• ORAS CAP Viability Rankings`, - ], - + desc: "The Create-A-Pokémon project is a community dedicated to exploring and understanding the competitive Pokémon metagame by designing, creating, and playtesting new Pokémon concepts.", mod: 'gen6', searchShow: false, ruleset: ['[Gen 6] OU', '+CAP'], @@ -4584,11 +3644,6 @@ export const Formats: FormatList = [ }, { name: "[Gen 6] Battle Spot Singles", - threads: [ - `• ORAS Battle Spot Singles`, - `• ORAS BSS Viability Rankings`, - ], - mod: 'gen6', searchShow: false, bestOfDefault: true, @@ -4597,7 +3652,6 @@ export const Formats: FormatList = [ }, { name: "[Gen 6] Custom Game", - mod: 'gen6', searchShow: false, debug: true, @@ -4615,11 +3669,6 @@ export const Formats: FormatList = [ }, { name: "[Gen 6] VGC 2016", - threads: [ - `• VGC 2016 Rules`, - `• VGC 2016 Viability Rankings`, - ], - mod: 'gen6', gameType: 'doubles', searchShow: false, @@ -4630,12 +3679,6 @@ export const Formats: FormatList = [ }, { name: "[Gen 6] VGC 2015", - threads: [ - `• VGC 2015 Rules`, - `• ORAS Battle Spot Doubles Discussion`, - `• VGC 2015 Viability Rankings`, - ], - mod: 'gen6', gameType: 'doubles', searchShow: false, @@ -4645,11 +3688,6 @@ export const Formats: FormatList = [ }, { name: "[Gen 6] VGC 2014", - threads: [ - `• VGC 2014 Rules`, - `• VGC 2014 Viability Rankings`, - ], - mod: 'gen6xy', gameType: 'doubles', searchShow: false, @@ -4658,11 +3696,6 @@ export const Formats: FormatList = [ }, { name: "[Gen 6] Battle Spot Doubles", - threads: [ - `• ORAS Battle Spot Doubles Discussion`, - `• ORAS BSD Viability Rankings`, - ], - mod: 'gen6', gameType: 'doubles', searchShow: false, @@ -4672,7 +3705,6 @@ export const Formats: FormatList = [ }, { name: "[Gen 6] Doubles Custom Game", - mod: 'gen6', gameType: 'doubles', searchShow: false, @@ -4683,11 +3715,6 @@ export const Formats: FormatList = [ }, { name: "[Gen 6] Battle Spot Triples", - threads: [ - `• ORAS Battle Spot Triples Discussion`, - `• ORAS BST Viability Rankings`, - ], - mod: 'gen6', gameType: 'triples', searchShow: false, @@ -4695,7 +3722,6 @@ export const Formats: FormatList = [ }, { name: "[Gen 6] Triples Custom Game", - mod: 'gen6', gameType: 'triples', searchShow: false, @@ -4714,21 +3740,12 @@ export const Formats: FormatList = [ }, { name: "[Gen 5] Ubers", - threads: [ - `• BW2 Ubers`, - ], - mod: 'gen5', searchShow: false, ruleset: ['Standard', 'Sleep Clause Mod'], }, { name: "[Gen 5] UU", - threads: [ - `• BW2 UU Viability Rankings`, - `• BW2 Sample Teams`, - ], - mod: 'gen5', searchShow: false, ruleset: ['Standard', 'Evasion Abilities Clause', 'Swagger Clause', 'Sleep Clause Mod'], @@ -4736,11 +3753,6 @@ export const Formats: FormatList = [ }, { name: "[Gen 5] RU", - threads: [ - `• BW2 Sample Teams`, - `• BW2 RU Viability Rankings`, - ], - mod: 'gen5', searchShow: false, ruleset: ['[Gen 5] UU', 'Baton Pass Clause', '!Sleep Clause Mod', 'Sleep Moves Clause'], @@ -4749,11 +3761,6 @@ export const Formats: FormatList = [ }, { name: "[Gen 5] NU", - threads: [ - `• BW2 Sample Teams`, - `• BW2 NU Viability Rankings`, - ], - mod: 'gen5', searchShow: false, ruleset: ['[Gen 5] RU', '!Sleep Moves Clause', 'Sleep Clause Mod'], @@ -4761,10 +3768,6 @@ export const Formats: FormatList = [ }, { name: "[Gen 5] PU", - threads: [ - `• BW2 PU`, - ], - mod: 'gen5', searchShow: false, ruleset: ['[Gen 5] NU', 'Sleep Moves Clause'], @@ -4772,11 +3775,6 @@ export const Formats: FormatList = [ }, { name: "[Gen 5] LC", - threads: [ - `• BW2 Sample Teams`, - `• BW2 LC Viability Rankings`, - ], - mod: 'gen5', searchShow: false, ruleset: ['Standard', 'Little Cup', 'Sleep Moves Clause'], @@ -4788,58 +3786,63 @@ export const Formats: FormatList = [ { name: "[Gen 5] Monotype", desc: `All the Pokémon on a team must share a type.`, - threads: [ - `• BW2 Monotype`, - ], - mod: 'gen5', searchShow: false, ruleset: ['[Gen 5] OU', 'Same Type Clause', '!Gems Clause'], banlist: ['Latios'], + unbanlist: ['Cloyster'], }, { name: "[Gen 5] 1v1", desc: `Bring three Pokémon to Team Preview and choose one to battle.`, - threads: [ - `• BW2 1v1`, - ], - mod: 'gen5', searchShow: false, ruleset: [ 'Picked Team Size = 1', 'Max Team Size = 3', 'Standard', 'Baton Pass Clause', 'Swagger Clause', 'Accuracy Moves Clause', 'Sleep Moves Clause', ], - banlist: ['Uber', 'Cottonee', 'Dragonite', 'Jirachi', 'Kyurem-Black', 'Mew', 'Togekiss', 'Whimsicott', 'Victini', 'Focus Band', 'Focus Sash', 'Quick Claw', 'Soul Dew', 'Perish Song'], - unbanlist: ['Genesect', 'Landorus', 'Manaphy', 'Thundurus', 'Tornadus-Therian'], + banlist: [ + 'Arceus', 'Blaziken', 'Cottonee', 'Darkrai', 'Deoxys', 'Dialga', 'Dragonite', 'Giratina', 'Groudon', 'Ho-Oh', + 'Jirachi', 'Kyogre', 'Kyurem-Black', 'Kyurem-White', 'Lugia', 'Mew', 'Mewtwo', 'Palkia', 'Rayquaza', 'Reshiram', + 'Shaymin-Sky', 'Thundurus-Incarnate', 'Togekiss', 'Victini', 'Whimsicott', 'Zekrom', 'Focus Band', 'Focus Sash', + 'Quick Claw', 'Soul Dew', 'Perish Song', + ], }, { name: "[Gen 5] ZU", - threads: [ - `• BW2 ZU`, - ], - mod: 'gen5', searchShow: false, ruleset: ['[Gen 5] PU'], - banlist: ['PU', 'ZUBL', 'Baton Pass'], + 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', + ], unbanlist: ['Damp Rock'], }, { name: "[Gen 5] CAP", - threads: [ - `• BW2 CAP Viability Rankings`, - `• BW2 CAP Sample Teams`, - ], - + desc: "The Create-A-Pokémon project is a community dedicated to exploring and understanding the competitive Pokémon metagame by designing, creating, and playtesting new Pokémon concepts.", mod: 'gen5', searchShow: false, ruleset: ['[Gen 5] OU', '+CAP'], banlist: ['Cawmodore'], }, + { + name: "[Gen 5] BW1 OU", + mod: 'gen5bw1', + searchShow: false, + ruleset: ['Standard', 'Sleep Clause Mod', 'Swagger Clause', 'Baton Pass Stat Clause'], + banlist: ['Uber', 'Drizzle ++ Swift Swim', 'King\'s Rock', 'Razor Fang', 'Soul Dew'], + }, { name: "[Gen 5] GBU Singles", - mod: 'gen5', searchShow: false, bestOfDefault: true, @@ -4848,7 +3851,6 @@ export const Formats: FormatList = [ }, { name: "[Gen 5] Custom Game", - mod: 'gen5', searchShow: false, debug: true, @@ -4866,7 +3868,6 @@ export const Formats: FormatList = [ }, { name: "[Gen 5] VGC 2013", - mod: 'gen5', gameType: 'doubles', searchShow: false, @@ -4876,7 +3877,6 @@ export const Formats: FormatList = [ }, { name: "[Gen 5] VGC 2012", - mod: 'gen5bw1', gameType: 'doubles', searchShow: false, @@ -4886,7 +3886,6 @@ export const Formats: FormatList = [ }, { name: "[Gen 5] VGC 2011", - mod: 'gen5bw1', gameType: 'doubles', searchShow: false, @@ -4896,7 +3895,6 @@ export const Formats: FormatList = [ }, { name: "[Gen 5] Doubles Custom Game", - mod: 'gen5', gameType: 'doubles', searchShow: false, @@ -4907,7 +3905,6 @@ export const Formats: FormatList = [ }, { name: "[Gen 5] Triples Custom Game", - mod: 'gen5', gameType: 'triples', searchShow: false, @@ -4924,37 +3921,16 @@ export const Formats: FormatList = [ section: "DPP Singles", column: 4, }, - { - name: "[Gen 4] Ubers", - threads: [ - `• DPP Ubers`, - ], - - mod: 'gen4', - searchShow: false, - ruleset: ['Standard'], - banlist: ['AG'], - }, { name: "[Gen 4] UU", - threads: [ - `• DPP UU Metagame Discussion`, - `• DPP UU Viability Rankings`, - ], - mod: 'gen4', searchShow: false, - ruleset: ['[Gen 4] OU', '!Freeze Clause Mod'], - banlist: ['OU', 'UUBL'], - unbanlist: ['Arena Trap', 'Quick Claw', 'Swagger'], + ruleset: ['[Gen 4] OU', '!Baton Pass Stat Trap Clause', '!Freeze Clause Mod'], + banlist: ['OU', 'UUBL', 'Baton Pass'], + unbanlist: ['Arena Trap', 'Snow Cloak', 'Quick Claw', 'Swagger'], }, { name: "[Gen 4] NU", - threads: [ - `• DPP NU Metagame Discussion`, - `• DPP NU Viability Rankings`, - ], - mod: 'gen4', searchShow: false, ruleset: ['[Gen 4] UU', 'Baton Pass Clause'], @@ -4963,28 +3939,20 @@ export const Formats: FormatList = [ }, { name: "[Gen 4] PU", - threads: [ - `• DPP PU`, - ], - mod: 'gen4', searchShow: false, ruleset: ['[Gen 4] NU'], banlist: [ 'Articuno', 'Cacturne', 'Charizard', 'Cradily', 'Dodrio', 'Drifblim', 'Dusclops', 'Electrode', 'Floatzel', 'Gardevoir', 'Gligar', 'Golem', 'Grumpig', 'Haunter', 'Hitmonchan', 'Hypno', 'Jumpluff', - 'Jynx', 'Lickilicky', 'Linoone', 'Magmortar', 'Magneton', 'Manectric', 'Medicham', 'Meganium', 'Nidoqueen', - 'Ninetales', 'Piloswine', 'Poliwrath', 'Porygon2', 'Regice', 'Regirock', 'Roselia', 'Sandslash', - 'Sharpedo', 'Shiftry', 'Skuntank', 'Slowking', 'Tauros', 'Typhlosion', 'Venomoth', 'Vileplume', + 'Jynx', 'Lickilicky', 'Linoone', 'Magmortar', 'Magneton', 'Manectric', 'Medicham', 'Meganium', + 'Nidoqueen', 'Ninetales', 'Piloswine', 'Poliwrath', 'Porygon2', 'Regice', 'Regirock', 'Roselia', + 'Sandslash', 'Sharpedo', 'Shiftry', 'Skuntank', 'Slowking', 'Tauros', 'Typhlosion', 'Venomoth', + 'Vileplume', ], }, { name: "[Gen 4] LC", - threads: [ - `• DPP LC Guide`, - `• DPP LC Viability Rankings`, - ], - mod: 'gen4', searchShow: false, ruleset: ['Standard', 'Little Cup', 'Sleep Moves Clause'], @@ -4995,7 +3963,6 @@ export const Formats: FormatList = [ }, { name: "[Gen 4] Anything Goes", - mod: 'gen4', searchShow: false, ruleset: ['Obtainable', 'Arceus EV Limit', 'Endless Battle Clause', 'HP Percentage Mod', 'Cancel Mod'], @@ -5003,25 +3970,28 @@ export const Formats: FormatList = [ { name: "[Gen 4] 1v1", desc: `Bring three Pokémon to Team Preview and choose one to battle.`, - threads: [ - `• DPP 1v1`, - ], - mod: 'gen4', searchShow: false, ruleset: [ 'Picked Team Size = 1', 'Max Team Size = 3', - '[Gen 4] OU', 'Accuracy Moves Clause', 'Sleep Moves Clause', 'Team Preview', '!Freeze Clause Mod', + 'Standard', 'Accuracy Moves Clause', 'Sleep Moves Clause', 'Team Preview', + ], + banlist: [ + 'Arceus', 'Clefable', 'Darkrai', 'Deoxys-Attack', 'Deoxys-Normal', 'Deoxys-Defense', 'Deoxys-Speed', 'Dialga', 'Garchomp', + 'Giratina', 'Groudon', 'Ho-Oh', 'Jirachi', 'Kyogre', 'Latias', 'Latios', 'Lugia', 'Machamp', 'Manaphy', 'Mew', 'Mewtwo', + 'Palkia', 'Porygon-Z', 'Rayquaza', 'Salamence', 'Shaymin', 'Shaymin-Sky', 'Snorlax', 'Togekiss', 'Focus Band', 'Focus Sash', + 'Quick Claw', 'Soul Dew', 'Destiny Bond', 'Explosion', 'Perish Song', 'Self-Destruct', ], - banlist: ['Jirachi', 'Latias', 'Machamp', 'Porygon-Z', 'Shaymin', 'Snorlax', 'Togekiss', 'Focus Sash', 'Destiny Bond', 'Explosion', 'Perish Song', 'Self-Destruct'], - unbanlist: ['Wobbuffet', 'Wynaut', 'Sand Veil', 'Swagger'], + }, + { + name: "[Gen 4] CAP", + desc: "The Create-A-Pokémon project is a community dedicated to exploring and understanding the competitive Pokémon metagame by designing, creating, and playtesting new Pokémon concepts.", + mod: 'gen4', + searchShow: false, + ruleset: ['[Gen 4] OU', '+CAP'], }, { name: "[Gen 4] ZU", - threads: [ - `• DPP ZU`, - ], - mod: 'gen4', searchShow: false, ruleset: ['[Gen 4] PU'], @@ -5033,20 +4003,8 @@ export const Formats: FormatList = [ 'Solrock', 'Tangela', 'Torkoal', 'Victreebel', 'Xatu', 'Walrein', 'Zangoose', 'Damp Rock', ], }, - { - name: "[Gen 4] CAP", - threads: [ - `• DPP CAP Viability Rankings`, - `• DPP CAP Sample Teams`, - ], - - mod: 'gen4', - searchShow: false, - ruleset: ['[Gen 4] OU', '+CAP'], - }, { name: "[Gen 4] Custom Game", - mod: 'gen4', searchShow: false, debug: true, @@ -5064,26 +4022,23 @@ export const Formats: FormatList = [ }, { name: "[Gen 4] VGC 2010", - mod: 'gen4', gameType: 'doubles', searchShow: false, - ruleset: ['Flat Rules', 'Max Team Size = 4', 'Limit Two Restricted'], + ruleset: ['Flat Rules', 'Min Team Size = 4', 'Max Team Size = 4', 'Limit Two Restricted'], restricted: ['Restricted Legendary'], banlist: ['Soul Dew'], }, { name: "[Gen 4] VGC 2009", - mod: 'gen4pt', gameType: 'doubles', searchShow: false, - ruleset: ['Flat Rules', '! Adjust Level Down', 'Max Level = 50', 'Max Team Size = 4'], + ruleset: ['Flat Rules', '! Adjust Level Down', 'Max Level = 50', 'Min Team Size = 4', 'Max Team Size = 4'], banlist: ['Tyranitar', 'Rotom', 'Judgment', 'Soul Dew'], }, { name: "[Gen 4] Doubles Custom Game", - mod: 'gen4', gameType: 'doubles', searchShow: false, @@ -5102,93 +4057,70 @@ export const Formats: FormatList = [ }, { name: "[Gen 3] Ubers", - threads: [ - `• ADV Ubers`, - ], - mod: 'gen3', searchShow: false, ruleset: ['Standard', 'Deoxys Camouflage Clause', 'One Baton Pass Clause'], - banlist: ['Wobbuffet + Leftovers'], + banlist: ['Wobbuffet + Leftovers', 'Wynaut + Leftovers', 'Baton Pass'], }, { name: "[Gen 3] UU", - threads: [ - `• ADV UU Metagame Discussion`, - `• ADV UU Viability Rankings`, - ], - mod: 'gen3', searchShow: false, ruleset: ['Standard'], banlist: ['Uber', 'OU', 'UUBL', 'Smeargle + Ingrain', 'Arena Trap', 'Baton Pass', 'Swagger'], }, { - name: "[Gen 3] NU", - threads: [ - `• ADV NU Viability Rankings`, - ], - + name: "[Gen 3] RU", mod: 'gen3', searchShow: false, ruleset: ['Standard'], - banlist: ['Uber', 'OU', 'UUBL', 'UU', 'Smeargle + Ingrain'], + banlist: ['Uber', 'OU', 'UUBL', 'UU', 'RUBL', 'Smeargle + Ingrain', 'Arena Trap', 'Baton Pass', 'Swagger'], }, { - name: "[Gen 3] PU", - threads: [ - `• ADV PU`, - ], - + name: "[Gen 3] NU", mod: 'gen3', searchShow: false, - ruleset: ['Standard', 'Baton Pass Clause'], - banlist: ['Uber', 'OU', 'UUBL', 'UU', 'NUBL', 'NU', 'PUBL'], + ruleset: ['Standard'], + banlist: ['Uber', 'OU', 'UUBL', 'UU', 'RUBL', 'RU', 'Smeargle + Ingrain'], }, { - name: "[Gen 3] ZU", - threads: [ - `• ADV ZU`, - ], - + name: "[Gen 3] PU", mod: 'gen3', searchShow: false, ruleset: ['Standard', 'Baton Pass Stat Clause'], - banlist: ['Uber', 'OU', 'UUBL', 'UU', 'NUBL', 'NU', 'PUBL', 'PU', 'ZUBL'], + banlist: ['Uber', 'OU', 'UUBL', 'UU', 'RUBL', 'RU', 'NUBL', 'NU', 'PUBL'], }, { name: "[Gen 3] LC", - threads: [ - `• ADV LC`, - ], - mod: 'gen3', searchShow: false, - ruleset: ['Standard', 'Little Cup', 'Sleep Moves Clause'], - banlist: ['Chansey', 'Meditite', 'Omanyte', 'Scyther', 'Wynaut', 'Zigzagoon', 'Baton Pass', 'Dragon Rage', 'Sonic Boom', 'Swagger'], + ruleset: ['Standard', 'Little Cup', 'Sleep Moves Clause', 'Accuracy Moves Clause'], + banlist: ['Chansey', 'Meditite', 'Omanyte', 'Porygon', 'Scyther', 'Wynaut', 'Zigzagoon', 'Deep Sea Tooth', 'Baton Pass', 'Dragon Rage', 'Sonic Boom', 'Swagger', 'Thunder Wave'], }, { name: "[Gen 3] 1v1", desc: `Bring three Pokémon to Team Preview and choose one to battle.`, - threads: [ - `• ADV 1v1`, - ], - mod: 'gen3', searchShow: false, ruleset: [ 'Picked Team Size = 1', 'Max Team Size = 3', - '[Gen 3] OU', 'Accuracy Moves Clause', 'Sleep Moves Clause', 'Team Preview', '!Freeze Clause Mod', + 'Standard', 'Accuracy Moves Clause', 'Sleep Moves Clause', 'Team Preview', ], banlist: [ - 'Clefable', 'Slaking', 'Snorlax', 'Suicune', 'Zapdos', 'Destiny Bond', 'Explosion', 'Ingrain', 'Perish Song', + 'Clefable', 'Deoxys', 'Deoxys-Attack', 'Deoxys-Defense', 'Deoxys-Speed', 'Groudon', 'Ho-Oh', 'Kyogre', 'Latias', 'Latios', + 'Lugia', 'Mew', 'Mewtwo', 'Rayquaza', 'Slaking', 'Snorlax', 'Suicune', 'Zapdos', 'Destiny Bond', 'Explosion', 'Perish Song', 'Self-Destruct', 'Focus Band', 'King\'s Rock', 'Quick Claw', ], - unbanlist: ['Mr. Mime', 'Wobbuffet', 'Wynaut', 'Sand Veil', 'Soundproof'], + }, + { + name: "[Gen 3] ZU", + mod: 'gen3', + searchShow: false, + ruleset: ['Standard', 'Sleep Moves Clause', 'Baton Pass Stat Trap Clause', 'Swagger Clause'], + banlist: ['Uber', 'OU', 'UUBL', 'UU', 'RUBL', 'RU', 'NUBL', 'NU', 'PUBL', 'PU', 'ZUBL', 'Baton Pass + Substitute'], }, { name: "[Gen 3] Custom Game", - mod: 'gen3', searchShow: false, debug: true, @@ -5197,7 +4129,6 @@ export const Formats: FormatList = [ }, { name: "[Gen 3] Doubles Custom Game", - mod: 'gen3', gameType: 'doubles', searchShow: false, @@ -5206,18 +4137,12 @@ export const Formats: FormatList = [ }, { name: "[Gen 2] Ubers", - threads: [ - `• GSC Ubers`, - ], - mod: 'gen2', searchShow: false, ruleset: ['Standard'], }, { name: "[Gen 2] UU", - threads: [`• GSC UU`], - mod: 'gen2', searchShow: false, ruleset: ['[Gen 2] OU'], @@ -5226,50 +4151,53 @@ export const Formats: FormatList = [ }, { name: "[Gen 2] NU", - threads: [`• GSC NU`], - mod: 'gen2', searchShow: false, ruleset: ['[Gen 2] UU'], - banlist: ['UU', 'NUBL'], + banlist: ['UU', 'NUBL', 'Swagger'], unbanlist: ['Agility + Baton Pass'], }, + { + name: "[Gen 2] PU", + mod: 'gen2', + searchShow: false, + ruleset: ['[Gen 2] NU'], + banlist: ['NU', 'PUBL', 'Baton Pass + Mean Look', 'Baton Pass + Spider Web'], + unbanlist: ['Swagger'], + }, { name: "[Gen 2] 1v1", - threads: [`• GSC 1v1`], - mod: 'gen2', searchShow: false, ruleset: [ 'Picked Team Size = 1', 'Max Team Size = 3', - '[Gen 2] OU', 'Accuracy Moves Clause', 'Sleep Moves Clause', 'Team Preview', + 'Standard', 'Accuracy Moves Clause', 'Sleep Moves Clause', 'Team Preview', ], banlist: [ - 'Alakazam', 'Clefable', 'Snorlax', 'Zapdos', 'Berserk Gene', 'Focus Band', 'King\'s Rock', 'Quick Claw', - 'Attract', 'Destiny Bond', 'Explosion', 'Perish Song', 'Present', 'Self-Destruct', 'Swagger', + 'Alakazam', 'Celebi', 'Clefable', 'Ho-Oh', 'Lugia', 'Mew', 'Mewtwo', 'Snorlax', 'Zapdos', + 'Berserk Gene', 'Focus Band', 'King\'s Rock', 'Quick Claw', 'Attract', 'Destiny Bond', + 'Explosion', 'Perish Song', 'Present', 'Self-Destruct', 'Swagger', ], }, { - name: "[Gen 2] Nintendo Cup 2000", - threads: [ - `• Nintendo Cup 2000 Resource Hub`, - `• Differences between Nintendo Cup 2000 and GSC OU`, - ], - + name: "[Gen 2] ZU", + mod: 'gen2', + searchShow: false, + ruleset: ['[Gen 2] PU'], + banlist: ['PU', 'ZUBL'], + }, + { + name: "[Gen 2] NC 2000", mod: 'gen2stadium2', searchShow: false, ruleset: [ 'Picked Team Size = 3', 'Min Level = 50', 'Max Level = 55', 'Max Total Level = 155', - 'Obtainable', 'Stadium Sleep Clause', 'Freeze Clause Mod', 'Species Clause', 'Item Clause', 'Endless Battle Clause', 'Cancel Mod', 'Event Moves Clause', 'Nickname Clause', 'Team Preview', 'Nintendo Cup 2000 Move Legality', + 'Obtainable', 'Stadium Sleep Clause', 'Freeze Clause Mod', 'Species Clause', 'Item Clause = 1', 'Endless Battle Clause', 'Cancel Mod', 'Event Moves Clause', 'Nickname Clause', 'Team Preview', 'NC 2000 Move Legality', ], banlist: ['Uber'], }, { name: "[Gen 2] Stadium OU", - threads: [ - `• Placeholder`, - ], - mod: 'gen2stadium2', searchShow: false, ruleset: ['Standard'], @@ -5277,7 +4205,6 @@ export const Formats: FormatList = [ }, { name: "[Gen 2] Custom Game", - mod: 'gen2', searchShow: false, debug: true, @@ -5286,20 +4213,19 @@ export const Formats: FormatList = [ }, { name: "[Gen 1] Ubers", - threads: [ - `• RBY Ubers`, - ], - mod: 'gen1', searchShow: false, ruleset: ['Standard'], }, + { + name: "[Gen 1] UU", + mod: 'gen1', + searchShow: false, + ruleset: ['[Gen 1] OU', 'APT Clause'], + banlist: ['OU', 'UUBL'], + }, { name: "[Gen 1] NU", - threads: [ - `• RBY NU Metagame Discussion & Resources`, - ], - mod: 'gen1', searchShow: false, ruleset: ['[Gen 1] UU', '!APT Clause'], @@ -5307,10 +4233,6 @@ export const Formats: FormatList = [ }, { name: "[Gen 1] PU", - threads: [ - `• RBY PU Metagame Discussion & Resources`, - ], - mod: 'gen1', searchShow: false, ruleset: ['[Gen 1] NU'], @@ -5318,22 +4240,24 @@ export const Formats: FormatList = [ }, { name: "[Gen 1] 1v1", - threads: [ - `• RBY 1v1`, - ], - mod: 'gen1', searchShow: false, ruleset: [ 'Picked Team Size = 1', 'Max Team Size = 3', - '[Gen 1] OU', 'Accuracy Moves Clause', 'Sleep Moves Clause', 'Team Preview', + 'Standard', 'Accuracy Moves Clause', 'Sleep Moves Clause', 'Team Preview', ], - banlist: ['Bind', 'Clamp', 'Explosion', 'Fire Spin', 'Self-Destruct', 'Wrap'], + banlist: ['Mew', 'Mewtwo', 'Bind', 'Clamp', 'Explosion', 'Fire Spin', 'Self-Destruct', 'Wrap'], + }, + { + name: "[Gen 1] ZU", + mod: 'gen1', + searchShow: false, + ruleset: ['[Gen 1] PU'], + banlist: ['PU', 'ZUBL'], }, { name: "[Gen 1] Japanese OU", desc: `Generation 1 with Japanese battle mechanics.`, - mod: 'gen1jpn', searchShow: false, ruleset: ['Standard'], @@ -5341,10 +4265,6 @@ export const Formats: FormatList = [ }, { name: "[Gen 1] Stadium OU", - threads: [ - `• Stadium OU Viability Rankings`, - ], - mod: 'gen1stadium', searchShow: false, ruleset: ['Standard', 'Team Preview'], @@ -5356,31 +4276,22 @@ export const Formats: FormatList = [ { name: "[Gen 1] Tradebacks OU", desc: `RBY OU with movepool additions from the Time Capsule.`, - threads: [ - `• RBY Tradebacks OU`, - ], - mod: 'gen1', searchShow: false, ruleset: ['[Gen 1] OU', 'Allow Tradeback'], }, { - name: "[Gen 1] Nintendo Cup 1997", - threads: [ - `• Nintendo Cup 1997 Discussion & Resources`, - ], - + name: "[Gen 1] NC 1997", mod: 'gen1jpn', searchShow: false, ruleset: [ 'Picked Team Size = 3', 'Min Level = 50', 'Max Level = 55', 'Max Total Level = 155', - 'Obtainable', 'Team Preview', 'Stadium Sleep Clause', 'Species Clause', 'Nickname Clause', 'HP Percentage Mod', 'Cancel Mod', 'Nintendo Cup 1997 Move Legality', + 'Obtainable', 'Team Preview', 'Stadium Sleep Clause', 'Species Clause', 'Nickname Clause', 'HP Percentage Mod', 'Cancel Mod', 'NC 1997 Move Legality', ], banlist: ['Uber'], }, { name: "[Gen 1] Custom Game", - mod: 'gen1', searchShow: false, debug: true, diff --git a/data/abilities.ts b/data/abilities.ts index 96360b191584..4a7dc2f1b889 100644 --- a/data/abilities.ts +++ b/data/abilities.ts @@ -32,17 +32,24 @@ Ratings and how they work: */ -export const Abilities: {[abilityid: string]: AbilityData} = { +export const Abilities: import('../sim/dex-abilities').AbilityDataTable = { noability: { isNonstandard: "Past", + flags: {}, name: "No Ability", rating: 0.1, num: 0, }, adaptability: { - onModifyMove(move) { - move.stab = 2; + onModifySTAB(stab, source, target, move) { + if (move.forceSTAB || source.hasType(move.type)) { + if (stab === 2) { + return 2.25; + } + return 2; + } }, + flags: {}, name: "Adaptability", rating: 4, num: 91, @@ -63,18 +70,20 @@ export const Abilities: {[abilityid: string]: AbilityData} = { onBasePower(basePower, pokemon, target, move) { if (move.typeChangerBoosted === this.effect) return this.chainModify([4915, 4096]); }, + flags: {}, name: "Aerilate", rating: 4, num: 184, }, aftermath: { - name: "Aftermath", onDamagingHitOrder: 1, onDamagingHit(damage, target, source, move) { if (!target.hp && this.checkMoveMakesContact(move, source, target, true)) { this.damage(source.baseMaxhp / 4, source, target); } }, + flags: {}, + name: "Aftermath", rating: 2, num: 106, }, @@ -84,6 +93,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { }, onStart(pokemon) { // Air Lock does not activate when Skill Swapped or when Neutralizing Gas leaves the field + pokemon.abilityState.ending = false; // Clear the ending flag if (this.effectState.switchingIn) { this.add('-ability', pokemon, 'Air Lock'); this.effectState.switchingIn = false; @@ -91,9 +101,11 @@ export const Abilities: {[abilityid: string]: AbilityData} = { this.eachEvent('WeatherChange', this.effect); }, onEnd(pokemon) { + pokemon.abilityState.ending = true; this.eachEvent('WeatherChange', this.effect); }, suppressWeather: true, + flags: {}, name: "Air Lock", rating: 1.5, num: 76, @@ -114,6 +126,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { return this.chainModify([5325, 4096]); } }, + flags: {}, name: "Analytic", rating: 2.5, num: 148, @@ -125,6 +138,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { this.boost({atk: 12}, target, target); } }, + flags: {}, name: "Anger Point", rating: 1, num: 83, @@ -160,6 +174,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { this.boost({atk: 1, spa: 1, spe: 1, def: -1, spd: -1}, target, target); } }, + flags: {}, name: "Anger Shell", rating: 3, num: 271, @@ -181,6 +196,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { } } }, + flags: {}, name: "Anticipation", rating: 0.5, num: 107, @@ -199,6 +215,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { pokemon.maybeTrapped = true; } }, + flags: {}, name: "Arena Trap", rating: 5, num: 71, @@ -217,7 +234,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { return false; } }, - isBreakable: true, + flags: {breakable: 1}, name: "Armor Tail", rating: 2.5, num: 296, @@ -232,7 +249,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { return null; } }, - isBreakable: true, + flags: {breakable: 1}, name: "Aroma Veil", rating: 2, num: 165, @@ -243,6 +260,12 @@ export const Abilities: {[abilityid: string]: AbilityData} = { this.add('-ability', pokemon, 'Unnerve'); this.effectState.unnerved = true; }, + 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; }, @@ -254,7 +277,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { this.boost({atk: length}, source, source, this.dex.abilities.get('chillingneigh')); } }, - isPermanent: true, + flags: {failroleplay: 1, noreceiver: 1, noentrain: 1, notrace: 1, failskillswap: 1, cantsuppress: 1}, name: "As One (Glastrier)", rating: 3.5, num: 266, @@ -265,6 +288,12 @@ export const Abilities: {[abilityid: string]: AbilityData} = { this.add('-ability', pokemon, 'Unnerve'); this.effectState.unnerved = true; }, + 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; }, @@ -276,7 +305,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { this.boost({spa: length}, source, source, this.dex.abilities.get('grimneigh')); } }, - isPermanent: true, + flags: {failroleplay: 1, noreceiver: 1, noentrain: 1, notrace: 1, failskillswap: 1, cantsuppress: 1}, name: "As One (Spectrier)", rating: 3.5, num: 267, @@ -290,7 +319,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { if (target === source || move.category === 'Status') return; move.hasAuraBreak = true; }, - isBreakable: true, + flags: {breakable: 1}, name: "Aura Break", rating: 1, num: 188, @@ -306,11 +335,13 @@ export const Abilities: {[abilityid: string]: AbilityData} = { } } }, + flags: {}, name: "Bad Dreams", rating: 1.5, num: 123, }, ballfetch: { + flags: {}, name: "Ball Fetch", rating: 0, num: 237, @@ -323,13 +354,14 @@ export const Abilities: {[abilityid: string]: AbilityData} = { return this.chainModify([5325, 4096]); } }, + flags: {}, name: "Battery", rating: 0, num: 217, }, battlearmor: { onCriticalHit: false, - isBreakable: true, + flags: {breakable: 1}, name: "Battle Armor", rating: 1, num: 4, @@ -344,7 +376,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { source.abilityState.battleBondTriggered = true; } }, - isPermanent: true, + flags: {failroleplay: 1, noreceiver: 1, noentrain: 1, notrace: 1, failskillswap: 1, cantsuppress: 1}, name: "Battle Bond", rating: 3.5, num: 210, @@ -362,6 +394,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { this.debug('Beads of Ruin SpD drop'); return this.chainModify(0.75); }, + flags: {}, name: "Beads of Ruin", rating: 4.5, num: 284, @@ -373,6 +406,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { this.boost({[bestStat]: length}, source); } }, + flags: {}, name: "Beast Boost", rating: 3.5, num: 224, @@ -403,11 +437,12 @@ export const Abilities: {[abilityid: string]: AbilityData} = { if (!source || source === target || !target.hp || !move.totalDamage) return; const lastAttackedBy = target.getLastAttackedBy(); if (!lastAttackedBy) return; - const damage = move.multihit ? move.totalDamage : lastAttackedBy.damage; + const damage = move.multihit && !move.smartTarget ? move.totalDamage : lastAttackedBy.damage; if (target.hp <= target.maxhp / 2 && target.hp + damage > target.maxhp / 2) { this.boost({spa: 1}, target, target); } }, + flags: {}, name: "Berserk", rating: 2, num: 201, @@ -422,7 +457,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { } } }, - isBreakable: true, + flags: {breakable: 1}, name: "Big Pecks", rating: 0.5, num: 145, @@ -442,6 +477,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { return this.chainModify(1.5); } }, + flags: {}, name: "Blaze", rating: 2, num: 66, @@ -453,7 +489,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { return null; } }, - isBreakable: true, + flags: {breakable: 1}, name: "Bulletproof", rating: 3, num: 171, @@ -462,6 +498,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { onEatItem(item, pokemon) { this.heal(pokemon.baseMaxhp / 3); }, + flags: {}, name: "Cheek Pouch", rating: 2, num: 167, @@ -472,6 +509,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { this.boost({atk: length}, source); } }, + flags: {}, name: "Chilling Neigh", rating: 3, num: 264, @@ -482,6 +520,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { return this.chainModify(2); } }, + flags: {}, name: "Chlorophyll", rating: 3, num: 34, @@ -501,7 +540,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { this.add("-fail", target, "unboost", "[from] ability: Clear Body", "[of] " + target); } }, - isBreakable: true, + flags: {breakable: 1}, name: "Clear Body", rating: 2, num: 29, @@ -512,6 +551,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { }, onStart(pokemon) { // Cloud Nine does not activate when Skill Swapped or when Neutralizing Gas leaves the field + pokemon.abilityState.ending = false; // Clear the ending flag if (this.effectState.switchingIn) { this.add('-ability', pokemon, 'Cloud Nine'); this.effectState.switchingIn = false; @@ -519,9 +559,11 @@ export const Abilities: {[abilityid: string]: AbilityData} = { this.eachEvent('WeatherChange', this.effect); }, onEnd(pokemon) { + pokemon.abilityState.ending = true; this.eachEvent('WeatherChange', this.effect); }, suppressWeather: true, + flags: {}, name: "Cloud Nine", rating: 1.5, num: 13, @@ -546,6 +588,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { } } }, + flags: {}, name: "Color Change", rating: 0, num: 16, @@ -561,7 +604,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { return false; }, // Permanent sleep "status" implemented in the relevant sleep-checking effects - isPermanent: true, + flags: {failroleplay: 1, noreceiver: 1, noentrain: 1, notrace: 1, failskillswap: 1, cantsuppress: 1}, name: "Comatose", rating: 4, num: 213, @@ -570,8 +613,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { onUpdate(pokemon) { if (this.gameType !== 'doubles') return; const ally = pokemon.allies()[0]; - if (!ally || pokemon.transformed || - pokemon.baseSpecies.baseSpecies !== 'Tatsugiri' || ally.baseSpecies.baseSpecies !== 'Dondozo') { + if (!ally || pokemon.baseSpecies.baseSpecies !== 'Tatsugiri' || ally.baseSpecies.baseSpecies !== 'Dondozo') { // Handle any edge cases if (pokemon.getVolatile('commanding')) pokemon.removeVolatile('commanding'); return; @@ -592,6 +634,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { pokemon.removeVolatile('commanding'); } }, + flags: {failroleplay: 1, noreceiver: 1, noentrain: 1, notrace: 1, failskillswap: 1}, name: "Commander", rating: 0, num: 279, @@ -599,9 +642,6 @@ export const Abilities: {[abilityid: string]: AbilityData} = { competitive: { onAfterEachBoost(boost, target, source, effect) { if (!source || target.isAlly(source)) { - if (effect.id === 'stickyweb') { - this.hint("Court Change Sticky Web counts as lowering your own Speed, and Competitive only affects stats lowered by foes.", true, source.side); - } return; } let statsLowered = false; @@ -615,6 +655,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { this.boost({spa: 2}, target, target, null, false, true); } }, + flags: {}, name: "Competitive", rating: 2.5, num: 172, @@ -626,6 +667,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { this.debug('compoundeyes - enhancing accuracy'); return this.chainModify([5325, 4096]); }, + flags: {}, name: "Compound Eyes", rating: 3, num: 14, @@ -638,13 +680,14 @@ export const Abilities: {[abilityid: string]: AbilityData} = { boost[i]! *= -1; } }, - isBreakable: true, + flags: {breakable: 1}, name: "Contrary", rating: 4.5, num: 126, }, corrosion: { // Implemented in sim/pokemon.js:Pokemon#setStatus + flags: {}, name: "Corrosion", rating: 2.5, num: 212, @@ -658,17 +701,19 @@ export const Abilities: {[abilityid: string]: AbilityData} = { for (i in ally.boosts) { pokemon.boosts[i] = ally.boosts[i]; } - const volatilesToCopy = ['focusenergy', 'gmaxchistrike', 'laserfocus']; + const volatilesToCopy = ['dragoncheer', 'focusenergy', 'gmaxchistrike', 'laserfocus']; + // we need to be sure to remove all the overlapping crit volatiles before trying to add any + for (const volatile of volatilesToCopy) pokemon.removeVolatile(volatile); for (const volatile of volatilesToCopy) { if (ally.volatiles[volatile]) { pokemon.addVolatile(volatile); if (volatile === 'gmaxchistrike') pokemon.volatiles[volatile].layers = ally.volatiles[volatile].layers; - } else { - pokemon.removeVolatile(volatile); + if (volatile === 'dragoncheer') pokemon.volatiles[volatile].hasDragonType = ally.volatiles[volatile].hasDragonType; } } this.add('-copyboost', pokemon, ally, '[from] ability: Costar'); }, + flags: {}, name: "Costar", rating: 0, num: 294, @@ -685,6 +730,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { this.boost({spe: -1}, pokemon, target, null, true); } }, + flags: {}, name: "Cotton Down", rating: 2, num: 238, @@ -718,6 +764,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { } }, }, + flags: {}, name: "Cud Chew", rating: 2, num: 291, @@ -729,6 +776,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { this.add('-clearboost', ally, '[from] ability: Curious Medicine', '[of] ' + pokemon); } }, + flags: {}, name: "Curious Medicine", rating: 0, num: 261, @@ -742,6 +790,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { } } }, + flags: {}, name: "Cursed Body", rating: 2, num: 130, @@ -754,6 +803,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { } } }, + flags: {}, name: "Cute Charm", rating: 0.5, num: 56, @@ -771,12 +821,13 @@ export const Abilities: {[abilityid: string]: AbilityData} = { return false; } }, - isBreakable: true, + flags: {breakable: 1}, name: "Damp", rating: 0.5, num: 6, }, dancer: { + flags: {}, name: "Dancer", // implemented in runMove in scripts.js rating: 1.5, @@ -794,6 +845,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { if (move.auraBooster !== this.effectState.target) return; return this.chainModify([move.hasAuraBreak ? 3072 : 5448, 4096]); }, + flags: {}, name: "Dark Aura", rating: 3, num: 186, @@ -804,6 +856,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { pokemon.shieldBoost = true; this.boost({def: 1}, pokemon); }, + flags: {}, name: "Dauntless Shield", rating: 3.5, num: 235, @@ -822,7 +875,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { return false; } }, - isBreakable: true, + flags: {breakable: 1}, name: "Dazzling", rating: 2.5, num: 219, @@ -840,6 +893,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { return this.chainModify(0.5); } }, + flags: {}, name: "Defeatist", rating: -1, num: 129, @@ -847,9 +901,6 @@ export const Abilities: {[abilityid: string]: AbilityData} = { defiant: { onAfterEachBoost(boost, target, source, effect) { if (!source || target.isAlly(source)) { - if (effect.id === 'stickyweb') { - this.hint("Court Change Sticky Web counts as lowering your own Speed, and Defiant only affects stats lowered by foes.", true, source.side); - } return; } let statsLowered = false; @@ -863,6 +914,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { this.boost({atk: 2}, target, target, null, false, true); } }, + flags: {}, name: "Defiant", rating: 3, num: 128, @@ -886,6 +938,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { } this.field.clearWeather(); }, + flags: {}, name: "Delta Stream", rating: 4, num: 191, @@ -909,6 +962,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { } this.field.clearWeather(); }, + flags: {}, name: "Desolate Land", rating: 4.5, num: 190, @@ -916,10 +970,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { disguise: { onDamagePriority: 1, onDamage(damage, target, source, effect) { - if ( - effect && effect.effectType === 'Move' && - ['mimikyu', 'mimikyutotem'].includes(target.species.id) && !target.transformed - ) { + if (effect?.effectType === 'Move' && ['mimikyu', 'mimikyutotem'].includes(target.species.id)) { this.add('-activate', target, 'ability: Disguise'); this.effectState.busted = true; return 0; @@ -927,7 +978,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { }, onCriticalHit(target, source, move) { if (!target) return; - if (!['mimikyu', 'mimikyutotem'].includes(target.species.id) || target.transformed) { + if (!['mimikyu', 'mimikyutotem'].includes(target.species.id)) { return; } const hitSub = target.volatiles['substitute'] && !move.flags['bypasssub'] && !(move.infiltrates && this.gen >= 6); @@ -938,7 +989,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { }, onEffectiveness(typeMod, target, type, move) { if (!target || move.category === 'Status') return; - if (!['mimikyu', 'mimikyutotem'].includes(target.species.id) || target.transformed) { + if (!['mimikyu', 'mimikyutotem'].includes(target.species.id)) { return; } @@ -955,8 +1006,10 @@ export const Abilities: {[abilityid: string]: AbilityData} = { this.damage(pokemon.baseMaxhp / 8, pokemon, pokemon, this.dex.species.get(speciesid)); } }, - isBreakable: true, - isPermanent: true, + flags: { + failroleplay: 1, noreceiver: 1, noentrain: 1, notrace: 1, failskillswap: 1, cantsuppress: 1, + breakable: 1, notransform: 1, + }, name: "Disguise", rating: 3.5, num: 209, @@ -975,6 +1028,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { this.boost({atk: 1}); } }, + flags: {}, name: "Download", rating: 3.5, num: 88, @@ -994,6 +1048,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { return this.chainModify(1.5); } }, + flags: {}, name: "Dragon's Maw", rating: 3.5, num: 263, @@ -1006,6 +1061,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { } this.field.setWeather('raindance'); }, + flags: {}, name: "Drizzle", rating: 4, num: 2, @@ -1018,6 +1074,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { } this.field.setWeather('sunnyday'); }, + flags: {}, name: "Drought", rating: 4, num: 70, @@ -1045,12 +1102,13 @@ export const Abilities: {[abilityid: string]: AbilityData} = { this.damage(target.baseMaxhp / 8, target, target); } }, - isBreakable: true, + flags: {breakable: 1}, name: "Dry Skin", rating: 3, num: 87, }, earlybird: { + flags: {}, name: "Early Bird", // Implemented in statuses.js rating: 1.5, @@ -1065,7 +1123,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { return null; } }, - isBreakable: true, + flags: {breakable: 1}, name: "Earth Eater", rating: 3.5, num: 297, @@ -1083,6 +1141,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { } } }, + flags: {}, name: "Effect Spore", rating: 2, num: 27, @@ -1091,6 +1150,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { onStart(source) { this.field.setTerrain('electricterrain'); }, + flags: {}, name: "Electric Surge", rating: 4, num: 226, @@ -1100,13 +1160,14 @@ export const Abilities: {[abilityid: string]: AbilityData} = { onDamagingHit(damage, target, source, move) { target.addVolatile('charge'); }, + flags: {}, name: "Electromorphosis", rating: 3, num: 280, }, embodyaspectcornerstone: { onStart(pokemon) { - if (pokemon.baseSpecies.name === 'Ogerpon-Cornerstone-Tera' && !pokemon.transformed && !this.effectState.embodied) { + if (pokemon.baseSpecies.name === 'Ogerpon-Cornerstone-Tera' && !this.effectState.embodied) { this.effectState.embodied = true; this.boost({def: 1}, pokemon); } @@ -1114,13 +1175,14 @@ export const Abilities: {[abilityid: string]: AbilityData} = { onSwitchIn() { delete this.effectState.embodied; }, + flags: {failroleplay: 1, noreceiver: 1, noentrain: 1, notrace: 1, failskillswap: 1, notransform: 1}, name: "Embody Aspect (Cornerstone)", rating: 3.5, num: 304, }, embodyaspecthearthflame: { onStart(pokemon) { - if (pokemon.baseSpecies.name === 'Ogerpon-Hearthflame-Tera' && !pokemon.transformed && !this.effectState.embodied) { + if (pokemon.baseSpecies.name === 'Ogerpon-Hearthflame-Tera' && !this.effectState.embodied) { this.effectState.embodied = true; this.boost({atk: 1}, pokemon); } @@ -1128,13 +1190,14 @@ export const Abilities: {[abilityid: string]: AbilityData} = { onSwitchIn() { delete this.effectState.embodied; }, + flags: {failroleplay: 1, noreceiver: 1, noentrain: 1, notrace: 1, failskillswap: 1, notransform: 1}, name: "Embody Aspect (Hearthflame)", rating: 3.5, num: 303, }, embodyaspectteal: { onStart(pokemon) { - if (pokemon.baseSpecies.name === 'Ogerpon-Teal-Tera' && !pokemon.transformed && !this.effectState.embodied) { + if (pokemon.baseSpecies.name === 'Ogerpon-Teal-Tera' && !this.effectState.embodied) { this.effectState.embodied = true; this.boost({spe: 1}, pokemon); } @@ -1142,13 +1205,14 @@ export const Abilities: {[abilityid: string]: AbilityData} = { onSwitchIn() { delete this.effectState.embodied; }, + flags: {failroleplay: 1, noreceiver: 1, noentrain: 1, notrace: 1, failskillswap: 1, notransform: 1}, name: "Embody Aspect (Teal)", rating: 3.5, num: 301, }, embodyaspectwellspring: { onStart(pokemon) { - if (pokemon.baseSpecies.name === 'Ogerpon-Wellspring-Tera' && !pokemon.transformed && !this.effectState.embodied) { + if (pokemon.baseSpecies.name === 'Ogerpon-Wellspring-Tera' && !this.effectState.embodied) { this.effectState.embodied = true; this.boost({spd: 1}, pokemon); } @@ -1156,6 +1220,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { onSwitchIn() { delete this.effectState.embodied; }, + flags: {failroleplay: 1, noreceiver: 1, noentrain: 1, notrace: 1, failskillswap: 1, notransform: 1}, name: "Embody Aspect (Wellspring)", rating: 3.5, num: 302, @@ -1171,6 +1236,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { target.switchFlag = true; this.add('-activate', target, 'ability: Emergency Exit'); }, + flags: {}, name: "Emergency Exit", rating: 1, num: 194, @@ -1187,6 +1253,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { if (move.auraBooster !== this.effectState.target) return; return this.chainModify([move.hasAuraBreak ? 3072 : 5448, 4096]); }, + flags: {}, name: "Fairy Aura", rating: 3, num: 187, @@ -1198,7 +1265,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { return this.chainModify(0.75); } }, - isBreakable: true, + flags: {breakable: 1}, name: "Filter", rating: 3, num: 111, @@ -1211,6 +1278,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { } } }, + flags: {}, name: "Flame Body", rating: 2, num: 49, @@ -1222,6 +1290,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { return this.chainModify(1.5); } }, + flags: {}, name: "Flare Boost", rating: 2, num: 138, @@ -1262,7 +1331,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { this.add('-end', target, 'ability: Flash Fire', '[silent]'); }, }, - isBreakable: true, + flags: {breakable: 1}, name: "Flash Fire", rating: 3.5, num: 18, @@ -1298,7 +1367,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { return this.chainModify(1.5); } }, - isBreakable: true, + flags: {failroleplay: 1, noreceiver: 1, noentrain: 1, notrace: 1, breakable: 1}, name: "Flower Gift", rating: 1, num: 122, @@ -1337,7 +1406,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { return null; } }, - isBreakable: true, + flags: {breakable: 1}, name: "Flower Veil", rating: 0, num: 166, @@ -1349,7 +1418,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { if (move.flags['contact']) mod /= 2; return this.chainModify(mod); }, - isBreakable: true, + flags: {breakable: 1}, name: "Fluffy", rating: 3.5, num: 218, @@ -1382,6 +1451,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { pokemon.formeChange(forme, this.effect, false, '[msg]'); } }, + flags: {failroleplay: 1, noreceiver: 1, noentrain: 1, notrace: 1}, name: "Forecast", rating: 2, num: 59, @@ -1410,19 +1480,20 @@ export const Abilities: {[abilityid: string]: AbilityData} = { const [warnMoveName, warnTarget] = this.sample(warnMoves); this.add('-activate', pokemon, 'ability: Forewarn', warnMoveName, '[of] ' + warnTarget); }, + flags: {}, name: "Forewarn", rating: 0.5, num: 108, }, friendguard: { - name: "Friend Guard", onAnyModifyDamage(damage, source, target, move) { if (target !== this.effectState.target && target.isAlly(this.effectState.target)) { this.debug('Friend Guard weaken'); return this.chainModify(0.75); } }, - isBreakable: true, + flags: {breakable: 1}, + name: "Friend Guard", rating: 0, num: 132, }, @@ -1430,10 +1501,11 @@ export const Abilities: {[abilityid: string]: AbilityData} = { onStart(pokemon) { for (const target of pokemon.foes()) { if (target.item) { - this.add('-item', target, target.getItem().name, '[from] ability: Frisk', '[of] ' + pokemon, '[identify]'); + this.add('-item', target, target.getItem().name, '[from] ability: Frisk', '[of] ' + pokemon); } } }, + flags: {}, name: "Frisk", rating: 1.5, num: 119, @@ -1453,6 +1525,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { this.add("-fail", target, "unboost", "[from] ability: Full Metal Body", "[of] " + target); } }, + flags: {}, name: "Full Metal Body", rating: 2, num: 230, @@ -1462,7 +1535,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { onModifyDef(def) { return this.chainModify(2); }, - isBreakable: true, + flags: {breakable: 1}, name: "Fur Coat", rating: 4, num: 169, @@ -1471,6 +1544,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { onModifyPriority(priority, pokemon, target, move) { if (move?.type === 'Flying' && pokemon.hp === pokemon.maxhp) return priority + 1; }, + flags: {}, name: "Gale Wings", rating: 1.5, num: 177, @@ -1491,21 +1565,22 @@ export const Abilities: {[abilityid: string]: AbilityData} = { onBasePower(basePower, pokemon, target, move) { if (move.typeChangerBoosted === this.effect) return this.chainModify([4915, 4096]); }, + flags: {}, name: "Galvanize", rating: 4, num: 206, }, gluttony: { - name: "Gluttony", - rating: 1.5, - num: 82, onStart(pokemon) { pokemon.abilityState.gluttony = true; }, onDamage(item, pokemon) { pokemon.abilityState.gluttony = true; }, - + flags: {}, + name: "Gluttony", + rating: 1.5, + num: 82, }, goodasgold: { onTryHit(target, source, move) { @@ -1514,7 +1589,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { return null; } }, - isBreakable: true, + flags: {breakable: 1}, name: "Good as Gold", rating: 5, num: 283, @@ -1526,6 +1601,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { this.boost({spe: -1}, source, target, null, true); } }, + flags: {}, name: "Gooey", rating: 2, num: 183, @@ -1568,6 +1644,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { onEnd(pokemon) { pokemon.abilityState.choiceLock = ""; }, + flags: {}, name: "Gorilla Tactics", rating: 4.5, num: 255, @@ -1577,7 +1654,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { onModifyDef(pokemon) { if (this.field.isTerrain('grassyterrain')) return this.chainModify(1.5); }, - isBreakable: true, + flags: {breakable: 1}, name: "Grass Pelt", rating: 0.5, num: 179, @@ -1586,6 +1663,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { onStart(source) { this.field.setTerrain('grassyterrain'); }, + flags: {}, name: "Grassy Surge", rating: 4, num: 229, @@ -1596,6 +1674,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { this.boost({spa: length}, source); } }, + flags: {}, name: "Grim Neigh", rating: 3, num: 265, @@ -1612,14 +1691,14 @@ export const Abilities: {[abilityid: string]: AbilityData} = { this.boost({atk: 1}, target, target, null, false, true); } }, - isBreakable: true, + flags: {breakable: 1}, name: "Guard Dog", rating: 2, num: 275, }, gulpmissile: { onDamagingHit(damage, target, source, move) { - if (!source.hp || !source.isActive || target.transformed || target.isSemiInvulnerable()) return; + if (!source.hp || !source.isActive || target.isSemiInvulnerable()) return; if (['cramorantgulping', 'cramorantgorging'].includes(target.species.id)) { this.damage(source.baseMaxhp / 4, source, target); if (target.species.id === 'cramorantgulping') { @@ -1632,15 +1711,12 @@ export const Abilities: {[abilityid: string]: AbilityData} = { }, // The Dive part of this mechanic is implemented in Dive's `onTryMove` in moves.ts onSourceTryPrimaryHit(target, source, effect) { - if ( - effect && effect.id === 'surf' && source.hasAbility('gulpmissile') && - source.species.name === 'Cramorant' && !source.transformed - ) { + if (effect?.id === 'surf' && source.hasAbility('gulpmissile') && source.species.name === 'Cramorant') { const forme = source.hp <= source.maxhp / 2 ? 'cramorantgorging' : 'cramorantgulping'; source.formeChange(forme, effect); } }, - isPermanent: true, + flags: {cantsuppress: 1, notransform: 1}, name: "Gulp Missile", rating: 2.5, num: 241, @@ -1652,6 +1728,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { return this.chainModify(1.5); } }, + flags: {}, name: "Guts", rating: 3.5, num: 62, @@ -1669,12 +1746,12 @@ export const Abilities: {[abilityid: string]: AbilityData} = { return this.chainModify([5461, 4096]); } }, + flags: {}, name: "Hadron Engine", rating: 4.5, num: 289, }, harvest: { - name: "Harvest", onResidualOrder: 28, onResidualSubOrder: 2, onResidual(pokemon) { @@ -1686,11 +1763,12 @@ export const Abilities: {[abilityid: string]: AbilityData} = { } } }, + flags: {}, + name: "Harvest", rating: 2.5, num: 139, }, healer: { - name: "Healer", onResidualOrder: 5, onResidualSubOrder: 3, onResidual(pokemon) { @@ -1701,6 +1779,8 @@ export const Abilities: {[abilityid: string]: AbilityData} = { } } }, + flags: {}, + name: "Healer", rating: 0, num: 131, }, @@ -1724,7 +1804,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { return damage / 2; } }, - isBreakable: true, + flags: {breakable: 1}, name: "Heatproof", rating: 2, num: 85, @@ -1734,12 +1814,13 @@ export const Abilities: {[abilityid: string]: AbilityData} = { onModifyWeight(weighthg) { return weighthg * 2; }, - isBreakable: true, + flags: {breakable: 1}, name: "Heavy Metal", rating: 0, num: 134, }, honeygather: { + flags: {}, name: "Honey Gather", rating: 0, num: 118, @@ -1750,6 +1831,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { this.heal(ally.baseMaxhp / 4, ally, pokemon); } }, + flags: {}, name: "Hospitality", rating: 0, num: 299, @@ -1759,6 +1841,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { onModifyAtk(atk) { return this.chainModify(2); }, + flags: {}, name: "Huge Power", rating: 5, num: 37, @@ -1766,10 +1849,11 @@ export const Abilities: {[abilityid: string]: AbilityData} = { hungerswitch: { onResidualOrder: 29, onResidual(pokemon) { - if (pokemon.species.baseSpecies !== 'Morpeko' || pokemon.transformed || pokemon.terastallized) return; + if (pokemon.species.baseSpecies !== 'Morpeko' || pokemon.terastallized) return; const targetForme = pokemon.species.name === 'Morpeko' ? 'Morpeko-Hangry' : 'Morpeko'; pokemon.formeChange(targetForme); }, + flags: {failroleplay: 1, noreceiver: 1, noentrain: 1, notrace: 1, failskillswap: 1, notransform: 1}, name: "Hunger Switch", rating: 1, num: 258, @@ -1786,6 +1870,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { return this.chainModify([3277, 4096]); } }, + flags: {}, name: "Hustle", rating: 3.5, num: 55, @@ -1800,6 +1885,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { pokemon.cureStatus(); } }, + flags: {}, name: "Hydration", rating: 1.5, num: 93, @@ -1814,7 +1900,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { } } }, - isBreakable: true, + flags: {breakable: 1}, name: "Hyper Cutter", rating: 1.5, num: 52, @@ -1828,14 +1914,14 @@ export const Abilities: {[abilityid: string]: AbilityData} = { onImmunity(type, pokemon) { if (type === 'hail') return false; }, + flags: {}, name: "Ice Body", rating: 1, num: 115, }, iceface: { onStart(pokemon) { - if (this.field.isWeather(['hail', 'snow']) && - pokemon.species.id === 'eiscuenoice' && !pokemon.transformed) { + if (this.field.isWeather(['hail', 'snow']) && pokemon.species.id === 'eiscuenoice') { this.add('-activate', pokemon, 'ability: Ice Face'); this.effectState.busted = false; pokemon.formeChange('Eiscue', this.effect, true); @@ -1843,10 +1929,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { }, onDamagePriority: 1, onDamage(damage, target, source, effect) { - if ( - effect && effect.effectType === 'Move' && effect.category === 'Physical' && - target.species.id === 'eiscue' && !target.transformed - ) { + if (effect?.effectType === 'Move' && effect.category === 'Physical' && target.species.id === 'eiscue') { this.add('-activate', target, 'ability: Ice Face'); this.effectState.busted = true; return 0; @@ -1854,14 +1937,14 @@ export const Abilities: {[abilityid: string]: AbilityData} = { }, onCriticalHit(target, type, move) { if (!target) return; - if (move.category !== 'Physical' || target.species.id !== 'eiscue' || target.transformed) return; + if (move.category !== 'Physical' || target.species.id !== 'eiscue') return; if (target.volatiles['substitute'] && !(move.flags['bypasssub'] || move.infiltrates)) return; if (!target.runImmunity(move.type)) return; return false; }, onEffectiveness(typeMod, target, type, move) { if (!target) return; - if (move.category !== 'Physical' || target.species.id !== 'eiscue' || target.transformed) return; + if (move.category !== 'Physical' || target.species.id !== 'eiscue') return; const hitSub = target.volatiles['substitute'] && !move.flags['bypasssub'] && !(move.infiltrates && this.gen >= 6); if (hitSub) return; @@ -1878,15 +1961,16 @@ export const Abilities: {[abilityid: string]: AbilityData} = { // 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', 'snow']) && - pokemon.species.id === 'eiscuenoice' && !pokemon.transformed) { + if (this.field.isWeather(['hail', 'snow']) && pokemon.species.id === 'eiscuenoice') { this.add('-activate', pokemon, 'ability: Ice Face'); this.effectState.busted = false; pokemon.formeChange('Eiscue', this.effect, true); } }, - isBreakable: true, - isPermanent: true, + flags: { + failroleplay: 1, noreceiver: 1, noentrain: 1, notrace: 1, failskillswap: 1, cantsuppress: 1, + breakable: 1, notransform: 1, + }, name: "Ice Face", rating: 3, num: 248, @@ -1897,7 +1981,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { return this.chainModify(0.5); } }, - isBreakable: true, + flags: {breakable: 1}, name: "Ice Scales", rating: 4, num: 246, @@ -1915,7 +1999,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { onModifyMove(move) { move.ignoreEvasion = true; }, - isBreakable: true, + flags: {breakable: 1}, name: "Illuminate", rating: 0.5, num: 35, @@ -1957,6 +2041,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { onFaint(pokemon) { pokemon.illusion = null; }, + flags: {failroleplay: 1, noreceiver: 1, noentrain: 1, notrace: 1, failskillswap: 1}, name: "Illusion", rating: 4.5, num: 149, @@ -1975,7 +2060,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { } return false; }, - isBreakable: true, + flags: {breakable: 1}, name: "Immunity", rating: 2, num: 17, @@ -1996,6 +2081,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { } this.effectState.switchingIn = false; }, + flags: {failroleplay: 1, noreceiver: 1, noentrain: 1, notrace: 1}, name: "Imposter", rating: 5, num: 150, @@ -2004,18 +2090,20 @@ export const Abilities: {[abilityid: string]: AbilityData} = { onModifyMove(move) { move.infiltrates = true; }, + flags: {}, name: "Infiltrator", rating: 2.5, num: 151, }, innardsout: { - name: "Innards Out", onDamagingHitOrder: 1, onDamagingHit(damage, target, source, move) { if (!target.hp) { this.damage(target.getUndynamaxedHP(damage), source, target); } }, + flags: {}, + name: "Innards Out", rating: 4, num: 215, }, @@ -2029,7 +2117,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { this.add('-fail', target, 'unboost', 'Attack', '[from] ability: Inner Focus', '[of] ' + target); } }, - isBreakable: true, + flags: {breakable: 1}, name: "Inner Focus", rating: 1, num: 39, @@ -2054,7 +2142,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { return null; } }, - isBreakable: true, + flags: {breakable: 1}, name: "Insomnia", rating: 1.5, num: 15, @@ -2074,6 +2162,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { } } }, + flags: {}, name: "Intimidate", rating: 3.5, num: 22, @@ -2084,6 +2173,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { pokemon.swordBoost = true; this.boost({atk: 1}, pokemon); }, + flags: {}, name: "Intrepid Sword", rating: 4, num: 234, @@ -2095,6 +2185,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { this.damage(source.baseMaxhp / 8, source, target); } }, + flags: {}, name: "Iron Barbs", rating: 2.5, num: 160, @@ -2107,6 +2198,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { return this.chainModify([4915, 4096]); } }, + flags: {}, name: "Iron Fist", rating: 3, num: 89, @@ -2117,6 +2209,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { this.boost({atk: 1}); } }, + flags: {}, name: "Justified", rating: 2.5, num: 154, @@ -2134,7 +2227,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { onModifyMove(move) { move.ignoreEvasion = true; }, - isBreakable: true, + flags: {breakable: 1}, name: "Keen Eye", rating: 0.5, num: 51, @@ -2144,6 +2237,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { onStart(pokemon) { this.singleEvent('End', pokemon.getItem(), pokemon.itemState, pokemon); }, + flags: {}, name: "Klutz", rating: -1, num: 103, @@ -2163,14 +2257,14 @@ export const Abilities: {[abilityid: string]: AbilityData} = { return null; } }, - isBreakable: true, + flags: {breakable: 1}, name: "Leaf Guard", rating: 0.5, num: 102, }, levitate: { // airborneness implemented in sim/pokemon.js:Pokemon#isGrounded - isBreakable: true, + flags: {breakable: 1}, name: "Levitate", rating: 3.5, num: 26, @@ -2178,7 +2272,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { libero: { onPrepareHit(source, target, move) { if (this.effectState.libero) return; - if (move.hasBounced || move.flags['futuremove'] || move.sourceEffect === 'snatch') return; + 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; @@ -2189,6 +2283,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { onSwitchIn() { delete this.effectState.libero; }, + flags: {}, name: "Libero", rating: 4, num: 236, @@ -2197,7 +2292,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { onModifyWeight(weighthg) { return this.trunc(weighthg / 2); }, - isBreakable: true, + flags: {breakable: 1}, name: "Light Metal", rating: 1, num: 135, @@ -2222,7 +2317,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { return this.effectState.target; } }, - isBreakable: true, + flags: {breakable: 1}, name: "Lightning Rod", rating: 3, num: 31, @@ -2241,7 +2336,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { } return false; }, - isBreakable: true, + flags: {breakable: 1}, name: "Limber", rating: 2, num: 7, @@ -2249,7 +2344,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { lingeringaroma: { onDamagingHit(damage, target, source, move) { const sourceAbility = source.getAbility(); - if (sourceAbility.isPermanent || sourceAbility.id === 'lingeringaroma') { + if (sourceAbility.flags['cantsuppress'] || sourceAbility.id === 'lingeringaroma') { return; } if (this.checkMoveMakesContact(move, source, target, !source.isAlly(target))) { @@ -2259,6 +2354,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { } } }, + flags: {}, name: "Lingering Aroma", rating: 2, num: 268, @@ -2272,6 +2368,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { return 0; } }, + flags: {}, name: "Liquid Ooze", rating: 2.5, num: 64, @@ -2283,6 +2380,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { move.type = 'Water'; } }, + flags: {}, name: "Liquid Voice", rating: 1.5, num: 204, @@ -2291,12 +2389,12 @@ export const Abilities: {[abilityid: string]: AbilityData} = { onModifyMove(move) { delete move.flags['contact']; }, + flags: {}, name: "Long Reach", rating: 1, num: 203, }, magicbounce: { - name: "Magic Bounce", onTryHitPriority: 1, onTryHit(target, source, move) { if (target === source || move.hasBounced || !move.flags['reflectable']) { @@ -2305,7 +2403,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { const newMove = this.dex.getActiveMove(move.id); newMove.hasBounced = true; newMove.pranksterBoosted = false; - this.actions.useMove(newMove, target, source); + this.actions.useMove(newMove, target, {target: source}); return null; }, onAllyTryHitSide(target, source, move) { @@ -2315,13 +2413,14 @@ export const Abilities: {[abilityid: string]: AbilityData} = { const newMove = this.dex.getActiveMove(move.id); newMove.hasBounced = true; newMove.pranksterBoosted = false; - this.actions.useMove(newMove, this.effectState.target, source); + this.actions.useMove(newMove, this.effectState.target, {target: source}); return null; }, condition: { duration: 1, }, - isBreakable: true, + flags: {breakable: 1}, + name: "Magic Bounce", rating: 4, num: 156, }, @@ -2332,6 +2431,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { return false; } }, + flags: {}, name: "Magic Guard", rating: 4, num: 98, @@ -2350,6 +2450,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { this.add('-item', source, yourItem, '[from] ability: Magician', '[of] ' + target); } }, + flags: {}, name: "Magician", rating: 1, num: 170, @@ -2364,7 +2465,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { onImmunity(type, pokemon) { if (type === 'frz') return false; }, - isBreakable: true, + flags: {breakable: 1}, name: "Magma Armor", rating: 0.5, num: 40, @@ -2382,6 +2483,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { pokemon.maybeTrapped = true; } }, + flags: {}, name: "Magnet Pull", rating: 4, num: 42, @@ -2393,7 +2495,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { return this.chainModify(1.5); } }, - isBreakable: true, + flags: {breakable: 1}, name: "Marvel Scale", rating: 2.5, num: 63, @@ -2405,6 +2507,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { return this.chainModify(1.5); } }, + flags: {}, name: "Mega Launcher", rating: 3, num: 178, @@ -2413,6 +2516,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { onModifyCritRatio(critRatio, source, target) { if (target && ['psn', 'tox'].includes(target.status)) return 5; }, + flags: {}, name: "Merciless", rating: 1.5, num: 196, @@ -2449,6 +2553,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { this.add('-end', pokemon, 'typechange', '[silent]'); } }, + flags: {}, name: "Mimicry", rating: 0, num: 250, @@ -2472,6 +2577,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { move.ignoreImmunity['Normal'] = true; } }, + flags: {breakable: 1}, name: "Mind's Eye", rating: 0, num: 300, @@ -2485,6 +2591,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { } } }, + flags: {}, name: "Minus", rating: 0, num: 58, @@ -2507,7 +2614,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { } } }, - isBreakable: true, + flags: {breakable: 1}, name: "Mirror Armor", rating: 2, num: 240, @@ -2516,6 +2623,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { onStart(source) { this.field.setTerrain('mistyterrain'); }, + flags: {}, name: "Misty Surge", rating: 3.5, num: 228, @@ -2527,6 +2635,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { onModifyMove(move) { move.ignoreAbility = true; }, + flags: {}, name: "Mold Breaker", rating: 3, num: 104, @@ -2560,6 +2669,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { this.boost(boost, pokemon, pokemon); }, + flags: {}, name: "Moody", rating: 5, num: 141, @@ -2573,7 +2683,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { return null; } }, - isBreakable: true, + flags: {breakable: 1}, name: "Motor Drive", rating: 3, num: 78, @@ -2584,6 +2694,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { this.boost({atk: length}, source); } }, + flags: {}, name: "Moxie", rating: 3, num: 153, @@ -2595,23 +2706,22 @@ export const Abilities: {[abilityid: string]: AbilityData} = { return this.chainModify(0.5); } }, - isBreakable: true, + flags: {breakable: 1}, name: "Multiscale", rating: 3.5, num: 136, }, multitype: { // Multitype's type-changing itself is implemented in statuses.js - isPermanent: true, + flags: {failroleplay: 1, noreceiver: 1, noentrain: 1, notrace: 1, failskillswap: 1, cantsuppress: 1}, name: "Multitype", rating: 4, num: 121, }, mummy: { - name: "Mummy", onDamagingHit(damage, target, source, move) { const sourceAbility = source.getAbility(); - if (sourceAbility.isPermanent || sourceAbility.id === 'mummy') { + if (sourceAbility.flags['cantsuppress'] || sourceAbility.id === 'mummy') { return; } if (this.checkMoveMakesContact(move, source, target, !source.isAlly(target))) { @@ -2621,6 +2731,8 @@ export const Abilities: {[abilityid: string]: AbilityData} = { } } }, + flags: {}, + name: "Mummy", rating: 2, num: 152, }, @@ -2636,6 +2748,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { move.ignoreAbility = true; } }, + flags: {}, name: "Mycelium Might", rating: 2, num: 298, @@ -2718,6 +2831,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { // (once you know a Pokemon has Natural Cure, its cures are always known) if (!pokemon.showCure) pokemon.showCure = undefined; }, + flags: {}, name: "Natural Cure", rating: 2.5, num: 30, @@ -2728,6 +2842,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { return this.chainModify([5120, 4096]); } }, + flags: {}, name: "Neuroforce", rating: 2.5, num: 233, @@ -2735,7 +2850,6 @@ export const Abilities: {[abilityid: string]: AbilityData} = { neutralizinggas: { // Ability suppression implemented in sim/pokemon.ts:Pokemon#ignoringAbility onPreStart(pokemon) { - if (pokemon.transformed) return; this.add('-ability', pokemon, 'Neutralizing Gas'); pokemon.abilityState.ending = false; const strongWeathers = ['desolateland', 'primordialsea', 'deltastream']; @@ -2781,7 +2895,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { this.speedSort(sortedActive); for (const pokemon of sortedActive) { if (pokemon !== source) { - if (pokemon.getAbility().isPermanent) continue; // does not interact with e.g Ice Face, Zen Mode + if (pokemon.getAbility().flags['cantsuppress']) continue; // does not interact with e.g Ice Face, Zen Mode if (pokemon.hasItem('abilityshield')) continue; // don't restart abilities that weren't suppressed // Will be suppressed by Pokemon#ignoringAbility if needed @@ -2792,6 +2906,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { } } }, + flags: {failroleplay: 1, noreceiver: 1, noentrain: 1, notrace: 1, failskillswap: 1, notransform: 1}, name: "Neutralizing Gas", rating: 3.5, num: 256, @@ -2807,6 +2922,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { } return accuracy; }, + flags: {}, name: "No Guard", rating: 4, num: 99, @@ -2828,6 +2944,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { onBasePower(basePower, pokemon, target, move) { if (move.typeChangerBoosted === this.effect) return this.chainModify([4915, 4096]); }, + flags: {}, name: "Normalize", rating: 0, num: 96, @@ -2860,7 +2977,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { this.add('-fail', target, 'unboost', 'Attack', '[from] ability: Oblivious', '[of] ' + target); } }, - isBreakable: true, + flags: {breakable: 1}, name: "Oblivious", rating: 1.5, num: 12, @@ -2879,6 +2996,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { if (Object.keys(positiveBoosts).length < 1) return; this.boost(positiveBoosts, pokemon); }, + flags: {}, name: "Opportunist", rating: 3, num: 290, @@ -2898,6 +3016,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { return this.chainModify([5461, 4096]); } }, + flags: {}, name: "Orichalcum Pulse", rating: 4.5, num: 288, @@ -2913,7 +3032,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { return null; } }, - isBreakable: true, + flags: {breakable: 1}, name: "Overcoat", rating: 2, num: 142, @@ -2933,6 +3052,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { return this.chainModify(1.5); } }, + flags: {}, name: "Overgrow", rating: 2, num: 65, @@ -2958,7 +3078,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { this.add('-fail', target, 'unboost', 'Attack', '[from] ability: Own Tempo', '[of] ' + target); } }, - isBreakable: true, + flags: {breakable: 1}, name: "Own Tempo", rating: 1.5, num: 20, @@ -2977,6 +3097,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { return secondaries.filter(effect => effect.volatileStatus === 'flinch'); } }, + flags: {}, name: "Parental Bond", rating: 4.5, num: 185, @@ -3017,7 +3138,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { } return false; }, - isBreakable: true, + flags: {breakable: 1}, name: "Pastel Veil", rating: 2, num: 257, @@ -3036,6 +3157,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { pokemon.addVolatile('perishsong'); } }, + flags: {}, name: "Perish Body", rating: 1, num: 253, @@ -3058,6 +3180,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { this.add('-item', target, yourItem, '[from] ability: Pickpocket', '[of] ' + source); } }, + flags: {}, name: "Pickpocket", rating: 1, num: 124, @@ -3077,6 +3200,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { this.add('-item', pokemon, this.dex.items.get(item), '[from] ability: Pickup'); pokemon.setItem(item); }, + flags: {}, name: "Pickup", rating: 0.5, num: 53, @@ -3097,6 +3221,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { onBasePower(basePower, pokemon, target, move) { if (move.typeChangerBoosted === this.effect) return this.chainModify([4915, 4096]); }, + flags: {}, name: "Pixilate", rating: 4, num: 182, @@ -3110,6 +3235,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { } } }, + flags: {}, name: "Plus", rating: 0, num: 57, @@ -3122,6 +3248,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { return false; } }, + flags: {}, name: "Poison Heal", rating: 4, num: 90, @@ -3134,17 +3261,20 @@ export const Abilities: {[abilityid: string]: AbilityData} = { } } }, + flags: {}, name: "Poison Point", rating: 1.5, num: 38, }, poisonpuppeteer: { onAnyAfterSetStatus(status, target, source, effect) { + if (source.baseSpecies.name !== "Pecharunt") return; if (source !== this.effectState.target || target === source || effect.effectType !== 'Move') return; if (status.id === 'psn' || status.id === 'tox') { target.addVolatile('confusion'); } }, + flags: {failroleplay: 1, noreceiver: 1, noentrain: 1, notrace: 1, failskillswap: 1}, name: "Poison Puppeteer", rating: 3, num: 310, @@ -3159,6 +3289,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { } } }, + flags: {}, name: "Poison Touch", rating: 2, num: 143, @@ -3178,7 +3309,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { pokemon.maxhp = newMaxHP; this.add('-heal', pokemon, pokemon.getHealth, '[silent]'); }, - isPermanent: true, + flags: {failroleplay: 1, noreceiver: 1, noentrain: 1, notrace: 1, failskillswap: 1, cantsuppress: 1}, name: "Power Construct", rating: 5, num: 211, @@ -3187,14 +3318,12 @@ export const Abilities: {[abilityid: string]: AbilityData} = { onAllyFaint(target) { if (!this.effectState.target.hp) return; const ability = target.getAbility(); - const additionalBannedAbilities = [ - 'noability', 'commander', 'flowergift', 'forecast', 'hungerswitch', 'illusion', 'imposter', 'neutralizinggas', 'powerofalchemy', 'receiver', 'trace', 'wonderguard', - ]; - if (target.getAbility().isPermanent || additionalBannedAbilities.includes(target.ability)) return; + if (ability.flags['noreceiver'] || ability.id === 'noability') return; if (this.effectState.target.setAbility(ability)) { this.add('-ability', this.effectState.target, ability, '[from] ability: Power of Alchemy', '[of] ' + target); } }, + flags: {failroleplay: 1, noreceiver: 1, noentrain: 1, notrace: 1}, name: "Power of Alchemy", rating: 0, num: 223, @@ -3207,6 +3336,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { return this.chainModify([5325, 4096]); } }, + flags: {}, name: "Power Spot", rating: 0, num: 249, @@ -3218,6 +3348,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { return priority + 1; } }, + flags: {}, name: "Prankster", rating: 4, num: 158, @@ -3230,6 +3361,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { if (target.isAlly(source)) return; return 1; }, + flags: {}, name: "Pressure", rating: 2.5, num: 46, @@ -3253,6 +3385,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { } this.field.clearWeather(); }, + flags: {}, name: "Primordial Sea", rating: 4.5, num: 189, @@ -3264,6 +3397,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { return this.chainModify(0.75); } }, + flags: {}, name: "Prism Armor", rating: 3, num: 232, @@ -3274,6 +3408,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { // most of the implementation is in Battle#getTarget move.tracksTarget = move.target !== 'scripted'; }, + flags: {}, name: "Propeller Tail", rating: 0, num: 239, @@ -3281,7 +3416,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { protean: { onPrepareHit(source, target, move) { if (this.effectState.protean) return; - if (move.hasBounced || move.flags['futuremove'] || move.sourceEffect === 'snatch') return; + 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; @@ -3292,6 +3427,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { onSwitchIn(pokemon) { delete this.effectState.protean; }, + flags: {}, name: "Protean", rating: 4, num: 168, @@ -3301,11 +3437,11 @@ export const Abilities: {[abilityid: string]: AbilityData} = { this.singleEvent('WeatherChange', this.effect, this.effectState, pokemon); }, onWeatherChange(pokemon) { - if (pokemon.transformed) return; // Protosynthesis is not affected by Utility Umbrella if (this.field.isWeather('sunnyday')) { pokemon.addVolatile('protosynthesis'); - } else if (!pokemon.volatiles['protosynthesis']?.fromBooster) { + } else if (!pokemon.volatiles['protosynthesis']?.fromBooster && this.field.weather !== 'sunnyday') { + // Protosynthesis will not deactivite if Sun is suppressed, hence the direct ID check (isWeather respects supression) pokemon.removeVolatile('protosynthesis'); } }, @@ -3358,6 +3494,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { this.add('-end', pokemon, 'Protosynthesis'); }, }, + flags: {failroleplay: 1, noreceiver: 1, noentrain: 1, notrace: 1, failskillswap: 1, notransform: 1}, name: "Protosynthesis", rating: 3, num: 281, @@ -3366,6 +3503,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { onStart(source) { this.field.setTerrain('psychicterrain'); }, + flags: {}, name: "Psychic Surge", rating: 4, num: 227, @@ -3384,7 +3522,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { return this.chainModify(0.5); } }, - isBreakable: true, + flags: {breakable: 1}, name: "Punk Rock", rating: 3.5, num: 244, @@ -3394,6 +3532,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { onModifyAtk(atk) { return this.chainModify(2); }, + flags: {}, name: "Pure Power", rating: 5, num: 74, @@ -3425,7 +3564,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { return this.chainModify(0.5); } }, - isBreakable: true, + flags: {breakable: 1}, name: "Purifying Salt", rating: 4, num: 272, @@ -3435,7 +3574,6 @@ export const Abilities: {[abilityid: string]: AbilityData} = { this.singleEvent('TerrainChange', this.effect, this.effectState, pokemon); }, onTerrainChange(pokemon) { - if (pokemon.transformed) return; if (this.field.isTerrain('electricterrain')) { pokemon.addVolatile('quarkdrive'); } else if (!pokemon.volatiles['quarkdrive']?.fromBooster) { @@ -3491,6 +3629,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { this.add('-end', pokemon, 'Quark Drive'); }, }, + flags: {failroleplay: 1, noreceiver: 1, noentrain: 1, notrace: 1, failskillswap: 1, notransform: 1}, name: "Quark Drive", rating: 3, num: 282, @@ -3509,7 +3648,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { return false; } }, - isBreakable: true, + flags: {breakable: 1}, name: "Queenly Majesty", rating: 2.5, num: 214, @@ -3522,6 +3661,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { return 0.1; } }, + flags: {}, name: "Quick Draw", rating: 2.5, num: 259, @@ -3532,6 +3672,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { return this.chainModify(1.5); } }, + flags: {}, name: "Quick Feet", rating: 2.5, num: 95, @@ -3543,6 +3684,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { this.heal(target.baseMaxhp / 16); } }, + flags: {}, name: "Rain Dish", rating: 1.5, num: 44, @@ -3554,10 +3696,11 @@ export const Abilities: {[abilityid: string]: AbilityData} = { } }, onAfterBoost(boost, target, source, effect) { - if (effect?.name === 'Intimidate') { + if (effect?.name === 'Intimidate' && boost.atk) { this.boost({spe: 1}); } }, + flags: {}, name: "Rattled", rating: 1, num: 155, @@ -3566,14 +3709,12 @@ export const Abilities: {[abilityid: string]: AbilityData} = { onAllyFaint(target) { if (!this.effectState.target.hp) return; const ability = target.getAbility(); - const additionalBannedAbilities = [ - 'noability', 'commander', 'flowergift', 'forecast', 'hungerswitch', 'illusion', 'imposter', 'neutralizinggas', 'powerofalchemy', 'receiver', 'trace', 'wonderguard', - ]; - if (target.getAbility().isPermanent || additionalBannedAbilities.includes(target.ability)) return; + if (ability.flags['noreceiver'] || ability.id === 'noability') return; if (this.effectState.target.setAbility(ability)) { this.add('-ability', this.effectState.target, ability, '[from] ability: Receiver', '[of] ' + target); } }, + flags: {failroleplay: 1, noreceiver: 1, noentrain: 1, notrace: 1}, name: "Receiver", rating: 0, num: 222, @@ -3586,6 +3727,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { return this.chainModify([4915, 4096]); } }, + flags: {}, name: "Reckless", rating: 3, num: 120, @@ -3606,6 +3748,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { onBasePower(basePower, pokemon, target, move) { if (move.typeChangerBoosted === this.effect) return this.chainModify([4915, 4096]); }, + flags: {}, name: "Refrigerate", rating: 4, num: 174, @@ -3614,6 +3757,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { onSwitchOut(pokemon) { pokemon.heal(pokemon.baseMaxhp / 3); }, + flags: {}, name: "Regenerator", rating: 4.5, num: 144, @@ -3652,6 +3796,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { // Record if the pokemon ate a berry to resist the attack pokemon.abilityState.berryWeaken = weakenBerries.includes(item.name); }, + flags: {}, name: "Ripen", rating: 2, num: 247, @@ -3669,13 +3814,14 @@ export const Abilities: {[abilityid: string]: AbilityData} = { } } }, + flags: {}, name: "Rivalry", rating: 0, num: 79, }, rkssystem: { // RKS System's type-changing itself is implemented in statuses.js - isPermanent: true, + flags: {failroleplay: 1, noreceiver: 1, noentrain: 1, notrace: 1, failskillswap: 1, cantsuppress: 1}, name: "RKS System", rating: 4, num: 225, @@ -3687,6 +3833,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { if (this.activeMove.id !== 'struggle') return null; } }, + flags: {}, name: "Rock Head", rating: 3, num: 69, @@ -3706,6 +3853,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { return this.chainModify(1.5); } }, + flags: {}, name: "Rocky Payload", rating: 3.5, num: 276, @@ -3717,11 +3865,13 @@ export const Abilities: {[abilityid: string]: AbilityData} = { this.damage(source.baseMaxhp / 8, source, target); } }, + flags: {}, name: "Rough Skin", rating: 2.5, num: 24, }, runaway: { + flags: {}, name: "Run Away", rating: 0, num: 50, @@ -3739,6 +3889,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { onImmunity(type, pokemon) { if (type === 'sandstorm') return false; }, + flags: {}, name: "Sand Force", rating: 2, num: 159, @@ -3752,6 +3903,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { onImmunity(type, pokemon) { if (type === 'sandstorm') return false; }, + flags: {}, name: "Sand Rush", rating: 3, num: 146, @@ -3760,6 +3912,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { onDamagingHit(damage, target, source, move) { this.field.setWeather('sandstorm'); }, + flags: {}, name: "Sand Spit", rating: 1, num: 245, @@ -3768,6 +3921,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { onStart(source) { this.field.setWeather('sandstorm'); }, + flags: {}, name: "Sand Stream", rating: 4, num: 45, @@ -3784,7 +3938,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { return this.chainModify([3277, 4096]); } }, - isBreakable: true, + flags: {breakable: 1}, name: "Sand Veil", rating: 1.5, num: 8, @@ -3805,7 +3959,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { this.boost({atk: 1}, this.effectState.target); } }, - isBreakable: true, + flags: {breakable: 1}, name: "Sap Sipper", rating: 3, num: 157, @@ -3839,7 +3993,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { } } }, - isPermanent: true, + flags: {failroleplay: 1, noreceiver: 1, noentrain: 1, notrace: 1, failskillswap: 1, cantsuppress: 1}, name: "Schooling", rating: 3, num: 208, @@ -3859,6 +4013,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { this.add('-fail', target, 'unboost', 'Attack', '[from] ability: Scrappy', '[of] ' + target); } }, + flags: {}, name: "Scrappy", rating: 3, num: 113, @@ -3878,6 +4033,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { } } }, + flags: {}, name: "Screen Cleaner", rating: 2, num: 251, @@ -3886,6 +4042,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { onDamagingHit(damage, target, source, move) { this.field.setTerrain('grassyterrain'); }, + flags: {}, name: "Seed Sower", rating: 2.5, num: 269, @@ -3901,6 +4058,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { } if (move.self?.chance) move.self.chance *= 2; }, + flags: {}, name: "Serene Grace", rating: 3.5, num: 32, @@ -3912,6 +4070,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { return this.chainModify(0.5); } }, + flags: {}, name: "Shadow Shield", rating: 3.5, num: 231, @@ -3929,6 +4088,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { pokemon.maybeTrapped = true; } }, + flags: {}, name: "Shadow Tag", rating: 5, num: 23, @@ -3937,10 +4097,11 @@ export const Abilities: {[abilityid: string]: AbilityData} = { onBasePowerPriority: 19, onBasePower(basePower, attacker, defender, move) { if (move.flags['slicing']) { - this.debug('Shapness boost'); + this.debug('Sharpness boost'); return this.chainModify(1.5); } }, + flags: {}, name: "Sharpness", rating: 3.5, num: 292, @@ -3955,6 +4116,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { pokemon.cureStatus(); } }, + flags: {}, name: "Shed Skin", rating: 3, num: 61, @@ -3974,13 +4136,14 @@ export const Abilities: {[abilityid: string]: AbilityData} = { onBasePower(basePower, pokemon, target, move) { if (move.hasSheerForce) return this.chainModify([5325, 4096]); }, + flags: {}, name: "Sheer Force", rating: 3.5, num: 125, }, shellarmor: { onCriticalHit: false, - isBreakable: true, + flags: {breakable: 1}, name: "Shell Armor", rating: 1, num: 75, @@ -3990,7 +4153,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { this.debug('Shield Dust prevent secondary'); return secondaries.filter(effect => !!(effect.self || effect.dustproof)); }, - isBreakable: true, + flags: {breakable: 1}, name: "Shield Dust", rating: 2, num: 19, @@ -4034,7 +4197,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { this.add('-immune', target, '[from] ability: Shields Down'); return null; }, - isPermanent: true, + flags: {failroleplay: 1, noreceiver: 1, noentrain: 1, notrace: 1, failskillswap: 1, cantsuppress: 1}, name: "Shields Down", rating: 3, num: 197, @@ -4047,7 +4210,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { boost[i]! *= 2; } }, - isBreakable: true, + flags: {breakable: 1}, name: "Simple", rating: 4, num: 86, @@ -4061,6 +4224,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { delete move.multiaccuracy; } }, + flags: {}, name: "Skill Link", rating: 3, num: 92, @@ -4080,6 +4244,11 @@ export const Abilities: {[abilityid: string]: AbilityData} = { onStart(target) { this.add('-start', target, 'ability: Slow Start'); }, + onResidual(pokemon) { + if (!pokemon.activeTurns) { + this.effectState.duration += 1; + } + }, onModifyAtkPriority: 5, onModifyAtk(atk, pokemon) { return this.chainModify(0.5); @@ -4091,6 +4260,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { this.add('-end', target, 'Slow Start'); }, }, + flags: {}, name: "Slow Start", rating: -1, num: 112, @@ -4101,6 +4271,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { return this.chainModify(2); } }, + flags: {}, name: "Slush Rush", rating: 3, num: 202, @@ -4112,6 +4283,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { return this.chainModify(1.5); } }, + flags: {}, name: "Sniper", rating: 2, num: 97, @@ -4128,7 +4300,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { return this.chainModify([3277, 4096]); } }, - isBreakable: true, + flags: {breakable: 1}, name: "Snow Cloak", rating: 1.5, num: 81, @@ -4137,6 +4309,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { onStart(source) { this.field.setWeather('snow'); }, + flags: {}, name: "Snow Warning", rating: 4, num: 117, @@ -4154,6 +4327,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { this.damage(target.baseMaxhp / 8, target, target); } }, + flags: {}, name: "Solar Power", rating: 2, num: 94, @@ -4165,7 +4339,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { return this.chainModify(0.75); } }, - isBreakable: true, + flags: {breakable: 1}, name: "Solid Rock", rating: 3, num: 116, @@ -4175,6 +4349,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { onAnyFaint() { this.boost({spa: 1}, this.effectState.target); }, + flags: {}, name: "Soul-Heart", rating: 3.5, num: 220, @@ -4191,7 +4366,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { this.add('-immune', this.effectState.target, '[from] ability: Soundproof'); } }, - isBreakable: true, + flags: {breakable: 1}, name: "Soundproof", rating: 2, num: 43, @@ -4204,6 +4379,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { this.boost({spe: 1}); } }, + flags: {}, name: "Speed Boost", rating: 4.5, num: 3, @@ -4223,12 +4399,14 @@ export const Abilities: {[abilityid: string]: AbilityData} = { return this.chainModify(2); } }, + flags: {}, name: "Stakeout", rating: 4.5, num: 198, }, stall: { onFractionalPriority: -0.1, + flags: {}, name: "Stall", rating: -1, num: 100, @@ -4239,6 +4417,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { // most of the implementation is in Battle#getTarget move.tracksTarget = move.target !== 'scripted'; }, + flags: {}, name: "Stalwart", rating: 0, num: 242, @@ -4247,6 +4426,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { onDamagingHit(damage, target, source, effect) { this.boost({def: 1}); }, + flags: {}, name: "Stamina", rating: 4, num: 192, @@ -4259,7 +4439,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { const targetForme = (move.id === 'kingsshield' ? 'Aegislash' : 'Aegislash-Blade'); if (attacker.species.name !== targetForme) attacker.formeChange(targetForme); }, - isPermanent: true, + flags: {failroleplay: 1, noreceiver: 1, noentrain: 1, notrace: 1, failskillswap: 1, cantsuppress: 1}, name: "Stance Change", rating: 4, num: 176, @@ -4272,6 +4452,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { } } }, + flags: {}, name: "Static", rating: 2, num: 9, @@ -4280,6 +4461,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { onFlinch(pokemon) { this.boost({spe: 1}); }, + flags: {}, name: "Steadfast", rating: 1, num: 80, @@ -4290,6 +4472,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { this.boost({spe: 6}); } }, + flags: {}, name: "Steam Engine", rating: 2, num: 243, @@ -4309,6 +4492,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { return this.chainModify(1.5); } }, + flags: {}, name: "Steelworker", rating: 3.5, num: 200, @@ -4321,6 +4505,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { return this.chainModify(1.5); } }, + flags: {}, name: "Steely Spirit", rating: 3.5, num: 252, @@ -4340,6 +4525,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { }); } }, + flags: {}, name: "Stench", rating: 0.5, num: 1, @@ -4353,7 +4539,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { return false; } }, - isBreakable: true, + flags: {breakable: 1}, name: "Sticky Hold", rating: 1.5, num: 60, @@ -4378,7 +4564,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { return this.effectState.target; } }, - isBreakable: true, + flags: {breakable: 1}, name: "Storm Drain", rating: 3, num: 114, @@ -4390,6 +4576,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { return this.chainModify(1.5); } }, + flags: {}, name: "Strong Jaw", rating: 3.5, num: 173, @@ -4408,7 +4595,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { return target.hp - 1; } }, - isBreakable: true, + flags: {breakable: 1}, name: "Sturdy", rating: 3, num: 5, @@ -4419,7 +4606,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { this.add('-activate', pokemon, 'ability: Suction Cups'); return null; }, - isBreakable: true, + flags: {breakable: 1}, name: "Suction Cups", rating: 1, num: 21, @@ -4428,6 +4615,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { onModifyCritRatio(critRatio) { return critRatio + 1; }, + flags: {}, name: "Super Luck", rating: 1.5, num: 105, @@ -4437,12 +4625,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { if (pokemon.syrupTriggered) return; pokemon.syrupTriggered = true; this.add('-ability', pokemon, 'Supersweet Syrup'); - let activated = false; for (const target of pokemon.adjacentFoes()) { - if (!activated) { - this.add('-ability', pokemon, 'Supersweet Syrup', 'boost'); - activated = true; - } if (target.volatiles['substitute']) { this.add('-immune', target); } else { @@ -4450,6 +4633,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { } } }, + flags: {}, name: "Supersweet Syrup", rating: 1.5, num: 306, @@ -4474,6 +4658,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { return this.chainModify([powMod[this.effectState.fallen], 4096]); } }, + flags: {}, name: "Supreme Overlord", rating: 4, num: 293, @@ -4484,6 +4669,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { return this.chainModify(2); } }, + flags: {}, name: "Surge Surfer", rating: 3, num: 207, @@ -4503,12 +4689,12 @@ export const Abilities: {[abilityid: string]: AbilityData} = { return this.chainModify(1.5); } }, + flags: {}, name: "Swarm", rating: 2, num: 68, }, sweetveil: { - name: "Sweet Veil", onAllySetStatus(status, target, source, effect) { if (status.id === 'slp') { this.debug('Sweet Veil interrupts sleep'); @@ -4525,7 +4711,8 @@ export const Abilities: {[abilityid: string]: AbilityData} = { return null; } }, - isBreakable: true, + flags: {breakable: 1}, + name: "Sweet Veil", rating: 2, num: 175, }, @@ -4535,6 +4722,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { return this.chainModify(2); } }, + flags: {}, name: "Swift Swim", rating: 3, num: 33, @@ -4554,6 +4742,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { } this.add('-activate', source, 'ability: Symbiosis', myItem, '[of] ' + pokemon); }, + flags: {}, name: "Symbiosis", rating: 0, num: 180, @@ -4568,6 +4757,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { // and show messages when activating against it. source.trySetStatus(status, target, {status: status.id, id: 'synchronize'} as Effect); }, + flags: {}, name: "Synchronize", rating: 2, num: 28, @@ -4585,6 +4775,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { this.debug('Sword of Ruin Def drop'); return this.chainModify(0.75); }, + flags: {}, name: "Sword of Ruin", rating: 4.5, num: 285, @@ -4602,6 +4793,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { this.debug('Tablets of Ruin Atk drop'); return this.chainModify(0.75); }, + flags: {}, name: "Tablets of Ruin", rating: 4.5, num: 284, @@ -4615,7 +4807,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { return this.chainModify(0.5); } }, - isBreakable: true, + flags: {breakable: 1}, name: "Tangled Feet", rating: 1, num: 77, @@ -4627,6 +4819,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { this.boost({spe: -1}, source, target, null, true); } }, + flags: {}, name: "Tangling Hair", rating: 2, num: 221, @@ -4641,6 +4834,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { return this.chainModify(1.5); } }, + flags: {}, name: "Technician", rating: 3.5, num: 101, @@ -4652,28 +4846,30 @@ export const Abilities: {[abilityid: string]: AbilityData} = { return null; } }, - isBreakable: true, + flags: {breakable: 1}, name: "Telepathy", rating: 0, num: 140, }, teraformzero: { onAfterTerastallization(pokemon) { + if (pokemon.baseSpecies.name !== 'Terapagos-Stellar') return; if (this.field.weather || this.field.terrain) { this.add('-ability', pokemon, 'Teraform Zero'); this.field.clearWeather(); this.field.clearTerrain(); } }, + flags: {failroleplay: 1, noreceiver: 1, noentrain: 1, notrace: 1, failskillswap: 1}, name: "Teraform Zero", rating: 3, num: 309, }, terashell: { - // TODO figure out if this only works on Terapagos onEffectiveness(typeMod, target, type, move) { + if (!target || target.species.name !== 'Terapagos-Terastal') return; if (this.effectState.resisted) return -1; // all hits of multi-hit move should be not very effective - if (!target || move.category === 'Status') return; + if (move.category === 'Status' || move.id === 'struggle') return; if (!target.runImmunity(move.type)) return; // immunity has priority if (target.hp < target.maxhp) return; @@ -4684,20 +4880,27 @@ export const Abilities: {[abilityid: string]: AbilityData} = { onAnyAfterMove() { this.effectState.resisted = false; }, - isBreakable: true, + flags: {failroleplay: 1, noreceiver: 1, noentrain: 1, notrace: 1, failskillswap: 1, breakable: 1}, name: "Tera Shell", rating: 3.5, num: 308, }, terashift: { onPreStart(pokemon) { - if (pokemon.baseSpecies.baseSpecies !== 'Terapagos' || pokemon.transformed) return; + if (pokemon.baseSpecies.baseSpecies !== 'Terapagos') return; if (pokemon.species.forme !== 'Terastal') { this.add('-activate', pokemon, 'ability: Tera Shift'); pokemon.formeChange('Terapagos-Terastal', this.effect, true); + pokemon.baseMaxhp = Math.floor(Math.floor( + 2 * pokemon.species.baseStats['hp'] + pokemon.set.ivs['hp'] + Math.floor(pokemon.set.evs['hp'] / 4) + 100 + ) * pokemon.level / 100 + 10); + const newMaxHP = pokemon.baseMaxhp; + pokemon.hp = newMaxHP - (pokemon.maxhp - pokemon.hp); + pokemon.maxhp = newMaxHP; + this.add('-heal', pokemon, pokemon.getHealth, '[silent]'); } }, - isPermanent: true, + flags: {failroleplay: 1, noreceiver: 1, noentrain: 1, notrace: 1, failskillswap: 1, cantsuppress: 1, notransform: 1}, name: "Tera Shift", rating: 3, num: 307, @@ -4709,6 +4912,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { onModifyMove(move) { move.ignoreAbility = true; }, + flags: {}, name: "Teravolt", rating: 3, num: 164, @@ -4732,6 +4936,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { } return false; }, + flags: {breakable: 1}, name: "Thermal Exchange", rating: 2.5, num: 270, @@ -4751,7 +4956,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { return this.chainModify(0.5); } }, - isBreakable: true, + flags: {breakable: 1}, name: "Thick Fat", rating: 3.5, num: 47, @@ -4763,6 +4968,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { return this.chainModify(2); } }, + flags: {}, name: "Tinted Lens", rating: 4, num: 110, @@ -4782,6 +4988,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { return this.chainModify(1.5); } }, + flags: {}, name: "Torrent", rating: 2, num: 67, @@ -4793,6 +5000,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { return this.chainModify([5325, 4096]); } }, + flags: {}, name: "Tough Claws", rating: 3.5, num: 181, @@ -4804,6 +5012,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { return this.chainModify(1.5); } }, + flags: {}, name: "Toxic Boost", rating: 3, num: 137, @@ -4817,6 +5026,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { target.trySetStatus('tox', source); } }, + flags: {}, name: "Toxic Chain", rating: 4.5, num: 305, @@ -4830,6 +5040,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { side.addSideCondition('toxicspikes', target); } }, + flags: {}, name: "Toxic Debris", rating: 3.5, num: 295, @@ -4850,13 +5061,9 @@ export const Abilities: {[abilityid: string]: AbilityData} = { onUpdate(pokemon) { if (!pokemon.isStarted || this.effectState.gaveUp) return; - const additionalBannedAbilities = [ - // Zen Mode included here for compatability with Gen 5-6 - 'noability', 'commander', 'flowergift', 'forecast', 'hungerswitch', 'illusion', 'imposter', 'neutralizinggas', 'powerofalchemy', 'receiver', 'trace', 'zenmode', - ]; - const possibleTargets = pokemon.adjacentFoes().filter(target => ( - !target.getAbility().isPermanent && !additionalBannedAbilities.includes(target.ability) - )); + const possibleTargets = pokemon.adjacentFoes().filter( + target => !target.getAbility().flags['notrace'] && target.ability !== 'noability' + ); if (!possibleTargets.length) return; const target = this.sample(possibleTargets); @@ -4865,6 +5072,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { this.add('-ability', pokemon, ability, '[from] ability: Trace', '[of] ' + target); } }, + flags: {failroleplay: 1, noreceiver: 1, noentrain: 1, notrace: 1}, name: "Trace", rating: 2.5, num: 36, @@ -4884,6 +5092,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { return this.chainModify([5325, 4096]); } }, + flags: {}, name: "Transistor", rating: 3.5, num: 262, @@ -4892,6 +5101,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { onModifyPriority(priority, pokemon, target, move) { if (move?.flags['heal']) return priority + 3; }, + flags: {}, name: "Triage", rating: 3.5, num: 205, @@ -4912,6 +5122,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { pokemon.addVolatile('truant'); }, condition: {}, + flags: {}, name: "Truant", rating: -1, num: 54, @@ -4923,12 +5134,12 @@ export const Abilities: {[abilityid: string]: AbilityData} = { onModifyMove(move) { move.ignoreAbility = true; }, + flags: {}, name: "Turboblaze", rating: 3, num: 163, }, unaware: { - name: "Unaware", onAnyModifyBoost(boosts, pokemon) { const unawareUser = this.effectState.target; if (unawareUser === pokemon) return; @@ -4944,7 +5155,8 @@ export const Abilities: {[abilityid: string]: AbilityData} = { boosts['accuracy'] = 0; } }, - isBreakable: true, + flags: {breakable: 1}, + name: "Unaware", rating: 4, num: 109, }, @@ -4966,6 +5178,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { } }, }, + flags: {}, name: "Unburden", rating: 3.5, num: 84, @@ -4986,6 +5199,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { onFoeTryEatItem() { return !this.effectState.unnerved; }, + flags: {}, name: "Unnerve", rating: 1, num: 127, @@ -4994,6 +5208,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { onModifyMove(move) { if (move.flags['contact']) delete move.flags['protect']; }, + flags: {}, name: "Unseen Fist", rating: 2, num: 260, @@ -5011,6 +5226,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { this.debug('Vessel of Ruin SpA drop'); return this.chainModify(0.75); }, + flags: {}, name: "Vessel of Ruin", rating: 4.5, num: 284, @@ -5022,6 +5238,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { return this.chainModify([4506, 4096]); } }, + flags: {}, name: "Victory Star", rating: 2, num: 162, @@ -5046,7 +5263,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { return null; } }, - isBreakable: true, + flags: {breakable: 1}, name: "Vital Spirit", rating: 1.5, num: 72, @@ -5060,19 +5277,14 @@ export const Abilities: {[abilityid: string]: AbilityData} = { return null; } }, - isBreakable: true, + flags: {breakable: 1}, name: "Volt Absorb", rating: 3.5, num: 10, }, wanderingspirit: { onDamagingHit(damage, target, source, move) { - const additionalBannedAbilities = ['commander', 'hungerswitch', 'illusion', 'neutralizinggas', 'wonderguard']; - if (source.getAbility().isPermanent || additionalBannedAbilities.includes(source.ability) || - target.volatiles['dynamax'] - ) { - return; - } + if (source.getAbility().flags['failskillswap'] || target.volatiles['dynamax']) return; if (this.checkMoveMakesContact(move, source, target)) { const targetCanBeSet = this.runEvent('SetAbility', target, source, this.effect, source.ability); @@ -5087,6 +5299,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { target.setAbility(sourceAbility); } }, + flags: {}, name: "Wandering Spirit", rating: 2.5, num: 254, @@ -5100,7 +5313,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { return null; } }, - isBreakable: true, + flags: {breakable: 1}, name: "Water Absorb", rating: 3.5, num: 11, @@ -5141,7 +5354,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { } return false; }, - isBreakable: true, + flags: {breakable: 1}, name: "Water Bubble", rating: 4.5, num: 199, @@ -5152,6 +5365,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { this.boost({def: 2}); } }, + flags: {}, name: "Water Compaction", rating: 1.5, num: 195, @@ -5170,7 +5384,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { } return false; }, - isBreakable: true, + flags: {breakable: 1}, name: "Water Veil", rating: 2, num: 41, @@ -5181,6 +5395,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { this.boost({def: -1, spe: 2}, target, target); } }, + flags: {}, name: "Weak Armor", rating: 1, num: 133, @@ -5194,7 +5409,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { return null; } }, - isBreakable: true, + flags: {breakable: 1}, name: "Well-Baked Body", rating: 3.5, num: 273, @@ -5214,7 +5429,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { this.add("-fail", target, "unboost", "[from] ability: White Smoke", "[of] " + target); } }, - isBreakable: true, + flags: {breakable: 1}, name: "White Smoke", rating: 2, num: 73, @@ -5230,6 +5445,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { target.switchFlag = true; this.add('-activate', target, 'ability: Wimp Out'); }, + flags: {}, name: "Wimp Out", rating: 1, num: 193, @@ -5247,6 +5463,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { pokemon.addVolatile('charge'); } }, + flags: {}, name: "Wind Power", rating: 1, num: 277, @@ -5271,7 +5488,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { this.boost({atk: 1}, pokemon, pokemon); } }, - isBreakable: true, + flags: {breakable: 1}, name: "Wind Rider", rating: 3.5, // We do not want Brambleghast to get Infiltrator in Randbats @@ -5291,7 +5508,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { return null; } }, - isBreakable: true, + flags: {failroleplay: 1, noreceiver: 1, noentrain: 1, failskillswap: 1, breakable: 1}, name: "Wonder Guard", rating: 5, num: 25, @@ -5304,7 +5521,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { return 50; } }, - isBreakable: true, + flags: {breakable: 1}, name: "Wonder Skin", rating: 2, num: 147, @@ -5344,14 +5561,14 @@ export const Abilities: {[abilityid: string]: AbilityData} = { } }, }, - isPermanent: true, + flags: {failroleplay: 1, noreceiver: 1, noentrain: 1, notrace: 1, failskillswap: 1, cantsuppress: 1}, name: "Zen Mode", rating: 0, num: 161, }, zerotohero: { onSwitchOut(pokemon) { - if (pokemon.baseSpecies.baseSpecies !== 'Palafin' || pokemon.transformed) return; + if (pokemon.baseSpecies.baseSpecies !== 'Palafin') return; if (pokemon.species.forme !== 'Hero') { pokemon.formeChange('Palafin-Hero', this.effect, true); } @@ -5362,13 +5579,13 @@ export const Abilities: {[abilityid: string]: AbilityData} = { onStart(pokemon) { if (!this.effectState.switchingIn) return; this.effectState.switchingIn = false; - if (pokemon.baseSpecies.baseSpecies !== 'Palafin' || pokemon.transformed) return; + if (pokemon.baseSpecies.baseSpecies !== 'Palafin') return; if (!this.effectState.heroMessageDisplayed && pokemon.species.forme === 'Hero') { this.add('-activate', pokemon, 'ability: Zero to Hero'); this.effectState.heroMessageDisplayed = true; } }, - isPermanent: true, + flags: {failroleplay: 1, noreceiver: 1, noentrain: 1, notrace: 1, failskillswap: 1, cantsuppress: 1, notransform: 1}, name: "Zero to Hero", rating: 5, num: 278, @@ -5388,14 +5605,13 @@ export const Abilities: {[abilityid: string]: AbilityData} = { } }, isNonstandard: "CAP", - isBreakable: true, + flags: {breakable: 1}, name: "Mountaineer", rating: 3, num: -2, }, rebound: { isNonstandard: "CAP", - name: "Rebound", onTryHitPriority: 1, onTryHit(target, source, move) { if (this.effectState.target.activeTurns) return; @@ -5405,7 +5621,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = { } const newMove = this.dex.getActiveMove(move.id); newMove.hasBounced = true; - this.actions.useMove(newMove, target, source); + this.actions.useMove(newMove, target, {target: source}); return null; }, onAllyTryHitSide(target, source, move) { @@ -5416,20 +5632,22 @@ export const Abilities: {[abilityid: string]: AbilityData} = { } const newMove = this.dex.getActiveMove(move.id); newMove.hasBounced = true; - this.actions.useMove(newMove, this.effectState.target, source); + this.actions.useMove(newMove, this.effectState.target, {target: source}); return null; }, condition: { duration: 1, }, - isBreakable: true, + flags: {breakable: 1}, + name: "Rebound", rating: 3, num: -3, }, persistent: { isNonstandard: "CAP", - name: "Persistent", // implemented in the corresponding move + flags: {}, + name: "Persistent", rating: 3, num: -4, }, diff --git a/data/aliases.ts b/data/aliases.ts index c6432395acc4..203117b2d674 100644 --- a/data/aliases.ts +++ b/data/aliases.ts @@ -1,4 +1,4 @@ -export const Aliases: {[alias: string]: string} = { +export const Aliases: import('../sim/dex').AliasesTable = { // formats randbats: "[Gen 9] Random Battle", uber: "[Gen 9] Ubers", @@ -46,6 +46,7 @@ export const Aliases: {[alias: string]: string} = { bh: "[Gen 9] Balanced Hackmons", mnm: "[Gen 9] Mix and Mega", aaa: "[Gen 9] Almost Any Ability", + aaauu: "[Gen 9] Almost Any Ability UU", stab: "[Gen 9] STABmons", gg: "[Gen 9] Godly Gift", pic: "[Gen 9] Partners in Crime", @@ -60,18 +61,22 @@ export const Aliases: {[alias: string]: string} = { gen6hackmons: "[Gen 6] Pure Hackmons", cc1v1: "[Gen 9] Challenge Cup 1v1", cc2v2: "[Gen 9] Challenge Cup 2v2", + cgt: "[Gen 9] Computer-Generated Teams", + compgen: "[Gen 9] Computer-Generated Teams", hc: "[Gen 9] Hackmons Cup", monorandom: "[Gen 8] Monotype Random Battle", - bf: "[Gen 7] Battle Factory", - bssf: "[Gen 8] BSS Factory", - ssb: "[Gen 8] Super Staff Bros 4", - ssb4: "[Gen 8] Super Staff Bros 4", + bf: "[Gen 8] Battle Factory", + bssf: "[Gen 9] BSS Factory", + ssb: "[Gen 9] Super Staff Bros Ultimate", + ssbu: "[Gen 9] Super Staff Bros Ultimate", lgrandom: "[Gen 7] Let's Go Random Battle", gen6bf: "[Gen 6] Battle Factory", gen7mono: "[Gen 7] Monotype", gen7ag: "[Gen 7] Anything Goes", + gen7bf: "[Gen 7] Battle Factory", gen7bss: "[Gen 7] Battle Spot Singles", gen7bssf: "[Gen 7] BSS Factory", + gen8bssf: "[Gen 8] BSS Factory", lgpeou: "[Gen 7 Let's Go] OU", lgou: "[Gen 7 Let's Go] Let's Go OU", lgdou: "[Gen 7 Let's Go] Doubles OU", @@ -85,8 +90,8 @@ export const Aliases: {[alias: string]: string} = { gen6ag: "[Gen 6] Anything Goes", crossevo: "[Gen 9] Cross Evolution", mayhem: "[Gen 9] Random Battle Mayhem", - omotm: "[Gen 9] Tier Shift", - lcotm: "[Gen 9] Sketchmons", + omotm: "[Gen 9] Passive Aggressive", + lcotm: "[Gen 9] Almost Any Ability UU", // mega evos fabio: "Ampharos-Mega", @@ -108,6 +113,8 @@ export const Aliases: {[alias: string]: string} = { megamewtwo: "Mewtwo-Mega-Y", megamewtwox: "Mewtwo-Mega-X", megamewtwoy: "Mewtwo-Mega-Y", + mewtwox: "Mewtwo-Mega-X", + mewtwoy: "Mewtwo-Mega-Y", megasnow: "Abomasnow-Mega", megashark: "Sharpedo-Mega", megasaur: "Venusaur-Mega", @@ -170,9 +177,13 @@ export const Aliases: {[alias: string]: string} = { arcrock: "Arceus-Rock", arcsteel: "Arceus-Steel", arcwater: "Arceus-Water", + basculegionm: "Basculegion", basculinb: "Basculin-Blue-Striped", basculinblue: "Basculin-Blue-Striped", basculinbluestripe: "Basculin-Blue-Striped", + basculinw: "Basculin-White-Striped", + basculinwhite: "Basculin-White-Striped", + basculinwhitestripe: "Basculin-White-Striped", castformh: "Castform-Snowy", castformice: "Castform-Snowy", castformr: "Castform-Rainy", @@ -219,10 +230,12 @@ export const Aliases: {[alias: string]: string} = { rotomc: "Rotom-Mow", rotomcut: "Rotom-Mow", rotomf: "Rotom-Frost", + fridge: "Rotom-Frost", rotomh: "Rotom-Heat", rotoms: "Rotom-Fan", rotomspin: "Rotom-Fan", rotomw: "Rotom-Wash", + wash: "Rotom-Wash", shaymins: "Shaymin-Sky", skymin: "Shaymin-Sky", thundurust: "Thundurus-Therian", @@ -263,9 +276,19 @@ export const Aliases: {[alias: string]: string} = { oricoriopsychic: "Oricorio-Pa'u", lycanrocmidday: "Lycanroc", lycanrocday: "Lycanroc", + lycanm: "Lycanroc-Midnight", lycanrocn: "Lycanroc-Midnight", lycanrocnight: "Lycanroc-Midnight", + lycand: "Lycanroc-Dusk", lycanrocd: "Lycanroc-Dusk", + alomuk: "Muk-Alola", + alowak: "Marowak-Alola", + snowslash: "Sandslash-Alola", + alotales: "Ninetales-Alola", + alolatales: "Ninetales-Alola", + alolem: "Golem-Alola", + neckboy: "Exeggutor-Alola", + alosian: "Persian-Alola", ndm: "Necrozma-Dusk-Mane", ndw: "Necrozma-Dawn-Wings", necrozmadm: "Necrozma-Dusk-Mane", @@ -283,18 +306,79 @@ export const Aliases: {[alias: string]: string} = { ufopsychic: "Pokestar UFO-2", goon: "Obstagoon", rime: "Mr. Rime", + gweez: "Weezing-Galar", + gorse: "Rapidash-Galar", + galardash: "Rapidash-Galar", + nddf: "Indeedee-F", zacianc: "Zacian-Crowned", + zacianh: "Zacian", + zacianhero: "Zacian", zamazentac: "Zamazenta-Crowned", + zamazentah: "Zamazenta", + zamazentahero: "Zamazenta", + glowbro: "Slowbro-Galar", + gbro: "Slowbro-Galar", + glowking: "Slowking-Galar", + gking: "Slowking-Galar", + gapdos: "Zapdos-Galar", + goltres: "Moltres-Galar", + gmolt: "Moltres-Galar", urshifuss: "Urshifu", urshifusingle: "Urshifu", urshifusinglestrike: "Urshifu", urshifurs: "Urshifu-Rapid-Strike", urshifurapid: "Urshifu-Rapid-Strike", + calyrexicerider: "Calyrex-Ice", calyrexir: "Calyrex-Ice", + calyi: "Calyrex-Ice", + calyice: "Calyrex-Ice", + calyrexshadowrider: "Calyrex-Shadow", calyrexsr: "Calyrex-Shadow", + calys: "Calyrex-Shadow", + calyshadow: "Calyrex-Shadow", taurospaldea: "Tauros-Paldea-Combat", taurospaldeafire: "Tauros-Paldea-Blaze", taurospaldeawater: "Tauros-Paldea-Aqua", + redbull: "Tauros-Paldea-Blaze", + wetbull: "Tauros-Paldea-Aqua", + ham: "Samurott-Hisui", + hamurott: "Samurott-Hisui", + decidh: "Decidueye-Hisui", + typhh: "Typhlosion-Hisui", + hqwil: "Qwilfish-Hisui", + hlil: "Lilligant-Hisui", + hisuigant: "Lilligant-Hisui", + hoodra: "Goodra-Hisui", + hzoro: "Zoroark-Hisui", + harc: "Arcanine-Hisui", + palkiao: "Palkia-Origin", + horsepalkia: "Palkia-Origin", + dialgao: "Dialga-Origin", + enamorust: "Enamorus-Therian", + enamt: "Enamorus-Therian", + squawkabillyb: "Squawkabilly-Blue", + squawkabillyw: "Squawkabilly-White", + squawkabillyy: "Squawkabilly-Yellow", + ursalunab: "Ursaluna-Bloodmoon", + woger: "Ogerpon-Wellspring", + cornerpon: "Ogerpon-Cornerstone", + waterpon: "Ogerpon-Wellspring", + rockpon: "Ogerpon-Cornerstone", + firepon: "Ogerpon-Hearthflame", + ogerw: "Ogerpon-Wellspring", + ogerc: "Ogerpon-Cornerstone", + ogerh: "Ogerpon-Hearthflame", + ogerponw: "Ogerpon-Wellspring", + ogerponc: "Ogerpon-Cornerstone", + ogerponh: "Ogerpon-Hearthflame", + ogerponwater: "Ogerpon-Wellspring", + ogerponrock: "Ogerpon-Cornerstone", + ogerponfire: "Ogerpon-Hearthflame", + ogerponwellspringmask: "Ogerpon-Wellspring", + ogerponcornerstonemask: "Ogerpon-Cornerstone", + ogerponhearthflamemask: "Ogerpon-Hearthflame", + terapagoss: "Terapagos-Stellar", + terapagost: "Terapagos-Terastal", // base formes nidoranfemale: "Nidoran-F", @@ -348,6 +432,29 @@ export const Aliases: {[alias: string]: string} = { ufof: "Pokestar UFO", ufoflying: "Pokestar UFO", vivillonmeadow: "Vivillon", + xerneasactive: "Xerneas", + indeedeem: "Indeedee", + polteageistphony: "Polteageist", + rockruffmidday: "Rockruff", + sinisteaphony: "Sinistea", + dudunsparcetwosegment: "Dudunsparce", + enamorusi: "Enamorus", + enamorusincarnate: "Enamorus", + enamorusincarnation: "Enamorus", + gimmighoulchest: "Gimmighoul", + mausholdthree: "Maushold", + oinkolognem: "Oinkologne", + palafinzero: "Palafin", + poltchageistcounterfeit: "Poltchageist", + sinistchaunremarkable: "Sinistcha", + squawkabillygreen: "Squawkabilly", + squawkabillyg: "Squawkabilly", + tealpon: "Ogerpon", + grasspon: "Ogerpon", + ogerpont: "Ogerpon", + ogerponteal: "Ogerpon", + ogerpontealmask: "Ogerpon", + terapagosbaby: "Terapagos", // event formes rockruffdusk: "Rockruff", @@ -380,7 +487,48 @@ export const Aliases: {[alias: string]: string} = { kommoot: "Kommo-o-Totem", totemkommoo: "Kommo-o-Totem", + // Paradox Pokemon + grusk: "Great Tusk", + gtusk: "Great Tusk", + tusk: "Great Tusk", + stail: "Scream Tail", + flutter: "Flutter Mane", + fmane: "Flutter Mane", + slither: "Slither Wing", + swing: "Slither Wing", + sandy: "Sandy Shocks", + shocks: "Sandy Shocks", + bonnet: "Brute Bonnet", + rmoon: "Roaring Moon", + moon: "Roaring Moon", + wake: "Walking Wake", + ww: "Walking Wake", + bolt: "Raging Bolt", + greatneck: "Raging Bolt", + neck: "Raging Bolt", + raging: "Raging Bolt", + gfire: "Gouging Fire", + goug: "Gouging Fire", + gouging: "Gouging Fire", + treads: "Iron Treads", + moth: "Iron Moth", + hands: "Iron Hands", + thorns: "Iron Thorns", + jug: "Iron Jugulis", + jugulis: "Iron Jugulis", + bundle: "Iron Bundle", + bundlechan: "Iron Bundle", + val: "Iron Valiant", + ival: "Iron Valiant", + valiant: "Iron Valiant", + ileaves: "Iron Leaves", + leaves: "Iron Leaves", + boulder: "Iron Boulder", + crown: "Iron Crown", + icrown: "Iron Crown", + // cosmetic formes + alcremievanillacream: "Alcremie", alcremierubycream: "Alcremie", alcremiematchacream: "Alcremie", alcremiemintcream: "Alcremie", @@ -463,6 +611,7 @@ export const Aliases: {[alias: string]: string} = { miniorblue: "Minior", miniorindigo: "Minior", miniorviolet: "Minior", + unowna: "Unown", unownb: "Unown", unownc: "Unown", unownd: "Unown", @@ -490,6 +639,7 @@ export const Aliases: {[alias: string]: string} = { unownz: "Unown", unownexclamation: "Unown", unownquestion: "Unown", + tatsugiricurly: "Tatsugiri", tatsugiridroopy: "Tatsugiri", tatsugiristretchy: "Tatsugiri", @@ -520,10 +670,10 @@ export const Aliases: {[alias: string]: string} = { pokestarpropw1: "Pokestar Black Door", pokestarwhitedoorprop: "Pokestar White Door", pokestarpropw2: "Pokestar White Door", - pokestarf00prop: "Pokestar F00", - pokestarpropr1: "Pokestar F00", - pokestarf002prop: "Pokestar F002", - pokestarpropr2: "Pokestar F002", + pokestarf00prop: "Pokestar F-00", + pokestarpropr1: "Pokestar F-00", + pokestarf002prop: "Pokestar F-002", + pokestarpropr2: "Pokestar F-002", pokestarblackbeltprop: "Pokestar Black Belt", pokestarpropk1: "Pokestar Black Belt", giant2: "Pokestar Giant", @@ -562,18 +712,29 @@ export const Aliases: {[alias: string]: string} = { propk1: "Pokestar Black Belt", // abilities + emorph: "Electromorphosis", + hadron: "Hadron Engine", + intim: "Intimidate", + mg: "Magic Guard", ngas: "Neutralizing Gas", pheal: "Poison Heal", + proto: "Protosynthesis", regen: "Regenerator", + sf: "Sheer Force", + so: "Supreme Overlord", stag: "Shadow Tag", // items + amulet: "Clear Amulet", assvest: "Assault Vest", av: "Assault Vest", balloon: "Air Balloon", band: "Choice Band", + booster: "Booster Energy", boots: "Heavy-Duty Boots", cb: "Choice Band", + cloak: "Covert Cloak", + dice: "Loaded Dice", ebelt: "Expert Belt", fightgem: "Fighting Gem", flightgem: "Flying Gem", @@ -583,6 +744,7 @@ export const Aliases: {[alias: string]: string} = { lefties: "Leftovers", lo: "Life Orb", lorb: "Life Orb", + nmi: "Never-Melt Ice", sash: "Focus Sash", scarf: "Choice Scarf", specs: "Choice Specs", @@ -691,115 +853,178 @@ export const Aliases: {[alias: string]: string} = { // pokemon aboma: "Abomasnow", + ace: "Cinderace", aegi: "Aegislash", aegiblade: "Aegislash-Blade", aegis: "Aegislash", aero: "Aerodactyl", + alo: "Alomomola", + amoon: "Amoonguss", amph: "Ampharos", + araq: "Araquanid", arc: "Arceus", arceusnormal: "Arceus", + arch: "Archaludon", ashgren: "Greninja-Ash", azu: "Azumarill", + bax: "Baxcalibur", bdrill: "Beedrill", bee: "Beedrill", + belli: "Bellibolt", bigsharp: "Kingambit", + billy: "Squawkabilly", birdjesus: "Pidgeot", bish: "Bisharp", blace: "Blacephalon", bliss: "Blissey", + bomb: "Bombirdier", + bramble: "Brambleghast", bull: "Tauros", bulu: "Tapu Bulu", - bundlechan: "Iron Bundle", camel: "Camerupt", cathy: "Trevenant", chandy: "Chandelure", chomp: "Garchomp", + cind: "Cinderace", clanger: "Kommo-o", clef: "Clefable", + clod: "Clodsire", + cloy: "Cloyster", coba: "Cobalion", cofag: "Cofagrigus", conk: "Conkeldurr", + copper: "Copperajah", + corv: "Corviknight", cress: "Cresselia", + croak: "Toxicroak", cruel: "Tentacruel", cube: "Kyurem-Black", cune: "Suicune", + cuno: "Articuno", darm: "Darmanitan", + dirge: "Skeledirge", dnite: "Dragonite", dogars: "Koffing", don: "Groudon", + doom: "Houndoom", + dozo: "Dondozo", drill: "Excadrill", driller: "Excadrill", + dudun: "Dudunsparce", dug: "Dugtrio", duggy: "Dugtrio", ekiller: "Arceus", + empo: "Empoleon", + enam: "Enamorus", esca: "Escavalier", ferro: "Ferrothorn", + fez: "Fezandipiti", fini: "Tapu Fini", + florg: "Florges", forry: "Forretress", fug: "Rayquaza", + galv: "Galvantula", + gambit: "Kingambit", gar: "Gengar", garde: "Gardevoir", + garg: "Garganacl", + gastro: "Gastrodon", gatr: "Feraligatr", gene: "Genesect", + ghold: "Gholdengo", gira: "Giratina", + glimm: "Glimmora", + glisc: "Gliscor", gren: "Greninja", gross: "Metagross", gyara: "Gyarados", + hatt: "Hatterene", hera: "Heracross", hippo: "Hippowdon", honch: "Honchkrow", + honse: "Spectrier", + incin: "Incineroar", + intel: "Inteleon", kanga: "Kangaskhan", karp: "Magikarp", kart: "Kartana", keld: "Keldeo", + keys: "Klefki", + kix: "Lokix", klef: "Klefki", koko: "Tapu Koko", + kommo: "Kommo-o", kou: "Raikou", krook: "Krookodile", + kyu: "Kyurem", kyub: "Kyurem-Black", kyuw: "Kyurem-White", lando: "Landorus", landoi: "Landorus", landot: "Landorus-Therian", + legion: "Basculegion", + legionf: "Basculegion-F", lego: "Nihilego", lele: "Tapu Lele", linda: "Fletchinder", + luc: "Lucario", luke: "Lucario", lurk: "Golurk", + lycan: "Lycanroc", m2: "Mewtwo", mage: "Magearna", mamo: "Mamoswine", mandi: "Mandibuzz", + maus: "Maushold", mence: "Salamence", + meow: "Meowscarada", milo: "Milotic", + mmq: "Mimikyu", + mola: "Alomomola", + molt: "Moltres", morfentshusbando: "Gengar", + munki: "Munkidori", naga: "Naganadel", nape: "Infernape", + ndd: "Indeedee", nebby: "Cosmog", - neckboy: "Exeggutor-Alola", nidok: "Nidoking", nidoq: "Nidoqueen", obama: "Abomasnow", + oger: "Ogerpon", ogre: "Kyogre", - ohmagod: "Plasmanta", p2: "Porygon2", + pao: "Chien-Pao", pato: "Psyduck", + peli: "Pelipper", pert: "Swampert", pex: "Toxapex", phero: "Pheromosa", pika: "Pikachu", + pikablu: "Marill", + plume: "Vileplume", pory2: "Porygon2", poryz: "Porygon-Z", + prim: "Primarina", + pult: "Dragapult", pyuku: "Pyukumuku", pz: "Porygon-Z", + quag: "Quagsire", + quaq: "Quaquaval", queen: "Nidoqueen", rachi: "Jirachi", + rai: "Darkrai", + raj: "Copperajah", rank: "Reuniclus", ray: "Rayquaza", reuni: "Reuniclus", + rhyp: "Rhyperior", + ribo: "Ribombee", + rilla: "Rillaboom", sab: "Sableye", sable: "Sableye", scept: "Sceptile", + sciz: "Scizor", scoli: "Scolipede", seejong: "Sealeo", serp: "Serperior", @@ -808,28 +1033,41 @@ export const Aliases: {[alias: string]: string} = { smogon: "Koffing", smogonbird: "Talonflame", snips: "Drapion", + squawk: "Squawkabilly", staka: "Stakataka", steela: "Celesteela", sui: "Suicune", swole: "Buzzwole", + sylv: "Sylveon", talon: "Talonflame", tang: "Tangrowth", + tent: "Tentacruel", terra: "Terrakion", tflame: "Talonflame", thundy: "Thundurus", + ting: "Ting-Lu", toed: "Politoed", + tomb: "Spiritomb", torn: "Tornadus", tran: "Heatran", + tsar: "Tsareena", ttar: "Tyranitar", + typh: "Typhlosion", venu: "Venusaur", viriz: "Virizion", watershifu: "Urshifu-Rapid-Strike", + weav: "Weavile", whimsi: "Whimsicott", + worm: "Orthworm", xern: "Xerneas", xurk: "Xurkitree", ygod: "Yveltal", + zac: "Zacian", + zaci: "Zacian", zam: "Alakazam", + zama: "Zamazenta", zard: "Charizard", + zone: "Magnezone", zong: "Bronzong", zor: "Scizor", zyg: "Zygarde", @@ -850,19 +1088,28 @@ export const Aliases: {[alias: string]: string} = { bb: "Brave Bird", bd: "Belly Drum", bde: "Baby-Doll Eyes", + blades: "Precipice Blades", bpass: "Baton Pass", + bpress: "Body Press", bp: "Baton Pass", + cane: "Hurricane", cc: "Close Combat", cm: "Calm Mind", dbond: "Destiny Bond", dd: "Dragon Dance", + dib: "Double Iron Bash", dv: "Dark Void", + dw: "Dual Wingbeat", + dwb: "Dual Wingbeat", + edge: "Stone Edge", eq: "Earthquake", espeed: "ExtremeSpeed", eterrain: "Electric Terrain", faintattack: "Feint Attack", + glance: "Glacial Lance", glowpunch: "Power-up Punch", gterrain: "Grassy Terrain", + hhp: "High Horsepower", hp: "Hidden Power", hpbug: "Hidden Power Bug", hpdark: "Hidden Power Dark", @@ -882,10 +1129,18 @@ export const Aliases: {[alias: string]: string} = { hpwater: "Hidden Power Water", hjk: "High Jump Kick", hijumpkick: "High Jump Kick", + knock: "Knock Off", + lr: "Last Respects", + mir: "Make It Rain", mterrain: "Misty Terrain", np: "Nasty Plot", + pblades: "Precipice Blades", pfists: "Plasma Fists", playaround: "Play Rough", + polter: "Poltergeist", + popbomb: "Population Bomb", + press: "Body Press", + psynoise: "Psychic Noise", pterrain: "Psychic Terrain", pup: "Power-up Punch", qd: "Quiver Dance", @@ -897,13 +1152,18 @@ export const Aliases: {[alias: string]: string} = { sr: "Stealth Rock", ssa: "Shell Side Arm", sub: "Substitute", + tarrows: "Thousand Arrows", + taxel: "Triple Axel", tr: "Trick Room", troom: "Trick Room", tbolt: "Thunderbolt", tspikes: "Toxic Spikes", twave: "Thunder Wave", + twaves: "Thousand Waves", vicegrip: "Vise Grip", web: "Sticky Web", + webs: "Sticky Web", + wisp: "Will-O-Wisp", wow: "Will-O-Wisp", // z-moves @@ -1857,4 +2117,40 @@ export const Aliases: {[alias: string]: string} = { zugadoon: "Blacephalon", merutan: "Meltan", merumetaru: "Melmetal", + + // CAP + arg: "Arghonaut", + astro: "Astrolotl", + auru: "Aurumoth", + cari: "Caribolt", + cawm: "Cawmodore", + colo: "Colossoil", + chrom: "Chromera", + chugg: "Chuggalong", + clohm: "Cyclohm", + cruci: "Crucibelle", + ebook: "Venomicon-Epilogue", + hemo: "Hemogoblin", + kerf: "Kerfluffle", + kit: "Kitsunoh", + krilo: "Krilowatt", + libra: "Equilibra", + mala: "Malaconda", + maw: "Miasmaw", + megacruci: "Crucibelle-Mega", + navi: "Naviathan", + nect: "Necturna", + ohmagod: "Plasmanta", + plas: "Plasmanta", + raja: "Saharaja", + rev: "Revenankh", + roak: "pyroak", + smoko: "Smokomodo", + snael: "Snaelstrom", + strata: "Stratagem", + train: "Chuggalong", + venomicone: "Venomicon-Epilogue", + venomiconp: "Venomicon", + venomiconprologue: "Venomicon", + volk: "Volkraken", }; diff --git a/data/cg-team-data.ts b/data/cg-team-data.ts index 08b0d929d7bc..c3d80c03167b 100644 --- a/data/cg-team-data.ts +++ b/data/cg-team-data.ts @@ -1,17 +1,17 @@ // Data for computer-generated teams -export const MOVE_PAIRINGS: {[moveID: string]: string} = { +export const MOVE_PAIRINGS: {[moveID: IDEntry]: IDEntry} = { rest: 'sleeptalk', sleeptalk: 'rest', }; // Bonuses to move ratings by ability -export const ABILITY_MOVE_BONUSES: {[abilityID: string]: {[moveID: string]: number}} = { +export const ABILITY_MOVE_BONUSES: {[abilityID: IDEntry]: {[moveID: IDEntry]: number}} = { drought: {sunnyday: 0.2, solarbeam: 2}, contrary: {terablast: 2}, }; // Bonuses to move ratings by move type -export const ABILITY_MOVE_TYPE_BONUSES: {[abilityID: string]: {[typeID: string]: number}} = { +export const ABILITY_MOVE_TYPE_BONUSES: {[abilityID: IDEntry]: {[typeName: string]: number}} = { darkaura: {Dark: 1.33}, dragonsmaw: {Dragon: 1.5}, fairyaura: {Fairy: 1.33}, @@ -31,7 +31,7 @@ export const ABILITY_MOVE_TYPE_BONUSES: {[abilityID: string]: {[typeID: string]: }; // For moves whose quality isn't obvious from data // USE SPARINGLY! -export const HARDCODED_MOVE_WEIGHTS: {[moveID: string]: number} = { +export const HARDCODED_MOVE_WEIGHTS: {[moveID: IDEntry]: number} = { // Fails unless user is asleep snore: 0, // Hard to use diff --git a/data/cg-teams.ts b/data/cg-teams.ts index b07b7f24e52c..430d3dec2a09 100644 --- a/data/cg-teams.ts +++ b/data/cg-teams.ts @@ -157,7 +157,7 @@ export default class TeamGenerator { } protected makeSet(species: Species, teamStats: TeamStats): PokemonSet { - const abilityPool = Object.values(species.abilities); + const abilityPool: string[] = Object.values(species.abilities); const abilityWeights = abilityPool.map(a => this.getAbilityWeight(this.dex.abilities.get(a))); const ability = this.weightedRandomPick(abilityPool, abilityWeights); const level = this.forceLevel || TeamGenerator.getLevel(species); @@ -173,7 +173,7 @@ export default class TeamGenerator { nonStatusMoves: 0, }; - let movePool: string[] = [...this.dex.species.getMovePool(species.id)]; + let movePool: IDEntry[] = [...this.dex.species.getMovePool(species.id)]; if (!movePool.length) throw new Error(`No moves for ${species.id}`); // Consider either the top 15 moves or top 30% of moves, whichever is greater. @@ -190,7 +190,7 @@ export default class TeamGenerator { // this is just a second reference the array because movePool gets set to point to a new array before the old one // gets mutated const movePoolCopy = movePool; - let interimMovePool: {move: string, weight: number}[] = []; + let interimMovePool: {move: IDEntry, weight: number}[] = []; while (moves.length < 4 && movePool.length) { let weights; if (!movePoolIsTrimmed) { @@ -356,8 +356,8 @@ export default class TeamGenerator { let types = nonStatusMoves.map(m => TeamGenerator.moveType(this.dex.moves.get(m), species)); const noStellar = ability === 'Adaptability' || new Set(types).size < 3; if (hasTeraBlast || hasRevelationDance || !nonStatusMoves.length) { - types = [...this.dex.types.all().map(t => t.name)]; - if (noStellar) types.splice(types.indexOf('Stellar'), 1); + types = [...this.dex.types.names()]; + if (noStellar) types.splice(types.indexOf('Stellar')); } else { if (!noStellar) types.push('Stellar'); } @@ -386,23 +386,23 @@ export default class TeamGenerator { */ protected speciesIsGoodFit(species: Species, stats: TeamStats): boolean { // type check - for (const type of this.dex.types.all()) { - const effectiveness = this.dex.getEffectiveness(type.name, species.types); - if (effectiveness >= 1) { // WEAKNESS! - if (stats.typeWeaknesses[type.name] === undefined) { - stats.typeWeaknesses[type.name] = 0; + for (const typeName of this.dex.types.names()) { + const effectiveness = this.dex.getEffectiveness(typeName, species.types); + if (effectiveness === 1) { // WEAKNESS! + if (stats.typeWeaknesses[typeName] === undefined) { + stats.typeWeaknesses[typeName] = 0; } - if (stats.typeWeaknesses[type.name] >= MAX_WEAK_TO_SAME_TYPE) { + if (stats.typeWeaknesses[typeName] >= MAX_WEAK_TO_SAME_TYPE) { // too many weaknesses to this type return false; } } } // species passes; increment counters - for (const type of this.dex.types.all()) { - const effectiveness = this.dex.getEffectiveness(type.name, species.types); - if (effectiveness >= 1) { - stats.typeWeaknesses[type.name]++; + for (const typeName of this.dex.types.names()) { + const effectiveness = this.dex.getEffectiveness(typeName, species.types); + if (effectiveness === 1) { + stats.typeWeaknesses[typeName]++; } } return true; @@ -619,8 +619,8 @@ export default class TeamGenerator { if (move.category === 'Special') powerEstimate *= Math.max(0.5, 1 + specialSetup) / Math.max(0.5, 1 + physicalSetup); const abilityBonus = ( - ((ABILITY_MOVE_BONUSES[ability] || {})[move.id] || 1) * - ((ABILITY_MOVE_TYPE_BONUSES[ability] || {})[moveType] || 1) + ((ABILITY_MOVE_BONUSES[this.dex.toID(ability)] || {})[move.id] || 1) * + ((ABILITY_MOVE_TYPE_BONUSES[this.dex.toID(ability)] || {})[moveType] || 1) ); let weight = powerEstimate * abilityBonus; diff --git a/data/conditions.ts b/data/conditions.ts index 4a1bf24bfbb2..06d8e6eeca43 100644 --- a/data/conditions.ts +++ b/data/conditions.ts @@ -1,4 +1,4 @@ -export const Conditions: {[k: string]: ConditionData} = { +export const Conditions: import('../sim/dex-conditions').ConditionDataTable = { brn: { name: 'brn', effectType: 'Status', @@ -27,6 +27,7 @@ export const Conditions: {[k: string]: ConditionData} = { this.add('-status', target, 'par'); } }, + onModifySpePriority: -101, onModifySpe(spe, pokemon) { // Paralysis occurs after all other Speed modifiers, so evaluate all modifiers up to this point first spe = this.finalModify(spe); @@ -394,9 +395,6 @@ export const Conditions: {[k: string]: ConditionData} = { if (data.source.hasAbility('normalize') && this.gen >= 6) { data.moveData.type = 'Normal'; } - if (data.source.hasAbility('adaptability') && this.gen >= 6) { - data.moveData.stab = 2; - } const hitMove = new this.dex.Move(data.moveData) as ActiveMove; this.actions.trySpreadMoveHit([target], data.source, hitMove, true); @@ -823,11 +821,9 @@ export const Conditions: {[k: string]: ConditionData} = { onTrapPokemon(pokemon) { pokemon.trapped = true; }, - // Override No Guard - onInvulnerabilityPriority: 2, - onInvulnerability(target, source, move) { - return false; - }, + // Dodging moves is handled in BattleActions#hitStepInvulnerabilityEvent + // This is here for moves that manually call this event like Perish Song + onInvulnerability: false, onBeforeTurn(pokemon) { this.queue.cancelAction(pokemon); }, diff --git a/data/formats-data.ts b/data/formats-data.ts index 4ff1a80a2180..c492585349b2 100644 --- a/data/formats-data.ts +++ b/data/formats-data.ts @@ -1,4 +1,4 @@ -export const FormatsData: {[k: string]: SpeciesFormatsData} = { +export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable = { bulbasaur: { tier: "LC", }, @@ -6,8 +6,8 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { tier: "NFE", }, venusaur: { - tier: "OU", - doublesTier: "DOU", + tier: "PU", + doublesTier: "(DUU)", natDexTier: "RU", }, venusaurmega: { @@ -26,7 +26,7 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { tier: "NFE", }, charizard: { - tier: "PU", + tier: "ZU", doublesTier: "(DUU)", natDexTier: "RU", }, @@ -51,8 +51,8 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { tier: "NFE", }, blastoise: { - tier: "OU", - doublesTier: "DOU", + tier: "RUBL", + doublesTier: "(DUU)", natDexTier: "RU", }, blastoisemega: { @@ -250,12 +250,12 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { natDexTier: "RU", }, raichu: { - tier: "ZUBL", - doublesTier: "(DUU)", + tier: "ZU", + doublesTier: "DUU", natDexTier: "RU", }, raichualola: { - tier: "PU", + tier: "ZU", doublesTier: "(DUU)", natDexTier: "RU", }, @@ -266,12 +266,12 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { tier: "LC", }, sandslash: { - tier: "NU", + tier: "ZU", doublesTier: "(DUU)", natDexTier: "RU", }, sandslashalola: { - tier: "NU", + tier: "PU", doublesTier: "(DUU)", natDexTier: "RU", }, @@ -320,19 +320,21 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { }, vulpix: { tier: "NFE", + doublesTier: "NFE", + natDexTier: "LC", }, vulpixalola: { tier: "NFE", }, ninetales: { - tier: "NU", + tier: "ZU", doublesTier: "DUU", natDexTier: "RU", }, ninetalesalola: { - tier: "UU", + tier: "RU", doublesTier: "DOU", - natDexTier: "UU", + natDexTier: "RU", }, igglybuff: { tier: "LC", @@ -367,13 +369,13 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { tier: "NFE", }, vileplume: { - tier: "OU", - doublesTier: "DOU", + tier: "NU", + doublesTier: "(DUU)", natDexTier: "RU", }, bellossom: { - tier: "OU", - doublesTier: "DOU", + tier: "ZU", + doublesTier: "(DUU)", natDexTier: "RU", }, paras: { @@ -390,7 +392,7 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { tier: "LC", }, venomoth: { - tier: "NU", + tier: "ZU", doublesTier: "(DUU)", natDexTier: "RU", }, @@ -406,7 +408,7 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { natDexTier: "RU", }, dugtrioalola: { - tier: "PU", + tier: "ZU", doublesTier: "(DUU)", natDexTier: "RU", }, @@ -429,12 +431,12 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { natDexTier: "RU", }, persianalola: { - tier: "PU", + tier: "ZU", doublesTier: "(DUU)", natDexTier: "RU", }, perrserker: { - tier: "ZUBL", + tier: "ZU", doublesTier: "(DUU)", natDexTier: "RU", }, @@ -450,7 +452,7 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { tier: "LC", }, primeape: { - tier: "PUBL", + tier: "ZU", doublesTier: "NFE", natDexTier: "NFE", }, @@ -461,13 +463,13 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { tier: "LC", }, arcanine: { - tier: "NU", + tier: "PU", doublesTier: "DUU", natDexTier: "RU", }, arcaninehisui: { tier: "UU", - doublesTier: "DOU", + doublesTier: "DUU", natDexTier: "RU", }, poliwag: { @@ -477,7 +479,7 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { tier: "NFE", }, poliwrath: { - tier: "PU", + tier: "ZU", doublesTier: "(DUU)", natDexTier: "RU", }, @@ -499,7 +501,7 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { alakazam: { isNonstandard: "Past", tier: "Illegal", - natDexTier: "RUBL", + natDexTier: "UU", }, alakazammega: { isNonstandard: "Past", @@ -540,8 +542,8 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { tier: "LC", }, tentacruel: { - tier: "OU", - doublesTier: "DOU", + tier: "NU", + doublesTier: "(DUU)", natDexTier: "RU", }, geodude: { @@ -557,12 +559,12 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { tier: "NFE", }, golem: { - tier: "PU", + tier: "ZU", doublesTier: "(DUU)", natDexTier: "RU", }, golemalola: { - tier: "PU", + tier: "ZU", doublesTier: "(DUU)", natDexTier: "RU", }, @@ -603,7 +605,7 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { natDexTier: "RU", }, slowbrogalar: { - tier: "NUBL", + tier: "NU", doublesTier: "(DUU)", natDexTier: "RU", }, @@ -621,14 +623,14 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { tier: "LC", }, magneton: { - tier: "PUBL", + tier: "ZU", doublesTier: "NFE", natDexTier: "NFE", }, magnezone: { tier: "RU", doublesTier: "(DUU)", - natDexTier: "RU", + natDexTier: "UU", }, farfetchd: { isNonstandard: "Past", @@ -649,16 +651,16 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { tier: "LC", }, dodrio: { - tier: "OU", - doublesTier: "DOU", + tier: "ZU", + doublesTier: "(DUU)", natDexTier: "RU", }, seel: { tier: "LC", }, dewgong: { - tier: "OU", - doublesTier: "DOU", + tier: "ZU", + doublesTier: "(DUU)", natDexTier: "RU", }, grimer: { @@ -668,12 +670,12 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { tier: "LC", }, muk: { - tier: "PU", + tier: "ZU", doublesTier: "(DUU)", natDexTier: "RU", }, mukalola: { - tier: "RU", + tier: "NU", doublesTier: "(DUU)", natDexTier: "RU", }, @@ -681,20 +683,18 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { tier: "LC", }, cloyster: { - tier: "RU", + tier: "NUBL", doublesTier: "(DUU)", natDexTier: "RU", }, gastly: { - tier: "LC", + tier: "NFE", }, haunter: { - tier: "PU", - doublesTier: "NFE", - natDexTier: "NFE", + tier: "NFE", }, gengar: { - tier: "UU", + tier: "RU", doublesTier: "(DUU)", natDexTier: "RUBL", }, @@ -748,15 +748,17 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { tier: "LC", }, voltorbhisui: { - tier: "LC", + tier: "NFE", + doublesTier: "LC", + natDexTier: "LC", }, electrode: { - tier: "ZUBL", + tier: "ZU", doublesTier: "(DUU)", natDexTier: "RU", }, electrodehisui: { - tier: "NU", + tier: "ZUBL", doublesTier: "(DUU)", natDexTier: "RU", }, @@ -764,13 +766,13 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { tier: "LC", }, exeggutor: { - tier: "OU", - doublesTier: "DOU", + tier: "ZU", + doublesTier: "(DUU)", natDexTier: "RU", }, exeggutoralola: { - tier: "OU", - doublesTier: "DOU", + tier: "ZU", + doublesTier: "(DUU)", natDexTier: "RU", }, cubone: { @@ -796,18 +798,18 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { tier: "LC", }, hitmonlee: { - tier: "OU", - doublesTier: "DOU", + tier: "ZU", + doublesTier: "(DUU)", natDexTier: "RU", }, hitmonchan: { - tier: "OU", - doublesTier: "DOU", + tier: "ZU", + doublesTier: "(DUU)", natDexTier: "RU", }, hitmontop: { - tier: "OU", - doublesTier: "DOU", + tier: "PU", + doublesTier: "(DUU)", natDexTier: "RU", }, lickitung: { @@ -824,12 +826,12 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { tier: "LC", }, weezing: { - tier: "PU", + tier: "ZU", doublesTier: "(DUU)", natDexTier: "RU", }, weezinggalar: { - tier: "UU", + tier: "RU", doublesTier: "(DUU)", natDexTier: "RU", }, @@ -837,32 +839,30 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { tier: "LC", }, rhydon: { - tier: "ZUBL", - doublesTier: "NFE", - natDexTier: "NFE", + tier: "NFE", }, rhyperior: { - tier: "OU", - doublesTier: "DOU", + tier: "UU", + doublesTier: "(DUU)", natDexTier: "RU", }, happiny: { tier: "LC", }, chansey: { - tier: "NU", + tier: "RU", doublesTier: "NFE", natDexTier: "UU", }, blissey: { - tier: "OU", + tier: "UU", doublesTier: "(DUU)", natDexTier: "RU", }, tangela: { isNonstandard: "Past", tier: "Illegal", - natDexTier: "LC", + natDexTier: "NFE", }, tangrowth: { isNonstandard: "Past", @@ -886,8 +886,8 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { tier: "NFE", }, kingdra: { - tier: "OU", - doublesTier: "DOU", + tier: "ZUBL", + doublesTier: "(DUU)", natDexTier: "RU", }, goldeen: { @@ -931,14 +931,14 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { natDexTier: "RU", }, scyther: { - tier: "NU", + tier: "PU", doublesTier: "NFE", natDexTier: "NFE", }, scizor: { tier: "UU", doublesTier: "DUU", - natDexTier: "RU", + natDexTier: "UU", }, scizormega: { isNonstandard: "Past", @@ -946,8 +946,8 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { natDexTier: "OU", }, kleavor: { - tier: "UU", - doublesTier: "DOU", + tier: "RU", + doublesTier: "(DUU)", natDexTier: "UU", }, smoochum: { @@ -967,8 +967,8 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { tier: "NFE", }, electivire: { - tier: "OU", - doublesTier: "DOU", + tier: "ZU", + doublesTier: "(DUU)", natDexTier: "RU", }, magby: { @@ -978,8 +978,8 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { tier: "NFE", }, magmortar: { - tier: "OU", - doublesTier: "DOU", + tier: "ZU", + doublesTier: "(DUU)", natDexTier: "RU", }, pinsir: { @@ -993,17 +993,17 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { natDexTier: "UUBL", }, tauros: { - tier: "ZUBL", + tier: "ZU", doublesTier: "(DUU)", natDexTier: "RU", }, taurospaldeacombat: { - tier: "PU", + tier: "ZU", doublesTier: "(DUU)", natDexTier: "RU", }, taurospaldeablaze: { - tier: "NU", + tier: "PU", doublesTier: "(DUU)", natDexTier: "RU", }, @@ -1016,18 +1016,18 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { tier: "LC", }, gyarados: { - tier: "RUBL", + tier: "NUBL", doublesTier: "DUU", natDexTier: "UUBL", }, gyaradosmega: { isNonstandard: "Past", tier: "Illegal", - natDexTier: "OU", + natDexTier: "UUBL", }, lapras: { - tier: "OU", - doublesTier: "DOU", + tier: "ZU", + doublesTier: "(DUU)", natDexTier: "RU", }, laprasgmax: { @@ -1051,12 +1051,12 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { tier: "Illegal", }, vaporeon: { - tier: "RU", + tier: "NU", doublesTier: "(DUU)", natDexTier: "RU", }, jolteon: { - tier: "NU", + tier: "ZU", doublesTier: "(DUU)", natDexTier: "RU", }, @@ -1066,12 +1066,12 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { natDexTier: "RU", }, espeon: { - tier: "RU", + tier: "NU", doublesTier: "(DUU)", natDexTier: "RU", }, umbreon: { - tier: "NU", + tier: "RU", doublesTier: "(DUU)", natDexTier: "RU", }, @@ -1087,20 +1087,20 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { }, sylveon: { tier: "NU", - doublesTier: "DUU", + doublesTier: "(DUU)", natDexTier: "RU", }, porygon: { - tier: "LC", + tier: "NFE", }, porygon2: { - tier: "ZUBL", - doublesTier: "NFE", + tier: "NFE", + doublesTier: "DUU", natDexTier: "NFE", }, porygonz: { - tier: "OU", - doublesTier: "DOU", + tier: "NU", + doublesTier: "(DUU)", natDexTier: "RUBL", }, omanyte: { @@ -1137,7 +1137,7 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { tier: "LC", }, snorlax: { - tier: "NU", + tier: "ZU", doublesTier: "(DUU)", natDexTier: "RU", }, @@ -1146,33 +1146,33 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { tier: "Illegal", }, articuno: { - tier: "PU", + tier: "ZU", doublesTier: "(DUU)", natDexTier: "RU", }, articunogalar: { - tier: "NU", + tier: "ZUBL", doublesTier: "(DUU)", natDexTier: "RU", }, zapdos: { tier: "OU", - doublesTier: "DUU", + doublesTier: "(DUU)", natDexTier: "OU", }, zapdosgalar: { - tier: "UU", + tier: "RU", doublesTier: "(DUU)", - natDexTier: "UU", + natDexTier: "UUBL", }, moltres: { - tier: "UU", + tier: "OU", doublesTier: "(DUU)", natDexTier: "OU", }, moltresgalar: { - tier: "RUBL", - doublesTier: "(DUU)", + tier: "UUBL", + doublesTier: "DUU", natDexTier: "RUBL", }, dratini: { @@ -1202,8 +1202,8 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { natDexTier: "Uber", }, mew: { - tier: "RUBL", - doublesTier: "(DUU)", + tier: "NUBL", + doublesTier: "DUU", natDexTier: "RUBL", }, chikorita: { @@ -1213,8 +1213,8 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { tier: "NFE", }, meganium: { - tier: "OU", - doublesTier: "DOU", + tier: "ZU", + doublesTier: "(DUU)", natDexTier: "RU", }, cyndaquil: { @@ -1224,13 +1224,13 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { tier: "NFE", }, typhlosion: { - tier: "NU", + tier: "ZU", doublesTier: "(DUU)", natDexTier: "RU", }, typhlosionhisui: { - tier: "RU", - doublesTier: "DUU", + tier: "NU", + doublesTier: "(DUU)", natDexTier: "RU", }, totodile: { @@ -1240,8 +1240,8 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { tier: "NFE", }, feraligatr: { - tier: "OU", - doublesTier: "DOU", + tier: "NUBL", + doublesTier: "(DUU)", natDexTier: "RU", }, sentret: { @@ -1282,8 +1282,8 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { tier: "LC", }, lanturn: { - tier: "OU", - doublesTier: "DOU", + tier: "ZU", + doublesTier: "(DUU)", natDexTier: "RU", }, togepi: { @@ -1335,8 +1335,8 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { }, azumarill: { tier: "UU", - doublesTier: "DUU", - natDexTier: "RU", + doublesTier: "(DUU)", + natDexTier: "UU", }, bonsly: { tier: "LC", @@ -1361,7 +1361,7 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { tier: "NFE", }, ambipom: { - tier: "NU", + tier: "PU", doublesTier: "(DUU)", natDexTier: "RU", }, @@ -1390,24 +1390,22 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { quagsire: { tier: "RU", doublesTier: "(DUU)", - natDexTier: "UU", + natDexTier: "RU", }, murkrow: { tier: "NFE", doublesTier: "DUU", }, honchkrow: { - tier: "PU", + tier: "ZU", doublesTier: "(DUU)", natDexTier: "RU", }, misdreavus: { - tier: "ZU", - doublesTier: "NFE", - natDexTier: "NFE", + tier: "NFE", }, mismagius: { - tier: "NU", + tier: "ZU", doublesTier: "(DUU)", natDexTier: "RU", }, @@ -1430,7 +1428,7 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { tier: "NFE", }, farigiraf: { - tier: "PU", + tier: "ZU", doublesTier: "DOU", natDexTier: "RU", }, @@ -1446,7 +1444,7 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { tier: "NFE", }, dudunsparce: { - tier: "NU", + tier: "ZU", doublesTier: "(DUU)", natDexTier: "RU", }, @@ -1464,22 +1462,22 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { tier: "LC", }, granbull: { - tier: "OU", - doublesTier: "DOU", + tier: "ZU", + doublesTier: "(DUU)", natDexTier: "RU", }, qwilfish: { - tier: "NU", + tier: "ZU", doublesTier: "(DUU)", natDexTier: "RU", }, qwilfishhisui: { - tier: "NU", + tier: "ZU", doublesTier: "NFE", natDexTier: "NFE", }, overqwil: { - tier: "RU", + tier: "NU", doublesTier: "(DUU)", natDexTier: "RU", }, @@ -1496,7 +1494,7 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { heracrossmega: { isNonstandard: "Past", tier: "Illegal", - natDexTier: "RUBL", + natDexTier: "UU", }, sneasel: { tier: "ZU", @@ -1504,9 +1502,7 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { natDexTier: "NFE", }, sneaselhisui: { - tier: "PU", - doublesTier: "NFE", - natDexTier: "NFE", + tier: "NFE", }, weavile: { tier: "UU", @@ -1515,19 +1511,17 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { }, sneasler: { tier: "Uber", - doublesTier: "(DUU)", + doublesTier: "DUU", natDexTier: "Uber", }, teddiursa: { tier: "LC", }, ursaring: { - tier: "ZUBL", - doublesTier: "NFE", - natDexTier: "NFE", + tier: "NFE", }, ursaluna: { - tier: "UU", + tier: "UUBL", doublesTier: "DOU", natDexTier: "OU", }, @@ -1548,14 +1542,12 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { tier: "LC", }, piloswine: { - tier: "NU", - doublesTier: "NFE", - natDexTier: "NFE", + tier: "NFE", }, mamoswine: { tier: "UU", doublesTier: "(DUU)", - natDexTier: "RUBL", + natDexTier: "UU", }, corsola: { isNonstandard: "Past", @@ -1565,7 +1557,7 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { corsolagalar: { isNonstandard: "Past", tier: "Illegal", - natDexTier: "LC", + natDexTier: "NFE", }, cursola: { isNonstandard: "Past", @@ -1598,15 +1590,15 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { natDexTier: "RU", }, skarmory: { - tier: "OU", - doublesTier: "DOU", + tier: "UU", + doublesTier: "(DUU)", natDexTier: "UU", }, houndour: { tier: "LC", }, houndoom: { - tier: "PU", + tier: "ZU", doublesTier: "(DUU)", natDexTier: "RU", }, @@ -1619,7 +1611,7 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { tier: "LC", }, donphan: { - tier: "RU", + tier: "UU", doublesTier: "(DUU)", natDexTier: "RU", }, @@ -1627,13 +1619,13 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { tier: "NFE", }, wyrdeer: { - tier: "ZUBL", + tier: "ZU", doublesTier: "(DUU)", natDexTier: "RU", }, smeargle: { - tier: "OU", - doublesTier: "DOU", + tier: "ZU", + doublesTier: "(DUU)", natDexTier: "RU", }, miltank: { @@ -1642,18 +1634,18 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { natDexTier: "RU", }, raikou: { - tier: "OU", - doublesTier: "DOU", + tier: "PUBL", + doublesTier: "(DUU)", natDexTier: "RU", }, entei: { - tier: "OU", - doublesTier: "DOU", + tier: "RU", + doublesTier: "(DUU)", natDexTier: "RU", }, suicune: { - tier: "OU", - doublesTier: "DOU", + tier: "NUBL", + doublesTier: "(DUU)", natDexTier: "RU", }, larvitar: { @@ -1663,14 +1655,14 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { tier: "NFE", }, tyranitar: { - tier: "RU", + tier: "UU", doublesTier: "DOU", natDexTier: "UU", }, tyranitarmega: { isNonstandard: "Past", tier: "Illegal", - natDexTier: "UU", + natDexTier: "OU", }, lugia: { tier: "Uber", @@ -1694,8 +1686,8 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { tier: "NFE", }, sceptile: { - tier: "OU", - doublesTier: "DOU", + tier: "ZU", + doublesTier: "(DUU)", natDexTier: "RU", }, sceptilemega: { @@ -1710,8 +1702,8 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { tier: "NFE", }, blaziken: { - tier: "OU", - doublesTier: "DOU", + tier: "UUBL", + doublesTier: "(DUU)", natDexTier: "UUBL", }, blazikenmega: { @@ -1726,14 +1718,14 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { tier: "NFE", }, swampert: { - tier: "OU", - doublesTier: "DOU", + tier: "NU", + doublesTier: "(DUU)", natDexTier: "RU", }, swampertmega: { isNonstandard: "Past", tier: "Illegal", - natDexTier: "UU", + natDexTier: "RU", }, poochyena: { tier: "LC", @@ -1746,7 +1738,7 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { zigzagoon: { isNonstandard: "Past", tier: "Illegal", - natDexTier: "LC", + natDexTier: "NFE", }, zigzagoongalar: { isNonstandard: "Past", @@ -1811,7 +1803,7 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { tier: "NFE", }, shiftry: { - tier: "NU", + tier: "ZU", doublesTier: "(DUU)", natDexTier: "RU", }, @@ -1829,8 +1821,8 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { tier: "LC", }, pelipper: { - tier: "UU", - doublesTier: "DUU", + tier: "UUBL", + doublesTier: "DOU", natDexTier: "OU", }, ralts: { @@ -1850,20 +1842,20 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { natDexTier: "UU", }, gallade: { - tier: "NU", + tier: "NUBL", doublesTier: "(DUU)", natDexTier: "RU", }, gallademega: { isNonstandard: "Past", tier: "Illegal", - natDexTier: "RUBL", + natDexTier: "UU", }, surskit: { tier: "LC", }, masquerain: { - tier: "ZUBL", + tier: "ZU", doublesTier: "(DUU)", natDexTier: "RU", }, @@ -1871,7 +1863,7 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { tier: "LC", }, breloom: { - tier: "UU", + tier: "NU", doublesTier: "(DUU)", natDexTier: "RU", }, @@ -1920,7 +1912,7 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { tier: "LC", }, hariyama: { - tier: "NU", + tier: "ZUBL", doublesTier: "(DUU)", natDexTier: "RU", }, @@ -1928,7 +1920,7 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { tier: "LC", }, probopass: { - tier: "PU", + tier: "ZU", doublesTier: "(DUU)", natDexTier: "RU", }, @@ -1943,7 +1935,7 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { natDexTier: "RU", }, sableye: { - tier: "PU", + tier: "ZU", doublesTier: "DUU", natDexTier: "RU", }, @@ -1986,7 +1978,7 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { tier: "NFE", }, medicham: { - tier: "PU", + tier: "ZU", doublesTier: "(DUU)", natDexTier: "RU", }, @@ -2011,13 +2003,13 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { natDexTier: "RU", }, plusle: { - tier: "OU", - doublesTier: "DOU", + tier: "ZU", + doublesTier: "(DUU)", natDexTier: "RU", }, minun: { - tier: "OU", - doublesTier: "DOU", + tier: "ZU", + doublesTier: "(DUU)", natDexTier: "RU", }, volbeat: { @@ -2116,8 +2108,8 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { tier: "NFE", }, flygon: { - tier: "OU", - doublesTier: "DOU", + tier: "NU", + doublesTier: "(DUU)", natDexTier: "RU", }, cacnea: { @@ -2132,7 +2124,7 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { tier: "LC", }, altaria: { - tier: "NU", + tier: "PU", doublesTier: "(DUU)", natDexTier: "RU", }, @@ -2142,7 +2134,7 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { natDexTier: "RUBL", }, zangoose: { - tier: "ZUBL", + tier: "ZU", doublesTier: "(DUU)", natDexTier: "RU", }, @@ -2165,7 +2157,7 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { tier: "LC", }, whiscash: { - tier: "PU", + tier: "ZU", doublesTier: "(DUU)", natDexTier: "RU", }, @@ -2173,7 +2165,7 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { tier: "LC", }, crawdaunt: { - tier: "UU", + tier: "RU", doublesTier: "(DUU)", natDexTier: "RU", }, @@ -2211,7 +2203,7 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { tier: "LC", }, milotic: { - tier: "RU", + tier: "NU", doublesTier: "(DUU)", natDexTier: "RU", }, @@ -2295,7 +2287,7 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { natDexTier: "RU", }, froslass: { - tier: "PU", + tier: "ZU", doublesTier: "(DUU)", natDexTier: "RU", }, @@ -2317,7 +2309,7 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { clamperl: { isNonstandard: "Past", tier: "Illegal", - natDexTier: "LC", + natDexTier: "NFE", }, huntail: { isNonstandard: "Past", @@ -2346,7 +2338,7 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { tier: "NFE", }, salamence: { - tier: "UU", + tier: "RU", doublesTier: "(DUU)", natDexTier: "RUBL", }, @@ -2362,8 +2354,8 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { tier: "NFE", }, metagross: { - tier: "OU", - doublesTier: "DOU", + tier: "UU", + doublesTier: "DUU", natDexTier: "RU", }, metagrossmega: { @@ -2372,39 +2364,39 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { natDexTier: "Uber", }, regirock: { - tier: "OU", - doublesTier: "DOU", + tier: "ZU", + doublesTier: "(DUU)", natDexTier: "RU", }, regice: { - tier: "OU", - doublesTier: "DOU", + tier: "ZU", + doublesTier: "(DUU)", natDexTier: "RU", }, registeel: { - tier: "OU", - doublesTier: "DOU", + tier: "NU", + doublesTier: "(DUU)", natDexTier: "RU", }, latias: { - tier: "OU", - doublesTier: "DOU", + tier: "UUBL", + doublesTier: "(DUU)", natDexTier: "RU", }, latiasmega: { isNonstandard: "Past", tier: "Illegal", - natDexTier: "RUBL", + natDexTier: "UU", }, latios: { - tier: "OU", - doublesTier: "DOU", - natDexTier: "RUBL", + tier: "UU", + doublesTier: "DUU", + natDexTier: "UUBL", }, latiosmega: { isNonstandard: "Past", tier: "Illegal", - natDexTier: "RUBL", + natDexTier: "UUBL", }, kyogre: { tier: "Uber", @@ -2437,28 +2429,28 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { natDexTier: "AG", }, jirachi: { - tier: "UU", + tier: "RU", doublesTier: "(DUU)", natDexTier: "RUBL", }, deoxys: { tier: "Uber", - doublesTier: "DOU", + doublesTier: "DUU", natDexTier: "Uber", }, deoxysattack: { tier: "Uber", - doublesTier: "DOU", + doublesTier: "DUber", natDexTier: "Uber", }, deoxysdefense: { - tier: "OU", - doublesTier: "DOU", + tier: "NUBL", + doublesTier: "(DUU)", natDexTier: "RUBL", }, deoxysspeed: { tier: "OU", - doublesTier: "DOU", + doublesTier: "(DUU)", natDexTier: "Uber", }, turtwig: { @@ -2468,7 +2460,7 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { tier: "NFE", }, torterra: { - tier: "RU", + tier: "NU", doublesTier: "(DUU)", natDexTier: "RU", }, @@ -2479,7 +2471,7 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { tier: "NFE", }, infernape: { - tier: "UU", + tier: "NU", doublesTier: "(DUU)", natDexTier: "RU", }, @@ -2490,8 +2482,8 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { tier: "NFE", }, empoleon: { - tier: "UU", - doublesTier: "DUU", + tier: "RU", + doublesTier: "(DUU)", natDexTier: "RU", }, starly: { @@ -2501,7 +2493,7 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { tier: "NFE", }, staraptor: { - tier: "RU", + tier: "NU", doublesTier: "(DUU)", natDexTier: "RU", }, @@ -2538,16 +2530,16 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { tier: "LC", }, rampardos: { - tier: "OU", - doublesTier: "DOU", + tier: "ZU", + doublesTier: "(DUU)", natDexTier: "RU", }, shieldon: { tier: "LC", }, bastiodon: { - tier: "OU", - doublesTier: "DOU", + tier: "ZU", + doublesTier: "(DUU)", natDexTier: "RU", }, burmy: { @@ -2592,7 +2584,7 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { tier: "LC", }, floatzel: { - tier: "PU", + tier: "ZU", doublesTier: "(DUU)", natDexTier: "RU", }, @@ -2613,15 +2605,16 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { tier: "LC", }, gastrodon: { - tier: "UU", - doublesTier: "DUU", - natDexTier: "UU", + tier: "PU", + doublesTier: "(DUU)", + natDexTier: "RU", }, drifloon: { tier: "LC", + natDexTier: "NFE", }, drifblim: { - tier: "NU", + tier: "ZU", doublesTier: "(DUU)", natDexTier: "RU", }, @@ -2672,7 +2665,7 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { natDexTier: "RU", }, spiritomb: { - tier: "PU", + tier: "ZU", doublesTier: "(DUU)", natDexTier: "RU", }, @@ -2680,12 +2673,10 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { tier: "LC", }, gabite: { - tier: "ZU", - doublesTier: "NFE", - natDexTier: "NFE", + tier: "NFE", }, garchomp: { - tier: "OU", + tier: "UUBL", doublesTier: "DUU", natDexTier: "OU", }, @@ -2698,7 +2689,7 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { tier: "LC", }, lucario: { - tier: "RU", + tier: "NUBL", doublesTier: "(DUU)", natDexTier: "RU", }, @@ -2712,7 +2703,7 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { }, hippowdon: { tier: "RU", - doublesTier: "(DUU)", + doublesTier: "DUU", natDexTier: "UU", }, skorupi: { @@ -2750,7 +2741,7 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { tier: "LC", }, abomasnow: { - tier: "NU", + tier: "ZU", doublesTier: "DUU", natDexTier: "RU", }, @@ -2760,12 +2751,12 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { natDexTier: "RU", }, rotom: { - tier: "PU", + tier: "ZU", doublesTier: "(DUU)", natDexTier: "RU", }, rotomheat: { - tier: "RU", + tier: "PU", doublesTier: "(DUU)", natDexTier: "RU", }, @@ -2775,27 +2766,27 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { natDexTier: "UU", }, rotomfrost: { - tier: "ZUBL", + tier: "ZU", doublesTier: "(DUU)", natDexTier: "RU", }, rotomfan: { - tier: "ZUBL", + tier: "ZU", doublesTier: "(DUU)", natDexTier: "RU", }, rotommow: { - tier: "NU", + tier: "PU", doublesTier: "(DUU)", natDexTier: "RU", }, uxie: { - tier: "NU", + tier: "ZUBL", doublesTier: "(DUU)", natDexTier: "RU", }, mesprit: { - tier: "PUBL", + tier: "ZU", doublesTier: "(DUU)", natDexTier: "RU", }, @@ -2825,13 +2816,13 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { natDexTier: "Uber", }, heatran: { - tier: "OU", - doublesTier: "DOU", + tier: "UU", + doublesTier: "DUU", natDexTier: "OU", }, regigigas: { - tier: "OU", - doublesTier: "DOU", + tier: "ZU", + doublesTier: "(DUU)", natDexTier: "RU", }, giratina: { @@ -2845,7 +2836,7 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { natDexTier: "Uber", }, cresselia: { - tier: "UU", + tier: "NUBL", doublesTier: "DOU", natDexTier: "RU", }, @@ -2855,7 +2846,7 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { natDexTier: "RU", }, manaphy: { - tier: "OU", + tier: "RUBL", doublesTier: "(DUU)", natDexTier: "UUBL", }, @@ -2865,7 +2856,7 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { natDexTier: "Uber", }, shaymin: { - tier: "NU", + tier: "ZU", doublesTier: "(DUU)", natDexTier: "RU", }, @@ -2882,17 +2873,17 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { victini: { isNonstandard: "Past", tier: "Illegal", - natDexTier: "RUBL", + natDexTier: "UU", }, snivy: { - tier: "LC", + tier: "NFE", }, servine: { tier: "NFE", }, serperior: { - tier: "OU", - doublesTier: "DOU", + tier: "UU", + doublesTier: "(DUU)", natDexTier: "UU", }, tepig: { @@ -2902,8 +2893,8 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { tier: "NFE", }, emboar: { - tier: "OU", - doublesTier: "DOU", + tier: "ZUBL", + doublesTier: "(DUU)", natDexTier: "RU", }, oshawott: { @@ -2913,7 +2904,7 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { tier: "NFE", }, samurott: { - tier: "PU", + tier: "ZU", doublesTier: "(DUU)", natDexTier: "RU", }, @@ -3016,8 +3007,8 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { tier: "LC", }, zebstrika: { - tier: "OU", - doublesTier: "DOU", + tier: "ZU", + doublesTier: "(DUU)", natDexTier: "RU", }, roggenrola: { @@ -3038,7 +3029,7 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { woobat: { isNonstandard: "Past", tier: "Illegal", - natDexTier: "LC", + natDexTier: "NFE", }, swoobat: { isNonstandard: "Past", @@ -3049,8 +3040,8 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { tier: "LC", }, excadrill: { - tier: "OU", - doublesTier: "DOU", + tier: "UU", + doublesTier: "(DUU)", natDexTier: "UU", }, audino: { @@ -3067,14 +3058,12 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { tier: "LC", }, gurdurr: { - tier: "PU", - doublesTier: "NFE", - natDexTier: "NFE", + tier: "NFE", }, conkeldurr: { - tier: "UU", - doublesTier: "DUU", - natDexTier: "RU", + tier: "RU", + doublesTier: "(DUU)", + natDexTier: "RUBL", }, tympole: { isNonstandard: "Past", @@ -3125,13 +3114,13 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { scolipede: { isNonstandard: "Past", tier: "Illegal", - natDexTier: "RU", + natDexTier: "RUBL", }, cottonee: { tier: "LC", }, whimsicott: { - tier: "OU", + tier: "ZU", doublesTier: "DOU", natDexTier: "RU", }, @@ -3139,28 +3128,28 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { tier: "LC", }, lilligant: { - tier: "PUBL", + tier: "ZU", doublesTier: "(DUU)", natDexTier: "RU", }, lilliganthisui: { - tier: "RUBL", + tier: "NUBL", doublesTier: "(DUU)", natDexTier: "RUBL", }, basculin: { - tier: "PU", + tier: "ZU", doublesTier: "(DUU)", natDexTier: "RU", }, basculegion: { - tier: "RU", + tier: "NU", doublesTier: "DUber", natDexTier: "RU", }, basculegionf: { - tier: "UU", - doublesTier: "DUU", + tier: "RU", + doublesTier: "DOU", natDexTier: "RU", }, sandile: { @@ -3216,11 +3205,11 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { natDexTier: "RU", }, scraggy: { - tier: "LC", + tier: "NFE", }, scrafty: { - tier: "OU", - doublesTier: "DOU", + tier: "PU", + doublesTier: "(DUU)", natDexTier: "RU", }, sigilyph: { @@ -3289,7 +3278,7 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { tier: "LC", }, zoroark: { - tier: "NU", + tier: "PU", doublesTier: "(DUU)", natDexTier: "RU", }, @@ -3302,8 +3291,8 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { tier: "LC", }, cinccino: { - tier: "OU", - doublesTier: "DOU", + tier: "NU", + doublesTier: "(DUU)", natDexTier: "RU", }, gothita: { @@ -3324,15 +3313,15 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { tier: "NFE", }, reuniclus: { - tier: "OU", - doublesTier: "DOU", + tier: "RU", + doublesTier: "(DUU)", natDexTier: "RU", }, ducklett: { tier: "LC", }, swanna: { - tier: "PU", + tier: "ZU", doublesTier: "(DUU)", natDexTier: "RU", }, @@ -3378,9 +3367,9 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { tier: "LC", }, amoonguss: { - tier: "OU", + tier: "RU", doublesTier: "DOU", - natDexTier: "UU", + natDexTier: "RU", }, frillish: { isNonstandard: "Past", @@ -3401,8 +3390,8 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { tier: "LC", }, galvantula: { - tier: "OU", - doublesTier: "DOU", + tier: "NU", + doublesTier: "(DUU)", natDexTier: "RU", }, ferroseed: { @@ -3437,7 +3426,7 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { tier: "NFE", }, eelektross: { - tier: "PU", + tier: "ZU", doublesTier: "(DUU)", natDexTier: "RU", }, @@ -3458,7 +3447,7 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { tier: "NFE", }, chandelure: { - tier: "RU", + tier: "NU", doublesTier: "(DUU)", natDexTier: "RU", }, @@ -3471,7 +3460,7 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { haxorus: { tier: "RUBL", doublesTier: "(DUU)", - natDexTier: "RU", + natDexTier: "RUBL", }, cubchoo: { tier: "LC", @@ -3482,7 +3471,7 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { natDexTier: "RU", }, cryogonal: { - tier: "PU", + tier: "ZU", doublesTier: "(DUU)", natDexTier: "RU", }, @@ -3510,9 +3499,9 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { tier: "LC", }, mienshao: { - tier: "RUBL", + tier: "NU", doublesTier: "(DUU)", - natDexTier: "RU", + natDexTier: "RUBL", }, druddigon: { isNonstandard: "Past", @@ -3523,8 +3512,8 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { tier: "LC", }, golurk: { - tier: "OU", - doublesTier: "DOU", + tier: "PU", + doublesTier: "(DUU)", natDexTier: "RU", }, pawniard: { @@ -3544,12 +3533,12 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { tier: "NFE", }, braviary: { - tier: "PU", + tier: "ZU", doublesTier: "(DUU)", natDexTier: "RU", }, braviaryhisui: { - tier: "NU", + tier: "PU", doublesTier: "(DUU)", natDexTier: "RU", }, @@ -3578,7 +3567,7 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { tier: "NFE", }, hydreigon: { - tier: "UU", + tier: "RUBL", doublesTier: "(DUU)", natDexTier: "UU", }, @@ -3586,27 +3575,27 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { tier: "LC", }, volcarona: { - tier: "OU", - doublesTier: "DUU", + tier: "Uber", + doublesTier: "(DUU)", natDexTier: "OU", }, cobalion: { - tier: "OU", - doublesTier: "DOU", + tier: "UU", + doublesTier: "(DUU)", natDexTier: "RU", }, terrakion: { - tier: "OU", - doublesTier: "DOU", + tier: "RU", + doublesTier: "(DUU)", natDexTier: "RUBL", }, virizion: { - tier: "OU", - doublesTier: "DOU", + tier: "ZU", + doublesTier: "(DUU)", natDexTier: "RU", }, tornadus: { - tier: "NU", + tier: "ZUBL", doublesTier: "DOU", natDexTier: "RU", }, @@ -3616,14 +3605,14 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { natDexTier: "UUBL", }, thundurus: { - tier: "RU", + tier: "RUBL", doublesTier: "DUU", natDexTier: "RU", }, thundurustherian: { tier: "UU", doublesTier: "(DUU)", - natDexTier: "UU", + natDexTier: "UUBL", }, reshiram: { tier: "Uber", @@ -3637,7 +3626,7 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { }, landorus: { tier: "Uber", - doublesTier: "DUU", + doublesTier: "DOU", natDexTier: "Uber", }, landorustherian: { @@ -3648,11 +3637,11 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { kyurem: { tier: "OU", doublesTier: "DOU", - natDexTier: "UUBL", + natDexTier: "OU", }, kyuremblack: { tier: "Uber", - doublesTier: "DOU", + doublesTier: "DUber", natDexTier: "Uber", }, kyuremwhite: { @@ -3661,12 +3650,12 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { natDexTier: "Uber", }, keldeo: { - tier: "OU", - doublesTier: "DOU", + tier: "UU", + doublesTier: "(DUU)", natDexTier: "UU", }, meloetta: { - tier: "NU", + tier: "PU", doublesTier: "(DUU)", natDexTier: "RU", }, @@ -3713,7 +3702,7 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { tier: "NFE", }, delphox: { - tier: "NU", + tier: "ZUBL", doublesTier: "(DUU)", natDexTier: "RU", }, @@ -3721,14 +3710,12 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { tier: "LC", }, frogadier: { - tier: "ZU", - doublesTier: "NFE", - natDexTier: "NFE", + tier: "NFE", }, greninja: { - tier: "OU", + tier: "UU", doublesTier: "(DUU)", - natDexTier: "OU", + natDexTier: "UU", }, greninjaash: { isNonstandard: "Past", @@ -3752,8 +3739,8 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { }, talonflame: { tier: "RU", - doublesTier: "DUU", - natDexTier: "UU", + doublesTier: "(DUU)", + natDexTier: "RU", }, scatterbug: { tier: "LC", @@ -3762,7 +3749,7 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { tier: "NFE", }, vivillon: { - tier: "PUBL", + tier: "ZU", doublesTier: "(DUU)", natDexTier: "RU", }, @@ -3770,7 +3757,7 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { tier: "LC", }, pyroar: { - tier: "PU", + tier: "ZU", doublesTier: "(DUU)", natDexTier: "RU", }, @@ -3785,7 +3772,7 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { tier: "Illegal", }, florges: { - tier: "NU", + tier: "PU", doublesTier: "(DUU)", natDexTier: "RU", }, @@ -3816,13 +3803,8 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { tier: "LC", }, meowstic: { - tier: "OU", - doublesTier: "DOU", - natDexTier: "RU", - }, - meowsticf: { - tier: "OU", - doublesTier: "DOU", + tier: "ZU", + doublesTier: "(DUU)", natDexTier: "RU", }, honedge: { @@ -3838,7 +3820,7 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { aegislash: { isNonstandard: "Past", tier: "Illegal", - natDexTier: "OU", + natDexTier: "UU", }, aegislashblade: { isNonstandard: "Past", @@ -3856,7 +3838,7 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { swirlix: { isNonstandard: "Past", tier: "Illegal", - natDexTier: "LC", + natDexTier: "NFE", }, slurpuff: { isNonstandard: "Past", @@ -3867,8 +3849,8 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { tier: "LC", }, malamar: { - tier: "OU", - doublesTier: "DOU", + tier: "ZU", + doublesTier: "(DUU)", natDexTier: "RU", }, binacle: { @@ -3885,7 +3867,7 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { tier: "LC", }, dragalge: { - tier: "RU", + tier: "NU", doublesTier: "(DUU)", natDexTier: "RU", }, @@ -3893,7 +3875,7 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { tier: "LC", }, clawitzer: { - tier: "PU", + tier: "ZU", doublesTier: "(DUU)", natDexTier: "RU", }, @@ -3938,7 +3920,7 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { natDexTier: "RU", }, carbink: { - tier: "PU", + tier: "ZU", doublesTier: "(DUU)", natDexTier: "RU", }, @@ -3952,14 +3934,14 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { tier: "NFE", }, goodra: { - tier: "NU", + tier: "PU", doublesTier: "(DUU)", natDexTier: "RU", }, goodrahisui: { - tier: "UU", + tier: "RU", doublesTier: "(DUU)", - natDexTier: "UU", + natDexTier: "RU", }, klefki: { tier: "NU", @@ -4011,7 +3993,7 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { natDexTier: "RU", }, avalugghisui: { - tier: "PU", + tier: "ZU", doublesTier: "(DUU)", natDexTier: "RU", }, @@ -4026,7 +4008,7 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { xerneas: { isNonstandard: "Past", tier: "Illegal", - natDexTier: "Uber", + natDexTier: "AG", }, xerneasneutral: { isNonstandard: "Custom", // can't be used in battle @@ -4053,7 +4035,7 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { natDexTier: "Uber", }, diancie: { - tier: "RU", + tier: "NU", doublesTier: "DOU", natDexTier: "RU", }, @@ -4063,18 +4045,18 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { natDexTier: "OU", }, hoopa: { - tier: "NU", + tier: "PU", doublesTier: "(DUU)", natDexTier: "RU", }, hoopaunbound: { tier: "UU", doublesTier: "(DUU)", - natDexTier: "OU", + natDexTier: "UUBL", }, volcanion: { - tier: "UU", - doublesTier: "DOU", + tier: "RU", + doublesTier: "DUU", natDexTier: "RU", }, rowlet: { @@ -4084,12 +4066,12 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { tier: "NFE", }, decidueye: { - tier: "NU", + tier: "PU", doublesTier: "(DUU)", natDexTier: "RU", }, decidueyehisui: { - tier: "NU", + tier: "ZU", doublesTier: "(DUU)", natDexTier: "RU", }, @@ -4100,7 +4082,7 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { tier: "NFE", }, incineroar: { - tier: "OU", + tier: "NU", doublesTier: "DOU", natDexTier: "RU", }, @@ -4112,7 +4094,7 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { }, primarina: { tier: "OU", - doublesTier: "DOU", + doublesTier: "(DUU)", natDexTier: "RU", }, pikipek: { @@ -4122,8 +4104,8 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { tier: "NFE", }, toucannon: { - tier: "OU", - doublesTier: "DOU", + tier: "ZU", + doublesTier: "(DUU)", natDexTier: "RU", }, yungoos: { @@ -4145,7 +4127,7 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { tier: "NFE", }, vikavolt: { - tier: "NU", + tier: "ZU", doublesTier: "(DUU)", natDexTier: "RU", }, @@ -4157,12 +4139,12 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { tier: "LC", }, crabominable: { - tier: "ZUBL", + tier: "ZU", doublesTier: "(DUU)", natDexTier: "RU", }, oricorio: { - tier: "NU", + tier: "ZU", doublesTier: "(DUU)", natDexTier: "RU", }, @@ -4172,12 +4154,12 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { natDexTier: "RU", }, oricoriopau: { - tier: "PUBL", + tier: "ZU", doublesTier: "(DUU)", natDexTier: "RU", }, oricoriosensu: { - tier: "NU", + tier: "ZU", doublesTier: "(DUU)", natDexTier: "RU", }, @@ -4185,9 +4167,9 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { tier: "NFE", }, ribombee: { - tier: "OU", + tier: "RU", doublesTier: "(DUU)", - natDexTier: "RU", + natDexTier: "UU", }, ribombeetotem: { isNonstandard: "Past", @@ -4200,17 +4182,17 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { tier: "LC", }, lycanroc: { - tier: "NU", + tier: "ZU", doublesTier: "(DUU)", natDexTier: "RU", }, lycanrocmidnight: { - tier: "ZUBL", + tier: "ZU", doublesTier: "(DUU)", natDexTier: "RU", }, lycanrocdusk: { - tier: "RU", + tier: "NUBL", doublesTier: "(DUU)", natDexTier: "RU", }, @@ -4226,7 +4208,7 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { tier: "LC", }, toxapex: { - tier: "OU", + tier: "UU", doublesTier: "(DUU)", natDexTier: "OU", }, @@ -4234,7 +4216,7 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { tier: "LC", }, mudsdale: { - tier: "NU", + tier: "PU", doublesTier: "(DUU)", natDexTier: "RU", }, @@ -4242,8 +4224,8 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { tier: "LC", }, araquanid: { - tier: "OU", - doublesTier: "DOU", + tier: "NU", + doublesTier: "DUU", natDexTier: "RU", }, araquanidtotem: { @@ -4254,7 +4236,7 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { tier: "LC", }, lurantis: { - tier: "PU", + tier: "ZU", doublesTier: "(DUU)", natDexTier: "RU", }, @@ -4276,7 +4258,7 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { tier: "LC", }, salazzle: { - tier: "NU", + tier: "PU", doublesTier: "(DUU)", natDexTier: "RU", }, @@ -4306,17 +4288,17 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { natDexTier: "RU", }, comfey: { - tier: "OU", - doublesTier: "DOU", + tier: "UU", + doublesTier: "DUU", natDexTier: "RU", }, oranguru: { tier: "ZU", - doublesTier: "DUU", + doublesTier: "(DUU)", natDexTier: "RU", }, passimian: { - tier: "PU", + tier: "ZU", doublesTier: "(DUU)", natDexTier: "RU", }, @@ -4334,7 +4316,7 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { tier: "LC", }, palossand: { - tier: "PU", + tier: "ZU", doublesTier: "(DUU)", natDexTier: "RU", }, @@ -4439,12 +4421,12 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { natDexTier: "RU", }, minior: { - tier: "OU", - doublesTier: "DOU", + tier: "PU", + doublesTier: "(DUU)", natDexTier: "RU", }, komala: { - tier: "PU", + tier: "ZU", doublesTier: "(DUU)", natDexTier: "RU", }, @@ -4476,7 +4458,7 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { tier: "Illegal", }, bruxish: { - tier: "NU", + tier: "ZUBL", doublesTier: "(DUU)", natDexTier: "RU", }, @@ -4498,8 +4480,8 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { }, kommoo: { tier: "UUBL", - doublesTier: "DOU", - natDexTier: "OU", + doublesTier: "(DUU)", + natDexTier: "UUBL", }, kommoototem: { isNonstandard: "Past", @@ -4518,7 +4500,7 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { tapubulu: { isNonstandard: "Past", tier: "Illegal", - natDexTier: "RU", + natDexTier: "UU", }, tapufini: { isNonstandard: "Past", @@ -4549,7 +4531,7 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { buzzwole: { isNonstandard: "Past", tier: "Illegal", - natDexTier: "RU", + natDexTier: "RUBL", }, pheromosa: { isNonstandard: "Past", @@ -4577,8 +4559,8 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { natDexTier: "RU", }, necrozma: { - tier: "OU", - doublesTier: "DOU", + tier: "NUBL", + doublesTier: "(DUU)", natDexTier: "RU", }, necrozmaduskmane: { @@ -4629,7 +4611,7 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { zeraora: { isNonstandard: "Past", tier: "Illegal", - natDexTier: "RU", + natDexTier: "UU", }, meltan: { isNonstandard: "Past", @@ -4649,9 +4631,7 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { tier: "LC", }, thwackey: { - tier: "ZU", - doublesTier: "NFE", - natDexTier: "NFE", + tier: "NFE", }, rillaboom: { tier: "OU", @@ -4671,7 +4651,7 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { cinderace: { tier: "OU", doublesTier: "(DUU)", - natDexTier: "UU", + natDexTier: "UUBL", }, cinderacegmax: { isNonstandard: "Past", @@ -4768,7 +4748,7 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { tier: "LC", }, drednaw: { - tier: "NUBL", + tier: "PUBL", doublesTier: "(DUU)", natDexTier: "RU", }, @@ -4793,7 +4773,7 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { tier: "NFE", }, coalossal: { - tier: "NU", + tier: "PU", doublesTier: "(DUU)", natDexTier: "RU", }, @@ -4814,7 +4794,7 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { tier: "Illegal", }, appletun: { - tier: "PU", + tier: "ZU", doublesTier: "(DUU)", natDexTier: "RU", }, @@ -4823,7 +4803,7 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { tier: "Illegal", }, dipplin: { - tier: "NU", + tier: "ZU", doublesTier: "(DUU)", natDexTier: "RU", }, @@ -4831,7 +4811,7 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { tier: "LC", }, sandaconda: { - tier: "NU", + tier: "ZU", doublesTier: "(DUU)", natDexTier: "RU", }, @@ -4840,7 +4820,7 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { tier: "Illegal", }, cramorant: { - tier: "PU", + tier: "ZU", doublesTier: "(DUU)", natDexTier: "RU", }, @@ -4848,7 +4828,7 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { tier: "LC", }, barraskewda: { - tier: "UU", + tier: "RU", doublesTier: "(DUU)", natDexTier: "RU", }, @@ -4856,7 +4836,7 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { tier: "LC", }, toxtricity: { - tier: "NU", + tier: "PU", doublesTier: "(DUU)", natDexTier: "RU", }, @@ -4904,13 +4884,11 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { tier: "LC", }, hattrem: { - tier: "ZU", - doublesTier: "NFE", - natDexTier: "NFE", + tier: "NFE", }, hatterene: { tier: "OU", - doublesTier: "DUU", + doublesTier: "DOU", natDexTier: "OU", }, hatterenegmax: { @@ -4924,9 +4902,9 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { tier: "NFE", }, grimmsnarl: { - tier: "UU", + tier: "PU", doublesTier: "DOU", - natDexTier: "UU", + natDexTier: "RU", }, grimmsnarlgmax: { isNonstandard: "Past", @@ -4936,8 +4914,8 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { tier: "LC", }, alcremie: { - tier: "OU", - doublesTier: "DOU", + tier: "ZUBL", + doublesTier: "(DUU)", natDexTier: "RU", }, alcremiegmax: { @@ -4945,7 +4923,7 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { tier: "Illegal", }, falinks: { - tier: "ZUBL", + tier: "ZU", doublesTier: "(DUU)", natDexTier: "RU", }, @@ -4958,7 +4936,7 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { tier: "LC", }, frosmoth: { - tier: "NU", + tier: "ZU", doublesTier: "(DUU)", natDexTier: "RU", }, @@ -4974,7 +4952,7 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { }, indeedee: { tier: "PUBL", - doublesTier: "(DUU)", + doublesTier: "DUU", natDexTier: "RU", }, indeedeef: { @@ -4983,7 +4961,7 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { natDexTier: "RU", }, morpeko: { - tier: "PU", + tier: "ZU", doublesTier: "(DUU)", natDexTier: "RU", }, @@ -4991,7 +4969,7 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { tier: "LC", }, copperajah: { - tier: "NU", + tier: "PU", doublesTier: "(DUU)", natDexTier: "RU", }, @@ -5002,7 +4980,7 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { dracozolt: { isNonstandard: "Past", tier: "Illegal", - natDexTier: "UU", + natDexTier: "RU", }, arctozolt: { isNonstandard: "Past", @@ -5052,7 +5030,7 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { zamazenta: { tier: "OU", doublesTier: "DUber", - natDexTier: "OU", + natDexTier: "Uber", }, zamazentacrowned: { tier: "Uber", @@ -5100,12 +5078,12 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { natDexTier: "Uber", }, regidrago: { - tier: "RUBL", - doublesTier: "(DUU)", + tier: "NUBL", + doublesTier: "DOU", natDexTier: "RU", }, glastrier: { - tier: "NU", + tier: "ZU", doublesTier: "(DUU)", natDexTier: "RU", }, @@ -5135,7 +5113,7 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { natDexTier: "UU", }, enamorustherian: { - tier: "UU", + tier: "RUBL", doublesTier: "(DUU)", natDexTier: "RU", }, @@ -5146,9 +5124,9 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { tier: "NFE", }, meowscarada: { - tier: "UU", + tier: "OU", doublesTier: "DUU", - natDexTier: "UU", + natDexTier: "UUBL", }, fuecoco: { tier: "LC", @@ -5157,7 +5135,7 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { tier: "NFE", }, skeledirge: { - tier: "OU", + tier: "UU", doublesTier: "(DUU)", natDexTier: "UU", }, @@ -5165,14 +5143,12 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { tier: "LC", }, quaxwell: { - tier: "ZU", - doublesTier: "NFE", - natDexTier: "NFE", + tier: "NFE", }, quaquaval: { tier: "UU", doublesTier: "(DUU)", - natDexTier: "RU", + natDexTier: "UU", }, lechonk: { tier: "LC", @@ -5241,7 +5217,7 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { natDexTier: "UUBL", }, veluza: { - tier: "PU", + tier: "ZU", doublesTier: "(DUU)", natDexTier: "RU", }, @@ -5250,7 +5226,7 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { }, palafin: { tier: "Uber", - doublesTier: "DOU", + doublesTier: "(DUU)", natDexTier: "Uber", }, smoliv: { @@ -5260,7 +5236,7 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { tier: "NFE", }, arboliva: { - tier: "PU", + tier: "ZU", doublesTier: "(DUU)", natDexTier: "RU", }, @@ -5276,7 +5252,7 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { tier: "LC", }, bellibolt: { - tier: "RU", + tier: "PU", doublesTier: "(DUU)", natDexTier: "RU", }, @@ -5289,7 +5265,7 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { natDexTier: "RU", }, orthworm: { - tier: "PU", + tier: "ZU", doublesTier: "(DUU)", natDexTier: "RU", }, @@ -5305,7 +5281,7 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { tier: "LC", }, cetitan: { - tier: "NUBL", + tier: "PUBL", doublesTier: "(DUU)", natDexTier: "RU", }, @@ -5317,11 +5293,11 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { }, baxcalibur: { tier: "Uber", - doublesTier: "DUU", + doublesTier: "(DUU)", natDexTier: "Uber", }, tatsugiri: { - tier: "NU", + tier: "PU", doublesTier: "DUber", natDexTier: "RU", }, @@ -5337,7 +5313,7 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { tier: "NFE", }, pawmot: { - tier: "RU", + tier: "PU", doublesTier: "(DUU)", natDexTier: "RU", }, @@ -5345,7 +5321,7 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { tier: "LC", }, kilowattrel: { - tier: "RU", + tier: "NU", doublesTier: "(DUU)", natDexTier: "RU", }, @@ -5360,7 +5336,7 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { natDexTier: "RU", }, flamigo: { - tier: "NU", + tier: "PUBL", doublesTier: "(DUU)", natDexTier: "RU", }, @@ -5373,9 +5349,7 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { tier: "LC", }, naclstack: { - tier: "PU", - doublesTier: "NFE", - natDexTier: "NFE", + tier: "NFE", }, garganacl: { tier: "OU", @@ -5394,7 +5368,7 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { tier: "LC", }, grafaiai: { - tier: "NU", + tier: "ZU", doublesTier: "(DUU)", natDexTier: "RU", }, @@ -5410,7 +5384,7 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { tier: "LC", }, mabosstiff: { - tier: "ZUBL", + tier: "ZU", doublesTier: "(DUU)", natDexTier: "RU", }, @@ -5418,7 +5392,7 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { tier: "LC", }, brambleghast: { - tier: "RU", + tier: "NU", doublesTier: "(DUU)", natDexTier: "RU", }, @@ -5439,7 +5413,7 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { natDexTier: "OU", }, brutebonnet: { - tier: "NU", + tier: "ZU", doublesTier: "DUU", natDexTier: "RU", }, @@ -5455,7 +5429,7 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { }, fluttermane: { tier: "Uber", - doublesTier: "DOU", + doublesTier: "DUber", natDexTier: "Uber", }, slitherwing: { @@ -5465,37 +5439,37 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { }, roaringmoon: { tier: "OU", - doublesTier: "DOU", + doublesTier: "DBL", natDexTier: "Uber", }, irontreads: { - tier: "UU", + tier: "OU", doublesTier: "(DUU)", - natDexTier: "UU", + natDexTier: "OU", }, ironmoth: { tier: "OU", - doublesTier: "DUU", + doublesTier: "(DUU)", natDexTier: "UU", }, ironhands: { tier: "UUBL", doublesTier: "DOU", - natDexTier: "UU", + natDexTier: "UUBL", }, ironjugulis: { - tier: "RU", + tier: "RUBL", doublesTier: "(DUU)", natDexTier: "RU", }, ironthorns: { - tier: "RU", + tier: "NUBL", doublesTier: "(DUU)", natDexTier: "RU", }, ironbundle: { tier: "Uber", - doublesTier: "DOU", + doublesTier: "DUU", natDexTier: "Uber", }, ironvaliant: { @@ -5505,7 +5479,7 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { }, tinglu: { tier: "OU", - doublesTier: "(DUU)", + doublesTier: "DOU", natDexTier: "UU", }, chienpao: { @@ -5514,7 +5488,7 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { natDexTier: "Uber", }, wochien: { - tier: "NU", + tier: "PU", doublesTier: "(DUU)", natDexTier: "RU", }, @@ -5529,7 +5503,7 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { natDexTier: "AG", }, miraidon: { - tier: "Uber", + tier: "AG", doublesTier: "DUber", natDexTier: "AG", }, @@ -5537,12 +5511,10 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { tier: "LC", }, tinkatuff: { - tier: "ZU", - doublesTier: "NFE", - natDexTier: "NFE", + tier: "NFE", }, tinkaton: { - tier: "RU", + tier: "UU", doublesTier: "(DUU)", natDexTier: "RU", }, @@ -5551,19 +5523,19 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { }, armarouge: { tier: "RU", - doublesTier: "DOU", + doublesTier: "DUU", natDexTier: "RU", }, ceruledge: { - tier: "OU", + tier: "UUBL", doublesTier: "(DUU)", - natDexTier: "UU", + natDexTier: "OU", }, toedscool: { tier: "LC", }, toedscruel: { - tier: "NU", + tier: "ZU", doublesTier: "(DUU)", natDexTier: "RU", }, @@ -5584,11 +5556,11 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { }, walkingwake: { tier: "OU", - doublesTier: "DUU", + doublesTier: "DOU", natDexTier: "Uber", }, ironleaves: { - tier: "UU", + tier: "RUBL", doublesTier: "(DUU)", natDexTier: "RUBL", }, @@ -5598,15 +5570,15 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { sinistcha: { tier: "UU", doublesTier: "DOU", - natDexTier: "UU", + natDexTier: "RU", }, okidogi: { - tier: "UU", + tier: "UUBL", doublesTier: "(DUU)", natDexTier: "RU", }, munkidori: { - tier: "RU", + tier: "NU", doublesTier: "(DUU)", natDexTier: "RU", }, @@ -5631,24 +5603,24 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { natDexTier: "Uber", }, ogerponcornerstone: { - tier: "OU", + tier: "UU", doublesTier: "DUU", natDexTier: "UUBL", }, archaludon: { - tier: "OU", + tier: "Uber", doublesTier: "DOU", natDexTier: "OU", }, hydrapple: { - tier: "OU", - doublesTier: "DOU", - natDexTier: "OU", + tier: "UU", + doublesTier: "(DUU)", + natDexTier: "UU", }, gougingfire: { - tier: "OU", + tier: "Uber", doublesTier: "DOU", - natDexTier: "OU", + natDexTier: "Uber", }, ragingbolt: { tier: "OU", @@ -5656,13 +5628,13 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { natDexTier: "OU", }, ironboulder: { - tier: "OU", - doublesTier: "DOU", - natDexTier: "OU", + tier: "UUBL", + doublesTier: "DUU", + natDexTier: "UU", }, ironcrown: { tier: "OU", - doublesTier: "DOU", + doublesTier: "DUU", natDexTier: "OU", }, terapagos: { @@ -5671,8 +5643,9 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { natDexTier: "Uber", }, pecharunt: { - isNonstandard: "Unobtainable", - tier: "Unreleased", + tier: "UU", + doublesTier: "(DUU)", + natDexTier: "RUBL", }, missingno: { isNonstandard: "Custom", @@ -5974,6 +5947,10 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { isNonstandard: "CAP", tier: "CAP", }, + chuggalong: { + isNonstandard: "CAP", + tier: "CAP", + }, pokestarsmeargle: { isNonstandard: "Custom", tier: "Illegal", @@ -6006,10 +5983,6 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { isNonstandard: "Custom", tier: "Illegal", }, - pokestargiant2: { - isNonstandard: "Custom", - tier: "Illegal", - }, pokestarhumanoid: { isNonstandard: "Custom", tier: "Illegal", @@ -6042,10 +6015,6 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { isNonstandard: "Custom", tier: "Illegal", }, - pokestargiantpropo2: { - isNonstandard: "Custom", - tier: "Illegal", - }, pokestarufopropu2: { isNonstandard: "Custom", tier: "Illegal", diff --git a/data/items.ts b/data/items.ts index ec4c78839b74..104181fe42ef 100644 --- a/data/items.ts +++ b/data/items.ts @@ -1,4 +1,4 @@ -export const Items: {[itemid: string]: ItemData} = { +export const Items: import('../sim/dex-items').ItemDataTable = { abilityshield: { name: "Ability Shield", spritenum: 746, @@ -324,7 +324,8 @@ export const Items: {[itemid: string]: ItemData} = { }, onDisableMove(pokemon) { for (const moveSlot of pokemon.moveSlots) { - if (this.dex.moves.get(moveSlot.move).category === 'Status') { + const move = this.dex.moves.get(moveSlot.id); + if (move.category === 'Status' && move.id !== 'mefirst') { pokemon.disableMove(moveSlot.id); } } @@ -1429,7 +1430,6 @@ export const Items: {[itemid: string]: ItemData} = { }, num: 235, gen: 2, - isNonstandard: "Past", }, dragoniumz: { name: "Dragonium Z", @@ -2123,7 +2123,6 @@ export const Items: {[itemid: string]: ItemData} = { }, num: 1582, gen: 8, - isNonstandard: "Unobtainable", }, galaricawreath: { name: "Galarica Wreath", @@ -2133,7 +2132,6 @@ export const Items: {[itemid: string]: ItemData} = { }, num: 1592, gen: 8, - isNonstandard: "Unobtainable", }, galladite: { name: "Galladite", @@ -3654,6 +3652,7 @@ export const Items: {[itemid: string]: ItemData} = { pokemon.removeVolatile('metronome'); return; } + if (move.callsMove) return; if (this.effectState.lastMove === move.id && pokemon.moveLastTurnResult) { this.effectState.numConsecutive++; } else if (pokemon.volatiles['twoturnmove']) { @@ -5035,7 +5034,6 @@ export const Items: {[itemid: string]: ItemData} = { num: 5, gen: 1, isPokeball: true, - isNonstandard: "Unobtainable", }, safetygoggles: { name: "Safety Goggles", @@ -5513,7 +5511,6 @@ export const Items: {[itemid: string]: ItemData} = { num: 499, gen: 2, isPokeball: true, - isNonstandard: "Unobtainable", }, starfberry: { name: "Starf Berry", diff --git a/data/learnsets.ts b/data/learnsets.ts index 07887f9a91a5..4473fb447a5f 100644 --- a/data/learnsets.ts +++ b/data/learnsets.ts @@ -1,4 +1,4 @@ -export const Learnsets: {[k: string]: LearnsetData} = { +export const Learnsets: import('../sim/dex-species').LearnsetDataTable = { missingno: { learnset: { blizzard: ["3L1"], @@ -3733,7 +3733,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { crushclaw: ["7E", "6E", "5E", "4E", "3E"], curse: ["9M", "7V"], cut: ["7V", "6M", "5M", "4M", "3M"], - defensecurl: ["9L1", "8L1", "8V", "7L1", "7V", "6L1", "5L3", "4L3", "3T", "3L6", "3S0"], + defensecurl: ["9L1", "8L1", "8V", "7L1", "7V", "6L1", "5L1", "4L3", "3T", "3L6", "3S0"], detect: ["7V"], dig: ["9M", "9L33", "8M", "8L33", "8V", "7L30", "7V", "6M", "6L30", "5M", "5L30", "4M", "3M"], doubleedge: ["9M", "7V", "3T"], @@ -3750,7 +3750,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { fling: ["9M", "8M", "7M", "6M", "5M", "4M"], focuspunch: ["9M", "7T", "6T", "4M", "3M"], frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], - furycutter: ["9L12", "8L12", "7L11", "7V", "6L11", "5L25", "4T", "4L25", "3T"], + furycutter: ["9L12", "8L12", "7L11", "7V", "6L11", "5L14", "4T", "4L25", "3T"], furyswipes: ["9L24", "8L24", "8V", "7L20", "7V", "6L20", "5L19", "4L19", "3L37"], gyroball: ["9M", "9L36", "8M", "8L36", "7M", "7L34", "6M", "6L34", "5M", "5L33", "4M", "4L33"], headbutt: ["8V", "7V", "4T"], @@ -3769,30 +3769,30 @@ export const Learnsets: {[k: string]: LearnsetData} = { naturalgift: ["4M"], nightslash: ["9E", "8E", "7E", "6E", "5E", "4E"], poisonjab: ["9M", "8M", "8V", "7M", "6M", "5M", "4M"], - poisonsting: ["9L3", "8L3", "8V", "7L5", "7V", "6L5", "5L9", "4L9", "3L17", "3S0"], + poisonsting: ["9L3", "8L3", "8V", "7L5", "7V", "6L5", "5L5", "4L9", "3L17", "3S0"], protect: ["9M", "8M", "8V", "7M", "7V", "6M", "5M", "4M", "3M"], rage: ["7V"], - rapidspin: ["9L15", "8L15", "7L9", "7E", "7V", "6L9", "6E", "5L13", "5E", "4L13", "4E", "3E"], + rapidspin: ["9L15", "8L15", "7L9", "7E", "7V", "6L9", "6E", "5L9", "5E", "4L13", "4E", "3E"], rest: ["9M", "8M", "8V", "7M", "7V", "6M", "5M", "4M", "3M"], return: ["7M", "7V", "6M", "5M", "4M", "3M"], rockclimb: ["7E", "6E", "5E", "4M"], rockslide: ["9M", "8M", "8V", "7M", "7V", "6M", "5M", "4M", "4E", "3T", "3E"], rocksmash: ["7V", "6M", "5M", "4M", "3M"], rocktomb: ["9M", "8M", "7M", "6M", "5M", "4M", "3M"], - rollout: ["9L9", "8L9", "7L7", "7V", "6L7", "5L21", "4T", "4L21", "3T"], + rollout: ["9L9", "8L9", "7L7", "7V", "6L7", "5L7", "4T", "4L21", "3T"], rototiller: ["7E", "6E"], round: ["8M", "7M", "6M", "5M"], safeguard: ["8M", "7M", "7V", "6M", "5M", "4E", "3E"], - sandattack: ["9L6", "8L6", "8V", "7L3", "7V", "6L3", "5L7", "5D", "4L7", "3L11", "3S0"], + sandattack: ["9L6", "8L6", "8V", "7L3", "7V", "6L3", "5L3", "5D", "4L7", "3L11", "3S0"], sandstorm: ["9M", "9L42", "8M", "8L42", "7M", "7L42", "7V", "6M", "6L42", "5M", "5L37", "4M", "4L37", "3M", "3L53"], - sandtomb: ["9M", "8M", "7L23", "6L23", "5L27", "4L27", "3L45"], + sandtomb: ["9M", "8M", "7L23", "6L23", "5L23", "4L27", "3L45"], scorchingsands: ["9M", "8T"], scratch: ["9L1", "8L1", "8V", "7L1", "7V", "6L1", "5L1", "4L1", "3L1", "3S0"], secretpower: ["6M", "4M", "3M"], seismictoss: ["8V", "7V", "3T"], shadowclaw: ["9M", "8M", "7M", "6M", "5M", "4M"], skullbash: ["7V"], - slash: ["9L30", "8L30", "8V", "7L26", "7V", "6L26", "5L31", "4L31", "3L23"], + slash: ["9L30", "8L30", "8V", "7L26", "7V", "6L26", "5L26", "4L31", "3L23"], sleeptalk: ["9M", "8M", "7M", "7V", "6M", "5T", "4M", "3T"], smackdown: ["9M"], snore: ["8M", "7T", "7V", "6T", "5T", "4T", "3T"], @@ -3807,7 +3807,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { sunnyday: ["9M", "8M", "7M", "7V", "6M", "5M", "4M", "3M"], superfang: ["9M", "7T", "6T", "5T", "5D", "4T"], swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], - swift: ["9M", "9L21", "8M", "8L21", "8V", "7L17", "7V", "6L11", "5L15", "4T", "4L15", "3T", "3L30"], + swift: ["9M", "9L21", "8M", "8L21", "8V", "7L17", "7V", "6L11", "5L11", "4T", "4L15", "3T", "3L30"], swordsdance: ["9M", "9L39", "8M", "8L39", "8V", "7M", "7L38", "7V", "6M", "6L38", "5M", "5L38", "4M", "4E", "3T", "3E"], takedown: ["9M", "7V"], terablast: ["9M"], @@ -3957,11 +3957,11 @@ export const Learnsets: {[k: string]: LearnsetData} = { focusblast: ["9M", "8M", "7M", "6M", "5M", "4M"], focuspunch: ["9M", "7T", "6T", "4M", "3M"], frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], - furycutter: ["9L12", "8L12", "7L11", "7V", "6L11", "5L28", "4T", "4L28", "3T"], + furycutter: ["9L12", "8L12", "7L11", "7V", "6L11", "5L14", "4T", "4L28", "3T"], furyswipes: ["9L26", "8L26", "8V", "7L20", "7V", "6L20", "5L19", "4L19", "3L42"], gigaimpact: ["9M", "8M", "7M", "6M", "5M", "4M"], gunkshot: ["9M"], - gyroball: ["9M", "9L46", "8M", "8L46", "7M", "7L38", "6M", "6L34", "5M", "5L45", "4M", "4L45"], + gyroball: ["9M", "9L46", "8M", "8L46", "7M", "7L38", "6M", "6L34", "5M", "5L34", "4M", "4L45"], headbutt: ["8V", "7V", "4T"], hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], highhorsepower: ["9M"], @@ -3979,29 +3979,29 @@ export const Learnsets: {[k: string]: LearnsetData} = { naturalgift: ["4M"], pinmissile: ["8M"], poisonjab: ["9M", "8M", "8V", "7M", "6M", "5M", "4M"], - poisonsting: ["9L1", "8L1", "8V", "7L1", "7V", "6L1", "5L9", "4L9", "3L17"], + poisonsting: ["9L1", "8L1", "8V", "7L1", "7V", "6L1", "5L5", "4L9", "3L17"], protect: ["9M", "8M", "8V", "7M", "7V", "6M", "5M", "4M", "3M"], rage: ["7V"], - rapidspin: ["9L15", "8L15", "7L9", "6L9", "5L13", "4L13"], + rapidspin: ["9L15", "8L15", "7L9", "6L9", "5L9", "4L13"], rest: ["9M", "8M", "8V", "7M", "7V", "6M", "5M", "4M", "3M"], return: ["7M", "7V", "6M", "5M", "4M", "3M"], rockclimb: ["4M"], rockslide: ["9M", "8M", "8V", "7M", "7V", "6M", "5M", "4M", "3T"], rocksmash: ["7V", "6M", "5M", "4M", "3M"], rocktomb: ["9M", "8M", "7M", "6M", "5M", "4M", "3M"], - rollout: ["9L9", "8L9", "7L7", "7V", "6L7", "5L21", "4T", "4L21", "3T"], + rollout: ["9L9", "8L9", "7L7", "7V", "6L7", "5L7", "4T", "4L21", "3T"], round: ["8M", "7M", "6M", "5M"], safeguard: ["8M", "7M", "6M", "5M"], sandattack: ["9L1", "8L1", "8V", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], - sandstorm: ["9M", "9L56", "8M", "8L56", "7M", "7L48", "7V", "6M", "6L42", "5M", "5L52", "4M", "4L52", "3M", "3L62"], - sandtomb: ["9M", "9L31", "8M", "8L31", "7L24", "6L23", "5L33", "4L33", "3L52"], + sandstorm: ["9M", "9L56", "8M", "8L56", "7M", "7L48", "7V", "6M", "6L42", "5M", "5L42", "4M", "4L52", "3M", "3L62"], + sandtomb: ["9M", "9L31", "8M", "8L31", "7L24", "6L23", "5L23", "4L33", "3L52"], scorchingsands: ["9M", "8T"], scratch: ["9L1", "8L1", "8V", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], secretpower: ["6M", "4M", "3M"], seismictoss: ["8V", "7V", "3T"], shadowclaw: ["9M", "8M", "7M", "6M", "5M", "4M"], skullbash: ["7V"], - slash: ["9L36", "8L36", "8V", "7L28", "7V", "6L26", "5L40", "4L40", "3L24"], + slash: ["9L36", "8L36", "8V", "7L28", "7V", "6L26", "5L26", "4L40", "3L24"], sleeptalk: ["9M", "8M", "7M", "7V", "6M", "5T", "4M", "3T"], smackdown: ["9M"], snore: ["8M", "7T", "7V", "6T", "5T", "4T", "3T"], @@ -4016,7 +4016,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { sunnyday: ["9M", "8M", "7M", "7V", "6M", "5M", "4M", "3M"], superfang: ["9M", "7T", "6T", "5T", "4T"], swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], - swift: ["9M", "9L21", "8M", "8L21", "8V", "7L17", "7V", "6L11", "5L15", "4T", "4L15", "3T", "3L33"], + swift: ["9M", "9L21", "8M", "8L21", "8V", "7L17", "7V", "6L11", "5L11", "4T", "4L15", "3T", "3L33"], swordsdance: ["9M", "9L51", "8M", "8L51", "8V", "7M", "7L43", "7V", "6M", "6L38", "5M", "5L38", "4M", "3T"], takedown: ["9M", "7V"], terablast: ["9M"], @@ -4867,7 +4867,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { amnesia: ["9M", "8M", "8V"], attract: ["8M", "7M", "7V", "6M", "5M", "4M", "3M"], batonpass: ["9M", "8M"], - bestow: ["7L19", "6L19", "5L25"], + bestow: ["7L19", "6L19", "5L19"], bide: ["7V"], blizzard: ["9M", "8M", "8V", "7M", "7V", "6M", "5M", "4M", "3M"], bodyslam: ["9M", "8M", "8V", "7L40", "7V", "6L40", "5L40", "3T"], @@ -4937,8 +4937,8 @@ export const Learnsets: {[k: string]: LearnsetData} = { megakick: ["8M", "7V", "3T"], megapunch: ["8M", "7V", "3T"], meteorbeam: ["9M", "8T"], - meteormash: ["9L32", "8L32", "7L50", "6L50", "5L55", "4L43", "3L45"], - metronome: ["9M", "9L20", "8M", "8L20", "8V", "8S1", "7L31", "7V", "6L31", "5L34", "4L31", "3T", "3L29"], + meteormash: ["9L32", "8L32", "7L50", "6L50", "5L52", "4L43", "3L45"], + metronome: ["9M", "9L20", "8M", "8L20", "8V", "8S1", "7L31", "7V", "6L31", "5L31", "4L31", "3T", "3L29"], mimic: ["7V", "3T"], minimize: ["8L8", "8V", "7L25", "7V", "6L25", "5L19", "4L19", "3L21"], mistyexplosion: ["9M", "8T"], @@ -4987,7 +4987,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { splash: ["9L1", "8L1"], spotlight: ["7L1"], stealthrock: ["9M", "8M", "8V", "7T", "6T", "5T", "4M"], - storedpower: ["9M", "9L4", "8M", "8L4", "7L28", "6L28", "5L43"], + storedpower: ["9M", "9L4", "8M", "8L4", "7L28", "6L28", "5L28"], strength: ["7V", "6M", "5M", "4M", "3M"], submission: ["7V"], substitute: ["9M", "8M", "8V", "7M", "7V", "6M", "5M", "4M", "3T"], @@ -5196,7 +5196,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { captivate: ["7L47", "7E", "6L47", "6E", "5L41", "4M", "4L37"], charm: ["9M", "3S1"], confide: ["7M", "6M"], - confuseray: ["9M", "9L20", "8L20", "8V", "7L12", "7V", "6L12", "5L17", "4L17", "3L21"], + confuseray: ["9M", "9L20", "8L20", "8V", "7L12", "7V", "6L12", "5L15", "4L17", "3L21"], covet: ["7T", "6T", "5T"], curse: ["7V"], darkpulse: ["9M", "8M", "8V", "7M", "6M", "5T", "5D", "4M"], @@ -5208,19 +5208,19 @@ export const Learnsets: {[k: string]: LearnsetData} = { encore: ["9M", "8M"], endure: ["9M", "8M", "7V", "4M", "3T"], energyball: ["9M", "8M", "7M", "6M", "5M", "4E"], - extrasensory: ["9L28", "8L28", "7L31", "7E", "6L31", "6E", "5L51", "5E", "4L44", "4E"], + extrasensory: ["9L28", "8L28", "7L31", "7E", "6L31", "6E", "5L39", "5E", "4L44", "4E"], facade: ["9M", "8M", "8V", "7M", "6M", "5M", "4M", "3M"], feintattack: ["7L23", "7E", "7V", "6L20", "6E", "5L20", "5E", "4E", "3E"], - fireblast: ["9M", "9L52", "8M", "8L56", "8V", "7M", "7L42", "7V", "6M", "6L42", "5M", "5L54", "4M", "4L47", "3M"], - firespin: ["9M", "9L40", "8M", "8L40", "8V", "7L15", "7V", "6L12", "5L14", "4L34", "3L41"], + fireblast: ["9M", "9L52", "8M", "8L56", "8V", "7M", "7L42", "7V", "6M", "6L42", "5M", "5L42", "4M", "4L47", "3M"], + firespin: ["9M", "9L40", "8M", "8L40", "8V", "7L15", "7V", "6L12", "5L12", "4L34", "3L41"], flail: ["9E", "8E", "7E", "7V", "6E", "5E", "4E", "3E"], - flameburst: ["7L28", "6L23", "5L24"], + flameburst: ["7L28", "6L23", "5L23"], flamecharge: ["9M", "9E", "8E", "7M", "6M", "5M"], - flamethrower: ["9M", "9L32", "8M", "8L32", "8V", "7M", "7L36", "7V", "6M", "6L34", "5M", "5L37", "4M", "4L24", "3M", "3L29"], + flamethrower: ["9M", "9L32", "8M", "8L32", "8V", "7M", "7L36", "7V", "6M", "6L34", "5M", "5L34", "4M", "4L24", "3M", "3L29"], flareblitz: ["9M", "8M", "7E", "6E", "5E", "4E"], foulplay: ["9M", "8M", "8V", "7T", "6T", "5T"], frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], - grudge: ["8L52", "7L44", "6L44", "5L47", "4L41", "3L37"], + grudge: ["8L52", "7L44", "6L44", "5L44", "4L41", "3L37"], headbutt: ["8V", "7V", "4T"], healingwish: ["9E"], heatwave: ["9M", "8M", "7T", "7E", "6T", "6E", "5T", "5E", "5D", "4T", "4E", "3E", "3S1"], @@ -5229,7 +5229,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], howl: ["9E", "8E", "7E", "6E", "5E", "4E", "3E"], hypnosis: ["9E", "8E", "7E", "7V", "6E", "5E", "4E", "3E"], - imprison: ["9M", "9L36", "8M", "8L36", "7L39", "6L18", "5L21", "4L21", "3L25"], + imprison: ["9M", "9L36", "8M", "8L36", "7L39", "6L18", "5L18", "4L21", "3L25"], incinerate: ["9L16", "8L16", "6M", "5M"], inferno: ["9L48", "8L48", "7L50", "6L50", "5L44"], irontail: ["8M", "8V", "7T", "7V", "6T", "5T", "4M", "3M"], @@ -5241,11 +5241,11 @@ export const Learnsets: {[k: string]: LearnsetData} = { ominouswind: ["4T"], overheat: ["9M", "8M", "7M", "6M", "5M", "4M", "3M"], painsplit: ["9M", "7T", "6T", "5T", "4T"], - payback: ["8M", "7M", "7L18", "6M", "6L18", "5M", "5L34", "4M", "4L31"], + payback: ["8M", "7M", "7L18", "6M", "6L18", "5M", "5L31", "4M", "4L31"], powerswap: ["8M", "7E", "6E", "5E", "4E"], protect: ["9M", "8M", "8V", "7M", "7V", "6M", "5M", "4M", "3M"], psychup: ["9M", "7M", "6M", "5M", "4M", "4E", "3E"], - quickattack: ["9L8", "8L8", "8V", "7L10", "7V", "6L10", "5L11", "4L11", "3L13", "3S0"], + quickattack: ["9L8", "8L8", "8V", "7L10", "7V", "6L10", "5L10", "4L11", "3L13", "3S0"], rage: ["7V"], reflect: ["8V", "7V"], rest: ["9M", "8M", "8V", "7M", "7V", "6M", "5M", "4M", "3M"], @@ -5271,7 +5271,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { terablast: ["9M"], toxic: ["8V", "7M", "7V", "6M", "5M", "4M", "3M"], weatherball: ["9M", "8M"], - willowisp: ["9M", "9L24", "8M", "8L24", "8V", "7M", "7L20", "6M", "6L20", "5M", "5L31", "4M", "4L14", "3L17", "3S0"], + willowisp: ["9M", "9L24", "8M", "8L24", "8V", "7M", "7L20", "6M", "6L20", "5M", "5L26", "4M", "4L14", "3L17", "3S0"], zenheadbutt: ["9M", "8M", "7T", "6T", "5T", "4T"], }, eventData: [ @@ -5993,20 +5993,20 @@ export const Learnsets: {[k: string]: LearnsetData} = { zubat: { learnset: { absorb: ["8L1", "8V", "7L1"], - acrobatics: ["8M", "7M", "6M", "6L30", "5M", "5L33"], + acrobatics: ["8M", "7M", "6M", "6L30", "5M", "5L30"], aerialace: ["7M", "6M", "5M", "4M", "3M"], agility: ["8M"], aircutter: ["8L25", "7L19", "6L19", "5L25", "4T", "4L25", "3L31"], airslash: ["8M", "8L50", "8V", "7L41", "6L41", "5L45", "4L41"], assurance: ["8M"], - astonish: ["8L5", "7L7", "6L7", "5L9", "4L9", "3L6"], + astonish: ["8L5", "7L7", "6L7", "5L8", "4L9", "3L6"], attract: ["8M", "7M", "7V", "6M", "5M", "4M", "3M"], bide: ["7V"], - bite: ["8L30", "8V", "7L11", "7V", "6L11", "5L13", "4L13", "3L16"], + bite: ["8L30", "8V", "7L11", "7V", "6L11", "5L12", "4L13", "3L16"], bravebird: ["8M", "7E", "6E", "5E", "4E"], captivate: ["4M"], confide: ["7M", "6M"], - confuseray: ["8L45", "8V", "7L17", "7V", "6L17", "5L21", "4L21", "3L26"], + confuseray: ["8L45", "8V", "7L17", "7V", "6L17", "5L19", "4L21", "3L26"], crunch: ["8M"], curse: ["8E", "7E", "7V", "6E", "5E", "4E", "3E"], defog: ["8E", "7T", "7E", "6E", "5E", "4M"], @@ -6057,9 +6057,9 @@ export const Learnsets: {[k: string]: LearnsetData} = { substitute: ["8M", "8V", "7M", "7V", "6M", "5M", "4M", "3T"], sunnyday: ["8M", "7M", "7V", "6M", "5M", "4M", "3M"], superfang: ["7T", "6T", "5T", "5D", "4T"], - supersonic: ["8L1", "8V", "7L5", "7V", "6L4", "5L5", "5D", "4L5", "3L6"], + supersonic: ["8L1", "8V", "7L5", "7V", "6L4", "5L4", "5D", "4L5", "3L6"], swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], - swift: ["8M", "8V", "7L23", "7V", "6L23", "5L24", "4T", "3T"], + swift: ["8M", "8V", "7L23", "7V", "6L23", "5L23", "4T", "3T"], tailwind: ["7T", "6T", "5T", "4T"], takedown: ["7V"], taunt: ["8M", "8V", "7M", "6M", "5M", "4M", "3M"], @@ -6072,7 +6072,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { venomdrench: ["8M", "7E", "6E"], venoshock: ["8M", "8L40", "7M", "7L37", "6M", "6L37", "5M"], whirlwind: ["8E", "7E", "7V", "6E", "5E", "4E", "3E"], - wingattack: ["8E", "8V", "7L13", "7V", "6L13", "5L17", "4L17", "3L21"], + wingattack: ["8E", "8V", "7L13", "7V", "6L13", "5L15", "4L17", "3L21"], zenheadbutt: ["8M", "7T", "7E", "6T", "6E", "5T", "5E", "4T", "4E"], }, encounters: [ @@ -6083,20 +6083,20 @@ export const Learnsets: {[k: string]: LearnsetData} = { golbat: { learnset: { absorb: ["8L1", "8V", "7L1"], - acrobatics: ["8M", "7M", "6M", "6L33", "5M", "5L39"], + acrobatics: ["8M", "7M", "6M", "6L33", "5M", "5L33"], aerialace: ["7M", "6M", "5M", "4M", "3M"], agility: ["8M"], aircutter: ["8L27", "7L19", "6L19", "5L27", "4T", "4L27", "3L35"], - airslash: ["8M", "8L62", "8V", "7L48", "6L48", "5L57", "4L51"], + airslash: ["8M", "8L62", "8V", "7L48", "6L48", "5L52", "4L51"], assurance: ["8M"], astonish: ["8L1", "7L1", "6L1", "5L1", "4L1", "3L1"], attract: ["8M", "7M", "7V", "6M", "5M", "4M", "3M"], bide: ["7V"], - bite: ["8L34", "8V", "7L1", "7V", "6L1", "5L13", "4L13", "3L16"], + bite: ["8L34", "8V", "7L1", "7V", "6L1", "5L12", "4L13", "3L16"], bravebird: ["8M"], captivate: ["4M"], confide: ["7M", "6M"], - confuseray: ["8L55", "8V", "7L17", "7V", "6L17", "5L21", "4L21", "3L28"], + confuseray: ["8L55", "8V", "7L17", "7V", "6L17", "5L19", "4L21", "3L28"], crunch: ["8M", "8V"], curse: ["7V"], defog: ["7T", "4M"], @@ -6110,7 +6110,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], gigadrain: ["8M", "7T", "7V", "6T", "5T", "4M", "3M"], gigaimpact: ["8M", "7M", "6M", "5M", "4M"], - haze: ["8L41", "8V", "7L40", "7V", "6L40", "5L51", "4L45", "3L56"], + haze: ["8L41", "8V", "7L40", "7V", "6L40", "5L47", "4L45", "3L56"], headbutt: ["8V"], heatwave: ["8M", "7T", "6T", "5T", "4T"], hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], @@ -6124,7 +6124,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { ominouswind: ["4T"], payback: ["8M", "7M", "6M", "5M", "4M"], pluck: ["5M", "4M"], - poisonfang: ["8L15", "7L27", "6L27", "5L45", "4L39", "3L49"], + poisonfang: ["8L15", "7L27", "6L27", "5L42", "4L39", "3L49"], protect: ["8M", "8V", "7M", "7V", "6M", "5M", "4M", "3M"], quickattack: ["8V"], quickguard: ["8L20", "7L51", "6L51"], @@ -6161,7 +6161,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { venomdrench: ["8M"], venoshock: ["8M", "8L48", "7M", "7L43", "6M", "6L43", "5M"], whirlwind: ["8V", "7V"], - wingattack: ["8V", "7L13", "7V", "6L13", "5L17", "4L17", "3L21"], + wingattack: ["8V", "7L13", "7V", "6L13", "5L15", "4L17", "3L21"], zenheadbutt: ["8M", "7T", "6T", "5T", "4T"], }, encounters: [ @@ -6175,19 +6175,19 @@ export const Learnsets: {[k: string]: LearnsetData} = { crobat: { learnset: { absorb: ["8L1", "7L1"], - acrobatics: ["8M", "7M", "6M", "6L33", "5M", "5L39"], + acrobatics: ["8M", "7M", "6M", "6L33", "5M", "5L33"], aerialace: ["7M", "6M", "5M", "4M", "3M"], agility: ["8M"], aircutter: ["8L27", "7L19", "6L19", "5L27", "4T", "4L27", "3L35"], - airslash: ["8M", "8L62", "7L48", "7S1", "6L48", "5L57", "4L51", "4S0"], + airslash: ["8M", "8L62", "7L48", "7S1", "6L48", "5L52", "4L51", "4S0"], assurance: ["8M"], astonish: ["8L1", "7L1", "6L1", "5L1", "4L1", "3L1"], attract: ["8M", "7M", "7V", "6M", "5M", "4M", "3M"], - bite: ["8L34", "7L1", "7V", "6L1", "5L13", "4L13", "3L16"], + bite: ["8L34", "7L1", "7V", "6L1", "5L12", "4L13", "3L16"], bravebird: ["8M"], captivate: ["4M"], confide: ["7M", "6M"], - confuseray: ["8L55", "7L17", "7V", "6L17", "5L21", "4L21", "3L28"], + confuseray: ["8L55", "7L17", "7V", "6L17", "5L19", "4L21", "3L28"], crosspoison: ["8M", "8L0", "7L1", "6L1", "5L1", "4L1"], crunch: ["8M"], curse: ["7V"], @@ -6203,7 +6203,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], gigadrain: ["8M", "7T", "7V", "6T", "5T", "4M", "3M"], gigaimpact: ["8M", "7M", "6M", "5M", "4M"], - haze: ["8L41", "7L40", "7V", "6L40", "5L51", "4L45", "3L56"], + haze: ["8L41", "7L40", "7V", "6L40", "5L47", "4L45", "3L56"], heatwave: ["8M", "7T", "6T", "5T", "4T", "4S0"], hex: ["8M"], hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], @@ -6217,7 +6217,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { ominouswind: ["4T"], payback: ["8M", "7M", "6M", "5M", "4M"], pluck: ["5M", "4M"], - poisonfang: ["8L15", "7L27", "6L27", "5L45", "4L39", "3L49"], + poisonfang: ["8L15", "7L27", "6L27", "5L42", "4L39", "3L49"], protect: ["8M", "7M", "7V", "6M", "5M", "4M", "3M"], quickguard: ["8L20", "7L51", "6L51"], raindance: ["8M", "7M", "6M", "5M", "4M", "3M"], @@ -6250,7 +6250,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { uturn: ["8M", "7M", "6M", "5M", "4M"], venomdrench: ["8M"], venoshock: ["8M", "8L48", "7M", "7L43", "6M", "6L43", "5M"], - wingattack: ["7L13", "7V", "6L13", "5L17", "4L17", "3L21"], + wingattack: ["7L13", "7V", "6L13", "5L15", "4L17", "3L21"], xscissor: ["8M", "7M", "6M", "5M", "4M"], zenheadbutt: ["8M", "7T", "6T", "5T", "4T"], }, @@ -7941,7 +7941,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { psyduck: { learnset: { aerialace: ["7M", "6M", "5M", "4M", "3M"], - amnesia: ["9M", "9L34", "8M", "8L34", "8V", "7L37", "6L43", "5L48", "4L44"], + amnesia: ["9M", "9L34", "8M", "8L34", "8V", "7L37", "6L43", "5L43", "4L44"], aquatail: ["9L24", "8L24", "7T", "7L28", "6T", "6L29", "5T", "5L32", "4T"], attract: ["8M", "7M", "7V", "6M", "5M", "4M", "3M"], bide: ["7V"], @@ -7956,12 +7956,12 @@ export const Learnsets: {[k: string]: LearnsetData} = { clearsmog: ["9E", "8E", "7E", "6E"], confide: ["7M", "6M"], confuseray: ["9M", "9E", "8E", "7E", "6E", "5E", "4E"], - confusion: ["9L6", "8L6", "8V", "7L10", "7V", "6L11", "5L18", "4L18", "3L16", "3S0"], + confusion: ["9L6", "8L6", "8V", "7L10", "7V", "6L11", "5L15", "4L18", "3L16", "3S0"], counter: ["7V", "3T"], crosschop: ["9E", "8E", "7E", "7V", "6E", "5E", "4E", "3E"], curse: ["7V"], dig: ["9M", "8M", "8V", "7V", "6M", "5M", "4M", "3M"], - disable: ["9L15", "8L15", "8V", "7L19", "7V", "6L11", "5L14", "4L14", "3L10", "3S0"], + disable: ["9L15", "8L15", "8V", "7L19", "7V", "6L11", "5L11", "4L14", "3L10", "3S0"], dive: ["8M", "6M", "5M", "4T", "3M"], doubleedge: ["9M", "7V", "3T"], doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], @@ -7976,7 +7976,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { focuspunch: ["9M", "7T", "6T", "4M", "3M"], foresight: ["7E", "7V", "6E", "5E", "4E", "3E"], frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], - furyswipes: ["9L9", "8L9", "8V", "7L13", "7V", "6L15", "5L27", "4L27", "3L40"], + furyswipes: ["9L9", "8L9", "8V", "7L13", "7V", "6L15", "5L22", "4L27", "3L40"], futuresight: ["8M", "7E", "7V", "6E", "5E", "4E", "3E"], hail: ["8M", "7M", "6M", "5M", "4M", "3M"], haze: ["9M"], @@ -7984,7 +7984,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { helpinghand: ["9M"], hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], honeclaws: ["6M", "5M"], - hydropump: ["9M", "8M", "8L36", "8V", "7L40", "7V", "6L46", "5L53", "4L48", "3L50"], + hydropump: ["9M", "8M", "8L36", "8V", "7L40", "7V", "6L46", "5L46", "4L48", "3L50"], hypnosis: ["9E", "8E", "7E", "7V", "6E", "5E", "4E", "3E"], icebeam: ["9M", "8M", "8V", "7M", "7V", "6M", "5M", "4M", "3M"], icepunch: ["9M", "8M", "8V", "7T", "7V", "6T", "5T", "4T", "3T"], @@ -8012,7 +8012,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { psybeam: ["9M", "9E", "8E", "8V", "7E", "7V", "6E", "5E", "4E", "3E"], psychic: ["9M", "8M", "8V", "7M", "7V", "6M", "5M", "4M", "4E", "3E"], psychicnoise: ["9M"], - psychup: ["9M", "9L30", "8L30", "7M", "7L34", "7V", "6M", "6L39", "5M", "5L40", "4M", "4L35", "3T", "3L31"], + psychup: ["9M", "9L30", "8L30", "7M", "7L34", "7V", "6M", "6L39", "5M", "5L39", "4M", "4L35", "3T", "3L31"], psyshock: ["9M", "8M", "7M", "6M", "5M"], rage: ["7V"], raindance: ["9M", "8M", "7M", "7V", "6M", "5M", "4M", "3M"], @@ -8024,7 +8024,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { round: ["8M", "7M", "6M", "5M"], scald: ["8M", "8V", "7M", "6M", "5M"], scratch: ["9L1", "8L1", "8V", "7L1", "7V", "6L1", "5L1", "4L1", "3L1", "3S1"], - screech: ["9L21", "8M", "8L21", "8V", "7L22", "7V", "6L25", "5L31", "4L31", "3L23", "3S0"], + screech: ["9L21", "8M", "8L21", "8V", "7L22", "7V", "6L25", "5L25", "4L31", "3L23", "3S0"], secretpower: ["7E", "6M", "6E", "5E", "4M", "3M"], seismictoss: ["8V", "7V", "3T"], shadowclaw: ["9M", "8M", "7M", "6M", "5M", "4M"], @@ -8042,7 +8042,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], swift: ["9M", "8M", "7V", "4T", "3T"], synchronoise: ["7E", "6E", "5E"], - tailwhip: ["9L1", "8L1", "8V", "7L4", "7V", "6L4", "5L5", "4L5", "3L5", "3S0", "3S1"], + tailwhip: ["9L1", "8L1", "8V", "7L4", "7V", "6L4", "5L4", "4L5", "3L5", "3S0", "3S1"], takedown: ["9M", "7V"], taunt: ["9M"], telekinesis: ["7T", "5M"], @@ -8052,14 +8052,14 @@ export const Learnsets: {[k: string]: LearnsetData} = { trailblaze: ["9M"], vacuumwave: ["9M"], waterfall: ["9M", "8M", "8V", "7M", "7V", "6M", "5M", "4M", "3M"], - watergun: ["9L3", "8L3", "8V", "7L7", "7V", "6L8", "5L9", "4L9"], - waterpulse: ["9M", "9L12", "8L12", "7T", "7L16", "6T", "6L18", "5L22", "4M", "4L22", "3M"], + watergun: ["9L3", "8L3", "8V", "7L7", "7V", "6L8", "5L8", "4L9"], + waterpulse: ["9M", "9L12", "8L12", "7T", "7L16", "6T", "6L18", "5L18", "4M", "4L22", "3M"], watersport: ["7L1", "6L1", "5L1", "5D", "4L1", "3L1", "3S1"], whirlpool: ["9M", "8M", "7V", "4M"], - wonderroom: ["9L39", "8M", "8L39", "7T", "7L43", "6T", "6L50", "5T", "5L57"], + wonderroom: ["9L39", "8M", "8L39", "7T", "7L43", "6T", "6L50", "5T", "5L50"], worryseed: ["7T", "6T", "5T", "4T"], yawn: ["9E", "8E", "7E", "6E", "5E", "4E"], - zenheadbutt: ["9M", "9L18", "8M", "8L18", "7T", "7L25", "6T", "6L29", "5T", "5L44", "4T", "4L40"], + zenheadbutt: ["9M", "9L18", "8M", "8L18", "7T", "7L25", "6T", "6L29", "5T", "5L29", "4T", "4L40"], }, eventData: [ {generation: 3, level: 27, gender: "M", nature: "Lax", ivs: {hp: 31, atk: 16, def: 12, spa: 29, spd: 31, spe: 14}, abilities: ["damp"], moves: ["tailwhip", "confusion", "disable", "screech"], pokeball: "pokeball"}, @@ -8072,7 +8072,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { golduck: { learnset: { aerialace: ["7M", "6M", "5M", "4M", "3M"], - amnesia: ["9M", "9L36", "8M", "8L36", "8V", "7L41", "6L49", "5L56", "4L50"], + amnesia: ["9M", "9L36", "8M", "8L36", "8V", "7L41", "6L49", "5L49", "4L50"], aquajet: ["9L1", "8L1", "7L1", "6L1", "5L1", "4L1"], aquatail: ["9L24", "8L24", "7T", "7L28", "6T", "6L32", "5T", "5L32", "4T"], attract: ["8M", "7M", "7V", "6M", "5M", "4M", "3M"], @@ -8088,11 +8088,11 @@ export const Learnsets: {[k: string]: LearnsetData} = { chillingwater: ["9M"], confide: ["7M", "6M"], confuseray: ["9M"], - confusion: ["9L1", "8L1", "8V", "7L10", "7V", "6L11", "5L18", "4L18", "3L16"], + confusion: ["9L1", "8L1", "8V", "7L10", "7V", "6L11", "5L15", "4L18", "3L16"], counter: ["7V", "3T"], curse: ["7V"], dig: ["9M", "8M", "8V", "7V", "6M", "5M", "4M", "3M"], - disable: ["9L15", "8L15", "8V", "7L19", "7V", "6L11", "5L14", "4L14", "3L1"], + disable: ["9L15", "8L15", "8V", "7L19", "7V", "6L11", "5L11", "4L14", "3L1"], dive: ["8M", "6M", "5M", "4T", "3M"], doubleedge: ["9M", "7V", "3T"], doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], @@ -8108,7 +8108,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { focuspunch: ["9M", "7T", "6T", "4M", "3M"], frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], furycutter: ["7V", "4T", "3T"], - furyswipes: ["9L9", "8L9", "8V", "7L13", "7V", "6L15", "5L27", "4L27", "3L44"], + furyswipes: ["9L9", "8L9", "8V", "7L13", "7V", "6L15", "5L22", "4L27", "3L44"], futuresight: ["9M", "8M"], gigaimpact: ["9M", "8M", "7M", "6M", "5M", "4M"], grassknot: ["9M"], @@ -8118,7 +8118,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { helpinghand: ["9M"], hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], honeclaws: ["6M", "5M"], - hydropump: ["9M", "9L40", "8M", "8L40", "8V", "7L46", "7V", "7S1", "6L54", "5L63", "4L56", "3L58"], + hydropump: ["9M", "9L40", "8M", "8L40", "8V", "7L46", "7V", "7S1", "6L54", "5L54", "4L56", "3L58"], hyperbeam: ["9M", "8M", "8V", "7M", "7V", "6M", "5M", "4M", "3M"], icebeam: ["9M", "8M", "8V", "7M", "7V", "6M", "5M", "4M", "3M"], icepunch: ["9M", "8M", "8V", "7T", "7V", "6T", "5T", "4T", "3T"], @@ -8147,7 +8147,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { psybeam: ["9M", "8V"], psychic: ["9M", "8M", "8V", "7M", "6M", "5M", "4M"], psychicnoise: ["9M"], - psychup: ["9M", "9L30", "8L30", "7M", "7L36", "7V", "6M", "6L43", "5M", "5L44", "4M", "4L37", "3T", "3L31", "3S0"], + psychup: ["9M", "9L30", "8L30", "7M", "7L36", "7V", "6M", "6L43", "5M", "5L43", "4M", "4L37", "3T", "3L31", "3S0"], psyshock: ["9M", "8M", "7M", "6M", "5M"], rage: ["7V"], raindance: ["9M", "8M", "7M", "7V", "6M", "5M", "4M", "3M"], @@ -8159,7 +8159,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { round: ["8M", "7M", "6M", "5M"], scald: ["8M", "8V", "7M", "7S1", "6M", "5M"], scratch: ["9L1", "8L1", "8V", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], - screech: ["9L21", "8M", "8L21", "8V", "7L22", "7V", "6L25", "5L31", "4L31", "3L23"], + screech: ["9L21", "8M", "8L21", "8V", "7L22", "7V", "6L25", "5L25", "4L31", "3L23"], secretpower: ["6M", "4M", "3M"], seismictoss: ["8V", "7V", "3T"], shadowclaw: ["9M", "8M", "7M", "6M", "5M", "4M"], @@ -8186,13 +8186,13 @@ export const Learnsets: {[k: string]: LearnsetData} = { vacuumwave: ["9M"], waterfall: ["9M", "8M", "8V", "7M", "7V", "6M", "5M", "4M", "3M", "3S0"], watergun: ["9L1", "8L1", "8V", "7L1", "7V", "6L1", "5L1", "4L1"], - waterpulse: ["9M", "9L12", "8L12", "7T", "7L16", "6T", "6L18", "5L22", "4M", "4L22", "3M"], + waterpulse: ["9M", "9L12", "8L12", "7T", "7L16", "6T", "6L18", "5L18", "4M", "4L22", "3M"], watersport: ["7L1", "6L1", "5L1", "4L1", "3L1"], whirlpool: ["9M", "8M", "7V", "4M"], - wonderroom: ["9L45", "8M", "8L45", "7T", "7L51", "6T", "6L60", "5T", "5L69"], + wonderroom: ["9L45", "8M", "8L45", "7T", "7L51", "6T", "6L60", "5T", "5L60"], worryseed: ["7T", "6T", "5T", "4T"], yawn: ["8V"], - zenheadbutt: ["9M", "9L18", "8M", "8L18", "7T", "7L25", "6T", "6L25", "5T", "5L50", "4T", "4L44"], + zenheadbutt: ["9M", "9L18", "8M", "8L18", "7T", "7L25", "6T", "6L25", "5T", "5L29", "4T", "4L44"], }, eventData: [ {generation: 3, level: 33, moves: ["charm", "waterfall", "psychup", "brickbreak"]}, @@ -8542,7 +8542,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { growlithe: { learnset: { aerialace: ["7M", "6M", "5M", "4M", "3M"], - agility: ["9M", "9L20", "8M", "8L20", "8V", "7L30", "7V", "6L30", "5L42", "4L39", "3L43"], + agility: ["9M", "9L20", "8M", "8L20", "8V", "7L30", "7V", "6L30", "5L30", "4L39", "3L43"], attract: ["8M", "7M", "7V", "6M", "5M", "4M", "3M"], bide: ["7V"], bite: ["9L8", "8L8", "8V", "7L1", "7V", "6L1", "5L1", "5D", "4L1", "3L1", "3S1", "3S2"], @@ -8553,7 +8553,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { closecombat: ["9M", "8M", "7E", "6E", "5E"], confide: ["7M", "6M"], covet: ["9E", "8E", "7T", "7E", "6T", "6E", "5T", "5E"], - crunch: ["9M", "9L32", "8M", "8L32", "8V", "7L39", "7E", "7V", "6L39", "6E", "5L45", "5E", "4L42", "4E", "3E"], + crunch: ["9M", "9L32", "8M", "8L32", "8V", "7L39", "7E", "7V", "6L39", "6E", "5L39", "5E", "4L42", "4E", "3E"], curse: ["9M", "7V"], dig: ["9M", "8M", "8V", "7V", "6M", "5M", "4M", "3M"], doubleedge: ["9M", "9E", "8E", "7E", "7V", "6E", "5E", "4E", "3T"], @@ -8565,27 +8565,27 @@ export const Learnsets: {[k: string]: LearnsetData} = { endure: ["9M", "8M", "7V", "5D", "4M", "3T"], facade: ["9M", "8M", "8V", "7M", "6M", "5M", "4M", "3M"], fireblast: ["9M", "8M", "8V", "7M", "7V", "6M", "5M", "4M", "3M"], - firefang: ["9M", "9L24", "8M", "8L24", "7L21", "6L21", "5L28", "4L28"], + firefang: ["9M", "9L24", "8M", "8L24", "7L21", "6L21", "5L21", "4L28"], firespin: ["9M", "8M", "7E", "7V", "6E", "5E", "4E", "3E"], - flameburst: ["7L28", "6L28", "5L31"], + flameburst: ["7L28", "6L28", "5L28"], flamecharge: ["9M", "7M", "6M", "5M"], - flamethrower: ["9M", "9L40", "8M", "8L40", "8V", "7M", "7L34", "7V", "6M", "6L34", "5M", "5L39", "4M", "4L34", "3M", "3L49", "3S2"], - flamewheel: ["9L12", "8L12", "7L17", "7V", "6L17", "5L20", "4L20", "3L31", "3S0"], - flareblitz: ["9M", "9L56", "8M", "8L56", "8V", "7L45", "7E", "6L45", "6E", "5L56", "5E", "4L48", "4E"], + flamethrower: ["9M", "9L40", "8M", "8L40", "8V", "7M", "7L34", "7V", "6M", "6L34", "5M", "5L34", "4M", "4L34", "3M", "3L49", "3S2"], + flamewheel: ["9L12", "8L12", "7L17", "7V", "6L17", "5L17", "4L20", "3L31", "3S0"], + flareblitz: ["9M", "9L56", "8M", "8L56", "8V", "7L45", "7E", "6L45", "6E", "5L45", "5E", "4L48", "4E"], frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], headbutt: ["8V", "7V", "4T"], - heatwave: ["9M", "8M", "8V", "7T", "7L41", "7E", "6T", "6L41", "6E", "5T", "5L51", "5E", "4T", "4L45", "4E", "3E"], - helpinghand: ["9M", "9L16", "8M", "8L16", "8V", "7T", "7L12", "6T", "6L12", "5T", "5L17", "4T", "4L17", "3L37"], + heatwave: ["9M", "8M", "8V", "7T", "7L41", "7E", "6T", "6L41", "6E", "5T", "5L41", "5E", "4T", "4L45", "4E", "3E"], + helpinghand: ["9M", "9L16", "8M", "8L16", "8V", "7T", "7L12", "6T", "6L12", "5T", "5L12", "4T", "4L17", "3L37"], hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], howl: ["9L4", "8L4", "7E", "6E", "5E", "4E", "3E"], incinerate: ["6M", "5M"], irontail: ["8M", "8V", "7T", "7E", "7V", "6T", "6E", "5T", "5E", "4M", "3M"], - leer: ["9L1", "8L1", "8V", "7L8", "7V", "6L8", "5L9", "4L9", "3L13", "3S0"], + leer: ["9L1", "8L1", "8V", "7L8", "7V", "6L8", "5L8", "4L9", "3L13", "3S0"], mimic: ["7V", "3T"], morningsun: ["9E", "8E", "7E", "6E", "5E", "4E"], mudslap: ["4T"], naturalgift: ["4M"], - odorsleuth: ["7L10", "6L10", "5L14", "4L14", "3L19", "3S0"], + odorsleuth: ["7L10", "6L10", "5L10", "4L14", "3L19", "3S0"], outrage: ["9M", "8M", "8V", "7T", "7L43", "6T", "6L43", "5T", "5L43"], overheat: ["9M", "8M", "7M", "6M", "5M", "4M", "3M"], playrough: ["9M", "9L48", "8M", "8L48", "8V"], @@ -8595,9 +8595,9 @@ export const Learnsets: {[k: string]: LearnsetData} = { ragingfury: ["9E"], reflect: ["8V", "7V"], rest: ["9M", "8M", "8V", "7M", "7V", "6M", "5M", "4M", "3M"], - retaliate: ["9L28", "8M", "8L28", "7L32", "6M", "6L32", "5M", "5L48"], + retaliate: ["9L28", "8M", "8L28", "7L32", "6M", "6L32", "5M", "5L32"], return: ["7M", "7V", "6M", "5M", "4M", "3M"], - reversal: ["9M", "9L52", "8M", "8L52", "7L19", "6L19", "5L25", "4L25"], + reversal: ["9M", "9L52", "8M", "8L52", "7L19", "6L19", "5L19", "4L25"], roar: ["9M", "9L44", "8L44", "8V", "7M", "7L1", "7V", "6M", "6L1", "5M", "5L1", "5D", "4M", "4L1", "3M", "3L1", "3S1"], rocksmash: ["7V", "6M", "5M", "4M", "3M"], round: ["8M", "7M", "6M", "5M"], @@ -8613,7 +8613,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { sunnyday: ["9M", "8M", "7M", "7V", "6M", "5M", "4M", "3M"], swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], swift: ["9M", "8M", "7V", "4T", "3T"], - takedown: ["9M", "9L36", "8L36", "8V", "7L23", "7V", "6L23", "5L34", "4L31", "3L25", "3S0", "3S2"], + takedown: ["9M", "9L36", "8L36", "8V", "7L23", "7V", "6L23", "5L23", "4L31", "3L25", "3S0", "3S2"], temperflare: ["9M"], terablast: ["9M"], thief: ["9M", "8M", "7M", "6M", "5M", "4M", "3M"], @@ -8718,7 +8718,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { dragonrage: ["7V"], ember: ["9L1", "8L1", "8V", "7V", "3L1"], endure: ["9M", "8M", "7V", "4M", "3T"], - extremespeed: ["9L0", "9S2", "8L0", "7L34", "7V", "7S1", "6L34", "5L39", "4L39", "4S0", "3L49"], + extremespeed: ["9L0", "9S2", "8L0", "7L34", "7V", "7S1", "6L34", "5L34", "4L39", "4S0", "3L49"], facade: ["9M", "8M", "8V", "7M", "6M", "5M", "4M", "3M"], fireblast: ["9M", "8M", "8V", "7M", "7V", "6M", "5M", "4M", "3M"], firefang: ["9M", "9L1", "8M", "8L1", "7L1", "6L1", "5L1", "4L1"], @@ -11959,7 +11959,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { flashcannon: ["9M", "9L32", "8M", "8L32", "8V", "7M", "7L31", "6M", "6L31", "5M", "5L35", "4M"], frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], gravity: ["9M", "7T", "6T", "5T", "5D", "4T"], - gyroball: ["9M", "9L16", "8M", "8L16", "7M", "7L47", "6M", "6L47", "5M", "5L54", "4M", "4L49"], + gyroball: ["9M", "9L16", "8M", "8L16", "7M", "7L47", "6M", "6L47", "5M", "5L53", "4M", "4L49"], headbutt: ["8V"], heavyslam: ["9M"], helpinghand: ["9M"], @@ -11973,7 +11973,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { magnetrise: ["9L28", "8L28", "7T", "7L43", "6T", "6L43", "5T", "5L49", "4T", "4L46"], metalsound: ["9M", "9L40", "8L40", "7L25", "6L25", "5L1", "5D", "4L1", "3L1"], mimic: ["7V", "3T"], - mirrorshot: ["7L23", "6L23", "5L46", "4L43"], + mirrorshot: ["7L23", "6L23", "5L25", "4L43"], naturalgift: ["4M"], protect: ["9M", "8M", "8V", "7M", "7V", "6M", "5M", "4M", "3M"], psychup: ["7M", "6M", "5M", "4M"], @@ -11993,12 +11993,12 @@ export const Learnsets: {[k: string]: LearnsetData} = { signalbeam: ["7T", "6T", "5T", "4T"], sleeptalk: ["9M", "8M", "7M", "7V", "6M", "5T", "4M", "3T"], snore: ["8M", "7T", "7V", "6T", "5T", "4T", "3T"], - sonicboom: ["8V", "7L17", "7V", "6L11", "5L14", "4L14", "3L16"], - spark: ["9L20", "8L20", "7L19", "6L19", "5L22", "4L22", "3L26"], + sonicboom: ["8V", "7L17", "7V", "6L11", "5L11", "4L14", "3L16"], + spark: ["9L20", "8L20", "7L19", "6L19", "5L21", "4L22", "3L26"], steelbeam: ["9M", "8T"], substitute: ["9M", "8M", "8V", "7M", "7V", "6M", "5M", "4M", "3T"], sunnyday: ["9M", "8M", "7M", "6M", "5M", "4M", "3M"], - supersonic: ["9L4", "8L4", "8V", "7L1", "7V", "6L4", "5L11", "4L11", "3L11"], + supersonic: ["9L4", "8L4", "8V", "7L1", "7V", "6L4", "5L4", "4L11", "3L11"], swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], swift: ["9M", "8M", "7V", "4T", "3T", "3L38"], tackle: ["9L1", "8L1", "8V", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], @@ -12008,11 +12008,11 @@ export const Learnsets: {[k: string]: LearnsetData} = { thunder: ["9M", "8M", "8V", "7M", "7V", "6M", "5M", "4M", "3M"], thunderbolt: ["9M", "8M", "8V", "7M", "7V", "6M", "5M", "4M", "3M"], thundershock: ["9L1", "8L1", "8V", "7L5", "7V", "6L7", "5L6", "5D", "4L6", "3L6"], - thunderwave: ["9M", "9L8", "8M", "8L8", "8V", "7M", "7L11", "7V", "6M", "6L13", "5M", "5L17", "4M", "4L17", "3T", "3L21"], + thunderwave: ["9M", "9L8", "8M", "8L8", "8V", "7M", "7L11", "7V", "6M", "6L13", "5M", "5L15", "4M", "4L17", "3T", "3L21"], toxic: ["8V", "7M", "7V", "6M", "5M", "4M", "3M"], voltswitch: ["9M", "8M", "7M", "6M", "5M"], wildcharge: ["9M", "8M", "7M", "6M", "5M"], - zapcannon: ["9L52", "8L52", "7L49", "7V", "6L49", "5L59", "4L54", "3L50"], + zapcannon: ["9L52", "8L52", "7L49", "7V", "6L49", "5L57", "4L54", "3L50"], }, encounters: [ {generation: 1, level: 16}, @@ -12052,11 +12052,11 @@ export const Learnsets: {[k: string]: LearnsetData} = { lightscreen: ["9M", "9L52", "8M", "8L52", "8V", "7M", "7L13", "6M", "5M", "4M"], lockon: ["9L58", "8L58", "7L49", "7V", "6L49", "5L30", "4L27", "3L35"], magiccoat: ["7T", "6T", "5T", "4T"], - magnetbomb: ["7L1", "6L17", "5L34", "4L30"], + magnetbomb: ["7L1", "6L17", "5L18", "4L30"], magnetrise: ["9L28", "8L28", "7T", "7L53", "6T", "6L53", "5T", "5L54", "4T", "4L50"], metalsound: ["9M", "9L46", "8L46", "7L25", "6L25", "5L1", "4L1", "3L1"], mimic: ["7V", "3T"], - mirrorshot: ["7L23", "6L23", "5L50", "4L46"], + mirrorshot: ["7L23", "6L23", "5L25", "4L46"], naturalgift: ["4M"], protect: ["9M", "8M", "8V", "7M", "7V", "6M", "5M", "4M", "3M"], psychup: ["7M", "6M", "5M", "4M"], @@ -12077,8 +12077,8 @@ export const Learnsets: {[k: string]: LearnsetData} = { signalbeam: ["7T", "6T", "5T", "4T"], sleeptalk: ["9M", "8M", "7M", "7V", "6M", "5T", "4M", "3T"], snore: ["8M", "7T", "7V", "6T", "5T", "4T", "3T"], - sonicboom: ["8V", "7L17", "7V", "6L1", "5L14", "4L14", "3L16"], - spark: ["9L20", "8L20", "7L19", "6L19", "5L22", "4L22", "3L26"], + sonicboom: ["8V", "7L17", "7V", "6L1", "5L11", "4L14", "3L16"], + spark: ["9L20", "8L20", "7L19", "6L19", "5L21", "4L22", "3L26"], steelbeam: ["9M", "8T"], substitute: ["9M", "8M", "8V", "7M", "7V", "6M", "5M", "4M", "3T"], sunnyday: ["9M", "8M", "7M", "6M", "5M", "4M", "3M"], @@ -12092,7 +12092,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { thunder: ["9M", "8M", "8V", "7M", "7V", "6M", "5M", "4M", "3M", "3S0"], thunderbolt: ["9M", "8M", "8V", "7M", "7V", "6M", "5M", "4M", "3M"], thundershock: ["9L1", "8L1", "8V", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], - thunderwave: ["9M", "9L1", "8M", "8L1", "8V", "7M", "7L1", "7V", "6M", "6L13", "5M", "5L17", "4M", "4L17", "3T", "3L21"], + thunderwave: ["9M", "9L1", "8M", "8L1", "8V", "7M", "7L1", "7V", "6M", "6L13", "5M", "5L15", "4M", "4L17", "3T", "3L21"], toxic: ["8V", "7M", "7V", "6M", "5M", "4M", "3M"], triattack: ["9L0", "8M", "8L0", "8V", "7L1", "7V", "6L1", "5L1", "4L1", "3L44"], voltswitch: ["9M", "8M", "7M", "6M", "5M"], @@ -12144,12 +12144,12 @@ export const Learnsets: {[k: string]: LearnsetData} = { lightscreen: ["9M", "9L52", "8M", "8L52", "7M", "7L13", "6M", "5M", "4M"], lockon: ["9L58", "8L58", "7L49", "6L49", "5L30", "4L27"], magiccoat: ["7T", "6T", "5T", "4T"], - magnetbomb: ["7L1", "6L17", "5L34", "4L30"], + magnetbomb: ["7L1", "6L17", "5L18", "4L30"], magneticflux: ["9L1", "8L1", "7L1", "6L1"], magnetrise: ["9L28", "8L28", "7T", "7L53", "6T", "6L53", "5T", "5L54", "4T", "4L50"], metalsound: ["9M", "9L46", "8L46", "7L25", "6L25", "5L1", "4L1"], mirrorcoat: ["9L1", "8L1", "7L1", "6L1", "5L1", "4L1"], - mirrorshot: ["7L23", "6L23", "5L50", "4L46"], + mirrorshot: ["7L23", "6L23", "5L25", "4L46"], naturalgift: ["4M"], protect: ["9M", "8M", "7M", "6M", "5M", "4M"], psychup: ["7M", "6M", "5M", "4M"], @@ -12169,8 +12169,8 @@ export const Learnsets: {[k: string]: LearnsetData} = { signalbeam: ["7T", "6T", "5T", "4T"], sleeptalk: ["9M", "8M", "7M", "6M", "5T", "4M"], snore: ["8M", "7T", "6T", "5T", "4T"], - sonicboom: ["7L17", "6L1", "5L14", "4L14"], - spark: ["9L20", "8L20", "7L19", "6L19", "5L22", "4L22"], + sonicboom: ["7L17", "6L1", "5L11", "4L14"], + spark: ["9L20", "8L20", "7L19", "6L19", "5L21", "4L22"], steelbeam: ["9M", "8T"], steelroller: ["8T"], substitute: ["9M", "8M", "7M", "6M", "5M", "4M"], @@ -12185,7 +12185,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { thunder: ["9M", "8M", "7M", "6M", "5M", "4M"], thunderbolt: ["9M", "8M", "7M", "6M", "5M", "4M"], thundershock: ["9L1", "8L1", "7L1", "6L1", "5L1", "4L1"], - thunderwave: ["9M", "9L1", "8M", "8L1", "7M", "7L1", "6M", "6L13", "5M", "5L17", "4M", "4L17"], + thunderwave: ["9M", "9L1", "8M", "8L1", "7M", "7L1", "6M", "6L13", "5M", "5L15", "4M", "4L17"], toxic: ["7M", "6M", "5M", "4M"], triattack: ["9L1", "8M", "8L1", "7L1"], voltswitch: ["9M", "8M", "7M", "6M", "5M"], @@ -12806,7 +12806,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { fling: ["9M", "7M", "7L26", "6M", "6L26", "5M", "5L28", "4M", "4L28"], frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], gigadrain: ["9M", "7T", "7V", "6T", "5T", "4M", "3M"], - gunkshot: ["9M", "9L40", "7T", "7L40", "6T", "6L40", "5T", "5L49", "4T", "4L44"], + gunkshot: ["9M", "9L40", "7T", "7L40", "6T", "6L40", "5T", "5L43", "4T", "4L44"], harden: ["9L4", "8V", "7L4", "7V", "6L4", "5L4", "4L4", "3L4"], haze: ["9M", "9E", "7E", "7V", "6E", "5E", "5D", "4E", "3E"], headbutt: ["8V"], @@ -12820,11 +12820,11 @@ export const Learnsets: {[k: string]: LearnsetData} = { lick: ["7E", "7V", "6E", "5E", "4E", "3E"], meanlook: ["9E", "7E", "7V", "6E", "5E", "4E", "3E"], megadrain: ["8V", "7V"], - memento: ["9L48", "7L48", "6L48", "5L52", "4L49", "3L53"], + memento: ["9L48", "7L48", "6L48", "5L48", "4L49", "3L53"], metronome: ["9M"], mimic: ["7V", "3T"], minimize: ["9L21", "8V", "7L21", "7V", "6L18", "5L17", "4L17", "3L19", "3S0"], - mudbomb: ["7L18", "6L18", "5L23", "4L23"], + mudbomb: ["7L18", "6L18", "5L21", "4L23"], mudshot: ["9M", "9L18"], mudslap: ["9M", "9L7", "7L7", "7V", "6L7", "5L7", "4T", "4L7", "3T"], naturalgift: ["4M"], @@ -12844,7 +12844,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { round: ["7M", "6M", "5M"], sandstorm: ["9M"], scaryface: ["9M", "7E", "6E", "5E"], - screech: ["9L37", "8V", "7L37", "7V", "6L32", "5L33", "4L33", "3L26"], + screech: ["9L37", "8V", "7L37", "7V", "6L32", "5L32", "4L33", "3L26"], secretpower: ["6M", "4M", "3M"], selfdestruct: ["8V", "7V", "3T"], shadowball: ["9M", "8V", "7M", "6M", "5M", "4M"], @@ -12852,9 +12852,9 @@ export const Learnsets: {[k: string]: LearnsetData} = { shadowsneak: ["9E", "7E", "6E", "5E", "5D", "4E"], shockwave: ["7T", "6T", "4M", "3M"], sleeptalk: ["9M", "7M", "7V", "6M", "5T", "4M", "3T"], - sludge: ["9L15", "8V", "7L15", "7V", "6L15", "5L20", "4L20", "3L13"], - sludgebomb: ["9M", "9L29", "8V", "7M", "7L29", "7V", "6M", "6L26", "5M", "5L36", "4M", "4L36", "3M", "3L43", "3S0"], - sludgewave: ["9M", "9L32", "7M", "7L32", "6M", "6L32", "5M", "5L44"], + sludge: ["9L15", "8V", "7L15", "7V", "6L15", "5L15", "4L20", "3L13"], + sludgebomb: ["9M", "9L29", "8V", "7M", "7L29", "7V", "6M", "6L26", "5M", "5L26", "4M", "4L36", "3M", "3L43", "3S0"], + sludgewave: ["9M", "9L32", "7M", "7L32", "6M", "6L32", "5M", "5L37"], snore: ["7T", "7V", "6T", "5T", "4T", "3T"], spitup: ["9E", "7E", "6E", "5E", "4E"], stockpile: ["9E", "7E", "6E", "5E", "4E"], @@ -13020,7 +13020,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], gigadrain: ["9M", "7T", "7V", "6T", "5T", "4M", "3M"], gigaimpact: ["9M", "7M", "6M", "5M", "4M"], - gunkshot: ["9M", "9L40", "7T", "7L40", "6T", "6L40", "5T", "5L58", "4T", "4L54"], + gunkshot: ["9M", "9L40", "7T", "7L40", "6T", "6L40", "5T", "5L49", "4T", "4L54"], harden: ["9L1", "8V", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], haze: ["9M", "8V"], headbutt: ["8V"], @@ -13036,12 +13036,12 @@ export const Learnsets: {[k: string]: LearnsetData} = { lashout: ["9M"], lunge: ["9M"], megadrain: ["8V", "7V"], - memento: ["9L57", "7L57", "6L57", "5L64", "4L65", "3L61"], + memento: ["9L57", "7L57", "6L57", "5L57", "4L65", "3L61"], metronome: ["9M"], mimic: ["7V", "3T"], minimize: ["9L21", "8V", "7L21", "7V", "6L18", "5L17", "4L17", "3L19"], moonblast: ["8V"], - mudbomb: ["7L18", "6L18", "5L23", "4L23"], + mudbomb: ["7L18", "6L18", "5L21", "4L23"], mudshot: ["9M", "9L18"], mudslap: ["9M", "9L1", "7L1", "7V", "6L1", "5L1", "4T", "4L1", "3T"], naturalgift: ["4M"], @@ -13062,15 +13062,15 @@ export const Learnsets: {[k: string]: LearnsetData} = { round: ["7M", "6M", "5M"], sandstorm: ["9M"], scaryface: ["9M"], - screech: ["9L37", "8V", "7L37", "7V", "6L32", "5L33", "4L33", "3L26"], + screech: ["9L37", "8V", "7L37", "7V", "6L32", "5L32", "4L33", "3L26"], secretpower: ["6M", "4M", "3M"], selfdestruct: ["8V", "7V", "3T"], shadowball: ["9M", "8V", "7M", "6M", "5M", "4M"], shockwave: ["7T", "6T", "4M", "3M"], sleeptalk: ["9M", "7M", "7V", "6M", "5T", "4M", "3T"], - sludge: ["9L15", "8V", "7L15", "7V", "6L15", "5L20", "4L20", "3L13"], - sludgebomb: ["9M", "9L29", "8V", "7M", "7L29", "7V", "6M", "6L26", "5M", "5L36", "4M", "4L36", "3M", "3L47"], - sludgewave: ["9M", "9L32", "7M", "7L32", "6M", "6L32", "5M", "5L50"], + sludge: ["9L15", "8V", "7L15", "7V", "6L15", "5L15", "4L20", "3L13"], + sludgebomb: ["9M", "9L29", "8V", "7M", "7L29", "7V", "6M", "6L26", "5M", "5L26", "4M", "4L36", "3M", "3L47"], + sludgewave: ["9M", "9L32", "7M", "7L32", "6M", "6L32", "5M", "5L37"], snore: ["7T", "7V", "6T", "5T", "4T", "3T"], spite: ["9M"], strength: ["6M", "5M", "4M", "3M"], @@ -13753,12 +13753,12 @@ export const Learnsets: {[k: string]: LearnsetData} = { bulldoze: ["8M", "7M", "6M", "5M"], captivate: ["4M"], confide: ["7M", "6M"], - curse: ["8L16", "7L4", "7V", "6L4", "5L46", "4L38"], + curse: ["8L16", "7L4", "7V", "6L4", "5L4", "4L38"], defensecurl: ["8E", "7E", "6E", "5E", "4E"], dig: ["8M", "8L44", "8V", "7L43", "7V", "6M", "6L43", "5M", "5L43", "4M", "3M"], - doubleedge: ["8L56", "8V", "7L49", "7V", "6L49", "5L57", "4L46", "3T", "3L56"], + doubleedge: ["8L56", "8V", "7L49", "7V", "6L49", "5L49", "4L46", "3T", "3L56"], doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], - dragonbreath: ["8L12", "7L25", "6L25", "5L41", "4L33", "3L30"], + dragonbreath: ["8L12", "7L25", "6L25", "5L25", "4L33", "3L30"], dragondance: ["8M"], dragonpulse: ["8M", "8V", "7T", "6T", "5T", "4M"], dragontail: ["8E", "8V", "7M", "6M", "5M"], @@ -13780,7 +13780,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], highhorsepower: ["8M"], ironhead: ["8M", "7T", "6T", "5T", "4T"], - irontail: ["8M", "8L48", "8V", "7T", "7L40", "7V", "6T", "6L40", "5T", "5L49", "4M", "4L38", "3M", "3L45"], + irontail: ["8M", "8L48", "8V", "7T", "7L40", "7V", "6T", "6L40", "5T", "5L40", "4M", "4L38", "3M", "3L45"], meteorbeam: ["8T"], mimic: ["7V", "3T"], mudslap: ["7V", "4T", "3T"], @@ -13790,35 +13790,35 @@ export const Learnsets: {[k: string]: LearnsetData} = { payback: ["8M", "7M", "6M", "5M", "4M"], protect: ["8M", "8V", "7M", "7V", "6M", "5M", "4M", "3M"], psychup: ["7M", "6M", "5M", "4M", "3T"], - rage: ["8V", "7L13", "7V", "6L13", "5L14", "4L14", "3L23"], + rage: ["8V", "7L13", "7V", "6L13", "5L10", "4L14", "3L23"], rest: ["8M", "8V", "7M", "7V", "6M", "5M", "4M", "3M"], return: ["7M", "7V", "6M", "5M", "4M", "3M"], roar: ["7M", "7V", "6M", "5M", "4M", "3M"], rockblast: ["8M", "7E", "6E", "5E", "4E"], rockclimb: ["7E", "6E", "5E", "5D", "4M"], - rockpolish: ["8L8", "7M", "7L19", "6M", "6L19", "5M", "5L30", "4M", "4L30"], + rockpolish: ["8L8", "7M", "7L19", "6M", "6L19", "5M", "5L19", "4M", "4L30"], rockslide: ["8M", "8L20", "8V", "7M", "7L34", "7V", "6M", "6L34", "5M", "5L34", "4M", "4E", "3T", "3E"], rocksmash: ["7V", "6M", "5M", "4M", "3M"], - rockthrow: ["8L1", "8V", "7L7", "7V", "6L7", "5L9", "4L9", "3L12"], - rocktomb: ["8M", "7M", "7L10", "6M", "6L10", "5M", "5L17", "4M", "4L17", "3M"], + rockthrow: ["8L1", "8V", "7L7", "7V", "6L7", "5L7", "4L9", "3L12"], + rocktomb: ["8M", "7M", "7L10", "6M", "6L10", "5M", "5L13", "4M", "4L17", "3M"], rollout: ["8E", "7E", "6E", "5E", "4T", "4E"], rototiller: ["7E", "6E"], round: ["8M", "7M", "6M", "5M"], sandstorm: ["8M", "8L40", "7M", "7L52", "7V", "6M", "6L52", "5M", "5L25", "4M", "4L22", "3M", "3L33"], - sandtomb: ["8M", "8L28", "7L37", "6L37", "5L54", "4L41", "3L49"], + sandtomb: ["8M", "8L28", "7L37", "6L37", "5L37", "4L41", "3L49"], scaryface: ["8M"], scorchingsands: ["8T"], screech: ["8M", "8L24", "8V", "7L31", "7V", "6L31", "5L6", "4L6", "3L1"], secretpower: ["6M", "4M", "3M"], selfdestruct: ["8M", "8V", "7V", "3T"], skullbash: ["7V"], - slam: ["8L36", "8V", "7L28", "7V", "6L28", "5L33", "4L25", "3L37"], + slam: ["8L36", "8V", "7L28", "7V", "6L28", "5L28", "4L25", "3L37"], sleeptalk: ["8M", "7M", "7V", "6M", "5T", "4M", "3T"], smackdown: ["8L4", "7M", "7L22", "6M", "6L22", "5M", "5L22"], snore: ["8M", "7T", "7V", "6T", "5T", "4T", "3T"], - stealthrock: ["8M", "8L32", "8V", "7T", "7L16", "7E", "6T", "6L16", "6E", "5T", "5L38", "5E", "5D", "4M"], + stealthrock: ["8M", "8L32", "8V", "7T", "7L16", "7E", "6T", "6L16", "6E", "5T", "5L16", "5E", "5D", "4M"], stompingtantrum: ["8M", "7T"], - stoneedge: ["8M", "8L52", "7M", "7L46", "6M", "6L46", "5M", "5L62", "4M", "4L49"], + stoneedge: ["8M", "8L52", "7M", "7L46", "6M", "6L46", "5M", "5L46", "4M", "4L49"], strength: ["7V", "6M", "5M", "4M", "3M"], substitute: ["8M", "8V", "7M", "7V", "6M", "5M", "4M", "3T"], sunnyday: ["8M", "7M", "7V", "6M", "5M", "4M", "3M"], @@ -13840,7 +13840,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { ancientpower: ["4T"], aquatail: ["7T", "6T", "5T", "4T"], attract: ["8M", "7M", "7V", "6M", "5M", "4M", "3M"], - autotomize: ["8L8", "7L19", "6L19", "5L30"], + autotomize: ["8L8", "7L19", "6L19", "5L19"], bind: ["8L1", "7T", "7L1", "7V", "6T", "6L1", "5T", "5L1", "4L1", "3L8"], block: ["7T", "6T", "5T", "4T"], bodypress: ["8M"], @@ -13850,15 +13850,15 @@ export const Learnsets: {[k: string]: LearnsetData} = { bulldoze: ["8M", "7M", "6M", "5M"], captivate: ["4M"], confide: ["7M", "6M"], - crunch: ["8M", "8L1", "7L37", "7V", "6L37", "5L54", "4L41", "3L49"], - curse: ["8L16", "7L4", "7V", "6L4", "5L46", "4L38"], + crunch: ["8M", "8L1", "7L37", "7V", "6L37", "5L37", "4L41", "3L49"], + curse: ["8L16", "7L4", "7V", "6L4", "5L4", "4L38"], cut: ["7V", "6M", "5M", "4M", "3M"], darkpulse: ["8M", "7M", "6M", "5T", "4M"], defensecurl: ["7V", "3T"], dig: ["8M", "8L44", "7L43", "7V", "6M", "6L43", "5M", "5L43", "4M", "3M"], - doubleedge: ["8L56", "7L49", "6L49", "5L57", "4L46", "3T", "3L56"], + doubleedge: ["8L56", "7L49", "6L49", "5L49", "4L46", "3T", "3L56"], doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], - dragonbreath: ["8L12", "7L25", "7V", "6L25", "5L41", "4L33", "3L30"], + dragonbreath: ["8L12", "7L25", "7V", "6L25", "5L25", "4L33", "3L30"], dragondance: ["8M"], dragonpulse: ["8M", "7T", "6T", "5T", "4M"], dragontail: ["7M", "6M", "5M"], @@ -13882,7 +13882,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { icefang: ["8M", "8L1", "7L1", "6L1", "5L1", "4L1"], irondefense: ["8M"], ironhead: ["8M", "7T", "6T", "5T", "4T"], - irontail: ["8M", "8L48", "7T", "7L40", "7V", "6T", "6L40", "5T", "5L49", "4M", "4L38", "3M", "3L45"], + irontail: ["8M", "8L48", "7T", "7L40", "7V", "6T", "6L40", "5T", "5L40", "4M", "4L38", "3M", "3L45"], magnetrise: ["8L60", "7T", "6T", "5T", "4T"], meteorbeam: ["8T"], mimic: ["3T"], @@ -13894,7 +13894,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { protect: ["8M", "7M", "7V", "6M", "5M", "4M", "3M"], psychicfangs: ["8M"], psychup: ["7M", "6M", "5M", "4M"], - rage: ["7L13", "7V", "6L13", "5L14", "4L14", "3L23"], + rage: ["7L13", "7V", "6L13", "5L10", "4L14", "3L23"], rest: ["8M", "7M", "7V", "6M", "5M", "4M", "3M"], return: ["7M", "7V", "6M", "5M", "4M", "3M"], roar: ["7M", "7V", "6M", "5M", "4M", "3M"], @@ -13903,8 +13903,8 @@ export const Learnsets: {[k: string]: LearnsetData} = { rockpolish: ["8L1", "7M", "6M", "5M", "4M", "4L30"], rockslide: ["8M", "8L20", "7M", "7L34", "6M", "6L34", "5M", "5L34", "4M", "3T"], rocksmash: ["7V", "6M", "5M", "4M", "3M"], - rockthrow: ["8L1", "7L7", "7V", "6L7", "5L9", "4L9", "3L12"], - rocktomb: ["8M", "7M", "7L10", "6M", "6L10", "5M", "5L17", "4M", "4L17", "3M"], + rockthrow: ["8L1", "7L7", "7V", "6L7", "5L7", "4L9", "3L12"], + rocktomb: ["8M", "7M", "7L10", "6M", "6L10", "5M", "5L13", "4M", "4L17", "3M"], rollout: ["7V", "4T", "3T"], round: ["8M", "7M", "6M", "5M"], sandstorm: ["8M", "8L40", "7M", "7L52", "7V", "6M", "6L52", "5M", "5L25", "4M", "4L22", "3M", "3L33"], @@ -13914,15 +13914,15 @@ export const Learnsets: {[k: string]: LearnsetData} = { screech: ["8M", "8L24", "7L31", "7V", "6L31", "5L6", "4L6", "3L1"], secretpower: ["6M", "4M", "3M"], selfdestruct: ["8M", "3T"], - slam: ["8L36", "7L28", "7V", "6L28", "5L33", "4L25", "3L37"], + slam: ["8L36", "7L28", "7V", "6L28", "5L28", "4L25", "3L37"], sleeptalk: ["8M", "7M", "7V", "6M", "5T", "4M", "3T"], smackdown: ["8L4", "7M", "7L22", "6M", "6L22", "5M", "5L22"], snore: ["8M", "7T", "7V", "6T", "5T", "4T", "3T"], - stealthrock: ["8M", "8L32", "7T", "7L16", "6T", "6L16", "5T", "5L38", "4M"], + stealthrock: ["8M", "8L32", "7T", "7L16", "6T", "6L16", "5T", "5L16", "4M"], steelbeam: ["8T"], steelroller: ["8T"], stompingtantrum: ["8M", "7T"], - stoneedge: ["8M", "8L52", "7M", "7L46", "6M", "6L46", "5M", "5L62", "4M", "4L49"], + stoneedge: ["8M", "8L52", "7M", "7L46", "6M", "6L46", "5M", "5L46", "4M", "4L49"], strength: ["7V", "6M", "5M", "4M", "3M"], substitute: ["8M", "7M", "6M", "5M", "4M", "3T"], sunnyday: ["8M", "7M", "7V", "6M", "5M", "4M", "3M"], @@ -14748,8 +14748,6 @@ export const Learnsets: {[k: string]: LearnsetData} = { bide: ["7V"], block: ["7T", "6T", "5T"], bodyslam: ["9M"], - breakingswipe: ["9M"], - brickbreak: ["9M"], bulldoze: ["9M", "8M"], bulletseed: ["9M", "9L1", "8M", "8L1", "4M", "3M"], calmmind: ["9M", "8M"], @@ -14759,11 +14757,6 @@ export const Learnsets: {[k: string]: LearnsetData} = { curse: ["9M", "7V"], doubleedge: ["9M", "7V", "3T"], doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], - dracometeor: ["9M"], - dragoncheer: ["9M"], - dragonhammer: ["9L0"], - dragonpulse: ["9M"], - dragontail: ["9M"], dreameater: ["8V", "7M", "7V", "6M", "5M", "4M", "3T"], earthquake: ["9M"], eggbomb: ["8V", "7L27", "7V", "6L27", "5L27", "4L27", "3L31"], @@ -14773,7 +14766,6 @@ export const Learnsets: {[k: string]: LearnsetData} = { explosion: ["7M", "7V", "6M", "5M", "4M", "3T"], extrasensory: ["9L1", "8L1"], facade: ["9M", "8M", "8V", "7M", "6M", "5M", "4M", "3M"], - flamethrower: ["9M"], flash: ["7V", "6M", "5M", "4M", "3M"], frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], futuresight: ["9M", "8M"], @@ -14791,8 +14783,6 @@ export const Learnsets: {[k: string]: LearnsetData} = { hypnosis: ["9L1", "8L1", "8V", "7L1", "7V", "6L1", "5L1", "4L1", "3L1", "3S0"], imprison: ["9M"], infestation: ["7M", "6M"], - ironhead: ["9M"], - knockoff: ["9M"], leafstorm: ["9M", "9L1", "8M", "8L1", "7L47", "6L47", "5L47", "4L47"], leechseed: ["9L1", "8L1"], lightscreen: ["9M", "8M", "8V", "7M", "6M", "5M", "4M", "3M"], @@ -14803,7 +14793,6 @@ export const Learnsets: {[k: string]: LearnsetData} = { naturalgift: ["4M"], naturepower: ["7M", "6M"], nightmare: ["7V", "3T"], - outrage: ["9M"], powerswap: ["8M"], powerwhip: ["8V"], protect: ["9M", "8M", "8V", "7M", "7V", "6M", "5M", "4M", "3M"], @@ -14847,7 +14836,6 @@ export const Learnsets: {[k: string]: LearnsetData} = { terrainpulse: ["8T"], thief: ["9M", "8M", "7M", "7V", "6M", "5M", "4M", "3M"], toxic: ["8V", "7M", "7V", "6M", "5M", "4M", "3M"], - trailblaze: ["9M"], trick: ["9M"], trickroom: ["9M", "8M", "7M", "6M", "5M", "4M"], uproar: ["9M", "9L1", "8M", "8L1"], @@ -15988,21 +15976,21 @@ export const Learnsets: {[k: string]: LearnsetData} = { koffing: { learnset: { acidspray: ["9M"], - assurance: ["9L16", "8M", "8L16", "7L12", "6L12", "5L15", "4L15"], + assurance: ["9L16", "8M", "8L16", "7L12", "6L12", "5L12", "4L15"], attract: ["8M", "7M", "7V", "6M", "5M", "4M", "3M"], belch: ["9L40", "8L40", "7L42", "6L42"], bide: ["7V"], bodyslam: ["9M"], captivate: ["4M"], - clearsmog: ["9L12", "8L12", "8V", "7L15", "6L15", "5L19"], + clearsmog: ["9L12", "8L12", "8V", "7L15", "6L15", "5L15"], confide: ["7M", "6M"], corrosivegas: ["8T"], curse: ["9M", "9E", "8E", "7E", "7V", "6E", "5E", "4E"], darkpulse: ["9M", "8M", "8V", "7M", "6M", "5T", "5D", "4M"], - destinybond: ["9L52", "8L52", "7L40", "7E", "7V", "6L40", "6E", "5L51", "5E", "4L46", "4E", "3L45", "3E"], + destinybond: ["9L52", "8L52", "7L40", "7E", "7V", "6L40", "6E", "5L40", "5E", "4L46", "4E", "3L45", "3E"], doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], endure: ["9M", "8M", "7V", "4M", "3T"], - explosion: ["9L44", "8L44", "8V", "7M", "7L37", "7V", "6M", "6L37", "5M", "5L42", "4M", "4L37", "3T", "3L41"], + explosion: ["9L44", "8L44", "8V", "7M", "7L37", "7V", "6M", "6L37", "5M", "5L37", "4M", "4L37", "3T", "3L41"], facade: ["9M", "8M", "8V", "7M", "6M", "5M", "4M", "3M"], fireblast: ["9M", "8M", "8V", "7M", "7V", "6M", "5M", "4M", "3M"], flamethrower: ["9M", "8M", "8V", "7M", "6M", "5M", "4M", "3M"], @@ -16010,13 +15998,13 @@ export const Learnsets: {[k: string]: LearnsetData} = { frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], grudge: ["8E", "7E", "6E", "5E", "4E"], gunkshot: ["9M"], - gyroball: ["9M", "8M", "7M", "7L29", "6M", "6L29", "5M", "5L37", "4M", "4L33"], - haze: ["9M", "9L24", "8L24", "8V", "7L26", "7V", "6L26", "5L33", "4L28", "3L33"], + gyroball: ["9M", "8M", "7M", "7L29", "6M", "6L29", "5M", "5L29", "4M", "4L33"], + haze: ["9M", "9L24", "8L24", "8V", "7L26", "7V", "6L26", "5L26", "4L28", "3L33"], headbutt: ["8V"], hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], incinerate: ["6M", "5M"], infestation: ["7M", "6M"], - memento: ["9L48", "8L48", "7L45", "6L45", "5L55", "4L51", "3L49"], + memento: ["9L48", "8L48", "7L45", "6L45", "5L45", "4L51", "3L49"], mimic: ["7V", "3T"], naturalgift: ["4M"], painsplit: ["9M", "9E", "8E", "7T", "7E", "7V", "6T", "6E", "5T", "5E", "4T", "4E", "3E"], @@ -16034,15 +16022,15 @@ export const Learnsets: {[k: string]: LearnsetData} = { scaryface: ["9M"], screech: ["8M", "7E", "7V", "6E", "5E", "4E", "3E"], secretpower: ["6M", "4M", "3M"], - selfdestruct: ["9L28", "8M", "8L28", "8V", "7L23", "7V", "6L23", "5L24", "4L19", "3T", "3L17"], + selfdestruct: ["9L28", "8M", "8L28", "8V", "7L23", "7V", "6L23", "5L23", "4L19", "3T", "3L17"], shadowball: ["9M", "8M", "8V", "7M", "6M", "5M", "4M", "3M"], shockwave: ["7T", "6T", "4M", "3M"], sleeptalk: ["9M", "8M", "7M", "7V", "6M", "5T", "4M", "3T"], - sludge: ["9L20", "8L20", "8V", "7L18", "7V", "6L18", "5L28", "4L24", "3L21"], - sludgebomb: ["9M", "9L32", "8M", "8L32", "8V", "7M", "7L34", "7V", "6M", "6L34", "5M", "5L46", "4M", "4L42", "3M"], + sludge: ["9L20", "8L20", "8V", "7L18", "7V", "6L18", "5L18", "4L24", "3L21"], + sludgebomb: ["9M", "9L32", "8M", "8L32", "8V", "7M", "7L34", "7V", "6M", "6L34", "5M", "5L34", "4M", "4L42", "3M"], sludgewave: ["9M", "8M", "5D"], - smog: ["9L4", "8L4", "8V", "7L4", "7V", "6L4", "5L6", "5D", "4L6", "3L9"], - smokescreen: ["9L8", "8L8", "7L7", "7V", "6L7", "5L10", "4L10", "3L25"], + smog: ["9L4", "8L4", "8V", "7L4", "7V", "6L4", "5L4", "5D", "4L6", "3L9"], + smokescreen: ["9L8", "8L8", "7L7", "7V", "6L7", "5L7", "4L10", "3L25"], snore: ["8M", "7T", "7V", "6T", "5T", "4T", "3T"], spite: ["9M", "9E", "8E", "7T", "7E", "6T", "6E", "5T", "5E", "4T", "4E"], spitup: ["9E", "8E", "7E", "6E", "5E"], @@ -16074,22 +16062,22 @@ export const Learnsets: {[k: string]: LearnsetData} = { weezing: { learnset: { acidspray: ["9M"], - assurance: ["9L16", "8M", "8L16", "7L12", "6L12", "5L15", "4L15"], + assurance: ["9L16", "8M", "8L16", "7L12", "6L12", "5L12", "4L15"], attract: ["8M", "7M", "7V", "6M", "5M", "4M", "3M"], belch: ["9L44", "8L44", "7L51", "6L50"], bide: ["7V"], bodyslam: ["9M"], captivate: ["4M"], - clearsmog: ["9L12", "8L12", "8V", "7L15", "6L15", "5L19"], + clearsmog: ["9L12", "8L12", "8V", "7L15", "6L15", "5L15"], confide: ["7M", "6M"], corrosivegas: ["8T"], curse: ["9M", "7V"], darkpulse: ["9M", "8M", "8V", "7M", "6M", "5T", "4M"], - destinybond: ["9L62", "8L62", "7L46", "7V", "6L46", "5L59", "4L55", "3L51"], - doublehit: ["9L0", "8L0", "7L1", "6L29", "5L39", "4L33"], + destinybond: ["9L62", "8L62", "7L46", "7V", "6L46", "5L46", "4L55", "3L51"], + doublehit: ["9L0", "8L0", "7L1", "6L29", "5L29", "4L33"], doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], endure: ["9M", "8M", "7V", "4M", "3T"], - explosion: ["9L50", "8L50", "8V", "7M", "7L40", "7V", "6M", "6L40", "5M", "5L46", "4M", "4L40", "3T", "3L44"], + explosion: ["9L50", "8L50", "8V", "7M", "7L40", "7V", "6M", "6L40", "5M", "5L40", "4M", "4L40", "3T", "3L44"], facade: ["9M", "8M", "8V", "7M", "6M", "5M", "4M", "3M"], fireblast: ["9M", "8M", "8V", "7M", "7V", "6M", "5M", "4M", "3M"], flamethrower: ["9M", "8M", "8V", "7M", "6M", "5M", "4M", "3M"], @@ -16098,14 +16086,14 @@ export const Learnsets: {[k: string]: LearnsetData} = { gigaimpact: ["9M", "8M", "7M", "6M", "5M", "4M"], gunkshot: ["9M"], gyroball: ["9M", "8M", "7M", "7L29", "6M", "5M", "4M"], - haze: ["9M", "9L24", "8L24", "8V", "7L26", "7V", "6L26", "5L33", "4L28", "3L33"], + haze: ["9M", "9L24", "8L24", "8V", "7L26", "7V", "6L26", "5L26", "4L28", "3L33"], headbutt: ["8V"], heatwave: ["9M", "9L1", "8M", "8L1"], hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], hyperbeam: ["9M", "8M", "8V", "7M", "7V", "6M", "5M", "4M", "3M"], incinerate: ["6M", "5M"], infestation: ["7M", "6M"], - memento: ["9L56", "8L56", "7L57", "6L54", "5L65", "4L63", "3L58"], + memento: ["9L56", "8L56", "7L57", "6L54", "5L54", "4L63", "3L58"], mimic: ["7V", "3T"], naturalgift: ["4M"], painsplit: ["9M", "7T", "6T", "5T", "4T"], @@ -16122,12 +16110,12 @@ export const Learnsets: {[k: string]: LearnsetData} = { scaryface: ["9M"], screech: ["8M", "8V"], secretpower: ["6M", "4M", "3M"], - selfdestruct: ["9L28", "8M", "8L28", "8V", "7L23", "7V", "6L23", "5L24", "4L19", "3T", "3L1"], + selfdestruct: ["9L28", "8M", "8L28", "8V", "7L23", "7V", "6L23", "5L23", "4L19", "3T", "3L1"], shadowball: ["9M", "8M", "8V", "7M", "6M", "5M", "4M", "3M"], shockwave: ["7T", "6T", "4M", "3M"], sleeptalk: ["9M", "8M", "7M", "7V", "6M", "5T", "4M", "3T"], - sludge: ["9L20", "8L20", "8V", "7L18", "7V", "6L18", "5L28", "4L24", "3L21"], - sludgebomb: ["9M", "9L32", "8M", "8L32", "8V", "7M", "7L34", "7V", "6M", "6L34", "5M", "5L52", "4M", "4L48", "3M"], + sludge: ["9L20", "8L20", "8V", "7L18", "7V", "6L18", "5L18", "4L24", "3L21"], + sludgebomb: ["9M", "9L32", "8M", "8L32", "8V", "7M", "7L34", "7V", "6M", "6L34", "5M", "5L34", "4M", "4L48", "3M"], sludgewave: ["9M", "8M"], smog: ["9L1", "8L1", "8V", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], smokescreen: ["9L1", "8L1", "7L1", "7V", "6L1", "5L1", "4L1", "3L25"], @@ -17001,7 +16989,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { ancientpower: ["8L24", "7L38", "6L38", "5L36", "4T", "4L33"], attract: ["8M", "7M", "7V", "6M", "5M", "4M", "3M"], bide: ["7V"], - bind: ["8L1", "8V", "7T", "7L17", "7V", "6T", "6L17", "5T", "5L22", "4L22", "3L28"], + bind: ["8L1", "8V", "7T", "7L17", "7V", "6T", "6L17", "5T", "5L17", "4L22", "3L28"], bodyslam: ["8M", "7V", "3T"], bulletseed: ["8M", "4M", "3M"], captivate: ["4M"], @@ -17030,18 +17018,18 @@ export const Learnsets: {[k: string]: LearnsetData} = { hyperbeam: ["8M", "8V", "7M", "7V", "6M", "5M", "4M", "3M"], infestation: ["7M", "6M"], ingrain: ["8L52", "7L1", "6L1", "5L1", "4L1", "3L1", "3S0"], - knockoff: ["8L28", "7T", "7L27", "6T", "6L27", "5T", "5L33", "4T", "4L36"], + knockoff: ["8L28", "7T", "7L27", "6T", "6L27", "5T", "5L27", "4T", "4L36"], leafstorm: ["8M", "7E", "6E", "5E", "4E"], leechseed: ["8E", "8V", "7E", "6E", "5E", "5D", "4E", "3E"], - megadrain: ["8L12", "8V", "7L23", "7E", "7V", "6L23", "6E", "5L26", "5E", "4L26", "4E", "3L31", "3E"], + megadrain: ["8L12", "8V", "7L23", "7E", "7V", "6L23", "6E", "5L23", "5E", "4L26", "4E", "3L31", "3E"], mimic: ["7V", "3T"], morningsun: ["3S0"], - naturalgift: ["7L33", "7E", "6L33", "6E", "5L40", "5E", "4M", "4L40"], + naturalgift: ["7L33", "7E", "6L33", "6E", "5L33", "5E", "4M", "4L40"], naturepower: ["8E", "7M", "7E", "6E", "5E", "4E", "3E"], painsplit: ["7T", "6T", "5T", "4T"], - poisonpowder: ["8L20", "8V", "7L14", "7V", "6L14", "5L15", "4L15", "3L19"], + poisonpowder: ["8L20", "8V", "7L14", "7V", "6L14", "5L14", "4L15", "3L19"], powerswap: ["8M", "7E", "6E", "5E", "4E"], - powerwhip: ["8M", "8L48", "8V", "7L50", "6L50", "5L54", "4L54"], + powerwhip: ["8M", "8L48", "8V", "7L50", "6L50", "5L53", "4L54"], protect: ["8M", "8V", "7M", "7V", "6M", "5M", "4M", "3M"], psychup: ["7M", "7V", "6M", "5M", "4M", "3T"], rage: ["7V"], @@ -17056,7 +17044,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { shockwave: ["7T", "6T", "4M"], skullbash: ["7V"], slam: ["8L40", "8V", "7L41", "7V", "6L41", "5L43", "4L43", "3L40"], - sleeppowder: ["8L36", "8V", "7L4", "7V", "6L4", "5L5", "5D", "4L5", "3L4"], + sleeppowder: ["8L36", "8V", "7L4", "7V", "6L4", "5L4", "5D", "4L5", "3L4"], sleeptalk: ["8M", "7M", "7V", "6M", "5T", "4M", "3T"], sludgebomb: ["8M", "8V", "7M", "7V", "6M", "5M", "4M", "3M"], snore: ["8M", "7T", "7V", "6T", "5T", "4T", "3T"], @@ -17070,12 +17058,12 @@ export const Learnsets: {[k: string]: LearnsetData} = { synthesis: ["7T", "6T", "5T", "4T"], takedown: ["7V"], thief: ["8M", "7M", "7V", "6M", "5M", "4M", "3M"], - tickle: ["8L44", "7L44", "6L44", "5L47", "4L47", "3L46"], + tickle: ["8L44", "7L44", "6L44", "5L46", "4L47", "3L46"], toxic: ["8V", "7M", "7V", "6M", "5M", "4M", "3M"], - vinewhip: ["8L16", "8V", "7L7", "7V", "6L7", "5L19", "4L19", "3L22"], + vinewhip: ["8L16", "8V", "7L7", "7V", "6L7", "5L7", "4L19", "3L22"], wakeupslap: ["7E"], worryseed: ["7T", "6T", "5T", "4T"], - wringout: ["7L46", "6L46", "5L50", "4L50"], + wringout: ["7L46", "6L46", "5L49", "4L50"], }, eventData: [ {generation: 3, level: 30, abilities: ["chlorophyll"], moves: ["morningsun", "solarbeam", "sunnyday", "ingrain"]}, @@ -17091,8 +17079,8 @@ export const Learnsets: {[k: string]: LearnsetData} = { amnesia: ["8M"], ancientpower: ["8L24", "7L40", "6L40", "5L36", "4T", "4L33", "4S0"], attract: ["8M", "7M", "6M", "5M", "4M"], - bind: ["8L1", "7T", "7L17", "6T", "6L17", "5T", "5L22", "4L22"], - block: ["8L1", "7T", "7L1", "6T", "6L1", "5T", "5L57", "4T", "4L57"], + bind: ["8L1", "7T", "7L17", "6T", "6L17", "5T", "5L17", "4L22"], + block: ["8L1", "7T", "7L1", "6T", "6L1", "5T", "5L56", "4T", "4L57"], bodyslam: ["8M"], brickbreak: ["8M", "7M", "6M", "5M", "4M"], brutalswing: ["8M"], @@ -17123,19 +17111,19 @@ export const Learnsets: {[k: string]: LearnsetData} = { hyperbeam: ["8M", "7M", "6M", "5M", "4M"], infestation: ["7M", "6M"], ingrain: ["8L52", "7L1", "6L1", "5L1", "4L1"], - knockoff: ["8L28", "7T", "7L27", "6T", "6L27", "5T", "5L33", "4T", "4L36"], + knockoff: ["8L28", "7T", "7L27", "6T", "6L27", "5T", "5L27", "4T", "4L36"], leafstorm: ["8M"], - megadrain: ["8L12", "7L23", "6L23", "5L26", "4L26"], + megadrain: ["8L12", "7L23", "6L23", "5L23", "4L26"], morningsun: ["4S0"], mudslap: ["4T"], - naturalgift: ["7L33", "6L33", "5L40", "4M", "4L40", "4S0"], + naturalgift: ["7L33", "6L33", "5L33", "4M", "4L40", "4S0"], naturepower: ["7M", "6M"], painsplit: ["7T", "6T", "5T", "4T"], payback: ["8M", "7M", "6M", "5M", "4M"], poisonjab: ["8M", "7M", "6M", "5M", "4M"], - poisonpowder: ["8L20", "7L14", "6L14", "5L15", "4L15"], + poisonpowder: ["8L20", "7L14", "6L14", "5L14", "4L15"], powerswap: ["8M"], - powerwhip: ["8M", "8L48", "7L53", "6L53", "5L54", "4L54"], + powerwhip: ["8M", "8L48", "7L53", "6L53", "5L53", "4L54"], protect: ["8M", "7M", "6M", "5M", "4M"], psychup: ["7M", "6M", "5M", "4M"], reflect: ["8M", "7M", "6M", "5M", "4M"], @@ -17149,7 +17137,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { seedbomb: ["8M", "7T", "6T", "5T", "4T"], shockwave: ["7T", "6T", "4M"], slam: ["8L40", "7L43", "6L43", "5L43", "4L43"], - sleeppowder: ["8L36", "7L4", "6L4", "5L5", "4L5"], + sleeppowder: ["8L36", "7L4", "6L4", "5L4", "4L5"], sleeptalk: ["8M", "7M", "6M", "5T", "4M"], sludgebomb: ["8M", "7M", "6M", "5M", "4M"], snore: ["8M", "7T", "6T", "5T", "4T"], @@ -17164,11 +17152,11 @@ export const Learnsets: {[k: string]: LearnsetData} = { swordsdance: ["8M", "7M", "6M", "5M", "4M"], synthesis: ["7T", "6T", "5T", "4T"], thief: ["8M", "7M", "6M", "5M", "4M"], - tickle: ["8L44", "7L46", "6L46", "5L47", "4L47"], + tickle: ["8L44", "7L46", "6L46", "5L46", "4L47"], toxic: ["7M", "6M", "5M", "4M"], - vinewhip: ["8L16", "7L7", "6L7", "5L19", "4L19"], + vinewhip: ["8L16", "7L7", "6L7", "5L7", "4L19"], worryseed: ["7T", "6T", "5T", "4T"], - wringout: ["7L49", "6L49", "5L50", "4L50"], + wringout: ["7L49", "6L49", "5L49", "4L50"], }, eventData: [ {generation: 4, level: 50, gender: "M", nature: "Brave", moves: ["sunnyday", "morningsun", "ancientpower", "naturalgift"], pokeball: "cherishball"}, @@ -17731,11 +17719,11 @@ export const Learnsets: {[k: string]: LearnsetData} = { bide: ["7V"], blizzard: ["8M", "8V", "7M", "7V", "6M", "5M", "4M", "3M"], brine: ["8M", "8L28", "7L28", "6L28", "5L36", "4M"], - bubblebeam: ["8V", "7L18", "7V", "6L18", "5L28", "4L28", "3L28"], - camouflage: ["7L22", "6L15", "5L19", "4L19", "3L19"], + bubblebeam: ["8V", "7L18", "7V", "6L18", "5L22", "4L28", "3L28"], + camouflage: ["7L22", "6L15", "5L15", "4L19", "3L19"], confide: ["7M", "6M"], confuseray: ["8L8", "8V", "7L40", "6L40"], - cosmicpower: ["8M", "8L52", "7L49", "6L48", "5L55", "4L51", "3L42", "3S0"], + cosmicpower: ["8M", "8L52", "7L49", "6L48", "5L48", "4L51", "3L42", "3S0"], curse: ["7V"], dazzlinggleam: ["8M", "8V", "7M", "6M"], dive: ["8M", "6M", "5M", "4T", "3M"], @@ -17748,21 +17736,21 @@ export const Learnsets: {[k: string]: LearnsetData} = { flipturn: ["8T"], frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], gravity: ["7T", "6T", "5T", "4T"], - gyroball: ["8M", "7M", "7L24", "6M", "6L24", "5M", "5L37", "4M", "4L37"], + gyroball: ["8M", "7M", "7L24", "6M", "6L24", "5M", "5L30", "4M", "4L37"], hail: ["8M", "7M", "6M", "5M", "4M", "3M"], harden: ["8L1", "8V", "7L1", "7V", "6L1", "5L1", "4L1", "3L1", "3S1"], headbutt: ["8V"], hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], - hydropump: ["8M", "8L56", "8V", "7L53", "7V", "6L52", "5L60", "4L55", "3L46", "3S0"], + hydropump: ["8M", "8L56", "8V", "7L53", "7V", "6L52", "5L52", "4L55", "3L46", "3S0"], icebeam: ["8M", "8V", "7M", "7V", "6M", "5M", "4M", "3M"], icywind: ["8M", "7T", "7V", "6T", "5T", "5D", "4T", "3T"], - lightscreen: ["8M", "8L32", "8V", "7M", "7L46", "7V", "6M", "6L33", "5M", "5L42", "4M", "4L42", "3M", "3L37", "3S0"], + lightscreen: ["8M", "8L32", "8V", "7M", "7L46", "7V", "6M", "6L33", "5M", "5L33", "4M", "4L42", "3M", "3L37", "3S0"], magiccoat: ["7T", "6T", "5T", "4T"], mimic: ["7V", "3T"], - minimize: ["8L16", "8V", "7L31", "7V", "6L25", "5L33", "4L33", "3L33", "3S0"], + minimize: ["8L16", "8V", "7L31", "7V", "6L25", "5L25", "4L33", "3L33", "3S0"], naturalgift: ["4M"], painsplit: ["7T", "6T", "5T", "4T"], - powergem: ["8M", "8L36", "7L37", "6L37", "5L51", "4L46"], + powergem: ["8M", "8L36", "7L37", "6L37", "5L43", "4L46"], protect: ["8M", "8V", "7M", "7V", "6M", "5M", "4M", "3M"], psybeam: ["8L24"], psychic: ["8M", "8L40", "8V", "7M", "7L42", "7V", "6M", "6L42", "5M", "4M", "3M"], @@ -17771,10 +17759,10 @@ export const Learnsets: {[k: string]: LearnsetData} = { rage: ["7V"], raindance: ["8M", "7M", "7V", "6M", "5M", "4M", "3M"], rapidspin: ["8L12", "7L7", "7V", "6L7", "5L10", "4L10", "3L10", "3S1"], - recover: ["8L48", "8V", "7L10", "7V", "6L10", "5L15", "4L15", "3L15", "3S1"], + recover: ["8L48", "8V", "7L10", "7V", "6L10", "5L12", "4L15", "3L15", "3S1"], recycle: ["7T", "6T", "5T", "5D", "4M"], reflect: ["8M", "8V", "7M", "7V", "6M", "5M", "4M", "3M"], - reflecttype: ["7L35", "6L35", "5L46"], + reflecttype: ["7L35", "6L35", "5L40"], rest: ["8M", "8V", "7M", "7V", "6M", "5M", "4M", "3M"], return: ["7M", "7V", "6M", "5M", "4M", "3M"], rollout: ["4T"], @@ -17788,7 +17776,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { substitute: ["8M", "8V", "7M", "7V", "6M", "5M", "4M", "3T"], surf: ["8M", "8L44", "8V", "7M", "7V", "6M", "5M", "4M", "3M"], swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], - swift: ["8M", "8L20", "8V", "7L16", "7V", "6L16", "5L24", "4T", "4L24", "3T", "3L24"], + swift: ["8M", "8L20", "8V", "7L16", "7V", "6L16", "5L18", "4T", "4L24", "3T", "3L24"], tackle: ["8L1", "8V", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], takedown: ["7V"], teleport: ["8V", "7V"], @@ -17823,7 +17811,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { brine: ["8M", "8L1", "4M"], bubblebeam: ["7V"], confide: ["7M", "6M"], - confuseray: ["8L1", "7L40", "7V", "6L22", "5L28", "4L28", "3L33"], + confuseray: ["8L1", "7L40", "7V", "6L22", "5L22", "4L28", "3L33"], cosmicpower: ["8M", "8L1"], curse: ["7V"], dazzlinggleam: ["8M", "8V", "7M", "6M"], @@ -17929,7 +17917,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { copycat: ["8L1", "7L4", "6L4", "5L4", "4L4"], covet: ["7T", "6T", "5T"], dazzlinggleam: ["8M", "8L44"], - doubleslap: ["7L11", "6L11", "5L15", "4L15"], + doubleslap: ["7L11", "6L11", "5L11", "4L15"], doubleteam: ["7M", "6M", "5M", "4M"], drainpunch: ["8M", "7T", "6T", "5T", "4M"], dreameater: ["7M", "6M", "5M", "4M"], @@ -17954,7 +17942,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { magiccoat: ["7T", "6T", "5T", "4T"], magicroom: ["8M", "7T", "7E", "6T", "6E", "5T", "5E"], meditate: ["7L8", "6L8", "5L8", "4L8"], - mimic: ["8L32", "7L15", "7E", "6L15", "6E", "5L18", "5E", "4L18", "4E"], + mimic: ["8L32", "7L15", "7E", "6L15", "6E", "5L15", "5E", "4L18", "4E"], mistyterrain: ["8M"], mudslap: ["4T"], nastyplot: ["8M", "7E", "6E", "5E", "4E"], @@ -18029,7 +18017,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { curse: ["7V"], dazzlinggleam: ["8M", "8L44", "8V", "7M", "6M"], doubleedge: ["7V", "3T"], - doubleslap: ["8V", "7L11", "7V", "6L11", "5L15", "4L15", "3L15"], + doubleslap: ["8V", "7L11", "7V", "6L11", "5L11", "4L15", "3L15"], doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], drainpunch: ["8M", "7T", "6T", "5T", "4M"], dreameater: ["8V", "7M", "7V", "6M", "5M", "4M", "3T"], @@ -18069,7 +18057,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { megakick: ["8M", "7V", "3T"], megapunch: ["8M", "7V", "3T"], metronome: ["8M", "7V", "3T"], - mimic: ["8L32", "8V", "7L15", "7E", "7V", "6L15", "6E", "5L18", "5E", "4L18", "4E", "3T", "3E"], + mimic: ["8L32", "8V", "7L15", "7E", "7V", "6L15", "6E", "5L15", "5E", "4L18", "4E", "3T", "3E"], mistyterrain: ["8M", "7L1", "6L1"], mudslap: ["7V", "4T", "3T"], mysticalfire: ["8M"], @@ -18849,14 +18837,14 @@ export const Learnsets: {[k: string]: LearnsetData} = { crosschop: ["9E", "8E", "7E", "7V", "6E", "5E", "5D", "4E", "3E", "3S0"], curse: ["7V"], detect: ["7V"], - discharge: ["9L32", "8L32", "7L33", "6L33", "5L41", "4L34"], + discharge: ["9L32", "8L32", "7L33", "6L33", "5L33", "4L34"], doubleedge: ["9M", "3T"], doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], dualchop: ["7T", "6T", "5T"], dynamicpunch: ["9E", "8E", "7E", "7V", "6E", "5E", "4E", "3T"], eerieimpulse: ["9M"], electricterrain: ["9M"], - electroball: ["9M", "8M", "7L22", "6L22", "5L31"], + electroball: ["9M", "8M", "7L22", "6L22", "5L22"], electroweb: ["9M", "8M", "7T", "6T", "5T"], endure: ["9M", "8M", "7V", "4M", "3T"], facade: ["9M", "8M", "7M", "6M", "5M", "4M", "3M"], @@ -18877,7 +18865,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { knockoff: ["9M"], leer: ["9L1", "8L1", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], lightscreen: ["9M", "9L44", "8M", "8L44", "7M", "7L26", "7V", "6M", "6L26", "5M", "5L26", "4M", "4L25", "3M", "3L17"], - lowkick: ["9M", "9L36", "8M", "8L36", "7T", "7L8", "6T", "6L8", "5T", "5L11", "4T", "4L10"], + lowkick: ["9M", "9L36", "8M", "8L36", "7T", "7L8", "6T", "6L8", "5T", "5L8", "4T", "4L10"], magnetrise: ["7T", "6T", "5T", "5D", "4T"], meditate: ["7E", "7V", "6E", "5E", "4E", "3E"], megakick: ["8M", "3T"], @@ -18896,25 +18884,25 @@ export const Learnsets: {[k: string]: LearnsetData} = { rocksmash: ["6M", "5M", "4M", "3M"], rollingkick: ["7E", "7V", "6E", "5E", "4E", "3E"], round: ["8M", "7M", "6M", "5M"], - screech: ["9L24", "8M", "8L24", "7L36", "7V", "6L36", "5L51", "4L43", "3L33"], + screech: ["9L24", "8M", "8L24", "7L36", "7V", "6L36", "5L36", "4L43", "3L33"], secretpower: ["6M", "4M", "3M"], seismictoss: ["3T"], - shockwave: ["9L16", "8L16", "7T", "7L15", "6T", "6L15", "5L21", "4M", "4L19", "3M"], + shockwave: ["9L16", "8L16", "7T", "7L15", "6T", "6L15", "5L15", "4M", "4L19", "3M"], signalbeam: ["7T", "6T", "5T", "4T"], sleeptalk: ["9M", "8M", "7M", "7V", "6M", "5T", "4M", "3T"], snore: ["8M", "7T", "7V", "6T", "5T", "4T", "3T"], substitute: ["9M", "8M", "7M", "6M", "5M", "4M", "3T"], supercellslam: ["9M"], swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], - swift: ["9M", "9L12", "8M", "8L12", "7L12", "7V", "6L12", "5L16", "4T", "4L16", "3T", "3L25"], + swift: ["9M", "9L12", "8M", "8L12", "7L12", "7V", "6L12", "5L12", "4T", "4L16", "3T", "3L25"], takedown: ["9M"], taunt: ["9M"], terablast: ["9M"], thief: ["9M", "8M", "7M", "7V", "6M", "5M", "4M", "3M"], - thunder: ["9M", "9L48", "8M", "8L48", "7M", "7L43", "7V", "6M", "6L43", "5M", "5L56", "4M", "4L46", "3M", "3L49"], - thunderbolt: ["9M", "9L40", "8M", "8L40", "7M", "7L40", "7V", "6M", "6L40", "5M", "5L46", "4M", "4L37", "3M", "3L41"], - thunderpunch: ["9M", "9L28", "8M", "8L28", "7T", "7L29", "7V", "6T", "6L29", "5T", "5L36", "4T", "4L28", "3T", "3L9", "3S0"], - thundershock: ["9L4", "8L4", "7L5", "6L5", "5L6", "5D", "4L7"], + thunder: ["9M", "9L48", "8M", "8L48", "7M", "7L43", "7V", "6M", "6L43", "5M", "5L43", "4M", "4L46", "3M", "3L49"], + thunderbolt: ["9M", "9L40", "8M", "8L40", "7M", "7L40", "7V", "6M", "6L40", "5M", "5L40", "4M", "4L37", "3M", "3L41"], + thunderpunch: ["9M", "9L28", "8M", "8L28", "7T", "7L29", "7V", "6T", "6L29", "5T", "5L29", "4T", "4L28", "3T", "3L9", "3S0"], + thundershock: ["9L4", "8L4", "7L5", "6L5", "5L5", "5D", "4L7"], thunderwave: ["9M", "9L20", "8M", "8L20", "7M", "7L19", "6M", "6L19", "5M", "5L19", "4M", "3T"], toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], trailblaze: ["9M"], @@ -18943,14 +18931,14 @@ export const Learnsets: {[k: string]: LearnsetData} = { crosschop: ["3S1"], curse: ["7V"], detect: ["7V"], - discharge: ["9L34", "8L34", "7L36", "6L36", "5L44", "4L37"], + discharge: ["9L34", "8L34", "7L36", "6L36", "5L36", "4L37"], doubleedge: ["9M", "7V", "3T"], doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], dualchop: ["7T", "6T", "5T"], dynamicpunch: ["7V", "3T"], eerieimpulse: ["9M"], electricterrain: ["9M"], - electroball: ["9M", "8M", "7L22", "6L22", "5L32"], + electroball: ["9M", "8M", "7L22", "6L22", "5L22"], electroweb: ["9M", "8M", "7T", "6T", "5T"], endure: ["9M", "8M", "7V", "4M", "3T"], facade: ["9M", "8M", "8V", "7M", "6M", "5M", "4M", "3M"], @@ -18971,7 +18959,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { knockoff: ["9M"], leer: ["9L1", "8L1", "8V", "7L1", "7V", "6L1", "5L1", "4L1", "3L1", "3S0"], lightscreen: ["9M", "9L52", "8M", "8L52", "8V", "7M", "7L26", "7V", "6M", "6L26", "6S4", "5M", "5L26", "5S3", "4M", "4L25", "4S2", "3M", "3L17"], - lowkick: ["9M", "9L40", "8M", "8L40", "8V", "7T", "7L8", "6T", "6L8", "6S4", "5T", "5L11", "5S3", "4T", "4L10", "4S2"], + lowkick: ["9M", "9L40", "8M", "8L40", "8V", "7T", "7L8", "6T", "6L8", "6S4", "5T", "5L8", "5S3", "4T", "4L10", "4S2"], lowsweep: ["9M", "8M", "7M", "6M", "5M"], magnetrise: ["7T", "6T", "5T", "4T"], megakick: ["8M", "7V", "3T"], @@ -18995,10 +18983,10 @@ export const Learnsets: {[k: string]: LearnsetData} = { rockclimb: ["4M"], rocksmash: ["7V", "6M", "5M", "4M", "3M"], round: ["8M", "7M", "6M", "5M"], - screech: ["9L24", "8M", "8L24", "8V", "7L42", "7V", "6L42", "5L56", "4L52", "3L36"], + screech: ["9L24", "8M", "8L24", "8V", "7L42", "7V", "6L42", "5L42", "4L52", "3L36"], secretpower: ["6M", "4M", "3M"], seismictoss: ["8V", "7V", "3T"], - shockwave: ["9L16", "8L16", "7T", "7L15", "6T", "6L15", "6S4", "5L21", "5S3", "4M", "4L19", "4S2", "3M"], + shockwave: ["9L16", "8L16", "7T", "7L15", "6T", "6L15", "6S4", "5L15", "5S3", "4M", "4L19", "4S2", "3M"], signalbeam: ["7T", "6T", "5T", "4T"], skullbash: ["7V"], sleeptalk: ["9M", "8M", "7M", "7V", "6M", "5T", "4M", "3T"], @@ -19008,15 +18996,15 @@ export const Learnsets: {[k: string]: LearnsetData} = { substitute: ["9M", "8M", "8V", "7M", "7V", "6M", "5M", "4M", "3T"], supercellslam: ["9M"], swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], - swift: ["9M", "9L12", "8M", "8L12", "8V", "7L12", "7V", "6L12", "5L16", "5S3", "4T", "4L16", "3T", "3L25"], + swift: ["9M", "9L12", "8M", "8L12", "8V", "7L12", "7V", "6L12", "5L12", "5S3", "4T", "4L16", "3T", "3L25"], takedown: ["9M", "7V"], taunt: ["9M", "8V"], teleport: ["8V", "7V"], terablast: ["9M"], thief: ["9M", "8M", "7M", "7V", "6M", "5M", "4M", "3M"], - thunder: ["9M", "9L58", "8M", "8L58", "8V", "7M", "7L55", "7V", "6M", "6L55", "5M", "5L62", "4M", "4L58", "3M", "3L58"], - thunderbolt: ["9M", "9L46", "8M", "8L46", "8V", "7M", "7L49", "7V", "6M", "6L49", "5M", "5L50", "4M", "4L43", "3M", "3L47", "3S1"], - thunderpunch: ["9M", "9L28", "8M", "8L28", "8V", "7T", "7L29", "7V", "6T", "6L29", "6S4", "5T", "5L38", "4T", "4L28", "4S2", "3T", "3L1", "3S0"], + thunder: ["9M", "9L58", "8M", "8L58", "8V", "7M", "7L55", "7V", "6M", "6L55", "5M", "5L55", "4M", "4L58", "3M", "3L58"], + thunderbolt: ["9M", "9L46", "8M", "8L46", "8V", "7M", "7L49", "7V", "6M", "6L49", "5M", "5L49", "4M", "4L43", "3M", "3L47", "3S1"], + thunderpunch: ["9M", "9L28", "8M", "8L28", "8V", "7T", "7L29", "7V", "6T", "6L29", "6S4", "5T", "5L29", "4T", "4L28", "4S2", "3T", "3L1", "3S0"], thundershock: ["9L1", "8L1", "8V", "7L1", "7V", "6L1", "5L1", "4L1"], thunderwave: ["9M", "9L20", "8M", "8L20", "8V", "7M", "7L19", "7V", "6M", "6L19", "5M", "5L19", "4M", "3T", "3S1"], toxic: ["8V", "7M", "7V", "6M", "5M", "4M", "3M"], @@ -19055,14 +19043,14 @@ export const Learnsets: {[k: string]: LearnsetData} = { crosschop: ["4S0"], darkestlariat: ["8M"], dig: ["9M", "8M", "6M", "5M", "4M"], - discharge: ["9L34", "8L34", "7L36", "6L36", "5L44", "4L37", "4S1"], + discharge: ["9L34", "8L34", "7L36", "6L36", "5L36", "4L37", "4S1"], doubleedge: ["9M"], doubleteam: ["7M", "6M", "5M", "4M"], dualchop: ["7T", "6T", "5T"], earthquake: ["9M", "8M", "7M", "6M", "5M", "4M", "4S0"], eerieimpulse: ["9M"], electricterrain: ["9M", "8M", "7L1", "6L1"], - electroball: ["9M", "8M", "7L22", "6L22", "5L32"], + electroball: ["9M", "8M", "7L22", "6L22", "5L22"], electroweb: ["9M", "8M", "7T", "6T", "5T"], endure: ["9M", "8M", "4M"], facade: ["9M", "8M", "7M", "6M", "5M", "4M"], @@ -19073,7 +19061,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { focusblast: ["9M", "8M", "7M", "6M", "5M", "4M"], focuspunch: ["9M", "7T", "6T", "4M"], frustration: ["7M", "6M", "5M", "4M"], - gigaimpact: ["9M", "9L64", "8M", "8L64", "7M", "7L62", "6M", "6L62", "5M", "5L68", "4M", "4L67"], + gigaimpact: ["9M", "9L64", "8M", "8L64", "7M", "7L62", "6M", "6L62", "5M", "5L62", "4M", "4L67"], headbutt: ["4T"], helpinghand: ["9M", "8M", "7T", "6T", "5T", "4T"], hiddenpower: ["7M", "6M", "5M", "4M"], @@ -19107,9 +19095,9 @@ export const Learnsets: {[k: string]: LearnsetData} = { rocksmash: ["6M", "5M", "4M"], rocktomb: ["9M", "8M", "7M", "6M", "5M", "4M"], round: ["8M", "7M", "6M", "5M"], - screech: ["9L24", "8M", "8L24", "7L42", "6L42", "5L56", "4L52"], + screech: ["9L24", "8M", "8L24", "7L42", "6L42", "5L42", "4L52"], secretpower: ["6M", "4M"], - shockwave: ["9L16", "8L16", "7T", "7L15", "6T", "6L15", "5L21", "4M", "4L19"], + shockwave: ["9L16", "8L16", "7T", "7L15", "6T", "6L15", "5L15", "4M", "4L19"], signalbeam: ["7T", "6T", "5T", "4T"], sleeptalk: ["9M", "8M", "7M", "6M", "5T", "4M"], snore: ["8M", "7T", "6T", "5T", "4T"], @@ -19118,14 +19106,14 @@ export const Learnsets: {[k: string]: LearnsetData} = { substitute: ["9M", "8M", "7M", "6M", "5M", "4M"], supercellslam: ["9M"], swagger: ["7M", "6M", "5M", "4M"], - swift: ["9M", "9L12", "8M", "8L12", "7L12", "6L12", "5L16", "4T", "4L16"], + swift: ["9M", "9L12", "8M", "8L12", "7L12", "6L12", "5L12", "4T", "4L16"], takedown: ["9M"], taunt: ["9M", "8M", "7M", "6M", "5M", "4M"], terablast: ["9M"], thief: ["9M", "8M", "7M", "6M", "5M", "4M"], - thunder: ["9M", "9L58", "8M", "8L58", "7M", "7L55", "6M", "6L55", "5M", "5L62", "4M", "4L58"], - thunderbolt: ["9M", "9L46", "8M", "8L46", "7M", "7L49", "6M", "6L49", "5M", "5L50", "4M", "4L43", "4S1"], - thunderpunch: ["9M", "9L28", "8M", "8L28", "7T", "7L29", "6T", "6L29", "5T", "5L38", "4T", "4L28", "4S0", "4S1"], + thunder: ["9M", "9L58", "8M", "8L58", "7M", "7L55", "6M", "6L55", "5M", "5L55", "4M", "4L58"], + thunderbolt: ["9M", "9L46", "8M", "8L46", "7M", "7L49", "6M", "6L49", "5M", "5L49", "4M", "4L43", "4S1"], + thunderpunch: ["9M", "9L28", "8M", "8L28", "7T", "7L29", "6T", "6L29", "5T", "5L29", "4T", "4L28", "4S0", "4S1"], thundershock: ["9L1", "8L1", "7L1", "6L1", "5L1", "4L1"], thunderwave: ["9M", "9L20", "8M", "8L20", "7M", "7L19", "6M", "6L19", "5M", "5L19", "4M"], torment: ["7M", "6M", "5M", "4M"], @@ -19164,16 +19152,16 @@ export const Learnsets: {[k: string]: LearnsetData} = { doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], dualchop: ["7T", "6T", "5T"], dynamicpunch: ["9E", "8E", "7E", "7V", "6E", "5E", "4E", "3T"], - ember: ["9L4", "8L4", "7L5", "7V", "6L5", "5L7", "5D", "4L7", "3L1"], + ember: ["9L4", "8L4", "7L5", "7V", "6L5", "5L5", "5D", "4L7", "3L1"], endure: ["9M", "8M", "7V", "4M", "3T"], facade: ["9M", "8M", "7M", "6M", "5M", "4M", "3M"], - feintattack: ["7L12", "6L12", "5L16", "4L16"], - fireblast: ["9M", "9L48", "8M", "8L48", "7M", "7L43", "7V", "6M", "6L43", "5M", "5L49", "4M", "4L46", "3M", "3L49"], - firepunch: ["9M", "9L28", "8M", "8L28", "7T", "7L29", "7V", "6T", "6L29", "5T", "5L34", "4T", "4L28", "3T", "3L19"], - firespin: ["9M", "8M", "7L15", "6L15", "5L19", "4L19"], - flameburst: ["7L22", "6L22", "5L28"], + feintattack: ["7L12", "6L12", "5L12", "4L16"], + fireblast: ["9M", "9L48", "8M", "8L48", "7M", "7L43", "7V", "6M", "6L43", "5M", "5L43", "4M", "4L46", "3M", "3L49"], + firepunch: ["9M", "9L28", "8M", "8L28", "7T", "7L29", "7V", "6T", "6L29", "5T", "5L29", "4T", "4L28", "3T", "3L19"], + firespin: ["9M", "8M", "7L15", "6L15", "5L15", "4L19"], + flameburst: ["7L22", "6L22", "5L22"], flamecharge: ["9M", "7M", "6M", "5M"], - flamethrower: ["9M", "9L40", "8M", "8L40", "7M", "7L40", "7V", "6M", "6L40", "5M", "5L43", "4M", "4L37", "3M", "3L37"], + flamethrower: ["9M", "9L40", "8M", "8L40", "7M", "7L40", "7V", "6M", "6L40", "5M", "5L40", "4M", "4L37", "3M", "3L37"], flamewheel: ["9L16", "8L16"], flareblitz: ["9M", "8M", "7E", "6E", "5E", "4E"], fling: ["9M", "8M", "7M", "6M", "5M", "4M"], @@ -19188,7 +19176,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { incinerate: ["6M", "5M"], irontail: ["8M", "7T", "7E", "7V", "6T", "6E", "5T", "5E", "4M", "3M"], karatechop: ["7E", "7V", "6E", "5E", "4E", "3E"], - lavaplume: ["9L32", "8L32", "7L33", "6L33", "5L37", "4L34"], + lavaplume: ["9L32", "8L32", "7L33", "6L33", "5L33", "4L34"], leer: ["9L1", "8L1", "7L1", "7V", "6L1", "5L1", "4L1", "3L7"], lowkick: ["9M", "9L36", "8M", "8L36"], machpunch: ["9E", "8E", "7E", "6E", "5E", "4E"], @@ -19213,10 +19201,10 @@ export const Learnsets: {[k: string]: LearnsetData} = { seismictoss: ["3T"], sleeptalk: ["9M", "8M", "7M", "7V", "6M", "5T", "4M", "3T"], smog: ["9L1", "8L1", "7L1", "7V", "6L1", "5L1", "4L1", "3L13"], - smokescreen: ["9L8", "8L8", "7L8", "7V", "6L8", "5L10", "4L10", "3L25"], + smokescreen: ["9L8", "8L8", "7L8", "7V", "6L8", "5L8", "4L10", "3L25"], snore: ["8M", "7T", "7V", "6T", "5T", "4T", "3T"], substitute: ["9M", "8M", "7M", "6M", "5M", "4M", "3T"], - sunnyday: ["9M", "9L44", "8M", "8L44", "7M", "7L36", "7V", "6M", "6L36", "5M", "5L46", "4M", "4L43", "3M", "3L31"], + sunnyday: ["9M", "9L44", "8M", "8L44", "7M", "7L36", "7V", "6M", "6L36", "5M", "5L36", "4M", "4L43", "3M", "3L31"], swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], takedown: ["9M"], temperflare: ["9M"], @@ -19252,13 +19240,13 @@ export const Learnsets: {[k: string]: LearnsetData} = { ember: ["9L1", "8L1", "8V", "7L1", "7V", "6L1", "5L1", "4L1", "3L1", "3S0"], endure: ["9M", "8M", "7V", "4M", "3T"], facade: ["9M", "8M", "8V", "7M", "6M", "5M", "4M", "3M"], - feintattack: ["7L12", "6L12", "5L16", "5S3", "4L16"], - fireblast: ["9M", "9L58", "8M", "8L58", "8V", "7M", "7L55", "7V", "6M", "6L55", "5M", "5L62", "4M", "4L54", "3M", "3L57", "3S1"], - firepunch: ["9M", "9L28", "8M", "8L28", "8V", "7T", "7L29", "7V", "6T", "6L29", "6S4", "5T", "5L38", "4T", "4L28", "4S2", "3T", "3L1", "3S0"], - firespin: ["9M", "8M", "8V", "7L15", "6L15", "6S4", "5L21", "5S3", "4L19", "4S2"], - flameburst: ["7L22", "6L22", "5L32"], + feintattack: ["7L12", "6L12", "5L12", "5S3", "4L16"], + fireblast: ["9M", "9L58", "8M", "8L58", "8V", "7M", "7L55", "7V", "6M", "6L55", "5M", "5L55", "4M", "4L54", "3M", "3L57", "3S1"], + firepunch: ["9M", "9L28", "8M", "8L28", "8V", "7T", "7L29", "7V", "6T", "6L29", "6S4", "5T", "5L29", "4T", "4L28", "4S2", "3T", "3L1", "3S0"], + firespin: ["9M", "8M", "8V", "7L15", "6L15", "6S4", "5L15", "5S3", "4L19", "4S2"], + flameburst: ["7L22", "6L22", "5L22"], flamecharge: ["9M", "7M", "6M", "5M"], - flamethrower: ["9M", "9L46", "8M", "8L46", "8V", "7M", "7L49", "7V", "6M", "6L49", "5M", "5L50", "4M", "4L41", "3M", "3L41"], + flamethrower: ["9M", "9L46", "8M", "8L46", "8V", "7M", "7L49", "7V", "6M", "6L49", "5M", "5L49", "4M", "4L41", "3M", "3L41"], flamewheel: ["9L16", "8L16"], flareblitz: ["9M", "8M"], fling: ["9M", "8M", "7M", "6M", "5M", "4M"], @@ -19277,7 +19265,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { incinerate: ["6M", "5M"], irontail: ["8M", "8V", "7T", "7V", "6T", "5T", "4M", "3M"], knockoff: ["9M"], - lavaplume: ["9L34", "8L34", "7L36", "6L36", "5L44", "4L36"], + lavaplume: ["9L34", "8L34", "7L36", "6L36", "5L36", "4L36"], leer: ["9L1", "8L1", "8V", "7L1", "7V", "6L1", "5L1", "4L1", "3L1", "3S0"], lowkick: ["9M", "9L40", "8M", "8L40", "8V", "7T", "6T", "5T", "4T"], lowsweep: ["9M", "8M", "7M", "6M", "5M"], @@ -19309,12 +19297,12 @@ export const Learnsets: {[k: string]: LearnsetData} = { skullbash: ["7V"], sleeptalk: ["9M", "8M", "7M", "7V", "6M", "5T", "4M", "3T"], smog: ["9L1", "8L1", "8V", "7L1", "7V", "6L1", "5L1", "4L1", "3L1", "3S0"], - smokescreen: ["9L1", "8L1", "8V", "7L8", "7V", "6L8", "6S4", "5L11", "5S3", "4L10", "4S2", "3L25"], + smokescreen: ["9L1", "8L1", "8V", "7L8", "7V", "6L8", "6S4", "5L8", "5S3", "4L10", "4S2", "3L25"], snore: ["8M", "7T", "7V", "6T", "5T", "4T", "3T"], strength: ["7V", "6M", "5M", "4M", "3M"], submission: ["7V"], substitute: ["9M", "8M", "8V", "7M", "7V", "6M", "5M", "4M", "3T"], - sunnyday: ["9M", "9L52", "8M", "8L52", "7M", "7L42", "7V", "6M", "6L42", "5M", "5L56", "4M", "4L49", "3M", "3L33"], + sunnyday: ["9M", "9L52", "8M", "8L52", "7M", "7L42", "7V", "6M", "6L42", "5M", "5L42", "4M", "4L49", "3M", "3L33"], swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], takedown: ["9M", "7V"], taunt: ["9M", "8V"], @@ -19362,13 +19350,13 @@ export const Learnsets: {[k: string]: LearnsetData} = { ember: ["9L1", "8L1", "7L1", "6L1", "5L1", "4L1"], endure: ["9M", "8M", "4M"], facade: ["9M", "8M", "7M", "6M", "5M", "4M"], - feintattack: ["7L12", "6L12", "5L16", "4L16"], - fireblast: ["9M", "9L58", "8M", "8L58", "7M", "7L55", "6M", "6L55", "5M", "5L62", "4M", "4L58"], - firepunch: ["9M", "9L28", "8M", "8L28", "7T", "7L29", "6T", "6L29", "5T", "5L38", "4T", "4L28", "4S1"], - firespin: ["9M", "8M", "7L15", "6L15", "5L21", "4L19"], - flameburst: ["7L22", "6L22", "5L32"], + feintattack: ["7L12", "6L12", "5L12", "4L16"], + fireblast: ["9M", "9L58", "8M", "8L58", "7M", "7L55", "6M", "6L55", "5M", "5L55", "4M", "4L58"], + firepunch: ["9M", "9L28", "8M", "8L28", "7T", "7L29", "6T", "6L29", "5T", "5L29", "4T", "4L28", "4S1"], + firespin: ["9M", "8M", "7L15", "6L15", "5L15", "4L19"], + flameburst: ["7L22", "6L22", "5L22"], flamecharge: ["9M", "7M", "6M", "5M"], - flamethrower: ["9M", "9L46", "8M", "8L46", "7M", "7L49", "6M", "6L49", "5M", "5L50", "4M", "4L43", "4S0", "4S1"], + flamethrower: ["9M", "9L46", "8M", "8L46", "7M", "7L49", "6M", "6L49", "5M", "5L49", "4M", "4L43", "4S0", "4S1"], flamewheel: ["9L16", "8L16"], flareblitz: ["9M", "8M"], fling: ["9M", "8M", "7M", "6M", "5M", "4M"], @@ -19382,12 +19370,12 @@ export const Learnsets: {[k: string]: LearnsetData} = { heatwave: ["9M", "8M", "7T", "6T", "5T", "4T"], helpinghand: ["9M", "8M", "7T", "6T", "5T", "4T"], hiddenpower: ["7M", "6M", "5M", "4M"], - hyperbeam: ["9M", "9L64", "8M", "8L64", "7M", "7L62", "6M", "6L62", "5M", "5L68", "4M", "4L67", "4S0"], + hyperbeam: ["9M", "9L64", "8M", "8L64", "7M", "7L62", "6M", "6L62", "5M", "5L62", "4M", "4L67", "4S0"], hypervoice: ["9M"], incinerate: ["6M", "5M"], irontail: ["8M", "7T", "6T", "5T", "4M"], knockoff: ["9M"], - lavaplume: ["9L34", "8L34", "7L36", "6L36", "5L44", "4L37", "4S1"], + lavaplume: ["9L34", "8L34", "7L36", "6L36", "5L36", "4L37", "4S1"], leer: ["9L1", "8L1", "7L1", "6L1", "5L1", "4L1"], lowkick: ["9M", "9L40", "8M", "8L40", "7T", "6T", "5T", "4T"], lowsweep: ["9M", "8M", "7M", "6M", "5M"], @@ -19423,7 +19411,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { stompingtantrum: ["9M", "8M", "7T"], strength: ["6M", "5M", "4M"], substitute: ["9M", "8M", "7M", "6M", "5M", "4M"], - sunnyday: ["9M", "9L52", "8M", "8L52", "7M", "7L42", "6M", "6L42", "5M", "5L56", "4M", "4L52"], + sunnyday: ["9M", "9L52", "8M", "8L52", "7M", "7L42", "6M", "6L42", "5M", "5L42", "4M", "4L52"], swagger: ["7M", "6M", "5M", "4M"], takedown: ["9M"], taunt: ["9M", "8M", "7M", "6M", "5M", "4M"], @@ -19449,7 +19437,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { bide: ["7V"], bind: ["8L8", "8V", "7T", "7L4", "7V", "6T", "6L4", "5T", "5L4", "4L4", "3L7"], bodyslam: ["8M", "7V", "3T"], - brickbreak: ["8M", "8V", "7M", "7L26", "6M", "6L18", "5M", "5L21", "4M", "4L21", "3M", "3L31"], + brickbreak: ["8M", "8V", "7M", "7L26", "6M", "6L18", "5M", "5L18", "4M", "4L21", "3M", "3L31"], brutalswing: ["8M", "7M"], bugbite: ["8L16", "7T", "7E", "6T", "6E", "5T", "5E"], bulkup: ["8M", "8V", "7M", "6M", "5M", "4M", "3M"], @@ -19479,7 +19467,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { furycutter: ["7V", "4T", "3T"], gigaimpact: ["8M", "7M", "6M", "5M", "4M"], guillotine: ["8L48", "8V", "7L50", "7V", "6L47", "5L47", "4L47", "3L37", "3S0"], - harden: ["8L1", "8V", "7L11", "7V", "6L11", "5L13", "4L13", "3L19"], + harden: ["8L1", "8V", "7L11", "7V", "6L11", "5L11", "4L13", "3L19"], headbutt: ["8V", "7V", "4T"], helpinghand: ["8M", "8V", "3S0"], hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], @@ -19497,7 +19485,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { raindance: ["8M", "7M", "6M", "5M", "4M", "3M"], rest: ["8M", "8V", "7M", "7V", "6M", "5M", "4M", "3M"], return: ["7M", "7V", "6M", "6S1", "5M", "4M", "3M"], - revenge: ["8M", "7L15", "6L15", "5L18", "4L18", "3L25"], + revenge: ["8M", "7L15", "6L15", "5L15", "4L18", "3L25"], reversal: ["8M"], rockclimb: ["4M"], rockslide: ["8M", "8V", "7M", "6M", "5M", "4M", "3T"], @@ -19516,10 +19504,10 @@ export const Learnsets: {[k: string]: LearnsetData} = { strength: ["8L36", "7V", "6M", "5M", "4M", "3M"], stringshot: ["4T"], strugglebug: ["6M", "5M"], - submission: ["8L44", "8V", "7L33", "7V", "6L26", "5L42", "4L42", "3L43", "3S0"], + submission: ["8L44", "8V", "7L33", "7V", "6L26", "5L26", "4L42", "3L43", "3S0"], substitute: ["8M", "8V", "7M", "7V", "6M", "5M", "4M", "3T"], sunnyday: ["8M", "7M", "7V", "6M", "5M", "4M", "3M"], - superpower: ["8M", "8L52", "8V", "7T", "7L47", "7E", "6T", "6L43", "6E", "5T", "5L52", "5E", "4T", "4L52"], + superpower: ["8M", "8L52", "8V", "7T", "7L47", "7E", "6T", "6L43", "6E", "5T", "5L43", "5E", "4T", "4L52"], swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], swordsdance: ["8M", "8L40", "8V", "7M", "7L40", "7V", "6M", "6L40", "6S2", "5M", "5L38", "4M", "4L38", "3T", "3L49"], takedown: ["7V"], @@ -19528,8 +19516,8 @@ export const Learnsets: {[k: string]: LearnsetData} = { throatchop: ["8M", "7T"], toxic: ["8V", "7M", "7V", "6M", "5M", "4M", "3M"], visegrip: ["8L1", "8V", "7L1", "7V", "6L1", "5L1", "5D", "4L1", "3L1"], - vitalthrow: ["8L28", "7L18", "6L18", "5L25", "4L25"], - xscissor: ["8M", "8L32", "8V", "7M", "7L29", "6M", "6L29", "6S1", "5M", "5L30", "4M", "4L30"], + vitalthrow: ["8L28", "7L18", "6L18", "5L22", "4L25"], + xscissor: ["8M", "8L32", "8V", "7M", "7L29", "6M", "6L29", "6S1", "5M", "5L29", "4M", "4L30"], }, eventData: [ {generation: 3, level: 35, abilities: ["hypercutter"], moves: ["helpinghand", "guillotine", "falseswipe", "submission"]}, @@ -20105,9 +20093,9 @@ export const Learnsets: {[k: string]: LearnsetData} = { alluringvoice: ["9M"], attract: ["8M", "7M", "7V", "6M", "5M", "5S2", "4M", "4S0", "3M"], babydolleyes: ["9L15", "8L15", "7L9", "7S5", "6L9", "6S3", "6S4"], - batonpass: ["9M", "9L35", "8M", "8L35", "7L33", "7V", "6L33", "5L36", "4L36", "3L36"], + batonpass: ["9M", "9L35", "8M", "8L35", "7L33", "7V", "6L33", "5L33", "4L36", "3L36"], bide: ["7V"], - bite: ["9L25", "8L25", "8V", "7L17", "7V", "6L17", "5L29", "4L29", "4S0", "3L30"], + bite: ["9L25", "8L25", "8V", "7L17", "7V", "6L17", "5L17", "4L29", "4S0", "3L30"], bodyslam: ["9M", "8M", "7V", "3T"], calmmind: ["9M"], captivate: ["7E", "6E", "4M"], @@ -20129,7 +20117,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { flail: ["9E", "8E", "7E", "7V", "6E", "5E", "4E", "4S1", "3E"], focusenergy: ["8M", "7V"], frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], - growl: ["9L1", "8L1", "8V", "7L1", "7V", "6L1", "5L15", "4L15", "3L16"], + growl: ["9L1", "8L1", "8V", "7L1", "7V", "6L1", "5L9", "4L15", "3L16"], headbutt: ["8V", "7V", "4T"], healbell: ["7T", "6T", "5T", "4T"], helpinghand: ["9M", "9L1", "8M", "8L1", "8V", "8S6", "7T", "7L1", "6T", "6L1", "6S4", "5T", "5L1", "4T", "4L1", "4S0", "3L1"], @@ -20137,13 +20125,13 @@ export const Learnsets: {[k: string]: LearnsetData} = { hypervoice: ["9M", "8M", "7T", "6T", "5T"], irontail: ["8M", "8V", "7T", "7V", "6T", "5T", "4M", "4S1", "3M"], laserfocus: ["7T"], - lastresort: ["9L55", "8L55", "7T", "7L41", "6T", "6L41", "5T", "5L50", "4T", "4L50"], + lastresort: ["9L55", "8L55", "7T", "7L41", "6T", "6L41", "5T", "5L41", "4T", "4L50"], mimic: ["7V", "3T"], mudslap: ["9M", "9E", "8E", "7V", "4T", "3T"], naturalgift: ["7E", "6E", "5E", "4M"], payday: ["8M", "8V"], protect: ["9M", "8M", "8V", "7M", "7V", "6M", "5M", "4M", "3M"], - quickattack: ["9L10", "8L10", "8V", "7L13", "7V", "6L13", "6S4", "5L22", "4L22", "4S1", "3L23"], + quickattack: ["9L10", "8L10", "8V", "7L13", "7V", "6L13", "6S4", "5L13", "4L22", "4S1", "3L23"], rage: ["7V"], raindance: ["9M", "8M", "7M", "7V", "6M", "5M", "4M", "3M"], reflect: ["8V", "7V"], @@ -20153,7 +20141,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { return: ["7M", "7V", "6M", "5M", "5S2", "4M", "3M"], roar: ["9M"], round: ["8M", "7M", "6M", "5M"], - sandattack: ["9L5", "8L5", "8V", "7L5", "7V", "7S5", "6L5", "6S3", "5L8", "5D", "4L8", "3L8"], + sandattack: ["9L5", "8L5", "8V", "7L5", "7V", "7S5", "6L5", "6S3", "5L5", "5D", "4L8", "3L8"], secretpower: ["6M", "4M", "3M"], shadowball: ["9M", "8M", "8V", "7M", "7V", "6M", "5M", "4M", "3M"], sing: ["5S2"], @@ -20168,12 +20156,12 @@ export const Learnsets: {[k: string]: LearnsetData} = { synchronoise: ["7E", "6E", "5E"], tackle: ["9L1", "8L1", "8V", "8S6", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], tailwhip: ["9L1", "8L1", "8V", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], - takedown: ["9M", "9L40", "8L40", "8V", "7L25", "7V", "6L25", "5L43", "4L43", "3L42"], + takedown: ["9M", "9L40", "8L40", "8V", "7L25", "7V", "6L25", "5L25", "4L43", "3L42"], terablast: ["9M"], tickle: ["9E", "8E", "7E", "6E", "5E", "4E", "3E"], toxic: ["8V", "7M", "7V", "6M", "5M", "4M", "3M"], trailblaze: ["9M"], - trumpcard: ["7L45", "6L45", "5L57", "4L57", "4S1"], + trumpcard: ["7L45", "6L45", "5L45", "4L57", "4S1"], weatherball: ["9M", "8M"], wish: ["9E", "8E", "7E", "6E", "5E", "4E", "3E"], workup: ["8M", "7M", "5M"], @@ -20233,12 +20221,12 @@ export const Learnsets: {[k: string]: LearnsetData} = { }, vaporeon: { learnset: { - acidarmor: ["9L45", "8L45", "8V", "7L29", "7V", "6L29", "5L64", "4L64", "3L47"], + acidarmor: ["9L45", "8L45", "8V", "7L29", "7V", "6L29", "5L29", "4L64", "3L47"], alluringvoice: ["9M"], - aquaring: ["9L35", "8L35", "7L25", "6L25", "5L43", "4L43"], + aquaring: ["9L35", "8L35", "7L25", "6L25", "5L25", "4L43"], aquatail: ["7T", "6T", "5T", "4T"], attract: ["8M", "7M", "7V", "6M", "5M", "4M", "3M"], - aurorabeam: ["9L30", "8L30", "8V", "7L20", "7V", "6L20", "5L36", "4L36", "3L36"], + aurorabeam: ["9L30", "8L30", "8V", "7L20", "7V", "6L20", "5L21", "4L36", "3L36"], babydolleyes: ["9L15", "8L15", "7L9"], batonpass: ["9M", "9L1", "8M", "8L1"], bide: ["7V"], @@ -20272,28 +20260,28 @@ export const Learnsets: {[k: string]: LearnsetData} = { gigaimpact: ["9M", "8M", "7M", "6M", "5M", "4M"], growl: ["9L1", "8L1", "8V"], hail: ["8M", "7M", "6M", "5M", "4M", "3M"], - haze: ["9M", "9L20", "8L20", "8V", "7L33", "7V", "6L33", "5L57", "4L57", "3L42"], + haze: ["9M", "9L20", "8L20", "8V", "7L33", "7V", "6L33", "5L33", "4L57", "3L42"], headbutt: ["8V", "7V", "4T"], healbell: ["7T", "6T", "5T", "4T"], helpinghand: ["9M", "9L1", "8M", "8L1", "8V", "7T", "7L1", "6T", "6L1", "5T", "5L1", "5S0", "4T", "4L1", "3L1"], hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], - hydropump: ["9M", "9L50", "8M", "8L50", "8V", "7L45", "7V", "6L45", "5L71", "4L71", "3L52"], + hydropump: ["9M", "9L50", "8M", "8L50", "8V", "7L45", "7V", "6L45", "5L45", "4L71", "3L52"], hyperbeam: ["9M", "8M", "8V", "7M", "7V", "6M", "5M", "4M", "3M"], hypervoice: ["9M", "8M", "7T", "6T", "5T"], icebeam: ["9M", "8M", "8V", "7M", "7V", "7S2", "6M", "5M", "4M", "3M"], icywind: ["9M", "8M", "7T", "7V", "6T", "5T", "4T", "3T"], irontail: ["8M", "8V", "7T", "7V", "6T", "5T", "4M", "3M"], laserfocus: ["7T"], - lastresort: ["9L55", "8L55", "7T", "7L41", "6T", "6L41", "5T", "5L50", "4T", "4L50"], + lastresort: ["9L55", "8L55", "7T", "7L41", "6T", "6L41", "5T", "5L41", "4T", "4L50"], liquidation: ["9M", "8M"], mimic: ["7V", "3T"], mist: ["7V"], - muddywater: ["9M", "9L40", "8M", "8L40", "7L37", "6L37", "5L78", "4L78"], + muddywater: ["9M", "9L40", "8M", "8L40", "7L37", "6L37", "5L37", "4L78"], mudslap: ["9M", "7V", "4T", "3T"], naturalgift: ["4M"], payday: ["8M", "8V"], protect: ["9M", "8M", "8V", "7M", "7V", "6M", "5M", "4M", "3M"], - quickattack: ["9L10", "8L10", "8V", "7L13", "7V", "6L13", "5L22", "4L22", "3L23"], + quickattack: ["9L10", "8L10", "8V", "7L13", "7V", "6L13", "5L13", "4L22", "3L23"], rage: ["7V"], raindance: ["9M", "8M", "7M", "7V", "7S2", "6M", "5M", "4M", "3M"], reflect: ["8V", "7V"], @@ -20303,7 +20291,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { roar: ["9M", "7M", "7V", "6M", "5M", "4M", "3M"], rocksmash: ["6M", "5M", "4M"], round: ["8M", "7M", "6M", "5M"], - sandattack: ["9L5", "8L5", "8V", "7L5", "7V", "6L5", "6S1", "5L8", "5S0", "4L8", "3L8"], + sandattack: ["9L5", "8L5", "8V", "7L5", "7V", "6L5", "6S1", "5L5", "5S0", "4L8", "3L8"], scald: ["9M", "8M", "8V", "7M", "7S2", "6M", "5M"], secretpower: ["6M", "4M", "3M"], shadowball: ["9M", "8M", "8V", "7M", "7V", "6M", "5M", "4M", "3M"], @@ -20325,8 +20313,8 @@ export const Learnsets: {[k: string]: LearnsetData} = { toxic: ["8V", "7M", "7V", "6M", "5M", "4M", "3M"], trailblaze: ["9M"], waterfall: ["9M", "8M", "8V", "7M", "7V", "6M", "5M", "4M", "3M"], - watergun: ["9L0", "8L0", "8V", "7L1", "7V", "6L9", "6S1", "5L15", "4L15", "3L16"], - waterpulse: ["9M", "9L25", "8L25", "7T", "7L17", "6T", "6L17", "4M", "3M"], + watergun: ["9L0", "8L0", "8V", "7L1", "7V", "6L9", "6S1", "5L9", "4L15", "3L16"], + waterpulse: ["9M", "9L25", "8L25", "7T", "7L17", "6T", "6L17", "5L17", "4M", "3M"], weatherball: ["9M", "8M"], whirlpool: ["9M", "8M", "7V", "4M"], workup: ["8M", "7M", "5M"], @@ -20340,7 +20328,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { }, jolteon: { learnset: { - agility: ["9M", "9L45", "8M", "8L45", "8V", "7L29", "7V", "6L29", "5L64", "4L64", "3L47"], + agility: ["9M", "9L45", "8M", "8L45", "8V", "7L29", "7V", "6L29", "5L29", "4L64", "3L47"], alluringvoice: ["9M"], attract: ["8M", "7M", "7V", "6M", "5M", "4M", "3M"], babydolleyes: ["9L15", "8L15", "7L9"], @@ -20360,9 +20348,9 @@ export const Learnsets: {[k: string]: LearnsetData} = { curse: ["9M", "7V"], detect: ["7V"], dig: ["9M", "8M", "8V", "6M", "5M", "4M", "3M"], - discharge: ["9L40", "8L40", "7L37", "6L37", "5L78", "4L78"], + discharge: ["9L40", "8L40", "7L37", "6L37", "5L37", "4L78"], doubleedge: ["9M", "9L1", "8L1", "7V", "3T"], - doublekick: ["9L25", "8L25", "8V", "7L17", "7V", "6L17", "5L29", "4L29", "3L30"], + doublekick: ["9L25", "8L25", "8V", "7L17", "7V", "6L17", "5L17", "4L29", "3L30"], doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], echoedvoice: ["7M", "6M", "5M"], eerieimpulse: ["9M"], @@ -20386,7 +20374,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { hypervoice: ["9M", "8M", "7T", "6T", "5T"], irontail: ["8M", "8V", "7T", "7V", "6T", "5T", "4M", "3M"], laserfocus: ["7T"], - lastresort: ["9L55", "8L55", "7T", "7L41", "6T", "6L41", "5T", "5L50", "4T", "4L50"], + lastresort: ["9L55", "8L55", "7T", "7L41", "6T", "6L41", "5T", "5L41", "4T", "4L50"], lightscreen: ["9M", "8M", "8V", "7M", "7S2", "6M", "5M", "4M"], magnetrise: ["7T", "6T", "5T", "4T"], metalsound: ["9M"], @@ -20394,9 +20382,9 @@ export const Learnsets: {[k: string]: LearnsetData} = { mudslap: ["9M", "7V", "4T", "3T"], naturalgift: ["4M"], payday: ["8M", "8V"], - pinmissile: ["9L35", "8M", "8L35", "8V", "7L25", "7V", "6L25", "5L36", "4L36", "3L36"], + pinmissile: ["9L35", "8M", "8L35", "8V", "7L25", "7V", "6L25", "5L25", "4L36", "3L36"], protect: ["9M", "8M", "8V", "7M", "7V", "6M", "5M", "4M", "3M"], - quickattack: ["9L10", "8L10", "8V", "7L13", "7V", "6L13", "5L22", "4L22", "3L23"], + quickattack: ["9L10", "8L10", "8V", "7L13", "7V", "6L13", "5L13", "4L22", "3L23"], rage: ["7V"], raindance: ["9M", "8M", "7M", "7V", "6M", "5M", "4M", "3M"], reflect: ["8V", "7V"], @@ -20407,7 +20395,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { roar: ["9M", "7M", "7V", "6M", "5M", "4M", "3M"], rocksmash: ["6M", "5M", "4M"], round: ["8M", "7M", "6M", "5M"], - sandattack: ["9L5", "8L5", "8V", "7L5", "7V", "6L5", "6S1", "5L8", "5S0", "4L8", "3L8"], + sandattack: ["9L5", "8L5", "8V", "7L5", "7V", "6L5", "6S1", "5L5", "5S0", "4L8", "3L8"], secretpower: ["6M", "4M", "3M"], shadowball: ["9M", "8M", "8V", "7M", "7V", "7S2", "6M", "5M", "4M", "3M"], shockwave: ["7T", "6T", "4M", "3M"], @@ -20425,11 +20413,11 @@ export const Learnsets: {[k: string]: LearnsetData} = { tailwhip: ["9L1", "8L1", "8V", "7L1", "7V", "6L1", "6S1", "5L1", "5S0", "4L1", "3L1"], takedown: ["9M", "9L1", "8L1", "7V"], terablast: ["9M"], - thunder: ["9M", "9L50", "8M", "8L50", "8V", "7M", "7L45", "7V", "6M", "6L45", "5M", "5L71", "4M", "4L71", "3M", "3L52"], + thunder: ["9M", "9L50", "8M", "8L50", "8V", "7M", "7L45", "7V", "6M", "6L45", "5M", "5L45", "4M", "4L71", "3M", "3L52"], thunderbolt: ["9M", "8M", "8V", "7M", "7V", "7S2", "6M", "5M", "4M", "3M"], - thunderfang: ["9M", "9L30", "8M", "8L30", "7L20", "6L20", "5L43", "4L43"], - thundershock: ["9L0", "8L0", "8V", "7L1", "7V", "6L9", "6S1", "5L15", "4L15", "3L16"], - thunderwave: ["9M", "9L20", "8M", "8L20", "8V", "7M", "7L33", "7V", "6M", "6L33", "5M", "5L57", "4M", "4L57", "3T", "3L42"], + thunderfang: ["9M", "9L30", "8M", "8L30", "7L20", "6L20", "5L21", "4L43"], + thundershock: ["9L0", "8L0", "8V", "7L1", "7V", "6L9", "6S1", "5L9", "4L15", "3L16"], + thunderwave: ["9M", "9L20", "8M", "8L20", "8V", "7M", "7L33", "7V", "6M", "6L33", "5M", "5L33", "4M", "4L57", "3T", "3L42"], toxic: ["8V", "7M", "7V", "6M", "5M", "4M", "3M"], trailblaze: ["9M"], voltswitch: ["9M", "8M", "7M", "7S2", "6M", "5M"], @@ -20452,7 +20440,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { babydolleyes: ["9L15", "8L15", "7L9"], batonpass: ["9M", "9L1", "8M", "8L1"], bide: ["7V"], - bite: ["9L25", "8L25", "7L17", "7V", "6L17", "5L29", "4L29", "3L30"], + bite: ["9L25", "8L25", "7L17", "7V", "6L17", "5L17", "4L29", "3L30"], bodyslam: ["9M", "8M", "7V", "3T"], burningjealousy: ["9M", "8T"], calmmind: ["9M"], @@ -20469,14 +20457,14 @@ export const Learnsets: {[k: string]: LearnsetData} = { doublekick: ["8V"], doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], echoedvoice: ["7M", "6M", "5M"], - ember: ["9L0", "8L0", "8V", "7L1", "7V", "6L9", "6S1", "5L15", "4L15", "3L16"], + ember: ["9L0", "8L0", "8V", "7L1", "7V", "6L9", "6S1", "5L9", "4L15", "3L16"], endeavor: ["9M"], endure: ["9M", "8M", "7V", "4M", "3T"], facade: ["9M", "8M", "8V", "7M", "7S2", "6M", "5M", "4M", "3M"], faketears: ["9M", "8M"], - fireblast: ["9M", "8M", "8V", "7M", "7V", "6M", "5M", "5L71", "4M", "4L71", "3M"], - firefang: ["9M", "9L30", "8M", "8L30", "7L20", "6L20", "5L43", "4L43"], - firespin: ["9M", "9L35", "8M", "8L35", "8V", "7L25", "7V", "6L25", "5L36", "4L36", "3L36"], + fireblast: ["9M", "8M", "8V", "7M", "7V", "6M", "5M", "5L45", "4M", "4L71", "3M"], + firefang: ["9M", "9L30", "8M", "8L30", "7L20", "6L20", "5L21", "4L43"], + firespin: ["9M", "9L35", "8M", "8L35", "8V", "7L25", "7V", "6L25", "5L25", "4L36", "3L36"], flamecharge: ["9M", "7M", "6M", "5M"], flamethrower: ["9M", "8M", "8V", "7M", "7V", "6M", "5M", "4M", "3M", "3L52"], flareblitz: ["9M", "9L50", "8M", "8L50", "8V", "7L45", "7S2", "6L45"], @@ -20494,8 +20482,8 @@ export const Learnsets: {[k: string]: LearnsetData} = { incinerate: ["6M", "5M"], irontail: ["8M", "8V", "7T", "7V", "6T", "5T", "4M", "3M"], laserfocus: ["7T"], - lastresort: ["9L55", "8L55", "7T", "7L41", "6T", "6L41", "5T", "5L50", "4T", "4L50"], - lavaplume: ["9L40", "8L40", "7L37", "6L37", "5L78", "4L78"], + lastresort: ["9L55", "8L55", "7T", "7L41", "6T", "6L41", "5T", "5L41", "4T", "4L50"], + lavaplume: ["9L40", "8L40", "7L37", "6L37", "5L37", "4L78"], leer: ["7V", "3L47"], mimic: ["7V", "3T"], mudslap: ["9M", "7V", "4T", "3T"], @@ -20504,7 +20492,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { overheat: ["9M", "8M", "7M", "6M", "5M", "4M", "3M"], payday: ["8M", "8V"], protect: ["9M", "8M", "8V", "7M", "7V", "6M", "5M", "4M", "3M"], - quickattack: ["9L10", "8L10", "8V", "7L13", "7V", "7S2", "6L13", "5L22", "4L22", "3L23"], + quickattack: ["9L10", "8L10", "8V", "7L13", "7V", "7S2", "6L13", "5L13", "4L22", "3L23"], rage: ["7V"], raindance: ["9M", "8M", "7M", "7V", "6M", "5M", "4M", "3M"], reflect: ["8V", "7V"], @@ -20514,14 +20502,14 @@ export const Learnsets: {[k: string]: LearnsetData} = { roar: ["9M", "7M", "7V", "6M", "5M", "4M", "3M"], rocksmash: ["6M", "5M", "4M"], round: ["8M", "7M", "6M", "5M"], - sandattack: ["9L5", "8L5", "8V", "7L5", "7V", "6L5", "6S1", "5L8", "5S0", "4L8", "3L8"], - scaryface: ["9M", "9L45", "8M", "8L45", "7L29", "6L29", "5L64", "4L64"], + sandattack: ["9L5", "8L5", "8V", "7L5", "7V", "6L5", "6S1", "5L5", "5S0", "4L8", "3L8"], + scaryface: ["9M", "9L45", "8M", "8L45", "7L29", "6L29", "5L29", "4L64"], scorchingsands: ["9M", "8T"], secretpower: ["6M", "4M", "3M"], shadowball: ["9M", "8M", "8V", "7M", "7V", "6M", "5M", "4M", "3M"], skullbash: ["7V"], sleeptalk: ["9M", "8M", "7M", "7V", "6M", "5T", "4M", "3T"], - smog: ["9L20", "8L20", "8V", "7L33", "7V", "6L33", "5L57", "4L57", "3L42"], + smog: ["9L20", "8L20", "8V", "7L33", "7V", "6L33", "5L33", "4L57", "3L42"], snore: ["8M", "7T", "7V", "6T", "5T", "4T", "3T"], storedpower: ["9M", "8M"], strength: ["6M", "5M", "4M"], @@ -20564,7 +20552,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { charm: ["9M", "9L1", "8M", "8L1"], confide: ["7M", "6M"], confuseray: ["9M"], - confusion: ["9L0", "8L0", "7L1", "7V", "6L9", "6S2", "5L15", "4L15", "3L16"], + confusion: ["9L0", "8L0", "7L1", "7V", "6L9", "6S2", "5L9", "4L15", "3L16"], copycat: ["9L1", "8L1"], covet: ["9L1", "8L1", "7T", "6T", "5T"], curse: ["9M", "7V"], @@ -20584,7 +20572,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { flash: ["7V", "6M", "5M", "4M", "3M"], focusenergy: ["8M"], frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], - futuresight: ["9M", "9L50", "8M", "8L50", "7L25", "6L25", "5L43", "4L43"], + futuresight: ["9M", "9L50", "8M", "8L50", "7L25", "6L25", "5L25", "4L43"], gigaimpact: ["9M", "8M", "7M", "6M", "5M", "4M"], grassknot: ["9M", "8M", "7M", "6M", "5M", "4M"], gravity: ["9M"], @@ -20598,28 +20586,28 @@ export const Learnsets: {[k: string]: LearnsetData} = { imprison: ["9M"], irontail: ["8M", "7T", "7V", "6T", "5T", "4M", "3M"], laserfocus: ["7T"], - lastresort: ["9L55", "8L55", "7T", "7L41", "6T", "6L41", "5T", "5L50", "4T", "4L50"], + lastresort: ["9L55", "8L55", "7T", "7L41", "6T", "6L41", "5T", "5L41", "4T", "4L50"], lightscreen: ["9M", "8M", "7M", "6M", "5M", "4M", "3M"], magicalleaf: ["9M"], magiccoat: ["7T", "6T", "5T", "4T"], magicroom: ["8M", "7T", "6T", "5T"], mimic: ["3T"], - morningsun: ["9L30", "8L30", "7L33", "7V", "6L33", "5L71", "4L71", "3L52", "3S0"], + morningsun: ["9L30", "8L30", "7L33", "7V", "6L33", "5L33", "4L71", "3L52", "3S0"], mudslap: ["9M", "7V", "4T", "3T"], naturalgift: ["4M"], nightmare: ["7V", "3T"], payday: ["8M"], powergem: ["9M"], - powerswap: ["9L35", "8M", "8L35", "7L45", "6L45", "5L78", "4L78"], + powerswap: ["9L35", "8M", "8L35", "7L45", "6L45", "5L45", "4L78"], protect: ["9M", "8M", "7M", "7V", "6M", "5M", "4M", "3M"], - psybeam: ["9M", "9L25", "8L25", "7L20", "7V", "6L20", "5L36", "4L36", "3L36", "3S0"], - psychic: ["9M", "9L40", "8M", "8L40", "7M", "7L37", "7V", "7S3", "6M", "6L37", "5M", "5L64", "4M", "4L64", "3M", "3L47", "3S0"], + psybeam: ["9M", "9L25", "8L25", "7L20", "7V", "6L20", "5L21", "4L36", "3L36", "3S0"], + psychic: ["9M", "9L40", "8M", "8L40", "7M", "7L37", "7V", "7S3", "6M", "6L37", "5M", "5L37", "4M", "4L64", "3M", "3L47", "3S0"], psychicfangs: ["9M", "8M"], psychicnoise: ["9M"], psychicterrain: ["9M"], - psychup: ["9M", "9L45", "8L45", "7M", "7L29", "7V", "6M", "6L29", "5M", "5L57", "4M", "4L57", "3T", "3L42", "3S0"], + psychup: ["9M", "9L45", "8L45", "7M", "7L29", "7V", "6M", "6L29", "5M", "5L29", "4M", "4L57", "3T", "3L42", "3S0"], psyshock: ["9M", "8M", "7M", "6M", "5M"], - quickattack: ["9L10", "8L10", "7L13", "7V", "6L13", "5L22", "4L22", "3L23"], + quickattack: ["9L10", "8L10", "7L13", "7V", "6L13", "5L13", "4L22", "3L23"], raindance: ["9M", "8M", "7M", "7V", "6M", "5M", "4M", "3M"], reflect: ["9M", "8M", "7M", "7S3", "6M", "5M", "4M", "3M"], rest: ["9M", "8M", "7M", "7V", "6M", "5M", "4M", "3M"], @@ -20627,7 +20615,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { return: ["7M", "7V", "6M", "5M", "4M", "3M"], roar: ["9M"], round: ["8M", "7M", "6M", "5M"], - sandattack: ["9L5", "8L5", "7L5", "7V", "6L5", "6S2", "5L8", "5S1", "4L8", "3L8"], + sandattack: ["9L5", "8L5", "7L5", "7V", "6L5", "6S2", "5L5", "5S1", "4L8", "3L8"], secretpower: ["6M", "4M", "3M"], shadowball: ["9M", "8M", "7M", "7V", "7S3", "6M", "5M", "4M", "3M"], signalbeam: ["7T", "6T", "5T", "4T"], @@ -20638,7 +20626,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { substitute: ["9M", "8M", "7M", "6M", "5M", "4M", "3T"], sunnyday: ["9M", "8M", "7M", "7V", "6M", "5M", "4M", "3M"], swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], - swift: ["9M", "9L20", "8M", "8L20", "7L17", "7V", "6L17", "5L29", "4T", "4L29", "3T", "3L30"], + swift: ["9M", "9L20", "8M", "8L20", "7L17", "7V", "6L17", "5L17", "4T", "4L29", "3T", "3L30"], tackle: ["9L1", "8L1", "7L1", "7V", "6L1", "5L1", "5S1", "4L1", "3L1"], tailwhip: ["9L1", "8L1", "7L1", "7V", "6L1", "6S2", "5L1", "5S1", "4L1", "3L1"], takedown: ["9M", "9L1", "8L1"], @@ -20721,7 +20709,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { protect: ["9M", "8M", "7M", "7V", "7S3", "6M", "5M", "4M", "3M"], psychic: ["9M", "8M", "7M", "7V", "6M", "5M", "4M", "3M"], psychup: ["9M", "7M", "7V", "6M", "5M", "4M", "3T"], - pursuit: ["7L1", "7V", "6L9", "6S2", "5L15", "4L15", "3L16"], + pursuit: ["7L1", "7V", "6L9", "6S2", "5L9", "4L15", "3L16"], quickattack: ["9L10", "8L10", "7L13", "7V", "6L13", "5L13", "4L22", "3L23"], raindance: ["9M", "8M", "7M", "7V", "6M", "5M", "4M", "3M"], reflect: ["9M"], @@ -20730,7 +20718,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { return: ["7M", "7V", "6M", "5M", "4M", "3M"], roar: ["9M"], round: ["8M", "7M", "6M", "5M"], - sandattack: ["9L5", "8L5", "7L5", "7V", "6L5", "6S2", "5L8", "5S1", "4L8", "3L8"], + sandattack: ["9L5", "8L5", "7L5", "7V", "6L5", "6S2", "5L5", "5S1", "4L8", "3L8"], scaryface: ["9M"], screech: ["9L45", "8M", "8L45", "7L29", "7V", "6L29", "5L29", "4L64", "3L47", "3S0"], secretpower: ["6M", "4M", "3M"], @@ -20800,10 +20788,10 @@ export const Learnsets: {[k: string]: LearnsetData} = { focusenergy: ["8M"], frustration: ["7M", "6M", "5M", "4M"], furycutter: ["4T"], - gigadrain: ["9M", "9L40", "8M", "8L40", "7T", "7L25", "6T", "6L25", "5T", "5L43", "4M", "4L43"], + gigadrain: ["9M", "9L40", "8M", "8L40", "7T", "7L25", "6T", "6L25", "5T", "5L25", "4M", "4L43"], gigaimpact: ["9M", "8M", "7M", "6M", "5M", "4M"], grassknot: ["9M", "8M", "7M", "6M", "5M", "4M"], - grasswhistle: ["7L17", "6L17", "5L57", "4L57"], + grasswhistle: ["7L17", "6L17", "5L17", "4L57"], grassyglide: ["9M", "8T"], growl: ["9L1", "8L1"], headbutt: ["4T"], @@ -20815,27 +20803,27 @@ export const Learnsets: {[k: string]: LearnsetData} = { irontail: ["8M", "7T", "6T", "5T", "4M"], knockoff: ["9M", "7T", "6T", "5T", "4T"], laserfocus: ["7T"], - lastresort: ["9L55", "8L55", "7T", "7L41", "6T", "6L41", "5T", "5L50", "4T", "4L50"], - leafblade: ["9L50", "8M", "8L50", "7L45", "7S2", "6L45", "5L71", "4L71"], + lastresort: ["9L55", "8L55", "7T", "7L41", "6T", "6L41", "5T", "5L41", "4T", "4L50"], + leafblade: ["9L50", "8M", "8L50", "7L45", "7S2", "6L45", "5L45", "4L71"], leafstorm: ["9M", "8M"], leechseed: ["9L20", "8L20"], - magicalleaf: ["9M", "9L25", "8M", "8L25", "7L20", "6L20", "5L36", "4L36"], + magicalleaf: ["9M", "9L25", "8M", "8L25", "7L20", "6L20", "5L21", "4L36"], mudshot: ["9M"], mudslap: ["9M", "4T"], naturalgift: ["4M"], naturepower: ["7M", "6M"], payday: ["8M"], protect: ["9M", "8M", "7M", "6M", "5M", "4M"], - quickattack: ["9L10", "8L10", "7L13", "6L13", "5L22", "4L22"], + quickattack: ["9L10", "8L10", "7L13", "6L13", "5L13", "4L22"], raindance: ["9M", "8M", "7M", "6M", "5M", "4M"], - razorleaf: ["9L0", "8L0", "7L1", "6L9", "6S1", "5L15", "4L15"], + razorleaf: ["9L0", "8L0", "7L1", "6L9", "6S1", "5L9", "4L15"], rest: ["9M", "8M", "7M", "6M", "5M", "4M"], retaliate: ["8M", "6M", "5M"], return: ["7M", "6M", "5M", "4M"], roar: ["9M", "7M", "6M", "5M", "4M"], rocksmash: ["6M", "5M", "4M"], round: ["8M", "7M", "6M", "5M"], - sandattack: ["9L5", "8L5", "7L5", "6L5", "6S1", "5L8", "5S0", "4L8"], + sandattack: ["9L5", "8L5", "7L5", "6L5", "6S1", "5L5", "5S0", "4L8"], secretpower: ["6M", "4M"], seedbomb: ["9M", "8M", "7T", "6T", "5T", "4T"], shadowball: ["9M", "8M", "7M", "6M", "5M", "4M"], @@ -20846,10 +20834,10 @@ export const Learnsets: {[k: string]: LearnsetData} = { storedpower: ["9M", "8M"], strength: ["6M", "5M", "4M"], substitute: ["9M", "8M", "7M", "6M", "5M", "4M"], - sunnyday: ["9M", "9L35", "8M", "8L35", "7M", "7L37", "7S2", "6M", "6L37", "5M", "5L64", "4M", "4L64"], + sunnyday: ["9M", "9L35", "8M", "8L35", "7M", "7L37", "7S2", "6M", "6L37", "5M", "5L37", "4M", "4L64"], swagger: ["7M", "6M", "5M", "4M"], swift: ["9M", "9L1", "8M", "8L1", "4T"], - swordsdance: ["9M", "9L45", "8M", "8L45", "7M", "7L29", "7S2", "6M", "6L29", "5M", "5L78", "4M", "4L78"], + swordsdance: ["9M", "9L45", "8M", "8L45", "7M", "7L29", "7S2", "6M", "6L29", "5M", "5L29", "4M", "4L78"], synthesis: ["9L30", "8L30", "7T", "7L33", "7S2", "6T", "6L33", "5T", "5L29", "4T", "4L29"], tackle: ["9L1", "8L1", "7L1", "6L1", "5L1", "5S0", "4L1"], tailwhip: ["9L1", "8L1", "7L1", "6L1", "6S1", "5L1", "5S0", "4L1"], @@ -20876,10 +20864,10 @@ export const Learnsets: {[k: string]: LearnsetData} = { auroraveil: ["7M", "7S2"], avalanche: ["9M", "8M", "4M"], babydolleyes: ["9L15", "8L15", "7L9"], - barrier: ["7L29", "6L29", "5L78", "4L78"], + barrier: ["7L29", "6L29", "5L29", "4L78"], batonpass: ["9M", "9L1", "8M", "8L1"], - bite: ["9L25", "8L25", "7L17", "6L17", "5L29", "4L29"], - blizzard: ["9M", "9L50", "8M", "8L50", "7M", "7L45", "7S2", "6M", "6L45", "5M", "5L71", "4M", "4L71"], + bite: ["9L25", "8L25", "7L17", "6L17", "5L17", "4L29"], + blizzard: ["9M", "9L50", "8M", "8L50", "7M", "7L45", "7S2", "6M", "6L45", "5M", "5L45", "4M", "4L71"], bodyslam: ["9M", "8M"], calmmind: ["9M"], captivate: ["4M"], @@ -20904,7 +20892,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { gigaimpact: ["9M", "8M", "7M", "6M", "5M", "4M"], gravity: ["9M"], growl: ["9L1", "8L1"], - hail: ["8M", "8L35", "7M", "7L37", "7S2", "6M", "6L37", "5M", "5L64", "4M", "4L64"], + hail: ["8M", "8L35", "7M", "7L37", "7S2", "6M", "6L37", "5M", "5L37", "4M", "4L64"], haze: ["9M"], headbutt: ["4T"], healbell: ["7T", "6T", "5T", "4T"], @@ -20913,20 +20901,20 @@ export const Learnsets: {[k: string]: LearnsetData} = { hyperbeam: ["9M", "8M", "7M", "6M", "5M", "4M"], hypervoice: ["9M", "8M", "7T", "6T", "5T"], icebeam: ["9M", "8M", "7M", "6M", "5M", "4M"], - icefang: ["9M", "9L30", "8M", "8L30", "7L20", "6L20", "5L43", "4L43"], - iceshard: ["9L20", "8L20", "7L25", "6L25", "5L36", "4L36"], + icefang: ["9M", "9L30", "8M", "8L30", "7L20", "6L20", "5L21", "4L43"], + iceshard: ["9L20", "8L20", "7L25", "6L25", "5L25", "4L36"], iciclespear: ["9M", "8M"], - icywind: ["9M", "9L0", "8M", "8L0", "7T", "7L1", "6T", "6L9", "6S1", "5T", "5L15", "4T", "4L15"], + icywind: ["9M", "9L0", "8M", "8L0", "7T", "7L1", "6T", "6L9", "6S1", "5T", "5L9", "4T", "4L15"], irontail: ["8M", "7T", "6T", "5T", "4M"], laserfocus: ["7T"], - lastresort: ["9L55", "8L55", "7T", "7L41", "6T", "6L41", "5T", "5L50", "4T", "4L50"], - mirrorcoat: ["9L45", "8L45", "7L33", "6L33", "5L57", "4L57"], + lastresort: ["9L55", "8L55", "7T", "7L41", "6T", "6L41", "5T", "5L41", "4T", "4L50"], + mirrorcoat: ["9L45", "8L45", "7L33", "6L33", "5L33", "4L57"], mudshot: ["9M"], mudslap: ["9M", "4T"], naturalgift: ["4M"], payday: ["8M"], protect: ["9M", "8M", "7M", "6M", "5M", "4M"], - quickattack: ["9L10", "8L10", "7L13", "6L13", "5L22", "4L22"], + quickattack: ["9L10", "8L10", "7L13", "6L13", "5L13", "4L22"], raindance: ["9M", "8M", "7M", "6M", "5M", "4M"], rest: ["9M", "8M", "7M", "6M", "5M", "4M"], retaliate: ["8M", "6M", "5M"], @@ -20934,7 +20922,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { roar: ["9M", "7M", "6M", "5M", "4M"], rocksmash: ["6M", "5M", "4M"], round: ["8M", "7M", "6M", "5M"], - sandattack: ["9L5", "8L5", "7L5", "6L5", "6S1", "5L8", "5S0", "4L8"], + sandattack: ["9L5", "8L5", "7L5", "6L5", "6S1", "5L5", "5S0", "4L8"], secretpower: ["6M", "4M"], shadowball: ["9M", "8M", "7M", "7S2", "6M", "5M", "4M"], signalbeam: ["7T", "6T", "5T", "4T"], @@ -21995,7 +21983,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { auroraveil: ["7M"], avalanche: ["9M", "8M", "4M"], bide: ["7V"], - blizzard: ["9M", "9L65", "8M", "8L65", "8V", "7M", "7L78", "7V", "6M", "6L71", "5M", "5L71", "4M", "4L71", "3M", "3L73"], + blizzard: ["9M", "9L65", "9S9", "8M", "8L65", "8V", "7M", "7L78", "7V", "6M", "6L71", "5M", "5L71", "4M", "4L71", "3M", "3L73"], bravebird: ["9M", "8M"], bubblebeam: ["7V"], confide: ["7M", "6M"], @@ -22016,12 +22004,12 @@ export const Learnsets: {[k: string]: LearnsetData} = { gigaimpact: ["9M", "8M", "7M", "6M", "5M", "4M"], gust: ["9L1", "8L1", "8V", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], hail: ["8M", "8L50", "7M", "7L57", "7S7", "6M", "6L57", "6S5", "6S6", "5M", "5L85", "4M", "4L85", "3M"], - haze: ["9M", "9L60", "3S2"], + haze: ["9M", "9L60", "9S9", "3S2"], headbutt: ["8V"], healbell: ["3S2"], helpinghand: ["9M"], hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], - hurricane: ["9M", "9L55", "8M", "8L55", "8S8", "7L92", "6L1", "5L92"], + hurricane: ["9M", "9L55", "9S9", "8M", "8L55", "8S8", "7L92", "6L1", "5L92"], hyperbeam: ["9M", "8M", "8V", "7M", "7V", "6M", "5M", "4M", "3M"], icebeam: ["9M", "9L45", "8M", "8L45", "8V", "8S8", "7M", "7L71", "7V", "6M", "6L43", "6S5", "6S6", "5M", "5L43", "4M", "4L43", "4S3", "4S4", "3M", "3L49", "3S0", "3S1", "3S2"], iceshard: ["9L15", "8L15", "8V", "7L15", "6L15", "5L15", "4L15"], @@ -22054,7 +22042,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { round: ["8M", "7M", "6M", "5M"], sandstorm: ["9M", "8M", "7M", "7V", "6M", "5M", "4M", "3M"], secretpower: ["6M", "4M", "3M"], - sheercold: ["9L70", "8L70", "7L99", "6L1", "5L78", "4L78", "3L85"], + sheercold: ["9L70", "9S9", "8L70", "7L99", "6L1", "5L78", "4L78", "3L85"], signalbeam: ["7T", "6T", "5T", "4T"], skyattack: ["8V", "7T", "7V", "6T", "5T", "4T", "3T"], skydrop: ["7M", "6M", "5M"], @@ -22088,6 +22076,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { {generation: 6, level: 70, isHidden: true, moves: ["freezedry", "icebeam", "hail", "reflect"], pokeball: "cherishball"}, {generation: 7, level: 60, shiny: 1, moves: ["ancientpower", "freezedry", "reflect", "hail"]}, {generation: 8, level: 70, shiny: 1, moves: ["icebeam", "freezedry", "hurricane", "mist"]}, + {generation: 9, level: 70, moves: ["sheercold", "blizzard", "hurricane", "haze"]}, ], encounters: [ {generation: 1, level: 50}, @@ -22176,7 +22165,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { confide: ["7M", "6M"], curse: ["7V"], defog: ["7T", "4M"], - detect: ["9L60", "8L60", "7L15", "7V", "6L15", "5L15", "4L15", "4S4", "3L37", "3S0", "3S1"], + detect: ["9L60", "9S9", "8L60", "7L15", "7V", "6L15", "5L15", "4L15", "4S4", "3L37", "3S0", "3S1"], discharge: ["9L45", "8L45", "7L50", "7S7", "6L50", "6S5", "6S6", "5L50", "4L50", "4S3"], doubleedge: ["7V", "3T"], doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], @@ -22202,7 +22191,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { laserfocus: ["7T"], leer: ["8V"], lightscreen: ["9M", "9L10", "8M", "8L10", "8V", "7M", "7L64", "7V", "6M", "6L64", "6S5", "5M", "5L64", "4M", "4L64", "3M", "3L73"], - magneticflux: ["9L65", "8L65", "7L92"], + magneticflux: ["9L65", "9S9", "8L65", "7L92"], metalsound: ["9M", "3S2"], mimic: ["7V", "3T"], mudslap: ["7V", "4T", "3T"], @@ -22239,7 +22228,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { tailwind: ["9M", "7T", "6T", "5T", "4T"], takedown: ["9M", "7V"], terablast: ["9M"], - thunder: ["9M", "9L55", "8M", "8L55", "8V", "8S8", "7M", "7L78", "7V", "6M", "6L78", "5M", "5L78", "4M", "4L78", "3M", "3L85"], + thunder: ["9M", "9L55", "9S9", "8M", "8L55", "8V", "8S8", "7M", "7L78", "7V", "6M", "6L78", "5M", "5L78", "4M", "4L78", "3M", "3L85"], thunderbolt: ["9M", "8M", "8V", "7M", "7V", "6M", "5M", "4M", "3M", "3S2"], thundershock: ["9L5", "8L5", "8V", "7L1", "7V", "6L1", "6S6", "5L1", "4L1", "3L1"], thunderwave: ["9M", "9L1", "8M", "8L1", "8V", "7M", "7L8", "7V", "6M", "6L8", "5M", "5L8", "4M", "4L8", "4S4", "3T", "3L13", "3S0"], @@ -22250,7 +22239,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { weatherball: ["9M", "8M"], whirlwind: ["7V"], wildcharge: ["9M", "8M", "7M", "6M", "5M"], - zapcannon: ["9L70", "8L70", "7L99", "7V", "6L1", "5L92"], + zapcannon: ["9L70", "9S9", "8L70", "7L99", "7V", "6L1", "5L92"], }, eventData: [ {generation: 3, level: 50, shiny: 1, moves: ["thunderwave", "agility", "detect", "drillpeck"]}, @@ -22262,6 +22251,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { {generation: 6, level: 70, isHidden: true, moves: ["discharge", "thundershock", "raindance", "agility"], pokeball: "cherishball"}, {generation: 7, level: 60, shiny: 1, moves: ["ancientpower", "discharge", "pluck", "raindance"]}, {generation: 8, level: 70, shiny: 1, moves: ["thunder", "drillpeck", "bravebird", "agility"]}, + {generation: 9, level: 70, moves: ["zapcannon", "magneticflux", "detect", "thunder"]}, ], encounters: [ {generation: 1, level: 50}, @@ -22359,7 +22349,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], dualwingbeat: ["9M", "8T"], ember: ["9L5", "8L5", "8V", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], - endure: ["9M", "9L60", "8M", "8L60", "7L22", "7V", "6L22", "5L22", "4M", "4L22", "4S4", "3T", "3L37", "3S0", "3S1"], + endure: ["9M", "9L60", "9S9", "8M", "8L60", "7L22", "7V", "6L22", "5L22", "4M", "4L22", "4S4", "3T", "3L37", "3S0", "3S1"], extrasensory: ["3S2"], facade: ["9M", "8M", "8V", "7M", "6M", "5M", "4M", "3M"], fireblast: ["9M", "8M", "8V", "7M", "7V", "6M", "5M", "4M", "3M"], @@ -22375,7 +22365,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { heatwave: ["9M", "9L45", "8M", "8L45", "8V", "8S8", "7T", "7L64", "6T", "6L1", "6S5", "6S6", "5T", "5L64", "4T", "4L64", "3L73"], helpinghand: ["9M"], hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], - hurricane: ["9M", "9L55", "8M", "8L55", "7L92", "6L1", "5L92"], + hurricane: ["9M", "9L55", "9S9", "8M", "8L55", "7L92", "6L1", "5L92"], hyperbeam: ["9M", "8M", "8V", "7M", "7V", "6M", "5M", "4M", "3M"], incinerate: ["9L30", "8L30", "6M", "5M"], laserfocus: ["7T"], @@ -22386,7 +22376,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { mysticalfire: ["8M"], naturalgift: ["4M"], ominouswind: ["4T"], - overheat: ["9M", "9L65", "8M", "7M", "6M", "5M", "4M", "3M"], + overheat: ["9M", "9L65", "9S9", "8M", "7M", "6M", "5M", "4M", "3M"], peck: ["7V"], pluck: ["5M", "4M"], protect: ["9M", "8M", "8V", "7M", "7V", "6M", "5M", "4M", "3M"], @@ -22404,7 +22394,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { sandstorm: ["9M", "8M", "7M", "7V", "6M", "5M", "4M", "3M"], scorchingsands: ["9M", "8T"], secretpower: ["6M", "4M", "3M"], - skyattack: ["9L70", "8L70", "8V", "7T", "7L78", "7V", "6T", "6L1", "6S6", "5T", "5L78", "4T", "4L78", "3T", "3L85"], + skyattack: ["9L70", "9S9", "8L70", "8V", "7T", "7L78", "7V", "6T", "6L1", "6S6", "5T", "5L78", "4T", "4L78", "3T", "3L85"], skydrop: ["7M", "6M", "5M"], sleeptalk: ["9M", "8M", "7M", "7V", "6M", "5T", "4M", "3T"], snore: ["8M", "7T", "7V", "6T", "5T", "4T", "3T"], @@ -22436,6 +22426,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { {generation: 6, level: 70, isHidden: true, moves: ["skyattack", "heatwave", "sunnyday", "safeguard"], pokeball: "cherishball"}, {generation: 7, level: 60, shiny: 1, moves: ["ancientpower", "flamethrower", "airslash", "sunnyday"]}, {generation: 8, level: 70, shiny: 1, moves: ["heatwave", "wingattack", "leer", "firespin"]}, + {generation: 9, level: 70, moves: ["skyattack", "overheat", "endure", "hurricane"]}, ], encounters: [ {generation: 1, level: 50}, @@ -25883,23 +25874,23 @@ export const Learnsets: {[k: string]: LearnsetData} = { attract: ["7M", "7V", "6M", "5M", "4M", "3M"], bodyslam: ["9M", "7E", "7V", "6E", "5E", "4E", "3T", "3E", "3S2"], captivate: ["4M"], - charge: ["9M", "9L15", "7L15", "7E", "6L15", "6E", "5L23", "5E", "4L23", "4E", "3E"], + charge: ["9M", "9L15", "7L15", "7E", "6L15", "6E", "5L15", "5E", "4L23", "4E", "3E"], chargebeam: ["9M", "7M", "6M", "5M", "4M"], confide: ["7M", "6M"], confuseray: ["9M", "9L25", "7L25", "6L25", "5L25"], cottonguard: ["9L36", "7L36", "6L36", "5L32"], - cottonspore: ["9L11", "7L11", "7V", "6L11", "5L19", "4L19", "3L23", "3S0"], + cottonspore: ["9L11", "7L11", "7V", "6L11", "5L11", "4L19", "3L23", "3S0"], curse: ["7V"], dazzlinggleam: ["9M", "9L39"], defensecurl: ["7V", "3T"], dig: ["9M"], - discharge: ["9L32", "7L32", "6L32", "5L37", "4L28"], + discharge: ["9L32", "7L32", "6L32", "5L32", "4L28"], doubleedge: ["9M", "3T"], doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], echoedvoice: ["7M", "6M", "5M"], eerieimpulse: ["9M", "9E", "7E", "6E"], electricterrain: ["9M", "9E", "7E", "6E"], - electroball: ["9M", "9L22", "7L22", "6L22", "5L28"], + electroball: ["9M", "9L22", "7L22", "6L22", "5L22"], electroweb: ["9M", "9E", "7T", "6T"], endeavor: ["9M"], endure: ["9M", "7V", "4M", "3T"], @@ -25907,19 +25898,19 @@ export const Learnsets: {[k: string]: LearnsetData} = { flash: ["7V", "6M", "5M", "4M", "3M"], flatter: ["9E", "7E", "6E", "5E", "4E"], frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], - growl: ["9L1", "7L1", "7V", "6L1", "5L5", "4L5", "3L1", "3S1"], + growl: ["9L1", "7L1", "7V", "6L1", "5L1", "4L5", "3L1", "3S1"], headbutt: ["7V", "4T"], healbell: ["7T", "6T", "5T", "4T", "3S2"], helpinghand: ["9M"], hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], holdback: ["6S3"], irontail: ["7T", "7E", "7V", "6T", "6E", "5T", "5E", "4M", "3M"], - lightscreen: ["9M", "9L43", "7M", "7L43", "7V", "6M", "6L43", "5M", "5L46", "4M", "4L37", "3M", "3L30"], + lightscreen: ["9M", "9L43", "7M", "7L43", "7V", "6M", "6L43", "5M", "5L43", "4M", "4L37", "3M", "3L30"], magnetrise: ["7T", "6T", "5T", "4T"], mimic: ["3T"], naturalgift: ["4M"], odorsleuth: ["7E", "6E", "5E", "4E", "3E"], - powergem: ["9M", "9L29", "7L29", "6L29", "5L50", "4L41"], + powergem: ["9M", "9L29", "7L29", "6L29", "5L29", "4L41"], protect: ["9M", "7M", "7V", "6M", "5M", "4M", "3M"], raindance: ["9M", "7M", "7V", "6M", "5M", "4M", "3M"], reflect: ["9M", "7V", "5D", "4E", "3E"], @@ -25931,7 +25922,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { screech: ["7E", "7V", "6E", "5E", "4E", "3E"], secretpower: ["6M", "4M", "3M"], shockwave: ["7T", "6T", "5D", "4M", "3M"], - signalbeam: ["7T", "7L39", "6T", "6L39", "5T", "5L41", "4T", "4L32"], + signalbeam: ["7T", "7L39", "6T", "6L39", "5T", "5L39", "4T", "4L32"], sleeptalk: ["9M", "7M", "7V", "6M", "5T", "4M", "3T"], snore: ["7T", "7V", "6T", "5T", "4T", "3T"], substitute: ["9M", "7M", "6M", "5M", "4M", "3T"], @@ -25941,10 +25932,10 @@ export const Learnsets: {[k: string]: LearnsetData} = { tackle: ["9L1", "7L1", "7V", "6L1", "6S3", "5L1", "4L1", "3L1", "3S1"], takedown: ["9M", "9L18", "7L18", "7E", "7V", "6L18", "6E", "5L18", "5E", "4E", "3E"], terablast: ["9M"], - thunder: ["9M", "9L46", "7M", "7L46", "7V", "6M", "6L46", "5M", "5L55", "4M", "4L46", "3M", "3L37", "3S0"], + thunder: ["9M", "9L46", "7M", "7L46", "7V", "6M", "6L46", "5M", "5L46", "4M", "4L46", "3M", "3L37", "3S0"], thunderbolt: ["9M", "7M", "7V", "6M", "5M", "4M", "3M"], - thundershock: ["9L8", "7L8", "7V", "6L8", "6S3", "5L10", "5D", "4L10", "3L9", "3S0", "3S1", "3S2"], - thunderwave: ["9M", "9L4", "7M", "7L4", "7V", "6M", "6L4", "6S3", "5M", "5L14", "4M", "4L14", "3T", "3L16", "3S0", "3S2"], + thundershock: ["9L8", "7L8", "7V", "6L8", "6S3", "5L8", "5D", "4L10", "3L9", "3S0", "3S1", "3S2"], + thunderwave: ["9M", "9L4", "7M", "7L4", "7V", "6M", "6L4", "6S3", "5M", "5L4", "4M", "4L14", "3T", "3L16", "3S0", "3S2"], toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], trailblaze: ["9M"], voltswitch: ["9M"], @@ -25966,25 +25957,25 @@ export const Learnsets: {[k: string]: LearnsetData} = { bodyslam: ["9M", "3T"], brickbreak: ["9M", "7M", "6M", "5M", "4M", "3M"], captivate: ["4M"], - charge: ["9M", "9L16", "7L16", "6L16", "5L25", "4L25"], + charge: ["9M", "9L16", "7L16", "6L16", "5L16", "4L25"], chargebeam: ["9M", "7M", "6M", "5M", "4M"], confide: ["7M", "6M"], confuseray: ["9M", "9L29", "7L29", "6L29", "5L29"], cottonguard: ["9L43", "7L43", "6L43", "5L36"], - cottonspore: ["9L11", "7L11", "7V", "6L11", "5L20", "4L20", "3L27"], + cottonspore: ["9L11", "7L11", "7V", "6L11", "5L11", "4L20", "3L27"], counter: ["3T"], curse: ["7V"], dazzlinggleam: ["9M", "9L47"], defensecurl: ["7V", "3T"], dig: ["9M"], - discharge: ["9L38", "7L38", "6L38", "5L42", "4L31"], + discharge: ["9L38", "7L38", "6L38", "5L38", "4L31"], doubleedge: ["9M", "3T"], doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], dynamicpunch: ["7V", "3T"], echoedvoice: ["7M", "6M", "5M"], eerieimpulse: ["9M"], electricterrain: ["9M"], - electroball: ["9M", "9L25", "7L25", "6L25", "5L31"], + electroball: ["9M", "9L25", "7L25", "6L25", "5L25"], electroweb: ["9M", "7T", "6T"], endeavor: ["9M"], endure: ["9M", "7V", "4M", "3T"], @@ -26001,14 +25992,14 @@ export const Learnsets: {[k: string]: LearnsetData} = { hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], icepunch: ["9M"], irontail: ["7T", "7V", "6T", "5T", "4M", "3M"], - lightscreen: ["9M", "9L52", "7M", "7L52", "7V", "6M", "6L52", "5M", "5L53", "4M", "4L42", "3M", "3L36"], + lightscreen: ["9M", "9L52", "7M", "7L52", "7V", "6M", "6L52", "5M", "5L52", "4M", "4L42", "3M", "3L36"], lowkick: ["9M"], magnetrise: ["7T", "6T", "5T", "4T"], megakick: ["3T"], megapunch: ["3T"], mimic: ["3T"], naturalgift: ["4M"], - powergem: ["9M", "9L34", "7L34", "6L34", "5L59", "4L47"], + powergem: ["9M", "9L34", "7L34", "6L34", "5L34", "4L47"], poweruppunch: ["6M"], protect: ["9M", "7M", "7V", "6M", "5M", "4M", "3M"], raindance: ["9M", "7M", "7V", "6M", "5M", "4M", "3M"], @@ -26033,11 +26024,11 @@ export const Learnsets: {[k: string]: LearnsetData} = { tackle: ["9L1", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], takedown: ["9M", "9L20", "7L20", "6L20", "5L20"], terablast: ["9M"], - thunder: ["9M", "9L56", "7M", "7L56", "7V", "6M", "6L56", "5M", "5L65", "4M", "4L53", "3M", "3L45"], + thunder: ["9M", "9L56", "7M", "7L56", "7V", "6M", "6L56", "5M", "5L56", "4M", "4L53", "3M", "3L45"], thunderbolt: ["9M", "7M", "6M", "5M", "4M", "3M"], thunderpunch: ["9M", "7T", "7V", "6T", "5T", "4T", "3T"], thundershock: ["9L6", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], - thunderwave: ["9M", "9L9", "7M", "7L1", "7V", "6M", "6L1", "5M", "5L14", "4M", "4L14", "3T", "3L18"], + thunderwave: ["9M", "9L9", "7M", "7L1", "7V", "6M", "6L1", "5M", "5L4", "4M", "4L14", "3T", "3L18"], toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], trailblaze: ["9M"], voltswitch: ["9M", "7M", "6M", "5M"], @@ -26059,18 +26050,18 @@ export const Learnsets: {[k: string]: LearnsetData} = { brutalswing: ["7M"], bulldoze: ["9M", "7M", "6M", "5M"], captivate: ["4M"], - charge: ["9M", "9L16", "7L16", "6L16", "5L25", "4L25"], + charge: ["9M", "9L16", "7L16", "6L16", "5L16", "4L25"], chargebeam: ["9M", "7M", "6M", "5M", "4M"], confide: ["7M", "6M"], confuseray: ["9M", "9L29", "7L29", "6L29", "5L29"], cottonguard: ["9L46", "7L46", "6L46", "5L40"], - cottonspore: ["9L11", "7L11", "7V", "6L11", "5L20", "4L20", "3L27"], + cottonspore: ["9L11", "7L11", "7V", "6L11", "5L11", "4L20", "3L27"], counter: ["3T"], curse: ["7V"], dazzlinggleam: ["9M", "9L51"], defensecurl: ["7V", "3T"], dig: ["9M"], - discharge: ["9L40", "7L40", "6L40", "5L48", "4L34"], + discharge: ["9L40", "7L40", "6L40", "5L40", "4L34"], doubleedge: ["9M", "3T"], doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], dragoncheer: ["9M"], @@ -26080,7 +26071,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { echoedvoice: ["7M", "6M", "5M"], eerieimpulse: ["9M"], electricterrain: ["9M"], - electroball: ["9M", "9L25", "7L25", "6L25", "5L33"], + electroball: ["9M", "9L25", "7L25", "6L25", "5L25"], electroweb: ["9M", "7T", "6T"], endeavor: ["9M"], endure: ["9M", "7V", "4M", "3T"], @@ -26102,7 +26093,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { iondeluge: ["7L1", "6L1"], irontail: ["7T", "7V", "6T", "5T", "4M", "3M"], laserfocus: ["7T"], - lightscreen: ["9M", "9L57", "7M", "7L57", "7V", "6M", "6L57", "5M", "5L63", "4M", "4L51", "3M", "3L42"], + lightscreen: ["9M", "9L57", "7M", "7L57", "7V", "6M", "6L57", "5M", "5L57", "4M", "4L51", "3M", "3L42"], lowkick: ["9M"], magneticflux: ["9L1", "7L1", "6L1"], magnetrise: ["7T", "6T", "5T", "4T"], @@ -26112,7 +26103,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { mimic: ["3T"], naturalgift: ["4M"], outrage: ["9M", "7T", "6T", "5T", "4T"], - powergem: ["9M", "9L35", "7L35", "6L35", "5L71", "4L59"], + powergem: ["9M", "9L35", "7L35", "6L35", "5L35", "4L59"], poweruppunch: ["6M"], protect: ["9M", "7M", "7V", "6M", "5M", "4M", "3M"], raindance: ["9M", "7M", "7V", "6M", "5M", "4M", "3M"], @@ -26127,7 +26118,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { secretpower: ["6M", "4M", "3M"], seismictoss: ["3T"], shockwave: ["7T", "6T", "4M", "3M"], - signalbeam: ["7T", "7L51", "6T", "6L51", "5T", "5L55", "4T", "4L42"], + signalbeam: ["7T", "7L51", "6T", "6L51", "5T", "5L51", "4T", "4L42"], sleeptalk: ["9M", "7M", "7V", "6M", "5T", "4M", "3T"], snore: ["7T", "7V", "6T", "5T", "4T", "3T"], stompingtantrum: ["9M"], @@ -26140,7 +26131,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { tackle: ["9L1", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], takedown: ["9M", "9L20", "7L20", "6L20", "5L20"], terablast: ["9M"], - thunder: ["9M", "9L62", "7M", "7L62", "7V", "6M", "6L62", "5M", "5L79", "4M", "4L68", "3M", "3L57"], + thunder: ["9M", "9L62", "7M", "7L62", "7V", "6M", "6L62", "5M", "5L62", "4M", "4L68", "3M", "3L57"], thunderbolt: ["9M", "7M", "6M", "5M", "4M", "3M"], thunderpunch: ["9M", "9L0", "7T", "7L1", "7V", "6T", "6L30", "5T", "5L30", "4T", "4L30", "3T", "3L30"], thundershock: ["9L1", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], @@ -26162,7 +26153,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { bodyslam: ["9M", "8M", "7E", "6E", "5E", "4E", "3T"], bounce: ["9L15", "8M", "8L15", "7T", "7L23", "6T", "6L23", "5T", "5L23"], brutalswing: ["8M"], - bubble: ["7L7", "6L7", "5L10", "4L10", "3L10"], + bubble: ["7L7", "6L7", "5L1", "4L10", "3L10"], bubblebeam: ["9L6", "8L6", "7L13", "6L13", "5L13"], camouflage: ["7E", "6E"], captivate: ["4M"], @@ -26216,14 +26207,14 @@ export const Learnsets: {[k: string]: LearnsetData} = { surf: ["9M", "8M", "7M", "6M", "5M", "4M", "3M"], swagger: ["7M", "6M", "5M", "4M", "3T"], swift: ["4T", "3T"], - tailwhip: ["9L1", "8L1", "7L2", "6L2", "5L7", "4L7", "3L6"], + tailwhip: ["9L1", "8L1", "7L2", "6L2", "5L2", "4L7", "3L6"], takedown: ["9M"], terablast: ["9M"], tickle: ["9E", "8E", "7E", "6E", "5E", "4E", "3E"], toxic: ["7M", "6M", "5M", "4M", "3M"], uproar: ["8M", "7T", "6T", "5T", "4T"], waterfall: ["9M", "8M", "7M", "6M", "5M", "4M", "3M"], - watergun: ["9L1", "8L1", "7L1", "6L1", "5L18", "4L18", "3L21"], + watergun: ["9L1", "8L1", "7L1", "6L1", "5L7", "4L18", "3L21"], waterpulse: ["7T", "6T", "4M", "3M"], watersport: ["7L5", "7E", "6L5", "6E", "5L5", "5E"], whirlpool: ["8M", "4M"], @@ -26236,7 +26227,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { amnesia: ["9M", "8M", "7E", "7V", "6E", "5E", "4E", "3E"], aquajet: ["8E", "7E", "6E", "5E", "5D", "4E"], aquaring: ["9L24", "8L24", "7L28", "6L28", "5L23", "4L23"], - aquatail: ["9L19", "8L19", "7T", "7L20", "6T", "6L20", "5T", "5L37", "4T", "4L37"], + aquatail: ["9L19", "8L19", "7T", "7L20", "6T", "6L20", "5T", "5L20", "4T", "4L37"], attract: ["8M", "7M", "7V", "6M", "5M", "4M", "3M"], bellydrum: ["8E", "7E", "7V", "6E", "5E", "4E", "3E"], blizzard: ["9M", "8M", "7M", "7V", "6M", "5M", "4M", "3M"], @@ -26245,7 +26236,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { brickbreak: ["9M", "8M", "7M", "6M", "5M", "4M", "3M"], brutalswing: ["8M"], bubble: ["7L7", "6L7", "5L1"], - bubblebeam: ["9L6", "8L6", "7L13", "7V", "6L13", "5L18", "4L18", "3L21"], + bubblebeam: ["9L6", "8L6", "7L13", "7V", "6L13", "5L13", "4L18", "3L21"], bulldoze: ["9M"], camouflage: ["7E", "6E"], captivate: ["4M"], @@ -26259,7 +26250,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { dig: ["9M", "8M", "6M", "5M", "4M", "3M"], disarmingvoice: ["9M"], dive: ["8M", "6M", "5M", "4T", "3M"], - doubleedge: ["9M", "9L33", "8L33", "7L37", "7V", "6L23", "5L27", "4L27", "3T", "3L28"], + doubleedge: ["9M", "9L33", "8L33", "7L37", "7V", "6L23", "5L23", "4L27", "3T", "3L28"], doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], drainingkiss: ["9M", "8M"], dynamicpunch: ["7V", "3T"], @@ -26277,7 +26268,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { headbutt: ["7V", "4T"], helpinghand: ["9M", "9L1", "8M", "8L1", "7T", "7L16", "6T", "6L16", "5T", "5L16", "4T"], hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], - hydropump: ["9M", "9L30", "8M", "8L30", "7L47", "6L40", "5L42", "4L42", "3L45"], + hydropump: ["9M", "9L30", "8M", "8L30", "7L47", "6L40", "5L40", "4L42", "3L45"], hypervoice: ["9M", "8M", "7T", "6T", "5T"], icebeam: ["9M", "8M", "7M", "6M", "5M", "4M", "3M"], icepunch: ["9M", "8M", "7T", "7V", "6T", "5T", "5D", "4T", "3T"], @@ -26302,12 +26293,12 @@ export const Learnsets: {[k: string]: LearnsetData} = { poweruppunch: ["6M"], present: ["8E", "7E", "7V", "6E", "5E", "4E", "3E"], protect: ["9M", "8M", "7M", "7V", "6M", "5M", "4M", "3M"], - raindance: ["9M", "9L27", "8M", "8L27", "7M", "7L31", "7V", "6M", "6L31", "5M", "5L32", "4M", "4L32", "3M", "3L36"], + raindance: ["9M", "9L27", "8M", "8L27", "7M", "7L31", "7V", "6M", "6L31", "5M", "5L31", "4M", "4L32", "3M", "3L36"], refresh: ["7E", "6E", "5E", "4E"], rest: ["9M", "8M", "7M", "7V", "6M", "5M", "4M", "3M"], return: ["7M", "7V", "6M", "5M", "4M", "3M"], rocksmash: ["6M", "5M", "4M", "3M"], - rollout: ["9L1", "8L1", "7L10", "7V", "6L10", "5L15", "4T", "4L15", "3T", "3L15"], + rollout: ["9L1", "8L1", "7L10", "7V", "6L10", "5L10", "4T", "4L15", "3T", "3L15"], round: ["8M", "7M", "6M", "5M"], scald: ["8M", "7M", "6M", "5M"], secretpower: ["6M", "4M", "3M"], @@ -26327,7 +26318,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], swift: ["9M", "8M", "7V", "4T", "3T"], tackle: ["9L1", "8L1", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], - tailwhip: ["9L1", "8L1", "7L2", "7V", "6L2", "5L7", "4L7", "3L6"], + tailwhip: ["9L1", "8L1", "7L2", "7V", "6L2", "5L2", "4L7", "3L6"], takedown: ["9M"], terablast: ["9M"], tickle: ["8E"], @@ -26335,7 +26326,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { trailblaze: ["9M"], uproar: ["8M"], waterfall: ["9M", "8M", "7M", "7V", "6M", "5M", "4M", "3M"], - watergun: ["9L1", "8L1", "7L1", "7V", "6L1", "5L10", "4L10", "3L10"], + watergun: ["9L1", "8L1", "7L1", "7V", "6L1", "5L7", "4L10", "3L10"], waterpulse: ["9M", "7T", "6T", "4M", "3M"], watersport: ["7L5", "7E", "6L5", "6E", "5L5", "5E"], whirlpool: ["9M", "8M", "7V", "4M"], @@ -26347,7 +26338,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { alluringvoice: ["9M"], amnesia: ["9M", "8M"], aquaring: ["9L30", "8L30", "7L31", "6L31", "5L27", "4L27"], - aquatail: ["9L21", "8L21", "7T", "7L21", "6T", "6L21", "5T", "5L47", "4T", "4L47"], + aquatail: ["9L21", "8L21", "7T", "7L21", "6T", "6L21", "5T", "5L21", "4T", "4L47"], attract: ["8M", "7M", "7V", "6M", "5M", "4M", "3M"], blizzard: ["9M", "8M", "7M", "7V", "6M", "5M", "4M", "3M"], bodyslam: ["9M", "8M", "3T"], @@ -26355,7 +26346,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { brickbreak: ["9M", "8M", "7M", "6M", "5M", "4M", "3M"], brutalswing: ["8M"], bubble: ["7L7", "6L7", "5L1"], - bubblebeam: ["9L6", "8L6", "7L13", "7V", "6L13", "5L20", "4L20", "3L24"], + bubblebeam: ["9L6", "8L6", "7L13", "7V", "6L13", "5L13", "4L20", "3L24"], bulldoze: ["9M", "8M", "7M", "6M", "5M"], captivate: ["4M"], charm: ["9M", "9L9", "8M", "8L9"], @@ -26367,7 +26358,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { dig: ["9M", "8M", "6M", "5M", "4M", "3M"], disarmingvoice: ["9M"], dive: ["8M", "6M", "5M", "4T", "3M"], - doubleedge: ["9M", "9L45", "8L45", "7L42", "7V", "6L25", "5L33", "4L33", "3T", "3L34"], + doubleedge: ["9M", "9L45", "8L45", "7L42", "7V", "6L25", "5L25", "4L33", "3T", "3L34"], doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], drainingkiss: ["9M", "8M"], dynamicpunch: ["7V", "3T"], @@ -26386,7 +26377,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { headbutt: ["7V", "4T"], helpinghand: ["9M", "9L1", "8M", "8L1", "7T", "7L16", "6T", "6L16", "5T", "5L16", "4T"], hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], - hydropump: ["9M", "9L40", "8M", "8L40", "7L55", "6L46", "5L54", "4L54", "3L57"], + hydropump: ["9M", "9L40", "8M", "8L40", "7L55", "6L46", "5L46", "4L54", "3L57"], hyperbeam: ["9M", "8M", "7M", "7V", "6M", "5M", "4M", "3M"], hypervoice: ["9M", "8M", "7T", "6T", "5T"], icebeam: ["9M", "8M", "7M", "6M", "5M", "4M", "3M"], @@ -26410,11 +26401,11 @@ export const Learnsets: {[k: string]: LearnsetData} = { playrough: ["9M", "9L25", "8M", "8L25", "7L25", "6L25"], poweruppunch: ["6M"], protect: ["9M", "8M", "7M", "7V", "6M", "5M", "4M", "3M"], - raindance: ["9M", "9L35", "8M", "8L35", "7M", "7L35", "7V", "6M", "6L35", "5M", "5L40", "4M", "4L40", "3M", "3L45"], + raindance: ["9M", "9L35", "8M", "8L35", "7M", "7L35", "7V", "6M", "6L35", "5M", "5L35", "4M", "4L40", "3M", "3L45"], rest: ["9M", "8M", "7M", "7V", "6M", "5M", "4M", "3M"], return: ["7M", "7V", "6M", "5M", "4M", "3M"], rocksmash: ["7V", "6M", "5M", "4M", "3M"], - rollout: ["9L1", "8L1", "7L10", "7V", "6L10", "5L15", "4T", "4L15", "3T", "3L15"], + rollout: ["9L1", "8L1", "7L10", "7V", "6L10", "5L10", "4T", "4L15", "3T", "3L15"], round: ["8M", "7M", "6M", "5M"], scald: ["8M", "7M", "6M", "5M"], secretpower: ["6M", "4M", "3M"], @@ -26466,7 +26457,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { curse: ["9M", "9E", "8E", "7E", "6E", "5E"], defensecurl: ["9E", "8E", "7E", "6E", "5E", "4E"], dig: ["9M", "8M", "6M", "5M", "4M"], - doubleedge: ["9M", "9L44", "8L44", "7L43", "6L40", "5L46", "4L46"], + doubleedge: ["9M", "9L44", "8L44", "7L43", "6L40", "5L40", "4L46"], doubleteam: ["7M", "6M", "5M", "4M"], earthpower: ["9M", "8M", "7T", "6T", "5T", "4T"], earthquake: ["9M"], @@ -26474,8 +26465,8 @@ export const Learnsets: {[k: string]: LearnsetData} = { explosion: ["7M", "6M", "5M", "4M"], facade: ["9M", "8M", "7M", "6M", "5M", "4M"], faketears: ["9M", "9L1", "8M", "8L1", "7L1", "6L1", "5L1", "4L1"], - feintattack: ["7L19", "6L19", "5L25", "4L25"], - flail: ["9L4", "8L4", "7L5", "6L5", "5L6", "4L6"], + feintattack: ["7L19", "6L19", "5L19", "4L25"], + flail: ["9L4", "8L4", "7L5", "6L5", "5L5", "4L6"], foulplay: ["9M", "8M", "7T", "6T", "5T"], frustration: ["7M", "6M", "5M", "4M"], grassknot: ["9M"], @@ -26483,7 +26474,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { headbutt: ["9E", "8E", "7E", "6E", "5E", "4T", "4E"], helpinghand: ["9M", "8M", "7T", "6T", "5T", "4T"], hiddenpower: ["7M", "6M", "5M", "4M"], - lowkick: ["9M", "9L36", "8M", "8L36", "7T", "7L8", "6T", "6L8", "5T", "5L9", "4T", "4L9"], + lowkick: ["9M", "9L36", "8M", "8L36", "7T", "7L8", "6T", "6L8", "5T", "5L8", "4T", "4L9"], mimic: ["9L16", "8L16", "7L15", "6L15", "5L17", "4L17"], mudshot: ["9M"], mudslap: ["9M"], @@ -26496,9 +26487,9 @@ export const Learnsets: {[k: string]: LearnsetData} = { return: ["7M", "6M", "5M", "4M"], rockblast: ["9M"], rockpolish: ["9E", "8E", "7M", "6M", "5M", "4M"], - rockslide: ["9M", "9L32", "8M", "8L32", "7M", "7L33", "6M", "6L29", "5M", "5L33", "4M", "4L33"], - rockthrow: ["9L8", "8L8", "7L12", "6L12", "5L14", "4L14"], - rocktomb: ["9M", "9L20", "8M", "8L20", "7M", "7L26", "6M", "6L22", "5M", "5L30", "4M", "4L30"], + rockslide: ["9M", "9L32", "8M", "8L32", "7M", "7L33", "6M", "6L29", "5M", "5L29", "4M", "4L33"], + rockthrow: ["9L8", "8L8", "7L12", "6L12", "5L12", "4L14"], + rocktomb: ["9M", "9L20", "8M", "8L20", "7M", "7L26", "6M", "6L22", "5M", "5L22", "4M", "4L30"], roleplay: ["7T", "6T", "5T", "4T"], rollout: ["9E", "8E", "7E", "6E", "5E", "4T", "4E"], round: ["8M", "7M", "6M", "5M"], @@ -26506,7 +26497,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { sandtomb: ["9M", "8M", "7E", "6E", "5E", "4E"], secretpower: ["6M", "4M"], selfdestruct: ["8M", "7E", "6E", "5E", "4E"], - slam: ["5L38", "4L38"], + slam: ["5L15", "4L38"], sleeptalk: ["9M", "8M", "7M", "6M", "5T", "4M"], smackdown: ["9M", "7M", "6M", "5M"], snore: ["8M", "7T", "6T", "5T", "4T"], @@ -26515,7 +26506,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { stompingtantrum: ["9M", "8M", "7T"], stoneedge: ["9M"], substitute: ["9M", "8M", "7M", "6M", "5M", "4M"], - suckerpunch: ["9L28", "8L28", "7L40", "6L36", "5L41", "4T", "4L41"], + suckerpunch: ["9L28", "8L28", "7L40", "6L36", "5L36", "4T", "4L41"], sunnyday: ["9M", "8M", "7M", "6M", "5M", "4M"], swagger: ["7M", "6M", "5M", "4M"], takedown: ["9M"], @@ -26545,7 +26536,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { curse: ["9M", "8E", "7E", "7V", "6E", "5E"], defensecurl: ["8E", "7E", "7V", "6E", "5E", "4E", "3T"], dig: ["9M", "8M", "7V", "6M", "5M", "4M", "3M"], - doubleedge: ["9M", "9L44", "8L44", "7L43", "6L40", "5L46", "4L46", "3T", "3L57"], + doubleedge: ["9M", "9L44", "8L44", "7L43", "6L40", "5L40", "4L46", "3T", "3L57"], doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], drainpunch: ["9M"], dynamicpunch: ["7V", "3T"], @@ -26556,7 +26547,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { explosion: ["7M", "6M", "5M", "4M", "3T"], facade: ["9M", "8M", "7M", "6M", "5M", "4M", "3M"], faketears: ["9M", "9L1", "8M", "8L1"], - feintattack: ["7L19", "7V", "6L19", "5L25", "4L25", "3L41"], + feintattack: ["7L19", "7V", "6L19", "5L19", "4L25", "3L41"], firepunch: ["9M", "8M", "7T", "7V", "6T", "5T", "4T", "3T"], flail: ["9L1", "8L1", "7L1", "7V", "6L1", "5L1", "5D", "4L1", "3L9"], fling: ["9M", "8M", "7M", "6M", "5M", "4M"], @@ -26565,7 +26556,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], gigaimpact: ["9M"], grassknot: ["9M"], - hammerarm: ["9L1", "8L1", "7L50", "6L47", "5L49", "4L49"], + hammerarm: ["9L1", "8L1", "7L50", "6L47", "5L47", "4L49"], harden: ["8E", "7E", "6E", "5E", "4E"], headbutt: ["8E", "7E", "7V", "6E", "5E", "4T", "4E"], headsmash: ["9L48", "8L48", "7L54"], @@ -26580,7 +26571,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { megakick: ["8M", "3T"], megapunch: ["8M", "3T"], meteorbeam: ["9M", "8T"], - mimic: ["9L16", "8L16", "7L15", "7V", "6L15", "5L17", "4L17", "3T", "3L1"], + mimic: ["9L16", "8L16", "7L15", "7V", "6L15", "5L15", "4L17", "3T", "3L1"], mudshot: ["9M"], mudslap: ["9M", "7V", "4T", "3T"], naturalgift: ["4M"], @@ -26593,10 +26584,10 @@ export const Learnsets: {[k: string]: LearnsetData} = { return: ["7M", "7V", "6M", "5M", "4M", "3M"], rockblast: ["9M", "8M"], rockpolish: ["8E", "7M", "6M", "5M", "4M"], - rockslide: ["9M", "9L32", "8M", "8L32", "7M", "7L33", "7V", "6M", "6L29", "5M", "5L33", "4M", "4L33", "3T", "3L25"], + rockslide: ["9M", "9L32", "8M", "8L32", "7M", "7L33", "7V", "6M", "6L29", "5M", "5L29", "4M", "4L33", "3T", "3L25"], rocksmash: ["7V", "6M", "5M", "4M", "3M"], rockthrow: ["9L1", "8L1", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], - rocktomb: ["9M", "9L20", "8M", "8L20", "7M", "7L26", "6M", "6L22", "5M", "5L30", "4M", "4L30", "3M"], + rocktomb: ["9M", "9L20", "8M", "8L20", "7M", "7L26", "6M", "6L22", "5M", "5L22", "4M", "4L30", "3M"], roleplay: ["7T", "6T", "5T", "5D", "4T"], rollout: ["8E", "7E", "7V", "6E", "5E", "5D", "4T", "4E", "3T"], round: ["8M", "7M", "6M", "5M"], @@ -26605,7 +26596,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { secretpower: ["6M", "4M", "3M"], seismictoss: ["3T"], selfdestruct: ["8M", "7E", "7V", "6E", "5E", "4E", "3T", "3E"], - slam: ["9L0", "8L0", "7L1", "7V", "6L15", "5L38", "4L38", "3L49"], + slam: ["9L0", "8L0", "7L1", "7V", "6L15", "5L15", "4L38", "3L49"], sleeptalk: ["9M", "8M", "7M", "7V", "6M", "5T", "4M", "3T"], smackdown: ["9M", "7M", "6M", "5M"], snore: ["8M", "7T", "7V", "6T", "5T", "4T", "3T"], @@ -26615,7 +26606,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { stoneedge: ["9M", "9L1", "8M", "8L1", "7M", "7L47", "6M", "6L43", "5M", "5L43", "4M"], strength: ["7V", "6M", "5M", "4M", "3M"], substitute: ["9M", "8M", "7M", "6M", "5M", "4M", "3T"], - suckerpunch: ["9L28", "8L28", "7L40", "6L36", "5L41", "4T", "4L41"], + suckerpunch: ["9L28", "8L28", "7L40", "6L36", "5L36", "4T", "4L41"], sunnyday: ["9M", "8M", "7M", "7V", "6M", "5M", "4M", "3M"], swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], takedown: ["9M"], @@ -27132,16 +27123,16 @@ export const Learnsets: {[k: string]: LearnsetData} = { facade: ["9M", "7M", "6M", "5M", "4M", "3M"], flash: ["7V", "6M", "5M", "4M", "3M"], frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], - gigadrain: ["9M", "9L22", "7T", "7L22", "7V", "6T", "6L22", "5T", "5L41", "4M", "4L41", "3M", "3L42"], + gigadrain: ["9M", "9L22", "7T", "7L22", "7V", "6T", "6L22", "5T", "5L22", "4M", "4L41", "3M", "3L42"], grassknot: ["9M", "7M", "6M", "5M", "4M"], - grasswhistle: ["7L7", "7E", "6L7", "6E", "5L13", "5E", "4L13", "4E", "3E"], + grasswhistle: ["7L7", "7E", "6L7", "6E", "5L7", "5E", "4L13", "4E", "3E"], grassyterrain: ["9M", "9E", "7E", "6E"], growth: ["9L1", "7L1", "7V", "6L1", "5L1", "4L1", "3L6", "3S0"], helpinghand: ["9M", "7T", "7E", "6T", "6E", "5T", "5E", "4T", "4E", "3E"], hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], - ingrain: ["9E", "7L4", "7E", "6L4", "6E", "5L9", "5E", "4L9", "4E", "3L18"], + ingrain: ["9E", "7L4", "7E", "6L4", "6E", "5L4", "5E", "4L9", "4E", "3L18"], leafstorm: ["9M"], - leechseed: ["9E", "7L13", "7E", "6L13", "6E", "5L17", "5E", "4L17", "4E", "3E"], + leechseed: ["9E", "7L13", "7E", "6L13", "6E", "5L13", "5E", "4L17", "4E", "3E"], lightscreen: ["9M", "7M", "6M", "5M", "4M", "3M"], magicalleaf: ["9M"], megadrain: ["9L10", "7L10", "7V", "6L10", "5L5", "5D", "4L5", "3L13"], @@ -27151,13 +27142,13 @@ export const Learnsets: {[k: string]: LearnsetData} = { naturepower: ["7M", "7E", "6M", "6E", "5E", "4E", "3E"], protect: ["9M", "7M", "7V", "6M", "5M", "4M", "3M"], raindance: ["9M"], - razorleaf: ["9L16", "7L16", "6L16", "5L29", "4L29"], + razorleaf: ["9L16", "7L16", "6L16", "5L16", "4L29"], rest: ["9M", "7M", "7V", "6M", "5M", "4M", "3M"], return: ["7M", "7V", "6M", "5M", "4M", "3M"], round: ["7M", "6M", "5M"], safeguard: ["7M", "6M", "5M", "4M", "3M"], secretpower: ["6M", "4M", "3M"], - seedbomb: ["9M", "9L39", "7T", "7L43", "6T", "6L43", "5T", "5L45", "4T", "4L45"], + seedbomb: ["9M", "9L39", "7T", "7L43", "6T", "6L43", "5T", "5L43", "4T", "4L45"], sleeptalk: ["9M", "7M", "7V", "6M", "5T", "4M", "3T"], sludgebomb: ["7M", "7V", "6M", "5M", "4M", "3M"], snore: ["7T", "7V", "6T", "5T", "4T", "3T"], @@ -27167,7 +27158,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], sweetscent: ["7E", "7V", "6E", "5E", "5D", "4E"], swordsdance: ["7M", "6M", "5M", "4M", "3T"], - synthesis: ["9L28", "7T", "7L28", "7V", "6T", "6L28", "5T", "5L33", "4T", "4L33", "3L37"], + synthesis: ["9L28", "7T", "7L28", "7V", "6T", "6L28", "5T", "5L28", "4T", "4L33", "3L37"], tackle: ["9L1"], takedown: ["9M"], terablast: ["9M"], @@ -27175,7 +27166,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { trailblaze: ["9M"], uproar: ["7T", "6T", "5T", "4T"], weatherball: ["9M"], - worryseed: ["9L19", "7T", "7L19", "6T", "6L19", "5T", "5L25", "4T", "4L25"], + worryseed: ["9L19", "7T", "7L19", "6T", "6L19", "5T", "5L19", "4T", "4L25"], }, eventData: [ {generation: 3, level: 10, gender: "M", abilities: ["chlorophyll"], moves: ["absorb", "growth"], pokeball: "pokeball"}, @@ -27206,16 +27197,16 @@ export const Learnsets: {[k: string]: LearnsetData} = { gigadrain: ["9M", "9L22", "7T", "7L22", "7V", "6T", "6L22", "5T", "5L22", "4M", "3M"], gigaimpact: ["9M", "7M", "6M", "5M", "4M"], grassknot: ["9M", "7M", "6M", "5M", "4M"], - grasswhistle: ["7L7", "6L7", "5L13", "4L13"], + grasswhistle: ["7L7", "6L7", "5L7", "4L13"], grassyglide: ["9M"], grassyterrain: ["9M"], growth: ["9L1", "7L1", "7V", "6L1", "5L1", "4L1", "3L6"], helpinghand: ["9M", "7T", "6T", "5T", "4T"], hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], hyperbeam: ["9M", "7M", "7V", "6M", "5M", "4M", "3M"], - ingrain: ["9L4", "7L4", "6L4", "5L9", "4L9", "3L18"], - leafstorm: ["9M", "9L43", "7L43", "6L43", "5L45", "4L43"], - leechseed: ["9L13", "7L13", "6L13", "5L17", "4L17"], + ingrain: ["9L4", "7L4", "6L4", "5L4", "4L9", "3L18"], + leafstorm: ["9M", "9L43", "7L43", "6L43", "5L43", "4L43"], + leechseed: ["9L13", "7L13", "6L13", "5L13", "4L17"], lightscreen: ["9M", "7M", "6M", "5M", "4M", "3M"], magicalleaf: ["9M"], megadrain: ["9L10", "7L10", "6L10", "5L5", "4L5"], @@ -27223,11 +27214,11 @@ export const Learnsets: {[k: string]: LearnsetData} = { naturalgift: ["7L31", "6L31", "5L31", "4M"], naturepower: ["7M", "6M"], petalblizzard: ["9M", "9L50", "7L50", "6L50"], - petaldance: ["9L28", "7L28", "7V", "6L28", "5L33", "4L33", "3L37"], + petaldance: ["9L28", "7L28", "7V", "6L28", "5L28", "4L33", "3L37"], pound: ["9L1", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], protect: ["9M", "7M", "7V", "6M", "5M", "4M", "3M"], raindance: ["9M"], - razorleaf: ["9L16", "7L16", "7V", "6L16", "5L29", "4L29", "3L13"], + razorleaf: ["9L16", "7L16", "7V", "6L16", "5L16", "4L29", "3L13"], rest: ["9M", "7M", "7V", "6M", "5M", "4M", "3M"], return: ["7M", "7V", "6M", "5M", "4M", "3M"], round: ["7M", "6M", "5M"], @@ -27237,7 +27228,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { sleeptalk: ["9M", "7M", "7V", "6M", "5T", "4M", "3T"], sludgebomb: ["9M", "7M", "7V", "6M", "5M", "4M", "3M"], snore: ["7T", "7V", "6T", "5T", "4T", "3T"], - solarbeam: ["9M", "9L31", "7M", "7L34", "7V", "6M", "6L34", "5M", "5L41", "4M", "4L41", "3M", "3L42"], + solarbeam: ["9M", "9L31", "7M", "7L34", "7V", "6M", "6L34", "5M", "5L34", "4M", "4L41", "3M", "3L42"], substitute: ["9M", "7M", "6M", "5M", "4M", "3T"], sunnyday: ["9M", "9L39", "7M", "7L40", "7V", "6M", "6L40", "5M", "5L37", "4M", "4L37", "3M", "3L30"], swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], @@ -27251,7 +27242,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { trailblaze: ["9M"], uproar: ["7T", "6T", "5T", "4T"], weatherball: ["9M"], - worryseed: ["9L19", "7T", "7L19", "6T", "6L19", "5T", "5L25", "4T", "4L25"], + worryseed: ["9L19", "7T", "7L19", "6T", "6L19", "5T", "5L19", "4T", "4L25"], }, }, yanma: { @@ -28514,7 +28505,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { agility: ["9M", "8M", "7E", "6E", "5E", "4E"], airslash: ["9M", "8M", "7L41"], amnesia: ["9M", "8M"], - ancientpower: ["9L20", "8L20", "7L16", "7E", "7V", "6L19", "6E", "5L48", "5E", "4T", "4L41", "4E", "3E"], + ancientpower: ["9L20", "8L20", "7L16", "7E", "7V", "6L19", "6E", "5L19", "5E", "4T", "4L41", "4E", "3E"], aquatail: ["9E", "8E", "7T", "6T", "5T", "4T"], astonish: ["9E", "8E", "7E", "6E", "5E", "4E", "3E"], attract: ["8M", "7M", "7V", "6M", "5M", "4M", "3M"], @@ -28530,12 +28521,12 @@ export const Learnsets: {[k: string]: LearnsetData} = { captivate: ["4M"], chargebeam: ["7M", "6M", "5M", "4M"], chillingwater: ["9M"], - coil: ["9L44", "8L48", "7L28", "6L37", "5L43"], + coil: ["9L44", "8L48", "7L28", "6L37", "5L37"], confide: ["7M", "6M"], counter: ["3T"], curse: ["9M", "9E", "8E", "7E", "7V", "6E", "5E", "4E", "3E"], - defensecurl: ["9L1", "8L1", "7L1", "7V", "6L1", "5L4", "5D", "4L5", "3T", "3L4"], - dig: ["9M", "8M", "7L31", "7V", "6M", "6L31", "5M", "5L53", "4M", "4L45", "3M"], + defensecurl: ["9L1", "8L1", "7L1", "7V", "6L1", "5L1", "5D", "4L5", "3T", "3L4"], + dig: ["9M", "8M", "7L31", "7V", "6M", "6L31", "5M", "5L31", "4M", "4L45", "3M"], doubleedge: ["9M", "9L48", "8L52", "7L36", "6L34", "5L34", "3T"], doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], dragonrush: ["9L40", "8L44", "7L43"], @@ -28544,11 +28535,11 @@ export const Learnsets: {[k: string]: LearnsetData} = { dualwingbeat: ["8T"], earthpower: ["9M"], earthquake: ["9M", "8M", "7M", "6M", "5M", "4M", "3M"], - endeavor: ["9M", "9L52", "8L56", "7T", "7L38", "6T", "6L46", "5T", "5L58", "4T", "4L49", "3L41"], + endeavor: ["9M", "9L52", "8L56", "7T", "7L38", "6T", "6L46", "5T", "5L46", "4T", "4L49", "3L41"], endure: ["9M", "8M", "7L46", "7V", "6L40", "5L40", "4M", "3T"], facade: ["9M", "8M", "7M", "6M", "5M", "4M", "3M"], fireblast: ["9M", "8M", "7M", "6M", "5M", "4M", "3M"], - flail: ["9L1", "8L1", "7L48", "6L49", "5L63", "4L53", "3L44"], + flail: ["9L1", "8L1", "7L48", "6L49", "5L49", "4L53", "3L44"], flamethrower: ["9M", "8M", "7M", "6M", "5M", "4M", "3M"], frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], gigaimpact: ["9M"], @@ -28579,7 +28570,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { pounce: ["9M"], protect: ["9M", "8M", "7M", "7V", "6M", "5M", "4M", "3M"], psychup: ["9M", "7M", "7V", "6M", "5M", "4M", "3T"], - pursuit: ["7L8", "7V", "6L10", "5L24", "4L25", "3L24"], + pursuit: ["7L8", "7V", "6L10", "5L10", "4L25", "3L24"], rage: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], raindance: ["9M", "8M", "7M", "7V", "6M", "5M", "4M", "3M"], rest: ["9M", "8M", "7M", "7V", "6M", "5M", "4M", "3M"], @@ -28588,13 +28579,13 @@ export const Learnsets: {[k: string]: LearnsetData} = { rockslide: ["9M", "8M", "7M", "7V", "6M", "5M", "4M", "4E", "3T", "3E"], rocksmash: ["7V", "6M", "5M", "4M", "3M"], rocktomb: ["9M", "8M", "7M", "6M", "5M", "4M", "3M"], - rollout: ["9L8", "8L8", "7L3", "7V", "6L4", "5L16", "4T", "4L17", "3T", "3L21"], - roost: ["9L36", "8L40", "7M", "7L23", "6M", "6L25", "5T", "5L33", "4M", "4L33"], + rollout: ["9L8", "8L8", "7L3", "7V", "6L4", "5L4", "4T", "4L17", "3T", "3L21"], + roost: ["9L36", "8L40", "7M", "7L23", "6M", "6L25", "5T", "5L25", "4M", "4L33"], round: ["8M", "7M", "6M", "5M"], sandstorm: ["9M"], scaleshot: ["9M", "8T"], scaryface: ["9M"], - screech: ["9L16", "8M", "8L16", "7L11", "7V", "6L13", "5L28", "4L29", "3L31"], + screech: ["9L16", "8M", "8L16", "7L11", "7V", "6L13", "5L13", "4L29", "3L31"], secretpower: ["7E", "6M", "6E", "5E", "4M", "3M"], shadowball: ["9M", "8M", "7M", "6M", "5M", "4M", "3M"], shockwave: ["7T", "6T", "4M", "3M"], @@ -28603,7 +28594,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { smartstrike: ["9M"], snore: ["8M", "7T", "7E", "7V", "6T", "6E", "5T", "5E", "4T", "4E", "3T"], solarbeam: ["9M", "8M", "7M", "7V", "6M", "5M", "4M", "3M"], - spite: ["9M", "7T", "7L6", "7V", "6T", "6L7", "5T", "5L20", "4T", "4L21", "3L21"], + spite: ["9M", "7T", "7L6", "7V", "6T", "6L7", "5T", "5L7", "4T", "4L21", "3L21"], stealthrock: ["9M", "8M", "7T", "6T", "5T", "5D", "4M"], stompingtantrum: ["9M", "8M", "7T"], stoneedge: ["9M"], @@ -28612,7 +28603,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { substitute: ["9M", "8M", "7M", "6M", "5M", "4M", "3T"], sunnyday: ["9M", "8M", "7M", "7V", "6M", "5M", "4M", "3M"], swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], - takedown: ["9M", "8L36", "7L26", "7V", "6L22", "5L38", "4L37", "3L34"], + takedown: ["9M", "8L36", "7L26", "7V", "6L22", "5L22", "4L37", "3L34"], terablast: ["9M"], terrainpulse: ["8T"], thief: ["9M", "8M", "7M", "7V", "6M", "5M", "4M", "3M"], @@ -28721,7 +28712,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { }, gligar: { learnset: { - acrobatics: ["9M", "9L22", "7M", "7L22", "6M", "6L22", "5M", "5L27"], + acrobatics: ["9M", "9L22", "7M", "7L22", "6M", "6L22", "5M", "5L22"], aerialace: ["9M", "7M", "6M", "5M", "4M", "3M"], agility: ["9M", "7E", "6E", "5E", "4E"], aquatail: ["7T", "6T", "5T", "4T"], @@ -28753,21 +28744,21 @@ export const Learnsets: {[k: string]: LearnsetData} = { facade: ["9M", "7M", "6M", "5M", "4M", "3M"], falseswipe: ["9M", "7M", "6M", "5M", "4M"], feint: ["9E", "7E", "6E", "5E", "5D", "4E"], - feintattack: ["7L19", "7V", "6L19", "5L23", "4L23", "3L28"], + feintattack: ["7L19", "7V", "6L19", "5L19", "4L23", "3L28"], firefang: ["9M"], fling: ["9M", "7M", "6M", "5M", "4M"], frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], - furycutter: ["9L16", "7L16", "7V", "6L16", "5L20", "4T", "4L20", "3T"], + furycutter: ["9L16", "7L16", "7V", "6L16", "5L16", "4T", "4L20", "3T"], guillotine: ["7L55", "7V", "6L55", "5L49", "4L45", "3L52"], gunkshot: ["9M"], - harden: ["9L7", "7L7", "7V", "6L7", "5L9", "4L9", "3L13"], + harden: ["9L7", "7L7", "7V", "6L7", "5L7", "4L9", "3L13"], headbutt: ["7V", "4T"], hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], highhorsepower: ["9M"], honeclaws: ["6M", "5M"], icefang: ["9M"], irontail: ["7T", "7V", "6T", "5T", "4M", "3M"], - knockoff: ["9M", "9L10", "7T", "7L10", "6T", "6L10", "5T", "5L12", "4T", "4L12"], + knockoff: ["9M", "9L10", "7T", "7L10", "6T", "6L10", "5T", "5L10", "4T", "4L12"], lunge: ["9M"], metalclaw: ["9M", "7E", "7V", "6E", "5E", "4E", "3E"], mimic: ["3T"], @@ -28782,7 +28773,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { powertrick: ["7E", "6E", "5E", "4E"], protect: ["9M", "7M", "7V", "6M", "5M", "4M", "3M"], psychicfangs: ["9M"], - quickattack: ["9L13", "7L13", "7V", "6L13", "5L16", "4L16", "3L20"], + quickattack: ["9L13", "7L13", "7V", "6L13", "5L13", "4L16", "3L20"], raindance: ["9M", "7M", "6M", "5M", "4M", "3M"], razorwind: ["7E", "7V", "6E", "5E", "4E", "3E"], rest: ["9M", "7M", "7V", "6M", "5M", "4M", "3M"], @@ -28794,7 +28785,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { rocktomb: ["9M", "7M", "6M", "5M", "4M", "3M"], roost: ["7M", "6M", "5T", "4M"], round: ["7M", "6M", "5M"], - sandattack: ["9L4", "7L4", "7V", "6L4", "5L5", "5D", "4L5", "3L6", "3S0"], + sandattack: ["9L4", "7L4", "7V", "6L4", "5L4", "5D", "4L5", "3L6", "3S0"], sandstorm: ["9M", "7M", "7V", "6M", "5M", "4M", "3M"], sandtomb: ["9M", "7E", "6E", "5E", "4E", "3E"], scaleshot: ["9M"], @@ -28803,7 +28794,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { secretpower: ["6M", "4M", "3M"], skittersmack: ["9M"], skyuppercut: ["7L45", "6L45", "5L45"], - slash: ["9L27", "7L27", "7V", "6L27", "5L34", "4L31", "3L36"], + slash: ["9L27", "7L27", "7V", "6L27", "5L27", "4L31", "3L36"], sleeptalk: ["9M", "7M", "7V", "6M", "5T", "4M", "3T"], sludgebomb: ["9M", "7M", "7V", "6M", "5M", "4M", "3M"], snore: ["7T", "7V", "6T", "5T", "4T", "3T"], @@ -28828,10 +28819,10 @@ export const Learnsets: {[k: string]: LearnsetData} = { torment: ["7M", "6M", "5M", "4M"], toxic: ["9M", "7M", "7V", "6M", "5M", "4M", "3M"], toxicspikes: ["9M"], - uturn: ["9M", "9L30", "7M", "7L30", "6M", "6L30", "5M", "5L42", "4M", "4L38"], + uturn: ["9M", "9L30", "7M", "7L30", "6M", "6L30", "5M", "5L30", "4M", "4L38"], venoshock: ["9M", "7M", "6M", "5M"], wingattack: ["9E", "7E", "7V", "6E", "5E", "4E", "3E"], - xscissor: ["9M", "9L40", "7M", "7L40", "6M", "6L40", "5M", "5L45", "4M", "4L42"], + xscissor: ["9M", "9L40", "7M", "7L40", "6M", "6L40", "5M", "5L40", "4M", "4L42"], }, eventData: [ {generation: 3, level: 10, gender: "M", moves: ["poisonsting", "sandattack"], pokeball: "pokeball"}, @@ -28839,7 +28830,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { }, gliscor: { learnset: { - acrobatics: ["9M", "9L22", "7M", "7L22", "6M", "6L22", "5M", "5L27"], + acrobatics: ["9M", "9L22", "7M", "7L22", "6M", "6L22", "5M", "5L22"], aerialace: ["9M", "7M", "6M", "5M", "4M"], agility: ["9M"], aquatail: ["7T", "6T", "5T", "4T"], @@ -28866,11 +28857,11 @@ export const Learnsets: {[k: string]: LearnsetData} = { endure: ["9M", "4M"], facade: ["9M", "7M", "6M", "5M", "4M"], falseswipe: ["9M", "7M", "6M", "5M", "4M"], - feintattack: ["7L19", "6L19", "5L23", "4L23"], + feintattack: ["7L19", "6L19", "5L19", "4L23"], firefang: ["9M", "9L1", "7L1", "6L1", "5L1", "4L1"], fling: ["9M", "7M", "6M", "5M", "4M"], frustration: ["7M", "6M", "5M", "4M"], - furycutter: ["9L16", "7L16", "6L16", "5L20", "4T", "4L20"], + furycutter: ["9L16", "7L16", "6L16", "5L16", "4T", "4L20"], gigaimpact: ["9M", "7M", "6M", "5M", "4M"], guillotine: ["7L1", "6L1", "5L49", "4L45"], gunkshot: ["9M"], @@ -28888,13 +28879,13 @@ export const Learnsets: {[k: string]: LearnsetData} = { mudshot: ["9M"], mudslap: ["9M", "4T"], naturalgift: ["4M"], - nightslash: ["9L27", "7L27", "6L27", "5L34", "4L31"], + nightslash: ["9L27", "7L27", "6L27", "5L27", "4L31"], payback: ["7M", "6M", "5M", "4M"], poisonjab: ["9M", "9L1", "7M", "7L1", "6M", "6L1", "5M", "5L1", "4M", "4L1"], poisontail: ["9M"], protect: ["9M", "7M", "6M", "5M", "4M"], psychicfangs: ["9M"], - quickattack: ["9L13", "7L13", "6L13", "5L16", "4L16"], + quickattack: ["9L13", "7L13", "6L13", "5L13", "4L16"], raindance: ["9M", "7M", "6M", "5M", "4M"], rest: ["9M", "7M", "6M", "5M", "4M"], return: ["7M", "6M", "5M", "4M"], @@ -28938,9 +28929,9 @@ export const Learnsets: {[k: string]: LearnsetData} = { torment: ["7M", "6M", "5M", "4M"], toxic: ["9M", "7M", "6M", "5M", "4M"], toxicspikes: ["9M"], - uturn: ["9M", "9L30", "7M", "7L30", "6M", "6L30", "5M", "5L42", "4M", "4L38"], + uturn: ["9M", "9L30", "7M", "7L30", "6M", "6L30", "5M", "5L30", "4M", "4L38"], venoshock: ["9M", "7M", "6M", "5M"], - xscissor: ["9M", "9L40", "7M", "7L40", "6M", "6L40", "5M", "5L45", "4M", "4L42"], + xscissor: ["9M", "9L40", "7M", "7L40", "6M", "6L40", "5M", "5L40", "4M", "4L42"], }, }, snubbull: { @@ -29441,7 +29432,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { bide: ["7L1", "7V", "6L1", "5L1", "4L1", "3L28"], bind: ["7T", "6T", "5T"], bodyslam: ["8M", "3T"], - bugbite: ["8L30", "7T", "7L42", "6T", "6L42", "5T", "5L49", "4T", "4L40"], + bugbite: ["8L30", "7T", "7L42", "6T", "6L42", "5T", "5L42", "4T", "4L40"], bulldoze: ["8M", "7M", "6M", "5M"], captivate: ["4M"], confide: ["7M", "6M"], @@ -29454,14 +29445,14 @@ export const Learnsets: {[k: string]: LearnsetData} = { doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], earthpower: ["8M", "7T", "6T", "5T", "4T"], earthquake: ["8M", "7M", "7V", "6M", "5M", "4M", "3M"], - encore: ["8M", "7L5", "7V", "6L5", "5L7", "5D", "4L9", "3L14", "3S1"], + encore: ["8M", "7L5", "7V", "6L5", "5L5", "5D", "4L9", "3L14", "3S1"], endure: ["8M", "7V", "4M", "3T"], facade: ["8M", "7M", "6M", "5M", "4M", "3M"], finalgambit: ["8E", "7E", "6E", "5E"], flash: ["7V", "6M", "5M", "4M", "3M"], frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], - gastroacid: ["8L45", "7T", "7L27", "6T", "6L27", "5T", "5L31", "4T", "4L35"], - guardsplit: ["8L35", "7L45", "6L45", "5L55"], + gastroacid: ["8L45", "7T", "7L27", "6T", "6L27", "5T", "5L27", "4T", "4L35"], + guardsplit: ["8L35", "7L45", "6L45", "5L45"], gyroball: ["8M", "7M", "6M", "5M", "4M"], headbutt: ["7V", "4T"], helpinghand: ["8M", "7T", "7E", "6T", "6E", "5T", "5E", "5D", "4T", "4E"], @@ -29474,10 +29465,10 @@ export const Learnsets: {[k: string]: LearnsetData} = { mudshot: ["8M"], mudslap: ["7E", "7V", "6E", "5E", "4T", "4E", "3T"], naturalgift: ["4M"], - powersplit: ["8L35", "7L45", "6L45", "5L55"], - powertrick: ["8L55", "7L31", "6L31", "5L43", "4L48"], + powersplit: ["8L35", "7L45", "6L45", "5L45"], + powertrick: ["8L55", "7L31", "6L31", "5L31", "4L48"], protect: ["8M", "7M", "7V", "6M", "5M", "4M", "3M"], - rest: ["8M", "8L25", "7M", "7L20", "7V", "6M", "6L20", "5M", "5L25", "4M", "4L27", "3M", "3L37"], + rest: ["8M", "8L25", "7M", "7L20", "7V", "6M", "6L20", "5M", "5L20", "4M", "4L27", "3M", "3L37"], return: ["7M", "7V", "6M", "5M", "4M", "3M"], reversal: ["8M"], rockblast: ["8M", "7E", "6E", "5E"], @@ -29486,9 +29477,9 @@ export const Learnsets: {[k: string]: LearnsetData} = { rocksmash: ["7V", "6M", "5M", "4M", "3M"], rockthrow: ["8L15", "7L23", "6L23", "5L23"], rocktomb: ["8M", "7M", "6M", "5M", "4M", "3M"], - rollout: ["8L5", "7L1", "7V", "6L1", "5L37", "4T", "3T"], + rollout: ["8L5", "7L1", "7V", "6L1", "5L1", "4T", "3T"], round: ["8M", "7M", "6M", "5M"], - safeguard: ["8M", "8L20", "7M", "7L16", "7V", "6M", "6L16", "5M", "5L19", "4M", "4L14", "3M", "3L23"], + safeguard: ["8M", "8L20", "7M", "7L16", "7V", "6M", "6L16", "5M", "5L16", "4M", "4L14", "3M", "3L23"], sandstorm: ["8M", "7M", "7V", "6M", "5M", "4M", "3M"], sandtomb: ["8M", "7E", "6E", "5E", "4E"], secretpower: ["6M", "4M", "3M"], @@ -29513,7 +29504,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { toxic: ["8E", "7M", "7V", "6M", "5M", "4M", "3M", "3S1"], venoshock: ["8M", "7M", "6M", "5M"], withdraw: ["8L1", "7L1", "7V", "6L1", "5L1", "4L1", "3L1", "3S0"], - wrap: ["8L1", "7L9", "7V", "6L9", "5L13", "4L22", "3L9", "3S0"], + wrap: ["8L1", "7L9", "7V", "6L9", "5L9", "4L22", "3L9", "3S0"], }, eventData: [ {generation: 3, level: 10, gender: "M", abilities: ["sturdy"], moves: ["constrict", "withdraw", "wrap"], pokeball: "pokeball"}, @@ -29522,7 +29513,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { }, heracross: { learnset: { - aerialace: ["9M", "9L15", "8L15", "7M", "7L10", "6M", "6L10", "5M", "5L13", "4M", "4L13"], + aerialace: ["9M", "9L15", "8L15", "7M", "7L10", "6M", "6L10", "5M", "5L10", "4M", "4L13"], armthrust: ["9L1", "7L1", "6L1"], assurance: ["8M"], attract: ["8M", "7M", "7V", "6M", "5M", "4M", "3M"], @@ -29537,10 +29528,10 @@ export const Learnsets: {[k: string]: LearnsetData} = { bulletseed: ["9M", "8M", "7L1", "6L1", "6S0", "6S1"], captivate: ["4M"], chipaway: ["7L16", "6L16", "5L16"], - closecombat: ["9M", "9L60", "8M", "8L60", "7L43", "6L34", "6S0", "5L37", "4L37"], + closecombat: ["9M", "9L60", "8M", "8L60", "7L43", "6L34", "6S0", "5L34", "4L37"], coaching: ["9M", "8T"], confide: ["7M", "6M"], - counter: ["9L25", "8L25", "7L19", "7V", "6L19", "5L25", "4L25", "3T", "3L30"], + counter: ["9L25", "8L25", "7L19", "7V", "6L19", "5L19", "4L25", "3T", "3L30"], curse: ["9M", "7V"], cut: ["7V", "6M", "5M", "4M", "3M"], detect: ["7V"], @@ -29552,7 +29543,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { endure: ["9M", "9L10", "8M", "8L10", "7L1", "7V", "6L1", "5L1", "4M", "4L1", "3T", "3L11"], facade: ["9M", "8M", "7M", "6M", "5M", "4M", "3M"], falseswipe: ["9M", "8M", "7M", "6M", "5M", "4E", "3E"], - feint: ["9E", "8E", "7L7", "6L7", "5L49", "4L49"], + feint: ["9E", "8E", "7L7", "6L7", "5L37", "4L49"], flail: ["9E", "8E", "7E", "7V", "6E", "5E", "5D", "4E", "3E"], fling: ["9M", "8M", "7M", "6M", "5M", "4M"], focusblast: ["9M", "8M", "7M", "6M", "5M", "4M"], @@ -29573,7 +29564,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { leer: ["9L1", "8L1", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], lowkick: ["9M", "8M", "7T", "6T", "5T", "4T"], lunge: ["9M"], - megahorn: ["9L55", "8M", "8L55", "7L37", "7E", "7V", "6L37", "6E", "6S0", "5L55", "5E", "4L55", "3L53"], + megahorn: ["9L55", "8M", "8L55", "7L37", "7E", "7V", "6L37", "6E", "6S0", "5L46", "5E", "4L55", "3L53"], mimic: ["3T"], naturalgift: ["4M"], nightslash: ["9E", "8E", "7L1", "6L1", "5L1", "4L1"], @@ -29609,7 +29600,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], swordsdance: ["9M", "9L50", "8M", "8L50", "7M", "6M", "5M", "4M", "3T"], tackle: ["9L1", "8L1", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], - takedown: ["9M", "8E", "7L34", "7V", "6L28", "5L31", "4L31", "3L37"], + takedown: ["9M", "8E", "7L34", "7V", "6L28", "5L28", "4L31", "3L37"], terablast: ["9M"], thief: ["9M", "8M", "7M", "7V", "6M", "5M", "4M", "3M"], thrash: ["9L45", "8L45"], @@ -29629,11 +29620,11 @@ export const Learnsets: {[k: string]: LearnsetData} = { sneasel: { learnset: { aerialace: ["9M", "7M", "6M", "5M", "4M", "3M"], - agility: ["9M", "9L48", "8M", "8L48", "7L20", "7V", "6L20", "5L24", "4L24", "3L36"], + agility: ["9M", "9L48", "8M", "8L48", "7L20", "7V", "6L20", "5L20", "4L24", "3L36"], assist: ["7E", "6E", "5E", "4E"], attract: ["8M", "7M", "7V", "6M", "5M", "4M", "3M"], avalanche: ["9M", "8M", "7E", "6E", "5E", "4M"], - beatup: ["9L42", "8M", "8L42", "7L28", "7V", "6L28", "5L42", "4L38", "3L57"], + beatup: ["9L42", "8M", "8L42", "7L28", "7V", "6L28", "5L28", "4L38", "3L57"], bite: ["9E", "8E", "7E", "7V", "6E", "5E", "4E", "3E"], blizzard: ["9M", "8M", "7M", "7V", "6M", "5M", "4M", "3M"], brickbreak: ["9M", "8M", "7M", "6M", "5M", "4M", "3M"], @@ -29660,26 +29651,26 @@ export const Learnsets: {[k: string]: LearnsetData} = { faketears: ["9M", "8M"], falseswipe: ["9M", "8M", "7M", "6M", "5M", "4M"], feint: ["9E", "8E", "7E", "6E", "5E"], - feintattack: ["7L10", "7V", "6L10", "5L14", "4L14", "3L22"], + feintattack: ["7L10", "7V", "6L10", "5L10", "4L14", "3L22"], fling: ["9M", "8M", "7M", "6M", "5M", "4M"], focuspunch: ["9M", "7T", "6T", "4M", "3M"], foresight: ["7E", "7V", "6E", "5E", "4E", "3E"], foulplay: ["9M", "8M", "7T", "6T", "5T"], frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], furycutter: ["7V", "4T", "3T"], - furyswipes: ["9L30", "8L30", "7L16", "7V", "6L16", "5L21", "4L21", "3L29"], + furyswipes: ["9L30", "8L30", "7L16", "7V", "6L16", "5L16", "4L21", "3L29"], gigaimpact: ["9M"], hail: ["8M", "7M", "6M", "5M", "4M", "3M"], headbutt: ["7V", "4T"], helpinghand: ["9M"], hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], - honeclaws: ["9L36", "8L36", "7L25", "6M", "6L25", "5M", "5L35"], + honeclaws: ["9L36", "8L36", "7L25", "6M", "6L25", "5M", "5L25"], icebeam: ["9M", "8M", "7M", "6M", "5M", "4M", "3M"], icepunch: ["9M", "8M", "7T", "7E", "7V", "6T", "6E", "5T", "5E", "5D", "4T", "4E", "3T"], - iceshard: ["9E", "8E", "7L47", "7E", "6L47", "6E", "5L51", "5E", "4L49", "4E"], + iceshard: ["9E", "8E", "7L47", "7E", "6L47", "6E", "5L47", "5E", "4L49", "4E"], iciclecrash: ["9E", "8E", "7E", "6E"], iciclespear: ["9M"], - icywind: ["9M", "9L24", "8M", "8L24", "7T", "7L14", "7V", "6T", "6L14", "5T", "5L28", "4T", "4L28", "3T", "3L43"], + icywind: ["9M", "9L24", "8M", "8L24", "7T", "7L14", "7V", "6T", "6L14", "5T", "5L14", "4T", "4L28", "3T", "3L43"], irontail: ["8M", "7T", "7V", "6T", "5T", "4M", "3M"], knockoff: ["9M", "7T", "6T", "5T", "4T"], laserfocus: ["7T"], @@ -29689,7 +29680,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { lowsweep: ["9M", "8M", "7M", "6M", "5M"], megakick: ["8M"], megapunch: ["8M"], - metalclaw: ["9M", "9L18", "8L18", "7L22", "7V", "6L22", "5L49", "4L42", "3L64"], + metalclaw: ["9M", "9L18", "8L18", "7L22", "7V", "6L22", "5L22", "4L42", "3L64"], mimic: ["3T"], mudslap: ["7V", "4T", "3T"], nastyplot: ["9M"], @@ -29718,7 +29709,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { secretpower: ["6M", "4M", "3M"], shadowball: ["9M", "8M", "7M", "7V", "6M", "5M", "4M", "3M"], shadowclaw: ["9M", "8M", "7M", "6M", "5M", "4M"], - slash: ["9L60", "8L60", "7L35", "7V", "6L35", "5L38", "4L35", "3L50"], + slash: ["9L60", "8L60", "7L35", "7V", "6L35", "5L35", "4L35", "3L50"], sleeptalk: ["9M", "8M", "7M", "7V", "6M", "5T", "4M", "3T"], snarl: ["9M", "8M", "7M", "6M", "5M"], snatch: ["7T", "7L40", "6T", "6L40", "5T", "5L40", "4M", "3M"], @@ -29834,7 +29825,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { chillingwater: ["9M"], confide: ["7M", "6M"], cut: ["6M", "5M", "4M"], - darkpulse: ["9M", "9L66", "8M", "8L66", "7M", "7L47", "6M", "6L47", "5T", "5L51", "4M", "4L49"], + darkpulse: ["9M", "9L66", "8M", "8L66", "7M", "7L47", "6M", "6L47", "5T", "5L47", "4M", "4L49"], dig: ["9M", "8M", "6M", "5M", "4M"], doubleteam: ["7M", "6M", "5M", "4M"], dreameater: ["7M", "6M", "5M", "4M"], @@ -29844,27 +29835,27 @@ export const Learnsets: {[k: string]: LearnsetData} = { fakeout: ["4S0"], faketears: ["9M", "8M"], falseswipe: ["9M", "8M", "7M", "6M", "5M", "4M"], - feintattack: ["7L10", "6L10", "5L14", "4L14"], - fling: ["9M", "9L42", "8M", "8L42", "7M", "7L28", "6M", "6L28", "5M", "5L42", "4M", "4L38"], + feintattack: ["7L10", "6L10", "5L10", "4L14"], + fling: ["9M", "9L42", "8M", "8L42", "7M", "7L28", "6M", "6L28", "5M", "5L28", "4M", "4L38"], focusblast: ["9M", "8M", "7M", "6M", "5M", "4M"], focuspunch: ["9M", "7T", "6T", "4M"], foulplay: ["9M", "8M", "7T", "6T", "5T"], frustration: ["7M", "6M", "5M", "4M"], furycutter: ["4T"], - furyswipes: ["9L30", "8L30", "7L16", "6L16", "5L21", "4L21"], + furyswipes: ["9L30", "8L30", "7L16", "6L16", "5L16", "4L21"], gigaimpact: ["9M", "8M", "7M", "6M", "5M", "4M"], hail: ["8M", "7M", "6M", "5M", "4M"], headbutt: ["4T"], helpinghand: ["9M"], hiddenpower: ["7M", "6M", "5M", "4M"], - honeclaws: ["9L36", "8L36", "7L25", "6M", "6L25", "5M", "5L35"], + honeclaws: ["9L36", "8L36", "7L25", "6M", "6L25", "5M", "5L25"], hyperbeam: ["9M", "8M", "7M", "6M", "5M", "4M"], icebeam: ["9M", "8M", "7M", "6M", "5M", "4M"], icepunch: ["9M", "8M", "7T", "6T", "6S1", "5T", "4T"], iceshard: ["9L1", "8L1", "4S0"], icespinner: ["9M"], iciclespear: ["9M", "8M"], - icywind: ["9M", "9L24", "8M", "8L24", "7T", "7L14", "6T", "6L14", "5T", "5L28", "4T", "4L28"], + icywind: ["9M", "9L24", "8M", "8L24", "7T", "7L14", "6T", "6L14", "5T", "5L14", "4T", "4L28"], irontail: ["8M", "7T", "6T", "5T", "4M"], knockoff: ["9M", "7T", "6T", "5T", "4T"], laserfocus: ["7T"], @@ -29874,10 +29865,10 @@ export const Learnsets: {[k: string]: LearnsetData} = { lowsweep: ["9M", "8M", "7M", "6M", "5M"], megakick: ["8M"], megapunch: ["8M"], - metalclaw: ["9M", "9L18", "8L18", "7L22", "6L22", "5L49", "4L42"], + metalclaw: ["9M", "9L18", "8L18", "7L22", "6L22", "5L22", "4L42"], metronome: ["9M"], mudslap: ["4T"], - nastyplot: ["9M", "9L48", "8M", "8L48", "7L20", "6L20", "5L24", "4L24"], + nastyplot: ["9M", "9L48", "8M", "8L48", "7L20", "6L20", "5L20", "4L24"], naturalgift: ["4M"], nightslash: ["9L60", "8L60", "7L35", "6L35", "6S1", "5L35", "4L35", "4S0"], payback: ["8M", "7M", "6M", "5M", "4M"], @@ -29886,7 +29877,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { protect: ["9M", "8M", "7M", "6M", "5M", "4M"], psychocut: ["8M"], psychup: ["7M", "6M", "5M", "4M"], - punishment: ["7L44", "6L44"], + punishment: ["7L44", "6L44", "5L44"], quickattack: ["9L1", "8L1", "7L1", "6L1", "5L1", "4L1"], raindance: ["9M", "8M", "7M", "6M", "5M", "4M"], reflect: ["8M", "7M", "6M", "5M"], @@ -30311,29 +30302,23 @@ export const Learnsets: {[k: string]: LearnsetData} = { ursalunabloodmoon: { learnset: { avalanche: ["9M"], - bellydrum: ["9E"], bloodmoon: ["9L70", "9S0"], bodypress: ["9M"], bodyslam: ["9M"], brickbreak: ["9M"], bulldoze: ["9M"], calmmind: ["9M", "9S0"], - closecombat: ["9E"], - counter: ["9E"], - crosschop: ["9E"], - crunch: ["9M", "9E"], + crunch: ["9M"], dig: ["9M"], - doubleedge: ["9M", "9E"], + doubleedge: ["9M"], earthpower: ["9M", "9L48", "9S0"], earthquake: ["9M"], endure: ["9M"], facade: ["9M"], - faketears: ["9E"], firepunch: ["9M"], fling: ["9M"], focusblast: ["9M"], focuspunch: ["9M"], - furycutter: ["9E"], furyswipes: ["9L8"], gigaimpact: ["9M"], gunkshot: ["9M"], @@ -30350,11 +30335,10 @@ export const Learnsets: {[k: string]: LearnsetData} = { leer: ["9L1"], lick: ["9L1"], lowkick: ["9M"], - metalclaw: ["9M", "9E"], + metalclaw: ["9M"], moonblast: ["9L56"], moonlight: ["9L1"], mudshot: ["9M"], - nightslash: ["9E"], payback: ["9L13"], playnice: ["9L25"], protect: ["9M"], @@ -30366,7 +30350,6 @@ export const Learnsets: {[k: string]: LearnsetData} = { scaryface: ["9M", "9L35"], scratch: ["9L1"], seedbomb: ["9M"], - seismictoss: ["9E"], shadowclaw: ["9M"], slash: ["9L22", "9S0"], sleeptalk: ["9M"], @@ -30387,7 +30370,6 @@ export const Learnsets: {[k: string]: LearnsetData} = { trailblaze: ["9M"], uproar: ["9M"], vacuumwave: ["9M"], - yawn: ["9E"], }, eventData: [ {generation: 9, level: 70, nature: "Hardy", perfectIVs: 3, moves: ["bloodmoon", "earthpower", "slash", "calmmind"]}, @@ -30576,7 +30558,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { }, swinub: { learnset: { - amnesia: ["9M", "9L35", "8M", "8L35", "7L48", "7V", "6L48", "5L49", "4L49", "3L55"], + amnesia: ["9M", "9L35", "8M", "8L35", "7L48", "7V", "6L48", "5L48", "4L49", "3L55"], ancientpower: ["9E", "8E", "7E", "7V", "6E", "5E", "5D", "4T", "4E", "3E", "3S0"], attract: ["8M", "7M", "7V", "6M", "5M", "4M", "3M"], avalanche: ["9M", "8M", "7E", "6E", "5E"], @@ -30596,7 +30578,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { earthpower: ["9M", "8M", "7T", "6T", "5T", "4T"], earthquake: ["9M", "9L45", "8M", "8L45", "7M", "7L37", "7V", "6M", "6L37", "5M", "5L37", "4M", "4L37", "3M"], endeavor: ["9M", "7T", "6T", "5T", "4T"], - endure: ["9M", "9L25", "8M", "8L25", "7L14", "7V", "6L14", "5L16", "4M", "4L16", "3T", "3L19"], + endure: ["9M", "9L25", "8M", "8L25", "7L14", "7V", "6L14", "5L14", "4M", "4L16", "3T", "3L19"], facade: ["9M", "8M", "7M", "6M", "5M", "4M", "3M"], fissure: ["9E", "8E", "7E", "6E", "5E", "4E"], flail: ["9L10", "8L10", "7L40", "6L40", "5L40"], @@ -30609,16 +30591,16 @@ export const Learnsets: {[k: string]: LearnsetData} = { highhorsepower: ["9M"], icebeam: ["9M", "8M", "7M", "6M", "5M", "4M", "3M"], icefang: ["9M"], - iceshard: ["9L15", "8L15", "7L24", "6L24", "5L28", "4L28"], + iceshard: ["9L15", "8L15", "7L24", "6L24", "5L24", "4L28"], iciclecrash: ["9E", "8E", "7E", "6E", "5E"], iciclespear: ["9M", "8M", "7E", "6E", "5E", "5D", "4E", "3E"], - icywind: ["9M", "9L30", "8M", "8L30", "7T", "7L21", "7V", "6T", "6L21", "5T", "5L25", "4T", "4L25", "3T"], + icywind: ["9M", "9L30", "8M", "8L30", "7T", "7L21", "7V", "6T", "6L21", "5T", "5L21", "4T", "4L25", "3T"], lightscreen: ["8M", "7M", "6M", "5M", "4M", "3M"], mimic: ["3T"], - mist: ["9L20", "8L20", "7L35", "7V", "6L35", "5L40", "4L40", "3L37", "3S0"], - mudbomb: ["7L18", "6L18", "5L20", "4L20"], + mist: ["9L20", "8L20", "7L35", "7V", "6L35", "5L35", "4L40", "3L37", "3S0"], + mudbomb: ["7L18", "6L18", "5L18", "4L20"], mudshot: ["9M", "8M", "7E", "6E", "5E", "4E", "3E", "3S0"], - mudslap: ["9M", "9L1", "8L1", "7L11", "7V", "6L11", "5L13", "4T", "4L13", "3T"], + mudslap: ["9M", "9L1", "8L1", "7L11", "7V", "6L11", "5L11", "4T", "4L13", "3T"], mudsport: ["7L5", "6L5", "5L4", "4L4"], naturalgift: ["4M"], odorsleuth: ["7L1", "6L1", "5L1", "5D", "4L1", "3L1"], @@ -30650,7 +30632,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { superpower: ["8M", "7T", "6T", "5T", "4T"], swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], tackle: ["9L1", "8L1", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], - takedown: ["9M", "9L40", "8L40", "7L28", "7E", "7V", "6L28", "6E", "5L32", "5E", "4L32", "4E", "3L28", "3E"], + takedown: ["9M", "9L40", "8L40", "7L28", "7E", "7V", "6L28", "6E", "5L28", "5E", "4L32", "4E", "3L28", "3E"], terablast: ["9M"], toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], trailblaze: ["9M"], @@ -30661,11 +30643,11 @@ export const Learnsets: {[k: string]: LearnsetData} = { }, piloswine: { learnset: { - amnesia: ["9M", "9L37", "8M", "8L37", "7L58", "7V", "6L58", "5L65", "4L65", "3L70"], + amnesia: ["9M", "9L37", "8M", "8L37", "7L58", "7V", "6L58", "5L58", "4L65", "3L70"], ancientpower: ["9L1", "8L1", "7L1", "6L1", "5L1", "4T", "4L1"], attract: ["8M", "7M", "7V", "6M", "5M", "4M", "3M"], avalanche: ["9M", "8M", "4M"], - blizzard: ["9M", "9L58", "8M", "8L58", "7M", "7L52", "7V", "6M", "6L52", "5M", "5L56", "4M", "4L56", "3M", "3L56"], + blizzard: ["9M", "9L58", "8M", "8L58", "7M", "7L52", "7V", "6M", "6L52", "5M", "5L52", "4M", "4L56", "3M", "3L56"], bodyslam: ["9M", "8M", "3T"], bulldoze: ["9M", "8M", "7M", "6M", "5M"], captivate: ["4M"], @@ -30680,7 +30662,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { earthpower: ["9M", "8M", "7T", "6T", "5T", "4T"], earthquake: ["9M", "9L51", "8M", "8L51", "7M", "7L46", "7V", "6M", "6L46", "5M", "5L40", "4M", "4L40", "3M"], endeavor: ["9M", "7T", "6T", "5T", "4T"], - endure: ["9M", "9L25", "8M", "8L25", "7L14", "7V", "6L14", "5L16", "4M", "4L16", "3T", "3L1"], + endure: ["9M", "9L25", "8M", "8L25", "7L14", "7V", "6L14", "5L14", "4M", "4L16", "3T", "3L1"], facade: ["9M", "8M", "7M", "6M", "5M", "4M", "3M"], flail: ["9L1", "8L1"], frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], @@ -30694,16 +30676,16 @@ export const Learnsets: {[k: string]: LearnsetData} = { hornattack: ["3L1"], hyperbeam: ["9M", "8M", "7M", "7V", "6M", "5M", "4M", "3M"], icebeam: ["9M", "8M", "7M", "6M", "5M", "4M", "3M"], - icefang: ["9M", "9L0", "8M", "8L0", "7L24", "6L24", "5L28", "4L28"], + icefang: ["9M", "9L0", "8M", "8L0", "7L24", "6L24", "5L24", "4L28"], iceshard: ["9L15", "8L15"], iciclespear: ["9M", "8M"], - icywind: ["9M", "9L30", "8M", "8L30", "7T", "7L21", "7V", "6T", "6L21", "5T", "5L25", "4T", "4L25", "3T"], + icywind: ["9M", "9L30", "8M", "8L30", "7T", "7L21", "7V", "6T", "6L21", "5T", "5L21", "4T", "4L25", "3T"], lightscreen: ["8M", "7M", "6M", "5M", "4M", "3M"], mimic: ["3T"], - mist: ["9L20", "8L20", "7L37", "7V", "6L37", "5L48", "4L48", "3L42"], - mudbomb: ["7L18", "6L18", "5L20", "4L20"], + mist: ["9L20", "8L20", "7L37", "7V", "6L37", "5L37", "4L48", "3L42"], + mudbomb: ["7L18", "6L18", "5L18", "4L20"], mudshot: ["9M", "8M"], - mudslap: ["9M", "9L1", "8L1", "7L11", "7V", "6L11", "5L13", "4T", "4L13", "3T"], + mudslap: ["9M", "9L1", "8L1", "7L11", "7V", "6L11", "5L11", "4T", "4L13", "3T"], mudsport: ["7L1", "6L1", "5L1", "4L1"], naturalgift: ["4M"], odorsleuth: ["7L1", "6L1", "5L1", "4L1", "3L1"], @@ -30736,7 +30718,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { superpower: ["8M", "7T", "6T", "5T", "4T"], swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], tackle: ["9L1", "8L1"], - takedown: ["9M", "9L44", "8L44", "7L28", "7V", "6L28", "5L32", "4L32", "3L28"], + takedown: ["9M", "9L44", "8L44", "7L28", "7V", "6L28", "5L28", "4L32", "3L28"], terablast: ["9M"], thrash: ["9L65", "8L65", "7L41", "6L41", "5L41"], throatchop: ["9M"], @@ -30753,7 +30735,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { ancientpower: ["9L1", "8L1", "7L1", "6L1", "5L1", "4T", "4L1"], attract: ["8M", "7M", "6M", "5M", "4M"], avalanche: ["9M", "8M", "4M"], - blizzard: ["9M", "9L58", "8M", "8L58", "7M", "7L52", "6M", "6L52", "5M", "5L56", "4M", "4L56"], + blizzard: ["9M", "9L58", "8M", "8L58", "7M", "7L52", "6M", "6L52", "5M", "5L52", "4M", "4L56"], block: ["7T", "6T", "5T", "4T"], bodypress: ["9M", "8M"], bodyslam: ["9M", "8M"], @@ -30769,14 +30751,14 @@ export const Learnsets: {[k: string]: LearnsetData} = { earthpower: ["9M", "8M", "7T", "6T", "5T", "4T"], earthquake: ["9M", "9L51", "8M", "8L51", "7M", "7L46", "6M", "6L46", "6S1", "5M", "5L40", "4M", "4L40"], endeavor: ["9M", "7T", "6T", "5T", "4T"], - endure: ["9M", "9L25", "8M", "8L25", "7L14", "6L14", "5L16", "4M", "4L16"], + endure: ["9M", "9L25", "8M", "8L25", "7L14", "6L14", "5L14", "4M", "4L16"], facade: ["9M", "8M", "7M", "6M", "5M", "4M"], flail: ["9L1", "8L1"], frustration: ["7M", "6M", "5M", "4M"], furyattack: ["7L1"], furycutter: ["4T"], gigaimpact: ["9M", "8M", "7M", "6M", "5M", "4M"], - hail: ["8M", "7M", "7L21", "6M", "6L21", "5M", "5L25", "5S0", "4M", "4L25"], + hail: ["8M", "7M", "7L21", "6M", "6L21", "5M", "5L21", "5S0", "4M", "4L25"], hardpress: ["9M"], haze: ["9M"], headbutt: ["4T"], @@ -30785,7 +30767,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { highhorsepower: ["9M", "8M"], hyperbeam: ["9M", "8M", "7M", "6M", "5M", "4M"], icebeam: ["9M", "8M", "7M", "6M", "5M", "4M"], - icefang: ["9M", "9L1", "8M", "8L1", "7L24", "6L24", "5L28", "5S0", "4L28"], + icefang: ["9M", "9L1", "8M", "8L1", "7L24", "6L24", "5L24", "5S0", "4L28"], iceshard: ["9L15", "8L15"], iciclecrash: ["6S1"], iciclespear: ["9M", "8M", "6S1"], @@ -30793,10 +30775,10 @@ export const Learnsets: {[k: string]: LearnsetData} = { ironhead: ["9M", "8M", "7T", "6T", "5T", "4T"], knockoff: ["9M", "7T", "6T", "5T", "4T"], lightscreen: ["8M", "7M", "6M", "5M", "4M"], - mist: ["9L20", "8L20", "7L37", "6L37", "5L48", "4L48"], - mudbomb: ["7L18", "6L18", "5L20", "4L20"], + mist: ["9L20", "8L20", "7L37", "6L37", "5L37", "4L48"], + mudbomb: ["7L18", "6L18", "5L18", "4L20"], mudshot: ["9M", "8M"], - mudslap: ["9M", "9L1", "8L1", "7L11", "6L11", "5L13", "4T", "4L13"], + mudslap: ["9M", "9L1", "8L1", "7L11", "6L11", "5L11", "4T", "4L13"], mudsport: ["7L1", "6L1", "5L1", "4L1"], naturalgift: ["4M"], odorsleuth: ["7L1", "6L1", "5L1", "4L1"], @@ -30817,7 +30799,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { round: ["8M", "7M", "6M", "5M"], sandstorm: ["9M", "8M", "7M", "6M", "5M", "4M"], sandtomb: ["9M", "8M"], - scaryface: ["9M", "8M", "7L1", "6L1", "5L65", "4L65"], + scaryface: ["9M", "8M", "7L1", "6L1", "5L58", "4L65"], secretpower: ["6M", "4M"], sleeptalk: ["9M", "8M", "7M", "6M", "5T", "4M"], smackdown: ["9M"], @@ -30831,7 +30813,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { superpower: ["8M", "7T", "6T", "5T", "4T"], swagger: ["7M", "6M", "5M", "4M"], tackle: ["9L1", "8L1"], - takedown: ["9M", "9L44", "8L44", "7L28", "6L28", "5L32", "5S0", "4L32"], + takedown: ["9M", "9L44", "8L44", "7L28", "6L28", "5L28", "5S0", "4L32"], terablast: ["9M"], thrash: ["9L65", "8L65", "7L41", "6L41", "5L41"], throatchop: ["9M"], @@ -30846,7 +30828,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { corsola: { learnset: { amnesia: ["8M", "7E", "7V", "6E", "5E", "4E", "3E"], - ancientpower: ["8L20", "7L17", "7V", "6L17", "5L32", "4T", "4L32", "3L45"], + ancientpower: ["8L20", "7L17", "7V", "6L17", "5L20", "4T", "4L32", "3L45"], aquaring: ["8L10", "7L38", "7E", "6L38", "6E", "5L37", "5E", "4L37", "4E"], attract: ["8M", "7M", "7V", "6M", "5M", "4M", "3M"], barrier: ["7E", "6E", "5E", "4E", "3E"], @@ -30855,7 +30837,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { bodyslam: ["8M", "3T"], brine: ["8M", "7L27", "6L27", "4M"], bubble: ["7L4", "7V", "6L4", "5L8", "5D", "4L8", "3L12"], - bubblebeam: ["8L25", "7L10", "7V", "6L10", "5L25", "4L25", "3L23"], + bubblebeam: ["8L25", "7L10", "7V", "6L10", "5L17", "4L25", "3L23"], bulldoze: ["8M", "7M", "6M", "5M"], calmmind: ["8M", "7M", "6M", "5M", "4M", "3M"], camouflage: ["7E", "6E"], @@ -30867,7 +30849,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { dig: ["8M", "6M", "5M", "4M", "3M"], doubleedge: ["3T"], doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], - earthpower: ["8M", "8L45", "7T", "7L47", "6T", "6L47", "5T", "5L53", "4T", "4L53"], + earthpower: ["8M", "8L45", "7T", "7L47", "6T", "6L47", "5T", "5L47", "4T", "4L53"], earthquake: ["8M", "7M", "7V", "6M", "5M", "4M", "3M"], endeavor: ["7T", "6T", "5T", "4T"], endure: ["8M", "8L15", "7L35", "7V", "6L35", "5L35", "4M", "3T"], @@ -30889,23 +30871,23 @@ export const Learnsets: {[k: string]: LearnsetData} = { lifedew: ["8L35"], lightscreen: ["8M", "7M", "6M", "5M", "4M", "3M"], liquidation: ["8M", "7T", "7E"], - luckychant: ["7L23", "6L23", "5L28", "4L28"], + luckychant: ["7L23", "6L23", "5L23", "4L28"], magiccoat: ["7T", "6T", "5T", "4T"], meteorbeam: ["8T"], mimic: ["3T"], - mirrorcoat: ["8L55", "7L45", "7V", "6L45", "5L48", "4L48", "3L39"], + mirrorcoat: ["8L55", "7L45", "7V", "6L45", "5L45", "4L48", "3L39"], mist: ["8E", "7E", "7V", "6E", "5E", "4E", "3E"], mudslap: ["7V", "4T", "3T"], mudsport: ["3S0"], naturalgift: ["4M"], naturepower: ["8E", "7M", "7E", "6M", "6E", "5E", "4E"], - powergem: ["8M", "8L40", "7L41", "7S1", "6L41", "5L44", "4L44"], + powergem: ["8M", "8L40", "7L41", "7S1", "6L41", "5L41", "4L44"], protect: ["8M", "7M", "7V", "6M", "5M", "4M", "3M"], psychic: ["8M", "7M", "7V", "6M", "5M", "4M", "3M"], raindance: ["8M", "7M", "7V", "6M", "5M", "4M", "3M"], - recover: ["8L50", "7L8", "7V", "6L8", "5L13", "4L13", "3L17"], + recover: ["8L50", "7L8", "7V", "6L8", "5L10", "4L13", "3L17"], reflect: ["8M", "7M", "6M", "5M", "4M", "3M"], - refresh: ["7L13", "6L13", "5L16", "4L16", "3L17"], + refresh: ["7L13", "6L13", "5L13", "4L16", "3L17"], rest: ["8M", "7M", "7V", "6M", "5M", "4M", "3M"], return: ["7M", "7V", "6M", "5M", "4M", "3M"], rockblast: ["8M", "7L31", "6L31", "5L20", "4L20", "3L34"], @@ -30924,7 +30906,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { shadowball: ["8M", "7M", "6M", "5M", "4M", "3M"], sleeptalk: ["8M", "7M", "7V", "6M", "5T", "4M", "3T"], snore: ["8M", "7T", "7V", "6T", "5T", "4T", "3T"], - spikecannon: ["7L20", "7V", "6L20", "5L40", "4L40", "3L28"], + spikecannon: ["7L20", "7V", "6L20", "5L27", "4L40", "3L28"], stealthrock: ["8M", "7T", "6T", "5T", "5D", "4M"], stompingtantrum: ["8M", "7T"], stoneedge: ["8M", "7M", "6M", "5M", "4M"], @@ -31102,7 +31084,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { blizzard: ["8M", "7M", "6M", "5M", "4M", "3M"], bounce: ["8M", "7T", "6T", "5T", "4T"], brine: ["8M", "5D", "4M"], - bubblebeam: ["8L20", "7L18", "7V", "6L18", "5L19", "4L19", "3L22"], + bubblebeam: ["8L20", "7L18", "7V", "6L18", "5L18", "4L19", "3L22"], bulletseed: ["8M", "8L28", "7L38", "6L38", "5L27", "4M", "4L27"], captivate: ["4M"], chargebeam: ["7M", "6M", "5M", "4M"], @@ -31118,7 +31100,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { fireblast: ["8M", "7M", "6M", "5M", "4M", "3M"], flail: ["8E", "7E", "6E", "5E", "4E"], flamethrower: ["8M", "7M", "6M", "5M", "4M", "3M"], - focusenergy: ["8M", "8L8", "7L22", "7V", "6L22", "5L23", "4L23", "3L33"], + focusenergy: ["8M", "8L8", "7L22", "7V", "6L22", "5L22", "4L23", "3L33"], frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], gunkshot: ["8M", "7T", "6T", "5T", "4T"], haze: ["8E", "7E", "7V", "6E", "5E", "4E", "3E"], @@ -31126,7 +31108,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], hydropump: ["8M", "8L36", "7L42", "6L42", "5L42"], hyperbeam: ["8M", "8L44", "7M", "7L46", "7V", "6M", "6L46", "5M", "5L45", "4M", "4L45", "3M", "3L55"], - icebeam: ["8M", "8L32", "7M", "7L34", "7V", "6M", "6L34", "5M", "5L40", "4M", "4L40", "3M", "3L44"], + icebeam: ["8M", "8L32", "7M", "7L34", "7V", "6M", "6L34", "5M", "5L34", "4M", "4L40", "3M", "3L44"], icywind: ["8M", "7T", "6T", "5T", "4T"], incinerate: ["6M", "5M"], lockon: ["8L24", "7L6", "7V", "6L6", "5L6", "5D", "4L6", "3L11"], @@ -31147,7 +31129,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { screech: ["8M", "7E", "7V", "6E", "5E", "4E", "3E"], secretpower: ["6M", "4M", "3M"], seedbomb: ["8M", "7T", "6T", "5T", "4T"], - signalbeam: ["7T", "7L30", "6T", "6L30", "5T", "5L36", "4T", "4L36"], + signalbeam: ["7T", "7L30", "6T", "6L30", "5T", "5L30", "4T", "4L36"], sleeptalk: ["8M", "7M", "7V", "6M", "5T", "4M", "3T"], smackdown: ["7M", "6M", "5M"], snore: ["8M", "7T", "7E", "7V", "6T", "6E", "5T", "5E", "4T", "4E", "3T"], @@ -31164,7 +31146,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], waterfall: ["8M", "7M", "6M", "5M", "4M", "3M"], watergun: ["8L1", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], - waterpulse: ["8L4", "7T", "7L26", "7E", "6T", "6L26", "6E", "5L32", "5E", "4M", "4L32", "3M"], + waterpulse: ["8L4", "7T", "7L26", "7E", "6T", "6L26", "6E", "5L26", "5E", "4M", "4L32", "3M"], waterspout: ["8E", "7E", "6E", "5E", "4E"], whirlpool: ["8M", "7V", "4M"], }, @@ -31178,7 +31160,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { blizzard: ["8M", "7M", "6M", "5M", "4M", "3M"], bounce: ["8M", "7T", "6T", "5T", "4T"], brine: ["8M", "4M"], - bubblebeam: ["8L20", "7L18", "7V", "6L18", "5L19", "4L19", "3L22"], + bubblebeam: ["8L20", "7L18", "7V", "6L18", "5L18", "4L19", "3L22"], bulletseed: ["8M", "8L30", "7L46", "6L46", "5L29", "4M", "4L29", "3M"], captivate: ["4M"], chargebeam: ["7M", "6M", "5M", "4M"], @@ -31195,7 +31177,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { fireblast: ["8M", "7M", "6M", "5M", "4M", "3M"], flamethrower: ["8M", "7M", "6M", "5M", "4M", "3M"], flashcannon: ["8M", "7M", "6M", "5M", "4M"], - focusenergy: ["8M", "8L1", "7L22", "7V", "6L22", "5L23", "4L23", "3L38"], + focusenergy: ["8M", "8L1", "7L22", "7V", "6L22", "5L22", "4L23", "3L38"], frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], gigaimpact: ["8M", "7M", "6M", "5M", "4M"], gunkshot: ["8M", "8L1", "7T", "7L1", "6T", "6L1", "5T", "5L1", "4T", "4L1"], @@ -31203,7 +31185,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], hydropump: ["8M", "8L42", "7L52", "6L52", "5L52"], hyperbeam: ["8M", "8L54", "7M", "7L58", "7V", "6M", "6L58", "5M", "5L55", "4M", "4L55", "4S0", "3M", "3L70"], - icebeam: ["8M", "8L36", "7M", "7L40", "7V", "6M", "6L40", "5M", "5L48", "4M", "4L48", "4S0", "3M", "3L54"], + icebeam: ["8M", "8L36", "7M", "7L40", "7V", "6M", "6L40", "5M", "5L40", "4M", "4L48", "4S0", "3M", "3L54"], icywind: ["8M", "7T", "6T", "5T", "4T"], incinerate: ["6M", "5M"], liquidation: ["8M"], @@ -31227,7 +31209,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { secretpower: ["6M", "4M", "3M"], seedbomb: ["8M", "7T", "6T", "5T", "4T"], seismictoss: ["3T"], - signalbeam: ["7T", "7L34", "6T", "6L34", "5T", "5L42", "4T", "4L42", "4S0"], + signalbeam: ["7T", "7L34", "6T", "6L34", "5T", "5L34", "4T", "4L42", "4S0"], skittersmack: ["8T"], sleeptalk: ["8M", "7M", "7V", "6M", "5T", "4M", "3T"], sludgebomb: ["8M", "7M", "6M", "5M", "4M", "3M"], @@ -31249,7 +31231,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { waterpulse: ["8L1", "7T", "6T", "4M", "3M"], whirlpool: ["8M", "7V", "4M"], wrap: ["8L1"], - wringout: ["7L28", "6L28", "5L36", "4L36"], + wringout: ["7L28", "6L28", "5L28", "4L36"], }, eventData: [ {generation: 4, level: 50, gender: "F", nature: "Serious", abilities: ["suctioncups"], moves: ["octazooka", "icebeam", "signalbeam", "hyperbeam"], pokeball: "cherishball"}, @@ -31377,16 +31359,16 @@ export const Learnsets: {[k: string]: LearnsetData} = { aircutter: ["4T"], airslash: ["8M", "8L32", "7L36", "6L36", "5L36"], amnesia: ["8M", "7E", "6E", "5E"], - aquaring: ["8L36", "7L39", "6L39", "5L46", "4L46"], + aquaring: ["8L36", "7L39", "6L39", "5L39", "4L46"], attract: ["8M", "7M", "6M", "5M", "4M"], blizzard: ["8M", "7M", "6M", "5M", "4M"], bounce: ["8M", "8L40", "7T", "7L46", "6T", "6L46", "5T", "5L40", "4T", "4L40"], bubble: ["7L1", "6L1", "5L1", "4L1"], - bubblebeam: ["8L24", "7L7", "6L7", "5L10", "4L10"], + bubblebeam: ["8L24", "7L7", "6L7", "5L7", "4L10"], bulldoze: ["8M", "7M", "6M", "5M"], captivate: ["4M"], confide: ["7M", "6M"], - confuseray: ["8E", "7L11", "6L11", "5L37", "4L37"], + confuseray: ["8E", "7L11", "6L11", "5L11", "4L37"], dive: ["8M", "6M", "5M", "4T"], doubleteam: ["7M", "6M", "5M", "4M"], earthquake: ["8M", "7M", "6M", "5M", "4M"], @@ -31419,22 +31401,22 @@ export const Learnsets: {[k: string]: LearnsetData} = { snore: ["8M", "7T", "6T", "5T", "4T"], splash: ["8E", "7E", "6E", "5E", "4E"], substitute: ["8M", "7M", "6M", "5M", "4M"], - supersonic: ["8L4", "7L3", "6L3", "5L4", "4L4"], + supersonic: ["8L4", "7L3", "6L3", "5L3", "4L4"], surf: ["8M", "7M", "6M", "5M", "4M"], swagger: ["7M", "6M", "5M", "4M"], swift: ["8M", "4T"], tackle: ["8L1", "7L1", "6L1", "5L1", "4L1"], tailwind: ["8E", "7T", "7E", "6E"], - takedown: ["8L44", "7L27", "6L27", "5L31", "4L31"], + takedown: ["8L44", "7L27", "6L27", "5L27", "4L31"], toxic: ["7M", "6M", "5M", "4M"], twister: ["8E", "7E", "6E", "5E", "4E"], waterfall: ["8M", "7M", "6M", "5M", "4M"], watergun: ["8L1"], - waterpulse: ["8L12", "7T", "7L19", "6T", "6L19", "5L28", "4M", "4L28"], + waterpulse: ["8L12", "7T", "7L19", "6T", "6L19", "5L19", "4M", "4L28"], watersport: ["7E", "6E", "5E", "4E"], whirlpool: ["8M", "4M"], wideguard: ["8L16", "7L23", "7E", "6L23", "6E", "5L23", "5E"], - wingattack: ["8L8", "7L14", "6L14", "5L22", "4L22"], + wingattack: ["8L8", "7L14", "6L14", "5L14", "4L22"], }, }, mantine: { @@ -31445,7 +31427,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { aircutter: ["5D", "4T"], airslash: ["8M", "8L32", "7L36", "6L36", "5L36"], amnesia: ["8M", "7E", "6E", "5E"], - aquaring: ["8L36", "7L39", "6L39", "5L46", "4L46"], + aquaring: ["8L36", "7L39", "6L39", "5L39", "4L46"], aquatail: ["7T", "6T", "5T", "4T"], assurance: ["8M"], attract: ["8M", "7M", "7V", "6M", "5M", "4M", "3M"], @@ -31460,7 +31442,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { bulletseed: ["8M", "8L1", "7L1", "6L1", "5L1", "4M", "4L1"], captivate: ["4M"], confide: ["7M", "6M"], - confuseray: ["8E", "7L11", "7V", "6L11", "5L37", "4L37", "3L50"], + confuseray: ["8E", "7L11", "7V", "6L11", "5L11", "4L37", "3L50"], curse: ["7V"], defog: ["7T", "4M"], dive: ["8M", "6M", "5M", "4T", "3M"], @@ -31516,16 +31498,16 @@ export const Learnsets: {[k: string]: LearnsetData} = { swift: ["8M", "7V", "4T", "3T"], tackle: ["8L1", "7L1", "7V", "6L1", "5L1", "4L1", "3L1", "3S0"], tailwind: ["8E", "7T", "6T", "5T", "4T"], - takedown: ["8L44", "7L27", "7V", "6L27", "5L31", "4L31", "3L22"], + takedown: ["8L44", "7L27", "7V", "6L27", "5L27", "4L31", "3L22"], toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], twister: ["8E", "7E", "7V", "6E", "5E", "4E", "3E"], waterfall: ["8M", "7M", "7V", "6M", "5M", "4M", "3M"], watergun: ["8L1"], - waterpulse: ["8L12", "7T", "7L19", "6T", "6L19", "5L28", "4M", "4L28", "3M", "3L43"], + waterpulse: ["8L12", "7T", "7L19", "6T", "6L19", "5L19", "4M", "4L28", "3M", "3L43"], watersport: ["7E", "6E", "5E", "4E"], whirlpool: ["8M", "7V", "4M"], wideguard: ["8L16", "7L23", "7E", "6L23", "6E", "5L23", "5E"], - wingattack: ["8L1", "7L14", "7V", "6L14", "5L22", "4L22", "3L36"], + wingattack: ["8L1", "7L14", "7V", "6L14", "5L14", "4L22", "3L36"], }, eventData: [ {generation: 3, level: 10, gender: "M", moves: ["tackle", "bubble", "supersonic"], pokeball: "pokeball"}, @@ -32336,7 +32318,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { cut: ["7V", "6M", "5M", "4M", "3M"], detect: ["7V"], dig: ["8M", "7V", "6M", "5M", "4M", "3M"], - discharge: ["9L54", "8L54", "7L1", "7S5", "7S6", "6L1", "5L57", "4L57"], + discharge: ["9L54", "9S9", "8L54", "7L1", "7S5", "7S6", "6L1", "5L57", "4L57"], doubleedge: ["9M", "3T"], doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], eerieimpulse: ["9M", "8M"], @@ -32344,7 +32326,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { electroball: ["9M"], electroweb: ["9M"], endure: ["9M", "8M", "7V", "4M", "3T"], - extrasensory: ["9L48", "8L48", "7L1", "7S7", "6L1", "5L64", "4L64"], + extrasensory: ["9L48", "9S9", "8L48", "7L1", "7S7", "6L1", "5L64", "4L64"], extremespeed: ["9L1", "8L1", "8S8", "4S3"], facade: ["9M", "8M", "7M", "6M", "5M", "4M", "3M"], flash: ["7V", "6M", "5M", "4M", "3M"], @@ -32368,8 +32350,8 @@ export const Learnsets: {[k: string]: LearnsetData} = { psychup: ["7M", "7V", "6M", "5M", "4M", "3T"], quash: ["7M", "6M", "5M"], quickattack: ["9L1", "8L1", "7L22", "7V", "6L22", "5L22", "4L22", "4S2", "3L31", "3S0", "3S1"], - raindance: ["9M", "9L66", "8M", "8L66", "7M", "7L71", "7V", "6M", "6L71", "5M", "5L71", "4M", "4L71", "3M"], - reflect: ["9M", "9L60", "8M", "8L60", "7M", "7L36", "7V", "7S5", "7S6", "6M", "6L36", "6S4", "5M", "5L36", "4M", "4L36", "4S2", "3M", "3L51", "3S1"], + raindance: ["9M", "9L66", "9S9", "8M", "8L66", "7M", "7L71", "7V", "6M", "6L71", "5M", "5L71", "4M", "4L71", "3M"], + reflect: ["9M", "9L60", "9S9", "8M", "8L60", "7M", "7L36", "7V", "7S5", "7S6", "6M", "6L36", "6S4", "5M", "5L36", "4M", "4L36", "4S2", "3M", "3L51", "3S1"], rest: ["9M", "8M", "7M", "7V", "6M", "5M", "4M", "3M"], return: ["7M", "7V", "6M", "5M", "4M", "3M"], risingvoltage: ["8T"], @@ -32419,6 +32401,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { {generation: 7, level: 60, moves: ["reflect", "crunch", "thunderfang", "discharge"], pokeball: "cherishball"}, {generation: 7, level: 100, moves: ["thunderbolt", "voltswitch", "extrasensory", "calmmind"], pokeball: "cherishball"}, {generation: 8, level: 70, shiny: 1, moves: ["thunderbolt", "howl", "extremespeed", "weatherball"]}, + {generation: 9, level: 70, moves: ["raindance", "reflect", "discharge", "extrasensory"]}, ], encounters: [ {generation: 2, level: 40}, @@ -32445,7 +32428,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { ember: ["9L1", "8L1", "7L8", "7V", "6L8", "5L8", "4L8", "3L11", "3S0"], endure: ["9M", "8M", "7V", "4M", "3T"], eruption: ["9L78", "8L78", "7L1", "6L1", "5L85", "4L85"], - extrasensory: ["9L48", "8L48", "7L1", "6L1", "5L64", "4L64"], + extrasensory: ["9L48", "9S9", "8L48", "7L1", "6L1", "5L64", "4L64"], extremespeed: ["9L1", "8L1", "8S8", "4S3"], facade: ["9M", "8M", "7M", "6M", "5M", "4M", "3M"], fireblast: ["9M", "9L72", "8M", "8L72", "7M", "7L71", "7V", "6M", "6L71", "5M", "5L71", "4M", "4L71", "3M", "3L71"], @@ -32468,7 +32451,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { ironhead: ["9M", "8M", "7T", "7S7", "6T", "5T", "4T"], irontail: ["8M", "7T", "7V", "6T", "5T", "4M", "3M"], laserfocus: ["7T"], - lavaplume: ["9L54", "8L54", "7L1", "7S5", "7S6", "6L1", "5L57", "4L57"], + lavaplume: ["9L54", "9S9", "8L54", "7L1", "7S5", "7S6", "6L1", "5L57", "4L57"], leer: ["9L1", "8L1", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], mimic: ["3T"], mudslap: ["7V", "4T", "3T"], @@ -32502,8 +32485,8 @@ export const Learnsets: {[k: string]: LearnsetData} = { stoneedge: ["9M", "8M", "7M", "7S7", "6M", "5M", "4M"], strength: ["7V", "6M", "5M", "4M", "3M"], substitute: ["9M", "8M", "7M", "6M", "5M", "4M", "3T"], - sunnyday: ["9M", "9L66", "8M", "8L66", "7M", "7V", "6M", "5M", "4M", "3M"], - swagger: ["9L60", "8L60", "7M", "7L43", "7V", "7S5", "7S6", "6M", "6L43", "6S4", "5M", "5L43", "4M", "4L43", "3T", "3L61", "3S1"], + sunnyday: ["9M", "9L66", "9S9", "8M", "8L66", "7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["9L60", "9S9", "8L60", "7M", "7L43", "7V", "7S5", "7S6", "6M", "6L43", "6S4", "5M", "5L43", "4M", "4L43", "3T", "3L61", "3S1"], swift: ["9M", "8M", "7V", "4T", "3T"], takedown: ["9M"], terablast: ["9M"], @@ -32522,6 +32505,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { {generation: 7, level: 60, moves: ["stomp", "bite", "swagger", "lavaplume"], pokeball: "cherishball"}, {generation: 7, level: 100, moves: ["sacredfire", "stoneedge", "ironhead", "flamecharge"], pokeball: "cherishball"}, {generation: 8, level: 70, shiny: 1, moves: ["flamethrower", "scaryface", "extremespeed", "crunch"]}, + {generation: 9, level: 70, moves: ["sunnyday", "swagger", "lavaplume", "extrasensory"]}, ], encounters: [ {generation: 2, level: 40}, @@ -32554,7 +32538,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { doubleedge: ["9M", "3T"], doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], endure: ["9M", "8M", "7V", "4M", "3T"], - extrasensory: ["9L48", "8L48", "8S6", "7L64", "6L1", "5L64", "4L64"], + extrasensory: ["9L48", "9S7", "8L48", "8S6", "7L64", "6L1", "5L64", "4L64"], extremespeed: ["9L1", "8L1", "8S6", "4S3"], facade: ["9M", "8M", "7M", "6M", "5M", "4M", "3M"], frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], @@ -32575,7 +32559,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { leer: ["9L1", "8L1", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], liquidation: ["9M", "8M", "8S6"], mimic: ["3T"], - mirrorcoat: ["9L60", "8L60", "7L43", "7V", "6L43", "6S4", "5L43", "4L43", "3L61", "3S1"], + mirrorcoat: ["9L60", "9S7", "8L60", "7L43", "7V", "6L43", "6S4", "5L43", "4L43", "3L61", "3S1"], mist: ["9L1", "8L1", "7L36", "7V", "7S5", "6L36", "6S4", "5L36", "4L36", "4S2", "3L51", "3S1"], mudslap: ["7V", "4T", "3T"], naturalgift: ["4M"], @@ -32583,7 +32567,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { protect: ["9M", "8M", "7M", "7V", "6M", "5M", "4M", "3M"], psychup: ["7M", "7V", "6M", "5M", "4M", "3T"], quash: ["7M", "6M", "5M"], - raindance: ["9M", "9L66", "8M", "8L66", "7M", "7L1", "7V", "7S5", "6M", "6L15", "5M", "5L15", "4M", "4L15", "4S2", "3M", "3L21", "3S0"], + raindance: ["9M", "9L66", "9S7", "8M", "8L66", "7M", "7L1", "7V", "7S5", "6M", "6L15", "5M", "5L15", "4M", "4L15", "4S2", "3M", "3L21", "3S0"], reflect: ["8M", "7M", "6M", "5M", "4M", "3M"], rest: ["9M", "8M", "7M", "7V", "6M", "5M", "4M", "3M"], return: ["7M", "7V", "6M", "5M", "4M", "3M"], @@ -32603,7 +32587,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { snowscape: ["9M"], substitute: ["9M", "8M", "7M", "6M", "5M", "4M", "3T"], sunnyday: ["8M", "7M", "7V", "6M", "5M", "4M", "3M"], - surf: ["9M", "9L54", "8M", "8L54", "7M", "7V", "6M", "5M", "4M", "3M"], + surf: ["9M", "9L54", "9S7", "8M", "8L54", "7M", "7V", "6M", "5M", "4M", "3M"], swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], swift: ["9M", "8M", "7V", "4T", "3T"], tailwind: ["9M", "9L36", "8L36", "7T", "7L57", "6T", "6L1", "5T", "5L57", "4T", "4L57"], @@ -32625,6 +32609,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { {generation: 6, level: 50, shiny: 1, moves: ["aurorabeam", "mist", "mirrorcoat", "icefang"]}, {generation: 7, level: 60, shiny: 1, moves: ["bubblebeam", "aurorabeam", "mist", "raindance"]}, {generation: 8, level: 70, shiny: 1, moves: ["liquidation", "extrasensory", "extremespeed", "calmmind"]}, + {generation: 9, level: 70, moves: ["raindance", "mirrorcoat", "surf", "extrasensory"]}, ], encounters: [ {generation: 2, level: 40}, @@ -32959,7 +32944,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { learnset: { acrobatics: ["9M"], aerialace: ["9M", "7M", "6M", "5M", "4M", "3M"], - aeroblast: ["9L54", "8L54", "7L43", "7V", "7S7", "7S8", "7S9", "7S10", "6L43", "6S5", "6S6", "5L43", "4L43", "4S2", "4S3", "3L77"], + aeroblast: ["9L54", "9S12", "8L54", "7L43", "7V", "7S7", "7S8", "7S9", "7S10", "6L43", "6S5", "6S6", "5L43", "4L43", "4S2", "4S3", "3L77"], aircutter: ["9M", "4T"], airslash: ["9M", "8M"], ancientpower: ["9L1", "8L1", "8S11", "7L57", "7V", "7S7", "7S9", "6L57", "5L57", "4T", "4L57", "4S3", "3L88"], @@ -32990,7 +32975,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { earthquake: ["9M", "8M", "7M", "7V", "6M", "5M", "4M", "3M", "3S1"], echoedvoice: ["7M", "6M", "5M"], endure: ["9M", "8M", "7V", "4M", "3T"], - extrasensory: ["9L36", "8L36", "8S11", "7L23", "7S7", "7S9", "6L23", "5L23", "4L23", "4S2"], + extrasensory: ["9L36", "9S12", "8L36", "8S11", "7L23", "7S7", "7S9", "6L23", "5L23", "4L23", "4S2"], facade: ["9M", "8M", "7M", "6M", "5M", "4M", "3M"], featherdance: ["3S1"], flash: ["6M", "5M", "4M"], @@ -33029,8 +33014,8 @@ export const Learnsets: {[k: string]: LearnsetData} = { psychup: ["9M", "7M", "7V", "6M", "5M", "4M", "3T"], psyshock: ["9M", "8M", "7M", "6M", "5M"], punishment: ["7L50", "6L50", "6S5", "5L50", "4L50", "4S3"], - raindance: ["9M", "9L63", "8M", "8L63", "7M", "7L29", "7V", "6M", "6L29", "6S5", "5M", "5L29", "4M", "4L29", "4S2", "3M", "3L55", "3S0"], - recover: ["9L45", "8L45", "7L71", "7V", "6L71", "5L71", "4L23", "3L33", "3S0"], + raindance: ["9M", "9L63", "9S12", "8M", "8L63", "7M", "7L29", "7V", "6M", "6L29", "6S5", "5M", "5L29", "4M", "4L29", "4S2", "3M", "3L55", "3S0"], + recover: ["9L45", "9S12", "8L45", "7L71", "7V", "6L71", "5L71", "4L23", "3L33", "3S0"], reflect: ["9M", "8M", "7M", "6M", "5M", "4M", "3M"], rest: ["9M", "8M", "7M", "7V", "6M", "5M", "4M", "3M"], return: ["7M", "7V", "6M", "5M", "4M", "3M"], @@ -33090,6 +33075,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { {generation: 7, level: 60, moves: ["skillswap", "aeroblast", "extrasensory", "ancientpower"], pokeball: "cherishball"}, {generation: 7, level: 100, moves: ["aeroblast", "earthpower", "psychic", "tailwind"], pokeball: "cherishball"}, {generation: 8, level: 70, shiny: 1, moves: ["dragonpulse", "extrasensory", "whirlpool", "ancientpower"]}, + {generation: 9, level: 70, moves: ["raindance", "aeroblast", "recover", "extrasensory"]}, ], encounters: [ {generation: 2, level: 40}, @@ -33122,7 +33108,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { earthquake: ["9M", "8M", "7M", "7V", "7S9", "6M", "5M", "4M", "3M"], echoedvoice: ["7M", "6M", "5M"], endure: ["9M", "8M", "7V", "4M", "3T"], - extrasensory: ["9L36", "8L36", "8S10", "7L23", "7S7", "7S8", "6L23", "5L23", "4L23", "4S1"], + extrasensory: ["9L36", "9S11", "8L36", "8S10", "7L23", "7S7", "7S8", "6L23", "5L23", "4L23", "4S1"], facade: ["9M", "8M", "7M", "6M", "5M", "4M", "3M"], fireblast: ["9M", "9L72", "8M", "8L72", "7M", "7L37", "7V", "6M", "6L37", "6S4", "5M", "5L37", "4M", "4L29", "4S1", "3M", "3L44", "3S0"], firespin: ["9M", "8M"], @@ -33161,7 +33147,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { psychup: ["9M", "7M", "7V", "6M", "5M", "4M", "3T"], punishment: ["7L50", "6L50", "6S4", "5L50", "4L50", "4S2"], raindance: ["9M", "8M", "7M", "7V", "6M", "5M", "4M", "3M"], - recover: ["9L45", "8L45", "7L71", "7V", "7S6", "6L71", "6S5", "5L71", "4L23", "3L33", "3S0"], + recover: ["9L45", "9S11", "8L45", "7L71", "7V", "7S6", "6L71", "6S5", "5L71", "4L23", "3L33", "3S0"], reflect: ["9M", "8M", "7M", "6M", "5M", "4M", "3M"], rest: ["9M", "8M", "7M", "7V", "6M", "5M", "4M", "3M"], return: ["7M", "7V", "6M", "5M", "4M", "3M"], @@ -33169,7 +33155,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { rocksmash: ["7V", "6M", "5M", "4M", "3M"], roost: ["7M", "6M", "5T", "4M"], round: ["8M", "7M", "6M", "5M"], - sacredfire: ["9L54", "8L54", "7L43", "7V", "7S6", "7S7", "7S8", "7S9", "6L43", "6S4", "6S5", "5L43", "4L43", "4S1", "4S2", "3L77"], + sacredfire: ["9L54", "9S11", "8L54", "7L43", "7V", "7S6", "7S7", "7S8", "7S9", "6L43", "6S4", "6S5", "5L43", "4L43", "4S1", "4S2", "3L77"], safeguard: ["9L18", "8M", "8L18", "7M", "7L65", "7V", "7S6", "6M", "6L65", "5M", "5L65", "4M", "4L9", "4S2", "3M", "3L11"], sandstorm: ["9M", "8M", "7M", "7V", "6M", "5M", "4M", "3M"], scorchingsands: ["9M", "8T"], @@ -33185,7 +33171,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { steelwing: ["8M", "7M", "7V", "6M", "4M", "3M"], strength: ["7V", "6M", "5M", "4M", "3M"], substitute: ["9M", "8M", "7M", "6M", "5M", "4M", "3T"], - sunnyday: ["9M", "9L63", "8M", "8L63", "8S10", "7M", "7L29", "7V", "6M", "6L29", "6S4", "5M", "5L29", "4M", "4L29", "4S1", "3M", "3L55", "3S0"], + sunnyday: ["9M", "9L63", "9S11", "8M", "8L63", "8S10", "7M", "7L29", "7V", "6M", "6L29", "6S4", "5M", "5L29", "4M", "4L29", "4S1", "3M", "3L55", "3S0"], swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], swift: ["9M", "8M", "7V", "4T", "4L43", "3T", "3L66", "3S0"], tailwind: ["9M", "7T", "7S9", "6T", "5T", "4T"], @@ -33214,6 +33200,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { {generation: 7, level: 60, moves: ["burnup", "sacredfire", "extrasensory", "ancientpower"], pokeball: "cherishball"}, {generation: 7, level: 100, moves: ["sacredfire", "bravebird", "earthquake", "tailwind"], pokeball: "cherishball"}, {generation: 8, level: 70, shiny: 1, moves: ["flareblitz", "extrasensory", "sunnyday", "ancientpower"]}, + {generation: 9, level: 70, moves: ["sunnyday", "sacredfire", "recover", "extrasensory"]}, ], encounters: [ {generation: 2, level: 40}, @@ -35813,7 +35800,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { aerialace: ["9M", "9E", "8E", "7M", "7L29", "6M", "6L29", "5M", "5L42", "4M", "4L42", "3M"], agility: ["9M", "9L26", "8M", "8L26", "7L36", "7E", "6L36", "6E", "5L37", "5E", "4L37", "4E", "3L55", "3E"], aircutter: ["9M", "9E", "8E", "7L22", "6L22", "5L33", "4T"], - airslash: ["9M", "9L30", "8M", "8L30", "7L40", "6L40", "5L47", "4L47"], + airslash: ["9M", "9L30", "8M", "8L30", "7L40", "6L40", "5L46", "4L47"], aquaring: ["9E", "8E", "7E", "6E", "5E", "4E"], attract: ["8M", "7M", "6M", "5M", "4M", "3M"], blizzard: ["9M", "8M", "7M", "6M", "5M", "4M", "3M"], @@ -35837,26 +35824,26 @@ export const Learnsets: {[k: string]: LearnsetData} = { hail: ["8M", "7M", "6M", "5M", "4M", "3M"], helpinghand: ["9M"], hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - hurricane: ["9M", "9L45", "8M", "8L45", "7L43", "6L43", "5L50"], + hurricane: ["9M", "9L45", "8M", "8L45", "7L43", "6L43", "5L49"], hydropump: ["9M"], icebeam: ["9M", "8M", "7M", "6M", "5M", "4M", "3M"], icywind: ["9M", "8M", "7T", "6T", "5T", "4T", "3T"], knockoff: ["9M", "9E", "8E", "7T", "7E", "6T", "6E", "5T", "5E", "4T", "4E"], liquidation: ["9M", "8M", "7T"], mimic: ["3T"], - mist: ["9L35", "8L35", "7L12", "7E", "6L12", "6E", "5L16", "5E", "4L16", "4E", "3L21", "3E"], + mist: ["9L35", "8L35", "7L12", "7E", "6L12", "6E", "5L14", "5E", "4L16", "4E", "3L21", "3E"], muddywater: ["9M"], mudslap: ["4T", "3T"], naturalgift: ["4M"], ominouswind: ["4T"], pluck: ["5M", "4M"], protect: ["9M", "8M", "7M", "6M", "5M", "4M", "3M"], - pursuit: ["7L26", "6L26", "5L34", "4L34", "3L43"], - quickattack: ["9L5", "8L5", "7L19", "6L19", "5L24", "4L24", "3L31"], + pursuit: ["7L26", "6L26", "5L30", "4L34", "3L43"], + quickattack: ["9L5", "8L5", "7L19", "6L19", "5L22", "4L24", "3L31"], raindance: ["9M", "8M", "7M", "6M", "5M", "4M", "3M"], rest: ["9M", "8M", "7M", "6M", "5M", "4M", "3M"], return: ["7M", "6M", "5M", "4M", "3M"], - roost: ["9L40", "8L40", "7M", "7L33", "7E", "6M", "6L26", "6E", "5T", "5L29", "5E", "4M", "4L29"], + roost: ["9L40", "8L40", "7M", "7L33", "7E", "6M", "6L26", "6E", "5T", "5L26", "5E", "4M", "4L29"], round: ["8M", "7M", "6M", "5M"], scald: ["8M", "7M", "6M", "5M"], secretpower: ["6M", "4M", "3M"], @@ -35882,11 +35869,11 @@ export const Learnsets: {[k: string]: LearnsetData} = { uturn: ["9M", "8M", "7M", "6M", "5M", "4M"], waterfall: ["9M"], watergun: ["9L1", "8L1", "7L1", "6L1", "5L1", "5D", "4L1", "3L1"], - waterpulse: ["9M", "9L20", "8L20", "7T", "7L15", "6T", "6L15", "5L19", "4M", "4L19", "3M"], + waterpulse: ["9M", "9L20", "8L20", "7T", "7L15", "6T", "6L15", "5L17", "4M", "4L19", "3M"], watersport: ["7E", "6E", "5E", "4E", "3E"], whirlpool: ["9M"], wideguard: ["9E", "8E", "7E", "6E"], - wingattack: ["9L15", "8L15", "7L8", "6L8", "5L11", "4L11", "3L13"], + wingattack: ["9L15", "8L15", "7L8", "6L8", "5L9", "4L11", "3L13"], }, encounters: [ {generation: 3, level: 2}, @@ -35932,19 +35919,19 @@ export const Learnsets: {[k: string]: LearnsetData} = { knockoff: ["9M", "7T", "6T", "5T", "4T"], liquidation: ["9M", "8M", "7T"], mimic: ["3T"], - mist: ["9L41", "8L41", "7L12", "6L12", "5L16", "4L16", "3L21"], + mist: ["9L41", "8L41", "7L12", "6L12", "5L14", "4L16", "3L21"], muddywater: ["9M"], mudslap: ["4T", "3T"], naturalgift: ["4M"], ominouswind: ["4T"], - payback: ["8M", "7M", "7L19", "6M", "6L19", "5M", "5L24", "4M", "4L24"], + payback: ["8M", "7M", "7L19", "6M", "6L19", "5M", "5L22", "4M", "4L24"], pluck: ["5M", "4M"], protect: ["9M", "9L1", "8M", "8L1", "7M", "7L1", "6M", "6L25", "5M", "5L25", "4M", "4L25", "3M", "3L25"], quickattack: ["9L1", "8L1"], raindance: ["9M", "8M", "7M", "6M", "5M", "4M", "3M"], rest: ["9M", "8M", "7M", "6M", "5M", "4M", "3M"], return: ["7M", "6M", "5M", "4M", "3M"], - roost: ["9L48", "8L48", "7M", "7L39", "6M", "6L22", "5T", "5L31", "4M", "4L31"], + roost: ["9L48", "8L48", "7M", "7L39", "6M", "6L22", "5T", "5L28", "4M", "4L31"], round: ["8M", "7M", "6M", "5M"], scald: ["8M", "7M", "6M", "5M"], secretpower: ["6M", "4M", "3M"], @@ -35975,7 +35962,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { uturn: ["9M", "8M", "7M", "6M", "5M", "4M"], waterfall: ["9M"], watergun: ["9L1", "8L1", "7L1", "6L1", "5L1", "4L1", "3L1"], - waterpulse: ["9M", "9L20", "8L20", "7T", "7L15", "6T", "6L15", "5L19", "4M", "4L19", "3M"], + waterpulse: ["9M", "9L20", "8L20", "7T", "7L15", "6T", "6L15", "5L17", "4M", "4L19", "3M"], watersport: ["7L1", "6L1", "5L1", "4L1", "3L1"], weatherball: ["9M", "8M"], whirlpool: ["9M", "8M", "4M"], @@ -37881,7 +37868,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { learnset: { ancientpower: ["5D", "4T"], attract: ["7M", "6M", "5M", "4M", "3M"], - block: ["9L7", "7T", "7L7", "7E", "6T", "6L7", "6E", "5T", "5L19", "5E", "4T", "4L19", "4E", "3L16"], + block: ["9L7", "7T", "7L7", "7E", "6T", "6L7", "6E", "5T", "5L8", "5E", "4T", "4L19", "4E", "3L16"], bodypress: ["9M"], bodyslam: ["9M", "3T"], bulldoze: ["9M", "7M", "6M", "5M"], @@ -37890,11 +37877,11 @@ export const Learnsets: {[k: string]: LearnsetData} = { curse: ["9M"], dazzlinggleam: ["9M", "7M", "6M"], defensecurl: ["3T"], - discharge: ["9L31", "7L31", "6L31", "5L55", "4L49"], + discharge: ["9L31", "7L31", "6L31", "5L39", "4L49"], doubleedge: ["9M", "9E", "7E", "6E", "5E", "4E", "3T"], doubleteam: ["7M", "6M", "5M", "4M", "3M"], dynamicpunch: ["3T"], - earthpower: ["9M", "9L37", "7T", "7L37", "6T", "6L37", "5T", "5L79", "4T", "4L73"], + earthpower: ["9M", "9L37", "7T", "7L37", "6T", "6L37", "5T", "5L43", "4T", "4L73"], earthquake: ["9M", "7M", "6M", "5M", "4M", "3M"], endure: ["9M", "7E", "6E", "5E", "4M", "3T"], explosion: ["7M", "6M", "5M", "4M", "4E", "3T", "3E"], @@ -37903,7 +37890,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { flashcannon: ["9M"], frustration: ["7M", "6M", "5M", "4M", "3M"], gravity: ["9M", "7T", "6T", "5T", "4T"], - harden: ["9L4", "7L4", "6L4", "5L7", "4L7", "3L7"], + harden: ["9L4", "7L4", "6L4", "5L4", "4L7", "3L7"], headbutt: ["4T"], headsmash: ["9E"], heavyslam: ["9M"], @@ -37912,7 +37899,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { highhorsepower: ["9M"], icepunch: ["9M", "7T", "6T", "5T", "4T", "3T"], irondefense: ["9M", "7T", "6T", "5T", "4T"], - lockon: ["9L43", "7L43", "6L43", "5L73", "4L67", "3L46"], + lockon: ["9L43", "7L43", "6L43", "5L50", "4L67", "3L46"], magiccoat: ["7T", "6T", "5T", "4T"], magnetrise: ["7T", "6T", "5T", "4T"], magnitude: ["7E", "6E", "5E", "4E", "3E"], @@ -37921,19 +37908,19 @@ export const Learnsets: {[k: string]: LearnsetData} = { mudslap: ["4T", "3T"], naturalgift: ["4M"], painsplit: ["9M", "7T", "6T", "5T", "4T"], - powergem: ["9M", "9L25", "7L25", "6L25", "5L49", "4L49"], + powergem: ["9M", "9L25", "7L25", "6L25", "5L32", "4L49"], protect: ["9M", "7M", "6M", "5M", "4M", "3M"], - rest: ["9M", "9L16", "7M", "7L16", "6M", "6L16", "5M", "5L43", "4M", "4L43", "3M", "3L37"], + rest: ["9M", "9L16", "7M", "7L16", "6M", "6L16", "5M", "5L22", "4M", "4L43", "3M", "3L37"], return: ["7M", "6M", "5M", "4M", "3M"], rockblast: ["9M", "9L28", "7L28", "6L18", "5L18"], rockpolish: ["7M", "6M", "5M", "4M"], - rockslide: ["9M", "9L22", "7M", "7L22", "6M", "6L22", "5M", "5L31", "4M", "4L31", "3T", "3L28", "3S0"], + rockslide: ["9M", "9L22", "7M", "7L22", "6M", "6L22", "5M", "5L29", "4M", "4L31", "3T", "3L28", "3S0"], rocksmash: ["6M", "5M", "4M", "3M"], - rockthrow: ["9L10", "7L10", "6L10", "5L13", "4L13", "3L13"], + rockthrow: ["9L10", "7L10", "6L10", "5L11", "4L13", "3L13"], rocktomb: ["9M", "7M", "6M", "5M", "4M", "3M"], rollout: ["9E", "7E", "6E", "5E", "4T", "4E", "3T", "3E"], round: ["7M", "6M", "5M"], - sandstorm: ["9M", "9L34", "7M", "7L34", "6M", "6L34", "5M", "5L37", "4M", "4L37", "3M", "3L31"], + sandstorm: ["9M", "9L34", "7M", "7L34", "6M", "6L34", "5M", "5L36", "4M", "4L37", "3M", "3L31"], sandtomb: ["9M"], secretpower: ["6M", "4M", "3M"], selfdestruct: ["3T"], @@ -37945,7 +37932,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { stealthrock: ["9M", "7T", "7E", "6T", "6E", "5T", "5E", "5D", "4M"], steelbeam: ["9M"], stompingtantrum: ["9M", "7T"], - stoneedge: ["9M", "9L40", "7M", "7L40", "6M", "6L40", "5M", "5L61", "4M", "4L55"], + stoneedge: ["9M", "9L40", "7M", "7L40", "6M", "6L40", "5M", "5L46", "4M", "4L55"], strength: ["6M", "5M", "4M", "3M"], substitute: ["9M", "7M", "6M", "5M", "4M", "3T"], sunnyday: ["9M", "7M", "6M", "5M", "4M", "3M"], @@ -37957,12 +37944,12 @@ export const Learnsets: {[k: string]: LearnsetData} = { thunder: ["9M", "7M", "6M", "5M", "4M", "3M"], thunderbolt: ["9M", "7M", "6M", "5M", "4M", "3M", "3S0"], thunderpunch: ["9M", "7T", "6T", "5T", "4T", "3T"], - thunderwave: ["9M", "9L13", "7M", "7L13", "6M", "6L13", "5M", "5L25", "4M", "4L25", "3T", "3L22", "3S0"], + thunderwave: ["9M", "9L13", "7M", "7L13", "6M", "6L13", "5M", "5L15", "4M", "4L25", "3T", "3L22", "3S0"], torment: ["7M", "6M", "5M", "4M", "3M"], toxic: ["7M", "6M", "5M", "4M", "3M"], voltswitch: ["9M", "7M", "6M", "5M"], wideguard: ["9E", "7E", "6E"], - zapcannon: ["9L43", "7L43", "6L43", "5L67", "4L61", "3L43"], + zapcannon: ["9L43", "7L43", "6L43", "5L50", "4L61", "3L43"], }, eventData: [ {generation: 3, level: 26, moves: ["helpinghand", "thunderbolt", "thunderwave", "rockslide"]}, @@ -37981,10 +37968,10 @@ export const Learnsets: {[k: string]: LearnsetData} = { confide: ["7M", "6M"], curse: ["9M"], dazzlinggleam: ["9M", "7M", "6M"], - discharge: ["9L31", "7L31", "6L31", "5L55", "4L49"], + discharge: ["9L31", "7L31", "6L31", "5L39", "4L49"], doubleedge: ["9M"], doubleteam: ["7M", "6M", "5M", "4M"], - earthpower: ["9M", "9L37", "7T", "7L37", "6T", "6L37", "5T", "5L79", "4T", "4L73"], + earthpower: ["9M", "9L37", "7T", "7L37", "6T", "6L37", "5T", "5L43", "4T", "4L73"], earthquake: ["9M", "7M", "6M", "5M", "4M"], endure: ["9M", "4M"], explosion: ["7M", "6M", "5M", "4M"], @@ -38004,7 +37991,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { icepunch: ["9M", "7T", "6T", "5T", "4T"], irondefense: ["9M", "9L1", "7T", "7L1", "6T", "6L1", "5T", "5L1", "4T", "4L1"], ironhead: ["9M", "7T", "6T", "5T", "4T"], - lockon: ["9L43", "7L43", "6L43", "5L73", "4L67"], + lockon: ["9L43", "7L43", "6L43", "5L50", "4L67"], magiccoat: ["7T", "6T", "5T", "4T"], magnetbomb: ["7L1", "6L1", "5L1", "4L1"], magneticflux: ["9L1", "7L1"], @@ -38014,18 +38001,18 @@ export const Learnsets: {[k: string]: LearnsetData} = { mudslap: ["4T"], naturalgift: ["4M"], painsplit: ["9M", "7T", "6T", "5T", "4T"], - powergem: ["9M", "9L25", "7L25", "6L25", "5L49", "4L49"], + powergem: ["9M", "9L25", "7L25", "6L25", "5L32", "4L49"], protect: ["9M", "7M", "6M", "5M", "4M"], - rest: ["9M", "9L16", "7M", "7L16", "6M", "6L16", "5M", "5L43", "4M", "4L43"], + rest: ["9M", "9L16", "7M", "7L16", "6M", "6L16", "5M", "5L22", "4M", "4L43"], return: ["7M", "6M", "5M", "4M"], rockblast: ["9M", "9L28", "7L28", "6L18", "5L18"], rockpolish: ["7M", "6M", "5M", "4M"], - rockslide: ["9M", "9L22", "7M", "7L22", "6M", "6L22", "5M", "5L31", "4M", "4L31"], + rockslide: ["9M", "9L22", "7M", "7L22", "6M", "6L22", "5M", "5L29", "4M", "4L31"], rocksmash: ["6M", "5M", "4M"], rocktomb: ["9M", "7M", "6M", "5M", "4M"], rollout: ["4T"], round: ["7M", "6M", "5M"], - sandstorm: ["9M", "9L34", "7M", "7L34", "6M", "6L34", "5M", "5L37", "4M", "4L37"], + sandstorm: ["9M", "9L34", "7M", "7L34", "6M", "6L34", "5M", "5L36", "4M", "4L37"], sandtomb: ["9M"], secretpower: ["6M", "4M"], shockwave: ["7T", "6T", "4M"], @@ -38036,7 +38023,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { stealthrock: ["9M", "7T", "6T", "5T", "4M"], steelbeam: ["9M"], stompingtantrum: ["9M", "7T"], - stoneedge: ["9M", "9L40", "7M", "7L40", "6M", "6L40", "5M", "5L61", "4M", "4L55"], + stoneedge: ["9M", "9L40", "7M", "7L40", "6M", "6L40", "5M", "5L46", "4M", "4L55"], strength: ["6M", "5M", "4M"], substitute: ["9M", "7M", "6M", "5M", "4M"], sunnyday: ["9M", "7M", "6M", "5M", "4M"], @@ -38050,13 +38037,13 @@ export const Learnsets: {[k: string]: LearnsetData} = { thunder: ["9M", "7M", "6M", "5M", "4M"], thunderbolt: ["9M", "7M", "6M", "5M", "4M"], thunderpunch: ["9M", "7T", "6T", "5T", "4T"], - thunderwave: ["9M", "9L13", "7M", "7L13", "6M", "6L13", "5M", "5L25", "4M", "4L25"], + thunderwave: ["9M", "9L13", "7M", "7L13", "6M", "6L13", "5M", "5L15", "4M", "4L25"], torment: ["7M", "6M", "5M", "4M"], toxic: ["7M", "6M", "5M", "4M"], triattack: ["9L0", "7L1"], voltswitch: ["9M", "7M", "6M", "5M"], wideguard: ["9L1", "7L1", "6L1"], - zapcannon: ["9L43", "7L43", "6L43", "5L67", "4L61"], + zapcannon: ["9L43", "7L43", "6L43", "5L50", "4L61"], }, }, skitty: { @@ -38505,7 +38492,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { aerialace: ["7M", "6M", "5M", "4M", "3M"], ancientpower: ["4T"], attract: ["8M", "7M", "6M", "5M", "4M", "3M"], - autotomize: ["8L40", "7L43", "6L39", "5L43"], + autotomize: ["8L40", "7L43", "6L39", "5L39"], bodypress: ["8M"], bodyslam: ["8M", "7E", "6E", "5E", "4E", "3T", "3E"], bulldoze: ["8M", "7M", "6M", "5M"], @@ -38515,7 +38502,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { cut: ["6M", "5M", "4M", "3M"], defensecurl: ["3T"], dig: ["8M", "6M", "5M", "4M", "3M"], - doubleedge: ["8L56", "7L40", "6L40", "5L50", "4L43", "3T", "3L44"], + doubleedge: ["8L56", "7L40", "6L40", "5L46", "4L43", "3T", "3L44"], doubleteam: ["7M", "6M", "5M", "4M", "3M"], dragonrush: ["8E", "7E", "6E", "5E", "4E"], earthpower: ["8M", "7T", "6T", "5T", "4T"], @@ -38525,28 +38512,28 @@ export const Learnsets: {[k: string]: LearnsetData} = { facade: ["8M", "7M", "6M", "5M", "4M", "3M"], frustration: ["7M", "6M", "5M", "4M", "3M"], furycutter: ["4T", "3T"], - harden: ["8L1", "7L1", "6L1", "5L4", "5D", "4L4", "3L4"], - headbutt: ["8L16", "7L7", "6L7", "5L11", "4T", "4L11", "3L10"], + harden: ["8L1", "7L1", "6L1", "5L1", "5D", "4L4", "3L4"], + headbutt: ["8L16", "7L7", "6L7", "5L8", "4T", "4L11", "3L10"], headsmash: ["8E", "7E", "6E", "5E", "5D", "4E"], - heavyslam: ["8M", "8L52", "7L46", "6L43", "5L46"], + heavyslam: ["8M", "8L52", "7L46", "6L43", "5L43"], hiddenpower: ["7M", "6M", "5M", "4M", "3M"], honeclaws: ["6M", "5M"], - irondefense: ["8M", "8L48", "7T", "7L37", "6T", "6L15", "5T", "5L18", "4T", "4L18", "3L17"], - ironhead: ["8M", "8L28", "7T", "7L22", "7E", "6T", "6L22", "6E", "5T", "5L29", "5E", "4T", "4L29", "4E"], - irontail: ["8M", "8L44", "7T", "7L34", "6T", "6L34", "5T", "5L39", "4M", "4L39", "3M", "3L29"], + irondefense: ["8M", "8L48", "7T", "7L37", "6T", "6L15", "5T", "5L15", "4T", "4L18", "3L17"], + ironhead: ["8M", "8L28", "7T", "7L22", "7E", "6T", "6L22", "6E", "5T", "5L25", "5E", "4T", "4L29", "4E"], + irontail: ["8M", "8L44", "7T", "7L34", "6T", "6L34", "5T", "5L36", "4M", "4L39", "3M", "3L29"], magnetrise: ["7T", "6T", "5T", "4T"], - metalburst: ["8L60", "7L49", "6L49", "5L53", "4L46"], - metalclaw: ["8L4", "7L10", "6L10", "5L15", "4L15", "3L13"], - metalsound: ["8L33", "7L31", "6L31", "5L36", "4L36", "3L39"], + metalburst: ["8L60", "7L49", "6L49", "5L50", "4L46"], + metalclaw: ["8L4", "7L10", "6L10", "5L11", "4L15", "3L13"], + metalsound: ["8L33", "7L31", "6L31", "5L32", "4L36", "3L39"], mimic: ["3T"], - mudslap: ["8E", "7L4", "6L4", "5L8", "4T", "4L8", "3T", "3L7"], + mudslap: ["8E", "7L4", "6L4", "5L4", "4T", "4L8", "3T", "3L7"], naturalgift: ["4M"], - protect: ["8M", "8L20", "7M", "7L16", "6M", "6L16", "5M", "5L32", "4M", "4L32", "3M", "3L34"], + protect: ["8M", "8L20", "7M", "7L16", "6M", "6L16", "5M", "5L29", "4M", "4L32", "3M", "3L34"], raindance: ["8M", "7M", "6M", "5M", "4M", "3M"], rest: ["8M", "7M", "6M", "5M", "4M", "3M"], return: ["7M", "6M", "5M", "4M", "3M"], reversal: ["8M", "7E", "6E"], - roar: ["8L12", "7M", "7L19", "6M", "6L18", "5M", "5L22", "4M", "4L22", "3M", "3L21"], + roar: ["8L12", "7M", "7L19", "6M", "6L18", "5M", "5L18", "4M", "4L22", "3M", "3L21"], rockpolish: ["7M", "6M", "5M", "4M"], rockslide: ["8M", "8L24", "7M", "7L25", "6M", "6L25", "5M", "4M", "3T"], rocksmash: ["6M", "5M", "4M", "3M"], @@ -38572,7 +38559,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { superpower: ["8M", "7T", "7E", "6T", "6E", "5T", "5E", "4T"], swagger: ["7M", "6M", "5M", "4M", "3T"], tackle: ["8L1", "7L1", "6L1", "5L1", "4L1", "3L1"], - takedown: ["8L36", "7L28", "6L22", "5L25", "4L25", "3L25"], + takedown: ["8L36", "7L28", "6L22", "5L22", "4L25", "3L25"], toxic: ["7M", "6M", "5M", "4M", "3M"], uproar: ["8M", "7T", "6T", "5T", "4T"], waterpulse: ["7T", "6T", "4M", "3M"], @@ -38583,7 +38570,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { aerialace: ["7M", "6M", "5M", "4M", "3M"], ancientpower: ["4T"], attract: ["8M", "7M", "6M", "5M", "4M", "3M"], - autotomize: ["8L46", "7L47", "6L45", "5L51"], + autotomize: ["8L46", "7L47", "6L45", "5L45"], bodypress: ["8M"], bodyslam: ["8M", "3T"], bulldoze: ["8M", "7M", "6M", "5M"], @@ -38592,7 +38579,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { cut: ["6M", "5M", "4M", "3M"], defensecurl: ["3T"], dig: ["8M", "6M", "5M", "4M", "3M"], - doubleedge: ["8L70", "7L43", "6L43", "5L62", "4L51", "3T", "3L53"], + doubleedge: ["8L70", "7L43", "6L43", "5L56", "4L51", "3T", "3L53"], doubleteam: ["7M", "6M", "5M", "4M", "3M"], earthpower: ["8M", "7T", "6T", "5T", "4T"], earthquake: ["8M", "7M", "6M", "5M", "4M", "3M"], @@ -38603,25 +38590,25 @@ export const Learnsets: {[k: string]: LearnsetData} = { furycutter: ["4T", "3T"], harden: ["8L1", "7L1", "6L1", "5L1", "4L1", "3L1"], headbutt: ["8L16", "7L1", "6L1", "5L1", "4T", "4L1", "3L1"], - heavyslam: ["8M", "8L64", "7L51", "6L51", "5L56"], + heavyslam: ["8M", "8L64", "7L51", "6L51", "5L51"], hiddenpower: ["7M", "6M", "5M", "4M", "3M"], honeclaws: ["6M", "5M"], - irondefense: ["8M", "8L58", "7T", "7L39", "6T", "6L15", "5T", "5L18", "4T", "4L18", "3L17"], - ironhead: ["8M", "8L28", "7T", "7L22", "6T", "6L22", "5T", "5L29", "4T", "4L29"], - irontail: ["8M", "8L52", "7T", "7L35", "6T", "6L35", "5T", "5L45", "4M", "4L45", "3M", "3L29"], + irondefense: ["8M", "8L58", "7T", "7L39", "6T", "6L15", "5T", "5L15", "4T", "4L18", "3L17"], + ironhead: ["8M", "8L28", "7T", "7L22", "6T", "6L22", "5T", "5L25", "4T", "4L29"], + irontail: ["8M", "8L52", "7T", "7L35", "6T", "6L35", "5T", "5L40", "4M", "4L45", "3M", "3L29"], magnetrise: ["7T", "6T", "5T", "4T"], - metalburst: ["8L76", "7L55", "6L55", "5L67", "4L56"], - metalclaw: ["8L1", "7L10", "6L10", "5L15", "4L15", "3L13"], - metalsound: ["8L35", "7L31", "6L31", "5L40", "4L40", "3L45"], + metalburst: ["8L76", "7L55", "6L55", "5L62", "4L56"], + metalclaw: ["8L1", "7L10", "6L10", "5L11", "4L15", "3L13"], + metalsound: ["8L35", "7L31", "6L31", "5L34", "4L40", "3L45"], mimic: ["3T"], mudslap: ["7L1", "6L1", "5L1", "4T", "4L1", "3T", "3L1"], naturalgift: ["4M"], - protect: ["8M", "8L20", "7M", "7L16", "6M", "6L16", "5M", "5L34", "4M", "4L34", "3M", "3L37"], + protect: ["8M", "8L20", "7M", "7L16", "6M", "6L16", "5M", "5L29", "4M", "4L34", "3M", "3L37"], raindance: ["8M", "7M", "6M", "5M", "4M", "3M"], rest: ["8M", "7M", "6M", "5M", "4M", "3M"], return: ["7M", "6M", "5M", "4M", "3M"], reversal: ["8M"], - roar: ["8L12", "7M", "7L19", "6M", "6L18", "5M", "5L22", "4M", "4L22", "3M", "3L21"], + roar: ["8L12", "7M", "7L19", "6M", "6L18", "5M", "5L18", "4M", "4L22", "3M", "3L21"], rockblast: ["8M"], rockpolish: ["7M", "6M", "5M", "4M"], rockslide: ["8M", "8L24", "7M", "7L25", "6M", "6L25", "5M", "4M", "3T"], @@ -38649,7 +38636,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { superpower: ["8M", "7T", "6T", "5T", "4T"], swagger: ["7M", "6M", "5M", "4M", "3T"], tackle: ["8L1", "7L1", "6L1", "5L1", "4L1", "3L1"], - takedown: ["8L40", "7L28", "6L22", "5L25", "4L25", "3L25"], + takedown: ["8L40", "7L28", "6L22", "5L22", "4L25", "3L25"], toxic: ["7M", "6M", "5M", "4M", "3M"], uproar: ["8M", "7T", "6T", "5T", "4T"], waterpulse: ["7T", "6T", "4M", "3M"], @@ -38661,7 +38648,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { ancientpower: ["4T"], aquatail: ["7T", "6T", "5T", "4T"], attract: ["8M", "7M", "6M", "5M", "4M", "3M"], - autotomize: ["8L48", "7L51", "6L48", "5L57"], + autotomize: ["8L48", "7L51", "6L48", "5L48"], avalanche: ["8M", "4M"], blizzard: ["8M", "7M", "6M", "5M", "4M", "3M"], block: ["7T", "6T", "5T", "4T"], @@ -38678,7 +38665,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { darkpulse: ["8M", "7M", "6M", "5T", "4M"], defensecurl: ["3T"], dig: ["8M", "6M", "5M", "4M", "3M"], - doubleedge: ["8L80", "7L45", "6L45", "5L74", "4L57", "3T", "3L63", "3S0"], + doubleedge: ["8L80", "7L45", "6L45", "5L65", "4L57", "3T", "3L63", "3S0"], doubleteam: ["7M", "6M", "5M", "4M", "3M"], dragonclaw: ["8M", "7M", "6M", "5M", "4M", "3M"], dragonpulse: ["8M", "7T", "6T", "5T", "4M"], @@ -38702,7 +38689,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { harden: ["8L1", "7L1", "6L1", "5L1", "4L1", "3L1"], headbutt: ["8L16", "7L1", "6L1", "5L1", "4T", "4L1", "3L1"], headsmash: ["6S2"], - heavyslam: ["8M", "8L72", "7L57", "6L57", "5L65"], + heavyslam: ["8M", "8L72", "7L57", "6L57", "5L57"], hiddenpower: ["7M", "6M", "5M", "4M", "3M"], highhorsepower: ["8M"], honeclaws: ["6M", "5M"], @@ -38712,16 +38699,16 @@ export const Learnsets: {[k: string]: LearnsetData} = { icepunch: ["8M", "7T", "6T", "5T", "4T", "3T"], icywind: ["8M", "7T", "6T", "5T", "4T", "3T"], incinerate: ["6M", "5M"], - irondefense: ["8M", "8L64", "7T", "7L39", "6T", "6L15", "5T", "5L18", "4T", "4L18", "3L17"], - ironhead: ["8M", "8L28", "7T", "7L22", "6T", "6L22", "6S2", "5T", "5L29", "4T", "4L29"], - irontail: ["8M", "8L56", "7T", "7L35", "6T", "6L35", "5T", "5L48", "4M", "4L48", "3M", "3L29", "3S0", "3S1"], + irondefense: ["8M", "8L64", "7T", "7L39", "6T", "6L15", "5T", "5L15", "4T", "4L18", "3L17"], + ironhead: ["8M", "8L28", "7T", "7L22", "6T", "6L22", "6S2", "5T", "5L25", "4T", "4L29"], + irontail: ["8M", "8L56", "7T", "7L35", "6T", "6L35", "5T", "5L40", "4M", "4L48", "3M", "3L29", "3S0", "3S1"], lowkick: ["8M", "7T", "6T", "5T", "4T"], magnetrise: ["7T", "6T", "5T", "4T"], megakick: ["8M", "3T"], megapunch: ["8M", "3T"], - metalburst: ["8L88", "7L63", "6L63", "5L82", "4L65"], - metalclaw: ["8L1", "7L10", "6L10", "5L15", "4L15", "3L13"], - metalsound: ["8L35", "7L31", "6L31", "5L40", "4L40", "3L50", "3S0", "3S1"], + metalburst: ["8L88", "7L63", "6L63", "5L74", "4L65"], + metalclaw: ["8L1", "7L10", "6L10", "5L11", "4L15", "3L13"], + metalsound: ["8L35", "7L31", "6L31", "5L34", "4L40", "3L50", "3S0", "3S1"], meteorbeam: ["8T"], mimic: ["3T"], mudslap: ["7L1", "6L1", "5L1", "4T", "4L1", "3T", "3L1"], @@ -38729,12 +38716,12 @@ export const Learnsets: {[k: string]: LearnsetData} = { outrage: ["8M", "7T", "6T", "5T", "4T"], payback: ["8M", "7M", "6M", "5M", "4M"], poweruppunch: ["6M"], - protect: ["8M", "8L20", "7M", "7L16", "6M", "6L16", "5M", "5L34", "4M", "4L34", "3M", "3L37", "3S0", "3S1"], + protect: ["8M", "8L20", "7M", "7L16", "6M", "6L16", "5M", "5L29", "4M", "4L34", "3M", "3L37", "3S0", "3S1"], raindance: ["8M", "7M", "6M", "5M", "4M", "3M"], rest: ["8M", "7M", "6M", "5M", "4M", "3M"], return: ["7M", "6M", "5M", "4M", "3M"], reversal: ["8M"], - roar: ["8L12", "7M", "7L19", "6M", "6L18", "5M", "5L22", "4M", "4L22", "3M", "3L21"], + roar: ["8L12", "7M", "7L19", "6M", "6L18", "5M", "5L18", "4M", "4L22", "3M", "3L21"], rockblast: ["8M"], rockclimb: ["4M"], rockpolish: ["7M", "6M", "5M", "4M"], @@ -38769,7 +38756,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { surf: ["8M", "7M", "6M", "5M", "4M", "3M"], swagger: ["7M", "6M", "5M", "4M", "3T"], tackle: ["8L1", "7L1", "6L1", "5L1", "4L1", "3L1"], - takedown: ["8L40", "7L28", "6L22", "5L25", "4L25", "3L25", "3S1"], + takedown: ["8L40", "7L28", "6L22", "5L22", "4L25", "3L25", "3S1"], taunt: ["8M", "7M", "6M", "5M", "4M", "3M"], thunder: ["8M", "7M", "6M", "5M", "4M", "3M"], thunderbolt: ["8M", "7M", "6M", "5M", "4M", "3M"], @@ -39651,7 +39638,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { naturepower: ["7M", "6M"], nightmare: ["3T"], petalblizzard: ["8L45", "7L37", "6L37"], - petaldance: ["8L60", "7L50", "6L37", "5L40", "4L40", "3L49"], + petaldance: ["8L60", "7L50", "6L37", "5L37", "4L40", "3L49"], pinmissile: ["8M", "7E", "6E", "5E", "4E", "3E"], poisonjab: ["8M", "7M", "6M", "5M", "4M"], poisonsting: ["8L0", "7L7", "6L7", "5L7", "4L7", "3L9", "3S0"], @@ -40282,7 +40269,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { numel: { learnset: { afteryou: ["7T", "6T", "5T"], - amnesia: ["9M", "9L19", "7L19", "6L19", "5L31", "4L25", "3L31"], + amnesia: ["9M", "9L19", "7L19", "6L19", "5L19", "4L25", "3L31"], ancientpower: ["9E", "7E", "6E", "5E", "4E"], attract: ["7M", "6M", "5M", "4M", "3M"], bodypress: ["9M"], @@ -40294,10 +40281,10 @@ export const Learnsets: {[k: string]: LearnsetData} = { curse: ["9M", "9L29", "7L29", "6L29", "5L29"], defensecurl: ["9E", "7E", "6E", "5E", "4E", "3T", "3E"], dig: ["9M", "6M", "5M", "4M", "3M", "3S0"], - doubleedge: ["9M", "9L47", "7L47", "6L47", "5L55", "4L51", "3T", "3L49"], + doubleedge: ["9M", "9L47", "7L47", "6L47", "5L47", "4L51", "3T", "3L49"], doubleteam: ["7M", "6M", "5M", "4M", "3M"], - earthpower: ["9M", "9L26", "7T", "7L26", "6T", "6L26", "5T", "5L41", "4T", "4L35"], - earthquake: ["9M", "9L40", "7M", "7L40", "6M", "6L40", "5M", "5L45", "4M", "4L41", "3M", "3L35"], + earthpower: ["9M", "9L26", "7T", "7L26", "6T", "6L26", "5T", "5L26", "4T", "4L35"], + earthquake: ["9M", "9L40", "7M", "7L40", "6M", "6L40", "5M", "5L40", "4M", "4L41", "3M", "3L35"], echoedvoice: ["7M", "6M", "5M"], ember: ["9L5", "7L5", "6L5", "5L5", "5D", "4L5", "3L11", "3S0"], endeavor: ["9M"], @@ -40305,12 +40292,12 @@ export const Learnsets: {[k: string]: LearnsetData} = { facade: ["9M", "7M", "6M", "5M", "4M", "3M"], fireblast: ["9M", "7M", "6M", "5M", "4M", "3M"], firespin: ["9M"], - flameburst: ["7L15", "6L15", "5L21"], + flameburst: ["7L15", "6L15", "5L15"], flamecharge: ["9M", "7M", "6M", "5M"], - flamethrower: ["9M", "9L43", "7M", "7L43", "6M", "6L43", "5M", "5L51", "4M", "4L45", "3M", "3L41"], + flamethrower: ["9M", "9L43", "7M", "7L43", "6M", "6L43", "5M", "5L43", "4M", "4L45", "3M", "3L41"], flareblitz: ["9M"], flashcannon: ["9M"], - focusenergy: ["9L8", "7L8", "6L8", "5L15", "4L15", "3L25"], + focusenergy: ["9L8", "7L8", "6L8", "5L12", "4L15", "3L25"], frustration: ["7M", "6M", "5M", "4M", "3M"], growl: ["9L1", "7L1", "6L1", "6S1", "5L1", "4L1", "3L1"], growth: ["9E", "7E", "6E"], @@ -40325,8 +40312,8 @@ export const Learnsets: {[k: string]: LearnsetData} = { incinerate: ["9L15", "6M", "5M"], ironhead: ["9M", "9E", "7T", "7E", "6T", "6E", "6S1", "5T", "5E"], lashout: ["9M"], - lavaplume: ["9L22", "7L22", "6L22", "5L35", "4L31"], - magnitude: ["7L12", "6L8", "5L11", "4L11", "3L19"], + lavaplume: ["9L22", "7L22", "6L22", "5L22", "4L31"], + magnitude: ["7L12", "6L8", "5L8", "4L11", "3L19"], mimic: ["3T"], mudbomb: ["7E", "6E", "5E", "4E"], mudshot: ["9M"], @@ -40379,7 +40366,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { camerupt: { learnset: { afteryou: ["7T", "6T", "5T"], - amnesia: ["9M", "9L19", "7L19", "6L19", "5L31", "4L25", "3L31"], + amnesia: ["9M", "9L19", "7L19", "6L19", "5L19", "4L25", "3L31"], attract: ["7M", "6M", "5M", "4M", "3M"], bodypress: ["9M"], bodyslam: ["9M", "3T"], @@ -40392,24 +40379,24 @@ export const Learnsets: {[k: string]: LearnsetData} = { dig: ["9M", "6M", "5M", "4M", "3M"], doubleedge: ["9M", "3T"], doubleteam: ["7M", "6M", "5M", "4M", "3M"], - earthpower: ["9M", "9L26", "7T", "7L26", "6T", "6L26", "5T", "5L49", "4T", "4L39"], - earthquake: ["9M", "9L46", "7M", "7L46", "6M", "6L46", "5M", "5L57", "4M", "4L49", "3M", "3L37"], + earthpower: ["9M", "9L26", "7T", "7L26", "6T", "6L26", "5T", "5L26", "4T", "4L39"], + earthquake: ["9M", "9L46", "7M", "7L46", "6M", "6L46", "5M", "5L46", "4M", "4L49", "3M", "3L37"], echoedvoice: ["7M", "6M", "5M"], ember: ["9L1", "7L1", "6L1", "5L1", "4L1", "3L1"], endeavor: ["9M"], endure: ["9M", "4M", "3T"], - eruption: ["9L1", "7L1", "6L1", "5L67", "4L57", "3L45"], + eruption: ["9L1", "7L1", "6L1", "5L52", "4L57", "3L45"], explosion: ["7M", "6M", "5M", "4M", "3T"], facade: ["9M", "7M", "6M", "5M", "4M", "3M"], fireblast: ["9M", "7M", "6M", "5M", "4M", "3M"], firespin: ["9M"], - fissure: ["9L1", "7L1", "6L1", "5L75", "4L67", "3L55"], - flameburst: ["7L15", "6L15", "5L21"], + fissure: ["9L1", "7L1", "6L1", "5L59", "4L67", "3L55"], + flameburst: ["7L15", "6L15", "5L15"], flamecharge: ["9M", "7M", "6M", "5M"], flamethrower: ["9M", "7M", "6M", "5M", "4M", "3M"], flareblitz: ["9M"], flashcannon: ["9M", "7M", "6M", "5M", "4M"], - focusenergy: ["9L1", "7L1", "6L1", "5L15", "4L15", "3L25"], + focusenergy: ["9L1", "7L1", "6L1", "5L12", "4L15", "3L25"], frustration: ["7M", "6M", "5M", "4M", "3M"], gigaimpact: ["9M", "7M", "6M", "5M", "4M"], growl: ["9L1", "7L1", "6L1", "5L1", "4L1", "3L1"], @@ -40424,7 +40411,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { incinerate: ["9L15", "6M", "5M"], ironhead: ["9M", "7T", "6T", "5T", "4T"], lashout: ["9M"], - lavaplume: ["9L22", "7L22", "6L22", "5L33", "4L31"], + lavaplume: ["9L22", "7L22", "6L22", "5L22", "4L31"], magnitude: ["7L12", "6L1", "5L1", "4L1", "3L1"], mimic: ["3T"], mudshot: ["9M"], @@ -40438,7 +40425,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { return: ["7M", "6M", "5M", "4M", "3M"], roar: ["9M", "7M", "6M", "5M", "4M", "3M"], rockpolish: ["7M", "6M", "5M", "4M"], - rockslide: ["9M", "9L0", "7M", "7L1", "6M", "6L33", "6S0", "5M", "5L39", "4M", "4L33", "3T", "3L33"], + rockslide: ["9M", "9L0", "7M", "7L1", "6M", "6L33", "6S0", "5M", "5L33", "4M", "4L33", "3T", "3L33"], rocksmash: ["6M", "5M", "4M", "3M"], rocktomb: ["9M", "7M", "6M", "5M", "4M", "3M"], rollout: ["4T", "3T"], @@ -40577,7 +40564,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { amnesia: ["9M", "9E", "7E", "6E", "5E", "4E"], attract: ["7M", "6M", "5M", "4M", "3M"], bodyslam: ["9M", "3T"], - bounce: ["9L50", "7T", "7L50", "6T", "6L50", "5T", "5L53", "4T", "4L48", "3L43"], + bounce: ["9L50", "7T", "7L50", "6T", "6L50", "5T", "5L50", "4T", "4L48", "3L43"], calmmind: ["9M", "7M", "6M", "5M", "4M", "3M"], captivate: ["4M"], chargebeam: ["9M", "7M", "6M", "5M", "4M"], @@ -40618,11 +40605,11 @@ export const Learnsets: {[k: string]: LearnsetData} = { naturalgift: ["4M"], nightshade: ["9M"], odorsleuth: ["7L10", "6L10", "5L10", "4L10", "3L10"], - payback: ["9L40", "7M", "7L40", "6M", "6L40", "5M", "5L41", "4M", "4L34"], - powergem: ["9M", "9L29", "7L29", "6L29", "5L48", "4L46"], + payback: ["9L40", "7M", "7L40", "6M", "6L40", "5M", "5L40", "4M", "4L34"], + powergem: ["9M", "9L29", "7L29", "6L29", "5L33", "4L46"], protect: ["9M", "7M", "6M", "5M", "4M", "3M"], psybeam: ["9M", "9L14", "7L14", "6L14", "5L14", "4L14", "3L16"], - psychic: ["9M", "9L44", "7M", "7L44", "6M", "6L44", "5M", "5L46", "4M", "4L41", "3M", "3L34"], + psychic: ["9M", "9L44", "7M", "7L44", "6M", "6L44", "5M", "5L44", "4M", "4L41", "3M", "3L34"], psychicterrain: ["9M"], psychup: ["9M", "9L18", "7M", "7L15", "6M", "6L15", "5M", "5L15", "4M", "4L15", "3T", "3L19"], psyshock: ["9M", "9L38", "7M", "7L38", "6M", "6L38", "5M", "5L34"], @@ -40678,7 +40665,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { belch: ["9L1", "7L1"], bodypress: ["9M"], bodyslam: ["9M", "3T"], - bounce: ["9L60", "7T", "7L60", "6T", "6L60", "5T", "5L68", "4T", "4L60", "3L55"], + bounce: ["9L60", "7T", "7L60", "6T", "6L60", "5T", "5L60", "4T", "4L60", "3L55"], brickbreak: ["9M", "7M", "6M", "5M", "4M"], bulldoze: ["9M", "7M", "6M", "5M"], calmmind: ["9M", "7M", "6M", "5M", "4M", "3M"], @@ -40740,12 +40727,12 @@ export const Learnsets: {[k: string]: LearnsetData} = { naturalgift: ["4M"], nightshade: ["9M"], odorsleuth: ["7L1", "6L1", "5L1", "4L1", "3L1"], - payback: ["9L46", "7M", "7L46", "6M", "6L46", "5M", "5L47", "4M", "4L37"], - powergem: ["9M", "9L29", "7L29", "6L29", "5L60", "4L55"], + payback: ["9L46", "7M", "7L46", "6M", "6L46", "5M", "5L46", "4M", "4L37"], + powergem: ["9M", "9L29", "7L29", "6L29", "5L35", "4L55"], poweruppunch: ["6M"], protect: ["9M", "7M", "6M", "5M", "4M", "3M"], psybeam: ["9M", "9L1", "7L1", "6L1", "5L1", "4L1", "3L1"], - psychic: ["9M", "9L52", "7M", "7L52", "6M", "6L52", "5M", "5L55", "4M", "4L47", "3M", "3L37"], + psychic: ["9M", "9L52", "7M", "7L52", "6M", "6L52", "5M", "5L52", "4M", "4L47", "3M", "3L37"], psychicnoise: ["9M"], psychicterrain: ["9M"], psychup: ["9M", "9L18", "7M", "7L15", "6M", "6L15", "5M", "5L15", "4M", "4L15", "3T", "3L19"], @@ -40918,17 +40905,17 @@ export const Learnsets: {[k: string]: LearnsetData} = { captivate: ["4M"], confide: ["7M", "6M"], crunch: ["9M", "9L28", "8M", "8L28", "7L22", "6L22", "5L33", "4L33", "3L33"], - dig: ["9M", "9L24", "8M", "8L24", "7L19", "6M", "6L19", "5M", "5L41", "4M", "4L41", "3M", "3L41"], + dig: ["9M", "9L24", "8M", "8L24", "7L19", "6M", "6L19", "5M", "5L29", "4M", "4L41", "3M", "3L41"], doubleedge: ["3T"], doubleteam: ["7M", "6M", "5M", "4M", "3M"], - earthpower: ["9M", "9L36", "8M", "8L36", "7T", "7L26", "7E", "6T", "6L26", "6E", "5T", "5L65", "5E", "4T", "4L65"], - earthquake: ["9M", "9L40", "8M", "8L40", "7M", "7L33", "6M", "6L33", "5M", "5L73", "4M", "4L73", "3M"], + earthpower: ["9M", "9L36", "8M", "8L36", "7T", "7L26", "7E", "6T", "6L26", "6E", "5T", "5L39", "5E", "4T", "4L65"], + earthquake: ["9M", "9L40", "8M", "8L40", "7M", "7L33", "6M", "6L33", "5M", "5L55", "4M", "4L73", "3M"], endure: ["9M", "8M", "7E", "6E", "5E", "4M", "3T"], facade: ["9M", "8M", "7M", "6M", "5M", "4M", "3M"], - feint: ["9E", "8E", "7L29", "6L1", "5L81", "4L81"], - feintattack: ["7L1", "6L1", "5L17", "4L17", "3L17"], + feint: ["9E", "8E", "7L29", "6L1", "5L61", "4L81"], + feintattack: ["7L1", "6L1", "5L7", "4L17", "3L17"], firstimpression: ["9E", "8E"], - fissure: ["9L48", "8L48", "7L47", "6L1", "5L89", "4L89"], + fissure: ["9L48", "8L48", "7L47", "6L1", "5L73", "4L89"], flail: ["9E", "8E", "7E", "6E", "5E", "4E"], focusenergy: ["8M", "7E", "6E", "5E", "4E", "3E"], frustration: ["7M", "6M", "5M", "4M", "3M"], @@ -40937,7 +40924,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { gust: ["9E", "8E", "7E", "6E", "5E", "4E", "3E"], headbutt: ["4T"], hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - hyperbeam: ["9M", "8M", "7M", "7L43", "6M", "6L43", "5M", "5L57", "4M", "4L57", "3M", "3L57"], + hyperbeam: ["9M", "8M", "7M", "7L43", "6M", "6L43", "5M", "5L49", "4M", "4L57", "3M", "3L57"], laserfocus: ["8L4"], mimic: ["3T"], mudshot: ["9M", "8M", "7E", "6E", "5E", "4E"], @@ -40951,9 +40938,9 @@ export const Learnsets: {[k: string]: LearnsetData} = { rocksmash: ["6M", "5M", "4M", "3M"], rocktomb: ["9M", "8M", "7M", "6M", "5M", "4M", "3M"], round: ["8M", "7M", "6M", "5M"], - sandattack: ["9L1", "8L1", "7L1", "6L1", "5L9", "4L9", "3L9"], - sandstorm: ["9M", "9L32", "8M", "8L32", "7M", "7L36", "6M", "6L36", "5M", "5L49", "4M", "4L49", "3M", "3L49"], - sandtomb: ["9M", "9L16", "8M", "8L16", "7L12", "6L10", "5L25", "4L25", "3L25"], + sandattack: ["9L1", "8L1", "7L1", "6L1", "5L4", "4L9", "3L9"], + sandstorm: ["9M", "9L32", "8M", "8L32", "7M", "7L36", "6M", "6L36", "5M", "5L44", "4M", "4L49", "3M", "3L49"], + sandtomb: ["9M", "9L16", "8M", "8L16", "7L12", "6L10", "5L10", "4L25", "3L25"], scorchingsands: ["9M", "8T"], secretpower: ["6M", "4M", "3M"], signalbeam: ["7T", "7E", "6T", "6E", "5T", "5E", "5D"], @@ -41019,7 +41006,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { headbutt: ["4T"], heatwave: ["9M", "8M", "7T", "6T", "5T", "4T"], hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - hyperbeam: ["9M", "8M", "7M", "7L43", "6M", "6L43", "5M", "5L57", "4M", "4L57", "3M", "3L57"], + hyperbeam: ["9M", "8M", "7M", "7L43", "6M", "6L43", "5M", "5L49", "4M", "4L57", "3M", "3L57"], laserfocus: ["8L1"], mimic: ["3T"], mudshot: ["9M", "8M"], @@ -41036,10 +41023,10 @@ export const Learnsets: {[k: string]: LearnsetData} = { roost: ["7M", "6M", "5T", "4M"], round: ["8M", "7M", "6M", "5M"], sandattack: ["9L1", "8L1", "7L1", "6L1", "5L1", "4L1", "3L1"], - sandstorm: ["9M", "9L32", "8M", "8L32", "7M", "7L36", "6M", "6L36", "5M", "5L49", "4M", "4L49", "3M", "3L49"], + sandstorm: ["9M", "9L32", "8M", "8L32", "7M", "7L36", "6M", "6L36", "5M", "5L44", "4M", "4L49", "3M", "3L49"], sandtomb: ["9M", "9L16", "8M", "8L16", "7L12", "6L1", "5L1", "4L1", "3L1"], scorchingsands: ["9M", "8T"], - screech: ["9L24", "8M", "8L24", "7L22", "6L22", "5L41", "4L41", "3L41"], + screech: ["9L24", "8M", "8L24", "7L22", "6L22", "5L34", "4L41", "3L41"], secretpower: ["6M", "4M", "3M"], signalbeam: ["7T", "6T", "5T"], silverwind: ["4M"], @@ -41055,7 +41042,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { substitute: ["9M", "8M", "7M", "6M", "5M", "4M", "3T"], sunnyday: ["9M", "8M", "7M", "6M", "5M", "4M", "3M"], superpower: ["9L1", "8M", "8L1", "7T", "6T", "5T"], - supersonic: ["9L1", "8L1", "7L19", "6L19", "5L33", "4L33"], + supersonic: ["9L1", "8L1", "7L19", "6L19", "5L29", "4L33"], swagger: ["7M", "6M", "5M", "4M", "3T"], swift: ["9M", "8M", "4T", "3T"], tailwind: ["9M", "7T", "6T", "5T", "4T"], @@ -41100,7 +41087,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { dragondance: ["9M", "9L1", "8M", "8L1", "7L1"], dragonpulse: ["9M", "8M", "7T", "6T", "5T", "4M"], dragonrush: ["9L60", "8L60", "7L47", "6L47"], - dragontail: ["9M", "9L20", "8L20", "7M", "7L29", "6M", "6L29", "5M", "5L65"], + dragontail: ["9M", "9L20", "8L20", "7M", "7L29", "6M", "6L29", "5M", "5L45"], dualwingbeat: ["9M", "8T"], earthpower: ["9M", "9L38", "8M", "8L38", "7T", "7L26", "6T", "6L26", "5T", "5L39", "4T"], earthquake: ["9M", "9L44", "8M", "8L44", "7M", "7L33", "6M", "6L33", "5M", "4M", "4S1", "3M"], @@ -41124,7 +41111,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { helpinghand: ["9M"], hiddenpower: ["7M", "6M", "5M", "4M", "3M"], honeclaws: ["6M", "5M"], - hyperbeam: ["9M", "8M", "7M", "7L43", "6M", "6L43", "5M", "5L57", "4M", "4L57", "3M", "3L65"], + hyperbeam: ["9M", "8M", "7M", "7L43", "6M", "6L43", "5M", "5L49", "4M", "4L57", "3M", "3L65"], incinerate: ["6M", "5M"], irontail: ["8M", "7T", "6T", "5T", "4M", "3M"], laserfocus: ["8L1", "7T"], @@ -41147,11 +41134,11 @@ export const Learnsets: {[k: string]: LearnsetData} = { roost: ["7M", "6M", "5T", "4M"], round: ["8M", "7M", "6M", "5M"], sandattack: ["9L1", "8L1", "7L1", "6L1", "5L1", "4L1", "3L1"], - sandstorm: ["9M", "9L32", "8M", "8L32", "7M", "7L36", "6M", "6L36", "5M", "5L49", "4M", "4L49", "3M", "3L53"], + sandstorm: ["9M", "9L32", "8M", "8L32", "7M", "7L36", "6M", "6L36", "5M", "5L44", "4M", "4L49", "3M", "3L53"], sandtomb: ["9M", "9L16", "8M", "8L16", "7L12", "6L1", "5L1", "4L1", "3L1", "3S0"], scaleshot: ["9M", "8T"], scorchingsands: ["9M", "8T"], - screech: ["9L24", "8M", "8L24", "7L22", "6L22", "5L41", "4L41", "3L41", "3S0"], + screech: ["9L24", "8M", "8L24", "7L22", "6L22", "5L34", "4L41", "3L41", "3S0"], secretpower: ["6M", "4M", "3M"], signalbeam: ["7T", "6T", "5T"], silverwind: ["4M"], @@ -41167,7 +41154,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { substitute: ["9M", "8M", "7M", "6M", "5M", "4M", "3T"], sunnyday: ["9M", "8M", "7M", "6M", "5M", "4M", "3M"], superpower: ["9L1", "8M", "8L1", "7T", "6T", "5T"], - supersonic: ["9L1", "8L1", "7L19", "6L19", "5L33", "4L33"], + supersonic: ["9L1", "8L1", "7L19", "6L19", "5L29", "4L33"], swagger: ["7M", "6M", "5M", "4M", "3T"], swift: ["9M", "8M", "4T", "3T"], tailwind: ["9M", "7T", "6T", "5T", "4T"], @@ -41423,13 +41410,13 @@ export const Learnsets: {[k: string]: LearnsetData} = { aerialace: ["9M", "7M", "6M", "5M", "4M", "3M"], agility: ["9M", "8M", "7E", "6E", "5E", "4E", "3E"], aircutter: ["4T"], - astonish: ["9E", "8E", "7L3", "6L3", "5L5", "4L5", "3L8"], + astonish: ["9E", "8E", "7L3", "6L3", "5L4", "4L5", "3L8"], attract: ["8M", "7M", "6M", "5M", "4M", "3M"], bodyslam: ["9M", "8M", "3T"], bravebird: ["9M"], captivate: ["4M"], confide: ["7M", "6M"], - cottonguard: ["9L32", "8L32", "7L34", "6L34", "5L40"], + cottonguard: ["9L32", "8L32", "7L34", "6L34", "5L39"], dazzlinggleam: ["9M", "8M", "7M", "6M"], defog: ["9E", "8E", "7T"], disarmingvoice: ["9M", "9L4", "8L4", "7L11", "6L11"], @@ -41437,7 +41424,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { doubleteam: ["7M", "6M", "5M", "4M", "3M"], dragonbreath: ["9L20", "8L20"], dragoncheer: ["9M"], - dragonpulse: ["9M", "8M", "7T", "7L38", "6T", "6L38", "5T", "5L50", "4M", "4L45"], + dragonpulse: ["9M", "8M", "7T", "7L38", "6T", "6L38", "5T", "5L42", "4M", "4L45"], dragonrush: ["9E", "8E", "7E", "6E", "5E", "4E"], dreameater: ["7M", "6M", "5M", "4M", "3T"], dualwingbeat: ["9M", "8T"], @@ -41449,7 +41436,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { featherdance: ["9M", "9E", "8E", "7E", "6E", "5E", "5D", "4E"], fly: ["9M", "8M", "7M", "6M", "5M", "4M", "3M"], frustration: ["7M", "6M", "5M", "4M", "3M"], - furyattack: ["9L12", "8L12", "7L7", "6L7", "5L13", "4L13", "3L18"], + furyattack: ["9L12", "8L12", "7L7", "6L7", "5L10", "4L13", "3L18"], growl: ["9L1", "8L1", "7L1", "6L1", "6S2", "5L1", "5S1", "4L1", "3L1", "3S0"], haze: ["9M", "9E", "8E", "7E", "6E", "5E", "4E", "3E"], healbell: ["7T", "6T", "5T", "4T"], @@ -41460,15 +41447,15 @@ export const Learnsets: {[k: string]: LearnsetData} = { hypervoice: ["9M", "8M", "7T", "7E", "6T", "6E", "6S2", "5T", "5E"], icebeam: ["9M", "8M", "7M", "6M", "5M", "4M", "3M"], mimic: ["3T"], - mirrormove: ["7L30", "6L30", "5L36", "4L36", "3L38"], - mist: ["9L8", "8L8", "7L14", "6L14", "5L23", "4L23", "3L28"], + mirrormove: ["7L30", "6L30", "5L34", "4L36", "3L38"], + mist: ["9L8", "8L8", "7L14", "6L14", "5L15", "4L23", "3L28"], moonblast: ["9L40", "8L40", "7L46", "6L46"], mudslap: ["4T", "3T"], - naturalgift: ["7L20", "6L20", "5L32", "4M", "4L32"], + naturalgift: ["7L20", "6L20", "5L21", "4M", "4L32"], ominouswind: ["4T"], outrage: ["8M", "7T", "6T", "5T", "4T"], peck: ["9L1", "8L1", "7L1", "6L1", "6S2", "5L1", "5D", "5S1", "4L1", "3L1", "3S0"], - perishsong: ["9L44", "8L44", "7L42", "6L42", "5L55", "4L50", "3L48"], + perishsong: ["9L44", "8L44", "7L42", "6L42", "5L48", "4L50", "3L48"], playrough: ["9M", "8M", "7E"], pluck: ["5M", "4M"], powerswap: ["8M", "7E", "6E", "5E", "4E"], @@ -41477,14 +41464,14 @@ export const Learnsets: {[k: string]: LearnsetData} = { pursuit: ["7E", "6E", "5E", "4E", "3E"], rage: ["7E", "6E", "5E", "4E", "3E"], raindance: ["9M", "8M", "7M", "6M", "5M", "4M", "3M"], - refresh: ["7L26", "6L26", "5L45", "4L40", "3L41"], + refresh: ["7L26", "6L26", "5L29", "4L40", "3L41"], rest: ["9M", "8M", "7M", "6M", "5M", "4M", "3M"], return: ["7M", "6M", "5M", "4M", "3M"], roost: ["9E", "8E", "7M", "7E", "6M", "6E", "5T", "5E", "5D", "4M"], round: ["9L16", "8M", "8L16", "7M", "7L17", "6M", "6L17", "5M", "5L18"], - safeguard: ["9L24", "8M", "8L24", "7M", "7L9", "6M", "6L9", "5M", "5L18", "4M", "4L18", "3M", "3L21"], + safeguard: ["9L24", "8M", "8L24", "7M", "7L9", "6M", "6L9", "5M", "5L13", "4M", "4L18", "3M", "3L21"], secretpower: ["6M", "4M", "3M"], - sing: ["9L28", "8L28", "7L5", "6L5", "5L9", "4L9", "3L11"], + sing: ["9L28", "8L28", "7L5", "6L5", "5L8", "4L9", "3L11"], skyattack: ["7T", "6T", "3T"], sleeptalk: ["9M", "8M", "7M", "6M", "5T", "4M", "3T"], snore: ["8M", "7T", "6T", "5T", "4T", "3T"], @@ -41495,7 +41482,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { swagger: ["7M", "6M", "5M", "4M", "3T"], swift: ["9M", "8M", "4T", "3T"], tailwind: ["9M", "9E", "8E", "7T", "6T", "5T", "4T"], - takedown: ["9M", "9L36", "8L36", "7L23", "6L23", "5L28", "4L28", "3L31"], + takedown: ["9M", "9L36", "8L36", "7L23", "6L23", "5L25", "4L28", "3L31"], terablast: ["9M"], thief: ["9M", "8M", "7M", "6M", "5M", "4M", "3M"], toxic: ["7M", "6M", "5M", "4M", "3M"], @@ -41524,7 +41511,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { bulldoze: ["9M", "8M", "7M", "6M", "5M"], captivate: ["4M"], confide: ["7M", "6M"], - cottonguard: ["9L32", "8L32", "7L34", "6L34", "5L46"], + cottonguard: ["9L32", "8L32", "7L34", "6L34", "5L42"], dazzlinggleam: ["9M", "8M", "7M", "6M"], defog: ["7T"], disarmingvoice: ["9M", "9L1", "8L1", "7L11", "6L11"], @@ -41534,8 +41521,8 @@ export const Learnsets: {[k: string]: LearnsetData} = { dragonbreath: ["9L20", "8L20", "7L1", "6L35", "5L35", "5S2", "4L35", "3L35", "3S0", "3S1"], dragoncheer: ["9M"], dragonclaw: ["9M", "8M", "7M", "6M", "5M", "4M", "3M"], - dragondance: ["9M", "8M", "7L30", "6L30", "5L39", "4L39", "3L40", "3S0"], - dragonpulse: ["9M", "9L0", "8M", "8L0", "7T", "7L40", "6T", "6L40", "5T", "5L62", "4M", "4L54"], + dragondance: ["9M", "8M", "7L30", "6L30", "5L34", "4L39", "3L40", "3S0"], + dragonpulse: ["9M", "9L0", "8M", "8L0", "7T", "7L40", "6T", "6L40", "5T", "5L48", "4M", "4L54"], dreameater: ["7M", "6M", "5M", "4M", "3T"], dualwingbeat: ["9M", "8T"], earthquake: ["9M", "8M", "7M", "6M", "5M", "4M", "3M"], @@ -41550,7 +41537,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { flamethrower: ["9M", "8M", "7M", "6M", "5M", "4M", "3M"], fly: ["9M", "8M", "7M", "6M", "5M", "4M", "3M"], frustration: ["7M", "6M", "5M", "4M", "3M"], - furyattack: ["9L12", "8L12", "7L7", "6L7", "5L13", "4L13", "3L18"], + furyattack: ["9L12", "8L12", "7L7", "6L7", "5L10", "4L13", "3L18"], gigaimpact: ["9M", "8M", "7M", "6M", "5M", "4M"], growl: ["9L1", "8L1", "7L1", "6L1", "5L1", "4L1", "3L1"], haze: ["9M"], @@ -41566,31 +41553,31 @@ export const Learnsets: {[k: string]: LearnsetData} = { incinerate: ["6M", "5M"], irontail: ["8M", "7T", "6T", "5T", "4M", "3M"], mimic: ["3T"], - mist: ["9L1", "8L1", "7L14", "6L14", "5L23", "4L23", "3L28"], + mist: ["9L1", "8L1", "7L14", "6L14", "5L15", "4L23", "3L28"], moonblast: ["9L44", "8L44", "7L52", "6L52"], mudslap: ["4T", "3T"], - naturalgift: ["7L20", "6L20", "5L32", "5S2", "4M", "4L32"], + naturalgift: ["7L20", "6L20", "5L21", "5S2", "4M", "4L32"], ominouswind: ["4T"], outrage: ["9M", "8M", "7T", "6T", "5T", "4T"], peck: ["9L1", "8L1", "7L1", "6L1", "5L1", "4L1", "3L1"], - perishsong: ["9L50", "8L50", "7L46", "6L46", "5L70", "4L62", "3L54"], + perishsong: ["9L50", "8L50", "7L46", "6L46", "5L57", "4L62", "3L54"], playrough: ["9M", "8M"], pluck: ["9L1", "8L1", "7L1", "6L1", "5M", "5L1", "4M", "4L1"], powerswap: ["8M"], protect: ["9M", "8M", "7M", "6M", "6S3", "5M", "4M", "3M"], psychup: ["7M", "6M", "5M", "4M", "3T"], raindance: ["9M", "8M", "7M", "6M", "5M", "4M", "3M"], - refresh: ["7L26", "6L26", "5L54", "4L46", "3L45", "3S0"], + refresh: ["7L26", "6L26", "5L29", "4L46", "3L45", "3S0"], rest: ["9M", "8M", "7M", "6M", "5M", "4M", "3M"], return: ["7M", "6M", "5M", "4M", "3M"], roar: ["9M", "7M", "6M", "5M", "4M", "3M"], rocksmash: ["6M", "5M", "4M", "3M"], roost: ["7M", "6M", "5T", "4M"], round: ["9L16", "8M", "8L16", "7M", "7L17", "6M", "6L17", "5M", "5L18"], - safeguard: ["9L24", "8M", "8L24", "7M", "7L9", "6M", "6L9", "5M", "5L18", "4M", "4L18", "3M", "3L21"], + safeguard: ["9L24", "8M", "8L24", "7M", "7L9", "6M", "6L9", "5M", "5L13", "4M", "4L18", "3M", "3L21"], secretpower: ["6M", "4M", "3M"], sing: ["9L28", "8L28", "7L1", "6L1", "5L1", "4L1", "3L1"], - skyattack: ["9L56", "8L56", "7T", "7L1", "6T", "6L1", "5T", "5L77", "4T", "4L70", "3T", "3L59"], + skyattack: ["9L56", "8L56", "7T", "7L1", "6T", "6L1", "5T", "5L64", "4T", "4L70", "3T", "3L59"], sleeptalk: ["9M", "8M", "7M", "6M", "5T", "4M", "3T"], snore: ["8M", "7T", "6T", "5T", "4T", "3T"], snowscape: ["9M"], @@ -41601,7 +41588,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { swagger: ["7M", "6M", "5M", "4M", "3T"], swift: ["9M", "8M", "4T", "3T"], tailwind: ["9M", "7T", "6T", "5T", "4T"], - takedown: ["9M", "9L38", "8L38", "7L23", "6L23", "5L28", "5S2", "4L28", "3L31", "3S0"], + takedown: ["9M", "9L38", "8L38", "7L23", "6L23", "5L25", "5S2", "4L28", "3L31", "3S0"], terablast: ["9M"], thief: ["9M", "8M", "7M", "6M", "5M", "4M", "3M"], toxic: ["7M", "6M", "5M", "4M", "3M"], @@ -41631,13 +41618,13 @@ export const Learnsets: {[k: string]: LearnsetData} = { bodyslam: ["9M", "3T"], brickbreak: ["9M", "7M", "6M", "5M", "4M", "3M", "3S2"], captivate: ["4M"], - closecombat: ["9M", "9L50", "7L50", "6L47", "5L53", "4L53"], + closecombat: ["9M", "9L50", "7L50", "6L47", "5L47", "4L53"], confide: ["7M", "6M"], counter: ["9L1", "7E", "6E", "5E", "4E", "3T", "3E", "3S2"], - crushclaw: ["9L26", "7L26", "6L22", "5L31", "4L31", "3L31", "3S2"], + crushclaw: ["9L26", "7L26", "6L22", "5L22", "4L31", "3L31", "3S2"], curse: ["9M", "9L1", "7E", "6E", "5E", "4E", "3E"], defensecurl: ["3T"], - detect: ["9L36", "7L36", "6L33", "5L40", "4L40", "3L46"], + detect: ["9L36", "7L36", "6L33", "5L33", "4L40", "3L46"], dig: ["9M", "6M", "5M", "4M", "3M"], disable: ["9L1", "7E", "6E", "5E", "4E"], doubleedge: ["9M", "3T"], @@ -41645,11 +41632,11 @@ export const Learnsets: {[k: string]: LearnsetData} = { doublekick: ["9L1", "7E", "6E", "5E", "4E", "3E"], doubleteam: ["7M", "6M", "5M", "4M", "3M"], dynamicpunch: ["3T"], - embargo: ["7M", "7L33", "6M", "6L19", "5M", "5L27", "4M", "4L27"], + embargo: ["7M", "7L33", "6M", "6L19", "5M", "5L19", "4M", "4L27"], endeavor: ["9M", "7T", "6T", "5T", "4T"], endure: ["9M", "4M", "3T"], facade: ["9M", "7M", "6M", "5M", "4M", "3M"], - falseswipe: ["9M", "9L29", "7M", "7L29", "6M", "6L29", "5M", "5L44", "4M", "4L44", "3L55"], + falseswipe: ["9M", "9L29", "7M", "7L29", "6M", "6L29", "5M", "5L29", "4M", "4L44", "3L55"], feint: ["9L1", "7E", "6E", "5E"], finalgambit: ["9L1", "7E", "6E", "5E"], fireblast: ["9M", "7M", "6M", "5M", "4M", "3M"], @@ -41660,7 +41647,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { focusblast: ["9M", "7M", "6M", "5M", "4M"], focuspunch: ["9M", "7T", "6T", "4M", "3M"], frustration: ["7M", "6M", "5M", "4M", "3M"], - furycutter: ["9L8", "7L8", "6L8", "5L14", "4T", "4L14", "3T", "3L13", "3S0"], + furycutter: ["9L8", "7L8", "6L8", "5L8", "4T", "4L14", "3T", "3L13", "3S0"], furyswipes: ["9L1", "7E", "6E", "5E", "4E"], gigadrain: ["7T", "6T", "5T", "4M", "3M"], gigaimpact: ["9M"], @@ -41693,7 +41680,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { powertrip: ["9L22"], poweruppunch: ["6M"], protect: ["9M", "7M", "6M", "5M", "4M", "3M"], - pursuit: ["7L12", "6L12", "5L22", "4L22", "3L25"], + pursuit: ["7L12", "6L12", "5L12", "4L22", "3L25"], quickattack: ["9L5", "7L5", "6L5", "5L5", "5D", "4L5", "3L7", "3S0", "3S1"], quickguard: ["9L1", "7E", "6E"], raindance: ["9M", "7M", "6M", "5M", "4M", "3M"], @@ -41718,7 +41705,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { shadowball: ["9M", "7M", "6M", "5M", "4M", "3M"], shadowclaw: ["9M", "7M", "6M", "5M", "4M"], shockwave: ["7T", "6T", "4M", "3M"], - slash: ["9L19", "7L19", "6L15", "5L18", "4L18", "3L19"], + slash: ["9L19", "7L19", "6L15", "5L15", "4L18", "3L19"], sleeptalk: ["9M", "7M", "6M", "5T", "4M", "3T"], snore: ["7T", "6T", "5T", "4T", "3T"], solarbeam: ["9M", "7M", "6M", "5M", "4M", "3M"], @@ -41743,7 +41730,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { upperhand: ["9M"], waterpulse: ["7T", "6T", "4M", "3M"], workup: ["7M", "5M"], - xscissor: ["9M", "9L40", "7M", "7L40", "6M", "6L36", "5M", "5L48", "4M", "4L48"], + xscissor: ["9M", "9L40", "7M", "7L40", "6M", "6L36", "5M", "5L36", "4M", "4L48"], zenheadbutt: ["9M"], }, eventData: [ @@ -41760,14 +41747,14 @@ export const Learnsets: {[k: string]: LearnsetData} = { attract: ["7M", "6M", "5M", "4M", "3M"], belch: ["9L41", "7L41", "6L43"], bind: ["7T", "6T", "5T"], - bite: ["9L4", "7L4", "6L4", "5L10", "5D", "4L10", "3L10", "3S0", "3S2"], + bite: ["9L4", "7L4", "6L4", "5L5", "5D", "4L10", "3L10", "3S0", "3S2"], bodyslam: ["9M", "9E", "7E", "6E", "5E", "5D", "4E", "3T", "3E"], breakingswipe: ["9M"], brickbreak: ["9M"], brutalswing: ["7M"], bulldoze: ["9M", "7M", "6M", "5M"], captivate: ["4M"], - coil: ["9L44", "7L44", "6L46", "5L64"], + coil: ["9L44", "7L44", "6L46", "5L49"], confide: ["7M", "6M"], crunch: ["9M", "9L39", "7L39", "6L40", "5L28", "4L28", "3L28", "3S1"], curse: ["9M"], @@ -41789,9 +41776,9 @@ export const Learnsets: {[k: string]: LearnsetData} = { gastroacid: ["9L29", "7T", "7L29", "6T", "6L31", "5T", "5L34"], gigadrain: ["9M", "7T", "6T", "5T", "4M", "3M"], gigaimpact: ["9M"], - glare: ["9L19", "7L19", "6L19", "5L25", "4L25", "3L25", "3S1"], + glare: ["9L19", "7L19", "6L19", "5L23", "4L25", "3L25", "3S1"], gunkshot: ["9M"], - haze: ["9M", "9L34", "7L34", "6L37", "5L43", "4L43", "3L43"], + haze: ["9M", "9L34", "7L34", "6L37", "5L38", "4L43", "3L43"], headbutt: ["4T"], helpinghand: ["9M"], hiddenpower: ["7M", "6M", "5M", "4M", "3M"], @@ -41802,15 +41789,15 @@ export const Learnsets: {[k: string]: LearnsetData} = { irontail: ["7T", "7E", "6T", "6E", "5T", "5E", "4M", "3M"], knockoff: ["9M", "7T", "6T", "5T", "4T"], lashout: ["9M"], - lick: ["9L6", "7L6", "6L7", "5L7", "4L7", "3L7", "3S0", "3S2"], + lick: ["9L6", "7L6", "6L7", "5L1", "4L7", "3L7", "3S0", "3S2"], mimic: ["3T"], mudslap: ["4T", "3T"], naturalgift: ["4M"], - nightslash: ["9E", "7L26", "7E", "6L28", "6E", "5L46", "5E", "4L46", "4E"], + nightslash: ["9E", "7L26", "7E", "6L28", "6E", "5L31", "5E", "4L46", "4E"], payback: ["7M", "6M", "5M", "4M"], - poisonfang: ["9L21", "7L21", "6L22", "5L34", "4L34", "3L34"], - poisonjab: ["9M", "9L31", "7M", "7L31", "6M", "6L34", "5M", "5L52", "4M", "4L52"], - poisontail: ["9M", "9L9", "7L9", "6L10", "5L16", "4L16", "3L16", "3S0", "3S1"], + poisonfang: ["9L21", "7L21", "6L22", "5L27", "4L34", "3L34"], + poisonjab: ["9M", "9L31", "7M", "7L31", "6M", "6L34", "5M", "5L42", "4M", "4L52"], + poisontail: ["9M", "9L9", "7L9", "6L10", "5L12", "4L16", "3L16", "3S0", "3S1"], pounce: ["9M"], protect: ["9M", "7M", "6M", "5M", "4M", "3M"], psychicfangs: ["9M"], @@ -41823,7 +41810,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { rocksmash: ["6M", "5M", "4M", "3M"], round: ["7M", "6M", "5M"], scaryface: ["9M", "9E", "7E", "6E", "5E", "4E"], - screech: ["9L14", "7L14", "6L13", "5L19", "4L19", "3L19", "3S1"], + screech: ["9L14", "7L14", "6L13", "5L16", "4L19", "3L19", "3S1"], secretpower: ["6M", "4M", "3M"], seedbomb: ["9M"], skittersmack: ["9M"], @@ -41839,7 +41826,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { substitute: ["9M", "7M", "6M", "5M", "4M", "3T"], suckerpunch: ["4T"], sunnyday: ["9M", "7M", "6M", "5M", "4M", "3M"], - swagger: ["9L1", "7M", "7L1", "6M", "6L1", "5M", "5L37", "4M", "4L37", "3T", "3L37"], + swagger: ["9L1", "7M", "7L1", "6M", "6L1", "5M", "5L9", "4M", "4L37", "3T", "3L37"], swallow: ["9E", "7E", "6E", "5E", "4E", "3E"], swift: ["4T", "3T"], switcheroo: ["9E", "7E", "6E", "5E", "4E"], @@ -41853,9 +41840,9 @@ export const Learnsets: {[k: string]: LearnsetData} = { toxic: ["9M", "7M", "6M", "5M", "4M", "3M"], trailblaze: ["9M"], venomdrench: ["7L24", "6L25"], - venoshock: ["9M", "9L24", "7M", "7L16", "6M", "6L16", "5M", "5L55"], + venoshock: ["9M", "9L24", "7M", "7L16", "6M", "6L16", "5M", "5L20"], wrap: ["9L1", "7L1", "6L1", "5L1", "4L1", "3L1", "3S0", "3S2"], - wringout: ["7L46", "7E", "6L49", "6E", "5L61", "5E", "4L55"], + wringout: ["7L46", "7E", "6L49", "6E", "5L53", "5E", "4L55"], xscissor: ["9M", "7M", "6M", "5M", "4M"], zenheadbutt: ["9M"], }, @@ -41878,38 +41865,38 @@ export const Learnsets: {[k: string]: LearnsetData} = { chargebeam: ["7M", "6M", "5M", "4M"], confide: ["7M", "6M"], confusion: ["8L1", "7L1", "6L1", "5L1", "5D", "4L1", "3L7", "3S0"], - cosmicpower: ["8M", "8L25", "7L25", "7S2", "6L25", "5L34", "4L34", "3L31"], + cosmicpower: ["8M", "8L25", "7L25", "7S2", "6L25", "5L29", "4L34", "3L31"], defensecurl: ["3T"], doubleedge: ["3T"], doubleteam: ["7M", "6M", "5M", "4M", "3M"], dreameater: ["7M", "6M", "5M", "4M", "3T"], earthpower: ["8M", "7T", "6T", "5T", "5D", "4T"], earthquake: ["8M", "7M", "6M", "5M", "4M", "3M"], - embargo: ["7M", "7L17", "6M", "6L17", "5M", "5L31", "4M", "4L31"], + embargo: ["7M", "7L17", "6M", "6L17", "5M", "5L21", "4M", "4L31"], endure: ["8M", "4M", "3T"], - explosion: ["8L50", "7M", "7L45", "6M", "6L45", "5M", "5L56", "4M", "4L56", "3T", "3L49"], + explosion: ["8L50", "7M", "7L45", "6M", "6L45", "5M", "5L49", "4M", "4L56", "3T", "3L49"], facade: ["8M", "7M", "6M", "5M", "4M", "3M"], flash: ["6M", "5M", "4M", "3M"], frustration: ["7M", "6M", "5M", "4M", "3M"], - futuresight: ["8M", "8L40", "7L41", "6L41", "5L53", "4L53", "3L43"], + futuresight: ["8M", "8L40", "7L41", "6L41", "5L45", "4L53", "3L43"], gigaimpact: ["8M", "7M", "6M", "5M", "4M"], grassknot: ["8M", "7M", "6M", "5M", "4M"], gravity: ["7T", "6T", "5T", "4T"], gyroball: ["8M", "7M", "6M", "5M", "4M"], hail: ["8M"], harden: ["8L1", "7L1", "6L1", "5L1", "4L1", "3L1", "3S0"], - healblock: ["7L33", "6L33", "5L42", "4L42"], + healblock: ["7L33", "6L33", "5L37", "4L42"], helpinghand: ["8M", "7T", "6T", "5T", "4T"], hiddenpower: ["7M", "7S2", "6M", "5M", "4M", "3M"], hyperbeam: ["8M", "7M", "6M", "5M", "4M", "3M"], - hypnosis: ["8L5", "7L5", "6L5", "5L12", "4L12", "3L19"], + hypnosis: ["8L5", "7L5", "6L5", "5L9", "4L12", "3L19"], icebeam: ["8M", "7M", "6M", "5M", "4M", "3M"], icywind: ["8M", "7T", "6T", "5T"], ironhead: ["8M", "7T", "6T", "5T", "4T"], laserfocus: ["7T"], lightscreen: ["8M", "7M", "6M", "5M", "4M", "3M"], magiccoat: ["7T", "6T", "5T", "4T"], - magicroom: ["8M", "8L45", "7T", "7L49", "6T", "6L1", "5T", "5L64"], + magicroom: ["8M", "8L45", "7T", "7L49", "6T", "6L1", "5T", "5L53"], meteorbeam: ["8T"], mimic: ["3T"], moonblast: ["8L1", "7L1", "7S2", "6L1"], @@ -41920,20 +41907,20 @@ export const Learnsets: {[k: string]: LearnsetData} = { powergem: ["8M", "7L1", "7S2"], powerswap: ["8M"], protect: ["8M", "7M", "6M", "5M", "4M", "3M"], - psychic: ["8M", "8L30", "7M", "7L29", "6M", "6L29", "5M", "5L45", "4M", "4L45", "3M", "3L37", "3S1"], + psychic: ["8M", "8L30", "7M", "7L29", "6M", "6L29", "5M", "5L33", "4M", "4L45", "3M", "3L37", "3S1"], psychicterrain: ["8M"], psychup: ["7M", "6M", "5M", "4M", "3T"], psyshock: ["8M", "8L20", "7M", "7L1", "6M", "5M"], - psywave: ["7L13", "6L13", "5L23", "4L23", "3L25"], + psywave: ["7L13", "6L13", "5L17", "4L23", "3L25"], raindance: ["8M", "7M", "6M", "5M", "4M", "3M", "3S1"], recycle: ["7T", "6T", "5T", "4M"], reflect: ["8M", "7M", "6M", "5M", "4M", "3M"], rest: ["8M", "7M", "6M", "5M", "4M", "3M"], return: ["7M", "6M", "5M", "4M", "3M"], rockblast: ["8M"], - rockpolish: ["8L10", "7M", "7L9", "6M", "6L9", "5M", "5L20", "4M", "4L20"], + rockpolish: ["8L10", "7M", "7L9", "6M", "6L9", "5M", "5L13", "4M", "4L20"], rockslide: ["8M", "8L15", "7M", "7L21", "6M", "6L21", "5M", "5L25", "4M", "3T"], - rockthrow: ["8L1", "7L1", "6L1", "5L9", "4L9", "3L13"], + rockthrow: ["8L1", "7L1", "6L1", "5L5", "4L9", "3L13"], rocktomb: ["8M", "7M", "6M", "5M", "4M", "3M", "3S1"], rollout: ["4T", "3T"], round: ["8M", "7M", "6M", "5M"], @@ -41980,19 +41967,19 @@ export const Learnsets: {[k: string]: LearnsetData} = { chargebeam: ["7M", "6M", "5M", "4M"], confide: ["7M", "6M"], confusion: ["8L1", "7L1", "6L1", "5L1", "5D", "4L1", "3L7", "3S0"], - cosmicpower: ["8M", "8L25", "7L25", "7S2", "6L25", "5L34", "4L34", "3L31", "3S1"], + cosmicpower: ["8M", "8L25", "7L25", "7S2", "6L25", "5L29", "4L34", "3L31", "3S1"], defensecurl: ["3T"], doubleedge: ["3T"], doubleteam: ["7M", "6M", "5M", "4M", "3M"], dreameater: ["7M", "6M", "5M", "4M", "3T"], earthpower: ["8M", "7T", "6T", "5T", "4T"], earthquake: ["8M", "7M", "6M", "5M", "4M", "3M"], - embargo: ["7M", "7L17", "6M", "6L17", "5M", "5L31", "4M", "4L31"], + embargo: ["7M", "7L17", "6M", "6L17", "5M", "5L21", "4M", "4L31"], endure: ["8M", "4M", "3T"], - explosion: ["8L50", "7M", "7L45", "6M", "6L45", "5M", "5L56", "4M", "4L56", "3T", "3L49"], + explosion: ["8L50", "7M", "7L45", "6M", "6L45", "5M", "5L49", "4M", "4L56", "3T", "3L49"], facade: ["8M", "7M", "6M", "5M", "4M", "3M"], fireblast: ["8M", "7M", "6M", "5M", "4M", "3M"], - firespin: ["8M", "7L5", "6L5", "5L12", "4L12", "3L19"], + firespin: ["8M", "7L5", "6L5", "5L9", "4L12", "3L19"], flamethrower: ["8M", "7M", "6M", "5M", "4M", "3M"], flareblitz: ["8M", "8L1", "7L1"], flash: ["6M", "5M", "4M", "3M"], @@ -42002,7 +41989,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { gravity: ["7T", "6T", "5T", "4T"], gyroball: ["8M", "7M", "6M", "5M", "4M"], harden: ["8L1", "7L1", "6L1", "5L1", "4L1", "3L1", "3S0"], - healblock: ["7L33", "6L33", "5L42", "4L42"], + healblock: ["7L33", "6L33", "5L37", "4L42"], heatwave: ["8M", "7T", "6T", "5T"], helpinghand: ["8M", "7T", "6T", "5T", "4T"], hiddenpower: ["7M", "7S2", "6M", "5M", "4M", "3M"], @@ -42026,16 +42013,16 @@ export const Learnsets: {[k: string]: LearnsetData} = { psychicterrain: ["8M"], psychup: ["7M", "6M", "5M", "4M", "3T"], psyshock: ["8M", "7M", "6M", "5M"], - psywave: ["7L13", "6L13", "5L23", "4L23", "3L25"], + psywave: ["7L13", "6L13", "5L17", "4L23", "3L25"], raindance: ["8M"], recycle: ["7T", "6T", "5T", "4M"], reflect: ["8M", "7M", "6M", "5M", "4M", "3M"], rest: ["8M", "7M", "6M", "5M", "4M", "3M"], return: ["7M", "6M", "5M", "4M", "3M"], rockblast: ["8M"], - rockpolish: ["8L10", "7M", "7L9", "6M", "6L9", "5M", "5L20", "4M", "4L20"], - rockslide: ["8M", "8L15", "7M", "7L21", "6M", "6L21", "5M", "5L45", "4M", "4L45", "3T", "3L37"], - rockthrow: ["8L1", "7L1", "6L1", "5L9", "4L9", "3L13"], + rockpolish: ["8L10", "7M", "7L9", "6M", "6L9", "5M", "5L13", "4M", "4L20"], + rockslide: ["8M", "8L15", "7M", "7L21", "6M", "6L21", "5M", "5L25", "4M", "4L45", "3T", "3L37"], + rockthrow: ["8L1", "7L1", "6L1", "5L5", "4L9", "3L13"], rocktomb: ["8M", "7M", "6M", "5M", "4M", "3M"], rollout: ["4T", "3T"], round: ["8M", "7M", "6M", "5M"], @@ -42050,7 +42037,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { sleeptalk: ["8M", "7M", "6M", "5T", "4M", "3T"], smackdown: ["7M", "6M", "5M"], snore: ["8M", "7T", "6T", "5T", "4T", "3T"], - solarbeam: ["8M", "8L40", "7M", "7L41", "7S2", "6M", "6L41", "5M", "5L53", "4M", "4L53", "3M", "3L43"], + solarbeam: ["8M", "8L40", "7M", "7L41", "7S2", "6M", "6L41", "5M", "5L45", "4M", "4L53", "3M", "3L43"], stealthrock: ["8M", "7T", "6T", "5T", "4M"], stompingtantrum: ["8M", "7T"], stoneedge: ["8M", "8L35", "7M", "7L37", "7S2", "6M", "6L37", "5M", "5L41", "4M"], @@ -42066,7 +42053,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { trickroom: ["8M", "7M", "6M", "5M", "4M"], weatherball: ["8M"], willowisp: ["8M", "7M", "6M", "5M", "4M"], - wonderroom: ["8M", "8L45", "7T", "7L49", "6T", "6L1", "5T", "5L64"], + wonderroom: ["8M", "8L45", "7T", "7L49", "6T", "6L1", "5T", "5L53"], zenheadbutt: ["8M", "8L20", "7T", "6T", "5T", "5D", "4T"], }, eventData: [ @@ -42443,37 +42430,37 @@ export const Learnsets: {[k: string]: LearnsetData} = { baltoy: { learnset: { allyswitch: ["8M", "7T", "5M"], - ancientpower: ["8L18", "7L19", "6L19", "5L26", "4T", "4L25", "3L25"], + ancientpower: ["8L18", "7L19", "6L19", "5L21", "4T", "4L25", "3L25"], bulldoze: ["8M", "7M", "6M", "5M"], calmmind: ["8M", "7M", "6M", "5M", "4M"], chargebeam: ["7M", "6M", "5M", "4M"], confide: ["7M", "6M"], confusion: ["8L6", "7L1", "6L1", "5L1", "4L1", "3L1"], - cosmicpower: ["8M", "8L24", "7L22", "6L22", "5L37", "4L45", "3L37"], + cosmicpower: ["8M", "8L24", "7L22", "6L22", "5L31", "4L45", "3L37"], dazzlinggleam: ["8M", "7M", "6M"], dig: ["8M", "6M", "5M", "4M", "3M"], doubleedge: ["3T"], doubleteam: ["7M", "6M", "5M", "4M", "3M"], dreameater: ["7M", "6M", "5M", "4M", "3T"], drillrun: ["8M", "7T", "6T", "5T"], - earthpower: ["8M", "8L30", "7T", "7L37", "6T", "6L37", "5T", "5L51", "4T", "4L53"], + earthpower: ["8M", "8L30", "7T", "7L37", "6T", "6L37", "5T", "5L37", "4T", "4L53"], earthquake: ["8M", "7M", "6M", "5M", "4M", "3M"], eerieimpulse: ["8M"], endure: ["8M", "4M", "3T"], expandingforce: ["8T"], - explosion: ["8L42", "7M", "7L46", "6M", "6L46", "5M", "5L60", "4M", "4L71", "3T", "3L45"], - extrasensory: ["8L27", "7L31", "6L28", "5L43"], + explosion: ["8L42", "7M", "7L46", "6M", "6L46", "5M", "5L49", "4M", "4L71", "3T", "3L45"], + extrasensory: ["8L27", "7L31", "6L28", "5L28"], facade: ["8M", "7M", "6M", "5M", "4M", "3M"], flash: ["6M", "5M", "4M", "3M"], frustration: ["7M", "6M", "5M", "4M", "3M"], grassknot: ["8M", "7M", "6M", "5M", "4M"], gravity: ["7T", "6T", "5T", "5D", "4T"], - guardsplit: ["8L36", "7L34", "6L34", "5L48"], + guardsplit: ["8L36", "7L34", "6L34", "5L34"], guardswap: ["8M"], gyroball: ["8M", "7M", "6M", "5M", "4M"], - harden: ["8L1", "7L1", "6L1", "5L4", "4L3", "3L3"], + harden: ["8L1", "7L1", "6L1", "5L1", "4L3", "3L3"], headbutt: ["4T"], - healblock: ["7L10", "6L10", "5L54", "4L61"], + healblock: ["7L10", "6L10", "5L45", "4L61"], hex: ["8M"], hiddenpower: ["7M", "6M", "5M", "4M", "3M"], icebeam: ["8M", "7M", "6M", "5M", "4M", "3M"], @@ -42481,19 +42468,19 @@ export const Learnsets: {[k: string]: LearnsetData} = { lightscreen: ["8M", "7M", "6M", "5M", "4M", "3M"], magiccoat: ["7T", "6T", "5T", "4T"], mimic: ["3T"], - mudslap: ["8L1", "7L7", "6L7", "5L11", "4T", "4L7", "3T", "3L7", "3S0"], + mudslap: ["8L1", "7L7", "6L7", "5L7", "4T", "4L7", "3T", "3L7", "3S0"], naturalgift: ["4M"], - powersplit: ["8L36", "7L34", "6L34", "5L48"], + powersplit: ["8L36", "7L34", "6L34", "5L34"], powerswap: ["8M"], - powertrick: ["8L12", "7L25", "6L17", "5L31", "4L31"], + powertrick: ["8L12", "7L25", "6L17", "5L17", "4L31"], protect: ["8M", "7M", "6M", "5M", "4M", "3M"], - psybeam: ["8L15", "7L16", "6L13", "5L15", "4L11", "3L11", "3S0"], + psybeam: ["8L15", "7L16", "6L13", "5L13", "4L11", "3L11", "3S0"], psychic: ["8M", "7M", "6M", "5M", "4M", "3M"], psychicterrain: ["8M"], psychup: ["7M", "6M", "5M", "4M", "3T"], psyshock: ["8M", "7M", "6M", "5M"], raindance: ["8M", "7M", "6M", "5M", "4M", "3M"], - rapidspin: ["8L3", "7L4", "6L4", "5L7", "5D", "4L5", "3L5"], + rapidspin: ["8L3", "7L4", "6L4", "5L4", "5D", "4L5", "3L5"], recycle: ["7T", "6T", "5T", "4M"], reflect: ["8M", "7M", "6M", "5M", "4M", "3M"], refresh: ["3S0"], @@ -42501,7 +42488,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { return: ["7M", "6M", "5M", "4M", "3M"], rockpolish: ["7M", "6M", "5M", "4M"], rockslide: ["8M", "7M", "6M", "5M", "4M", "3T"], - rocktomb: ["8M", "8L9", "7M", "7L13", "6M", "6L10", "5M", "5L18", "4M", "4L15", "3M", "3L15", "3S0"], + rocktomb: ["8M", "8L9", "7M", "7L13", "6M", "6L10", "5M", "5L10", "4M", "4L15", "3M", "3L15", "3S0"], round: ["8M", "7M", "6M", "5M"], safeguard: ["8M", "7M", "6M", "5M", "4M"], sandstorm: ["8M", "8L39", "7M", "7L40", "6M", "6L40", "5M", "5L34", "4M", "4L37", "3M", "3L31"], @@ -42534,27 +42521,27 @@ export const Learnsets: {[k: string]: LearnsetData} = { claydol: { learnset: { allyswitch: ["8M", "7T", "5M"], - ancientpower: ["8L18", "7L19", "6L19", "5L26", "4T", "4L25", "3L25"], + ancientpower: ["8L18", "7L19", "6L19", "5L21", "4T", "4L25", "3L25"], bodypress: ["8M"], bulldoze: ["8M", "7M", "6M", "5M"], calmmind: ["8M", "7M", "6M", "5M", "4M"], chargebeam: ["7M", "6M", "5M", "4M"], confide: ["7M", "6M"], confusion: ["8L1", "7L1", "6L1", "5L1", "4L1", "3L1"], - cosmicpower: ["8M", "8L24", "7L22", "6L22", "5L47", "4L51", "3L42"], + cosmicpower: ["8M", "8L24", "7L22", "6L22", "5L31", "4L51", "3L42"], dazzlinggleam: ["8M", "7M", "6M"], dig: ["8M", "6M", "5M", "4M", "3M"], doubleedge: ["3T"], doubleteam: ["7M", "6M", "5M", "4M", "3M"], dreameater: ["7M", "6M", "5M", "4M", "3T"], drillrun: ["8M", "7T", "6T", "5T"], - earthpower: ["8M", "8L30", "7T", "7L40", "6T", "6L40", "5T", "5L59", "4T", "4L62"], + earthpower: ["8M", "8L30", "7T", "7L40", "6T", "6L40", "5T", "5L40", "4T", "4L62"], earthquake: ["8M", "7M", "6M", "5M", "4M", "3M"], eerieimpulse: ["8M"], endure: ["8M", "4M", "3T"], expandingforce: ["8T"], - explosion: ["8L48", "7M", "7L58", "6M", "6L58", "5M", "5L72", "4M", "4L86", "3T", "3L55"], - extrasensory: ["8L27", "7L31", "6L28", "5L39"], + explosion: ["8L48", "7M", "7L58", "6M", "6L58", "5M", "5L61", "4M", "4L86", "3T", "3L55"], + extrasensory: ["8L27", "7L31", "6L28", "5L28"], facade: ["8M", "7M", "6M", "5M", "4M", "3M"], flash: ["6M", "5M", "4M", "3M"], frustration: ["7M", "6M", "5M", "4M", "3M"], @@ -42562,12 +42549,12 @@ export const Learnsets: {[k: string]: LearnsetData} = { gigaimpact: ["8M", "7M", "6M", "5M", "4M"], grassknot: ["8M", "7M", "6M", "5M", "4M"], gravity: ["7T", "6T", "5T", "4T"], - guardsplit: ["8L38", "7L34", "6L34", "5L54"], + guardsplit: ["8L38", "7L34", "6L34", "5L34"], guardswap: ["8M"], gyroball: ["8M", "7M", "6M", "5M", "4M"], harden: ["8L1", "7L1", "6L1", "5L1", "4L1", "3L1"], headbutt: ["4T"], - healblock: ["7L10", "6L10", "5L64", "4L73"], + healblock: ["7L10", "6L10", "5L54", "4L73"], hex: ["8M"], hiddenpower: ["7M", "6M", "5M", "4M", "3M"], hyperbeam: ["8M", "8L0", "7M", "7L1", "6M", "6L36", "5M", "5L36", "4M", "4L36", "3M", "3L36"], @@ -42577,14 +42564,14 @@ export const Learnsets: {[k: string]: LearnsetData} = { lightscreen: ["8M", "7M", "6M", "5M", "4M", "3M"], magiccoat: ["7T", "6T", "5T", "4T"], mimic: ["3T"], - mudslap: ["8L1", "7L7", "6L7", "5L11", "4T", "4L7", "3T", "3L7"], + mudslap: ["8L1", "7L7", "6L7", "5L7", "4T", "4L7", "3T", "3L7"], nastyplot: ["8M"], naturalgift: ["4M"], - powersplit: ["8L38", "7L34", "6L34", "5L54"], + powersplit: ["8L38", "7L34", "6L34", "5L34"], powerswap: ["8M"], - powertrick: ["8L12", "7L25", "6L17", "5L31", "4L31"], + powertrick: ["8L12", "7L25", "6L17", "5L17", "4L31"], protect: ["8M", "7M", "6M", "5M", "4M", "3M"], - psybeam: ["8L15", "7L16", "6L13", "5L15", "4L11", "3L11"], + psybeam: ["8L15", "7L16", "6L13", "5L13", "4L11", "3L11"], psychic: ["8M", "7M", "6M", "5M", "4M", "3M"], psychicterrain: ["8M"], psychup: ["7M", "6M", "5M", "4M", "3T"], @@ -42598,7 +42585,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { rockpolish: ["7M", "6M", "5M", "4M"], rockslide: ["8M", "7M", "6M", "5M", "4M", "3T"], rocksmash: ["6M", "5M", "4M", "3M"], - rocktomb: ["8M", "8L9", "7M", "7L13", "6M", "6L10", "5M", "5L18", "4M", "4L15", "3M", "3L15"], + rocktomb: ["8M", "8L9", "7M", "7L13", "6M", "6L10", "5M", "5L10", "4M", "4L15", "3M", "3L15"], round: ["8M", "7M", "6M", "5M"], safeguard: ["8M", "7M", "6M", "5M", "4M"], sandstorm: ["8M", "8L43", "7M", "7L46", "6M", "6L46", "5M", "5L34", "4M", "4L40", "3M", "3L31"], @@ -43107,7 +43094,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { amnesia: ["7E", "6E", "5E", "4E"], attract: ["7M", "6M", "5M", "4M", "3M"], avalanche: ["4M"], - blizzard: ["7M", "7L35", "6M", "6L35", "5M", "5L50", "4M", "3M"], + blizzard: ["7M", "7L35", "6M", "6L35", "5M", "5L40", "4M", "3M"], bodyslam: ["3T"], captivate: ["4M"], clearsmog: ["7E", "6E", "5E"], @@ -43122,18 +43109,18 @@ export const Learnsets: {[k: string]: LearnsetData} = { endure: ["4M", "3T"], energyball: ["7M", "6M", "5M", "4M"], facade: ["7M", "6M", "5M", "4M", "3M"], - fireblast: ["7M", "7L35", "6M", "6L35", "5M", "5L50", "4M", "3M"], + fireblast: ["7M", "7L35", "6M", "6L35", "5M", "5L40", "4M", "3M"], flamethrower: ["7M", "6M", "5M", "4M", "3M"], flash: ["6M", "5M", "4M", "3M"], frustration: ["7M", "6M", "5M", "4M", "3M"], futuresight: ["7E", "6E", "5E", "4E", "3E"], guardswap: ["7E", "6E"], - hail: ["7M", "7L20", "6M", "6L20", "5M", "5L30", "4M", "4L20", "3M", "3L20"], - headbutt: ["7L15", "6L15", "5L20"], + hail: ["7M", "7L20", "6M", "6L20", "5M", "5L20", "4M", "4L20", "3M", "3L20"], + headbutt: ["7L15", "6L15", "5L15"], hex: ["7E", "6E", "5E"], hiddenpower: ["7M", "6M", "5M", "4M", "3M"], hurricane: ["7L45", "6L45"], - hydropump: ["7L35", "6L35", "5L50"], + hydropump: ["7L35", "6L35", "5L40"], icebeam: ["7M", "6M", "5M", "4M", "3M"], icywind: ["7T", "6T", "5T", "4T", "3T"], incinerate: ["6M", "5M"], @@ -43145,7 +43132,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { powdersnow: ["7L10", "6L10", "5L10", "4L10", "3L10"], protect: ["7M", "6M", "5M", "4M", "3M"], psychup: ["7M", "6M", "5M", "4M", "4E", "3T", "3E"], - raindance: ["7M", "7L20", "6M", "6L20", "5M", "5L30", "4M", "4L20", "3M", "3L20"], + raindance: ["7M", "7L20", "6M", "6L20", "5M", "5L20", "4M", "4L20", "3M", "3L20"], reflecttype: ["7E", "6E"], rest: ["7M", "6M", "5M", "4M", "3M"], retaliate: ["6M", "5M"], @@ -43160,7 +43147,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { snore: ["7T", "6T", "5T", "4T", "3T"], solarbeam: ["7M", "6M", "5M", "4M", "3M"], substitute: ["7M", "6M", "5M", "4M", "3T"], - sunnyday: ["7M", "7L20", "6M", "6L20", "5M", "5L30", "4M", "4L20", "3M", "3L20"], + sunnyday: ["7M", "7L20", "6M", "6L20", "5M", "5L20", "4M", "4L20", "3M", "3L20"], swagger: ["7M", "6M", "5M", "4M", "3T"], swift: ["4T", "3T"], tackle: ["7L1", "6L1", "5L1", "4L1", "3L1"], @@ -43172,7 +43159,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { toxic: ["7M", "6M", "5M", "4M", "3M"], watergun: ["7L10", "6L10", "5L10", "4L10", "3L10"], waterpulse: ["7T", "6T", "5D", "4M", "3M"], - weatherball: ["7L25", "6L25", "5L40", "4L30", "3L30"], + weatherball: ["7L25", "6L25", "5L30", "4L30", "3L30"], workup: ["7M", "5M"], }, }, @@ -43310,20 +43297,20 @@ export const Learnsets: {[k: string]: LearnsetData} = { doubleedge: ["3T"], doubleteam: ["7M", "6M", "5M", "4M", "3M"], dreameater: ["7M", "6M", "5M", "4M", "3T"], - embargo: ["7M", "7L34", "6M", "6L34", "5M", "5L43", "4M", "4L38"], + embargo: ["7M", "7L34", "6M", "6L34", "5M", "5L38", "4M", "4L38"], encore: ["9M"], endure: ["9M", "4M", "3T"], facade: ["9M", "7M", "6M", "5M", "4M", "3M"], - feintattack: ["7L19", "6L19", "5L28", "4L28", "3L37", "3S0"], + feintattack: ["7L19", "6L19", "5L22", "4L28", "3L37", "3S0"], flash: ["6M", "5M", "4M", "3M"], foresight: ["7E", "6E", "5E", "4E", "3E"], foulplay: ["9M", "7T", "6T", "5T"], frustration: ["7M", "6M", "5M", "4M", "3M"], - grudge: ["7L46", "6L46", "5L50", "4L46", "3L56"], + grudge: ["7L46", "6L46", "5L46", "4L46", "3L56"], gunkshot: ["9M", "9E", "7T", "7E", "6E", "5E"], headbutt: ["4T"], helpinghand: ["9M"], - hex: ["9M", "9L22", "7L22", "6L22", "5L31"], + hex: ["9M", "9L22", "7L22", "6L22", "5L26"], hiddenpower: ["7M", "6M", "5M", "4M", "3M"], icywind: ["9M", "7T", "6T", "5T", "4T", "3T"], imprison: ["9M", "9E", "7E", "6E", "5E", "4E", "3E"], @@ -43336,7 +43323,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { nastyplot: ["9M"], naturalgift: ["4M"], nightmare: ["3T"], - nightshade: ["9M", "9L7", "7L7", "6L7", "5L8", "5D", "4L8", "3L13"], + nightshade: ["9M", "9L7", "7L7", "6L7", "5L7", "5D", "4L8", "3L13"], ominouswind: ["7E", "6E", "5E", "4T"], painsplit: ["9M", "7T", "6T", "5T", "5D", "4T"], payback: ["7M", "6M", "5M", "4M", "4E"], @@ -43354,19 +43341,19 @@ export const Learnsets: {[k: string]: LearnsetData} = { roleplay: ["9L34", "7T", "6T", "5T", "4T"], round: ["7M", "6M", "5M"], scaryface: ["9M"], - screech: ["9L4", "7L4", "6L4", "5L5", "4L5", "3L8"], + screech: ["9L4", "7L4", "6L4", "5L4", "4L5", "3L8"], secretpower: ["6M", "4M", "3M"], - shadowball: ["9M", "9L30", "7M", "7L30", "6M", "6L30", "5M", "5L35", "4M", "4L31", "3M", "3L44", "3S0"], - shadowsneak: ["9L19", "7L13", "7E", "6L13", "6E", "5L20", "5E", "4L20", "4E"], + shadowball: ["9M", "9L30", "7M", "7L30", "6M", "6L30", "5M", "5L30", "4M", "4L31", "3M", "3L44", "3S0"], + shadowsneak: ["9L19", "7L13", "7E", "6L13", "6E", "5L16", "5E", "4L20", "4E"], shockwave: ["7T", "6T", "4M", "3M"], skillswap: ["9M", "7T", "6T", "5T", "4M", "3M"], skittersmack: ["9M"], sleeptalk: ["9M", "7M", "6M", "5T", "4M", "3T"], - snatch: ["7T", "7L42", "6T", "6L42", "5T", "5L46", "4M", "4L43", "3M", "3L49"], + snatch: ["7T", "7L42", "6T", "6L42", "5T", "5L42", "4M", "4L43", "3M", "3L49"], snore: ["7T", "6T", "3T"], - spite: ["9M", "9L10", "7T", "7L10", "6T", "6L10", "5T", "5L16", "4T", "4L16", "3L25", "3S0"], + spite: ["9M", "9L10", "7T", "7L10", "6T", "6L10", "5T", "5L10", "4T", "4L16", "3L25", "3S0"], substitute: ["9M", "7M", "6M", "5M", "4M", "3T"], - suckerpunch: ["9L38", "7L38", "6L34", "5L38", "4T", "4L35"], + suckerpunch: ["9L38", "7L38", "6L34", "5L34", "4T", "4L35"], sunnyday: ["9M", "7M", "6M", "5M", "4M", "3M"], swagger: ["7M", "6M", "5M", "4M", "3T"], taunt: ["9M", "7M", "6M", "5M", "4M", "3M"], @@ -43378,9 +43365,9 @@ export const Learnsets: {[k: string]: LearnsetData} = { thunderwave: ["9M", "7M", "6M", "5M", "4M", "3T"], torment: ["7M", "6M", "5M", "4M", "3M"], toxic: ["7M", "6M", "5M", "4M", "3M"], - trick: ["9M", "9L42", "7T", "7L50", "6T", "6L50", "5T", "5L55", "4T", "4L50"], + trick: ["9M", "9L42", "7T", "7L50", "6T", "6L50", "5T", "5L50", "4T", "4L50"], trickroom: ["9M", "7M", "6M", "5M", "4M"], - willowisp: ["9M", "9L16", "7M", "7L16", "6M", "6L13", "5M", "5L23", "4M", "4L23", "3L32", "3S0"], + willowisp: ["9M", "9L16", "7M", "7L16", "6M", "6L13", "5M", "5L13", "4M", "4L23", "3L32", "3S0"], }, eventData: [ {generation: 3, level: 45, abilities: ["insomnia"], moves: ["spite", "willowisp", "feintattack", "shadowball"], pokeball: "pokeball"}, @@ -43404,21 +43391,21 @@ export const Learnsets: {[k: string]: LearnsetData} = { doubleedge: ["3T"], doubleteam: ["7M", "6M", "5M", "4M", "3M"], dreameater: ["7M", "6M", "5M", "4M", "3T"], - embargo: ["7M", "7L34", "6M", "6L34", "5M", "5L51", "4M", "4L42"], + embargo: ["7M", "7L34", "6M", "6L34", "5M", "5L40", "4M", "4L42"], encore: ["9M"], endure: ["9M", "4M", "3T"], facade: ["9M", "7M", "6M", "5M", "4M", "3M"], - feintattack: ["7L19", "6L19", "5L28", "5S1", "4L28", "3L39", "3S0"], + feintattack: ["7L19", "6L19", "5L22", "5S1", "4L28", "3L39", "3S0"], flash: ["6M", "5M", "4M", "3M"], fling: ["9M", "7M", "6M", "5M", "4M"], foulplay: ["9M", "7T", "6T", "5T"], frustration: ["7M", "6M", "5M", "4M", "3M"], gigaimpact: ["9M", "7M", "6M", "5M", "4M"], - grudge: ["7L52", "6L52", "5L66", "4L58", "3L64"], + grudge: ["7L52", "6L52", "5L52", "4L58", "3L64"], gunkshot: ["9M", "7T"], headbutt: ["4T"], helpinghand: ["9M", "3S0"], - hex: ["9M", "9L22", "7L22", "6L22", "5L31", "5S1"], + hex: ["9M", "9L22", "7L22", "6L22", "5L26", "5S1"], hiddenpower: ["7M", "6M", "5M", "4M", "3M"], hyperbeam: ["9M", "7M", "6M", "5M", "4M", "3M"], icywind: ["9M", "7T", "6T", "5T", "4T", "3T"], @@ -43453,18 +43440,18 @@ export const Learnsets: {[k: string]: LearnsetData} = { scaryface: ["9M"], screech: ["9L1", "7L1", "6L1", "5L1", "4L1", "3L1"], secretpower: ["6M", "4M", "3M"], - shadowball: ["9M", "9L30", "7M", "7L30", "6M", "6L30", "5M", "5L35", "5S1", "4M", "4L31", "3M", "3L48", "3S0"], + shadowball: ["9M", "9L30", "7M", "7L30", "6M", "6L30", "5M", "5L30", "5S1", "4M", "4L31", "3M", "3L48", "3S0"], shadowclaw: ["9M", "7M", "6M", "5M", "4M"], - shadowsneak: ["9L19", "7L13", "6L13", "5L20", "4L20"], + shadowsneak: ["9L19", "7L13", "6L13", "5L16", "4L20"], shockwave: ["7T", "6T", "4M", "3M"], skillswap: ["9M", "7T", "6T", "5T", "4M", "3M"], skittersmack: ["9M"], sleeptalk: ["9M", "7M", "6M", "5T", "4M", "3T"], - snatch: ["7T", "7L46", "6T", "6L46", "5T", "5L58", "4M", "4L51", "3M", "3L55"], + snatch: ["7T", "7L46", "6T", "6L46", "5T", "5L46", "4M", "4L51", "3M", "3L55"], snore: ["7T", "6T", "3T"], - spite: ["9M", "9L1", "7T", "7L1", "6T", "6L1", "5T", "5L16", "4T", "4L16", "3L25"], + spite: ["9M", "9L1", "7T", "7L1", "6T", "6L1", "5T", "5L10", "4T", "4L16", "3L25"], substitute: ["9M", "7M", "6M", "5M", "4M", "3T"], - suckerpunch: ["9L40", "7L40", "6L34", "5L42", "4T", "4L35"], + suckerpunch: ["9L40", "7L40", "6L34", "5L34", "4T", "4L35"], sunnyday: ["9M", "7M", "6M", "5M", "4M", "3M"], swagger: ["7M", "6M", "5M", "4M", "3T"], swordsdance: ["9M"], @@ -43479,9 +43466,9 @@ export const Learnsets: {[k: string]: LearnsetData} = { torment: ["7M", "6M", "5M", "4M", "3M"], toxic: ["7M", "6M", "5M", "4M", "3M"], trailblaze: ["9M"], - trick: ["9M", "9L46", "7T", "7L58", "6T", "6L58", "5T", "5L75", "4T", "4L66"], + trick: ["9M", "9L46", "7T", "7L58", "6T", "6L58", "5T", "5L58", "4T", "4L66"], trickroom: ["9M", "7M", "6M", "5M", "4M"], - willowisp: ["9M", "9L16", "7M", "7L16", "6M", "6L13", "5M", "5L23", "4M", "4L23", "3L32"], + willowisp: ["9M", "9L16", "7M", "7L16", "6M", "6L13", "5M", "5L13", "4M", "4L23", "3L32"], }, eventData: [ {generation: 3, level: 37, abilities: ["insomnia"], moves: ["helpinghand", "feintattack", "shadowball", "curse"]}, @@ -44095,7 +44082,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { assurance: ["8M", "7E", "6E", "5E", "4E"], attract: ["8M", "7M", "6M", "5M", "4M", "3M"], batonpass: ["8M", "7E", "6E", "5E", "4E", "3E"], - bite: ["8E", "7L16", "6L16", "5L28", "4L28", "3L21", "3S2"], + bite: ["8E", "7L16", "6L16", "5L20", "4L28", "3L21", "3S2"], blizzard: ["8M", "7M", "6M", "5M", "4M", "3M"], bodyslam: ["8M", "3T"], bounce: ["8M", "7T", "6T", "5T", "4T"], @@ -44109,9 +44096,9 @@ export const Learnsets: {[k: string]: LearnsetData} = { curse: ["8E", "7E", "6E", "5E", "4E", "3E"], cut: ["6M", "5M", "4M", "3M"], darkpulse: ["8M", "7M", "6M", "5T", "4M"], - detect: ["8L15", "7L33", "6L1", "5L49", "4L49"], + detect: ["8L15", "7L33", "6L1", "5L44", "4L49"], doubleedge: ["8E", "7E", "6E", "5E", "4E", "3T", "3E"], - doubleteam: ["8L5", "7M", "7L19", "6M", "6L19", "5M", "5L33", "4M", "4L33", "3M", "3L31", "3S3"], + doubleteam: ["8L5", "7M", "7L19", "6M", "6L19", "5M", "5L25", "4M", "4L33", "3M", "3L31", "3S3"], dreameater: ["7M", "6M", "5M", "4M", "3T"], echoedvoice: ["7M", "6M", "5M"], endure: ["8M", "4M", "3T"], @@ -44126,7 +44113,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { foulplay: ["8M", "7T", "6T", "5T"], frustration: ["7M", "6M", "5M", "4M", "3M"], furycutter: ["4T", "3T"], - futuresight: ["8M", "8L50", "7L1", "6L1", "5L41", "4L41", "3L41", "3S3"], + futuresight: ["8M", "8L50", "7L1", "6L1", "5L36", "4L41", "3L41", "3S3"], gigaimpact: ["8M", "7M", "6M", "5M", "4M"], hail: ["8M", "7M", "6M", "5M", "4M", "3M"], headbutt: ["4T"], @@ -44149,16 +44136,16 @@ export const Learnsets: {[k: string]: LearnsetData} = { mudslap: ["4T", "3T"], naturalgift: ["4M"], nightmare: ["3T"], - nightslash: ["8L30", "7L29", "6L29", "5L52", "4L52"], + nightslash: ["8L30", "7L29", "6L29", "5L41", "4L52"], payback: ["8M", "7M", "6M", "5M", "4M"], perishsong: ["8L55", "7L1", "7E", "6L1", "6E", "5L65", "5E", "4L65", "3L46", "3S3"], playrough: ["8M", "7E", "6E"], protect: ["8M", "7M", "6M", "5M", "4M", "3M"], - psychocut: ["8M", "7L37", "6L37", "5L60", "4L60"], + psychocut: ["8M", "7L37", "6L37", "5L49", "4L60"], psychup: ["7M", "6M", "5M", "4M", "3T"], punishment: ["7E", "6E", "5E", "4E"], - pursuit: ["7L10", "6L10", "5L20", "4L20"], - quickattack: ["8L1", "7L1", "6L1", "5L12", "4L12", "3L13"], + pursuit: ["7L10", "6L10", "5L12", "4L20"], + quickattack: ["8L1", "7L1", "6L1", "5L9", "4L12", "3L13"], raindance: ["8M", "7M", "6M", "5M", "4M", "3M"], razorwind: ["7L49", "6L1", "5L17", "4L17", "3L17", "3S2"], rest: ["8M", "7M", "6M", "5M", "4M", "3M"], @@ -44175,7 +44162,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { shadowball: ["8M", "7M", "6M", "5M", "4M", "3M"], shadowclaw: ["8M", "7M", "6M", "5M", "4M"], shockwave: ["7T", "6T", "4M", "3M"], - slash: ["8L25", "7L22", "6L22", "5L36", "4L36", "3L36", "3S3"], + slash: ["8L25", "7L22", "6L22", "5L28", "4L36", "3L36", "3S3"], sleeptalk: ["8M", "7M", "6M", "5T", "4M", "3T"], snarl: ["8M", "7M", "6M", "5M"], snatch: ["7T", "6T", "5T", "4M", "3M"], @@ -45289,7 +45276,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { metang: { learnset: { aerialace: ["9M", "7M", "6M", "5M", "4M", "3M"], - agility: ["9M", "9L66", "8M", "8L66", "7L41", "6L38", "5L44", "4L44", "3L56"], + agility: ["9M", "9L66", "8M", "8L66", "7L41", "6L38", "5L38", "4L44", "3L56"], allyswitch: ["8M", "7T"], bodyslam: ["9M", "8M", "3T"], brickbreak: ["9M", "8M", "7M", "6M", "5M", "4M", "3M"], @@ -45323,7 +45310,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { heavyslam: ["9M"], hiddenpower: ["7M", "6M", "5M", "4M", "3M"], honeclaws: ["9L1", "6M", "5M"], - hyperbeam: ["9M", "9L74", "8M", "8L74", "7M", "7L50", "6M", "6L50", "5M", "5L56", "4M", "4L56", "3M", "3L62"], + hyperbeam: ["9M", "9L74", "8M", "8L74", "7M", "7L50", "6M", "6L50", "5M", "5L50", "4M", "4L56", "3M", "3L62"], icepunch: ["9M", "8M", "7T", "6T", "5T", "4T", "3T"], icywind: ["9M", "8M", "7T", "6T", "5T", "4T", "3T"], irondefense: ["9M", "9L58", "8M", "8L58", "7T", "7L47", "6T", "6L47", "5T", "5L40", "4T", "4L40", "3L44"], @@ -45332,7 +45319,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { magnetrise: ["9L12", "8L12", "7T", "7L1", "6T", "6L1", "5T", "5L1", "4T", "4L1"], metalclaw: ["9M", "9L0", "8L0", "7L1", "6L1", "5L1", "4L1", "3L20", "3S0"], meteorbeam: ["9M", "8T"], - meteormash: ["9L50", "8L50", "7L44", "6L44", "5L48", "4L48", "3L50"], + meteormash: ["9L50", "8L50", "7L44", "6L44", "5L44", "4L48", "3L50"], mimic: ["3T"], miracleeye: ["7L29", "6L26", "5L26"], mudslap: ["4T", "3T"], @@ -45344,7 +45331,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { psychocut: ["8M"], psychup: ["9M", "7M", "6M", "5M", "4M", "3T"], psyshock: ["9M", "8M", "7M", "6M", "5M"], - pursuit: ["7L23", "6L23", "5L28", "4L28", "3L32"], + pursuit: ["7L23", "6L23", "5L23", "4L28", "3L32"], raindance: ["9M", "8M", "7M", "6M", "5M", "4M", "3M"], reflect: ["9M", "8M", "7M", "6M", "5M", "4M", "3M"], refresh: ["3S0"], @@ -45381,7 +45368,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { toxic: ["7M", "6M", "5M", "4M", "3M"], trailblaze: ["9M"], trick: ["9M", "8M", "7T", "6T", "5T", "4T"], - zenheadbutt: ["9M", "9L6", "8M", "8L6", "7T", "7L32", "6T", "6L29", "5T", "5L52", "4T", "4L52"], + zenheadbutt: ["9M", "9L6", "8M", "8L6", "7T", "7L32", "6T", "6L29", "5T", "5L29", "4T", "4L52"], }, eventData: [ {generation: 3, level: 30, moves: ["takedown", "confusion", "metalclaw", "refresh"], pokeball: "pokeball"}, @@ -45390,7 +45377,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { metagross: { learnset: { aerialace: ["9M", "7M", "6M", "5M", "4M", "3M"], - agility: ["9M", "9L72", "8M", "8L72", "7L41", "6L38", "5L44", "5S4", "4L44", "3L66"], + agility: ["9M", "9L72", "8M", "8L72", "7L41", "6L38", "5L38", "5S4", "4L44", "3L66"], allyswitch: ["8M", "7T"], block: ["7T", "6T", "5T", "4T"], bodypress: ["9M", "8M"], @@ -45428,7 +45415,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { heavyslam: ["9M"], hiddenpower: ["7M", "6M", "5M", "4M", "3M"], honeclaws: ["9L1", "6M", "5M"], - hyperbeam: ["9M", "9L82", "8M", "8L82", "7M", "7L60", "6M", "6L60", "5M", "5L71", "5S6", "4M", "4L71", "3M", "3L77"], + hyperbeam: ["9M", "9L82", "8M", "8L82", "7M", "7L60", "6M", "6L60", "5M", "5L62", "5S6", "4M", "4L71", "3M", "3L77"], icepunch: ["9M", "8M", "7T", "7S7", "6T", "5T", "5S2", "4T", "3T"], icywind: ["9M", "8M", "7T", "6T", "5T", "4T", "3T"], irondefense: ["9M", "9L62", "8M", "8L62", "7T", "7L52", "6T", "6L52", "5T", "5L40", "5S4", "4T", "4L40", "3L44"], @@ -45439,7 +45426,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { magnetrise: ["9L12", "8L12", "7T", "7L1", "6T", "6L1", "5T", "5L1", "4T", "4L1"], metalclaw: ["9M", "9L1", "8L1", "7L1", "6L1", "5L1", "4L1", "3L1"], meteorbeam: ["9M", "8T"], - meteormash: ["9L52", "8L52", "7L44", "6L44", "5L53", "5S1", "5S3", "5S5", "5S6", "4L53", "4S0", "3L55"], + meteormash: ["9L52", "8L52", "7L44", "6L44", "5L44", "5S1", "5S3", "5S5", "5S6", "4L53", "4S0", "3L55"], mimic: ["3T"], miracleeye: ["7L29", "6L26", "5L26"], mudslap: ["9M", "4T", "3T"], @@ -45452,7 +45439,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { psychocut: ["8M"], psychup: ["9M", "7M", "6M", "5M", "4M", "3T"], psyshock: ["9M", "8M", "7M", "6M", "5M"], - pursuit: ["7L23", "6L23", "5L28", "4L28", "3L32"], + pursuit: ["7L23", "6L23", "5L23", "4L28", "3L32"], raindance: ["9M", "8M", "7M", "6M", "5M", "4M", "3M"], reflect: ["9M", "8M", "7M", "6M", "5M", "4M", "3M"], rest: ["9M", "8M", "7M", "6M", "5M", "4M", "3M"], @@ -45491,7 +45478,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { toxic: ["7M", "6M", "5M", "4M", "3M"], trailblaze: ["9M"], trick: ["9M", "8M", "7T", "6T", "5T", "4T"], - zenheadbutt: ["9M", "9L6", "8M", "8L6", "7T", "7L32", "6T", "6L29", "5T", "5L62", "5S2", "5S3", "4T", "4L62", "4S0"], + zenheadbutt: ["9M", "9L6", "8M", "8L6", "7T", "7L32", "6T", "6L29", "5T", "5L29", "5S2", "5S3", "4T", "4L62", "4S0"], }, eventData: [ {generation: 4, level: 62, nature: "Brave", moves: ["bulletpunch", "meteormash", "hammerarm", "zenheadbutt"], pokeball: "cherishball"}, @@ -45856,8 +45843,8 @@ export const Learnsets: {[k: string]: LearnsetData} = { futuresight: ["9M", "8M"], gigaimpact: ["9M", "8M", "7M", "6M", "5M", "4M"], grassknot: ["9M", "8M", "7M", "6M", "5M", "4M"], - guardsplit: ["9L65", "8L65", "7L46", "6L1", "5L75"], - healingwish: ["9L70", "8L70", "7L1", "6L1", "5L85", "4L60"], + guardsplit: ["9L65", "9S12", "8L65", "7L46", "6L1", "5L75"], + healingwish: ["9L70", "9S12", "8L70", "7L1", "6L1", "5L85", "4L60"], healpulse: ["9L50", "8L50", "7L16", "6L1", "6S6", "5L65", "5S5"], helpinghand: ["9M", "9L5", "8M", "8L5", "7T", "7L1", "6T", "6L1", "5T", "5L10", "4T", "4L10", "3L10"], hiddenpower: ["7M", "6M", "5M", "4M", "3M"], @@ -45878,7 +45865,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { naturalgift: ["4M"], outrage: ["9M", "8M", "7T", "6T", "5T", "4T"], protect: ["9M", "8M", "7M", "6M", "5M", "4M", "3M"], - psychic: ["9M", "9L60", "8M", "8L60", "7M", "7L51", "7S9", "6M", "6L51", "5M", "5L60", "5S5", "4M", "4L65", "3M", "3L40", "3S0", "3S1", "3S2"], + psychic: ["9M", "9L60", "9S12", "8M", "8L60", "7M", "7L51", "7S9", "6M", "6L51", "5M", "5L60", "5S5", "4M", "4L65", "3M", "3L40", "3S0", "3S1", "3S2"], psychocut: ["8M"], psychoshift: ["8L75", "7L28", "7S7", "7S8", "6L28", "6S6", "5L50", "5S5", "4L50"], psychup: ["9M", "7M", "6M", "5M", "4M", "3T"], @@ -45887,7 +45874,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { raindance: ["9M", "8M", "7M", "6M", "5M", "4M", "3M"], recover: ["9L10", "8L10", "7L32", "6L32", "5L45", "4L45", "3L45", "3S1", "3S2"], reflect: ["9M", "8M", "7M", "6M", "5M", "4M", "3M"], - reflecttype: ["9L55", "8L55", "8S10", "7L36", "6L1", "5L70"], + reflecttype: ["9L55", "9S12", "8L55", "8S10", "7L36", "6L1", "5L70"], refresh: ["7L13", "6L13", "5L30", "4L30", "4S3", "4S4", "3L30", "3S0"], rest: ["9M", "8M", "7M", "6M", "5M", "4M", "3M"], retaliate: ["8M", "6M", "5M"], @@ -45947,6 +45934,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { {generation: 7, level: 100, moves: ["mistball", "psychic", "dracometeor", "tailwind"], pokeball: "cherishball"}, {generation: 8, level: 70, shiny: 1, moves: ["reflecttype", "dragonbreath", "zenheadbutt", "surf"]}, {generation: 8, level: 70, nature: "Bashful", moves: ["mistball", "dragonpulse", "dive", "sweetkiss"], pokeball: "cherishball"}, + {generation: 9, level: 70, moves: ["healingwish", "guardsplit", "psychic", "reflecttype"]}, ], eventOnly: true, }, @@ -45975,11 +45963,11 @@ export const Learnsets: {[k: string]: LearnsetData} = { doubleedge: ["9M", "3T"], doubleteam: ["7M", "6M", "5M", "4M", "3M"], dracometeor: ["9M", "8T", "7T", "7S10", "6T", "5T", "4T"], - dragonbreath: ["9L25", "8L25", "7L20", "7S8", "7S9", "6L20", "6S6", "5L20", "4L20", "4S3", "3L20"], + dragonbreath: ["9L25", "9S12", "8L25", "7L20", "7S8", "7S9", "6L20", "6S6", "5L20", "4L20", "4S3", "3L20"], dragoncheer: ["9M"], dragonclaw: ["9M", "8M", "7M", "6M", "5M", "4M", "3M"], dragondance: ["9M", "9L1", "8M", "8L1", "8S11", "7L7", "6L1", "5L55", "5S5", "4L55", "3L50", "3S1", "3S2"], - dragonpulse: ["9M", "9L45", "8M", "8L45", "8S11", "7T", "7L56", "7S8", "7S9", "6T", "6L1", "6S7", "5T", "5L80", "4M", "4L70"], + dragonpulse: ["9M", "9L45", "9S12", "8M", "8L45", "8S11", "7T", "7L56", "7S8", "7S9", "6T", "6L1", "6S7", "5T", "5L80", "4M", "4L70"], dreameater: ["7M", "6M", "5M", "4M", "3T"], dualwingbeat: ["9M", "8T"], earthquake: ["9M", "8M", "7M", "6M", "5M", "4M", "3M"], @@ -46006,7 +45994,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { lastresort: ["7T", "6T", "5T", "4T"], lightscreen: ["9M", "8M", "7M", "6M", "5M", "4M", "3M"], liquidation: ["9M"], - lusterpurge: ["9L35", "8L35", "7L24", "7S8", "7S9", "7S10", "6L24", "6S6", "6S7", "5L35", "4L35", "4S3", "4S4", "3L35", "3S0", "3S1", "3S2"], + lusterpurge: ["9L35", "9S12", "8L35", "7L24", "7S8", "7S9", "7S10", "6L24", "6S6", "6S7", "5L35", "4L35", "4S3", "4S4", "3L35", "3S0", "3S1", "3S2"], magiccoat: ["7T", "6T", "5T", "4T"], memento: ["9L70", "8L70", "7L1", "6L1", "5L85", "4L60", "3L5"], mimic: ["3T"], @@ -46067,7 +46055,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { weatherball: ["9M"], whirlpool: ["8M", "4M"], wonderroom: ["8M", "7T", "6T", "5T"], - zenheadbutt: ["9M", "9L40", "8M", "8L40", "8S11", "7T", "7L41", "6T", "6L40", "5T", "5L40", "4T", "4L40", "4S4"], + zenheadbutt: ["9M", "9L40", "9S12", "8M", "8L40", "8S11", "7T", "7L41", "6T", "6L40", "5T", "5L40", "4T", "4L40", "4S4"], }, eventData: [ {generation: 3, level: 40, shiny: 1, moves: ["protect", "refresh", "lusterpurge", "psychic"]}, @@ -46082,13 +46070,14 @@ export const Learnsets: {[k: string]: LearnsetData} = { {generation: 7, level: 60, moves: ["lusterpurge", "dragonpulse", "psychoshift", "dragonbreath"], pokeball: "cherishball"}, {generation: 7, level: 100, moves: ["lusterpurge", "psychic", "dracometeor", "tailwind"], pokeball: "cherishball"}, {generation: 8, level: 70, shiny: 1, moves: ["dragondance", "dragonpulse", "zenheadbutt", "aurasphere"]}, + {generation: 9, level: 70, moves: ["lusterpurge", "dragonpulse", "zenheadbutt", "dragonbreath"]}, ], eventOnly: true, }, kyogre: { learnset: { ancientpower: ["9L1", "8L1", "7L1", "6L1", "5L45", "5S3", "4T", "4L15", "4S2", "3L15"], - aquaring: ["9L54", "8L54", "8S11", "7L30", "6L30", "6S5", "5L30", "4L30", "4S2"], + aquaring: ["9L54", "9S12", "8L54", "8S11", "7L30", "6L30", "6S5", "5L30", "4L30", "4S2"], aquatail: ["9L9", "8L9", "7T", "7L15", "6T", "6L15", "5T", "5L65", "4T", "4L65"], avalanche: ["9M", "8M", "4M"], blizzard: ["9M", "8M", "7M", "6M", "5M", "4M", "3M"], @@ -46116,12 +46105,12 @@ export const Learnsets: {[k: string]: LearnsetData} = { hiddenpower: ["7M", "6M", "5M", "4M", "3M"], hydropump: ["9M", "9L72", "8M", "8L72", "7L75", "6L75", "5L90", "4L45", "3L45", "3S0", "3S1"], hyperbeam: ["9M", "8M", "7M", "6M", "5M", "4M", "3M"], - icebeam: ["9M", "9L36", "8M", "8L36", "7M", "7L35", "7S7", "7S8", "7S9", "7S10", "6M", "6L35", "6S5", "6S6", "5M", "5L35", "5S3", "5S4", "4M", "4L35", "4S2", "3M", "3L35", "3S0"], + icebeam: ["9M", "9L36", "9S12", "8M", "8L36", "7M", "7L35", "7S7", "7S8", "7S9", "7S10", "6M", "6L35", "6S5", "6S6", "5M", "5L35", "5S3", "5S4", "4M", "4L35", "4S2", "3M", "3L35", "3S0"], icywind: ["9M", "8M", "7T", "6T", "5T", "4T", "3T"], ironhead: ["9M", "8M", "7T", "6T", "5T", "4T"], liquidation: ["9M", "8M", "7T"], mimic: ["3T"], - muddywater: ["9M", "9L27", "8M", "8L27", "7L60", "7S7", "7S8", "7S9", "6L20", "5L20", "4L20"], + muddywater: ["9M", "9L27", "9S12", "8M", "8L27", "7L60", "7S7", "7S8", "7S9", "6L20", "5L20", "4L20"], mudslap: ["4T", "3T"], naturalgift: ["4M"], originpulse: ["9L1", "8L63", "7L45", "7S7", "7S8", "7S9", "7S10", "6L45", "6S5"], @@ -46139,7 +46128,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { scald: ["8M", "7M", "6M", "5M"], scaryface: ["9M", "9L1", "8M", "8L1", "7L5", "6L5", "5L5", "4L5", "3L5"], secretpower: ["6M", "4M", "3M"], - sheercold: ["9L45", "8L45", "7L65", "6L65", "6S6", "5L75", "5S4", "4L60", "3L60", "3S1"], + sheercold: ["9L45", "9S12", "8L45", "7L65", "6L65", "6S6", "5L75", "5S4", "4L60", "3L60", "3S1"], shockwave: ["7T", "6T", "4M", "3M"], signalbeam: ["7T", "6T", "5T", "4T"], sleeptalk: ["9M", "8M", "7M", "6M", "5T", "4M", "3T"], @@ -46174,6 +46163,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { {generation: 7, level: 60, moves: ["icebeam", "originpulse", "calmmind", "muddywater"], pokeball: "cherishball"}, {generation: 7, level: 100, moves: ["originpulse", "icebeam", "waterspout", "calmmind"], pokeball: "cherishball"}, {generation: 8, level: 70, shiny: 1, moves: ["surf", "bodyslam", "aquaring", "thunder"]}, + {generation: 9, level: 70, moves: ["aquaring", "sheercold", "icebeam", "muddywater"]}, ], eventOnly: true, }, @@ -46201,14 +46191,14 @@ export const Learnsets: {[k: string]: LearnsetData} = { dragontail: ["7M", "6M", "5M"], dynamicpunch: ["3T"], earthpower: ["9M", "9L9", "8M", "8L9", "7T", "7L15", "7S10", "6T", "6L15", "5T", "5L65", "5S4", "4T", "4L65"], - earthquake: ["9M", "9L27", "8M", "8L27", "8S11", "7M", "7L35", "7S7", "7S8", "7S9", "6M", "6L35", "6S5", "5M", "5L35", "5S3", "4M", "4L35", "4S2", "3M", "3L35", "3S0"], + earthquake: ["9M", "9L27", "9S12", "8M", "8L27", "8S11", "7M", "7L35", "7S7", "7S8", "7S9", "6M", "6L35", "6S5", "5M", "5L35", "5S3", "4M", "4L35", "4S2", "3M", "3L35", "3S0"], endure: ["9M", "8M", "4M", "3T"], eruption: ["9L90", "8L90", "7L90", "6L50", "5L50", "5S3", "5S4", "4L50", "4S2", "3L75"], facade: ["9M", "8M", "7M", "6M", "5M", "4M", "3M"], fireblast: ["9M", "9L72", "8M", "8L72", "7M", "7L75", "6M", "6L75", "5M", "5L90", "4M", "4L45", "3M", "3L45", "3S0", "3S1"], firefang: ["9M"], firepunch: ["9M", "8M", "7T", "7S10", "6T", "6S6", "5T", "4T", "3T"], - fissure: ["9L45", "8L45", "7L65", "6L65", "5L75", "4L60", "3L60", "3S1"], + fissure: ["9L45", "9S12", "8L45", "7L65", "6L65", "5L75", "4L60", "3L60", "3S1"], flamethrower: ["9M", "8M", "7M", "6M", "5M", "4M", "3M"], fling: ["9M", "8M", "7M", "6M", "5M", "4M"], focusblast: ["9M", "8M", "7M", "6M", "5M", "4M"], @@ -46216,7 +46206,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { frustration: ["7M", "6M", "5M", "4M", "3M"], furycutter: ["4T", "3T"], gigaimpact: ["9M", "8M", "7M", "6M", "5M", "4M"], - hammerarm: ["9L36", "8L36", "8S11", "7L80", "6L20", "6S6", "5L20", "5S4", "4L20"], + hammerarm: ["9L36", "9S12", "8L36", "8S11", "7L80", "6L20", "6S6", "5L20", "5S4", "4L20"], headbutt: ["4T"], heatcrash: ["9M", "8M"], heatwave: ["9M"], @@ -46242,7 +46232,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { precipiceblades: ["9L1", "8L63", "7L45", "7S7", "7S8", "7S9", "7S10", "6L45", "6S5"], protect: ["9M", "8M", "7M", "6M", "5M", "4M", "3M"], psychup: ["7M", "6M", "5M", "4M", "3T"], - rest: ["9M", "9L54", "8M", "8L54", "7M", "7L30", "6M", "6L30", "6S5", "5M", "5L30", "4M", "4L30", "4S2", "3M", "3L50", "3S1"], + rest: ["9M", "9L54", "9S12", "8M", "8L54", "7M", "7L30", "6M", "6L30", "6S5", "5M", "5L30", "4M", "4L30", "4S2", "3M", "3L50", "3S1"], return: ["7M", "6M", "5M", "4M", "3M"], roar: ["9M", "7M", "6M", "5M", "4M", "3M"], rockblast: ["9M"], @@ -46301,6 +46291,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { {generation: 7, level: 60, moves: ["earthquake", "precipiceblades", "bulkup", "solarbeam"], pokeball: "cherishball"}, {generation: 7, level: 100, moves: ["precipiceblades", "earthpower", "firepunch", "swordsdance"], pokeball: "cherishball"}, {generation: 8, level: 70, shiny: 1, moves: ["earthquake", "scaryface", "lavaplume", "hammerarm"]}, + {generation: 9, level: 70, moves: ["rest", "fissure", "hammerarm", "earthquake"]}, ], eventOnly: true, }, @@ -46332,7 +46323,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { dragoncheer: ["9M"], dragonclaw: ["9M", "8M", "7M", "6M", "6S6", "5M", "4M", "4L20", "3M", "3L20"], dragondance: ["9M", "9L18", "8M", "8L18", "7L60", "7S8", "6L60", "6S4", "6S6", "5L60", "5S2", "4L30", "3L30"], - dragonpulse: ["9M", "9L36", "8M", "8L36", "7T", "7L50", "7S8", "6T", "6L50", "6S4", "6S5", "5T", "5L90", "5S2", "5S3", "4M", "4L75"], + dragonpulse: ["9M", "9L36", "9S10", "8M", "8L36", "7T", "7L50", "7S8", "6T", "6L50", "6S4", "6S5", "5T", "5L90", "5S2", "5S3", "4M", "4L75"], dragontail: ["9M", "7M", "6M", "5M"], earthpower: ["9M", "8M", "7T", "6T", "5T", "4T"], earthquake: ["9M", "8M", "7M", "6M", "5M", "4M", "3M"], @@ -46344,7 +46335,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { fireblast: ["9M", "8M", "7M", "6M", "5M", "4M", "3M"], flamethrower: ["9M", "8M", "7M", "6M", "5M", "4M", "3M"], fling: ["9M", "8M", "7M", "6M", "5M", "4M"], - fly: ["9M", "9L63", "8M", "8L63", "7M", "7L65", "6M", "6L65", "6S7", "5M", "5L65", "4M", "4L45", "3M", "3L45", "3S0"], + fly: ["9M", "9L63", "9S10", "8M", "8L63", "7M", "7L65", "6M", "6L65", "6S7", "5M", "5L65", "4M", "4L45", "3M", "3L45", "3S0"], focusblast: ["9M", "8M", "7M", "6M", "5M", "4M"], frustration: ["7M", "6M", "5M", "4M", "3M"], furycutter: ["4T", "3T"], @@ -46357,7 +46348,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { hurricane: ["9M", "9L72", "8M", "8L72"], hydropump: ["9M", "8M"], hyperbeam: ["9M", "9L90", "8M", "8L90", "7M", "7L90", "6M", "6L80", "5M", "5L80", "5S3", "4M", "4L65", "3M", "3L75"], - hypervoice: ["9M", "9L45", "8M", "8L45", "7T", "7L75", "6T", "6L20", "5T", "5L20", "4L20"], + hypervoice: ["9M", "9L45", "9S10", "8M", "8L45", "7T", "7L75", "6T", "6L20", "5T", "5L20", "4L20"], icebeam: ["9M", "8M", "7M", "6M", "5M", "4M", "3M"], icywind: ["9M", "8M", "7T", "6T", "5T", "4T", "3T"], incinerate: ["6M", "5M"], @@ -46372,7 +46363,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { protect: ["9M", "8M", "7M", "6M", "5M", "4M", "3M"], psychup: ["7M", "6M", "5M", "4M", "3T"], raindance: ["9M", "8M", "7M", "6M", "5M", "4M", "3M"], - rest: ["9M", "9L54", "8M", "8L54", "7M", "7L35", "7S8", "6M", "6L30", "5M", "5L30", "4M", "4L30", "4S1", "3M", "3L50", "3S0"], + rest: ["9M", "9L54", "9S10", "8M", "8L54", "7M", "7L35", "7S8", "6M", "6L30", "5M", "5L30", "4M", "4L30", "4S1", "3M", "3L50", "3S0"], return: ["7M", "6M", "5M", "4M", "3M"], roar: ["9M", "7M", "6M", "5M", "4M", "3M"], rockslide: ["9M", "8M", "7M", "6M", "5M", "4M", "3T"], @@ -46425,6 +46416,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { {generation: 6, level: 100, shiny: true, moves: ["dragonascent", "dracometeor", "fly", "celebrate"], pokeball: "cherishball"}, {generation: 7, level: 60, shiny: 1, moves: ["rest", "extremespeed", "dragonpulse", "dragondance"]}, {generation: 8, level: 70, shiny: 1, moves: ["dragonascent", "brutalswing", "extremespeed", "twister"]}, + {generation: 9, level: 70, moves: ["fly", "rest", "hypervoice", "dragonpulse"]}, ], eventOnly: true, }, @@ -46442,14 +46434,14 @@ export const Learnsets: {[k: string]: LearnsetData} = { charm: ["9M", "8M"], confide: ["7M", "6M"], confuseray: ["9M"], - confusion: ["9L1", "8L1", "7L1", "6L1", "6S18", "6S20", "6S21", "5L1", "4L1", "4S11", "4S12", "3L1", "3S0", "3S1", "3S2", "3S3", "3S4", "3S5", "3S6", "3S7", "3S8", "3S9"], - cosmicpower: ["9L84", "8M", "8L84", "7L60", "6L60", "6S19", "5L60", "5S15", "4L60", "3L45"], + confusion: ["9L1", "8L1", "7L1", "6L1", "6S10", "6S12", "6S13", "5L1", "4L1", "4S3", "4S4", "3L1", "3S0", "3S1"], + cosmicpower: ["9L84", "8M", "8L84", "7L60", "6L60", "6S11", "5L60", "5S7", "4L60", "3L45"], dazzlinggleam: ["9M", "8M", "7M", "6M"], defensecurl: ["3T"], doomdesire: ["9L98", "8L98", "7L70", "6L70", "5L70", "4L70", "3L50"], doubleedge: ["9M", "9L77", "8L77", "7L40", "6L40", "5L40", "4L40", "3T", "3L35"], doubleteam: ["7M", "6M", "5M", "4M", "3M"], - dracometeor: ["5S14", "4S12"], + dracometeor: ["5S6", "4S4"], drainpunch: ["9M", "8M", "7T", "6T", "5T", "4M"], dreameater: ["7M", "6M", "5M", "4M", "3T"], dynamicpunch: ["3T"], @@ -46463,17 +46455,17 @@ export const Learnsets: {[k: string]: LearnsetData} = { flash: ["6M", "5M", "4M", "3M"], flashcannon: ["9M", "8M", "7M", "6M", "5M", "4M"], fling: ["9M", "8M", "7M", "6M", "5M", "4M"], - followme: ["5S14"], + followme: ["5S6"], frustration: ["7M", "6M", "5M", "4M", "3M"], futuresight: ["9M", "9L70", "8M", "8L70", "7L55", "6L55", "5L55", "4L55", "3L40"], gigaimpact: ["9M", "8M", "7M", "6M", "5M", "4M"], grassknot: ["9M", "8M", "7M", "6M", "5M", "4M"], gravity: ["9M", "9L35", "8L35", "7T", "7L45", "6T", "6L45", "5T", "5L45", "4T", "4L45"], - happyhour: ["6S20"], + happyhour: ["6S12"], headbutt: ["4T"], - healingwish: ["9L56", "8L56", "7L50", "7S22", "6L50", "6S17", "5L50", "5S13", "5S15", "5S16", "4L50"], - heartstamp: ["6S19"], - helpinghand: ["9M", "8M", "8L14", "7T", "7L15", "6T", "6L15", "6S18", "5T", "5L15", "4T", "4L15", "3L15", "3S10"], + healingwish: ["9L56", "8L56", "7L50", "7S14", "6L50", "6S9", "5L50", "5S5", "5S7", "5S8", "4L50"], + heartstamp: ["6S11"], + helpinghand: ["9M", "8M", "8L14", "7T", "7L15", "6T", "6L15", "6S10", "5T", "5L15", "4T", "4L15", "3L15", "3S2"], hiddenpower: ["7M", "6M", "5M", "4M", "3M"], hyperbeam: ["9M", "8M", "7M", "6M", "5M", "4M", "3M"], icepunch: ["9M", "8M", "7T", "6T", "5T", "4T", "3T"], @@ -46491,27 +46483,27 @@ export const Learnsets: {[k: string]: LearnsetData} = { megapunch: ["8M"], metalsound: ["9M"], meteorbeam: ["9M", "8T"], - meteormash: ["9L49", "8L49", "8S23", "5S13", "5S14", "5S15"], + meteormash: ["9L49", "8L49", "8S15", "5S5", "5S6", "5S7"], metronome: ["9M", "8M", "3T"], mimic: ["3T"], - moonblast: ["6S17"], + moonblast: ["6S9"], mudslap: ["9M", "4T", "3T"], naturalgift: ["4M"], nightmare: ["3T"], - playrough: ["9M", "8M", "6S19"], + playrough: ["9M", "8M", "6S11"], poweruppunch: ["6M"], protect: ["9M", "8M", "7M", "6M", "5M", "4M", "3M"], psybeam: ["9M"], - psychic: ["9M", "9L42", "8M", "8L42", "8S23", "7M", "7L20", "6M", "6L20", "5M", "5L20", "5S13", "4M", "4L20", "3M", "3L20", "3S10"], + psychic: ["9M", "9L42", "8M", "8L42", "8S15", "7M", "7L20", "6M", "6L20", "5M", "5L20", "5S5", "4M", "4L20", "3M", "3L20", "3S2"], psychicnoise: ["9M"], psychup: ["9M", "7M", "6M", "5M", "4M", "3T"], psyshock: ["9M", "8M", "7M", "6M", "5M"], raindance: ["9M", "8M", "7M", "6M", "5M", "4M", "3M"], recycle: ["7T", "6T", "5T", "4M"], reflect: ["9M", "8M", "7M", "6M", "5M", "4M", "3M"], - refresh: ["7L25", "6L25", "5L25", "4L25", "3L25", "3S10"], - rest: ["9M", "9L63", "8M", "8L63", "8S23", "7M", "7L30", "7S22", "6M", "6L5", "6S21", "5M", "5L5", "4M", "4L5", "4S11", "4S12", "3M", "3L5", "3S0", "3S1", "3S2", "3S3", "3S4", "3S5", "3S6", "3S7", "3S8", "3S9", "3S10"], - return: ["7M", "6M", "6S18", "5M", "5S16", "4M", "3M"], + refresh: ["7L25", "6L25", "5L25", "4L25", "3L25", "3S2"], + rest: ["9M", "9L63", "8M", "8L63", "8S15", "7M", "7L30", "7S14", "6M", "6L5", "6S13", "5M", "5L5", "4M", "4L5", "4S3", "4S4", "3M", "3L5", "3S0", "3S1", "3S2"], + return: ["7M", "6M", "6S10", "5M", "5S8", "4M", "3M"], round: ["8M", "7M", "6M", "5M"], safeguard: ["8M", "7M", "6M", "5M", "4M", "3M"], sandstorm: ["9M", "8M", "7M", "6M", "5M", "4M", "3M"], @@ -46528,7 +46520,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { substitute: ["9M", "8M", "7M", "6M", "5M", "4M", "3T"], sunnyday: ["9M", "8M", "7M", "6M", "5M", "4M", "3M"], swagger: ["7M", "6M", "5M", "4M", "3T"], - swift: ["9M", "9L7", "8M", "8L7", "7L10", "7S22", "6L10", "6S17", "6S20", "5L10", "5S13", "5S16", "4T", "4L10", "3T", "3L10"], + swift: ["9M", "9L7", "8M", "8L7", "7L10", "7S14", "6L10", "6S9", "6S12", "5L10", "5S5", "5S8", "4T", "4L10", "3T", "3L10"], telekinesis: ["7T", "5M"], terablast: ["9M"], thunder: ["9M", "8M", "7M", "6M", "5M", "4M", "3M"], @@ -46541,20 +46533,12 @@ export const Learnsets: {[k: string]: LearnsetData} = { uproar: ["8M", "7T", "6T", "5T", "4T"], uturn: ["9M", "8M", "7M", "6M", "5M", "4M"], waterpulse: ["9M", "7T", "6T", "4M", "3M"], - wish: ["9L1", "8L1", "8S23", "7L1", "7S22", "6L1", "6S17", "6S18", "6S19", "6S20", "6S21", "5L1", "5S14", "5S15", "5S16", "4L1", "4S11", "4S12", "3L1", "3S0", "3S1", "3S2", "3S3", "3S4", "3S5", "3S6", "3S7", "3S8", "3S9"], + wish: ["9L1", "8L1", "8S15", "7L1", "7S14", "6L1", "6S9", "6S10", "6S11", "6S12", "6S13", "5L1", "5S6", "5S7", "5S8", "4L1", "4S3", "4S4", "3L1", "3S0", "3S1"], zenheadbutt: ["9M", "9L28", "8M", "8L28", "7T", "7L35", "6T", "6L35", "5T", "5L35", "4T", "4L35"], }, eventData: [ {generation: 3, level: 5, moves: ["wish", "confusion", "rest"], pokeball: "pokeball"}, - {generation: 3, level: 5, shiny: true, nature: "Bashful", ivs: {hp: 24, atk: 3, def: 30, spa: 12, spd: 16, spe: 11}, moves: ["wish", "confusion", "rest"], pokeball: "pokeball"}, - {generation: 3, level: 5, shiny: true, nature: "Careful", ivs: {hp: 10, atk: 0, def: 10, spa: 10, spd: 26, spe: 12}, moves: ["wish", "confusion", "rest"], pokeball: "pokeball"}, - {generation: 3, level: 5, shiny: true, nature: "Docile", ivs: {hp: 19, atk: 7, def: 10, spa: 19, spd: 10, spe: 16}, moves: ["wish", "confusion", "rest"], pokeball: "pokeball"}, - {generation: 3, level: 5, shiny: true, nature: "Hasty", ivs: {hp: 3, atk: 12, def: 12, spa: 7, spd: 11, spe: 9}, moves: ["wish", "confusion", "rest"], pokeball: "pokeball"}, - {generation: 3, level: 5, shiny: true, nature: "Jolly", ivs: {hp: 11, atk: 8, def: 6, spa: 14, spd: 5, spe: 20}, moves: ["wish", "confusion", "rest"], pokeball: "pokeball"}, - {generation: 3, level: 5, shiny: true, nature: "Lonely", ivs: {hp: 31, atk: 23, def: 26, spa: 29, spd: 18, spe: 5}, moves: ["wish", "confusion", "rest"], pokeball: "pokeball"}, - {generation: 3, level: 5, shiny: true, nature: "Naughty", ivs: {hp: 21, atk: 31, def: 31, spa: 18, spd: 24, spe: 19}, moves: ["wish", "confusion", "rest"], pokeball: "pokeball"}, - {generation: 3, level: 5, shiny: true, nature: "Serious", ivs: {hp: 29, atk: 10, def: 31, spa: 25, spd: 23, spe: 21}, moves: ["wish", "confusion", "rest"], pokeball: "pokeball"}, - {generation: 3, level: 5, shiny: true, nature: "Timid", ivs: {hp: 15, atk: 28, def: 29, spa: 3, spd: 0, spe: 7}, moves: ["wish", "confusion", "rest"], pokeball: "pokeball"}, + {generation: 3, level: 5, shiny: 1, moves: ["wish", "confusion", "rest"], pokeball: "pokeball"}, {generation: 3, level: 30, moves: ["helpinghand", "psychic", "refresh", "rest"], pokeball: "pokeball"}, {generation: 4, level: 5, moves: ["wish", "confusion", "rest"], pokeball: "cherishball"}, {generation: 4, level: 5, moves: ["wish", "confusion", "rest", "dracometeor"], pokeball: "cherishball"}, @@ -49009,7 +48993,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { bugbuzz: ["9M", "8M"], captivate: ["7L41", "6L41", "5L33", "4M", "4L33"], confide: ["7M", "6M"], - confuseray: ["9M", "9L1", "8L1", "7L1", "6L1", "5L7", "4L7"], + confuseray: ["9M", "9L1", "8L1", "7L1", "6L1", "5L1", "4L7"], crosspoison: ["8M"], cut: ["6M", "5M", "4M"], defendorder: ["9L40", "8L40", "7L17", "6L17", "5L13", "4L13"], @@ -49024,8 +49008,8 @@ export const Learnsets: {[k: string]: LearnsetData} = { flash: ["6M", "5M", "4M"], fling: ["9M", "8M", "7M", "6M", "5M", "4M"], frustration: ["7M", "6M", "5M", "4M"], - furycutter: ["9L4", "8L4", "7L5", "6L5", "5L9", "4T", "4L9"], - furyswipes: ["9L16", "8L16", "7L13", "6L13", "5L19", "4L19"], + furycutter: ["9L4", "8L4", "7L5", "6L5", "5L5", "4T", "4L9"], + furyswipes: ["9L16", "8L16", "7L13", "6L13", "5L13", "4L19"], gigaimpact: ["9M", "8M", "7M", "6M", "5M", "4M"], gust: ["9L1", "8L1", "7L1", "6L1", "5L1", "4L1"], healorder: ["7L29", "6L29", "5L25", "4L25"], @@ -49042,13 +49026,13 @@ export const Learnsets: {[k: string]: LearnsetData} = { naturalgift: ["4M"], ominouswind: ["4T"], pinmissile: ["8M"], - poisonsting: ["9L1", "8L1", "7L1", "6L1", "5L3", "4L3"], + poisonsting: ["9L1", "8L1", "7L1", "6L1", "5L1", "4L3"], pollenpuff: ["9M"], pounce: ["9M"], powergem: ["9M", "9L32", "8M", "8L32", "7L25", "6L25", "5L21", "4L21"], protect: ["9M", "8M", "7M", "6M", "5M", "4M"], psychicnoise: ["9M"], - pursuit: ["7L9", "6L9", "5L15", "4L15"], + pursuit: ["7L9", "6L9", "5L9", "4L15"], quash: ["7M", "6M", "5M"], raindance: ["9M", "8M", "7M", "6M", "5M", "4M"], rest: ["9M", "8M", "7M", "6M", "5M", "4M"], @@ -49063,7 +49047,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { signalbeam: ["7T", "6T", "5T", "4T"], silverwind: ["4M"], skittersmack: ["9M"], - slash: ["9L0", "8L0", "7L1", "6L21", "5L31", "4L31"], + slash: ["9L0", "8L0", "7L1", "6L21", "5L21", "4L31"], sleeptalk: ["9M", "8M", "7M", "6M", "5T", "4M"], sludgebomb: ["9M", "8M", "7M", "6M", "5M", "4M"], snore: ["8M", "7T", "6T", "5T", "4T"], @@ -49191,7 +49175,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { agility: ["9M", "9L41", "7L41", "6L41", "5L28", "4L28"], aquajet: ["9L24", "7L24", "6L24", "5L21", "4L21"], aquaring: ["9E", "7E", "6E", "5E"], - aquatail: ["9L38", "7T", "7L38", "7E", "6T", "6L38", "6E", "5T", "5L55", "5E"], + aquatail: ["9L38", "7T", "7L38", "7E", "6T", "6L38", "6E", "5T", "5L38", "5E"], attract: ["7M", "6M", "5M", "4M"], batonpass: ["9M", "9E", "7E", "6E", "5E", "4E"], bite: ["9L18"], @@ -49241,7 +49225,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { pursuit: ["7L18", "6L18", "5L10", "4L10"], quickattack: ["9L11", "7L11", "6L11", "5L3", "4L3"], raindance: ["9M", "7M", "6M", "5M", "4M"], - razorwind: ["7L35", "6L35", "5L45", "4L45"], + razorwind: ["7L35", "6L35", "5L35", "4L45"], rest: ["9M", "7M", "6M", "5M", "4M"], return: ["7M", "6M", "5M", "4M"], roar: ["9M"], @@ -49273,14 +49257,14 @@ export const Learnsets: {[k: string]: LearnsetData} = { waterpulse: ["9M", "7T", "6T", "5D", "4M"], watersport: ["7L7", "6L7", "5L1", "5D", "4L1"], wavecrash: ["9L49"], - whirlpool: ["9M", "9L31", "7L31", "6L31", "5L36", "4M", "4L36"], + whirlpool: ["9M", "9L31", "7L31", "6L31", "5L31", "4M", "4L36"], }, }, floatzel: { learnset: { agility: ["9M", "9L51", "7L51", "6L51", "5L29", "4L29"], aquajet: ["9L24", "7L24", "6L24", "5L21", "4L21"], - aquatail: ["9L46", "7T", "7L46", "6T", "6L46", "5T", "5L62", "4T"], + aquatail: ["9L46", "7T", "7L46", "6T", "6L46", "5T", "5L46", "4T"], attract: ["7M", "6M", "5M", "4M"], batonpass: ["9M"], bite: ["9L18"], @@ -49292,7 +49276,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { captivate: ["4M"], chillingwater: ["9M"], confide: ["7M", "6M"], - crunch: ["9M", "9L1", "7L1", "6L1", "5L26", "4L26"], + crunch: ["9M", "9L1", "7L1", "6L1", "5L1", "4L26"], dig: ["9M", "6M", "5M", "4M"], dive: ["6M", "5M", "4T"], doubleedge: ["9M"], @@ -49333,7 +49317,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { pursuit: ["7L18", "6L18", "5L10", "4L10"], quickattack: ["9L1", "7L1", "6L1", "5L1", "4L1"], raindance: ["9M", "7M", "6M", "5M", "4M"], - razorwind: ["7L41", "6L41", "5L50", "4L50"], + razorwind: ["7L41", "6L41", "5L41", "4L50"], rest: ["9M", "7M", "6M", "5M", "4M"], return: ["7M", "6M", "5M", "4M"], roar: ["9M", "7M", "6M", "5M", "4M"], @@ -49364,7 +49348,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { waterpulse: ["9M", "7T", "6T", "4M"], watersport: ["7L1", "6L1", "5L1", "4L1"], wavecrash: ["9L62"], - whirlpool: ["9M", "9L35", "7L35", "6L35", "5L39", "4M", "4L39"], + whirlpool: ["9M", "9L35", "7L35", "6L35", "5L35", "4M", "4L39"], }, encounters: [ {generation: 4, level: 22}, @@ -49686,7 +49670,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { aircutter: ["9M", "4T"], allyswitch: ["8M", "7T"], amnesia: ["9M", "8M", "7L40", "6L40", "5L40"], - astonish: ["9L1", "8L1", "7L4", "6L4", "5L6", "4L6"], + astonish: ["9L1", "8L1", "7L4", "6L4", "5L4", "4L6"], attract: ["8M", "7M", "6M", "5M", "4M"], batonpass: ["9M", "9L36", "8M", "8L36", "7L44", "6L44", "5L38", "4L33"], bind: ["7T", "6T", "5T"], @@ -49711,9 +49695,9 @@ export const Learnsets: {[k: string]: LearnsetData} = { facade: ["9M", "8M", "7M", "6M", "5M", "4M"], flash: ["6M", "5M", "4M"], fly: ["9M"], - focusenergy: ["9L8", "8M", "8L8", "7L13", "6L13", "5L14", "4L14"], + focusenergy: ["9L8", "8M", "8L8", "7L13", "6L13", "5L13", "4L14"], frustration: ["7M", "6M", "5M", "4M"], - gust: ["9L4", "8L4", "7L8", "6L8", "5L11", "4L11"], + gust: ["9L4", "8L4", "7L8", "6L8", "5L8", "4L11"], gyroball: ["9M", "8M", "7M", "6M", "5M", "4M"], haze: ["9M", "9E", "8E", "7E", "6E", "5E", "4E"], helpinghand: ["9M"], @@ -49729,9 +49713,9 @@ export const Learnsets: {[k: string]: LearnsetData} = { mudslap: ["4T"], naturalgift: ["4M"], nightshade: ["9M"], - ominouswind: ["7L20", "6L20", "5L33", "4T", "4L30"], + ominouswind: ["7L20", "6L20", "5L20", "4T", "4L30"], painsplit: ["9M", "7T", "6T", "5T", "4T"], - payback: ["9L12", "8M", "8L12", "7M", "7L16", "6M", "6L16", "5M", "5L17", "4M", "4L17"], + payback: ["9L12", "8M", "8L12", "7M", "7L16", "6M", "6L16", "5M", "5L16", "4M", "4L17"], phantomforce: ["9M"], protect: ["9M", "8M", "7M", "6M", "5M", "4M"], psybeam: ["9M"], @@ -49745,7 +49729,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { round: ["8M", "7M", "6M", "5M"], secretpower: ["6M", "4M"], selfdestruct: ["9L29", "8M", "8L29"], - shadowball: ["9M", "9L20", "8M", "8L20", "7M", "7L36", "6M", "6L36", "5M", "5L43", "4M", "4L38"], + shadowball: ["9M", "9L20", "8M", "8L20", "7M", "7L36", "6M", "6L36", "5M", "5L36", "4M", "4L38"], shockwave: ["7T", "6T", "4M"], silverwind: ["4M"], skillswap: ["9M", "8M", "7T", "6T", "5T", "5D", "4M"], @@ -49753,7 +49737,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { snore: ["8M", "7T", "6T", "5T", "4T"], spite: ["9M", "7T", "6T", "5T", "4T"], spitup: ["9L24", "8L24", "7L32", "6L32", "5L30", "4L27"], - stockpile: ["9L24", "8L24", "7L25", "6L25", "5L27", "4L22"], + stockpile: ["9L24", "8L24", "7L25", "6L25", "5L25", "4L22"], storedpower: ["9M"], substitute: ["9M", "8M", "7M", "6M", "5M", "4M"], suckerpunch: ["4T"], @@ -49808,7 +49792,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { flash: ["6M", "5M", "4M"], fling: ["9M"], fly: ["9M", "8M", "7M", "6M", "5M", "4M"], - focusenergy: ["9L1", "8M", "8L1", "7L13", "6L13", "5L14", "4L14"], + focusenergy: ["9L1", "8M", "8L1", "7L13", "6L13", "5L13", "4L14"], frustration: ["7M", "6M", "5M", "4M"], gigaimpact: ["9M", "8M", "7M", "6M", "5M", "4M"], gust: ["9L1", "8L1", "7L1", "6L1", "5L1", "4L1"], @@ -49826,9 +49810,9 @@ export const Learnsets: {[k: string]: LearnsetData} = { mudslap: ["4T"], naturalgift: ["4M"], nightshade: ["9M"], - ominouswind: ["7L20", "6L20", "5L37", "4T", "4L32"], + ominouswind: ["7L20", "6L20", "5L20", "4T", "4L32"], painsplit: ["9M", "7T", "6T", "5T", "4T"], - payback: ["9L12", "8M", "8L12", "7M", "7L16", "6M", "6L16", "5M", "5L17", "4M", "4L17"], + payback: ["9L12", "8M", "8L12", "7M", "7L16", "6M", "6L16", "5M", "5L16", "4M", "4L17"], phantomforce: ["9M", "9L0", "8M", "8L0", "7L1", "6L1"], protect: ["9M", "8M", "7M", "6M", "5M", "4M"], psybeam: ["9M"], @@ -49842,7 +49826,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { round: ["8M", "7M", "6M", "5M"], secretpower: ["6M", "4M"], selfdestruct: ["9L31", "8M", "8L31"], - shadowball: ["9M", "9L20", "8M", "8L20", "7M", "7L40", "6M", "6L40", "5M", "5L51", "4M", "4L44"], + shadowball: ["9M", "9L20", "8M", "8L20", "7M", "7L40", "6M", "6L40", "5M", "5L40", "4M", "4L44"], shockwave: ["7T", "6T", "4M"], silverwind: ["4M"], skillswap: ["9M", "8M", "7T", "6T", "5T", "4M"], @@ -49850,7 +49834,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { snore: ["8M", "7T", "6T", "5T", "4T"], spite: ["9M", "7T", "6T", "5T", "4T"], spitup: ["9L24", "8L24", "7L34", "6L34", "5L32", "4L27"], - stockpile: ["9L24", "8L24", "7L25", "6L25", "5L27", "4L22"], + stockpile: ["9L24", "8L24", "7L25", "6L25", "5L25", "4L22"], storedpower: ["9M"], strengthsap: ["9L1", "8L1"], substitute: ["9M", "8M", "7M", "6M", "5M", "4M"], @@ -50470,7 +50454,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { lightscreen: ["9M", "8M", "7M", "6M", "5M", "4M"], metalsound: ["9M", "9L40", "8L40", "7L31", "6L31", "5L31"], naturalgift: ["4M"], - payback: ["9L8", "8M", "8L8", "7M", "7L41", "6M", "6L41", "5M", "5L49", "4M", "4L49"], + payback: ["9L8", "8M", "8L8", "7M", "7L41", "6M", "6L41", "5M", "5L41", "4M", "4L49"], powergem: ["9M"], powerswap: ["8M"], protect: ["9M", "8M", "7M", "6M", "5M", "4M"], @@ -51073,7 +51057,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { closecombat: ["9M"], coaching: ["9M", "8T"], confide: ["7M", "6M"], - copycat: ["9L48", "8L48", "7L19", "6L19", "5L29", "4L29"], + copycat: ["9L48", "8L48", "7L19", "6L19", "5L19", "4L29"], counter: ["9L12", "8L12", "7L6", "6L6", "5L6", "4L6"], crosschop: ["9E", "8E", "7E", "6E", "5E", "4E"], crunch: ["9M", "8M", "7E", "6E", "5E", "4E"], @@ -51085,7 +51069,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { earthquake: ["9M", "8M", "7M", "6M", "5M", "4M"], endure: ["9M", "9L1", "8M", "8L1", "7L1", "6L1", "5L1", "5D", "4M", "4L1"], facade: ["9M", "8M", "7M", "6M", "5M", "4M"], - feint: ["9L4", "8L4", "7L11", "6L11", "5L15", "4L15"], + feint: ["9L4", "8L4", "7L11", "6L11", "5L11", "4L15"], finalgambit: ["9L52", "8L52", "7L50", "6L50", "5L55"], fling: ["9M", "8M", "7M", "6M", "5M", "4M"], focusblast: ["9M", "8M", "7M", "6M", "5M", "4M"], @@ -51192,7 +51176,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { endure: ["9M", "8M", "4M"], extremespeed: ["9L56", "8L56", "7L65", "7S5", "6L1", "5L65", "4L51"], facade: ["9M", "8M", "7M", "6M", "5M", "4M"], - feint: ["9L1", "8L1", "7L11", "6L11", "5L15", "4L15"], + feint: ["9L1", "8L1", "7L11", "6L11", "5L11", "4L15"], finalgambit: ["9L1", "8L1"], flashcannon: ["9M", "9S7", "8M", "7M", "6M", "6S4", "5M", "4M"], fling: ["9M", "8M", "7M", "6M", "5M", "4M"], @@ -51219,7 +51203,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { lowkick: ["9M", "8M", "7T", "6T", "5T", "4T"], lowsweep: ["9M", "8M", "7M", "6M", "5M"], magnetrise: ["7T", "6T", "5T", "4T"], - mefirst: ["7L37", "6L37", "5L29", "4L29"], + mefirst: ["7L37", "6L37", "5L19", "4L29"], megakick: ["8M"], megapunch: ["8M"], metalclaw: ["9M", "9L1", "8L1", "7L1", "6L1", "5L1", "5S2", "4L1"], @@ -51434,7 +51418,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { }, skorupi: { learnset: { - acupressure: ["8L45", "7L13", "6L13", "5L17", "4L17"], + acupressure: ["8L45", "7L13", "6L13", "5L13", "4L17"], aerialace: ["7M", "6M", "5M", "4M"], agility: ["8M", "7E", "6E", "5E", "5D", "4E"], aquatail: ["7T", "6T", "5T", "5D", "4T"], @@ -51442,13 +51426,13 @@ export const Learnsets: {[k: string]: LearnsetData} = { attract: ["8M", "7M", "6M", "5M", "4M"], bite: ["8L12", "7L1", "6L1", "5L1", "5D", "4L1"], brickbreak: ["8M", "7M", "6M", "5M", "4M"], - bugbite: ["8L18", "7T", "7L20", "6T", "6L20", "5T", "5L34", "4T", "4L34"], + bugbite: ["8L18", "7T", "7L20", "6T", "6L20", "5T", "5L20", "4T", "4L34"], bugbuzz: ["8M"], captivate: ["4M"], confide: ["7M", "6M"], confuseray: ["8E", "7E", "6E", "5E", "4E"], - crosspoison: ["8M", "8L39", "7L49", "6L49", "5L61", "4L50"], - crunch: ["8M", "8L48", "7L45", "6L45", "5L56", "4L45"], + crosspoison: ["8M", "8L39", "7L49", "6L49", "5L49", "4L50"], + crunch: ["8M", "8L48", "7L45", "6L45", "5L45", "4L45"], cut: ["6M", "5M", "4M"], darkpulse: ["8M", "7M", "6M", "5T", "4M"], dig: ["8M", "6M", "5M", "4M"], @@ -51464,17 +51448,17 @@ export const Learnsets: {[k: string]: LearnsetData} = { furycutter: ["4T"], headbutt: ["4T"], hiddenpower: ["7M", "6M", "5M", "4M"], - honeclaws: ["8L3", "7L30", "6M", "6L30", "5M", "5L45"], + honeclaws: ["8L3", "7L30", "6M", "6L30", "5M", "5L30"], infestation: ["7M", "6M"], irontail: ["8M", "7T", "7E", "6T", "6E", "5T", "5E", "4M"], - knockoff: ["8L24", "7T", "7L5", "6T", "6L5", "5T", "5L6", "4T", "4L6"], + knockoff: ["8L24", "7T", "7L5", "6T", "6L5", "5T", "5L5", "4T", "4L6"], leer: ["8L1", "7L1", "6L1", "5L1", "4L1"], mudslap: ["4T"], naturalgift: ["4M"], nightslash: ["8L36", "7L38", "7E", "6L38", "6E", "5L38", "5E", "4E"], payback: ["8M", "7M", "6M", "5M", "4M"], - pinmissile: ["8M", "8L30", "7L9", "6L9", "5L12", "4L12"], - poisonfang: ["8L9", "7L23", "6L23", "5L39", "4L39"], + pinmissile: ["8M", "8L30", "7L9", "6L9", "5L9", "4L12"], + poisonfang: ["8L9", "7L23", "6L23", "5L23", "4L39"], poisonjab: ["8M", "7M", "6M", "5M", "4M"], poisonsting: ["8L1", "7L1", "6L1", "5L1", "4L1"], poisontail: ["7E", "6E", "5E"], @@ -51508,14 +51492,14 @@ export const Learnsets: {[k: string]: LearnsetData} = { toxic: ["8L33", "7M", "6M", "5M", "4M"], toxicspikes: ["8M", "8L15", "7L34", "6L34", "5L28", "4L28"], twineedle: ["7E", "6E", "5E"], - venoshock: ["8M", "8L21", "7M", "7L27", "6M", "6L27", "5M", "5L50"], + venoshock: ["8M", "8L21", "7M", "7L27", "6M", "6L27", "5M", "5L27"], whirlwind: ["8E", "7E", "6E", "5E", "4E"], xscissor: ["8M", "8L42", "7M", "6M", "5M", "4M"], }, }, drapion: { learnset: { - acupressure: ["8L49", "7L13", "6L13", "5L17", "4L17"], + acupressure: ["8L49", "7L13", "6L13", "5L13", "4L17"], aerialace: ["7M", "6M", "5M", "4M"], agility: ["8M"], aquatail: ["7T", "6T", "5T", "4T"], @@ -51524,13 +51508,13 @@ export const Learnsets: {[k: string]: LearnsetData} = { bite: ["8L12", "7L1", "6L1", "5L1", "4L1"], brickbreak: ["8M", "7M", "6M", "5M", "4M"], brutalswing: ["8M", "7M"], - bugbite: ["8L18", "7T", "7L20", "6T", "6L20", "5T", "5L34", "4T", "4L34"], + bugbite: ["8L18", "7T", "7L20", "6T", "6L20", "5T", "5L20", "4T", "4L34"], bugbuzz: ["8M"], bulldoze: ["8M", "7M", "6M", "5M"], captivate: ["4M"], confide: ["7M", "6M"], - crosspoison: ["8M", "8L39", "7L57", "6L57", "5L73", "4L58"], - crunch: ["8M", "8L54", "7L49", "6L49", "5L65", "4L49"], + crosspoison: ["8M", "8L39", "7L57", "6L57", "5L57", "4L58"], + crunch: ["8M", "8L54", "7L49", "6L49", "5L49", "4L49"], cut: ["6M", "5M", "4M"], darkpulse: ["8M", "7M", "6M", "5T", "4M"], dig: ["8M", "6M", "5M", "4M"], @@ -51548,7 +51532,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { gigaimpact: ["8M", "7M", "6M", "5M", "4M"], headbutt: ["4T"], hiddenpower: ["7M", "6M", "5M", "4M"], - honeclaws: ["8L1", "7L30", "6M", "6L30", "5M", "5L48"], + honeclaws: ["8L1", "7L30", "6M", "6L30", "5M", "5L30"], hyperbeam: ["8M", "7M", "6M", "5M", "4M"], icefang: ["8M", "8L1", "7L1", "6L1", "5L1", "4L1"], infestation: ["7M", "6M"], @@ -51562,8 +51546,8 @@ export const Learnsets: {[k: string]: LearnsetData} = { naturalgift: ["4M"], nightslash: ["8L36", "7L38", "6L38", "5L38"], payback: ["8M", "7M", "6M", "5M", "4M"], - pinmissile: ["8M", "8L30", "7L9", "6L9", "5L12", "4L1"], - poisonfang: ["8L9", "7L23", "6L23", "5L39", "4L39"], + pinmissile: ["8M", "8L30", "7L9", "6L9", "5L9", "4L1"], + poisonfang: ["8L9", "7L23", "6L23", "5L23", "4L39"], poisonjab: ["8M", "7M", "6M", "5M", "4M"], poisonsting: ["8L1", "7L1", "6L1", "5L1", "4L1"], protect: ["8M", "7M", "6M", "5M", "4M"], @@ -51603,7 +51587,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { toxic: ["8L33", "7M", "6M", "5M", "4M"], toxicspikes: ["8M", "8L15", "7L34", "6L34", "5L28", "4L28"], venomdrench: ["8M"], - venoshock: ["8M", "8L21", "7M", "7L27", "6M", "6L27", "5M", "5L56"], + venoshock: ["8M", "8L21", "7M", "7L27", "6M", "6L27", "5M", "5L27"], xscissor: ["8M", "8L44", "7M", "6M", "5M", "4M"], }, encounters: [ @@ -52326,27 +52310,27 @@ export const Learnsets: {[k: string]: LearnsetData} = { }, rotomheat: { learnset: { - overheat: ["9L1", "8L1", "7R", "6R", "5R", "4R"], + overheat: ["9R", "8R", "7R", "6R", "5R", "4R"], }, }, rotomwash: { learnset: { - hydropump: ["9L1", "8L1", "7R", "6R", "5R", "4R"], + hydropump: ["9R", "8R", "7R", "6R", "5R", "4R"], }, }, rotomfrost: { learnset: { - blizzard: ["9L1", "8L1", "7R", "6R", "5R", "4R"], + blizzard: ["9R", "8R", "7R", "6R", "5R", "4R"], }, }, rotomfan: { learnset: { - airslash: ["9L1", "8L1", "7R", "6R", "5R", "4R"], + airslash: ["9R", "8R", "7R", "6R", "5R", "4R"], }, }, rotommow: { learnset: { - leafstorm: ["9L1", "8L1", "7R", "6R", "5R", "4R"], + leafstorm: ["9R", "8R", "7R", "6R", "5R", "4R"], }, }, uxie: { @@ -66082,7 +66066,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { bounce: ["8M", "7T", "6T", "5T"], brickbreak: ["9M", "8M"], calmmind: ["9M", "8M", "7M", "6M", "5M"], - closecombat: ["9M", "9L70", "8M", "8L70", "8S5", "7L1", "6L1", "5L73"], + closecombat: ["9M", "9L70", "9S6", "8M", "8L70", "8S5", "7L1", "6L1", "5L73"], coaching: ["9M", "8T"], confide: ["7M", "6M"], cut: ["6M", "5M"], @@ -66102,7 +66086,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { honeclaws: ["6M", "5M"], hyperbeam: ["9M", "8M", "7M", "6M", "5M"], irondefense: ["9M", "8M", "7T", "6T", "5T"], - ironhead: ["9M", "9L63", "8M", "8L63", "8S5", "7T", "7L25", "7S4", "6T", "6L37", "6S3", "5T", "5L37", "5S0", "5S1"], + ironhead: ["9M", "9L63", "9S6", "8M", "8L63", "8S5", "7T", "7L25", "7S4", "6T", "6L37", "6S3", "5T", "5L37", "5S0", "5S1"], laserfocus: ["7T"], leer: ["9L1", "8L1", "7L1", "6L1", "5L1"], magnetrise: ["7T", "6T", "5T"], @@ -66126,7 +66110,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { rockpolish: ["7M", "6M", "5M"], rocksmash: ["6M", "5M"], round: ["8M", "7M", "6M", "5M"], - sacredsword: ["9L49", "8L49", "8S5", "7L31", "7S4", "6L42", "6S3", "5L42", "5S0", "5S1", "5S2"], + sacredsword: ["9L49", "9S6", "8L49", "8S5", "7L31", "7S4", "6L42", "6S3", "5L42", "5S0", "5S1", "5S2"], safeguard: ["8M", "7M", "6M", "5M"], sandstorm: ["9M", "8M", "7M", "6M", "5M"], scaryface: ["9M", "8M"], @@ -66143,7 +66127,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { superpower: ["8M", "7T", "6T", "5T"], swagger: ["7M", "6M", "5M"], swift: ["9M", "8M"], - swordsdance: ["9M", "9L56", "8M", "8L56", "8S5", "7M", "7L37", "7S4", "6M", "6L49", "6S3", "5M", "5L49", "5S2"], + swordsdance: ["9M", "9L56", "9S6", "8M", "8L56", "8S5", "7M", "7L37", "7S4", "6M", "6L49", "6S3", "5M", "5L49", "5S2"], takedown: ["9M", "9L42", "8L42", "7L7", "6L19", "5L19"], taunt: ["9M", "8M", "7M", "6M", "5M"], terablast: ["9M"], @@ -66163,6 +66147,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { {generation: 6, level: 50, shiny: 1, moves: ["retaliate", "ironhead", "sacredsword", "swordsdance"]}, {generation: 7, level: 60, shiny: 1, moves: ["sacredsword", "swordsdance", "quickattack", "ironhead"]}, {generation: 8, level: 70, shiny: 1, moves: ["sacredsword", "swordsdance", "ironhead", "closecombat"]}, + {generation: 9, level: 70, moves: ["closecombat", "ironhead", "swordsdance", "sacredsword"]}, ], eventOnly: true, }, @@ -66176,7 +66161,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { brickbreak: ["9M", "8M"], bulldoze: ["9M", "8M", "7M", "6M", "5M"], calmmind: ["9M", "8M", "7M", "6M", "5M"], - closecombat: ["9M", "9L70", "8M", "8L70", "8S5", "7L1", "6L1", "5L73"], + closecombat: ["9M", "9L70", "9S6", "8M", "8L70", "8S5", "7L1", "6L1", "5L73"], coaching: ["9M", "8T"], confide: ["7M", "6M"], cut: ["6M", "5M"], @@ -66217,7 +66202,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { rocksmash: ["6M", "5M"], rocktomb: ["9M", "8M", "7M", "6M", "5M"], round: ["8M", "7M", "6M", "5M"], - sacredsword: ["9L49", "8L49", "8S5", "7L31", "7S4", "6L42", "6S3", "5L42", "5S0", "5S1", "5S2"], + sacredsword: ["9L49", "9S6", "8L49", "8S5", "7L31", "7S4", "6L42", "6S3", "5L42", "5S0", "5S1", "5S2"], safeguard: ["8M", "7M", "6M", "5M"], sandstorm: ["9M", "8M", "7M", "6M", "5M"], scaryface: ["9M", "8M"], @@ -66228,13 +66213,13 @@ export const Learnsets: {[k: string]: LearnsetData} = { snore: ["8M", "7T", "6T", "5T"], stealthrock: ["9M", "8M", "7T", "6T", "5T"], stompingtantrum: ["9M", "8M", "7T"], - stoneedge: ["9M", "9L63", "8M", "8L63", "8S5", "7M", "7L55", "7S4", "6M", "6L67", "5M", "5L67"], + stoneedge: ["9M", "9L63", "9S6", "8M", "8L63", "8S5", "7M", "7L55", "7S4", "6M", "6L67", "5M", "5L67"], strength: ["6M", "5M"], substitute: ["9M", "8M", "7M", "6M", "5M"], superpower: ["8M", "7T", "6T", "5T"], swagger: ["7M", "6M", "5M"], swift: ["9M", "8M"], - swordsdance: ["9M", "9L56", "8M", "8L56", "8S5", "7M", "7L37", "7S4", "6M", "6L49", "6S3", "5M", "5L49", "5S2"], + swordsdance: ["9M", "9L56", "9S6", "8M", "8L56", "8S5", "7M", "7L37", "7S4", "6M", "6L49", "6S3", "5M", "5L49", "5S2"], takedown: ["9M", "9L42", "8L42", "7L7", "6L19", "5L19"], taunt: ["9M", "8M", "7M", "6M", "5M"], terablast: ["9M"], @@ -66251,6 +66236,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { {generation: 6, level: 50, shiny: 1, moves: ["retaliate", "rockslide", "sacredsword", "swordsdance"]}, {generation: 7, level: 60, shiny: 1, moves: ["sacredsword", "swordsdance", "rockslide", "stoneedge"]}, {generation: 8, level: 70, shiny: 1, moves: ["sacredsword", "swordsdance", "stoneedge", "closecombat"]}, + {generation: 9, level: 70, moves: ["closecombat", "stoneedge", "swordsdance", "sacredsword"]}, ], eventOnly: true, }, @@ -66265,7 +66251,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { brickbreak: ["9M", "8M"], bulletseed: ["9M"], calmmind: ["9M", "8M", "7M", "6M", "5M"], - closecombat: ["9M", "9L70", "8M", "8L70", "8S5", "7L1", "6L1", "5L73"], + closecombat: ["9M", "9L70", "9S6", "8M", "8L70", "8S5", "7L1", "6L1", "5L73"], coaching: ["9M", "8T"], confide: ["7M", "6M"], cut: ["6M", "5M"], @@ -66287,7 +66273,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { hiddenpower: ["7M", "6M", "5M"], hyperbeam: ["9M", "8M", "7M", "6M", "5M"], laserfocus: ["7T"], - leafblade: ["9L63", "8M", "8L63", "8S5", "7L1", "7S4", "6L1", "5L67"], + leafblade: ["9L63", "9S6", "8M", "8L63", "8S5", "7L1", "7S4", "6L1", "5L67"], leafstorm: ["9M", "8M"], leer: ["9L1", "8L1", "7L1", "6L1", "5L1"], lightscreen: ["9M", "8M", "7M", "6M", "5M"], @@ -66307,7 +66293,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { roar: ["9M", "7M", "6M", "5M"], rocksmash: ["6M", "5M"], round: ["8M", "7M", "6M", "5M"], - sacredsword: ["9L49", "8L49", "8S5", "7L31", "7S4", "6L42", "6S3", "5L42", "5S0", "5S1", "5S2"], + sacredsword: ["9L49", "9S6", "8L49", "8S5", "7L31", "7S4", "6L42", "6S3", "5L42", "5S0", "5S1", "5S2"], safeguard: ["8M", "7M", "6M", "5M"], scaryface: ["9M"], secretpower: ["6M"], @@ -66324,7 +66310,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { superpower: ["8M", "7T", "6T", "5T"], swagger: ["7M", "6M", "5M"], swift: ["9M", "8M"], - swordsdance: ["9M", "9L56", "8M", "8L56", "8S5", "7M", "7L37", "7S4", "6M", "6L49", "6S3", "5M", "5L49", "5S2"], + swordsdance: ["9M", "9L56", "9S6", "8M", "8L56", "8S5", "7M", "7L37", "7S4", "6M", "6L49", "6S3", "5M", "5L49", "5S2"], synthesis: ["9L42", "7T", "6T", "5T"], takedown: ["9M", "9L1", "8L42", "7L7", "6L19", "5L19"], taunt: ["9M", "8M", "7M", "6M", "5M"], @@ -66345,6 +66331,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { {generation: 6, level: 50, shiny: 1, moves: ["retaliate", "gigadrain", "sacredsword", "swordsdance"]}, {generation: 7, level: 60, shiny: 1, moves: ["sacredsword", "swordsdance", "gigadrain", "leafblade"]}, {generation: 8, level: 70, shiny: 1, moves: ["sacredsword", "swordsdance", "leafblade", "closecombat"]}, + {generation: 9, level: 70, moves: ["closecombat", "leafblade", "swordsdance", "sacredsword"]}, ], eventOnly: true, }, @@ -66584,17 +66571,17 @@ export const Learnsets: {[k: string]: LearnsetData} = { endure: ["9M", "8M"], extrasensory: ["9L24", "8L24", "8S7", "7L43", "7S4", "7S5", "6L43", "6S3", "5L43", "5S0", "5S1"], facade: ["9M", "8M", "7M", "6M", "5M"], - fireblast: ["9M", "9L64", "8M", "8L64", "7M", "7L78", "6M", "6L78", "5M", "5L78"], + fireblast: ["9M", "9L64", "9S8", "8M", "8L64", "7M", "7L78", "6M", "6L78", "5M", "5L78"], firefang: ["9M", "9L1", "8M", "8L1", "7L1", "6L1", "5L1"], firespin: ["9M"], flamecharge: ["9M", "7M", "6M", "5M"], - flamethrower: ["9M", "9L40", "8M", "8L40", "7M", "7L22", "6M", "6L22", "5M", "5L22"], + flamethrower: ["9M", "9L40", "9S8", "8M", "8L40", "7M", "7L22", "6M", "6L22", "5M", "5L22"], flareblitz: ["9M", "8M"], fling: ["9M", "8M", "7M", "6M", "5M"], fly: ["9M", "8M", "7M", "6M", "5M"], focusblast: ["9M", "8M", "7M", "6M", "5M"], frustration: ["7M", "6M", "5M"], - fusionflare: ["9L48", "8L48", "8S7", "7L50", "7S4", "7S5", "7S6", "6L50", "6S3", "5L50", "5S0", "5S1", "5S2"], + fusionflare: ["9L48", "9S8", "8L48", "8S7", "7L50", "7S4", "7S5", "7S6", "6L50", "6S3", "5L50", "5S0", "5S1", "5S2"], gigaimpact: ["9M", "8M", "7M", "6M", "5M"], heatcrash: ["9M", "8M"], heatwave: ["9M", "8M", "7T", "6T", "5T"], @@ -66602,7 +66589,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { hiddenpower: ["7M", "6M", "5M"], honeclaws: ["6M", "5M"], hyperbeam: ["9M", "8M", "7M", "6M", "5M"], - hypervoice: ["9M", "9L56", "8M", "8L56", "7T", "7L92", "6T", "6L92", "5T", "5L92"], + hypervoice: ["9M", "9L56", "9S8", "8M", "8L56", "7T", "7L92", "6T", "6L92", "5T", "5L92"], imprison: ["9M", "9L72", "8M", "8L72", "7L64", "6L8", "5L8", "5S1"], incinerate: ["6M", "5M"], laserfocus: ["7T"], @@ -66660,6 +66647,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { {generation: 7, level: 60, moves: ["slash", "extrasensory", "fusionflare", "dragonpulse"], pokeball: "cherishball"}, {generation: 7, level: 100, moves: ["fusionflare", "blueflare", "dracometeor", "earthpower"], pokeball: "cherishball"}, {generation: 8, level: 70, shiny: 1, moves: ["nobleroar", "extrasensory", "fusionflare", "dragonclaw"]}, + {generation: 9, level: 70, moves: ["fireblast", "hypervoice", "fusionflare", "flamethrower"]}, ], eventOnly: true, }, @@ -66702,14 +66690,14 @@ export const Learnsets: {[k: string]: LearnsetData} = { focusblast: ["9M", "8M", "7M", "6M", "5M"], focuspunch: ["9M"], frustration: ["7M", "6M", "5M"], - fusionbolt: ["9L48", "8L48", "8S7", "7L50", "7S4", "7S5", "7S6", "6L50", "6S3", "5L50", "5S0", "5S1", "5S2"], + fusionbolt: ["9L48", "9S8", "8L48", "8S7", "7L50", "7S4", "7S5", "7S6", "6L50", "6S3", "5L50", "5S0", "5S1", "5S2"], gigaimpact: ["9M", "8M", "7M", "6M", "5M"], haze: ["9M", "5S2"], helpinghand: ["9M", "8M"], hiddenpower: ["7M", "6M", "5M"], honeclaws: ["6M", "5M"], hyperbeam: ["9M", "8M", "7M", "6M", "5M"], - hypervoice: ["9M", "9L56", "8M", "8L56", "7T", "7L92", "6T", "6L92", "5T", "5L92"], + hypervoice: ["9M", "9L56", "9S8", "8M", "8L56", "7T", "7L92", "6T", "6L92", "5T", "5L92"], imprison: ["9M", "9L72", "8M", "8L72", "7L64", "6L8", "5L8", "5S1"], laserfocus: ["7T"], lightscreen: ["9M", "8M", "7M", "6M", "5M"], @@ -66753,8 +66741,8 @@ export const Learnsets: {[k: string]: LearnsetData} = { tailwind: ["9M", "7T", "6T", "5T"], takedown: ["9M"], terablast: ["9M"], - thunder: ["9M", "9L64", "8M", "8L64", "7M", "7L78", "6M", "6L78", "5M", "5L78"], - thunderbolt: ["9M", "9L40", "8M", "8L40", "7M", "7L22", "6M", "6L22", "5M", "5L22"], + thunder: ["9M", "9L64", "9S8", "8M", "8L64", "7M", "7L78", "6M", "6L78", "5M", "5L78"], + thunderbolt: ["9M", "9L40", "9S8", "8M", "8L40", "7M", "7L22", "6M", "6L22", "5M", "5L22"], thunderfang: ["9M", "9L1", "8M", "8L1", "7L1", "6L1", "5L1"], thunderpunch: ["9M", "8M", "7T", "6T", "5T"], thunderwave: ["9M", "8M", "7M", "6M", "5M"], @@ -66773,6 +66761,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { {generation: 7, level: 60, moves: ["slash", "zenheadbutt", "fusionbolt", "dragonclaw"], pokeball: "cherishball"}, {generation: 7, level: 100, moves: ["fusionbolt", "boltstrike", "outrage", "stoneedge"], pokeball: "cherishball"}, {generation: 8, level: 70, shiny: 1, moves: ["nobleroar", "slash", "fusionbolt", "dragonclaw"]}, + {generation: 9, level: 70, moves: ["thunder", "hypervoice", "fusionbolt", "thunderbolt"]}, ], eventOnly: true, }, @@ -66876,7 +66865,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { aerialace: ["9M"], ancientpower: ["9L1", "8L1", "7L15", "6L15", "5L15"], avalanche: ["9M"], - blizzard: ["9M", "9L56", "8M", "8L56", "7M", "7L78", "6M", "6L78", "5M", "5L78"], + blizzard: ["9M", "9L56", "9S6", "8M", "8L56", "7M", "7L78", "6M", "6L78", "5M", "5L78"], bodypress: ["9M", "8M"], bodyslam: ["9M"], breakingswipe: ["9M", "8M"], @@ -66911,12 +66900,12 @@ export const Learnsets: {[k: string]: LearnsetData} = { hiddenpower: ["7M", "6M", "5M"], honeclaws: ["6M", "5M"], hyperbeam: ["9M", "8M", "7M", "6M", "5M"], - hypervoice: ["9M", "9L40", "8M", "8L40", "8S5", "7T", "7L92", "6T", "6L92", "5T", "5L92"], + hypervoice: ["9M", "9L40", "9S6", "8M", "8L40", "8S5", "7T", "7L92", "6T", "6L92", "5T", "5L92"], icebeam: ["9M", "9L32", "8M", "8L32", "8S5", "7M", "7L22", "6M", "6L22", "5M", "5L22"], icefang: ["9M"], iciclespear: ["9M", "8M"], icywind: ["9M", "8M", "7T", "7L1", "6T", "6L1", "5T", "5L1"], - imprison: ["9M", "9L64", "8M", "8L64", "7L64", "6L8", "5L8", "5S0", "5S1"], + imprison: ["9M", "9L64", "9S6", "8M", "8L64", "7L64", "6L8", "5L8", "5S0", "5S1"], ironhead: ["9M", "8M", "7T", "6T", "6S3", "5T"], laserfocus: ["7T"], lightscreen: ["9M", "8M", "7M", "6M", "5M"], @@ -66937,7 +66926,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { round: ["8M", "7M", "6M", "5M"], safeguard: ["8M", "7M", "6M", "5M"], scaleshot: ["9M", "8T"], - scaryface: ["9M", "9L48", "8M", "8L48", "8S5", "7L43", "7S4", "6L43", "6S2", "6S3", "5L43", "5S1"], + scaryface: ["9M", "9L48", "9S6", "8M", "8L48", "8S5", "7L43", "7S4", "6L43", "6S2", "6S3", "5L43", "5S1"], secretpower: ["6M"], shadowball: ["9M", "8M", "8S5", "7M", "6M", "5M"], shadowclaw: ["9M", "8M", "7M", "6M", "5M"], @@ -66967,6 +66956,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { {generation: 6, level: 100, moves: ["glaciate", "scaryface", "dracometeor", "ironhead"], pokeball: "cherishball"}, {generation: 7, level: 60, shiny: 1, moves: ["slash", "scaryface", "glaciate", "dragonpulse"]}, {generation: 8, level: 70, shiny: 1, moves: ["icebeam", "hypervoice", "shadowball", "scaryface"]}, + {generation: 9, level: 70, moves: ["imprison", "blizzard", "scaryface", "hypervoice"]}, ], eventOnly: true, }, @@ -66975,7 +66965,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { aerialace: ["9M"], ancientpower: ["9L1", "8L1", "7L15", "6L15", "5L15"], avalanche: ["9M"], - blizzard: ["9M", "9L56", "8M", "8L56", "7M", "7L78", "6M", "6L78", "5M", "5L78"], + blizzard: ["9M", "9L56", "9S6", "8M", "8L56", "7M", "7L78", "6M", "6L78", "5M", "5L78"], bodypress: ["9M", "8M"], bodyslam: ["9M"], breakingswipe: ["9M", "8M"], @@ -67004,19 +66994,19 @@ export const Learnsets: {[k: string]: LearnsetData} = { freezedry: ["9L1", "8L1"], freezeshock: ["9L80", "8L80", "7L50", "7S4", "6L50", "6S2", "6S3", "5L43", "5S0", "5S1"], frustration: ["7M", "6M", "5M"], - fusionbolt: ["9L48", "8L48", "8S5", "7L43", "7S4", "6L43", "6S2", "6S3", "5L50", "5S1"], + fusionbolt: ["9L48", "9S6", "8L48", "8S5", "7L43", "7S4", "6L43", "6S2", "6S3", "5L43", "5S1"], gigaimpact: ["9M", "8M", "7M", "6M", "5M"], hail: ["8M", "7M", "6M", "5M"], helpinghand: ["9M", "8M"], hiddenpower: ["7M", "6M", "5M"], honeclaws: ["6M", "5M"], hyperbeam: ["9M", "8M", "7M", "6M", "5M"], - hypervoice: ["9M", "9L40", "8M", "8L40", "8S5", "7T", "7L92", "6T", "6L92", "5T", "5L92"], + hypervoice: ["9M", "9L40", "9S6", "8M", "8L40", "8S5", "7T", "7L92", "6T", "6L92", "5T", "5L92"], icebeam: ["9M", "9L32", "8M", "8L32", "8S5", "7M", "7L22", "6M", "6L22", "5M", "5L22"], icefang: ["9M"], iciclespear: ["9M", "8M"], icywind: ["9M", "8M", "7T", "7L1", "6T", "6L1", "5T", "5L1"], - imprison: ["9M", "9L64", "8M", "8L64", "7L64", "6L8", "5L8", "5S0", "5S1"], + imprison: ["9M", "9L64", "9S6", "8M", "8L64", "7L64", "6L8", "5L8", "5S0", "5S1"], ironhead: ["9M", "8M", "7T", "6T", "6S3", "5T"], laserfocus: ["7T"], lightscreen: ["9M", "8M", "7M", "6M", "5M"], @@ -67067,6 +67057,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { {generation: 6, level: 100, moves: ["freezeshock", "fusionbolt", "dracometeor", "ironhead"], pokeball: "cherishball"}, {generation: 7, level: 60, shiny: 1, moves: ["slash", "fusionbolt", "freezeshock", "dragonpulse"]}, {generation: 8, level: 70, shiny: 1, moves: ["icebeam", "hypervoice", "shadowball", "fusionbolt"]}, + {generation: 9, level: 70, moves: ["imprison", "blizzard", "fusionbolt", "hypervoice"]}, ], eventOnly: true, }, @@ -67075,7 +67066,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { aerialace: ["9M"], ancientpower: ["9L1", "8L1", "7L15", "6L15", "5L15"], avalanche: ["9M"], - blizzard: ["9M", "9L56", "8M", "8L56", "7M", "7L78", "6M", "6L78", "5M", "5L78"], + blizzard: ["9M", "9L56", "9S6", "8M", "8L56", "7M", "7L78", "6M", "6L78", "5M", "5L78"], bodypress: ["9M", "8M"], bodyslam: ["9M"], breakingswipe: ["9M", "8M"], @@ -67103,20 +67094,20 @@ export const Learnsets: {[k: string]: LearnsetData} = { focusblast: ["9M", "8M", "7M", "6M", "5M"], freezedry: ["9L1", "8L1"], frustration: ["7M", "6M", "5M"], - fusionflare: ["9L48", "8L48", "8S5", "7L43", "7S4", "6L43", "6S2", "6S3", "5L50", "5S1"], + fusionflare: ["9L48", "9S6", "8L48", "8S5", "7L43", "7S4", "6L43", "6S2", "6S3", "5L43", "5S1"], gigaimpact: ["9M", "8M", "7M", "6M", "5M"], hail: ["8M", "7M", "6M", "5M"], helpinghand: ["9M", "8M"], hiddenpower: ["7M", "6M", "5M"], honeclaws: ["6M", "5M"], hyperbeam: ["9M", "8M", "7M", "6M", "5M"], - hypervoice: ["9M", "9L40", "8M", "8L40", "8S5", "7T", "7L92", "6T", "6L92", "5T", "5L92"], + hypervoice: ["9M", "9L40", "9S6", "8M", "8L40", "8S5", "7T", "7L92", "6T", "6L92", "5T", "5L92"], icebeam: ["9M", "9L32", "8M", "8L32", "8S5", "7M", "7L22", "6M", "6L22", "5M", "5L22"], iceburn: ["9L80", "8L80", "7L50", "7S4", "6L50", "6S2", "6S3", "5L43", "5S0", "5S1"], icefang: ["9M"], iciclespear: ["9M", "8M"], icywind: ["9M", "8M", "7T", "7L1", "6T", "6L1", "5T", "5L1"], - imprison: ["9M", "9L64", "8M", "8L64", "7L64", "6L8", "5L8", "5S0", "5S1"], + imprison: ["9M", "9L64", "9S6", "8M", "8L64", "7L64", "6L8", "5L8", "5S0", "5S1"], ironhead: ["9M", "8M", "7T", "6T", "6S3", "5T"], laserfocus: ["7T"], lightscreen: ["9M", "8M", "7M", "6M", "5M"], @@ -67167,6 +67158,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { {generation: 6, level: 100, moves: ["iceburn", "fusionflare", "dracometeor", "ironhead"], pokeball: "cherishball"}, {generation: 7, level: 60, shiny: 1, moves: ["slash", "fusionflare", "iceburn", "dragonpulse"]}, {generation: 8, level: 70, shiny: 1, moves: ["icebeam", "hypervoice", "shadowball", "fusionflare"]}, + {generation: 9, level: 70, moves: ["imprison", "blizzard", "fusionflare", "hypervoice"]}, ], eventOnly: true, }, @@ -67288,7 +67280,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { drainpunch: ["9M", "7T", "6T", "5T"], dreameater: ["7M", "6M", "5M"], dualchop: ["7T", "6T", "5T"], - echoedvoice: ["9L36", "7M", "7L36", "6M", "6L36", "5M", "5L36"], + echoedvoice: ["9L36", "9S5", "7M", "7L36", "6M", "6L36", "5M", "5L36"], embargo: ["7M", "6M", "5M"], endure: ["9M"], energyball: ["9M", "7M", "6M", "5M"], @@ -67324,14 +67316,14 @@ export const Learnsets: {[k: string]: LearnsetData} = { playrough: ["9M"], poweruppunch: ["6M"], protect: ["9M", "7M", "6M", "5M"], - psybeam: ["9M", "9L31", "7L31", "6L31", "5L31"], + psybeam: ["9M", "9L31", "9S5", "7L31", "6L31", "5L31"], psychic: ["9M", "9L57", "9S4", "7M", "7L57", "7S2", "6M", "6L57", "5M", "5L57", "5S1"], psychup: ["9M", "7M", "6M", "5M"], psyshock: ["9M", "7M", "6M", "5M"], quickattack: ["9L1", "7L1", "6L6", "5L6", "5S0"], raindance: ["9M", "7M", "6M", "5M"], recycle: ["7T", "6T", "5T"], - relicsong: ["9L50", "9S4", "7T", "7S3", "6T", "5T"], + relicsong: ["9L50", "9S4", "9S5", "7T", "7S3", "6T", "5T"], rest: ["9M", "7M", "6M", "5M"], retaliate: ["6M", "5M"], return: ["7M", "6M", "5M"], @@ -67345,7 +67337,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { shadowclaw: ["9M", "7M", "6M", "5M"], shockwave: ["7T", "6T"], signalbeam: ["7T", "6T", "5T"], - sing: ["9L1", "9S4", "7L1", "7S2", "7S3", "6L16", "5L16"], + sing: ["9L1", "9S4", "9S5", "7L1", "7S2", "7S3", "6L16", "5L16"], skillswap: ["9M", "7T", "6T", "5T"], sleeptalk: ["9M", "7M", "6M", "5T"], snatch: ["7T", "6T", "5T"], @@ -67380,7 +67372,8 @@ export const Learnsets: {[k: string]: LearnsetData} = { {generation: 5, level: 50, moves: ["round", "teeterdance", "psychic", "closecombat"], pokeball: "cherishball"}, {generation: 7, level: 15, moves: ["sing", "psychic", "closecombat"], pokeball: "cherishball"}, {generation: 7, level: 50, moves: ["sing", "celebrate", "round", "relicsong"], pokeball: "cherishball"}, - {generation: 9, level: 70, perfectIVs: 3, moves: ["relicsong", "hypervoice", "sing", "psychic"]}, + {generation: 9, level: 70, moves: ["relicsong", "hypervoice", "sing", "psychic"]}, + {generation: 9, level: 50, shiny: true, nature: "Modest", ivs: {hp: 20, atk: 20, def: 20, spa: 31, spd: 31, spe: 31}, moves: ["relicsong", "echoedvoice", "psybeam", "sing"], pokeball: "cherishball"}, ], eventOnly: true, }, @@ -68354,7 +68347,6 @@ export const Learnsets: {[k: string]: LearnsetData} = { bubble: ["7L1"], chillingwater: ["9M"], confide: ["7M"], - counter: ["9E"], darkpulse: ["9M", "7M"], dig: ["9M"], doubleteam: ["9L56", "7M", "7L56", "7S0"], @@ -68392,7 +68384,6 @@ export const Learnsets: {[k: string]: LearnsetData} = { quickattack: ["9L1", "7L1"], raindance: ["9M", "7M"], rest: ["9M", "7M"], - retaliate: ["9E"], return: ["7M"], rockslide: ["9M", "7M"], rocktomb: ["9M", "7M"], @@ -68407,7 +68398,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { snatch: ["7T"], snore: ["7T"], snowscape: ["9M"], - spikes: ["9M", "9L28", "9E", "7L28"], + spikes: ["9M", "9L28", "7L28"], spite: ["7T"], substitute: ["9M", "9L42", "7M", "7L42"], surf: ["9M", "7M"], @@ -68420,7 +68411,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { terablast: ["9M"], thief: ["9M", "7M"], toxic: ["7M"], - toxicspikes: ["9M", "9E"], + toxicspikes: ["9M"], trailblaze: ["9M"], upperhand: ["9M"], uturn: ["9M", "7M"], @@ -69993,7 +69984,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { attract: ["8M", "7M", "6M"], batonpass: ["9M"], calmmind: ["9M", "8M", "7M", "6M"], - chargebeam: ["9M", "9L15", "7M", "6M"], + chargebeam: ["9M", "7M", "6M"], charm: ["9M", "9L15", "8M", "8L15", "7L28", "6L28"], confide: ["7M", "6M"], confusion: ["9L9", "8L9", "7L1", "6L9"], @@ -70008,13 +69999,11 @@ export const Learnsets: {[k: string]: LearnsetData} = { endure: ["9M", "8M"], energyball: ["9M", "8M", "7M", "6M"], expandingforce: ["9M", "8T"], - extrasensory: ["9L44"], facade: ["9M", "8M", "7M", "6M"], fakeout: ["9L1", "8L1", "7L19", "6L19"], faketears: ["9M", "8M"], flash: ["6M"], frustration: ["7M", "6M"], - futuresight: ["9M", "9L59"], gigaimpact: ["9M", "8M", "7M", "6M"], gravity: ["9M", "7T", "6T"], healbell: ["7T", "6T"], @@ -70025,7 +70014,6 @@ export const Learnsets: {[k: string]: LearnsetData} = { irontail: ["8M", "7T", "6T"], leer: ["9L1", "8L1", "7L1", "6L1"], lightscreen: ["9M", "9L34", "8M", "8L34", "7M", "7L13", "6M", "6L13"], - magicalleaf: ["9M", "9L1"], magiccoat: ["7T", "6T"], magicroom: ["8M", "7T", "6T"], meanlook: ["9L1", "8L1", "7L1", "6L1"], @@ -70054,14 +70042,14 @@ export const Learnsets: {[k: string]: LearnsetData} = { safeguard: ["8M", "7M", "6M"], scratch: ["9L1", "8L1", "7L1", "6L1"], secretpower: ["6M"], - shadowball: ["9M", "9L49", "8M", "7M", "6M"], + shadowball: ["9M", "8M", "7M", "6M"], shockwave: ["7T", "6T"], signalbeam: ["7T", "6T"], skillswap: ["9M", "8M", "7T"], sleeptalk: ["9M", "8M", "7M", "6M"], snatch: ["7T", "6T"], snore: ["8M", "7T", "6T"], - storedpower: ["9M", "9L12"], + storedpower: ["9M"], substitute: ["9M", "8M", "7M", "6M"], suckerpunch: ["9L24", "8L24", "7L48", "6L48"], sunnyday: ["9M", "8M", "7M", "6M"], @@ -77523,10 +77511,11 @@ export const Learnsets: {[k: string]: LearnsetData} = { bounce: ["8M", "7T"], bulletseed: ["9M"], captivate: ["7L37"], + celebrate: ["9S1"], charm: ["9M", "8M"], confide: ["7M"], covet: ["7T"], - dazzlinggleam: ["9M", "8M", "7M"], + dazzlinggleam: ["9M", "9S1", "8M", "7M"], doubleslap: ["7L1", "7S0"], doubleteam: ["7M"], drainingkiss: ["9M", "8M"], @@ -77565,10 +77554,10 @@ export const Learnsets: {[k: string]: LearnsetData} = { sleeptalk: ["9M", "8M", "7M"], snore: ["8M", "7T"], solarbeam: ["9M", "8M", "7M"], - splash: ["9L1", "8L1", "7L1"], + splash: ["9L1", "9S1", "8L1", "7L1"], stomp: ["9L28", "8L28", "7L29"], substitute: ["9M", "8M", "7M"], - sunnyday: ["9M", "8M", "7M"], + sunnyday: ["9M", "9S1", "8M", "7M"], swagger: ["7M"], sweetscent: ["9L16", "8L16", "7L17", "7S0"], swift: ["9M"], @@ -77584,6 +77573,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { }, eventData: [ {generation: 7, level: 20, nature: "Naive", abilities: ["leafguard"], moves: ["magicalleaf", "doubleslap", "sweetscent"], pokeball: "cherishball"}, + {generation: 9, level: 50, abilities: ["leafguard"], moves: ["celebrate", "sunnyday", "splash", "dazzlinggleam"], pokeball: "cherishball"}, ], }, tsareena: { @@ -79982,7 +79972,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { firespin: ["9M", "8M", "8S3"], flamecharge: ["9M", "7M"], flamethrower: ["9M", "8M", "7M"], - flareblitz: ["9M", "9L70", "8M", "8L70", "7L61"], + flareblitz: ["9M", "9L70", "9S4", "8M", "8L70", "7L61"], flashcannon: ["9M", "9L28", "8M", "8L28", "7M", "7L23"], focusblast: ["9M", "8M", "7M"], frustration: ["7M"], @@ -80001,7 +79991,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { knockoff: ["9M", "7T"], lastresort: ["7T"], lightscreen: ["9M", "8M", "7M"], - metalburst: ["9L49", "8L49", "7L43"], + metalburst: ["9L49", "9S4", "8L49", "7L43"], metalclaw: ["9M", "9L1", "8L1", "7L1"], metalsound: ["9M", "9L14", "8L14", "7L13"], meteorbeam: ["9M", "8T"], @@ -80027,7 +80017,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { sleeptalk: ["9M", "8M", "7M"], snarl: ["9M", "8M", "7M"], snore: ["8M", "7T"], - solarbeam: ["9M", "9L63", "8M", "8L63", "7M", "7L47"], + solarbeam: ["9M", "9L63", "9S4", "8M", "8L63", "7M", "7L47"], steelbeam: ["9M", "8T"], steelroller: ["8T"], stoneedge: ["9M", "8M", "7M"], @@ -80047,7 +80037,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { trickroom: ["9M", "8M", "7M"], wakeupslap: ["7L1"], wideguard: ["9L77", "8L77", "7L67"], - wildcharge: ["9M", "9L56", "8M", "8L56", "7M"], + wildcharge: ["9M", "9L56", "9S4", "8M", "8L56", "7M"], workup: ["8M", "7M"], zenheadbutt: ["9M", "9L21", "8M", "8L21", "8S3", "7T", "7L19", "7S0", "7S1", "7S2"], }, @@ -80056,6 +80046,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { {generation: 7, level: 60, moves: ["sunsteelstrike", "cosmicpower", "crunch", "zenheadbutt"]}, {generation: 7, level: 60, shiny: true, moves: ["sunsteelstrike", "zenheadbutt", "nobleroar", "morningsun"], pokeball: "cherishball"}, {generation: 8, level: 70, shiny: 1, moves: ["zenheadbutt", "firespin", "irontail", "nobleroar"]}, + {generation: 9, level: 70, moves: ["flareblitz", "solarbeam", "wildcharge", "metalburst"]}, ], }, lunala: { @@ -80074,7 +80065,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { dazzlinggleam: ["9M", "8M", "7M"], defog: ["7T"], doubleteam: ["7M"], - dreameater: ["9L70", "8L70", "7M", "7L59"], + dreameater: ["9L70", "9S4", "8L70", "7M", "7L59"], dualwingbeat: ["9M", "8T"], endure: ["9M", "8M"], expandingforce: ["9M", "8T"], @@ -80096,15 +80087,15 @@ export const Learnsets: {[k: string]: LearnsetData} = { magiccoat: ["8L49", "8S3", "7T", "7L43"], magicroom: ["8M", "7T"], meteorbeam: ["9M", "8T"], - moonblast: ["9L56", "8L56", "8S3", "7L47", "7S2"], + moonblast: ["9L56", "9S4", "8L56", "8S3", "7L47", "7S2"], moongeistbeam: ["9L0", "8L0", "7L1", "7S0", "7S1", "7S2"], moonlight: ["9L35", "8L35", "7L31", "7S2"], nightdaze: ["9L42", "8L42", "7L37", "7S0", "7S1"], nightshade: ["9M", "9L7", "8L7", "7L7"], - phantomforce: ["9M", "9L63", "8M", "8L63", "7L61"], + phantomforce: ["9M", "9L63", "9S4", "8M", "8L63", "7L61"], poltergeist: ["9M", "8T"], protect: ["9M", "8M", "7M"], - psychic: ["9M", "9L49", "8M", "7M"], + psychic: ["9M", "9L49", "9S4", "8M", "7M"], psychocut: ["8M"], psychup: ["9M", "7M"], psyshock: ["9M", "8M", "7M", "7S2"], @@ -80151,6 +80142,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { {generation: 7, level: 60, moves: ["moongeistbeam", "cosmicpower", "nightdaze", "shadowball"]}, {generation: 7, level: 60, shiny: true, moves: ["moongeistbeam", "psyshock", "moonblast", "moonlight"], pokeball: "cherishball"}, {generation: 8, level: 70, shiny: 1, moves: ["shadowball", "moonblast", "magiccoat", "swift"]}, + {generation: 9, level: 70, moves: ["dreameater", "phantomforce", "moonblast", "psychic"]}, ], }, nihilego: { @@ -80707,7 +80699,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { hyperbeam: ["9M", "8M", "7M"], hypervoice: ["9M", "8M", "7T"], imprison: ["9M", "8M"], - irondefense: ["9M", "9L56", "8M", "8L56", "7T", "7L59", "7S0", "7S1"], + irondefense: ["9M", "9L56", "9S4", "8M", "8L56", "7T", "7L59", "7S0", "7S1"], ironhead: ["9M", "8M", "7T"], knockoff: ["9M", "7T"], lightscreen: ["9M", "8M", "7M", "7S2"], @@ -80720,7 +80712,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { nightslash: ["9L24", "8L24", "7L23", "7S1"], outrage: ["9M", "8M", "7T"], photongeyser: ["9L72", "8L72", "7L50", "7S1"], - powergem: ["9M", "9L64", "8M", "8L64", "8S3", "7L43", "7S1"], + powergem: ["9M", "9L64", "9S4", "8M", "8L64", "8S3", "7L43", "7S1"], prismaticlaser: ["9L88", "8L88", "7L73", "7S0"], protect: ["9M", "8M", "7M"], psychic: ["9M", "8M", "7M"], @@ -80731,7 +80723,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { reflect: ["9M", "8M", "7M"], rest: ["9M", "8M", "7M"], return: ["7M"], - rockblast: ["9M", "9L48", "8M", "8L48", "7L19"], + rockblast: ["9M", "9L48", "9S4", "8M", "8L48", "7L19"], rockpolish: ["7M"], rockslide: ["9M", "8M", "7M"], rocktomb: ["9M", "8M", "7M"], @@ -80748,7 +80740,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { solarbeam: ["9M", "8M", "7M"], stealthrock: ["9M", "9L8", "8M", "8L8", "7T", "7L53", "7S0"], stoneedge: ["9M", "8M", "7M"], - storedpower: ["9M", "9L40", "8M", "8L40", "7L13"], + storedpower: ["9M", "9L40", "9S4", "8M", "8L40", "7L13"], substitute: ["9M", "8M", "7M", "7S2"], sunnyday: ["9M"], swagger: ["7M"], @@ -80768,6 +80760,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { {generation: 7, level: 65, moves: ["photongeyser", "irondefense", "powergem", "nightslash"]}, {generation: 7, level: 75, shiny: true, moves: ["lightscreen", "substitute", "moonlight"], pokeball: "cherishball"}, {generation: 8, level: 70, shiny: 1, moves: ["psychocut", "chargebeam", "powergem", "autotomize"]}, + {generation: 9, level: 70, moves: ["powergem", "irondefense", "rockblast", "storedpower"]}, ], eventOnly: true, }, @@ -85908,12 +85901,12 @@ export const Learnsets: {[k: string]: LearnsetData} = { aerialace: ["9M", "9L12", "8L12"], attract: ["8M"], bodyslam: ["9M", "8M"], - brickbreak: ["9M", "9L24", "8M", "8L24"], + brickbreak: ["9M", "9L24", "9S1", "8M", "8L24"], bulkup: ["9M", "9L32", "8M", "8L32"], closecombat: ["9M", "9L48", "8M", "8L48"], coaching: ["8T"], counter: ["9L44", "8L44"], - detect: ["9L28", "8L28"], + detect: ["9L28", "9S1", "8L28"], dig: ["9M", "8M"], doubleedge: ["9M"], dynamicpunch: ["9L40", "8L40"], @@ -85923,7 +85916,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { fling: ["9M"], focusenergy: ["9L8", "8M", "8L8", "8S0"], focuspunch: ["9M", "9L52", "8L52"], - headbutt: ["9L20", "8L20"], + headbutt: ["9L20", "9S1", "8L20"], helpinghand: ["9M", "8M"], icepunch: ["9M", "8M"], ironhead: ["9M", "9L36", "8M", "8L36"], @@ -85940,7 +85933,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { reversal: ["9M", "8M"], rocksmash: ["9L1", "8L1", "8S0"], round: ["8M"], - scaryface: ["9M", "9L16", "8M", "8L16"], + scaryface: ["9M", "9L16", "9S1", "8M", "8L16"], sleeptalk: ["9M", "8M"], snore: ["8M"], substitute: ["9M", "8M"], @@ -85955,6 +85948,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { }, eventData: [ {generation: 8, level: 10, perfectIVs: 3, moves: ["rocksmash", "leer", "endure", "focusenergy"]}, + {generation: 9, level: 30, moves: ["detect", "brickbreak", "headbutt", "scaryface"]}, ], eventOnly: true, }, @@ -86410,7 +86404,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { closecombat: ["9M", "8M"], crunch: ["9M", "8M"], curse: ["9M"], - doubleedge: ["9M", "9L66", "8L66", "8S0"], + doubleedge: ["9M", "9L66", "9S1", "8L66", "8S0"], doublekick: ["9L6", "8L6"], endure: ["9M", "8M"], facade: ["9M", "8M"], @@ -86423,7 +86417,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { iciclecrash: ["9L36", "8L36", "8S0"], iciclespear: ["8M"], icywind: ["9M", "8M"], - irondefense: ["9M", "9L48", "8M", "8L48"], + irondefense: ["9M", "9L48", "9S1", "8M", "8L48"], lashout: ["9M", "8T"], megahorn: ["8M"], mist: ["9L30", "8L30"], @@ -86448,9 +86442,9 @@ export const Learnsets: {[k: string]: LearnsetData} = { tackle: ["9L1", "8L1"], tailwhip: ["9L1", "8L1"], takedown: ["9M", "9L42", "8L42"], - taunt: ["9M", "9L60", "8M", "8L60", "8S0"], + taunt: ["9M", "9L60", "9S1", "8M", "8L60", "8S0"], terablast: ["9M"], - thrash: ["9L54", "8L54"], + thrash: ["9L54", "9S1", "8L54"], throatchop: ["9M", "8M"], torment: ["9L24", "8L24"], trailblaze: ["9M"], @@ -86459,12 +86453,13 @@ export const Learnsets: {[k: string]: LearnsetData} = { }, eventData: [ {generation: 8, level: 75, moves: ["taunt", "doubleedge", "swordsdance", "iciclecrash"]}, + {generation: 9, level: 70, moves: ["doubleedge", "taunt", "thrash", "irondefense"]}, ], eventOnly: true, }, spectrier: { learnset: { - agility: ["9M", "9L48", "8M", "8L48"], + agility: ["9M", "9L48", "9S1", "8M", "8L48"], assurance: ["8M"], bodyslam: ["9M", "8M"], bulldoze: ["9M", "8M"], @@ -86473,8 +86468,8 @@ export const Learnsets: {[k: string]: LearnsetData} = { crunch: ["9M", "8M"], curse: ["9M"], darkpulse: ["9M", "8M"], - disable: ["9L60", "8L60", "8S0"], - doubleedge: ["9M", "9L66", "8L66", "8S0"], + disable: ["9L60", "9S1", "8L60", "8S0"], + doubleedge: ["9M", "9L66", "9S1", "8L66", "8S0"], doublekick: ["9L6", "8L6"], drainingkiss: ["9M"], endure: ["9M", "8M"], @@ -86511,12 +86506,13 @@ export const Learnsets: {[k: string]: LearnsetData} = { takedown: ["9M", "9L42", "8L42"], taunt: ["9M", "8M"], terablast: ["9M"], - thrash: ["9L54", "8L54", "8S0"], + thrash: ["9L54", "9S1", "8L54", "8S0"], uproar: ["8M"], willowisp: ["9M", "8M"], }, eventData: [ {generation: 8, level: 75, moves: ["thrash", "doubleedge", "disable", "nastyplot"]}, + {generation: 9, level: 70, moves: ["doubleedge", "disable", "thrash", "agility"]}, ], eventOnly: true, }, @@ -89293,15 +89289,15 @@ export const Learnsets: {[k: string]: LearnsetData} = { falseswipe: ["9M"], focusenergy: ["9L18"], gigaimpact: ["9M"], - glaiverush: ["9L0"], + glaiverush: ["9L0", "9S0"], helpinghand: ["9M"], highhorsepower: ["9M"], hyperbeam: ["9M"], icebeam: ["9M", "9L48"], icefang: ["9M", "9L29"], - iceshard: ["9L1"], + iceshard: ["9L1", "9S0"], iciclecrash: ["9L62"], - iciclespear: ["9M"], + iciclespear: ["9M", "9S0"], icywind: ["9M", "9L6"], ironhead: ["9M"], leer: ["9L1"], @@ -89309,7 +89305,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { protect: ["9M"], raindance: ["9M"], rest: ["9M"], - scaleshot: ["9M"], + scaleshot: ["9M", "9S0"], scaryface: ["9M"], sleeptalk: ["9M"], snowscape: ["9M", "9L1"], @@ -89322,6 +89318,9 @@ export const Learnsets: {[k: string]: LearnsetData} = { thunderfang: ["9M"], zenheadbutt: ["9M"], }, + eventData: [ + {generation: 9, level: 54, moves: ["glaiverush", "scaleshot", "iciclespear", "iceshard"], pokeball: "cherishball"}, + ], }, tatsugiri: { learnset: { @@ -91006,25 +91005,25 @@ export const Learnsets: {[k: string]: LearnsetData} = { hex: ["9M"], hyperbeam: ["9M"], hypervoice: ["9M"], - icywind: ["9M"], + icywind: ["9M", "9S1"], imprison: ["9M"], magicalleaf: ["9M"], meanlook: ["9L14"], memento: ["9L21"], mistyterrain: ["9M"], - moonblast: ["9L84"], + moonblast: ["9L84", "9S1"], mysticalfire: ["9L49", "9S0"], nightshade: ["9M"], painsplit: ["9M", "9L77"], perishsong: ["9L91"], phantomforce: ["9M", "9L70"], poltergeist: ["9M"], - powergem: ["9M", "9L56"], + powergem: ["9M", "9L56", "9S1"], protect: ["9M"], psybeam: ["9M", "9L7"], psyshock: ["9M", "9L63"], rest: ["9M"], - shadowball: ["9M", "9L42", "9S0"], + shadowball: ["9M", "9L42", "9S0", "9S1"], sleeptalk: ["9M"], spite: ["9M", "9L1"], storedpower: ["9M"], @@ -91041,6 +91040,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { }, eventData: [ {generation: 9, level: 52, shiny: 1, moves: ["shadowball", "mysticalfire", "wish", "dazzlinggleam"]}, + {generation: 9, level: 75, shiny: 1, perfectIVs: 4, moves: ["shadowball", "moonblast", "powergem", "icywind"]}, ], eventOnly: true, }, @@ -91127,9 +91127,9 @@ export const Learnsets: {[k: string]: LearnsetData} = { dragonbreath: ["9L1"], dragoncheer: ["9M"], dragonclaw: ["9M", "9L28", "9S0"], - dragondance: ["9M", "9L56"], + dragondance: ["9M", "9L56", "9S1"], dragonpulse: ["9M"], - dragonrush: ["9L63"], + dragonrush: ["9L63", "9S1"], dragontail: ["9M"], earthquake: ["9M"], endure: ["9M"], @@ -91138,7 +91138,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { firefang: ["9M"], firespin: ["9M"], flamethrower: ["9M", "9L42", "9S0"], - fly: ["9M", "9L70"], + fly: ["9M", "9L70", "9S1"], focusenergy: ["9L1"], gigaimpact: ["9M"], headbutt: ["9L14"], @@ -91154,7 +91154,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { lashout: ["9M"], leer: ["9L1"], metalclaw: ["9M"], - nightslash: ["9L49", "9S0"], + nightslash: ["9L49", "9S1", "9S0"], outrage: ["9M"], protect: ["9M"], rest: ["9M"], @@ -91182,6 +91182,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { }, eventData: [ {generation: 9, level: 52, shiny: 1, moves: ["zenheadbutt", "flamethrower", "nightslash", "dragonclaw"]}, + {generation: 9, level: 75, perfectIVs: 3, moves: ["nightslash", "dragondance", "dragonrush", "fly"], pokeball: "friendball"}, ], eventOnly: true, }, @@ -91574,7 +91575,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { brickbreak: ["9M"], calmmind: ["9M"], chargebeam: ["9M"], - closecombat: ["9M", "9L63"], + closecombat: ["9M", "9L63", "9S1"], coaching: ["9M"], confuseray: ["9M"], dazzlinggleam: ["9M", "9L28", "9S0"], @@ -91604,15 +91605,15 @@ export const Learnsets: {[k: string]: LearnsetData} = { icepunch: ["9M"], icywind: ["9M"], imprison: ["9M"], - knockoff: ["9M", "9L70"], - leafblade: ["9L49", "9S0"], + knockoff: ["9M", "9L70", "9S1"], + leafblade: ["9L49", "9S1", "9S0"], lightscreen: ["9M"], liquidation: ["9M"], lowkick: ["9M"], magicalleaf: ["9M"], metronome: ["9M"], mistyterrain: ["9M"], - moonblast: ["9L56"], + moonblast: ["9L56", "9S1"], nightslash: ["9L42", "9S0"], poisonjab: ["9M"], protect: ["9M"], @@ -91651,6 +91652,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { }, eventData: [ {generation: 9, level: 52, shiny: 1, moves: ["psychocut", "nightslash", "leafblade", "dazzlinggleam"]}, + {generation: 9, level: 75, perfectIVs: 3, moves: ["leafblade", "moonblast", "closecombat", "knockoff"], pokeball: "friendball"}, ], eventOnly: true, }, @@ -92673,6 +92675,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { absorb: ["9L6"], astonish: ["9L1"], calmmind: ["9M"], + curse: ["9M"], endure: ["9M"], energyball: ["9M"], foulplay: ["9M", "9L18"], @@ -92688,9 +92691,11 @@ export const Learnsets: {[k: string]: LearnsetData} = { memento: ["9L54"], nastyplot: ["9M"], nightshade: ["9M"], + painsplit: ["9M"], phantomforce: ["9M"], poltergeist: ["9M"], protect: ["9M"], + psychup: ["9M"], ragepowder: ["9L36"], reflect: ["9M"], rest: ["9M"], @@ -93212,7 +93217,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { bodyslam: ["9M"], breakingswipe: ["9M"], bulldoze: ["9M"], - burningbulwark: ["9L49"], + burningbulwark: ["9L49", "9S0"], crunch: ["9M"], crushclaw: ["9L35"], doubleedge: ["9M"], @@ -93222,12 +93227,12 @@ export const Learnsets: {[k: string]: LearnsetData} = { dragonclaw: ["9M", "9L28"], dragondance: ["9M"], dragonpulse: ["9M"], - dragonrush: ["9L56"], + dragonrush: ["9L56", "9S0"], dragontail: ["9M"], earthquake: ["9M"], endure: ["9M"], facade: ["9M"], - fireblast: ["9M", "9L63"], + fireblast: ["9M", "9L63", "9S0"], firefang: ["9M", "9L7"], firespin: ["9M"], flamecharge: ["9M"], @@ -93240,7 +93245,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { hyperbeam: ["9M"], incinerate: ["9L1"], ironhead: ["9M"], - lavaplume: ["9L70"], + lavaplume: ["9L70", "9S0"], leer: ["9L1"], morningsun: ["9L42"], nobleroar: ["9L1"], @@ -93269,6 +93274,10 @@ export const Learnsets: {[k: string]: LearnsetData} = { thunderfang: ["9M"], weatherball: ["9M"], }, + eventData: [ + {generation: 9, level: 75, ivs: {hp: 20, atk: 20, def: 20, spa: 20, spd: 20, spe: 20}, moves: ["lavaplume", "fireblast", "dragonrush", "burningbulwark"]}, + ], + eventOnly: true, }, ragingbolt: { learnset: { @@ -93285,8 +93294,8 @@ export const Learnsets: {[k: string]: LearnsetData} = { dracometeor: ["9M"], dragonbreath: ["9L14"], dragoncheer: ["9M"], - dragonhammer: ["9L56"], - dragonpulse: ["9M", "9L70"], + dragonhammer: ["9L56", "9S0"], + dragonpulse: ["9M", "9L70", "9S0"], dragontail: ["9M", "9L35"], earthquake: ["9M"], eerieimpulse: ["9M"], @@ -93302,7 +93311,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { outrage: ["9M"], protect: ["9M"], rest: ["9M"], - risingvoltage: ["9L63"], + risingvoltage: ["9L63", "9S0"], roar: ["9M"], scaryface: ["9M"], shockwave: ["9L1"], @@ -93319,7 +93328,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { terablast: ["9M"], thunder: ["9M", "9L91"], thunderbolt: ["9M"], - thunderclap: ["9L49"], + thunderclap: ["9L49", "9S0"], thunderfang: ["9M"], thunderwave: ["9M"], twister: ["9L1"], @@ -93328,6 +93337,10 @@ export const Learnsets: {[k: string]: LearnsetData} = { wildcharge: ["9M"], zapcannon: ["9L77"], }, + eventData: [ + {generation: 9, level: 75, ivs: {hp: 20, atk: 20, def: 20, spa: 20, spd: 20, spe: 20}, moves: ["dragonpulse", "risingvoltage", "dragonhammer", "thunderclap"]}, + ], + eventOnly: true, }, ironboulder: { learnset: { @@ -93350,9 +93363,9 @@ export const Learnsets: {[k: string]: LearnsetData} = { irondefense: ["9M"], ironhead: ["9M"], leer: ["9L1"], - megahorn: ["9L70"], + megahorn: ["9L70", "9S0"], meteorbeam: ["9M"], - mightycleave: ["9L56"], + mightycleave: ["9L56", "9S0"], poisonjab: ["9M"], protect: ["9M"], psychic: ["9M"], @@ -93364,7 +93377,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { rockblast: ["9M"], rockthrow: ["9L1"], rocktomb: ["9M", "9L42"], - sacredsword: ["9L49"], + sacredsword: ["9L49", "9S0"], sandstorm: ["9M"], scaryface: ["9M"], slash: ["9L14"], @@ -93372,7 +93385,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { solarblade: ["9M"], stoneedge: ["9M", "9L84"], substitute: ["9M"], - swordsdance: ["9M", "9L63"], + swordsdance: ["9M", "9L63", "9S0"], takedown: ["9M"], taunt: ["9M"], terablast: ["9M"], @@ -93381,6 +93394,10 @@ export const Learnsets: {[k: string]: LearnsetData} = { xscissor: ["9M"], zenheadbutt: ["9M"], }, + eventData: [ + {generation: 9, level: 75, ivs: {hp: 20, atk: 20, def: 20, spa: 20, spd: 20, spe: 20}, moves: ["megahorn", "swordsdance", "mightycleave", "sacredsword"]}, + ], + eventOnly: true, }, ironcrown: { learnset: { @@ -93398,7 +93415,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { facade: ["9M"], flashcannon: ["9M", "9L42"], focusblast: ["9M"], - futuresight: ["9M", "9L63"], + futuresight: ["9M", "9L63", "9S0"], gigaimpact: ["9M"], gravity: ["9M"], heavyslam: ["9M"], @@ -93416,7 +93433,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { psyshock: ["9M", "9L28"], quickguard: ["9L77"], rest: ["9M"], - sacredsword: ["9L49"], + sacredsword: ["9L49", "9S0"], scaryface: ["9M"], slash: ["9L14"], sleeptalk: ["9M"], @@ -93427,13 +93444,17 @@ export const Learnsets: {[k: string]: LearnsetData} = { substitute: ["9M"], supercellslam: ["9M"], swordsdance: ["9M"], - tachyoncutter: ["9L56"], + tachyoncutter: ["9L56", "9S0"], takedown: ["9M"], terablast: ["9M"], - voltswitch: ["9M", "9L70"], + voltswitch: ["9M", "9L70", "9S0"], xscissor: ["9M"], zenheadbutt: ["9M"], }, + eventData: [ + {generation: 9, level: 75, ivs: {hp: 20, atk: 20, def: 20, spa: 20, spd: 20, spe: 20}, moves: ["voltswitch", "futuresight", "tachyoncutter", "sacredsword"]}, + ], + eventOnly: true, }, terapagos: { learnset: { @@ -93448,7 +93469,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { dazzlinggleam: ["9M"], doubleedge: ["9M", "9L70"], dragonpulse: ["9M"], - earthpower: ["9M", "9L40"], + earthpower: ["9M", "9L40", "9S0"], earthquake: ["9M"], endure: ["9M"], energyball: ["9M"], @@ -93486,17 +93507,21 @@ export const Learnsets: {[k: string]: LearnsetData} = { supercellslam: ["9M"], surf: ["9M"], takedown: ["9M"], - terastarstorm: ["9L60"], + terastarstorm: ["9L60", "9S0"], thunder: ["9M"], thunderbolt: ["9M"], toxic: ["9M"], triattack: ["9L1"], - waterpulse: ["9M"], + waterpulse: ["9M", "9S0"], weatherball: ["9M"], wildcharge: ["9M"], withdraw: ["9L1"], - zenheadbutt: ["9M"], + zenheadbutt: ["9M", "9S0"], }, + eventData: [ + {generation: 9, level: 85, gender: "M", nature: "Hardy", ivs: {hp: 31, atk: 15, def: 31, spa: 31, spd: 31, spe: 31}, moves: ["terastarstorm", "zenheadbutt", "earthpower", "waterpulse"]}, + ], + eventOnly: true, }, pecharunt: { learnset: { @@ -93511,10 +93536,10 @@ export const Learnsets: {[k: string]: LearnsetData} = { gunkshot: ["9M"], hex: ["9M"], imprison: ["9M"], - malignantchain: ["9L48"], + malignantchain: ["9L48", "9S0"], meanlook: ["9L1"], memento: ["9L1"], - nastyplot: ["9M", "9L64"], + nastyplot: ["9M", "9L64", "9S0"], nightshade: ["9M"], partingshot: ["9L32"], phantomforce: ["9M"], @@ -93524,7 +93549,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { recover: ["9L72"], rest: ["9M"], rollout: ["9L1"], - shadowball: ["9M", "9L40"], + shadowball: ["9M", "9L40", "9S0"], sleeptalk: ["9M"], sludgebomb: ["9M"], sludgewave: ["9M"], @@ -93532,10 +93557,14 @@ export const Learnsets: {[k: string]: LearnsetData} = { spite: ["9M"], substitute: ["9M"], terablast: ["9M"], - toxic: ["9M", "9L56"], + toxic: ["9M", "9L56", "9S0"], venoshock: ["9M"], withdraw: ["9L8"], }, + eventData: [ + {generation: 9, level: 88, nature: "Timid", moves: ["nastyplot", "toxic", "malignantchain", "shadowball"]}, + ], + eventOnly: true, }, syclar: { learnset: { @@ -93678,7 +93707,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { sheercold: ["9L67", "8L67", "5L59", "4L60"], signalbeam: ["7T"], silverwind: ["4M"], - skittersmack: ["8T"], + skittersmack: ["9M", "8T"], slash: ["9L39", "8L39", "7L28", "4L14"], sleeptalk: ["9M", "8M", "7M", "4M"], snore: ["8M", "4T"], @@ -93697,7 +93726,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { terablast: ["9M"], toxic: ["7M", "4M"], trailblaze: ["9M"], - tripleaxel: ["8T"], + tripleaxel: ["9M", "8T"], uturn: ["9M", "8M", "7M", "4M"], waterpulse: ["9M", "6T", "4M"], xscissor: ["9M", "9L46", "8M", "8L46", "7M", "7L32", "4M", "4L27"], @@ -93766,7 +93795,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { payback: ["8M", "7M", "6M", "5M", "4M"], phantomforce: ["9M"], poisonjab: ["9M", "8M", "7M", "6M", "5M", "4M"], - poltergeist: ["8T"], + poltergeist: ["9M", "8T"], poweruppunch: ["6M"], powerwhip: ["9L52", "8L56", "7L60", "6L60", "5L60", "4L55"], protect: ["9M", "8M", "7M", "6M", "5M", "4M"], @@ -93816,6 +93845,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { toxic: ["7M", "6M", "5M", "4M"], trick: ["9M", "8M", "7T", "6T", "5T", "4T"], trickroom: ["9M", "8M", "7M", "6M", "5M", "4M"], + upperhand: ["9M"], vacuumwave: ["9M", "4T"], willowisp: ["9M", "8M", "7M"], wonderroom: ["8M", "7T", "6T", "5T"], @@ -94019,6 +94049,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { counter: ["4T"], doubleedge: ["9L1", "8L1", "4T"], doubleteam: ["7M", "4M"], + dragoncheer: ["9M"], dragondance: ["9M", "8M"], dragonpulse: ["9M", "8M", "7T"], dragontail: ["9M", "7M"], @@ -94079,7 +94110,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { round: ["8M", "7M"], safeguard: ["8M", "7M", "4M"], sandtomb: ["9M", "8M"], - scorchingsands: ["8T"], + scorchingsands: ["9M", "8T"], secretpower: ["7M", "4M"], seedbomb: ["9M", "9L32", "8M", "8L32", "7L23", "4T"], sleeptalk: ["9M", "8M", "7M", "4M"], @@ -94096,6 +94127,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { swordsdance: ["9M", "8M", "7M", "4M"], synthesis: ["9L27", "8L27", "7L14", "4T", "4L48"], takedown: ["9M"], + temperflare: ["9M"], terablast: ["9M"], terrainpulse: ["8T"], toxic: ["7M", "4M"], @@ -94244,7 +94276,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { poisonjab: ["9M", "8M", "7M", "4M"], pounce: ["9M"], protect: ["9M", "8M", "7M", "4M"], - psychup: ["7M", "4M"], + psychup: ["9M", "7M", "4M"], raindance: ["9M", "8M", "7M", "4M"], rapidspin: ["9L16", "8L16", "7L9", "4L9"], reflect: ["9M", "8M", "7M", "4M"], @@ -94260,15 +94292,15 @@ export const Learnsets: {[k: string]: LearnsetData} = { safeguard: ["9L1", "8M", "8L1", "7M", "4M"], sandstorm: ["9M", "8M", "7M", "4M"], sandtomb: ["9M", "8M"], - scorchingsands: ["8T"], + scorchingsands: ["9M", "8T"], secretpower: ["7M", "4M"], selfdestruct: ["8M"], shadowball: ["9M", "8M", "7M", "4M"], skillswap: ["9M", "8M", "7M", "4M"], - skittersmack: ["8T"], + skittersmack: ["9M", "8T"], sleeptalk: ["9M", "8M", "7M", "4M"], sludgebomb: ["9M", "9L38", "8M", "8L38", "7M", "7L35", "4M", "4L35"], - sludgewave: ["8M", "7M"], + sludgewave: ["9M", "8M", "7M"], smartstrike: ["9M", "8M"], snatch: ["7M", "4M"], snore: ["8M", "7T", "4T"], @@ -94290,6 +94322,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { toxicspikes: ["9M", "9L20", "8M", "8L20", "7L41", "4L41"], trickroom: ["9M", "8M", "7M", "4M"], twister: ["4T"], + upperhand: ["9M"], uturn: ["9M", "8M", "7M", "4M"], venoshock: ["9M", "8M", "7M"], whirlwind: ["9L32", "8L32", "7L25", "4L25"], @@ -94647,7 +94680,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { chipaway: ["7L30"], circlethrow: ["9L1", "8L1", "7L1"], closecombat: ["9M", "8M"], - coaching: ["8T"], + coaching: ["9M", "8T"], confide: ["7M"], crosschop: ["7M"], crosspoison: ["8M"], @@ -94668,6 +94701,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { gigaimpact: ["9M", "8M", "7M", "4M"], gunkshot: ["9M", "8M", "7T", "4T"], hail: ["8M", "7M", "4M"], + hardpress: ["9M"], headbutt: ["9L36", "8L36", "4T"], hiddenpower: ["7M", "4M"], hydropump: ["9M", "8M"], @@ -94682,7 +94716,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { lowsweep: ["9M", "8M", "7M"], machpunch: ["9L16", "8L16", "7L35", "4L32"], megapunch: ["8M"], - muddywater: ["8M"], + muddywater: ["9M", "8M"], mudslap: ["9M", "4T"], naturalgift: ["4M"], poisonjab: ["9M", "8M", "7M"], @@ -94704,7 +94738,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { scald: ["8M", "8L42", "7M", "7L40"], scaryface: ["9M", "8M"], secretpower: ["7M", "4M"], - skittersmack: ["8T"], + skittersmack: ["9M", "8T"], sleeptalk: ["9M", "8M", "7M", "4M"], sludgebomb: ["9M", "8M", "7M", "4M"], smokescreen: ["9L12", "8L12", "7L7", "4L7"], @@ -94723,7 +94757,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { taunt: ["9M", "9L32", "8M", "8L32", "7M", "7L24", "4M", "4L36"], terablast: ["9M"], thief: ["9M", "9L1", "8M", "8L1", "7M", "7L51", "4M", "4L47"], - throatchop: ["8M"], + throatchop: ["9M", "8M"], thunderpunch: ["9M", "8M", "7T", "4T"], torment: ["7M", "4M"], toxic: ["7M", "4M"], @@ -94731,7 +94765,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { waterfall: ["9M", "8M", "7M", "4M"], watergun: ["9L1", "8L1"], waterpulse: ["9M", "7T", "4M"], - whirlpool: ["8M", "4M"], + whirlpool: ["9M", "8M", "4M"], wideguard: ["9L54", "8L54", "7L62"], workup: ["8M", "7M"], wrap: ["9L1", "8L1", "7L1", "4L1"], @@ -94851,7 +94885,8 @@ export const Learnsets: {[k: string]: LearnsetData} = { dreameater: ["7M", "4M"], earthquake: ["9M", "8M", "7M", "4M"], embargo: ["7M", "4M"], - endeavor: ["7T", "4T"], + encore: ["9M"], + endeavor: ["9M", "7T", "4T"], facade: ["9M", "8M", "7M", "4M"], fakeout: ["9L1", "8L1", "7L27", "4L35"], falseswipe: ["9M", "8M", "7M", "4M"], @@ -94891,7 +94926,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { playrough: ["9M", "8M", "7E"], poltergeist: ["9M", "8T"], protect: ["9M", "8M", "7M", "4M"], - psychup: ["7M", "4M"], + psychup: ["9M", "7M", "4M"], raindance: ["9M", "8M", "7M", "4M"], rest: ["9M", "8M", "7M", "4M"], retaliate: ["8M", "7M"], @@ -94906,7 +94941,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { shadowclaw: ["9M", "9L32", "8M", "8L32", "7M", "7L35", "4M", "4L40"], shadowsneak: ["9L16", "8L16", "7L18", "4L18"], shadowstrike: ["9L44", "8L44", "7L48", "4L49"], - skittersmack: ["8T"], + skittersmack: ["9M", "8T"], sleeptalk: ["9M", "8M", "7M", "4M"], snatch: ["7M", "4M"], snore: ["8M", "7T", "4T"], @@ -94929,6 +94964,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { toxic: ["7M", "4M"], trick: ["9M", "9L1", "8M", "8L1", "7T", "4T"], trickroom: ["9M", "8M", "7M", "4M"], + upperhand: ["9M"], uturn: ["9M", "8M", "7M", "4M"], willowisp: ["9M", "8M", "7M", "4M"], }, @@ -95138,6 +95174,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { doubleteam: ["7M", "4M"], dracometeor: ["9M", "8T", "7T", "4T"], dragonbreath: ["9L20", "8L20", "7L29"], + dragoncheer: ["9M"], dragonclaw: ["9M", "8M", "7M", "4M"], dragonpulse: ["9M", "8M", "7T", "4M"], dragonrage: ["7L24", "4L7"], @@ -95146,7 +95183,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { eerieimpulse: ["9M", "8M"], electricterrain: ["9M", "9L1", "8M", "8L1", "7L1"], electroball: ["9M", "8M"], - electroweb: ["8M", "7T"], + electroweb: ["9M", "8M", "7T"], endure: ["9M", "8M", "4M"], facade: ["9M", "8M", "7M", "4M"], fireblast: ["9M", "8M", "7M", "4M"], @@ -95171,7 +95208,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { irontail: ["8M", "7T"], lightscreen: ["9M", "8M", "7M", "4M"], lockon: ["9L56", "8L56"], - muddywater: ["8M"], + muddywater: ["9M", "8M"], mudslap: ["9M", "4T"], naturalgift: ["4M"], naturepower: ["7M"], @@ -95196,6 +95233,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { strength: ["4M"], substitute: ["9M", "8M", "7M", "4M"], sunnyday: ["9M", "8M", "7M", "4M"], + supercellslam: ["9M"], surf: ["9M", "8M", "7M", "4M"], swagger: ["7M"], swift: ["9M", "8M", "4T"], @@ -95377,7 +95415,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { round: ["8M", "7M"], sandstorm: ["9M", "8M", "7M", "4M"], sandtomb: ["9M", "9L1", "8M", "8L1"], - scorchingsands: ["8T"], + scorchingsands: ["9M", "8T"], screech: ["8M"], secretpower: ["7M", "4M"], sleeptalk: ["9M", "8M", "7M", "4M"], @@ -95393,11 +95431,13 @@ export const Learnsets: {[k: string]: LearnsetData} = { substitute: ["9M", "8M", "7M", "4M"], suckerpunch: ["4T"], sunnyday: ["9M", "8M", "7M", "4M"], + supercellslam: ["9M"], superpower: ["8M", "7T", "6T", "5T", "4T"], swagger: ["7M", "4M"], swallow: ["9L42", "8L42", "7L53", "4L48"], takedown: ["9M"], taunt: ["9M", "8M", "7M", "4M"], + temperflare: ["9M"], terablast: ["9M"], thunderfang: ["9M", "8M"], torment: ["7M"], @@ -95448,7 +95488,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { eerieimpulse: ["9M", "8M"], electricterrain: ["9M", "8M"], electroball: ["9M", "8M"], - electroweb: ["8M", "7T"], + electroweb: ["9M", "8M", "7T"], endure: ["9M", "8M", "4M"], facade: ["9M", "8M", "7M", "4M"], flash: ["4M"], @@ -95624,7 +95664,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { captivate: ["4M"], charge: ["9M", "9L20", "8L20", "7L19", "4L19"], closecombat: ["9M", "9L64", "8M", "8L64", "7L35", "4L35"], - coaching: ["8T"], + coaching: ["9M", "8T"], confide: ["7M"], copycat: ["9L1", "8L1", "7L1", "4L1"], counter: ["4T"], @@ -95695,6 +95735,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { swagger: ["7M", "4M"], taunt: ["9M", "8M", "7M", "4M"], tearfullook: ["9L24", "8L24", "7L22"], + temperflare: ["9M"], terablast: ["9M"], thief: ["9M", "8M", "7M", "4M"], throatchop: ["9L1", "8M", "8L1"], @@ -95803,7 +95844,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { bulkup: ["9M", "9L1", "8M", "8L1", "7M", "5M"], bulldoze: ["9M", "8M", "7M", "5M"], closecombat: ["9M", "8M"], - coaching: ["8T"], + coaching: ["9M", "8T"], confide: ["7M"], confuseray: ["9M", "7M"], doubleteam: ["7M", "5M"], @@ -95872,7 +95913,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { taunt: ["9M", "9L1", "8M", "8L1", "7M", "5M"], terablast: ["9M"], thief: ["9M", "8M", "7M", "5M"], - throatchop: ["8M"], + throatchop: ["9M", "8M"], toxic: ["7M", "5M"], trailblaze: ["9M"], whirlwind: ["9L18", "8L18", "7L23", "5L23"], @@ -95928,8 +95969,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { seedbomb: ["9M", "9L24", "8M", "8L24", "7T", "7L39"], shadowball: ["9M", "9L36", "8M", "8L36", "7M", "7L43", "5M", "5L44"], shadowsneak: ["9L4", "8L4", "7L4", "5L13"], - shellsmash: ["9E"], - sketch: ["7E", "5E"], + sketch: ["9S0", "5E"], skittersmack: ["8T"], sleeptalk: ["9M", "8M", "7M"], snore: ["8M", "7T"], @@ -95949,6 +95989,9 @@ export const Learnsets: {[k: string]: LearnsetData} = { willowisp: ["9M", "9L20", "8M", "8L20", "7M", "7L15", "5M", "5L19"], worryseed: ["7T"], }, + eventData: [ + {generation: 9, level: 1, shiny: 1, moves: ["sketch"]}, + ], }, necturna: { learnset: { @@ -95966,7 +96009,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { facade: ["9M", "8M", "7M", "5M"], flash: ["6M", "5M"], frustration: ["7M", "5M"], - futuresight: ["8M"], + futuresight: ["9M", "8M"], gigadrain: ["8M", "6T"], gigaimpact: ["9M", "8M", "7M", "5M"], grassknot: ["9M", "8M", "7M", "5M"], @@ -95992,7 +96035,8 @@ export const Learnsets: {[k: string]: LearnsetData} = { powerwhip: ["9L52", "8M", "8L52", "7L56", "5L60"], protect: ["9M", "8M", "7M", "5M"], psychic: ["9M", "8M", "7M", "5M"], - psychup: ["7M", "5M"], + psychicnoise: ["9M"], + psychup: ["9M", "7M", "5M"], rest: ["9M", "8M", "7M", "5M"], return: ["7M", "5M"], round: ["8M", "7M", "5M"], @@ -96001,7 +96045,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { shadowball: ["9M", "9L40", "8M", "8L40", "7M", "7L50", "5M", "5L50"], shadowclaw: ["9M", "8M", "7M", "5M"], shadowsneak: ["9L1", "8L1", "7L6", "5L13"], - skittersmack: ["8T"], + skittersmack: ["9M", "8T"], sleeptalk: ["9M", "8M", "7M"], snore: ["8M", "7T"], solarbeam: ["9M", "8M", "7M", "5M"], @@ -96081,7 +96125,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { secretpower: ["7M"], selfdestruct: ["8M"], shockwave: ["7T"], - skittersmack: ["8T"], + skittersmack: ["9M", "8T"], sleeptalk: ["9M", "8M", "7M", "7E", "5E"], sludgebomb: ["9M", "8M", "7M", "5M"], sludgewave: ["9L36", "8M", "8L36", "7M", "5M"], @@ -96282,12 +96326,13 @@ export const Learnsets: {[k: string]: LearnsetData} = { confide: ["7M"], cut: ["6M", "5M"], doubleteam: ["9L9", "8L9", "7M", "5M"], + dragoncheer: ["9M"], dragondance: ["9M", "9L1", "8M", "8L1", "7L1", "5L1"], dreameater: ["7M", "5M"], dualwingbeat: ["9M", "8T"], echoedvoice: ["7M", "5M"], - electroweb: ["8M", "7T", "5T"], - expandingforce: ["8T"], + electroweb: ["9M", "8M", "7T", "5T"], + expandingforce: ["9M", "8T"], facade: ["9M", "8M", "7M", "5M"], finalgambit: ["9L61", "8L61", "5L41"], flash: ["6M", "5M"], @@ -96316,6 +96361,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { pounce: ["9M"], protect: ["9M", "8M", "7M", "5M"], psychic: ["9M", "9L47", "8M", "8L47", "7M", "5M"], + psychicnoise: ["9M"], psychicterrain: ["9M", "9L0", "8M", "8L0", "7L1"], psychup: ["7M", "5M"], psyshock: ["9M", "8M", "7M", "5M"], @@ -96334,7 +96380,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { signalbeam: ["7T"], silverwind: ["7L1", "5L1"], skillswap: ["9M", "8M", "7T", "5T"], - skittersmack: ["8T"], + skittersmack: ["9M", "8T"], sleeptalk: ["9M", "8M", "7M"], snore: ["8M", "7T"], snowscape: ["9M"], @@ -96455,13 +96501,14 @@ export const Learnsets: {[k: string]: LearnsetData} = { attract: ["8M", "7M", "5M"], beatup: ["8M"], bind: ["7T", "5T"], - breakingswipe: ["8M"], + breakingswipe: ["9M", "8M"], brutalswing: ["8M", "7M"], confide: ["7M"], crunch: ["9M", "9L28", "8M", "8L28", "7L43", "5L42"], cut: ["6M", "5M"], darkpulse: ["9M", "8M", "7M", "5T"], doubleteam: ["7M", "5M"], + dragoncheer: ["9M"], dragontail: ["9M", "7M", "5M"], endure: ["9M", "8M"], energyball: ["9M", "8M", "7M", "5M"], @@ -96506,7 +96553,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { screech: ["8M"], secretpower: ["7M"], seedbomb: ["9M", "8M", "7T", "5T"], - skittersmack: ["8T"], + skittersmack: ["9M", "8T"], slam: ["9L24", "8L24", "7L29", "5L30"], sleeptalk: ["9M", "8M", "7M", "5T"], snarl: ["9M", "8M", "7M", "5M"], @@ -96522,9 +96569,10 @@ export const Learnsets: {[k: string]: LearnsetData} = { swagger: ["7M", "5M"], synthesis: ["7T", "6T", "5T"], taunt: ["9M", "8M", "7M", "5M"], + temperflare: ["9M"], terablast: ["9M"], thief: ["9M", "8M", "7M", "5M"], - throatchop: ["8M"], + throatchop: ["9M", "8M"], thunderfang: ["9M", "8M"], toxic: ["7M", "6M", "5M"], trailblaze: ["9M"], @@ -96642,6 +96690,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { frustration: ["7M", "5M"], gigaimpact: ["9M", "8M", "7M", "5M"], growl: ["9L1", "8L1", "7L5", "5L5"], + hardpress: ["9M"], hiddenpower: ["7M", "5M"], hurricane: ["9M", "9L62", "8M", "8L62", "7L64", "5L58"], hyperbeam: ["9M", "8M", "7M", "5M"], @@ -96682,10 +96731,11 @@ export const Learnsets: {[k: string]: LearnsetData} = { tailwind: ["9M", "9L44", "8L44", "5T", "5L48"], takedown: ["9M"], terablast: ["9M"], - throatchop: ["8M"], + throatchop: ["9M", "8M"], toxic: ["7M", "5M"], + upperhand: ["9M"], waterpulse: ["9M", "7T"], - whirlpool: ["8M"], + whirlpool: ["9M", "8M"], wingattack: ["9L24", "8L24", "7L22", "5L22"], }, }, @@ -96802,7 +96852,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { leechlife: ["9M", "8M", "7M", "6L1"], liquidation: ["9M", "8M"], memento: ["9L68", "8L68", "7L66", "6L66"], - muddywater: ["8M"], + muddywater: ["9M", "8M"], overheat: ["9M", "8M", "7M", "6M"], payback: ["8M", "7M", "6M"], pounce: ["9M"], @@ -96816,7 +96866,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { round: ["8M", "7M", "6M"], scald: ["9M", "9L0", "8M", "8L0", "7M", "7L28", "6M", "6L28"], scaryface: ["9M", "8M"], - scorchingsands: ["8T"], + scorchingsands: ["9M", "8T"], secretpower: ["7M"], skittersmack: ["8T"], sleeptalk: ["9M", "8M", "7M", "6M"], @@ -96932,7 +96982,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { electricterrain: ["9M", "9L1", "8M", "8L1", "7L1"], electrify: ["9L46", "8L46"], electroball: ["9M", "8M"], - electroweb: ["8M", "7T"], + electroweb: ["9M", "8M", "7T"], encore: ["9M", "9L12", "8M", "8L12", "7L16", "6L16"], endure: ["9M", "8M"], facade: ["9M", "8M", "7M", "6M"], @@ -96966,6 +97016,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { sludgewave: ["9L52", "8M", "8L52", "7M", "6M"], snore: ["8M", "7T"], substitute: ["9M", "8M", "7M", "6M"], + supercellslam: ["9M"], supersonic: ["9L1", "8L1", "7L1", "6L1"], surf: ["9M"], swagger: ["9L58", "8L58", "7M", "7L56", "6M", "6L56"], @@ -97147,7 +97198,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { blizzard: ["9M", "8M", "7M", "6M"], bodypress: ["9M", "8M"], bodyslam: ["9M", "8M"], - breakingswipe: ["8M"], + breakingswipe: ["9M", "8M"], brine: ["9L28", "8M", "8L28", "7L45", "6L45"], brutalswing: ["8M", "7M"], bubblebeam: ["9L24", "8L24", "7L25", "6L25"], @@ -97171,6 +97222,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { gigaimpact: ["9M", "8M", "7M", "6M"], gust: ["9L1", "8L1", "7L1", "6L1"], hail: ["8M", "7M", "6M"], + hardpress: ["9M"], haze: ["9M"], heavyslam: ["9M", "9L66", "8M", "8L66", "7L1"], hiddenpower: ["7M", "6M"], @@ -97266,7 +97318,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { knockoff: ["9E"], lightscreen: ["9M", "8M"], magicroom: ["8M", "6T"], - meteorbeam: ["8T"], + meteorbeam: ["9M", "8T"], metronome: ["9M", "8M"], payback: ["8M", "7M", "6M"], pinmissile: ["8M"], @@ -97295,7 +97347,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { sleeptalk: ["9M", "8M", "7M", "6M"], sludge: ["9L44", "8L44", "7L28", "6L28"], sludgebomb: ["9M", "8M", "7M", "6M"], - sludgewave: ["8M", "8L60", "7M", "6M"], + sludgewave: ["9M", "8M", "8L60", "7M", "6M"], smackdown: ["9M", "9L24", "8L24", "7M", "7L23", "6M", "6L23"], snatch: ["6T"], snore: ["8M", "6T"], @@ -97395,7 +97447,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { celebrate: ["6S0"], charm: ["9M", "9L9", "8M", "8L1"], closecombat: ["9M", "9L42", "8M", "8L42", "7L53", "6L53"], - coaching: ["8T"], + coaching: ["9M", "8T"], confide: ["7L25", "6L25"], crushclaw: ["9L0", "8L0", "7M", "6M"], dazzlinggleam: ["9M", "8M", "7M", "6M"], @@ -97436,7 +97488,8 @@ export const Learnsets: {[k: string]: LearnsetData} = { poweruppunch: ["8L9", "7M", "6M"], protect: ["9M", "8M", "7M", "6M"], psychic: ["9M"], - psychup: ["7M", "6M"], + psychicnoise: ["9M"], + psychup: ["9M", "7M", "6M"], rest: ["9M", "9L27", "8M", "8L27", "7M", "7L41", "6M", "6L41"], retaliate: ["8M", "7M", "6M"], return: ["7M", "6M"], @@ -97448,7 +97501,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { secretpower: ["7M"], sleeptalk: ["9M", "8M", "7M", "6M"], sludgebomb: ["9M", "8M", "7M", "6M"], - sludgewave: ["8M", "7M", "6M"], + sludgewave: ["9M", "8M", "7M", "6M"], snarl: ["9M", "8M", "7M", "6M"], snore: ["9L27", "8M", "8L27", "6T"], speedswap: ["8M"], @@ -97463,6 +97516,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { terablast: ["9M"], torment: ["9L36", "8L36", "7M", "6M"], toxic: ["7M", "6M"], + upperhand: ["9M"], uproar: ["9M", "8M"], vacuumwave: ["9M"], wakeupslap: ["7L13", "6L13"], @@ -97490,6 +97544,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { doubleteam: ["9L25", "8L25", "7M"], dracometeor: ["9M", "8T", "7T"], dragonbreath: ["9L20", "8L20", "7L19"], + dragoncheer: ["9M"], dragonclaw: ["9M", "9L35", "8M", "8L35", "7M", "7L23"], dragonpulse: ["9M", "8M", "7T"], dragonrage: ["7L12"], @@ -97530,7 +97585,8 @@ export const Learnsets: {[k: string]: LearnsetData} = { protect: ["9M", "8M", "7M"], psychic: ["9M", "8M", "7M"], psychicfangs: ["9M", "9L50", "8M", "8L50", "7L32"], - psychup: ["7M"], + psychicnoise: ["9M"], + psychup: ["9M", "7M"], raindance: ["9M", "8M", "7M"], rest: ["9M", "8M", "7M"], return: ["7M"], @@ -97552,13 +97608,14 @@ export const Learnsets: {[k: string]: LearnsetData} = { takedown: ["9M"], taunt: ["9M"], telekinesis: ["7T"], + temperflare: ["9M"], terablast: ["9M"], - throatchop: ["8M", "7T"], + throatchop: ["9M", "8M", "7T"], toxic: ["9M", "7M"], toxicspikes: ["9M", "8M", "7L28"], trickroom: ["9M", "8M", "7M"], venoshock: ["9M", "8M", "7M"], - whirlpool: ["8M", "7E"], + whirlpool: ["9M", "8M", "7E"], wrap: ["9L1", "8L1", "7L1"], zenheadbutt: ["9M", "8M", "7T"], }, @@ -97881,7 +97938,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { echoedvoice: ["7M"], eerieimpulse: ["9M", "8M"], electricterrain: ["9M", "9L1", "8M", "8L1", "7L1"], - electroweb: ["8M", "7T"], + electroweb: ["9M", "8M", "7T"], endeavor: ["7T"], endure: ["9M", "8M"], energyball: ["9M", "9L1", "8M", "8L1", "7M"], @@ -97928,6 +97985,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { spark: ["9L30", "8L30", "7L24"], substitute: ["9M", "8M", "7M"], sunnyday: ["9M", "8M", "7M"], + supercellslam: ["9M"], swagger: ["7M"], swift: ["9M", "8M"], swordsdance: ["9M", "8M", "7M"], @@ -97936,7 +97994,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { takedown: ["9M"], terablast: ["9M"], terrainpulse: ["8T"], - throatchop: ["8M"], + throatchop: ["9M", "8M"], thunder: ["9M", "8M", "7M"], thunderbolt: ["9M", "8M", "7M"], thundershock: ["9L1", "8L1", "7L1"], @@ -98123,6 +98181,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { defog: ["7T"], dig: ["9M", "9L1", "8M", "8L1"], doubleteam: ["7M"], + dragoncheer: ["9M"], earthpower: ["9M", "8M", "7T"], earthquake: ["9M", "9L56", "8M", "8L56", "7M", "7L54"], ember: ["9L1", "8L1", "7L1"], @@ -98169,7 +98228,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { round: ["8M", "7M"], sandtomb: ["9M", "8M"], scaleshot: ["9M", "8T"], - scorchingsands: ["8T"], + scorchingsands: ["9M", "8T"], scratch: ["9L1", "8L1", "7L1"], screech: ["9L49", "8M", "8L49", "7L49"], sleeptalk: ["9M", "8M", "7M"], @@ -98187,6 +98246,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { swagger: ["7M"], tailwhip: ["9L1", "8L1", "7L1"], taunt: ["9M", "8M", "7M"], + temperflare: ["9M"], terablast: ["9M"], toxic: ["9M", "9L63", "8L63", "7M"], trailblaze: ["9M"], @@ -98371,6 +98431,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { }, snaelstrom: { learnset: { + alluringvoice: ["9M"], allyswitch: ["8M"], aquajet: ["9L12", "8L12", "7L17"], aquaring: ["9L1", "8L1", "7L1"], @@ -98396,7 +98457,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { endure: ["9M", "8M"], facade: ["9M", "8M", "7M"], frustration: ["7M"], - futuresight: ["8M"], + futuresight: ["9M", "8M"], gigaimpact: ["9M", "8M", "7M"], growl: ["9L1", "8L1", "7L1"], guardswap: ["8M"], @@ -98433,7 +98494,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { scald: ["8M", "7M"], signalbeam: ["7T"], skillswap: ["9M", "8M"], - skittersmack: ["8T"], + skittersmack: ["9M", "8T"], sleeptalk: ["9M", "8M", "7M"], snore: ["8M", "7T"], snowscape: ["9M"], @@ -98553,6 +98614,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { gravity: ["9M", "9L24", "7T"], guardsplit: ["9L16", "8L16", "7L25"], gyroball: ["9M", "9L12", "8M", "8L12", "7M", "7L20"], + hardpress: ["9M"], healingwish: ["9L46", "8L46", "7L50"], heavyslam: ["9M"], helpinghand: ["9M", "8M", "7T"], @@ -98575,7 +98637,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { pound: ["9L1", "8L1", "7L1"], powersplit: ["9L16", "8L16", "7L25"], protect: ["9M", "8M", "7M"], - psychup: ["7M"], + psychup: ["9M", "7M"], quash: ["9L20", "8L20", "7M"], rapidspin: ["9L1", "9S0", "8L1", "7L1"], recycle: ["7T"], @@ -98673,16 +98735,18 @@ export const Learnsets: {[k: string]: LearnsetData} = { learnset: { acrobatics: ["9M", "8M"], agility: ["9M", "8M"], + alluringvoice: ["9M"], allyswitch: ["8M"], attract: ["8M"], batonpass: ["9M", "9L1", "8M", "8L1"], - breakingswipe: ["8M"], + breakingswipe: ["9M", "8M"], bulldoze: ["9M", "8M"], charm: ["9M", "9L20", "8M", "8L20"], cosmicpower: ["9L28", "8M", "8L28"], dazzlinggleam: ["9M", "8M"], dracometeor: ["8T"], dragonbreath: ["9L1", "8L1"], + dragoncheer: ["9M"], dragonclaw: ["9M", "8M"], dragonpulse: ["9M", "9L44", "8M", "8L44"], dragonrush: ["9L56", "8L56"], @@ -98709,7 +98773,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { lightscreen: ["9M", "8M"], magicalleaf: ["9M", "8M"], magiccoat: ["8L1"], - meteorbeam: ["8T"], + meteorbeam: ["9M", "8T"], metronome: ["9M", "8M"], mysticalfire: ["9L0", "8M", "8L0"], outrage: ["9M", "8M"], @@ -98720,7 +98784,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { rest: ["9M", "8M"], round: ["8M"], safeguard: ["9L32", "8M"], - scorchingsands: ["8T"], + scorchingsands: ["9M", "8T"], sleeptalk: ["9M", "8M"], snore: ["8M"], solarbeam: ["9M", "8M"], @@ -98810,7 +98874,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { attract: ["8M"], bite: ["9L1", "8L1"], bodyslam: ["9M", "8M"], - breakingswipe: ["8M"], + breakingswipe: ["9M", "8M"], brutalswing: ["8M"], bugbite: ["9M", "9L16", "8L16"], bugbuzz: ["9M", "9L24", "8M", "8L24"], @@ -98821,8 +98885,9 @@ export const Learnsets: {[k: string]: LearnsetData} = { darkpulse: ["9M", "8M"], dracometeor: ["9M", "8T"], dragonbreath: ["9L1", "8L1"], + dragoncheer: ["9M"], dragonclaw: ["9M", "8M"], - dragonhammer: ["8L0"], + dragonhammer: ["9M", "8L0"], dragonpulse: ["9M", "9L46", "8M", "8L46"], dragontail: ["9M"], dualwingbeat: ["9M", "8T"], @@ -98857,7 +98922,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { scaleshot: ["9M", "9L0"], scaryface: ["9M", "8M"], screech: ["8M"], - skittersmack: ["8T"], + skittersmack: ["9M", "8T"], sleeptalk: ["9M", "8M"], sludgebomb: ["9M", "8M"], smog: ["9L12", "8L12"], @@ -98885,6 +98950,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { learnset: { acidspray: ["9M", "9L1", "8L1"], aerialace: ["9M", "9L10", "8L10"], + alluringvoice: ["9M"], aromatherapy: ["8L60"], assurance: ["8M"], attract: ["8M"], @@ -98926,6 +98992,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { payday: ["8M"], playrough: ["9M", "9L65", "8M"], protect: ["9M", "8M"], + psychicnoise: ["9M"], recover: ["9L1", "8L1", "8S0"], reflect: ["9M", "8M"], rest: ["9M", "8M"], @@ -98937,7 +99004,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { shadowball: ["9M", "8M"], sleeptalk: ["9M", "8M"], sludgebomb: ["9M", "8M"], - sludgewave: ["8M"], + sludgewave: ["9M", "8M"], snarl: ["9M", "8M"], snore: ["8M"], spite: ["9M", "9L15", "8L15"], @@ -99017,7 +99084,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { skillswap: ["9M", "8M"], sleeptalk: ["9M", "8M"], sludgebomb: ["9M", "8M"], - sludgewave: ["8M"], + sludgewave: ["9M", "8M"], snore: ["8M"], stealthrock: ["9M", "8M"], steelwing: ["8M"], @@ -99025,6 +99092,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { swift: ["9M", "8M"], tailwind: ["9M"], takedown: ["9M"], + temperflare: ["9M"], terablast: ["9M"], thunderwave: ["9M", "8M"], toxic: ["9L30", "8L30"], @@ -99118,7 +99186,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { sandattack: ["9L1", "8L1"], sandstorm: ["9M", "9L1", "8M", "8L1"], sandtomb: ["9M", "9L1", "8M", "8L1"], - scorchingsands: ["8T"], + scorchingsands: ["9M", "8T"], sleeptalk: ["9M", "8M"], snore: ["8M"], spitup: ["9L1", "8L1"], @@ -99132,6 +99200,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { swordsdance: ["9M", "8M"], tackle: ["9L1", "8L1"], taunt: ["9M", "9L1", "8M", "8L1"], + temperflare: ["9M"], terablast: ["9M"], thief: ["9M", "9L1", "8M", "8L1"], watergun: ["9L1", "8L1"], @@ -99260,7 +99329,6 @@ export const Learnsets: {[k: string]: LearnsetData} = { hemogoblin: { learnset: { batonpass: ["9M"], - bitterblade: ["9L0"], bodyslam: ["9M"], brutalswing: ["9L1"], bulkup: ["9M"], @@ -99278,7 +99346,6 @@ export const Learnsets: {[k: string]: LearnsetData} = { energyball: ["9M"], facade: ["9M"], fireblast: ["9M"], - firelash: ["9L1"], flamethrower: ["9M"], flareblitz: ["9M"], fling: ["9M"], @@ -99319,6 +99386,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { tailwhip: ["9L1"], takedown: ["9M"], taunt: ["9M"], + temperflare: ["9M"], terablast: ["9M"], thunder: ["9M"], thunderbolt: ["9M"], @@ -99333,30 +99401,140 @@ export const Learnsets: {[k: string]: LearnsetData} = { }, cresceidon: { learnset: { - earthpower: ["9M"], + amnesia: ["9M"], + aquaring: ["9L10"], + blizzard: ["9M"], + bodypress: ["9M"], + bodyslam: ["9M", "9L35"], + bulldoze: ["9M"], + chillingwater: ["9M"], + confuseray: ["9M"], + dazzlinggleam: ["9M"], + doubleedge: ["9M", "9L60"], + earthquake: ["9M"], encore: ["9M"], endure: ["9M"], facade: ["9M"], - haze: ["9M"], - healingwish: ["9L1"], + gigaimpact: ["9M"], + haze: ["9M","9L40"], + healingwish: ["9E"], + heavyslam: ["9M"], helpinghand: ["9M"], hydropump: ["9M"], - moonblast: ["9L1"], + hyperbeam: ["9M"], + icebeam: ["9M"], + icywind: ["9M"], + liquidation: ["9M"], + mist: ["9L25"], + mistyexplosion: ["9M"], + mistyterrain: ["9M"], + moonblast: ["9L55"], + muddywater: ["9M"], + playrough: ["9M"], + pound: ["9L1"], protect: ["9M"], - recover: ["9L1"], + psychic: ["9M"], + raindance: ["9M"], + recover: ["9L50"], rest: ["9M"], scald: ["9M"], + scaryface: ["9M"], + shadowball: ["9M"], sleeptalk: ["9M"], + soak: ["9L30"], + spitup: ["9E"], + splash: ["9L1"], + stockpile: ["9E"], substitute: ["9M"], - surf: ["9M"], + surf: ["9M", "9L45"], + swallow: ["9E"], + swift: ["9M"], takedown: ["9M"], taunt: ["9M"], terablast: ["9M"], thunderwave: ["9M"], - whirlpool: ["9L1"], - wish: ["9L1"], + waterfall: ["9M"], + watergun: ["9L5"], + waterpulse: ["9M", "9L20"], + wavecrash: ["9L65"], + weatherball: ["9M"], + whirlpool: ["9M"], + wideguard: ["9L15"], + wish: ["9E"], + zenheadbutt: ["9M"], }, }, + chuggalong: { + learnset: { + acidspray: ["9M"], + bite: ["9L1"], + bodyslam: ["9M"], + bulldoze: ["9M"], + celebrate: ["9S0"], + clangingscales: ["9L52"], + clangoroussoul: ["9L64"], + crunch: ["9M", "9L32"], + destinybond: ["9E"], + dracometeor: ["9M"], + dragonbreath: ["9L12"], + dragoncheer: ["9M"], + dragonclaw: ["9M"], + dragondance: ["9M", "9L1", "9S0"], + dragonpulse: ["9M", "9L36"], + dragonrush: ["9E"], + dragontail: ["9M", "9L1", "9S0"], + earthquake: ["9M"], + encore: ["9M"], + endure: ["9M"], + facade: ["9M"], + flamethrower: ["9M"], + flashcannon: ["9M"], + gigaimpact: ["9M"], + gunkshot: ["9M", "9L58"], + healbell: ["9E"], + heavyslam: ["9M"], + helpinghand: ["9M"], + hyperbeam: ["9M"], + irondefense: ["9M", "9L46"], + ironhead: ["9M"], + lastresort: ["9E"], + metalsound: ["9M"], + nobleroar: ["9E"], + outrage: ["9M"], + poisongas: ["9L1"], + poisonjab: ["9M"], + poisontail: ["9M"], + protect: ["9M", "9L24"], + raindance: ["9M"], + rest: ["9M"], + roar: ["9M", "9L28"], + rockslide: ["9M"], + rocktomb: ["9M"], + scaleshot: ["9M"], + scaryface: ["9M"], + sleeptalk: ["9M"], + sludge: ["9L20"], + sludgebomb: ["9M", "9L41", "9S0"], + sludgewave: ["9M"], + smog: ["9L1"], + snarl: ["9M"], + stompingtantrum: ["9M"], + storedpower: ["9M"], + substitute: ["9M"], + sunnyday: ["9M"], + surf: ["9M"], + tackle: ["9L1"], + takedown: ["9M"], + taunt: ["9M", "9L12"], + terablast: ["9M"], + trailblaze: ["9M"], + uproar: ["9M"], + venoshock: ["9M"], + }, + eventData: [ + {generation: 9, level: 50, shiny: true, abilities: ["armortail"], moves: ["celebrate", "dragontail", "sludgebomb", "dragondance"], pokeball: "cherishball"}, + ], + }, pokestarsmeargle: { eventData: [ {generation: 5, level: 60, gender: "M", abilities: ["owntempo"], moves: ["mindreader", "guillotine", "tailwhip", "gastroacid"]}, diff --git a/data/mods/fullpotential/abilities.ts b/data/mods/fullpotential/abilities.ts index 60df6850dc09..fbd32c84044b 100644 --- a/data/mods/fullpotential/abilities.ts +++ b/data/mods/fullpotential/abilities.ts @@ -1,4 +1,4 @@ -export const Abilities: {[k: string]: ModdedAbilityData} = { +export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTable = { unaware: { inherit: true, onAnyModifyBoost(boosts, pokemon) { diff --git a/data/mods/gen1/conditions.ts b/data/mods/gen1/conditions.ts index 58e3a91528fa..150081088830 100644 --- a/data/mods/gen1/conditions.ts +++ b/data/mods/gen1/conditions.ts @@ -8,7 +8,7 @@ * under certain conditions and re-applied under other conditions. */ -export const Conditions: {[id: string]: ModdedConditionData} = { +export const Conditions: import('../../../sim/dex-conditions').ModdedConditionDataTable = { brn: { name: 'brn', effectType: 'Status', diff --git a/data/mods/gen1/formats-data.ts b/data/mods/gen1/formats-data.ts index 3fc0fa580e2b..53147d0e9205 100644 --- a/data/mods/gen1/formats-data.ts +++ b/data/mods/gen1/formats-data.ts @@ -1,4 +1,4 @@ -export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { +export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormatsDataTable = { bulbasaur: { tier: "LC", }, @@ -6,7 +6,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "NFE", }, venusaur: { - tier: "UU", + tier: "NU", }, charmander: { tier: "LC", @@ -21,7 +21,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "LC", }, wartortle: { - tier: "NFE", + tier: "ZU", }, blastoise: { tier: "NU", @@ -33,7 +33,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "NFE", }, butterfree: { - tier: "PU", + tier: "ZU", }, weedle: { tier: "LC", @@ -42,7 +42,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "NFE", }, beedrill: { - tier: "PU", + tier: "ZU", }, pidgey: { tier: "LC", @@ -51,7 +51,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "NFE", }, pidgeot: { - tier: "PU", + tier: "ZU", }, rattata: { tier: "LC", @@ -69,19 +69,19 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "LC", }, arbok: { - tier: "PU", + tier: "ZUBL", }, pikachu: { tier: "LC", }, raichu: { - tier: "NUBL", + tier: "UU", }, sandshrew: { tier: "LC", }, sandslash: { - tier: "PU", + tier: "ZU", }, nidoranf: { tier: "LC", @@ -105,13 +105,13 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "LC", }, clefable: { - tier: "NU", + tier: "UU", }, vulpix: { tier: "LC", }, ninetales: { - tier: "NU", + tier: "UU", }, jigglypuff: { tier: "LC", @@ -123,7 +123,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "LC", }, golbat: { - tier: "PU", + tier: "ZU", }, oddish: { tier: "LC", @@ -138,7 +138,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "LC", }, parasect: { - tier: "PU", + tier: "ZU", }, venonat: { tier: "LC", @@ -162,13 +162,13 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "LC", }, golduck: { - tier: "NUBL", + tier: "NU", }, mankey: { tier: "LC", }, primeape: { - tier: "PU", + tier: "ZU", }, growlithe: { tier: "LC", @@ -177,16 +177,16 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "PU", }, poliwag: { - tier: "LC", + tier: "ZU", }, poliwhirl: { - tier: "NUBL", + tier: "NU", }, poliwrath: { - tier: "NUBL", + tier: "NU", }, abra: { - tier: "PU", + tier: "ZU", }, kadabra: { tier: "UU", @@ -210,10 +210,10 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "NFE", }, victreebel: { - tier: "UU", + tier: "OU", }, tentacool: { - tier: "LC", + tier: "ZU", }, tentacruel: { tier: "UU", @@ -225,16 +225,16 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "PU", }, golem: { - tier: "NU", + tier: "UU", }, ponyta: { - tier: "LC", + tier: "ZU", }, rapidash: { tier: "PU", }, slowpoke: { - tier: "LC", + tier: "ZU", }, slowbro: { tier: "OU", @@ -243,10 +243,10 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "LC", }, magneton: { - tier: "PU", + tier: "ZU", }, farfetchd: { - tier: "PU", + tier: "ZU", }, doduo: { tier: "LC", @@ -264,7 +264,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "LC", }, muk: { - tier: "PU", + tier: "ZU", }, shellder: { tier: "LC", @@ -282,7 +282,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "OU", }, onix: { - tier: "PU", + tier: "ZU", }, drowzee: { tier: "PU", @@ -300,7 +300,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "LC", }, electrode: { - tier: "NU", + tier: "UU", }, exeggcute: { tier: "NU", @@ -312,25 +312,25 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "LC", }, marowak: { - tier: "PU", + tier: "ZU", }, hitmonlee: { - tier: "PU", + tier: "ZU", }, hitmonchan: { - tier: "PU", + tier: "ZU", }, lickitung: { - tier: "PU", + tier: "ZU", }, koffing: { tier: "LC", }, weezing: { - tier: "PU", + tier: "ZU", }, rhyhorn: { - tier: "LC", + tier: "ZU", }, rhydon: { tier: "OU", @@ -393,7 +393,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "UUBL", }, ditto: { - tier: "PU", + tier: "ZU", }, eevee: { tier: "LC", @@ -405,7 +405,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "OU", }, flareon: { - tier: "PU", + tier: "ZU", }, porygon: { tier: "PU", @@ -423,13 +423,13 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "NU", }, aerodactyl: { - tier: "UU", + tier: "NU", }, snorlax: { tier: "OU", }, articuno: { - tier: "UU", + tier: "UUBL", }, zapdos: { tier: "OU", diff --git a/data/mods/gen1/moves.ts b/data/mods/gen1/moves.ts index 2e39756b0aac..38565a0bc0b8 100644 --- a/data/mods/gen1/moves.ts +++ b/data/mods/gen1/moves.ts @@ -3,7 +3,7 @@ * Some moves have had major changes, such as Bite's typing. */ -export const Moves: {[k: string]: ModdedMoveData} = { +export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = { acid: { inherit: true, secondary: { @@ -80,7 +80,12 @@ export const Moves: {[k: string]: ModdedMoveData} = { self: { volatileStatus: 'partialtrappinglock', }, - // FIXME: onBeforeMove(pokemon, target) {target.removeVolatile('mustrecharge')} + onTryMove(source, target) { + if (target.volatiles['mustrecharge']) { + target.removeVolatile('mustrecharge'); + this.hint("In Gen 1, partial trapping moves negate the recharge turn of Hyper Beam, even if they miss.", true); + } + }, onHit(target, source) { /** * The duration of the partially trapped must be always renewed to 2 @@ -136,7 +141,12 @@ export const Moves: {[k: string]: ModdedMoveData} = { self: { volatileStatus: 'partialtrappinglock', }, - // FIXME: onBeforeMove(pokemon, target) {target.removeVolatile('mustrecharge')} + onTryMove(source, target) { + if (target.volatiles['mustrecharge']) { + target.removeVolatile('mustrecharge'); + this.hint("In Gen 1, partial trapping moves negate the recharge turn of Hyper Beam, even if they miss.", true); + } + }, onHit(target, source) { /** * The duration of the partially trapped must be always renewed to 2 @@ -207,6 +217,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { return 2 * this.lastDamage; }, + flags: {contact: 1, protect: 1, metronome: 1}, }, crabhammer: { inherit: true, @@ -235,7 +246,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { name: "Disable", pp: 20, priority: 0, - flags: {protect: 1, mirror: 1, bypasssub: 1}, + flags: {protect: 1, mirror: 1, bypasssub: 1, metronome: 1}, volatileStatus: 'disable', onTryHit(target) { // This function should not return if the checks are met. Adding && undefined ensures this happens. @@ -313,7 +324,12 @@ export const Moves: {[k: string]: ModdedMoveData} = { self: { volatileStatus: 'partialtrappinglock', }, - // FIXME: onBeforeMove(pokemon, target) {target.removeVolatile('mustrecharge')} + onTryMove(source, target) { + if (target.volatiles['mustrecharge']) { + target.removeVolatile('mustrecharge'); + this.hint("In Gen 1, partial trapping moves negate the recharge turn of Hyper Beam, even if they miss.", true); + } + }, onHit(target, source) { /** * The duration of the partially trapped must be always renewed to 2 @@ -469,7 +485,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { name: "Light Screen", pp: 30, priority: 0, - flags: {}, + flags: {metronome: 1}, volatileStatus: 'lightscreen', onTryHit(pokemon) { if (pokemon.volatiles['lightscreen']) { @@ -484,12 +500,9 @@ export const Moves: {[k: string]: ModdedMoveData} = { target: "self", type: "Psychic", }, - metronome: { - inherit: true, - noMetronome: ["Metronome", "Struggle"], - }, mimic: { inherit: true, + flags: {protect: 1, bypasssub: 1, metronome: 1}, onHit(target, source) { const moveslot = source.moves.indexOf('mimic'); if (moveslot < 0) return false; @@ -649,7 +662,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { name: "Reflect", pp: 20, priority: 0, - flags: {}, + flags: {metronome: 1}, volatileStatus: 'reflect', onTryHit(pokemon) { if (pokemon.volatiles['reflect']) { @@ -802,6 +815,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { name: "Substitute", pp: 10, priority: 0, + flags: {metronome: 1}, volatileStatus: 'substitute', onTryHit(target) { if (target.volatiles['substitute']) { @@ -899,7 +913,6 @@ export const Moves: {[k: string]: ModdedMoveData} = { secondary: null, target: "self", type: "Normal", - flags: {}, }, superfang: { inherit: true, @@ -941,7 +954,12 @@ export const Moves: {[k: string]: ModdedMoveData} = { self: { volatileStatus: 'partialtrappinglock', }, - // FIXME: onBeforeMove(pokemon, target) {target.removeVolatile('mustrecharge')} + onTryMove(source, target) { + if (target.volatiles['mustrecharge']) { + target.removeVolatile('mustrecharge'); + this.hint("In Gen 1, partial trapping moves negate the recharge turn of Hyper Beam, even if they miss.", true); + } + }, onHit(target, source) { /** * The duration of the partially trapped must be always renewed to 2 diff --git a/data/mods/gen1/pokedex.ts b/data/mods/gen1/pokedex.ts index 2287635fb39f..f918ae1928cb 100644 --- a/data/mods/gen1/pokedex.ts +++ b/data/mods/gen1/pokedex.ts @@ -1,4 +1,4 @@ -export const Pokedex: {[k: string]: ModdedSpeciesData} = { +export const Pokedex: import('../../../sim/dex-species').ModdedSpeciesDataTable = { missingno: { inherit: true, baseStats: {hp: 33, atk: 136, def: 0, spa: 6, spd: 6, spe: 29}, diff --git a/data/mods/gen1/rulesets.ts b/data/mods/gen1/rulesets.ts index bd3bca4d59aa..942fe0f4fe55 100644 --- a/data/mods/gen1/rulesets.ts +++ b/data/mods/gen1/rulesets.ts @@ -1,4 +1,4 @@ -export const Rulesets: {[k: string]: ModdedFormatData} = { +export const Rulesets: import('../../../sim/dex-formats').ModdedFormatDataTable = { standard: { effectType: 'ValidatorRule', name: 'Standard', diff --git a/data/mods/gen1/scripts.ts b/data/mods/gen1/scripts.ts index 39d38f2fd057..21f1d9d67a81 100644 --- a/data/mods/gen1/scripts.ts +++ b/data/mods/gen1/scripts.ts @@ -17,8 +17,9 @@ export const Scripts: ModdedBattleScriptsData = { gen: 1, init() { for (const i in this.data.Pokedex) { - (this.data.Pokedex[i] as any).gender = 'N'; - (this.data.Pokedex[i] as any).eggGroups = null; + const poke = this.modData('Pokedex', i); + poke.gender = 'N'; + poke.eggGroups = null; } }, // BattlePokemon scripts. @@ -122,9 +123,22 @@ export const Scripts: ModdedBattleScriptsData = { // This function is the main one when running a move. // It deals with the beforeMove event. // It also deals with how PP reduction works on gen 1. - runMove(moveOrMoveName, pokemon, targetLoc, sourceEffect) { + runMove(moveOrMoveName, pokemon, targetLoc, options) { + let sourceEffect = options?.sourceEffect; const target = this.battle.getTarget(pokemon, moveOrMoveName, targetLoc); - const move = this.battle.dex.getActiveMove(moveOrMoveName); + let move = this.battle.dex.getActiveMove(moveOrMoveName); + + // 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. + const autoHyperBeam = ( + move.id === 'recharge' && !pokemon.volatiles['mustrecharge'] && !pokemon.volatiles['partiallytrapped'] + ); + if (autoHyperBeam) { + move = this.battle.dex.getActiveMove('hyperbeam'); + this.battle.hint(`In Gen 1, 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.`, true); + } + if (target?.subFainted) target.subFainted = null; this.battle.setActiveMove(move, pokemon, target); @@ -155,14 +169,17 @@ export const Scripts: ModdedBattleScriptsData = { pokemon.deductPP(pokemon.volatiles['twoturnmove'].originalMove, null, target); } } - if (pokemon.volatiles['partialtrappinglock'] && target !== pokemon.volatiles['partialtrappinglock'].locked) { + if ( + (pokemon.volatiles['partialtrappinglock'] && target !== pokemon.volatiles['partialtrappinglock'].locked) || + autoHyperBeam + ) { const moveSlot = pokemon.moveSlots.find(ms => ms.id === move.id); if (moveSlot && moveSlot.pp < 0) { moveSlot.pp = 63; this.battle.hint("In Gen 1, if a player is forced to use a move with 0 PP, the move will underflow to have 63 PP."); } } - this.useMove(move, pokemon, target, sourceEffect); + this.useMove(move, pokemon, {target, sourceEffect}); // Restore PP if the move is the first turn of a charging move. Save the move from which PP should be deducted if the move succeeds. if (pokemon.volatiles['twoturnmove']) { pokemon.deductPP(move, -1, target); @@ -171,7 +188,9 @@ export const Scripts: ModdedBattleScriptsData = { }, // This function deals with AfterMoveSelf events. // This leads with partial trapping moves shenanigans after the move has been used. - useMove(moveOrMoveName, pokemon, target, sourceEffect) { + useMove(moveOrMoveName, pokemon, options) { + let sourceEffect = options?.sourceEffect; + let target = options?.target; if (!sourceEffect && this.battle.effect.id) sourceEffect = this.battle.effect; const baseMove = this.battle.dex.moves.get(moveOrMoveName); let move = this.battle.dex.getActiveMove(baseMove); @@ -194,7 +213,7 @@ export const Scripts: ModdedBattleScriptsData = { // The charging turn of a two-turn move does not update pokemon.lastMove if (!TWO_TURN_MOVES.includes(move.id) || pokemon.volatiles['twoturnmove']) pokemon.lastMove = move; - const moveResult = this.useMoveInner(moveOrMoveName, pokemon, target, sourceEffect); + const moveResult = this.useMoveInner(moveOrMoveName, pokemon, {target, sourceEffect}); if (move.id !== 'metronome') { if (move.id !== 'mirrormove' || @@ -240,7 +259,9 @@ export const Scripts: ModdedBattleScriptsData = { }, // This is the function that actually uses the move, running ModifyMove events. // It uses the move and then deals with the effects after the move. - useMoveInner(moveOrMoveName, pokemon, target, sourceEffect) { + useMoveInner(moveOrMoveName, pokemon, options) { + let sourceEffect = options?.sourceEffect; + let target = options?.target; if (!sourceEffect && this.battle.effect.id) sourceEffect = this.battle.effect; const baseMove = this.battle.dex.moves.get(moveOrMoveName); let move = this.battle.dex.getActiveMove(baseMove); diff --git a/data/mods/gen1/typechart.ts b/data/mods/gen1/typechart.ts index 85d83e1804c8..d90271e37f8e 100644 --- a/data/mods/gen1/typechart.ts +++ b/data/mods/gen1/typechart.ts @@ -6,7 +6,7 @@ * Psychic was immune to ghost */ -export const TypeChart: {[k: string]: ModdedTypeData | null} = { +export const TypeChart: import('../../../sim/dex-data').ModdedTypeDataTable = { bug: { damageTaken: { Bug: 0, diff --git a/data/mods/gen1jpn/conditions.ts b/data/mods/gen1jpn/conditions.ts index 6538f881525d..09499f5a443b 100644 --- a/data/mods/gen1jpn/conditions.ts +++ b/data/mods/gen1jpn/conditions.ts @@ -1,4 +1,4 @@ -export const Conditions: {[k: string]: ModdedConditionData} = { +export const Conditions: import('../../../sim/dex-conditions').ModdedConditionDataTable = { invulnerability: { // Dig/Fly name: 'invulnerability', diff --git a/data/mods/gen1jpn/moves.ts b/data/mods/gen1jpn/moves.ts index b4c1163815e6..c865231b9d45 100644 --- a/data/mods/gen1jpn/moves.ts +++ b/data/mods/gen1jpn/moves.ts @@ -2,7 +2,7 @@ * The japanese version of Blizzard in Gen 1 had a 30% chance to freeze */ -export const Moves: {[k: string]: ModdedMoveData} = { +export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = { blizzard: { inherit: true, secondary: { diff --git a/data/mods/gen1jpn/rulesets.ts b/data/mods/gen1jpn/rulesets.ts index ea866849c348..cd12e27ecfdc 100644 --- a/data/mods/gen1jpn/rulesets.ts +++ b/data/mods/gen1jpn/rulesets.ts @@ -1,13 +1,13 @@ -export const Rulesets: {[k: string]: ModdedFormatData} = { +export const Rulesets: import('../../../sim/dex-formats').ModdedFormatDataTable = { standard: { effectType: 'ValidatorRule', name: 'Standard', ruleset: ['Obtainable', 'Desync Clause Mod', 'Sleep Clause Mod', 'Freeze Clause Mod', 'Species Clause', 'Nickname Clause', 'OHKO Clause', 'Evasion Moves Clause', 'Endless Battle Clause', 'HP Percentage Mod', 'Cancel Mod'], banlist: ['Dig', 'Fly'], }, - nintendocup1997movelegality: { + nc1997movelegality: { effectType: 'ValidatorRule', - name: 'Nintendo Cup 1997 Move Legality', + name: 'NC 1997 Move Legality', desc: "Bans move combinations on Pok\u00e9mon that would only be obtainable in Pok\u00e9mon Yellow.", banlist: [ // https://www.smogon.com/forums/threads/rby-and-gsc-illegal-movesets.78638/ diff --git a/data/mods/gen1rbycap/formats-data.ts b/data/mods/gen1rbycap/formats-data.ts new file mode 100644 index 000000000000..a29a0550505d --- /dev/null +++ b/data/mods/gen1rbycap/formats-data.ts @@ -0,0 +1,20 @@ +export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormatsDataTable = { + corupcake: { + tier: "OU", + }, + gargoyle: { + tier: "OU", + }, + phantom: { + tier: "OU", + }, + mandrelec: { + tier: "OU", + }, + pineguin: { + tier: "OU", + }, + probosicle: { + tier: "OU", + }, +}; diff --git a/data/mods/gen1rbycap/learnsets.ts b/data/mods/gen1rbycap/learnsets.ts new file mode 100644 index 000000000000..5d081b70cfe3 --- /dev/null +++ b/data/mods/gen1rbycap/learnsets.ts @@ -0,0 +1,243 @@ +export const Learnsets: import('../../../sim/dex-species').ModdedLearnsetDataTable = { + corupcake: { + learnset: { + ember: ["1L1"], + poisongas: ["1L1"], + smokescreen: ["1L16"], + confuseray: ["1L34"], + sugarrush: ["1L36"], + lick: ["1L40"], + firespin: ["1L42"], + screech: ["1L43"], + haze: ["1L47"], + thrash: ["1L58"], + bodyslam: ["1M"], + doubleedge: ["1M"], + hyperbeam: ["1M"], + rage: ["1M"], + megadrain: ["1M"], + thunderbolt: ["1M"], + dragonrage: ["1M"], + thunder: ["1M"], + reflect: ["1M"], + metronome: ["1M"], + selfdestruct: ["1M"], + fireblast: ["1M"], + rest: ["1M"], + dreameater: ["1M"], + explosion: ["1M"], + triattack: ["1M"], + substitute: ["1M"], + toxic: ["1M"], + mimic: ["1M"], + bide: ["1M"], + swift: ["1M"], + payday: ["1L1"], // add event data later + roar: ["1L1"], // add event data later + flamethrower: ["2T"], + headbutt: ["2M"], + bite: ["2E"], + amnesia: ["2E"], + }, + encounters: [ + {generation: 1, level: 5}, + ], + }, + gargoyle: { + learnset: { + rage: ["1L1", "1M"], + lowkick: ["1L1"], + karatechop: ["1L32"], + supersonic: ["1L42"], + marblefist: ["1L44"], + razorwind: ["1L57"], + rockslide: ["1L67"], + submission: ["1L70", "1M"], + megapunch: ["1M"], + whirlwind: ["1M"], + megakick: ["1M"], + toxic: ["1M"], + bodyslam: ["1M"], + takedown: ["1M"], + doubleedge: ["1M"], + hyperbeam: ["1M"], + dragonrage: ["1M"], + earthquake: ["1M"], + mimic: ["1M"], + doubleteam: ["1M"], + bide: ["1M"], + metronome: ["1M"], + fireblast: ["1M"], + skyattack: ["1M"], + rest: ["1M"], + substitute: ["1M"], + fly: ["1M"], + strength: ["1M"], + firepunch: ["2M"], + thunderpunch: ["2M"], + icepunch: ["2M"], + rollingkick: ["2E"], + agility: ["2E"], + thrash: ["2L1"], + meditate: ["2E"], + headbutt: ["2M"], + }, + encounters: [ + {generation: 1, level: 5}, + ], + }, + phantom: { + learnset: { + nightshade: ["1L1"], + growl: ["1L1"], + leer: ["1L1"], + quickattack: ["1L1"], + firespin: ["1L50"], + flamethrower: ["1L55"], + hypnosis: ["1L60"], + confuseray: ["1L65"], + toxic: ["1M"], + bodyslam: ["1M"], + takedown: ["1M"], + doubleedge: ["1M"], + hyperbeam: ["1M"], + payday: ["1M"], + rage: ["1M"], + dig: ["1M"], + teleport: ["1M"], + mimic: ["1M"], + doubleteam: ["1M"], + bide: ["1M"], + fireblast: ["1M"], + swift: ["1M"], + dreameater: ["1M"], + rest: ["1M"], + substitute: ["1M"], + }, + encounters: [ + {generation: 1, level: 5}, + ], + }, + mandrelec: { + learnset: { + thundershock: ["1L1"], + tailwhip: ["1L1"], + bite: ["1L6"], + scratch: ["1L17"], + thunderwave: ["1L24"], + focusenergy: ["1L30"], + lightscreen: ["1L36"], + thunder: ["1L42", "1M"], + defensecurl: ["1L48"], + screech: ["1L54"], + toxic: ["1M"], + bodyslam: ["1M"], + takedown: ["1M"], + doubleedge: ["1M"], + hyperbeam: ["1M"], + submission: ["1M"], + counter: ["1M"], + seismictoss: ["1M"], + thunderbolt: ["1M"], + dig: ["1M"], + mimic: ["1M"], + doubleteam: ["1M"], + bide: ["1M"], + skullbash: ["1M"], + rest: ["1M"], + substitute: ["1M"], + flash: ["1M"], + earthquake: ["1M"], + rockslide: ["1M"], + bubblebeam: ["1M", "2E"], + headbutt: ["2M"], + aurorabeam: ["2E"], + haze: ["2E"], + disable: ["2E"], + splash: ["2E"], + }, + encounters: [ + {generation: 1, level: 5}, + ], + }, + pineguin: { + learnset: { + absorb: ["1L1"], + peck: ["1L1"], + leechseed: ["1L1"], + wingattack: ["1L13"], + stunspore: ["1L21"], + pinmissile: ["1L29"], + camouflage: ["1L31"], + aurorabeam: ["1L33"], + razorleaf: ["1L41"], + mist: ["1L51"], + razorwind: ["1M"], + whirlwind: ["1M"], + toxic: ["1M"], + bodyslam: ["1M"], + takedown: ["1M"], + doubleedge: ["1M"], + bubblebeam: ["1M"], + watergun: ["1M"], + icebeam: ["1M"], + blizzard: ["1M"], + hyperbeam: ["1M"], + megadrain: ["1M"], + solarbeam: ["1M"], + mimic: ["1M"], + doubleteam: ["1M"], + reflect: ["1M"], + substitute: ["1M"], + rest: ["1M"], + counter: ["2E"], + seismictoss: ["2E"], + selfdestruct: ["2E"], + explosion: ["2E"], + headbutt: ["2M"], + defensecurl: ["2M"], + drillpeck: ["2E"], + strength: ["2M"], + }, + encounters: [ + {generation: 1, level: 5}, + ], + }, + probosicle: { + learnset: { + tackle: ["1L1"], + harden: ["1L1"], + megadrain: ["1L16", "1M"], + aurorabeam: ["1L21"], + slash: ["1L36"], + icicle: ["1L39"], + mist: ["1L51"], + haze: ["1L54"], + toxic: ["1M"], + horndrill: ["1M"], + takedown: ["1M"], + doubleedge: ["1M"], + icebeam: ["1M"], + blizzard: ["1M"], + hyperbeam: ["1M"], + seismictoss: ["1M"], + rage: ["1M"], + mimic: ["1M"], + doubleteam: ["1M"], + bide: ["1M"], + skullbash: ["1M"], + rest: ["1M"], + bodyslam: ["1M"], + substitute: ["1M"], + cut: ["1M"], + headbutt: ["2M"], + defensecurl: ["2E"], + lick: ["2E"], + leechlife: ["2E"], + thrash: ["2E"], + }, + encounters: [ + {generation: 1, level: 5}, + ], + }, +}; diff --git a/data/mods/gen1rbycap/moves.ts b/data/mods/gen1rbycap/moves.ts new file mode 100644 index 000000000000..7be673a05905 --- /dev/null +++ b/data/mods/gen1rbycap/moves.ts @@ -0,0 +1,93 @@ +export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = { + sugarrush: { + accuracy: 90, + basePower: 90, + category: "Physical", + shortDesc: "33% Chance to lower the foe's Special.", + name: "Sugar Rush", + pp: 15, + priority: 0, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, + onPrepareHit(target, source, move) { + this.attrLastMove('[still]'); + this.add('-anim', source, "Play Rough", target); + }, + secondary: { + chance: 33, + boosts: { + spa: -1, + spd: -1, + }, + }, + target: "normal", + type: "Poison", + contestType: "Cute", + }, + marblefist: { + accuracy: 100, + basePower: 50, + category: "Physical", + shortDesc: "Usually moves first.", + name: "Marble Fist", + pp: 30, + priority: 1, + flags: {contact: 1, protect: 1, mirror: 1, punch: 1, metronome: 1}, + onPrepareHit(target, source, move) { + this.attrLastMove('[still]'); + this.add('-anim', source, "Meteor Mash", target); + }, + secondary: null, + target: "normal", + type: "Fighting", + contestType: "Cool", + }, + camouflage: { + num: 293, + accuracy: 100, + basePower: 80, + category: "Special", + shortDesc: "Hides on turn 1, strikes turn 2.", + name: "Camouflage", + pp: 10, + priority: 0, + flags: {protect: 1, mirror: 1, metronome: 1}, + onPrepareHit(target, source, move) { + this.attrLastMove('[still]'); + this.add('-anim', source, "Leaf Blade", target); + }, + onTryMove(attacker, defender, move) { + if (attacker.removeVolatile('twoturnmove')) { + attacker.removeVolatile('invulnerability'); + return; + } + this.add('-prepare', attacker, move.name); + attacker.addVolatile('twoturnmove', defender); + attacker.addVolatile('invulnerability', defender); + return null; + }, + secondary: null, + target: "normal", + type: "Grass", + contestType: "Clever", + gen: 1, + }, + icicle: { + accuracy: 100, + basePower: 70, + category: "Special", + shortDesc: "High critical hit ratio.", + name: "Icicle", + pp: 15, + priority: 0, + flags: {protect: 1, mirror: 1, metronome: 1}, + onPrepareHit(target, source, move) { + this.attrLastMove('[still]'); + this.add('-anim', source, "Icicle Crash", target); + }, + critRatio: 2, + secondary: null, + target: "normal", + type: "Ice", + contestType: "Cool", + }, +}; diff --git a/data/mods/gen1rbycap/pokedex.ts b/data/mods/gen1rbycap/pokedex.ts new file mode 100644 index 000000000000..6f66f8f72b48 --- /dev/null +++ b/data/mods/gen1rbycap/pokedex.ts @@ -0,0 +1,74 @@ +export const Pokedex: import('../../../sim/dex-species').ModdedSpeciesDataTable = { + pineguin: { + num: 2000, + name: "Pineguin", + types: ["Grass", "Ice"], + baseStats: {hp: 120, atk: 70, def: 40, spa: 95, spd: 95, spe: 80}, + abilities: {0: "No Ability"}, + heightm: 3.2, + weightkg: 106, + color: "Green", + eggGroups: ["Water 1", "Grass"], + gen: 1, + }, + corupcake: { + num: 2001, + name: "Corupcake", + types: ["Fire", "Poison"], + baseStats: {hp: 97, atk: 105, def: 87, spa: 95, spd: 95, spe: 81}, + abilities: {0: "No Ability"}, + heightm: 1.4, + weightkg: 189.5, + color: "Red", + eggGroups: ["Monster"], + gen: 1, + }, + gargoyle: { + num: 2002, + name: "Gargoyle", + types: ["Dragon", "Fighting"], + baseStats: {hp: 111, atk: 111, def: 99, spa: 99, spd: 99, spe: 66}, + abilities: {0: "No Ability"}, + heightm: 1.5, + weightkg: 138, + color: "Gray", + eggGroups: ["Human-Like"], + gen: 1, + }, + phantom: { + num: 2003, + name: "Phantom", + types: ["Fire", "Ghost"], + baseStats: {hp: 56, atk: 56, def: 56, spa: 133, spd: 133, spe: 97}, + abilities: {0: "No Ability"}, + heightm: 1.1, + weightkg: 0.1, + color: "Black", + eggGroups: ["Field"], + gen: 1, + }, + mandrelec: { + num: 2004, + name: "Mandrelec", + types: ["Electric"], + baseStats: {hp: 110, atk: 130, def: 90, spa: 50, spd: 50, spe: 35}, + abilities: {0: "No Ability"}, + heightm: 1.1, + weightkg: 43, + color: "Yellow", + eggGroups: ["Water 1"], + gen: 1, + }, + probosicle: { + num: 2005, + name: "Probosicle", + types: ["Bug", "Ice"], + baseStats: {hp: 48, atk: 120, def: 100, spa: 63, spd: 63, spe: 105}, + abilities: {0: "No Ability"}, + heightm: 1.6, + weightkg: 210, + color: "Blue", + eggGroups: ["Bug"], + gen: 1, + }, +}; diff --git a/data/mods/gen1rbycap/scripts.ts b/data/mods/gen1rbycap/scripts.ts new file mode 100644 index 000000000000..fe9a477867cd --- /dev/null +++ b/data/mods/gen1rbycap/scripts.ts @@ -0,0 +1,4 @@ +export const Scripts: ModdedBattleScriptsData = { + inherit: 'gen1', + gen: 1, +}; diff --git a/data/mods/gen1stadium/conditions.ts b/data/mods/gen1stadium/conditions.ts index cf34f690d577..b7c6a0fe296b 100644 --- a/data/mods/gen1stadium/conditions.ts +++ b/data/mods/gen1stadium/conditions.ts @@ -1,4 +1,4 @@ -export const Conditions: {[k: string]: ModdedConditionData} = { +export const Conditions: import('../../../sim/dex-conditions').ModdedConditionDataTable = { brn: { name: 'brn', effectType: 'Status', diff --git a/data/mods/gen1stadium/formats-data.ts b/data/mods/gen1stadium/formats-data.ts index bfea94eb4f21..b80dfef904a2 100644 --- a/data/mods/gen1stadium/formats-data.ts +++ b/data/mods/gen1stadium/formats-data.ts @@ -1,4 +1,4 @@ -export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { +export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormatsDataTable = { bulbasaur: { tier: "LC", }, diff --git a/data/mods/gen1stadium/moves.ts b/data/mods/gen1stadium/moves.ts index bdd0ebcead0a..a7bb04d3170b 100644 --- a/data/mods/gen1stadium/moves.ts +++ b/data/mods/gen1stadium/moves.ts @@ -1,4 +1,4 @@ -export const Moves: {[k: string]: ModdedMoveData} = { +export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = { bide: { inherit: true, priority: 0, diff --git a/data/mods/gen1stadium/rulesets.ts b/data/mods/gen1stadium/rulesets.ts index 94983569c7c9..716eb00d5abc 100644 --- a/data/mods/gen1stadium/rulesets.ts +++ b/data/mods/gen1stadium/rulesets.ts @@ -1,4 +1,4 @@ -export const Rulesets: {[k: string]: ModdedFormatData} = { +export const Rulesets: import('../../../sim/dex-formats').ModdedFormatDataTable = { standard: { effectType: 'ValidatorRule', name: 'Standard', diff --git a/data/mods/gen1stadium/scripts.ts b/data/mods/gen1stadium/scripts.ts index f411e5308f66..90a0b055ef18 100644 --- a/data/mods/gen1stadium/scripts.ts +++ b/data/mods/gen1stadium/scripts.ts @@ -72,7 +72,8 @@ export const Scripts: ModdedBattleScriptsData = { }, actions: { inherit: true, - runMove(moveOrMoveName, pokemon, targetLoc, sourceEffect) { + runMove(moveOrMoveName, pokemon, targetLoc, options) { + let sourceEffect = options?.sourceEffect; const move = this.dex.getActiveMove(moveOrMoveName); const target = this.battle.getTarget(pokemon, move, targetLoc); if (target?.subFainted) target.subFainted = null; @@ -102,12 +103,14 @@ export const Scripts: ModdedBattleScriptsData = { } else { sourceEffect = move; } - this.battle.actions.useMove(move, pokemon, target, sourceEffect); + this.battle.actions.useMove(move, pokemon, {target, sourceEffect}); }, // This function deals with AfterMoveSelf events. // This leads with partial trapping moves shenanigans after the move has been used. - useMove(moveOrMoveName, pokemon, target, sourceEffect) { - const moveResult = this.useMoveInner(moveOrMoveName, pokemon, target, sourceEffect); + useMove(moveOrMoveName, pokemon, options) { + let sourceEffect = options?.sourceEffect; + let target = options?.target; + const moveResult = this.useMoveInner(moveOrMoveName, pokemon, {target, sourceEffect}); if (!sourceEffect && this.battle.effect.id) sourceEffect = this.battle.effect; const baseMove = this.battle.dex.moves.get(moveOrMoveName); @@ -164,7 +167,9 @@ export const Scripts: ModdedBattleScriptsData = { }, // This is the function that actually uses the move, running ModifyMove events. // It uses the move and then deals with the effects after the move. - useMoveInner(moveOrMoveName, pokemon, target, sourceEffect) { + useMoveInner(moveOrMoveName, pokemon, options) { + let sourceEffect = options?.sourceEffect; + let target = options?.target; if (!sourceEffect && this.battle.effect.id) sourceEffect = this.battle.effect; const baseMove = this.battle.dex.moves.get(moveOrMoveName); let move = this.battle.dex.getActiveMove(baseMove); diff --git a/data/mods/gen2/conditions.ts b/data/mods/gen2/conditions.ts index 16dbd0136079..08f6a70a3eae 100644 --- a/data/mods/gen2/conditions.ts +++ b/data/mods/gen2/conditions.ts @@ -1,4 +1,4 @@ -export const Conditions: {[k: string]: ModdedConditionData} = { +export const Conditions: import('../../../sim/dex-conditions').ModdedConditionDataTable = { brn: { name: 'brn', effectType: 'Status', diff --git a/data/mods/gen2/formats-data.ts b/data/mods/gen2/formats-data.ts index 8b2151226198..5c751f8f00d8 100644 --- a/data/mods/gen2/formats-data.ts +++ b/data/mods/gen2/formats-data.ts @@ -1,9 +1,9 @@ -export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { +export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormatsDataTable = { bulbasaur: { tier: "LC", }, ivysaur: { - tier: "NFE", + tier: "ZU", }, venusaur: { tier: "UUBL", @@ -12,7 +12,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "LC", }, charmeleon: { - tier: "NFE", + tier: "ZU", }, charizard: { tier: "UUBL", @@ -21,7 +21,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "LC", }, wartortle: { - tier: "NFE", + tier: "ZU", }, blastoise: { tier: "UU", @@ -33,7 +33,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "NFE", }, butterfree: { - tier: "PU", + tier: "ZU", }, weedle: { tier: "LC", @@ -42,7 +42,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "NFE", }, beedrill: { - tier: "PU", + tier: "ZUBL", }, pidgey: { tier: "LC", @@ -81,7 +81,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "NUBL", }, sandshrew: { - tier: "LC", + tier: "ZU", }, sandslash: { tier: "UU", @@ -90,7 +90,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "LC", }, nidorina: { - tier: "NFE", + tier: "ZU", }, nidoqueen: { tier: "UU", @@ -99,7 +99,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "LC", }, nidorino: { - tier: "NFE", + tier: "ZU", }, nidoking: { tier: "OU", @@ -108,7 +108,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "LC", }, clefairy: { - tier: "NFE", + tier: "PU", }, clefable: { tier: "UUBL", @@ -132,7 +132,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "LC", }, golbat: { - tier: "NFE", + tier: "PU", }, crobat: { tier: "UU", @@ -153,7 +153,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "LC", }, parasect: { - tier: "PU", + tier: "ZU", }, venonat: { tier: "LC", @@ -162,13 +162,13 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "PU", }, diglett: { - tier: "LC", + tier: "ZU", }, dugtrio: { tier: "NU", }, meowth: { - tier: "LC", + tier: "ZU", }, persian: { tier: "NU", @@ -186,16 +186,16 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "NU", }, growlithe: { - tier: "LC", + tier: "ZU", }, arcanine: { tier: "UU", }, poliwag: { - tier: "LC", + tier: "ZU", }, poliwhirl: { - tier: "PU", + tier: "ZUBL", }, poliwrath: { tier: "NUBL", @@ -204,13 +204,13 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "UU", }, abra: { - tier: "LC", + tier: "PU", }, kadabra: { tier: "UU", }, alakazam: { - tier: "UUBL", + tier: "OU", }, machop: { tier: "LC", @@ -225,19 +225,19 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "LC", }, weepinbell: { - tier: "NFE", + tier: "ZU", }, victreebel: { tier: "UU", }, tentacool: { - tier: "PU", + tier: "ZU", }, tentacruel: { tier: "UUBL", }, geodude: { - tier: "LC", + tier: "ZU", }, graveler: { tier: "NU", @@ -246,13 +246,13 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "OU", }, ponyta: { - tier: "LC", + tier: "PU", }, rapidash: { tier: "NU", }, slowpoke: { - tier: "PU", + tier: "ZU", }, slowbro: { tier: "UU", @@ -270,7 +270,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "NU", }, doduo: { - tier: "LC", + tier: "ZU", }, dodrio: { tier: "UU", @@ -282,10 +282,10 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "NU", }, grimer: { - tier: "LC", + tier: "ZU", }, muk: { - tier: "UUBL", + tier: "UU", }, shellder: { tier: "LC", @@ -303,13 +303,13 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "OU", }, onix: { - tier: "LC", + tier: "ZU", }, steelix: { tier: "OU", }, drowzee: { - tier: "LC", + tier: "PU", }, hypno: { tier: "UU", @@ -321,7 +321,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "NU", }, voltorb: { - tier: "PU", + tier: "ZU", }, electrode: { tier: "UU", @@ -354,13 +354,13 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "NU", }, koffing: { - tier: "LC", + tier: "ZU", }, weezing: { tier: "NU", }, rhyhorn: { - tier: "LC", + tier: "PU", }, rhydon: { tier: "OU", @@ -393,7 +393,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "PU", }, staryu: { - tier: "LC", + tier: "ZUBL", }, starmie: { tier: "OU", @@ -408,7 +408,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "UUBL", }, smoochum: { - tier: "LC", + tier: "ZU", }, jynx: { tier: "OU", @@ -420,7 +420,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "UU", }, magby: { - tier: "LC", + tier: "ZU", }, magmar: { tier: "NU", @@ -441,16 +441,16 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "UUBL", }, ditto: { - tier: "PU", + tier: "ZU", }, eevee: { - tier: "LC", + tier: "ZUBL", }, vaporeon: { tier: "OU", }, jolteon: { - tier: "UUBL", + tier: "OU", }, flareon: { tier: "NU", @@ -468,7 +468,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "UUBL", }, omanyte: { - tier: "LC", + tier: "ZU", }, omastar: { tier: "UU", @@ -480,7 +480,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "UU", }, aerodactyl: { - tier: "UUBL", + tier: "UU", }, snorlax: { tier: "OU", @@ -495,7 +495,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "UUBL", }, dratini: { - tier: "LC", + tier: "ZU", }, dragonair: { tier: "NU", @@ -513,7 +513,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "LC", }, bayleef: { - tier: "PU", + tier: "ZU", }, meganium: { tier: "UUBL", @@ -522,7 +522,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "LC", }, quilava: { - tier: "NFE", + tier: "ZU", }, typhlosion: { tier: "UUBL", @@ -531,7 +531,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "LC", }, croconaw: { - tier: "NFE", + tier: "ZU", }, feraligatr: { tier: "NUBL", @@ -540,7 +540,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "LC", }, furret: { - tier: "PU", + tier: "PUBL", }, hoothoot: { tier: "LC", @@ -570,16 +570,16 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "LC", }, togetic: { - tier: "PU", + tier: "ZU", }, natu: { - tier: "LC", + tier: "ZU", }, xatu: { tier: "NU", }, mareep: { - tier: "LC", + tier: "ZU", }, flaaffy: { tier: "PU", @@ -606,7 +606,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "UU", }, aipom: { - tier: "PU", + tier: "ZU", }, sunkern: { tier: "LC", @@ -615,7 +615,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "PU", }, yanma: { - tier: "PU", + tier: "ZU", }, wooper: { tier: "LC", @@ -630,10 +630,10 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "OU", }, unown: { - tier: "PU", + tier: "ZU", }, wobbuffet: { - tier: "PU", + tier: "ZU", }, girafarig: { tier: "UU", @@ -669,7 +669,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "PU", }, teddiursa: { - tier: "LC", + tier: "ZU", }, ursaring: { tier: "UUBL", @@ -699,7 +699,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "PU", }, mantine: { - tier: "PU", + tier: "ZU", }, skarmory: { tier: "OU", diff --git a/data/mods/gen2/items.ts b/data/mods/gen2/items.ts index fe8a5c944ce5..d264e3e4fed6 100644 --- a/data/mods/gen2/items.ts +++ b/data/mods/gen2/items.ts @@ -1,4 +1,4 @@ -export const Items: {[k: string]: ModdedItemData} = { +export const Items: import('../../../sim/dex-items').ModdedItemDataTable = { berryjuice: { inherit: true, isNonstandard: null, diff --git a/data/mods/gen2/learnsets.ts b/data/mods/gen2/learnsets.ts index 02475fa2b99b..335338db4e5c 100644 --- a/data/mods/gen2/learnsets.ts +++ b/data/mods/gen2/learnsets.ts @@ -1,4 +1,4 @@ -export const Learnsets: {[k: string]: ModdedLearnsetData} = { +export const Learnsets: import('../../../sim/dex-species').ModdedLearnsetDataTable = { missingno: { learnset: { blizzard: ["1M"], diff --git a/data/mods/gen2/moves.ts b/data/mods/gen2/moves.ts index aafbf472bd1d..634f0e89341f 100644 --- a/data/mods/gen2/moves.ts +++ b/data/mods/gen2/moves.ts @@ -2,7 +2,7 @@ * Gen 2 moves */ -export const Moves: {[k: string]: ModdedMoveData} = { +export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = { aeroblast: { inherit: true, critRatio: 3, @@ -231,7 +231,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { }, explosion: { inherit: true, - noSketch: true, + flags: {protect: 1, mirror: 1, metronome: 1, noparentalbond: 1, nosketch: 1}, }, flail: { inherit: true, @@ -398,21 +398,16 @@ export const Moves: {[k: string]: ModdedMoveData} = { }, meanlook: { inherit: true, - flags: {reflectable: 1, mirror: 1}, + flags: {reflectable: 1, mirror: 1, metronome: 1}, }, metronome: { inherit: true, - flags: {failencore: 1}, - noMetronome: [ - "Counter", "Destiny Bond", "Detect", "Endure", "Metronome", "Mimic", "Mirror Coat", "Protect", "Sketch", "Sleep Talk", "Struggle", "Thief", - ], - noSketch: true, + flags: {failencore: 1, nosketch: 1}, }, mimic: { inherit: true, accuracy: 100, - noSketch: true, - flags: {protect: 1, bypasssub: 1, allyanim: 1, failencore: 1, noassist: 1}, + flags: {protect: 1, bypasssub: 1, allyanim: 1, failencore: 1, noassist: 1, nosketch: 1}, }, mindreader: { inherit: true, @@ -439,7 +434,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { }, mirrormove: { inherit: true, - flags: {failencore: 1}, + flags: {metronome: 1, failencore: 1, nosketch: 1}, onHit(pokemon) { const noMirror = ['metronome', 'mimic', 'mirrormove', 'sketch', 'sleeptalk', 'transform']; const target = pokemon.side.foe.active[0]; @@ -452,7 +447,6 @@ export const Moves: {[k: string]: ModdedMoveData} = { } this.actions.useMove(lastMove, pokemon); }, - noSketch: true, }, mist: { num: 54, @@ -462,7 +456,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { name: "Mist", pp: 30, priority: 0, - flags: {}, + flags: {metronome: 1}, volatileStatus: 'mist', condition: { onStart(pokemon) { @@ -730,11 +724,11 @@ export const Moves: {[k: string]: ModdedMoveData} = { }, selfdestruct: { inherit: true, - noSketch: true, + flags: {protect: 1, mirror: 1, metronome: 1, noparentalbond: 1, nosketch: 1}, }, sketch: { inherit: true, - flags: {bypasssub: 1, failencore: 1, noassist: 1}, + flags: {bypasssub: 1, failencore: 1, noassist: 1, nosketch: 1}, onHit() { // Sketch always fails in Link Battles this.add('-nothing'); @@ -760,7 +754,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { }, sleeptalk: { inherit: true, - flags: {failencore: 1, nosleeptalk: 1}, + flags: {failencore: 1, nosleeptalk: 1, nosketch: 1}, onHit(pokemon) { const moves = []; for (const moveSlot of pokemon.moveSlots) { @@ -775,7 +769,6 @@ export const Moves: {[k: string]: ModdedMoveData} = { if (!randomMove) return false; this.actions.useMove(randomMove, pokemon); }, - noSketch: true, }, solarbeam: { inherit: true, @@ -787,7 +780,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { }, spiderweb: { inherit: true, - flags: {reflectable: 1, mirror: 1}, + flags: {reflectable: 1, mirror: 1, metronome: 1}, }, spikes: { inherit: true, @@ -937,7 +930,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { }, transform: { inherit: true, - noSketch: true, + flags: {bypasssub: 1, metronome: 1, failencore: 1, nosketch: 1}, }, triattack: { inherit: true, diff --git a/data/mods/gen2/pokedex.ts b/data/mods/gen2/pokedex.ts index af117f0082b1..3fc7613f8dde 100644 --- a/data/mods/gen2/pokedex.ts +++ b/data/mods/gen2/pokedex.ts @@ -1,4 +1,4 @@ -export const Pokedex: {[k: string]: ModdedSpeciesData} = { +export const Pokedex: import('../../../sim/dex-species').ModdedSpeciesDataTable = { unown: { inherit: true, cosmeticFormes: ["Unown-B", "Unown-C", "Unown-D", "Unown-E", "Unown-F", "Unown-G", "Unown-H", "Unown-I", "Unown-J", "Unown-K", "Unown-L", "Unown-M", "Unown-N", "Unown-O", "Unown-P", "Unown-Q", "Unown-R", "Unown-S", "Unown-T", "Unown-U", "Unown-V", "Unown-W", "Unown-X", "Unown-Y", "Unown-Z"], diff --git a/data/mods/gen2/random-data.json b/data/mods/gen2/random-data.json deleted file mode 100644 index c4f990df0e9f..000000000000 --- a/data/mods/gen2/random-data.json +++ /dev/null @@ -1,425 +0,0 @@ -{ - "venusaur": { - "moves": ["growth", "hiddenpowerfire", "hiddenpowerice", "leechseed", "razorleaf", "sleeppowder", "synthesis"] - }, - "charizard": { - "moves": ["bellydrum", "earthquake", "fireblast", "hyperbeam", "rockslide"] - }, - "blastoise": { - "moves": ["icebeam", "rapidspin", "rest", "sleeptalk", "surf", "toxic", "zapcannon"] - }, - "butterfree": { - "moves": ["nightmare", "psychic", "sleeppowder", "stunspore", "substitute"] - }, - "beedrill": { - "moves": ["agility", "hiddenpowerground", "sludgebomb", "substitute", "swordsdance"] - }, - "pidgeot": { - "moves": ["curse", "hiddenpowerground", "rest", "return", "sleeptalk", "toxic", "whirlwind"] - }, - "raticate": { - "moves": ["irontail", "rest", "return", "sleeptalk", "superfang"] - }, - "fearow": { - "moves": ["doubleedge", "drillpeck", "hiddenpowerground", "rest", "sleeptalk", "substitute"] - }, - "arbok": { - "moves": ["curse", "earthquake", "glare", "haze", "rest", "sludgebomb"] - }, - "pikachu": { - "moves": ["encore", "hiddenpowerice", "substitute", "surf", "thunderbolt"] - }, - "raichu": { - "moves": ["encore", "hiddenpowerice", "rest", "sleeptalk", "surf", "thunder", "thunderbolt"] - }, - "sandslash": { - "moves": ["earthquake", "hiddenpowerbug", "rockslide", "substitute", "swordsdance"] - }, - "nidoqueen": { - "moves": ["earthquake", "fireblast", "icebeam", "lovelykiss", "moonlight", "thunder"] - }, - "nidoking": { - "moves": ["earthquake", "fireblast", "icebeam", "lovelykiss", "morningsun", "thunder"] - }, - "clefable": { - "moves": ["bellydrum", "encore", "fireblast", "moonlight", "return", "shadowball"] - }, - "ninetales": { - "moves": ["fireblast", "hiddenpowergrass", "rest", "sleeptalk", "toxic"] - }, - "wigglytuff": { - "moves": ["bodyslam", "charm", "curse", "doubleedge", "fireblast", "rest", "sleeptalk", "thunderwave"] - }, - "vileplume": { - "moves": ["hiddenpowergrass", "moonlight", "sleeppowder", "sludgebomb", "stunspore", "swordsdance"] - }, - "parasect": { - "moves": ["bodyslam", "gigadrain", "hiddenpowerbug", "spore", "swordsdance", "synthesis"] - }, - "venomoth": { - "moves": ["disable", "gigadrain", "psychic", "sleeppowder", "sludgebomb", "stunspore"] - }, - "dugtrio": { - "moves": ["earthquake", "rockslide", "sludgebomb", "substitute", "swagger"] - }, - "persian": { - "moves": ["bodyslam", "hypnosis", "irontail", "rest", "return", "thunder"] - }, - "golduck": { - "moves": ["crosschop", "hiddenpowerelectric", "hydropump", "hypnosis", "icebeam", "psychic", "surf"] - }, - "primeape": { - "moves": ["crosschop", "doubleedge", "hiddenpowerghost", "meditate", "rest", "rockslide", "substitute"] - }, - "arcanine": { - "moves": ["bodyslam", "crunch", "extremespeed", "fireblast", "hiddenpowergrass", "rest", "sleeptalk"] - }, - "poliwrath": { - "moves": ["bellydrum", "bodyslam", "earthquake", "lovelykiss"] - }, - "alakazam": { - "moves": ["encore", "firepunch", "icepunch", "psychic", "recover", "thunderpunch", "thunderwave"] - }, - "machamp": { - "moves": ["bodyslam", "crosschop", "curse", "earthquake", "hiddenpowerghost", "rest", "rockslide", "sleeptalk"] - }, - "victreebel": { - "moves": ["hiddenpowerground", "razorleaf", "sleeppowder", "sludgebomb", "swordsdance", "synthesis"] - }, - "tentacruel": { - "moves": ["hydropump", "sludgebomb", "substitute", "swordsdance"] - }, - "golem": { - "moves": ["curse", "earthquake", "explosion", "fireblast", "rapidspin", "rockslide"] - }, - "rapidash": { - "moves": ["bodyslam", "fireblast", "hiddenpowergrass", "hypnosis", "sunnyday"] - }, - "slowbro": { - "moves": ["flamethrower", "icebeam", "psychic", "rest", "sleeptalk", "surf", "thunderwave"] - }, - "magneton": { - "moves": ["hiddenpowerice", "rest", "sleeptalk", "thunderbolt"] - }, - "farfetchd": { - "moves": ["agility", "batonpass", "return", "swordsdance"] - }, - "dodrio": { - "moves": ["doubleedge", "drillpeck", "hiddenpowerground", "rest", "substitute"] - }, - "dewgong": { - "moves": ["encore", "icebeam", "rest", "sleeptalk", "surf", "toxic"] - }, - "muk": { - "moves": ["curse", "explosion", "fireblast", "hiddenpowerground", "sludgebomb"] - }, - "cloyster": { - "moves": ["explosion", "icebeam", "spikes", "surf", "toxic"] - }, - "gengar": { - "moves": ["destinybond", "explosion", "firepunch", "hypnosis", "icepunch", "thunderbolt"] - }, - "hypno": { - "moves": ["psychic", "rest", "seismictoss", "sleeptalk", "thunderwave", "toxic"] - }, - "kingler": { - "moves": ["hiddenpowerground", "rest", "return", "surf", "swordsdance"] - }, - "electrode": { - "moves": ["explosion", "hiddenpowerice", "thunderbolt", "thunderwave"] - }, - "exeggutor": { - "moves": ["explosion", "gigadrain", "hiddenpowerfire", "psychic", "sleeppowder", "stunspore", "synthesis"] - }, - "marowak": { - "moves": ["earthquake", "hiddenpowerbug", "rockslide", "swordsdance"] - }, - "hitmonlee": { - "moves": ["bodyslam", "hiddenpowerghost", "highjumpkick", "meditate", "rest"] - }, - "hitmonchan": { - "moves": ["bodyslam", "counter", "curse", "hiddenpowerghost", "highjumpkick"] - }, - "lickitung": { - "moves": ["bodyslam", "earthquake", "fireblast", "rest", "sleeptalk", "swordsdance"] - }, - "weezing": { - "moves": ["explosion", "fireblast", "hiddenpowerice", "painsplit", "sludgebomb", "thunder"] - }, - "rhydon": { - "moves": ["curse", "earthquake", "rest", "roar", "rockslide", "sleeptalk"] - }, - "tangela": { - "moves": ["gigadrain", "growth", "hiddenpowerice", "sleeppowder", "synthesis"] - }, - "kangaskhan": { - "moves": ["bodyslam", "curse", "earthquake", "rest", "return", "roar", "sleeptalk"] - }, - "seaking": { - "moves": ["agility", "return", "substitute", "surf", "swordsdance"] - }, - "starmie": { - "moves": ["psychic", "rapidspin", "recover", "surf", "thunderbolt", "thunderwave"] - }, - "mrmime": { - "moves": ["encore", "firepunch", "hypnosis", "icepunch", "psychic", "thief", "thunderbolt", "thunderwave"] - }, - "scyther": { - "moves": ["batonpass", "hiddenpowerbug", "hiddenpowerground", "swordsdance", "wingattack"] - }, - "jynx": { - "moves": ["icebeam", "lovelykiss", "nightmare", "psychic", "substitute", "thief"] - }, - "electabuzz": { - "moves": ["crosschop", "icepunch", "psychic", "pursuit", "thunder", "thunderbolt"] - }, - "magmar": { - "moves": ["crosschop", "fireblast", "hiddenpowerground", "sunnyday", "thief", "thunderpunch"] - }, - "pinsir": { - "moves": ["bodyslam", "doubleedge", "hiddenpowerbug", "rest", "submission", "swordsdance"] - }, - "tauros": { - "moves": ["curse", "doubleedge", "earthquake", "rest", "return", "sleeptalk"] - }, - "gyarados": { - "moves": ["bodyslam", "doubleedge", "hiddenpowerflying", "hydropump", "rest", "sleeptalk", "thunder"] - }, - "lapras": { - "moves": ["icebeam", "rest", "sleeptalk", "surf", "thunderbolt", "toxic"] - }, - "ditto": { - "level": 83, - "moves": ["transform"] - }, - "vaporeon": { - "moves": ["growth", "rest", "sleeptalk", "surf"] - }, - "jolteon": { - "moves": ["batonpass", "growth", "hiddenpowerice", "substitute", "thunderbolt"] - }, - "flareon": { - "moves": ["batonpass", "doubleedge", "fireblast", "growth", "hiddenpowergrass"] - }, - "omastar": { - "moves": ["hiddenpowerelectric", "icebeam", "rest", "sleeptalk", "surf"] - }, - "kabutops": { - "moves": ["ancientpower", "hiddenpowerground", "return", "submission", "surf", "swordsdance"] - }, - "aerodactyl": { - "moves": ["ancientpower", "curse", "earthquake", "hiddenpowerflying", "rest", "whirlwind"] - }, - "snorlax": { - "moves": ["curse", "doubleedge", "earthquake", "lovelykiss", "rest", "return", "sleeptalk"] - }, - "articuno": { - "moves": ["hiddenpowerelectric", "icebeam", "rest", "sleeptalk", "toxic"] - }, - "zapdos": { - "moves": ["hiddenpowerice", "rest", "sleeptalk", "thunder"] - }, - "moltres": { - "moves": ["fireblast", "hiddenpowergrass", "rest", "sleeptalk", "sunnyday"] - }, - "dragonite": { - "moves": ["haze", "hiddenpowerflying", "rest", "surf", "thunder"] - }, - "mewtwo": { - "moves": ["fireblast", "icebeam", "psychic", "recover", "thunderbolt", "thunderwave"] - }, - "mew": { - "moves": ["earthquake", "explosion", "rockslide", "softboiled", "swordsdance"] - }, - "meganium": { - "moves": ["bodyslam", "earthquake", "swordsdance", "synthesis"] - }, - "typhlosion": { - "moves": ["earthquake", "fireblast", "rest", "sleeptalk", "thunderpunch"] - }, - "feraligatr": { - "moves": ["crunch", "earthquake", "icebeam", "rest", "rockslide", "sleeptalk", "surf"] - }, - "furret": { - "moves": ["curse", "doubleedge", "rest", "shadowball", "sleeptalk", "surf"] - }, - "noctowl": { - "moves": ["hypnosis", "nightshade", "thief", "toxic", "whirlwind"] - }, - "ledian": { - "moves": ["agility", "barrier", "batonpass", "lightscreen"] - }, - "ariados": { - "moves": ["batonpass", "curse", "sludgebomb", "spiderweb"] - }, - "crobat": { - "moves": ["gigadrain", "haze", "hiddenpowerground", "rest", "toxic", "wingattack"] - }, - "lanturn": { - "moves": ["icebeam", "raindance", "rest", "sleeptalk", "surf", "thunder"] - }, - "togetic": { - "moves": ["curse", "doubleedge", "rest", "sleeptalk"] - }, - "xatu": { - "moves": ["drillpeck", "haze", "psychic", "rest", "sleeptalk", "thief"] - }, - "ampharos": { - "moves": ["firepunch", "hiddenpowerice", "rest", "sleeptalk", "thunderbolt", "thunderwave"] - }, - "bellossom": { - "moves": ["hiddenpowerfire", "leechseed", "moonlight", "razorleaf", "sleeppowder", "stunspore"] - }, - "azumarill": { - "moves": ["perishsong", "rest", "surf", "whirlpool"] - }, - "sudowoodo": { - "moves": ["curse", "earthquake", "rest", "rockslide", "selfdestruct", "sleeptalk"] - }, - "politoed": { - "moves": ["growth", "rest", "sleeptalk", "surf"] - }, - "jumpluff": { - "moves": ["encore", "gigadrain", "hiddenpowerflying", "leechseed", "sleeppowder", "stunspore"] - }, - "aipom": { - "moves": ["agility", "batonpass", "curse", "return", "shadowball"] - }, - "sunflora": { - "moves": ["growth", "hiddenpowerfire", "hiddenpowerice", "razorleaf", "synthesis"] - }, - "yanma": { - "moves": ["gigadrain", "hiddenpowerbug", "hiddenpowerflying", "return", "screech", "thief"] - }, - "quagsire": { - "moves": ["bellydrum", "earthquake", "hiddenpowerrock", "rest", "sleeptalk", "surf"] - }, - "espeon": { - "moves": ["batonpass", "bite", "growth", "hiddenpowerfire", "morningsun", "psychic", "substitute"] - }, - "umbreon": { - "moves": ["batonpass", "growth", "hiddenpowerdark", "meanlook", "moonlight"] - }, - "murkrow": { - "moves": ["drillpeck", "haze", "hiddenpowerdark", "hiddenpowerfire", "pursuit", "thief", "toxic"] - }, - "slowking": { - "moves": ["flamethrower", "icebeam", "psychic", "rest", "sleeptalk", "surf", "thunderwave"] - }, - "misdreavus": { - "moves": ["meanlook", "painsplit", "perishsong", "psychic", "shadowball", "thief", "thunderbolt"] - }, - "unown": { - "level": 87, - "moves": ["hiddenpowerpsychic"] - }, - "wobbuffet": { - "level": 83, - "moves": ["counter", "mimic", "mirrorcoat", "safeguard"] - }, - "girafarig": { - "moves": ["crunch", "curse", "earthquake", "psychic", "rest", "return", "thunderbolt"] - }, - "forretress": { - "moves": ["doubleedge", "explosion", "hiddenpowerbug", "rapidspin", "spikes", "toxic"] - }, - "dunsparce": { - "moves": ["curse", "flamethrower", "rest", "return", "sleeptalk", "thunder", "thunderbolt"] - }, - "gligar": { - "moves": ["counter", "earthquake", "hiddenpowerflying", "screech", "thief"] - }, - "steelix": { - "moves": ["curse", "earthquake", "explosion", "irontail", "rest", "roar", "sleeptalk", "toxic"] - }, - "granbull": { - "moves": ["curse", "healbell", "hiddenpowerground", "lovelykiss", "rest", "return", "sleeptalk"] - }, - "qwilfish": { - "moves": ["curse", "haze", "hydropump", "sludgebomb", "spikes"] - }, - "scizor": { - "moves": ["agility", "batonpass", "hiddenpowerbug", "return", "swordsdance"] - }, - "shuckle": { - "moves": ["defensecurl", "rest", "rollout", "toxic"] - }, - "heracross": { - "moves": ["curse", "earthquake", "megahorn", "rest", "sleeptalk"] - }, - "sneasel": { - "moves": ["icebeam", "moonlight", "return", "screech", "shadowball", "thief"] - }, - "ursaring": { - "moves": ["curse", "earthquake", "rest", "return", "roar", "sleeptalk"] - }, - "magcargo": { - "moves": ["curse", "earthquake", "fireblast", "rest", "rockslide", "sleeptalk"] - }, - "piloswine": { - "moves": ["ancientpower", "curse", "earthquake", "icebeam", "rest", "sleeptalk"] - }, - "corsola": { - "moves": ["curse", "recover", "rockslide", "surf", "toxic"] - }, - "octillery": { - "moves": ["flamethrower", "hiddenpowerelectric", "icebeam", "rest", "sleeptalk", "surf"] - }, - "delibird": { - "moves": ["hiddenpowerflying", "icebeam", "rapidspin", "spikes", "thief"] - }, - "mantine": { - "moves": ["haze", "hiddenpowerelectric", "icebeam", "rest", "sleeptalk", "surf", "toxic"] - }, - "skarmory": { - "moves": ["curse", "drillpeck", "rest", "sleeptalk", "toxic"] - }, - "houndoom": { - "moves": ["crunch", "fireblast", "pursuit", "solarbeam", "sunnyday"] - }, - "kingdra": { - "moves": ["dragonbreath", "hiddenpowerelectric", "icebeam", "rest", "sleeptalk", "surf"] - }, - "donphan": { - "moves": ["ancientpower", "curse", "earthquake", "hiddenpowerbug", "rapidspin", "rest", "roar", "sleeptalk"] - }, - "porygon2": { - "moves": ["curse", "doubleedge", "icebeam", "recover", "return", "thunderbolt", "thunderwave"] - }, - "stantler": { - "moves": ["curse", "earthquake", "rest", "return", "sleeptalk"] - }, - "smeargle": { - "moves": ["agility", "batonpass", "spiderweb", "spikes", "spore", "swordsdance"] - }, - "hitmontop": { - "moves": ["curse", "hiddenpowerghost", "highjumpkick", "rest", "sleeptalk"] - }, - "miltank": { - "moves": ["bodyslam", "curse", "earthquake", "healbell", "milkdrink"] - }, - "blissey": { - "moves": ["flamethrower", "healbell", "icebeam", "present", "sing", "softboiled", "toxic"] - }, - "raikou": { - "moves": ["crunch", "hiddenpowerice", "rest", "roar", "sleeptalk", "thunder", "thunderbolt"] - }, - "entei": { - "moves": ["fireblast", "hiddenpowerrock", "return", "solarbeam", "sunnyday"] - }, - "suicune": { - "moves": ["icebeam", "rest", "roar", "sleeptalk", "surf", "toxic"] - }, - "tyranitar": { - "moves": ["crunch", "curse", "earthquake", "fireblast", "pursuit", "rest", "roar", "rockslide", "surf"] - }, - "lugia": { - "moves": ["aeroblast", "curse", "earthquake", "icebeam", "recover", "whirlwind"] - }, - "hooh": { - "moves": ["curse", "earthquake", "hiddenpowerflying", "recover", "sacredfire", "thunder", "thunderbolt"] - }, - "celebi": { - "moves": ["hiddenpowergrass", "healbell", "leechseed", "psychic", "recover", "toxic"] - } -} diff --git a/data/mods/gen2/random-teams.ts b/data/mods/gen2/random-teams.ts deleted file mode 100644 index 6e07dd9a3074..000000000000 --- a/data/mods/gen2/random-teams.ts +++ /dev/null @@ -1,315 +0,0 @@ -import RandomGen3Teams from '../gen3/random-teams'; -import {PRNG, PRNGSeed} from '../../../sim/prng'; -import type {MoveCounter, OldRandomBattleSpecies} from '../gen8/random-teams'; - -export class RandomGen2Teams extends RandomGen3Teams { - randomData: {[species: string]: OldRandomBattleSpecies} = require('./random-data.json'); - - constructor(format: string | Format, prng: PRNG | PRNGSeed | null) { - super(format, prng); - this.moveEnforcementCheckers = { - Electric: (movePool, moves, abilities, types, counter) => !counter.get('Electric'), - Fire: (movePool, moves, abilities, types, counter) => !counter.get('Fire'), - Flying: (movePool, moves, abilities, types, counter) => !counter.get('Flying') && types.has('Ground'), - Ground: (movePool, moves, abilities, types, counter) => !counter.get('Ground'), - Ice: (movePool, moves, abilities, types, counter) => !counter.get('Ice'), - Normal: (movePool, moves, abilities, types, counter) => !counter.get('Normal') && counter.setupType === 'Physical', - Psychic: (movePool, moves, abilities, types, counter) => ( - !counter.get('Psychic') && (types.has('Grass') || types.has('Ice')) - ), - Rock: (movePool, moves, abilities, types, counter, species) => !counter.get('Rock') && species.baseStats.atk > 60, - Water: (movePool, moves, abilities, types, counter) => !counter.get('Water'), - }; - } - - shouldCullMove( - move: Move, - types: Set, - moves: Set, - abilities = {}, - counter: MoveCounter, - movePool: string[], - teamDetails: RandomTeamsTypes.TeamDetails, - ): {cull: boolean, isSetup?: boolean} { - const restTalk = moves.has('rest') && moves.has('sleeptalk'); - - switch (move.id) { - // Set up once and only if we have the moves for it - case 'bellydrum': case 'curse': case 'meditate': case 'screech': case 'swordsdance': - return { - cull: ( - (counter.setupType !== 'Physical' || counter.get('physicalsetup') > 1) || - (!counter.get('Physical') || counter.damagingMoves.size < 2 && !moves.has('batonpass') && !moves.has('sleeptalk')) || - (move.id === 'bellydrum' && moves.has('sleeptalk')) - ), - isSetup: true, - }; - - // Not very useful without their supporting moves - case 'batonpass': - return {cull: !counter.setupType && !counter.get('speedsetup') && !moves.has('meanlook') && !moves.has('spiderweb')}; - case 'meanlook': case 'spiderweb': - return {cull: movePool.includes('perishsong') || movePool.includes('batonpass')}; - case 'nightmare': - return {cull: !moves.has('lovelykiss') && !moves.has('sleeppowder')}; - case 'swagger': - return {cull: !moves.has('substitute')}; - - // Bad after setup - case 'charm': case 'counter': - return {cull: !!counter.setupType}; - case 'haze': - return {cull: !!counter.setupType || restTalk}; - - // Ineffective to have both - case 'doubleedge': - return {cull: moves.has('bodyslam') || moves.has('return')}; - case 'explosion': case 'selfdestruct': - return {cull: moves.has('softboiled') || restTalk}; - case 'extremespeed': - return {cull: moves.has('bodyslam') || restTalk}; - case 'hyperbeam': - return {cull: moves.has('rockslide')}; - case 'rapidspin': - return {cull: !!teamDetails.rapidSpin || !!counter.setupType || moves.has('sleeptalk')}; - case 'return': - return {cull: moves.has('bodyslam')}; - case 'surf': - return {cull: moves.has('hydropump')}; - case 'thunder': - return {cull: moves.has('thunderbolt')}; - case 'razorleaf': - return {cull: moves.has('swordsdance') && movePool.includes('sludgebomb')}; - case 'icebeam': - return {cull: moves.has('dragonbreath')}; - case 'destinybond': - return {cull: moves.has('explosion')}; - case 'pursuit': - return {cull: moves.has('crunch') && moves.has('solarbeam')}; - case 'thief': - return {cull: moves.has('rest') || moves.has('substitute')}; - case 'irontail': - return {cull: types.has('Ground') && movePool.includes('earthquake')}; - - // Status and illegal move rejections - case 'encore': case 'roar': case 'whirlwind': - return {cull: restTalk}; - case 'lovelykiss': - return {cull: ['healbell', 'moonlight', 'morningsun', 'sleeptalk'].some(m => moves.has(m))}; - case 'sleeptalk': - return {cull: moves.has('curse') && counter.get('stab') >= 2}; - case 'softboiled': - return {cull: movePool.includes('swordsdance')}; - case 'spikes': - return {cull: !!teamDetails.spikes}; - case 'substitute': - return {cull: moves.has('agility') || moves.has('rest')}; - case 'synthesis': - return {cull: moves.has('explosion')}; - case 'thunderwave': - return {cull: moves.has('thunder') || moves.has('toxic')}; - } - - return {cull: false}; - } - - getItem( - ability: string, - types: string[], - moves: Set, - counter: MoveCounter, - teamDetails: RandomTeamsTypes.TeamDetails, - species: Species, - ) { - // First, the high-priority items - if (species.name === 'Ditto') return 'Metal Powder'; - if (species.name === 'Farfetch\u2019d') return 'Stick'; - if (species.name === 'Marowak') return 'Thick Club'; - if (species.name === 'Pikachu') return 'Light Ball'; - if (species.name === 'Unown') return 'Twisted Spoon'; - if (moves.has('thief')) return ''; - - // Medium priority - if (moves.has('rest') && !moves.has('sleeptalk')) return 'Mint Berry'; - if ( - (moves.has('bellydrum') || moves.has('swordsdance')) && - species.baseStats.spe >= 60 && !types.includes('Ground') && - !moves.has('sleeptalk') && !moves.has('substitute') && - this.randomChance(1, 2) - ) { - return 'Miracle Berry'; - } - - // Default to Leftovers - return 'Leftovers'; - } - - randomSet(species: string | Species, teamDetails: RandomTeamsTypes.TeamDetails = {}): RandomTeamsTypes.RandomSet { - species = this.dex.species.get(species); - - const data = this.randomData[species.id]; - const movePool: string[] = [...(data.moves || this.dex.species.getMovePool(species.id))]; - const rejectedPool: string[] = []; - const moves = new Set(); - - let ivs = {hp: 30, atk: 30, def: 30, spa: 30, spd: 30, spe: 30}; - let availableHP = 0; - for (const setMoveid of movePool) { - if (setMoveid.startsWith('hiddenpower')) availableHP++; - } - - const types = new Set(species.types); - - let counter; - // We use a special variable to track Hidden Power - // so that we can check for all Hidden Powers at once - let hasHiddenPower = false; - - do { - // Choose next 4 moves from learnset/viable moves and add them to moves list: - while (moves.size < this.maxMoveCount && movePool.length) { - const moveid = this.sampleNoReplace(movePool); - if (moveid.startsWith('hiddenpower')) { - availableHP--; - if (hasHiddenPower) continue; - hasHiddenPower = true; - } - moves.add(moveid); - } - while (moves.size < this.maxMoveCount && rejectedPool.length) { - const moveid = this.sampleNoReplace(rejectedPool); - if (moveid.startsWith('hiddenpower')) { - if (hasHiddenPower) continue; - hasHiddenPower = true; - } - moves.add(moveid); - } - - counter = this.queryMoves(moves, species.types, new Set(), movePool); - - // Iterate through the moves again, this time to cull them: - for (const moveid of moves) { - const move = this.dex.moves.get(moveid); - let {cull, isSetup} = this.shouldCullMove(move, types, moves, {}, counter, movePool, teamDetails); - - // This move doesn't satisfy our setup requirements: - if (counter.setupType === 'Physical' && move.category === 'Special' && !counter.get('Physical')) { - cull = true; - } - - - // Reject Status, non-STAB, or low basepower moves - const moveIsRejectable = ( - (move.category !== 'Status' || !move.flags.heal) && - // These moves cannot be rejected in favor of a forced move - !['batonpass', 'sleeptalk', 'spikes', 'spore', 'sunnyday'].includes(move.id) && - (move.category === 'Status' || !types.has(move.type) || (move.basePower && move.basePower < 40)) - ); - - if (!cull && !isSetup && moveIsRejectable && (counter.setupType || !move.stallingMove)) { - // There may be more important moves that this Pokemon needs - if ( - // Pokemon should usually have at least one STAB move - ( - !counter.get('stab') && - !counter.get('damage') && - !types.has('Ghost') && - counter.get('physicalpool') + counter.get('specialpool') > 0 - ) || (movePool.includes('megahorn') || (movePool.includes('softboiled') && moves.has('present'))) || - // Rest + Sleep Talk should be selected together - ((moves.has('rest') && movePool.includes('sleeptalk')) || (moves.has('sleeptalk') && movePool.includes('rest'))) || - // Sunny Day + Solar Beam should be selected together - (moves.has('sunnyday') && movePool.includes('solarbeam') || - (moves.has('solarbeam') && movePool.includes('sunnyday'))) || - ['milkdrink', 'recover', 'spikes', 'spore'].some(m => movePool.includes(m)) - ) { - cull = true; - } else { - // Pokemon should have moves that benefit their typing - for (const type of types) { - if (this.moveEnforcementCheckers[type]?.(movePool, moves, new Set(), types, counter, species, teamDetails)) cull = true; - } - } - } - - // Remove rejected moves from the move list - if ( - cull && - (movePool.length - availableHP || availableHP && (move.id === 'hiddenpower' || !hasHiddenPower)) - ) { - if (move.category !== 'Status' && !move.damage && (move.id !== 'hiddenpower' || !availableHP)) { - rejectedPool.push(moveid); - } - moves.delete(moveid); - if (moveid.startsWith('hiddenpower')) hasHiddenPower = false; - break; - } - - if (cull && rejectedPool.length) { - moves.delete(moveid); - if (moveid.startsWith('hiddenpower')) hasHiddenPower = false; - break; - } - } - } while (moves.size < this.maxMoveCount && (movePool.length || rejectedPool.length)); - - // Adjust IVs for Hidden Power - for (const setMoveid of moves) { - if (!setMoveid.startsWith('hiddenpower')) continue; - const hpType = setMoveid.substr(11, setMoveid.length); - - const hpIVs: {[k: string]: Partial} = { - dragon: {def: 28}, - ice: {def: 26}, - psychic: {def: 24}, - electric: {atk: 28}, - grass: {atk: 28, def: 28}, - water: {atk: 28, def: 26}, - fire: {atk: 28, def: 24}, - steel: {atk: 26}, - ghost: {atk: 26, def: 28}, - bug: {atk: 26, def: 26}, - rock: {atk: 26, def: 24}, - ground: {atk: 24}, - poison: {atk: 24, def: 28}, - flying: {atk: 24, def: 26}, - fighting: {atk: 24, def: 24}, - }; - if (hpIVs[hpType]) { - ivs = {...ivs, ...hpIVs[hpType]}; - } - - if (ivs.atk === 28 || ivs.atk === 24) ivs.hp = 14; - if (ivs.def === 28 || ivs.def === 24) ivs.hp -= 8; - } - - const levelScale: {[k: string]: number} = { - PU: 77, - PUBL: 75, - NU: 73, - NUBL: 71, - UU: 69, - UUBL: 67, - OU: 65, - Uber: 61, - }; - - const level = this.adjustLevel || data.level || levelScale[species.tier] || 80; - - return { - name: species.name, - species: species.name, - moves: Array.from(moves), - ability: 'No Ability', - evs: {hp: 255, atk: 255, def: 255, spa: 255, spd: 255, spe: 255}, - ivs, - item: this.getItem('None', species.types, moves, counter, teamDetails, species), - level, - // No shiny chance because Gen 2 shinies have bad IVs - shiny: false, - gender: species.gender ? species.gender : 'M', - }; - } -} - -export default RandomGen2Teams; diff --git a/data/mods/gen2/rulesets.ts b/data/mods/gen2/rulesets.ts index 9c77b6bdea78..55a717528727 100644 --- a/data/mods/gen2/rulesets.ts +++ b/data/mods/gen2/rulesets.ts @@ -1,6 +1,6 @@ import type {Learnset} from "../../../sim/dex-species"; -export const Rulesets: {[k: string]: ModdedFormatData} = { +export const Rulesets: import('../../../sim/dex-formats').ModdedFormatDataTable = { obtainablemoves: { inherit: true, banlist: [ @@ -42,9 +42,9 @@ export const Rulesets: {[k: string]: ModdedFormatData} = { 'Spore + Spider Web', ], }, - nintendocup2000movelegality: { + nc2000movelegality: { effectType: 'ValidatorRule', - name: 'Nintendo Cup 2000 Move Legality', + name: 'NC 2000 Move Legality', desc: "Prevents Pok\u00e9mon from having moves that would only be obtainable in Pok\u00e9mon Crystal.", onValidateSet(set) { const illegalCombos: {[speciesid: string]: {[moveid: string]: 'E' | 'L' | 'S'}} = { diff --git a/data/mods/gen2/scripts.ts b/data/mods/gen2/scripts.ts index c04125fb17d1..f35160ef2b57 100644 --- a/data/mods/gen2/scripts.ts +++ b/data/mods/gen2/scripts.ts @@ -89,10 +89,10 @@ export const Scripts: ModdedBattleScriptsData = { }, actions: { inherit: true, - runMove(moveOrMoveName, pokemon, targetLoc, sourceEffect) { + runMove(moveOrMoveName, pokemon, targetLoc, options) { let move = this.dex.getActiveMove(moveOrMoveName); let target = this.battle.getTarget(pokemon, move, targetLoc); - if (!sourceEffect && move.id !== 'struggle') { + if (!options?.sourceEffect && move.id !== 'struggle') { const changedMove = this.battle.runEvent('OverrideAction', pokemon, target, move); if (changedMove && changedMove !== true) { move = this.dex.getActiveMove(changedMove); @@ -135,7 +135,7 @@ export const Scripts: ModdedBattleScriptsData = { } } pokemon.moveUsed(move); - this.battle.actions.useMove(move, pokemon, target, sourceEffect); + this.battle.actions.useMove(move, pokemon, {target, sourceEffect: options?.sourceEffect}); this.battle.singleEvent('AfterMove', move, null, pokemon, target, move); if (!move.selfSwitch && pokemon.side.foe.active[0].hp) this.battle.runEvent('AfterMoveSelf', pokemon, target, move); }, diff --git a/data/mods/gen2/typechart.ts b/data/mods/gen2/typechart.ts index eb62f8447d3b..de3df304e62d 100644 --- a/data/mods/gen2/typechart.ts +++ b/data/mods/gen2/typechart.ts @@ -1,4 +1,4 @@ -export const TypeChart: {[k: string]: ModdedTypeData} = { +export const TypeChart: import('../../../sim/dex-data').ModdedTypeDataTable = { fire: { inherit: true, damageTaken: { diff --git a/data/mods/gen2stadium2/conditions.ts b/data/mods/gen2stadium2/conditions.ts index 8d6dae2eff78..3ced97f51a3c 100644 --- a/data/mods/gen2stadium2/conditions.ts +++ b/data/mods/gen2stadium2/conditions.ts @@ -4,7 +4,7 @@ * a volatile along with them to keep track of if their respective stat changes should be factored * in during stat calculations or not. */ -export const Conditions: {[k: string]: ModdedConditionData} = { +export const Conditions: import('../../../sim/dex-conditions').ModdedConditionDataTable = { brn: { name: 'brn', effectType: 'Status', diff --git a/data/mods/gen2stadium2/items.ts b/data/mods/gen2stadium2/items.ts index bf2a797ed2c2..990e14c2a468 100644 --- a/data/mods/gen2stadium2/items.ts +++ b/data/mods/gen2stadium2/items.ts @@ -1,5 +1,5 @@ // Gen 2 Stadium fixes Dragon Fang and Dragon Scale having the wrong effects. -export const Items: {[k: string]: ModdedItemData} = { +export const Items: import('../../../sim/dex-items').ModdedItemDataTable = { dragonfang: { inherit: true, onModifyDamage(damage, source, target, move) { diff --git a/data/mods/gen2stadium2/moves.ts b/data/mods/gen2stadium2/moves.ts index acf213c3f168..9a34450484de 100644 --- a/data/mods/gen2stadium2/moves.ts +++ b/data/mods/gen2stadium2/moves.ts @@ -1,4 +1,4 @@ -export const Moves: {[k: string]: ModdedMoveData} = { +export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = { // Belly Drum no longer boosts attack by 2 stages if under 50% health. bellydrum: { inherit: true, diff --git a/data/mods/gen2stadium2/rulesets.ts b/data/mods/gen2stadium2/rulesets.ts index 539707fc9aa9..0bbab70192e9 100644 --- a/data/mods/gen2stadium2/rulesets.ts +++ b/data/mods/gen2stadium2/rulesets.ts @@ -1,4 +1,4 @@ -export const Rulesets: {[k: string]: ModdedFormatData} = { +export const Rulesets: import('../../../sim/dex-formats').ModdedFormatDataTable = { standard: { effectType: 'ValidatorRule', name: 'Standard', diff --git a/data/mods/gen3/abilities.ts b/data/mods/gen3/abilities.ts index 1265649cb4d9..3d2bd5b5e6f7 100644 --- a/data/mods/gen3/abilities.ts +++ b/data/mods/gen3/abilities.ts @@ -1,4 +1,4 @@ -export const Abilities: {[k: string]: ModdedAbilityData} = { +export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTable = { cutecharm: { inherit: true, onDamagingHit(damage, target, source, move) { @@ -51,6 +51,19 @@ export const Abilities: {[k: string]: ModdedAbilityData} = { } }, }, + forecast: { + inherit: true, + flags: {}, + }, + hustle: { + inherit: true, + onSourceModifyAccuracy(accuracy, target, source, move) { + const physicalTypes = ['Normal', 'Fighting', 'Flying', 'Poison', 'Ground', 'Rock', 'Bug', 'Ghost', 'Steel']; + if (physicalTypes.includes(move.type) && typeof accuracy === 'number') { + return this.chainModify([3277, 4096]); + } + }, + }, intimidate: { inherit: true, onStart(pokemon) { @@ -79,12 +92,13 @@ export const Abilities: {[k: string]: ModdedAbilityData} = { }, lightningrod: { onFoeRedirectTarget(target, source, source2, move) { - if (move.type !== 'Electric') return; + // don't count Hidden Power as Electric-type + if (this.dex.moves.get(move.id).type !== 'Electric') return; if (this.validTarget(this.effectState.target, source, move.target)) { return this.effectState.target; } }, - isBreakable: true, + flags: {breakable: 1}, name: "Lightning Rod", rating: 0, num: 32, @@ -162,19 +176,17 @@ export const Abilities: {[k: string]: ModdedAbilityData} = { }, trace: { inherit: true, - onUpdate(pokemon) { + onUpdate() {}, + onStart(pokemon) { if (!pokemon.isStarted) return; 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 (pokemon.setAbility(ability)) { this.add('-ability', pokemon, ability, '[from] ability: Trace', '[of] ' + target); } }, + flags: {}, }, truant: { inherit: true, diff --git a/data/mods/gen3/conditions.ts b/data/mods/gen3/conditions.ts index b2daf4308749..381451eab155 100644 --- a/data/mods/gen3/conditions.ts +++ b/data/mods/gen3/conditions.ts @@ -1,4 +1,4 @@ -export const Conditions: {[k: string]: ModdedConditionData} = { +export const Conditions: import('../../../sim/dex-conditions').ModdedConditionDataTable = { slp: { name: 'slp', effectType: 'Status', diff --git a/data/mods/gen3/formats-data.ts b/data/mods/gen3/formats-data.ts index 4601a5eef3bd..cd2630a5083b 100644 --- a/data/mods/gen3/formats-data.ts +++ b/data/mods/gen3/formats-data.ts @@ -1,4 +1,4 @@ -export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { +export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormatsDataTable = { bulbasaur: { tier: "LC", }, @@ -21,7 +21,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "LC", }, wartortle: { - tier: "PU", + tier: "ZU", }, blastoise: { tier: "UU", @@ -42,7 +42,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "NFE", }, beedrill: { - tier: "PU", + tier: "ZU", }, pidgey: { tier: "LC", @@ -78,7 +78,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "NU", }, raichu: { - tier: "UU", + tier: "RU", }, sandshrew: { tier: "LC", @@ -111,13 +111,13 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "NFE", }, clefable: { - tier: "UU", + tier: "RU", }, vulpix: { tier: "LC", }, ninetales: { - tier: "UU", + tier: "RU", }, igglybuff: { tier: "LC", @@ -141,7 +141,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "LC", }, gloom: { - tier: "ZUBL", + tier: "ZU", }, vileplume: { tier: "UU", @@ -171,7 +171,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "LC", }, persian: { - tier: "UU", + tier: "RU", }, psyduck: { tier: "LC", @@ -180,10 +180,10 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "UU", }, mankey: { - tier: "ZU", + tier: "LC", }, primeape: { - tier: "UU", + tier: "RU", }, growlithe: { tier: "ZU", @@ -198,13 +198,13 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "ZUBL", }, poliwrath: { - tier: "UU", + tier: "RU", }, politoed: { - tier: "UU", + tier: "RU", }, abra: { - tier: "PU", + tier: "ZU", }, kadabra: { tier: "UUBL", @@ -225,13 +225,13 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "LC", }, weepinbell: { - tier: "ZUBL", + tier: "ZU", }, victreebel: { - tier: "UU", + tier: "RU", }, tentacool: { - tier: "ZUBL", + tier: "ZU", }, tentacruel: { tier: "UU", @@ -246,10 +246,10 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "UU", }, ponyta: { - tier: "ZUBL", + tier: "ZU", }, rapidash: { - tier: "UU", + tier: "RU", }, slowpoke: { tier: "LC", @@ -270,7 +270,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "ZU", }, doduo: { - tier: "PU", + tier: "ZU", }, dodrio: { tier: "UUBL", @@ -303,13 +303,13 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "OU", }, onix: { - tier: "ZU", + tier: "LC", }, steelix: { tier: "UUBL", }, drowzee: { - tier: "ZUBL", + tier: "ZU", }, hypno: { tier: "UU", @@ -399,7 +399,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "OU", }, mrmime: { - tier: "UU", + tier: "RU", }, scyther: { tier: "UU", @@ -408,7 +408,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "UUBL", }, smoochum: { - tier: "ZUBL", + tier: "ZU", }, jynx: { tier: "UUBL", @@ -420,10 +420,10 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "UU", }, magby: { - tier: "PU", + tier: "ZU", }, magmar: { - tier: "UU", + tier: "RU", }, pinsir: { tier: "UU", @@ -438,7 +438,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "OU", }, lapras: { - tier: "UUBL", + tier: "UU", }, ditto: { tier: "ZU", @@ -462,7 +462,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "UUBL", }, porygon: { - tier: "ZUBL", + tier: "ZU", }, porygon2: { tier: "UUBL", @@ -477,7 +477,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "LC", }, kabutops: { - tier: "UU", + tier: "RU", }, aerodactyl: { tier: "OU", @@ -516,13 +516,13 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "ZU", }, meganium: { - tier: "UU", + tier: "RU", }, cyndaquil: { tier: "ZU", }, quilava: { - tier: "ZUBL", + tier: "ZU", }, typhlosion: { tier: "UUBL", @@ -531,7 +531,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "LC", }, croconaw: { - tier: "NFE", + tier: "ZU", }, feraligatr: { tier: "UU", @@ -546,7 +546,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "LC", }, noctowl: { - tier: "PU", + tier: "ZU", }, ledyba: { tier: "LC", @@ -558,7 +558,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "LC", }, ariados: { - tier: "ZUBL", + tier: "ZU", }, chinchou: { tier: "ZU", @@ -573,16 +573,16 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "PU", }, natu: { - tier: "ZU", + tier: "LC", }, xatu: { - tier: "UU", + tier: "RU", }, mareep: { tier: "LC", }, flaaffy: { - tier: "ZUBL", + tier: "ZU", }, ampharos: { tier: "UU", @@ -594,7 +594,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "NFE", }, azumarill: { - tier: "UU", + tier: "RU", }, sudowoodo: { tier: "NU", @@ -606,7 +606,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "NFE", }, jumpluff: { - tier: "UU", + tier: "RUBL", }, aipom: { tier: "ZU", @@ -618,7 +618,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "ZU", }, yanma: { - tier: "PU", + tier: "ZUBL", }, wooper: { tier: "LC", @@ -645,7 +645,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "UU", }, pineco: { - tier: "LC", + tier: "PU", }, forretress: { tier: "OU", @@ -672,7 +672,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "OU", }, sneasel: { - tier: "UU", + tier: "RU", }, teddiursa: { tier: "LC", @@ -693,7 +693,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "PUBL", }, corsola: { - tier: "PU", + tier: "ZU", }, remoraid: { tier: "LC", @@ -705,7 +705,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "ZU", }, mantine: { - tier: "UU", + tier: "RU", }, skarmory: { tier: "OU", @@ -723,7 +723,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "UUBL", }, stantler: { - tier: "UU", + tier: "RU", }, smeargle: { tier: "UUBL", @@ -741,7 +741,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "OU", }, larvitar: { - tier: "ZU", + tier: "LC", }, pupitar: { tier: "NU", @@ -789,7 +789,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "LC", }, mightyena: { - tier: "PU", + tier: "ZU", }, zigzagoon: { tier: "NFE", @@ -816,7 +816,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "LC", }, lombre: { - tier: "PU", + tier: "ZU", }, ludicolo: { tier: "UUBL", @@ -828,7 +828,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "NFE", }, shiftry: { - tier: "UU", + tier: "RU", }, taillow: { tier: "ZU", @@ -876,7 +876,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "LC", }, ninjask: { - tier: "UU", + tier: "RUBL", }, shedinja: { tier: "ZUBL", @@ -888,7 +888,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "NFE", }, exploud: { - tier: "UU", + tier: "RU", }, makuhita: { tier: "LC", @@ -915,13 +915,13 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "ZU", }, lairon: { - tier: "PU", + tier: "ZUBL", }, aggron: { - tier: "UU", + tier: "RU", }, meditite: { - tier: "PU", + tier: "ZU", }, medicham: { tier: "UUBL", @@ -939,7 +939,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "PU", }, volbeat: { - tier: "PU", + tier: "ZU", }, illumise: { tier: "ZU", @@ -957,7 +957,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "LC", }, sharpedo: { - tier: "UU", + tier: "RU", }, wailmer: { tier: "LC", @@ -966,10 +966,10 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "NU", }, numel: { - tier: "ZU", + tier: "LC", }, camerupt: { - tier: "UU", + tier: "RU", }, torkoal: { tier: "NU", @@ -1041,7 +1041,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "UU", }, anorith: { - tier: "ZUBL", + tier: "ZU", }, armaldo: { tier: "UUBL", @@ -1071,7 +1071,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "ZU", }, banette: { - tier: "UU", + tier: "RU", }, duskull: { tier: "PU", @@ -1080,13 +1080,13 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "UUBL", }, tropius: { - tier: "PU", + tier: "ZU", }, chimecho: { tier: "NU", }, absol: { - tier: "UU", + tier: "RU", }, snorunt: { tier: "ZU", @@ -1104,7 +1104,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "UU", }, clamperl: { - tier: "ZUBL", + tier: "ZU", }, huntail: { tier: "NU", @@ -1122,7 +1122,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "LC", }, shelgon: { - tier: "PU", + tier: "ZUBL", }, salamence: { tier: "OU", diff --git a/data/mods/gen3/items.ts b/data/mods/gen3/items.ts index 9ab3eb5bacd3..f3bc45365e95 100644 --- a/data/mods/gen3/items.ts +++ b/data/mods/gen3/items.ts @@ -1,4 +1,4 @@ -export const Items: {[k: string]: ModdedItemData} = { +export const Items: import('../../../sim/dex-items').ModdedItemDataTable = { aguavberry: { inherit: true, onUpdate() {}, diff --git a/data/mods/gen3/moves.ts b/data/mods/gen3/moves.ts index b1d3ff51f893..84efa1dbb19e 100644 --- a/data/mods/gen3/moves.ts +++ b/data/mods/gen3/moves.ts @@ -2,7 +2,7 @@ * Gen 3 moves */ -export const Moves: {[k: string]: ModdedMoveData} = { +export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = { absorb: { inherit: true, pp: 20, @@ -18,7 +18,11 @@ export const Moves: {[k: string]: ModdedMoveData} = { }, ancientpower: { inherit: true, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, + }, + assist: { + inherit: true, + flags: {metronome: 1, noassist: 1, nosleeptalk: 1}, }, astonish: { inherit: true, @@ -196,7 +200,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { disable: { inherit: true, accuracy: 55, - flags: {protect: 1, mirror: 1, bypasssub: 1}, + flags: {protect: 1, mirror: 1, bypasssub: 1, metronome: 1}, volatileStatus: 'disable', condition: { durationCallback() { @@ -253,7 +257,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { name: "Doom Desire", basePower: 120, category: "Physical", - flags: {}, + flags: {metronome: 1, futuremove: 1}, willCrit: false, type: '???', } as unknown as ActiveMove; @@ -269,7 +273,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { basePower: 0, damage: damage, category: "Physical", - flags: {futuremove: 1}, + flags: {metronome: 1, futuremove: 1}, effectType: 'Move', type: '???', }, @@ -335,11 +339,33 @@ export const Moves: {[k: string]: ModdedMoveData} = { }, fakeout: { inherit: true, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, }, feintattack: { inherit: true, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, + }, + flail: { + inherit: true, + basePowerCallback(pokemon) { + const ratio = Math.max(Math.floor(pokemon.hp * 48 / pokemon.maxhp), 1); + let bp; + if (ratio < 2) { + bp = 200; + } else if (ratio < 5) { + bp = 150; + } else if (ratio < 10) { + bp = 100; + } else if (ratio < 17) { + bp = 80; + } else if (ratio < 33) { + bp = 40; + } else { + bp = 20; + } + this.debug('BP: ' + bp); + return bp; + }, }, flash: { inherit: true, @@ -473,6 +499,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { }, mirrormove: { inherit: true, + flags: {metronome: 1, failencore: 1, nosleeptalk: 1, noassist: 1}, onTryHit() { }, onHit(pokemon) { const noMirror = [ @@ -517,7 +544,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { }, overheat: { inherit: true, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, }, petaldance: { inherit: true, @@ -527,13 +554,35 @@ export const Moves: {[k: string]: ModdedMoveData} = { inherit: true, pp: 20, }, + reversal: { + inherit: true, + basePowerCallback(pokemon) { + const ratio = Math.max(Math.floor(pokemon.hp * 48 / pokemon.maxhp), 1); + let bp; + if (ratio < 2) { + bp = 200; + } else if (ratio < 5) { + bp = 150; + } else if (ratio < 10) { + bp = 100; + } else if (ratio < 17) { + bp = 80; + } else if (ratio < 33) { + bp = 40; + } else { + bp = 20; + } + this.debug('BP: ' + bp); + return bp; + }, + }, rocksmash: { inherit: true, basePower: 20, }, sketch: { inherit: true, - flags: {bypasssub: 1, failencore: 1, noassist: 1, failmimic: 1}, + flags: {bypasssub: 1, failencore: 1, noassist: 1, failmimic: 1, nosketch: 1}, }, sleeptalk: { inherit: true, @@ -591,7 +640,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { }, struggle: { inherit: true, - flags: {contact: 1, protect: 1, noassist: 1, failencore: 1, failmimic: 1}, + flags: {contact: 1, protect: 1, noassist: 1, failencore: 1, failmimic: 1, nosketch: 1}, accuracy: 100, recoil: [1, 4], struggleRecoil: false, @@ -602,7 +651,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { }, taunt: { inherit: true, - flags: {protect: 1, bypasssub: 1}, + flags: {protect: 1, bypasssub: 1, metronome: 1}, condition: { duration: 2, onStart(target) { @@ -630,11 +679,11 @@ export const Moves: {[k: string]: ModdedMoveData} = { }, teeterdance: { inherit: true, - flags: {protect: 1}, + flags: {protect: 1, metronome: 1}, }, tickle: { inherit: true, - flags: {protect: 1, reflectable: 1, mirror: 1, bypasssub: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, bypasssub: 1, metronome: 1}, }, uproar: { inherit: true, diff --git a/data/mods/gen3/random-data.json b/data/mods/gen3/random-data.json deleted file mode 100644 index c70931eac534..000000000000 --- a/data/mods/gen3/random-data.json +++ /dev/null @@ -1,882 +0,0 @@ -{ - "venusaur": { - "level": 82, - "moves": ["curse", "earthquake", "hiddenpowerrock", "leechseed", "sleeppowder", "sludgebomb", "swordsdance", "synthesis"] - }, - "charizard": { - "level": 80, - "moves": ["bellydrum", "dragondance", "earthquake", "fireblast", "hiddenpowerflying", "substitute"] - }, - "blastoise": { - "level": 83, - "moves": ["earthquake", "icebeam", "mirrorcoat", "rest", "roar", "sleeptalk", "surf", "toxic"] - }, - "butterfree": { - "level": 95, - "moves": ["gigadrain", "hiddenpowerfire", "morningsun", "psychic", "sleeppowder", "stunspore", "toxic"] - }, - "beedrill": { - "level": 91, - "moves": ["brickbreak", "doubleedge", "endure", "hiddenpowerbug", "sludgebomb", "swordsdance"] - }, - "pidgeot": { - "level": 87, - "moves": ["aerialace", "hiddenpowerground", "quickattack", "return", "substitute", "toxic"] - }, - "raticate": { - "level": 88, - "moves": ["endeavor", "hiddenpowerground", "quickattack", "return", "reversal", "shadowball", "substitute"] - }, - "fearow": { - "level": 85, - "moves": ["agility", "batonpass", "drillpeck", "hiddenpowerground", "quickattack", "return", "substitute"] - }, - "arbok": { - "level": 87, - "moves": ["doubleedge", "earthquake", "hiddenpowerfire", "rest", "rockslide", "sleeptalk", "sludgebomb"] - }, - "pikachu": { - "level": 88, - "moves": ["hiddenpowerice", "substitute", "surf", "thunderbolt"] - }, - "raichu": { - "level": 84, - "moves": ["encore", "focuspunch", "hiddenpowergrass", "hiddenpowerice", "substitute", "surf", "thunderbolt", "thunderwave"] - }, - "sandslash": { - "level": 84, - "moves": ["earthquake", "hiddenpowerbug", "rapidspin", "rockslide", "swordsdance", "toxic"] - }, - "nidoqueen": { - "level": 83, - "moves": ["earthquake", "fireblast", "icebeam", "shadowball", "sludgebomb", "superpower"] - }, - "nidoking": { - "level": 81, - "moves": ["earthquake", "fireblast", "icebeam", "megahorn", "sludgebomb", "substitute", "thunderbolt"] - }, - "clefable": { - "level": 84, - "moves": ["calmmind", "counter", "icebeam", "return", "shadowball", "softboiled", "thunderbolt", "thunderwave"] - }, - "ninetales": { - "level": 82, - "moves": ["fireblast", "flamethrower", "hiddenpowergrass", "hypnosis", "substitute", "toxic", "willowisp"] - }, - "wigglytuff": { - "level": 90, - "moves": ["fireblast", "icebeam", "protect", "return", "thunderbolt", "toxic", "wish"] - }, - "vileplume": { - "level": 85, - "moves": ["aromatherapy", "hiddenpowerfire", "sleeppowder", "sludgebomb", "solarbeam", "sunnyday", "synthesis"] - }, - "parasect": { - "level": 93, - "moves": ["aromatherapy", "gigadrain", "hiddenpowerbug", "return", "spore", "stunspore", "swordsdance"] - }, - "venomoth": { - "level": 88, - "moves": ["batonpass", "hiddenpowerground", "signalbeam", "sleeppowder", "sludgebomb", "substitute"] - }, - "dugtrio": { - "level": 81, - "moves": ["aerialace", "earthquake", "hiddenpowerbug", "rockslide", "substitute"] - }, - "persian": { - "level": 87, - "moves": ["fakeout", "hiddenpowerground", "hypnosis", "irontail", "return", "shadowball", "substitute"] - }, - "golduck": { - "level": 81, - "moves": ["calmmind", "hiddenpowergrass", "hydropump", "hypnosis", "icebeam", "substitute", "surf"] - }, - "primeape": { - "level": 85, - "moves": ["bulkup", "crosschop", "earthquake", "hiddenpowerghost", "rockslide", "substitute"] - }, - "arcanine": { - "level": 81, - "moves": ["extremespeed", "fireblast", "flamethrower", "hiddenpowergrass", "rest", "sleeptalk", "toxic"] - }, - "poliwrath": { - "level": 84, - "moves": ["brickbreak", "bulkup", "hiddenpowerghost", "hydropump", "hypnosis", "icebeam", "substitute"] - }, - "alakazam": { - "level": 79, - "moves": ["calmmind", "encore", "firepunch", "icepunch", "psychic", "recover", "substitute"] - }, - "machamp": { - "level": 84, - "moves": ["bulkup", "crosschop", "earthquake", "hiddenpowerghost", "rest", "rockslide", "sleeptalk"] - }, - "victreebel": { - "level": 84, - "moves": ["hiddenpowerfire", "sleeppowder", "sludgebomb", "solarbeam", "sunnyday"] - }, - "tentacruel": { - "level": 83, - "moves": ["gigadrain", "haze", "hydropump", "icebeam", "rapidspin", "surf", "toxic"] - }, - "golem": { - "level": 84, - "moves": ["doubleedge", "earthquake", "explosion", "hiddenpowerbug", "rockslide", "toxic"] - }, - "rapidash": { - "level": 82, - "moves": ["fireblast", "hiddenpowergrass", "hiddenpowerrock", "substitute", "toxic"] - }, - "slowbro": { - "level": 82, - "moves": ["calmmind", "fireblast", "icebeam", "psychic", "rest", "sleeptalk", "surf", "thunderwave"] - }, - "magneton": { - "level": 84, - "moves": ["hiddenpowergrass", "hiddenpowerice", "rest", "sleeptalk", "thunderbolt", "toxic"] - }, - "farfetchd": { - "level": 97, - "moves": ["agility", "batonpass", "hiddenpowerflying", "return", "swordsdance"] - }, - "dodrio": { - "level": 81, - "moves": ["drillpeck", "flail", "hiddenpowerground", "quickattack", "return", "substitute"] - }, - "dewgong": { - "level": 88, - "moves": ["encore", "hiddenpowergrass", "icebeam", "rest", "sleeptalk", "surf", "toxic"] - }, - "muk": { - "level": 84, - "moves": ["brickbreak", "curse", "explosion", "fireblast", "hiddenpowerghost", "rest", "sludgebomb"] - }, - "cloyster": { - "level": 81, - "moves": ["explosion", "icebeam", "rapidspin", "spikes", "surf", "toxic"] - }, - "gengar": { - "level": 77, - "moves": ["destinybond", "explosion", "firepunch", "hypnosis", "icepunch", "substitute", "thunderbolt", "willowisp"] - }, - "hypno": { - "level": 86, - "moves": ["batonpass", "calmmind", "firepunch", "hypnosis", "protect", "psychic", "toxic", "wish"] - }, - "kingler": { - "level": 90, - "moves": ["doubleedge", "hiddenpowerghost", "hiddenpowerground", "surf", "swordsdance"] - }, - "electrode": { - "level": 84, - "moves": ["explosion", "hiddenpowergrass", "hiddenpowerice", "substitute", "thunderbolt", "thunderwave", "toxic"] - }, - "exeggutor": { - "level": 82, - "moves": ["explosion", "gigadrain", "hiddenpowerfire", "hiddenpowerice", "leechseed", "psychic", "sleeppowder", "solarbeam", "sunnyday"] - }, - "marowak": { - "level": 82, - "moves": ["bonemerang", "doubleedge", "earthquake", "rockslide", "swordsdance"] - }, - "hitmonlee": { - "level": 85, - "moves": ["bulkup", "earthquake", "hiddenpowerghost", "highjumpkick", "machpunch", "rockslide", "substitute"] - }, - "hitmonchan": { - "level": 87, - "moves": ["bulkup", "earthquake", "hiddenpowerghost", "machpunch", "rapidspin", "skyuppercut", "toxic"] - }, - "lickitung": { - "level": 91, - "moves": ["counter", "healbell", "protect", "return", "seismictoss", "toxic", "wish"] - }, - "weezing": { - "level": 82, - "moves": ["explosion", "fireblast", "haze", "painsplit", "sludgebomb", "toxic", "willowisp"] - }, - "rhydon": { - "level": 84, - "moves": ["doubleedge", "earthquake", "megahorn", "rockslide", "substitute", "swordsdance"] - }, - "tangela": { - "level": 92, - "moves": ["hiddenpowergrass", "leechseed", "morningsun", "sleeppowder", "stunspore"] - }, - "kangaskhan": { - "level": 79, - "moves": ["earthquake", "fakeout", "focuspunch", "rest", "return", "shadowball", "substitute", "toxic"] - }, - "seaking": { - "level": 90, - "moves": ["hiddenpowergrass", "hydropump", "icebeam", "megahorn", "raindance"] - }, - "starmie": { - "level": 76, - "moves": ["hydropump", "icebeam", "psychic", "recover", "surf", "thunderbolt"] - }, - "mrmime": { - "level": 84, - "moves": ["barrier", "batonpass", "calmmind", "encore", "firepunch", "hypnosis", "psychic", "substitute", "thunderbolt"] - }, - "scyther": { - "level": 81, - "moves": ["aerialace", "batonpass", "hiddenpowerground", "hiddenpowerrock", "quickattack", "silverwind", "swordsdance"] - }, - "jynx": { - "level": 81, - "moves": ["calmmind", "hiddenpowerfire", "icebeam", "lovelykiss", "psychic", "substitute"] - }, - "electabuzz": { - "level": 83, - "moves": ["crosschop", "firepunch", "focuspunch", "hiddenpowergrass", "icepunch", "substitute", "thunderbolt"] - }, - "magmar": { - "level": 84, - "moves": ["crosschop", "fireblast", "flamethrower", "hiddenpowergrass", "psychic", "substitute", "thunderpunch"] - }, - "pinsir": { - "level": 82, - "moves": ["earthquake", "hiddenpowerbug", "return", "rockslide", "swordsdance"] - }, - "tauros": { - "level": 77, - "moves": ["doubleedge", "earthquake", "hiddenpowerghost", "hiddenpowerrock", "return"] - }, - "gyarados": { - "level": 74, - "moves": ["doubleedge", "dragondance", "earthquake", "hiddenpowerflying", "hydropump"] - }, - "lapras": { - "level": 80, - "moves": ["healbell", "icebeam", "rest", "sleeptalk", "surf", "thunderbolt", "toxic"] - }, - "ditto": { - "level": 100, - "moves": ["transform"] - }, - "vaporeon": { - "level": 80, - "moves": ["icebeam", "protect", "surf", "toxic", "wish"] - }, - "jolteon": { - "level": 79, - "moves": ["batonpass", "hiddenpowerice", "substitute", "thunderbolt", "toxic", "wish"] - }, - "flareon": { - "level": 88, - "moves": ["doubleedge", "fireblast", "hiddenpowergrass", "protect", "shadowball", "toxic", "wish"] - }, - "omastar": { - "level": 84, - "moves": ["hiddenpowergrass", "hydropump", "icebeam", "raindance", "spikes", "surf"] - }, - "kabutops": { - "level": 84, - "moves": ["brickbreak", "doubleedge", "hiddenpowerground", "rockslide", "surf", "swordsdance"] - }, - "aerodactyl": { - "level": 76, - "moves": ["doubleedge", "earthquake", "hiddenpowerflying", "rockslide", "substitute"] - }, - "snorlax": { - "level": 73, - "moves": ["bodyslam", "curse", "earthquake", "rest", "return", "selfdestruct", "shadowball", "sleeptalk"] - }, - "articuno": { - "level": 81, - "moves": ["healbell", "hiddenpowerfire", "icebeam", "protect", "rest", "roar", "sleeptalk", "toxic"] - }, - "zapdos": { - "level": 76, - "moves": ["agility", "batonpass", "hiddenpowerice", "substitute", "thunderbolt", "thunderwave", "toxic"] - }, - "moltres": { - "level": 79, - "moves": ["fireblast", "flamethrower", "hiddenpowergrass", "morningsun", "substitute", "toxic", "willowisp"] - }, - "dragonite": { - "level": 78, - "moves": ["doubleedge", "dragondance", "earthquake", "flamethrower", "healbell", "hiddenpowerflying", "icebeam", "substitute"] - }, - "mewtwo": { - "level": 66, - "moves": ["calmmind", "flamethrower", "icebeam", "psychic", "recover", "substitute", "thunderbolt"] - }, - "mew": { - "level": 73, - "moves": ["calmmind", "explosion", "flamethrower", "icebeam", "psychic", "softboiled", "thunderbolt", "thunderwave", "transform"] - }, - "meganium": { - "level": 84, - "moves": ["bodyslam", "hiddenpowergrass", "leechseed", "synthesis", "toxic"] - }, - "typhlosion": { - "level": 79, - "moves": ["fireblast", "flamethrower", "focuspunch", "hiddenpowergrass", "hiddenpowerice", "substitute", "thunderpunch"] - }, - "feraligatr": { - "level": 83, - "moves": ["earthquake", "hiddenpowerflying", "hydropump", "rockslide", "swordsdance"] - }, - "furret": { - "level": 90, - "moves": ["doubleedge", "quickattack", "return", "reversal", "shadowball", "substitute", "trick"] - }, - "noctowl": { - "level": 92, - "moves": ["hiddenpowerfire", "hypnosis", "psychic", "reflect", "toxic", "whirlwind"] - }, - "ledian": { - "level": 98, - "moves": ["agility", "batonpass", "lightscreen", "reflect", "silverwind", "swordsdance", "toxic"] - }, - "ariados": { - "level": 94, - "moves": ["agility", "batonpass", "signalbeam", "sludgebomb", "spiderweb", "toxic"] - }, - "crobat": { - "level": 82, - "moves": ["aerialace", "haze", "hiddenpowerground", "shadowball", "sludgebomb", "taunt", "toxic"] - }, - "lanturn": { - "level": 82, - "moves": ["confuseray", "icebeam", "rest", "sleeptalk", "surf", "thunderbolt", "thunderwave", "toxic"] - }, - "togetic": { - "level": 92, - "moves": ["charm", "encore", "flamethrower", "seismictoss", "softboiled", "thunderwave", "toxic"] - }, - "xatu": { - "level": 84, - "moves": ["batonpass", "calmmind", "hiddenpowerfire", "psychic", "reflect", "wish"] - }, - "ampharos": { - "level": 82, - "moves": ["firepunch", "healbell", "hiddenpowergrass", "hiddenpowerice", "thunderbolt", "toxic"] - }, - "bellossom": { - "level": 88, - "moves": ["hiddenpowergrass", "leechseed", "moonlight", "sleeppowder", "sludgebomb", "stunspore"] - }, - "azumarill": { - "level": 86, - "moves": ["brickbreak", "encore", "hiddenpowerghost", "hydropump", "return"] - }, - "sudowoodo": { - "level": 91, - "moves": ["brickbreak", "doubleedge", "earthquake", "explosion", "rockslide", "toxic"] - }, - "politoed": { - "level": 84, - "moves": ["hiddenpowergrass", "hypnosis", "icebeam", "rest", "surf", "toxic"] - }, - "jumpluff": { - "level": 85, - "moves": ["encore", "hiddenpowerflying", "leechseed", "sleeppowder", "substitute", "toxic"] - }, - "aipom": { - "level": 91, - "moves": ["batonpass", "doubleedge", "focuspunch", "shadowball", "substitute", "thunderwave"] - }, - "sunflora": { - "level": 94, - "moves": ["hiddenpowerfire", "leechseed", "razorleaf", "synthesis", "toxic"] - }, - "yanma": { - "level": 90, - "moves": ["hiddenpowerflying", "hypnosis", "reversal", "shadowball", "substitute"] - }, - "quagsire": { - "level": 85, - "moves": ["counter", "curse", "earthquake", "hiddenpowerrock", "icebeam", "rest", "surf", "toxic"] - }, - "espeon": { - "level": 78, - "moves": ["batonpass", "calmmind", "hiddenpowerfire", "morningsun", "psychic", "reflect"] - }, - "umbreon": { - "level": 85, - "moves": ["batonpass", "hiddenpowerdark", "protect", "toxic", "wish"] - }, - "murkrow": { - "level": 90, - "moves": ["doubleedge", "drillpeck", "hiddenpowerfighting", "hiddenpowerground", "shadowball", "substitute"] - }, - "slowking": { - "level": 84, - "moves": ["calmmind", "flamethrower", "icebeam", "psychic", "rest", "sleeptalk", "surf", "thunderwave"] - }, - "misdreavus": { - "level": 85, - "moves": ["calmmind", "hiddenpowerice", "meanlook", "perishsong", "protect", "substitute", "thunderbolt", "toxic"] - }, - "unown": { - "level": 100, - "moves": ["hiddenpowerpsychic"] - }, - "wobbuffet": { - "level": 81, - "moves": ["counter", "destinybond", "encore", "mirrorcoat"] - }, - "girafarig": { - "level": 85, - "moves": ["agility", "batonpass", "calmmind", "psychic", "substitute", "thunderbolt", "thunderwave", "wish"] - }, - "forretress": { - "level": 81, - "moves": ["earthquake", "explosion", "hiddenpowerbug", "rapidspin", "spikes", "toxic"] - }, - "dunsparce": { - "level": 88, - "moves": ["bodyslam", "curse", "headbutt", "rest", "rockslide", "shadowball", "thunderwave"] - }, - "gligar": { - "level": 84, - "moves": ["earthquake", "hiddenpowerflying", "irontail", "quickattack", "rockslide", "substitute", "swordsdance"] - }, - "steelix": { - "level": 83, - "moves": ["doubleedge", "earthquake", "explosion", "hiddenpowerrock", "irontail", "rest", "roar", "toxic"] - }, - "granbull": { - "level": 83, - "moves": ["bulkup", "earthquake", "healbell", "overheat", "rest", "return", "shadowball", "thunderwave"] - }, - "qwilfish": { - "level": 85, - "moves": ["destinybond", "hydropump", "selfdestruct", "shadowball", "sludgebomb", "spikes", "swordsdance"] - }, - "scizor": { - "level": 82, - "moves": ["agility", "batonpass", "hiddenpowerground", "hiddenpowerrock", "morningsun", "silverwind", "steelwing", "swordsdance"] - }, - "shuckle": { - "level": 97, - "moves": ["encore", "rest", "toxic", "wrap"] - }, - "heracross": { - "level": 80, - "moves": ["brickbreak", "focuspunch", "megahorn", "rest", "rockslide", "sleeptalk", "substitute", "swordsdance"] - }, - "sneasel": { - "level": 87, - "moves": ["brickbreak", "doubleedge", "hiddenpowerflying", "shadowball", "substitute", "swordsdance"] - }, - "ursaring": { - "level": 81, - "moves": ["earthquake", "focuspunch", "hiddenpowerghost", "return", "swordsdance"] - }, - "magcargo": { - "level": 94, - "moves": ["fireblast", "hiddenpowergrass", "rest", "sleeptalk", "toxic", "yawn"] - }, - "piloswine": { - "level": 88, - "moves": ["doubleedge", "earthquake", "icebeam", "protect", "rockslide", "toxic"] - }, - "corsola": { - "level": 95, - "moves": ["calmmind", "icebeam", "recover", "surf", "toxic"] - }, - "octillery": { - "level": 87, - "moves": ["fireblast", "hiddenpowergrass", "icebeam", "rockblast", "surf", "thunderwave"] - }, - "delibird": { - "level": 95, - "moves": ["aerialace", "focuspunch", "hiddenpowerground", "icebeam", "quickattack"] - }, - "mantine": { - "level": 85, - "moves": ["haze", "hiddenpowergrass", "icebeam", "raindance", "rest", "sleeptalk", "surf", "toxic"] - }, - "skarmory": { - "level": 80, - "moves": ["drillpeck", "hiddenpowerground", "protect", "rest", "sleeptalk", "spikes", "toxic", "whirlwind"] - }, - "houndoom": { - "level": 81, - "moves": ["crunch", "fireblast", "flamethrower", "hiddenpowergrass", "pursuit", "willowisp"] - }, - "kingdra": { - "level": 82, - "moves": ["hiddenpowergrass", "hydropump", "icebeam", "raindance", "substitute", "surf"] - }, - "donphan": { - "level": 83, - "moves": ["earthquake", "rapidspin", "rest", "rockslide", "sleeptalk", "toxic"] - }, - "porygon2": { - "level": 81, - "moves": ["icebeam", "recover", "return", "thunderbolt", "thunderwave", "toxic"] - }, - "stantler": { - "level": 84, - "moves": ["earthquake", "hypnosis", "return", "shadowball", "thunderbolt"] - }, - "smeargle": { - "level": 87, - "moves": ["encore", "explosion", "spikes", "spore"] - }, - "hitmontop": { - "level": 85, - "moves": ["bulkup", "earthquake", "hiddenpowerghost", "highjumpkick", "machpunch", "rockslide", "toxic"] - }, - "miltank": { - "level": 78, - "moves": ["bodyslam", "curse", "earthquake", "healbell", "milkdrink", "toxic"] - }, - "blissey": { - "level": 78, - "moves": ["aromatherapy", "calmmind", "icebeam", "seismictoss", "softboiled", "thunderbolt", "thunderwave", "toxic"] - }, - "raikou": { - "level": 74, - "moves": ["calmmind", "crunch", "hiddenpowergrass", "hiddenpowerice", "rest", "sleeptalk", "substitute", "thunderbolt"] - }, - "entei": { - "level": 80, - "moves": ["bodyslam", "calmmind", "fireblast", "flamethrower", "hiddenpowergrass", "hiddenpowerice", "solarbeam", "substitute", "sunnyday"] - }, - "suicune": { - "level": 76, - "moves": ["calmmind", "icebeam", "rest", "sleeptalk", "substitute", "surf", "toxic"] - }, - "tyranitar": { - "level": 75, - "moves": ["dragondance", "earthquake", "fireblast", "focuspunch", "hiddenpowerbug", "icebeam", "pursuit", "rockslide", "substitute"] - }, - "lugia": { - "level": 70, - "moves": ["aeroblast", "calmmind", "earthquake", "icebeam", "recover", "substitute", "thunderbolt", "toxic"] - }, - "hooh": { - "level": 71, - "moves": ["calmmind", "earthquake", "recover", "sacredfire", "substitute", "thunderbolt", "toxic"] - }, - "celebi": { - "level": 75, - "moves": ["batonpass", "calmmind", "healbell", "hiddenpowergrass", "leechseed", "psychic", "recover"] - }, - "sceptile": { - "level": 82, - "moves": ["focuspunch", "hiddenpowerice", "leafblade", "leechseed", "substitute", "thunderpunch"] - }, - "blaziken": { - "level": 82, - "moves": ["endure", "fireblast", "hiddenpowerice", "reversal", "rockslide", "skyuppercut", "swordsdance", "thunderpunch"] - }, - "swampert": { - "level": 79, - "moves": ["earthquake", "hydropump", "icebeam", "protect", "rest", "rockslide", "sleeptalk", "surf", "toxic"] - }, - "mightyena": { - "level": 90, - "moves": ["crunch", "doubleedge", "healbell", "hiddenpowerfighting", "protect", "shadowball", "toxic"] - }, - "linoone": { - "level": 85, - "moves": ["bellydrum", "extremespeed", "flail", "hiddenpowerground", "shadowball", "substitute"] - }, - "beautifly": { - "level": 100, - "moves": ["hiddenpowerbug", "hiddenpowerflying", "morningsun", "stunspore", "substitute", "toxic"] - }, - "dustox": { - "level": 94, - "moves": ["hiddenpowerground", "moonlight", "sludgebomb", "toxic", "whirlwind"] - }, - "ludicolo": { - "level": 83, - "moves": ["hiddenpowergrass", "icebeam", "leechseed", "raindance", "substitute", "surf"] - }, - "shiftry": { - "level": 87, - "moves": ["brickbreak", "explosion", "shadowball", "swordsdance"] - }, - "swellow": { - "level": 81, - "moves": ["aerialace", "doubleedge", "hiddenpowerfighting", "hiddenpowerground", "quickattack", "return"] - }, - "pelipper": { - "level": 88, - "moves": ["icebeam", "protect", "rest", "sleeptalk", "surf", "toxic"] - }, - "gardevoir": { - "level": 79, - "moves": ["calmmind", "firepunch", "hypnosis", "psychic", "substitute", "thunderbolt", "willowisp"] - }, - "masquerain": { - "level": 93, - "moves": ["hydropump", "icebeam", "stunspore", "substitute", "toxic"] - }, - "breloom": { - "level": 84, - "moves": ["focuspunch", "hiddenpowerghost", "hiddenpowerrock", "leechseed", "machpunch", "skyuppercut", "spore", "substitute", "swordsdance"] - }, - "vigoroth": { - "level": 86, - "moves": ["brickbreak", "bulkup", "earthquake", "return", "shadowball", "slackoff"] - }, - "slaking": { - "level": 80, - "moves": ["doubleedge", "earthquake", "focuspunch", "return", "shadowball"] - }, - "ninjask": { - "level": 84, - "moves": ["aerialace", "batonpass", "protect", "silverwind", "substitute", "swordsdance"] - }, - "shedinja": { - "level": 94, - "moves": ["agility", "batonpass", "hiddenpowerground", "shadowball", "silverwind", "toxic"] - }, - "exploud": { - "level": 84, - "moves": ["earthquake", "flamethrower", "icebeam", "overheat", "return", "shadowball", "substitute"] - }, - "hariyama": { - "level": 83, - "moves": ["bulkup", "crosschop", "fakeout", "hiddenpowerghost", "rest", "rockslide", "sleeptalk"] - }, - "nosepass": { - "level": 96, - "moves": ["earthquake", "explosion", "rockslide", "thunderwave", "toxic"] - }, - "delcatty": { - "level": 93, - "moves": ["batonpass", "doubleedge", "healbell", "thunderwave", "wish"] - }, - "sableye": { - "level": 90, - "moves": ["knockoff", "recover", "seismictoss", "shadowball", "toxic"] - }, - "mawile": { - "level": 94, - "moves": ["batonpass", "brickbreak", "focuspunch", "hiddenpowersteel", "rockslide", "substitute", "swordsdance", "toxic"] - }, - "aggron": { - "level": 84, - "moves": ["doubleedge", "earthquake", "focuspunch", "irontail", "rockslide", "substitute", "thunderwave", "toxic"] - }, - "medicham": { - "level": 83, - "moves": ["brickbreak", "bulkup", "recover", "rockslide", "shadowball", "substitute"] - }, - "manectric": { - "level": 82, - "moves": ["crunch", "hiddenpowergrass", "hiddenpowerice", "substitute", "thunderbolt", "thunderwave"] - }, - "plusle": { - "level": 88, - "moves": ["agility", "batonpass", "encore", "hiddenpowergrass", "substitute", "thunderbolt", "toxic"] - }, - "minun": { - "level": 89, - "moves": ["batonpass", "encore", "hiddenpowerice", "lightscreen", "substitute", "thunderbolt", "wish"] - }, - "volbeat": { - "level": 93, - "moves": ["batonpass", "icepunch", "tailglow", "thunderbolt"] - }, - "illumise": { - "level": 94, - "moves": ["batonpass", "encore", "icepunch", "substitute", "thunderwave", "wish"] - }, - "roselia": { - "level": 93, - "moves": ["aromatherapy", "gigadrain", "hiddenpowerfire", "spikes", "stunspore", "synthesis"] - }, - "swalot": { - "level": 89, - "moves": ["encore", "explosion", "hiddenpowerground", "icebeam", "sludgebomb", "toxic", "yawn"] - }, - "sharpedo": { - "level": 85, - "moves": ["crunch", "earthquake", "endure", "hiddenpowerflying", "hydropump", "icebeam", "return"] - }, - "wailord": { - "level": 87, - "moves": ["hiddenpowergrass", "icebeam", "rest", "selfdestruct", "sleeptalk", "surf", "toxic"] - }, - "camerupt": { - "level": 85, - "moves": ["earthquake", "explosion", "fireblast", "rest", "rockslide", "sleeptalk", "toxic"] - }, - "torkoal": { - "level": 90, - "moves": ["explosion", "fireblast", "flamethrower", "hiddenpowergrass", "rest", "toxic", "yawn"] - }, - "grumpig": { - "level": 84, - "moves": ["calmmind", "firepunch", "icywind", "psychic", "substitute", "taunt"] - }, - "spinda": { - "level": 95, - "moves": ["bodyslam", "encore", "focuspunch", "shadowball", "substitute", "teeterdance", "toxic"] - }, - "flygon": { - "level": 79, - "moves": ["dragonclaw", "earthquake", "fireblast", "hiddenpowerbug", "rockslide", "substitute", "toxic"] - }, - "cacturne": { - "level": 92, - "moves": ["focuspunch", "hiddenpowerdark", "leechseed", "needlearm", "spikes", "substitute", "thunderpunch"] - }, - "altaria": { - "level": 85, - "moves": ["dragonclaw", "dragondance", "earthquake", "fireblast", "flamethrower", "haze", "hiddenpowerflying", "rest", "toxic"] - }, - "zangoose": { - "level": 80, - "moves": ["brickbreak", "quickattack", "return", "shadowball", "swordsdance"] - }, - "seviper": { - "level": 88, - "moves": ["crunch", "earthquake", "flamethrower", "hiddenpowergrass", "sludgebomb"] - }, - "lunatone": { - "level": 84, - "moves": ["batonpass", "calmmind", "explosion", "hypnosis", "icebeam", "psychic"] - }, - "solrock": { - "level": 85, - "moves": ["earthquake", "explosion", "overheat", "reflect", "rockslide", "shadowball"] - }, - "whiscash": { - "level": 86, - "moves": ["earthquake", "hiddenpowerbug", "icebeam", "rest", "rockslide", "sleeptalk", "spark", "surf", "toxic"] - }, - "crawdaunt": { - "level": 88, - "moves": ["brickbreak", "crunch", "doubleedge", "hiddenpowerghost", "icebeam", "surf"] - }, - "claydol": { - "level": 81, - "moves": ["earthquake", "explosion", "icebeam", "psychic", "rapidspin", "toxic"] - }, - "cradily": { - "level": 84, - "moves": ["barrier", "earthquake", "hiddenpowergrass", "mirrorcoat", "recover", "rockslide", "toxic"] - }, - "armaldo": { - "level": 82, - "moves": ["doubleedge", "earthquake", "hiddenpowerbug", "rockslide", "swordsdance"] - }, - "milotic": { - "level": 78, - "moves": ["icebeam", "mirrorcoat", "recover", "surf", "toxic"] - }, - "castform": { - "level": 90, - "moves": ["flamethrower", "icebeam", "return", "substitute", "thunderbolt", "thunderwave"] - }, - "kecleon": { - "level": 91, - "moves": ["brickbreak", "return", "shadowball", "thunderwave", "trick"] - }, - "banette": { - "level": 88, - "moves": ["destinybond", "endure", "hiddenpowerfighting", "knockoff", "shadowball", "willowisp"] - }, - "dusclops": { - "level": 86, - "moves": ["focuspunch", "icebeam", "painsplit", "rest", "shadowball", "sleeptalk", "substitute", "willowisp"] - }, - "tropius": { - "level": 93, - "moves": ["hiddenpowerfire", "solarbeam", "sunnyday", "synthesis"] - }, - "chimecho": { - "level": 89, - "moves": ["calmmind", "healbell", "hiddenpowerfire", "lightscreen", "psychic", "reflect", "toxic", "yawn"] - }, - "absol": { - "level": 88, - "moves": ["batonpass", "hiddenpowerfighting", "quickattack", "shadowball", "swordsdance"] - }, - "glalie": { - "level": 84, - "moves": ["earthquake", "explosion", "icebeam", "spikes", "toxic"] - }, - "walrein": { - "level": 81, - "moves": ["encore", "hiddenpowergrass", "icebeam", "rest", "sleeptalk", "surf", "toxic"] - }, - "huntail": { - "level": 88, - "moves": ["doubleedge", "hiddenpowergrass", "hydropump", "icebeam", "raindance", "surf"] - }, - "gorebyss": { - "level": 85, - "moves": ["hiddenpowerelectric", "hiddenpowergrass", "hydropump", "icebeam", "raindance", "surf"] - }, - "relicanth": { - "level": 88, - "moves": ["doubleedge", "earthquake", "hiddenpowerflying", "rest", "rockslide", "sleeptalk", "toxic"] - }, - "luvdisc": { - "level": 99, - "moves": ["icebeam", "protect", "substitute", "surf", "sweetkiss", "toxic"] - }, - "salamence": { - "level": 73, - "moves": ["brickbreak", "dragondance", "earthquake", "fireblast", "hiddenpowerflying", "rockslide"] - }, - "metagross": { - "level": 75, - "moves": ["agility", "earthquake", "explosion", "meteormash", "psychic", "rockslide"] - }, - "regirock": { - "level": 82, - "moves": ["curse", "earthquake", "explosion", "rest", "rockslide", "superpower", "thunderwave"] - }, - "regice": { - "level": 79, - "moves": ["explosion", "icebeam", "rest", "sleeptalk", "thunderbolt", "thunderwave", "toxic"] - }, - "registeel": { - "level": 79, - "moves": ["rest", "seismictoss", "sleeptalk", "toxic"] - }, - "latias": { - "level": 67, - "moves": ["calmmind", "dragonclaw", "hiddenpowerfire", "psychic", "recover"] - }, - "latios": { - "level": 66, - "moves": ["calmmind", "dragonclaw", "hiddenpowerfire", "psychic", "recover"] - }, - "kyogre": { - "level": 67, - "moves": ["calmmind", "icebeam", "rest", "sleeptalk", "surf", "thunder"] - }, - "groudon": { - "level": 70, - "moves": ["earthquake", "hiddenpowerbug", "overheat", "rockslide", "substitute", "swordsdance", "thunderwave"] - }, - "rayquaza": { - "level": 72, - "moves": ["dragondance", "earthquake", "extremespeed", "hiddenpowerflying", "rockslide"] - }, - "jirachi": { - "level": 74, - "moves": ["bodyslam", "calmmind", "firepunch", "icepunch", "protect", "psychic", "substitute", "thunderbolt", "wish"] - }, - "deoxys": { - "level": 74, - "moves": ["extremespeed", "firepunch", "icebeam", "psychoboost", "shadowball", "superpower"] - }, - "deoxysattack": { - "level": 73, - "moves": ["extremespeed", "firepunch", "psychoboost", "shadowball", "superpower"] - }, - "deoxysdefense": { - "level": 75, - "moves": ["recover", "seismictoss", "spikes", "taunt", "toxic"] - }, - "deoxysspeed": { - "level": 76, - "moves": ["calmmind", "icebeam", "psychic", "recover", "spikes", "taunt", "toxic"] - } -} diff --git a/data/mods/gen3/random-teams.ts b/data/mods/gen3/random-teams.ts deleted file mode 100644 index 7ea16f280283..000000000000 --- a/data/mods/gen3/random-teams.ts +++ /dev/null @@ -1,733 +0,0 @@ -import RandomGen4Teams from '../gen4/random-teams'; -import {Utils} from '../../../lib'; -import {PRNG, PRNGSeed} from '../../../sim/prng'; -import type {MoveCounter, OldRandomBattleSpecies} from '../gen8/random-teams'; - -// Moves that shouldn't be the only STAB moves: -const NO_STAB = [ - 'bounce', 'eruption', 'explosion', 'fakeout', 'icywind', 'machpunch', - 'pursuit', 'quickattack', 'reversal', 'selfdestruct', 'waterspout', -]; - -export class RandomGen3Teams extends RandomGen4Teams { - battleHasDitto: boolean; - battleHasWobbuffet: boolean; - - randomData: {[species: string]: OldRandomBattleSpecies} = require('./random-data.json'); - - constructor(format: string | Format, prng: PRNG | PRNGSeed | null) { - super(format, prng); - this.noStab = NO_STAB; - this.battleHasDitto = false; - this.battleHasWobbuffet = false; - this.moveEnforcementCheckers = { - Bug: (movePool, moves, abilities, types, counter, species) => ( - movePool.includes('megahorn') || (!species.types[1] && movePool.includes('hiddenpowerbug')) - ), - Electric: (movePool, moves, abilities, types, counter) => !counter.get('Electric'), - Fighting: (movePool, moves, abilities, types, counter) => !counter.get('Fighting'), - Fire: (movePool, moves, abilities, types, counter) => !counter.get('Fire'), - Ground: (movePool, moves, abilities, types, counter) => !counter.get('Ground'), - Normal: (movePool, moves, abilities, types, counter, species) => { - if (species.id === 'blissey' && movePool.includes('softboiled')) return true; - return !counter.get('Normal') && counter.setupType === 'Physical'; - }, - Psychic: (movePool, moves, abilities, types, counter, species) => ( - types.has('Psychic') && - (movePool.includes('psychic') || movePool.includes('psychoboost')) && - species.baseStats.spa >= 100 - ), - Rock: (movePool, moves, abilities, types, counter, species) => !counter.get('Rock') && species.baseStats.atk >= 100, - Water: (movePool, moves, abilities, types, counter, species) => ( - !counter.get('Water') && counter.setupType !== 'Physical' && species.baseStats.spa >= 60 - ), - // If the Pokémon has this move, the other move will be forced - protect: movePool => movePool.includes('wish'), - sunnyday: movePool => movePool.includes('solarbeam'), - sleeptalk: movePool => movePool.includes('rest'), - }; - } - - shouldCullMove( - move: Move, - types: Set, - moves: Set, - abilities: Set, - counter: MoveCounter, - movePool: string[], - teamDetails: RandomTeamsTypes.TeamDetails, - species: Species, - ): {cull: boolean, isSetup?: boolean} { - const restTalk = moves.has('rest') && moves.has('sleeptalk'); - - switch (move.id) { - // Set up once and only if we have the moves for it - case 'bulkup': case 'curse': case 'dragondance': case 'swordsdance': - return { - cull: ( - (counter.setupType !== 'Physical' || counter.get('physicalsetup') > 1) || - (counter.get('Physical') + counter.get('physicalpool') < 2 && !moves.has('batonpass') && !restTalk) - ), - isSetup: true, - }; - case 'calmmind': - return { - cull: ( - counter.setupType !== 'Special' || - (counter.get('Special') + counter.get('specialpool') < 2 && !moves.has('batonpass') && - !moves.has('refresh') && !restTalk) || - !counter.get('Special') - ), - isSetup: true, - }; - case 'agility': - return { - cull: (counter.damagingMoves.size < 2 && !moves.has('batonpass')) || moves.has('substitute') || restTalk, - isSetup: !counter.setupType, - }; - - // Not very useful without their supporting moves - case 'amnesia': case 'sleeptalk': - if (moves.has('roar') || moves.has('whirlwind')) return {cull: true}; - if (!moves.has('rest')) return {cull: true}; - if (movePool.length > 1) { - const rest = movePool.indexOf('rest'); - if (rest >= 0) this.fastPop(movePool, rest); - } - break; - case 'barrier': - return {cull: !moves.has('calmmind') && !moves.has('batonpass') && !moves.has('mirrorcoat')}; - case 'batonpass': - return {cull: ( - (!counter.setupType && !counter.get('speedsetup')) && - ['meanlook', 'spiderweb', 'substitute', 'wish'].every(m => !moves.has(m)) - )}; - case 'endeavor': case 'flail': case 'reversal': - return {cull: restTalk || (!moves.has('endure') && !moves.has('substitute'))}; - case 'endure': - return {cull: movePool.includes('destinybond')}; - case 'extremespeed': case 'raindance': case 'sunnyday': - return {cull: counter.damagingMoves.size < 2 || moves.has('rest')}; - case 'focuspunch': - return {cull: ( - (counter.damagingMoves.size < 2 || moves.has('rest') || counter.setupType && !moves.has('spore')) || - (!moves.has('substitute') && (counter.get('Physical') < 4 || moves.has('fakeout'))) || - // Breloom likes to have coverage - (species.id === 'breloom' && (moves.has('machpunch') || moves.has('skyuppercut'))) - )}; - case 'moonlight': - return {cull: moves.has('wish') || moves.has('protect')}; - case 'perishsong': - return {cull: !moves.has('meanlook') && !moves.has('spiderweb')}; - case 'protect': - return {cull: !abilities.has('Speed Boost') && ['perishsong', 'toxic', 'wish'].every(m => !moves.has(m))}; - case 'refresh': - return {cull: !counter.setupType}; - case 'rest': - return {cull: ( - movePool.includes('sleeptalk') || - (!moves.has('sleeptalk') && (!!counter.get('recovery') || movePool.includes('curse'))) - )}; - case 'solarbeam': - if (movePool.length > 1) { - const sunnyday = movePool.indexOf('sunnyday'); - if (sunnyday >= 0) this.fastPop(movePool, sunnyday); - } - return {cull: !moves.has('sunnyday')}; - - // Bad after setup - case 'aromatherapy': case 'healbell': - return {cull: moves.has('rest') || !!teamDetails.statusCure}; - case 'confuseray': - return {cull: !!counter.setupType || restTalk}; - case 'counter': case 'mirrorcoat': - return {cull: !!counter.setupType || ['rest', 'substitute', 'toxic'].some(m => moves.has(m))}; - case 'destinybond': - return {cull: !!counter.setupType || moves.has('explosion') || moves.has('selfdestruct')}; - case 'doubleedge': case 'facade': case 'fakeout': case 'waterspout': - return {cull: ( - (!types.has(move.type) && counter.get('Status') >= 1) || - (move.id === 'doubleedge' && moves.has('return')) - )}; - case 'encore': case 'painsplit': case 'recover': case 'yawn': - return {cull: restTalk}; - case 'explosion': case 'machpunch': case 'selfdestruct': - // Snorlax doesn't want to roll selfdestruct as its only STAB move - const snorlaxCase = species.id === 'snorlax' && !moves.has('return') && !moves.has('bodyslam'); - return {cull: snorlaxCase || moves.has('rest') || moves.has('substitute') || !!counter.get('recovery')}; - case 'haze': - return {cull: !!counter.setupType || moves.has('raindance') || restTalk}; - case 'icywind': case 'pursuit': case 'superpower': case 'transform': - return {cull: !!counter.setupType || moves.has('rest')}; - case 'leechseed': - return {cull: !!counter.setupType || moves.has('explosion')}; - case 'stunspore': - return {cull: moves.has('sunnyday') || moves.has('toxic')}; - case 'lightscreen': - return {cull: !!counter.setupType || !!counter.get('speedsetup')}; - case 'meanlook': case 'spiderweb': - return {cull: !!counter.get('speedsetup') || (!moves.has('batonpass') && !moves.has('perishsong'))}; - case 'morningsun': - return {cull: counter.get('speedsetup') >= 1}; - case 'quickattack': - return {cull: ( - !!counter.get('speedsetup') || - moves.has('substitute') || - (!types.has('Normal') && !!counter.get('Status')) - )}; - case 'rapidspin': - return {cull: !!counter.setupType || moves.has('rest') || !!teamDetails.rapidSpin}; - case 'reflect': - return {cull: !!counter.setupType || !!counter.get('speedsetup')}; - case 'roar': case 'whirlwind': - return {cull: moves.has('sleeptalk') || moves.has('rest')}; - case 'seismictoss': - return {cull: !!counter.setupType || moves.has('thunderbolt')}; - case 'spikes': - return {cull: !!counter.setupType || moves.has('substitute') || restTalk || !!teamDetails.spikes}; - case 'substitute': - const restOrDD = moves.has('rest') || (moves.has('dragondance') && !moves.has('bellydrum')); - // This cull condition otherwise causes mono-solarbeam Entei - return {cull: restOrDD || (species.id !== 'entei' && !moves.has('batonpass') && movePool.includes('calmmind'))}; - case 'thunderwave': - return {cull: !!counter.setupType || moves.has('bodyslam') || - moves.has('substitute') && movePool.includes('toxic') || restTalk}; - case 'toxic': - return {cull: ( - !!counter.setupType || - !!counter.get('speedsetup') || - ['endure', 'focuspunch', 'raindance', 'yawn', 'hypnosis'].some(m => moves.has(m)) - )}; - case 'trick': - return {cull: counter.get('Status') > 1}; - case 'willowisp': - return {cull: !!counter.setupType || moves.has('hypnosis') || moves.has('toxic')}; - - // Bit redundant to have both - case 'bodyslam': - return {cull: moves.has('return') && !!counter.get('Status')}; - case 'headbutt': - return {cull: !moves.has('bodyslam') && !moves.has('thunderwave')}; - case 'return': - return {cull: ( - moves.has('endure') || - (moves.has('substitute') && moves.has('flail')) || - (moves.has('bodyslam') && !counter.get('Status')) - )}; - case 'fireblast': - return {cull: moves.has('flamethrower') && !!counter.get('Status')}; - case 'flamethrower': - return {cull: moves.has('fireblast') && !counter.get('Status')}; - case 'overheat': - return {cull: moves.has('flamethrower') || moves.has('substitute')}; - case 'hydropump': - return {cull: moves.has('surf') && !!counter.get('Status')}; - case 'surf': - return {cull: moves.has('hydropump') && !counter.get('Status')}; - case 'gigadrain': - return {cull: moves.has('morningsun') || moves.has('toxic')}; - case 'hiddenpower': - const stabCondition = types.has(move.type) && counter.get(move.type) > 1 && ( - (moves.has('substitute') && !counter.setupType && !moves.has('toxic')) || - // This otherwise causes STABless meganium - (species.id !== 'meganium' && moves.has('toxic') && !moves.has('substitute')) || - restTalk - ); - return {cull: stabCondition || (move.type === 'Grass' && moves.has('sunnyday') && moves.has('solarbeam'))}; - case 'brickbreak': case 'crosschop': case 'skyuppercut': - return {cull: moves.has('substitute') && (moves.has('focuspunch') || movePool.includes('focuspunch'))}; - case 'earthquake': - return {cull: moves.has('bonemerang')}; - } - - return {cull: false}; - } - - - getItem( - ability: string, - types: string[], - moves: Set, - counter: MoveCounter, - teamDetails: RandomTeamsTypes.TeamDetails, - species: Species - ) { - // First, the high-priority items - if (species.name === 'Ditto') return this.sample(['Metal Powder', 'Quick Claw']); - if (species.name === 'Farfetch\u2019d') return 'Stick'; - if (species.name === 'Latias' || species.name === 'Latios') return 'Soul Dew'; - if (species.name === 'Marowak') return 'Thick Club'; - if (species.name === 'Pikachu') return 'Light Ball'; - if (species.name === 'Shedinja') return 'Lum Berry'; - if (species.name === 'Unown') return 'Twisted Spoon'; - - if (moves.has('trick')) return 'Choice Band'; - if (moves.has('rest') && !moves.has('sleeptalk') && !['Early Bird', 'Natural Cure', 'Shed Skin'].includes(ability)) { - return 'Chesto Berry'; - } - - // Medium priority items - if (moves.has('dragondance') && ability !== 'Natural Cure') return 'Lum Berry'; - if ((moves.has('bellydrum') && counter.get('Physical') - counter.get('priority') > 1) || ( - ((moves.has('swordsdance') && counter.get('Status') < 2) || (moves.has('bulkup') && moves.has('substitute'))) && - !counter.get('priority') && - species.baseStats.spe >= 60 && species.baseStats.spe <= 95 - )) { - return 'Salac Berry'; - } - if (moves.has('endure') || ( - moves.has('substitute') && - ['bellydrum', 'endeavor', 'flail', 'reversal'].some(m => moves.has(m)) - )) { - return ( - species.baseStats.spe <= 100 && ability !== 'Speed Boost' && !counter.get('speedsetup') && !moves.has('focuspunch') - ) ? 'Salac Berry' : 'Liechi Berry'; - } - if (moves.has('substitute') && counter.get('Physical') >= 3 && species.baseStats.spe >= 120) return 'Liechi Berry'; - if ((moves.has('substitute') || moves.has('raindance')) && counter.get('Special') >= 3) return 'Petaya Berry'; - if (counter.get('Physical') >= 4 && !moves.has('fakeout')) return 'Choice Band'; - if (counter.get('Physical') >= 3 && !moves.has('rapidspin') && ( - ['fireblast', 'icebeam', 'overheat'].some(m => moves.has(m)) || - Array.from(moves).some(m => { - const moveData = this.dex.moves.get(m); - return moveData.category === 'Special' && types.includes(moveData.type); - }) - )) { - return 'Choice Band'; - } - if (moves.has('psychoboost')) return 'White Herb'; - - // Default to Leftovers - return 'Leftovers'; - } - - shouldCullAbility( - ability: string, - types: Set, - moves: Set, - abilities: Set, - counter: MoveCounter, - movePool: string[], - teamDetails: RandomTeamsTypes.TeamDetails, - species: Species, - ) { - switch (ability) { - case 'Chlorophyll': - return !moves.has('sunnyday') && !teamDetails['sun']; - case 'Compound Eyes': - return !counter.get('inaccurate'); - case 'Hustle': - return counter.get('Physical') < 2; - case 'Overgrow': - return !counter.get('Grass'); - case 'Rain Dish': case 'Swift Swim': - return !moves.has('raindance') && !teamDetails['rain']; - case 'Rock Head': - return !counter.get('recoil'); - case 'Sand Veil': - return !teamDetails['sand']; - case 'Soundproof': - // Electrode prefers Static - return true; - case 'Swarm': - return !counter.get('Bug'); - case 'Torrent': - return !counter.get('Water'); - case 'Water Absorb': - return abilities.has('Swift Swim'); - } - - return false; - } - - - getAbility( - types: Set, - moves: Set, - abilities: Set, - counter: MoveCounter, - movePool: string[], - teamDetails: RandomTeamsTypes.TeamDetails, - species: Species, - ): string { - const abilityData = Array.from(abilities).map(a => this.dex.abilities.get(a)); - Utils.sortBy(abilityData, abil => -abil.rating); - - if (abilityData.length <= 1) return abilityData[0].name; - - // Hard-code abilities here - if (species.id === 'snorlax') return 'Immunity'; - if (species.id === 'blissey') return 'Natural Cure'; - - let abilityAllowed: Ability[] = []; - // Obtain a list of abilities that are allowed (not culled) - for (const ability of abilityData) { - if (ability.rating >= 1 && !this.shouldCullAbility( - ability.name, types, moves, abilities, counter, movePool, teamDetails, species - )) { - abilityAllowed.push(ability); - } - } - - // If all abilities are rejected, re-allow all abilities - if (!abilityAllowed.length) { - for (const ability of abilityData) { - if (ability.rating > 0) abilityAllowed.push(ability); - } - if (!abilityAllowed.length) abilityAllowed = abilityData; - } - - if (abilityAllowed.length === 1) return abilityAllowed[0].name; - // Sort abilities by rating with an element of randomness - if (abilityAllowed[0].rating <= abilityAllowed[1].rating) { - if (this.randomChance(1, 2)) [abilityAllowed[0], abilityAllowed[1]] = [abilityAllowed[1], abilityAllowed[0]]; - } else if (abilityAllowed[0].rating - 0.5 <= abilityAllowed[1].rating) { - if (this.randomChance(1, 3)) [abilityAllowed[0], abilityAllowed[1]] = [abilityAllowed[1], abilityAllowed[0]]; - } - - // After sorting, choose the first ability - return abilityAllowed[0].name; - } - - randomSet(species: string | Species, teamDetails: RandomTeamsTypes.TeamDetails = {}): RandomTeamsTypes.RandomSet { - species = this.dex.species.get(species); - let forme = species.name; - - const data = this.randomData[species.id]; - - if (typeof species.battleOnly === 'string') forme = species.battleOnly; - - const movePool: string[] = [...(data.moves || this.dex.species.getMovePool(species.id))]; - const rejectedPool = []; - const moves = new Set(); - let ability = ''; - 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}; - let availableHP = 0; - for (const setMoveid of movePool) { - if (setMoveid.startsWith('hiddenpower')) availableHP++; - } - - const types = new Set(species.types); - - const abilities = new Set(Object.values(species.abilities)); - - let counter: MoveCounter; - // We use a special variable to track Hidden Power - // so that we can check for all Hidden Powers at once - let hasHiddenPower = false; - - do { - // Choose next 4 moves from learnset/viable moves and add them to moves list: - while (moves.size < this.maxMoveCount && movePool.length) { - const moveid = this.sampleNoReplace(movePool); - if (moveid.startsWith('hiddenpower')) { - availableHP--; - if (hasHiddenPower) continue; - hasHiddenPower = true; - } - moves.add(moveid); - } - - while (moves.size < this.maxMoveCount && rejectedPool.length) { - const moveid = this.sampleNoReplace(rejectedPool); - if (moveid.startsWith('hiddenpower')) { - if (hasHiddenPower) continue; - hasHiddenPower = true; - } - moves.add(moveid); - } - - counter = this.queryMoves(moves, species.types, abilities, movePool); - - // Iterate through the moves again, this time to cull them: - for (const moveid of moves) { - const move = this.dex.moves.get(moveid); - - let {cull, isSetup} = this.shouldCullMove(move, types, moves, abilities, counter, movePool, teamDetails, species); - - // This move doesn't satisfy our setup requirements: - if ( - (counter.setupType === 'Physical' && move.category === 'Special' && !types.has(move.type) && move.type !== 'Fire') || - (counter.setupType === 'Special' && move.category === 'Physical' && moveid !== 'superpower') - ) { - cull = true; - } - const moveIsRejectable = ( - !move.weather && - (move.category !== 'Status' || !move.flags.heal) && - (counter.setupType || !move.stallingMove) && - // These moves cannot be rejected in favor of a forced move - !['batonpass', 'sleeptalk', 'solarbeam', 'substitute', 'sunnyday'].includes(moveid) && - (move.category === 'Status' || !types.has(move.type) || (move.basePower && move.basePower < 40 && !move.multihit)) - ); - // Pokemon should usually have at least one STAB move - const requiresStab = ( - !counter.get('stab') && - !moves.has('seismictoss') && !moves.has('nightshade') && - species.id !== 'umbreon' && - // If a Flying-type has Psychic, it doesn't need STAB - !(moves.has('psychic') && types.has('Flying')) && - !(types.has('Ghost') && species.baseStats.spa > species.baseStats.atk) && - !( - // With Calm Mind, Lugia and pure Normal-types are fine without STAB - counter.setupType === 'Special' && ( - species.id === 'lugia' || - (types.has('Normal') && species.types.length < 2) - ) - ) && - !( - // With Swords Dance, Dark-types and pure Water-types are fine without STAB - counter.setupType === 'Physical' && - ((types.has('Water') && species.types.length < 2) || types.has('Dark')) - ) && - counter.get('physicalpool') + counter.get('specialpool') > 0 - ); - - const runEnforcementChecker = (checkerName: string) => { - if (!this.moveEnforcementCheckers[checkerName]) return false; - return this.moveEnforcementCheckers[checkerName]( - movePool, moves, abilities, types, counter, species as Species, teamDetails - ); - }; - - if (!cull && !isSetup && moveIsRejectable) { - // There may be more important moves that this Pokemon needs - if ( - requiresStab || - (counter.setupType && counter.get(counter.setupType) < 2 && !moves.has('refresh')) || - (moves.has('substitute') && movePool.includes('morningsun')) || - ['meteormash', 'spore', 'recover'].some(m => movePool.includes(m)) - ) { - cull = true; - } else { - // Pokemon should have moves that benefit their typing and their other moves - for (const type of types) { - if (runEnforcementChecker(type)) { - cull = true; - } - } - for (const m of moves) { - if (runEnforcementChecker(m)) cull = true; - } - } - } - - // Sleep Talk shouldn't be selected without Rest - if (moveid === 'rest' && cull) { - const sleeptalk = movePool.indexOf('sleeptalk'); - if (sleeptalk >= 0) { - if (movePool.length < 2) { - cull = false; - } else { - this.fastPop(movePool, sleeptalk); - } - } - } - - // Remove rejected moves from the move list - const moveIsHP = moveid.startsWith('hiddenpower'); - if ( - cull && - (movePool.length - availableHP || availableHP && (moveIsHP || !hasHiddenPower)) - ) { - if (move.category !== 'Status' && !move.damage && (!moveIsHP || !availableHP)) { - rejectedPool.push(moveid); - } - if (moveIsHP) hasHiddenPower = false; - moves.delete(moveid); - break; - } - if (cull && rejectedPool.length) { - if (moveIsHP) hasHiddenPower = false; - moves.delete(moveid); - break; - } - } - } while (moves.size < this.maxMoveCount && (movePool.length || rejectedPool.length)); - - if (hasHiddenPower) { - let hpType; - for (const move of moves) { - if (move.startsWith('hiddenpower')) hpType = move.substr(11); - } - if (!hpType) throw new Error(`hasHiddenPower is true, but no Hidden Power move was found.`); - const HPivs = this.dex.types.get(hpType).HPivs; - let iv: StatID; - for (iv in HPivs) { - ivs[iv] = HPivs[iv]!; - } - } - - ability = this.getAbility(types, moves, abilities, counter, movePool, teamDetails, species); - - const item = this.getItem(ability, species.types, moves, counter, teamDetails, species); - const level = this.adjustLevel || data.level || (species.nfe ? 90 : 80); - - // Prepare optimal HP - let hp = Math.floor(Math.floor(2 * species.baseStats.hp + ivs.hp + Math.floor(evs.hp / 4) + 100) * level / 100 + 10); - if (moves.has('substitute') && ['endeavor', 'flail', 'reversal'].some(m => moves.has(m))) { - // Endeavor/Flail/Reversal users should be able to use four Substitutes - if (hp % 4 === 0) evs.hp -= 4; - } else if (moves.has('substitute') && (item === 'Salac Berry' || item === 'Petaya Berry' || item === 'Liechi Berry')) { - // Other pinch berry holders should have berries activate after three Substitutes - while (hp % 4 > 0) { - evs.hp -= 4; - hp = Math.floor(Math.floor(2 * species.baseStats.hp + ivs.hp + Math.floor(evs.hp / 4) + 100) * level / 100 + 10); - } - } - - // Minimize confusion damage - if (!counter.get('Physical') && !moves.has('transform')) { - evs.atk = 0; - ivs.atk = hasHiddenPower ? ivs.atk - 28 : 0; - } - - return { - name: species.baseSpecies, - species: forme, - gender: species.gender, - moves: Array.from(moves), - ability: ability, - evs: evs, - ivs: ivs, - item: item, - level, - shiny: this.randomChance(1, 1024), - }; - } - - randomTeam() { - this.enforceNoDirectCustomBanlistChanges(); - - const seed = this.prng.seed; - const ruleTable = this.dex.formats.getRuleTable(this.format); - const pokemon: RandomTeamsTypes.RandomSet[] = []; - - // For Monotype - const isMonotype = !!this.forceMonotype || ruleTable.has('sametypeclause'); - const typePool = this.dex.types.names(); - const type = this.forceMonotype || this.sample(typePool); - - const baseFormes: {[k: string]: number} = {}; - const tierCount: {[k: string]: number} = {}; - const typeCount: {[k: string]: number} = {}; - const typeComboCount: {[k: string]: number} = {}; - const typeWeaknesses: {[k: string]: number} = {}; - const teamDetails: RandomTeamsTypes.TeamDetails = {}; - - const [pokemonPool, baseSpeciesPool] = this.getPokemonPool(type, pokemon, isMonotype, Object.keys(this.randomData)); - while (baseSpeciesPool.length && pokemon.length < this.maxTeamSize) { - const baseSpecies = this.sampleNoReplace(baseSpeciesPool); - const currentSpeciesPool: Species[] = []; - for (const poke of pokemonPool) { - const species = this.dex.species.get(poke); - if (species.baseSpecies === baseSpecies) currentSpeciesPool.push(species); - } - const species = this.sample(currentSpeciesPool); - if (!species.exists) continue; - - // Limit to one of each species (Species Clause) - if (baseFormes[species.baseSpecies]) continue; - - // Limit to one Wobbuffet per battle (not just per team) - if (species.name === 'Wobbuffet' && this.battleHasWobbuffet) continue; - // Limit to one Ditto per battle in Gen 2 - if (this.dex.gen < 3 && species.name === 'Ditto' && this.battleHasDitto) continue; - - const tier = species.tier; - const types = species.types; - const typeCombo = types.slice().sort().join(); - - if (!isMonotype && !this.forceMonotype) { - // Dynamically scale limits for different team sizes. The default and minimum value is 1. - const limitFactor = Math.round(this.maxTeamSize / 6) || 1; - - // Limit two Pokemon per tier - if (tierCount[tier] >= 2 * limitFactor) continue; - - // Limit two of any type - let skip = false; - for (const typeName of types) { - if (typeCount[typeName] >= 2 * limitFactor) { - skip = true; - break; - } - } - if (skip) continue; - - // Limit three 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 (skip) continue; - - // Limit one of any type combination - if (!this.forceMonotype && typeComboCount[typeCombo] >= 1 * limitFactor) continue; - } - - // Okay, the set passes, add it to our team - const set = this.randomSet(species, teamDetails); - pokemon.push(set); - - // Now that our Pokemon has passed all checks, we can increment our counters - baseFormes[species.baseSpecies] = 1; - - // Increment tier counter - if (tierCount[tier]) { - tierCount[tier]++; - } else { - tierCount[tier] = 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]++; - } - } - - // Update team details - if (set.ability === 'Drizzle' || set.moves.includes('raindance')) teamDetails.rain = 1; - if (set.ability === 'Sand Stream') teamDetails.sand = 1; - if (set.moves.includes('spikes')) teamDetails.spikes = 1; - if (set.moves.includes('rapidspin')) teamDetails.rapidSpin = 1; - if (set.moves.includes('aromatherapy') || set.moves.includes('healbell')) teamDetails.statusCure = 1; - - // In Gen 3, Shadow Tag users can prevent each other from switching out, possibly causing and endless battle or at least causing a long stall war - // To prevent this, we prevent more than one Wobbuffet in a single battle. - if (set.ability === 'Shadow Tag') this.battleHasWobbuffet = true; - if (species.id === 'ditto') this.battleHasDitto = true; - } - - if (pokemon.length < this.maxTeamSize && !isMonotype && !this.forceMonotype && pokemon.length < 12) { - throw new Error(`Could not build a random team for ${this.format} (seed=${seed})`); - } - - return pokemon; - } -} - -export default RandomGen3Teams; diff --git a/data/mods/gen3/rulesets.ts b/data/mods/gen3/rulesets.ts index 8169d853c299..1f10237c4bc2 100644 --- a/data/mods/gen3/rulesets.ts +++ b/data/mods/gen3/rulesets.ts @@ -1,4 +1,4 @@ -export const Rulesets: {[k: string]: ModdedFormatData} = { +export const Rulesets: import('../../../sim/dex-formats').ModdedFormatDataTable = { standard: { effectType: 'ValidatorRule', name: 'Standard', diff --git a/data/mods/gen3/scripts.ts b/data/mods/gen3/scripts.ts index e0b41fd6e8e0..dd16669857ba 100644 --- a/data/mods/gen3/scripts.ts +++ b/data/mods/gen3/scripts.ts @@ -70,12 +70,17 @@ export const Scripts: ModdedBattleScriptsData = { baseDamage = Math.floor(this.battle.runEvent('ModifyDamagePhase2', pokemon, target, move, baseDamage)); // STAB - if (move.forceSTAB || type !== '???' && pokemon.hasType(type)) { - // 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.) - baseDamage = this.battle.modify(baseDamage, move.stab || 1.5); + // 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; + if (move.forceSTAB || pokemon.hasType(type)) { + stab = 1.5; + } + stab = this.battle.runEvent('ModifySTAB', pokemon, target, move, stab); + baseDamage = this.battle.modify(baseDamage, stab); } // types let typeMod = target.runEffectiveness(move); @@ -110,7 +115,9 @@ export const Scripts: ModdedBattleScriptsData = { return Math.floor(baseDamage); }, - useMoveInner(moveOrMoveName, pokemon, target, sourceEffect, zMove) { + useMoveInner(moveOrMoveName, pokemon, options) { + let sourceEffect = options?.sourceEffect; + let target = options?.target; if (!sourceEffect && this.battle.effect.id) sourceEffect = this.battle.effect; if (sourceEffect && sourceEffect.id === 'instruct') sourceEffect = null; diff --git a/data/mods/gen4/abilities.ts b/data/mods/gen4/abilities.ts index f72c7dab9d3e..b4f436b5f3c0 100644 --- a/data/mods/gen4/abilities.ts +++ b/data/mods/gen4/abilities.ts @@ -1,8 +1,10 @@ -export const Abilities: {[k: string]: ModdedAbilityData} = { +export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTable = { airlock: { inherit: true, onSwitchIn() {}, - onStart() {}, + onStart(pokemon) { + pokemon.abilityState.ending = false; + }, }, angerpoint: { inherit: true, @@ -35,7 +37,9 @@ export const Abilities: {[k: string]: ModdedAbilityData} = { cloudnine: { inherit: true, onSwitchIn() {}, - onStart() {}, + onStart(pokemon) { + pokemon.abilityState.ending = false; + }, }, colorchange: { inherit: true, @@ -68,6 +72,23 @@ export const Abilities: {[k: string]: ModdedAbilityData} = { } }, }, + download: { + inherit: true, + onStart(pokemon) { + let totaldef = 0; + let totalspd = 0; + for (const target of pokemon.foes()) { + if (target.volatiles.substitute) continue; + totaldef += target.getStat('def', false, true); + totalspd += target.getStat('spd', false, true); + } + if (totaldef && totaldef >= totalspd) { + this.boost({spa: 1}); + } else if (totalspd) { + this.boost({atk: 1}); + } + }, + }, effectspore: { inherit: true, onDamagingHit(damage, target, source, move) { @@ -134,6 +155,11 @@ export const Abilities: {[k: string]: ModdedAbilityData} = { return this.chainModify(1.5); } }, + flags: {breakable: 1}, + }, + forecast: { + inherit: true, + flags: {notrace: 1}, }, forewarn: { inherit: true, @@ -163,10 +189,9 @@ export const Abilities: {[k: string]: ModdedAbilityData} = { frisk: { inherit: true, onStart(pokemon) { - for (const target of pokemon.foes()) { - if (target.item && !target.itemState.knockedOff) { - this.add('-item', target, target.getItem().name, '[from] ability: Frisk', '[of] ' + pokemon, '[identify]'); - } + const target = pokemon.side.randomFoe(); + if (target?.item && !target.itemState.knockedOff) { + this.add('-item', pokemon, target.getItem().name, '[from] ability: Frisk', '[of] ' + pokemon); } }, }, @@ -385,7 +410,7 @@ export const Abilities: {[k: string]: ModdedAbilityData} = { boosts[key]! *= 2; } }, - isBreakable: true, + flags: {breakable: 1}, name: "Simple", rating: 4, num: 86, @@ -481,7 +506,7 @@ export const Abilities: {[k: string]: ModdedAbilityData} = { return this.chainModify(0.5); } }, - isBreakable: true, + flags: {breakable: 1}, name: "Thick Fat", rating: 3.5, num: 47, @@ -513,6 +538,7 @@ export const Abilities: {[k: string]: ModdedAbilityData} = { this.add('-ability', pokemon, ability, '[from] ability: Trace', '[of] ' + target); } }, + flags: {notrace: 1}, }, unburden: { inherit: true, @@ -532,7 +558,7 @@ export const Abilities: {[k: string]: ModdedAbilityData} = { inherit: true, onTryHit(target, source, move) { if (move.id === 'firefang') { - this.hint("In Gen 4, Fire Fang is always able to hit through Wonder Guard."); + this.hint("In Gen 4, Fire Fang is always able to hit through Wonder Guard.", true, target.side); return; } if (target === source || move.category === 'Status' || move.type === '???' || move.id === 'struggle') return; diff --git a/data/mods/gen4/conditions.ts b/data/mods/gen4/conditions.ts index a7e0c62c594b..576737c7e4c6 100644 --- a/data/mods/gen4/conditions.ts +++ b/data/mods/gen4/conditions.ts @@ -1,4 +1,4 @@ -export const Conditions: {[k: string]: ModdedConditionData} = { +export const Conditions: import('../../../sim/dex-conditions').ModdedConditionDataTable = { brn: { inherit: true, onResidualOrder: 10, diff --git a/data/mods/gen4/formats-data.ts b/data/mods/gen4/formats-data.ts index 93566ced1607..4065adac334a 100644 --- a/data/mods/gen4/formats-data.ts +++ b/data/mods/gen4/formats-data.ts @@ -1,4 +1,4 @@ -export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { +export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormatsDataTable = { bulbasaur: { tier: "LC", }, diff --git a/data/mods/gen4/items.ts b/data/mods/gen4/items.ts index fd9357387c03..3dd96be8c70e 100644 --- a/data/mods/gen4/items.ts +++ b/data/mods/gen4/items.ts @@ -1,4 +1,4 @@ -export const Items: {[k: string]: ModdedItemData} = { +export const Items: import('../../../sim/dex-items').ModdedItemDataTable = { adamantorb: { inherit: true, onBasePower(basePower, user, target, move) { diff --git a/data/mods/gen4/moves.ts b/data/mods/gen4/moves.ts index 66566f6efd6c..67a3c33a6196 100644 --- a/data/mods/gen4/moves.ts +++ b/data/mods/gen4/moves.ts @@ -1,7 +1,7 @@ -export const Moves: {[k: string]: ModdedMoveData} = { +export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = { acupressure: { inherit: true, - flags: {snatch: 1}, + flags: {snatch: 1, metronome: 1}, onHit(target) { if (target.volatiles['substitute']) { return false; @@ -35,7 +35,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { }, aquaring: { inherit: true, - flags: {}, + flags: {metronome: 1}, condition: { onStart(pokemon) { this.add('-start', pokemon, 'Aqua Ring'); @@ -180,7 +180,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { }, conversion: { inherit: true, - flags: {}, + flags: {metronome: 1}, onHit(target) { const possibleTypes = target.moveSlots.map(moveSlot => { const move = this.dex.moves.get(moveSlot.id); @@ -220,7 +220,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { }, curse: { inherit: true, - flags: {}, + flags: {metronome: 1}, onModifyMove(move, source, target) { if (!source.hasType('Ghost')) { delete move.volatileStatus; @@ -246,7 +246,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { }, defog: { inherit: true, - flags: {protect: 1, mirror: 1, bypasssub: 1}, + flags: {protect: 1, mirror: 1, bypasssub: 1, metronome: 1}, }, detect: { inherit: true, @@ -274,7 +274,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { disable: { inherit: true, accuracy: 80, - flags: {protect: 1, mirror: 1, bypasssub: 1}, + flags: {protect: 1, mirror: 1, bypasssub: 1, metronome: 1}, volatileStatus: 'disable', condition: { durationCallback() { @@ -332,7 +332,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { name: "Doom Desire", basePower: 120, category: "Special", - flags: {futuremove: 1}, + flags: {metronome: 1, futuremove: 1}, willCrit: false, type: '???', } as unknown as ActiveMove; @@ -348,7 +348,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { basePower: 0, damage: damage, category: "Special", - flags: {futuremove: 1}, + flags: {metronome: 1, futuremove: 1}, effectType: 'Move', type: '???', }, @@ -374,7 +374,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { }, embargo: { inherit: true, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, onTryHit(pokemon) { if (pokemon.ability === 'multitype' || pokemon.item === 'griseousorb') { return false; @@ -395,7 +395,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { }, encore: { inherit: true, - flags: {protect: 1, mirror: 1, bypasssub: 1, failencore: 1}, + flags: {protect: 1, mirror: 1, bypasssub: 1, metronome: 1, failencore: 1}, volatileStatus: 'encore', condition: { durationCallback() { @@ -476,7 +476,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { }, flail: { inherit: true, - basePowerCallback(pokemon, target) { + basePowerCallback(pokemon) { const ratio = Math.max(Math.floor(pokemon.hp * 64 / pokemon.maxhp), 1); let bp; if (ratio < 2) { @@ -517,7 +517,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { }, foresight: { inherit: true, - flags: {protect: 1, mirror: 1, bypasssub: 1}, + flags: {protect: 1, mirror: 1, bypasssub: 1, metronome: 1}, }, furycutter: { inherit: true, @@ -546,7 +546,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { name: "Future Sight", basePower: 80, category: "Special", - flags: {futuremove: 1}, + flags: {metronome: 1, futuremove: 1}, willCrit: false, type: '???', } as unknown as ActiveMove; @@ -562,7 +562,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { basePower: 0, damage: damage, category: "Special", - flags: {futuremove: 1}, + flags: {metronome: 1, futuremove: 1}, effectType: 'Move', type: '???', }, @@ -674,7 +674,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { }, healblock: { inherit: true, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, condition: { duration: 5, durationCallback(target, source, effect) { @@ -715,7 +715,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { }, healingwish: { inherit: true, - flags: {heal: 1}, + flags: {heal: 1, metronome: 1}, onAfterMove(pokemon) { pokemon.switchFlag = true; }, @@ -752,7 +752,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { }, imprison: { inherit: true, - flags: {bypasssub: 1}, + flags: {bypasssub: 1, metronome: 1}, onTryHit(pokemon) { for (const target of pokemon.foes()) { for (const move of pokemon.moves) { @@ -802,7 +802,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { const item = target.getItem(); if (this.runEvent('TakeItem', target, source, move, item)) { target.itemState.knockedOff = true; - this.add('-enditem', target, item.name, '[from] move: Knock Off'); + this.add('-enditem', target, item.name, '[from] move: Knock Off', '[of] ' + source); this.hint("In Gens 3-4, Knock Off only makes the target's item unusable; it cannot obtain a new item.", true); } }, @@ -875,7 +875,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { }, luckychant: { inherit: true, - flags: {}, + flags: {metronome: 1}, condition: { duration: 5, onSideStart(side) { @@ -890,7 +890,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { }, lunardance: { inherit: true, - flags: {heal: 1}, + flags: {heal: 1, metronome: 1}, onAfterMove(pokemon) { pokemon.switchFlag = true; }, @@ -931,7 +931,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { target.removeVolatile('magiccoat'); const newMove = this.dex.getActiveMove(move.id); newMove.hasBounced = true; - this.actions.useMove(newMove, target, source); + this.actions.useMove(newMove, target, {target: source}); return null; }, }, @@ -942,7 +942,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { }, magnetrise: { inherit: true, - flags: {gravity: 1}, + flags: {gravity: 1, metronome: 1}, volatileStatus: 'magnetrise', condition: { duration: 5, @@ -971,19 +971,16 @@ export const Moves: {[k: string]: ModdedMoveData} = { }, metalburst: { inherit: true, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, }, metronome: { inherit: true, flags: {noassist: 1, failcopycat: 1, nosleeptalk: 1, failmimic: 1}, - noMetronome: [ - "Assist", "Chatter", "Copycat", "Counter", "Covet", "Destiny Bond", "Detect", "Endure", "Feint", "Focus Punch", "Follow Me", "Helping Hand", "Me First", "Metronome", "Mimic", "Mirror Coat", "Mirror Move", "Protect", "Sketch", "Sleep Talk", "Snatch", "Struggle", "Switcheroo", "Thief", "Trick", - ], }, mimic: { inherit: true, flags: { - protect: 1, bypasssub: 1, allyanim: 1, noassist: 1, failcopycat: 1, failencore: 1, failinstruct: 1, failmimic: 1, + protect: 1, allyanim: 1, noassist: 1, failcopycat: 1, failencore: 1, failinstruct: 1, failmimic: 1, }, onHit(target, source) { if (source.transformed || !target.lastMove || target.volatiles['substitute']) { @@ -1015,7 +1012,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { }, miracleeye: { inherit: true, - flags: {protect: 1, mirror: 1, bypasssub: 1}, + flags: {protect: 1, mirror: 1, bypasssub: 1, metronome: 1}, }, mirrormove: { inherit: true, @@ -1091,19 +1088,21 @@ export const Moves: {[k: string]: ModdedMoveData} = { mudsport: { inherit: true, condition: { - noCopy: true, onStart(pokemon) { this.add('-start', pokemon, 'move: Mud Sport'); }, - onBasePowerPriority: 3, + onAnyBasePowerPriority: 3, onAnyBasePower(basePower, user, target, move) { - if (move.type === 'Electric') return this.chainModify(0.5); + if (move.type === 'Electric') { + this.debug('Mud Sport weaken'); + return this.chainModify(0.5); + } }, }, }, naturepower: { inherit: true, - flags: {}, + flags: {metronome: 1}, onHit(pokemon) { this.actions.useMove('triattack', pokemon); }, @@ -1127,7 +1126,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { }, odorsleuth: { inherit: true, - flags: {protect: 1, mirror: 1, bypasssub: 1}, + flags: {protect: 1, mirror: 1, bypasssub: 1, metronome: 1}, }, outrage: { inherit: true, @@ -1178,7 +1177,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { }, powertrick: { inherit: true, - flags: {}, + flags: {metronome: 1}, }, protect: { inherit: true, @@ -1205,7 +1204,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { }, psychup: { inherit: true, - flags: {snatch: 1, bypasssub: 1}, + flags: {snatch: 1, bypasssub: 1, metronome: 1}, }, pursuit: { inherit: true, @@ -1257,7 +1256,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { }, recycle: { inherit: true, - flags: {}, + flags: {metronome: 1}, }, reflect: { inherit: true, @@ -1289,7 +1288,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { }, reversal: { inherit: true, - basePowerCallback(pokemon, target) { + basePowerCallback(pokemon) { const ratio = Math.max(Math.floor(pokemon.hp * 64 / pokemon.maxhp), 1); let bp; if (ratio < 2) { @@ -1311,7 +1310,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { }, roar: { inherit: true, - flags: {protect: 1, mirror: 1, sound: 1, bypasssub: 1}, + flags: {protect: 1, mirror: 1, sound: 1, bypasssub: 1, metronome: 1}, }, rockblast: { inherit: true, @@ -1321,8 +1320,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { inherit: true, onTryHit(target, source) { if (target.ability === source.ability || source.hasItem('griseousorb')) return false; - const bannedTargetAbilities = ['multitype', 'wonderguard']; - if (bannedTargetAbilities.includes(target.ability) || source.ability === 'multitype') { + if (target.getAbility().flags['failroleplay'] || source.ability === 'multitype') { return false; } }, @@ -1389,13 +1387,15 @@ export const Moves: {[k: string]: ModdedMoveData} = { }, sketch: { inherit: true, - flags: {bypasssub: 1, allyanim: 1, failencore: 1, noassist: 1, failcopycat: 1, failinstruct: 1, failmimic: 1}, + flags: { + bypasssub: 1, allyanim: 1, failencore: 1, noassist: 1, + failcopycat: 1, failinstruct: 1, failmimic: 1, nosketch: 1, + }, onHit(target, source) { - const disallowedMoves = ['chatter', 'sketch', 'struggle']; if (source.transformed || !target.lastMove || target.volatiles['substitute']) { return false; } - if (disallowedMoves.includes(target.lastMove.id) || source.moves.includes(target.lastMove.id)) { + if (target.lastMove.flags['nosketch'] || source.moves.includes(target.lastMove.id)) { return false; } const sketchIndex = source.moves.indexOf('sketch'); @@ -1455,22 +1455,27 @@ export const Moves: {[k: string]: ModdedMoveData} = { }, }, }, + snore: { + inherit: true, + flags: {protect: 1, mirror: 1, sound: 1, metronome: 1}, + }, spikes: { inherit: true, - flags: {mustpressure: 1}, + flags: {metronome: 1, mustpressure: 1}, }, spite: { inherit: true, - flags: {protect: 1, mirror: 1, bypasssub: 1}, + flags: {protect: 1, mirror: 1, bypasssub: 1, metronome: 1}, }, stealthrock: { inherit: true, - flags: {mustpressure: 1}, + flags: {metronome: 1, mustpressure: 1}, }, struggle: { inherit: true, flags: { - contact: 1, protect: 1, failencore: 1, failmefirst: 1, noassist: 1, failcopycat: 1, failinstruct: 1, failmimic: 1, + contact: 1, protect: 1, failencore: 1, failmefirst: 1, + noassist: 1, failcopycat: 1, failinstruct: 1, failmimic: 1, nosketch: 1, }, onModifyMove(move) { move.type = '???'; @@ -1594,7 +1599,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { }, taunt: { inherit: true, - flags: {protect: 1, mirror: 1, bypasssub: 1}, + flags: {protect: 1, mirror: 1, bypasssub: 1, metronome: 1}, condition: { durationCallback() { return this.random(3, 6); @@ -1631,7 +1636,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { }, torment: { inherit: true, - flags: {protect: 1, mirror: 1, bypasssub: 1}, + flags: {protect: 1, mirror: 1, bypasssub: 1, metronome: 1}, }, toxic: { inherit: true, @@ -1639,7 +1644,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { }, toxicspikes: { inherit: true, - flags: {mustpressure: 1}, + flags: {metronome: 1, mustpressure: 1}, condition: { // this is a side condition onSideStart(side) { @@ -1668,7 +1673,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { }, transform: { inherit: true, - flags: {bypasssub: 1, failencore: 1}, + flags: {bypasssub: 1, metronome: 1, failencore: 1}, }, trick: { inherit: true, @@ -1749,13 +1754,15 @@ export const Moves: {[k: string]: ModdedMoveData} = { watersport: { inherit: true, condition: { - noCopy: true, onStart(pokemon) { this.add('-start', pokemon, 'move: Water Sport'); }, - onBasePowerPriority: 3, + onAnyBasePowerPriority: 3, onAnyBasePower(basePower, user, target, move) { - if (move.type === 'Fire') return this.chainModify(0.5); + if (move.type === 'Fire') { + this.debug('Water Sport weaken'); + return this.chainModify(0.5); + } }, }, }, @@ -1766,11 +1773,11 @@ export const Moves: {[k: string]: ModdedMoveData} = { }, whirlwind: { inherit: true, - flags: {protect: 1, mirror: 1, bypasssub: 1}, + flags: {protect: 1, mirror: 1, bypasssub: 1, metronome: 1}, }, wish: { inherit: true, - flags: {heal: 1}, + flags: {heal: 1, metronome: 1}, slotCondition: 'Wish', condition: { duration: 2, diff --git a/data/mods/gen4/pokedex.ts b/data/mods/gen4/pokedex.ts index b2d37153ffa5..633ee04652b2 100644 --- a/data/mods/gen4/pokedex.ts +++ b/data/mods/gen4/pokedex.ts @@ -1,4 +1,4 @@ -export const Pokedex: {[k: string]: ModdedSpeciesData} = { +export const Pokedex: import('../../../sim/dex-species').ModdedSpeciesDataTable = { milotic: { inherit: true, evoType: 'levelExtra', diff --git a/data/mods/gen4/rulesets.ts b/data/mods/gen4/rulesets.ts index 4095e0628697..68bdc862268a 100644 --- a/data/mods/gen4/rulesets.ts +++ b/data/mods/gen4/rulesets.ts @@ -1,11 +1,11 @@ -export const Rulesets: {[k: string]: ModdedFormatData} = { +export const Rulesets: import('../../../sim/dex-formats').ModdedFormatDataTable = { standard: { inherit: true, ruleset: ['Obtainable', 'Sleep Clause Mod', 'Species Clause', 'Nickname Clause', 'OHKO Clause', 'Evasion Items Clause', 'Evasion Moves Clause', 'Endless Battle Clause', 'HP Percentage Mod', 'Cancel Mod'], }, flatrules: { inherit: true, - ruleset: ['Obtainable', 'Species Clause', 'Nickname Clause', 'Item Clause', 'Adjust Level Down = 50', 'Cancel Mod'], + ruleset: ['Obtainable', 'Species Clause', 'Nickname Clause', 'Item Clause = 1', 'Adjust Level Down = 50', 'Cancel Mod'], }, teampreview: { inherit: true, @@ -13,8 +13,9 @@ export const Rulesets: {[k: string]: ModdedFormatData} = { this.add('clearpoke'); for (const pokemon of this.getAllPokemon()) { const details = pokemon.details.replace(', shiny', '') - .replace(/(Arceus|Genesect|Greninja|Gourgeist|Pumpkaboo|Xerneas|Silvally|Urshifu|Dudunsparce)(-[a-zA-Z?-]+)?/g, '$1-*') - .replace(/(Zacian|Zamazenta)(?!-Crowned)/g, '$1-*'); // Hacked-in Crowned formes will be revealed + .replace(/(Arceus|Genesect|Gourgeist|Pumpkaboo|Xerneas|Silvally|Urshifu|Dudunsparce)(-[a-zA-Z?-]+)?/g, '$1-*') + .replace(/(Zacian|Zamazenta)(?!-Crowned)/g, '$1-*') // Hacked-in Crowned formes will be revealed + .replace(/(Greninja)(?!-Ash)/g, '$1-*'); // Hacked-in Greninja-Ash will be revealed this.add('poke', pokemon.side.id, details, pokemon.item ? 'item' : ''); } this.makeRequest('teampreview'); diff --git a/data/mods/gen4/scripts.ts b/data/mods/gen4/scripts.ts index 0e7bbd58e1bc..a9279586fb30 100644 --- a/data/mods/gen4/scripts.ts +++ b/data/mods/gen4/scripts.ts @@ -47,12 +47,17 @@ export const Scripts: ModdedBattleScriptsData = { baseDamage = this.battle.randomizer(baseDamage); // STAB - if (move.forceSTAB || type !== '???' && pokemon.hasType(type)) { - // 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.) - baseDamage = this.battle.modify(baseDamage, move.stab || 1.5); + // 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; + if (move.forceSTAB || pokemon.hasType(type)) { + stab = 1.5; + } + stab = this.battle.runEvent('ModifySTAB', pokemon, target, move, stab); + baseDamage = this.battle.modify(baseDamage, stab); } // types let typeMod = target.runEffectiveness(move); diff --git a/data/mods/gen4pt/formats-data.ts b/data/mods/gen4pt/formats-data.ts index b7409463658a..8fc4ca29bf34 100644 --- a/data/mods/gen4pt/formats-data.ts +++ b/data/mods/gen4pt/formats-data.ts @@ -1,4 +1,4 @@ -export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { +export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormatsDataTable = { pichuspikyeared: { isNonstandard: "Future", tier: "Illegal", diff --git a/data/mods/gen4pt/learnsets.ts b/data/mods/gen4pt/learnsets.ts index 99c945027f13..b0a69fbc204f 100644 --- a/data/mods/gen4pt/learnsets.ts +++ b/data/mods/gen4pt/learnsets.ts @@ -1,4 +1,4 @@ -export const Learnsets: {[k: string]: ModdedLearnsetData} = { +export const Learnsets: import('../../../sim/dex-species').ModdedLearnsetDataTable = { bulbasaur: { inherit: true, learnset: { @@ -17432,7 +17432,6 @@ export const Learnsets: {[k: string]: ModdedLearnsetData} = { raikou: { inherit: true, learnset: { - aurasphere: ["4S3"], bite: ["4L1", "3L1"], bodyslam: ["3T"], calmmind: ["4M", "4L78", "3M", "3L81"], @@ -17445,7 +17444,6 @@ export const Learnsets: {[k: string]: ModdedLearnsetData} = { doubleteam: ["4M", "3M"], endure: ["4M", "3T"], extrasensory: ["4L64"], - extremespeed: ["4S3"], facade: ["4M", "3M"], flash: ["4M", "3M"], frustration: ["4M", "3M"], @@ -17489,8 +17487,6 @@ export const Learnsets: {[k: string]: ModdedLearnsetData} = { thundershock: ["4L8", "3L11", "3S0"], thunderwave: ["4M", "3T"], toxic: ["4M", "3M"], - weatherball: ["4S3"], - zapcannon: ["4S3"], }, }, entei: { @@ -17499,7 +17495,6 @@ export const Learnsets: {[k: string]: ModdedLearnsetData} = { bite: ["4L1", "3L1"], bodyslam: ["3T"], calmmind: ["4M", "4L78", "3M", "3L81"], - crushclaw: ["4S3"], cut: ["4M", "3M"], dig: ["4M", "3M"], doubleedge: ["3T"], @@ -17508,19 +17503,16 @@ export const Learnsets: {[k: string]: ModdedLearnsetData} = { endure: ["4M", "3T"], eruption: ["4L85"], extrasensory: ["4L64"], - extremespeed: ["4S3"], facade: ["4M", "3M"], fireblast: ["4M", "4L71", "3M", "3L71"], firefang: ["4L50"], firespin: ["4L22", "4S2", "3L31", "3S0", "3S1"], flamethrower: ["4M", "4L36", "4S2", "3M", "3L51", "3S1"], - flareblitz: ["4S3"], flash: ["4M", "3M"], frustration: ["4M", "3M"], gigaimpact: ["4M"], heatwave: ["4T"], hiddenpower: ["4M", "3M"], - howl: ["4S3"], hyperbeam: ["4M", "3M"], ironhead: ["4T"], irontail: ["4M", "3M"], @@ -17559,8 +17551,6 @@ export const Learnsets: {[k: string]: ModdedLearnsetData} = { suicune: { inherit: true, learnset: { - airslash: ["4S3"], - aquaring: ["4S3"], aurorabeam: ["4L29", "4S2", "3L41", "3S0", "3S1"], avalanche: ["4M"], bite: ["4L1", "3L1"], @@ -17576,7 +17566,6 @@ export const Learnsets: {[k: string]: ModdedLearnsetData} = { doubleteam: ["4M", "3M"], endure: ["4M", "3T"], extrasensory: ["4L64"], - extremespeed: ["4S3"], facade: ["4M", "3M"], frustration: ["4M", "3M"], gigaimpact: ["4M"], @@ -17609,7 +17598,6 @@ export const Learnsets: {[k: string]: ModdedLearnsetData} = { sandstorm: ["4M", "3M"], secretpower: ["4M", "3M"], shadowball: ["4M"], - sheercold: ["4S3"], signalbeam: ["4T"], sleeptalk: ["4M", "3T"], snore: ["4T", "3T"], @@ -27216,13 +27204,13 @@ export const Learnsets: {[k: string]: ModdedLearnsetData} = { bodyslam: ["3T"], calmmind: ["4M", "3M"], chargebeam: ["4M"], - confusion: ["4L1", "4S11", "4S12", "3L1", "3S0", "3S1", "3S2", "3S3", "3S4", "3S5", "3S6", "3S7", "3S8", "3S9"], + confusion: ["4L1", "4S3", "4S4", "3L1", "3S0", "3S1"], cosmicpower: ["4L60", "3L45"], defensecurl: ["3T"], doomdesire: ["4L70", "3L50"], doubleedge: ["4L40", "3T", "3L35"], doubleteam: ["4M", "3M"], - dracometeor: ["4S12"], + dracometeor: ["4S4"], drainpunch: ["4M"], dreameater: ["4M", "3T"], dynamicpunch: ["3T"], @@ -27239,7 +27227,7 @@ export const Learnsets: {[k: string]: ModdedLearnsetData} = { grassknot: ["4M"], gravity: ["4L45"], healingwish: ["4L50"], - helpinghand: ["4T", "4L15", "3L15", "3S10"], + helpinghand: ["4T", "4L15", "3L15", "3S2"], hiddenpower: ["4M", "3M"], hyperbeam: ["4M", "3M"], icepunch: ["4T", "3T"], @@ -27254,13 +27242,13 @@ export const Learnsets: {[k: string]: ModdedLearnsetData} = { naturalgift: ["4M"], nightmare: ["3T"], protect: ["4M", "3M"], - psychic: ["4M", "4L20", "3M", "3L20", "3S10"], + psychic: ["4M", "4L20", "3M", "3L20", "3S2"], psychup: ["4M", "3T"], raindance: ["4M", "3M"], recycle: ["4M"], reflect: ["4M", "3M"], - refresh: ["4L25", "3L25", "3S10"], - rest: ["4M", "4L5", "4S11", "4S12", "3M", "3L5", "3S0", "3S1", "3S2", "3S3", "3S4", "3S5", "3S6", "3S7", "3S8", "3S9", "3S10"], + refresh: ["4L25", "3L25", "3S2"], + rest: ["4M", "4L5", "4S3", "4S4", "3M", "3L5", "3S0", "3S1", "3S2"], return: ["4M", "3M"], safeguard: ["4M", "3M"], sandstorm: ["4M", "3M"], @@ -27286,7 +27274,7 @@ export const Learnsets: {[k: string]: ModdedLearnsetData} = { uproar: ["4T"], uturn: ["4M"], waterpulse: ["4M", "3M"], - wish: ["4L1", "4S11", "4S12", "3L1", "3S0", "3S1", "3S2", "3S3", "3S4", "3S5", "3S6", "3S7", "3S8", "3S9"], + wish: ["4L1", "4S3", "4S4", "3L1", "3S0", "3S1"], zenheadbutt: ["4T", "4L35"], }, }, @@ -31694,7 +31682,7 @@ export const Learnsets: {[k: string]: ModdedLearnsetData} = { heatran: { inherit: true, learnset: { - ancientpower: ["4T", "4L1", "4S2"], + ancientpower: ["4T", "4L1"], attract: ["4M"], captivate: ["4M"], crunch: ["4L33", "4S1"], @@ -31702,10 +31690,9 @@ export const Learnsets: {[k: string]: ModdedLearnsetData} = { dig: ["4M"], doubleteam: ["4M"], dragonpulse: ["4M"], - earthpower: ["4T", "4L73", "4S2"], + earthpower: ["4T", "4L73"], earthquake: ["4M"], endure: ["4M"], - eruption: ["4S2"], explosion: ["4M"], facade: ["4M"], fireblast: ["4M"], @@ -31722,7 +31709,7 @@ export const Learnsets: {[k: string]: ModdedLearnsetData} = { ironhead: ["4T", "4L65", "4S0"], lavaplume: ["4L49", "4S0", "4S1"], leer: ["4L9"], - magmastorm: ["4L96", "4S2"], + magmastorm: ["4L96"], metalsound: ["4L25", "4S1"], mudslap: ["4T"], naturalgift: ["4M"], diff --git a/data/mods/gen5/abilities.ts b/data/mods/gen5/abilities.ts index ba9dd5d9268d..010a71d1affc 100644 --- a/data/mods/gen5/abilities.ts +++ b/data/mods/gen5/abilities.ts @@ -1,4 +1,4 @@ -export const Abilities: {[k: string]: ModdedAbilityData} = { +export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTable = { anticipation: { inherit: true, onStart(pokemon) { @@ -21,7 +21,7 @@ export const Abilities: {[k: string]: ModdedAbilityData} = { onStart(pokemon) { const target = pokemon.side.randomFoe(); if (target?.item) { - this.add('-item', target, target.getItem().name, '[from] ability: Frisk', '[of] ' + pokemon); + this.add('-item', pokemon, target.getItem().name, '[from] ability: Frisk', '[of] ' + pokemon); } }, }, @@ -52,6 +52,7 @@ export const Abilities: {[k: string]: ModdedAbilityData} = { overcoat: { inherit: true, onTryHit() {}, + flags: {}, rating: 0.5, }, sapsipper: { diff --git a/data/mods/gen5/conditions.ts b/data/mods/gen5/conditions.ts index 8c8758936e2f..5193df8eeca9 100644 --- a/data/mods/gen5/conditions.ts +++ b/data/mods/gen5/conditions.ts @@ -1,4 +1,4 @@ -export const Conditions: {[k: string]: ModdedConditionData} = { +export const Conditions: import('../../../sim/dex-conditions').ModdedConditionDataTable = { slp: { inherit: true, onSwitchIn(target) { diff --git a/data/mods/gen5/formats-data.ts b/data/mods/gen5/formats-data.ts index cf893e6e45ac..2354f267e290 100644 --- a/data/mods/gen5/formats-data.ts +++ b/data/mods/gen5/formats-data.ts @@ -1,4 +1,4 @@ -export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { +export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormatsDataTable = { bulbasaur: { tier: "LC", }, @@ -37,7 +37,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "NFE", }, butterfree: { - tier: "ZU", + tier: "PU", doublesTier: "DUU", }, weedle: { @@ -47,7 +47,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "NFE", }, beedrill: { - tier: "ZU", + tier: "PU", doublesTier: "DUU", }, pidgey: { @@ -57,28 +57,28 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "NFE", }, pidgeot: { - tier: "ZU", + tier: "PU", doublesTier: "DUU", }, rattata: { tier: "LC", }, raticate: { - tier: "ZU", + tier: "PU", doublesTier: "DUU", }, spearow: { tier: "LC", }, fearow: { - tier: "ZU", + tier: "PU", doublesTier: "DUU", }, ekans: { tier: "LC", }, arbok: { - tier: "ZU", + tier: "PU", doublesTier: "DUU", }, pichu: { @@ -88,7 +88,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "NFE", }, raichu: { - tier: "ZU", + tier: "PU", doublesTier: "DUU", }, sandshrew: { @@ -142,7 +142,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "NFE", }, wigglytuff: { - tier: "ZU", + tier: "PU", doublesTier: "DUU", }, zubat: { @@ -167,14 +167,14 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { doublesTier: "DUU", }, bellossom: { - tier: "ZU", + tier: "PU", doublesTier: "DUU", }, paras: { tier: "LC", }, parasect: { - tier: "ZU", + tier: "PU", doublesTier: "DUU", }, venonat: { @@ -195,7 +195,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "LC", }, persian: { - tier: "ZU", + tier: "PU", doublesTier: "DUU", }, psyduck: { @@ -248,8 +248,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "LC", }, machoke: { - tier: "ZUBL", - doublesTier: "NFE", + tier: "NFE", }, machamp: { tier: "UU", @@ -266,8 +265,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { doublesTier: "DUU", }, tentacool: { - tier: "PU", - doublesTier: "LC", + tier: "LC", }, tentacruel: { tier: "OU", @@ -313,7 +311,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { doublesTier: "DUU", }, farfetchd: { - tier: "ZU", + tier: "PU", doublesTier: "DUU", }, doduo: { @@ -327,21 +325,21 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "LC", }, dewgong: { - tier: "ZU", + tier: "PU", doublesTier: "DUU", }, grimer: { tier: "LC", }, muk: { - tier: "ZU", + tier: "PU", doublesTier: "DUU", }, shellder: { tier: "LC", }, cloyster: { - tier: "OU", + tier: "Uber", doublesTier: "DOU", }, gastly: { @@ -366,14 +364,14 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "LC", }, hypno: { - tier: "ZU", + tier: "PU", doublesTier: "DUU", }, krabby: { tier: "LC", }, kingler: { - tier: "ZU", + tier: "PU", doublesTier: "DUU", }, voltorb: { @@ -394,7 +392,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "LC", }, marowak: { - tier: "ZUBL", + tier: "PU", doublesTier: "DUU", }, tyrogue: { @@ -445,7 +443,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { doublesTier: "NFE", }, blissey: { - tier: "(OU)", + tier: "OU", doublesTier: "DUU", }, tangela: { @@ -474,7 +472,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "LC", }, seaking: { - tier: "ZU", + tier: "PU", doublesTier: "DUU", }, staryu: { @@ -488,7 +486,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "LC", }, mrmime: { - tier: "ZU", + tier: "PU", doublesTier: "DUU", }, scyther: { @@ -562,7 +560,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { doublesTier: "DOU", }, flareon: { - tier: "ZU", + tier: "PU", doublesTier: "DUU", }, espeon: { @@ -574,11 +572,11 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { doublesTier: "DUU", }, leafeon: { - tier: "ZU", + tier: "PU", doublesTier: "DUU", }, glaceon: { - tier: "ZU", + tier: "PU", doublesTier: "DUU", }, porygon: { @@ -593,8 +591,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { doublesTier: "DUU", }, omanyte: { - tier: "ZUBL", - doublesTier: "LC", + tier: "LC", }, omastar: { tier: "RU", @@ -619,7 +616,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { doublesTier: "DUU", }, articuno: { - tier: "ZUBL", + tier: "PU", doublesTier: "DUU", }, zapdos: { @@ -634,8 +631,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "LC", }, dragonair: { - tier: "ZUBL", - doublesTier: "NFE", + tier: "NFE", }, dragonite: { tier: "OU", @@ -656,7 +652,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "NFE", }, meganium: { - tier: "ZU", + tier: "PU", doublesTier: "DUU", }, cyndaquil: { @@ -683,28 +679,28 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "LC", }, furret: { - tier: "ZU", + tier: "PU", doublesTier: "DUU", }, hoothoot: { tier: "LC", }, noctowl: { - tier: "ZU", + tier: "PU", doublesTier: "DUU", }, ledyba: { tier: "LC", }, ledian: { - tier: "ZU", + tier: "PU", doublesTier: "DUU", }, spinarak: { tier: "LC", }, ariados: { - tier: "ZU", + tier: "PU", doublesTier: "DUU", }, chinchou: { @@ -725,8 +721,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { doublesTier: "DOU", }, natu: { - tier: "PU", - doublesTier: "LC", + tier: "LC", }, xatu: { tier: "UU", @@ -756,7 +751,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "LC", }, sudowoodo: { - tier: "ZU", + tier: "PU", doublesTier: "DUU", }, hoppip: { @@ -780,7 +775,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "LC", }, sunflora: { - tier: "ZU", + tier: "PU", doublesTier: "DUU", }, yanma: { @@ -798,8 +793,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { doublesTier: "DUU", }, murkrow: { - tier: "PU", - doublesTier: "NFE", + tier: "NFE", }, honchkrow: { tier: "UU", @@ -814,7 +808,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { doublesTier: "DUU", }, unown: { - tier: "ZU", + tier: "PU", doublesTier: "DUU", }, wynaut: { @@ -825,7 +819,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { doublesTier: "DUU", }, girafarig: { - tier: "ZU", + tier: "PU", doublesTier: "DUU", }, pineco: { @@ -836,7 +830,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { doublesTier: "DUU", }, dunsparce: { - tier: "ZU", + tier: "PU", doublesTier: "DUU", }, gligar: { @@ -851,7 +845,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "LC", }, granbull: { - tier: "ZU", + tier: "PU", doublesTier: "DUU", }, qwilfish: { @@ -859,7 +853,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { doublesTier: "DUU", }, shuckle: { - tier: "ZU", + tier: "PU", doublesTier: "DUU", }, heracross: { @@ -867,8 +861,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { doublesTier: "DUU", }, sneasel: { - tier: "PU", - doublesTier: "NFE", + tier: "NFE", }, weavile: { tier: "UU", @@ -885,7 +878,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "LC", }, magcargo: { - tier: "ZU", + tier: "PU", doublesTier: "DUU", }, swinub: { @@ -900,18 +893,18 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { doublesTier: "DOU", }, corsola: { - tier: "ZU", + tier: "PU", doublesTier: "DUU", }, remoraid: { tier: "LC", }, octillery: { - tier: "ZU", + tier: "PU", doublesTier: "DUU", }, delibird: { - tier: "ZU", + tier: "PU", doublesTier: "DUU", }, mantyke: { @@ -940,7 +933,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { doublesTier: "DUU", }, stantler: { - tier: "ZU", + tier: "PU", doublesTier: "DUU", }, smeargle: { @@ -1020,7 +1013,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "LC", }, mightyena: { - tier: "ZU", + tier: "PU", doublesTier: "DUU", }, zigzagoon: { @@ -1037,14 +1030,14 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "NFE", }, beautifly: { - tier: "ZU", + tier: "PU", doublesTier: "DUU", }, cascoon: { tier: "NFE", }, dustox: { - tier: "ZU", + tier: "PU", doublesTier: "DUU", }, lotad: { @@ -1078,7 +1071,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "LC", }, pelipper: { - tier: "ZU", + tier: "PU", doublesTier: "DUU", }, ralts: { @@ -1099,7 +1092,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "LC", }, masquerain: { - tier: "ZU", + tier: "PU", doublesTier: "DUU", }, shroomish: { @@ -1117,7 +1110,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { doublesTier: "NFE", }, slaking: { - tier: "ZU", + tier: "PU", doublesTier: "DUU", }, nincada: { @@ -1128,7 +1121,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { doublesTier: "DUU", }, shedinja: { - tier: "ZU", + tier: "PU", doublesTier: "DUU", }, whismur: { @@ -1138,7 +1131,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "NFE", }, exploud: { - tier: "ZU", + tier: "PU", doublesTier: "DUU", }, makuhita: { @@ -1159,7 +1152,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "LC", }, delcatty: { - tier: "ZU", + tier: "PU", doublesTier: "DUU", }, sableye: { @@ -1195,11 +1188,11 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { doublesTier: "DUU", }, plusle: { - tier: "ZU", + tier: "PU", doublesTier: "DUU", }, minun: { - tier: "ZU", + tier: "PU", doublesTier: "DUU", }, volbeat: { @@ -1207,7 +1200,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { doublesTier: "DUU", }, illumise: { - tier: "ZU", + tier: "PU", doublesTier: "DUU", }, budew: { @@ -1225,7 +1218,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "LC", }, swalot: { - tier: "ZU", + tier: "PU", doublesTier: "DUU", }, carvanha: { @@ -1239,7 +1232,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "LC", }, wailord: { - tier: "ZU", + tier: "PU", doublesTier: "DUU", }, numel: { @@ -1257,11 +1250,11 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "LC", }, grumpig: { - tier: "ZU", + tier: "PU", doublesTier: "DUU", }, spinda: { - tier: "ZU", + tier: "PU", doublesTier: "DUU", }, trapinch: { @@ -1293,22 +1286,22 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { doublesTier: "DUU", }, seviper: { - tier: "ZU", + tier: "PU", doublesTier: "DUU", }, lunatone: { - tier: "ZU", + tier: "PU", doublesTier: "DUU", }, solrock: { - tier: "ZU", + tier: "PU", doublesTier: "DUU", }, barboach: { tier: "LC", }, whiscash: { - tier: "ZU", + tier: "PU", doublesTier: "DUU", }, corphish: { @@ -1347,7 +1340,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { doublesTier: "DUU", }, castform: { - tier: "ZU", + tier: "PU", doublesTier: "DUU", }, castformsunny: { @@ -1356,7 +1349,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { }, castformsnowy: {}, kecleon: { - tier: "ZU", + tier: "PU", doublesTier: "DUU", }, shuppet: { @@ -1378,14 +1371,14 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { doublesTier: "DUU", }, tropius: { - tier: "ZU", + tier: "PU", doublesTier: "DUU", }, chingling: { tier: "LC", }, chimecho: { - tier: "ZU", + tier: "PU", doublesTier: "DUU", }, absol: { @@ -1396,7 +1389,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "LC", }, glalie: { - tier: "ZUBL", + tier: "PU", doublesTier: "DUU", }, froslass: { @@ -1410,7 +1403,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "NFE", }, walrein: { - tier: "ZU", + tier: "PU", doublesTier: "DUU", }, clamperl: { @@ -1429,7 +1422,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { doublesTier: "DUU", }, luvdisc: { - tier: "ZU", + tier: "PU", doublesTier: "DUU", }, bagon: { @@ -1519,8 +1512,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "LC", }, monferno: { - tier: "PU", - doublesTier: "NFE", + tier: "NFE", }, infernape: { tier: "(OU)", @@ -1550,14 +1542,14 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "LC", }, bibarel: { - tier: "ZU", + tier: "PU", doublesTier: "DUU", }, kricketot: { tier: "LC", }, kricketune: { - tier: "ZU", + tier: "PU", doublesTier: "DUU", }, shinx: { @@ -1567,7 +1559,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "NFE", }, luxray: { - tier: "ZU", + tier: "PU", doublesTier: "DUU", }, cranidos: { @@ -1588,30 +1580,30 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "LC", }, wormadam: { - tier: "ZU", + tier: "PU", doublesTier: "DUU", }, wormadamsandy: { - tier: "ZU", + tier: "PU", doublesTier: "DUU", }, wormadamtrash: { - tier: "ZU", + tier: "PU", doublesTier: "DUU", }, mothim: { - tier: "ZU", + tier: "PU", doublesTier: "DUU", }, combee: { tier: "LC", }, vespiquen: { - tier: "ZU", + tier: "PU", doublesTier: "DUU", }, pachirisu: { - tier: "ZU", + tier: "PU", doublesTier: "DUU", }, buizel: { @@ -1625,7 +1617,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "LC", }, cherrim: { - tier: "ZU", + tier: "PU", doublesTier: "DUU", }, cherrimsunshine: {}, @@ -1647,7 +1639,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "LC", }, lopunny: { - tier: "ZU", + tier: "PU", doublesTier: "DUU", }, glameow: { @@ -1665,15 +1657,14 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { doublesTier: "DUU", }, bronzor: { - tier: "PU", - doublesTier: "LC", + tier: "LC", }, bronzong: { tier: "UU", doublesTier: "DOU", }, chatot: { - tier: "ZU", + tier: "PU", doublesTier: "DUU", }, spiritomb: { @@ -1684,8 +1675,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "LC", }, gabite: { - tier: "PU", - doublesTier: "NFE", + tier: "NFE", }, garchomp: { tier: "OU", @@ -1703,7 +1693,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "LC", }, hippowdon: { - tier: "(OU)", + tier: "OU", doublesTier: "DUU", }, skorupi: { @@ -1717,18 +1707,18 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "LC", }, toxicroak: { - tier: "OU", + tier: "(OU)", doublesTier: "DOU", }, carnivine: { - tier: "ZU", + tier: "PU", doublesTier: "DUU", }, finneon: { tier: "LC", }, lumineon: { - tier: "ZU", + tier: "PU", doublesTier: "DUU", }, snover: { @@ -1787,7 +1777,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { doublesTier: "DOU", }, regigigas: { - tier: "ZUBL", + tier: "PU", doublesTier: "DUU", }, giratina: { @@ -1803,7 +1793,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { doublesTier: "DOU", }, phione: { - tier: "ZU", + tier: "PU", doublesTier: "DUU", }, manaphy: { @@ -1896,7 +1886,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "LC", }, watchog: { - tier: "ZU", + tier: "PU", doublesTier: "DUU", }, lillipup: { @@ -1927,7 +1917,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "LC", }, simisear: { - tier: "ZU", + tier: "PU", doublesTier: "DUU", }, panpour: { @@ -1951,7 +1941,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "NFE", }, unfezant: { - tier: "ZU", + tier: "PU", doublesTier: "DUU", }, blitzle: { @@ -2025,15 +2015,14 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "NFE", }, leavanny: { - tier: "ZU", + tier: "PU", doublesTier: "DUU", }, venipede: { tier: "LC", }, whirlipede: { - tier: "ZUBL", - doublesTier: "NFE", + tier: "NFE", }, scolipede: { tier: "NUBL", @@ -2065,8 +2054,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "LC", }, krokorok: { - tier: "PU", - doublesTier: "NFE", + tier: "NFE", }, krookodile: { tier: "UU", @@ -2084,16 +2072,14 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { doublesTier: "DUU", }, dwebble: { - tier: "PU", - doublesTier: "LC", + tier: "LC", }, crustle: { tier: "RU", doublesTier: "DUU", }, scraggy: { - tier: "PU", - doublesTier: "NFE", + tier: "NFE", }, scrafty: { tier: "UU", @@ -2125,8 +2111,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { doublesTier: "DUU", }, trubbish: { - tier: "ZUBL", - doublesTier: "LC", + tier: "LC", }, garbodor: { tier: "NU", @@ -2161,8 +2146,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "LC", }, duosion: { - tier: "PU", - doublesTier: "NFE", + tier: "NFE", }, reuniclus: { tier: "OU", @@ -2182,7 +2166,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "NFE", }, vanilluxe: { - tier: "ZU", + tier: "PU", doublesTier: "DUU", }, deerling: { @@ -2193,7 +2177,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { doublesTier: "DUU", }, emolga: { - tier: "ZU", + tier: "PU", doublesTier: "DUU", }, karrablast: { @@ -2240,8 +2224,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "LC", }, klang: { - tier: "PU", - doublesTier: "NFE", + tier: "NFE", }, klinklang: { tier: "RU", @@ -2278,8 +2261,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "LC", }, fraxure: { - tier: "PU", - doublesTier: "NFE", + tier: "NFE", }, haxorus: { tier: "(OU)", @@ -2289,7 +2271,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "LC", }, beartic: { - tier: "ZU", + tier: "PU", doublesTier: "DUU", }, cryogonal: { @@ -2351,7 +2333,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { doublesTier: "DUU", }, heatmor: { - tier: "ZU", + tier: "PU", doublesTier: "DUU", }, durant: { @@ -2362,11 +2344,10 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "LC", }, zweilous: { - tier: "PU", - doublesTier: "NFE", + tier: "NFE", }, hydreigon: { - tier: "OU", + tier: "(OU)", doublesTier: "DOU", }, larvesta: { diff --git a/data/mods/gen5/items.ts b/data/mods/gen5/items.ts index d2beff78ebb4..34cfe9b68c50 100644 --- a/data/mods/gen5/items.ts +++ b/data/mods/gen5/items.ts @@ -1,4 +1,4 @@ -export const Items: {[k: string]: ModdedItemData} = { +export const Items: import('../../../sim/dex-items').ModdedItemDataTable = { aguavberry: { inherit: true, naturalGift: { diff --git a/data/mods/gen5/moves.ts b/data/mods/gen5/moves.ts index 26cc616d84f7..43c03e139344 100644 --- a/data/mods/gen5/moves.ts +++ b/data/mods/gen5/moves.ts @@ -1,7 +1,7 @@ -export const Moves: {[k: string]: ModdedMoveData} = { +export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = { absorb: { inherit: true, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, }, acidarmor: { inherit: true, @@ -76,11 +76,11 @@ export const Moves: {[k: string]: ModdedMoveData} = { }, block: { inherit: true, - flags: {protect: 1, reflectable: 1, mirror: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, metronome: 1}, }, bounce: { inherit: true, - flags: {contact: 1, charge: 1, protect: 1, mirror: 1, gravity: 1, distance: 1, nosleeptalk: 1}, + flags: {contact: 1, charge: 1, protect: 1, mirror: 1, gravity: 1, distance: 1, metronome: 1, nosleeptalk: 1}, }, bubble: { inherit: true, @@ -88,7 +88,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { }, bugbuzz: { inherit: true, - flags: {protect: 1, mirror: 1, sound: 1}, + flags: {protect: 1, mirror: 1, sound: 1, metronome: 1}, }, camouflage: { inherit: true, @@ -111,7 +111,10 @@ export const Moves: {[k: string]: ModdedMoveData} = { chance: 10, volatileStatus: 'confusion', }, - flags: {protect: 1, sound: 1, distance: 1, noassist: 1, failcopycat: 1, failmefirst: 1, nosleeptalk: 1, failmimic: 1}, + flags: { + protect: 1, sound: 1, distance: 1, noassist: 1, failcopycat: 1, + failmefirst: 1, nosleeptalk: 1, failmimic: 1, nosketch: 1, + }, }, conversion: { inherit: true, @@ -168,11 +171,11 @@ export const Moves: {[k: string]: ModdedMoveData} = { }, dig: { inherit: true, - flags: {contact: 1, charge: 1, protect: 1, mirror: 1, nonsky: 1, nosleeptalk: 1}, + flags: {contact: 1, charge: 1, protect: 1, mirror: 1, nonsky: 1, metronome: 1, nosleeptalk: 1}, }, dive: { inherit: true, - flags: {contact: 1, charge: 1, protect: 1, mirror: 1, nonsky: 1, nosleeptalk: 1}, + flags: {contact: 1, charge: 1, protect: 1, mirror: 1, nonsky: 1, metronome: 1, nosleeptalk: 1}, }, dracometeor: { inherit: true, @@ -184,15 +187,15 @@ export const Moves: {[k: string]: ModdedMoveData} = { }, drainpunch: { inherit: true, - flags: {contact: 1, protect: 1, mirror: 1, punch: 1}, + flags: {contact: 1, protect: 1, mirror: 1, punch: 1, metronome: 1}, }, dreameater: { inherit: true, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, }, echoedvoice: { inherit: true, - flags: {protect: 1, mirror: 1, sound: 1}, + flags: {protect: 1, mirror: 1, sound: 1, metronome: 1}, }, electroball: { inherit: true, @@ -217,7 +220,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { }, finalgambit: { inherit: true, - flags: {contact: 1, protect: 1}, + flags: {contact: 1, protect: 1, metronome: 1}, }, fireblast: { inherit: true, @@ -240,7 +243,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { }, fly: { inherit: true, - flags: {contact: 1, charge: 1, protect: 1, mirror: 1, gravity: 1, distance: 1}, + flags: {contact: 1, charge: 1, protect: 1, mirror: 1, gravity: 1, distance: 1, metronome: 1}, }, followme: { inherit: true, @@ -282,7 +285,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { basePower: 100, category: "Special", priority: 0, - flags: {futuremove: 1}, + flags: {metronome: 1, futuremove: 1}, ignoreImmunity: false, effectType: 'Move', type: 'Psychic', @@ -294,7 +297,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { }, gigadrain: { inherit: true, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, }, glare: { inherit: true, @@ -302,7 +305,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { }, grasswhistle: { inherit: true, - flags: {protect: 1, reflectable: 1, mirror: 1, sound: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, sound: 1, metronome: 1}, }, grasspledge: { inherit: true, @@ -317,7 +320,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { }, growl: { inherit: true, - flags: {protect: 1, reflectable: 1, mirror: 1, sound: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, sound: 1, metronome: 1}, }, growth: { inherit: true, @@ -338,7 +341,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { }, healbell: { inherit: true, - flags: {snatch: 1, sound: 1}, + flags: {snatch: 1, sound: 1, metronome: 1}, onHit(target, source) { this.add('-activate', source, 'move: Heal Bell'); const allies = [...target.side.pokemon, ...target.side.allySide?.pokemon || []]; @@ -435,7 +438,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { }, hornleech: { inherit: true, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, }, hurricane: { inherit: true, @@ -447,7 +450,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { }, hypervoice: { inherit: true, - flags: {protect: 1, mirror: 1, sound: 1}, + flags: {protect: 1, mirror: 1, sound: 1, metronome: 1}, }, icebeam: { inherit: true, @@ -474,7 +477,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { }, leechlife: { inherit: true, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, }, lick: { inherit: true, @@ -523,15 +526,15 @@ export const Moves: {[k: string]: ModdedMoveData} = { }, meanlook: { inherit: true, - flags: {protect: 1, reflectable: 1, mirror: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, metronome: 1}, }, megadrain: { inherit: true, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, }, metalsound: { inherit: true, - flags: {protect: 1, reflectable: 1, mirror: 1, sound: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, sound: 1, metronome: 1}, }, meteormash: { inherit: true, @@ -555,31 +558,22 @@ export const Moves: {[k: string]: ModdedMoveData} = { type: "Normal", }, mudsport: { - num: 300, - accuracy: true, - basePower: 0, - category: "Status", - name: "Mud Sport", - pp: 15, - priority: 0, - flags: {}, + inherit: true, + pseudoWeather: undefined, volatileStatus: 'mudsport', - onTryHitField(target, source) { - if (source.volatiles['mudsport']) return false; - }, condition: { noCopy: true, onStart(pokemon) { - this.add("-start", pokemon, 'Mud Sport'); + this.add('-start', pokemon, 'Mud Sport'); }, onAnyBasePowerPriority: 1, onAnyBasePower(basePower, user, target, move) { - if (move.type === 'Electric') return this.chainModify([1352, 4096]); + if (move.type === 'Electric') { + this.debug('mud sport weaken'); + return this.chainModify([1352, 4096]); + } }, }, - secondary: null, - target: "all", - type: "Ground", }, muddywater: { inherit: true, @@ -599,7 +593,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { }, perishsong: { inherit: true, - flags: {sound: 1, distance: 1}, + flags: {sound: 1, distance: 1, metronome: 1}, }, pinmissile: { inherit: true, @@ -717,7 +711,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { roar: { inherit: true, accuracy: 100, - flags: {protect: 1, reflectable: 1, mirror: 1, sound: 1, bypasssub: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, sound: 1, bypasssub: 1, metronome: 1}, }, rocktomb: { inherit: true, @@ -727,7 +721,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { }, round: { inherit: true, - flags: {protect: 1, mirror: 1, sound: 1}, + flags: {protect: 1, mirror: 1, sound: 1, metronome: 1}, }, sacredsword: { inherit: true, @@ -739,7 +733,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { }, screech: { inherit: true, - flags: {protect: 1, reflectable: 1, mirror: 1, sound: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, sound: 1, metronome: 1}, }, secretpower: { inherit: true, @@ -752,11 +746,11 @@ export const Moves: {[k: string]: ModdedMoveData} = { }, shadowforce: { inherit: true, - flags: {contact: 1, charge: 1, mirror: 1, nosleeptalk: 1}, + flags: {contact: 1, charge: 1, mirror: 1, metronome: 1, nosleeptalk: 1}, }, sing: { inherit: true, - flags: {protect: 1, reflectable: 1, mirror: 1, sound: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, sound: 1, metronome: 1}, }, skillswap: { inherit: true, @@ -778,7 +772,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { }, skydrop: { inherit: true, - flags: {contact: 1, charge: 1, protect: 1, mirror: 1, gravity: 1, distance: 1, nosleeptalk: 1}, + flags: {contact: 1, charge: 1, protect: 1, mirror: 1, gravity: 1, distance: 1, metronome: 1, nosleeptalk: 1}, onTryHit(target, source, move) { if (target.fainted) return false; if (source.removeVolatile(move.id)) { @@ -910,7 +904,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { }, supersonic: { inherit: true, - flags: {protect: 1, reflectable: 1, mirror: 1, sound: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, sound: 1, metronome: 1}, }, surf: { inherit: true, @@ -962,7 +956,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { }, uproar: { inherit: true, - flags: {protect: 1, mirror: 1, sound: 1, nosleeptalk: 1}, + flags: {protect: 1, mirror: 1, sound: 1, metronome: 1, nosleeptalk: 1}, }, vinewhip: { inherit: true, @@ -985,36 +979,27 @@ export const Moves: {[k: string]: ModdedMoveData} = { }, }, watersport: { - num: 346, - accuracy: true, - basePower: 0, - category: "Status", - name: "Water Sport", - pp: 15, - priority: 0, - flags: {}, + inherit: true, + pseudoWeather: undefined, volatileStatus: 'watersport', - onTryHitField(target, source) { - if (source.volatiles['watersport']) return false; - }, condition: { noCopy: true, onStart(pokemon) { - this.add("-start", pokemon, 'move: Water Sport'); + this.add('-start', pokemon, 'move: Water Sport'); }, onAnyBasePowerPriority: 1, onAnyBasePower(basePower, user, target, move) { - if (move.type === 'Fire') return this.chainModify([1352, 4096]); + if (move.type === 'Fire') { + this.debug('water sport weaken'); + return this.chainModify([1352, 4096]); + } }, }, - secondary: null, - target: "all", - type: "Water", }, whirlwind: { inherit: true, accuracy: 100, - flags: {protect: 1, reflectable: 1, mirror: 1, bypasssub: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, bypasssub: 1, metronome: 1}, }, wideguard: { inherit: true, diff --git a/data/mods/gen5/pokedex.ts b/data/mods/gen5/pokedex.ts index 6783c558f84b..06f3e54db589 100644 --- a/data/mods/gen5/pokedex.ts +++ b/data/mods/gen5/pokedex.ts @@ -1,4 +1,4 @@ -export const Pokedex: {[k: string]: ModdedSpeciesData} = { +export const Pokedex: import('../../../sim/dex-species').ModdedSpeciesDataTable = { bulbasaur: { inherit: true, maleOnlyHidden: true, diff --git a/data/mods/gen5/rulesets.ts b/data/mods/gen5/rulesets.ts index 818c368a608d..09d83f76357e 100644 --- a/data/mods/gen5/rulesets.ts +++ b/data/mods/gen5/rulesets.ts @@ -1,4 +1,4 @@ -export const Rulesets: {[k: string]: ModdedFormatData} = { +export const Rulesets: import('../../../sim/dex-formats').ModdedFormatDataTable = { standard: { inherit: true, ruleset: [ @@ -19,8 +19,9 @@ export const Rulesets: {[k: string]: ModdedFormatData} = { this.add('clearpoke'); for (const pokemon of this.getAllPokemon()) { const details = pokemon.details.replace(', shiny', '') - .replace(/(Arceus|Genesect|Greninja|Gourgeist|Pumpkaboo|Xerneas|Silvally|Urshifu|Dudunsparce)(-[a-zA-Z?-]+)?/g, '$1-*') - .replace(/(Zacian|Zamazenta)(?!-Crowned)/g, '$1-*'); // Hacked-in Crowned formes will be revealed + .replace(/(Arceus|Genesect|Gourgeist|Pumpkaboo|Xerneas|Silvally|Urshifu|Dudunsparce)(-[a-zA-Z?-]+)?/g, '$1-*') + .replace(/(Zacian|Zamazenta)(?!-Crowned)/g, '$1-*') // Hacked-in Crowned formes will be revealed + .replace(/(Greninja)(?!-Ash)/g, '$1-*'); // Hacked-in Greninja-Ash will be revealed const item = pokemon.item.includes('mail') ? 'mail' : pokemon.item ? 'item' : ''; this.add('poke', pokemon.side.id, details, item); } diff --git a/data/mods/gen5/typechart.ts b/data/mods/gen5/typechart.ts index e8e04f803e4a..cc0df5951fee 100644 --- a/data/mods/gen5/typechart.ts +++ b/data/mods/gen5/typechart.ts @@ -1,4 +1,4 @@ -export const TypeChart: {[k: string]: ModdedTypeData | null} = { +export const TypeChart: import('../../../sim/dex-data').ModdedTypeDataTable = { electric: { inherit: true, damageTaken: { diff --git a/data/mods/gen5bw1/formats-data.ts b/data/mods/gen5bw1/formats-data.ts index 454df83921b6..6b7fb16a1c21 100644 --- a/data/mods/gen5bw1/formats-data.ts +++ b/data/mods/gen5bw1/formats-data.ts @@ -1,4 +1,85 @@ -export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { +export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormatsDataTable = { + venusaur: { + tier: "OU", + }, + dugtrio: { + tier: "OU", + }, + cloyster: { + tier: "OU", + }, + chansey: { + tier: "OU", + }, + vaporeon: { + tier: "OU", + }, + jolteon: { + tier: "OU", + }, + espeon: { + tier: "OU", + }, + donphan: { + tier: "OU", + }, + froslass: { + tier: "UU", + }, + metagross: { + tier: "OU", + }, + deoxysdefense: { + tier: "UUBL", + }, + infernape: { + tier: "OU", + }, + lucario: { + tier: "OU", + }, + hippowdon: { + tier: "UUBL", + }, + toxicroak: { + tier: "OU", + }, + snover: { + tier: "UUBL", + }, + abomasnow: { + tier: "UUBL", + }, + garchomp: { + tier: "Uber", + }, + excadrill: { + tier: "Uber", + }, + scrafty: { + tier: "OU", + }, + gothitelle: { + tier: "PU", + }, + chandelure: { + tier: "UU", + }, + haxorus: { + tier: "OU", + }, + mienshao: { + tier: "OU", + }, + hydreigon: { + tier: "OU", + }, + virizion: { + tier: "OU", + }, + tornadus: { + tier: "OU", + }, tornadustherian: { isNonstandard: "Future", tier: "Illegal", @@ -7,6 +88,9 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { isNonstandard: "Future", tier: "Illegal", }, + landorus: { + tier: "OU", + }, landorustherian: { isNonstandard: "Future", tier: "Illegal", diff --git a/data/mods/gen5bw1/items.ts b/data/mods/gen5bw1/items.ts index 40a15d8e56b8..4ea2feedacbf 100644 --- a/data/mods/gen5bw1/items.ts +++ b/data/mods/gen5bw1/items.ts @@ -1,4 +1,4 @@ -export const Items: {[k: string]: ModdedItemData} = { +export const Items: import('../../../sim/dex-items').ModdedItemDataTable = { apicotberry: { inherit: true, isNonstandard: "Unobtainable", diff --git a/data/mods/gen5bw1/learnsets.ts b/data/mods/gen5bw1/learnsets.ts index ed749bc42f1a..da74e3059e2b 100644 --- a/data/mods/gen5bw1/learnsets.ts +++ b/data/mods/gen5bw1/learnsets.ts @@ -1,4 +1,4 @@ -export const Learnsets: {[k: string]: ModdedLearnsetData} = { +export const Learnsets: import('../../../sim/dex-species').ModdedLearnsetDataTable = { bulbasaur: { inherit: true, learnset: { @@ -2472,7 +2472,7 @@ export const Learnsets: {[k: string]: ModdedLearnsetData} = { attract: ["5M", "4M", "3M"], bestow: ["5L25"], blizzard: ["5M", "4M", "3M"], - bodyslam: ["5L40", "3T"], + bodyslam: ["3T"], bounce: ["4T"], brickbreak: ["5M", "4M", "3M"], calmmind: ["5M", "4M", "3M"], @@ -3130,7 +3130,7 @@ export const Learnsets: {[k: string]: ModdedLearnsetData} = { superfang: ["5D", "4T"], supersonic: ["5L5", "5D", "4L5", "3L6"], swagger: ["5M", "4M", "3T"], - swift: ["5L24", "4T", "3T"], + swift: ["4T", "3T"], tailwind: ["4T"], taunt: ["5M", "4M", "3M"], thief: ["5M", "4M", "3M"], @@ -3197,7 +3197,7 @@ export const Learnsets: {[k: string]: ModdedLearnsetData} = { superfang: ["4T"], supersonic: ["5L1", "4L1", "3L1"], swagger: ["5M", "4M", "3T"], - swift: ["5L24", "4T", "3T"], + swift: ["4T", "3T"], tailwind: ["4T"], taunt: ["5M", "4M", "3M"], thief: ["5M", "4M", "3M"], @@ -3266,7 +3266,7 @@ export const Learnsets: {[k: string]: ModdedLearnsetData} = { superfang: ["4T", "4S0"], supersonic: ["5L1", "4L1", "3L1"], swagger: ["5M", "4M", "3T"], - swift: ["5L24", "4T", "3T"], + swift: ["4T", "3T"], tailwind: ["4T"], taunt: ["5M", "4M", "3M"], thief: ["5M", "4M", "3M"], @@ -4045,7 +4045,7 @@ export const Learnsets: {[k: string]: ModdedLearnsetData} = { substitute: ["5M", "4M", "3T"], sunnyday: ["5M", "4M", "3M"], swagger: ["5M", "4M", "3T", "3L61"], - swift: ["5L28", "4T", "3T"], + swift: ["4T", "3T"], switcheroo: ["5L1", "4L1"], taunt: ["5M", "5L25", "4M", "4L25", "3M"], thief: ["5M", "4M", "3M"], @@ -4064,7 +4064,7 @@ export const Learnsets: {[k: string]: ModdedLearnsetData} = { learnset: { aerialace: ["5M", "4M", "3M"], amnesia: ["5L48", "4L44"], - aquatail: ["5L32", "4T"], + aquatail: ["4T"], attract: ["5M", "4M", "3M"], blizzard: ["5M", "4M", "3M"], bodyslam: ["3T"], @@ -4158,7 +4158,7 @@ export const Learnsets: {[k: string]: ModdedLearnsetData} = { aerialace: ["5M", "4M", "3M"], amnesia: ["5L56", "4L50"], aquajet: ["5L1", "4L1"], - aquatail: ["5L32", "4T"], + aquatail: ["4T"], attract: ["5M", "4M", "3M"], blizzard: ["5M", "4M", "3M"], bodyslam: ["3T"], @@ -9492,7 +9492,7 @@ export const Learnsets: {[k: string]: ModdedLearnsetData} = { fling: ["5M", "4M"], focusblast: ["5M", "4M"], frustration: ["5M", "4M"], - gigadrain: ["5L36", "4M"], + gigadrain: ["4M"], gigaimpact: ["5M", "4M"], grassknot: ["5M", "4M"], growth: ["5L12", "4L12"], @@ -9958,7 +9958,7 @@ export const Learnsets: {[k: string]: ModdedLearnsetData} = { inherit: true, learnset: { blizzard: ["5M", "4M", "3M"], - brine: ["5L36", "4M"], + brine: ["4M"], bubblebeam: ["5L28", "4L28", "3L28"], camouflage: ["5L19", "4L19", "3L19"], cosmicpower: ["5L55", "4L51", "3L42", "3S0"], @@ -11351,7 +11351,7 @@ export const Learnsets: {[k: string]: ModdedLearnsetData} = { curse: ["5E", "4E", "3E"], detect: ["5E", "4E"], dig: ["5M", "4M", "3M"], - doubleedge: ["5L37", "3T"], + doubleedge: ["3T"], doubleteam: ["5M", "4M", "3M"], echoedvoice: ["5M", "5S2"], endure: ["5E", "4M", "4E", "3T", "3E"], @@ -15431,7 +15431,7 @@ export const Learnsets: {[k: string]: ModdedLearnsetData} = { frustration: ["5M", "4M", "3M"], hail: ["5M", "4M", "3M"], headbutt: ["4T"], - helpinghand: ["5L16", "4T"], + helpinghand: ["4T"], hiddenpower: ["5M", "4M", "3M"], icebeam: ["5M", "4M", "3M"], icywind: ["4T", "3T"], @@ -15502,7 +15502,7 @@ export const Learnsets: {[k: string]: ModdedLearnsetData} = { grassknot: ["5M", "4M"], hail: ["5M", "4M", "3M"], headbutt: ["4T"], - helpinghand: ["5L16", "4T"], + helpinghand: ["4T"], hiddenpower: ["5M", "4M", "3M"], hydropump: ["5L42", "4L42", "3L45"], icebeam: ["5M", "4M", "3M"], @@ -15578,7 +15578,7 @@ export const Learnsets: {[k: string]: ModdedLearnsetData} = { grassknot: ["5M", "4M"], hail: ["5M", "4M", "3M"], headbutt: ["4T"], - helpinghand: ["5L16", "4T"], + helpinghand: ["4T"], hiddenpower: ["5M", "4M", "3M"], hydropump: ["5L54", "4L54", "3L57"], hyperbeam: ["5M", "4M", "3M"], @@ -15607,7 +15607,7 @@ export const Learnsets: {[k: string]: ModdedLearnsetData} = { snore: ["4T", "3T"], strength: ["5M", "4M", "3M"], substitute: ["5M", "4M", "3T"], - superpower: ["5L42", "4T"], + superpower: ["4T"], surf: ["5M", "4M", "3M"], swagger: ["5M", "4M", "3T"], swift: ["4T", "3T"], @@ -15690,7 +15690,7 @@ export const Learnsets: {[k: string]: ModdedLearnsetData} = { calmmind: ["5M", "4M", "3M"], captivate: ["4M"], copycat: ["5L1", "4L1"], - counter: ["5L33", "3T"], + counter: ["3T"], curse: ["5E"], defensecurl: ["5E", "4E", "3T"], dig: ["5M", "4M", "3M"], @@ -16127,7 +16127,7 @@ export const Learnsets: {[k: string]: ModdedLearnsetData} = { captivate: ["4M"], curse: ["5E", "4E", "3E"], cut: ["5M", "4M", "3M"], - doubleedge: ["5L37", "3T"], + doubleedge: ["3T"], doubleteam: ["5M", "4M", "3M"], earthpower: ["5D", "4T"], encore: ["5E", "4E", "3E"], @@ -16182,7 +16182,7 @@ export const Learnsets: {[k: string]: ModdedLearnsetData} = { bulletseed: ["5L21", "4M", "4L21", "3M", "3L25"], captivate: ["4M"], cut: ["5M", "4M", "3M"], - doubleedge: ["5L37", "3T"], + doubleedge: ["3T"], doubleteam: ["5M", "4M", "3M"], earthpower: ["4T"], endeavor: ["4T"], @@ -16191,7 +16191,7 @@ export const Learnsets: {[k: string]: ModdedLearnsetData} = { facade: ["5M", "4M", "3M"], flash: ["5M", "4M", "3M"], frustration: ["5M", "4M", "3M"], - gigadrain: ["5L22", "4M", "3M"], + gigadrain: ["4M", "3M"], gigaimpact: ["5M", "4M"], grassknot: ["5M", "4M"], grasswhistle: ["5L13", "4L13"], @@ -16205,7 +16205,7 @@ export const Learnsets: {[k: string]: ModdedLearnsetData} = { lightscreen: ["5M", "4M", "3M"], megadrain: ["5L5", "4L5"], mimic: ["3T"], - naturalgift: ["5L31", "4M"], + naturalgift: ["4M"], petaldance: ["5L33", "4L33", "3L37"], pound: ["5L1", "4L1", "3L1"], protect: ["5M", "4M", "3M"], @@ -17102,12 +17102,12 @@ export const Learnsets: {[k: string]: ModdedLearnsetData} = { curse: ["5E", "4E", "3E"], defensecurl: ["5L4", "4L5", "3T", "3L4"], dig: ["5M", "5L53", "4M", "4L45", "3M"], - doubleedge: ["5L34", "3T"], + doubleedge: ["3T"], doubleteam: ["5M", "4M", "3M"], dreameater: ["5M", "4M", "3T"], earthquake: ["5M", "4M", "3M"], endeavor: ["5L58", "4T", "4L49", "3L41"], - endure: ["5L40", "4M", "3T"], + endure: ["4M", "3T"], facade: ["5M", "4M", "3M"], fireblast: ["5M", "4M", "3M"], flail: ["5L63", "4L53", "3L44"], @@ -17686,7 +17686,7 @@ export const Learnsets: {[k: string]: ModdedLearnsetData} = { bodyslam: ["3T"], brickbreak: ["5M", "5L19", "4M", "4L19", "3M", "3L23"], bugbite: ["4T"], - bulkup: ["5M", "4M", "3M"], + bulkup: ["4M", "3M"], bulldoze: ["5M"], captivate: ["4M"], closecombat: ["5L37", "4L37"], @@ -17834,7 +17834,7 @@ export const Learnsets: {[k: string]: ModdedLearnsetData} = { slash: ["5L38", "4L35", "3L50"], sleeptalk: ["4M", "3T"], snarl: ["5E"], - snatch: ["5L40", "4M", "3M"], + snatch: ["4M", "3M"], snore: ["4T", "3T"], spite: ["5E", "4T", "4E", "3E"], strength: ["5M", "4M", "3M"], @@ -17919,7 +17919,7 @@ export const Learnsets: {[k: string]: ModdedLearnsetData} = { shadowball: ["5M", "4M"], shadowclaw: ["5M", "4M"], sleeptalk: ["4M"], - snatch: ["5L40", "4M"], + snatch: ["4M"], snore: ["4T"], spite: ["4T"], strength: ["5M", "4M"], @@ -18477,7 +18477,7 @@ export const Learnsets: {[k: string]: ModdedLearnsetData} = { earthpower: ["5L53", "4T", "4L53"], earthquake: ["5M", "4M", "3M"], endeavor: ["4T"], - endure: ["5L35", "4M", "3T"], + endure: ["4M", "3T"], explosion: ["5M", "4M", "3T"], facade: ["5M", "4M", "3M"], frustration: ["5M", "4M", "3M"], @@ -21939,7 +21939,7 @@ export const Learnsets: {[k: string]: ModdedLearnsetData} = { learnset: { aerialace: ["5M", "5L42", "4M", "4L42", "3M"], agility: ["5L37", "5E", "4L37", "4E", "3L55", "3E"], - aircutter: ["5L33", "4T"], + aircutter: ["4T"], airslash: ["5L47", "4L47"], aquaring: ["5E", "4E"], attract: ["5M", "4M", "3M"], @@ -22006,7 +22006,7 @@ export const Learnsets: {[k: string]: ModdedLearnsetData} = { aircutter: ["4T"], attract: ["5M", "4M", "3M"], blizzard: ["5M", "4M", "3M"], - brine: ["5L34", "4M"], + brine: ["4M"], captivate: ["4M"], defog: ["4M"], doubleedge: ["3T"], @@ -26035,7 +26035,7 @@ export const Learnsets: {[k: string]: ModdedLearnsetData} = { hyperbeam: ["5M", "5L57", "4M", "4L57", "3M", "3L57"], mimic: ["3T"], mudshot: ["5E", "4E"], - mudslap: ["5L13", "4T", "3T"], + mudslap: ["4T", "3T"], naturalgift: ["4M"], protect: ["5M", "4M", "3M"], quickattack: ["5E", "4E", "3E"], @@ -26079,7 +26079,7 @@ export const Learnsets: {[k: string]: ModdedLearnsetData} = { dracometeor: ["5T", "4T"], dragonbreath: ["5L35", "4L35", "3L35"], dragonpulse: ["4M"], - earthpower: ["5L39", "4T"], + earthpower: ["4T"], earthquake: ["5M", "4M", "3M"], endure: ["4M", "3T"], facade: ["5M", "4M", "3M"], @@ -26093,7 +26093,7 @@ export const Learnsets: {[k: string]: ModdedLearnsetData} = { hiddenpower: ["5M", "4M", "3M"], hyperbeam: ["5M", "5L57", "4M", "4L57", "3M", "3L57"], mimic: ["3T"], - mudslap: ["5L13", "4T", "3T"], + mudslap: ["4T", "3T"], naturalgift: ["4M"], ominouswind: ["4T"], outrage: ["4T"], @@ -26150,7 +26150,7 @@ export const Learnsets: {[k: string]: ModdedLearnsetData} = { dragonclaw: ["5M", "5L45", "4M", "4L45", "4S1", "3M"], dragonpulse: ["4M"], dragontail: ["5M", "5L65"], - earthpower: ["5L39", "4T"], + earthpower: ["4T"], earthquake: ["5M", "4M", "4S1", "3M"], endure: ["4M", "3T"], facade: ["5M", "4M", "3M"], @@ -26171,7 +26171,7 @@ export const Learnsets: {[k: string]: ModdedLearnsetData} = { incinerate: ["5M"], irontail: ["4M", "3M"], mimic: ["3T"], - mudslap: ["5L13", "4T", "3T"], + mudslap: ["4T", "3T"], naturalgift: ["4M"], ominouswind: ["4T"], outrage: ["4T"], @@ -30363,13 +30363,13 @@ export const Learnsets: {[k: string]: ModdedLearnsetData} = { bodyslam: ["3T"], calmmind: ["5M", "4M", "3M"], chargebeam: ["5M", "4M"], - confusion: ["5L1", "4L1", "4S11", "4S12", "3L1", "3S0", "3S1", "3S2", "3S3", "3S4", "3S5", "3S6", "3S7", "3S8", "3S9"], - cosmicpower: ["5L60", "5S15", "4L60", "3L45"], + confusion: ["5L1", "4L1", "4S3", "4S4", "3L1", "3S0", "3S1"], + cosmicpower: ["5L60", "5S7", "4L60", "3L45"], defensecurl: ["3T"], doomdesire: ["5L70", "4L70", "3L50"], doubleedge: ["5L40", "4L40", "3T", "3L35"], doubleteam: ["5M", "4M", "3M"], - dracometeor: ["5S14", "4S12"], + dracometeor: ["5S6", "4S4"], drainpunch: ["4M"], dreameater: ["5M", "4M", "3T"], dynamicpunch: ["3T"], @@ -30386,8 +30386,8 @@ export const Learnsets: {[k: string]: ModdedLearnsetData} = { grassknot: ["5M", "4M"], gravity: ["5L45", "4T", "4L45"], headbutt: ["4T"], - healingwish: ["5L50", "5S13", "5S15", "5S16", "4L50"], - helpinghand: ["5L15", "4T", "4L15", "3L15", "3S10"], + healingwish: ["5L50", "5S5", "5S7", "5S8", "4L50"], + helpinghand: ["5L15", "4T", "4L15", "3L15", "3S2"], hiddenpower: ["5M", "4M", "3M"], hyperbeam: ["5M", "4M", "3M"], icepunch: ["4T", "3T"], @@ -30403,15 +30403,15 @@ export const Learnsets: {[k: string]: ModdedLearnsetData} = { naturalgift: ["4M"], nightmare: ["3T"], protect: ["5M", "4M", "3M"], - psychic: ["5M", "5L20", "5S13", "4M", "4L20", "3M", "3L20", "3S10"], + psychic: ["5M", "5L20", "5S5", "4M", "4L20", "3M", "3L20", "3S2"], psychup: ["5M", "4M", "3T"], psyshock: ["5M"], raindance: ["5M", "4M", "3M"], recycle: ["4M"], reflect: ["5M", "4M", "3M"], - refresh: ["5L25", "4L25", "3L25", "3S10"], - rest: ["5M", "5L5", "4M", "4L5", "4S11", "4S12", "3M", "3L5", "3S0", "3S1", "3S2", "3S3", "3S4", "3S5", "3S6", "3S7", "3S8", "3S9", "3S10"], - return: ["5M", "5S16", "4M", "3M"], + refresh: ["5L25", "4L25", "3L25", "3S2"], + rest: ["5M", "5L5", "4M", "4L5", "4S3", "4S4", "3M", "3L5", "3S0", "3S1", "3S2"], + return: ["5M", "5S8", "4M", "3M"], round: ["5M"], safeguard: ["5M", "4M", "3M"], sandstorm: ["5M", "4M", "3M"], @@ -30426,7 +30426,7 @@ export const Learnsets: {[k: string]: ModdedLearnsetData} = { substitute: ["5M", "4M", "3T"], sunnyday: ["5M", "4M", "3M"], swagger: ["5M", "4M", "3T"], - swift: ["5L10", "5S13", "5S16", "4T", "4L10", "3T", "3L10"], + swift: ["5L10", "5S5", "5S8", "4T", "4L10", "3T", "3L10"], telekinesis: ["5M"], thunder: ["5M", "4M", "3M"], thunderbolt: ["5M", "4M", "3M"], @@ -30438,7 +30438,7 @@ export const Learnsets: {[k: string]: ModdedLearnsetData} = { uproar: ["4T"], uturn: ["5M", "4M"], waterpulse: ["4M", "3M"], - wish: ["5L1", "5S14", "5S15", "5S16", "4L1", "4S11", "4S12", "3L1", "3S0", "3S1", "3S2", "3S3", "3S4", "3S5", "3S6", "3S7", "3S8", "3S9"], + wish: ["5L1", "5S6", "5S7", "5S8", "4L1", "4S3", "4S4", "3L1", "3S0", "3S1"], zenheadbutt: ["5L35", "4T", "4L35"], }, }, @@ -43943,120 +43943,6 @@ export const Learnsets: {[k: string]: ModdedLearnsetData} = { toxic: ["5M"], }, }, - kyuremblack: { - inherit: true, - learnset: { - ancientpower: ["5L15"], - blizzard: ["5M", "5L78"], - cut: ["5M"], - doubleteam: ["5M"], - dracometeor: ["5T"], - dragonbreath: ["5L29"], - dragonclaw: ["5M"], - dragonpulse: ["5L57", "5S0", "5S1"], - dragonrage: ["5L1"], - dragontail: ["5M"], - echoedvoice: ["5M"], - endeavor: ["5L71", "5S0"], - facade: ["5M"], - flashcannon: ["5M"], - fling: ["5M"], - fly: ["5M"], - focusblast: ["5M"], - freezeshock: ["5L43", "5S0", "5S1"], - frustration: ["5M"], - fusionbolt: ["5L50", "5S1"], - gigaimpact: ["5M"], - hail: ["5M"], - hiddenpower: ["5M"], - honeclaws: ["5M"], - hyperbeam: ["5M"], - hypervoice: ["5L92"], - icebeam: ["5M", "5L22"], - icywind: ["5L1"], - imprison: ["5L8", "5S0", "5S1"], - lightscreen: ["5M"], - outrage: ["5L85"], - payback: ["5M"], - protect: ["5M"], - psychic: ["5M"], - raindance: ["5M"], - reflect: ["5M"], - rest: ["5M"], - return: ["5M"], - rockslide: ["5M"], - rocksmash: ["5M"], - rocktomb: ["5M"], - round: ["5M"], - safeguard: ["5M"], - shadowball: ["5M"], - shadowclaw: ["5M"], - slash: ["5L36"], - stoneedge: ["5M"], - strength: ["5M"], - substitute: ["5M"], - sunnyday: ["5M"], - swagger: ["5M"], - toxic: ["5M"], - }, - }, - kyuremwhite: { - inherit: true, - learnset: { - ancientpower: ["5L15"], - blizzard: ["5M", "5L78"], - cut: ["5M"], - doubleteam: ["5M"], - dracometeor: ["5T"], - dragonbreath: ["5L29"], - dragonclaw: ["5M"], - dragonpulse: ["5L57", "5S0", "5S1"], - dragonrage: ["5L1"], - dragontail: ["5M"], - echoedvoice: ["5M"], - endeavor: ["5L71", "5S0"], - facade: ["5M"], - flashcannon: ["5M"], - fling: ["5M"], - fly: ["5M"], - focusblast: ["5M"], - frustration: ["5M"], - fusionflare: ["5L50", "5S1"], - gigaimpact: ["5M"], - hail: ["5M"], - hiddenpower: ["5M"], - honeclaws: ["5M"], - hyperbeam: ["5M"], - hypervoice: ["5L92"], - icebeam: ["5M", "5L22"], - iceburn: ["5L43", "5S0", "5S1"], - icywind: ["5L1"], - imprison: ["5L8", "5S0", "5S1"], - lightscreen: ["5M"], - outrage: ["5L85"], - payback: ["5M"], - protect: ["5M"], - psychic: ["5M"], - raindance: ["5M"], - reflect: ["5M"], - rest: ["5M"], - return: ["5M"], - rockslide: ["5M"], - rocksmash: ["5M"], - rocktomb: ["5M"], - round: ["5M"], - safeguard: ["5M"], - shadowball: ["5M"], - shadowclaw: ["5M"], - slash: ["5L36"], - stoneedge: ["5M"], - strength: ["5M"], - substitute: ["5M"], - sunnyday: ["5M"], - swagger: ["5M"], - toxic: ["5M"], - }, - }, keldeo: { inherit: true, learnset: { diff --git a/data/mods/gen5bw1/pokedex.ts b/data/mods/gen5bw1/pokedex.ts index bbc0175826d5..742f17ea99ff 100644 --- a/data/mods/gen5bw1/pokedex.ts +++ b/data/mods/gen5bw1/pokedex.ts @@ -1,4 +1,4 @@ -export const Pokedex: {[k: string]: ModdedSpeciesData} = { +export const Pokedex: import('../../../sim/dex-species').ModdedSpeciesDataTable = { weedle: { inherit: true, unreleasedHidden: true, @@ -43,6 +43,10 @@ export const Pokedex: {[k: string]: ModdedSpeciesData} = { inherit: true, unreleasedHidden: true, }, + ditto: { + inherit: true, + unreleasedHidden: true, + }, snorlax: { inherit: true, unreleasedHidden: true, @@ -63,6 +67,14 @@ export const Pokedex: {[k: string]: ModdedSpeciesData} = { inherit: true, unreleasedHidden: true, }, + lugia: { + inherit: true, + unreleasedHidden: true, + }, + hooh: { + inherit: true, + unreleasedHidden: true, + }, wurmple: { inherit: true, unreleasedHidden: true, @@ -187,6 +199,18 @@ export const Pokedex: {[k: string]: ModdedSpeciesData} = { inherit: true, unreleasedHidden: true, }, + dialga: { + inherit: true, + unreleasedHidden: true, + }, + palkia: { + inherit: true, + unreleasedHidden: true, + }, + giratina: { + inherit: true, + unreleasedHidden: true, + }, patrat: { inherit: true, unreleasedHidden: true, @@ -195,7 +219,7 @@ export const Pokedex: {[k: string]: ModdedSpeciesData} = { inherit: true, unreleasedHidden: true, }, - lillpup: { + lillipup: { inherit: true, unreleasedHidden: true, }, @@ -359,7 +383,7 @@ export const Pokedex: {[k: string]: ModdedSpeciesData} = { inherit: true, unreleasedHidden: true, }, - lillgant: { + lilligant: { inherit: true, unreleasedHidden: true, }, diff --git a/data/mods/gen6/abilities.ts b/data/mods/gen6/abilities.ts index def809f0ac31..5d91c41eb83d 100644 --- a/data/mods/gen6/abilities.ts +++ b/data/mods/gen6/abilities.ts @@ -1,4 +1,4 @@ -export const Abilities: {[k: string]: ModdedAbilityData} = { +export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTable = { aerilate: { inherit: true, onBasePower(basePower, pokemon, target, move) { @@ -54,6 +54,7 @@ export const Abilities: {[k: string]: ModdedAbilityData} = { move.type = 'Normal'; } }, + onBasePower() {}, rating: -1, }, parentalbond: { @@ -121,6 +122,6 @@ export const Abilities: {[k: string]: ModdedAbilityData} = { }, zenmode: { inherit: true, - isPermanent: false, + flags: {failroleplay: 1, noentrain: 1, notrace: 1}, }, }; diff --git a/data/mods/gen6/conditions.ts b/data/mods/gen6/conditions.ts index 33997b63c15f..fedfe5dafae7 100644 --- a/data/mods/gen6/conditions.ts +++ b/data/mods/gen6/conditions.ts @@ -1,4 +1,4 @@ -export const Conditions: {[k: string]: ModdedConditionData} = { +export const Conditions: import('../../../sim/dex-conditions').ModdedConditionDataTable = { brn: { inherit: true, onResidual(pokemon) { diff --git a/data/mods/gen6/formats-data.ts b/data/mods/gen6/formats-data.ts index 526a112d64f8..eb91b9423077 100644 --- a/data/mods/gen6/formats-data.ts +++ b/data/mods/gen6/formats-data.ts @@ -1,4 +1,4 @@ -export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { +export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormatsDataTable = { bulbasaur: { tier: "LC", }, diff --git a/data/mods/gen6/items.ts b/data/mods/gen6/items.ts index 6b822fe8d5b2..ebf483dd329c 100644 --- a/data/mods/gen6/items.ts +++ b/data/mods/gen6/items.ts @@ -1,4 +1,4 @@ -export const Items: {[k: string]: ModdedItemData} = { +export const Items: import('../../../sim/dex-items').ModdedItemDataTable = { aguavberry: { inherit: true, onUpdate(pokemon) { diff --git a/data/mods/gen6/learnsets.ts b/data/mods/gen6/learnsets.ts index ec925e49ccd5..0c25790ff3ea 100644 --- a/data/mods/gen6/learnsets.ts +++ b/data/mods/gen6/learnsets.ts @@ -1,4 +1,4 @@ -export const Learnsets: {[k: string]: ModdedLearnsetData} = { +export const Learnsets: import('../../../sim/dex-species').ModdedLearnsetDataTable = { tomohawk: { inherit: true, learnset: { diff --git a/data/mods/gen6/moves.ts b/data/mods/gen6/moves.ts index 21fa1dbcb21d..01a560af818d 100644 --- a/data/mods/gen6/moves.ts +++ b/data/mods/gen6/moves.ts @@ -1,4 +1,4 @@ -export const Moves: {[k: string]: ModdedMoveData} = { +export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = { allyswitch: { inherit: true, priority: 1, @@ -201,7 +201,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { }, rockblast: { inherit: true, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, }, sheercold: { inherit: true, diff --git a/data/mods/gen6/pokedex.ts b/data/mods/gen6/pokedex.ts index 2714d78bab35..8bf3af4e713e 100644 --- a/data/mods/gen6/pokedex.ts +++ b/data/mods/gen6/pokedex.ts @@ -1,4 +1,4 @@ -export const Pokedex: {[k: string]: ModdedSpeciesData} = { +export const Pokedex: import('../../../sim/dex-species').ModdedSpeciesDataTable = { charizardmegax: { inherit: true, color: "Red", diff --git a/data/mods/gen6/typechart.ts b/data/mods/gen6/typechart.ts index 9ea29b6bb00e..e267f56e4509 100644 --- a/data/mods/gen6/typechart.ts +++ b/data/mods/gen6/typechart.ts @@ -1,4 +1,4 @@ -export const TypeChart: {[k: string]: ModdedTypeData} = { +export const TypeChart: import('../../../sim/dex-data').ModdedTypeDataTable = { dark: { inherit: true, damageTaken: { diff --git a/data/mods/gen6megasrevisited/abilities.ts b/data/mods/gen6megasrevisited/abilities.ts new file mode 100644 index 000000000000..7dc198d1d480 --- /dev/null +++ b/data/mods/gen6megasrevisited/abilities.ts @@ -0,0 +1,369 @@ +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 + onPreStart(pokemon) {}, + onEnd(source) {}, + 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'].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 new file mode 100644 index 000000000000..a5d97dda3883 --- /dev/null +++ b/data/mods/gen6megasrevisited/formats-data.ts @@ -0,0 +1,26 @@ +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 new file mode 100644 index 000000000000..0e59057f55c7 --- /dev/null +++ b/data/mods/gen6megasrevisited/items.ts @@ -0,0 +1,14 @@ +export const Items: import('../../../sim/dex-items').ModdedItemDataTable = { + meteorite: { + name: "Meteorite", + spritenum: 615, + megaStone: "Rayquaza-Mega", + megaEvolves: "Rayquaza", + itemUser: ["Rayquaza"], + onTakeItem(item, source) { + if (item.megaEvolves === source.baseSpecies.baseSpecies) return false; + return true; + }, + 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 new file mode 100644 index 000000000000..3a46b7d76cf1 --- /dev/null +++ b/data/mods/gen6megasrevisited/moves.ts @@ -0,0 +1,77 @@ +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'); + }, + onEntryHazard(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 * Math.pow(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++; + }, + onEntryHazard(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')) { + return; + } 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++; + }, + onEntryHazard(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'); + }, + onEntryHazard(pokemon) { + if (!pokemon.isGrounded() || pokemon.hasItem('heavydutyboots') || pokemon.hasAbility('exoskeleton')) return; + this.add('-activate', pokemon, 'move: Sticky Web'); + this.boost({spe: -1}, pokemon, this.effectState.source, this.dex.getActiveMove('stickyweb')); + }, + }, + }, +}; diff --git a/data/mods/gen6megasrevisited/pokedex.ts b/data/mods/gen6megasrevisited/pokedex.ts new file mode 100644 index 000000000000..3cb693dadd7d --- /dev/null +++ b/data/mods/gen6megasrevisited/pokedex.ts @@ -0,0 +1,249 @@ +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: 65, atk: 60, 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: 65, spd: 127, spe: 108}, + 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 new file mode 100644 index 000000000000..3b2a3dd9b54c --- /dev/null +++ b/data/mods/gen6megasrevisited/rulesets.ts @@ -0,0 +1,33 @@ +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 new file mode 100644 index 000000000000..0f8b2e581ae7 --- /dev/null +++ b/data/mods/gen6megasrevisited/scripts.ts @@ -0,0 +1,231 @@ +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 = move.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.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); + } + } + if (this.battle.gen === 5 && !baseDamage) baseDamage = 1; + 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); + } + if (this.battle.gen !== 5 && !baseDamage) return 1; + return tr(baseDamage, 16); + }, + }, + pokemon: { + // for neutralizing gas + ignoringAbility() { + if (this.battle.gen >= 5 && !this.isActive) 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/gen6xy/formats-data.ts b/data/mods/gen6xy/formats-data.ts index 6d6becbc0fc4..959b35b549db 100644 --- a/data/mods/gen6xy/formats-data.ts +++ b/data/mods/gen6xy/formats-data.ts @@ -1,4 +1,4 @@ -export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { +export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormatsDataTable = { beedrillmega: { isNonstandard: "Future", tier: "Illegal", diff --git a/data/mods/gen6xy/items.ts b/data/mods/gen6xy/items.ts index 989b05429628..6f0871f2a456 100644 --- a/data/mods/gen6xy/items.ts +++ b/data/mods/gen6xy/items.ts @@ -1,4 +1,4 @@ -export const Items: {[k: string]: ModdedItemData} = { +export const Items: import('../../../sim/dex-items').ModdedItemDataTable = { altarianite: { inherit: true, isNonstandard: "Future", diff --git a/data/mods/gen6xy/learnsets.ts b/data/mods/gen6xy/learnsets.ts index cd5270584d65..63b66371c538 100644 --- a/data/mods/gen6xy/learnsets.ts +++ b/data/mods/gen6xy/learnsets.ts @@ -1,4 +1,4 @@ -export const Learnsets: {[k: string]: ModdedLearnsetData} = { +export const Learnsets: import('../../../sim/dex-species').ModdedLearnsetDataTable = { bulbasaur: { inherit: true, learnset: { @@ -31885,14 +31885,14 @@ export const Learnsets: {[k: string]: ModdedLearnsetData} = { calmmind: ["6M", "5M", "4M", "3M"], chargebeam: ["6M", "5M", "4M"], confide: ["6M"], - confusion: ["6L1", "6S18", "6S20", "6S21", "5L1", "4L1", "4S11", "4S12", "3L1", "3S0", "3S1", "3S2", "3S3", "3S4", "3S5", "3S6", "3S7", "3S8", "3S9"], - cosmicpower: ["6L60", "6S19", "5L60", "5S15", "4L60", "3L45"], + confusion: ["6L1", "6S10", "6S12", "6S13", "5L1", "4L1", "4S3", "4S4", "3L1", "3S0", "3S1"], + cosmicpower: ["6L60", "6S11", "5L60", "5S7", "4L60", "3L45"], dazzlinggleam: ["6M"], defensecurl: ["3T"], doomdesire: ["6L70", "5L70", "4L70", "3L50"], doubleedge: ["6L40", "5L40", "4L40", "3T", "3L35"], doubleteam: ["6M", "5M", "4M", "3M"], - dracometeor: ["5S14", "4S12"], + dracometeor: ["5S6", "4S4"], drainpunch: ["5T", "4M"], dreameater: ["6M", "5M", "4M", "3T"], dynamicpunch: ["3T"], @@ -31903,15 +31903,15 @@ export const Learnsets: {[k: string]: ModdedLearnsetData} = { flash: ["6M", "5M", "4M", "3M"], flashcannon: ["6M", "5M", "4M"], fling: ["6M", "5M", "4M"], - followme: ["5S14"], + followme: ["5S6"], frustration: ["6M", "5M", "4M", "3M"], futuresight: ["6L55", "5L55", "4L55", "3L40"], gigaimpact: ["6M", "5M", "4M"], grassknot: ["6M", "5M", "4M"], gravity: ["6L45", "5T", "5L45", "4T", "4L45"], headbutt: ["4T"], - healingwish: ["6L50", "6S17", "5L50", "5S13", "5S15", "5S16", "4L50"], - helpinghand: ["6L15", "6S18", "5T", "5L15", "4T", "4L15", "3L15", "3S10"], + healingwish: ["6L50", "6S9", "5L50", "5S5", "5S7", "5S8", "4L50"], + helpinghand: ["6L15", "6S10", "5T", "5L15", "4T", "4L15", "3L15", "3S2"], hiddenpower: ["6M", "5M", "4M", "3M"], hyperbeam: ["6M", "5M", "4M", "3M"], icepunch: ["5T", "4T", "3T"], @@ -31922,24 +31922,24 @@ export const Learnsets: {[k: string]: ModdedLearnsetData} = { lightscreen: ["6M", "5M", "4M", "3M"], magiccoat: ["5T", "4T"], magicroom: ["5T"], - meteormash: ["5S13", "5S14", "5S15"], + meteormash: ["5S5", "5S6", "5S7"], metronome: ["3T"], mimic: ["3T"], - moonblast: ["6S17"], + moonblast: ["6S9"], mudslap: ["4T", "3T"], naturalgift: ["4M"], nightmare: ["3T"], poweruppunch: ["6M"], protect: ["6M", "5M", "4M", "3M"], - psychic: ["6M", "6L20", "5M", "5L20", "5S13", "4M", "4L20", "3M", "3L20", "3S10"], + psychic: ["6M", "6L20", "5M", "5L20", "5S5", "4M", "4L20", "3M", "3L20", "3S2"], psychup: ["6M", "5M", "4M", "3T"], psyshock: ["6M", "5M"], raindance: ["6M", "5M", "4M", "3M"], recycle: ["5T", "4M"], reflect: ["6M", "5M", "4M", "3M"], - refresh: ["6L25", "5L25", "4L25", "3L25", "3S10"], - rest: ["6M", "6L5", "6S21", "5M", "5L5", "4M", "4L5", "4S11", "4S12", "3M", "3L5", "3S0", "3S1", "3S2", "3S3", "3S4", "3S5", "3S6", "3S7", "3S8", "3S9", "3S10"], - return: ["6M", "6S18", "5M", "5S16", "4M", "3M"], + refresh: ["6L25", "5L25", "4L25", "3L25", "3S2"], + rest: ["6M", "6L5", "6S13", "5M", "5L5", "4M", "4L5", "4S3", "4S4", "3M", "3L5", "3S0", "3S1", "3S2"], + return: ["6M", "6S10", "5M", "5S8", "4M", "3M"], round: ["6M", "5M"], safeguard: ["6M", "5M", "4M", "3M"], sandstorm: ["6M", "5M", "4M", "3M"], @@ -31954,7 +31954,7 @@ export const Learnsets: {[k: string]: ModdedLearnsetData} = { substitute: ["6M", "5M", "4M", "3T"], sunnyday: ["6M", "5M", "4M", "3M"], swagger: ["6M", "5M", "4M", "3T"], - swift: ["6L10", "6S17", "6S20", "5L10", "5S13", "5S16", "4T", "4L10", "3T", "3L10"], + swift: ["6L10", "6S9", "6S12", "5L10", "5S5", "5S8", "4T", "4L10", "3T", "3L10"], telekinesis: ["5M"], thunder: ["6M", "5M", "4M", "3M"], thunderbolt: ["6M", "5M", "4M", "3M"], @@ -31966,7 +31966,7 @@ export const Learnsets: {[k: string]: ModdedLearnsetData} = { uproar: ["5T", "4T"], uturn: ["6M", "5M", "4M"], waterpulse: ["4M", "3M"], - wish: ["6L1", "6S17", "6S18", "6S19", "6S20", "6S21", "5L1", "5S14", "5S15", "5S16", "4L1", "4S11", "4S12", "3L1", "3S0", "3S1", "3S2", "3S3", "3S4", "3S5", "3S6", "3S7", "3S8", "3S9"], + wish: ["6L1", "6S9", "6S10", "6S11", "6S12", "6S13", "5L1", "5S6", "5S7", "5S8", "4L1", "4S3", "4S4", "3L1", "3S0", "3S1"], zenheadbutt: ["6L35", "5T", "5L35", "4T", "4L35"], }, }, diff --git a/data/mods/gen6xy/moves.ts b/data/mods/gen6xy/moves.ts index f2017d6446e9..6f0e1aa8dbc2 100644 --- a/data/mods/gen6xy/moves.ts +++ b/data/mods/gen6xy/moves.ts @@ -1,4 +1,4 @@ -export const Moves: {[k: string]: ModdedMoveData} = { +export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = { dragonascent: { inherit: true, isNonstandard: "Future", diff --git a/data/mods/gen6xy/pokedex.ts b/data/mods/gen6xy/pokedex.ts index 579941112037..228ab61532e9 100644 --- a/data/mods/gen6xy/pokedex.ts +++ b/data/mods/gen6xy/pokedex.ts @@ -1,4 +1,4 @@ -export const Pokedex: {[k: string]: ModdedSpeciesData} = { +export const Pokedex: import('../../../sim/dex-species').ModdedSpeciesDataTable = { pikachu: { inherit: true, formeOrder: ["Pikachu"], diff --git a/data/mods/gen7/abilities.ts b/data/mods/gen7/abilities.ts index 13cdad8bd6a4..6d57c8da206d 100644 --- a/data/mods/gen7/abilities.ts +++ b/data/mods/gen7/abilities.ts @@ -1,4 +1,4 @@ -export const Abilities: {[k: string]: ModdedAbilityData} = { +export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTable = { disguise: { inherit: true, onDamage(damage, target, source, effect) { @@ -24,21 +24,17 @@ export const Abilities: {[k: string]: ModdedAbilityData} = { }, darkaura: { inherit: true, - isBreakable: true, + flags: {breakable: 1}, }, fairyaura: { inherit: true, - isBreakable: true, + flags: {breakable: 1}, }, innerfocus: { inherit: true, rating: 1, onTryBoost() {}, }, - intimidate: { - inherit: true, - rating: 4, - }, moody: { inherit: true, onResidual(pokemon) { diff --git a/data/mods/gen7/formats-data.ts b/data/mods/gen7/formats-data.ts index 4585f0639ba4..4fc2cef0cb26 100644 --- a/data/mods/gen7/formats-data.ts +++ b/data/mods/gen7/formats-data.ts @@ -1,4 +1,4 @@ -export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { +export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormatsDataTable = { bulbasaur: { tier: "LC", }, diff --git a/data/mods/gen7/items.ts b/data/mods/gen7/items.ts index 076c4a3586a3..ba2a647e3599 100644 --- a/data/mods/gen7/items.ts +++ b/data/mods/gen7/items.ts @@ -1,4 +1,4 @@ -export const Items: {[k: string]: ModdedItemData} = { +export const Items: import('../../../sim/dex-items').ModdedItemDataTable = { abomasite: { inherit: true, isNonstandard: null, @@ -80,7 +80,7 @@ export const Items: {[k: string]: ModdedItemData} = { }, blukberry: { inherit: true, - isNonstandard: "Unobtainable", + isNonstandard: null, }, buggem: { inherit: true, @@ -451,7 +451,7 @@ export const Items: {[k: string]: ModdedItemData} = { }, pinapberry: { inherit: true, - isNonstandard: "Unobtainable", + isNonstandard: null, }, pinsirite: { inherit: true, diff --git a/data/mods/gen7/moves.ts b/data/mods/gen7/moves.ts index 850efdb363bb..bb1b097a9534 100644 --- a/data/mods/gen7/moves.ts +++ b/data/mods/gen7/moves.ts @@ -1,4 +1,4 @@ -export const Moves: {[k: string]: ModdedMoveData} = { +export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = { "10000000voltthunderbolt": { inherit: true, isNonstandard: null, @@ -153,7 +153,9 @@ export const Moves: {[k: string]: ModdedMoveData} = { }, dive: { inherit: true, - flags: {contact: 1, charge: 1, protect: 1, mirror: 1, nonsky: 1, nosleeptalk: 1, noassist: 1, failinstruct: 1}, + flags: { + contact: 1, charge: 1, protect: 1, mirror: 1, nonsky: 1, metronome: 1, nosleeptalk: 1, noassist: 1, failinstruct: 1, + }, }, dizzypunch: { inherit: true, @@ -167,6 +169,10 @@ export const Moves: {[k: string]: ModdedMoveData} = { inherit: true, isNonstandard: null, }, + dragonhammer: { + inherit: true, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, + }, dragonrage: { inherit: true, isNonstandard: null, @@ -497,7 +503,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { }, howl: { inherit: true, - flags: {snatch: 1}, + flags: {snatch: 1, metronome: 1}, boosts: { atk: 1, }, @@ -642,12 +648,6 @@ export const Moves: {[k: string]: ModdedMoveData} = { inherit: true, isNonstandard: null, }, - metronome: { - inherit: true, - noMetronome: [ - "After You", "Assist", "Baneful Bunker", "Beak Blast", "Belch", "Bestow", "Celebrate", "Chatter", "Copycat", "Counter", "Covet", "Crafty Shield", "Destiny Bond", "Detect", "Diamond Storm", "Dragon Ascent", "Endure", "Feint", "Fleur Cannon", "Focus Punch", "Follow Me", "Freeze Shock", "Helping Hand", "Hold Hands", "Hyperspace Fury", "Hyperspace Hole", "Ice Burn", "Instruct", "King's Shield", "Light of Ruin", "Mat Block", "Me First", "Metronome", "Mimic", "Mind Blown", "Mirror Coat", "Mirror Move", "Nature Power", "Origin Pulse", "Photon Geyser", "Plasma Fists", "Precipice Blades", "Protect", "Quash", "Quick Guard", "Rage Powder", "Relic Song", "Secret Sword", "Shell Trap", "Sketch", "Sleep Talk", "Snarl", "Snatch", "Snore", "Spectral Thief", "Spiky Shield", "Spotlight", "Steam Eruption", "Struggle", "Switcheroo", "Techno Blast", "Thief", "Thousand Arrows", "Thousand Waves", "Transform", "Trick", "V-create", "Wide Guard", - ], - }, miracleeye: { inherit: true, isNonstandard: null, @@ -660,6 +660,10 @@ export const Moves: {[k: string]: ModdedMoveData} = { inherit: true, isNonstandard: null, }, + moongeistbeam: { + inherit: true, + flags: {protect: 1, mirror: 1, metronome: 1}, + }, moonlight: { inherit: true, onHit(pokemon) { @@ -724,6 +728,10 @@ export const Moves: {[k: string]: ModdedMoveData} = { inherit: true, isNonstandard: null, }, + naturesmadness: { + inherit: true, + flags: {protect: 1, mirror: 1, metronome: 1}, + }, needlearm: { inherit: true, isNonstandard: null, @@ -750,7 +758,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { }, pollenpuff: { inherit: true, - flags: {bullet: 1, protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1, bullet: 1}, onHit(target, source) { if (source.isAlly(target)) { if (!this.heal(Math.floor(target.baseMaxhp * 0.5))) { @@ -1024,6 +1032,10 @@ export const Moves: {[k: string]: ModdedMoveData} = { inherit: true, isNonstandard: null, }, + sunsteelstrike: { + inherit: true, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, + }, supersonicskystrike: { inherit: true, isNonstandard: null, diff --git a/data/mods/gen7/pokedex.ts b/data/mods/gen7/pokedex.ts index f94f6ec63005..b4662fc1b2e3 100644 --- a/data/mods/gen7/pokedex.ts +++ b/data/mods/gen7/pokedex.ts @@ -1,4 +1,4 @@ -export const Pokedex: {[k: string]: ModdedSpeciesData} = { +export const Pokedex: import('../../../sim/dex-species').ModdedSpeciesDataTable = { pikachuoriginal: { inherit: true, abilities: {0: "Static"}, diff --git a/data/mods/gen7/random-doubles-data.json b/data/mods/gen7/random-doubles-data.json deleted file mode 100644 index 736566d59472..000000000000 --- a/data/mods/gen7/random-doubles-data.json +++ /dev/null @@ -1,1739 +0,0 @@ -{ - "venusaur": { - "moves": ["gigadrain", "hiddenpowerfire", "hiddenpowerice", "powerwhip", "protect", "sleeppowder", "sludgebomb"] - }, - "venusaurmega": { - "moves": ["gigadrain", "hiddenpowerfire", "hiddenpowerice", "powerwhip", "protect", "sleeppowder", "sludgebomb"] - }, - "charizard": { - "moves": ["airslash", "fireblast", "focusblast", "heatwave", "holdhands", "protect", "roost"] - }, - "charizardmegax": { - "moves": ["dragonclaw", "dragondance", "flareblitz", "rockslide", "roost", "thunderpunch"] - }, - "charizardmegay": { - "moves": ["airslash", "fireblast", "focusblast", "heatwave", "protect", "solarbeam"] - }, - "blastoise": { - "moves": ["fakeout", "followme", "icywind", "muddywater", "protect", "rapidspin", "scald"] - }, - "blastoisemega": { - "moves": ["aurasphere", "darkpulse", "fakeout", "icebeam", "muddywater", "protect", "waterpulse"] - }, - "butterfree": { - "moves": ["airslash", "bugbuzz", "protect", "quiverdance", "sleeppowder"] - }, - "beedrill": { - "moves": ["knockoff", "poisonjab", "protect", "tailwind", "toxicspikes", "uturn"] - }, - "beedrillmega": { - "moves": ["drillrun", "knockoff", "poisonjab", "protect", "uturn", "xscissor"] - }, - "pidgeot": { - "moves": ["bravebird", "doubleedge", "heatwave", "protect", "return", "tailwind", "uturn"] - }, - "pidgeotmega": { - "moves": ["heatwave", "hurricane", "protect", "tailwind", "uturn"] - }, - "raticate": { - "moves": ["crunch", "facade", "protect", "stompingtantrum", "suckerpunch", "uturn"] - }, - "raticatealola": { - "moves": ["doubleedge", "knockoff", "protect", "suckerpunch", "uturn"] - }, - "fearow": { - "moves": ["doubleedge", "drillpeck", "drillrun", "protect", "quickattack", "return", "uturn"] - }, - "arbok": { - "moves": ["aquatail", "coil", "gunkshot", "protect", "stompingtantrum", "suckerpunch"] - }, - "pikachu": { - "moves": ["encore", "fakeout", "grassknot", "hiddenpowerice", "knockoff", "protect", "voltswitch", "volttackle"] - }, - "raichu": { - "moves": ["encore", "fakeout", "focusblast", "grassknot", "hiddenpowerice", "protect", "thunderbolt", "voltswitch"] - }, - "raichualola": { - "moves": ["fakeout", "grassknot", "nastyplot", "protect", "psyshock", "thunderbolt", "voltswitch"] - }, - "sandslash": { - "moves": ["earthquake", "knockoff", "protect", "stealthrock", "stoneedge", "swordsdance"] - }, - "sandslashalola": { - "moves": ["drillrun", "iciclecrash", "ironhead", "protect", "swordsdance"] - }, - "nidoqueen": { - "moves": ["earthpower", "icebeam", "protect", "sludgebomb", "stealthrock"] - }, - "nidoking": { - "moves": ["earthpower", "fireblast", "icebeam", "protect", "sludgebomb"] - }, - "clefable": { - "moves": ["dazzlinggleam", "fireblast", "followme", "helpinghand", "moonblast", "protect", "softboiled", "thunderwave"] - }, - "ninetales": { - "moves": ["fireblast", "heatwave", "nastyplot", "protect", "solarbeam", "willowisp"] - }, - "ninetalesalola": { - "moves": ["auroraveil", "blizzard", "encore", "freezedry", "hiddenpowerfire", "moonblast", "protect"] - }, - "wigglytuff": { - "moves": ["dazzlinggleam", "fireblast", "hypervoice", "protect", "stealthrock", "thunderwave"] - }, - "vileplume": { - "moves": ["energyball", "hiddenpowerfire", "protect", "sleeppowder", "sludgebomb", "strengthsap"] - }, - "parasect": { - "moves": ["knockoff", "leechlife", "leechseed", "protect", "ragepowder", "seedbomb", "spore", "wideguard"] - }, - "venomoth": { - "moves": ["bugbuzz", "protect", "quiverdance", "ragepowder", "sleeppowder", "sludgebomb"] - }, - "dugtrio": { - "moves": ["earthquake", "protect", "rockslide", "stoneedge", "suckerpunch"] - }, - "dugtrioalola": { - "moves": ["earthquake", "ironhead", "protect", "rockslide", "stoneedge", "suckerpunch"] - }, - "persian": { - "moves": ["fakeout", "hypnosis", "knockoff", "protect", "return", "taunt", "uturn"] - }, - "persianalola": { - "moves": ["fakeout", "foulplay", "hiddenpowerfighting", "icywind", "partingshot", "protect", "snarl"] - }, - "golduck": { - "moves": ["calmmind", "encore", "focusblast", "hydropump", "icebeam", "protect", "scald"] - }, - "primeape": { - "moves": ["closecombat", "icepunch", "poisonjab", "protect", "rockslide", "stompingtantrum", "stoneedge", "taunt", "uturn"] - }, - "arcanine": { - "moves": ["closecombat", "extremespeed", "flareblitz", "protect", "snarl", "wildcharge", "willowisp"] - }, - "poliwrath": { - "moves": ["circlethrow", "encore", "icywind", "protect", "scald", "superpower", "toxic"] - }, - "alakazam": { - "moves": ["dazzlinggleam", "encore", "focusblast", "protect", "psychic", "shadowball"] - }, - "alakazammega": { - "moves": ["calmmind", "encore", "focusblast", "protect", "psychic", "shadowball"] - }, - "machamp": { - "moves": ["bulletpunch", "closecombat", "facade", "knockoff", "protect", "stoneedge", "wideguard"] - }, - "victreebel": { - "moves": ["growth", "knockoff", "powerwhip", "protect", "sleeppowder", "sludgebomb", "solarbeam", "suckerpunch", "sunnyday", "weatherball"] - }, - "tentacruel": { - "moves": ["acidspray", "knockoff", "muddywater", "protect", "rapidspin", "scald", "sludgebomb"] - }, - "golem": { - "moves": ["earthquake", "protect", "rockslide", "stealthrock", "stoneedge", "suckerpunch"] - }, - "golemalola": { - "moves": ["doubleedge", "protect", "rockslide", "stealthrock", "stompingtantrum", "stoneedge"] - }, - "rapidash": { - "moves": ["flareblitz", "highhorsepower", "hypnosis", "protect", "wildcharge", "willowisp"] - }, - "slowbro": { - "moves": ["protect", "psychic", "psyshock", "scald", "slackoff", "thunderwave", "toxic"] - }, - "slowbromega": { - "moves": ["fireblast", "icebeam", "protect", "psychic", "psyshock", "scald", "slackoff", "trickroom"] - }, - "farfetchd": { - "moves": ["bravebird", "knockoff", "leafblade", "protect", "return", "swordsdance"] - }, - "dodrio": { - "moves": ["bravebird", "knockoff", "protect", "quickattack", "return", "swordsdance"] - }, - "dewgong": { - "moves": ["encore", "fakeout", "helpinghand", "icebeam", "icywind", "liquidation", "protect", "toxic"] - }, - "muk": { - "moves": ["firepunch", "gunkshot", "icepunch", "poisonjab", "protect", "shadowsneak"] - }, - "mukalola": { - "moves": ["gunkshot", "knockoff", "poisonjab", "protect", "shadowsneak", "snarl", "stoneedge"] - }, - "cloyster": { - "moves": ["hydropump", "iciclespear", "protect", "rockblast", "shellsmash"] - }, - "gengar": { - "moves": ["focusblast", "protect", "shadowball", "sludgebomb", "taunt", "willowisp"] - }, - "gengarmega": { - "moves": ["disable", "focusblast", "hypnosis", "protect", "shadowball", "sludgebomb", "willowisp"] - }, - "hypno": { - "moves": ["hypnosis", "protect", "psychic", "seismictoss", "thunderwave"] - }, - "kingler": { - "moves": ["agility", "knockoff", "liquidation", "protect", "rockslide", "wideguard", "xscissor"] - }, - "electrode": { - "moves": ["foulplay", "protect", "taunt", "thunderbolt", "thunderwave", "voltswitch"] - }, - "exeggutor": { - "moves": ["energyball", "hiddenpowerfire", "leechseed", "protect", "psychic", "sleeppowder", "substitute", "trickroom"] - }, - "exeggutoralola": { - "moves": ["dracometeor", "dragonhammer", "flamethrower", "leafstorm", "protect", "trickroom", "woodhammer"] - }, - "marowak": { - "moves": ["bonemerang", "doubleedge", "firepunch", "protect", "rockslide", "stealthrock", "swordsdance"] - }, - "marowakalola": { - "moves": ["bonemerang", "flareblitz", "protect", "shadowbone", "stoneedge", "willowisp"] - }, - "hitmonlee": { - "moves": ["closecombat", "fakeout", "knockoff", "machpunch", "protect", "rockslide"] - }, - "hitmonchan": { - "moves": ["drainpunch", "fakeout", "firepunch", "icepunch", "machpunch", "protect"] - }, - "weezing": { - "moves": ["fireblast", "painsplit", "protect", "sludgebomb", "toxicspikes", "willowisp"] - }, - "rhydon": { - "moves": ["earthquake", "megahorn", "stealthrock", "stoneedge", "toxic"] - }, - "chansey": { - "moves": ["helpinghand", "protect", "seismictoss", "softboiled", "thunderwave", "toxic"] - }, - "kangaskhan": { - "moves": ["crunch", "doubleedge", "drainpunch", "earthquake", "fakeout", "protect", "return", "suckerpunch"] - }, - "kangaskhanmega": { - "moves": ["drainpunch", "earthquake", "fakeout", "poweruppunch", "protect", "return", "suckerpunch"] - }, - "seaking": { - "moves": ["drillrun", "icywind", "knockoff", "megahorn", "protect", "waterfall"] - }, - "starmie": { - "moves": ["hydropump", "icebeam", "protect", "psychic", "psyshock", "scald", "thunderbolt"] - }, - "mrmime": { - "moves": ["dazzlinggleam", "encore", "fakeout", "followme", "hiddenpowerfighting", "icywind", "protect", "psychic", "thunderbolt", "thunderwave", "wideguard"] - }, - "scyther": { - "moves": ["aerialace", "brickbreak", "bugbite", "feint", "knockoff", "protect", "swordsdance", "uturn"] - }, - "jynx": { - "moves": ["focusblast", "icebeam", "lovelykiss", "nastyplot", "protect", "psychic", "psyshock"] - }, - "pinsir": { - "moves": ["closecombat", "feint", "knockoff", "protect", "rockslide", "xscissor"] - }, - "pinsirmega": { - "moves": ["closecombat", "feint", "protect", "quickattack", "return", "rockslide", "swordsdance"] - }, - "tauros": { - "moves": ["doubleedge", "protect", "return", "rockslide", "stompingtantrum", "stoneedge", "zenheadbutt"] - }, - "gyarados": { - "moves": ["bounce", "dragondance", "protect", "stoneedge", "thunderwave", "waterfall"] - }, - "gyaradosmega": { - "moves": ["crunch", "dragondance", "icefang", "protect", "taunt", "thunderwave", "waterfall"] - }, - "lapras": { - "moves": ["freezedry", "helpinghand", "hydropump", "iceshard", "icywind", "protect"] - }, - "ditto": { - "moves": ["transform"] - }, - "vaporeon": { - "moves": ["helpinghand", "icywind", "muddywater", "protect", "scald", "toxic"] - }, - "jolteon": { - "moves": ["helpinghand", "hiddenpowergrass", "hiddenpowerice", "protect", "signalbeam", "thunderbolt", "voltswitch"] - }, - "flareon": { - "moves": ["facade", "flamecharge", "flareblitz", "protect", "superpower"] - }, - "omastar": { - "moves": ["earthpower", "hiddenpowerelectric", "hydropump", "icebeam", "muddywater", "protect", "shellsmash"] - }, - "kabutops": { - "moves": ["aquajet", "knockoff", "liquidation", "protect", "rockslide", "stoneedge", "swordsdance"] - }, - "aerodactyl": { - "moves": ["earthquake", "protect", "rockslide", "skydrop", "stoneedge", "tailwind", "wideguard"] - }, - "aerodactylmega": { - "moves": ["aquatail", "protect", "rockslide", "skydrop", "stoneedge", "tailwind", "wideguard"] - }, - "snorlax": { - "moves": ["bodyslam", "crunch", "curse", "highhorsepower", "protect", "rest", "return"] - }, - "articuno": { - "moves": ["freezedry", "hurricane", "protect", "roost", "tailwind"] - }, - "zapdos": { - "moves": ["heatwave", "hiddenpowergrass", "hiddenpowerice", "protect", "roost", "tailwind", "thunderbolt"] - }, - "moltres": { - "moves": ["airslash", "fireblast", "heatwave", "hurricane", "protect", "tailwind", "uturn", "willowisp"] - }, - "dragonite": { - "moves": ["dragonclaw", "dragondance", "extremespeed", "firepunch", "fly", "protect", "roost", "superpower"] - }, - "mewtwo": { - "moves": ["aurasphere", "calmmind", "fireblast", "icebeam", "protect", "psystrike"] - }, - "mewtwomegax": { - "moves": ["bulkup", "drainpunch", "icebeam", "stoneedge", "taunt", "zenheadbutt"] - }, - "mewtwomegay": { - "moves": ["aurasphere", "calmmind", "fireblast", "icebeam", "psystrike", "taunt", "willowisp"] - }, - "mew": { - "moves": ["fakeout", "fireblast", "helpinghand", "icebeam", "protect", "psyshock", "roost", "tailwind", "taunt", "transform", "willowisp"] - }, - "meganium": { - "moves": ["dragontail", "energyball", "healpulse", "leafstorm", "leechseed", "protect", "toxic"] - }, - "typhlosion": { - "moves": ["eruption", "extrasensory", "focusblast", "heatwave", "hiddenpowergrass"] - }, - "feraligatr": { - "moves": ["aquajet", "crunch", "dragondance", "icepunch", "liquidation", "protect"] - }, - "furret": { - "moves": ["doubleedge", "followme", "helpinghand", "knockoff", "protect", "superfang", "uturn"] - }, - "noctowl": { - "moves": ["airslash", "heatwave", "hypervoice", "hypnosis", "protect", "roost", "tailwind"] - }, - "ledian": { - "moves": ["bugbuzz", "encore", "knockoff", "lightscreen", "protect", "reflect", "tailwind", "uturn"] - }, - "ariados": { - "moves": ["megahorn", "poisonjab", "protect", "ragepowder", "stickyweb", "toxicthread"] - }, - "crobat": { - "moves": ["bravebird", "protect", "superfang", "tailwind", "taunt", "uturn"] - }, - "lanturn": { - "moves": ["icebeam", "protect", "scald", "thunderbolt", "thunderwave", "toxic"] - }, - "xatu": { - "moves": ["heatwave", "protect", "psychic", "roost", "tailwind", "thunderwave", "uturn"] - }, - "ampharos": { - "moves": ["focusblast", "hiddenpowergrass", "hiddenpowerice", "protect", "thunderbolt", "thunderwave"] - }, - "ampharosmega": { - "moves": ["dragonpulse", "focusblast", "hiddenpowergrass", "hiddenpowerice", "protect", "thunderbolt"] - }, - "bellossom": { - "moves": ["energyball", "moonblast", "quiverdance", "sleeppowder", "strengthsap"] - }, - "azumarill": { - "moves": ["aquajet", "knockoff", "liquidation", "playrough", "protect", "superpower"] - }, - "sudowoodo": { - "moves": ["headsmash", "helpinghand", "protect", "stealthrock", "stompingtantrum", "suckerpunch", "woodhammer"] - }, - "politoed": { - "moves": ["encore", "helpinghand", "hypnosis", "icywind", "protect", "scald"] - }, - "jumpluff": { - "moves": ["encore", "energyball", "helpinghand", "leechseed", "protect", "ragepowder", "sleeppowder", "strengthsap", "uturn"] - }, - "sunflora": { - "moves": ["earthpower", "encore", "energyball", "helpinghand", "hiddenpowerfire", "protect", "solarbeam", "sunnyday"] - }, - "quagsire": { - "moves": ["earthquake", "icywind", "protect", "recover", "scald", "toxic"] - }, - "espeon": { - "moves": ["calmmind", "dazzlinggleam", "helpinghand", "protect", "psychic", "shadowball"] - }, - "umbreon": { - "moves": ["foulplay", "helpinghand", "moonlight", "protect", "snarl"] - }, - "slowking": { - "moves": ["fireblast", "protect", "psychic", "psyshock", "scald", "trickroom"] - }, - "unown": { - "moves": ["hiddenpowerpsychic"] - }, - "wobbuffet": { - "moves": ["charm", "counter", "encore", "mirrorcoat"] - }, - "girafarig": { - "moves": ["hypervoice", "nastyplot", "protect", "psychic", "psyshock", "thunderbolt"] - }, - "forretress": { - "moves": ["gyroball", "protect", "stealthrock", "toxic", "voltswitch"] - }, - "dunsparce": { - "moves": ["bite", "bodyslam", "coil", "glare", "headbutt", "protect", "rockslide"] - }, - "gligar": { - "moves": ["defog", "earthquake", "knockoff", "roost", "stealthrock", "toxic", "uturn"] - }, - "steelix": { - "moves": ["earthquake", "headsmash", "heavyslam", "protect", "stealthrock", "wideguard"] - }, - "steelixmega": { - "moves": ["earthquake", "heavyslam", "protect", "rockslide", "stealthrock"] - }, - "granbull": { - "moves": ["playrough", "protect", "snarl", "stompingtantrum", "thunderwave"] - }, - "qwilfish": { - "moves": ["destinybond", "liquidation", "poisonjab", "protect", "swordsdance", "taunt", "thunderwave"] - }, - "scizor": { - "moves": ["bugbite", "bulletpunch", "feint", "knockoff", "protect", "superpower", "swordsdance", "uturn"] - }, - "scizormega": { - "moves": ["bugbite", "bulletpunch", "feint", "knockoff", "protect", "roost", "superpower", "swordsdance", "uturn"] - }, - "shuckle": { - "moves": ["encore", "guardsplit", "helpinghand", "knockoff", "stealthrock", "stickyweb", "toxic"] - }, - "heracross": { - "moves": ["closecombat", "facade", "knockoff", "megahorn", "protect", "swordsdance"] - }, - "heracrossmega": { - "moves": ["bulletseed", "closecombat", "knockoff", "pinmissile", "protect", "rockblast", "swordsdance"] - }, - "ursaring": { - "moves": ["closecombat", "crunch", "facade", "protect", "swordsdance"] - }, - "magcargo": { - "moves": ["earthpower", "fireblast", "heatwave", "incinerate", "protect", "stealthrock", "willowisp"] - }, - "corsola": { - "moves": ["icywind", "powergem", "protect", "scald", "stealthrock", "toxic"] - }, - "octillery": { - "moves": ["energyball", "fireblast", "hydropump", "icebeam", "protect"] - }, - "delibird": { - "moves": ["aerialace", "brickbreak", "fakeout", "icepunch", "iceshard", "protect"] - }, - "mantine": { - "moves": ["defog", "helpinghand", "protect", "scald", "tailwind", "toxic", "wideguard"] - }, - "skarmory": { - "moves": ["bravebird", "feint", "ironhead", "protect", "skydrop", "stealthrock", "tailwind", "taunt"] - }, - "houndoom": { - "moves": ["darkpulse", "heatwave", "nastyplot", "protect", "suckerpunch"] - }, - "houndoommega": { - "moves": ["darkpulse", "heatwave", "hiddenpowergrass", "nastyplot", "protect", "taunt"] - }, - "kingdra": { - "moves": ["dracometeor", "dragonpulse", "hydropump", "icebeam", "muddywater", "protect", "raindance"] - }, - "donphan": { - "moves": ["earthquake", "iceshard", "knockoff", "protect", "rapidspin", "rockslide", "stealthrock"] - }, - "porygon2": { - "moves": ["allyswitch", "icebeam", "protect", "recover", "thunderbolt", "thunderwave", "triattack"] - }, - "stantler": { - "moves": ["earthquake", "jumpkick", "megahorn", "protect", "return", "suckerpunch"] - }, - "smeargle": { - "moves": ["fakeout", "followme", "helpinghand", "kingsshield", "spore", "stickyweb", "tailwind", "transform", "wideguard"] - }, - "hitmontop": { - "moves": ["closecombat", "fakeout", "feint", "helpinghand", "machpunch", "rapidspin", "suckerpunch", "wideguard"] - }, - "miltank": { - "moves": ["bodyslam", "curse", "helpinghand", "milkdrink", "protect", "stompingtantrum", "thunderwave"] - }, - "blissey": { - "moves": ["helpinghand", "protect", "seismictoss", "softboiled", "thunderwave", "toxic"] - }, - "raikou": { - "moves": ["calmmind", "hiddenpowerice", "protect", "snarl", "thunderbolt"] - }, - "entei": { - "moves": ["extremespeed", "flareblitz", "protect", "sacredfire", "stompingtantrum", "stoneedge"] - }, - "suicune": { - "moves": ["icebeam", "scald", "snarl", "tailwind", "toxic"] - }, - "tyranitar": { - "moves": ["crunch", "fireblast", "icebeam", "protect", "rockslide", "stealthrock", "stompingtantrum", "stoneedge"] - }, - "tyranitarmega": { - "moves": ["crunch", "dragondance", "earthquake", "icepunch", "protect", "rockslide", "stoneedge"] - }, - "lugia": { - "moves": ["aeroblast", "protect", "psychic", "roost", "skydrop", "tailwind", "toxic"] - }, - "hooh": { - "moves": ["bravebird", "earthpower", "protect", "roost", "sacredfire", "skydrop", "tailwind", "toxic"] - }, - "celebi": { - "moves": ["earthpower", "energyball", "nastyplot", "protect", "psychic", "recover", "thunderwave", "uturn"] - }, - "sceptile": { - "moves": ["energyball", "focusblast", "hiddenpowerfire", "hiddenpowerice", "protect"] - }, - "sceptilemega": { - "moves": ["dragonpulse", "energyball", "focusblast", "hiddenpowerfire", "hiddenpowerice", "leafstorm", "protect"] - }, - "blaziken": { - "moves": ["fireblast", "hiddenpowerice", "highjumpkick", "knockoff", "protect"] - }, - "blazikenmega": { - "moves": ["flareblitz", "highjumpkick", "knockoff", "protect", "stoneedge", "swordsdance"] - }, - "swampert": { - "moves": ["earthquake", "icywind", "muddywater", "protect", "scald", "stealthrock", "wideguard"] - }, - "swampertmega": { - "moves": ["earthquake", "icepunch", "protect", "raindance", "waterfall"] - }, - "mightyena": { - "moves": ["crunch", "firefang", "playrough", "protect", "suckerpunch", "taunt"] - }, - "linoone": { - "moves": ["bellydrum", "extremespeed", "protect", "shadowclaw", "stompingtantrum"] - }, - "beautifly": { - "moves": ["aircutter", "bugbuzz", "protect", "quiverdance", "stringshot", "tailwind"] - }, - "dustox": { - "moves": ["bugbuzz", "protect", "sludgebomb", "stringshot", "strugglebug", "tailwind"] - }, - "ludicolo": { - "moves": ["fakeout", "gigadrain", "hydropump", "icebeam", "protect", "raindance"] - }, - "shiftry": { - "moves": ["fakeout", "knockoff", "leafblade", "leafstorm", "protect", "suckerpunch", "swordsdance"] - }, - "swellow": { - "moves": ["bravebird", "facade", "protect", "quickattack", "uturn"] - }, - "pelipper": { - "moves": ["hurricane", "protect", "scald", "tailwind", "uturn", "wideguard"] - }, - "gardevoir": { - "moves": ["dazzlinggleam", "focusblast", "helpinghand", "moonblast", "protect", "psyshock"] - }, - "gardevoirmega": { - "moves": ["calmmind", "focusblast", "hypervoice", "protect", "psyshock"] - }, - "masquerain": { - "moves": ["airslash", "bugbuzz", "hydropump", "protect", "quiverdance", "stickyweb", "strugglebug", "tailwind"] - }, - "breloom": { - "moves": ["bulletseed", "machpunch", "protect", "rocktomb", "spore"] - }, - "slaking": { - "moves": ["doubleedge", "earthquake", "hammerarm", "nightslash", "retaliate", "rockslide"] - }, - "ninjask": { - "moves": ["aerialace", "dig", "leechlife", "protect", "swordsdance"] - }, - "shedinja": { - "moves": ["allyswitch", "protect", "shadowsneak", "swordsdance", "willowisp", "xscissor"] - }, - "exploud": { - "moves": ["boomburst", "fireblast", "focusblast", "hypervoice", "icebeam", "protect"] - }, - "hariyama": { - "moves": ["bulletpunch", "closecombat", "facade", "fakeout", "helpinghand", "knockoff", "protect", "wideguard"] - }, - "delcatty": { - "moves": ["doubleedge", "fakeout", "helpinghand", "protect", "suckerpunch", "thunderwave"] - }, - "sableye": { - "moves": ["fakeout", "foulplay", "helpinghand", "protect", "recover", "snarl", "taunt", "willowisp"] - }, - "sableyemega": { - "moves": ["fakeout", "knockoff", "protect", "recover", "shadowball", "willowisp"] - }, - "mawile": { - "moves": ["ironhead", "knockoff", "playrough", "protect", "suckerpunch", "swordsdance"] - }, - "mawilemega": { - "moves": ["ironhead", "knockoff", "playrough", "protect", "suckerpunch", "swordsdance"] - }, - "aggron": { - "moves": ["headsmash", "heavyslam", "protect", "stealthrock", "stompingtantrum"] - }, - "aggronmega": { - "moves": ["heavyslam", "protect", "rockslide", "stealthrock", "stompingtantrum", "toxic"] - }, - "medicham": { - "moves": ["bulletpunch", "drainpunch", "fakeout", "highjumpkick", "icepunch", "protect", "zenheadbutt"] - }, - "medichammega": { - "moves": ["bulletpunch", "drainpunch", "fakeout", "highjumpkick", "icepunch", "protect", "zenheadbutt"] - }, - "manectric": { - "moves": ["flamethrower", "hiddenpowergrass", "hiddenpowerice", "protect", "snarl", "switcheroo", "thunderbolt", "voltswitch"] - }, - "manectricmega": { - "moves": ["flamethrower", "hiddenpowergrass", "hiddenpowerice", "protect", "snarl", "thunderbolt", "voltswitch"] - }, - "plusle": { - "moves": ["encore", "helpinghand", "hiddenpowerice", "nastyplot", "protect", "thunderbolt"] - }, - "minun": { - "moves": ["encore", "helpinghand", "hiddenpowerice", "nastyplot", "protect", "thunderbolt"] - }, - "volbeat": { - "moves": ["encore", "helpinghand", "protect", "stringshot", "strugglebug", "tailwind", "thunderwave", "uturn"] - }, - "illumise": { - "moves": ["bugbuzz", "encore", "helpinghand", "protect", "tailwind", "thunderwave"] - }, - "swalot": { - "moves": ["encore", "icebeam", "poisongas", "protect", "sludgebomb", "yawn"] - }, - "sharpedo": { - "moves": ["crunch", "icebeam", "liquidation", "protect", "psychicfangs"] - }, - "sharpedomega": { - "moves": ["crunch", "icefang", "liquidation", "protect", "psychicfangs"] - }, - "wailord": { - "moves": ["hiddenpowerfire", "hiddenpowergrass", "hydropump", "icebeam", "waterspout"] - }, - "camerupt": { - "moves": ["earthpower", "fireblast", "heatwave", "incinerate", "protect", "stealthrock"] - }, - "cameruptmega": { - "moves": ["earthpower", "fireblast", "heatwave", "protect", "rockslide"] - }, - "torkoal": { - "moves": ["earthpower", "fireblast", "heatwave", "protect", "solarbeam", "willowisp"] - }, - "grumpig": { - "moves": ["focusblast", "lightscreen", "protect", "psychic", "reflect", "taunt", "thunderwave"] - }, - "spinda": { - "moves": ["fakeout", "protect", "return", "suckerpunch", "superpower", "trickroom"] - }, - "flygon": { - "moves": ["dragonclaw", "dragondance", "earthquake", "fireblast", "protect", "tailwind", "uturn"] - }, - "cacturne": { - "moves": ["drainpunch", "seedbomb", "spikyshield", "substitute", "suckerpunch", "swordsdance"] - }, - "altaria": { - "moves": ["dracometeor", "dragonclaw", "fireblast", "protect", "tailwind"] - }, - "altariamega": { - "moves": ["doubleedge", "dragondance", "earthquake", "fireblast", "protect", "return"] - }, - "zangoose": { - "moves": ["closecombat", "facade", "knockoff", "protect", "quickattack"] - }, - "seviper": { - "moves": ["aquatail", "earthquake", "flamethrower", "gigadrain", "glare", "poisonjab", "protect", "sludgebomb", "suckerpunch"] - }, - "lunatone": { - "moves": ["earthpower", "helpinghand", "powergem", "protect", "psychic", "trickroom"] - }, - "solrock": { - "moves": ["helpinghand", "protect", "rockslide", "stealthrock", "stoneedge", "willowisp", "zenheadbutt"] - }, - "whiscash": { - "moves": ["dragondance", "earthquake", "protect", "stoneedge", "waterfall", "zenheadbutt"] - }, - "crawdaunt": { - "moves": ["aquajet", "crabhammer", "dragondance", "knockoff", "protect", "superpower", "swordsdance"] - }, - "claydol": { - "moves": ["allyswitch", "earthpower", "protect", "rapidspin", "stealthrock", "toxic"] - }, - "cradily": { - "moves": ["gigadrain", "protect", "recover", "rockslide", "stealthrock", "stringshot", "toxic"] - }, - "armaldo": { - "moves": ["knockoff", "protect", "rockslide", "stoneedge", "stringshot", "swordsdance", "xscissor"] - }, - "milotic": { - "moves": ["hypnosis", "icywind", "protect", "recover", "scald"] - }, - "castformsunny": { - "moves": ["fireblast", "icebeam", "solarbeam", "sunnyday"] - }, - "castformrainy": { - "moves": ["hurricane", "hydropump", "raindance", "thunder"] - }, - "castformsnowy": { - "moves": ["blizzard", "fireblast", "hail", "thunderbolt"] - }, - "kecleon": { - "moves": ["drainpunch", "fakeout", "knockoff", "protect", "shadowsneak", "trickroom"] - }, - "banette": { - "moves": ["knockoff", "protect", "shadowclaw", "shadowsneak", "willowisp"] - }, - "banettemega": { - "moves": ["destinybond", "knockoff", "protect", "shadowclaw", "suckerpunch", "taunt", "willowisp"] - }, - "tropius": { - "moves": ["airslash", "gigadrain", "leechseed", "protect", "roost", "tailwind"] - }, - "chimecho": { - "moves": ["helpinghand", "protect", "psychic", "recover", "taunt", "thunderwave", "trickroom"] - }, - "absol": { - "moves": ["knockoff", "playrough", "protect", "suckerpunch", "superpower", "swordsdance"] - }, - "absolmega": { - "moves": ["fireblast", "knockoff", "playrough", "protect", "suckerpunch", "superpower", "swordsdance"] - }, - "glalie": { - "moves": ["earthquake", "freezedry", "icebeam", "iceshard", "protect", "taunt"] - }, - "glaliemega": { - "moves": ["earthquake", "explosion", "freezedry", "iceshard", "protect", "return"] - }, - "walrein": { - "moves": ["brine", "icywind", "protect", "superfang"] - }, - "huntail": { - "moves": ["icebeam", "protect", "shellsmash", "suckerpunch", "waterfall"] - }, - "gorebyss": { - "moves": ["hiddenpowergrass", "hydropump", "icebeam", "protect", "shellsmash"] - }, - "relicanth": { - "moves": ["doubleedge", "earthquake", "headsmash", "protect", "rockslide", "waterfall"] - }, - "luvdisc": { - "moves": ["healpulse", "icebeam", "icywind", "protect", "scald", "sweetkiss", "toxic"] - }, - "salamence": { - "moves": ["dracometeor", "dragonclaw", "dragondance", "earthquake", "fireblast", "fly", "protect", "tailwind"] - }, - "salamencemega": { - "moves": ["doubleedge", "dracometeor", "dragonclaw", "dragondance", "earthquake", "fireblast", "protect", "return"] - }, - "metagross": { - "moves": ["agility", "bulletpunch", "icepunch", "meteormash", "protect", "stompingtantrum", "thunderpunch", "zenheadbutt"] - }, - "metagrossmega": { - "moves": ["icepunch", "meteormash", "protect", "stompingtantrum", "thunderpunch", "zenheadbutt"] - }, - "regirock": { - "moves": ["curse", "drainpunch", "protect", "rest", "rockslide", "stealthrock", "stoneedge", "thunderwave"] - }, - "regice": { - "moves": ["icebeam", "icywind", "protect", "rockpolish", "thunderbolt", "thunderwave"] - }, - "registeel": { - "moves": ["curse", "ironhead", "protect", "rest", "seismictoss", "stealthrock", "thunderwave"] - }, - "latias": { - "moves": ["dracometeor", "healpulse", "helpinghand", "protect", "psyshock", "tailwind"] - }, - "latiasmega": { - "moves": ["dragonpulse", "healpulse", "helpinghand", "protect", "psychic", "tailwind"] - }, - "latios": { - "moves": ["dracometeor", "dragonpulse", "hiddenpowerfire", "protect", "psyshock", "tailwind", "trick"] - }, - "latiosmega": { - "moves": ["dracometeor", "dragonpulse", "hiddenpowerfire", "protect", "psyshock", "tailwind"] - }, - "kyogre": { - "moves": ["calmmind", "icebeam", "originpulse", "protect", "thunder", "waterspout"] - }, - "kyogreprimal": { - "moves": ["calmmind", "icebeam", "originpulse", "protect", "thunder"] - }, - "groudon": { - "moves": ["firepunch", "precipiceblades", "protect", "rockpolish", "rockslide", "stoneedge", "swordsdance"] - }, - "groudonprimal": { - "moves": ["firepunch", "precipiceblades", "protect", "rockpolish", "rockslide", "stoneedge", "swordsdance"] - }, - "rayquaza": { - "moves": ["dracometeor", "dragonclaw", "dragondance", "earthquake", "extremespeed", "protect", "tailwind", "vcreate"] - }, - "rayquazamega": { - "moves": ["dragonascent", "dragonclaw", "dragondance", "earthquake", "extremespeed", "protect", "swordsdance", "vcreate"] - }, - "jirachi": { - "moves": ["bodyslam", "followme", "helpinghand", "icywind", "ironhead", "protect", "thunderwave", "uturn"] - }, - "deoxys": { - "moves": ["extremespeed", "firepunch", "icebeam", "knockoff", "protect", "psychoboost", "superpower"] - }, - "deoxysattack": { - "moves": ["extremespeed", "firepunch", "icebeam", "knockoff", "protect", "psychoboost", "superpower"] - }, - "deoxysdefense": { - "moves": ["lightscreen", "protect", "recover", "reflect", "seismictoss", "stealthrock", "taunt", "trickroom"] - }, - "deoxysspeed": { - "moves": ["knockoff", "lightscreen", "protect", "psychoboost", "reflect", "superpower", "taunt"] - }, - "torterra": { - "moves": ["earthquake", "protect", "rockpolish", "rockslide", "stoneedge", "wideguard", "woodhammer"] - }, - "infernape": { - "moves": ["closecombat", "fakeout", "feint", "flareblitz", "grassknot", "heatwave", "protect", "stoneedge", "taunt", "uturn"] - }, - "empoleon": { - "moves": ["defog", "flashcannon", "grassknot", "icywind", "protect", "scald"] - }, - "staraptor": { - "moves": ["bravebird", "closecombat", "doubleedge", "protect", "quickattack", "tailwind", "uturn"] - }, - "bibarel": { - "moves": ["aquajet", "liquidation", "quickattack", "return", "swordsdance"] - }, - "kricketune": { - "moves": ["knockoff", "leechlife", "protect", "stickyweb", "taunt"] - }, - "luxray": { - "moves": ["crunch", "helpinghand", "icefang", "protect", "superpower", "voltswitch", "wildcharge"] - }, - "roserade": { - "moves": ["gigadrain", "hiddenpowerfire", "leafstorm", "protect", "sleeppowder", "sludgebomb"] - }, - "rampardos": { - "moves": ["crunch", "earthquake", "headsmash", "protect", "rockslide", "stoneedge", "zenheadbutt"] - }, - "bastiodon": { - "moves": ["guardsplit", "metalburst", "protect", "stealthrock", "stoneedge", "wideguard"] - }, - "wormadam": { - "moves": ["bugbuzz", "gigadrain", "leafstorm", "protect", "stringshot"] - }, - "wormadamsandy": { - "moves": ["earthquake", "protect", "rockblast", "stringshot", "suckerpunch"] - }, - "wormadamtrash": { - "moves": ["bugbuzz", "flashcannon", "protect", "stringshot", "strugglebug", "suckerpunch"] - }, - "mothim": { - "moves": ["airslash", "bugbuzz", "energyball", "protect", "quiverdance"] - }, - "vespiquen": { - "moves": ["attackorder", "healorder", "protect", "stringshot", "strugglebug", "tailwind"] - }, - "pachirisu": { - "moves": ["followme", "helpinghand", "nuzzle", "protect", "superfang", "thunderbolt", "uturn"] - }, - "floatzel": { - "moves": ["aquajet", "icepunch", "liquidation", "protect", "switcheroo", "taunt"] - }, - "cherrim": { - "moves": ["dazzlinggleam", "energyball", "healingwish", "hiddenpowerfire", "synthesis"] - }, - "cherrimsunshine": { - "moves": ["gigadrain", "helpinghand", "solarbeam", "sunnyday", "weatherball"] - }, - "gastrodon": { - "moves": ["earthpower", "icywind", "muddywater", "protect", "recover", "scald"] - }, - "ambipom": { - "moves": ["fakeout", "icepunch", "knockoff", "lowkick", "protect", "return", "uturn"] - }, - "drifblim": { - "moves": ["acrobatics", "destinybond", "hypnosis", "protect", "shadowball", "thunderbolt", "willowisp"] - }, - "lopunny": { - "moves": ["encore", "fakeout", "firepunch", "helpinghand", "protect", "return", "switcheroo", "thunderwave"] - }, - "lopunnymega": { - "moves": ["encore", "fakeout", "highjumpkick", "icepunch", "protect", "return"] - }, - "mismagius": { - "moves": ["dazzlinggleam", "nastyplot", "protect", "shadowball", "taunt", "thunderbolt", "willowisp"] - }, - "honchkrow": { - "moves": ["bravebird", "heatwave", "protect", "roost", "suckerpunch", "superpower"] - }, - "purugly": { - "moves": ["fakeout", "knockoff", "protect", "quickattack", "return", "uturn"] - }, - "skuntank": { - "moves": ["crunch", "fireblast", "poisonjab", "protect", "snarl", "suckerpunch", "taunt"] - }, - "bronzong": { - "moves": ["earthquake", "explosion", "gyroball", "lightscreen", "protect", "reflect", "trickroom"] - }, - "chatot": { - "moves": ["boomburst", "chatter", "encore", "heatwave", "hypervoice", "nastyplot", "protect", "uturn"] - }, - "spiritomb": { - "moves": ["foulplay", "icywind", "protect", "shadowsneak", "snarl", "willowisp"] - }, - "garchomp": { - "moves": ["dragonclaw", "earthquake", "protect", "rockslide", "stoneedge", "swordsdance"] - }, - "garchompmega": { - "moves": ["dragonclaw", "earthquake", "fireblast", "protect", "rockslide", "stoneedge", "swordsdance"] - }, - "lucario": { - "moves": ["closecombat", "darkpulse", "extremespeed", "icepunch", "meteormash", "protect"] - }, - "lucariomega": { - "moves": ["closecombat", "darkpulse", "extremespeed", "icepunch", "meteormash", "protect", "swordsdance"] - }, - "hippowdon": { - "moves": ["earthquake", "protect", "rockslide", "slackoff", "stealthrock", "stoneedge", "whirlwind"] - }, - "drapion": { - "moves": ["aquatail", "knockoff", "poisonjab", "protect", "snarl", "swordsdance", "taunt"] - }, - "toxicroak": { - "moves": ["drainpunch", "fakeout", "gunkshot", "icepunch", "protect", "suckerpunch", "swordsdance"] - }, - "carnivine": { - "moves": ["knockoff", "powerwhip", "protect", "ragepowder", "return", "sleeppowder", "swordsdance"] - }, - "lumineon": { - "moves": ["defog", "icebeam", "protect", "scald", "tailwind", "toxic", "uturn"] - }, - "abomasnow": { - "moves": ["blizzard", "earthquake", "gigadrain", "iceshard", "protect", "woodhammer"] - }, - "abomasnowmega": { - "moves": ["blizzard", "earthquake", "gigadrain", "iceshard", "protect", "woodhammer"] - }, - "weavile": { - "moves": ["fakeout", "iceshard", "iciclecrash", "knockoff", "lowkick", "protect", "swordsdance"] - }, - "magnezone": { - "moves": ["electroweb", "flashcannon", "hiddenpowerfire", "protect", "thunderbolt", "voltswitch"] - }, - "lickilicky": { - "moves": ["bodyslam", "dragontail", "explosion", "knockoff", "powerwhip", "protect", "stompingtantrum"] - }, - "rhyperior": { - "moves": ["earthquake", "icepunch", "megahorn", "protect", "rockslide", "stealthrock", "stoneedge"] - }, - "tangrowth": { - "moves": ["earthquake", "focusblast", "gigadrain", "hiddenpowerice", "knockoff", "leechseed", "powerwhip", "protect", "ragepowder", "sleeppowder"] - }, - "electivire": { - "moves": ["crosschop", "flamethrower", "followme", "icepunch", "protect", "stompingtantrum", "wildcharge"] - }, - "magmortar": { - "moves": ["fireblast", "followme", "heatwave", "hiddenpowergrass", "hiddenpowerice", "protect", "taunt", "thunderbolt", "willowisp"] - }, - "togekiss": { - "moves": ["airslash", "dazzlinggleam", "followme", "nastyplot", "protect", "roost", "tailwind", "thunderwave"] - }, - "yanmega": { - "moves": ["airslash", "bugbuzz", "gigadrain", "protect", "uturn"] - }, - "leafeon": { - "moves": ["helpinghand", "knockoff", "leafblade", "protect", "swordsdance", "xscissor"] - }, - "glaceon": { - "moves": ["helpinghand", "hiddenpowerground", "icebeam", "protect", "toxic"] - }, - "gliscor": { - "moves": ["earthquake", "facade", "knockoff", "protect", "tailwind", "taunt"] - }, - "mamoswine": { - "moves": ["earthquake", "iceshard", "iciclecrash", "knockoff", "protect", "rockslide", "superpower"] - }, - "porygonz": { - "moves": ["darkpulse", "icebeam", "nastyplot", "protect", "thunderbolt", "triattack", "trick"] - }, - "gallade": { - "moves": ["closecombat", "helpinghand", "icepunch", "knockoff", "protect", "shadowsneak", "trick", "zenheadbutt"] - }, - "gallademega": { - "moves": ["closecombat", "drainpunch", "icepunch", "knockoff", "protect", "swordsdance", "zenheadbutt"] - }, - "probopass": { - "moves": ["flashcannon", "helpinghand", "powergem", "protect", "stealthrock", "thunderwave", "wideguard"] - }, - "dusknoir": { - "moves": ["allyswitch", "helpinghand", "icepunch", "painsplit", "protect", "shadowsneak", "trickroom", "willowisp"] - }, - "froslass": { - "moves": ["destinybond", "icebeam", "protect", "shadowball", "taunt", "thunderwave", "willowisp"] - }, - "rotom": { - "moves": ["electroweb", "hiddenpowerice", "protect", "shadowball", "thunderbolt", "trick", "voltswitch", "willowisp"] - }, - "rotomheat": { - "moves": ["electroweb", "overheat", "protect", "thunderbolt", "voltswitch", "willowisp"] - }, - "rotomwash": { - "moves": ["electroweb", "hydropump", "protect", "thunderbolt", "trick", "voltswitch", "willowisp"] - }, - "rotomfrost": { - "moves": ["blizzard", "electroweb", "protect", "thunderbolt", "trick", "voltswitch", "willowisp"] - }, - "rotomfan": { - "moves": ["airslash", "electroweb", "protect", "thunderbolt", "voltswitch", "willowisp"] - }, - "rotommow": { - "moves": ["electroweb", "hiddenpowerfire", "leafstorm", "protect", "thunderbolt", "trick", "voltswitch", "willowisp"] - }, - "uxie": { - "moves": ["helpinghand", "knockoff", "protect", "psychic", "stealthrock", "thunderwave", "uturn", "yawn"] - }, - "mesprit": { - "moves": ["calmmind", "helpinghand", "icebeam", "knockoff", "protect", "psychic", "thunderbolt", "trick", "uturn"] - }, - "azelf": { - "moves": ["fireblast", "knockoff", "nastyplot", "protect", "psychic", "taunt", "thunderbolt", "uturn"] - }, - "dialga": { - "moves": ["dracometeor", "dragonpulse", "earthpower", "fireblast", "flashcannon", "protect", "thunderbolt"] - }, - "palkia": { - "moves": ["dracometeor", "fireblast", "hydropump", "protect", "spacialrend", "thunderbolt"] - }, - "heatran": { - "moves": ["earthpower", "flashcannon", "heatwave", "protect", "willowisp"] - }, - "regigigas": { - "moves": ["icywind", "knockoff", "return", "substitute", "thunderwave", "wideguard"] - }, - "giratinaorigin": { - "moves": ["dracometeor", "dragonpulse", "protect", "shadowball", "shadowsneak", "tailwind", "willowisp"] - }, - "giratina": { - "moves": ["calmmind", "dragonpulse", "dragontail", "protect", "shadowball", "tailwind", "willowisp"] - }, - "cresselia": { - "moves": ["allyswitch", "helpinghand", "icywind", "moonblast", "moonlight", "protect", "psyshock", "thunderwave", "trickroom"] - }, - "phione": { - "moves": ["helpinghand", "icywind", "protect", "scald", "uturn"] - }, - "manaphy": { - "moves": ["energyball", "helpinghand", "icebeam", "protect", "scald", "surf", "tailglow"] - }, - "darkrai": { - "moves": ["darkpulse", "focusblast", "nastyplot", "protect", "sludgebomb", "snarl"] - }, - "shaymin": { - "moves": ["airslash", "earthpower", "leechseed", "protect", "rest", "seedflare", "substitute", "tailwind"] - }, - "shayminsky": { - "moves": ["airslash", "earthpower", "hiddenpowerice", "protect", "rest", "seedflare", "tailwind"] - }, - "arceus": { - "moves": ["earthquake", "extremespeed", "protect", "recover", "shadowclaw", "swordsdance"] - }, - "arceusbug": { - "moves": ["earthquake", "ironhead", "protect", "recover", "stoneedge", "swordsdance", "xscissor"] - }, - "arceusdark": { - "moves": ["calmmind", "focusblast", "judgment", "protect", "recover", "snarl", "willowisp"] - }, - "arceusdragon": { - "moves": ["dragonclaw", "earthquake", "extremespeed", "protect", "recover", "swordsdance"] - }, - "arceuselectric": { - "moves": ["calmmind", "icebeam", "judgment", "protect", "recover"] - }, - "arceusfairy": { - "moves": ["calmmind", "defog", "earthpower", "judgment", "protect", "recover", "thunderbolt", "willowisp"] - }, - "arceusfighting": { - "moves": ["calmmind", "icebeam", "judgment", "protect", "recover", "shadowball", "willowisp"] - }, - "arceusfire": { - "moves": ["calmmind", "heatwave", "judgment", "protect", "recover", "thunderbolt", "willowisp"] - }, - "arceusflying": { - "moves": ["calmmind", "earthpower", "judgment", "protect", "recover", "tailwind"] - }, - "arceusghost": { - "moves": ["brickbreak", "calmmind", "focusblast", "judgment", "protect", "recover", "shadowforce", "swordsdance", "willowisp"] - }, - "arceusgrass": { - "moves": ["calmmind", "heatwave", "icebeam", "judgment", "protect", "recover", "thunderwave"] - }, - "arceusground": { - "moves": ["calmmind", "earthquake", "icebeam", "judgment", "protect", "recover", "rockslide", "stoneedge", "swordsdance"] - }, - "arceusice": { - "moves": ["calmmind", "focusblast", "icywind", "judgment", "protect", "recover", "thunderbolt"] - }, - "arceuspoison": { - "moves": ["calmmind", "earthpower", "heatwave", "judgment", "protect", "recover", "sludgebomb", "willowisp"] - }, - "arceuspsychic": { - "moves": ["calmmind", "focusblast", "judgment", "protect", "psyshock", "recover", "willowisp"] - }, - "arceusrock": { - "moves": ["earthquake", "protect", "recover", "rockslide", "stoneedge", "swordsdance"] - }, - "arceussteel": { - "moves": ["calmmind", "earthpower", "judgment", "protect", "recover", "willowisp"] - }, - "arceuswater": { - "moves": ["calmmind", "fireblast", "icebeam", "icywind", "judgment", "protect", "recover", "surf"] - }, - "victini": { - "moves": ["blueflare", "boltstrike", "protect", "psychic", "uturn", "vcreate"] - }, - "serperior": { - "moves": ["dragonpulse", "hiddenpowerfire", "leafstorm", "protect", "taunt"] - }, - "emboar": { - "moves": ["flareblitz", "headsmash", "heatwave", "protect", "rockslide", "superpower", "wildcharge"] - }, - "samurott": { - "moves": ["aquajet", "helpinghand", "hiddenpowergrass", "hydropump", "icebeam", "protect", "scald", "taunt"] - }, - "watchog": { - "moves": ["hypnosis", "knockoff", "protect", "return", "superfang", "swordsdance"] - }, - "stoutland": { - "moves": ["crunch", "protect", "return", "superpower", "wildcharge"] - }, - "liepard": { - "moves": ["encore", "fakeout", "knockoff", "playrough", "protect", "suckerpunch", "thunderwave", "uturn"] - }, - "simisage": { - "moves": ["focusblast", "gigadrain", "helpinghand", "hiddenpowerfire", "hiddenpowerice", "leafstorm", "nastyplot", "spikyshield", "taunt"] - }, - "simisear": { - "moves": ["fireblast", "focusblast", "grassknot", "heatwave", "nastyplot", "protect", "taunt"] - }, - "simipour": { - "moves": ["helpinghand", "hydropump", "icebeam", "nastyplot", "protect", "taunt"] - }, - "musharna": { - "moves": ["helpinghand", "hypnosis", "moonlight", "protect", "psychic", "signalbeam", "thunderwave", "trickroom"] - }, - "unfezant": { - "moves": ["nightslash", "pluck", "protect", "return", "roost", "tailwind", "taunt", "uturn"] - }, - "zebstrika": { - "moves": ["hiddenpowergrass", "overheat", "protect", "voltswitch", "wildcharge"] - }, - "gigalith": { - "moves": ["protect", "rockslide", "stealthrock", "stompingtantrum", "stoneedge", "superpower", "wideguard"] - }, - "swoobat": { - "moves": ["airslash", "calmmind", "heatwave", "protect", "psychic", "tailwind"] - }, - "excadrill": { - "moves": ["drillrun", "earthquake", "ironhead", "protect", "rockslide", "swordsdance"] - }, - "audino": { - "moves": ["healpulse", "helpinghand", "hypervoice", "protect", "thunderwave", "trickroom"] - }, - "audinomega": { - "moves": ["dazzlinggleam", "healpulse", "helpinghand", "hypervoice", "protect", "thunderwave", "trickroom"] - }, - "conkeldurr": { - "moves": ["drainpunch", "facade", "knockoff", "machpunch", "protect"] - }, - "seismitoad": { - "moves": ["earthquake", "hydropump", "muddywater", "protect", "raindance", "sludgebomb"] - }, - "throh": { - "moves": ["circlethrow", "helpinghand", "icepunch", "knockoff", "protect", "stormthrow"] - }, - "sawk": { - "moves": ["closecombat", "icepunch", "knockoff", "protect", "rockslide"] - }, - "leavanny": { - "moves": ["leafblade", "protect", "stickyweb", "swordsdance", "xscissor"] - }, - "scolipede": { - "moves": ["aquatail", "megahorn", "poisonjab", "protect", "rockslide", "superpower", "swordsdance"] - }, - "whimsicott": { - "moves": ["dazzlinggleam", "defog", "encore", "gigadrain", "helpinghand", "leechseed", "moonblast", "protect", "stunspore", "substitute", "tailwind", "taunt", "uturn"] - }, - "lilligant": { - "moves": ["gigadrain", "helpinghand", "hiddenpowerfire", "hiddenpowerice", "hiddenpowerrock", "petaldance", "protect", "quiverdance", "sleeppowder"] - }, - "basculin": { - "moves": ["aquajet", "icebeam", "liquidation", "muddywater", "protect", "superpower"] - }, - "basculinbluestriped": { - "moves": ["aquajet", "icebeam", "liquidation", "muddywater", "protect", "superpower"] - }, - "krookodile": { - "moves": ["earthquake", "knockoff", "protect", "stoneedge", "superpower"] - }, - "darmanitan": { - "moves": ["earthquake", "flareblitz", "protect", "rockslide", "superpower", "uturn"] - }, - "maractus": { - "moves": ["energyball", "helpinghand", "hiddenpowerfire", "leechseed", "spikyshield", "suckerpunch"] - }, - "crustle": { - "moves": ["earthquake", "protect", "rockslide", "shellsmash", "stoneedge", "xscissor"] - }, - "scrafty": { - "moves": ["drainpunch", "fakeout", "icepunch", "knockoff", "protect", "superfang"] - }, - "sigilyph": { - "moves": ["airslash", "calmmind", "heatwave", "protect", "psyshock", "tailwind"] - }, - "cofagrigus": { - "moves": ["hiddenpowerfighting", "nastyplot", "protect", "shadowball", "trickroom", "willowisp"] - }, - "carracosta": { - "moves": ["aquajet", "earthquake", "liquidation", "protect", "rockslide", "shellsmash", "stoneedge", "wideguard"] - }, - "archeops": { - "moves": ["acrobatics", "earthpower", "protect", "rockslide", "stoneedge", "tailwind", "taunt", "uturn"] - }, - "garbodor": { - "moves": ["drainpunch", "gunkshot", "painsplit", "protect", "toxicspikes"] - }, - "zoroark": { - "moves": ["darkpulse", "flamethrower", "focusblast", "knockoff", "nastyplot", "protect", "suckerpunch", "uturn"] - }, - "cinccino": { - "moves": ["bulletseed", "knockoff", "protect", "rockblast", "tailslap", "uturn"] - }, - "gothitelle": { - "moves": ["charm", "healpulse", "protect", "psychic", "shadowball", "taunt", "thunderbolt", "trickroom"] - }, - "reuniclus": { - "moves": ["focusblast", "helpinghand", "protect", "psychic", "shadowball", "trickroom"] - }, - "swanna": { - "moves": ["bravebird", "hurricane", "icebeam", "protect", "scald", "tailwind"] - }, - "vanilluxe": { - "moves": ["autotomize", "blizzard", "flashcannon", "freezedry", "hiddenpowerground", "protect", "taunt"] - }, - "sawsbuck": { - "moves": ["hornleech", "jumpkick", "protect", "return", "swordsdance"] - }, - "emolga": { - "moves": ["airslash", "encore", "helpinghand", "protect", "roost", "tailwind", "thunderbolt"] - }, - "escavalier": { - "moves": ["drillrun", "ironhead", "knockoff", "megahorn", "protect", "swordsdance"] - }, - "amoonguss": { - "moves": ["gigadrain", "hiddenpowerfire", "protect", "ragepowder", "sludgebomb", "spore", "stunspore"] - }, - "jellicent": { - "moves": ["icywind", "protect", "recover", "scald", "shadowball", "trickroom", "willowisp"] - }, - "alomomola": { - "moves": ["helpinghand", "icywind", "knockoff", "protect", "scald", "wideguard"] - }, - "galvantula": { - "moves": ["bugbuzz", "energyball", "hiddenpowerice", "protect", "stickyweb", "thunder", "voltswitch"] - }, - "ferrothorn": { - "moves": ["gyroball", "knockoff", "leechseed", "powerwhip", "protect", "stealthrock"] - }, - "klinklang": { - "moves": ["geargrind", "protect", "return", "shiftgear", "wildcharge"] - }, - "eelektross": { - "moves": ["flamethrower", "gigadrain", "knockoff", "protect", "thunderbolt", "uturn", "voltswitch"] - }, - "beheeyem": { - "moves": ["hiddenpowerfighting", "protect", "psychic", "recover", "signalbeam", "thunderbolt", "trick", "trickroom"] - }, - "chandelure": { - "moves": ["energyball", "heatwave", "overheat", "protect", "shadowball", "trick"] - }, - "haxorus": { - "moves": ["dragonclaw", "dragondance", "earthquake", "poisonjab", "protect", "swordsdance", "taunt"] - }, - "beartic": { - "moves": ["aquajet", "iciclecrash", "protect", "stoneedge", "superpower", "swordsdance"] - }, - "cryogonal": { - "moves": ["freezedry", "hiddenpowerground", "icebeam", "icywind", "protect", "recover"] - }, - "accelgor": { - "moves": ["bugbuzz", "encore", "energyball", "focusblast", "hiddenpowerrock", "protect", "sludgebomb", "yawn"] - }, - "stunfisk": { - "moves": ["discharge", "earthpower", "electroweb", "protect", "scald", "stealthrock"] - }, - "mienshao": { - "moves": ["drainpunch", "fakeout", "feint", "highjumpkick", "knockoff", "protect", "stoneedge", "swordsdance", "uturn"] - }, - "druddigon": { - "moves": ["dragonclaw", "earthquake", "firepunch", "glare", "protect", "suckerpunch", "superpower", "thunderpunch"] - }, - "golurk": { - "moves": ["dynamicpunch", "earthquake", "icepunch", "protect", "rockpolish", "shadowpunch", "stoneedge"] - }, - "bisharp": { - "moves": ["ironhead", "knockoff", "protect", "suckerpunch", "swordsdance"] - }, - "bouffalant": { - "moves": ["headcharge", "megahorn", "protect", "stompingtantrum", "stoneedge", "superpower", "swordsdance"] - }, - "braviary": { - "moves": ["bravebird", "protect", "return", "skydrop", "superpower", "tailwind", "uturn"] - }, - "mandibuzz": { - "moves": ["bravebird", "knockoff", "protect", "roost", "snarl", "tailwind", "taunt", "uturn"] - }, - "heatmor": { - "moves": ["firelash", "gigadrain", "incinerate", "protect", "suckerpunch", "superpower"] - }, - "durant": { - "moves": ["honeclaws", "ironhead", "protect", "rockslide", "superpower", "xscissor"] - }, - "hydreigon": { - "moves": ["darkpulse", "dracometeor", "fireblast", "flashcannon", "protect", "tailwind", "uturn"] - }, - "volcarona": { - "moves": ["bugbuzz", "fierydance", "gigadrain", "heatwave", "protect", "quiverdance", "tailwind"] - }, - "cobalion": { - "moves": ["closecombat", "ironhead", "protect", "stoneedge", "swordsdance", "thunderwave"] - }, - "terrakion": { - "moves": ["closecombat", "protect", "rockslide", "stompingtantrum", "stoneedge", "taunt"] - }, - "virizion": { - "moves": ["closecombat", "leafblade", "protect", "stoneedge", "swordsdance", "taunt"] - }, - "tornadus": { - "moves": ["heatwave", "hurricane", "protect", "skydrop", "superpower", "tailwind", "taunt", "uturn"] - }, - "tornadustherian": { - "moves": ["heatwave", "hurricane", "protect", "skydrop", "tailwind", "taunt", "uturn"] - }, - "thundurus": { - "moves": ["focusblast", "hiddenpowerflying", "hiddenpowerice", "knockoff", "nastyplot", "protect", "taunt", "thunderbolt", "thunderwave"] - }, - "thundurustherian": { - "moves": ["focusblast", "hiddenpowerflying", "hiddenpowerice", "nastyplot", "protect", "thunderbolt", "voltswitch"] - }, - "reshiram": { - "moves": ["blueflare", "dracometeor", "dragonpulse", "flamecharge", "heatwave", "protect", "roost", "tailwind"] - }, - "zekrom": { - "moves": ["boltstrike", "dracometeor", "dragonclaw", "honeclaws", "protect", "roost", "tailwind"] - }, - "landorus": { - "moves": ["earthpower", "focusblast", "hiddenpowerice", "protect", "psychic", "rockslide", "sludgebomb"] - }, - "landorustherian": { - "moves": ["earthquake", "fly", "knockoff", "protect", "rockslide", "stoneedge", "superpower", "swordsdance", "uturn"] - }, - "kyurem": { - "moves": ["dracometeor", "dragonpulse", "earthpower", "glaciate", "icebeam", "protect", "roost"] - }, - "kyuremblack": { - "moves": ["dragonclaw", "earthpower", "fusionbolt", "icebeam", "protect", "roost"] - }, - "kyuremwhite": { - "moves": ["dracometeor", "dragonpulse", "earthpower", "fusionflare", "icebeam", "protect", "roost"] - }, - "keldeo": { - "moves": ["calmmind", "hiddenpowerelectric", "hiddenpowerflying", "hydropump", "icywind", "protect", "secretsword", "taunt"] - }, - "meloetta": { - "moves": ["calmmind", "focusblast", "hypervoice", "protect", "psyshock", "shadowball"] - }, - "meloettapirouette": { - "moves": ["closecombat", "knockoff", "protect", "relicsong", "return"] - }, - "genesect": { - "moves": ["bugbuzz", "extremespeed", "flamethrower", "icebeam", "ironhead", "protect", "technoblast", "thunderbolt", "uturn"] - }, - "chesnaught": { - "moves": ["hammerarm", "leechseed", "rockslide", "spikyshield", "stoneedge", "woodhammer"] - }, - "delphox": { - "moves": ["calmmind", "fireblast", "grassknot", "heatwave", "protect", "psyshock", "switcheroo"] - }, - "greninja": { - "moves": ["darkpulse", "gunkshot", "hydropump", "icebeam", "matblock", "protect", "taunt", "uturn"] - }, - "greninjabond": { - "moves": ["darkpulse", "hydropump", "icebeam", "uturn", "watershuriken"] - }, - "diggersby": { - "moves": ["earthquake", "knockoff", "protect", "quickattack", "return", "uturn"] - }, - "talonflame": { - "moves": ["bravebird", "flareblitz", "protect", "roost", "swordsdance", "tailwind", "taunt", "uturn", "willowisp"] - }, - "vivillon": { - "moves": ["bugbuzz", "hurricane", "protect", "quiverdance", "sleeppowder"] - }, - "pyroar": { - "moves": ["fireblast", "hypervoice", "protect", "solarbeam", "sunnyday", "willowisp"] - }, - "floetteeternal": { - "moves": ["calmmind", "dazzlinggleam", "hiddenpowerfire", "lightofruin", "protect", "psychic"] - }, - "florges": { - "moves": ["calmmind", "dazzlinggleam", "defog", "helpinghand", "moonblast", "protect", "psychic"] - }, - "gogoat": { - "moves": ["brickbreak", "bulkup", "earthquake", "hornleech", "leechseed", "milkdrink", "protect", "rockslide"] - }, - "pangoro": { - "moves": ["gunkshot", "hammerarm", "icepunch", "knockoff", "partingshot", "protect"] - }, - "furfrou": { - "moves": ["cottonguard", "protect", "return", "snarl", "thunderwave", "uturn"] - }, - "meowstic": { - "moves": ["fakeout", "lightscreen", "protect", "psychic", "reflect", "thunderwave"] - }, - "meowsticf": { - "moves": ["darkpulse", "energyball", "fakeout", "helpinghand", "nastyplot", "protect", "psychic", "thunderbolt"] - }, - "doublade": { - "moves": ["ironhead", "protect", "sacredsword", "shadowclaw", "shadowsneak", "swordsdance"] - }, - "aegislash": { - "moves": ["flashcannon", "hiddenpowerice", "kingsshield", "shadowball", "shadowsneak"] - }, - "aegislashblade": { - "moves": ["ironhead", "kingsshield", "sacredsword", "shadowclaw", "shadowsneak", "swordsdance"] - }, - "aromatisse": { - "moves": ["healpulse", "moonblast", "protect", "thunderbolt", "trickroom"] - }, - "slurpuff": { - "moves": ["bellydrum", "drainpunch", "playrough", "protect", "return"] - }, - "malamar": { - "moves": ["knockoff", "protect", "psychocut", "rockslide", "superpower", "trickroom"] - }, - "barbaracle": { - "moves": ["crosschop", "liquidation", "protect", "rockslide", "shellsmash"] - }, - "dragalge": { - "moves": ["dracometeor", "dragonpulse", "focusblast", "hiddenpowerfire", "protect", "scald", "sludgebomb"] - }, - "clawitzer": { - "moves": ["aurasphere", "darkpulse", "helpinghand", "icebeam", "muddywater", "protect", "uturn", "waterpulse"] - }, - "heliolisk": { - "moves": ["darkpulse", "grassknot", "hypervoice", "protect", "thunderbolt", "voltswitch"] - }, - "tyrantrum": { - "moves": ["dragonclaw", "dragondance", "earthquake", "headsmash", "protect", "rockslide"] - }, - "aurorus": { - "moves": ["ancientpower", "earthpower", "freezedry", "hypervoice", "icywind", "protect", "thunderwave"] - }, - "sylveon": { - "moves": ["helpinghand", "hiddenpowerground", "hypervoice", "protect", "psyshock", "shadowball"] - }, - "hawlucha": { - "moves": ["acrobatics", "encore", "highjumpkick", "protect", "swordsdance"] - }, - "dedenne": { - "moves": ["eerieimpulse", "helpinghand", "nuzzle", "recycle", "superfang", "thunderbolt"] - }, - "carbink": { - "moves": ["explosion", "lightscreen", "moonblast", "protect", "reflect", "stealthrock", "trickroom"] - }, - "goodra": { - "moves": ["dracometeor", "dragonpulse", "fireblast", "muddywater", "powerwhip", "protect", "thunderbolt"] - }, - "klefki": { - "moves": ["dazzlinggleam", "foulplay", "lightscreen", "playrough", "protect", "reflect", "thunderwave"] - }, - "trevenant": { - "moves": ["hornleech", "leechseed", "protect", "rockslide", "shadowclaw", "trickroom", "willowisp", "woodhammer"] - }, - "gourgeistsmall": { - "moves": ["leechseed", "phantomforce", "protect", "seedbomb", "shadowsneak", "willowisp"] - }, - "gourgeistlarge": { - "moves": ["leechseed", "phantomforce", "protect", "seedbomb", "shadowsneak", "trickroom", "willowisp"] - }, - "gourgeist": { - "moves": ["leechseed", "phantomforce", "protect", "seedbomb", "shadowsneak", "willowisp"] - }, - "gourgeistsuper": { - "moves": ["leechseed", "phantomforce", "protect", "seedbomb", "shadowsneak", "trickroom", "willowisp"] - }, - "avalugg": { - "moves": ["avalanche", "earthquake", "protect", "recover"] - }, - "noivern": { - "moves": ["dracometeor", "flamethrower", "hurricane", "protect", "switcheroo", "tailwind", "taunt", "uturn"] - }, - "xerneas": { - "moves": ["closecombat", "dazzlinggleam", "focusblast", "geomancy", "hiddenpowerfire", "protect", "psyshock", "rockslide", "thunderbolt"] - }, - "yveltal": { - "moves": ["darkpulse", "heatwave", "oblivionwing", "protect", "roost", "skydrop", "snarl", "suckerpunch", "taunt"] - }, - "zygarde": { - "moves": ["coil", "dragondance", "extremespeed", "glare", "protect", "rockslide", "stoneedge", "thousandarrows"] - }, - "zygarde10": { - "moves": ["dragondance", "extremespeed", "irontail", "protect", "thousandarrows"] - }, - "diancie": { - "moves": ["calmmind", "dazzlinggleam", "diamondstorm", "earthpower", "moonblast", "protect"] - }, - "dianciemega": { - "moves": ["calmmind", "dazzlinggleam", "diamondstorm", "earthpower", "hiddenpowerfire", "moonblast", "protect", "psyshock"] - }, - "hoopa": { - "moves": ["focusblast", "hyperspacehole", "protect", "shadowball", "trickroom"] - }, - "hoopaunbound": { - "moves": ["darkpulse", "drainpunch", "focusblast", "gunkshot", "hyperspacefury", "icepunch", "protect", "psychic", "zenheadbutt"] - }, - "volcanion": { - "moves": ["earthpower", "heatwave", "protect", "sludgebomb", "steameruption"] - }, - "decidueye": { - "moves": ["bravebird", "leafblade", "protect", "spiritshackle", "suckerpunch"] - }, - "incineroar": { - "moves": ["fakeout", "flareblitz", "knockoff", "snarl", "taunt", "uturn", "willowisp"] - }, - "primarina": { - "moves": ["hypervoice", "icebeam", "moonblast", "protect", "psychic"] - }, - "toucannon": { - "moves": ["beakblast", "bulletseed", "protect", "rockblast", "tailwind"] - }, - "gumshoos": { - "moves": ["crunch", "protect", "return", "superfang", "uturn"] - }, - "vikavolt": { - "moves": ["bugbuzz", "hiddenpowerice", "protect", "stringshot", "thunderbolt", "voltswitch"] - }, - "crabominable": { - "moves": ["closecombat", "earthquake", "icehammer", "protect", "stoneedge", "wideguard"] - }, - "oricorio": { - "moves": ["airslash", "hurricane", "protect", "revelationdance", "tailwind"] - }, - "oricoriopompom": { - "moves": ["airslash", "hurricane", "protect", "revelationdance", "tailwind"] - }, - "oricoriopau": { - "moves": ["airslash", "hurricane", "protect", "revelationdance", "tailwind"] - }, - "oricoriosensu": { - "moves": ["airslash", "hurricane", "protect", "revelationdance", "tailwind"] - }, - "ribombee": { - "moves": ["moonblast", "pollenpuff", "protect", "quiverdance", "stickyweb"] - }, - "lycanroc": { - "moves": ["accelerock", "crunch", "firefang", "protect", "stoneedge", "taunt"] - }, - "lycanrocmidnight": { - "moves": ["protect", "stoneedge", "suckerpunch", "swordsdance", "taunt"] - }, - "lycanrocdusk": { - "moves": ["accelerock", "drillrun", "firefang", "protect", "rockslide", "stoneedge"] - }, - "wishiwashischool": { - "moves": ["earthquake", "endeavor", "helpinghand", "hiddenpowergrass", "hydropump", "icebeam", "protect"] - }, - "toxapex": { - "moves": ["banefulbunker", "haze", "recover", "scald", "toxicspikes", "wideguard"] - }, - "mudsdale": { - "moves": ["closecombat", "heavyslam", "highhorsepower", "protect", "rockslide"] - }, - "araquanid": { - "moves": ["liquidation", "lunge", "protect", "stickyweb", "wideguard"] - }, - "lurantis": { - "moves": ["hiddenpowerice", "knockoff", "leafstorm", "protect", "superpower"] - }, - "shiinotic": { - "moves": ["gigadrain", "leechseed", "moonblast", "protect", "spore", "strengthsap"] - }, - "salazzle": { - "moves": ["encore", "fakeout", "flamethrower", "hiddenpowergrass", "hiddenpowerground", "protect", "sludgebomb", "taunt"] - }, - "bewear": { - "moves": ["doubleedge", "hammerarm", "icepunch", "protect", "wideguard"] - }, - "tsareena": { - "moves": ["feint", "knockoff", "playrough", "powerwhip", "protect", "uturn"] - }, - "comfey": { - "moves": ["drainingkiss", "floralhealing", "taunt", "toxic", "uturn"] - }, - "oranguru": { - "moves": ["foulplay", "instruct", "protect", "psychic", "trickroom"] - }, - "passimian": { - "moves": ["closecombat", "knockoff", "protect", "rockslide", "taunt", "uturn"] - }, - "golisopod": { - "moves": ["aquajet", "firstimpression", "leechlife", "liquidation", "protect", "wideguard"] - }, - "palossand": { - "moves": ["earthpower", "protect", "shadowball", "shoreup", "stealthrock", "toxic"] - }, - "pyukumuku": { - "moves": ["counter", "helpinghand", "lightscreen", "memento", "reflect"] - }, - "typenull": { - "moves": ["rest", "return", "sleeptalk", "swordsdance", "uturn"] - }, - "silvally": { - "moves": ["crunch", "doubleedge", "explosion", "flamecharge", "icebeam", "partingshot", "protect", "swordsdance", "uturn"] - }, - "silvallybug": { - "moves": ["flamethrower", "icebeam", "protect", "thunderbolt", "thunderwave", "uturn"] - }, - "silvallydark": { - "moves": ["icebeam", "multiattack", "partingshot", "protect", "snarl", "thunderwave", "uturn"] - }, - "silvallydragon": { - "moves": ["flamethrower", "icebeam", "multiattack", "partingshot", "protect", "thunderwave", "uturn"] - }, - "silvallyelectric": { - "moves": ["icebeam", "partingshot", "protect", "snarl", "thunderbolt", "thunderwave", "uturn"] - }, - "silvallyfairy": { - "moves": ["flamethrower", "icebeam", "multiattack", "partingshot", "protect", "thunderwave", "uturn"] - }, - "silvallyfighting": { - "moves": ["flamecharge", "multiattack", "protect", "rockslide", "swordsdance"] - }, - "silvallyfire": { - "moves": ["flamethrower", "icebeam", "protect", "snarl", "thunderbolt", "thunderwave", "uturn"] - }, - "silvallyflying": { - "moves": ["flamecharge", "ironhead", "multiattack", "partingshot", "protect", "swordsdance", "thunderwave", "uturn"] - }, - "silvallyghost": { - "moves": ["icebeam", "multiattack", "partingshot", "protect", "uturn"] - }, - "silvallygrass": { - "moves": ["flamethrower", "icebeam", "multiattack", "partingshot", "protect", "thunderwave", "uturn"] - }, - "silvallyground": { - "moves": ["flamecharge", "icebeam", "multiattack", "protect", "rockslide", "swordsdance", "thunderbolt"] - }, - "silvallyice": { - "moves": ["icebeam", "partingshot", "protect", "thunderbolt", "thunderwave", "uturn"] - }, - "silvallypoison": { - "moves": ["flamethrower", "icebeam", "multiattack", "partingshot", "protect", "thunderwave", "uturn"] - }, - "silvallypsychic": { - "moves": ["flamethrower", "multiattack", "partingshot", "protect", "thunderwave", "uturn"] - }, - "silvallyrock": { - "moves": ["flamethrower", "icebeam", "partingshot", "protect", "rockslide", "uturn"] - }, - "silvallysteel": { - "moves": ["flamecharge", "multiattack", "partingshot", "protect", "rockslide", "swordsdance", "uturn"] - }, - "silvallywater": { - "moves": ["flamethrower", "icebeam", "multiattack", "partingshot", "protect", "thunderbolt", "thunderwave", "uturn"] - }, - "minior": { - "moves": ["acrobatics", "earthquake", "powergem", "protect", "shellsmash"] - }, - "komala": { - "moves": ["playrough", "protect", "return", "shadowclaw", "suckerpunch", "swordsdance", "uturn", "woodhammer"] - }, - "turtonator": { - "moves": ["dracometeor", "dragonpulse", "fireblast", "protect", "shellsmash"] - }, - "togedemaru": { - "moves": ["encore", "fakeout", "ironhead", "nuzzle", "spikyshield", "uturn", "zingzap"] - }, - "mimikyu": { - "moves": ["playrough", "protect", "shadowclaw", "shadowsneak", "swordsdance", "willowisp"] - }, - "bruxish": { - "moves": ["aquajet", "crunch", "liquidation", "protect", "psychicfangs", "swordsdance"] - }, - "drampa": { - "moves": ["dracometeor", "dragonpulse", "fireblast", "glare", "hypervoice", "protect", "roost"] - }, - "dhelmise": { - "moves": ["anchorshot", "knockoff", "powerwhip", "protect", "rapidspin"] - }, - "kommoo": { - "moves": ["clangingscales", "closecombat", "dragondance", "poisonjab"] - }, - "tapukoko": { - "moves": ["dazzlinggleam", "hiddenpowerice", "naturesmadness", "protect", "skydrop", "taunt", "thunderbolt", "uturn"] - }, - "tapulele": { - "moves": ["dazzlinggleam", "focusblast", "moonblast", "protect", "psychic", "taunt"] - }, - "tapubulu": { - "moves": ["hornleech", "naturesmadness", "protect", "stoneedge", "superpower", "woodhammer"] - }, - "tapufini": { - "moves": ["healpulse", "moonblast", "muddywater", "naturesmadness", "protect", "swagger", "taunt"] - }, - "solgaleo": { - "moves": ["flareblitz", "morningsun", "protect", "sunsteelstrike", "wideguard", "zenheadbutt"] - }, - "lunala": { - "moves": ["moonblast", "moongeistbeam", "protect", "psychic", "roost", "wideguard"] - }, - "nihilego": { - "moves": ["grassknot", "hiddenpowerice", "powergem", "protect", "sludgebomb", "thunderbolt"] - }, - "buzzwole": { - "moves": ["drainpunch", "icepunch", "leechlife", "poisonjab", "protect", "superpower"] - }, - "pheromosa": { - "moves": ["bugbuzz", "highjumpkick", "icebeam", "poisonjab", "protect", "speedswap", "uturn"] - }, - "xurkitree": { - "moves": ["energyball", "hiddenpowerice", "hypnosis", "protect", "tailglow", "thunderbolt"] - }, - "celesteela": { - "moves": ["earthquake", "fireblast", "heavyslam", "leechseed", "protect", "wideguard"] - }, - "kartana": { - "moves": ["knockoff", "leafblade", "protect", "sacredsword", "smartstrike", "swordsdance"] - }, - "guzzlord": { - "moves": ["dracometeor", "fireblast", "knockoff", "protect", "wideguard"] - }, - "necrozma": { - "moves": ["calmmind", "earthpower", "heatwave", "moonlight", "photongeyser"] - }, - "necrozmaduskmane": { - "moves": ["earthquake", "knockoff", "photongeyser", "rockslide", "sunsteelstrike", "swordsdance"] - }, - "necrozmadawnwings": { - "moves": ["calmmind", "heatwave", "moongeistbeam", "photongeyser", "powergem", "trickroom"] - }, - "magearna": { - "moves": ["aurasphere", "dazzlinggleam", "flashcannon", "fleurcannon", "protect", "trickroom", "voltswitch"] - }, - "marshadow": { - "moves": ["bulkup", "closecombat", "icepunch", "protect", "shadowsneak", "spectralthief"] - }, - "naganadel": { - "moves": ["dracometeor", "dragonpulse", "fireblast", "protect", "sludgebomb", "tailwind", "uturn"] - }, - "stakataka": { - "moves": ["earthquake", "gyroball", "rockslide", "stealthrock", "stoneedge", "superpower", "trickroom"] - }, - "blacephalon": { - "moves": ["fireblast", "heatwave", "hiddenpowerice", "protect", "shadowball", "willowisp"] - }, - "zeraora": { - "moves": ["closecombat", "fakeout", "grassknot", "hiddenpowerice", "knockoff", "plasmafists", "protect", "voltswitch"] - } -} diff --git a/data/mods/gen7/random-doubles-teams.ts b/data/mods/gen7/random-doubles-teams.ts deleted file mode 100644 index 8a6e351f10f5..000000000000 --- a/data/mods/gen7/random-doubles-teams.ts +++ /dev/null @@ -1,1525 +0,0 @@ -import {MoveCounter, RandomGen8Teams, OldRandomBattleSpecies} from '../gen8/random-teams'; -import {PRNG, PRNGSeed} from '../../../sim/prng'; -import {Utils} from '../../../lib'; -import {toID} from '../../../sim/dex'; - -const ZeroAttackHPIVs: {[k: string]: SparseStatsTable} = { - grass: {hp: 30, spa: 30}, - fire: {spa: 30, spe: 30}, - ice: {def: 30}, - ground: {spa: 30, spd: 30}, - fighting: {def: 30, spa: 30, spd: 30, spe: 30}, - electric: {def: 30, spe: 30}, - psychic: {spe: 30}, - flying: {spa: 30, spd: 30, spe: 30}, - rock: {def: 30, spd: 30, spe: 30}, -}; - -export class RandomGen7DoublesTeams extends RandomGen8Teams { - randomDoublesData: {[species: string]: OldRandomBattleSpecies} = require('./random-doubles-data.json'); - - constructor(format: Format | string, prng: PRNG | PRNGSeed | null) { - super(format, prng); - - this.moveEnforcementCheckers = { - Bug: (movePool, moves, abilities, types, counter) => ( - ['megahorn', 'pinmissile'].some(m => movePool.includes(m)) || - !counter.get('Bug') && (abilities.has('Tinted Lens') || abilities.has('Adaptability')) - ), - Dark: (movePool, moves, abilities, types, counter, species) => ( - (!counter.get('Dark') && !abilities.has('Protean')) || - (moves.has('pursuit') && species.types.length > 1 && counter.get('Dark') === 1) - ), - Dragon: (movePool, moves, abilities, types, counter) => ( - !counter.get('Dragon') && - !abilities.has('Aerilate') && !abilities.has('Pixilate') && - !moves.has('dragonascent') && !moves.has('fly') && !moves.has('rest') && !moves.has('sleeptalk') - ), - Electric: (movePool, moves, abilities, types, counter) => !counter.get('Electric') || movePool.includes('thunder'), - Fairy: (movePool, moves, abilities, types, counter) => ( - (!counter.get('Fairy') && !types.has('Flying') && !abilities.has('Pixilate')) - ), - Fighting: (movePool, moves, abilities, types, counter) => !counter.get('Fighting') || !counter.get('stab'), - Fire: (movePool, moves, abilities, types, counter) => ( - !counter.get('Fire') || ['eruption', 'quiverdance'].some(m => movePool.includes(m)) || - moves.has('flamecharge') && (movePool.includes('flareblitz') || movePool.includes('blueflare')) - ), - Flying: (movePool, moves, abilities, types, counter, species) => ( - !counter.get('Flying') && ( - species.id === 'rotomfan' || - abilities.has('Gale Wings') || - abilities.has('Serene Grace') || ( - types.has('Normal') && (movePool.includes('beakblast') || movePool.includes('bravebird')) - ) - ) - ), - Ghost: (movePool, moves, abilities, types, counter) => ( - (!counter.get('Ghost') || movePool.includes('spectralthief')) && - !types.has('Dark') && - !abilities.has('Steelworker') - ), - Grass: (movePool, moves, abilities, types, counter, species) => ( - !counter.get('Grass') && (species.baseStats.atk >= 100 || movePool.includes('leafstorm')) - ), - Ground: (movePool, moves, abilities, types, counter) => ( - !counter.get('Ground') && !moves.has('rest') && !moves.has('sleeptalk') - ), - Ice: (movePool, moves, abilities, types, counter) => ( - !abilities.has('Refrigerate') && ( - !counter.get('Ice') || - movePool.includes('iciclecrash') || - (abilities.has('Snow Warning') && movePool.includes('blizzard')) - ) - ), - Normal: movePool => movePool.includes('facade'), - Poison: (movePool, moves, abilities, types, counter) => ( - !counter.get('Poison') && - (!!counter.setupType || abilities.has('Adaptability') || abilities.has('Sheer Force') || movePool.includes('gunkshot')) - ), - Psychic: (movePool, moves, abilities, types, counter, species) => ( - !counter.get('Psychic') && ( - abilities.has('Psychic Surge') || - movePool.includes('psychicfangs') || - (!types.has('Steel') && !types.has('Flying') && !abilities.has('Pixilate') && - counter.get('stab') < species.types.length) - ) - ), - Rock: (movePool, moves, abilities, types, counter, species) => ( - !counter.get('Rock') && - !types.has('Fairy') && - (counter.setupType === 'Physical' || species.baseStats.atk >= 105 || abilities.has('Rock Head')) - ), - Steel: (movePool, moves, abilities, types, counter, species) => ( - !counter.get('Steel') && (species.baseStats.atk >= 100 || abilities.has('Steelworker')) - ), - Water: (movePool, moves, abilities, types, counter, species) => ( - (!counter.get('Water') && !abilities.has('Protean')) || - !counter.get('stab') || - movePool.includes('crabhammer') || - (abilities.has('Huge Power') && movePool.includes('aquajet')) - ), - Adaptability: (movePool, moves, abilities, types, counter, species) => ( - !counter.setupType && - species.types.length > 1 && - (!counter.get(species.types[0]) || !counter.get(species.types[1])) - ), - Contrary: (movePool, moves, abilities, types, counter, species) => ( - !counter.get('contrary') && species.name !== 'Shuckle' - ), - 'Slow Start': movePool => movePool.includes('substitute'), - }; - } - - shouldCullMove( - move: Move, - types: Set, - moves: Set, - abilities: Set, - counter: MoveCounter, - movePool: string[], - teamDetails: RandomTeamsTypes.TeamDetails, - species: Species, - isLead: boolean - ): {cull: boolean, isSetup?: boolean} { - switch (move.id) { - // Not very useful without their supporting moves - case 'clangingscales': case 'electricterrain': case 'happyhour': case 'holdhands': - return { - cull: !!teamDetails.zMove, - isSetup: move.id === 'happyhour' || move.id === 'holdhands', - }; - case 'cottonguard': case 'defendorder': - return {cull: !counter.get('recovery') && !moves.has('rest')}; - case 'bounce': case 'dig': case 'fly': - return {cull: !!teamDetails.zMove || counter.setupType !== 'Physical'}; - case 'focuspunch': - return {cull: !moves.has('substitute') || counter.damagingMoves.size < 2}; - case 'icebeam': - return {cull: abilities.has('Tinted Lens') && !!counter.get('Status')}; - case 'lightscreen': - if (movePool.length > 1) { - const screen = movePool.indexOf('reflect'); - if (screen >= 0) this.fastPop(movePool, screen); - } - return {cull: !moves.has('reflect')}; - case 'perishsong': - return {cull: !moves.has('protect')}; - case 'reflect': - if (movePool.length > 1) { - const screen = movePool.indexOf('lightscreen'); - if (screen >= 0) this.fastPop(movePool, screen); - } - return {cull: !moves.has('calmmind') && !moves.has('lightscreen')}; - case 'rest': - return {cull: movePool.includes('sleeptalk')}; - case 'sleeptalk': - if (movePool.length > 1) { - const rest = movePool.indexOf('rest'); - if (rest >= 0) this.fastPop(movePool, rest); - } - return {cull: !moves.has('rest')}; - case 'storedpower': - return {cull: !counter.setupType}; - case 'switcheroo': case 'trick': - return {cull: ( - counter.get('Physical') + counter.get('Special') < 3 || - ['electroweb', 'snarl', 'suckerpunch'].some(m => moves.has(m)) - )}; - - // Set up once and only if we have the moves for it - case 'bellydrum': case 'bulkup': case 'coil': case 'curse': case 'dragondance': case 'honeclaws': case 'swordsdance': - return {cull: ( - counter.setupType !== 'Physical' || - counter.get('physicalsetup') > 1 || - (counter.get('Physical') + counter.get('physicalpool') < 2) || - (move.id === 'bellydrum' && !abilities.has('Unburden') && !counter.get('priority')) - ), isSetup: true}; - case 'calmmind': case 'geomancy': case 'nastyplot': case 'tailglow': - if (types.has('Dark') && moves.has('darkpulse')) { - counter.setupType = 'Special'; - return {cull: false, isSetup: true}; - } - return {cull: ( - counter.setupType !== 'Special' || - counter.get('specialsetup') > 1 || - (counter.get('Special') + counter.get('specialpool') < 2) - ), isSetup: true}; - case 'growth': case 'shellsmash': case 'workup': - return {cull: ( - counter.setupType !== 'Mixed' || - counter.get('mixedsetup') > 1 || - counter.damagingMoves.size + counter.get('physicalpool') + counter.get('specialpool') < 2 || - (move.id === 'growth' && !moves.has('sunnyday')) - ), isSetup: true}; - case 'agility': case 'autotomize': case 'rockpolish': case 'shiftgear': - return {cull: counter.damagingMoves.size < 2, isSetup: !counter.setupType}; - case 'flamecharge': - return {cull: ( - moves.has('dracometeor') || - moves.has('overheat') || - (counter.damagingMoves.size < 3 && !counter.setupType) - )}; - - // Bad after setup - case 'circlethrow': case 'dragontail': - return {cull: ( - !!counter.get('speedsetup') || - moves.has('superpower') || - (!!counter.setupType && ((!moves.has('rest') && !moves.has('sleeptalk')) || moves.has('stormthrow'))) || - ['encore', 'raindance', 'roar', 'trickroom', 'whirlwind'].some(m => moves.has(m)) || - (counter.get(move.type) > 1 && counter.get('Status') > 1) || - (abilities.has('Sheer Force') && !!counter.get('sheerforce')) - )}; - case 'defog': - return {cull: !!counter.setupType || moves.has('spikes') || moves.has('stealthrock') || !!teamDetails.defog}; - case 'fakeout': case 'tailwind': - return {cull: !!counter.setupType || ['substitute', 'switcheroo', 'trick'].some(m => moves.has(m))}; - case 'foulplay': - return {cull: ( - !!counter.setupType || - !!counter.get('speedsetup') || - counter.get('Dark') > 2 || - moves.has('clearsmog') || - (!!counter.get('priority') && counter.damagingMoves.size - 1 === counter.get('priority')) - )}; - case 'haze': case 'spikes': - return {cull: !!counter.setupType || !!counter.get('speedsetup') || moves.has('trickroom')}; - case 'healbell': case 'technoblast': - return {cull: !!counter.get('speedsetup')}; - case 'healingwish': case 'memento': - return {cull: !!counter.setupType || !!counter.get('recovery') || moves.has('substitute')}; - case 'helpinghand': case 'superfang': case 'yawn': - return {cull: !!counter.setupType}; - case 'icywind': case 'stringshot': - return {cull: !!counter.get('speedsetup') || moves.has('trickroom')}; - case 'leechseed': case 'roar': case 'whirlwind': - return {cull: ( - !!counter.setupType || - !!counter.get('speedsetup') || - moves.has('dragontail') || - (movePool.includes('protect') || movePool.includes('spikyshield')) - )}; - case 'protect': - const doublesCondition = ( - moves.has('fakeout') || - (moves.has('tailwind') && moves.has('roost')) || - movePool.includes('bellydrum') || - movePool.includes('shellsmash') - ); - return {cull: ( - doublesCondition || - !!counter.get('speedsetup') || - moves.has('rest') || moves.has('roar') || moves.has('whirlwind') || - (moves.has('lightscreen') && moves.has('reflect')) - )}; - case 'pursuit': - return {cull: ( - !!counter.setupType || - counter.get('Status') > 1 || - counter.get('Dark') > 2 || - (moves.has('knockoff') && !types.has('Dark')) - )}; - case 'rapidspin': - return {cull: !!counter.setupType || !!teamDetails.rapidSpin}; - case 'reversal': - return {cull: moves.has('substitute') && !!teamDetails.zMove}; - case 'seismictoss': - return {cull: !abilities.has('Parental Bond') && (counter.damagingMoves.size > 1 || !!counter.setupType)}; - case 'stealthrock': - return {cull: ( - !!counter.setupType || - !!counter.get('speedsetup') || - ['rest', 'substitute', 'trickroom'].some(m => moves.has(m)) || - !!teamDetails.stealthRock - )}; - case 'stickyweb': - return {cull: !!teamDetails.stickyWeb}; - case 'toxicspikes': - return {cull: !!counter.setupType || !!teamDetails.toxicSpikes}; - case 'trickroom': - return {cull: ( - !!counter.setupType || - !!counter.get('speedsetup') || - counter.damagingMoves.size < 2 || - moves.has('lightscreen') || - moves.has('reflect') - )}; - case 'uturn': - return {cull: ( - (abilities.has('Speed Boost') && moves.has('protect')) || - (abilities.has('Protean') && counter.get('Status') > 2) || - !!counter.setupType || - !!counter.get('speedsetup') - )}; - case 'voltswitch': - return {cull: ( - !!counter.setupType || - !!counter.get('speedsetup') || - movePool.includes('boltstrike') || - ['electricterrain', 'raindance', 'uturn'].some(m => moves.has(m)) - )}; - case 'wish': - return {cull: ( - species.baseStats.hp < 110 && - !abilities.has('Regenerator') && - !movePool.includes('protect') && - !['ironhead', 'protect', 'spikyshield', 'uturn'].some(m => moves.has(m)) - )}; - - // Bit redundant to have both - // Attacks: - case 'bugbite': case 'bugbuzz': case 'infestation': case 'signalbeam': - return {cull: moves.has('uturn') && !counter.setupType && !abilities.has('Tinted Lens')}; - case 'darkestlariat': case 'nightslash': - return {cull: moves.has('knockoff') || moves.has('pursuit')}; - case 'darkpulse': - return {cull: ['crunch', 'knockoff', 'hyperspacefury'].some(m => moves.has(m)) && counter.setupType !== 'Special'}; - case 'suckerpunch': - return {cull: counter.damagingMoves.size < 2 || moves.has('glare') || !types.has('Dark') && counter.get('Dark') > 1}; - case 'dragonpulse': case 'spacialrend': - return {cull: moves.has('dracometeor') || moves.has('outrage') || (moves.has('dragontail') && !counter.setupType)}; - case 'outrage': - return {cull: ( - moves.has('dragonclaw') || - (moves.has('dracometeor') && counter.damagingMoves.size < 3) || - (moves.has('clangingscales') && !teamDetails.zMove) - )}; - case 'thunderbolt': - return {cull: ['discharge', 'wildcharge'].some(m => moves.has(m))}; - case 'moonblast': - return {cull: moves.has('dazzlinggleam')}; - case 'aurasphere': case 'focusblast': - return {cull: (((moves.has('closecombat') || moves.has('superpower')) && counter.setupType !== 'Special'))}; - case 'drainpunch': - return {cull: ( - (!moves.has('bulkup') && (moves.has('closecombat') || moves.has('highjumpkick'))) || - ((moves.has('focusblast') || moves.has('superpower')) && counter.setupType !== 'Physical') - )}; - case 'closecombat': case 'highjumpkick': - return {cull: ( - (moves.has('bulkup') && moves.has('drainpunch')) || - (counter.setupType === 'Special' && ['aurasphere', 'focusblast'].some(m => moves.has(m) || movePool.includes(m))) - )}; - case 'dynamicpunch': case 'vacuumwave': - return {cull: (moves.has('closecombat') || moves.has('facade')) && counter.setupType !== 'Special'}; - case 'stormthrow': - return {cull: moves.has('circlethrow')}; - case 'superpower': - return { - cull: (counter.get('Fighting') > 1 && !!counter.setupType), - isSetup: abilities.has('Contrary'), - }; - case 'fierydance': case 'heatwave': - return {cull: moves.has('fireblast')}; - case 'firefang': case 'firepunch': case 'flamethrower': - return {cull: ( - ['blazekick', 'heatwave', 'overheat'].some(m => moves.has(m)) || - ((moves.has('fireblast') || moves.has('lavaplume')) && counter.setupType !== 'Physical') - )}; - case 'fireblast': case 'magmastorm': - return {cull: ( - (moves.has('flareblitz') && counter.setupType !== 'Special') || - (moves.has('lavaplume') && !counter.setupType && !counter.get('speedsetup')) - )}; - case 'lavaplume': - return {cull: moves.has('firepunch') || moves.has('fireblast') && (!!counter.setupType || !!counter.get('speedsetup'))}; - case 'overheat': - return {cull: ['fireblast', 'flareblitz', 'lavaplume'].some(m => moves.has(m))}; - case 'hurricane': - return {cull: moves.has('bravebird') || moves.has('airslash') && !!counter.get('Status')}; - case 'hex': - return {cull: !moves.has('thunderwave') && !moves.has('willowisp')}; - case 'shadowball': - return {cull: moves.has('darkpulse') || (moves.has('hex') && moves.has('willowisp'))}; - case 'shadowclaw': - return {cull: ( - moves.has('shadowforce') || - moves.has('shadowsneak') || - (moves.has('shadowball') && counter.setupType !== 'Physical') - )}; - case 'shadowsneak': - return {cull: ( - moves.has('trick') || - (types.has('Ghost') && species.types.length > 1 && counter.get('stab') < 2) - )}; - case 'gigadrain': - return {cull: ( - moves.has('petaldance') || - moves.has('powerwhip') || - (moves.has('leafstorm') && counter.get('Special') < 4 && !counter.setupType && !moves.has('trickroom')) - )}; - case 'leafblade': case 'woodhammer': - return {cull: ( - (moves.has('gigadrain') && counter.setupType !== 'Physical') || - (moves.has('hornleech') && !!counter.setupType) - )}; - case 'leafstorm': - return {cull: ( - moves.has('trickroom') || - moves.has('energyball') || - (counter.get('Grass') > 1 && !!counter.setupType) - )}; - case 'solarbeam': - return {cull: ( - (!abilities.has('Drought') && !moves.has('sunnyday')) || - moves.has('gigadrain') || - moves.has('leafstorm') - )}; - case 'bonemerang': case 'precipiceblades': - return {cull: moves.has('earthquake')}; - case 'earthpower': - return {cull: moves.has('earthquake') && counter.setupType !== 'Special'}; - case 'earthquake': - return {cull: moves.has('highhorsepower') || moves.has('closecombat') && abilities.has('Aerilate')}; - case 'freezedry': - return {cull: ( - moves.has('icebeam') || moves.has('icywind') || counter.get('stab') < species.types.length || - (moves.has('blizzard') && !!counter.setupType) - )}; - case 'bodyslam': case 'return': - return {cull: ( - moves.has('doubleedge') || - (moves.has('glare') && moves.has('headbutt')) || - (move.id === 'return' && moves.has('bodyslam')) - )}; - case 'endeavor': - return {cull: !isLead && !abilities.has('Defeatist')}; - case 'explosion': - return {cull: ( - !!counter.setupType || - moves.has('wish') || - (abilities.has('Refrigerate') && (moves.has('freezedry') || movePool.includes('return'))) - )}; - case 'extremespeed': case 'skyattack': - return {cull: moves.has('substitute') || counter.setupType !== 'Physical' && moves.has('vacuumwave')}; - case 'facade': - return {cull: moves.has('bulkup')}; - case 'hiddenpower': - return {cull: ( - moves.has('rest') || - (!counter.get('stab') && counter.damagingMoves.size < 2) || - // Force Moonblast on Special-setup Fairies - (counter.setupType === 'Special' && types.has('Fairy') && movePool.includes('moonblast')) - )}; - case 'hypervoice': - return {cull: moves.has('blizzard')}; - case 'judgment': - return {cull: counter.setupType !== 'Special' && counter.get('stab') > 1}; - case 'quickattack': - return {cull: ( - !!counter.get('speedsetup') || - (types.has('Rock') && !!counter.get('Status')) || - moves.has('feint') || - (types.has('Normal') && !counter.get('stab')) - )}; - case 'weatherball': - return {cull: !moves.has('raindance') && !moves.has('sunnyday')}; - case 'poisonjab': - return {cull: moves.has('gunkshot')}; - case 'acidspray': case 'sludgewave': - return {cull: moves.has('poisonjab') || moves.has('sludgebomb')}; - case 'psychic': - return {cull: moves.has('psyshock')}; - case 'psychocut': case 'zenheadbutt': - return {cull: ( - ((moves.has('psychic') || moves.has('psyshock')) && counter.setupType !== 'Physical') || - (abilities.has('Contrary') && !counter.setupType && !!counter.get('physicalpool')) - )}; - case 'psyshock': - const psychic = movePool.indexOf('psychic'); - if (psychic >= 0) this.fastPop(movePool, psychic); - return {cull: false}; - case 'headsmash': - return {cull: moves.has('stoneedge') || moves.has('rockslide')}; - case 'stoneedge': - return {cull: moves.has('rockslide') || (species.id === 'machamp' && !moves.has('dynamicpunch'))}; - case 'bulletpunch': - return {cull: types.has('Steel') && counter.get('stab') < 2 && !abilities.has('Technician')}; - case 'flashcannon': - return {cull: (moves.has('ironhead') || moves.has('meteormash')) && counter.setupType !== 'Special'}; - case 'hydropump': - return {cull: ( - moves.has('liquidation') || - moves.has('waterfall') || ( - moves.has('scald') && - ((counter.get('Special') < 4 && !moves.has('uturn')) || (species.types.length > 1 && counter.get('stab') < 3)) - ) - )}; - case 'muddywater': - return {cull: moves.has('scald') || moves.has('hydropump')}; - case 'originpulse': case 'surf': - return {cull: moves.has('hydropump') || moves.has('scald')}; - case 'scald': - return {cull: ['liquidation', 'waterfall', 'waterpulse'].some(m => moves.has(m))}; - - // Status: - case 'electroweb': case 'stunspore': case 'thunderwave': - return {cull: ( - !!counter.setupType || - !!counter.get('speedsetup') || - ['discharge', 'spore', 'toxic', 'trickroom', 'yawn'].some(m => moves.has(m)) - )}; - case 'glare': case 'headbutt': - return {cull: moves.has('bodyslam') || !moves.has('glare')}; - case 'toxic': - const otherStatus = ['hypnosis', 'sleeppowder', 'toxicspikes', 'willowisp', 'yawn'].some(m => moves.has(m)); - return {cull: otherStatus || !!counter.setupType || moves.has('flamecharge') || moves.has('raindance')}; - case 'raindance': - return {cull: ( - counter.get('Physical') + counter.get('Special') < 2 || - moves.has('rest') || - (!types.has('Water') && !counter.get('Water')) - )}; - case 'sunnyday': - const cull = ( - counter.get('Physical') + counter.get('Special') < 2 || - (!abilities.has('Chlorophyll') && !abilities.has('Flower Gift') && !moves.has('solarbeam')) - ); - - if (cull && movePool.length > 1) { - const solarbeam = movePool.indexOf('solarbeam'); - if (solarbeam >= 0) this.fastPop(movePool, solarbeam); - if (movePool.length > 1) { - const weatherball = movePool.indexOf('weatherball'); - if (weatherball >= 0) this.fastPop(movePool, weatherball); - } - } - - return {cull}; - case 'painsplit': case 'recover': case 'roost': case 'synthesis': - return {cull: ( - moves.has('leechseed') || moves.has('rest') || - (moves.has('wish') && (moves.has('protect') || movePool.includes('protect'))) - )}; - case 'substitute': - const moveBasedCull = ['copycat', 'dragondance', 'shiftgear'].some(m => movePool.includes(m)); - return {cull: ( - moves.has('dracometeor') || - (moves.has('leafstorm') && !abilities.has('Contrary')) || - ['encore', 'pursuit', 'rest', 'taunt', 'uturn', 'voltswitch', 'whirlwind'].some(m => moves.has(m)) || - moveBasedCull - )}; - case 'powersplit': - return {cull: moves.has('guardsplit')}; - case 'wideguard': - return {cull: moves.has('protect')}; - case 'bravebird': - // Hurricane > Brave Bird in the rain - return {cull: (moves.has('raindance') || abilities.has('Drizzle')) && movePool.includes('hurricane')}; - } - return {cull: false}; - } - - shouldCullAbility( - ability: string, - types: Set, - moves: Set, - abilities: Set, - counter: MoveCounter, - movePool: string[], - teamDetails: RandomTeamsTypes.TeamDetails, - species: Species, - ): boolean { - switch (ability) { - case 'Battle Bond': case 'Dazzling': case 'Flare Boost': case 'Hyper Cutter': - case 'Ice Body': case 'Innards Out': case 'Moody': case 'Steadfast': case 'Magician': - return true; - case 'Aerilate': case 'Galvanize': case 'Pixilate': case 'Refrigerate': - return !counter.get('Normal'); - case 'Analytic': case 'Download': - return species.nfe; - case 'Battle Armor': case 'Sturdy': - return (!!counter.get('recoil') && !counter.get('recovery')); - case 'Chlorophyll': - return ( - species.baseStats.spe > 100 || - abilities.has('Harvest') || - (!moves.has('sunnyday') && !teamDetails.sun) - ); - case 'Competitive': - return (!counter.get('Special') || moves.has('sleeptalk') && moves.has('rest')); - case 'Compound Eyes': case 'No Guard': - return !counter.get('inaccurate'); - case 'Contrary': case 'Iron Fist': case 'Skill Link': case 'Strong Jaw': - return !counter.get(toID(ability)); - case 'Defiant': case 'Justified': case 'Moxie': - return !counter.get('Physical') || moves.has('dragontail'); - case 'Flash Fire': - return abilities.has('Drought'); - case 'Gluttony': - return !moves.has('bellydrum'); - case 'Harvest': - return abilities.has('Frisk'); - case 'Hustle': - return counter.get('Physical') < 2; - case 'Hydration': case 'Rain Dish': case 'Swift Swim': - return ( - species.baseStats.spe > 100 || !moves.has('raindance') && !teamDetails.rain || - !moves.has('raindance') && ['Rock Head', 'Water Absorb'].some(abil => abilities.has(abil)) - ); - case 'Slush Rush': case 'Snow Cloak': - return !teamDetails.hail; - case 'Immunity': case 'Snow Warning': - return (moves.has('facade') || moves.has('hypervoice')); - case 'Intimidate': - return (moves.has('bodyslam') || moves.has('rest') || abilities.has('Reckless') && counter.get('recoil') > 1); - case 'Lightning Rod': - return ( - species.types.includes('Ground') || - (!!teamDetails.rain || moves.has('raindance')) && abilities.has('Swift Swim') - ); - case 'Limber': - return species.types.includes('Electric'); - case 'Liquid Voice': - return !counter.get('sound'); - case 'Magic Guard': case 'Speed Boost': - return (abilities.has('Tinted Lens') && (!counter.get('Status') || moves.has('uturn'))); - case 'Magnet Pull': - return (!!counter.get('Normal') || !types.has('Electric') && !moves.has('earthpower')); - case 'Mold Breaker': - return ( - moves.has('acrobatics') || moves.has('sleeptalk') || - abilities.has('Adaptability') || abilities.has('Iron Fist') || - (abilities.has('Sheer Force') && !!counter.get('sheerforce')) - ); - case 'Overgrow': - return !counter.get('Grass'); - case 'Poison Heal': - return (abilities.has('Technician') && !!counter.get('technician')); - case 'Power Construct': - return species.forme === '10%'; - case 'Prankster': - return !counter.get('Status'); - case 'Pressure': case 'Synchronize': - return (counter.get('Status') < 2 || !!counter.get('recoil') || !!species.isMega); - case 'Regenerator': - return abilities.has('Magic Guard'); - case 'Quick Feet': - return moves.has('bellydrum'); - case 'Reckless': case 'Rock Head': - return (!counter.get('recoil') || !!species.isMega); - case 'Sand Force': case 'Sand Rush': case 'Sand Veil': - return !teamDetails.sand; - case 'Scrappy': - return !species.types.includes('Normal'); - case 'Serene Grace': - return (!counter.get('serenegrace') || species.name === 'Blissey'); - case 'Sheer Force': - return (!counter.get('sheerforce') || moves.has('doubleedge') || abilities.has('Guts') || !!species.isMega); - case 'Simple': - return (!counter.setupType && !moves.has('flamecharge')); - case 'Solar Power': - return (!counter.get('Special') || abilities.has('Harvest') || !teamDetails.sun || !!species.isMega); - case 'Swarm': - return (!counter.get('Bug') || !!species.isMega); - case 'Sweet Veil': - return types.has('Grass'); - case 'Technician': - return (!counter.get('technician') || moves.has('tailslap') || !!species.isMega); - case 'Tinted Lens': - return ( - moves.has('protect') || !!counter.get('damage') || - (counter.get('Status') > 2 && !counter.setupType) || - abilities.has('Prankster') || - (abilities.has('Magic Guard') && !!counter.get('Status')) - ); - case 'Torrent': - return (!counter.get('Water') || !!species.isMega); - case 'Unaware': - return (!!counter.setupType || abilities.has('Magic Guard')); - case 'Unburden': - return (!!species.isMega || abilities.has('Prankster') || !counter.setupType && !moves.has('acrobatics')); - case 'Water Absorb': - return moves.has('raindance') || ['Drizzle', 'Unaware', 'Volt Absorb'].some(abil => abilities.has(abil)); - case 'Weak Armor': - return counter.setupType !== 'Physical'; - } - - return false; - } - - - getAbility( - types: Set, - moves: Set, - abilities: Set, - counter: MoveCounter, - movePool: string[], - teamDetails: RandomTeamsTypes.TeamDetails, - species: Species - ): string { - if (species.battleOnly && !species.requiredAbility) { - abilities = new Set(Object.values(this.dex.species.get(species.battleOnly as string).abilities)); - } - const abilityData = Array.from(abilities).map(a => this.dex.abilities.get(a)); - Utils.sortBy(abilityData, abil => -abil.rating); - - if (abilityData.length <= 1) return abilityData[0].name; - - // Hard-code abilities here - if ( - abilities.has('Guts') && - !abilities.has('Quick Feet') && - (moves.has('facade') || (moves.has('sleeptalk') && moves.has('rest'))) - ) return 'Guts'; - if (abilities.has('Intimidate')) return 'Intimidate'; - if (abilities.has('Guts')) return 'Guts'; - if (abilities.has('Storm Drain')) return 'Storm Drain'; - if (abilities.has('Harvest')) return 'Harvest'; - if (abilities.has('Unburden') && !abilities.has('Prankster') && !species.isMega) return 'Unburden'; - if (species.name === 'Ambipom' && !counter.get('technician')) { - // If it doesn't qualify for Technician, Skill Link is useless on it - return 'Pickup'; - } - if (species.name === 'Raticate-Alola') return 'Hustle'; - if (species.baseSpecies === 'Altaria') return 'Natural Cure'; - - let abilityAllowed: Ability[] = []; - // Obtain a list of abilities that are allowed (not culled) - for (const ability of abilityData) { - if (ability.rating >= 1 && !this.shouldCullAbility( - ability.name, types, moves, abilities, counter, movePool, teamDetails, species - )) { - abilityAllowed.push(ability); - } - } - - // If all abilities are rejected, re-allow all abilities - if (!abilityAllowed.length) { - for (const ability of abilityData) { - if (ability.rating > 0) abilityAllowed.push(ability); - } - if (!abilityAllowed.length) abilityAllowed = abilityData; - } - - if (abilityAllowed.length === 1) return abilityAllowed[0].name; - // Sort abilities by rating with an element of randomness - // All three abilities can be chosen - if (abilityAllowed[2] && abilityAllowed[0].rating - 0.5 <= abilityAllowed[2].rating) { - if (abilityAllowed[1].rating <= abilityAllowed[2].rating) { - if (this.randomChance(1, 2)) [abilityAllowed[1], abilityAllowed[2]] = [abilityAllowed[2], abilityAllowed[1]]; - } else { - if (this.randomChance(1, 3)) [abilityAllowed[1], abilityAllowed[2]] = [abilityAllowed[2], abilityAllowed[1]]; - } - if (abilityAllowed[0].rating <= abilityAllowed[1].rating) { - if (this.randomChance(2, 3)) [abilityAllowed[0], abilityAllowed[1]] = [abilityAllowed[1], abilityAllowed[0]]; - } else { - if (this.randomChance(1, 2)) [abilityAllowed[0], abilityAllowed[1]] = [abilityAllowed[1], abilityAllowed[0]]; - } - } else { - // Third ability cannot be chosen - if (abilityAllowed[0].rating <= abilityAllowed[1].rating) { - if (this.randomChance(1, 2)) [abilityAllowed[0], abilityAllowed[1]] = [abilityAllowed[1], abilityAllowed[0]]; - } else if (abilityAllowed[0].rating - 0.5 <= abilityAllowed[1].rating) { - if (this.randomChance(1, 3)) [abilityAllowed[0], abilityAllowed[1]] = [abilityAllowed[1], abilityAllowed[0]]; - } - } - - // After sorting, choose the first ability - return abilityAllowed[0].name; - } - - /** Item generation specific to Random Doubles */ - getDoublesItem( - ability: string, - types: Set, - moves: Set, - abilities: Set, - counter: MoveCounter, - teamDetails: RandomTeamsTypes.TeamDetails, - species: Species, - ): string | undefined { - const defensiveStatTotal = species.baseStats.hp + species.baseStats.def + species.baseStats.spd; - if (species.requiredItems) { - if ( - species.baseSpecies === 'Arceus' && - (moves.has('judgment') || !counter.get(species.types[0]) || teamDetails.zMove) - ) { - // Judgment doesn't change type with Z-Crystals - return species.requiredItems[0]; - } - return this.sample(species.requiredItems); - } - - // First, the extra high-priority items - if (species.name === 'Dedenne') return moves.has('substitute') ? 'Petaya Berry' : 'Sitrus Berry'; - if (species.name === 'Deoxys-Attack') return 'Life Orb'; - if (species.name === 'Farfetch\u2019d') return 'Stick'; - if (species.name === 'Genesect' && moves.has('technoblast')) return 'Douse Drive'; - if (species.baseSpecies === 'Marowak') return 'Thick Club'; - if (species.name === 'Pikachu') return 'Light Ball'; - if (species.name === 'Shedinja' || species.name === 'Smeargle') return 'Focus Sash'; - if (species.name === 'Unfezant' && counter.get('Physical') >= 2) return 'Scope Lens'; - if (species.name === 'Unown') return 'Choice Specs'; - if (species.name === 'Wobbuffet') return 'Custap Berry'; - if (ability === 'Harvest' || ability === 'Emergency Exit' && !!counter.get('Status')) return 'Sitrus Berry'; - if (ability === 'Imposter') return 'Choice Scarf'; - if (ability === 'Poison Heal') return 'Toxic Orb'; - if (species.nfe) return (ability === 'Technician' && counter.get('Physical') >= 4) ? 'Choice Band' : 'Eviolite'; - if (moves.has('switcheroo') || moves.has('trick')) { - if (species.baseStats.spe >= 60 && species.baseStats.spe <= 108) { - return 'Choice Scarf'; - } else { - return (counter.get('Physical') > counter.get('Special')) ? 'Choice Band' : 'Choice Specs'; - } - } - if (moves.has('bellydrum')) { - if (ability === 'Gluttony') { - return `${this.sample(['Aguav', 'Figy', 'Iapapa', 'Mago', 'Wiki'])} Berry`; - } else if (species.baseStats.spe <= 50 && !teamDetails.zMove && this.randomChance(1, 2)) { - return 'Normalium Z'; - } else { - return 'Sitrus Berry'; - } - } - if (moves.has('copycat') && counter.get('Physical') >= 3) return 'Choice Band'; - if (moves.has('geomancy') || moves.has('skyattack')) return 'Power Herb'; - if (moves.has('shellsmash')) { - return (ability === 'Solid Rock' && !!counter.get('priority')) ? 'Weakness Policy' : 'White Herb'; - } - if ((ability === 'Guts' || moves.has('facade')) && !moves.has('sleeptalk')) { - return (types.has('Fire') || ability === 'Quick Feet' || ability === 'Toxic Boost') ? 'Toxic Orb' : 'Flame Orb'; - } - if (ability === 'Magic Guard' && counter.damagingMoves.size > 1) { - return moves.has('counter') ? 'Focus Sash' : 'Life Orb'; - } - if (ability === 'Sheer Force' && counter.get('sheerforce')) return 'Life Orb'; - if (ability === 'Unburden') return moves.has('fakeout') ? 'Normal Gem' : 'Sitrus Berry'; - if (moves.has('acrobatics')) return ''; - if (moves.has('electricterrain') || ability === 'Electric Surge' && moves.has('thunderbolt')) return 'Electrium Z'; - if ( - moves.has('happyhour') || - moves.has('holdhands') || - (moves.has('encore') && ability === 'Contrary') - ) return 'Normalium Z'; - if (moves.has('raindance')) { - if (species.baseSpecies === 'Castform' && !teamDetails.zMove) { - return 'Waterium Z'; - } else { - return (ability === 'Forecast') ? 'Damp Rock' : 'Life Orb'; - } - } - if (moves.has('sunnyday')) { - if ((species.baseSpecies === 'Castform' || species.baseSpecies === 'Cherrim') && !teamDetails.zMove) { - return 'Firium Z'; - } else { - return (ability === 'Forecast') ? 'Heat Rock' : 'Life Orb'; - } - } - - if (moves.has('solarbeam') && ability !== 'Drought' && !moves.has('sunnyday') && !teamDetails.sun) { - return !teamDetails.zMove ? 'Grassium Z' : 'Power Herb'; - } - - if (moves.has('auroraveil') || moves.has('lightscreen') && moves.has('reflect')) return 'Light Clay'; - if ( - moves.has('rest') && !moves.has('sleeptalk') && - ability !== 'Natural Cure' && ability !== 'Shed Skin' && ability !== 'Shadow Tag' - ) { - return 'Chesto Berry'; - } - - // Z-Moves - if (!teamDetails.zMove) { - if (species.name === 'Decidueye' && moves.has('spiritshackle') && counter.setupType) { - return 'Decidium Z'; - } - if (species.name === 'Kommo-o') return moves.has('clangingscales') ? 'Kommonium Z' : 'Dragonium Z'; - if (species.baseSpecies === 'Lycanroc' && moves.has('stoneedge') && counter.setupType) { - return 'Lycanium Z'; - } - if (species.name === 'Marshadow' && moves.has('spectralthief') && counter.setupType) { - return 'Marshadium Z'; - } - if (species.name === 'Necrozma-Dusk-Mane' || species.name === 'Necrozma-Dawn-Wings') { - if (moves.has('autotomize') && moves.has('sunsteelstrike')) { - return 'Solganium Z'; - } else if (moves.has('trickroom') && moves.has('moongeistbeam')) { - return 'Lunalium Z'; - } else { - return 'Ultranecrozium Z'; - } - } - - if (species.name === 'Mimikyu' && moves.has('playrough') && counter.setupType) return 'Mimikium Z'; - if (species.name === 'Raichu-Alola' && moves.has('thunderbolt') && counter.setupType) return 'Aloraichium Z'; - if (moves.has('bugbuzz') && counter.setupType && species.baseStats.spa > 100) return 'Buginium Z'; - if ( - (moves.has('darkpulse') && ability === 'Fur Coat' && counter.setupType) || - (moves.has('suckerpunch') && ability === 'Moxie' && counter.get('Dark') < 2) - ) { - return 'Darkinium Z'; - } - if (moves.has('outrage') && counter.setupType && !moves.has('fly')) return 'Dragonium Z'; - if (moves.has('fleurcannon') && !!counter.get('speedsetup')) return 'Fairium Z'; - if ( - (moves.has('focusblast') && types.has('Fighting') && counter.setupType) || - (moves.has('reversal') && moves.has('substitute')) - ) { - return 'Fightinium Z'; - } - if ( - moves.has('fly') || - (moves.has('hurricane') && species.baseStats.spa >= 125 && (!!counter.get('Status') || moves.has('superpower'))) || - ((moves.has('bounce') || moves.has('bravebird')) && counter.setupType) - ) { - return 'Flyinium Z'; - } - if (moves.has('shadowball') && counter.setupType && ability === 'Beast Boost') return 'Ghostium Z'; - if ( - moves.has('sleeppowder') && types.has('Grass') && - counter.setupType && species.baseStats.spe <= 70 - ) { - return 'Grassium Z'; - } - if (moves.has('magmastorm')) return 'Firium Z'; - if (moves.has('dig')) return 'Groundium Z'; - if (moves.has('photongeyser') && counter.setupType) return 'Psychium Z'; - if (moves.has('stoneedge') && types.has('Rock') && moves.has('swordsdance')) return 'Rockium Z'; - if (moves.has('hydropump') && ability === 'Battle Bond' && moves.has('uturn')) return 'Waterium Z'; - if ((moves.has('hail') || (moves.has('blizzard') && ability !== 'Snow Warning'))) return 'Icium Z'; - } - - if ( - (ability === 'Speed Boost' || ability === 'Stance Change' || species.name === 'Pheromosa') && - counter.get('Physical') + counter.get('Special') > 2 && - !moves.has('uturn') - ) { - return 'Life Orb'; - } - - if (moves.has('uturn') && counter.get('Physical') === 4 && !moves.has('fakeout')) { - return ( - species.baseStats.spe >= 60 && species.baseStats.spe <= 108 && - !counter.get('priority') && this.randomChance(1, 2) - ) ? 'Choice Scarf' : 'Choice Band'; - } - if (counter.get('Special') === 4 && (moves.has('waterspout') || moves.has('eruption'))) { - return 'Choice Scarf'; - } - - if (['endeavor', 'flail', 'reversal'].some(m => moves.has(m)) && ability !== 'Sturdy') { - return (ability === 'Defeatist') ? 'Expert Belt' : 'Focus Sash'; - } - if (moves.has('outrage') && counter.setupType) return 'Lum Berry'; - if ( - counter.damagingMoves.size >= 3 && - species.baseStats.spe >= 70 && - ability !== 'Multiscale' && ability !== 'Sturdy' && [ - 'acidspray', 'electroweb', 'fakeout', 'feint', 'flamecharge', 'icywind', - 'incinerate', 'naturesmadness', 'rapidspin', 'snarl', 'suckerpunch', 'uturn', - ].every(m => !moves.has(m)) - ) { - return defensiveStatTotal >= 275 ? 'Sitrus Berry' : 'Life Orb'; - } - - if (moves.has('substitute')) return counter.damagingMoves.size > 2 && !!counter.get('drain') ? 'Life Orb' : 'Leftovers'; - if ((ability === 'Iron Barbs' || ability === 'Rough Skin') && this.randomChance(1, 2)) return 'Rocky Helmet'; - if ( - counter.get('Physical') + counter.get('Special') >= 4 && - species.baseStats.spd >= 50 && defensiveStatTotal >= 235 - ) { - return 'Assault Vest'; - } - if (species.name === 'Palkia' && (moves.has('dracometeor') || moves.has('spacialrend')) && moves.has('hydropump')) { - return 'Lustrous Orb'; - } - if (species.types.includes('Normal') && moves.has('fakeout') && counter.get('Normal') >= 2) return 'Silk Scarf'; - if (counter.damagingMoves.size >= 4) { - return (counter.get('Dragon') || moves.has('suckerpunch') || counter.get('Normal')) ? 'Life Orb' : 'Expert Belt'; - } - if (counter.damagingMoves.size >= 3 && !!counter.get('speedsetup') && defensiveStatTotal >= 300) { - return 'Weakness Policy'; - } - - // This is the "REALLY can't think of a good item" cutoff - if (moves.has('stickyweb') && ability === 'Sturdy') return 'Mental Herb'; - if (ability === 'Serene Grace' && moves.has('airslash') && species.baseStats.spe > 100) return 'Metronome'; - if (ability === 'Sturdy' && moves.has('explosion') && !counter.get('speedsetup')) return 'Custap Berry'; - if (ability === 'Super Luck') return 'Scope Lens'; - } - - randomSet( - species: string | Species, - teamDetails: RandomTeamsTypes.TeamDetails = {}, - isLead = false, - isDoubles = true, - ): RandomTeamsTypes.RandomSet { - species = this.dex.species.get(species); - let forme = species.name; - - if (typeof species.battleOnly === 'string') { - // Only change the forme. The species has custom moves, and may have different typing and requirements. - forme = species.battleOnly; - } - if (species.cosmeticFormes) { - forme = this.sample([species.name].concat(species.cosmeticFormes)); - } - - const data = this.randomDoublesData[species.id]; - - const movePool: string[] = [...(data.moves || this.dex.species.getMovePool(species.id))]; - if (this.format.gameType === 'multi') { - // Random Multi Battle uses doubles move pools, but Ally Switch fails in multi battles - const allySwitch = movePool.indexOf('allyswitch'); - if (allySwitch > -1) { - if (movePool.length > this.maxMoveCount) { - this.fastPop(movePool, allySwitch); - } else { - // Ideally, we'll never get here, but better to have a move that usually does nothing than one that always does - movePool[allySwitch] = 'sleeptalk'; - } - } - } - const rejectedPool = []; - const moves = new Set(); - let ability = ''; - - 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 = new Set(species.types); - const abilities = new Set(); - for (const abilityName of Object.values(species.abilities)) { - if (abilityName === species.abilities.S || (species.unreleasedHidden && abilityName === species.abilities.H)) continue; - abilities.add(abilityName); - } - - let availableHP = 0; - for (const moveid of movePool) { - if (moveid.startsWith('hiddenpower')) availableHP++; - } - - // These moves can be used even if we aren't setting up to use them: - const SetupException = ['closecombat', 'diamondstorm', 'extremespeed', 'superpower', 'clangingscales']; - - let counter: MoveCounter; - // We use a special variable to track Hidden Power - // so that we can check for all Hidden Powers at once - let hasHiddenPower = false; - - do { - // Choose next 4 moves from learnset/viable moves and add them to moves list: - while (moves.size < this.maxMoveCount && movePool.length) { - const moveid = this.sampleNoReplace(movePool); - if (moveid.startsWith('hiddenpower')) { - availableHP--; - if (hasHiddenPower) continue; - hasHiddenPower = true; - } - moves.add(moveid); - } - while (moves.size < this.maxMoveCount && rejectedPool.length) { - const moveid = this.sampleNoReplace(rejectedPool); - if (moveid.startsWith('hiddenpower')) { - if (hasHiddenPower) continue; - hasHiddenPower = true; - } - moves.add(moveid); - } - - counter = this.queryMoves(moves, species.types, abilities, movePool); - const runEnforcementChecker = (checkerName: string) => { - if (!this.moveEnforcementCheckers[checkerName]) return false; - return this.moveEnforcementCheckers[checkerName]( - movePool, moves, abilities, types, counter, species as Species, teamDetails - ); - }; - - // Iterate through the moves again, this time to cull them: - for (const moveid of moves) { - const move = this.dex.moves.get(moveid); - - let {cull, isSetup} = this.shouldCullMove( - move, types, moves, abilities, counter, movePool, teamDetails, - species, isLead - ); - - // This move doesn't satisfy our setup requirements: - if ( - (move.category === 'Physical' && counter.setupType === 'Special') || - (move.category === 'Special' && counter.setupType === 'Physical') - ) { - // Reject STABs last in case the setup type changes later on - const stabs = counter.get(species.types[0]) + (counter.get(species.types[1]) || 0); - if ( - !SetupException.includes(moveid) && - (!types.has(move.type) || stabs > 1 || counter.get(move.category) < 2) - ) cull = true; - } - // Hidden Power isn't good enough - if ( - counter.setupType === 'Special' && - moveid === 'hiddenpower' && - species.types.length > 1 && - counter.get('Special') <= 2 && - !types.has(move.type) && - !counter.get('Physical') && - counter.get('specialpool') - ) { - cull = true; - } - - // Pokemon should have moves that benefit their Type/Ability/Weather, as well as moves required by its forme - if ( - !cull && - !move.damage && - !isSetup && - !move.weather && - !move.stallingMove && - ( - !counter.setupType || counter.setupType === 'Mixed' || - (move.category !== counter.setupType && move.category !== 'Status') || - (counter.get(counter.setupType) + counter.get('Status') > 3 && !counter.get('hazards')) - ) && ( - move.category === 'Status' || - !types.has(move.type) || - (move.basePower && move.basePower < 40 && !move.multihit) - ) - ) { - if ( - (!counter.get('stab') && !moves.has('nightshade') && !moves.has('seismictoss') && ( - species.types.length > 1 || - (species.types[0] !== 'Normal' && species.types[0] !== 'Psychic') || - !moves.has('icebeam') || - species.baseStats.spa >= species.baseStats.spd - )) || ( - moves.has('suckerpunch') && !abilities.has('Contrary') && - counter.get('stab') < species.types.length && species.id !== 'honchkrow' - ) || ( - (['recover', 'roost', 'slackoff', 'softboiled'].some(m => movePool.includes(m))) && - counter.get('Status') && - !counter.setupType && - ['healingwish', 'switcheroo', 'trick', 'trickroom'].every(m => !moves.has(m)) - ) || ( - movePool.includes('milkdrink') || - movePool.includes('shoreup') || - (movePool.includes('moonlight') && types.size < 2) || - (movePool.includes('stickyweb') && !counter.setupType && !teamDetails.stickyWeb) || - (movePool.includes('quiverdance') && ['defog', 'uturn', 'stickyweb'].every(m => !moves.has(m)) && - counter.get('Special') < 4) - ) || ( - isLead && - movePool.includes('stealthrock') && - counter.get('Status') && !counter.setupType && - !counter.get('speedsetup') && !moves.has('substitute') - ) || ( - species.requiredMove && movePool.includes(toID(species.requiredMove)) - ) || ( - !counter.get('Normal') && - (abilities.has('Aerilate') || abilities.has('Pixilate') || (abilities.has('Refrigerate') && !moves.has('blizzard'))) - ) - ) { - cull = true; - } else { - for (const type of types) { - if (runEnforcementChecker(type)) { - cull = true; - } - } - for (const abil of abilities) { - if (runEnforcementChecker(abil)) { - cull = true; - } - } - } - } - - // Sleep Talk shouldn't be selected without Rest - if (moveid === 'rest' && cull) { - const sleeptalk = movePool.indexOf('sleeptalk'); - if (sleeptalk >= 0) { - if (movePool.length < 2) { - cull = false; - } else { - this.fastPop(movePool, sleeptalk); - } - } - } - - // Remove rejected moves from the move list - const moveIsHP = moveid.startsWith('hiddenpower'); - if (cull && ( - movePool.length - availableHP || - (availableHP && (moveIsHP || !hasHiddenPower)) - )) { - if ( - move.category !== 'Status' && - !move.damage && - !move.flags.charge && - (!moveIsHP || !availableHP) - ) { - rejectedPool.push(moveid); - } - if (moveIsHP) hasHiddenPower = false; - moves.delete(moveid); - break; - } - - if (cull && rejectedPool.length) { - if (moveIsHP) hasHiddenPower = false; - moves.delete(moveid); - break; - } - } - } while (moves.size < this.maxMoveCount && (movePool.length || rejectedPool.length)); - - const battleOnly = species.battleOnly && !species.requiredAbility; - const baseSpecies: Species = battleOnly ? this.dex.species.get(species.battleOnly as string) : species; - - ability = this.getAbility(types, moves, abilities, counter, movePool, teamDetails, species); - - if (species.name === 'Genesect' && moves.has('technoblast')) forme = 'Genesect-Douse'; - - if ( - !moves.has('photongeyser') && - !teamDetails.zMove && - (species.name === 'Necrozma-Dusk-Mane' || species.name === 'Necrozma-Dawn-Wings') - ) { - for (const moveid of moves) { - const move = this.dex.moves.get(moveid); - if (move.category === 'Status' || types.has(move.type)) continue; - moves.delete(moveid); - moves.add('photongeyser'); - break; - } - } - - let item = this.getDoublesItem(ability, types, moves, abilities, counter, teamDetails, species); - - // fallback - if (item === undefined) item = 'Sitrus Berry'; - // For Trick / Switcheroo - if (item === 'Leftovers' && types.has('Poison')) { - item = 'Black Sludge'; - } - - let level: number; - if (this.adjustLevel) { - level = this.adjustLevel; - } else { - // We choose level based on BST. Min level is 70, max level is 99. 600+ BST is 70, less than 300 is 99. Calculate with those values. - // Every 10.34 BST adds a level from 70 up to 99. Results are floored. Uses the Mega's stats if holding a Mega Stone - const baseStats = species.baseStats; - - let bst = species.bst; - // If Wishiwashi, use the school-forme's much higher stats - if (species.baseSpecies === 'Wishiwashi') bst = this.dex.species.get('wishiwashischool').bst; - // Adjust levels of mons based on abilities (Pure Power, Sheer Force, etc.) and also Eviolite - // For the stat boosted, treat the Pokemon's base stat as if it were multiplied by the boost. (Actual effective base stats are higher.) - const speciesAbility = (baseSpecies === species ? ability : species.abilities[0]); - if (speciesAbility === 'Huge Power' || speciesAbility === 'Pure Power') { - bst += baseStats.atk; - } else if (speciesAbility === 'Parental Bond') { - bst += 0.25 * (counter.get('Physical') > counter.get('Special') ? baseStats.atk : baseStats.spa); - } else if (speciesAbility === 'Protean') { - bst += 0.3 * (counter.get('Physical') > counter.get('Special') ? baseStats.atk : baseStats.spa); - } else if (speciesAbility === 'Fur Coat') { - bst += baseStats.def; - } else if (speciesAbility === 'Slow Start') { - bst -= baseStats.atk / 2 + baseStats.spe / 2; - } else if (speciesAbility === 'Truant') { - bst *= 2 / 3; - } - if (item === 'Eviolite') { - bst += 0.5 * (baseStats.def + baseStats.spd); - } else if (item === 'Light Ball') { - bst += baseStats.atk + baseStats.spa; - } - level = 70 + Math.floor(((600 - Utils.clampIntRange(bst, 300, 600)) / 10.34)); - } - - // Prepare optimal HP - const srWeakness = this.dex.getEffectiveness('Rock', species); - 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') && moves.has('reversal')) { - // Reversal users should be able to use four Substitutes - if (hp % 4 > 0) break; - } else if (moves.has('substitute') && ( - item === 'Petaya Berry' || item === 'Sitrus Berry' || - (ability === 'Power Construct' && item !== 'Leftovers') - )) { - // Three Substitutes should activate Petaya Berry for Dedenne - // Two Substitutes should activate Sitrus Berry or Power Construct - if (hp % 4 === 0) break; - } else if (moves.has('bellydrum') && (item === 'Sitrus Berry' || ability === 'Gluttony')) { - // Belly Drum should activate Sitrus Berry - if (hp % 2 === 0) break; - } else { - // Maximize number of Stealth Rock switch-ins - if (srWeakness <= 0 || hp % (4 / srWeakness) > 0) break; - } - evs.hp -= 4; - } - - // Minimize confusion damage - if (!counter.get('Physical') && !moves.has('copycat') && !moves.has('transform')) { - evs.atk = 0; - ivs.atk = 0; - } - - // Ensure Nihilego's Beast Boost gives it Special Attack boosts instead of Special Defense - if (forme === 'Nihilego') evs.spd -= 32; - - if (ability === 'Beast Boost' && counter.get('Special') < 1) { - evs.spa = 0; - ivs.spa = 0; - } - - // Fix IVs for non-Bottle Cap-able sets - if (hasHiddenPower && level < 100) { - let hpType; - for (const move of moves) { - if (move.startsWith('hiddenpower')) hpType = move.substr(11); - } - if (!hpType) throw new Error(`hasHiddenPower is true, but no Hidden Power move was found.`); - const HPivs = ivs.atk === 0 ? ZeroAttackHPIVs[hpType] : this.dex.types.get(hpType).HPivs; - let iv: StatID; - for (iv in HPivs) { - ivs[iv] = HPivs[iv]!; - } - } - - if (['gyroball', 'metalburst', 'trickroom'].some(m => moves.has(m))) { - evs.spe = 0; - ivs.spe = (hasHiddenPower && level < 100) ? ivs.spe - 30 : 0; - } - - return { - name: species.baseSpecies, - species: forme, - gender: species.gender, - shiny: this.randomChance(1, 1024), - moves: Array.from(moves), - ability, - evs, - ivs, - item, - level, - }; - } - - randomTeam() { - this.enforceNoDirectCustomBanlistChanges(); - - const seed = this.prng.seed; - const ruleTable = this.dex.formats.getRuleTable(this.format); - const pokemon: RandomTeamsTypes.RandomSet[] = []; - - // For Monotype - const isMonotype = !!this.forceMonotype || ruleTable.has('sametypeclause'); - const typePool = this.dex.types.names(); - const type = this.forceMonotype || this.sample(typePool); - - const baseFormes: {[k: string]: number} = {}; - let hasMega = false; - - const tierCount: {[k: string]: number} = {}; - const typeCount: {[k: string]: number} = {}; - const typeComboCount: {[k: string]: number} = {}; - const typeWeaknesses: {[k: string]: number} = {}; - const teamDetails: RandomTeamsTypes.TeamDetails = {}; - - // We make at most two passes through the potential Pokemon pool when creating a team - if the first pass doesn't - // result in a team of six Pokemon we perform a second iteration relaxing as many restrictions as possible. - for (const restrict of [true, false]) { - if (pokemon.length >= this.maxTeamSize) break; - - const pokemonList = Object.keys(this.randomDoublesData); - const [pokemonPool, baseSpeciesPool] = this.getPokemonPool(type, pokemon, isMonotype, pokemonList); - while (baseSpeciesPool.length && pokemon.length < this.maxTeamSize) { - const baseSpecies = this.sampleNoReplace(baseSpeciesPool); - const currentSpeciesPool: Species[] = []; - // Check if the base species has a mega forme available - let canMega = false; - for (const poke of pokemonPool) { - const species = this.dex.species.get(poke); - if (!hasMega && species.baseSpecies === baseSpecies && species.isMega) canMega = true; - } - for (const poke of pokemonPool) { - const species = this.dex.species.get(poke); - if (species.baseSpecies === baseSpecies) { - // Prevent multiple megas - if (hasMega && species.isMega) continue; - // Prevent base forme, if a mega is available - if (canMega && !species.isMega) continue; - currentSpeciesPool.push(species); - } - } - const species = this.sample(currentSpeciesPool); - 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; - - const tier = species.tier; - const types = species.types; - const typeCombo = types.slice().sort().join(); - // Dynamically scale limits for different team sizes. The default and minimum value is 1. - const limitFactor = Math.round(this.maxTeamSize / 6) || 1; - - if (restrict) { - // Limit one Pokemon per tier, two for Monotype - if ( - (tierCount[tier] >= (isMonotype || this.forceMonotype ? 2 : 1) * limitFactor) && - !this.randomChance(1, Math.pow(5, tierCount[tier])) - ) { - continue; - } - - if (!isMonotype && !this.forceMonotype) { - // Limit two of any type - let skip = false; - for (const typeName of types) { - if (typeCount[typeName] >= 2 * limitFactor) { - skip = true; - break; - } - } - if (skip) continue; - - // Limit three 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 (skip) continue; - } - - // Limit one of any type combination, three in Monotype - if (!this.forceMonotype && typeComboCount[typeCombo] >= (isMonotype ? 3 : 1) * limitFactor) continue; - } - - const set = this.randomSet( - species, - teamDetails, - pokemon.length === this.maxTeamSize - 1, - true - ); - - const item = this.dex.items.get(set.item); - - // Limit one Z-Move per team - if (item.zMove && teamDetails.zMove) continue; - - // Zoroark copies the last Pokemon - if (set.ability === 'Illusion') { - if (pokemon.length < 1) continue; - set.level = pokemon[pokemon.length - 1].level; - } - - // Okay, the set passes, add it to our team - pokemon.unshift(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 tier counter - if (tierCount[tier]) { - tierCount[tier]++; - } else { - tierCount[tier] = 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]++; - } - } - - // Track what the team has - if (item.megaStone || species.name === 'Rayquaza-Mega') hasMega = true; - if (item.zMove) teamDetails.zMove = 1; - if (set.ability === 'Snow Warning' || set.moves.includes('hail')) teamDetails.hail = 1; - if (set.moves.includes('raindance') || set.ability === 'Drizzle' && !item.onPrimal) teamDetails.rain = 1; - if (set.ability === 'Sand Stream') teamDetails.sand = 1; - if (set.moves.includes('sunnyday') || set.ability === 'Drought' && !item.onPrimal) teamDetails.sun = 1; - if (set.moves.includes('spikes')) teamDetails.spikes = (teamDetails.spikes || 0) + 1; - if (set.moves.includes('stealthrock')) teamDetails.stealthRock = 1; - if (set.moves.includes('stickyweb')) teamDetails.stickyWeb = 1; - if (set.moves.includes('toxicspikes')) teamDetails.toxicSpikes = 1; - if (set.moves.includes('defog')) teamDetails.defog = 1; - if (set.moves.includes('rapidspin')) teamDetails.rapidSpin = 1; - if (set.moves.includes('auroraveil') || (set.moves.includes('reflect') && set.moves.includes('lightscreen'))) { - teamDetails.screens = 1; - } - } - } - if (pokemon.length < this.maxTeamSize && pokemon.length < 12) { - throw new Error(`Could not build a random team for ${this.format} (seed=${seed})`); - } - - return pokemon; - } -} - -export default RandomGen7DoublesTeams; diff --git a/data/mods/gen7/rulesets.ts b/data/mods/gen7/rulesets.ts index a823f0d178e9..7114fc638baa 100644 --- a/data/mods/gen7/rulesets.ts +++ b/data/mods/gen7/rulesets.ts @@ -1,4 +1,4 @@ -export const Rulesets: {[k: string]: ModdedFormatData} = { +export const Rulesets: import('../../../sim/dex-formats').ModdedFormatDataTable = { standard: { inherit: true, ruleset: ['Obtainable', 'Team Preview', 'Sleep Clause Mod', 'Species Clause', 'Nickname Clause', 'OHKO Clause', 'Moody Clause', 'Evasion Items Clause', 'Evasion Moves Clause', 'Endless Battle Clause', 'HP Percentage Mod', 'Cancel Mod'], @@ -36,8 +36,9 @@ export const Rulesets: {[k: string]: ModdedFormatData} = { this.add('clearpoke'); for (const pokemon of this.getAllPokemon()) { const details = pokemon.details.replace(', shiny', '') - .replace(/(Arceus|Genesect|Greninja|Gourgeist|Pumpkaboo|Xerneas|Silvally|Urshifu|Dudunsparce)(-[a-zA-Z?-]+)?/g, '$1-*') - .replace(/(Zacian|Zamazenta)(?!-Crowned)/g, '$1-*'); // Hacked-in Crowned formes will be revealed + .replace(/(Arceus|Genesect|Gourgeist|Pumpkaboo|Xerneas|Silvally|Urshifu|Dudunsparce)(-[a-zA-Z?-]+)?/g, '$1-*') + .replace(/(Zacian|Zamazenta)(?!-Crowned)/g, '$1-*') // Hacked-in Crowned formes will be revealed + .replace(/(Greninja)(?!-Ash)/g, '$1-*'); // Hacked-in Greninja-Ash will be revealed this.add('poke', pokemon.side.id, details, pokemon.item ? 'item' : ''); } this.makeRequest('teampreview'); diff --git a/data/mods/gen7letsgo/formats-data.ts b/data/mods/gen7letsgo/formats-data.ts index 71f3cfd513a3..ef7851adb1d1 100644 --- a/data/mods/gen7letsgo/formats-data.ts +++ b/data/mods/gen7letsgo/formats-data.ts @@ -1,4 +1,4 @@ -export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { +export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormatsDataTable = { bulbasaur: { tier: "LC", }, @@ -6,7 +6,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "NFE", }, venusaur: { - tier: "UU", + tier: "OU", doublesTier: "DOU", }, venusaurmega: { @@ -20,7 +20,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "NFE", }, charizard: { - tier: "UU", + tier: "RU", doublesTier: "DOU", }, charizardmegax: { @@ -28,7 +28,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { doublesTier: "DOU", }, charizardmegay: { - tier: "UU", + tier: "RUBL", doublesTier: "DOU", }, squirtle: { @@ -38,7 +38,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "NFE", }, blastoise: { - tier: "UU", + tier: "RU", doublesTier: "DOU", }, blastoisemega: { @@ -52,7 +52,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "NFE", }, butterfree: { - tier: "UU", + tier: "RU", doublesTier: "DOU", }, weedle: { @@ -62,7 +62,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "NFE", }, beedrill: { - tier: "UU", + tier: "RU", doublesTier: "DOU", }, beedrillmega: { @@ -76,7 +76,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "NFE", }, pidgeot: { - tier: "UU", + tier: "RU", doublesTier: "DOU", }, pidgeotmega: { @@ -90,25 +90,25 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "LC", }, raticate: { - tier: "UU", + tier: "RU", doublesTier: "DOU", }, raticatealola: { - tier: "UU", + tier: "RU", doublesTier: "DOU", }, spearow: { tier: "LC", }, fearow: { - tier: "UU", + tier: "RU", doublesTier: "DOU", }, ekans: { tier: "LC", }, arbok: { - tier: "UU", + tier: "RU", doublesTier: "DOU", }, pikachu: { @@ -120,11 +120,11 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { doublesTier: "DOU", }, raichu: { - tier: "UU", + tier: "RU", doublesTier: "DOU", }, raichualola: { - tier: "UU", + tier: "RU", doublesTier: "DOU", }, sandshrew: { @@ -165,7 +165,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "LC", }, clefable: { - tier: "UU", + tier: "OU", doublesTier: "DOU", }, vulpix: { @@ -175,7 +175,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "LC", }, ninetales: { - tier: "UU", + tier: "RU", doublesTier: "DOU", }, ninetalesalola: { @@ -193,7 +193,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "LC", }, golbat: { - tier: "UU", + tier: "RU", doublesTier: "DOU", }, oddish: { @@ -210,7 +210,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "LC", }, parasect: { - tier: "UU", + tier: "RU", doublesTier: "DOU", }, venonat: { @@ -241,18 +241,18 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "LC", }, persian: { - tier: "UU", + tier: "RU", doublesTier: "DOU", }, persianalola: { - tier: "OU", + tier: "UU", doublesTier: "DOU", }, psyduck: { tier: "LC", }, golduck: { - tier: "UU", + tier: "RU", doublesTier: "DOU", }, mankey: { @@ -300,7 +300,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "NFE", }, machamp: { - tier: "UU", + tier: "RU", doublesTier: "DOU", }, bellsprout: { @@ -337,14 +337,14 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { doublesTier: "DOU", }, golemalola: { - tier: "UU", + tier: "RU", doublesTier: "DOU", }, ponyta: { tier: "LC", }, rapidash: { - tier: "UU", + tier: "RU", doublesTier: "DOU", }, slowpoke: { @@ -362,11 +362,11 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "LC", }, magneton: { - tier: "UU", + tier: "RU", doublesTier: "DOU", }, farfetchd: { - tier: "UU", + tier: "RU", doublesTier: "DOU", }, doduo: { @@ -380,7 +380,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "LC", }, dewgong: { - tier: "UU", + tier: "RU", doublesTier: "DOU", }, grimer: { @@ -390,7 +390,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "LC", }, muk: { - tier: "UU", + tier: "RU", doublesTier: "DOU", }, mukalola: { @@ -419,21 +419,21 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { doublesTier: "DOU", }, onix: { - tier: "UU", + tier: "RU", doublesTier: "DOU", }, drowzee: { tier: "LC", }, hypno: { - tier: "UU", + tier: "RU", doublesTier: "DOU", }, krabby: { tier: "LC", }, kingler: { - tier: "UU", + tier: "RU", doublesTier: "DOU", }, voltorb: { @@ -458,30 +458,30 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "LC", }, marowak: { - tier: "UU", + tier: "RU", doublesTier: "DOU", }, marowakalola: { - tier: "UU", + tier: "RU", doublesTier: "DOU", }, hitmonlee: { - tier: "UU", + tier: "RU", doublesTier: "DOU", }, hitmonchan: { - tier: "UU", + tier: "RU", doublesTier: "DOU", }, lickitung: { - tier: "UU", + tier: "RU", doublesTier: "DOU", }, koffing: { tier: "LC", }, weezing: { - tier: "UU", + tier: "RU", doublesTier: "DOU", }, rhyhorn: { @@ -492,15 +492,15 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { doublesTier: "DOU", }, chansey: { - tier: "OU", + tier: "UU", doublesTier: "DOU", }, tangela: { - tier: "UU", + tier: "RU", doublesTier: "DOU", }, kangaskhan: { - tier: "UU", + tier: "RU", doublesTier: "DOU", }, kangaskhanmega: { @@ -511,14 +511,14 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "LC", }, seadra: { - tier: "UU", + tier: "RU", doublesTier: "DOU", }, goldeen: { tier: "LC", }, seaking: { - tier: "UU", + tier: "RU", doublesTier: "DOU", }, staryu: { @@ -529,23 +529,23 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { doublesTier: "DOU", }, mrmime: { - tier: "UU", + tier: "RU", doublesTier: "DOU", }, scyther: { - tier: "UU", + tier: "RU", doublesTier: "DOU", }, jynx: { - tier: "UU", + tier: "RU", doublesTier: "DOU", }, electabuzz: { - tier: "UU", + tier: "RU", doublesTier: "DOU", }, magmar: { - tier: "UU", + tier: "RU", doublesTier: "DOU", }, pinsir: { @@ -564,7 +564,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "LC", }, gyarados: { - tier: "UU", + tier: "RU", doublesTier: "DOU", }, gyaradosmega: { @@ -576,7 +576,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { doublesTier: "DOU", }, ditto: { - tier: "UU", + tier: "RU", doublesTier: "DOU", }, eevee: { @@ -588,19 +588,19 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { doublesTier: "DOU", }, vaporeon: { - tier: "UU", + tier: "OU", doublesTier: "DOU", }, jolteon: { - tier: "UU", + tier: "OU", doublesTier: "DOU", }, flareon: { - tier: "UU", + tier: "RU", doublesTier: "DOU", }, porygon: { - tier: "UU", + tier: "RU", doublesTier: "DOU", }, omanyte: { @@ -630,7 +630,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { doublesTier: "DOU", }, articuno: { - tier: "UU", + tier: "RU", doublesTier: "DOU", }, zapdos: { @@ -648,7 +648,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "NFE", }, dragonite: { - tier: "OU", + tier: "UU", doublesTier: "DOU", }, mewtwo: { @@ -669,7 +669,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { }, meltan: { isNonstandard: null, - tier: "UU", + tier: "RU", doublesTier: "DOU", }, melmetal: { diff --git a/data/mods/gen7letsgo/learnsets.ts b/data/mods/gen7letsgo/learnsets.ts index 72886a9cbbc5..d6001762a63b 100644 --- a/data/mods/gen7letsgo/learnsets.ts +++ b/data/mods/gen7letsgo/learnsets.ts @@ -1,6 +1,6 @@ /* eslint-disable max-len */ -export const Learnsets: {[k: string]: ModdedLearnsetData} = { +export const Learnsets: import('../../../sim/dex-species').ModdedLearnsetDataTable = { bulbasaur: { learnset: { doubleedge: ["7L32"], diff --git a/data/mods/gen7letsgo/moves.ts b/data/mods/gen7letsgo/moves.ts index 949a6b8c9ec0..552a0df8c87b 100644 --- a/data/mods/gen7letsgo/moves.ts +++ b/data/mods/gen7letsgo/moves.ts @@ -1,4 +1,4 @@ -export const Moves: {[k: string]: ModdedMoveData} = { +export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = { absorb: { inherit: true, basePower: 40, @@ -42,9 +42,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { desc: "A random move that was introduced in gen 1 is selected for use, other than Counter, Mimic, Mirror Move, Struggle, or Transform.", shortDesc: "Picks a random move from gen 1.", onHit(target, source, effect) { - const moves = this.dex.moves.all().filter( - move => !move.realMove && move.gen === 1 && !effect.noMetronome!.includes(move.name) - ); + const moves = this.dex.moves.all().filter(move => move.gen === 1 && move.flags['metronome']); let randomMove = ''; if (moves.length) { moves.sort((a, b) => a.num - b.num); diff --git a/data/mods/gen7letsgo/pokedex.ts b/data/mods/gen7letsgo/pokedex.ts index e9fc3dd1dd86..08b995f3cb74 100644 --- a/data/mods/gen7letsgo/pokedex.ts +++ b/data/mods/gen7letsgo/pokedex.ts @@ -1,4 +1,4 @@ -export const Pokedex: {[k: string]: ModdedSpeciesData} = { +export const Pokedex: import('../../../sim/dex-species').ModdedSpeciesDataTable = { pichu: { inherit: true, evos: [], diff --git a/data/mods/gen7letsgo/rulesets.ts b/data/mods/gen7letsgo/rulesets.ts new file mode 100644 index 000000000000..841cfc49ba3f --- /dev/null +++ b/data/mods/gen7letsgo/rulesets.ts @@ -0,0 +1,10 @@ +export const Rulesets: import('../../../sim/dex-formats').ModdedFormatDataTable = { + standard: { + inherit: true, + ruleset: ['Adjust Level = 50', 'Obtainable', 'Team Preview', 'Species Clause', 'Nickname Clause', 'OHKO Clause', 'Evasion Moves Clause', 'HP Percentage Mod', 'Cancel Mod', 'Sleep Clause Mod'], + }, + standarddoubles: { + inherit: true, + ruleset: ['Adjust Level = 50', 'Obtainable', 'Team Preview', 'Species Clause', 'Nickname Clause', 'OHKO Clause', 'Evasion Moves Clause', 'HP Percentage Mod', 'Cancel Mod'], + }, +}; diff --git a/data/mods/gen7letsgo/scripts.ts b/data/mods/gen7letsgo/scripts.ts index 7083f9bbf422..16fa5913cce3 100644 --- a/data/mods/gen7letsgo/scripts.ts +++ b/data/mods/gen7letsgo/scripts.ts @@ -1,11 +1,62 @@ +function checkMegaForme(species: Species, forme: string, battle: Battle) { + const baseSpecies = battle.dex.species.get(species.baseSpecies); + const altForme = battle.dex.species.get(`${baseSpecies.name}-${forme}`); + if ( + altForme.exists && !battle.ruleTable.isBannedSpecies(altForme) && + !battle.ruleTable.isBanned('pokemontag:mega') + ) { + return altForme.name; + } + return null; +} + export const Scripts: ModdedBattleScriptsData = { inherit: 'gen7', init() { this.modData('Abilities', 'noability').isNonstandard = null; for (const i in this.data.Pokedex) { this.modData('Pokedex', i).abilities = {0: 'No Ability'}; + delete this.modData('Pokedex', i).requiredItem; } }, + actions: { + canMegaEvo(pokemon) { + return checkMegaForme(pokemon.baseSpecies, 'Mega', this.battle); + }, + canMegaEvoX(pokemon) { + return checkMegaForme(pokemon.baseSpecies, 'Mega-X', this.battle); + }, + canMegaEvoY(pokemon) { + return checkMegaForme(pokemon.baseSpecies, 'Mega-Y', this.battle); + }, + runMegaEvo(pokemon) { + const speciesid = pokemon.canMegaEvo || pokemon.canMegaEvoX || pokemon.canMegaEvoY; + if (!speciesid) return false; + + pokemon.formeChange(speciesid, null, true); + this.battle.add('-mega', pokemon, this.dex.species.get(speciesid).baseSpecies); + + // Limit one mega evolution + for (const ally of pokemon.side.pokemon) { + ally.canMegaEvo = null; + ally.canMegaEvoX = null; + ally.canMegaEvoY = null; + } + + this.battle.runEvent('AfterMega', pokemon); + return true; + }, + runMegaEvoX(pokemon) { + if (!pokemon.canMegaEvoX) return false; + pokemon.canMegaEvoY = null; + return this.runMegaEvo(pokemon); + }, + runMegaEvoY(pokemon) { + if (!pokemon.canMegaEvoY) return false; + pokemon.canMegaEvoX = null; + return this.runMegaEvo(pokemon); + }, + }, /** * Given a table of base stats and a pokemon set, return the actual stats. */ diff --git a/data/mods/gen7pokebilities/abilities.ts b/data/mods/gen7pokebilities/abilities.ts index 8f20a102ecac..edffea067633 100644 --- a/data/mods/gen7pokebilities/abilities.ts +++ b/data/mods/gen7pokebilities/abilities.ts @@ -1,10 +1,10 @@ -export const Abilities: {[k: string]: ModdedAbilityData} = { +export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTable = { mummy: { inherit: true, onDamagingHit(damage, target, source, move) { if (target.ability === 'mummy') { const sourceAbility = source.getAbility(); - if (sourceAbility.isPermanent || sourceAbility.id === 'mummy') { + if (sourceAbility.flags['cantsuppress'] || sourceAbility.id === 'mummy') { return; } if (this.checkMoveMakesContact(move, source, target, !source.isAlly(target))) { @@ -15,7 +15,7 @@ export const Abilities: {[k: string]: ModdedAbilityData} = { } } else { const possibleAbilities = [source.ability, ...(source.m.innates || [])] - .filter(val => !this.dex.abilities.get(val).isPermanent && val !== 'mummy'); + .filter(val => !this.dex.abilities.get(val).flags['cantsuppress'] && val !== 'mummy'); if (!possibleAbilities.length) return; if (this.checkMoveMakesContact(move, source, target, !source.isAlly(target))) { const abil = this.sample(possibleAbilities); @@ -43,11 +43,9 @@ export const Abilities: {[k: string]: ModdedAbilityData} = { const isAbility = pokemon.ability === 'powerofalchemy'; let possibleAbilities = [ally.ability]; if (ally.m.innates) possibleAbilities.push(...ally.m.innates); - const additionalBannedAbilities = [ - 'noability', 'flowergift', 'forecast', 'hungerswitch', 'illusion', 'imposter', 'neutralizinggas', 'powerofalchemy', 'receiver', 'trace', 'wonderguard', pokemon.ability, ...(pokemon.m.innates || []), - ]; + const additionalBannedAbilities = [pokemon.ability, ...(pokemon.m.innates || [])]; possibleAbilities = possibleAbilities - .filter(val => !this.dex.abilities.get(val).isPermanent && !additionalBannedAbilities.includes(val)); + .filter(val => !this.dex.abilities.get(val).flags['noreceiver'] && !additionalBannedAbilities.includes(val)); if (!possibleAbilities.length) return; const ability = this.dex.abilities.get(possibleAbilities[this.random(possibleAbilities.length)]); this.add('-ability', pokemon, ability, '[from] ability: Power of Alchemy', '[of] ' + ally); @@ -67,11 +65,9 @@ export const Abilities: {[k: string]: ModdedAbilityData} = { const isAbility = pokemon.ability === 'receiver'; let possibleAbilities = [ally.ability]; if (ally.m.innates) possibleAbilities.push(...ally.m.innates); - const additionalBannedAbilities = [ - 'noability', 'flowergift', 'forecast', 'hungerswitch', 'illusion', 'imposter', 'neutralizinggas', 'powerofalchemy', 'receiver', 'trace', 'wonderguard', pokemon.ability, ...(pokemon.m.innates || []), - ]; + const additionalBannedAbilities = [pokemon.ability, ...(pokemon.m.innates || [])]; possibleAbilities = possibleAbilities - .filter(val => !this.dex.abilities.get(val).isPermanent && !additionalBannedAbilities.includes(val)); + .filter(val => !this.dex.abilities.get(val).flags['noreceiver'] && !additionalBannedAbilities.includes(val)); if (!possibleAbilities.length) return; const ability = this.dex.abilities.get(possibleAbilities[this.random(possibleAbilities.length)]); this.add('-ability', pokemon, ability, '[from] ability: Receiver', '[of] ' + ally); @@ -99,12 +95,9 @@ export const Abilities: {[k: string]: ModdedAbilityData} = { const target = possibleTargets[rand]; let possibleAbilities = [target.ability]; if (target.m.innates) possibleAbilities.push(...target.m.innates); - const additionalBannedAbilities = [ - // Zen Mode included here for compatability with Gen 5-6 - 'noability', 'flowergift', 'forecast', 'hungerswitch', 'illusion', 'imposter', 'neutralizinggas', 'powerofalchemy', 'receiver', 'trace', 'zenmode', pokemon.ability, ...(pokemon.m.innates || []), - ]; + const additionalBannedAbilities = [pokemon.ability, ...(pokemon.m.innates || [])]; possibleAbilities = possibleAbilities - .filter(val => !this.dex.abilities.get(val).isPermanent && !additionalBannedAbilities.includes(val)); + .filter(val => !this.dex.abilities.get(val).flags['notrace'] && !additionalBannedAbilities.includes(val)); if (!possibleAbilities.length) { possibleTargets.splice(rand, 1); continue; diff --git a/data/mods/gen7pokebilities/moves.ts b/data/mods/gen7pokebilities/moves.ts index 8fd18a791128..c473cb8bba8d 100644 --- a/data/mods/gen7pokebilities/moves.ts +++ b/data/mods/gen7pokebilities/moves.ts @@ -1,4 +1,4 @@ -export const Moves: {[k: string]: ModdedMoveData} = { +export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = { gastroacid: { inherit: true, condition: { diff --git a/data/mods/gen7pokebilities/random-teams.ts b/data/mods/gen7pokebilities/random-teams.ts deleted file mode 100644 index f364755b8a78..000000000000 --- a/data/mods/gen7pokebilities/random-teams.ts +++ /dev/null @@ -1,5 +0,0 @@ -import RandomGen7Teams from '../gen7/random-teams'; - -export class RandomGen7PokebilitiesTeams extends RandomGen7Teams {} - -export default RandomGen7PokebilitiesTeams; diff --git a/data/mods/gen7pokebilities/scripts.ts b/data/mods/gen7pokebilities/scripts.ts index 5e9c498b30db..b0199e4bad6b 100644 --- a/data/mods/gen7pokebilities/scripts.ts +++ b/data/mods/gen7pokebilities/scripts.ts @@ -32,7 +32,7 @@ export const Scripts: ModdedBattleScriptsData = { ((this.volatiles['gastroacid'] || (neutralizinggas && (this.ability !== ('neutralizinggas' as ID) || this.m.innates?.some((k: string) => k === 'neutralizinggas')) - )) && !this.getAbility().isPermanent + )) && !this.getAbility().flags['cantsuppress'] ) ); }, @@ -92,13 +92,14 @@ export const Scripts: ModdedBattleScriptsData = { this.boosts[boostName] = pokemon.boosts[boostName]; } if (this.battle.gen >= 6) { - const volatilesToCopy = ['focusenergy', 'gmaxchistrike', 'laserfocus']; + // we need to be sure to remove all the overlapping crit volatiles before trying to add any of them + const volatilesToCopy = ['dragoncheer', 'focusenergy', 'gmaxchistrike', 'laserfocus']; + for (const volatile of volatilesToCopy) this.removeVolatile(volatile); for (const volatile of volatilesToCopy) { if (pokemon.volatiles[volatile]) { this.addVolatile(volatile); if (volatile === 'gmaxchistrike') this.volatiles[volatile].layers = pokemon.volatiles[volatile].layers; - } else { - this.removeVolatile(volatile); + if (volatile === 'dragoncheer') this.volatiles[volatile].hasDragonType = pokemon.volatiles[volatile].hasDragonType; } } } diff --git a/data/mods/gen7sm/formats-data.ts b/data/mods/gen7sm/formats-data.ts index 72f38d3b9433..aa488e96c544 100644 --- a/data/mods/gen7sm/formats-data.ts +++ b/data/mods/gen7sm/formats-data.ts @@ -1,4 +1,4 @@ -export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { +export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormatsDataTable = { pikachupartner: { isNonstandard: "Future", tier: "Illegal", diff --git a/data/mods/gen7sm/items.ts b/data/mods/gen7sm/items.ts index bca4ea102a7a..cd8a7a72ed69 100644 --- a/data/mods/gen7sm/items.ts +++ b/data/mods/gen7sm/items.ts @@ -1,4 +1,4 @@ -export const Items: {[k: string]: ModdedItemData} = { +export const Items: import('../../../sim/dex-items').ModdedItemDataTable = { kommoniumz: { inherit: true, isNonstandard: "Future", diff --git a/data/mods/gen7sm/learnsets.ts b/data/mods/gen7sm/learnsets.ts index bf73a945b621..c29ff4ae3b72 100644 --- a/data/mods/gen7sm/learnsets.ts +++ b/data/mods/gen7sm/learnsets.ts @@ -1,4 +1,4 @@ -export const Learnsets: {[k: string]: ModdedLearnsetData} = { +export const Learnsets: import('../../../sim/dex-species').ModdedLearnsetDataTable = { bulbasaur: { inherit: true, learnset: { @@ -34830,14 +34830,14 @@ export const Learnsets: {[k: string]: ModdedLearnsetData} = { calmmind: ["7M", "6M", "5M", "4M", "3M"], chargebeam: ["7M", "6M", "5M", "4M"], confide: ["7M", "6M"], - confusion: ["7L1", "6L1", "6S18", "6S20", "6S21", "5L1", "4L1", "4S11", "4S12", "3L1", "3S0", "3S1", "3S2", "3S3", "3S4", "3S5", "3S6", "3S7", "3S8", "3S9"], - cosmicpower: ["7L60", "6L60", "6S19", "5L60", "5S15", "4L60", "3L45"], + confusion: ["7L1", "6L1", "6S10", "6S12", "6S13", "5L1", "4L1", "4S3", "4S4", "3L1", "3S0", "3S1"], + cosmicpower: ["7L60", "6L60", "6S11", "5L60", "5S7", "4L60", "3L45"], dazzlinggleam: ["7M", "6M"], defensecurl: ["3T"], doomdesire: ["7L70", "6L70", "5L70", "4L70", "3L50"], doubleedge: ["7L40", "6L40", "5L40", "4L40", "3T", "3L35"], doubleteam: ["7M", "6M", "5M", "4M", "3M"], - dracometeor: ["5S14", "4S12"], + dracometeor: ["5S6", "4S4"], drainpunch: ["6T", "5T", "4M"], dreameater: ["7M", "6M", "5M", "4M", "3T"], dynamicpunch: ["3T"], @@ -34848,17 +34848,17 @@ export const Learnsets: {[k: string]: ModdedLearnsetData} = { flash: ["6M", "5M", "4M", "3M"], flashcannon: ["7M", "6M", "5M", "4M"], fling: ["7M", "6M", "5M", "4M"], - followme: ["5S14"], + followme: ["5S6"], frustration: ["7M", "6M", "5M", "4M", "3M"], futuresight: ["7L55", "6L55", "5L55", "4L55", "3L40"], gigaimpact: ["7M", "6M", "5M", "4M"], grassknot: ["7M", "6M", "5M", "4M"], gravity: ["7L45", "6T", "6L45", "5T", "5L45", "4T", "4L45"], - happyhour: ["6S20"], + happyhour: ["6S12"], headbutt: ["4T"], - healingwish: ["7L50", "7S22", "6L50", "6S17", "5L50", "5S13", "5S15", "5S16", "4L50"], - heartstamp: ["6S19"], - helpinghand: ["7L15", "6T", "6L15", "6S18", "5T", "5L15", "4T", "4L15", "3L15", "3S10"], + healingwish: ["7L50", "7S14", "6L50", "6S9", "5L50", "5S5", "5S7", "5S8", "4L50"], + heartstamp: ["6S11"], + helpinghand: ["7L15", "6T", "6L15", "6S10", "5T", "5L15", "4T", "4L15", "3L15", "3S2"], hiddenpower: ["7M", "6M", "5M", "4M", "3M"], hyperbeam: ["7M", "6M", "5M", "4M", "3M"], icepunch: ["6T", "5T", "4T", "3T"], @@ -34869,25 +34869,25 @@ export const Learnsets: {[k: string]: ModdedLearnsetData} = { lightscreen: ["7M", "6M", "5M", "4M", "3M"], magiccoat: ["6T", "5T", "4T"], magicroom: ["6T", "5T"], - meteormash: ["5S13", "5S14", "5S15"], + meteormash: ["5S5", "5S6", "5S7"], metronome: ["3T"], mimic: ["3T"], - moonblast: ["6S17"], + moonblast: ["6S9"], mudslap: ["4T", "3T"], naturalgift: ["4M"], nightmare: ["3T"], - playrough: ["6S19"], + playrough: ["6S11"], poweruppunch: ["6M"], protect: ["7M", "6M", "5M", "4M", "3M"], - psychic: ["7M", "7L20", "6M", "6L20", "5M", "5L20", "5S13", "4M", "4L20", "3M", "3L20", "3S10"], + psychic: ["7M", "7L20", "6M", "6L20", "5M", "5L20", "5S5", "4M", "4L20", "3M", "3L20", "3S2"], psychup: ["7M", "6M", "5M", "4M", "3T"], psyshock: ["7M", "6M", "5M"], raindance: ["7M", "6M", "5M", "4M", "3M"], recycle: ["6T", "5T", "4M"], reflect: ["7M", "6M", "5M", "4M", "3M"], - refresh: ["7L25", "6L25", "5L25", "4L25", "3L25", "3S10"], - rest: ["7M", "7L30", "7L5", "7S22", "6M", "6L5", "6S21", "5M", "5L5", "4M", "4L5", "4S11", "4S12", "3M", "3L5", "3S0", "3S1", "3S2", "3S3", "3S4", "3S5", "3S6", "3S7", "3S8", "3S9", "3S10"], - return: ["7M", "6M", "6S18", "5M", "5S16", "4M", "3M"], + refresh: ["7L25", "6L25", "5L25", "4L25", "3L25", "3S2"], + rest: ["7M", "7L30", "7L5", "7S14", "6M", "6L5", "6S13", "5M", "5L5", "4M", "4L5", "4S3", "4S4", "3M", "3L5", "3S0", "3S1", "3S2"], + return: ["7M", "6M", "6S10", "5M", "5S8", "4M", "3M"], round: ["7M", "6M", "5M"], safeguard: ["7M", "6M", "5M", "4M", "3M"], sandstorm: ["7M", "6M", "5M", "4M", "3M"], @@ -34902,7 +34902,7 @@ export const Learnsets: {[k: string]: ModdedLearnsetData} = { substitute: ["7M", "6M", "5M", "4M", "3T"], sunnyday: ["7M", "6M", "5M", "4M", "3M"], swagger: ["7M", "6M", "5M", "4M", "3T"], - swift: ["7L10", "7S22", "6L10", "6S17", "6S20", "5L10", "5S13", "5S16", "4T", "4L10", "3T", "3L10"], + swift: ["7L10", "7S14", "6L10", "6S9", "6S12", "5L10", "5S5", "5S8", "4T", "4L10", "3T", "3L10"], telekinesis: ["5M"], thunder: ["7M", "6M", "5M", "4M", "3M"], thunderbolt: ["7M", "6M", "5M", "4M", "3M"], @@ -34914,7 +34914,7 @@ export const Learnsets: {[k: string]: ModdedLearnsetData} = { uproar: ["6T", "5T", "4T"], uturn: ["7M", "6M", "5M", "4M"], waterpulse: ["6T", "4M", "3M"], - wish: ["7L1", "7S22", "6L1", "6S17", "6S18", "6S19", "6S20", "6S21", "5L1", "5S14", "5S15", "5S16", "4L1", "4S11", "4S12", "3L1", "3S0", "3S1", "3S2", "3S3", "3S4", "3S5", "3S6", "3S7", "3S8", "3S9"], + wish: ["7L1", "7S14", "6L1", "6S9", "6S10", "6S11", "6S12", "6S13", "5L1", "5S6", "5S7", "5S8", "4L1", "4S3", "4S4", "3L1", "3S0", "3S1"], zenheadbutt: ["7L35", "6T", "6L35", "5T", "5L35", "4T", "4L35"], }, }, diff --git a/data/mods/gen7sm/moves.ts b/data/mods/gen7sm/moves.ts index 7f79335e2a73..5a42912cac18 100644 --- a/data/mods/gen7sm/moves.ts +++ b/data/mods/gen7sm/moves.ts @@ -1,4 +1,4 @@ -export const Moves: {[k: string]: ModdedMoveData} = { +export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = { mindblown: { inherit: true, isNonstandard: "Future", diff --git a/data/mods/gen7sm/pokedex.ts b/data/mods/gen7sm/pokedex.ts index b9cbd2d0c38a..630e47e8ab77 100644 --- a/data/mods/gen7sm/pokedex.ts +++ b/data/mods/gen7sm/pokedex.ts @@ -1,4 +1,4 @@ -export const Pokedex: {[k: string]: ModdedSpeciesData} = { +export const Pokedex: import('../../../sim/dex-species').ModdedSpeciesDataTable = { litten: { inherit: true, unreleasedHidden: true, diff --git a/data/mods/gen8/abilities.ts b/data/mods/gen8/abilities.ts index 382cbf802eff..b43d0032258d 100644 --- a/data/mods/gen8/abilities.ts +++ b/data/mods/gen8/abilities.ts @@ -32,7 +32,7 @@ Ratings and how they work: */ -export const Abilities: {[k: string]: ModdedAbilityData} = { +export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTable = { noability: { inherit: true, rating: 0.1, @@ -172,6 +172,24 @@ export const Abilities: {[k: string]: ModdedAbilityData} = { }, competitive: { inherit: true, + onAfterEachBoost(boost, target, source, effect) { + if (!source || target.isAlly(source)) { + if (effect.id === 'stickyweb') { + this.hint("In Gen 8, Court Change Sticky Web counts as lowering your own Speed, and Competitive only affects stats lowered by foes.", true, source.side); + } + return; + } + let statsLowered = false; + let i: BoostID; + for (i in boost) { + if (boost[i]! < 0) { + statsLowered = true; + } + } + if (statsLowered) { + this.boost({spa: 2}, target, target, null, false, true); + } + }, rating: 2.5, }, compoundeyes: { @@ -231,6 +249,24 @@ export const Abilities: {[k: string]: ModdedAbilityData} = { }, defiant: { inherit: true, + onAfterEachBoost(boost, target, source, effect) { + if (!source || target.isAlly(source)) { + if (effect.id === 'stickyweb') { + this.hint("In Gen 8, Court Change Sticky Web counts as lowering your own Speed, and Defiant only affects stats lowered by foes.", true, source.side); + } + return; + } + let statsLowered = false; + let i: BoostID; + for (i in boost) { + if (boost[i]! < 0) { + statsLowered = true; + } + } + if (statsLowered) { + this.boost({atk: 2}, target, target, null, false, true); + } + }, rating: 2.5, }, deltastream: { @@ -371,6 +407,7 @@ export const Abilities: {[k: string]: ModdedAbilityData} = { }, gulpmissile: { inherit: true, + flags: {failroleplay: 1, noreceiver: 1, noentrain: 1, notrace: 1, failskillswap: 1, cantsuppress: 1, notransform: 1}, rating: 2.5, }, guts: { @@ -442,7 +479,7 @@ export const Abilities: {[k: string]: ModdedAbilityData} = { inherit: true, onTryBoost() {}, onModifyMove() {}, - isBreakable: undefined, + flags: {}, rating: 0, }, illusion: { @@ -515,7 +552,7 @@ export const Abilities: {[k: string]: ModdedAbilityData} = { libero: { inherit: true, onPrepareHit(source, target, move) { - if (move.hasBounced || move.flags['futuremove'] || move.sourceEffect === 'snatch') return; + 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; @@ -736,7 +773,7 @@ export const Abilities: {[k: string]: ModdedAbilityData} = { protean: { inherit: true, onPrepareHit(source, target, move) { - if (move.hasBounced || move.flags['futuremove'] || move.sourceEffect === 'snatch') return; + 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; @@ -1071,7 +1108,7 @@ export const Abilities: {[k: string]: ModdedAbilityData} = { }, trace: { inherit: true, - rating: 2.5, + rating: 3, }, transistor: { inherit: true, @@ -1163,6 +1200,7 @@ export const Abilities: {[k: string]: ModdedAbilityData} = { }, wonderguard: { inherit: true, + flags: {failroleplay: 1, noreceiver: 1, failskillswap: 1, breakable: 1}, rating: 5, }, wonderskin: { diff --git a/data/mods/gen8/formats-data.ts b/data/mods/gen8/formats-data.ts index 2facdbeea697..373fb35bd0cd 100644 --- a/data/mods/gen8/formats-data.ts +++ b/data/mods/gen8/formats-data.ts @@ -1,4 +1,4 @@ -export const FormatsData: {[k: string]: SpeciesFormatsData} = { +export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormatsDataTable = { bulbasaur: { tier: "LC", }, @@ -3570,8 +3570,7 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = { tier: "Illegal", }, vullaby: { - tier: "NFE", - natDexTier: "LC", + tier: "LC", }, mandibuzz: { tier: "UU", diff --git a/data/mods/gen8/items.ts b/data/mods/gen8/items.ts index 945e264c2321..59dc8c70a595 100644 --- a/data/mods/gen8/items.ts +++ b/data/mods/gen8/items.ts @@ -1,4 +1,4 @@ -export const Items: {[k: string]: ModdedItemData} = { +export const Items: import('../../../sim/dex-items').ModdedItemDataTable = { adamantcrystal: { inherit: true, isNonstandard: "Future", @@ -131,14 +131,6 @@ export const Items: {[k: string]: ModdedItemData} = { inherit: true, isNonstandard: null, }, - galaricacuff: { - inherit: true, - isNonstandard: null, - }, - galaricawreath: { - inherit: true, - isNonstandard: null, - }, ghostmemory: { inherit: true, isNonstandard: null, @@ -282,10 +274,6 @@ export const Items: {[k: string]: ModdedItemData} = { inherit: true, isNonstandard: null, }, - safariball: { - inherit: true, - isNonstandard: null, - }, seaincense: { inherit: true, isNonstandard: null, @@ -306,10 +294,6 @@ export const Items: {[k: string]: ModdedItemData} = { inherit: true, isNonstandard: "Past", }, - sportball: { - inherit: true, - isNonstandard: null, - }, starsweet: { inherit: true, isNonstandard: null, diff --git a/data/mods/gen8/learnsets.ts b/data/mods/gen8/learnsets.ts index f0b173174a2e..ad2ee795440f 100644 --- a/data/mods/gen8/learnsets.ts +++ b/data/mods/gen8/learnsets.ts @@ -1,4 +1,4 @@ -export const Learnsets: {[k: string]: ModdedLearnsetData} = { +export const Learnsets: import('../../../sim/dex-species').ModdedLearnsetDataTable = { vivillonfancy: { inherit: true, eventOnly: true, diff --git a/data/mods/gen8/moves.ts b/data/mods/gen8/moves.ts index bde2dced7830..2a22dafba506 100644 --- a/data/mods/gen8/moves.ts +++ b/data/mods/gen8/moves.ts @@ -1,14 +1,8 @@ -export const Moves: {[k: string]: ModdedMoveData} = { +export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = { allyswitch: { inherit: true, - stallingMove: false, + // Prevents setting the volatile used to check for Ally Switch failure onPrepareHit() {}, - onHit(pokemon) { - const newPosition = (pokemon.position === 0 ? pokemon.side.active.length - 1 : 0); - if (!pokemon.side.active[newPosition]) return false; - if (pokemon.side.active[newPosition].fainted) return false; - this.swapPosition(pokemon, newPosition, '[from] move: Ally Switch'); - }, }, anchorshot: { inherit: true, @@ -97,7 +91,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { inherit: true, flags: { protect: 1, mirror: 1, sound: 1, distance: 1, bypasssub: 1, - noassist: 1, failcopycat: 1, failinstruct: 1, failmefirst: 1, nosleeptalk: 1, failmimic: 1, + noassist: 1, failcopycat: 1, failinstruct: 1, failmefirst: 1, nosleeptalk: 1, failmimic: 1, nosketch: 1, }, }, copycat: { @@ -132,12 +126,16 @@ export const Moves: {[k: string]: ModdedMoveData} = { darkvoid: { inherit: true, isNonstandard: "Past", - noSketch: false, + flags: {protect: 1, reflectable: 1, mirror: 1, metronome: 1}, }, doubleironbash: { inherit: true, isNonstandard: null, }, + dragonhammer: { + inherit: true, + flags: {contact: 1, protect: 1, mirror: 1}, + }, dualchop: { inherit: true, isNonstandard: null, @@ -174,7 +172,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { // The animation leak target itself isn't "accurate"; the target it reveals is as if Fly weren't a charge movee // (Fly, like all other charge moves, will actually target slots on its charging turn, relevant for things like Follow Me) // We use a generic single-target move to represent this - if (this.gameType === 'doubles' || this.gameType === 'multi') { + if (this.sides.length > 2) { const animatedTarget = attacker.getMoveTargets(this.dex.getActiveMove('aerialace'), defender).targets[0]; if (animatedTarget) { this.hint(`${move.name}'s animation targeted ${animatedTarget.name}`); @@ -186,7 +184,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { }, futuresight: { inherit: true, - flags: {futuremove: 1}, + flags: {metronome: 1, futuremove: 1}, }, geargrind: { inherit: true, @@ -236,7 +234,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { hyperspacefury: { inherit: true, isNonstandard: "Past", - noSketch: false, + flags: {mirror: 1, bypasssub: 1}, }, hyperspacehole: { inherit: true, @@ -525,6 +523,19 @@ export const Moves: {[k: string]: ModdedMoveData} = { inherit: true, isNonstandard: null, }, + stickyweb: { + inherit: true, + condition: { + onSideStart(side) { + this.add('-sidestart', side, 'move: Sticky Web'); + }, + onEntryHazard(pokemon) { + if (!pokemon.isGrounded() || pokemon.hasItem('heavydutyboots')) return; + this.add('-activate', pokemon, 'move: Sticky Web'); + this.boost({spe: -1}, pokemon, this.effectState.source, this.dex.getActiveMove('stickyweb')); + }, + }, + }, stormthrow: { inherit: true, isNonstandard: null, diff --git a/data/mods/gen8/pokedex.ts b/data/mods/gen8/pokedex.ts index 74f2bdb35da6..40bfb40478d3 100644 --- a/data/mods/gen8/pokedex.ts +++ b/data/mods/gen8/pokedex.ts @@ -1,4 +1,4 @@ -export const Pokedex: {[k: string]: ModdedSpeciesData} = { +export const Pokedex: import('../../../sim/dex-species').ModdedSpeciesDataTable = { growlithehisui: { inherit: true, abilities: {0: "Intimidate", 1: "Flash Fire", H: "Justified"}, @@ -116,4 +116,9 @@ export const Pokedex: {[k: string]: ModdedSpeciesData} = { inherit: true, abilities: {0: "Healer", H: "Contrary"}, }, + kitsunoh: { + inherit: true, + baseStats: {hp: 80, atk: 103, def: 85, spa: 55, spd: 80, spe: 110}, + abilities: {0: "Frisk", 1: "Limber", H: "Iron Fist"}, + }, }; diff --git a/data/mods/gen8/rulesets.ts b/data/mods/gen8/rulesets.ts index 1dc66795cac3..58b0abca1fb4 100644 --- a/data/mods/gen8/rulesets.ts +++ b/data/mods/gen8/rulesets.ts @@ -1,4 +1,4 @@ -export const Rulesets: {[k: string]: ModdedFormatData} = { +export const Rulesets: import('../../../sim/dex-formats').ModdedFormatDataTable = { standard: { inherit: true, ruleset: [ diff --git a/data/mods/gen8/typechart.ts b/data/mods/gen8/typechart.ts index 8035817ee651..8ddf618a16a0 100644 --- a/data/mods/gen8/typechart.ts +++ b/data/mods/gen8/typechart.ts @@ -1,4 +1,4 @@ -export const TypeChart: {[k: string]: ModdedTypeData | null} = { +export const TypeChart: import('../../../sim/dex-data').ModdedTypeDataTable = { stellar: { inherit: true, isNonstandard: 'Future', diff --git a/data/mods/gen8bdsp/abilities.ts b/data/mods/gen8bdsp/abilities.ts index 5833384bb002..d05958a97529 100644 --- a/data/mods/gen8bdsp/abilities.ts +++ b/data/mods/gen8bdsp/abilities.ts @@ -1,4 +1,4 @@ -export const Abilities: {[k: string]: ModdedAbilityData} = { +export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTable = { asoneglastrier: { inherit: true, isNonstandard: "Past", diff --git a/data/mods/gen8bdsp/formats-data.ts b/data/mods/gen8bdsp/formats-data.ts index e23fbc5f6500..6e9af81dcc1e 100644 --- a/data/mods/gen8bdsp/formats-data.ts +++ b/data/mods/gen8bdsp/formats-data.ts @@ -1,5 +1,5 @@ // TODO: alphabetize move names. I'm trying to implement this on a low-quality laptop under time pressure, so I haven't bothered doing so. -export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { +export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormatsDataTable = { bulbasaur: { tier: "LC", }, @@ -223,7 +223,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "LC", }, arcanine: { - tier: "UU", + tier: "RU", doublesTier: "DOU", }, poliwag: { @@ -257,7 +257,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "NFE", }, machamp: { - tier: "RU", + tier: "UU", doublesTier: "DUU", }, bellsprout: { @@ -274,7 +274,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "LC", }, tentacruel: { - tier: "UU", + tier: "RU", doublesTier: "DUU", }, geodude: { @@ -540,7 +540,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "LC", }, gyarados: { - tier: "RUBL", + tier: "UU", doublesTier: "DOU", }, lapras: { @@ -567,7 +567,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { doublesTier: "DUU", }, espeon: { - tier: "UU", + tier: "RU", doublesTier: "DUU", }, umbreon: { @@ -644,7 +644,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { doublesTier: "DUber", }, mew: { - tier: "UU", + tier: "OU", doublesTier: "DUU", }, chikorita: { @@ -770,7 +770,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "LC", }, ambipom: { - tier: "UU", + tier: "RU", doublesTier: "DUU", }, sunkern: { @@ -930,7 +930,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "LC", }, donphan: { - tier: "OU", + tier: "UU", doublesTier: "DUU", }, stantler: { @@ -946,7 +946,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { doublesTier: "DUU", }, raikou: { - tier: "UUBL", + tier: "UU", doublesTier: "DOU", }, entei: { @@ -954,7 +954,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { doublesTier: "DOU", }, suicune: { - tier: "UU", + tier: "OU", doublesTier: "DOU", }, larvitar: { @@ -964,7 +964,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "NFE", }, tyranitar: { - tier: "OU", + tier: "UU", doublesTier: "DOU", }, lugia: { @@ -976,7 +976,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { doublesTier: "DUber", }, celebi: { - tier: "UUBL", + tier: "OU", doublesTier: "DOU", }, treecko: { @@ -1209,7 +1209,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "NFE", }, roserade: { - tier: "UU", + tier: "OU", doublesTier: "DUU", }, gulpin: { @@ -1241,7 +1241,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { doublesTier: "DUU", }, torkoal: { - tier: "UU", + tier: "RU", doublesTier: "DOU", }, spoink: { @@ -1334,7 +1334,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "LC", }, milotic: { - tier: "UU", + tier: "OU", doublesTier: "DOU", }, castform: { @@ -1370,7 +1370,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "LC", }, chimecho: { - tier: "PUBL", + tier: "PU", doublesTier: "DUU", }, absol: { @@ -1470,7 +1470,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { doublesTier: "DUber", }, jirachi: { - tier: "OU", + tier: "UU", doublesTier: "DUU", }, deoxys: { @@ -1615,7 +1615,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { tier: "LC", }, gastrodon: { - tier: "RU", + tier: "UU", doublesTier: "DOU", }, drifloon: { @@ -1742,7 +1742,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { doublesTier: "DUU", }, uxie: { - tier: "UU", + tier: "RU", doublesTier: "DUU", }, mesprit: { @@ -1778,7 +1778,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { doublesTier: "DUber", }, cresselia: { - tier: "RUBL", + tier: "UU", doublesTier: "DOU", }, phione: { diff --git a/data/mods/gen8bdsp/items.ts b/data/mods/gen8bdsp/items.ts index 7b95d154b276..73c6951b68fd 100644 --- a/data/mods/gen8bdsp/items.ts +++ b/data/mods/gen8bdsp/items.ts @@ -1,4 +1,4 @@ -export const Items: {[k: string]: ModdedItemData} = { +export const Items: import('../../../sim/dex-items').ModdedItemDataTable = { absorbbulb: { inherit: true, isNonstandard: "Past", diff --git a/data/mods/gen8bdsp/learnsets.ts b/data/mods/gen8bdsp/learnsets.ts index 4cea60b95cdd..e12a208af1f8 100644 --- a/data/mods/gen8bdsp/learnsets.ts +++ b/data/mods/gen8bdsp/learnsets.ts @@ -1,6 +1,6 @@ /* eslint-disable max-len */ -export const Learnsets: {[k: string]: ModdedLearnsetData} = { +export const Learnsets: import('../../../sim/dex-species').ModdedLearnsetDataTable = { bulbasaur: { learnset: { amnesia: ["8E"], @@ -24396,27 +24396,27 @@ export const Learnsets: {[k: string]: ModdedLearnsetData} = { }, rotomheat: { learnset: { - overheat: ["8T"], + overheat: ["8R"], }, }, rotomwash: { learnset: { - hydropump: ["8T"], + hydropump: ["8R"], }, }, rotomfrost: { learnset: { - blizzard: ["8T"], + blizzard: ["8R"], }, }, rotomfan: { learnset: { - airslash: ["8T"], + airslash: ["8R"], }, }, rotommow: { learnset: { - leafstorm: ["8T"], + leafstorm: ["8R"], }, }, uxie: { diff --git a/data/mods/gen8bdsp/moves.ts b/data/mods/gen8bdsp/moves.ts index 8926f4d90a53..70ac8215ff7f 100644 --- a/data/mods/gen8bdsp/moves.ts +++ b/data/mods/gen8bdsp/moves.ts @@ -1,4 +1,4 @@ -export const Moves: {[k: string]: ModdedMoveData} = { +export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = { accelerock: { inherit: true, isNonstandard: "Past", @@ -123,6 +123,10 @@ export const Moves: {[k: string]: ModdedMoveData} = { inherit: true, isNonstandard: "Past", }, + dragonhammer: { + inherit: true, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, + }, drumbeating: { inherit: true, isNonstandard: "Past", @@ -615,9 +619,6 @@ export const Moves: {[k: string]: ModdedMoveData} = { inherit: true, desc: "A random move is selected for use, other than After You, Belch, Body Press, Chatter, Copycat, Counter, Covet, Destiny Bond, Detect, Dragon Ascent, Endure, Feint, Focus Punch, Follow Me, Helping Hand, Life Dew, Metronome, Mimic, Mirror Coat, Nature Power, Origin Pulse, Precipice Blades, Protect, Quash, Quick Guard, Rage Powder, Sketch, Sleep Talk, Snarl, Snore, Spiky Shield, Struggle, Switcheroo, Thief, Transform, Trick, or Wide Guard.", shortDesc: "Picks a random move.", - noMetronome: [ - "After You", "Belch", "Body Press", "Chatter", "Copycat", "Counter", "Covet", "Destiny Bond", "Detect", "Dragon Ascent", "Endure", "Feint", "Focus Punch", "Follow Me", "Helping Hand", "Life Dew", "Metronome", "Mimic", "Mirror Coat", "Nature Power", "Origin Pulse", "Precipice Blades", "Protect", "Quash", "Quick Guard", "Rage Powder", "Sketch", "Sleep Talk", "Snarl", "Snore", "Spiky Shield", "Struggle", "Switcheroo", "Thief", "Transform", "Trick", "Wide Guard", - ], }, mindblown: { inherit: true, diff --git a/data/mods/gen8bdsp/pokedex.ts b/data/mods/gen8bdsp/pokedex.ts index 7d65904d2578..a804a714cc72 100644 --- a/data/mods/gen8bdsp/pokedex.ts +++ b/data/mods/gen8bdsp/pokedex.ts @@ -1,4 +1,4 @@ -export const Pokedex: {[k: string]: ModdedSpeciesData} = { +export const Pokedex: import('../../../sim/dex-species').ModdedSpeciesDataTable = { eevee: { inherit: true, evos: ["Vaporeon", "Jolteon", "Flareon", "Espeon", "Umbreon", "Leafeon", "Glaceon"], diff --git a/data/mods/gen8dlc1/abilities.ts b/data/mods/gen8dlc1/abilities.ts index 243ebe173bb9..cee6dfe06a03 100644 --- a/data/mods/gen8dlc1/abilities.ts +++ b/data/mods/gen8dlc1/abilities.ts @@ -1,4 +1,4 @@ -export const Abilities: {[k: string]: ModdedAbilityData} = { +export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTable = { asoneglastrier: { inherit: true, isNonstandard: "Unobtainable", diff --git a/data/mods/gen8dlc1/formats-data.ts b/data/mods/gen8dlc1/formats-data.ts index abc765612d71..16b18855d70f 100644 --- a/data/mods/gen8dlc1/formats-data.ts +++ b/data/mods/gen8dlc1/formats-data.ts @@ -1,4 +1,4 @@ -export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { +export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormatsDataTable = { pikachuworld: { isNonstandard: "Unobtainable", tier: "Unreleased", diff --git a/data/mods/gen8dlc1/items.ts b/data/mods/gen8dlc1/items.ts index 1b4862efd0cd..571eb872f6b6 100644 --- a/data/mods/gen8dlc1/items.ts +++ b/data/mods/gen8dlc1/items.ts @@ -1,4 +1,4 @@ -export const Items: {[k: string]: ModdedItemData} = { +export const Items: import('../../../sim/dex-items').ModdedItemDataTable = { adamantorb: { inherit: true, isNonstandard: "Unobtainable", diff --git a/data/mods/gen8dlc1/learnsets.ts b/data/mods/gen8dlc1/learnsets.ts index a48ea9d3877e..85bdd920dbb5 100644 --- a/data/mods/gen8dlc1/learnsets.ts +++ b/data/mods/gen8dlc1/learnsets.ts @@ -1,6 +1,6 @@ /* eslint-disable max-len */ -export const Learnsets: {[speciesid: string]: LearnsetData} = { +export const Learnsets: import('../../../sim/dex-species').ModdedLearnsetDataTable = { bulbasaur: { learnset: { amnesia: ["8M", "7E", "6E", "5E", "4E"], @@ -40891,14 +40891,14 @@ export const Learnsets: {[speciesid: string]: LearnsetData} = { chargebeam: ["7M", "6M", "5M", "4M"], charm: ["8M"], confide: ["7M", "6M"], - confusion: ["8L1", "7L1", "6L1", "6S18", "6S20", "6S21", "5L1", "4L1", "4S11", "4S12", "3L1", "3S0", "3S1", "3S2", "3S3", "3S4", "3S5", "3S6", "3S7", "3S8", "3S9"], - cosmicpower: ["8M", "8L84", "7L60", "6L60", "6S19", "5L60", "5S15", "4L60", "3L45"], + confusion: ["8L1", "7L1", "6L1", "6S10", "6S12", "6S13", "5L1", "4L1", "4S3", "4S4", "3L1", "3S0", "3S1"], + cosmicpower: ["8M", "8L84", "7L60", "6L60", "6S11", "5L60", "5S7", "4L60", "3L45"], dazzlinggleam: ["8M", "7M", "6M"], defensecurl: ["3T"], doomdesire: ["8L98", "7L70", "6L70", "5L70", "4L70", "3L50"], doubleedge: ["8L77", "7L40", "6L40", "5L40", "4L40", "3T", "3L35"], doubleteam: ["7M", "6M", "5M", "4M", "3M"], - dracometeor: ["5S14", "4S12"], + dracometeor: ["5S6", "4S4"], drainpunch: ["8M", "7T", "6T", "5T", "4M"], dreameater: ["7M", "6M", "5M", "4M", "3T"], dynamicpunch: ["3T"], @@ -40911,17 +40911,17 @@ export const Learnsets: {[speciesid: string]: LearnsetData} = { flash: ["6M", "5M", "4M", "3M"], flashcannon: ["8M", "7M", "6M", "5M", "4M"], fling: ["8M", "7M", "6M", "5M", "4M"], - followme: ["5S14"], + followme: ["5S6"], frustration: ["7M", "6M", "5M", "4M", "3M"], futuresight: ["8M", "8L70", "7L55", "6L55", "5L55", "4L55", "3L40"], gigaimpact: ["8M", "7M", "6M", "5M", "4M"], grassknot: ["8M", "7M", "6M", "5M", "4M"], gravity: ["8L35", "7T", "7L45", "6T", "6L45", "5T", "5L45", "4T", "4L45"], - happyhour: ["6S20"], + happyhour: ["6S12"], headbutt: ["4T"], - healingwish: ["8L56", "7L50", "7S22", "6L50", "6S17", "5L50", "5S13", "5S15", "5S16", "4L50"], - heartstamp: ["6S19"], - helpinghand: ["8M", "8L14", "7T", "7L15", "6T", "6L15", "6S18", "5T", "5L15", "4T", "4L15", "3L15", "3S10"], + healingwish: ["8L56", "7L50", "7S14", "6L50", "6S9", "5L50", "5S5", "5S7", "5S8", "4L50"], + heartstamp: ["6S11"], + helpinghand: ["8M", "8L14", "7T", "7L15", "6T", "6L15", "6S10", "5T", "5L15", "4T", "4L15", "3L15", "3S2"], hiddenpower: ["7M", "6M", "5M", "4M", "3M"], hyperbeam: ["8M", "7M", "6M", "5M", "4M", "3M"], icepunch: ["8M", "7T", "6T", "5T", "4T", "3T"], @@ -40938,25 +40938,25 @@ export const Learnsets: {[speciesid: string]: LearnsetData} = { megakick: ["8M"], megapunch: ["8M"], meteorbeam: ["8T"], - meteormash: ["8L49", "5S13", "5S14", "5S15"], + meteormash: ["8L49", "5S5", "5S6", "5S7"], metronome: ["8M", "3T"], mimic: ["3T"], - moonblast: ["6S17"], + moonblast: ["6S9"], mudslap: ["4T", "3T"], naturalgift: ["4M"], nightmare: ["3T"], - playrough: ["8M", "6S19"], + playrough: ["8M", "6S11"], poweruppunch: ["6M"], protect: ["8M", "7M", "6M", "5M", "4M", "3M"], - psychic: ["8M", "8L42", "7M", "7L20", "6M", "6L20", "5M", "5L20", "5S13", "4M", "4L20", "3M", "3L20", "3S10"], + psychic: ["8M", "8L42", "7M", "7L20", "6M", "6L20", "5M", "5L20", "5S5", "4M", "4L20", "3M", "3L20", "3S2"], psychup: ["7M", "6M", "5M", "4M", "3T"], psyshock: ["8M", "7M", "6M", "5M"], raindance: ["8M", "7M", "6M", "5M", "4M", "3M"], recycle: ["7T", "6T", "5T", "4M"], reflect: ["8M", "7M", "6M", "5M", "4M", "3M"], - refresh: ["7L25", "6L25", "5L25", "4L25", "3L25", "3S10"], - rest: ["8M", "8L63", "7M", "7L30", "7S22", "6M", "6L5", "6S21", "5M", "5L5", "4M", "4L5", "4S11", "4S12", "3M", "3L5", "3S0", "3S1", "3S2", "3S3", "3S4", "3S5", "3S6", "3S7", "3S8", "3S9", "3S10"], - return: ["7M", "6M", "6S18", "5M", "5S16", "4M", "3M"], + refresh: ["7L25", "6L25", "5L25", "4L25", "3L25", "3S2"], + rest: ["8M", "8L63", "7M", "7L30", "7S14", "6M", "6L5", "6S13", "5M", "5L5", "4M", "4L5", "4S3", "4S4", "3M", "3L5", "3S0", "3S1", "3S2"], + return: ["7M", "6M", "6S10", "5M", "5S8", "4M", "3M"], round: ["8M", "7M", "6M", "5M"], safeguard: ["8M", "7M", "6M", "5M", "4M", "3M"], sandstorm: ["8M", "7M", "6M", "5M", "4M", "3M"], @@ -40973,7 +40973,7 @@ export const Learnsets: {[speciesid: string]: LearnsetData} = { substitute: ["8M", "7M", "6M", "5M", "4M", "3T"], sunnyday: ["8M", "7M", "6M", "5M", "4M", "3M"], swagger: ["7M", "6M", "5M", "4M", "3T"], - swift: ["8M", "8L7", "7L10", "7S22", "6L10", "6S17", "6S20", "5L10", "5S13", "5S16", "4T", "4L10", "3T", "3L10"], + swift: ["8M", "8L7", "7L10", "7S14", "6L10", "6S9", "6S12", "5L10", "5S5", "5S8", "4T", "4L10", "3T", "3L10"], telekinesis: ["7T", "5M"], thunder: ["8M", "7M", "6M", "5M", "4M", "3M"], thunderbolt: ["8M", "7M", "6M", "5M", "4M", "3M"], @@ -40985,20 +40985,12 @@ export const Learnsets: {[speciesid: string]: LearnsetData} = { uproar: ["8M", "7T", "6T", "5T", "4T"], uturn: ["8M", "7M", "6M", "5M", "4M"], waterpulse: ["7T", "6T", "4M", "3M"], - wish: ["8L1", "7L1", "7S22", "6L1", "6S17", "6S18", "6S19", "6S20", "6S21", "5L1", "5S14", "5S15", "5S16", "4L1", "4S11", "4S12", "3L1", "3S0", "3S1", "3S2", "3S3", "3S4", "3S5", "3S6", "3S7", "3S8", "3S9"], + wish: ["8L1", "7L1", "7S14", "6L1", "6S9", "6S10", "6S11", "6S12", "6S13", "5L1", "5S6", "5S7", "5S8", "4L1", "4S3", "4S4", "3L1", "3S0", "3S1"], zenheadbutt: ["8M", "8L28", "7T", "7L35", "6T", "6L35", "5T", "5L35", "4T", "4L35"], }, eventData: [ {generation: 3, level: 5, moves: ["wish", "confusion", "rest"], pokeball: "pokeball"}, - {generation: 3, level: 5, shiny: true, nature: "Bashful", ivs: {hp: 24, atk: 3, def: 30, spa: 12, spd: 16, spe: 11}, moves: ["wish", "confusion", "rest"], pokeball: "pokeball"}, - {generation: 3, level: 5, shiny: true, nature: "Careful", ivs: {hp: 10, atk: 0, def: 10, spa: 10, spd: 26, spe: 12}, moves: ["wish", "confusion", "rest"], pokeball: "pokeball"}, - {generation: 3, level: 5, shiny: true, nature: "Docile", ivs: {hp: 19, atk: 7, def: 10, spa: 19, spd: 10, spe: 16}, moves: ["wish", "confusion", "rest"], pokeball: "pokeball"}, - {generation: 3, level: 5, shiny: true, nature: "Hasty", ivs: {hp: 3, atk: 12, def: 12, spa: 7, spd: 11, spe: 9}, moves: ["wish", "confusion", "rest"], pokeball: "pokeball"}, - {generation: 3, level: 5, shiny: true, nature: "Jolly", ivs: {hp: 11, atk: 8, def: 6, spa: 14, spd: 5, spe: 20}, moves: ["wish", "confusion", "rest"], pokeball: "pokeball"}, - {generation: 3, level: 5, shiny: true, nature: "Lonely", ivs: {hp: 31, atk: 23, def: 26, spa: 29, spd: 18, spe: 5}, moves: ["wish", "confusion", "rest"], pokeball: "pokeball"}, - {generation: 3, level: 5, shiny: true, nature: "Naughty", ivs: {hp: 21, atk: 31, def: 31, spa: 18, spd: 24, spe: 19}, moves: ["wish", "confusion", "rest"], pokeball: "pokeball"}, - {generation: 3, level: 5, shiny: true, nature: "Serious", ivs: {hp: 29, atk: 10, def: 31, spa: 25, spd: 23, spe: 21}, moves: ["wish", "confusion", "rest"], pokeball: "pokeball"}, - {generation: 3, level: 5, shiny: true, nature: "Timid", ivs: {hp: 15, atk: 28, def: 29, spa: 3, spd: 0, spe: 7}, moves: ["wish", "confusion", "rest"], pokeball: "pokeball"}, + {generation: 3, level: 5, shiny: 1, moves: ["wish", "confusion", "rest"], pokeball: "pokeball"}, {generation: 3, level: 30, moves: ["helpinghand", "psychic", "refresh", "rest"], pokeball: "pokeball"}, {generation: 4, level: 5, moves: ["wish", "confusion", "rest"], pokeball: "cherishball"}, {generation: 4, level: 5, moves: ["wish", "confusion", "rest", "dracometeor"], pokeball: "cherishball"}, diff --git a/data/mods/gen8dlc1/moves.ts b/data/mods/gen8dlc1/moves.ts index 06f3ba95b997..c981ebaabc11 100644 --- a/data/mods/gen8dlc1/moves.ts +++ b/data/mods/gen8dlc1/moves.ts @@ -1,4 +1,4 @@ -export const Moves: {[k: string]: ModdedMoveData} = { +export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = { aeroblast: { inherit: true, isNonstandard: "Unobtainable", diff --git a/data/mods/gen8dlc1/pokedex.ts b/data/mods/gen8dlc1/pokedex.ts index 4a72e653f0f7..16ae1b096702 100644 --- a/data/mods/gen8dlc1/pokedex.ts +++ b/data/mods/gen8dlc1/pokedex.ts @@ -1,4 +1,4 @@ -export const Pokedex: {[k: string]: ModdedSpeciesData} = { +export const Pokedex: import('../../../sim/dex-species').ModdedSpeciesDataTable = { pumpkaboosmall: { inherit: true, unreleasedHidden: true, diff --git a/data/mods/gen8dlc1/rulesets.ts b/data/mods/gen8dlc1/rulesets.ts index 13489be369cf..41a37960bccc 100644 --- a/data/mods/gen8dlc1/rulesets.ts +++ b/data/mods/gen8dlc1/rulesets.ts @@ -1,4 +1,4 @@ -export const Rulesets: {[k: string]: ModdedFormatData} = { +export const Rulesets: import('../../../sim/dex-formats').ModdedFormatDataTable = { teampreview: { inherit: true, onBattleStart() { diff --git a/data/mods/gen8linked/conditions.ts b/data/mods/gen8linked/conditions.ts index fd5f5d625a17..de549ffb2a11 100644 --- a/data/mods/gen8linked/conditions.ts +++ b/data/mods/gen8linked/conditions.ts @@ -1,4 +1,4 @@ -export const Conditions: {[k: string]: ModdedConditionData} = { +export const Conditions: import('../../../sim/dex-conditions').ModdedConditionDataTable = { slp: { inherit: true, onBeforeMove(pokemon, target, move) { diff --git a/data/mods/gen8linked/items.ts b/data/mods/gen8linked/items.ts index 59c64c736c17..2765c2ed4ad7 100644 --- a/data/mods/gen8linked/items.ts +++ b/data/mods/gen8linked/items.ts @@ -1,4 +1,4 @@ -export const Items: {[k: string]: ModdedItemData} = { +export const Items: import('../../../sim/dex-items').ModdedItemDataTable = { leppaberry: { inherit: true, onUpdate(pokemon) { diff --git a/data/mods/gen8linked/moves.ts b/data/mods/gen8linked/moves.ts index a2253dd52414..db0878bba43a 100644 --- a/data/mods/gen8linked/moves.ts +++ b/data/mods/gen8linked/moves.ts @@ -1,4 +1,4 @@ -export const Moves: {[k: string]: ModdedMoveData} = { +export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = { pursuit: { inherit: true, beforeTurnCallback(pokemon, target) { @@ -25,7 +25,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { const move = this.dex.getActiveMove(action.linked?.[0] || action.move); if (move.category !== 'Status' && !move.flags['failmefirst']) { pokemon.addVolatile('mefirst'); - this.actions.useMove(move, pokemon, target); + this.actions.useMove(move, pokemon, {target}); return null; } } @@ -143,7 +143,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { if (!move || !move.flags['mirror'] || move.isZ || move.isMax) { return false; } - this.actions.useMove(move.id, pokemon, target); + this.actions.useMove(move.id, pokemon, {target}); return null; }, }, @@ -384,11 +384,11 @@ export const Moves: {[k: string]: ModdedMoveData} = { if (!lastMove) return false; const possibleTypes = []; const attackType = lastMove.type; - for (const type in this.dex.data.TypeChart) { - if (source.hasType(type)) continue; - const typeCheck = this.dex.data.TypeChart[type].damageTaken[attackType]; + for (const typeName of this.dex.types.names()) { + if (source.hasType(typeName)) continue; + const typeCheck = this.dex.types.get(typeName).damageTaken[attackType]; if (typeCheck === 2 || typeCheck === 3) { - possibleTypes.push(type); + possibleTypes.push(typeName); } } if (!possibleTypes.length) { diff --git a/data/mods/gen8linked/scripts.ts b/data/mods/gen8linked/scripts.ts index 14d752564015..ed19a3000e13 100644 --- a/data/mods/gen8linked/scripts.ts +++ b/data/mods/gen8linked/scripts.ts @@ -115,8 +115,10 @@ export const Scripts: ModdedBattleScriptsData = { } return; } - this.actions.runMove(action.move, action.pokemon, action.targetLoc, action.sourceEffect, - action.zmove, undefined, action.maxMove, action.originalTarget); + this.actions.runMove(action.move, action.pokemon, action.targetLoc, { + sourceEffect: action.sourceEffect, zMove: action.zmove, + maxMove: action.maxMove, originalTarget: action.originalTarget, + }); break; case 'megaEvo': this.actions.runMegaEvo(action.pokemon); @@ -303,15 +305,22 @@ export const Scripts: ModdedBattleScriptsData = { return false; }, actions: { - runMove(moveOrMoveName, pokemon, targetLoc, sourceEffect, zMove, externalMove, maxMove, originalTarget) { + runMove(moveOrMoveName, pokemon, targetLoc, options) { pokemon.activeMoveActions++; + const zMove = options?.zMove; + const maxMove = options?.maxMove; + const externalMove = options?.externalMove; + const originalTarget = options?.originalTarget; + let sourceEffect = options?.sourceEffect; let target = this.battle.getTarget(pokemon, maxMove || zMove || moveOrMoveName, targetLoc, originalTarget); let baseMove = this.dex.getActiveMove(moveOrMoveName); + const priority = baseMove.priority; const pranksterBoosted = baseMove.pranksterBoosted; if (baseMove.id !== 'struggle' && !zMove && !maxMove && !externalMove) { const changedMove = this.battle.runEvent('OverrideAction', pokemon, target, baseMove); if (changedMove && changedMove !== true) { baseMove = this.dex.getActiveMove(changedMove); + baseMove.priority = priority; if (pranksterBoosted) baseMove.pranksterBoosted = pranksterBoosted; target = this.battle.getRandomTarget(pokemon, baseMove); } @@ -388,7 +397,7 @@ export const Scripts: ModdedBattleScriptsData = { this.battle.add('-zpower', pokemon); pokemon.side.zMoveUsed = true; } - const moveDidSomething = this.useMove(baseMove, pokemon, target, sourceEffect, zMove, maxMove); + const moveDidSomething = this.useMove(baseMove, pokemon, {target, sourceEffect, zMove, maxMove}); this.battle.lastSuccessfulMoveThisTurn = moveDidSomething ? this.battle.activeMove && this.battle.activeMove.id : null; if (this.battle.activeMove) move = this.battle.activeMove; this.battle.singleEvent('AfterMove', move, null, pokemon, target, move); @@ -415,7 +424,8 @@ export const Scripts: ModdedBattleScriptsData = { if (dancer.fainted) continue; this.battle.add('-activate', dancer, 'ability: Dancer'); const dancersTarget = !target!.isAlly(dancer) && pokemon.isAlly(dancer) ? target! : pokemon; - this.runMove(move.id, dancer, dancer.getLocOf(dancersTarget), this.dex.abilities.get('dancer'), undefined, true); + this.runMove(move.id, dancer, dancer.getLocOf(dancersTarget), + {sourceEffect: this.dex.abilities.get('dancer'), externalMove: true}); } } if (noLock && pokemon.volatiles['lockedmove']) delete pokemon.volatiles['lockedmove']; diff --git a/data/mods/gen9dlc1/abilities.ts b/data/mods/gen9dlc1/abilities.ts index 9134fc736892..de6d8f837808 100644 --- a/data/mods/gen9dlc1/abilities.ts +++ b/data/mods/gen9dlc1/abilities.ts @@ -1,4 +1,12 @@ -export const Abilities: {[k: string]: ModdedAbilityData} = { +export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTable = { + commander: { + inherit: true, + flags: {failroleplay: 1, noreceiver: 1, noentrain: 1, notrace: 1, failskillswap: 1, notransform: 1}, + }, + gulpmissile: { + inherit: true, + flags: {failroleplay: 1, noreceiver: 1, noentrain: 1, notrace: 1, failskillswap: 1, cantsuppress: 1, notransform: 1}, + }, protosynthesis: { inherit: true, condition: { @@ -46,7 +54,7 @@ export const Abilities: {[k: string]: ModdedAbilityData} = { this.add('-end', pokemon, 'Protosynthesis'); }, }, - isPermanent: true, + flags: {failroleplay: 1, noreceiver: 1, noentrain: 1, notrace: 1, failskillswap: 1, notransform: 1, cantsuppress: 1}, }, quarkdrive: { inherit: true, @@ -95,6 +103,6 @@ export const Abilities: {[k: string]: ModdedAbilityData} = { this.add('-end', pokemon, 'Quark Drive'); }, }, - isPermanent: true, + flags: {failroleplay: 1, noreceiver: 1, noentrain: 1, notrace: 1, failskillswap: 1, notransform: 1, cantsuppress: 1}, }, }; diff --git a/data/mods/gen9dlc1/formats-data.ts b/data/mods/gen9dlc1/formats-data.ts index 5e2dd6dbc8a9..bd8f196cf624 100644 --- a/data/mods/gen9dlc1/formats-data.ts +++ b/data/mods/gen9dlc1/formats-data.ts @@ -1,4 +1,4 @@ -export const FormatsData: {[k: string]: SpeciesFormatsData} = { +export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormatsDataTable = { bulbasaur: { isNonstandard: "Past", tier: "Illegal", diff --git a/data/mods/gen9dlc1/items.ts b/data/mods/gen9dlc1/items.ts index f6498ac1d1ae..d1e16c3a9b4a 100644 --- a/data/mods/gen9dlc1/items.ts +++ b/data/mods/gen9dlc1/items.ts @@ -1,4 +1,4 @@ -export const Items: {[k: string]: ModdedItemData} = { +export const Items: import('../../../sim/dex-items').ModdedItemDataTable = { berrysweet: { inherit: true, isNonstandard: "Past", @@ -7,6 +7,10 @@ export const Items: {[k: string]: ModdedItemData} = { inherit: true, isNonstandard: "Past", }, + dragonscale: { + inherit: true, + isNonstandard: "Past", + }, dubiousdisc: { inherit: true, isNonstandard: "Past", diff --git a/data/mods/gen9dlc1/learnsets.ts b/data/mods/gen9dlc1/learnsets.ts index 5978b1f50a99..d04f2dc841db 100644 --- a/data/mods/gen9dlc1/learnsets.ts +++ b/data/mods/gen9dlc1/learnsets.ts @@ -1,4 +1,4 @@ -export const Learnsets: {[k: string]: LearnsetData} = { +export const Learnsets: import('../../../sim/dex-species').ModdedLearnsetDataTable = { missingno: { learnset: { blizzard: ["3L1"], @@ -45364,14 +45364,14 @@ export const Learnsets: {[k: string]: LearnsetData} = { charm: ["9M", "8M"], confide: ["7M", "6M"], confuseray: ["9M"], - confusion: ["9L1", "8L1", "7L1", "6L1", "6S18", "6S20", "6S21", "5L1", "4L1", "4S11", "4S12", "3L1", "3S0", "3S1", "3S2", "3S3", "3S4", "3S5", "3S6", "3S7", "3S8", "3S9"], - cosmicpower: ["9L84", "8M", "8L84", "7L60", "6L60", "6S19", "5L60", "5S15", "4L60", "3L45"], + confusion: ["9L1", "8L1", "7L1", "6L1", "6S10", "6S12", "6S13", "5L1", "4L1", "4S3", "4S4", "3L1", "3S0", "3S1"], + cosmicpower: ["9L84", "8M", "8L84", "7L60", "6L60", "6S11", "5L60", "5S7", "4L60", "3L45"], dazzlinggleam: ["9M", "8M", "7M", "6M"], defensecurl: ["3T"], doomdesire: ["9L98", "8L98", "7L70", "6L70", "5L70", "4L70", "3L50"], doubleedge: ["9L77", "8L77", "7L40", "6L40", "5L40", "4L40", "3T", "3L35"], doubleteam: ["7M", "6M", "5M", "4M", "3M"], - dracometeor: ["5S14", "4S12"], + dracometeor: ["5S6", "4S4"], drainpunch: ["9M", "8M", "7T", "6T", "5T", "4M"], dreameater: ["7M", "6M", "5M", "4M", "3T"], dynamicpunch: ["3T"], @@ -45385,17 +45385,17 @@ export const Learnsets: {[k: string]: LearnsetData} = { flash: ["6M", "5M", "4M", "3M"], flashcannon: ["9M", "8M", "7M", "6M", "5M", "4M"], fling: ["9M", "8M", "7M", "6M", "5M", "4M"], - followme: ["5S14"], + followme: ["5S6"], frustration: ["7M", "6M", "5M", "4M", "3M"], futuresight: ["9L70", "8M", "8L70", "7L55", "6L55", "5L55", "4L55", "3L40"], gigaimpact: ["9M", "8M", "7M", "6M", "5M", "4M"], grassknot: ["9M", "8M", "7M", "6M", "5M", "4M"], gravity: ["9M", "9L35", "8L35", "7T", "7L45", "6T", "6L45", "5T", "5L45", "4T", "4L45"], - happyhour: ["6S20"], + happyhour: ["6S12"], headbutt: ["4T"], - healingwish: ["9L56", "8L56", "7L50", "7S22", "6L50", "6S17", "5L50", "5S13", "5S15", "5S16", "4L50"], - heartstamp: ["6S19"], - helpinghand: ["9M", "8M", "8L14", "7T", "7L15", "6T", "6L15", "6S18", "5T", "5L15", "4T", "4L15", "3L15", "3S10"], + healingwish: ["9L56", "8L56", "7L50", "7S14", "6L50", "6S9", "5L50", "5S5", "5S7", "5S8", "4L50"], + heartstamp: ["6S11"], + helpinghand: ["9M", "8M", "8L14", "7T", "7L15", "6T", "6L15", "6S10", "5T", "5L15", "4T", "4L15", "3L15", "3S2"], hiddenpower: ["7M", "6M", "5M", "4M", "3M"], hyperbeam: ["9M", "8M", "7M", "6M", "5M", "4M", "3M"], icepunch: ["9M", "8M", "7T", "6T", "5T", "4T", "3T"], @@ -45412,26 +45412,26 @@ export const Learnsets: {[k: string]: LearnsetData} = { megakick: ["8M"], megapunch: ["8M"], meteorbeam: ["8T"], - meteormash: ["9L49", "8L49", "8S23", "5S13", "5S14", "5S15"], + meteormash: ["9L49", "8L49", "8S15", "5S5", "5S6", "5S7"], metronome: ["9M", "8M", "3T"], mimic: ["3T"], - moonblast: ["6S17"], + moonblast: ["6S9"], mudslap: ["9M", "4T", "3T"], naturalgift: ["4M"], nightmare: ["3T"], - playrough: ["9M", "8M", "6S19"], + playrough: ["9M", "8M", "6S11"], poweruppunch: ["6M"], protect: ["9M", "8M", "7M", "6M", "5M", "4M", "3M"], psybeam: ["9M"], - psychic: ["9M", "9L42", "8M", "8L42", "8S23", "7M", "7L20", "6M", "6L20", "5M", "5L20", "5S13", "4M", "4L20", "3M", "3L20", "3S10"], + psychic: ["9M", "9L42", "8M", "8L42", "8S15", "7M", "7L20", "6M", "6L20", "5M", "5L20", "5S5", "4M", "4L20", "3M", "3L20", "3S2"], psychup: ["7M", "6M", "5M", "4M", "3T"], psyshock: ["9M", "8M", "7M", "6M", "5M"], raindance: ["9M", "8M", "7M", "6M", "5M", "4M", "3M"], recycle: ["7T", "6T", "5T", "4M"], reflect: ["9M", "8M", "7M", "6M", "5M", "4M", "3M"], - refresh: ["7L25", "6L25", "5L25", "4L25", "3L25", "3S10"], - rest: ["9M", "9L63", "8M", "8L63", "8S23", "7M", "7L30", "7S22", "6M", "6L5", "6S21", "5M", "5L5", "4M", "4L5", "4S11", "4S12", "3M", "3L5", "3S0", "3S1", "3S2", "3S3", "3S4", "3S5", "3S6", "3S7", "3S8", "3S9", "3S10"], - return: ["7M", "6M", "6S18", "5M", "5S16", "4M", "3M"], + refresh: ["7L25", "6L25", "5L25", "4L25", "3L25", "3S2"], + rest: ["9M", "9L63", "8M", "8L63", "8S15", "7M", "7L30", "7S14", "6M", "6L5", "6S13", "5M", "5L5", "4M", "4L5", "4S3", "4S4", "3M", "3L5", "3S0", "3S1", "3S2"], + return: ["7M", "6M", "6S10", "5M", "5S8", "4M", "3M"], round: ["8M", "7M", "6M", "5M"], safeguard: ["8M", "7M", "6M", "5M", "4M", "3M"], sandstorm: ["9M", "8M", "7M", "6M", "5M", "4M", "3M"], @@ -45448,7 +45448,7 @@ export const Learnsets: {[k: string]: LearnsetData} = { substitute: ["9M", "8M", "7M", "6M", "5M", "4M", "3T"], sunnyday: ["9M", "8M", "7M", "6M", "5M", "4M", "3M"], swagger: ["7M", "6M", "5M", "4M", "3T"], - swift: ["9M", "9L7", "8M", "8L7", "7L10", "7S22", "6L10", "6S17", "6S20", "5L10", "5S13", "5S16", "4T", "4L10", "3T", "3L10"], + swift: ["9M", "9L7", "8M", "8L7", "7L10", "7S14", "6L10", "6S9", "6S12", "5L10", "5S5", "5S8", "4T", "4L10", "3T", "3L10"], telekinesis: ["7T", "5M"], terablast: ["9M"], thunder: ["9M", "8M", "7M", "6M", "5M", "4M", "3M"], @@ -45461,20 +45461,12 @@ export const Learnsets: {[k: string]: LearnsetData} = { uproar: ["8M", "7T", "6T", "5T", "4T"], uturn: ["9M", "8M", "7M", "6M", "5M", "4M"], waterpulse: ["9M", "7T", "6T", "4M", "3M"], - wish: ["9L1", "8L1", "8S23", "7L1", "7S22", "6L1", "6S17", "6S18", "6S19", "6S20", "6S21", "5L1", "5S14", "5S15", "5S16", "4L1", "4S11", "4S12", "3L1", "3S0", "3S1", "3S2", "3S3", "3S4", "3S5", "3S6", "3S7", "3S8", "3S9"], + wish: ["9L1", "8L1", "8S15", "7L1", "7S14", "6L1", "6S9", "6S10", "6S11", "6S12", "6S13", "5L1", "5S6", "5S7", "5S8", "4L1", "4S3", "4S4", "3L1", "3S0", "3S1"], zenheadbutt: ["9M", "9L28", "8M", "8L28", "7T", "7L35", "6T", "6L35", "5T", "5L35", "4T", "4L35"], }, eventData: [ {generation: 3, level: 5, moves: ["wish", "confusion", "rest"], pokeball: "pokeball"}, - {generation: 3, level: 5, shiny: true, nature: "Bashful", ivs: {hp: 24, atk: 3, def: 30, spa: 12, spd: 16, spe: 11}, moves: ["wish", "confusion", "rest"], pokeball: "pokeball"}, - {generation: 3, level: 5, shiny: true, nature: "Careful", ivs: {hp: 10, atk: 0, def: 10, spa: 10, spd: 26, spe: 12}, moves: ["wish", "confusion", "rest"], pokeball: "pokeball"}, - {generation: 3, level: 5, shiny: true, nature: "Docile", ivs: {hp: 19, atk: 7, def: 10, spa: 19, spd: 10, spe: 16}, moves: ["wish", "confusion", "rest"], pokeball: "pokeball"}, - {generation: 3, level: 5, shiny: true, nature: "Hasty", ivs: {hp: 3, atk: 12, def: 12, spa: 7, spd: 11, spe: 9}, moves: ["wish", "confusion", "rest"], pokeball: "pokeball"}, - {generation: 3, level: 5, shiny: true, nature: "Jolly", ivs: {hp: 11, atk: 8, def: 6, spa: 14, spd: 5, spe: 20}, moves: ["wish", "confusion", "rest"], pokeball: "pokeball"}, - {generation: 3, level: 5, shiny: true, nature: "Lonely", ivs: {hp: 31, atk: 23, def: 26, spa: 29, spd: 18, spe: 5}, moves: ["wish", "confusion", "rest"], pokeball: "pokeball"}, - {generation: 3, level: 5, shiny: true, nature: "Naughty", ivs: {hp: 21, atk: 31, def: 31, spa: 18, spd: 24, spe: 19}, moves: ["wish", "confusion", "rest"], pokeball: "pokeball"}, - {generation: 3, level: 5, shiny: true, nature: "Serious", ivs: {hp: 29, atk: 10, def: 31, spa: 25, spd: 23, spe: 21}, moves: ["wish", "confusion", "rest"], pokeball: "pokeball"}, - {generation: 3, level: 5, shiny: true, nature: "Timid", ivs: {hp: 15, atk: 28, def: 29, spa: 3, spd: 0, spe: 7}, moves: ["wish", "confusion", "rest"], pokeball: "pokeball"}, + {generation: 3, level: 5, shiny: 1, moves: ["wish", "confusion", "rest"], pokeball: "pokeball"}, {generation: 3, level: 30, moves: ["helpinghand", "psychic", "refresh", "rest"], pokeball: "pokeball"}, {generation: 4, level: 5, moves: ["wish", "confusion", "rest"], pokeball: "cherishball"}, {generation: 4, level: 5, moves: ["wish", "confusion", "rest", "dracometeor"], pokeball: "cherishball"}, diff --git a/data/mods/gen9dlc1/moves.ts b/data/mods/gen9dlc1/moves.ts index c665bbc32872..24dd9b928247 100644 --- a/data/mods/gen9dlc1/moves.ts +++ b/data/mods/gen9dlc1/moves.ts @@ -1,7 +1,7 @@ -export const Moves: {[k: string]: ModdedMoveData} = { +export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = { aeroblast: { inherit: true, - flags: {protect: 1, mirror: 1, distance: 1}, + flags: {protect: 1, mirror: 1, distance: 1, metronome: 1}, isNonstandard: "Past", }, alluringvoice: { @@ -14,7 +14,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { }, bitterblade: { inherit: true, - flags: {contact: 1, protect: 1, mirror: 1, slicing: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1, slicing: 1}, }, blueflare: { inherit: true, @@ -42,7 +42,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { }, darkvoid: { inherit: true, - noSketch: false, + flags: {protect: 1, reflectable: 1, mirror: 1, metronome: 1}, }, decorate: { inherit: true, @@ -90,7 +90,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { }, hyperspacefury: { inherit: true, - noSketch: false, + flags: {mirror: 1, bypasssub: 1}, }, iceburn: { inherit: true, @@ -107,7 +107,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { }, matchagotcha: { inherit: true, - flags: {protect: 1, mirror: 1, defrost: 1}, + flags: {protect: 1, mirror: 1, defrost: 1, metronome: 1}, }, mightycleave: { inherit: true, @@ -140,7 +140,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { }, revivalblessing: { inherit: true, - noSketch: false, + flags: {heal: 1}, }, rockwrecker: { inherit: true, diff --git a/data/mods/gen9dlc1/pokedex.ts b/data/mods/gen9dlc1/pokedex.ts new file mode 100644 index 000000000000..3df76f7db60c --- /dev/null +++ b/data/mods/gen9dlc1/pokedex.ts @@ -0,0 +1,8 @@ +export const Pokedex: import('../../../sim/dex-species').ModdedSpeciesDataTable = { + cresceidon: { + inherit: true, + baseStats: {hp: 80, atk: 32, def: 111, spa: 88, spd: 99, spe: 125}, + abilities: {0: "Multiscale", 1: "Rough Skin"}, + eggGroups: ["Undiscovered"], + }, +}; diff --git a/data/mods/gen9dlc1/typechart.ts b/data/mods/gen9dlc1/typechart.ts index 8035817ee651..8ddf618a16a0 100644 --- a/data/mods/gen9dlc1/typechart.ts +++ b/data/mods/gen9dlc1/typechart.ts @@ -1,4 +1,4 @@ -export const TypeChart: {[k: string]: ModdedTypeData | null} = { +export const TypeChart: import('../../../sim/dex-data').ModdedTypeDataTable = { stellar: { inherit: true, isNonstandard: 'Future', diff --git a/data/mods/gen9predlc/abilities.ts b/data/mods/gen9predlc/abilities.ts index 5fcff8e888e5..47e904d8d62c 100644 --- a/data/mods/gen9predlc/abilities.ts +++ b/data/mods/gen9predlc/abilities.ts @@ -1,17 +1,21 @@ -export const Abilities: {[k: string]: ModdedAbilityData} = { +export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTable = { commander: { inherit: true, - isPermanent: true, + flags: {failroleplay: 1, noreceiver: 1, noentrain: 1, notrace: 1, failskillswap: 1, cantsuppress: 1, notransform: 1}, + }, + gulpmissile: { + inherit: true, + flags: {cantsuppress: 1, notransform: 1}, }, hadronengine: { inherit: true, - isPermanent: true, + flags: {failroleplay: 1, noreceiver: 1, noentrain: 1, notrace: 1, failskillswap: 1, cantsuppress: 1, notransform: 1}, }, illuminate: { inherit: true, onTryBoost() {}, onModifyMove() {}, - isBreakable: undefined, + flags: {}, rating: 0, }, mindseye: { @@ -20,7 +24,7 @@ export const Abilities: {[k: string]: ModdedAbilityData} = { }, orichalcumpulse: { inherit: true, - isPermanent: true, + flags: {failroleplay: 1, noreceiver: 1, noentrain: 1, notrace: 1, failskillswap: 1, cantsuppress: 1, notransform: 1}, }, supersweetsyrup: { inherit: true, @@ -34,7 +38,19 @@ export const Abilities: {[k: string]: ModdedAbilityData} = { inherit: true, isNonstandard: "Future", }, - embodyaspect: { + embodyaspectcornerstone: { + inherit: true, + isNonstandard: "Future", + }, + embodyaspecthearthflame: { + inherit: true, + isNonstandard: "Future", + }, + embodyaspectteal: { + inherit: true, + isNonstandard: "Future", + }, + embodyaspectwellspring: { inherit: true, isNonstandard: "Future", }, diff --git a/data/mods/gen9predlc/formats-data.ts b/data/mods/gen9predlc/formats-data.ts index b4c7ac370f64..a6bc3d53c4fe 100644 --- a/data/mods/gen9predlc/formats-data.ts +++ b/data/mods/gen9predlc/formats-data.ts @@ -1,4 +1,4 @@ -export const FormatsData: {[k: string]: SpeciesFormatsData} = { +export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormatsDataTable = { bulbasaur: { isNonstandard: "Past", tier: "Illegal", diff --git a/data/mods/gen9predlc/items.ts b/data/mods/gen9predlc/items.ts index bc5ed7c80b50..1c2b1b537ce5 100644 --- a/data/mods/gen9predlc/items.ts +++ b/data/mods/gen9predlc/items.ts @@ -1,4 +1,4 @@ -export const Items: {[k: string]: ModdedItemData} = { +export const Items: import('../../../sim/dex-items').ModdedItemDataTable = { custapberry: { inherit: true, isNonstandard: "Unobtainable", diff --git a/data/mods/gen9predlc/learnsets.ts b/data/mods/gen9predlc/learnsets.ts index e74b4019ad7e..6285448247f6 100644 --- a/data/mods/gen9predlc/learnsets.ts +++ b/data/mods/gen9predlc/learnsets.ts @@ -1,6 +1,6 @@ /* eslint-disable max-len */ -export const Learnsets: {[speciesid: string]: LearnsetData} = { +export const Learnsets: import('../../../sim/dex-species').ModdedLearnsetDataTable = { bulbasaur: { learnset: { amnesia: ["8M", "7E", "6E", "5E", "4E"], @@ -44417,14 +44417,14 @@ export const Learnsets: {[speciesid: string]: LearnsetData} = { chargebeam: ["7M", "6M", "5M", "4M"], charm: ["8M"], confide: ["7M", "6M"], - confusion: ["8L1", "7L1", "6L1", "6S18", "6S20", "6S21", "5L1", "4L1", "4S11", "4S12", "3L1", "3S0", "3S1", "3S2", "3S3", "3S4", "3S5", "3S6", "3S7", "3S8", "3S9"], - cosmicpower: ["8M", "8L84", "7L60", "6L60", "6S19", "5L60", "5S15", "4L60", "3L45"], + confusion: ["8L1", "7L1", "6L1", "6S10", "6S12", "6S13", "5L1", "4L1", "4S3", "4S4", "3L1", "3S0", "3S1"], + cosmicpower: ["8M", "8L84", "7L60", "6L60", "6S11", "5L60", "5S7", "4L60", "3L45"], dazzlinggleam: ["8M", "7M", "6M"], defensecurl: ["3T"], doomdesire: ["8L98", "7L70", "6L70", "5L70", "4L70", "3L50"], doubleedge: ["8L77", "7L40", "6L40", "5L40", "4L40", "3T", "3L35"], doubleteam: ["7M", "6M", "5M", "4M", "3M"], - dracometeor: ["5S14", "4S12"], + dracometeor: ["5S6", "4S4"], drainpunch: ["8M", "7T", "6T", "5T", "4M"], dreameater: ["7M", "6M", "5M", "4M", "3T"], dynamicpunch: ["3T"], @@ -44437,17 +44437,17 @@ export const Learnsets: {[speciesid: string]: LearnsetData} = { flash: ["6M", "5M", "4M", "3M"], flashcannon: ["8M", "7M", "6M", "5M", "4M"], fling: ["8M", "7M", "6M", "5M", "4M"], - followme: ["5S14"], + followme: ["5S6"], frustration: ["7M", "6M", "5M", "4M", "3M"], futuresight: ["8M", "8L70", "7L55", "6L55", "5L55", "4L55", "3L40"], gigaimpact: ["8M", "7M", "6M", "5M", "4M"], grassknot: ["8M", "7M", "6M", "5M", "4M"], gravity: ["8L35", "7T", "7L45", "6T", "6L45", "5T", "5L45", "4T", "4L45"], - happyhour: ["6S20"], + happyhour: ["6S12"], headbutt: ["4T"], - healingwish: ["8L56", "7L50", "7S22", "6L50", "6S17", "5L50", "5S13", "5S15", "5S16", "4L50"], - heartstamp: ["6S19"], - helpinghand: ["8M", "8L14", "7T", "7L15", "6T", "6L15", "6S18", "5T", "5L15", "4T", "4L15", "3L15", "3S10"], + healingwish: ["8L56", "7L50", "7S14", "6L50", "6S9", "5L50", "5S5", "5S7", "5S8", "4L50"], + heartstamp: ["6S11"], + helpinghand: ["8M", "8L14", "7T", "7L15", "6T", "6L15", "6S10", "5T", "5L15", "4T", "4L15", "3L15", "3S2"], hiddenpower: ["7M", "6M", "5M", "4M", "3M"], hyperbeam: ["8M", "7M", "6M", "5M", "4M", "3M"], icepunch: ["8M", "7T", "6T", "5T", "4T", "3T"], @@ -44464,25 +44464,25 @@ export const Learnsets: {[speciesid: string]: LearnsetData} = { megakick: ["8M"], megapunch: ["8M"], meteorbeam: ["8T"], - meteormash: ["8L49", "8S23", "5S13", "5S14", "5S15"], + meteormash: ["8L49", "8S15", "5S5", "5S6", "5S7"], metronome: ["8M", "3T"], mimic: ["3T"], - moonblast: ["6S17"], + moonblast: ["6S9"], mudslap: ["4T", "3T"], naturalgift: ["4M"], nightmare: ["3T"], - playrough: ["8M", "6S19"], + playrough: ["8M", "6S11"], poweruppunch: ["6M"], protect: ["8M", "7M", "6M", "5M", "4M", "3M"], - psychic: ["8M", "8L42", "8S23", "7M", "7L20", "6M", "6L20", "5M", "5L20", "5S13", "4M", "4L20", "3M", "3L20", "3S10"], + psychic: ["8M", "8L42", "8S15", "7M", "7L20", "6M", "6L20", "5M", "5L20", "5S5", "4M", "4L20", "3M", "3L20", "3S2"], psychup: ["7M", "6M", "5M", "4M", "3T"], psyshock: ["8M", "7M", "6M", "5M"], raindance: ["8M", "7M", "6M", "5M", "4M", "3M"], recycle: ["7T", "6T", "5T", "4M"], reflect: ["8M", "7M", "6M", "5M", "4M", "3M"], - refresh: ["7L25", "6L25", "5L25", "4L25", "3L25", "3S10"], - rest: ["8M", "8L63", "8S23", "7M", "7L30", "7S22", "6M", "6L5", "6S21", "5M", "5L5", "4M", "4L5", "4S11", "4S12", "3M", "3L5", "3S0", "3S1", "3S2", "3S3", "3S4", "3S5", "3S6", "3S7", "3S8", "3S9", "3S10"], - return: ["7M", "6M", "6S18", "5M", "5S16", "4M", "3M"], + refresh: ["7L25", "6L25", "5L25", "4L25", "3L25", "3S2"], + rest: ["8M", "8L63", "8S15", "7M", "7L30", "7S14", "6M", "6L5", "6S13", "5M", "5L5", "4M", "4L5", "4S3", "4S4", "3M", "3L5", "3S0", "3S1", "3S2"], + return: ["7M", "6M", "6S10", "5M", "5S8", "4M", "3M"], round: ["8M", "7M", "6M", "5M"], safeguard: ["8M", "7M", "6M", "5M", "4M", "3M"], sandstorm: ["8M", "7M", "6M", "5M", "4M", "3M"], @@ -44499,7 +44499,7 @@ export const Learnsets: {[speciesid: string]: LearnsetData} = { substitute: ["8M", "7M", "6M", "5M", "4M", "3T"], sunnyday: ["8M", "7M", "6M", "5M", "4M", "3M"], swagger: ["7M", "6M", "5M", "4M", "3T"], - swift: ["8M", "8L7", "7L10", "7S22", "6L10", "6S17", "6S20", "5L10", "5S13", "5S16", "4T", "4L10", "3T", "3L10"], + swift: ["8M", "8L7", "7L10", "7S14", "6L10", "6S9", "6S12", "5L10", "5S5", "5S8", "4T", "4L10", "3T", "3L10"], telekinesis: ["7T", "5M"], thunder: ["8M", "7M", "6M", "5M", "4M", "3M"], thunderbolt: ["8M", "7M", "6M", "5M", "4M", "3M"], @@ -44511,20 +44511,12 @@ export const Learnsets: {[speciesid: string]: LearnsetData} = { uproar: ["8M", "7T", "6T", "5T", "4T"], uturn: ["8M", "7M", "6M", "5M", "4M"], waterpulse: ["7T", "6T", "4M", "3M"], - wish: ["8L1", "8S23", "7L1", "7S22", "6L1", "6S17", "6S18", "6S19", "6S20", "6S21", "5L1", "5S14", "5S15", "5S16", "4L1", "4S11", "4S12", "3L1", "3S0", "3S1", "3S2", "3S3", "3S4", "3S5", "3S6", "3S7", "3S8", "3S9"], + wish: ["8L1", "8S15", "7L1", "7S14", "6L1", "6S9", "6S10", "6S11", "6S12", "6S13", "5L1", "5S6", "5S7", "5S8", "4L1", "4S3", "4S4", "3L1", "3S0", "3S1"], zenheadbutt: ["8M", "8L28", "7T", "7L35", "6T", "6L35", "5T", "5L35", "4T", "4L35"], }, eventData: [ {generation: 3, level: 5, moves: ["wish", "confusion", "rest"], pokeball: "pokeball"}, - {generation: 3, level: 5, shiny: true, nature: "Bashful", ivs: {hp: 24, atk: 3, def: 30, spa: 12, spd: 16, spe: 11}, moves: ["wish", "confusion", "rest"], pokeball: "pokeball"}, - {generation: 3, level: 5, shiny: true, nature: "Careful", ivs: {hp: 10, atk: 0, def: 10, spa: 10, spd: 26, spe: 12}, moves: ["wish", "confusion", "rest"], pokeball: "pokeball"}, - {generation: 3, level: 5, shiny: true, nature: "Docile", ivs: {hp: 19, atk: 7, def: 10, spa: 19, spd: 10, spe: 16}, moves: ["wish", "confusion", "rest"], pokeball: "pokeball"}, - {generation: 3, level: 5, shiny: true, nature: "Hasty", ivs: {hp: 3, atk: 12, def: 12, spa: 7, spd: 11, spe: 9}, moves: ["wish", "confusion", "rest"], pokeball: "pokeball"}, - {generation: 3, level: 5, shiny: true, nature: "Jolly", ivs: {hp: 11, atk: 8, def: 6, spa: 14, spd: 5, spe: 20}, moves: ["wish", "confusion", "rest"], pokeball: "pokeball"}, - {generation: 3, level: 5, shiny: true, nature: "Lonely", ivs: {hp: 31, atk: 23, def: 26, spa: 29, spd: 18, spe: 5}, moves: ["wish", "confusion", "rest"], pokeball: "pokeball"}, - {generation: 3, level: 5, shiny: true, nature: "Naughty", ivs: {hp: 21, atk: 31, def: 31, spa: 18, spd: 24, spe: 19}, moves: ["wish", "confusion", "rest"], pokeball: "pokeball"}, - {generation: 3, level: 5, shiny: true, nature: "Serious", ivs: {hp: 29, atk: 10, def: 31, spa: 25, spd: 23, spe: 21}, moves: ["wish", "confusion", "rest"], pokeball: "pokeball"}, - {generation: 3, level: 5, shiny: true, nature: "Timid", ivs: {hp: 15, atk: 28, def: 29, spa: 3, spd: 0, spe: 7}, moves: ["wish", "confusion", "rest"], pokeball: "pokeball"}, + {generation: 3, level: 5, shiny: 1, moves: ["wish", "confusion", "rest"], pokeball: "pokeball"}, {generation: 3, level: 30, moves: ["helpinghand", "psychic", "refresh", "rest"], pokeball: "pokeball"}, {generation: 4, level: 5, moves: ["wish", "confusion", "rest"], pokeball: "cherishball"}, {generation: 4, level: 5, moves: ["wish", "confusion", "rest", "dracometeor"], pokeball: "cherishball"}, diff --git a/data/mods/gen9predlc/moves.ts b/data/mods/gen9predlc/moves.ts index 17d435205f1b..1af9032814ea 100644 --- a/data/mods/gen9predlc/moves.ts +++ b/data/mods/gen9predlc/moves.ts @@ -1,4 +1,4 @@ -export const Moves: {[k: string]: ModdedMoveData} = { +export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = { aurawheel: { inherit: true, isNonstandard: "Past", diff --git a/data/mods/gen9predlc/pokedex.ts b/data/mods/gen9predlc/pokedex.ts index d88cc83a9ee5..8d215ef7e7ae 100644 --- a/data/mods/gen9predlc/pokedex.ts +++ b/data/mods/gen9predlc/pokedex.ts @@ -1,4 +1,4 @@ -export const Pokedex: {[k: string]: ModdedSpeciesData} = { +export const Pokedex: import('../../../sim/dex-species').ModdedSpeciesDataTable = { shiftry: { inherit: true, abilities: {0: "Chlorophyll", 1: "Early Bird", H: "Pickpocket"}, diff --git a/data/mods/gen9ssb/abilities.ts b/data/mods/gen9ssb/abilities.ts new file mode 100644 index 000000000000..d4ba9fe88408 --- /dev/null +++ b/data/mods/gen9ssb/abilities.ts @@ -0,0 +1,3173 @@ +import {ssbSets} from "./random-teams"; +import {changeSet, getName, PSEUDO_WEATHERS} from "./scripts"; + +const STRONG_WEATHERS = ['desolateland', 'primordialsea', 'deltastream', 'deserteddunes', 'millenniumcastle']; + +export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTable = { + /* + // Example + abilityid: { + shortDesc: "", // short description, shows up in /dt + desc: "", // long description + name: "Ability Name", + // The bulk of an ability is not easily shown in an example since it varies + // For more examples, see https://github.com/smogon/pokemon-showdown/blob/master/data/abilities.ts + }, + */ + // Please keep abilites organized alphabetically based on staff member name! + // Aelita + fortifiedmetal: { + shortDesc: "This Pokemon's weight is doubled and Attack is 1.5x when statused.", + name: "Fortified Metal", + onModifyWeightPriority: 1, + onModifyWeight(weighthg) { + return weighthg * 2; + }, + onModifyAtkPriority: 5, + onModifyAtk(atk, pokemon) { + if (pokemon.status) { + return this.chainModify(1.5); + } + }, + flags: {breakable: 1}, + gen: 9, + }, + + // Aethernum + theeminenceintheshadow: { + shortDesc: "Unaware + Supreme Overlord with half the boost.", + name: "The Eminence in the Shadow", + 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; + } + }, + onStart(pokemon) { + if (pokemon.side.totalFainted) { + this.add('-activate', pokemon, 'ability: The Eminence in the Shadow'); + const fallen = Math.min(pokemon.side.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 = [20, 21, 22, 23, 24, 25]; + this.debug(`Supreme Overlord boost: ${powMod[this.effectState.fallen]}/25`); + return this.chainModify([powMod[this.effectState.fallen], 20]); + } + }, + flags: {breakable: 1}, + }, + + // Akir + takeitslow: { + shortDesc: "Regenerator + Psychic Surge.", + name: "Take it Slow", + onSwitchOut(pokemon) { + pokemon.heal(pokemon.baseMaxhp / 3); + }, + onStart(source) { + this.field.setTerrain('psychicterrain'); + }, + flags: {}, + gen: 9, + }, + + // Alex + pawprints: { + shortDesc: "Oblivious + status moves ignore abilities.", + name: "Pawprints", + onUpdate(pokemon) { + if (pokemon.volatiles['attract']) { + this.add('-activate', pokemon, 'ability: Paw Prints'); + pokemon.removeVolatile('attract'); + this.add('-end', pokemon, 'move: Attract', '[from] ability: Paw Prints'); + } + if (pokemon.volatiles['taunt']) { + this.add('-activate', pokemon, 'ability: Paw Prints'); + pokemon.removeVolatile('taunt'); + // Taunt's volatile already sends the -end message when removed + } + }, + onImmunity(type, pokemon) { + if (type === 'attract') return false; + }, + onTryHit(pokemon, target, move) { + if (move.id === 'attract' || move.id === 'captivate' || move.id === 'taunt') { + this.add('-immune', pokemon, '[from] ability: Paw Prints'); + return null; + } + }, + onTryBoost(boost, target, source, effect) { + if (effect.name === 'Intimidate' && boost.atk) { + delete boost.atk; + this.add('-fail', target, 'unboost', 'Attack', '[from] ability: Paw Prints', '[of] ' + target); + } + }, + onModifyMove(move) { + if (move.category === 'Status') { + move.ignoreAbility = true; + } + }, + flags: {breakable: 1}, + }, + + // Alexander489 + confirmedtown: { + shortDesc: "Technician + Protean.", + name: "Confirmed Town", + onBasePowerPriority: 30, + onBasePower(basePower, attacker, defender, move) { + const basePowerAfterMultiplier = this.modify(basePower, this.event.modifier); + this.debug('Base Power: ' + basePowerAfterMultiplier); + if (basePowerAfterMultiplier <= 60) { + this.debug('Confirmed Town boost'); + return this.chainModify(1.5); + } + }, + onPrepareHit(source, target, move) { + if (move.hasBounced || move.flags['futuremove'] || move.sourceEffect === 'snatch') 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: Confirmed Town'); + } + }, + flags: {}, + }, + + // Apple + orchardsgift: { + shortDesc: "Summons Grassy Terrain. 1.5x Sp. Atk and Sp. Def during Grassy Terrain.", + name: "Orchard's Gift", + onStart(pokemon) { + if (this.field.setTerrain('grassyterrain')) { + this.add('-activate', pokemon, 'Orchard\'s Gift', '[source]'); + } else if (this.field.isTerrain('grassyterrain')) { + this.add('-activate', pokemon, 'ability: Orchard\'s Gift'); + } + }, + onModifyAtkPriority: 5, + onModifySpA(spa, pokemon) { + if (this.field.isTerrain('grassyterrain')) { + this.debug('Orchard\'s Gift boost'); + return this.chainModify(1.5); + } + }, + onModifySpDPriority: 6, + onModifySpD(spd, pokemon) { + if (this.field.isTerrain('grassyterrain')) { + this.debug('Orchard\'s Gift boost'); + return this.chainModify(1.5); + } + }, + }, + + // Appletun a la Mode + servedcold: { + shortDesc: "This Pokemon's Defense is raised 2 stages if hit by an Ice move; Ice immunity.", + name: "Served Cold", + onTryHit(target, source, move) { + if (target !== source && move.type === 'Ice') { + if (!this.boost({def: 2})) { + this.add('-immune', target, '[from] ability: Served Cold'); + } + return null; + } + }, + flags: {breakable: 1}, + }, + + // aQrator + neverendingfhunt: { + desc: "This Pokemon's non-damaging moves have their priority increased by 1. Opposing Dark-type Pokemon are immune to these moves, and any move called by these moves, if the resulting user of the move has this Ability.", + shortDesc: "This Pokemon's Status moves have priority raised by 1, but Dark types are immune.", + name: "Neverending fHunt", + onModifyPriority(priority, pokemon, target, move) { + if (move?.category === 'Status') { + move.pranksterBoosted = true; + return priority + 1; + } + }, + flags: {}, + }, + + // A Quag To The Past + quagofruin: { + shortDesc: "Active Pokemon without this Ability have 0.85x Defense. Ignores abilities.", + desc: "Active Pokemon without this Ability have their Defense multiplied by 0.85x. This Pokemon's moves and their effects ignore certain Abilities of other Pokemon.", + name: "Quag of Ruin", + onStart(pokemon) { + if (this.suppressingAbility(pokemon)) return; + this.add('-ability', pokemon, 'Quag of Ruin'); + }, + onAnyModifyDef(def, target, source, move) { + if (!move) return; + const abilityHolder = this.effectState.target; + if (target.hasAbility('Quag of Ruin')) return; + if (!move.ruinedDef?.hasAbility('Quag of Ruin')) move.ruinedDef = abilityHolder; + if (move.ruinedDef !== abilityHolder) return; + this.debug('Quag of Ruin Def drop'); + return this.chainModify(0.85); + }, + onModifyMove(move) { + move.ignoreAbility = true; + }, + flags: {}, + gen: 9, + }, + clodofruin: { + shortDesc: "Active Pokemon without this Ability have 0.85x Attack. Ignores stat changes.", + desc: "Active Pokemon without this Ability have their Attack multiplied by 0.85x. This Pokemon ignores other Pokemon's stat stages when taking or doing damage.", + name: "Clod of Ruin", + onStart(pokemon) { + if (this.suppressingAbility(pokemon)) return; + this.add('-ability', pokemon, 'Clod of Ruin'); + }, + onAnyModifyAtk(atk, target, source, move) { + if (!move) return; + const abilityHolder = this.effectState.target; + if (target.hasAbility('Clod of Ruin')) return; + if (!move.ruinedAtk?.hasAbility('Clod of Ruin')) move.ruinedAtk = abilityHolder; + if (move.ruinedAtk !== abilityHolder) return; + this.debug('Clod of Ruin Atk drop'); + return this.chainModify(0.85); + }, + 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; + } + }, + flags: {breakable: 1}, + gen: 9, + }, + + // Archas + saintlybullet: { + shortDesc: "Snipe Shot always has STAB and heals the user by 1/8 (or 1/6 on a crit) of its max HP.", + name: "Saintly Bullet", + onModifyMove(move) { + if (move.id === 'snipeshot') { + move.forceSTAB = true; + } + }, + onAfterMoveSecondarySelf(source, target, move) { + if (move.id === 'snipeshot') { + const ratio = target.getMoveHitData(move).crit ? 6 : 8; + this.heal(source.maxhp / ratio, source, source); + } + }, + flags: {}, + gen: 9, + }, + + // Arcueid + marblephantasm: { + shortDesc: "Deoxys-Defense is immune to status moves/effects. Deoxys-Attack gains Fairy type.", + desc: "If this Pokemon is a Deoxys-Defense, it is immune to status moves and cannot be afflicted with any non-volatile status condition. If this Pokemon is a Deoxys-Attack, it gains an additional Fairy typing for as long as this Ability remains active.", + name: "Marble Phantasm", + onStart(source) { + if (source.species.name === "Deoxys-Attack" && source.setType(['Psychic', 'Fairy'])) { + this.add('-start', source, 'typechange', source.getTypes(true).join('/'), '[from] ability: Marble Phantasm'); + } else if (source.species.name === "Deoxys-Defense" && source.setType('Psychic')) { + this.add('-start', source, 'typechange', 'Psychic', '[from] ability: Marble Phantasm'); + } + }, + onTryHit(target, source, move) { + if (move.category === 'Status' && target !== source && target.species.name === "Deoxys-Defense") { + this.add('-immune', target, '[from] ability: Marble Phantasm'); + return null; + } + }, + onSetStatus(status, target, source, effect) { + if (target.species.name === "Deoxys-Defense") { + this.add('-immune', target, '[from] ability: Marble Phantasm'); + return false; + } + }, + flags: {}, + gen: 9, + }, + + // Arsenal + absorbphys: { + shortDesc: "This Pokemon heals 1/4 of its max HP when hit by Normal moves; Normal immunity.", + name: "Absorb Phys", + onTryHit(target, source, move) { + if (target !== source && move.type === 'Normal') { + if (!this.heal(target.baseMaxhp / 4)) { + this.add('-immune', target, '[from] ability: Absorb Phys'); + } + return null; + } + }, + flags: {breakable: 1}, + gen: 9, + }, + + // Artemis + supervisedlearning: { + shortDesc: "Unaware + Clear Body.", + name: "Supervised Learning", + 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; + } + }, + onTryBoost(boost, target, source, effect) { + if (source && target === source) 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 && effect.id !== 'octolock') { + this.add("-fail", target, "unboost", "[from] ability: Supervised Learning", "[of] " + target); + } + }, + flags: {}, + gen: 9, + }, + + // Audiino + mitosis: { + shortDesc: "Regenerator + Multiscale.", + name: "Mitosis", + onSwitchOut(pokemon) { + pokemon.heal(pokemon.baseMaxhp / 3); + }, + onSourceModifyDamage(damage, source, target, move) { + if (target.hp >= target.maxhp) { + this.debug('Multiscale weaken'); + return this.chainModify(0.5); + } + }, + flags: {breakable: 1}, + }, + + // ausma + cascade: { + shortDesc: "At 25% HP, transforms into a Mismagius. Sigil's Storm becomes Ghost type and doesn't charge.", + name: "Cascade", + onUpdate(pokemon) { + if (pokemon.baseSpecies.baseSpecies !== 'Hatterene' || pokemon.transformed || !pokemon.hp) return; + if (pokemon.species.id === 'mismagius' || pokemon.hp > pokemon.maxhp / 4) return; + this.add(`c:|${getName('ausma')}|that's it, yall mfs are about to face the wrath of Big Stall™`); + this.add(`c:|${getName('ausma')}|or i guess moreso Big Pult. pick your poison`); + this.add('-activate', pokemon, 'ability: Cascade'); + changeSet(this, pokemon, ssbSets['ausma-Mismagius'], true); + pokemon.cureStatus(); + this.heal(pokemon.maxhp / 3); + if (this.field.pseudoWeather['trickroom']) { + this.field.removePseudoWeather('trickroom'); + this.boost({spe: 2}, pokemon, pokemon, this.effect); + } + }, + flags: {}, + }, + + // Bert122 + pesteringassault: { + shortDesc: "Uses Knock Off, Taunt, Torment, Soak, and Confuse Ray with 40% accuracy at turn end.", + name: "Pestering Assault", + onResidual(pokemon, s, effect) { + const moves = ['knockoff', 'taunt', 'torment', 'soak', 'confuseray']; + for (const moveid of moves) { + const move = this.dex.getActiveMove(moveid); + move.accuracy = 40; + const target = pokemon.foes()[0]; + if (target && !target.fainted) { + this.actions.useMove(move, pokemon, {target, sourceEffect: effect}); + } + } + }, + flags: {}, + }, + + // blazeofvictory + prismaticlens: { + shortDesc: "Pixilate + Tinted Lens.", + name: "Prismatic Lens", + 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 = 'Fairy'; + move.typeChangerBoosted = this.effect; + } + }, + onBasePowerPriority: 23, + onBasePower(basePower, pokemon, target, move) { + if (move.typeChangerBoosted === this.effect) return this.chainModify([4915, 4096]); + }, + onModifyDamage(damage, source, target, move) { + if (target.getMoveHitData(move).typeMod < 0) { + this.debug('Tinted Lens boost'); + return this.chainModify(2); + } + }, + flags: {}, + }, + + // Blitz + blitzofruin: { + shortDesc: "Active Pokemon without this Ability have 0.75x Speed.", + desc: "Active Pokemon without this Ability have their Speed multiplied by 0.75x.", + name: "Blitz of Ruin", + onStart(pokemon) { + this.add('-ability', pokemon, 'Blitz of Ruin'); + this.add('-message', `${pokemon.name}'s Blitz of Ruin lowered the Speed of all surrounding Pokémon!`); + }, + onAnyModifySpe(spe, pokemon) { + if (!pokemon.hasAbility('Blitz of Ruin')) { + return this.chainModify(0.75); + } + }, + flags: {breakable: 1}, + }, + + // Breadstycks + painfulexit: { + shortDesc: "When this Pokemon switches out, foes lose 25% HP.", + name: "Painful Exit", + onBeforeSwitchOutPriority: -1, + onBeforeSwitchOut(pokemon) { + this.add(`c:|${getName('Breadstycks')}|Just kidding!! Take this KNUCKLE SANDWICH`); + for (const foe of pokemon.foes()) { + if (!foe || foe.fainted || !foe.hp) continue; + this.add(`-anim`, pokemon, "Tackle", foe); + this.damage(foe.hp / 4, foe, pokemon); + } + }, + flags: {}, + }, + + // Chloe + acetosa: { + shortDesc: "This Pokemon's moves are changed to be Grass type and have 1.2x power.", + name: "Acetosa", + onModifyTypePriority: 1, + onModifyType(move, pokemon) { + const noModifyType = [ + 'hiddenpower', 'judgment', 'multiattack', 'naturalgift', 'revelationdance', 'struggle', 'technoblast', 'terrainpulse', 'weatherball', + ]; + if (!(move.isZ && move.category !== 'Status') && !noModifyType.includes(move.id) && + !(move.name === 'Tera Blast' && pokemon.terastallized)) { + move.type = 'Grass'; + move.typeChangerBoosted = this.effect; + } + }, + onBasePowerPriority: 23, + onBasePower(basePower, pokemon, target, move) { + if (move.typeChangerBoosted === this.effect) return this.chainModify([4915, 4096]); + }, + flags: {}, + }, + + // Chris + astrothunder: { + shortDesc: "Drizzle + Static.", + name: "Astrothunder", + onStart(source) { + for (const action of this.queue) { + if (action.choice === 'runPrimal' && action.pokemon === source && source.species.id === 'kyogre') return; + if (action.choice !== 'runSwitch' && action.choice !== 'runPrimal') break; + } + this.field.setWeather('raindance'); + }, + onDamagingHit(damage, target, source, move) { + if (this.checkMoveMakesContact(move, source, target)) { + if (this.randomChance(3, 10)) { + source.trySetStatus('par', target); + } + } + }, + }, + + // Clefable + thatshacked: { + shortDesc: "Tries to inflict the foe with Torment at the end of each turn.", + name: "That's Hacked", + onResidual(target, source, effect) { + if (!target.foes()?.length) return; + const abilMessages = [ + "All hacks and hacking methods are banned!", + "Can't be having that.", + "Naaah, miss me with that shit.", + "Bit bullshit that, mate.", + "Wait, thats illegal!", + "Nope.", + "I can't believe you've done this.", + "No thank you.", + "Seems a bit suss.", + "Thats probably hacked, shouldnt use it here.", + "Hacks will get you banned.", + "You silly sausage", + "Can you not?", + "Yeah, thats a no from me.", + "Lets not", + "No fun allowed", + ]; + this.add(`c:|${getName((target.illusion || target).name)}|${this.sample(abilMessages)}`); + for (const foe of target.foes()) { + if (foe && !foe.fainted && !foe.volatiles['torment']) { + foe.addVolatile('torment'); + } + } + }, + flags: {}, + }, + + // Clementine + meltingpoint: { + shortDesc: "+2 Speed. Fire moves change user to Water type. Fire immunity.", + name: "Melting Point", + onTryHit(target, source, move) { + if (target !== source && move.type === 'Fire') { + if (target.setType('Water')) { + this.add('-start', target, 'typechange', 'Water', '[from] ability: Melting Point'); + this.boost({spe: 2}, target, source, this.dex.abilities.get('meltingpoint')); + } else { + this.add('-immune', target, '[from] ability: Melting Point'); + } + return null; + } + }, + }, + + // clerica + masquerade: { + shortDesc: "(Mimikyu only) The first hit is blocked: instead, takes 1/8 damage and gets +1 Atk/Spe.", + desc: "If this Pokemon is a Mimikyu, the first hit it takes in battle deals 0 neutral damage. Its disguise is then broken, it changes to Busted Form, its Attack and Speed are boosted by 1 stage, and it loses 1/8 of its max HP. Confusion damage also breaks the disguise.", + name: "Masquerade", + onDamagePriority: 1, + onDamage(damage, target, source, effect) { + if ( + effect && effect.effectType === 'Move' && + ['mimikyu', 'mimikyutotem'].includes(target.species.id) && !target.transformed + ) { + this.add('-activate', target, 'ability: Masquerade'); + this.effectState.busted = true; + return 0; + } + }, + onCriticalHit(target, source, move) { + if (!target) return; + if (!['mimikyu', 'mimikyutotem'].includes(target.species.id) || target.transformed) { + 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) || target.transformed) { + 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)); + this.boost({atk: 1, spe: 1}); + this.add(`c:|${getName('clerica')}|oop`); + } + }, + flags: {breakable: 1, failroleplay: 1, noreceiver: 1, noentrain: 1, notrace: 1, failskillswap: 1, cantsuppress: 1}, + }, + + // Clouds + jetstream: { + shortDesc: "Delta Stream + Stealth Rock immunity.", + name: "Jet Stream", + onStart(source) { + this.field.setWeather('deltastream'); + this.add('message', `Strong air currents keep Flying-types ahead of the chase!`); + }, + onAnySetWeather(target, source, weather) { + if (this.field.isWeather('deltastream') && !STRONG_WEATHERS.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(['deltastream', 'jetstream'])) { + this.field.weatherState.source = target; + return; + } + } + this.field.clearWeather(); + }, + onDamage(damage, target, source, effect) { + if (effect && effect.name === 'Stealth Rock') { + return false; + } + }, + flags: {breakable: 1}, + }, + + // Coolcodename + firewall: { + shortDesc: "Burns foes that attempt to use status moves on this Pokemon; Status move immunity.", + name: "Firewall", + onTryHit(target, source, move) { + if (move.category === 'Status' && target !== source) { + if (!source.trySetStatus('brn', target)) { + this.add('-immune', target, '[from] ability: Firewall'); + } + return null; + } + }, + flags: {breakable: 1}, + }, + + // Corthius + grassyemperor: { + shortDesc: "On switch-in, summons Grassy Terrain. During Grassy Terrain, Attack is 1.33x.", + name: "Grassy Emperor", + onStart(pokemon) { + if (this.field.setTerrain('grassyterrain')) { + this.add('-activate', pokemon, 'Grassy Emperor', '[source]'); + } else if (this.field.isTerrain('grassyterrain')) { + this.add('-activate', pokemon, 'ability: Grassy Emperor'); + } + }, + onModifyAtkPriority: 5, + onModifyAtk(atk, pokemon) { + if (this.field.isTerrain('grassyterrain')) { + this.debug('Grassy Emperor boost'); + return this.chainModify([5461, 4096]); + } + }, + flags: {}, + }, + + // Dawn of Artemis + formchange: { + shortDesc: ">50% HP Necrozma, else Necrozma-Ultra. SpA boosts become Atk boosts and vice versa.", + desc: "If this Pokemon is a Necrozma, it changes to Necrozma-Ultra and switches its Attack and Special Attack stat stage changes if it has 1/2 or less of its maximum HP at the end of a turn. If Necrozma-Ultra's HP is above 1/2 of its maximum HP at the end of a turn, it changes back to Necrozma and switches its Attack and Special Attack stat stage changes.", + name: "Form Change", + onResidual(pokemon) { + if (pokemon.baseSpecies.baseSpecies !== 'Necrozma' || pokemon.transformed || !pokemon.hp) return; + let newSet = 'Dawn of Artemis'; + if (pokemon.hp > pokemon.maxhp / 2) { + if (pokemon.species.id === 'necrozma') return; + this.add(`c:|${getName('Dawn of Artemis')}|Good, I'm healthy again, time to swap back.`); + } else { + if (pokemon.species.id === 'necrozmaultra') return; + this.add(`c:|${getName('Dawn of Artemis')}|Time for me to transform and you to witness the power of Ares now!`); + newSet += '-Ultra'; + } + this.add('-activate', pokemon, 'ability: Form Change'); + changeSet(this, pokemon, ssbSets[newSet]); + [pokemon.boosts['atk'], pokemon.boosts['spa']] = [pokemon.boosts['spa'], pokemon.boosts['atk']]; + this.add('-setboost', pokemon, 'spa', pokemon.boosts['spa'], '[silent]'); + this.add('-setboost', pokemon, 'atk', pokemon.boosts['atk'], '[silent]'); + this.add('-message', `${pokemon.name} swapped its Attack and Special Attack boosts!`); + }, + flags: {}, + }, + + // DaWoblefet + shadowartifice: { + shortDesc: "Traps adjacent foes. If KOed with a move, that move's user loses an equal amount of HP.", + name: "Shadow Artifice", + onFoeTrapPokemon(pokemon) { + if (!pokemon.hasAbility(['shadowtag', 'shadowartifice']) && pokemon.isAdjacent(this.effectState.target)) { + pokemon.tryTrap(true); + } + }, + onFoeMaybeTrapPokemon(pokemon, source) { + if (!source) source = this.effectState.target; + if (!source || !pokemon.isAdjacent(source)) return; + if (!pokemon.hasAbility(['shadowtag', 'shadowartifice'])) { + pokemon.maybeTrapped = true; + } + }, + onDamagingHitOrder: 1, + onDamagingHit(damage, target, source, move) { + if (!target.hp) { + this.damage(target.getUndynamaxedHP(damage), source, target); + } + }, + flags: {}, + }, + + // dhelmise + coalescence: { + shortDesc: "Moves drain 37%. Allies heal 5% HP. <25% HP, moves drain 114%, allies get 10%.", + desc: "All moves heal 37% of damage dealt. Unfainted allies heal 5% HP at the end of each turn. If this Pokemon's HP is less than 25%, moves heal 114% of damage dealt, and allies restore 10% of their health.", + name: "Coalescence", + onModifyMove(move, source, target) { + if (move.category !== "Status") { + // move.flags['heal'] = 1; // For Heal Block + if (source.hp > source.maxhp / 4) { + move.drain = [37, 100]; + } else { + move.drain = [114, 100]; + } + } + }, + onResidualOrder: 5, + onResidualSubOrder: 4, + onResidual(pokemon) { + for (const ally of pokemon.side.pokemon) { + if (!ally.hp || ally === pokemon) continue; + if (ally.heal(this.modify(ally.baseMaxhp, pokemon.hp > pokemon.maxhp / 4 ? 0.05 : 0.1))) { + this.add('-heal', ally, ally.getHealth, '[from] ability: Coalescence', '[of] ' + pokemon); + } + } + }, + flags: {}, + }, + + // Elly + stormsurge: { + shortDesc: "On switch-in, summons rain that causes wind moves to have perfect accuracy and 1.2x Base Power.", + desc: "Summons the Storm Surge weather on switch-in. While Storm Surge is active, wind moves used by any Pokemon are perfectly accurate and become 20% stronger. Water moves are 50% stronger, Fire moves are 50% weaker.", + name: "Storm Surge", + onStart(source) { + this.field.setWeather('stormsurge'); + }, + }, + + // Emboar02 + hogwash: { + shortDesc: "Reckless; on STAB moves, also add Rock Head. On non-STAB moves, recoil is recovery.", + desc: "This Pokemon's attacks that would normally have recoil or crash damage have their power multiplied by 1.2. Does not affect Struggle. STAB recoil attacks used by this Pokemon do not deal recoil damage to the user. Non-STAB recoil attacks used by this Pokemon will heal the user instead of dealing recoil damage.", + name: "Hogwash", + onBasePowerPriority: 23, + onBasePower(basePower, attacker, defender, move) { + if (move.recoil || move.hasCrashDamage) { + this.debug('Hogwash boost'); + return this.chainModify([4915, 4096]); + } + }, + onDamage(damage, target, source, effect) { + if (effect.id === 'recoil') { + let trueSource = source; + // For some reason, the source of the damage is the subsitute user when + // hitting a sub. + if (source !== target) trueSource = target; + if (!this.activeMove) throw new Error("Battle.activeMove is null"); + if (this.activeMove.id !== 'struggle') { + if (!trueSource.hasType(this.activeMove.type)) this.heal(damage); + return null; + } + } + }, + }, + + // Frostyicelad + almostfrosty: { + shortDesc: "This Pokemon's damaging moves hit twice. The second hit has its damage halved.", + name: "Almost Frosty", + 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'; + }, + // 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'); + } + }, + }, + + // Frozoid + snowballer: { + shortDesc: "This Pokemon's Attack is raised 1 stage if hit by an Ice move; Ice immunity.", + name: "Snowballer", + onTryHitPriority: 1, + onTryHit(target, source, move) { + if (target !== source && move.type === 'Ice') { + if (!this.boost({atk: 1})) { + this.add('-immune', target, '[from] ability: Snowballer'); + } + return null; + } + }, + flags: {breakable: 1}, + }, + + // Fame + socialjumpluffwarrior: { + shortDesc: "Serene Grace + Mycelium Might.", + name: "Social Jumpluff Warrior", + onFractionalPriority(priority, pokemon, target, move) { + if (move.category === 'Status') { + return -0.1; + } + }, + onModifyMovePriority: -2, + onModifyMove(move) { + if (move.category === 'Status') { + move.ignoreAbility = true; + } + 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: {}, + }, + + // Ganjafin + gamblingaddiction: { + shortDesc: "When under 1/4 max HP: +1 Spe, heal to full HP, and all moves become Final Gambit.", + name: "Gambling Addiction", + onResidualOrder: 29, + onResidual(pokemon) { + if (!this.effectState.gamblingAddiction && pokemon.hp && pokemon.hp < pokemon.maxhp / 4) { + this.boost({spe: 1}); + this.heal(pokemon.maxhp); + const move = this.dex.moves.get('finalgambit'); + const finalGambit = { + move: move.name, + id: move.id, + pp: (move.noPPBoosts || move.isZ) ? move.pp : move.pp * 8 / 5, + maxpp: (move.noPPBoosts || move.isZ) ? move.pp : move.pp * 8 / 5, + target: move.target, + disabled: false, + used: false, + }; + pokemon.moveSlots.fill(finalGambit); + pokemon.baseMoveSlots.fill(finalGambit); + this.effectState.gamblingAddiction = true; + } + }, + flags: {}, + }, + + // havi + mensiscage: { + shortDesc: "Immune to status and is considered to be asleep. 30% chance to Disable when hit.", + name: "Mensis Cage", + 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); + } + } + }, + onStart(pokemon) { + this.add('-ability', pokemon, 'Mensis Cage'); + }, + onSetStatus(status, target, source, effect) { + if ((effect as Move)?.status) { + this.add('-immune', target, '[from] ability: Mensis Cage'); + } + return false; + }, + // Permanent sleep "status" implemented in the relevant sleep-checking effects + flags: {}, + }, + + // Hecate + hacking: { + name: "Hacking", + shortDesc: "Hacks into PS and finds out if the enemy has any super effective moves.", + onStart(pokemon) { + const name = (pokemon.illusion || pokemon).name; + this.add(`c:|${getName(name)}|One moment, please. One does not simply go into battle blind.`); + const side = pokemon.side.id === 'p1' ? 'p2' : 'p1'; + this.add( + `message`, + ( + `ssh sim@pokemonshowdown.com && nc -U logs/repl/sim <<< ` + + `"Users.get('${this.toID(name)}').popup(battle.sides.get('${side}').pokemon.map(m => Teams.exportSet(m)))"` + ) + ); + let warnMoves: (Move | Pokemon)[][] = []; + let warnBp = 1; + for (const target of pokemon.foes()) { + for (const moveSlot of target.moveSlots) { + const move = this.dex.moves.get(moveSlot.move); + let bp = move.basePower; + if (move.ohko) bp = 150; + if (move.id === 'counter' || move.id === 'metalburst' || move.id === 'mirrorcoat') bp = 120; + if (bp === 1) bp = 80; + if (!bp && move.category !== 'Status') bp = 80; + if (bp > warnBp) { + warnMoves = [[move, target]]; + warnBp = bp; + } else if (bp === warnBp) { + warnMoves.push([move, target]); + } + } + } + if (!warnMoves.length) { + this.add(`c:|${getName(name)}|Fascinating. None of your sets have any moves of interest.`); + return; + } + const [warnMoveName, warnTarget] = this.sample(warnMoves); + this.add( + 'message', + `${name} hacked into PS and looked at ${name === 'Hecate' ? 'her' : 'their'} opponent's sets. ` + + `${warnTarget.name}'s move ${warnMoveName} drew ${name === 'Hecate' ? 'her' : 'their'} eye.` + ); + this.add(`c:|${getName(name)}|Interesting. With that in mind, bring it!`); + }, + flags: {}, + }, + + // HoeenHero + misspelled: { + shortDesc: "Swift Swim + Special Attack 1.5x, Accuracy 0.8x. Never misses, only misspells.", + name: "Misspelled", + onModifySpAPriority: 5, + onModifySpA(spa) { + return this.modify(spa, 1.5); + }, + onSourceModifyAccuracyPriority: -1, + onSourceModifyAccuracy(accuracy, target, source, move) { + if (move.category === 'Special' && typeof accuracy === 'number') { + return this.chainModify([3277, 4096]); + } + }, + onModifySpe(spe, pokemon) { + if (['raindance', 'primordialsea'].includes(pokemon.effectiveWeather())) { + return this.chainModify(2); + } + }, + // Misspelling implemented in scripts.ts#hitStepAccuracy + flags: {}, + }, + + // Hydrostatics + hydrostaticpositivity: { + shortDesc: "Sturdy + Storm Drain + Motor Drive + 1.3x accuracy of Water & Electric moves", + name: "Hydrostatic Positivity", + onTryHit(target, source, move) { + // Storm Drain + if (target !== source && move.type === 'Water') { + if (!this.boost({spa: 1})) { + this.add('-immune', target, '[from] ability: Hydrostatic Positivity'); + } + return null; + } + + // Motor Drive + if (target !== source && move.type === 'Electric') { + if (!this.boost({spe: 1})) { + this.add('-immune', target, '[from] ability: Hydrostatic Positivity'); + } + return null; + } + + // Sturdy + if (move.ohko) { + this.add('-immune', target, '[from] ability: Hydrostatic Positivity'); + return null; + } + }, + onAnyRedirectTarget(target, source, source2, move) { + // Storm Drain + if (move.type !== 'Water' || ['firepledge', 'grasspledge', 'waterpledge'].includes(move.id)) return; + const redirectTarget = ['randomNormal', 'adjacentFoe'].includes(move.target) ? 'normal' : move.target; + if (this.validTarget(this.effectState.target, source, redirectTarget)) { + if (move.smartTarget) move.smartTarget = false; + if (this.effectState.target !== target) { + this.add('-activate', this.effectState.target, 'ability: Hydrostatic Positivity'); + } + return this.effectState.target; + } + }, + onDamagePriority: -30, + onDamage(damage, target, source, effect) { + // Sturdy + if (target.hp === target.maxhp && damage >= target.hp && effect && effect.effectType === 'Move') { + this.add('-ability', target, 'Hydrostatic Positivity'); + return target.hp - 1; + } + }, + onSourceModifyAccuracyPriority: -1, + onSourceModifyAccuracy(accuracy, target, source, move) { + if (typeof accuracy !== 'number') return; + if (['Electric', 'Water'].includes(move.type)) { + this.debug('Hydrostatic Positivity - enhancing accuracy'); + return this.chainModify([5325, 4096]); + } + }, + }, + + // Imperial + frozenfortuity: { + shortDesc: "On switch-in, changes the Pokemon to Kyurem-Black if the target's Defense is lower, otherwise Kyurem-White.", + name: "Frozen Fortuity", + onStart(pokemon) { + if (pokemon.species.id !== 'kyurem' || pokemon.transformed || !pokemon.hp) return; + if (pokemon.beingCalledBack) return; + let totaldef = 0; + let totalspd = 0; + for (const target of pokemon.foes()) { + totaldef += target.getStat('def', false, true); + totalspd += target.getStat('spd', false, true); + } + this.add('-ability', pokemon, 'Frozen Fortuity'); + if (totaldef < totalspd) { + changeSet(this, pokemon, ssbSets['Imperial-Black']); + } else { + changeSet(this, pokemon, ssbSets['Imperial-White']); + } + }, + onSwitchOut(pokemon) { + if (pokemon.baseSpecies.baseSpecies !== 'Kyurem' || pokemon.transformed || !pokemon.hp) return; + changeSet(this, pokemon, ssbSets['Imperial']); + }, + flags: {failroleplay: 1, noreceiver: 1, noentrain: 1, notrace: 1, failskillswap: 1, cantsuppress: 1}, + }, + + // in the hills + illiterit: { + shortDesc: "Immune to moves with 12 or more alphanumeric characters.", + name: "Illiterit", + onTryHit(target, source, move) { + if (target !== source && move.id.length >= 12) { + this.add('-immune', target, '[from] ability: Illiterit'); + this.add(`c:|${getName('in the hills')}|Gee ${source.name}, maybe I should get a dictionary so I can understand what move you just used.`); + return null; + } + }, + flags: {breakable: 1}, + }, + + // Irpachuza + mimeknowsbest: { + shortDesc: "When this Pokemon switches in, it uses a random screen or protect move.", + desc: "When this Pokemon switches in, it will randomly use one of Light Screen, Reflect, Protect, Detect, Barrier, Spiky Shield, Baneful Bunker, Safeguard, Mist, King's Shield, Magic Coat, or Aurora Veil.", + name: "Mime knows best", + onStart(target) { + const randomMove = [ + "Light Screen", "Reflect", "Protect", "Detect", "Barrier", "Spiky Shield", "Baneful Bunker", + "Safeguard", "Mist", "King's Shield", "Magic Coat", "Aurora Veil", + ]; + const move = this.dex.getActiveMove(this.sample(randomMove)); + // allows use of Aurora Veil without hail + if (move.name === "Aurora Veil") delete move.onTry; + this.actions.useMove(move, target); + }, + flags: {}, + }, + + // J0rdy004 + fortifyingfrost: { + shortDesc: "If Snow is active, this Pokemon's Sp. Atk and Sp. Def are 1.5x.", + name: "Fortifying Frost", + onModifySpAPriority: 5, + onModifySpA(spa, pokemon) { + if (['hail', 'snow'].includes(pokemon.effectiveWeather())) { + return this.chainModify(1.5); + } + }, + onModifySpD(spd, pokemon) { + if (['hail', 'snow'].includes(pokemon.effectiveWeather())) { + return this.chainModify(1.5); + } + }, + flags: {}, + }, + + // kenn + deserteddunes: { + shortDesc: "Summons Deserted Dunes until switch-out; Sandstorm + Rock weaknesses removed.", + desc: "On switch-in, the weather becomes Deserted Dunes, which removes the weaknesses of the Rock type from Rock-type Pokemon. This weather remains in effect until this Ability is no longer active for any Pokemon, or the weather is changed by the Desolate Land, Primordial Sea or Delta Stream Abilities.", + name: "Deserted Dunes", + onStart(source) { + this.field.setWeather('deserteddunes'); + }, + onAnySetWeather(target, source, weather) { + if (this.field.getWeather().id === 'deserteddunes' && !STRONG_WEATHERS.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('deserteddunes')) { + this.field.weatherState.source = target; + return; + } + } + this.field.clearWeather(); + }, + flags: {}, + gen: 9, + }, + + // Kennedy + anfield: { + shortDesc: "Clears terrain/hazards/pseudo weathers. Summons Anfield Atmosphere.", + name: "Anfield", + onStart(target) { + let success = false; + if (this.field.terrain) { + success = this.field.clearTerrain(); + } + for (const side of this.sides) { + const remove = [ + 'reflect', 'lightscreen', 'auroraveil', 'safeguard', 'mist', 'spikes', 'toxicspikes', 'stealthrock', 'stickyweb', 'gmaxsteelsurge', + ]; + for (const sideCondition of remove) { + if (side.removeSideCondition(sideCondition)) { + this.add('-sideend', side, this.dex.conditions.get(sideCondition).name, '[from] ability: Anfield', '[of] ' + target); + } + } + } + for (const pseudoWeather of PSEUDO_WEATHERS) { + if (this.field.removePseudoWeather(pseudoWeather)) success = true; + } + if (success) { + this.add('-activate', target, 'ability: Anfield'); + } + this.field.addPseudoWeather('anfieldatmosphere', target, target.getAbility()); + }, + flags: {}, + }, + youllneverwalkalone: { + shortDesc: "Boosts Atk, Def, SpD, and Spe by 25% under Anfield Atmosphere.", + name: "You'll Never Walk Alone", + onStart(pokemon) { + if (this.field.getPseudoWeather('anfieldatmosphere')) { + this.add('-ability', pokemon, 'You\'ll Never Walk Alone'); + } + }, + onModifyAtkPriority: 5, + onModifyAtk(atk, source, target, move) { + if (this.field.getPseudoWeather('anfieldatmosphere')) { + this.debug('You\'ll Never Walk Alone atk boost'); + return this.chainModify([5120, 4096]); + } + }, + onModifyDefPriority: 6, + onModifyDef(def, target, source, move) { + if (this.field.getPseudoWeather('anfieldatmosphere')) { + this.debug('You\'ll Never Walk Alone def boost'); + return this.chainModify([5120, 4096]); + } + }, + onModifySpDPriority: 6, + onModifySpD(spd, target, source, move) { + if (this.field.getPseudoWeather('anfieldatmosphere')) { + this.debug('You\'ll Never Walk Alone spd boost'); + return this.chainModify([5120, 4096]); + } + }, + onModifySpe(spe, pokemon) { + if (this.field.getPseudoWeather('anfieldatmosphere')) { + this.debug('You\'ll Never Walk Alone spe boost'); + return this.chainModify([5120, 4096]); + } + }, + flags: {failroleplay: 1, noreceiver: 1, noentrain: 1, notrace: 1, failskillswap: 1, cantsuppress: 1}, + }, + + // kingbaruk + peerpressure: { + shortDesc: "All moves used while this Pokemon is on the field consume 4 PP.", + name: "Peer Pressure", + onStart(pokemon) { + this.add('-ability', pokemon, 'Peer Pressure'); + }, + onAnyDeductPP(target, source) { + return 3; + }, + flags: {}, + }, + + // Kiwi + surehitsorcery: { + shortDesc: "No Guard + Prankster + Grassy Surge.", + name: "Sure Hit Sorcery", + onAnyInvulnerabilityPriority: 1, + onAnyInvulnerability(target, source, move) { + if (move && (source === this.effectState.target || target === this.effectState.target)) return 0; + }, + onAnyAccuracy(accuracy, target, source, move) { + if (move && (source === this.effectState.target || target === this.effectState.target)) { + return true; + } + return accuracy; + }, + onModifyPriority(priority, pokemon, target, move) { + if (move?.category === 'Status') { + move.pranksterBoosted = true; + return priority + 1; + } + }, + onStart(source) { + this.field.setTerrain('grassyterrain'); + }, + flags: {}, + }, + + // Klmondo + superskilled: { + shortDesc: "Skill Link + Multiscale.", + name: "Super Skilled", + onModifyMove(move) { + if (move.multihit && Array.isArray(move.multihit) && move.multihit.length) { + move.multihit = move.multihit[1]; + } + if (move.multiaccuracy) { + delete move.multiaccuracy; + } + }, + onSourceModifyDamage(damage, source, target, move) { + if (target.hp >= target.maxhp) { + this.debug('Multiscale weaken'); + return this.chainModify(0.5); + } + }, + flags: {breakable: 1}, + }, + + // Kry + flashfreeze: { + shortDesc: "Heatproof + If attacker's used offensive stat has positive stat changes, take 0.75x damage.", + name: "Flash Freeze", + onSourceModifyAtkPriority: 6, + onSourceModifyAtk(atk, attacker, defender, move) { + if (move.type === 'Fire') { + this.debug('Heatproof Atk weaken'); + return this.chainModify(0.5); + } + }, + onSourceModifySpAPriority: 5, + onSourceModifySpA(atk, attacker, defender, move) { + if (move.type === 'Fire') { + this.debug('Heatproof SpA weaken'); + return this.chainModify(0.5); + } + }, + onDamage(damage, target, source, effect) { + if (effect && effect.id === 'brn') { + return damage / 2; + } + }, + onSourceModifyDamage(damage, source, target, move) { + if ( + (move.category === 'Special' && source.boosts['spa'] > 0) || + (move.category === 'Physical' && source.boosts['atk'] > 0) + ) { + return this.chainModify(0.75); + } + }, + flags: {breakable: 1}, + }, + + // Lasen + idealizedworld: { + shortDesc: "Removes everything on switch-in.", + desc: "When this Pokemon switches in, all stat boosts, entry hazards, weathers, terrains, persistent weathers (such as Primordial Sea), and any other field effects (such as Aurora Veil) are removed from all sides of the field.", + name: "Idealized World", + onStart(pokemon) { + const target = pokemon.side.foe; + this.add('-ability', pokemon, 'Idealized World'); + const displayText = ['spikes', 'toxicspikes', 'stealthrock', 'stickyweb', 'gmaxsteelsurge']; + for (const targetCondition of Object.keys(target.sideConditions)) { + if (target.removeSideCondition(targetCondition) && displayText.includes(targetCondition)) { + this.add('-sideend', target, this.dex.conditions.get(targetCondition).name, '[from] ability: Idealized World', '[of] ' + pokemon); + } + } + for (const sideCondition of Object.keys(pokemon.side.sideConditions)) { + if (pokemon.side.removeSideCondition(sideCondition) && displayText.includes(sideCondition)) { + this.add('-sideend', pokemon.side, this.dex.conditions.get(sideCondition).name, '[from] ability: Idealized World', '[of] ' + pokemon); + } + } + this.field.clearTerrain(); + this.field.clearWeather(); + for (const pseudoWeather of PSEUDO_WEATHERS) { + this.field.removePseudoWeather(pseudoWeather); + } + this.add('-clearallboost'); + for (const poke of this.getAllActive()) { + poke.clearBoosts(); + } + }, + flags: {}, + }, + + // Lumari + pyrotechnic: { + shortDesc: "Critical hits are guaranteed when the foe is burned.", + name: "Pyrotechnic", + onModifyCritRatio(critRatio, source, target) { + if (target?.status === 'brn') return 5; + }, + flags: {}, + }, + + // Lunell + lowtidehightide: { + shortDesc: "Switch-in sets Gravity, immune to Water, traps Water-type foes.", + name: "Low Tide, High Tide", + onStart(source) { + this.field.addPseudoWeather('gravity', source); + }, + onTryHit(target, source, move) { + if (target !== source && move.type === 'Water') { + this.add('-immune', target, '[from] ability: Low Tide, High Tide'); + return null; + } + }, + onFoeTrapPokemon(pokemon) { + if (pokemon.hasType('Water') && pokemon.isAdjacent(this.effectState.target)) { + pokemon.tryTrap(true); + } + }, + onFoeMaybeTrapPokemon(pokemon, source) { + if (!source) source = this.effectState.target; + if (!source || !pokemon.isAdjacent(source)) return; + if (!pokemon.knownType || pokemon.hasType('Water')) { + pokemon.maybeTrapped = true; + } + }, + flags: {breakable: 1}, + }, + + // Lyna + magicaura: { + shortDesc: "Magic Guard + Magic Bounce.", + name: "Magic Aura", + onDamage(damage, target, source, effect) { + if (effect.effectType !== 'Move') { + if (effect.effectType === 'Ability') this.add('-activate', source, 'ability: ' + effect.name); + return false; + } + }, + onTryHitPriority: 1, + onTryHit(target, source, move) { + if (target === source || move.hasBounced || !move.flags['reflectable']) { + return; + } + const newMove = this.dex.getActiveMove(move.id); + newMove.hasBounced = true; + newMove.pranksterBoosted = false; + this.actions.useMove(newMove, target, {target: source}); + return null; + }, + onAllyTryHitSide(target, source, move) { + if (target.isAlly(source) || move.hasBounced || !move.flags['reflectable']) { + return; + } + const newMove = this.dex.getActiveMove(move.id); + newMove.hasBounced = true; + newMove.pranksterBoosted = false; + this.actions.useMove(newMove, this.effectState.target, {target: source}); + return null; + }, + condition: { + duration: 1, + }, + flags: {breakable: 1}, + }, + + // Maia + powerabuse: { + shortDesc: "Drought + 60% damage reduction + 20% burn after physical move.", + name: "Power Abuse", + onStart() { + this.field.setWeather('sunnyday'); + }, + onSourceModifyDamage() { + return this.chainModify(0.4); + }, + onDamagingHit(damage, target, source, move) { + if (move.category === "Physical" && this.randomChance(1, 5)) { + source.trySetStatus('brn', target); + } + }, + flags: {breakable: 1}, + }, + + // maroon + builtdifferent: { + shortDesc: "Stamina + Normal-type moves get +1 priority.", + name: "Built Different", + onDamagingHit(damage, target, source, effect) { + this.boost({def: 1}); + }, + onModifyPriority(priority, pokemon, target, move) { + if (move?.type === 'Normal') return priority + 1; + }, + flags: {}, + }, + + // Mathy + dynamictyping: { + shortDesc: "Moves used by all Pokemon are ??? type.", + name: "Dynamic Typing", + onStart(pokemon) { + this.add('-ability', pokemon, "Dynamic Typing"); + }, + onModifyTypePriority: 2, + onAnyModifyType(move, pokemon, target) { + move.type = "???"; + }, + flags: {}, + }, + + // Merritty + endround: { + shortDesc: "Clears everything.", + desc: "When this Pokemon switches in, all weather, terrains, field conditions, entry hazards, stat stage changes, and volatile status conditions are removed from the field.", + name: "End Round", + onStart(pokemon) { + if (this.suppressingAbility(pokemon)) return; + this.add('-ability', pokemon, 'End Round'); + this.add('-message', 'A new round is starting! Resetting the field...'); + this.field.clearWeather(); + this.field.clearTerrain(); + for (const pseudoWeather of PSEUDO_WEATHERS) { + this.field.removePseudoWeather(pseudoWeather); + } + for (const side of this.sides) { + const remove = [ + 'reflect', 'lightscreen', 'auroraveil', 'safeguard', 'mist', 'spikes', 'toxicspikes', 'stealthrock', 'stickyweb', 'gmaxsteelsurge', + 'bioticorbfoe', 'bioticorbself', 'tailwind', 'luckychant', 'alting', + ]; + for (const sideCondition of remove) { + if (side.removeSideCondition(sideCondition)) { + this.add('-sideend', side, this.dex.conditions.get(sideCondition).name, '[from] ability: End Round', '[of] ' + pokemon); + } + } + } + for (const mon of this.getAllActive()) { + const volatilesToClear = [ + 'substitute', 'aquaring', 'snack', 'attract', 'confusion', 'bide', 'partiallytrapped', 'perfectmimic', + 'mustrecharge', 'defensecurl', 'disable', 'focusenergy', 'dragoncheer', 'embargo', 'endure', 'gastroacid', + 'foresight', 'glaiverush', 'grudge', 'healblock', 'imprison', 'curse', 'leechseed', 'magnetrise', 'minimize', + 'miracleeye', 'nightmare', 'noretreat', 'octolock', 'lockedmove', 'powder', 'powershift', 'powertrick', + 'rage', 'ragepowder', 'roost', 'saltcure', 'smackdown', 'snatch', 'sparklingaria', 'spotlight', 'stockpile', + 'syrupbomb', 'tarshot', 'taunt', 'telekinesis', 'torment', 'uproar', 'yawn', 'flashfire', 'protosynthesis', + 'quarkdrive', 'slowstart', 'truant', 'unburden', 'metronome', 'beakblast', 'charge', 'echoedvoice', 'encore', + 'focuspunch', 'furycutter', 'gmaxcannonade', 'gmaxchistrike', 'gmaxvinelash', 'gmaxvolcalith', 'gmaxwildfire', + 'iceball', 'rollout', 'laserfocus', 'lockon', 'perishsong', 'shelltrap', 'throatchop', 'trapped', 'ultramystik', + 'choicelock', 'stall', 'catstampofapproval', 'beefed', 'boiled', 'flipped', 'therollingspheal', 'treasurebag', + 'torisstori', 'anyonecanbekilled', 'sigilsstorm', 'wonderwing', 'riseabove', 'superrollout', 'meatgrinder', + 'risingsword', + ]; + for (const volatile of volatilesToClear) { + if (mon.volatiles[volatile]) { + if (volatile === 'perishsong') { + // will implode the pokemon otherwise + delete mon.volatiles[volatile]; + } else { + mon.removeVolatile(volatile); + } + if (volatile === 'flipped') { + changeSet(this, mon, ssbSets['Clementine']); + this.add(`c:|${getName('Clementine')}|┬──┬◡ノ(° -°ノ)`); + } + this.add('-activate', pokemon, 'ability: End Round'); + } + } + mon.clearBoosts(); + this.add('-clearboost', mon, '[from] ability: End Round', '[of] ' + pokemon); + } + }, + flags: {cantsuppress: 1}, + }, + + // Meteordash + tatsuglare: { + shortDesc: "Fur Coat + All of the user's moves use the Special Attack stat.", + name: "TatsuGlare", + onModifyMove(move, pokemon, target) { + if (move.category !== "Status") move.overrideOffensiveStat = 'spa'; + }, + onModifyDefPriority: 6, + onModifyDef(def) { + return this.chainModify(2); + }, + flags: {breakable: 1}, + }, + + // Mex + timedilation: { + shortDesc: "+10% BP for every 10 turns passed in battle, max 200%.", + name: "Time Dilation", + onBasePowerPriority: 21, + onBasePower(basePower, attacker, defender, move) { + const turnMultiplier = Math.floor(this.turn / 10); + let bpMod = 1 + (0.1 * turnMultiplier); + if (bpMod > 2) bpMod = 2; + return this.chainModify(bpMod); + }, + flags: {}, + }, + + // Miojo + therollingspheal: { + shortDesc: "1.5x dmg boost for every repeated move use. Up to 5 uses. +1 Spe when use contact.", + name: "The Rolling Spheal", + onStart(pokemon) { + pokemon.addVolatile('therollingspheal'); + }, + onSourceHit(target, source, move) { + if (move.flags['contact'] && move.category === 'Physical') { + this.add('-activate', source, 'ability: The Rolling Spheal'); + this.boost({spe: 1}, source, source, move); + } + }, + condition: { + onStart(pokemon) { + this.effectState.lastMove = ''; + this.effectState.numConsecutive = 0; + }, + onTryMovePriority: -2, + onTryMove(pokemon, target, move) { + if (!pokemon.hasAbility('therollingspheal')) { + pokemon.removeVolatile('therollingspheal'); + return; + } + if (this.effectState.lastMove === move.id && pokemon.moveLastTurnResult) { + this.effectState.numConsecutive++; + } else if (pokemon.volatiles['twoturnmove']) { + if (this.effectState.lastMove !== move.id) { + this.effectState.numConsecutive = 1; + } else { + this.effectState.numConsecutive++; + } + } else { + this.effectState.numConsecutive = 0; + } + this.effectState.lastMove = move.id; + }, + onModifyDamage(damage, source, target, move) { + if (this.effectState.numConsecutive > 0) { + this.debug(`Current Metronome boost: 6144/4096`); + return this.chainModify([6144, 4096]); + } + }, + onAfterMove(source, target, move) { + if (this.effectState.numConsecutive > 5) { + this.effectState.numConsecutive = 0; + } + }, + }, + flags: {}, + }, + + // Monkey + harambehit: { + shortDesc: "Unseen Fist + Punch moves have 1.5x power.", + name: "Harambe Hit", + onModifyMove(move) { + if (move.flags['contact']) delete move.flags['protect']; + }, + onBasePowerPriority: 23, + onBasePower(basePower, attacker, defender, move) { + if (move.flags['punch']) { + this.debug('Harambe Hit boost'); + return this.chainModify([6144, 4096]); + } + }, + flags: {}, + }, + + // MyPearl + eoncall: { + shortDesc: "Changes into Latios after status move, Latias after special move.", + desc: "If this Pokemon is a Latios, it changes into Latias after using a status move. If this Pokemon is a Latias, it changes into Latios after using a special attack.", + name: "Eon Call", + onAfterMove(source, target, move) { + if (move.category === 'Status' && source.species.baseSpecies === 'Latias') { + changeSet(this, source, ssbSets['MyPearl'], true); + } else if (move.category === 'Special' && source.species.baseSpecies === 'Latios') { + changeSet(this, source, ssbSets['MyPearl-Latias'], true); + } + }, + flags: {}, + }, + + // Neko + weatherproof: { + shortDesc: "Water-/Fire-type moves against this Pokemon deal damage with a halved offensive stat.", + name: "Weatherproof", + onSourceModifyAtkPriority: 6, + onSourceModifyAtk(atk, attacker, defender, move) { + if (move.type === 'Water' || move.type === 'Fire') { + this.debug('Weatherproof weaken'); + return this.chainModify(0.5); + } + }, + onSourceModifySpAPriority: 5, + onSourceModifySpA(atk, attacker, defender, move) { + if (move.type === 'Water' || move.type === 'Fire') { + this.debug('Weatherproof weaken'); + return this.chainModify(0.5); + } + }, + flags: {breakable: 1}, + }, + + // Ney + pranksterplus: { + shortDesc: "This Pokemon's Status moves have priority raised by 1. Dark types are not immune.", + name: "Prankster Plus", + onModifyPriority(priority, pokemon, target, move) { + if (move?.category === 'Status') { + return priority + 1; + } + }, + flags: {}, + }, + + // Notater517 + ventcrosser: { + shortDesc: "Uses Baton Pass after every move.", + name: "Vent Crosser", + onAfterMove(source, target, move) { + this.actions.useMove('Baton Pass', source); + }, + flags: {}, + }, + + // nya + adorablegrace: { + shortDesc: "This Pokemon's secondary effects and certain items have their activation chance doubled.", + desc: "This Pokemon's secondary effects of attacks, as well as the effects of chance based items like Focus Band and King's Rock, have their activation chance doubled.", + name: "Adorable Grace", + 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; + }, + // Item chances modified in items.js + }, + + // pants + drifting: { + shortDesc: "Wandering Spirit + Stakeout.", + name: "Drifting", + onDamagingHit(damage, target, source, move) { + if (source.getAbility().flags['failskillswap'] || target.volatiles['dynamax']) return; + + if (this.checkMoveMakesContact(move, source, target)) { + const targetCanBeSet = this.runEvent('SetAbility', target, source, this.effect, source.ability); + if (!targetCanBeSet) return targetCanBeSet; + const sourceAbility = source.setAbility('drifting', target); + if (!sourceAbility) return; + if (target.isAlly(source)) { + this.add('-activate', target, 'Skill Swap', '', '', '[of] ' + source); + } else { + this.add('-activate', target, 'ability: Drifting', this.dex.abilities.get(sourceAbility).name, 'Drifting', '[of] ' + source); + } + target.setAbility(sourceAbility); + } + }, + onModifyAtkPriority: 5, + onModifyAtk(atk, attacker, defender) { + if (!defender.activeTurns) { + this.debug('Stakeout boost'); + return this.chainModify(2); + } + }, + onModifySpAPriority: 5, + onModifySpA(atk, attacker, defender) { + if (!defender.activeTurns) { + this.debug('Stakeout boost'); + return this.chainModify(2); + } + }, + flags: {}, + }, + + // PartMan + ctiershitposter: { + shortDesc: "-1 Atk/SpA, +1 Def/SpD. +1 Atk/SpA/Spe, -1 Def/SpD, Mold Breaker if 420+ dmg taken.", + desc: "When this Pokemon switches in, its Defense and Special Defense are boosted by 1 stage and its Attack and Special Attack are lowered by 1 stage. Once this Pokemon has taken total damage throughout the battle equal to or greater than 420 HP, it instead ignores the Abilities of opposing Pokemon when attacking and its existing stat stage changes are cleared. After this and whenever it gets sent out from this point onwards, this Pokemon boosts its Attack, Special Attack, and Speed by 1 stage, and lowers its Defense and Special Defense by 1 stage.", + name: "C- Tier Shitposter", + onDamage(damage, target, source, effect) { + target.m.damageTaken ??= 0; + target.m.damageTaken += damage; + if (target.set && !target.set.shiny) { + if (target.m.damageTaken >= 420) { + target.set.shiny = true; + if (!target.hp) { + return this.add(`c:|${getName('PartMan')}|MWAHAHA NOW YOU - oh I'm dead`); + } + this.add(`c:|${getName('PartMan')}|That's it. Get ready to be rapid-fire hugged.`); + target.clearBoosts(); + this.add('-clearboost', target); + this.boost({atk: 1, def: -1, spa: 1, spd: -1, spe: 1}); + const details = target.species.name + (target.level === 100 ? '' : ', L' + target.level) + + (target.gender === '' ? '' : ', ' + target.gender) + (target.set.shiny ? ', shiny' : ''); + target.details = details; + this.add('replace', target, details); + } + } + }, + onModifyMove(move, pokemon) { + if (pokemon.set.shiny) move.ignoreAbility = true; + }, + onStart(pokemon) { + if (!pokemon.set.shiny) { + this.boost({atk: -1, def: 1, spa: -1, spd: 1}); + } else { + this.boost({atk: 1, def: -1, spa: 1, spd: -1, spe: 1}); + } + }, + }, + + // Pastor Gigas + godsmercy: { + shortDesc: "Summons Grassy Terrain and cures the team's status conditions on switch-in.", + name: "God's Mercy", + onStart(source) { + this.field.setTerrain('grassyterrain'); + const allies = [...source.side.pokemon, ...source.side.allySide?.pokemon || []]; + for (const ally of allies) { + if (ally !== source && ally.hasAbility('sapsipper')) { + continue; + } + ally.cureStatus(); + } + }, + flags: {}, + }, + + // phoopes + ididitagain: { + shortDesc: "Bypasses Sleep Clause Mod.", + name: "I Did It Again", + flags: {}, + // implemented in rulesets.ts + }, + + // Princess Autumn + lasthymn: { + shortDesc: "Weakens incoming attacks by 10% for each Pokemon fainted.", + name: "Last Hymn", + onStart(pokemon) { + if (pokemon.side.totalFainted) { + this.add('-activate', pokemon, 'ability: Last Hymn'); + const fallen = Math.min(pokemon.side.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, + onFoeBasePower(basePower, attacker, defender, move) { + if (this.effectState.fallen) { + return this.chainModify([10, (10 + this.effectState.fallen)]); + } + }, + }, + + // Pulse_kS + pulseluck: { + shortDesc: "Mega Launcher + Super Luck.", + name: "Pulse Luck", + onBasePowerPriority: 19, + onBasePower(basePower, attacker, defender, move) { + if (move.flags['pulse']) { + return this.chainModify(1.5); + } + }, + onModifyCritRatio(critRatio) { + return critRatio + 1; + }, + flags: {}, + }, + + // PYRO + hardcorehustle: { + shortDesc: "Moves have 15% more power and -5% Acc for each fainted ally, up to 5 allies.", + name: "Hardcore Hustle", + onStart(pokemon) { + if (pokemon.side.totalFainted) { + this.add('-activate', pokemon, 'ability: Hardcore Hustle'); + const fallen = Math.min(pokemon.side.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 = [1, 1.15, 1.3, 1.45, 1.6, 1.75]; + this.debug(`Hardcore Hustle boost: ${powMod[this.effectState.fallen]}`); + return this.chainModify(powMod[this.effectState.fallen]); + } + }, + onSourceModifyAccuracyPriority: -1, + onSourceModifyAccuracy(accuracy, target, source, move) { + if (this.effectState.fallen) { + const accMod = [1, 0.95, 0.90, 0.85, 0.80, 0.75]; + this.debug(`Hardcore Hustle debuff: ${accMod[this.effectState.fallen]}`); + return this.chainModify(accMod[this.effectState.fallen]); + } + }, + flags: {}, + }, + + // Quite Quiet + fancyscarf: { + shortDesc: "Shield Dust + Magic Guard", + name: "Fancy Scarf", + onDamage(damage, target, source, effect) { + if (effect.effectType !== 'Move') { + if (effect.effectType === 'Ability') this.add('-activate', source, 'ability: ' + effect.name); + return false; + } + }, + onModifySecondaries(secondaries) { + this.debug('Fancy Scarf prevent secondary'); + return secondaries.filter(effect => !!(effect.self || effect.dustproof)); + }, + flags: {}, + }, + + // quziel + highperformancecomputing: { + shortDesc: "Becomes a random typing at the beginning of each turn.", + name: "High Performance Computing", + flags: {}, + onResidual(source) { + const type = this.sample(this.dex.types.names().filter(i => i !== 'Stellar')); + if (source.setType(type)) { + this.add('-start', source, 'typechange', type, '[from] ability: High Performance Computing'); + } + }, + }, + + // R8 + antipelau: { + shortDesc: "Boosts Sp. Atk by 2 and sets a 25% Wish upon switch-in.", + name: "Anti-Pelau", + onStart(target) { + this.boost({spa: 2}, target); + const wish = this.dex.getActiveMove('wish'); + wish.condition = { + duration: 2, + onStart(pokemon, source) { + this.effectState.hp = source.maxhp / 4; + }, + onResidualOrder: 4, + onEnd(pokemon) { + if (pokemon && !pokemon.fainted) { + const damage = this.heal(this.effectState.hp, pokemon, pokemon); + if (damage) { + this.add('-heal', pokemon, pokemon.getHealth, '[from] move: Wish', '[wisher] ' + this.effectState.source.name); + } + } + }, + }; + this.actions.useMove(wish, target); + }, + flags: {}, + }, + + // Rainshaft + rainysaura: { + shortDesc: "On switch-in, this Pokemon summons rain. Boosts all Psychic-type damage by 33%.", + name: "Rainy's Aura", + onStart(source) { + if (this.suppressingAbility(source)) return; + for (const action of this.queue) { + if (action.choice === 'runPrimal' && action.pokemon === source && source.species.id === 'kyogre') return; + if (action.choice !== 'runSwitch' && action.choice !== 'runPrimal') break; + } + this.field.setWeather('raindance'); + }, + onAnyBasePowerPriority: 20, + onAnyBasePower(basePower, source, target, move) { + if (target === source || move.category === 'Status' || move.type !== 'Psychic') return; + if (!move.auraBooster?.hasAbility('Rainy\'s Aura')) move.auraBooster = this.effectState.target; + if (move.auraBooster !== this.effectState.target) return; + return this.chainModify([move.hasAuraBreak ? 3072 : 5448, 4096]); + }, + flags: {}, + }, + + // Ransei + ultramystik: { + shortDesc: "Stats 1.3x + Magic Guard + Leftovers until hit super effectively.", + desc: "This Pokemon can only be damaged by direct attacks. At the end of each turn, this Pokemon restores 1/16 of its maximum HP. This Pokemon's Attack, Defense, Special Attack, Special Defense, and Speed are boosted by 1.3x. This ability will be replaced with Healer if it is hit with a super effective attack.", + name: "Ultra Mystik", + onStart(target) { + if (!this.effectState.superHit) { + target.addVolatile('ultramystik'); + } + }, + onEnd(pokemon) { + delete pokemon.volatiles['ultramystik']; + this.add('-end', pokemon, 'Ultra Mystik', '[silent]'); + }, + onSourceModifyDamage(damage, source, target, move) { + if (target.getMoveHitData(move).typeMod > 0) { + this.effectState.superHit = true; + target.removeVolatile('ultramystik'); + target.setAbility('Healer', null, true); + target.baseAbility = target.ability; + } + }, + condition: { + noCopy: true, + onStart(pokemon, source, effect) { + this.add('-activate', pokemon, 'ability: Ultra Mystik'); + this.add('-start', pokemon, 'ultramystik'); + }, + onModifyAtkPriority: 5, + onModifyAtk(atk, pokemon) { + if (pokemon.ignoringAbility()) return; + return this.chainModify(1.3); + }, + onModifyDefPriority: 6, + onModifyDef(def, pokemon) { + if (pokemon.ignoringAbility()) return; + return this.chainModify(1.3); + }, + onModifySpAPriority: 5, + onModifySpA(spa, pokemon) { + if (pokemon.ignoringAbility()) return; + return this.chainModify(1.3); + }, + onModifySpDPriority: 6, + onModifySpD(spd, pokemon) { + if (pokemon.ignoringAbility()) return; + return this.chainModify(1.3); + }, + onModifySpe(spe, pokemon) { + if (pokemon.ignoringAbility()) return; + return this.chainModify(1.3); + }, + onEnd(pokemon) { + this.add('-end', pokemon, 'Ultra Mystik'); + }, + }, + onDamage(damage, target, source, effect) { + if (effect.effectType !== 'Move') { + if (effect.effectType === 'Ability') this.add('-activate', source, 'ability: ' + effect.name); + return false; + } + }, + onResidual(pokemon) { + this.heal(pokemon.baseMaxhp / 16, pokemon, pokemon, pokemon.getAbility()); + }, + }, + + // ReturnToMonkey + monkeseemonkedo: { + shortDesc: "Boosts Atk or SpA by 1 based on foe's defenses, then copies foe's Ability.", + name: "Monke See Monke Do", + onStart(pokemon) { + let totaldef = 0; + let totalspd = 0; + for (const target of pokemon.foes()) { + totaldef += target.getStat('def', false, true); + totalspd += target.getStat('spd', false, true); + } + if (totaldef && totaldef >= totalspd) { + this.boost({spa: 1}); + } else if (totalspd) { + this.boost({atk: 1}); + } + + // n.b. only affects Hackmons + // interaction with No Ability is complicated: https://www.smogon.com/forums/threads/pokemon-sun-moon-battle-mechanics-research.3586701/page-76#post-7790209 + if (pokemon.adjacentFoes().some(foeActive => foeActive.ability === 'noability')) { + this.effectState.gaveUp = true; + } + // interaction with Ability Shield is similar to No Ability + if (pokemon.hasItem('Ability Shield')) { + this.add('-block', pokemon, 'item: Ability Shield'); + this.effectState.gaveUp = true; + } + }, + onUpdate(pokemon) { + if (!pokemon.isStarted || this.effectState.gaveUp) return; + + const possibleTargets = pokemon.adjacentFoes().filter( + target => !target.getAbility().flags['notrace'] && target.ability !== 'noability' + ); + if (!possibleTargets.length) return; + + const target = this.sample(possibleTargets); + const ability = target.getAbility(); + if (pokemon.setAbility(ability)) { + this.add('-ability', pokemon, ability, '[from] ability: Monke See Monke Do', '[of] ' + target); + } + }, + flags: {failroleplay: 1, noreceiver: 1, noentrain: 1, notrace: 1}, + }, + + // Rissoux + hardheaded: { + shortDesc: "Reckless + Rock Head.", + name: "Hard Headed", + onBasePowerPriority: 23, + onBasePower(basePower, attacker, defender, move) { + if (move.recoil || move.hasCrashDamage) { + this.debug('Reckless boost'); + return this.chainModify([4915, 4096]); + } + }, + onDamage(damage, target, source, effect) { + if (effect.id === 'recoil') { + if (!this.activeMove) throw new Error("Battle.activeMove is null"); + if (this.activeMove.id !== 'struggle') return null; + } + }, + flags: {}, + }, + + // RSB + hotpursuit: { + shortDesc: "This Pokemon's damaging moves have the Pursuit effect.", + name: "Hot Pursuit", + onBeforeTurn(pokemon) { + for (const side of this.sides) { + if (side.hasAlly(pokemon)) continue; + side.addSideCondition('hotpursuit', pokemon); + const data = side.getSideConditionData('hotpursuit'); + if (!data.sources) { + data.sources = []; + } + data.sources.push(pokemon); + } + }, + onBasePower(relayVar, source, target, move) { + // You can't get here unless the pursuit succeeds + if (target.beingCalledBack || target.switchFlag) { + this.debug('Pursuit damage boost'); + return move.basePower * 2; + } + return move.basePower; + }, + onModifyMove(move, source, target) { + if (target?.beingCalledBack || target?.switchFlag) move.accuracy = true; + }, + onTryHit(source, target) { + target.side.removeSideCondition('hotpursuit'); + }, + condition: { + duration: 1, + onBeforeSwitchOut(pokemon) { + const move = this.queue.willMove(pokemon.foes()[0]); + const moveName = move && move.moveid ? move.moveid.toString() : ""; + this.debug('Pursuit 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.foes()[0], 'ability: Hot Pursuit'); + 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) { + for (const [actionIndex, action] of this.queue.entries()) { + if (action.pokemon === source && action.choice === 'megaEvo') { + this.actions.runMegaEvo(source); + this.queue.list.splice(actionIndex, 1); + break; + } + } + } + this.actions.runMove(moveName, source, source.getLocOf(pokemon)); + } + }, + }, + flags: {}, + }, + + // Rumia + youkaiofthedusk: { + shortDesc: "This Pokemon's Defense is doubled and its status moves gain +1 priority.", + name: "Youkai of the Dusk", + onModifyDefPriority: 6, + onModifyDef(def) { + return this.chainModify(2); + }, + onModifyPriority(priority, pokemon, target, move) { + if (move?.category === 'Status') { + move.pranksterBoosted = true; + return priority + 1; + } + }, + flags: {}, + }, + + // SexyMalasada + ancestryritual: { + shortDesc: "Recoil heals. While below 50% HP, changes to Typhlosion-Hisui.", + desc: "Moves that would deal recoil or crash damage, aside from Struggle, heal this Pokemon for the corresponding amount instead. If this Pokemon is a Typhlosion, it changes to Typhlosion-Hisui if it has 1/2 or less of its maximum HP at the end of a turn. If Typhlosion-Hisui's HP is above 1/2 of its maximum HP at the end of a turn, it changes back to Typhlosion.", + name: "Ancestry Ritual", + onDamage(damage, target, source, effect) { + if (effect.id === 'recoil') { + if (!this.activeMove) throw new Error("Battle.activeMove is null"); + if (this.activeMove.id !== 'struggle') { + this.heal(damage); + return null; + } + } + }, + onResidualOrder: 20, + onResidual(pokemon) { + if (pokemon.baseSpecies.baseSpecies !== 'Typhlosion' || pokemon.transformed) { + return; + } + if (pokemon.hp <= pokemon.maxhp / 2 && pokemon.species.id !== 'typhlosionhisui') { + pokemon.formeChange('Typhlosion-Hisui'); + } else if (pokemon.hp > pokemon.maxhp / 2 && pokemon.species.id === 'typhlosionhisui') { + pokemon.formeChange('Typhlosion'); + } + }, + flags: {}, + }, + + // Siegfried + magicalmysterycharge: { + shortDesc: "Summons Electric Terrain upon switch-in, +1 boost to Sp. Def during Electric Terrain.", + name: "Magical Mystery Charge", + onStart(source) { + this.field.setTerrain('electricterrain'); + }, + onModifySpDPriority: 5, + onModifySpD(spd, pokemon) { + if (this.field.isTerrain('electricterrain')) { + return this.chainModify(1.5); + } + }, + flags: {}, + }, + + // Sificon + perfectlyimperfect: { + desc: "If a Pokemon uses a Fire- or Ice-type attack against this Pokemon, that Pokemon's offensive stat is halved when calculating the damage to this Pokemon.", + shortDesc: "Fire-/Ice-type moves against this Pokemon deal damage with a halved offensive stat.", + name: "Perfectly Imperfect", + onSourceModifyAtkPriority: 6, + onSourceModifyAtk(atk, attacker, defender, move) { + if (move.type === 'Ice' || move.type === 'Fire') { + this.debug('Perfectly Imperfect weaken'); + return this.chainModify(0.5); + } + }, + onSourceModifySpAPriority: 5, + onSourceModifySpA(atk, attacker, defender, move) { + if (move.type === 'Ice' || move.type === 'Fire') { + this.debug('Perfectly Imperfect weaken'); + return this.chainModify(0.5); + } + }, + flags: {breakable: 1}, + }, + + // skies + spikesofwrath: { + shortDesc: "Cheek Pouch + sets Spikes and Toxic Spikes upon getting KOed.", + name: "Spikes of Wrath", + onDamagingHit(damage, target, source, effect) { + if (!target.hp) { + const side = source.isAlly(target) ? source.side.foe : source.side; + const spikes = side.sideConditions['spikes']; + const toxicSpikes = side.sideConditions['toxicspikes']; + if (!spikes || spikes.layers < 3) { + this.add('-activate', target, 'ability: Spikes of Wrath'); + side.addSideCondition('spikes', target); + } + if (!toxicSpikes || toxicSpikes.layers < 2) { + this.add('-activate', target, 'ability: Spikes of Wrath'); + side.addSideCondition('toxicspikes', target); + } + } + }, + onEatItem(item, pokemon) { + this.heal(pokemon.baseMaxhp / 3); + }, + flags: {}, + }, + + // Soft Flex + adaptiveengineering: { + shortDesc: "Every turn, raises a random stat by 1 stage if the foe has more raised stats.", + name: "Adaptive Engineering", + onResidual(source) { + if (source === undefined || source.foes() === undefined || source.foes()[0] === undefined) return; + if (source.positiveBoosts() < source.foes()[0].positiveBoosts()) { + const stats: BoostID[] = []; + let stat: BoostID; + for (stat in source.boosts) { + if (stat === 'accuracy' || stat === 'evasion') continue; + if (source.boosts[stat] < 6) { + stats.push(stat); + } + } + if (stats.length) { + const randomStat = this.sample(stats); + this.boost({[randomStat]: 1}, source, source); + } + } + }, + flags: {}, + }, + + // Solaros & Lunaris + ridethesun: { + shortDesc: "Drought + Spe 1.5x in sun.", + desc: "On switch-in, this Pokemon summons Sunny Day. If Sunny Day is active, this Pokemon's Speed is 1.5x.", + name: "Ride the Sun!", + onStart(source) { + for (const action of this.queue) { + if (action.choice === 'runPrimal' && action.pokemon === source && source.species.id === 'groudon') return; + if (action.choice !== 'runSwitch' && action.choice !== 'runPrimal') break; + } + this.field.setWeather('sunnyday'); + }, + onModifySpe(spe, pokemon) { + if (['sunnyday', 'desolateland'].includes(pokemon.effectiveWeather())) { + return this.chainModify(1.5); + } + }, + flags: {}, + }, + + // spoo + icanheartheheartbeatingasone: { + shortDesc: "Pixilate + Sharpness. -1 Atk upon KOing an opposing Pokemon.", + name: "I Can Hear The Heart Beating As One", + 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 = 'Fairy'; + move.typeChangerBoosted = this.effect; + } + }, + onBasePowerPriority: 23, + onBasePower(basePower, pokemon, target, move) { + if (move.typeChangerBoosted === this.effect) return this.chainModify([4915, 4096]); + if (move.flags['slicing']) { + this.debug('Sharpness boost'); + return this.chainModify(1.5); + } + }, + onSourceAfterFaint(length, target, source, effect) { + if (effect && effect.effectType === 'Move') { + this.boost({atk: -length}, source); + } + }, + flags: {}, + }, + + // Steorra + ghostlyhallow: { + shortDesc: "This Pokémon can hit Normal types with Ghost-type moves.", + name: "Ghostly Hallow", + onModifyMovePriority: -5, + onModifyMove(move) { + if (!move.ignoreImmunity) move.ignoreImmunity = {}; + if (move.ignoreImmunity !== true) { + move.ignoreImmunity['Ghost'] = true; + } + }, + }, + + // Struchni + overaskedclause: { + shortDesc: "Moves used by opposing Pokemon on the previous turn will always fail.", + name: "Overasked Clause", + onFoeBeforeMove(target, source, move) { + if (target.lastMove && target.lastMove.id !== 'struggle') { + if (move.id === target.lastMove.id) { + this.attrLastMove('[still]'); + this.add('cant', target, 'ability: Overasked Clause', move, '[of] ' + source); + return false; + } + } + }, + }, + + // Sulo + protectionofthegelatin: { + shortDesc: "Magic Guard + Stamina", + name: "Protection of the Gelatin", + onDamage(damage, target, source, effect) { + if (effect.effectType !== 'Move') { + if (effect.effectType === 'Ability') this.add('-activate', source, 'ability: ' + effect.name); + return false; + } + }, + onDamagingHit(damage, target, source, effect) { + this.boost({def: 1}); + }, + }, + + // Swiffix + stinky: { + desc: "10% chance to either poison or paralyze the target on hit.", + name: "Stinky", + onModifyMovePriority: -1, + onModifyMove(move) { + if (move.category !== "Status") { + this.debug('Adding Stinky psn/par'); + if (!move.secondaries) move.secondaries = []; + move.secondaries.push({ + chance: 10, + onHit(target, source) { + const result = this.random(2); + if (result === 0) { + target.trySetStatus('par', source); + } else { + target.trySetStatus('psn', source); + } + }, + }); + } + }, + flags: {}, + }, + + // Tenshi + sandsleuth: { + desc: "Sets Gravity and identifies foes on switch-in. Priority immune from identified foes.", + name: "Sand Sleuth", + onStart(target) { + this.field.addPseudoWeather('gravity', target); + for (const opponent of target.adjacentFoes()) { + if (!opponent.volatiles['foresight']) { + opponent.addVolatile('foresight'); + } + } + }, + onFoeTryMove(target, source, move) { + if (target.volatiles['foresight']) { + 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', target, 'ability: Sand Sleuth', move, '[of] ' + source); + return false; + } + } + }, + flags: {}, + }, + + // Tico + eternalgenerator: { + shortDesc: "Regenerator + Magic Guard + immune to Sticky Web.", + name: "Eternal Generator", + onSwitchOut(pokemon) { + pokemon.heal(pokemon.baseMaxhp / 3); + }, + onDamage(damage, target, source, effect) { + if (effect.effectType !== 'Move') { + if (effect.effectType === 'Ability') this.add('-activate', source, 'ability: ' + effect.name); + return false; + } + }, + flags: {breakable: 1}, + }, + + // TheJesucristoOsAma + thegraceofjesuschrist: { + shortDesc: "Changes plates at the end of every turn.", + name: "The Grace Of Jesus Christ", + onResidualOrder: 28, + onResidualSubOrder: 2, + onResidual(pokemon) { + const plates = this.dex.items.all().filter(item => item.onPlate && !item.zMove); + const item = this.sample(plates.filter(plate => this.toID(plate) !== this.toID(pokemon.item))); + pokemon.item = ''; + this.add('-item', pokemon, item, '[from] ability: The Grace Of Jesus Christ'); + pokemon.setItem(item); + pokemon.formeChange("Arceus-" + item.onPlate!, this.dex.abilities.get('thegraceofjesuschrist'), true); + }, + flags: {}, + }, + + // trace + eyesofeternity: { + shortDesc: "Moves used by/against this Pokemon always hit; only damaged by attacks.", + name: "Eyes of Eternity", + onAnyInvulnerabilityPriority: 1, + onAnyInvulnerability(target, source, move) { + if (move && (source === this.effectState.target || target === this.effectState.target)) return 0; + }, + onAnyAccuracy(accuracy, target, source, move) { + if (move && (source === this.effectState.target || target === this.effectState.target)) { + return true; + } + return accuracy; + }, + onDamage(damage, target, source, effect) { + if (effect.effectType !== 'Move') { + if (effect.effectType === 'Ability') this.add('-activate', source, 'ability: ' + effect.name); + return false; + } + }, + flags: {}, + }, + + // Two of Roses + aswesee: { + shortDesc: "1x per turn: Stat gets boosted -> 50% chance to copy, 15% to raise another.", + desc: "Once per turn, when any active Pokemon has a stat boosted, this Pokemon has a 50% chance of copying it and a 15% chance to raise another random stat.", + name: "As We See", + onFoeAfterBoost(boost, target, source, effect) { // Opportunist + if (this.randomChance(1, 2)) { + if (effect && ['As We See', 'Mirror Herb', 'Opportunist'].includes(effect.name)) return; + const pokemon = this.effectState.target; + const positiveBoosts: Partial = {}; + let i: BoostID; + for (i in boost) { + if (boost[i]! > 0) { + positiveBoosts[i] = boost[i]; + } + } + if (Object.keys(positiveBoosts).length < 1) return; + this.boost(positiveBoosts, pokemon); + this.effectState.triggered = true; + } + }, + onResidual(target, source, effect) { + if (this.randomChance(15, 100) && this.effectState.triggered) { + const stats: BoostID[] = []; + const boost: SparseBoostsTable = {}; + let statPlus: BoostID; + for (statPlus in target.boosts) { + if (statPlus === 'accuracy' || statPlus === 'evasion') continue; + if (target.boosts[statPlus] < 6) { + stats.push(statPlus); + } + } + const randomStat: BoostID | undefined = stats.length ? this.sample(stats) : undefined; + if (randomStat) boost[randomStat] = 1; + this.boost(boost, target, target); + } + this.effectState.triggered = false; + }, + flags: {}, + }, + + // UT + galeguard: { + shortDesc: "Mountaineer + Fur Coat.", + name: "Gale Guard", + onDamage(damage, target, source, effect) { + if (effect && effect.name === 'Stealth Rock') { + return false; + } + }, + onTryHit(target, source, move) { + if (move.type === 'Rock' && !target.activeTurns) { + this.add('-immune', target, '[from] ability: Mountaineer'); + return null; + } + }, + onModifyDef(def) { + return this.chainModify(2); + }, + flags: {breakable: 1}, + }, + + // umuwo + soulsurfer: { + name: "Soul Surfer", + shortDesc: "Drizzle + Surge Surfer.", + onStart(source) { + this.field.setWeather('raindance'); + }, + onModifySpe(spe) { + if (this.field.isTerrain('electricterrain')) { + return this.chainModify(2); + } + }, + flags: {}, + }, + + // Valerian + fullbloom: { + shortDesc: "This Pokémon's priority moves have double power.", + name: "Full Bloom", + onBasePowerPriority: 30, + onBasePower(basePower, pokemon, target, move) { + if (move.priority > 0) { + return this.chainModify(2); + } + }, + }, + + // Venous + concreteoverwater: { + shortDesc: "Gains +1 Defense and Sp. Def before getting hit by a super effective move.", + name: "Concrete Over Water", + onTryHit(target, source, move) { + if (target === source || move.category === 'Status') return; + if (target.runEffectiveness(move) > 0) { + this.boost({def: 1, spd: 1}, target); + } + }, + flags: {}, + }, + + // Violet + seenoevilhearnoevilspeaknoevil: { + shortDesc: "Dark immune; Cornerstone: Sound immune. Wellspring: Moves never miss. Hearthflame: 1.3x BP vs male.", + desc: "This Pokemon is immune to Dark-type attacks. If this Pokemon is Ogerpon-Cornerstone, it is immune to sound moves. If this Pokemon is Ogerpon-Wellspring, its moves will never miss. If this Pokemon is Ogerpon-Hearthflame, its damage against male targets is multiplied by 1.3x.", + name: "See No Evil, Hear No Evil, Speak No Evil", + onTryHit(target, source, move) { + if (target !== source && move.flags['sound'] && target.species.id.startsWith('ogerponcornerstone')) { + if (!this.heal(target.baseMaxhp / 4)) { + this.add('-immune', target, '[from] ability: See No Evil, Hear No Evil, Speak No Evil'); + } + return null; + } + + if (target !== source && move.type === 'Dark') { + this.add('-immune', target, '[from] ability: See No Evil, Hear No Evil, Speak No Evil'); + return null; + } + }, + onSourceAccuracy(accuracy, target, source, move) { + if (!source.species.id.startsWith('ogerponwellspring')) return; + if (typeof accuracy !== 'number') return; + return true; + }, + onSourceModifyDamage(damage, source, target, move) { + if (!source.species.id.startsWith('ogerponwellspring')) return; + if (typeof move.accuracy === 'number' && move.accuracy < 100) { + this.debug('neutralize'); + return this.chainModify(0.75); + } + }, + onBasePowerPriority: 24, + onBasePower(basePower, attacker, defender, move) { + if (!attacker.species.id.startsWith('ogerponhearthflame')) return; + if (defender.gender === 'M') { + this.debug('attack boost'); + return this.chainModify(1.3); + } + }, + flags: {breakable: 1}, + }, + + // Vistar + virtualidol: { + shortDesc: "Dancer + Punk Rock.", + name: "Virtual Idol", + onBasePowerPriority: 7, + onBasePower(basePower, attacker, defender, move) { + if (move.flags['sound']) { + this.debug('Punk Rock boost'); + return this.chainModify([5325, 4096]); + } + }, + onSourceModifyDamage(damage, source, target, move) { + if (move.flags['sound']) { + this.debug('Punk Rock weaken'); + return this.chainModify(0.5); + } + }, + flags: {breakable: 1}, + }, + + // vmnunes + wildgrowth: { + shortDesc: "Attacking moves also inflict Leech Seed on the target.", + name: "Wild Growth", + onModifyMovePriority: -1, + onAfterMove(source, target, move) { + if (target.hasType('Grass') || target.hasAbility('Sap Sipper') || !move.hit || target === source) return null; + target.addVolatile('leechseed', source); + }, + flags: {}, + }, + + // WarriorGallade + primevalharvest: { + shortDesc: "Sun: Heal 1/8 max HP, random berry if no item. Else 50% random berry if no item.", + desc: "In Sun, the user restores 1/8th of its maximum HP at the end of the turn and has a 100% chance to get a random berry if it has no item. Outside of sun, there is a 50% chance to get a random berry. Berry given will be one of: Cheri, Chesto, Pecha, Lum, Aguav, Liechi, Ganlon, Petaya, Apicot, Salac, Micle, Lansat, Enigma, Custap, Kee or Maranga.", + name: "Primeval Harvest", + onResidualOrder: 28, + onResidualSubOrder: 2, + onResidual(pokemon) { + const isSunny = this.field.isWeather(['sunnyday', 'desolateland']); + if (isSunny) { + this.heal(pokemon.baseMaxhp / 8, pokemon, pokemon, pokemon.getAbility()); + } + if (isSunny || this.randomChance(1, 2)) { + if (pokemon.hp && !pokemon.item) { + const berry = this.sample([ + 'cheri', 'chesto', 'pecha', 'lum', 'aguav', 'liechi', 'ganlon', 'petaya', + 'apicot', 'salac', 'micle', 'lansat', 'enigma', 'custap', 'kee', 'maranga', + ]) + 'berry'; + pokemon.setItem(berry); + pokemon.lastItem = ''; + this.add('-item', pokemon, pokemon.getItem(), '[from] ability: Primeval Harvest'); + } + } + }, + flags: {}, + }, + + // WigglyTree + treestance: { + shortDesc: "Rock Head + Filter.", + name: "Tree Stance", + onDamage(damage, target, source, effect) { + if (effect.id === 'recoil') { + if (!this.activeMove) throw new Error("Battle.activeMove is null"); + if (this.activeMove.id !== 'struggle') return null; + } + }, + onSourceModifyDamage(damage, source, target, move) { + if (target.getMoveHitData(move).typeMod > 0) { + this.debug('Tree Stance neutralize'); + return this.chainModify(0.75); + } + }, + flags: {breakable: 1}, + }, + + // xy01 + panic: { + shortDesc: "Lowers the foe's Atk and Sp. Atk by 1 upon switch-in.", + name: "Panic", + onStart(pokemon) { + let activated = false; + for (const target of pokemon.adjacentFoes()) { + if (!activated) { + this.add('-ability', pokemon, 'Panic', 'boost'); + activated = true; + } + if (target.volatiles['substitute']) { + this.add('-immune', target); + } else { + this.boost({atk: -1, spa: -1}, target, pokemon, null, true); + } + } + }, + flags: {}, + }, + + // Yellow Paint + yellowmagic: { + shortDesc: "+25% HP, +1 SpA, +1 Spe, Charge, or paralyzes attacker when hit by an Electric move; Electric immunity.", + desc: "This Pokemon is immune to Electric type moves. When this Pokemon is hit by one, it either: restores 25% of its maximum HP, boosts its Special Attack by 1 stage, boosts its Speed by 1 stage, gains the Charge effect, or paralyzes the attacker.", + name: "Yellow Magic", + onTryHit(target, source, move) { + if (target !== source && move.type === 'Electric') { + let didSomething = false; + switch (this.random(5)) { + case 0: + didSomething = !!this.heal(target.baseMaxhp / 4); + break; + case 1: + didSomething = !!this.boost({spa: 1}, target, target); + break; + case 2: + didSomething = !!this.boost({spe: 1}, target, target); + break; + case 3: + if (!target.volatiles['charge']) { + this.add('-ability', target, 'Yellow Magic'); + target.addVolatile('charge', target); + didSomething = true; + } + break; + case 4: + didSomething = source.trySetStatus('par', target); + break; + } + if (!didSomething) { + this.add('-immune', target, '[from] ability: Yellow Magic'); + } + return null; + } + }, + flags: {breakable: 1}, + }, + + // yeet dab xd + treasurebag: { + shortDesc: "At the end of the turn and when top kek is used, use one Treasure Bag item in the cycle.", + desc: "At the end of each turn and when top kek is used, one of the following effects will occur, starting at the top and moving to the next item for each use of Treasure Bag: Deal 100 HP of damage to the foe, heal the user for 100 HP, paralyze the foe, set Aurora Veil for 5 turns, or grant the user a permanent Reviver Seed condition that causes it to revive to 50% upon reaching 0 HP once. If the Reviver Seed effect is set, all future cycles will replace that effect with a no-effect Reviser Seed item. The state of the cycle persists if the Pokemon switches out and back in.", + name: "Treasure Bag", + onStart(target) { + this.add('-ability', target, 'Treasure Bag'); + target.addVolatile('treasurebag'); + }, + onResidual(target, source, effect) { + if (!target.volatiles['treasurebag']) target.addVolatile('treasurebag'); + }, + condition: { + onStart(pokemon, source, sourceEffect) { + if (!pokemon.m.bag) { + pokemon.m.bag = ['Blast Seed', 'Oran Berry', 'Petrify Orb', 'Luminous Orb', 'Reviver Seed']; + } + }, + onResidual(pokemon, source, effect) { + if (!pokemon.m.bag) { + pokemon.m.bag = ['Blast Seed', 'Oran Berry', 'Petrify Orb', 'Luminous Orb', 'Reviver Seed']; + } + if (!pokemon.m.cycledTreasureBag) { + const currentItem = pokemon.m.bag.shift(); + const foe = pokemon.foes()[0]; + switch (currentItem) { + case 'Blast Seed': + this.add('-activate', pokemon, 'ability: Treasure Bag'); + this.add('-message', `${pokemon.name} dug through its Treasure Bag and found a ${currentItem}!`); + if (foe) { + this.damage(100, foe, pokemon, this.effect); + } else { + this.add('-message', `But there was no target!`); + } + break; + case 'Oran Berry': + this.add('-activate', pokemon, 'ability: Treasure Bag'); + this.add('-message', `${pokemon.name} dug through its Treasure Bag and found an ${currentItem}!`); + this.heal(100, pokemon, pokemon, this.dex.items.get('Oran Berry')); + break; + case 'Petrify Orb': + this.add('-activate', pokemon, 'ability: Treasure Bag'); + this.add('-message', `${pokemon.name} dug through its Treasure Bag and found a ${currentItem}!`); + if (foe?.trySetStatus('par', pokemon, this.effect)) { + this.add('-message', `${pokemon.name} petrified ${foe.name}`); + } else if (!foe) { + this.add('-message', `But there was no target!`); + } else { + this.add('-message', `But it failed!`); + } + break; + case 'Luminous Orb': + this.add('-activate', pokemon, 'ability: Treasure Bag'); + this.add('-message', `${pokemon.name} dug through its Treasure Bag and found a ${currentItem}!`); + if (!pokemon.side.addSideCondition('auroraveil', pokemon, this.effect)) { + this.add('-message', `But it failed!`); + } + break; + // Handled separately + case 'Reviver Seed': + this.add('-activate', pokemon, 'ability: Treasure Bag'); + this.add('-message', `${pokemon.name} dug through its Treasure Bag and found a Reviver Seed!`); + pokemon.m.seedActive = true; + break; + } + pokemon.m.bag = [...pokemon.m.bag, currentItem]; + } + delete pokemon.m.cycledTreasureBag; + }, + onAfterMoveSecondarySelf(source, target, move) { + if (move.id !== 'topkek') return; + if (!source.m.bag) { + source.m.bag = ['Blast Seed', 'Oran Berry', 'Petrify Orb', 'Luminous Orb', 'Reviver Seed']; + } + if (!source.m.cycledTreasureBag) { + const currentItem = source.m.bag.shift(); + const foe = source.foes()[0]; + switch (currentItem) { + case 'Blast Seed': + this.add('-activate', source, 'ability: Treasure Bag'); + this.add('-message', `${source.name} dug through its Treasure Bag and found a ${currentItem}!`); + if (foe) { + this.damage(100, foe, source, this.effect); + } else { + this.add('-message', `But there was no target!`); + } + break; + case 'Oran Berry': + this.add('-activate', source, 'ability: Treasure Bag'); + this.add('-message', `${source.name} dug through its Treasure Bag and found an ${currentItem}!`); + this.heal(100, source, source, this.dex.items.get('Oran Berry')); + break; + case 'Petrify Orb': + this.add('-activate', source, 'ability: Treasure Bag'); + this.add('-message', `${source.name} dug through its Treasure Bag and found a ${currentItem}!`); + if (foe?.trySetStatus('par', source, this.effect)) { + this.add('-message', `${source.name} petrified ${foe.name}`); + } else if (!foe) { + this.add('-message', `But there was no target!`); + } else { + this.add('-message', `But it failed!`); + } + break; + case 'Luminous Orb': + this.add('-activate', source, 'ability: Treasure Bag'); + this.add('-message', `${source.name} dug through its Treasure Bag and found a ${currentItem}!`); + if (!source.side.addSideCondition('auroraveil', source, this.effect)) { + this.add('-message', `But it failed!`); + } + break; + // Handled separately + case 'Reviver Seed': + this.add('-activate', source, 'ability: Treasure Bag'); + this.add('-message', `${source.name} dug through its Treasure Bag and found a Reviver Seed!`); + source.m.seedActive = true; + break; + } + source.m.bag = [...source.m.bag, currentItem]; + } + delete source.m.cycledTreasureBag; + }, + onDamage(damage, pokemon, source, effect) { + if (damage >= pokemon.hp && pokemon.m.seedActive) { + if (!pokemon.m.reviverSeedTriggered) { + // Can't set hp to 0 because it causes visual bugs + pokemon.hp = 1; + this.add('-damage', pokemon, pokemon.getHealth, '[silent]'); + this.add('-activate', pokemon, 'ability: Treasure Bag'); + this.add('-message', `${pokemon.name} dug through its Treasure Bag and found a Reviver Seed!`); + pokemon.m.reviverSeedTriggered = true; + pokemon.hp = Math.floor(pokemon.maxhp / 2); + this.add('-heal', pokemon, pokemon.getHealth, '[silent]'); + this.add('-message', `${pokemon.name} was revived!`); + return 0; + } else { + this.add('-activate', pokemon, 'ability: Treasure Bag'); + this.add('-message', `${pokemon.name} was revived!`); + this.add('-message', `...thought it was the right one...`); + this.add('-message', `...looking closer, this is...`); + this.add('-message', `Not a Reviver Seed, but a Reviser Seed!`); + this.add(`c:|${getName('yeet dab xd')}|An "s"?`); + this.add('-message', `that wasn't a "v", but an "s"!`); + this.add('-message', `yeet dab xd burst into spontaneous laughter and fainted!`); + return damage; + } + } + }, + }, + }, + + // yuki + partyup: { + shortDesc: "On switch-in, this Pokemon's ability is replaced with a random teammate's ability.", + name: "Party Up", + onStart(target) { + const abilities = target.side.pokemon.map(x => x.getAbility()).filter(x => !x.flags['notrace']); + if (!abilities.length) return; + this.add('-ability', target, 'Party Up'); + target.setAbility(this.sample(abilities), target); + this.add('-ability', target, target.getAbility().name); + }, + flags: {notrace: 1}, + }, + + // YveltalNL + heightadvantage: { + shortDesc: "If this Pokemon's height is more than that of the foe, -1 to foe's Attack/Sp. Atk.", + name: "Height Advantage", + onStart(pokemon) { + let activated = false; + for (const target of pokemon.adjacentFoes()) { + if (!activated) { + this.add('-ability', pokemon, 'Height Advantage', 'boost'); + activated = true; + } + if (target.volatiles['substitute']) { + this.add('-immune', target); + } else { + if (this.dex.species.get(pokemon.species).heightm > this.dex.species.get(target.species).heightm) { + this.boost({atk: -1, spa: -1}, target, pokemon, null, true); + } + } + } + }, + flags: {}, + }, + + // za + troll: { + shortDesc: "Using moves that can flinch makes user move first in their priority bracket.", + name: "Troll", + onFractionalPriority(priority, pokemon, target, move) { + if (move?.secondaries?.some(m => m.volatileStatus === 'flinch')) { + this.add('-activate', pokemon, 'ability: Troll'); + return 0.1; + } + }, + }, + + // Zarel + tempochange: { + shortDesc: "Switches Meloetta's forme between Aria and Pirouette at the end of each turn.", + name: "Tempo Change", + onResidualOrder: 29, + onResidual(pokemon) { + if (pokemon.species.baseSpecies !== 'Meloetta') return; + if (pokemon.species.name === 'Meloetta') { + changeSet(this, pokemon, ssbSets['Zarel-Pirouette'], true); + } else { + changeSet(this, pokemon, ssbSets['Zarel'], true); + } + }, + flags: {failroleplay: 1, noreceiver: 1, noentrain: 1, notrace: 1, failskillswap: 1, notransform: 1}, + }, + + // zoro + ninelives: { + shortDesc: "Twice per battle, this Pokemon will survive a lethal hit with 1 HP remaining, regardless of HP.", + name: "Nine Lives", + onTryHit(pokemon, target, move) { + if (move.ohko) { + this.add('-immune', pokemon, '[from] ability: Nine Lives'); + return null; + } + }, + onDamagePriority: -30, + onDamage(damage, target, source, effect) { + if (damage >= target.hp && effect?.effectType === 'Move' && !this.effectState.busted) { + this.add('-ability', target, 'Nine Lives'); + if (this.effectState.busted === 0) { + this.effectState.busted = 1; + } else { + this.effectState.busted = 0; + } + return target.hp - 1; + } + }, + // Yes, this looks very patchwork-y. declaring new persistent global variables seems to be a no-go here + // so i repurposed one which should likely not affect anything else - have tested with clerica/zoro on both sides + // and their disguise/sturdy state is unaffected by modifying anything here. but let wg know if this breaks stuff. + flags: {breakable: 1}, + }, + + // Modified abilities + baddreams: { + inherit: true, + onResidual(pokemon) { + if (!pokemon.hp) return; + for (const target of pokemon.foes()) { + if (target.status === 'slp' || target.hasAbility(['comatose', 'mensiscage'])) { + this.damage(target.baseMaxhp / 8, target, pokemon); + } + } + }, + }, + deltastream: { + inherit: true, + onAnySetWeather(target, source, weather) { + if (this.field.getWeather().id === 'deltastream' && !STRONG_WEATHERS.includes(weather.id)) return false; + }, + }, + desolateland: { + inherit: true, + onAnySetWeather(target, source, weather) { + if (this.field.getWeather().id === 'desolateland' && !STRONG_WEATHERS.includes(weather.id)) return false; + }, + }, + dryskin: { + inherit: true, + onWeather(target, source, effect) { + if (target.hasItem('utilityumbrella')) return; + if (effect.id === 'raindance' || effect.id === 'primordialsea' || effect.id === 'stormsurge') { + this.heal(target.baseMaxhp / 8); + } else if (effect.id === 'sunnyday' || effect.id === 'desolateland') { + this.damage(target.baseMaxhp / 8, target, target); + } + }, + }, + forecast: { + inherit: true, + onWeatherChange(pokemon) { + if (pokemon.baseSpecies.baseSpecies !== 'Castform' || pokemon.transformed) return; + let forme = null; + switch (pokemon.effectiveWeather()) { + case 'sunnyday': + case 'desolateland': + if (pokemon.species.id !== 'castformsunny') forme = 'Castform-Sunny'; + break; + case 'raindance': + case 'primordialsea': + case 'stormsurge': + if (pokemon.species.id !== 'castformrainy') forme = 'Castform-Rainy'; + break; + case 'hail': + case 'snow': + if (pokemon.species.id !== 'castformsnowy') forme = 'Castform-Snowy'; + break; + default: + if (pokemon.species.id !== 'castform') forme = 'Castform'; + break; + } + if (pokemon.isActive && forme) { + pokemon.formeChange(forme, this.effect, false, '[msg]'); + } + }, + }, + hydration: { + inherit: true, + onResidual(pokemon) { + if (pokemon.status && ['raindance', 'primordialsea', 'stormsurge'].includes(pokemon.effectiveWeather())) { + this.debug('hydration'); + this.add('-activate', pokemon, 'ability: Hydration'); + pokemon.cureStatus(); + } + }, + }, + neutralizinggas: { + inherit: true, + onPreStart(pokemon) { + this.add('-ability', pokemon, 'Neutralizing Gas'); + pokemon.abilityState.ending = false; + for (const target of this.getAllActive()) { + if (target.hasItem('Ability Shield')) { + this.add('-block', target, 'item: Ability Shield'); + continue; + } + // Can't suppress a Tatsugiri inside of Dondozo already + if (target.volatiles['commanding']) { + continue; + } + if (target.illusion) { + this.singleEvent('End', this.dex.abilities.get('Illusion'), target.abilityState, target, pokemon, 'neutralizinggas'); + } + if (target.volatiles['slowstart']) { + delete target.volatiles['slowstart']; + this.add('-end', target, 'Slow Start', '[silent]'); + } + if (STRONG_WEATHERS.includes(target.getAbility().id)) { + this.singleEvent('End', this.dex.abilities.get(target.getAbility().id), target.abilityState, target, pokemon, 'neutralizinggas'); + } + } + }, + }, + overcoat: { + inherit: true, + onImmunity(type, pokemon) { + if (type === 'sandstorm' || type === 'deserteddunes' || type === 'hail' || type === 'powder') return false; + }, + }, + primordialsea: { + inherit: true, + onAnySetWeather(target, source, weather) { + if (this.field.getWeather().id === 'primordialsea' && !STRONG_WEATHERS.includes(weather.id)) return false; + }, + }, + raindish: { + inherit: true, + onWeather(target, source, effect) { + if (target.hasItem('utilityumbrella')) return; + if (effect.id === 'raindance' || effect.id === 'primordialsea' || effect.id === 'stormsurge') { + this.heal(target.baseMaxhp / 16); + } + }, + }, + sandforce: { + inherit: true, + onBasePower(basePower, attacker, defender, move) { + if (this.field.isWeather(['sandstorm', 'deserteddunes'])) { + if (move.type === 'Rock' || move.type === 'Ground' || move.type === 'Steel') { + this.debug('Sand Force boost'); + return this.chainModify([5325, 4096]); + } + } + }, + onImmunity(type, pokemon) { + if (type === 'sandstorm' || type === 'deserteddunes') return false; + }, + }, + sandrush: { + inherit: true, + onModifySpe(spe, pokemon) { + if (this.field.isWeather(['sandstorm', 'deserteddunes'])) { + return this.chainModify(2); + } + }, + onImmunity(type, pokemon) { + if (type === 'sandstorm' || type === 'deserteddunes') return false; + }, + }, + sandveil: { + inherit: true, + onImmunity(type, pokemon) { + if (type === 'sandstorm' || type === 'deserteddunes') return false; + }, + onModifyAccuracy(accuracy) { + if (typeof accuracy !== 'number') return; + if (this.field.isWeather(['sandstorm', 'deserteddunes'])) { + this.debug('Sand Veil - decreasing accuracy'); + return this.chainModify([3277, 4096]); + } + }, + }, + swiftswim: { + inherit: true, + onModifySpe(spe, pokemon) { + if (['raindance', 'primordialsea', 'stormsurge'].includes(pokemon.effectiveWeather())) { + return this.chainModify(2); + } + }, + }, +}; diff --git a/data/mods/gen9ssb/conditions.ts b/data/mods/gen9ssb/conditions.ts new file mode 100644 index 000000000000..a49a5eb2860b --- /dev/null +++ b/data/mods/gen9ssb/conditions.ts @@ -0,0 +1,3339 @@ +import {ssbSets} from "./random-teams"; +import {changeSet, getName, enemyStaff} from './scripts'; +import {ModdedConditionData} from "../../../sim/dex-conditions"; + +export const Conditions: {[id: IDEntry]: ModdedConditionData & {innateName?: string}} = { + /* + // Example: + userid: { + noCopy: true, + onStart() { + this.add(`c:|${getName('Username')}|Switch In Message`); + }, + onSwitchOut() { + this.add(`c:|${getName('Username')}|Switch Out Message`); + }, + onFaint() { + this.add(`c:|${getName('Username')}|Faint Message`); + }, + // Innate effects go here + }, + IMPORTANT: Obtain the username from getName + */ + // Please keep statuses organized alphabetically based on staff member name! + aegii: { + noCopy: true, + onStart() { + this.add(`c:|${getName('aegii')}|**It is now aegii's turn to beat you down.**`); + }, + onSwitchOut(pokemon) { + if (this.randomChance(2, 100)) { + this.add(`c:|${getName('aegii')}|...right, I was saying in SSB4 to "stan loona", but this has to be changed now that we've found out that the company managing loona is shady af. I would like to amend that to "stan the individual members of loona" (or if you want, you can choose to stan any other group of your choice!)`); + } else { + pokemon.side.addSlotCondition(pokemon, 'aegiibpmsg'); + } + }, + onFaint() { + this.add(`c:|${getName('aegii')}|nerd`); + }, + }, + aegiibpmsg: { + onSwap(target, source) { + if (!target.fainted) { + this.add(`c:|${getName('aegii')}|~yes ${target.name}`); + target.side.removeSlotCondition(target, 'aegiibpmsg'); + } + }, + }, + aelita: { + noCopy: true, + onStart() { + this.add(`c:|${getName('Aelita')}|You know, no one appreciates the work that goes into making weapons and towers.`); + }, + onSwitchOut() { + this.add(`c:|${getName('Aelita')}|Gotta use this tower to change sectors, BRB.`); + }, + onFaint() { + this.add(`c:|${getName('Aelita')}|Well, I hope the Lyoko Warriors are at least well equipped.`); + }, + }, + aethernum: { + noCopy: true, + onStart() { + this.add(`c:|${getName('Aethernum')}|We are the Shadow Garden, and your time has come. Prepare yourself`); + }, + onSwitchOut() { + this.add(`c:|${getName('Aethernum')}|Better play the side character for now, i'll wait a more favorable opportunity`); + }, + onFaint() { + this.add(`c:|${getName('Aethernum')}|There are important things that i have to attend, i don't have any more time for you`); + }, + }, + akir: { + noCopy: true, + onStart(pokemon) { + this.add(`c:|${getName('Akir')}|hey whats up`); + }, + onSwitchOut() { + this.add(`c:|${getName('Akir')}|ok c ya`); + }, + onFaint() { + this.add(`c:|${getName('Akir')}|oh woops`); + }, + }, + alex: { + noCopy: true, + onStart() { + this.add(`c:|${getName('Alex')}|meow`); + }, + onSwitchOut() { + this.add(`c:|${getName('Alex')}|meow meow`); + }, + onFaint() { + this.add(`c:|${getName('Alex')}|:3`); + }, + }, + alexander489: { + noCopy: true, + onStart() { + this.add(`c:|${getName('Alexander489')}|gm`); + }, + onSwitchOut() { + this.add(`c:|${getName('Alexander489')}|gn`); + }, + onFaint() { + this.add(`c:|${getName('Alexander489')}|kek`); + }, + }, + apple: { + noCopy: true, + onStart() { + this.add(`c:|${getName('Apple')}|An Apple a day keeps the Opplesite mon away!`); + }, + onSwitchOut() { + this.add(`c:|${getName('Apple')}|Going to the teachers desk!`); + }, + onFaint() { + this.add(`c:|${getName('Apple')}|I crumbled like an Apple Pie :(`); + }, + }, + appletunalamode: { + noCopy: true, + onStart() { + this.add(`c:|${getName('Appletun a la Mode')}|QuQ`); + }, + onFaint() { + this.add(`c:|${getName('Appletun a la Mode')}|QnQ`); + }, + innateName: "Ripen", + shortDesc: "When this Pokemon eats certain Berries, the effects are doubled.", + onTryHeal(damage, target, source, effect) { + if (!effect || target.illusion) return; + if (effect.name === 'Berry Juice' || effect.name === 'Leftovers') { + this.add('-activate', target, 'ability: Ripen'); + } + if ((effect as Item).isBerry) return this.chainModify(2); + }, + onChangeBoost(boost, target, source, effect) { + if (target.illusion) return; + if (effect && (effect as Item).isBerry) { + let b: BoostID; + for (b in boost) { + boost[b]! *= 2; + } + } + }, + onSourceModifyDamagePriority: -1, + onSourceModifyDamage(damage, source, target, move) { + if (target.illusion) return; + if (target.abilityState.berryWeaken) { + target.abilityState.berryWeaken = false; + return this.chainModify(0.5); + } + }, + onTryEatItemPriority: -1, + onTryEatItem(item, pokemon) { + if (pokemon.illusion) return; + this.add('-activate', pokemon, 'ability: Ripen'); + }, + onEatItem(item, pokemon) { + if (pokemon.illusion) return; + const weakenBerries = [ + 'Babiri Berry', 'Charti Berry', 'Chilan Berry', 'Chople Berry', 'Coba Berry', 'Colbur Berry', 'Haban Berry', 'Kasib Berry', 'Kebia Berry', 'Occa Berry', 'Passho Berry', 'Payapa Berry', 'Rindo Berry', 'Roseli Berry', 'Shuca Berry', 'Tanga Berry', 'Wacan Berry', 'Yache Berry', + ]; + // Record if the pokemon ate a berry to resist the attack + pokemon.abilityState.berryWeaken = weakenBerries.includes(item.name); + }, + }, + aqrator: { + noCopy: true, + onStart(pokemon) { + this.add(`c:|${getName('aQrator')}|Let me tell you my sTori.`); + if (this.toID(enemyStaff(pokemon)) === 'warriorgallade') { + this.add(`c:|${getName('aQrator')}|Hey Zeiol, how's your brother?`); + } + }, + onSwitchOut() { + this.add(`c:|${getName('aQrator')}|A few Water Guns and Force Palms later, Tori and Riolu- Wait where are you going?`); + }, + onFaint() { + this.add(`c:|${getName('aQrator')}|But I only got to part 3...`); + }, + }, + aquagtothepast: { + noCopy: true, + onStart() { + this.add(`c:|${getName('A Quag To The Past')}|I'm coming out of my cage and I've been doing just fine`); + }, + onSwitchOut() { + this.add(`c:|${getName('A Quag To The Past')}|so true`); + }, + onFaint() { + const lines = [ + 'Anger he felt', + 'Before Showderp he knelt', + 'A moderator so quiet', + 'Inventing his riot', + '[[]]', + 'Onward he gazed', + 'As his cattle had grazed', + 'Wolves on the hills', + 'Mom paying his bills', + '[[]]', + 'His keyboard he used', + 'His power: abused', + '"Silent as me"', + '"You must be"', + '[[]]', + 'The chatroom is dead', + 'Yet quickly he fled', + 'Before retaliation, he made fast', + 'A Quag To The Past', + ]; + for (const line of lines) { + this.add(`c:|${getName('A Quag To The Past')}|${line}`); + } + }, + }, + archas: { + noCopy: true, + onStart() { + this.add(`c:|${getName('Archas')}|We'll get over this barrier together!`); + }, + onSwitchOut() { + this.add(`c:|${getName('Archas')}|Stand your ground, everyone!`); + }, + onFaint() { + this.add(`c:|${getName('Archas')}|What would Grandfather... think of me now...`); + }, + }, + arcueid: { + noCopy: true, + onStart() { + this.add('-message', `⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠿⠛⠛⠛⠛⠿⣿⣿⣿⣿⣿⣿⣿⣿`); + this.add('-message', `⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠛⠉⠁⠀⠀⠀⠀⠀⠀⠀⠉⠻⣿⣿⣿⣿⣿⣿`); + this.add('-message', `⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡟⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠘⢿⣿⣿⣿⣿`); + this.add('-message', `⣿⣿⣿⣿⣿⣿⣿⣿⣿⡟⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣾⣿⣿⣿⣿`); + this.add('-message', `⣿⣿⣿⣿⣿⣿⣿⠋⠈⠀⠀⠀⠀⠐⠺⣖⢄⠀⠀⠀⠀⠀⠀⠀⠀⣿⣿⣿⣿⣿`); + this.add('-message', `⣿⣿⣿⣿⣿⣿⡏⢀⡆⠀⠀⠀⢋⣭⣽⡚⢮⣲⠆⠀⠀⠀⠀⠀⠀⢹⣿⣿⣿⣿`); + this.add('-message', `⣿⣿⣿⣿⣿⣿⡇⡼⠀⠀⠀⠀⠈⠻⣅⣨⠇⠈⠀⠰⣀⣀⣀⡀⠀⢸⣿⣿⣿⣿`); + this.add('-message', `⣿⣿⣿⣿⣿⣿⡇⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣟⢷⣶⠶⣃⢀⣿⣿⣿⣿⣿`); + this.add('-message', `⣿⣿⣿⣿⣿⣿⡅⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢿⠀⠈⠓⠚⢸⣿⣿⣿⣿⣿`); + this.add('-message', `⣿⣿⣿⣿⣿⣿⡇⠀⠀⠀⠀⢀⡠⠀⡄⣀⠀⠀⠀⢻⠀⠀⠀⣠⣿⣿⣿⣿⣿⣿`); + this.add('-message', `⣿⣿⣿⣿⣿⣿⡇⠀⠀⠀⠐⠉⠀⠀⠙⠉⠀⠠⡶⣸⠁⠀⣠⣿⣿⣿⣿⣿⣿⣿`); + this.add('-message', `⣿⣿⣿⣿⣿⣿⣿⣦⡆⠀⠐⠒⠢⢤⣀⡰⠁⠇⠈⠘⢶⣿⣿⣿⣿⣿⣿⣿⣿⣿`); + this.add('-message', `⣿⣿⣿⣿⣿⣿⣿⣿⡇⠀⠀⠀⠀⠠⣄⣉⣙⡉⠓⢀⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿`); + this.add('-message', `⣿⣿⣿⣿⣿⣿⣿⣿⣷⣄⠀⠀⠀⠀⠀⠀⠀⠀⣰⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿`); + this.add('-message', `⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣤⣀⣀⠀⣀⣠⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿`); + }, + onFaint() { + this.add(`c:|${getName('Arcueid')}|change da world,,, my final message. Goodb ye`); + }, + }, + arsenal: { + noCopy: true, + onStart(pokemon) { + this.add(`c:|${getName('Arsenal')}|Show me your true form!`); + }, + onSwitchOut() { + this.add(`c:|${getName('Arsenal')}|I should write something`); + }, + onFaint() { + this.add(`c:|${getName('Arsenal')}|Dont forget this feeling !`); + }, + }, + artemis: { + noCopy: true, + onFoeAfterFaint(target, source, effect) { + this.add('message', `${source.name} was banned from Pok\u00e9mon Showdown!`); + }, + }, + arya: { + noCopy: true, + onStart() { + this.add(`c:|${getName('Arya')}|NORMAL SUMMON DEEP SEA DIVA`); + }, + onSwitchOut() { + this.add(`c:|${getName('Arya')}|Oleeeee too good for this fight!`); + }, + onFaint() { + this.add(`c:|${getName('Arya')}|Nevermind, happy tuesday and let's pray for the 33.`); + }, + onAfterMega() { + this.add(`c:|${getName('Arya')}|W-whats this? Oh, come on...!!!`); + }, + }, + audiino: { + noCopy: true, + onStart() { + this.add(`c:|${getName('Audiino')}|anyone up for othello, scrabble, connect 4, splendor, codenames, catan, actually that's a long enough list already so don't actually take me up on all of those simultaneously`); + }, + onSwitchOut() { + this.add(`c:|${getName('Audiino')}|im only thinking, ill be back...`); + }, + onFaint() { + this.add(`c:|${getName('Audiino')}|ggs, with that i take my leave`); + }, + }, + autumn: { + noCopy: true, + onFaint() { + this.add(`c:|${getName('autumn')}|lost ggs`); + }, + }, + ausma: { + noCopy: true, + onStart(pokemon) { + this.add(`c:|${getName('ausma')}|what it Do what it Be`); + switch (this.toID(enemyStaff(pokemon))) { + case 'umuwo': + this.add(`c:|${getName('ausma')}|it's.... chu......`); + break; + case 'spoo': + this.add(`c:|${getName('ausma')}|LOOL SPOOP?!`); + break; + case 'rumia': + this.add(`c:|${getName('ausma')}|oh no... it's poomia....`); + break; + case 'lily': + this.add(`c:|${getName('ausma')}|togedemaru`); + break; + case 'lumari': + this.add(`c:|${getName('ausma')}|we should watch the next ladybug ep after this tbh`); + break; + } + }, + onSwitchOut() { + const phrases = [ + 'vr shift', + 'commission', + 'bio lab', + 'lab report', + 'council post', + 'anti-tera blast propaganda post', + ]; + this.add(`c:|${getName('ausma')}|oh shit i forgot to do this ${this.sample(phrases)} hang on`); + }, + onFaint() { + this.add(`c:|${getName('ausma')}|God has punished me for my hubris.`); + }, + onTryMove(source, target, move) { + this.effectState.foeMemory = target.name; + }, + onFoeSwitchOut(pokemon) { + if (this.effectState.foeMemory && pokemon.species.name === "Fennekin") { + changeSet(this, pokemon, ssbSets[this.effectState.foeMemory]); + } + }, + onFoeFaint(target, source, effect) { + if (this.effectState.foeMemory && target.species.name === "Fennekin") { + changeSet(this, target, ssbSets[this.effectState.foeMemory]); + } + }, + }, + auzbat: { + noCopy: true, + onStart(pokemon) { + this.add(`c:|${getName('AuzBat')}|I'm Batman`); + }, + onSwitchOut() { + this.add(`c:|${getName('AuzBat')}|I believe what doesn't kill you simply makes you, stranger`); + }, + onFaint() { + this.add(`c:|${getName('AuzBat')}|All I have are negative thoughts.`); + }, + }, + avarice: { + noCopy: true, + onStart(pokemon) { + this.add(`c:|${getName('avarice')}|so what's tea`); + }, + onSwitchOut() { + this.add(`c:|${getName('avarice')}|l8r h8r`); + }, + onFaint() { + this.add(`c:|${getName('avarice')}|gg ig`); + }, + }, + beowulf: { + noCopy: true, + onStart() { + this.add(`c:|${getName('Beowulf')}|Fear the bee`); + }, + onSwitchOut() { + this.add(`c:|${getName('Beowulf')}|/me buzzes`); + }, + onFaint() { + this.add(`c:|${getName('Beowulf')}|/me buzzes`); + }, + }, + berry: { + noCopy: true, + onStart(pokemon) { + this.add(`c:|${getName('berry')}|berry`); + }, + onSwitchOut() { + this.add(`c:|${getName('berry')}|rock`); + }, + onFaint() { + this.add(`c:|${getName('berry')}|and all I got was this lousy t-shirt`); + }, + }, + bert122: { + noCopy: true, + onStart() { + this.add(`c:|${getName('Bert122')}|*cackling laughter and gem crunching noises*`); + }, + onSwitchOut() { + this.add(`c:|${getName('Bert122')}|Off to collect more shiny rocks! Hehehe!`); + }, + onFaint() { + this.add(`c:|${getName('Bert122')}|Ack, all my gems are gone!`); + }, + }, + billo: { + noCopy: true, + onStart(pokemon) { + this.add(`c:|${getName('Billo')}|So where did you say you got this mon from again?`); + }, + onFaint(pokemon) { + if (pokemon.species.name === 'Solgaleo' && !pokemon.getVolatile('perishsong')) { + this.add(`c:|${getName('Billo')}|Bruh this is the worst hack I've ever seen...`); + } else if (pokemon.species.name === 'Solgaleo') { + this.add(`c:|${getName('Billo')}|@Room Owner this user needs blacklisting but I have to head to bed.`); + } else if (pokemon.species.name === 'Lunala') { + this.add(`c:|${getName('Billo')}|Someone take me to the hozzy please.`); + } + }, + innateName: "Sheer Force/Reckless", + shortDesc: "Lunala: Sheer Force. Solgaleo: Reckless", + onModifyMove(move, pokemon) { + if (!pokemon.illusion && pokemon.species.name === 'Lunala') { + if (move.secondaries) { + delete move.secondaries; + // Technically not a secondary effect, but it is negated + delete move.self; + if (move.id === 'clangoroussoulblaze') delete move.selfBoost; + // Actual negation of `AfterMoveSecondary` effects implemented in scripts.js + move.hasSheerForce = true; + } + } + }, + onBasePowerPriority: 21, + onBasePower(basePower, pokemon, target, move) { + if (move.hasSheerForce) return this.chainModify([5325, 4096]); + if (!pokemon.illusion && pokemon.species.name === 'Solgaleo') { + if (move.recoil || move.hasCrashDamage) { + this.debug('Reckless boost'); + return this.chainModify([4915, 4096]); + } + } + }, + + }, + blazeofvictory: { + noCopy: true, + onStart(pokemon) { + this.add(`c:|${getName('blazeofvictory')}|blazeofvictorys in ur puter, askin u trivia questinz`); + }, + onSwitchOut() { + this.add(`c:|${getName('blazeofvictory')}|I'll let you have bp... for now...`); + }, + onFaint() { + this.add(`c:|${getName('blazeofvictory')}|[ bleps at you sadly :( ]`); + }, + }, + blitzuser: { + noCopy: true, + onStart(pokemon) { + this.add(`c:|${getName('Blitz')}|Hey guys, did you know that Chi-Yu is a Water/Dark-type Pokémon introduced in Generation IX? Chi-Yu is number 1004 in the National Dex, and a member of the Undiscovered egg group. Chi-Yu has no evolutionary relatives. Chi-Yu has a base stat total of 570, as do all the Treasures of Ruin, and it has the ability Blitz of Ruin. Chi-Yu learns various strong moves, such as Fiery Wrath, Lava Plume, and Nasty Plot. Chi-Yu is a blue Pokémon with a fish-like build, weighing in at 10.8 pounds and standing 1'04" feet tall. Chi-Yu's design is inspired by goldfish, flames, and beads. Chi-Yu controls flames burning at over 5,400 degrees Fahrenheit, and casually swims through the sea of lava it creates by melting rock and sand, according to various Pokedex entries. Chi-Yu is the only Treasure of Ruin in Generation IX that was quickbanned from Smogon's OverUsed tier. Many Trainers like Chi-Yu for its design, which mixes cool and cute, as well as its good stats and movepool.`); + this.add('-start', pokemon, 'typechange', 'Water/Dark', '[silent]'); + }, + onSwitchOut() { + this.add(`c:|${getName('Blitz')}|Splashyyy!`); + }, + onFaint() { + this.add(`c:|${getName('Blitz')}|https://www.youtube.com/watch?v=lPGipwoJiOM`); + }, + }, + breadstycks: { + noCopy: true, + onStart(pokemon) { + this.add(`c:|${getName('Breadstycks')}|I loeuf you <3`); + }, + // onSwitchOut implemented in ability instead + onFaint() { + this.add(`c:|${getName('Breadstycks')}|Oh, ma vie... c'est 'pitable'...`); + }, + onFoeFaint(target, source, effect) { + if (source === this.effectState.target && effect?.name === 'Painful Exit') { + this.add(`c:|${getName('Breadstycks')}|Ashes to ashes, crust to crust.`); + } else { + this.add(`c:|${getName('Breadstycks')}|Ope, someone's swallowing fishes.`); + } + }, + innateName: "Well-Baked Body", + shortDesc: "This Pokemon's Defense is raised 2 stages if hit by a Fire move; Fire immunity.", + onTryHit(target, source, move) { + if (!target.illusion && target !== source && move.type === 'Fire') { + if (!this.boost({def: 2})) { + this.add('-immune', target, '[from] ability: Well-Baked Body'); + } + return null; + } + }, + }, + cake: { + noCopy: true, + onStart(pokemon) { + this.add(`c:|${getName('Cake')}|randem batels`); + if (pokemon.illusion) return; + this.effectState.moves = [ + pokemon.moveSlots[0].id, + pokemon.moveSlots[1].id, + pokemon.moveSlots[2].id, + ]; + }, + onSwitchOut(pokemon) { + this.add(`c:|${getName('Cake')}|hustle is a good ability`); + if (!this.effectState.moves) return; + for (const [i, moveid] of this.effectState.moves.entries()) { + const replacement = this.dex.moves.get(moveid); + const replacementMove = { + move: replacement.name, + id: replacement.id, + pp: replacement.pp, + maxpp: replacement.pp, + target: replacement.target, + disabled: false, + used: false, + }; + pokemon.moveSlots[i] = replacementMove; + pokemon.baseMoveSlots[i] = replacementMove; + } + // very notable infinite pp problem here, especially with the set changes... + // consider nerfing custom move pp and removing switch-out moveset restoration. + }, + onFaint() { + this.add(`c:|${getName('Cake')}|livid washed is a nerd`); + }, + }, + chaos: { + noCopy: true, + }, + chloe: { + noCopy: true, + onStart() { + this.add(`c:|${getName('Chloe')}|hey!`); + }, + onSwitchOut() { + this.add(`c:|${getName('Chloe')}|cya soon o/`); + }, + onFaint() { + this.add(`c:|${getName('Chloe')}|ouch :(`); + }, + }, + chris: { + noCopy: true, + onStart() { + this.add(`c:|${getName('Chris')}|Sun is down, freezing cold`); + }, + onSwitchOut() { + this.add(`c:|${getName('Chris')}|She thought it was the ocean, it's just the pool!`); + }, + onFaint() { + this.add(`c:|${getName('Chris')}|Had me out like a light (like a light)`); + }, + }, + ciran: { + noCopy: true, + onStart() { + this.add(`c:|${getName('ciran')}|Nobody expects the Spanish Inquisition!`); + }, + onSwitchOut() { + this.add(`c:|${getName('ciran')}|Had enough, eh? Just a flesh wound!`); + }, + onFaint() { + this.add(`c:|${getName('ciran')}|Alright then, we'll call it a draw.`); + }, + }, + clefableuser: { + noCopy: true, + onStart() { + this.add(`c:|${getName('Clefable')}|LF: A win`); + }, + onSwitchOut() { + this.add(`c:|${getName('Clefable')}|Catch you on the flip side!`); + }, + onFaint() { + this.add(`c:|${getName('Clefable')}|I needed a VISA to be in Paldea, Wasn't even worth it. Bloody Brexit.`); + }, + innateName: "Oblivious", + desc: "This Pokemon cannot be infatuated or taunted. Gaining this Ability while infatuated or taunted cures it. This Pokemon is immune to the effect of the Intimidate Ability.", + shortDesc: "This Pokemon cannot be infatuated or taunted. Immune to Intimidate.", + onUpdate(pokemon) { + if (pokemon.illusion) return; + if (pokemon.volatiles['attract']) { + this.add('-activate', pokemon, 'ability: Oblivious'); + pokemon.removeVolatile('attract'); + this.add('-end', pokemon, 'move: Attract', '[from] ability: Oblivious'); + } + if (pokemon.volatiles['taunt']) { + this.add('-activate', pokemon, 'ability: Oblivious'); + pokemon.removeVolatile('taunt'); + // Taunt's volatile already sends the -end message when removed + } + }, + onImmunity(type, pokemon) { + if (pokemon.illusion) return; + if (type === 'attract') return false; + }, + onTryHit(pokemon, target, move) { + if (pokemon.illusion) return; + if (move.id === 'attract' || move.id === 'captivate' || move.id === 'taunt') { + this.add('-immune', pokemon, '[from] ability: Oblivious'); + return null; + } + }, + onTryBoost(boost, target, source, effect) { + if (target.illusion) return; + if (effect.name === 'Intimidate' && boost.atk) { + delete boost.atk; + this.add('-fail', target, 'unboost', 'Attack', '[from] ability: Oblivious', '[of] ' + target); + } + }, + }, + clementine: { + noCopy: true, + onStart() { + this.add(`c:|${getName('Clementine')}|Je suis peut-être con comme une table`); + }, + onSwitchOut(pokemon) { + if (pokemon.volatiles['flipped']) { + pokemon.removeVolatile('flipped'); + changeSet(this, pokemon, ssbSets['Clementine']); + this.add(`c:|${getName('Clementine')}|┬──┬◡ノ(° -°ノ)`); + } else { + this.add(`c:|${getName('Clementine')}|I fucking love air-conditioning.`); + } + }, + onFoeSwitchIn(pokemon) { + if ((pokemon.illusion || pokemon).name === 'Kennedy') { + this.add(`c:|${getName('Clementine')}|yikes`); + } + }, + onFaint() { + this.add(`c:|${getName('Clementine')}|ofc`); + }, + }, + clerica: { + noCopy: true, + onStart() { + this.add(`c:|${getName('clerica')}|gm`); + }, + onSwitchOut() { + this.add(`c:|${getName('clerica')}|gn`); + }, + onFaint() { + this.add(`c:|${getName('clerica')}|unfort`); + }, + }, + clouds: { + onStart() { + this.add(`c:|${getName('Clouds')}|i can feel it coming in the air tonight...`); + }, + onSwitchOut() { + this.add(`c:|${getName('Clouds')}|oh lord`); + }, + onFaint() { + this.add(`c:|${getName('Clouds')}|and i've been waiting for this moment for all my life`); + }, + }, + coolcodename: { + onStart(pokemon) { + this.add(`c:|${getName('Coolcodename')}|LFGI ${pokemon.side.name}`); + }, + onSwitchOut() { + this.add(`c:|${getName('Coolcodename')}|right, i forgot i have a skill issue`); + }, + onFaint() { + this.add(`c:|${getName('Coolcodename')}|mb LOL`); + }, + }, + corthius: { + onStart(pokemon) { + this.add(`c:|${getName('Corthius')}|*exessively drums on its chest*`); + }, + onSwitchOut() { + this.add(`c:|${getName('Corthius')}|I left my oven on, brb.`); + }, + onFaint() { + this.add(`c:|${getName('Corthius')}|Maurice, I can't "move it move it" anymore.`); + }, + }, + dawnofartemis: { + noCopy: true, + onStart(pokemon) { + const god = (pokemon.species.id === 'necrozmaultra') ? 'Ares' : 'Artemis'; + this.add(`c:|${getName('Dawn of Artemis')}|Time for you to witness the power of ${god}!`); + }, + onSwitchOut() { + this.add(`c:|${getName('Dawn of Artemis')}|You'll witness it again later.`); + }, + onFaint() { + this.add(`c:|${getName('Dawn of Artemis')}|Sad.`); + }, + }, + dawoblefet: { + noCopy: true, + onStart() { + this.add(`c:|${getName('DaWoblefet')}|What's going on guys? This is DaWoblefet, and welcome to Mechanics Monday.`); + }, + onSwitchOut() { + this.add(`c:|${getName('DaWoblefet')}|Until next time, have a good one.`); + }, + onFaint() { + this.add(`c:|${getName('DaWoblefet')}|mished`); + }, + }, + deftinwolf: { + noCopy: true, + onStart() { + this.add(`c:|${getName('deftinwolf')}|Run, little rabbit.`); + }, + onSwitchOut() { + this.add(`c:|${getName('deftinwolf')}|I'll give you a moment to say your prayers.`); + }, + onFaint() { + this.add(`c:|${getName('deftinwolf')}|Death is only the beginning.`); + }, + }, + dhelmiseuser: { + noCopy: true, + onStart(pokemon) { + let quotes: string[] = []; + if (!pokemon.m.sentOutBefore) { + quotes = [ + `Humanity is shackled. I will find the key.`, + `Humanity is shackled. I hold the key.`, + `Our minds are shackled. Submission is the key.`, + ]; + pokemon.m.sentOutBefore = true; + } else { + quotes = [ + `If it must be done, let it be done quickly.`, + `Let us keep our questionable choices to a minimum.`, + `On with it.`, + `I'll see this matter resolved.`, + `Knowledge is its own reward.`, + `More field research? Grand...`, + `Much lies in store. Let us see to it.`, + `Push your limits. Nothing breaks that I cannot mend.`, + `Your work is a hypothesis. Prove it.`, + `Let us go on to the end.`, + `Victory grows more certain by the minute.`, + `Victory is within our grasp.`, + `I have come not to sve, but to __empower__.`, + `Now our true work begins.`, + `My soul hungers.`, + `Do not fight your true nature.`, + ]; + if (pokemon.side.pokemonLeft > pokemon.side.foe.pokemonLeft) { + quotes.push(`We hold the advantage. Shall we keep it?`); + } else if (pokemon.side.pokemonLeft === pokemon.side.foe.pokemonLeft) { + quotes.push( + `If we're hopingto win, now's the time.`, + `It all comes down to this.`, + `Prepare yourselves for the decisive battle.`, + `This fight is all that remains.` + ); + } else { + quotes.push( + `Another setback and all will be lost.`, + `One more mistake, and we fail.`, + `We cannot tolerate any more missteps.`, + `We must reverse the course that we are on.` + ); + } + } + this.add(`c:|${getName('dhelmise')}|${this.sample(quotes)}`); + }, + onSwitchOut() { + const quotes = [ + `Fading.`, + `Like shadow.`, + `Obscured.`, + `Of the Void.`, + `Dissolution.`, + `Into darkness.`, + `Unknowable.`, + ]; + this.add(`c:|${getName('dhelmise')}|${this.sample(quotes)}`); + }, + onFaint() { + this.add(`c:|${getName('dhelmise')}|Revive me.`); + }, + }, + diananicole: { + noCopy: true, + onStart() { + this.add(`c:|${getName('DianaNicole')}|Ready for Initiative? Cause I'm gonna Clickity Clackity, Roll to Attackity!`); + }, + onSwitchOut() { + this.add(`c:|${getName('DianaNicole')}|Dropping out of Initiative`); + }, + onFaint() { + this.add(`c:|${getName('DianaNicole')}|Guess I didn't roll high enough`); + }, + }, + easyonthehills: { + noCopy: true, + onStart() { + this.add(`c:|${getName('EasyOnTheHills')}|Yo`); + }, + onSwitchOut() { + this.add(`c:|${getName('EasyOnTheHills')}|Would you rather have unlimited bacon, but no more video games, or would you rather have games, unlimited games, but no more games.`); + }, + onFaint() { + this.add(`c:|${getName('EasyOnTheHills')}|__loud Dorito bag crinkling noises__`); + }, + }, + elliot: { + noCopy: true, + onStart() { + this.add(`c:|${getName('Elliot')}|Anyone fancy a brew?`); + }, + onFaint(pokemon) { + if (pokemon.getVolatile('boiled')) { + this.add(`c:|${getName('Elliot')}|Also try Vimbos!`); + } else { + this.add(`c:|${getName('Elliot')}|We've ran out of teabags :(`); + } + }, + }, + elly: { + noCopy: true, + onStart() { + this.add(`c:|${getName('Elly')}|any`); + }, + onSwitchOut() { + this.add(`c:|${getName('Elly')}|ok bye`); + }, + onFaint(pokemon) { + this.add(`c:|${getName('Elly')}|that wasn't very nice, ${enemyStaff(pokemon)}.`); + }, + }, + emboar02: { + noCopy: true, + onStart() { + this.add(`c:|${getName('Emboar02')}|I'm the best fire-fighting starter!`); + }, + onSwitchOut() { + this.add(`c:|${getName('Emboar02')}|This is boaring...`); + }, + onFaint() { + this.add(`c:|${getName('Emboar02')}|Too much recoil D:`); + }, + }, + fame: { + noCopy: true, + onStart() { + this.add(`c:|${getName('Fame')}|:hi:`); + }, + onSwitchOut() { + this.add(`c:|${getName('Fame')}|:bye:`); + }, + onFaint(pokemon) { + this.add(`c:|${getName('Fame')}|NOOOOOOOOOOOO! I'M A STAR! PLEASE, IM A STAR!`); + }, + }, + felucia: { + noCopy: true, + onStart() { + this.add(`c:|${getName('Felucia')}|Good morning gamers! Just here to fix a few things`); + }, + onSwitchOut(pokemon) { + this.add(`c:|${getName('Felucia')}|I have bots to make and chatrooms to manage...`); + if (pokemon.illusion) return; + pokemon.heal(pokemon.baseMaxhp / 3); + }, + onFaint(pokemon) { + this.add(`c:|${getName('Felucia')}|Okay that's enough work for today`); + }, + innateName: "Regenerator", + shortDesc: "Regenerator + innate +1 Speed.", + onModifySpe(spe, pokemon) { + if (pokemon.illusion) return; + return this.chainModify(1.5); + }, + }, + froggeh: { + noCopy: true, + onStart(pokemon) { + this.add(`c:|${getName('Froggeh')}|Hello. Froggeh the dad here. And welcome to The Happy Place!`); + switch (this.toID(enemyStaff(pokemon))) { + case 'valerian': + this.add(`c:|${getName('Froggeh')}|See that frog, she is green, diggin the froggy queen!`); + break; + case 'queeni': + this.add(`c:|${getName('Froggeh')}|Imagine if you will- a frog with a smol crown on her head.`); + break; + } + }, + onSwitchOut() { + this.add(`c:|${getName('Froggeh')}|It's not easy being dad.`); + }, + onFaint(pokemon) { + this.add(`c:|${getName('Froggeh')}|URG! I've croaked...`); + }, + }, + frostyicelad: { + noCopy: true, + onStart() { + this.add(`c:|${getName('Frostyicelad')}|why am I a Qwilfish`); + }, + onSwitchOut() { + this.add(`c:|${getName('Frostyicelad')}|time to bring in the Ice types`); + }, + onFaint(pokemon) { + this.add(`c:|${getName('Frostyicelad')}|Why am I not lapras`); + }, + }, + frozoid: { + noCopy: true, + onStart() { + this.add(`c:|${getName('Frozoid')}|Let's do this`); + }, + onSwitchOut() { + this.add(`c:|${getName('Frozoid')}|Wait let me finish what i was doi-`); + }, + onFaint(pokemon) { + this.add(`c:|${getName('Frozoid')}|Man.`); + }, + }, + ganjafin: { + noCopy: true, + onStart() { + this.add(`c:|${getName('Ganjafin')}|How's it going guys, Ganjafin here`); + }, + onSwitchOut() { + this.add(`c:|${getName('Ganjafin')}|And I'll see you guys, in the next one`); + }, + onFaint() { + this.add(`c:|${getName('Ganjafin')}|I knew I'd die before Silksong came out`); + }, + }, + hasteinky: { + noCopy: true, + onStart() { + this.add(`c:|${getName('Haste Inky')}|Wanna see whatever weird thing I can do?`); + }, + onSwitchOut() { + this.add(`c:|${getName('Haste Inky')}|Good call! I wasn't liking this situation either.`); + }, + onFaint() { + this.add(`c:|${getName('Haste Inky')}| I am NOT feeling full of beans rn…`); + }, + }, + havi: { + noCopy: true, + onStart() { + this.add(`c:|${getName('havi')}|kos, or some say kosm`); + }, + onSwitchOut() { + this.add(`c:|${getName('havi')}|grant us eyes, grant us eyes`); + }, + onFaint() { + this.add(`c:|${getName('havi')}|the nightmare swirls and churns unending n_n`); + }, + }, + hecate: { + noCopy: true, + onStart() { + this.add(`c:|${getName('Hecate')}|git pull ps hecate`); + }, + onSwitchOut() { + this.add(`c:|${getName('Hecate')}|git switch`); + }, + onFaint() { + this.add(`c:|${getName('Hecate')}|git checkout --detach HEAD && git commit -m "war crimes"`); + }, + }, + hizo: { + noCopy: true, + onStart() { + const tier = this.sample(['Partners in Crime', 'Sketchmons', 'OMMs', 'Triples']); + this.add(`c:|${getName('HiZo')}|Why am I needed here, I was busy playing ${tier} with friends`); + this.add(`c:|${getName('HiZo')}|Did I break something again`); + }, + onSwitchOut() { + this.add(`c:|${getName('HiZo')}|This isn't my fault this time I swear`); + this.add(`c:|${getName('HiZo')}|Ok maybe it is but that doesn't mean you should blame me automatically`); + }, + onFaint() { + this.add(`c:|${getName('HiZo')}|What did I do to deserve this`); + this.add(`c:|${getName('HiZo')}|Actually on second thought don't answer that question`); + }, + }, + hoeenhero: { + noCopy: true, + onStart() { + this.add(`c:|${getName('HoeenHero')}|Ok what did Hippopotas break now?`); + }, + onSwitchOut() { + this.add(`c:|${getName('HoeenHero')}|TODO think of a switch out message later.`); + }, + onFaint() { + this.add(`c:|${getName('HoeenHero')}|I should of reprogrammed the RNG to be in my favor too...`); + }, + }, + hsy: { + noCopy: true, + onStart() { + this.add(`c:|${getName('hsy')}|BANJO!`); + }, + onSwitchOut() { + this.add(`c:|${getName('hsy')}|LEMME SCRAP COWARD`); + }, + onFaint() { + this.add(`c:|${getName('hsy')}|https://www.youtube.com/watch?v=g104OJIh9hs`); + }, + }, + hydrostaticsuser: { + noCopy: true, + onStart(pokemon) { + this.add(`c:|${getName('Hydrostatics')}|Straighten your backs and get some hydration :]`); + this.add('-start', pokemon, 'typechange', 'Electric/Water', '[silent]'); + }, + onSwitchOut() { + this.add(`c:|${getName('Hydrostatics')}|Brb getting some water :d`); + }, + onFaint(pokemon) { + this.add(`c:|${getName('Hydrostatics')}|Seems like you were more hydrated than me :c`); + if (pokemon.side.pokemon.some(mon => mon.name === 'PartMan')) { + // Custom message for PartMan + // Yes, this reveals that the enemy has PartMan + this.add(`c:|${getName('PartMan')}|Hydro here have a tiara`); + } + }, + }, + imperial: { + noCopy: true, + onStart() { + this.add(`c:|${getName('Imperial')}|gmcat`); + }, + onSwitchOut(pokemon) { + const foe = pokemon.side.foes()[0]?.name; + if (foe) { + this.add(`c:|${getName('Imperial')}|ofc u have ${foe}. bad mu as always...`); + } + }, + onFaint() { + this.add(`c:|${getName('Imperial')}|crazy rng`); + }, + }, + inthehills: { + noCopy: true, + onStart() { + this.add(`c:|${getName('in the hills')}|in (the hills)`); + }, + onSwitchOut() { + this.add(`c:|${getName('in the hills')}|i'll be out back`); + }, + onFaint() { + this.add(`c:|${getName('in the hills')}|im starting to feel kinda stupid can i please leave`); + }, + }, + ironwater: { + noCopy: true, + onStart() { + this.add(`c:|${getName('ironwater')}|Jirachi Ban Hammer!`); + }, + onSwitchOut() { + this.add(`c:|${getName('ironwater')}|Let me grab a bigger hammer`); + }, + onFaint() { + this.add(`c:|${getName('ironwater')}|I'll ban you in the next game...`); + }, + }, + irpachuza: { + noCopy: true, + onStart() { + this.add(`c:|${getName('Irpachuza!')}|Hf. I never say gl because I sincerely don't want my oppo to have better luck than me in rands n.n`); + }, + onSwitchOut() { + this.add(`c:|${getName('Irpachuza!')}|bye and HOOP HOOP n.n`); + }, + onFaint(pokemon) { + this.add(`c:|${getName('Irpachuza!')}|how DARE YOU ${pokemon.side.foe.name} ;-; n.n`); + }, + innateName: "Prankster", + desc: "This Pokemon's non-damaging moves have their priority increased by 1. Opposing Dark-type Pokemon are immune to these moves, and any move called by these moves, if the resulting user of the move has this Ability.", + shortDesc: "This Pokemon's Status moves have priority raised by 1, but Dark types are immune.", + onModifyPriority(priority, pokemon, target, move) { + if (pokemon.illusion) return; + if (move?.category === 'Status') { + move.pranksterBoosted = true; + return priority + 1; + } + }, + }, + isaiah: { + noCopy: true, + onStart(pokemon) { + this.add(`c:|${getName('Isaiah')}|Who dyin'?`); + }, + onSwitchOut() { + this.add(`c:|${getName('Isaiah')}|Misclick`); + }, + onFaint() { + this.add(`c:|${getName('Isaiah')}|Bruh, nice cteam`); + }, + }, + j0rdy004: { + noCopy: true, + onStart(pokemon) { + this.add(`c:|${getName('J0rdy004 ♫')}|Get-get-get-get, got-got-got-got`); + }, + onSwitchOut() { + this.add(`c:|${getName('J0rdy004 ♫')}|I've seen footage, I stay noided`); + }, + onFaint() { + this.add(`c:|${getName('J0rdy004 ♫')}|So softly a supergod dies...`); + }, + }, + kalalokki: { + noCopy: true, + onStart(pokemon) { + this.add(`c:|${getName('Kalalokki')}|FLAMIGOOOO!`); + }, + onFaint() { + this.add(`c:|${getName('Kalalokki')}|Flamigoooo...`); + }, + innateName: "Tinted Lens", + shortDesc: "Resisted moves hit with double power.", + onModifyDamage(damage, source, target, move) { + if (source.illusion) return; + if (target.getMoveHitData(move).typeMod < 0) { + this.debug('Tinted Lens boost'); + return this.chainModify(2); + } + }, + }, + karthik: { + noCopy: true, + onStart(pokemon) { + this.add(`c:|${getName('Karthik')}|>>> const staraptor = battle.player('${pokemon.side.name}').active[0]`); + }, + onSwitchOut(pokemon) { + this.add(`c:|${getName('Karthik')}|>>> staraptor.heal(staraptor.baseMaxhp / 3)`); + if (!pokemon.illusion) pokemon.heal(pokemon.baseMaxhp / 3); + }, + onFaint() { + this.add(`c:|${getName('Karthik')}|>>> staraptor.faint()`); + }, + innateName: "Regenerator", + shortDesc: "This Pokemon restores 1/3 of its maximum HP, rounded down, when it switches out.", + }, + ken: { + noCopy: true, + onStart(pokemon) { + this.add(`c:|${getName('ken')}|gm.`); + }, + onSwitchOut() { + this.add(`c:|${getName('ken')}|whoopsies`); + }, + onFaint() { + this.add(`c:|${getName('ken')}|have a good day!`); + }, + }, + kenn: { + noCopy: true, + onStart(pokemon) { + this.add(`c:|${getName('kenn')}|*old man grumbling*`); + }, + onSwitchOut() { + this.add(`c:|${getName('kenn')}|Ope`); + }, + onFaint() { + this.add(`c:|${getName('kenn')}|I'm too old for this shi-`); + }, + }, + kennedy: { + noCopy: true, + innateName: "Battle Bond", + shortDesc: "After KOing a Pokemon: becomes Cinderace-Gmax.", + onStart(target, source, effect) { + const message = this.sample(['Justice for the 97', 'up the reds']); + this.add(`c:|${getName('Kennedy')}|${message}`); + if (source && source.name === 'Clementine') { + if (source.volatiles['flipped']) { + source.removeVolatile('flipped'); + changeSet(this, source, ssbSets['Clementine']); + this.add(`c:|${getName('Kennedy')}|┬──┬◡ノ(° -°ノ)`); + } else { + source.addVolatile('flipped', target, this.effect); + changeSet(this, source, ssbSets['Clementine-Flipped']); + this.add(`c:|${getName('Kennedy')}|(╯°o°)╯︵ ┻━┻`); + } + } + if (target.species.id === 'cinderacegmax' && !target.terastallized) { + this.add('-start', target, 'typechange', target.getTypes(true, true).join('/'), '[silent]'); + } + }, + onSwitchOut() { + this.add(`c:|${getName('Kennedy')}|Stream some Taylor Swift whilst I'm gone!`); // TODO replace + }, + onFoeSwitchIn(pokemon) { + switch ((pokemon.illusion || pokemon).name) { + case 'Clementine': + this.add(`c:|${getName('Kennedy')}|Not the Fr*nch....`); + break; + case 'dhelmise': + this.add(`c:|${getName('Kennedy')}|fuck that`); + this.effectState.target.faint(); + this.add('message', 'Kennedy fainted mysteriously.....'); + break; + } + }, + onFaint() { + this.add(`c:|${getName('Kennedy')}|FUCK OFF, REALLY?????`); + }, + onSourceAfterFaint(length, target, source, effect) { + const message = this.sample(['ALLEZZZZZ', 'VAMOSSSSS', 'FORZAAAAA', 'LET\'S GOOOOO']); + this.add(`c:|${getName('Kennedy')}|${message}`); + if (source.species.id === 'cinderace' && this.field.pseudoWeather['anfieldatmosphere'] && + !source.transformed && effect?.effectType === 'Move' && source.hp && source.side.foePokemonLeft()) { + this.add('-activate', source, 'ability: Battle Bond'); + source.formeChange('Cinderace-Gmax', this.effect, true); + source.baseMaxhp = Math.floor(Math.floor( + 2 * source.species.baseStats['hp'] + source.set.ivs['hp'] + Math.floor(source.set.evs['hp'] / 4) + 100 + ) * source.level / 100 + 10); + const newMaxHP = source.volatiles['dynamax'] ? (2 * source.baseMaxhp) : source.baseMaxhp; + source.hp = newMaxHP - (source.maxhp - source.hp); + source.maxhp = newMaxHP; + this.add('-heal', source, source.getHealth, '[silent]'); + } + }, + onUpdate(pokemon) { + if (pokemon.volatiles['attract']) { + this.add(`c:|${getName('Kennedy')}|NAAA FUCK OFF, I'd rather be dead`); + pokemon.faint(); + this.add('message', 'Kennedy would have been infatuated but fainted mysteriously'); + } + }, + onSourceCriticalHit(pokemon, source, move) { + this.add(`c:|${getName('Kennedy')}|LOOOOOOL ffs`); + }, + onFlinch(pokemon) { + if (pokemon.illusion) return; + this.add(`c:|${getName('Kennedy')}|LOOOOOOL ffs`); + }, + }, + keys: { + noCopy: true, + onStart() { + this.add(`c:|${getName('keys')}|It's Prime Time`); + }, + onSwitchOut() { + this.add(`c:|${getName('keys')}|Don't worry, I'll be back`); + }, + onFaint() { + this.add(`c:|${getName('keys')}|...`); + }, + }, + kingbaruk: { + noCopy: true, + onStart() { + this.add(`c:|${getName('kingbaruk')}|Pressure pushing down on me`); + }, + onSwitchOut() { + this.add(`c:|${getName('kingbaruk')}|Pressing down on you`); + }, + onFaint() { + this.add(`c:|${getName('kingbaruk')}|Why can't we give love that one more chance?`); + }, + innateName: "Multiscale", + onSourceModifyDamage(damage, source, target, move) { + if (target.illusion) return; + if (target.hp >= target.maxhp) { + this.debug('Multiscale weaken'); + return this.chainModify(0.5); + } + }, + }, + kiwi: { + noCopy: true, + onStart() { + this.add(`c:|${getName('Kiwi')}|Hey, are you a goldfish or a shark? I guess it depends on how quickly you get flushed down`); + }, + onSwitchOut() { + this.add(`c:|${getName('Kiwi')}|You're lively, but I'm not done peeling off your scales`); + }, + onFaint() { + this.add(`c:|${getName('Kiwi')}|Too late, the manifestation has completed. You'll be reduced to a fillet one day unexpectedly...`); + }, + }, + klmondo: { + noCopy: true, + onStart() { + this.add(`c:|${getName('Klmondo')}|Gm`); + }, + onSwitchOut() { + this.add(`c:|${getName('Klmondo')}|I need a snack`); + }, + onFaint() { + this.add(`c:|${getName('Klmondo')}|It's Klmondover`); + }, + }, + kolohe: { + noCopy: true, + onStart(pokemon) { + const foe = enemyStaff(pokemon); + if (foe === 'Rumia') { + this.add(`c:|${getName('kolohe ✮彡')}|You come around here often?`); + } else if (foe === 'spoo') { + this.add(`c:|${getName('kolohe ✮彡')}|Big bald head spotted...`); + } else if (foe === 'ausma') { + this.add(`c:|${getName('kolohe ✮彡')}|The weekly Smogon furry convention starts NOW`); + } else if (foe === 'Peary') { + this.add(`c:|${getName('kolohe ✮彡')}|Any arters or culturers?`); + } else { + this.add(`c:|${getName('kolohe ✮彡')}|Hey, howzit!`); + } + }, + onSwitchOut() { + this.add(`c:|${getName('kolohe ✮彡')}|Wait, I just got started!`); + }, + onFaint() { + this.add(`c:|${getName('kolohe ✮彡')}|change da world... my final message. goodbye`); + }, + }, + kry: { + noCopy: true, + onStart() { + this.add(`c:|${getName('Kry')}|:3`); + }, + onSwitchOut() { + this.add(`c:|${getName('Kry')}|PartMan is a nerd`); + }, + onFaint() { + this.add(`c:|${getName('Kry')}|Guys whatever you do don't say Farigiraf backwards`); + }, + }, + lasen: { + noCopy: true, + onStart() { + this.add(`c:|${getName('Lasen')}|That's a Hungarian yield sign, easy Budapest guess.`); + }, + onSwitchOut() { + this.add(`c:|${getName('Lasen')}|Will give QC 2/2 after implementation.`); + }, + onFaint() { + this.add(`c:|${getName('Lasen')}|I'm out and NOT about...`); + }, + }, + letsgoshuckles: { + noCopy: true, + onStart() { + this.add(`c:|${getName('Lets go shuckles')}|Behold the magnificence of Shuckle.`); + }, + onSwitchOut() { + this.add(`c:|${getName('Lets go shuckles')}|Wise men don't fight battles they cannot win.`); + }, + onFaint() { + this.add(`c:|${getName('Lets go shuckles')}|He who lives by the Shuckle shall die by the Shuckle.`); + }, + }, + lily: { + noCopy: true, + onStart() { + this.add(`c:|${getName('Lily')}|buying gf`); + }, + onSwitchOut() { + this.add(`c:|${getName('Lily')}|accidentally burnt the shrimps`); + }, + onFaint() { + this.add(`c:|${getName('Lily')}|oh dear, i am dead`); + }, + }, + loethalion: { + noCopy: true, + onStart(pokemon) { + const foe = enemyStaff(pokemon); + if (foe === 'WigglyTree') { + this.add(`c:|${getName('Loethalion')}|No, I'm not drawing Dialga on a bike again`); + } else if (foe === 'Swiffix') { + this.add(`c:|${getName('Loethalion')}|Oh hi Stinky`); + } else if (foe === 'Mex') { + this.add(`c:|${getName('Loethalion')}|In spain without the A`); + } else if (foe === 'Billo') { + this.add(`c:|${getName('Loethalion')}|So your saying I can't ban myself?`); + } else if (foe === 'Clefable') { + this.add(`c:|${getName('Loethalion')}|But what if I hack a tiny bit?`); + } else if (foe === 'Lunell') { + this.add(`c:|${getName('Loethalion')}|We bean posting?`); + } else if (foe === 'Ciran') { + this.add(`c:|${getName('Loethalion')}|So I have another great piplup drawing idea :>`); + } else { + this.add(`c:|${getName('Loethalion')}| ...from Zero`); + } + }, + onSourceAfterFaint(length, target, source, effect) { + if (enemyStaff(source) === 'Swiffix') { + this.add(`c:|${getName('Loethalion')}|It's still pfp...`); + } + }, + onSwitchOut(pokemon) { + this.add(`c:|${getName('Loethalion')}| I don't remember why I'm even here __walks out the room__`); + }, + onFaint() { + this.add(`c:|${getName('Loethalion')}|__Wheezing laugh__`); + }, + }, + lumari: { + noCopy: true, + // quotes added later + onSwitchOut(pokemon) { + if (pokemon.illusion) return; + pokemon.heal(pokemon.baseMaxhp / 3); + }, + innateName: "Regenerator", + shortDesc: "User will heal 33% of their max HP on switch-out.", + }, + lunell: { + noCopy: true, + onStart() { + this.add(`c:|${getName('Lunell')}|vapowo`); + }, + onSwitchOut() { + this.add(`c:|${getName('Lunell')}|brb looking for bean images, don't disturb`); + }, + onFaint() { + this.add(`c:|${getName('Lunell')}|*sad vaporeon noises*`); + }, + }, + lyna: { + noCopy: true, + onStart(pokemon) { + let phrase = ''; + switch (this.toID(enemyStaff(pokemon))) { + case 'alex': + case 'nya': + this.add(`c:|${getName('Lyna 氷')}|Oh, a cat <3`); + break; + case 'r8': + case 'clementine': + case 'teclis': + case 'swiffix': + case 'ironwater': + phrase = 'slt'; + break; + default: + phrase = 'Hey <3'; + break; + } + this.add(`c:|${getName('Lyna 氷')}|${phrase}`); + }, + onSwitchOut(pokemon) { + let phrase = ''; + switch (this.toID(enemyStaff(pokemon))) { + case 'alex': + case 'nya': + phrase = 'You\'re so cute, I can\'t hit you...'; + break; + case 'r8': + case 'clementine': + case 'teclis': + case 'swiffix': + case 'ironwater': + phrase = '**Tournoi Hebdo sur <> !**'; + break; + default: + phrase = 'Nvm I\'m too busy for that, cya!'; + break; + } + this.add(`c:|${getName('Lyna 氷')}|${phrase}`); + }, + onFaint(pokemon) { + let phrase = ''; + switch (this.toID(enemyStaff(pokemon))) { + case 'alex': + case 'nya': + phrase = 'You\'re definitely too cute...'; + break; + case 'r8': + phrase = 'ok mais on dit pain au chocolat.'; + break; + case 'clementine': + case 'teclis': + case 'swiffix': + case 'ironwater': + phrase = 't\'as de la chance que je sois sympa..'; + break; + default: + phrase = 'The flames were too frozen...'; + break; + } + this.add(`c:|${getName('Lyna 氷')}|${phrase}`); + }, + }, + maia: { + noCopy: true, + onStart(pokemon) { + this.add(`c:|${getName('Maia')}|gm ${enemyStaff(pokemon)}`); + }, + onSwitchOut() { + this.add(`c:|${getName('Maia')}|(cat)ch you later`); + }, + onFaint() { + this.add(`c:|${getName('Maia')}|gn`); + }, + }, + marillvibes: { + noCopy: true, + onStart() { + this.add(`c:|${getName('marillvibes ♫')}|Is that a __rat__?`); + }, + onSwitchOut() { + this.add(`c:|${getName('marillvibes ♫')}|Here for a good time, not a long time!`); + }, + onFaint() { + this.add(`c:|${getName('marillvibes ♫')}|The vibes are off... :(`); + }, + }, + maroon: { + noCopy: true, + onStart() { + this.add(`c:|${getName('maroon')}|It's not my fault you're, like, in love with me!`); + }, + onSwitchOut() { + this.add(`c:|${getName('maroon')}|That's why her hair is so big. It's full of secrets.`); + }, + onFoeSwitchOut() { + this.add(`c:|${getName('maroon')}|You wanna do something fun? You wanna go to Taco Bell?`); + }, + onFaint() { + this.add(`c:|${getName('maroon')}|Gretchen, I'm sorry I laughed at you that time you got diarrhea at Barnes & Noble. And I'm sorry for telling everyone about it. And I'm sorry for repeating it now.`); + }, + }, + mathy: { + noCopy: true, + onStart() { + this.add(`c:|${getName('Mathy')}|Nooooo i broke tera again`); + }, + onSwitchOut(pokemon) { + this.add(`c:|${getName('Mathy')}|whatever i'll make ${enemyStaff(pokemon)} fix it`); + }, + onFaint() { + this.add(`c:|${getName('Mathy')}|thanks for making my job harder :/`); + }, + }, + merritty: { + noCopy: true, + onStart() { + this.add(`c:|${getName('Merritty')}|Deadline.`); + }, + onSwitchOut() { + this.add(`c:|${getName('Merritty')}|If you believe there's been a mistake, please let me know ASAP.`); + }, + onFaint() { + this.add(`c:|${getName('Merritty')}|congratulations to our winner`); + }, + innateName: "Tourban", + shortDesc: "Takes half damage from Ghost moves, deals double damge to Ghost-types.", + onSourceModifyDamage(damage, source, target, move) { + if (source.illusion) return; + if (move.type === 'Ghost') { + this.debug('Tourban Ghost weaken'); + return this.chainModify(0.5); + } + }, + onModifyDamage(damage, source, target, move) { + if (source.illusion) return; + if (target?.hasType('Ghost')) { + this.debug('Tourban boost'); + return this.chainModify(2); + } + }, + }, + meteordash: { + noCopy: true, + onStart() { + this.add(`c:|${getName('Meteordash')}|hi`); + }, + onSwitchOut() { + this.add(`c:|${getName('Meteordash')}|oh`); + }, + onFaint() { + this.add(`c:|${getName('Meteordash')}|man.`); + }, + }, + mex: { + noCopy: true, + onStart() { + this.add(`c:|${getName('Mex')}|Time to make the donuts.`); + }, + onSwitchOut() { + this.add(`c:|${getName('Mex')}|Brb, there's a Dialga raid.`); + }, + onFaint() { + this.add(`c:|${getName('Mex')}|pain.`); + }, + }, + miojo: { + noCopy: true, + onStart() { + this.add(`c:|${getName('Miojo')}|They see me rollin'`); + }, + onSwitchOut() { + this.add(`c:|${getName('Miojo')}|They hatin'`); + }, + onFaint() { + this.add(`c:|${getName('Miojo')}|Em caso de investigação policial, eu declaro que não tenho envolvimento com este grupo e não sei como estou no mesmo, provavelmente fui inserido por terceiros, declaro que estou disposto a colaborar com as investigações e estou disposto a me apresentar a depoimento se necessário`); + }, + }, + monkey: { + noCopy: true, + onStart() { + this.add(`c:|${getName('Monkey')}|Hmm, monke`); + }, + onSwitchOut() { + this.add(`c:|${getName('Monkey')}|Don't mind me I was just monkeying around`); + }, + onFaint() { + this.add(`c:|${getName('Monkey')}|I'm a seeker too. But my dreams aren't like yours. I can't help thinking that somewhere in the universe there has to be something better than man. Has to be.`); + }, + }, + mypearl: { + noCopy: true, + onStart() { + this.add(`c:|${getName('MyPearl')}|sim, estou no ssb, like se amaste`); + }, + onSwitchOut() { + this.add(`c:|${getName('MyPearl')}|nossa, ela é tãaaao regina george`); + }, + onFaint() { + this.add(`c:|${getName('MyPearl')}|ta permitido isso?`); + }, + }, + neko: { + noCopy: true, + onStart() { + this.add(`c:|${getName('Neko')}|Gmeow :3`); + }, + onSwitchOut() { + this.add(`c:|${getName('Neko')}|Meow go poof :3c`); + }, + onFaint() { + this.add(`c:|${getName('Neko')}|Chien-Meow is cute when it doesn't scratch the ground, between it and Flutter Mane its dangerous to go out and ladder. You have been warned ;w;`); + }, + }, + ney: { + noCopy: true, + onStart() { + this.add(`c:|${getName('Ney')}|Hi I'm Ney. I love mischiefs.`); + }, + onSwitchOut() { + this.add(`c:|${getName('Ney')}|Unloading more tricks.`); + }, + onFaint() { + this.add(`c:|${getName('Ney')}|How long am I banned for?`); + }, + }, + notater517: { + noCopy: true, + onStart() { + this.add(`c:|${getName('Notater517')}|OwO What's This?`); + }, + onSwitchOut() { + this.add(`c:|${getName('Notater517')}|brb, dealing with mobile connection, here's a song to listen to before I return: https://www.youtube.com/watch?v=dQw4w9WgXcQ`); + }, + onFaint() { + this.add(`c:|${getName('Notater517')}|ngl that was pretty sus ඩ`); + }, + }, + nya: { + noCopy: true, + onStart() { + this.add(`c:|${getName('nya~ ❤')}|:3`); + }, + onSwitchOut() { + this.add(`c:|${getName('nya~ ❤')}|nya~`); + }, + onFaint() { + this.add(`c:|${getName('nya~ ❤')}|>~<`); + }, + innateName: "Fickle Beam", + shortDesc: "This Pokemon's moves have a 30% chance to be doubled in power.", + onBasePower(basePower, attacker, defender, move) { + if (attacker.illusion) return; + if (this.randomChance(3, 10)) { + let allOutAnim = 'Draco Meteor'; + switch (move.id) { + case 'voltswitch': allOutAnim = 'Thunder'; break; + case 'freezedry': allOutAnim = 'Glacial Lance'; break; + case 'triattack': allOutAnim = 'Blood Moon'; break; + case '3': allOutAnim = 'Fleur Cannon'; break; + } + this.attrLastMove('[anim] ' + allOutAnim); + this.add('-activate', attacker, 'move: Fickle Beam'); + return this.chainModify(2); + } + }, + }, + pants: { + noCopy: true, + onStart() { + this.add(`c:|${getName('pants')}|hell yeah, bro`); + }, + onSwitchOut() { + this.add(`c:|${getName('pants')}|cya, dude :)`); + }, + onFaint() { + this.add(`c:|${getName('pants')}|peace, bud`); + }, + }, + partman: { + noCopy: true, + onStart(pokemon) { + let message; + switch (this.toID(enemyStaff(pokemon))) { + case 'partman': + message = 'Hii Q - oh, it\'s just me.'; + break; + case 'arsenal': + message = 'Do I count as a gunner?'; + break; + case 'aqrator': + message = 'Speaking of cafes - this Pokemon is so popular, it has an entire cafe dedicated to it in the Pokemon world! Alongside the cafe, there\'s also stuff like a bus tour where you can sit one-on-one with the Pokemon and admire its beauty.'; + break; + case 'beowulf': + message = 'BEE'; + break; + case 'breadstycks': + message = 'BREADBOWL'; + break; + case 'clerica': + message = 'SMELY HIIII'; + break; + case 'computerwizard8800': + message = 'CWIZ SLEEP'; + break; + case 'hydrostatics': + message = 'Here to bully Hydro'; + break; + case 'kennedy': + message = 'Down the reds!'; + break; + case 'kry': + this.add(`c:|${getName('PartMan')}|%r 14 // @Kry`); + this.add(`c:|${getName('Ice Kyubs')}|Roll: 14`); + message = null; + break; + case 'mex': + message = 'Probopass moment'; + break; + case 'monkey': + message = 'Remember to smile!'; + break; + case 'notater517': + message = 'E-excuse me s-senpai >///<'; + break; + case 'pissog': + message = 'Ma ciaomi queste noci'; + break; + case 'pyro': + message = 'Fight me you boiled potato'; + break; + case 'rsb': + message = '/me hugs'; + break; + case 'siegfried': + message = 'Is Sieg baked or boiled?'; + break; + case 'softflex': + message = '/me softly flexes'; + break; + case 'sulo': + message = '...Sulo\'s AFK again, aren\'t they?'; + break; + case 'trace': + this.add('-message', `PartMan's Neutralizing Gas filled the area! (but not really)`); + message = null; + break; + case 'warriorgallade': + message = 'Berry nice to meet you!'; + break; + case 'za': + message = '/me shitposts'; + break; + case 'zalm': + message = '<(:O)00000>'; + break; + default: + message = 'Hiii QT :3'; + } + if (message) this.add(`c:|${getName('PartMan')}|${message}`); + }, + onSwitchOut() { + this.add(`c:|${getName('PartMan')}|Deez nuts`); + }, + onFaint() { + this.add(`c:|${getName('PartMan')}|Okay weeb`); + }, + onFoeSwitchIn(pokemon) { + if (pokemon.name === 'Hydrostatics') { + this.add(`c:|${getName('PartMan')}|LUAAAAA!`); + this.add(`c:|${getName('PartMan')}|/me pats`); + } + }, + onFoeFaint(target, source, effect) { + // Message happens when PartMan is on the enemy team + // Handled in Hydro's conditions + if (target.name === 'Hydrostatics') return; + this.add(`c:|${getName('PartMan')}|Skill issue`); + }, + onHit(target, source, move) { + if (!move.num) { + this.add(`c:|${getName('PartMan')}|That's what she said!`); + } + }, + innateName: "Skill Issue", + shortDesc: "Any move that does damage equal to this Pokemon's max HP fails.", + // onDamagePriority: 1, + onDamage(damage, target, source, effect) { + if (target.illusion) return; + if (effect?.effectType === 'Move' && damage >= target.maxhp) { + this.add('-activate', target, 'ability: Skill Issue'); + this.add(`c:|${getName('PartMan')}|THAT'S WHAT SHE SAID!`); + return false; + } + }, + }, + pastorgigas: { + noCopy: true, + onStart() { + this.add(`c:|${getName('Pastor Gigas')}|Turn back to God`); + }, + onSwitchOut() { + this.add(`c:|${getName('Pastor Gigas')}|I'll leave, but God stays forever`); + }, + onFaint() { + this.add(`c:|${getName('Pastor Gigas')}|I'm going to pray for you`); + }, + }, + peary: { + noCopy: true, + onStart() { + this.add(`c:|${getName('Peary')}|This bout to grind yalls gears`); + }, + onSwitchOut() { + this.add(`c:|${getName('Peary')}|Did my Part, no Man`); + }, + onFaint() { + this.add(`c:|${getName('Peary')}|Blood all on my gears... damn`); + }, + }, + phoopes: { + noCopy: true, + innateName: 'Gen 1 Special Stat', + desc: 'SpA stat changes also change SpD and vice versa.', + // implemented in scripts + onStart() { + this.add(`c:|${getName('phoopes')}|phoopes! (There It Is)`); + }, + onSwitchOut() { + this.add(`c:|${getName('phoopes')}|phoopes! (There He Goes)`); + }, + onFaint() { + this.add(`c:|${getName('phoopes')}|Jynx! Knock on wood`); + }, + }, + pissog: { + noCopy: true, + onStart() { + this.add(`c:|${getName('Pissog')}|Hi I'm Pissog ^^`); + }, + onSwitchOut() { + this.add(`c:|${getName('Pissog')}|^^ gossiP m'I iH`); + }, + onFaint() { + this.add(`c:|${getName('Pissog')}|Yes, there are two paths you can go by, but in the long run`); + }, + }, + pokemonvortex: { + noCopy: true, + onStart() { + this.add(`c:|${getName('pokemonvortex')}|i just like the bowtie`); + }, + onSwitchOut() { + this.add(`c:|${getName('pokemonvortex')}|ok`); + }, + onFaint() { + this.add(`c:|${getName('pokemonvortex')}|人不可貌相,海水不可斗量`); + }, + }, + princessautumn: { + noCopy: true, + onStart() { + this.add(`c:|${getName('Princess Autumn')}|good meowning, here's why you're wrong.`); + }, + onSwitchOut(pokemon) { + this.add(`c:|${getName('Princess Autumn')}|good nyight, I'm always right.`); + if (pokemon.illusion || !pokemon.status) return; + this.add('-curestatus', pokemon, pokemon.status, '[from] ability: Natural Cure'); + pokemon.clearStatus(); + }, + onFaint() { + this.add(`c:|${getName('Princess Autumn')}|We let TPP cook too hard...`); + }, + innateName: "Natural Cure", + }, + ptoad: { + noCopy: true, + onStart() { + this.add(`c:|${getName('ptoad')}|/me enters the stage`); + }, + onSwitchOut() { + this.add(`c:|${getName('ptoad')}|Taking 5!`); + }, + onFaint() { + this.add(`c:|${getName('ptoad')}|Who told you you're allowed to rain on my parade?`); + }, + }, + pulseks: { + noCopy: true, + onStart() { + this.add(`c:|${getName('Pulse_kS')}|Mid Skill, God Luck`); + }, + onSwitchOut() { + this.add(`c:|${getName('Pulse_kS')}|brb lemme run the numbers`); + }, + onFaint() { + this.add(`c:|${getName('Pulse_kS')}|If my model is accurate (it isn't)`); + }, + }, + pyro: { + noCopy: true, + onStart() { + this.add(`c:|${getName('PYRO')}|and I'm your host, the Supervillain`); + }, + onSwitchOut() { + this.add(`c:|${getName('PYRO')}|Operation: Lifesaver is in effect, as of right now`); + }, + onFaint() { + this.add(`c:|${getName('PYRO')}|Just remember ALL CAPS when you spell the man name...`); + }, + onSourceAfterFaint(length, target, source, effect) { + if (effect?.effectType === 'Move') { + if (effect.id === 'meatgrinder') { + this.add(`c:|${getName('PYRO')}|Tripping off the beat kinda, dripping off the meat grinder`); + return; + } + if (!source.m.msgPlayed) { + this.add(`c:|${getName('PYRO')}|This Villain was a ruthless mass conqueror, with aspirations to dominate the universe`); + source.m.msgPlayed = true; + } + } + }, + }, + quitequiet: { + noCopy: true, + onStart() { + this.add(`c:|${getName('Quite Quiet')}|what are we even doing here`); + }, + onFaint() { + this.add(`c:|${getName('Quite Quiet')}|hm`); + }, + }, + quziel: { + noCopy: true, + onStart() { + this.add(`c:|${getName('quziel')}|Gaze`); + }, + onSwitchOut() { + this.add(`c:|${getName('quziel')}|See y-disconnects`); + }, + onFaint() { + this.add(`c:|${getName('quziel')}|I am become Tilt`); + }, + }, + r8: { + noCopy: true, + onStart() { + this.add(`c:|${getName('R8')}|!randcat`); + }, + onSwitchOut() { + this.add(`c:|${getName('R8')}|wow emoji`); + }, + onFaint() { + this.add(`c:|${getName('R8')}|Getting KOed won't prevent me from making propaganda: https://www.smogon.com/forums/forums/national-dex-other-tiers.738/`); + }, + }, + rainshaft: { + noCopy: true, + onStart(pokemon) { + this.add(`c:|${getName('Rainshaft')}|Hello ${pokemon.side.name} and ${pokemon.side.foe.name} :P`); + }, + onSwitchOut() { + this.add(`c:|${getName('Rainshaft')}|Hope you got lucky there...`); + }, + onFaint() { + this.add(`c:|${getName('Rainshaft')}|You weren't lucky enough, join <> for more practice XD`); + }, + }, + ransei: { + noCopy: true, + onStart() { + this.add(`c:|${getName('Ransei')}|Heyo, I'm hosting a program known as Pokémon Lore Tutoring this generation and I was wondering if any of you guys would be interested in tutoring. Every generation of Pokémon lore is available for tutoring, however we are in need of tutors to start off with. If you are interested let me know. Oh yeah I'm also hosting a program known as OM Tutoring.`); + }, + onSwitchOut() { + this.add(`c:|${getName('Ransei')}|A perfect world of Pokémon has everything balanced, whether it's truth and ideals, life and death, time and space, or the organisms of nature and the organisms of whom were genetically engineered. All Pokémon are welcomed as long as they help maintain this balance. Remember this. It's what Arceus always wanted.`); + }, + onFaint() { + this.add(`c:|${getName('Ransei')}|Well, at least I tried. ripsei.`); + }, + }, + returntomonkey: { + noCopy: true, + onStart() { + this.add(`c:|${getName('ReturnToMonkey')}|Where banana`); + }, + onSwitchOut() { + this.add(`c:|${getName('ReturnToMonkey')}|**Monkey Scream**`); + }, + onFaint() { + this.add(`c:|${getName('ReturnToMonkey')}|Reject the humanity...if you dare...`); + }, + }, + rissoux: { + noCopy: true, + onStart() { + this.add(`c:|${getName('Rissoux')}|:squad:`); + }, + onFaint() { + this.add(`c:|${getName('Rissoux')}|Welcome to the Family`); + }, + }, + rsb: { + noCopy: true, + onStart(pokemon) { + this.add(`c:|${getName('RSB')}|Time to take a bite out of crime!`); + const dog = (this.toID(enemyStaff(pokemon))); + if (dog === 'rsb' || dog === 'shiloh' || dog === 'valerian' || dog === 'breadstycks' || dog === 'yuki') { + this.add(`c:|${getName('RSB')}|DOGGO!`); + } + }, + onSwitchOut() { + this.add(`c:|${getName('RSB')}|Requesting backup!`); + }, + onFaint() { + this.add(`c:|${getName('RSB')}|Officer down.`); + }, + onBasePowerPriority: 19, + onBasePower(basePower, attacker, defender, move) { + if (!attacker.illusion && move.flags['bite']) { + return this.chainModify(1.5); + } + }, + onTryHit(target, source, move) { + if (!target.illusion && target !== source && move.type === 'Fire') { + move.accuracy = true; + if (!target.addVolatile('flashfire')) { + this.add('-immune', target, '[from] ability: Flash Fire'); + } + return null; + } + }, + onEnd(pokemon) { + pokemon.removeVolatile('flashfire'); + }, + innateName: "Flash Fire + Strong Jaw", + shortDesc: "Flash Fire + Strong Jaw.", + }, + rumia: { + noCopy: true, + onStart(pokemon) { + if (enemyStaff(pokemon) === 'kolohe') { + this.add(`c:|${getName('Rumia')}|OMG who could that be (⁠●⁠♡⁠∀⁠♡⁠)`); + } else { + this.add(`c:|${getName('Rumia')}|is the mon in front of me the edible kind?`); + } + }, + onSwitchOut(pokemon) { + if (enemyStaff(pokemon) === 'kolohe') { + this.add(`c:|${getName('Rumia')}|i cant bring myself to do this...`); + } else { + this.add(`c:|${getName('Rumia')}|brb ^_^`); + } + }, + onFaint(pokemon) { + if (enemyStaff(pokemon) === 'kolohe') { + this.add(`c:|${getName('Rumia')}|this is the best way to go out...`); + } else { + this.add(`c:|${getName('Rumia')}|is that sooooo...`); + } + }, + }, + scotteh: { + noCopy: true, + onStart() { + this.add(`c:|${getName('Scotteh')}|\`\`Compilation completed successfully. Executing...\`\``); + }, + onSwitchOut() { + this.add(`c:|${getName('Scotteh')}|\`\`Execution temporarily paused.\`\``); + }, + onFaint() { + this.add(`c:|${getName('Scotteh')}|\`\`Segmentation fault (core dumped)\`\``); + }, + }, + sexymalasada: { + noCopy: true, + onStart(pokemon) { + switch (this.toID(enemyStaff(pokemon))) { + case 'wigglytree': + this.add(`c:|${getName('SexyMalasada')}|Hey Wiggles! I made pizza again! Wanna learn more RNG btw?`); + break; + case 'appletunalamode': + this.add(`c:|${getName('SexyMalasada')}|And now you must learn how to RNG with nothing but a sundial for a timer! __Trust me!__`); + break; + case 'loethalion': + this.add(`c:|${getName('SexyMalasada')}|For the hundredth time Loe, check. the. pins.`); + break; + case 'nicolic': + this.add(`c:|${getName('SexyMalasada')}|Hi Nic! Why you keep postponing learning old-gen RNG? q_q`); + break; + case 'swiffix': + this.add(`c:|${getName('SexyMalasada')}|....something smells in here`); + break; + case 'mex': + this.add(`c:|${getName('SexyMalasada')}|Today is the day you finally learn RNG Mex, deal with it!`); + break; + case 'clefable': + this.add(`c:|${getName('SexyMalasada')}|Oi! I'm not hacking, it's RNG!`); + break; + case 'billo': + this.add(`c:|${getName('SexyMalasada')}|Billo help! The tool isn't working again q_q`); + break; + default: + this.add(`c:|${getName('SexyMalasada')}|Hello! Do you have some time to talk about RNGesus and its awesome teachings: The Art of RNG abuse??`); + break; + } + }, + onSwitchOut(pokemon) { + switch (this.toID(enemyStaff(pokemon))) { + case 'loethalion': + this.add(`c:|${getName('SexyMalasada')}|fricking heck`); + break; + case 'swiffix': + this.add(`c:|${getName('SexyMalasada')}|Just shower already!`); + break; + case 'billo': + this.add(`c:|${getName('SexyMalasada')}|Fiiiine I'll read the wiki...`); + break; + default: + this.add(`c:|${getName('SexyMalasada')}|Crap! I missed my frame... Resetting... q_q`); + break; + } + }, + onFaint(pokemon) { + switch (this.toID(enemyStaff(pokemon))) { + case 'loethalion': + this.add(`c:|${getName('SexyMalasada')}|fricking heck`); + break; + case 'swiffix': + this.add(`c:|${getName('SexyMalasada')}|Just shower already!`); + break; + case 'billo': + this.add(`c:|${getName('SexyMalasada')}|Fiiiine I'll read the wiki...`); + break; + default: + this.add(`c:|${getName('SexyMalasada')}|Well then.. have fun soft-resetting for your shiny! >:( Cya on the flipside 🕶️`); + break; + } + }, + }, + sharpclaw: { + noCopy: true, + onStart(pokemon) { + if (pokemon.species.name === 'Sneasel') { + this.add(`c:|${getName('sharp_claw')}|Hi, I'm Tumble! hf :D`); + } else { + this.add(`c:|${getName('sharp_claw')}|Hi, I'm Rough! gl >:)`); + } + }, + onSwitchOut(pokemon) { + if (pokemon.species.name === 'Sneasel') { + this.add(`c:|${getName('sharp_claw')}|brb, getting my brother :3`); + if (pokemon.illusion) return; + changeSet(this, pokemon, ssbSets['sharp_claw-Rough']); + } else { + this.add(`c:|${getName('sharp_claw')}|brb, getting my sister c:`); + if (pokemon.illusion) return; + changeSet(this, pokemon, ssbSets['sharp_claw']); + } + }, + onFaint(pokemon) { + if (pokemon.species.name === 'Sneasel') { + this.add(`c:|${getName('sharp_claw')}|ur no fun ;~;`); + } else { + this.add(`c:|${getName('sharp_claw')}|ur no fun T_T`); + } + }, + innateName: "Rough and Tumble", + shortDesc: "Changes Sneasel forme on switch out.", + }, + siegfried: { + noCopy: true, + onStart() { + this.add(`c:|${getName('Siegfried')}|You say goodbye and I say hello`); + }, + onSwitchOut() { + this.add(`c:|${getName('Siegfried')}|Oh, I get by with a little help from my friends.`); + }, + onFaint() { + this.add(`c:|${getName('Siegfried')}|Living is easy with eyes closed.`); + }, + }, + sificon: { + noCopy: true, + onStart() { + this.add(`c:|${getName('Sificon~')}|gm (it's 4pm and I woke up just now)`); + }, + onSwitchOut() { + this.add(`c:|${getName('Sificon~')}|guess I'll go to bed (we all know that I won't)`); + }, + onFaint() { + this.add(`c:|${getName('Sificon~')}|oop`); + }, + }, + skies: { + noCopy: true, + onStart() { + this.add(`c:|${getName('skies')}|the baddest in the room, so tell em to make room... `); + }, + onSwitchOut() { + this.add(`c:|${getName('skies')}|u thought i was feelin u?`); + }, + onFaint() { + this.add(`c:|${getName('skies')}|what did i do? like?`); + }, + }, + snake: { + noCopy: true, + onStart() { + this.add(`c:|${getName('snake')}|CAP Concept: Pure Utility Pokemon`); + }, + onSwitchOut() { + this.add(`c:|${getName('snake')}|CAP is a community focused project that creates singular Pokemon through structured Smogon based discussion threads. We define a concept to build around and proceed through various stages to determine typing, ability, stats, and movepool to complement that concept. We also run stages to determine a CAP's art, name, Pokedex entry, and sprite, so even if you're not a competitive Pokemon person you can get involved. At the end of each process we implement each CAP here on Pokemon Showdown!, where they are made available with the rest of our creations in the CAP metagame, found under 'S/V Singles'.`); + }, + onFaint() { + this.add(`c:|${getName('snake')}|CAP does not accept personal creations. This refers to any idea for a Pokemon that already has predefined typing, stats, abilities, movepool, name, art, pokedex entries, weight, height, or even generic themes such as "rabbit" or "angry". These facets of a Pokemon are all decided through community discussion in CAP during the CAP process. If you think you have an idea for a Pokemon that does not define these features, you may have a concept. CAP bases our Pokemon around concepts that look to explore the mechanics behind Pokemon and we take open submissions whenever we start a new project. Examples of past concepts include Perfect Sketch User, Momentum, Trapping mechanics, delayed move user, and weather enabler.`); + }, + }, + softflex: { + noCopy: true, + onStart() { + this.add(`c:|${getName('Soft Flex')}|*beep beep beep*`); + }, + onSwitchOut() { + this.add(`c:|${getName('Soft Flex')}|*whrrrr*`); + }, + }, + solaroslunaris: { + noCopy: true, + onStart() { + this.add(`c:|${getName('Solaros & Lunaris')}|Get a taste of this!`); + }, + onSwitchOut() { + this.add(`c:|${getName('Solaros & Lunaris')}|Too hot to handle!`); + }, + }, + spiderz: { + noCopy: true, + onStart() { + this.add(`c:|${getName('Spiderz')}|whats good gangy`); + }, + onSwitchOut() { + this.add(`c:|${getName('Spiderz')}|im moving DIFFERENT`); + }, + onFaint() { + this.add(`c:|${getName('Spiderz')}|fuck 12`); + }, + }, + spoo: { + noCopy: true, + onStart() { + this.add(`c:|${getName('spoo')}|hemogoblin`); + }, + onSwitchOut() { + this.add(`c:|${getName('spoo')}|danger`); + }, + onFaint() { + this.add(`c:|${getName('spoo')}|dies`); + }, + }, + steorra: { + noCopy: true, + onStart() { + this.add(`c:|${getName('Steorra')}|BOO`); + }, + onSwitchOut() { + this.add(`c:|${getName('Steorra')}|Into the shadows I go`); + }, + onFaint() { + this.add(`c:|${getName('Steorra')}|I'm dead but not really (lol ghost)`); + }, + }, + struchni: { + noCopy: true, + onStart() { + this.add(`c:|${getName('Struchni')}|~tt newgame`); + }, + onSwitchOut() { + this.add(`c:|${getName('Struchni')}|~tt endgame`); + }, + onFaint() { + this.add(`c:|${getName('Struchni')}|**selfveto**`); + }, + }, + sulo: { + noCopy: true, + onStart() { + this.add(`c:|${getName('Sulo')}|everybody is so damn dramatic. me included.`); + }, + onSwitchOut() { + this.add(`c:|${getName('Sulo')}|afk sorry guys brb`); + }, + onFaint() { + this.add(`c:|${getName('Sulo')}|Charon, take me home...`); + }, + }, + swiffix: { + noCopy: true, + onStart() { + this.add(`c:|${getName('Swiffix')}|:uwupip:`); + }, + onSwitchOut() { + this.add(`c:|${getName('Swiffix')}|brb, gonna get some ketchup for my pizza`); + }, + onFaint() { + this.add(`c:|${getName('Swiffix')}|Remember: it's pp, not pfp!`); + }, + innateName: "Skill Link", + onModifyMove(move, pokemon, target) { + if (pokemon.illusion) return; + if (move.multihit && Array.isArray(move.multihit) && move.multihit.length) { + move.multihit = move.multihit[1]; + } + if (move.multiaccuracy) { + delete move.multiaccuracy; + } + }, + }, + syrinix: { + noCopy: true, + onStart() { + this.add(`c:|${getName('Syrinix')}|You kept me like a secret but I kept you like an oath`); + }, + onSwitchOut() { + this.add(`c:|${getName('Syrinix')}|They don't think it be like it is, but it do`); + }, + onFaint() { + this.add(`c:|${getName('Syrinix')}|Aight Imma head out`); + }, + }, + teclis: { + noCopy: true, + onStart() { + this.add(`c:|${getName('Teclis')}|Thanks for having me.`); + }, + onSwitchOut() { + this.add(`c:|${getName('Teclis')}|Until next time!`); + }, + onFaint() { + this.add(`c:|${getName('Teclis')}|This was my last dance.`); + }, + }, + tenshi: { + noCopy: true, + onStart(pokemon) { + switch (this.toID(enemyStaff(pokemon))) { + case 'blitz': + this.add(`c:|${getName('Tenshi')}|le fishe`); + break; + case 'ut': + case 'clouds': + this.add(`c:|${getName('Tenshi')}|birbs cannot save u from SAND`); + break; + default: + this.add(`c:|${getName('Tenshi')}|he SLEUTHING`); + } + }, + onSwitchOut(pokemon) { + this.add(`c:|${getName('Tenshi')}|omg no SAND save him! :(`); + const replacementIndex = Math.max( + pokemon.moves.indexOf('pyroball'), + pokemon.moves.indexOf('aquatail'), + pokemon.moves.indexOf('tripleaxel'), + pokemon.moves.indexOf('stoneedge') + ); + if (replacementIndex < 0) { + return; + } + const replacement = this.dex.moves.get('dynamicpunch'); + const replacementMove = { + move: replacement.name, + id: replacement.id, + pp: replacement.pp, + maxpp: replacement.pp, + target: replacement.target, + disabled: false, + used: false, + }; + pokemon.moveSlots[replacementIndex] = replacementMove; + pokemon.baseMoveSlots[replacementIndex] = replacementMove; + }, + onFaint(pokemon) { + switch (this.toID(enemyStaff(pokemon))) { + case 'blitz': + this.add(`c:|${getName('Tenshi')}|YOU KILLED YOUR SON`); + break; + case 'ut': + this.add(`c:|${getName('Tenshi')}|worryrex`); + break; + case 'clouds': + this.add(`c:|${getName('Tenshi')}|SAND is no longer in the air tonight :(`); + break; + default: + this.add(`c:|${getName('Tenshi')}|Wait no that's illegal`); + } + }, + }, + tico: { + noCopy: true, + onStart(pokemon) { + this.add(`c:|${getName('Tico')}|oie`); + if (pokemon.illusion) return; + this.add('-ability', pokemon, 'Mold Breaker'); + }, + onSwitchOut() { + this.add(`c:|${getName('Tico')}|t+`); + }, + onFaint() { + this.add(`c:|${getName('Tico')}|It's been 3,000 years…`); + }, + onModifyMove(move, pokemon) { + if (pokemon.illusion) return; + move.ignoreAbility = true; + }, + innateName: "Mold Breaker", + }, + thejesucristoosama: { + noCopy: true, + onStart() { + this.add(`c:|${getName('TheJesucristoOsAma')}|In the name of the Father, the Son and the Holy Spirit. I bless you, Amen.`); + }, + onSwitchOut() { + this.add(`c:|${getName('TheJesucristoOsAma')}|Oh well, I think it's time to call my apostles.`); + }, + onFaint() { + this.add(`c:|${getName('TheJesucristoOsAma')}|And that's how I've died for the third time, I'll go to host a game at eventos.`); + }, + }, + traceuser: { + noCopy: true, + onStart() { + this.add(`c:|${getName('trace')}|I'm both the beginning and the end.`); + }, + onSwitchOut() { + this.add(`c:|${getName('trace')}|Why does the violence never end?`); + }, + onFaint() { + this.add(`c:|${getName('trace')}|How disappointingly short a dream lasts.`); + }, + }, + tuthur: { + noCopy: true, + onStart() { + this.add(`c:|${getName('Tuthur')}|QUEUE !`); + }, + onSwitchOut() { + this.add(`c:|${getName('Tuthur')}|feur`); + }, + onFaint() { + this.add(`c:|${getName('Tuthur')}|this wouldn't have gone like this if we'd played kunc`); + }, + }, + twoofroses: { + noCopy: true, + onStart(pokemon) { + this.add(`c:|${getName('Two of Roses')}|I'm here! I'm uhh- Yes! Also hi! Happy to be here.`); + this.singleEvent('WeatherChange', this.effect, this.effectState, pokemon); + this.singleEvent('TerrainChange', this.effect, this.effectState, pokemon); + }, + onSwitchOut() { + this.add(`c:|${getName('Two of Roses')}|Pfft! I prefer lurking anyway.`); + }, + onFaint() { + this.add(`c:|${getName('Two of Roses')}|It matters not how much we try but only that we try. For if the tides swell the dunes of a timeless existence, and our strength wanes in the coming unlight- And if we are to be as the forsaken namesakes before us, for the yesterday that never came and the tomorrow that is forever promised, know this; We dilly, so they do not dally...`); + }, + innateName: "Wonderer", + shortDesc: "This Pokemon's secondary type changes based on the active weather or terrain, monotype if neither.", + onWeatherChange(target, source, sourceEffect) { + const currentWeather = this.field.getWeather().id; + const currentTerrain = this.field.getTerrain().id; + let type; + if (!currentWeather && !target.hasType('Dark')) { + if (currentTerrain) { + this.singleEvent('TerrainChange', this.effect, this.effectState, target); + return; + } + type = 'Dark'; + } else if (currentWeather) { + if (['raindance', 'primordialsea'].includes(currentWeather) && !target.hasType('Water')) { + type = 'Water'; + } else if (['sunnyday', 'desolateland'].includes(currentWeather) && !target.hasType('Fire')) { + type = 'Fire'; + } else if (['sandstorm', 'deserteddunes'].includes(currentWeather) && !target.hasType('Rock')) { + type = 'Rock'; + } else if (['hail', 'snow'].includes(currentWeather) && !target.hasType('Ice')) { + type = 'Ice'; + } else { + // do nothing if it's not the 4 primary weathers...unless there are more? + } + } + if (type && !target.terastallized) { + target.addType(type); + this.add('-start', target, 'typeadd', type, '[from] ability: Wonderer'); + } + }, + onTerrainChange(target, source, sourceEffect) { + const currentWeather = this.field.getWeather().id; + const currentTerrain = this.field.getTerrain().id; + let type; + if (!currentTerrain && !target.hasType('Dark')) { + if (currentWeather) { + this.singleEvent('WeatherChange', this.effect, this.effectState, target); + return; + } + type = 'Dark'; + } else if (currentTerrain) { + if (currentTerrain === 'electricterrain') { + target.setType('Electric'); + type = ''; + } else if (currentTerrain === 'psychicterrain' && !target.hasType('Psychic')) { + type = 'Psychic'; + } else if (currentTerrain === 'grassyterrain' && !target.hasType('Grass')) { + type = 'Grass'; + } else if (currentTerrain === 'mistyterrain' && !target.hasType('Fairy')) { + type = 'Fairy'; + } else if (!target.hasType('Ghost')) { // custom terrains + type = 'Ghost'; + } + } + if (type && !target.terastallized) { + target.addType(type); + this.add('-start', target, 'typeadd', type, '[from] ability: Wonderer'); + } + }, + }, + ut: { + noCopy: true, + onStart() { + this.add(`c:|${getName('UT')}|__being this young is art, aquamarine__`); + }, + onSwitchOut() { + this.add(`c:|${getName('UT')}|__make sure nobody sees you leave__`); + }, + onFaint() { + this.add(`c:|${getName('UT')}|__swaying as the room burnded down__`); + }, + }, + valerian: { + noCopy: true, + onStart() { + this.add(`c:|${getName('Valerian ✿ ♡')}|Lucario's shiny should've been red.`); + }, + onSwitchOut() { + this.add(`c:|${getName('Valerian ✿ ♡')}|As a wise man once said, "I'll be back".`); + }, + onFaint() { + this.add(`c:|${getName('Valerian ✿ ♡')}|My name is based on a flower, NOT the movie!`); + }, + }, + venous: { + noCopy: true, + onStart() { + this.add(`c:|${getName('Venous')}|bro the flute on stal is bonkers`); + }, + onSwitchOut() { + this.add(`c:|${getName('2013 hindi room')}|when i said tine wins i didnt mean now`); + this.add(`c:|${getName('Venous')}|dw watch this`); + }, + onFaint() { + this.add(`c:|${getName('Venous')}|teachin bitches how to swim`); + }, + }, + violet: { + noCopy: true, + onStart() { + this.add(`c:|${getName('Vio͜͡let')}|I'm not hating you just decided to be wrong`); + }, + onSwitchOut() { + this.add(`c:|${getName('Vio͜͡let')}|anyway…`); + }, + onFaint() { + this.add(`c:|${getName('Vio͜͡let')}|blatantly carried by cheating but you'll still find a way to downplay`); + }, + innateName: "Do No Evil", + shortDesc: "When this Pokemon uses an attacking move, it transforms into the Ogerpon form of the corresponding type.", + onModifyMove(move, attacker, defender) { + if (attacker.species.baseSpecies !== 'Ogerpon' || attacker.transformed) return; + let targetForme = 'Ogerpon'; + switch (move.type) { + case 'Rock': + targetForme += '-Cornerstone'; + break; + case 'Fire': + targetForme += '-Hearthflame'; + break; + case 'Water': + targetForme += '-Wellspring'; + break; + case 'Grass': + // Do nothing + break; + default: + return; + } + if (attacker.terastallized) targetForme += (targetForme === 'Ogerpon' ? '-Teal' : '') + '-Tera'; + if (attacker.species.name !== targetForme) { + this.add('-activate', attacker, 'ability: Do No Evil'); + attacker.formeChange(targetForme); + } + }, + }, + vistar: { + noCopy: true, + onStart() { + this.add(`c:|${getName('Vistar')}|Oh hi! (0_0)/`); + }, + onSwitchOut() { + this.add(`c:|${getName('Vistar')}|I'll go on a break, wait for me!`); + }, + onFaint() { + this.add(`c:|${getName('Vistar')}|So... this is how my career ends...`); + }, + }, + vmnunes: { + noCopy: true, + }, + warriorgallade: { + noCopy: true, + onStart(pokemon) { + this.add(`c:|${getName('WarriorGallade')}|i wanted to proc berries, but it seems that i was better at proc rastinating instead. nom nom nom.`); + if (this.toID(enemyStaff(pokemon)) === 'aqrator') { + this.add(`c:|${getName('WarriorGallade')}|Hi Tori, how goes your conquest?`); + } + // innate + if (pokemon.illusion) return; + pokemon.abilityState.gluttony = true; + this.add('-activate', pokemon, 'ability: Nutrient Boost'); + this.boost({def: 1, spd: 1}, pokemon); + }, + onSwitchOut() { + this.add(`c:|${getName('WarriorGallade')}|amidst this tactical retreat, you didn't think i forgot about the pokeradar, did you? you can bet that my return with even more questions will be __eventful__ :3`); + }, + onFaint() { + this.add(`c:|${getName('WarriorGallade')}|a wig flew, and now i must bid you adieu. farewell my berries accrued, for this is the end of my etude.`); + }, + onSourceAfterFaint() { + this.add(`c:|${getName('WarriorGallade')}|Triumphant through trouncing tough, tenacious threats today, though testing 212 takeovers tarry. Theorizing these techniques tends to torrid, terribly tiresome tabulations, therefore torrential tactics traverse thorough thoughts.`); + }, + innateName: "Nutrient Boost", + shortDesc: "Gluttony + Thick Fat + Neuroforce + +1 Def/Sp. Def boost.", + onDamage(item, pokemon) { + if (pokemon.illusion) return; + pokemon.abilityState.gluttony = true; + }, + onSourceModifyAtkPriority: 6, + onSourceModifyAtk(atk, attacker, defender, move) { + if (defender.illusion) return; + if (move.type === 'Ice' || move.type === 'Fire') { + this.debug('Thick Fat weaken'); + return this.chainModify(0.5); + } + }, + onSourceModifySpAPriority: 5, + onSourceModifySpA(atk, attacker, defender, move) { + if (defender.illusion) return; + if (move.type === 'Ice' || move.type === 'Fire') { + this.debug('Thick Fat weaken'); + return this.chainModify(0.5); + } + }, + onModifyDamage(damage, source, target, move) { + if (source.illusion) return; + if (move && target.getMoveHitData(move).typeMod > 0) { + return this.chainModify([5120, 4096]); + } + }, + }, + waves: { + noCopy: true, + onStart() { + this.add(`c:|${getName('Waves')}|Nice opinion, one small issue: 252+ SpA Wailord Water Spout (150 BP) vs. 0 HP / 0- SpD Your Argument in Rain: 1202-1416 (413 - 486.5%) -- guaranteed OHKO.`); + }, + onSwitchOut() { + this.add(`c:|${getName('Waves')}|Ocean man, take me by the hand.`); + }, + onFaint() { + this.add(`c:|${getName('Waves')}|/me waves goodbye.`); + }, + }, + wigglytree: { + noCopy: true, + onStart() { + this.add(`c:|${getName('WigglyTree')}|hi ur qt :3`); + }, + onSwitchOut() { + this.add(`c:|${getName('WigglyTree')}|Is that a watering can I see?`); + }, + onFaint() { + this.add(`c:|${getName('WigglyTree')}|Keep wiggling!`); + }, + }, + xprienzo: { + noCopy: true, + onStart() { + this.add(`c:|${getName('XpRienzo ☑◡☑')}|Would I lie to you?`); + }, + onSwitchOut() { + this.add(`c:|${getName('XpRienzo ☑◡☑')}|What? You don't trust me? >.>`); + }, + onFaint() { + this.add(`c:|${getName('XpRienzo ☑◡☑')}|Bleh, lame.`); + }, + }, + xy01: { + noCopy: true, + }, + yeetdabxd: { + noCopy: true, + onStart(pokemon) { + this.add(`c:|${getName('yeet dab xd')}|Ah, welcome~! The merchandise you have chosen will cost your soul. Is that acceptable?`); + }, + onSwitchOut() { + this.add(`c:|${getName('yeet dab xd')}|brb mum's getting the camera`); + }, + onFaint(pokemon) { + if (pokemon.m.seedActivated) return; + this.add(`c:|${getName('yeet dab xd')}|wait no you didn't join QW yet`); + }, + }, + yellowpaint: { + noCopy: true, + onStart() { + this.add(`c:|${getName('Yellow Paint')}|cheers`); + }, + onSwitchOut() { + this.add(`c:|${getName('Yellow Paint')}|luckynbad`); + }, + onFaint() { + this.add(`c:|${getName('Yellow Paint')}|The canvas is filled with different screams.`); + }, + onModifyMove(move) { + if (move.id === 'iondeluge') { + move.onHitField = function () { + this.add(`c:|${getName('Yellow Paint')}|Paint it Yellow!`); + }; + } + }, + }, + yuki: { + noCopy: true, + innateName: "Snow Warning", + onStart(source) { + if (source.illusion) return; + this.field.setWeather('snow', source, this.dex.abilities.get('snowwarning')); + }, + }, + yveltalnl: { + noCopy: true, + onStart(pokemon) { + this.add(`c:|${getName('YveltalNL')}|It's over ${pokemon.side.foe.name}, I have the high ground!`); + }, + onSwitchOut() { + this.add(`c:|${getName('YveltalNL')}|brb playing a draft game rq`); + }, + onFaint() { + this.add(`c:|${getName('YveltalNL')}|whatever i'll go watch football`); + }, + }, + za: { + noCopy: true, + onStart() { + this.add(`c:|${getName('za')}|Benvenuto`); + }, + onSwitchOut() { + this.add(`c:|${getName('za')}|mish`); + }, + onFaint() { + this.add(`c:|${getName('za')}|!track Between the Buried and Me - Sun Of Nothing - 2020 Remix / Remaster`); + }, + }, + zalm: { + noCopy: true, + onStart() { + this.add(`c:|${getName('Zalm')}|<(:O)00000>`); + }, + onSwitchOut() { + this.add(`c:|${getName('Zalm')}|brb gonna check if my lasagne didn't explode e-e`); + }, + onFaint() { + this.add(`c:|${getName('Zalm')}|I should have picked an actual fish pokémon like veluza instead...`); + }, + }, + zarel: { + noCopy: true, + }, + zee: { + noCopy: true, + onStart() { + this.add(`c:|${getName('zee')}|So is this your first VGC tournament?`); + }, + onSwitchOut() { + this.add(`c:|${getName('zee')}|Sorry, I've got a plane to catch!`); + }, + onFaint() { + this.add(`c:|${getName('zee')}|Hey everyone it's been a great time working with you all in this Super Staff Bros battle but I think it's the right time for me to step down. Thank you all and see you around.`); + }, + }, + zoro: { + noCopy: true, + onStart() { + this.add(`c:|${getName('zoro')}|gmeow`); + }, + onSwitchOut() { + this.add(`c:|${getName('zoro')}|brb I want to chase some yarn`); + }, + onFaint() { + this.add(`c:|${getName('zoro')}|time to take a cat nap`); + }, + }, + + // Custom effects + + // Clementine + flipped: { + name: 'Flipped', + onStart(target) { + this.add('-start', target, 'flipped'); + }, + onEnd(target) { + this.add('-end', target, 'flipped'); + }, + }, + + // dhelmise + bioticorbself: { + name: "Biotic Orb (Self)", + // side condition + effectType: 'Condition', + duration: 4, + onSideStart(side, source) { + this.effectState.source = source; + this.add('-sidestart', side, 'move: Biotic Orb (Self)'); + }, + onResidualOrder: 5, + onResidualSubOrder: 1, + onResidual(target, pokemon, effect) { + const source = this.effectState.source; + const quotes: string[] = [ + `A cure for all that ails.`, + `A sip for the parched.`, + `Be nourished!`, + `I offer something more.`, + `Receive my aid.`, + `Be nurtured.`, + `Know mother's kindness.`, + `A salve for all that ails.`, + `An eldritch blessing.`, + `Flourish.`, + `Now feast.`, + `Recover your strength.`, + ]; + if (target.hp) { + let amount = 65; + if (this.effectState.duration === 4) amount = 40; + this.heal(amount, target, source, effect); + } + this.add(`c:|${getName((source.illusion || source).name)}|${this.sample(quotes)}`); + }, + onSideResidualOrder: 26, + onSideResidualSubOrder: 5, + onSideEnd(side) { + this.add('-sideend', side, 'move: Biotic Orb (Self)'); + }, + }, + bioticorbfoe: { + name: "Biotic Orb (Foe)", + // side condition + effectType: 'Condition', + duration: 4, + onSideStart(side, source) { + this.effectState.source = source; + this.add('-sidestart', side, 'move: Biotic Orb (Foe)'); + }, + onResidualOrder: 5, + onResidualSubOrder: 1, + onResidual(target, pokemon, effect) { + const source = this.effectState.source; + let quotes: string[] = [ + `A taste of poison.`, + `Misery made manifest.`, + `Pain is inevitable.`, + `You cannot escape me!`, + `Your end is within my reach.`, + `Bí ag stangadh leat.`, + `Ruination is imminent.`, + `The weak can fend for themselves.`, + `Know darkness.`, + `Let shadow consume you.`, + `Your pain will be endless.`, + ]; + if (target.hp) { + this.damage(50, target, source, effect); + } + if (target.fainted || target.hp <= 0) { + quotes = [ + `Expect the unexpected.`, + `In chaos lies opportunity.`, + `Mind your surroundings.`, + `Perhaps next time you should not stand in the way of the orb.`, + `A torturous gift.`, + `The darkness will find them.`, + `The gloom takes you.`, + ]; + } + this.add(`c:|${getName((source.illusion || source).name)}|${this.sample(quotes)}`); + }, + onSideResidualOrder: 26, + onSideResidualSubOrder: 5, + onSideEnd(side) { + this.add('-sideend', side, 'move: Biotic Orb (Foe)'); + }, + }, + + // EasyOnTheHills + snack: { + name: "Snack", + duration: 3, + onStart(target) { + this.add('-start', target, 'snack'); + }, + onEnd(target) { + this.add('-end', target, 'snack'); + }, + onResidualOrder: 5, + onResidualSubOrder: 4, + onResidual(target, source, effect) { + this.heal(target.baseMaxhp / 4); + }, + }, + + // Elliot + beefed: { + name: "Beefed", + onStart(target) { + this.add('-start', target, 'beefed'); + }, + onEnd(target) { + this.add('-end', target, 'beefed'); + }, + onModifyMovePriority: -1, + onModifyMove(move, pokemon, target) { + if (!target || !this.checkMoveMakesContact(move, pokemon, target) || move.category === "Status") return; + if (!move.secondaries) move.secondaries = []; + move.secondaries.push({ + chance: 30, + status: 'brn', + }); + }, + onDamagingHitOrder: 1, + onDamagingHit(damage, target, source, move) { + if (this.checkMoveMakesContact(move, source, target, true)) { + this.damage(source.baseMaxhp / 8, source, target); + } + if (this.checkMoveMakesContact(move, source, target) && this.randomChance(3, 10)) { + source.trySetStatus('brn', target); + } + }, + onResidual(target, source, effect) { + this.heal(target.baseMaxhp / 8); + }, + onSourceAfterFaint(length, target, source, effect) { + this.add(`c:|${getName('Elliot')}|Get Bovriled`); + }, + }, + boiled: { + name: "Boiled", + onStart(target) { + this.add('-start', target, 'boiled'); + }, + onEnd(target) { + this.add('-end', target, 'boiled'); + }, + onModifySpAPriority: 5, + onModifySpA(relayVar, source, target, move) { + return this.chainModify(1.5); + }, + onModifyMovePriority: -1, + onModifyMove(move, pokemon, target) { + if (!target) return; + if (move.category !== "Status") { + if (!move.secondaries) move.secondaries = []; + move.secondaries.push({ + chance: 30, + status: 'brn', + }); + } + }, + }, + + // Elly + stormsurge: { + name: 'StormSurge', + effectType: 'Weather', + duration: 5, + durationCallback(source, effect) { + if (source?.hasItem('damprock')) { + return 8; + } + return 5; + }, + onEffectivenessPriority: -1, + onEffectiveness(typeMod, target, type, move) { + if (move?.effectType === 'Move' && move.category !== 'Status' && type === 'Flying' && typeMod > 0) { + this.add('-fieldactivate', 'Storm Surge'); + return 0; + } + }, + onWeatherModifyDamage(damage, attacker, defender, move) { + if (defender.hasItem('utilityumbrella')) return; + if (move.flags['wind']) { + this.debug('Storm Surge wind boost'); + return this.chainModify(1.2); + } + if (move.type === 'Water') { + this.debug('Storm Surge water boost'); + return this.chainModify(1.5); + } + if (move.type === 'Fire') { + this.debug('Storm Surge fire suppress'); + return this.chainModify(0.5); + } + }, + onAccuracy(accuracy, attacker, defender, move) { + if (move?.flags['wind'] && !attacker.hasItem('utilityumbrella')) return true; + return accuracy; + }, + onFieldStart(battle, source, effect) { + if (effect?.effectType === 'Ability') { + if (this.gen <= 5) this.effectState.duration = 0; + this.add('-weather', 'StormSurge', '[from] ability: ' + effect.name, '[of] ' + source); + } else { + this.add('-weather', 'StormSurge'); + } + }, + onImmunity(type, pokemon) { + if (pokemon.hasItem('utilityumbrella')) return; + if (type === 'frz') return false; + }, + onFieldResidualOrder: 1, + onFieldResidual() { + this.add('-weather', 'StormSurge', '[upkeep]'); + this.eachEvent('Weather'); + }, + onFieldEnd() { + this.add('-weather', 'none'); + }, + }, + + // kenn + deserteddunes: { + name: 'DesertedDunes', + effectType: 'Weather', + duration: 0, + onEffectivenessPriority: -1, + onEffectiveness(typeMod, target, type, move) { + if (move?.effectType === 'Move' && move.category !== 'Status' && type === 'Rock' && typeMod > 0) { + this.add('-fieldactivate', 'Deserted Dunes'); + return 0; + } + }, + onModifySpDPriority: 10, + onModifySpD(spd, pokemon) { + if (pokemon.hasType('Rock') && this.field.isWeather('deserteddunes')) { + return this.modify(spd, 1.5); + } + }, + onFieldStart(field, source, effect) { + this.add('-weather', 'DesertedDunes', '[from] ability: ' + effect.name, '[of] ' + source); + }, + onFieldResidualOrder: 1, + onFieldResidual() { + this.add('-weather', 'DesertedDunes', '[upkeep]'); + this.eachEvent('Weather'); + }, + onWeather(target) { + this.damage(target.baseMaxhp / 16); + }, + onFieldEnd() { + this.add('-weather', 'none'); + }, + }, + + // Neko + catstampofapproval: { + name: "Cat Stamp of Approval", + noCopy: true, + onStart(target) { + this.add('-start', target, 'Cat Stamp of Approval'); + this.effectState.bestStat = target.getBestStat(false, true); + }, + onEnd(target) { + this.add('-end', target, 'Cat Stamp of Approval'); + }, + onModifyAtkPriority: 5, + onModifyAtk(atk, pokemon) { + if (this.effectState.bestStat !== 'atk' || pokemon.ignoringAbility()) return; + this.debug('Cat Stamp of Approval atk boost'); + return this.chainModify([5325, 4096]); + }, + onModifyDefPriority: 6, + onModifyDef(def, pokemon) { + if (this.effectState.bestStat !== 'def' || pokemon.ignoringAbility()) return; + this.debug('Cat Stamp of Approval def boost'); + return this.chainModify([5325, 4096]); + }, + onModifySpAPriority: 5, + onModifySpA(spa, pokemon) { + if (this.effectState.bestStat !== 'spa' || pokemon.ignoringAbility()) return; + this.debug('Cat Stamp of Approval spa boost'); + return this.chainModify([5325, 4096]); + }, + onModifySpDPriority: 6, + onModifySpD(spd, pokemon) { + if (this.effectState.bestStat !== 'spd' || pokemon.ignoringAbility()) return; + this.debug('Cat Stamp of Approval spd boost'); + return this.chainModify([5325, 4096]); + }, + onModifySpe(spe, pokemon) { + if (this.effectState.bestStat !== 'spe' || pokemon.ignoringAbility()) return; + this.debug('Cat Stamp of Approval spe boost'); + return this.chainModify(1.5); + }, + }, + + // Effects needed to be overriden for things to happen + attract: { + onStart(pokemon, source, effect) { + if (!(pokemon.gender === 'M' && source.gender === 'F') && !(pokemon.gender === 'F' && source.gender === 'M')) { + if (!['The Love Of Christ', ':3'].includes(effect.name)) { + this.debug('incompatible gender'); + return false; + } + } + if (!this.runEvent('Attract', pokemon, source)) { + this.debug('Attract event failed'); + return false; + } + + if (effect.name === 'Cute Charm') { + this.add('-start', pokemon, 'Attract', '[from] ability: Cute Charm', '[of] ' + source); + } else if (effect.name === 'Destiny Knot') { + this.add('-start', pokemon, 'Attract', '[from] item: Destiny Knot', '[of] ' + source); + } else { + this.add('-start', pokemon, 'Attract'); + } + }, + onUpdate(pokemon) { + if (this.effectState.source && !this.effectState.source.isActive && pokemon.volatiles['attract']) { + this.debug('Removing Attract volatile on ' + pokemon); + pokemon.removeVolatile('attract'); + } + }, + onBeforeMovePriority: 2, + onBeforeMove(pokemon, target, move) { + this.add('-activate', pokemon, 'move: Attract', '[of] ' + this.effectState.source); + if (this.randomChance(1, 2)) { + this.add('cant', pokemon, 'Attract'); + return false; + } + }, + onEnd(pokemon) { + this.add('-end', pokemon, 'Attract', '[silent]'); + }, + }, + + gravity: { + duration: 5, + durationCallback(source, effect) { + if (source?.hasAbility('persistent')) { + this.add('-activate', source, 'ability: Persistent', '[move] Gravity'); + return 7; + } + return 5; + }, + onFieldStart(target, source) { + if (source?.hasAbility('persistent')) { + this.add('-fieldstart', 'move: Gravity', '[persistent]'); + } else { + this.add('-fieldstart', 'move: Gravity'); + } + for (const pokemon of this.getAllActive()) { + let applies = false; + if (pokemon.removeVolatile('bounce') || pokemon.removeVolatile('fly')) { + applies = true; + this.queue.cancelMove(pokemon); + pokemon.removeVolatile('twoturnmove'); + } + if (pokemon.volatiles['skydrop']) { + applies = true; + this.queue.cancelMove(pokemon); + + if (pokemon.volatiles['skydrop'].source) { + this.add('-end', pokemon.volatiles['twoturnmove'].source, 'Sky Drop', '[interrupt]'); + } + pokemon.removeVolatile('skydrop'); + pokemon.removeVolatile('twoturnmove'); + } + if (pokemon.volatiles['magnetrise']) { + applies = true; + delete pokemon.volatiles['magnetrise']; + } + if (pokemon.volatiles['telekinesis']) { + applies = true; + delete pokemon.volatiles['telekinesis']; + } + if (applies) this.add('-activate', pokemon, 'move: Gravity'); + } + }, + onModifyAccuracy(accuracy) { + if (typeof accuracy !== 'number') return; + return this.chainModify([6840, 4096]); + }, + onDisableMove(pokemon) { + for (const moveSlot of pokemon.moveSlots) { + if (this.dex.moves.get(moveSlot.id).flags['gravity']) { + pokemon.disableMove(moveSlot.id); + } + } + }, + // groundedness implemented in battle.engine.js:BattlePokemon#isGrounded + onBeforeMovePriority: 6, + onBeforeMove(pokemon, target, move) { + if (move.flags['gravity'] && !move.isZ) { + this.add('cant', pokemon, 'move: Gravity', move); + return false; + } + }, + onModifyMove(move, pokemon, target) { + if (move.flags['gravity'] && !move.isZ) { + this.add('cant', pokemon, 'move: Gravity', move); + return false; + } + }, + onFieldResidualOrder: 27, + onFieldResidualSubOrder: 2, + onFieldEnd() { + this.add('-fieldend', 'move: Gravity'); + const activePokemon = this.getAllActive(); + for (const a of activePokemon) { + if (a.name === "Lunell") { + this.add(`c:|${getName('Lunell')}|ope there goes gravity`); + break; + } + } + }, + }, + raindance: { + inherit: true, + onWeatherModifyDamage(damage, attacker, defender, move) { + if (defender.hasItem('utilityumbrella') || move.id === 'geyserblast') 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); + } + }, + }, + sunnyday: { + inherit: true, + onWeatherModifyDamage(damage, attacker, defender, move) { + if (defender.hasItem('utilityumbrella') || move.id === 'geyserblast') return; + if (move.type === 'Fire') { + this.debug('Sunny Day fire boost'); + return this.chainModify(1.5); + } + if (move.type === 'Water' && move.id !== 'hydrosteam') { + this.debug('Sunny Day water suppress'); + return this.chainModify(0.5); + } + }, + }, + confusion: { + inherit: true, + onBeforeMove(pokemon) { + pokemon.volatiles['confusion'].time--; + if (!pokemon.volatiles['confusion'].time) { + pokemon.removeVolatile('confusion'); + return; + } + this.add('-activate', pokemon, 'confusion'); + if (!this.randomChance(33, 100)) { + return; + } + this.activeTarget = pokemon; + const damage = this.actions.getConfusionDamage(pokemon, 40); + if (typeof damage !== 'number') throw new Error("Confusion damage not dealt"); + const activeMove = {id: this.toID('confused'), effectType: 'Move', type: '???'}; + this.damage(damage, pokemon, pokemon, activeMove as ActiveMove); + if (this.effectState.sourceEffect?.id === 'cringedadjoke') { + for (const target of this.getAllActive()) { + if (target === pokemon) continue; + if (target.volatiles['cringedadjoke']) { + this.boost({atk: 1, def: 1}, target); + } + } + } + return false; + }, + }, +}; diff --git a/data/mods/gen9ssb/items.ts b/data/mods/gen9ssb/items.ts new file mode 100644 index 000000000000..ba538d227f08 --- /dev/null +++ b/data/mods/gen9ssb/items.ts @@ -0,0 +1,145 @@ +export const Items: import('../../../sim/dex-items').ModdedItemDataTable = { + // Archas + lilligantiumz: { + name: "Lilligantium Z", + spritenum: 633, + onTakeItem: false, + zMove: "Aura Rain", + zMoveFrom: "Quiver Dance", + itemUser: ["Lilligant"], + desc: "If held by a Lilligant with Quiver Dance, it can use Aura Rain.", + }, + // Arya + flygonite: { + name: "Flygonite", + spritenum: 111, + itemUser: ["Flygon"], + megaEvolves: "Flygon", + megaStone: "Trapinch", + onTakeItem(item, source) { + if (item.megaEvolves === source.baseSpecies.baseSpecies) return false; + return true; + }, + desc: "If held by a Flygon, this item allows it to Mega Evolve in battle.", + }, + // Irpachuza + irpatuziniumz: { + name: "Irpatuzinium Z", + spritenum: 648, + onTakeItem: false, + zMove: "Bibbidi-Bobbidi-Rands", + zMoveFrom: "Fleur Cannon", + itemUser: ["Mr. Mime"], + desc: "If held by a Mr. Mime with Fleur Cannon, it can use Bibbidi-Bobbidi-Rands.", + }, + // Loethalion + gardevoirite: { + inherit: true, + itemUser: ["Ralts"], + megaEvolves: "Ralts", + desc: "If held by a Ralts, this item allows it to Mega Evolve in battle.", + }, + // Peary + pearyumz: { + name: "Pearyum Z", + spritenum: 647, + onTakeItem: false, + zMove: "1000 Gears", + zMoveFrom: "Gear Grind", + itemUser: ["Klinklang"], + desc: "If held by a Klinklang with Gear Grind, it can use 1000 Gears.", + }, + // Rainshaft + rainiumz: { + name: "Rainium Z", + spritenum: 652, + onTakeItem: false, + zMove: "Hatsune Miku's Lucky Orb", + zMoveFrom: "Sparkling Aria", + itemUser: ["Xerneas"], + desc: "If held by a Xerneas with Sparkling Aria, it can use Hatsune Miku's Lucky Orb.", + }, + + // Modified for other effects + + eviolite: { + inherit: true, + onModifyDef(def, pokemon) { + // Added Pichu-Spiky-eared for Hydrostatics to use Eviolite + if (pokemon.baseSpecies.nfe || pokemon.species.id === 'pichuspikyeared') { + return this.chainModify(1.5); + } + }, + onModifySpD(spd, pokemon) { + // Added Pichu-Spiky-eared for Hydrostatics to use Eviolite + if (pokemon.baseSpecies.nfe || pokemon.species.id === 'pichuspikyeared') { + return this.chainModify(1.5); + } + }, + }, + + // modified for nya's ability + focusband: { + inherit: true, + onDamage(damage, target, source, effect) { + const chance = target.hasAbility('adorablegrace') ? 2 : 1; + if (this.randomChance(chance, 10) && damage >= target.hp && effect && effect.effectType === 'Move') { + this.add("-activate", target, "item: Focus Band"); + return target.hp - 1; + } + }, + }, + quickclaw: { + inherit: true, + onFractionalPriority(priority, pokemon) { + const chance = pokemon.hasAbility('adorablegrace') ? 2 : 1; + if (priority <= 0 && this.randomChance(chance, 5)) { + this.add('-activate', pokemon, 'item: Quick Claw'); + return 0.1; + } + }, + }, + + // modified for SexyMalasada's ability + lifeorb: { + inherit: true, + onAfterMoveSecondarySelf(source, target, move) { + if (source && source !== target && move && move.category !== 'Status' && !source.forceSwitchFlag) { + if (source.hasAbility('Ancestry Ritual')) { + this.heal(source.baseMaxhp / 10, source, source, this.dex.items.get('lifeorb')); + } else { + this.damage(source.baseMaxhp / 10, source, source, this.dex.items.get('lifeorb')); + } + } + }, + }, + + safetygoggles: { + inherit: true, + onImmunity(type, pokemon) { + if (type === 'sandstorm' || type === 'deserteddunes' || type === 'hail' || type === 'powder') return false; + }, + }, + utilityumbrella: { + inherit: true, + onStart(pokemon) { + if (!pokemon.ignoringItem()) return; + if (['sunnyday', 'raindance', 'desolateland', 'primordialsea', 'stormsurge'].includes(this.field.effectiveWeather())) { + this.runEvent('WeatherChange', pokemon, pokemon, this.effect); + } + }, + onUpdate(pokemon) { + if (!this.effectState.inactive) return; + this.effectState.inactive = false; + if (['sunnyday', 'raindance', 'desolateland', 'primordialsea', 'stormsurge'].includes(this.field.effectiveWeather())) { + this.runEvent('WeatherChange', pokemon, pokemon, this.effect); + } + }, + onEnd(pokemon) { + if (['sunnyday', 'raindance', 'desolateland', 'primordialsea', 'stormsurge'].includes(this.field.effectiveWeather())) { + this.runEvent('WeatherChange', pokemon, pokemon, this.effect); + } + this.effectState.inactive = true; + }, + }, +}; diff --git a/data/mods/gen9ssb/moves.ts b/data/mods/gen9ssb/moves.ts new file mode 100644 index 000000000000..2b3be41ae461 --- /dev/null +++ b/data/mods/gen9ssb/moves.ts @@ -0,0 +1,7101 @@ +import {ssbSets} from "./random-teams"; +import {PSEUDO_WEATHERS, changeSet, getName} from "./scripts"; +import {Teams} from '../../../sim/teams'; + +export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = { + /* + // Example + moveid: { + accuracy: 100, // a number or true for always hits + basePower: 100, // Not used for Status moves, base power of the move, number + category: "Physical", // "Physical", "Special", or "Status" + shortDesc: "", // short description, shows up in /dt + desc: "", // long description + name: "Move Name", + gen: 8, + pp: 10, // unboosted PP count + priority: 0, // move priority, -6 -> 6 + flags: {}, // Move flags https://github.com/smogon/pokemon-showdown/blob/master/data/moves.js#L1-L27 + onTryMove() { + this.attrLastMove('[still]'); // For custom animations + }, + onPrepareHit(target, source) { + this.add('-anim', source, 'Move Name 1', source); + this.add('-anim', source, 'Move Name 2', source); + }, // For custom animations + secondary: { + status: "tox", + chance: 20, + }, // secondary, set to null to not use one. Exact usage varies, check data/moves.js for examples + target: "normal", // What does this move hit? + // normal = the targeted foe, self = the user, allySide = your side (eg light screen), foeSide = the foe's side (eg spikes), all = the field (eg raindance). More can be found in data/moves.js + type: "Water", // The move's type + // Other useful things + noPPBoosts: true, // add this to not boost the PP of a move, not needed for Z moves, dont include it otherwise + isZ: "crystalname", // marks a move as a z move, list the crystal name inside + zMove: {effect: ''}, // for status moves, what happens when this is used as a Z move? check data/moves.js for examples + zMove: {boost: {atk: 2}}, // for status moves, stat boost given when used as a z move + critRatio: 2, // The higher the number (above 1) the higher the ratio, lowering it lowers the crit ratio + drain: [1, 2], // recover first num / second num % of the damage dealt + heal: [1, 2], // recover first num / second num % of the target's HP + }, + */ + // Please keep sets organized alphabetically based on staff member name! + // aegii + equipaegislash: { + accuracy: 100, + basePower: 80, + category: "Physical", + shortDesc: "50% +1 Atk, 50% +1 Def, eats berry.", + desc: "This move has a 50% chance to raise the user's Attack by 1 stage and a 50% chance to raise the user's Defense by 1 stage. After using the move, the user eats its berry if holding one.", + name: "Equip Aegislash", + gen: 9, + pp: 10, + priority: 0, + flags: {protect: 1, mirror: 1}, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, 'Shadow Sneak', target); + this.add('-anim', source, 'Swords Dance', source); + this.add('-anim', source, 'Iron Defense', source); + }, + secondaries: [ + { + chance: 50, + self: { + boosts: { + atk: 1, + }, + }, + }, { + chance: 50, + self: { + boosts: { + def: 1, + }, + }, + }, + ], + self: { + onHit(target, source) { + if (!source.getItem().isBerry) return; + source.eatItem(true); + }, + }, + secondary: null, + target: "normal", + type: "Steel", + }, + + // Aelita + smelt: { + accuracy: true, + basePower: 0, + category: "Status", + shortDesc: "User burns itself and gains +2 Spe/+1 Atk.", + desc: "This move burns the user, raises their Speed by 2 stages, and raises their Attack by 1 stage.", + name: "Smelt", + gen: 9, + pp: 10, + priority: 0, + flags: {}, + onPrepareHit(pokemon) { + this.attrLastMove('[still]'); + }, + onHit(pokemon) { + pokemon.trySetStatus('brn'); + this.add('-anim', pokemon, 'Shift Gear', pokemon); + this.boost({spe: 2, atk: 1}); + }, + secondary: null, + target: "self", + type: "Steel", + }, + + // Aethernum + iamatomic: { + accuracy: 100, + basePower: 140, + category: "Special", + shortDesc: "Lowers user's Def, Sp. Atk and Speed by 2 stages.", + desc: "Lowers the user's Defense, Special Attack, and Speed by 2 stages.", + name: "I. AM. ATOMIC.", + gen: 9, + pp: 5, + priority: 0, + flags: {protect: 1}, + onPrepareHit(target, source, move) { + this.add('-anim', source, 'Trick Room', target); + this.add('-anim', source, 'Clangerous Soul', source); + this.add('-anim', source, 'Flash', target); + this.add(`c:|${getName((source.illusion || source).name)}|I`); + this.add(`c:|${getName((source.illusion || source).name)}|AM`); + this.add(`c:|${getName((source.illusion || source).name)}|ATOMIC.`); + }, + self: { + boosts: { + spe: -2, + def: -2, + spa: -2, + }, + }, + secondary: null, + target: "normal", + type: "Ghost", + }, + + // Akir + freeswitchbutton: { + accuracy: true, + basePower: 0, + category: "Status", + shortDesc: "Haze + Parting Shot + Replacement heals 33%.", + desc: "Resets the stat stages of all active Pokemon to 0, then lowers the foe's Attack and Special Attack by 1 stage each while switching out. The Pokemon that switches in heals 33% of its maximum HP. This move bypasses all Protect-like effects.", + name: "Free Switch Button", + gen: 9, + pp: 10, + priority: 0, + flags: {}, + onTryMove() { + this.attrLastMove('[still]'); + }, + onHit(target, source, move) { + this.add('-clearallboost'); + for (const pokemon of this.getAllActive()) { + pokemon.clearBoosts(); + } + const foe = source.foes()[0]; + if (!foe) return; + const success = this.boost({atk: -1, spa: -1}, foe, source); + if (!success && !foe.hasAbility('mirrorarmor')) { + delete move.selfSwitch; + } + }, + // the foe cannot be set as the target in move properties because it breaks the 33% replacement heal + selfSwitch: true, + onPrepareHit(target, source) { + this.add('-anim', source, 'Haze', source); + }, + slotCondition: 'freeswitchbutton', + condition: { + onSwap(target) { + if (!target.fainted && (target.hp < target.maxhp)) { + target.heal(target.maxhp / 3); + this.add('-heal', target, target.getHealth, '[from] move: Free Switch Button'); + target.side.removeSlotCondition(target, 'freeswitchbutton'); + } + }, + }, + secondary: null, + target: "self", + type: "Water", + }, + + // Alex + spicierextract: { + accuracy: true, + basePower: 0, + category: "Status", + shortDesc: "Leech Seed + Heal Block + Infestation", + desc: "Applies the effects of Leech Seed, Heal Block, and partial trapping to the target, causing the user to steal 1/8 of the target's maximum HP at the end of each turn until the target switches out, preventing the target from using any moves, items, or Abilities that heal HP for 5 turns, and preventing the target from switching out while damaging it for an additional 1/8 of its maximum HP at the end of each turn for 4-5 turns. If the target uses Baton Pass, the effects of Leech Seed, Heal Block, and partial trapping will remain in effect for the replacement.", + name: "Spicier Extract", + pp: 15, + priority: 0, + flags: {protect: 1, reflectable: 1, mirror: 1, powder: 1}, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, 'Leafage', target); + this.add('-anim', source, 'Stun Spore', target); + }, + onHit(target, source) { + let success = false; + if (target.addVolatile('partiallytrapped', source)) success = true; + if (target.addVolatile('leechseed', source)) success = true; + if (target.addVolatile('healblock', source)) success = true; + return success; + }, + secondary: null, + target: "normal", + type: "Grass", + }, + + // Alexander489 + scumhunt: { + accuracy: true, + basePower: 0, + category: "Status", + shortDesc: "Uses a random damaging, non-resisted move.", + desc: "A random damaging non-resisted move is selected for use, other than moves uncallable by Metronome and moves originating from Super Staff Bros Ultimate.", + name: "Scumhunt", + pp: 10, + priority: 0, + flags: {protect: 1}, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source, move) { + const nresTypes = []; + for (const i of this.dex.types.names()) { + if (i === "Stellar") continue; + if (target) { + const effect = this.dex.getEffectiveness(i, target); + const immune = !this.dex.getImmunity(i, target); + if (effect >= 0 && !immune) { + nresTypes.push(i); + } + } + } + if (!nresTypes.length) return; + const netType = this.sample(nresTypes); + const moves = this.dex.moves.all().filter(m => ( + (![2, 4].includes(this.gen) || !source.moves.includes(m.id)) && + (!m.isNonstandard || m.isNonstandard === 'Unobtainable') && + m.flags['metronome'] && m.type === netType && m.category !== "Status" + )); + let randomMove = ''; + if (moves.length) { + moves.sort((a, b) => a.num - b.num); + randomMove = this.sample(moves).id; + } + if (!randomMove) return false; + source.side.lastSelectedMove = this.toID(randomMove); + this.add('-anim', source, 'Spite', target); + this.add('-anim', source, 'Grudge', target); + this.add('-anim', source, 'Metronome', source); + this.actions.useMove(randomMove, source); + }, + target: "normal", + type: "???", + }, + + // Apple + woppleorflopple: { + accuracy: true, + basePower: 0, + category: "Status", + shortDesc: "Confuse; +2 SpA/D. Fail=Confuse self; -1 SpA/D.", + desc: "Usually moves first. This move has a 50% chance of confusing the target and raising the user's Special Attack and Special Defense by 2 stages. Otherwise, it will confuse the user and lower the user's Special Attack and Special Defense by 1 stage.", + name: "Wopple or Flopple", + gen: 9, + pp: 10, + priority: 1, + flags: {protect: 1, reflectable: 1}, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, 'Moonlight', source); + }, + onHit(target, source, move) { + if (this.randomChance(1, 2)) { + target.addVolatile('confusion'); + this.boost({spa: 2, spd: 2}, source); + } else { + source.addVolatile('confusion'); + this.boost({spa: -1, spd: -1}, source); + } + }, + secondary: null, + target: "normal", + type: "Normal", + }, + + // Appletun a la Mode + extracourse: { + accuracy: true, + basePower: 0, + category: "Status", + shortDesc: "Recycles berry, +1 to 2 random stats (-acc/eva).", + desc: "The user regains the item it last used, and then boosts two random stats by 1 stage each, except Accuracy and Evasion. If the user is currently holding an item or has had their item forcibly removed, the stat boosts occur without the Recycle effect.", + name: "Extra Course", + gen: 9, + pp: 5, + priority: 0, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, 'Recycle', target); + }, + flags: {snatch: 1}, + onHit(pokemon) { + if (!pokemon.item && pokemon.lastItem) { + const item = pokemon.lastItem; + pokemon.lastItem = ''; + this.add('-item', pokemon, this.dex.items.get(item), '[from] move: Extra Course'); + pokemon.setItem(item); + } + let stats: BoostID[] = []; + const boost: SparseBoostsTable = {}; + let statPlus: BoostID; + for (statPlus in pokemon.boosts) { + if (statPlus === 'accuracy' || statPlus === 'evasion') continue; + if (pokemon.boosts[statPlus] < 6) { + stats.push(statPlus); + } + } + let randomStat: BoostID | undefined = stats.length ? this.sample(stats) : undefined; + if (randomStat) boost[randomStat] = 1; + stats = []; + for (statPlus in pokemon.boosts) { + if (statPlus === 'accuracy' || statPlus === 'evasion') continue; + if (pokemon.boosts[statPlus] < 6 && statPlus !== randomStat) { + stats.push(statPlus); + } + } + randomStat = stats.length ? this.sample(stats) : undefined; + if (randomStat) boost[randomStat] = 1; + this.boost(boost, pokemon, pokemon); + }, + target: "self", + type: "Normal", + }, + + // aQrator + torisstori: { + accuracy: 100, + basePower: 0, + category: "Status", + shortDesc: "Confuses foe & deals 1/6th max HP for 4-5 turns.", + desc: "Causes the target to become confused. If this move is successful, the target takes damage equal to 1/6th of its maximum HP at the end of each turn for 4-5 turns.", + name: "Tori's Stori", + gen: 9, + pp: 5, + priority: 0, + flags: {protect: 1, reflectable: 1, mirror: 1}, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, 'Water Spout', target); + this.add('-anim', source, 'Confuse Ray', target); + }, + volatileStatus: 'torisstori', + condition: { + duration: 5, + durationCallback(target, source) { + if (source?.hasItem('gripclaw')) return 8; + return this.random(5, 6); + }, + onStart(target) { + this.add('-start', target, 'Tori\'s Stori'); + }, + onResidualOrder: 6, + onResidual(pokemon) { + this.damage(pokemon.baseMaxhp / 6); + }, + onEnd(target) { + this.add('-end', target, 'Tori\'s Stori'); + }, + }, + secondary: { + chance: 100, + volatileStatus: 'confusion', + }, + target: "normal", + type: "Water", + }, + + // A Quag To The Past + sireswitch: { + accuracy: true, + basePower: 0, + category: "Status", + shortDesc: "Quag: Protect; Clod: Recover. Switch sires.", + desc: "Nearly always moves first. If the user is Quagsire, the user is protected from most attacks made by other Pokemon during this turn and then transforms into Clodsire. If the user is Clodsire, the user recovers 1/2 of its maximum HP and then transforms into Quagsire. This move fails if the user is neither Quagsire nor Clodsire.", + name: "Sire Switch", + gen: 9, + pp: 20, + priority: 4, + onTry(source) { + if (['Quagsire', 'Clodsire'].includes(source.species.name)) { + return; + } + this.hint("Only Clodsire and Quagsire can use this move."); + this.attrLastMove('[still]'); + this.add('-fail', source, 'move: Sire Switch'); + return null; + }, + onModifyPriority(relayVar, source, target, move) { + if (source.species.name === 'Clodsire') { + return -6; + } + }, + flags: {failcopycat: 1}, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, 'Max Guard', source); + if (source.species.name === 'Quagsire') { + this.add('-anim', source, 'Protect', source); + return !!this.queue.willAct() && this.runEvent('StallMove', source); + } else { + this.add('-anim', source, 'Recover', source); + } + }, + volatileStatus: 'protect', + onModifyMove(move, pokemon) { + if (pokemon.species.name === 'Clodsire') { + move.flags['heal'] = 1; + move.heal = [1, 2]; + delete move.volatileStatus; + } + }, + onHit(pokemon) { + if (pokemon.species.name === 'Quagsire') { + pokemon.addVolatile('stall'); + changeSet(this, pokemon, ssbSets['A Quag To The Past-Clodsire'], true); + } else { + changeSet(this, pokemon, ssbSets['A Quag To The Past'], true); + } + }, + secondary: null, + target: "self", + type: "Ground", + }, + + // Archas + aurarain: { + accuracy: true, + basePower: 0, + category: "Status", + shortDesc: "Cures team status, all but user heal 50% max HP.", + desc: "Z-Move that requires Lilligantium Z. Every Pokemon in the user's party is cured of its non-volatile status condition. With the exception of the user, every Pokemon in the user's party heals for 1/2 of their maximum HP. This effect cannot revive fainted Pokemon.", + name: "Aura Rain", + pp: 1, + priority: 0, + flags: {}, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, 'Rain Dance', source); + this.add('-anim', source, 'Water Sport', source); + this.add('-anim', source, 'Aromatherapy', source); + }, + onHit(pokemon) { + this.add('-message', 'An alleviating aura rains down on the field!'); + let success = false; + const allies = [...pokemon.side.pokemon, ...pokemon.side.allySide?.pokemon || []]; + for (const ally of allies) { + if (ally === pokemon) continue; + if (ally.heal(this.modify(ally.maxhp, 0.5))) { + this.add('-heal', ally, ally.getHealth); + success = true; + } + if (ally.cureStatus()) success = true; + } + return success; + }, + isZ: "lilligantiumz", + secondary: null, + target: "self", + type: "Grass", + }, + + // Arcueid + funnyvamp: { + accuracy: true, + basePower: 0, + category: "Status", + shortDesc: "Changes user's forme, effects vary with forme.", + desc: "If the user is Deoxys-Defense, it transforms into Deoxys-Attack and uses a random move from its moveset. If the user is Deoxys-Attack, it transforms into Deoxys-Defense and boosts two random stats by 1 stage each, except Accuracy and Evasion.", + name: "Funny Vamp", + gen: 9, + pp: 10, + priority: 0, + flags: {protect: 1, mirror: 1, failcopycat: 1}, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, 'Moonlight', target); + this.add('-anim', source, 'Quiver Dance', target); + this.add('-anim', source, 'Geomancy', target); + this.add(`c:|${getName('Arcueid')}|I've got nine lives 🐈. You knew that about cats, right, 😹? That means I haven't lost until you beat me nine times 🙀!`); + }, + onHit(target, source, move) { + if (source.species.name === "Deoxys-Defense") { + changeSet(this, source, ssbSets['Arcueid-Attack'], true); + let randMove = this.random(3) - 1; + if (randMove < 0) randMove = 0; + this.actions.useMove(source.moveSlots[randMove].id, target); + } else { + changeSet(this, source, ssbSets['Arcueid'], true); + for (let i = 0; i < 2; i++) { + const stats: BoostID[] = []; + const boost: SparseBoostsTable = {}; + let statPlus: BoostID; + for (statPlus in source.boosts) { + if (statPlus === 'accuracy' || statPlus === 'evasion') continue; + if (source.boosts[statPlus] < 6) { + stats.push(statPlus); + } + } + const randomStat: BoostID | undefined = stats.length ? this.sample(stats) : undefined; + if (randomStat) boost[randomStat] = 1; + this.boost(boost, source, source); + } + this.heal(source.baseMaxhp / 2, source); + } + }, + secondary: null, + target: "self", + type: "Psychic", + }, + + // Arsenal + megidolaon: { + accuracy: 100, + basePower: 255, + category: "Special", + shortDesc: "Flinches if resulting in a critical hit.", + name: "Megidolaon", + gen: 9, + pp: 10, + priority: 0, + flags: {protect: 1, mirror: 1}, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, 'Hyper Beam', target); + this.add('-anim', source, 'Earthquake', target); + }, + volatileStatus: 'flinch', + secondary: null, + target: "normal", + type: "???", + }, + + // Artemis + automatedresponse: { + accuracy: 100, + basePower: 80, + category: "Special", + shortDesc: "Change move/user's type to SE. 25% NVE instead.", + desc: "Randomly changes the move's and user's type to deal super effective damage. There is a 25% chance that this move has a false positive and changes the move's and user's type to deal not very effective damage instead.", + name: "Automated Response", + pp: 10, + priority: 0, + flags: {protect: 1}, + onTryMove() { + this.attrLastMove('[still]'); + }, + beforeTurnCallback(source, target) { + const seTypes = []; + const nveTypes = []; + let netType = ""; + for (const i of this.dex.types.names()) { + if (target) { + const effect = this.dex.getEffectiveness(i, target); + const isImmune = !this.dex.getImmunity(i, target); + if (effect > 0 && !isImmune) { + seTypes.push(i); + } else if (effect < 0 && !isImmune) { + nveTypes.push(i); + } + } + } + let falsePositive = false; + if (!seTypes.length) seTypes.push('Electric'); + if (!nveTypes.length) nveTypes.push('Electric'); + if (this.randomChance(75, 100)) { + netType = this.sample(seTypes); + } else { // false positive + falsePositive = true; + netType = this.sample(nveTypes); + } + if (falsePositive) { + this.add('-message', `${(target.illusion || target).name} triggered a false-positive and caused Automated Response to become not-very effective!`); + } + if (source.setType(netType)) { + this.add('-start', source, 'typechange', netType); + } + source.m.artemisMoveType = netType; + }, + onPrepareHit(target, source, move) { + this.add('-anim', source, 'Techno Blast', target); + }, + onModifyType(move, pokemon, target) { + if (pokemon.m.artemisMoveType) { + move.type = pokemon.m.artemisMoveType; + } + }, + self: { + boosts: { + spa: -2, + }, + }, + target: "normal", + type: "Electric", + }, + + // Arya + anyonecanbekilled: { + accuracy: 95, + basePower: 80, + category: "Special", + shortDesc: "+2 SpA for 2 turns.", + desc: "The user's Special Attack is boosted by 2 stages for 2 turns and is restored to its original value at the end. Does not stack with itself.", + name: "Anyone can be killed", + pp: 10, + priority: 0, + flags: {protect: 1, sound: 1, bypasssub: 1, mirror: 1}, + onTryMove() { + this.attrLastMove('[still]'); + }, + self: { + volatileStatus: 'anyonecanbekilled', + }, + condition: { + duration: 3, + onResidualOrder: 3, + onStart(target, source, sourceEffect) { + this.boost({spa: 2}, source); + }, + onEnd(target) { + this.boost({spa: -2}, target); + }, + }, + onPrepareHit(target, source) { + this.add('-anim', source, 'Dragon Dance', target); + this.add('-anim', source, 'Earth Power', target); + }, + target: "normal", + type: "Ground", + }, + + // Audiino + thinkinginprogress: { + accuracy: true, + basePower: 0, + category: "Status", + shortDesc: "Cure status, +1 Def/SpA/SpD.", + name: "Thinking In Progress", + gen: 9, + pp: 20, + priority: 0, + flags: {snatch: 1, metronome: 1}, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, 'Calm Mind', source); + }, + onHit(target, source, move) { + source.cureStatus(); + }, + boosts: { + def: 1, + spa: 1, + spd: 1, + }, + secondary: null, + target: "self", + type: "Psychic", + }, + + // autumn + seasonssmite: { + accuracy: 100, + basePower: 90, + category: "Special", + shortDesc: "+1 Defense if Protosynthesis is active.", + desc: "Raises the user's Defense by 1 stage if the user is under the effect of the Protosynthesis Ability.", + name: "Season's Smite", + gen: 9, + pp: 10, + priority: 0, + flags: {protect: 1, mirror: 1}, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', target, 'Morning Sun', target); + }, + secondary: { + chance: 100, + onHit(target, source, move) { + if (source.volatiles['protosynthesis']) { + this.boost({def: 1}, source, source, move); + } + }, + }, + target: "normal", + type: "Ghost", + }, + + // ausma + sigilsstorm: { + accuracy: 100, + basePower: 123, + category: "Special", + shortDesc: "If hit, Trick Room. Else, attack+random effect.", + desc: "Begins to charge an attack at the start of the turn. Nearly always moves last. If the user is directly damaged while charging, Trick Room is set instead, making the slower Pokemon move first for 5 turns. The Trick Room effect occurs before Cascade if both would activate on the same turn. If the user was not directly damaged while charging, the attack executes and one random effect will occur from the following: poison; burn; paralysis; confusion; the user recovers HP equal to 75% of damage dealt; all entry hazards are removed from the field; a random entry hazard is set, except G-Max Steelsurge; two random stats of the user are raised by 1 stage each, except Accuracy and Evasion; two random stats of the target are lowered by 1 stage each, except Accuracy and Evasion; or the target transforms into a Fennekin with Ember, Scratch, and Growl until they switch out.", + name: "Sigil's Storm", + pp: 20, + priority: -6, + onModifyPriority(priority, source, target, move) { + if (source.species.id === 'mismagius') return priority + 6; + }, + flags: {snatch: 1, metronome: 1, protect: 1, failcopycat: 1}, + priorityChargeCallback(pokemon) { + if (pokemon.species.id === 'mismagius') return; + pokemon.addVolatile('sigilsstorm'); + this.add('-anim', pokemon, 'Calm Mind', pokemon); + }, + beforeMoveCallback(pokemon) { + if (pokemon.species.id === 'mismagius') return; + if (pokemon.volatiles['sigilsstorm']?.lostFocus) { + this.add('cant', pokemon, 'sigilsstorm', 'sigilsstorm'); + this.actions.useMove('trickroom', pokemon); + this.add(`c:|${getName('ausma')}|dog can you not`); + return true; + } + }, + onModifyType(move, pokemon, target) { + if (pokemon.species.id === 'mismagius') { + move.type = 'Ghost'; + } + }, + condition: { + duration: 1, + onStart(pokemon) { + this.add('-singleturn', pokemon, 'move: Sigil\'s Storm'); + }, + onHit(pokemon, source, move) { + if (move.category !== 'Status') { + this.effectState.lostFocus = true; + } + }, + onTryAddVolatile(status, pokemon) { + if (status.id === 'flinch') return null; + }, + }, + onTry(source) { + if (source.illusion || source.name === 'ausma') { + return; + } + this.attrLastMove('[still]'); + this.add('-fail', source, 'move: Sigil\'s Storm'); + this.hint("Only a Pokemon whose nickname is \"ausma\" can use this move."); + return null; + }, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, 'Geomancy', source); + this.add('-anim', source, 'Blood Moon', target); + }, + secondary: { + chance: 100, + onHit(target, source, move) { + const sideConditions = ['spikes', 'toxicspikes', 'stealthrock', 'stickyweb', 'gmaxsteelsurge']; + const chance = this.random(100); + if (chance <= 10) { + target.trySetStatus('psn', target); + } else if (chance <= 20) { + target.trySetStatus('par', target); + } else if (chance <= 30) { + target.trySetStatus('brn', target); + } else if (chance <= 50) { + const stats: BoostID[] = []; + const boost: SparseBoostsTable = {}; + let statPlus: BoostID; + const statTarget = chance <= 40 ? target : source; + for (statPlus in statTarget.boosts) { + if (statPlus === 'accuracy' || statPlus === 'evasion') continue; + if (chance <= 40 && statTarget.boosts[statPlus] > -6) { + stats.push(statPlus); + } else if (chance <= 50 && statTarget.boosts[statPlus] < 6) { + stats.push(statPlus); + } + } + const randomStat: BoostID | undefined = stats.length ? this.sample(stats) : undefined; + const randomStat2: BoostID | undefined = stats.length ? this.sample(stats.filter(s => s !== randomStat)) : undefined; + if (randomStat && randomStat2) { + if (chance <= 40) { + boost[randomStat] = -1; + boost[randomStat2] = -1; + } else { + boost[randomStat] = 1; + boost[randomStat2] = 1; + } + this.boost(boost, statTarget, statTarget); + } + } else if (chance <= 60) { + target.addVolatile('confusion', source); + } else if (chance <= 70) { + for (const condition of sideConditions) { + if (source.side.removeSideCondition(condition)) { + this.add('-sideend', source.side, this.dex.conditions.get(condition).name, '[from] move: Sigil\'s Storm', '[of] ' + source); + } + } + } else if (chance <= 80) { + target.side.addSideCondition(this.sample(sideConditions.filter(hazard => !target.side.getSideCondition(hazard)))); + } else if (chance <= 90) { + move.drain = [3, 4]; + } else { + changeSet(this, target, ssbSets["ausma-Fennekin"], true); + this.add(`c:|${getName('ausma')}|oh shit i posted to the wrong account`); + } + }, + }, + target: "normal", + type: "Psychic", + }, + + // AuzBat + preptime: { + accuracy: true, + basePower: 0, + category: "Status", + shortDesc: "Raises the user's Sp. Atk by 2 and Speed by 1.", + desc: "The user's Special Attack is boosted by 2 stages and its Speed is boosted by 1 stage.", + name: "Prep Time", + pp: 5, + priority: 0, + flags: {snatch: 1, metronome: 1}, + boosts: { + spa: 2, + spe: 1, + }, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, 'Tidy Up', source); + }, + target: "self", + type: "Psychic", + }, + + // avarice + yugiohreference: { + accuracy: 90, + basePower: 105, + category: "Special", + shortDesc: "40% chance to force the foe out.", + desc: "Nearly always moves last. If this attack is successful, there is a 40% chance that the target is forced to switch out and be replaced with a random unfainted ally.", + name: "yu-gi-oh reference", + pp: 5, + priority: -6, + flags: {protect: 1, bullet: 1}, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, 'Never-Ending Nightmare', target); + }, + secondary: { + chance: 40, + onHit(target, source, move) { + move.forceSwitch = true; + }, + }, + target: "normal", + type: "Ghost", + }, + + // Beowulf + buzzerstingercounter: { + accuracy: 100, + basePower: 50, + category: "Physical", + shortDesc: "+3 prio if foe uses custom move. +3 Atk on KO.", + desc: "This move will nearly always move first (+3 priority) if the target would use a custom move from Super Staff Bros Ultimate this turn. Raises the user's Attack by 3 stages if this move knocks out the target.", + name: "Buzzer Stinger Counter", + gen: 9, + pp: 10, + priority: 0, + flags: {contact: 1, protect: 1, mirror: 1}, + onModifyPriority(priority, pokemon, target) { + if (!target) return; + const move = this.queue.willMove(target)?.moveid; + if (move && target.moves.indexOf(move) === target.moves.length - 1) { + this.debug('BSC priority boost'); + return priority + 3; + } + }, + onAfterMoveSecondarySelf(pokemon, target, move) { + if (!target || target.fainted || target.hp <= 0) this.boost({atk: 3}, pokemon, pokemon, move); + }, + secondary: null, + target: "normal", + type: "Bug", + }, + + // berry + whatkind: { + accuracy: true, + basePower: 0, + category: "Status", + shortDesc: "Eats berry, gives random new berry, heals 25%.", + desc: "The user consumes its held berry if it is holding one, heals 25% of its maximum HP, and then gains a random item from the following: Iapapa Berry, Leppa Berry, Lum Berry, Maranga Berry, Ganlon Berry, Starf Berry, Liechi Berry, or Enigma Berry.", + name: "what kind", + gen: 9, + pp: 10, + priority: 0, + flags: {}, + onPrepareHit() { + this.attrLastMove('[anim] Nasty Plot'); + }, + onHit(pokemon, qwerty, move) { + if (pokemon.item && pokemon.getItem().isBerry) { + pokemon.eatItem(true); + } + pokemon.lastItem = ''; + const berries = ['iapapa', 'leppa', 'lum', 'maranga', 'ganlon', 'starf', 'liechi', 'enigma']; + const item = this.dex.items.get(this.sample(berries) + 'berry'); + pokemon.setItem(item, pokemon, move); + this.add('-item', pokemon, item, '[from] move: what kind'); + this.heal(pokemon.baseMaxhp / 4, pokemon); + }, + secondary: null, + target: "self", + type: "Water", + }, + + // Bert122 + shatterandscatter: { + accuracy: true, + basePower: 0, + category: "Status", + shortDesc: "Protect, hit=-2 Atk/SpA/or Spe, user swap.", + desc: "Nearly always moves first. This move can only be used by Mega Sableye. The user is protected from most attacks made by other Pokemon during this turn. If a targeted move is blocked during this effect, the attacker's stats are lowered depending on the move used. If the attacker used a physical attack, their Attack is lowered by 2 stages. If the attacker used a special attack, their Special Attack is lowere dby 2 stages. If the attacker used a status move, their Speed is lowered by 2 stages. If this move successfully decreases a Pokemon's stat stages, this Pokemon's Mega Evolution is removed, and it immediately switches out and is replaced by a selected party member. This move fails if the user moves last, and has an increasing chance to fail when used consecutively.", + name: "Shatter and Scatter", + pp: 10, + priority: 4, + flags: {failinstruct: 1, failcopycat: 1}, + stallingMove: true, + volatileStatus: 'shatterandscatter', + onTry(source) { + if (source.species.name === 'Sableye-Mega') { + return; + } + this.hint("Only Sableye-Mega can use this move."); + this.attrLastMove('[still]'); + this.add('-fail', source, 'move: Shatter and Scatter'); + return null; + }, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(pokemon) { + this.add('-anim', pokemon, 'Protect', pokemon); + this.add('-anim', pokemon, 'Rock Polish', 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).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']; + } + } + let statDebuff = 'spe'; + if (move.category === 'Special') statDebuff = 'spa'; + if (move.category === 'Physical') statDebuff = 'atk'; + const success = this.boost({[statDebuff]: -2}, source, target, this.dex.getActiveMove("Shatter and Scatter")); + if (success) { + target.formeChange('Sableye', this.dex.getActiveMove('Shatter and Scatter'), true); + target.canMegaEvo = 'Sableye-Mega'; + target.switchFlag = 'shatterandscatter' as ID; + } + return this.NOT_FAIL; + }, + onHit(target, source, move) { + if (move.isZOrMaxPowered) { + let statDebuff = 'spe'; + if (move.category === 'Special') statDebuff = 'spa'; + if (move.category === 'Physical') statDebuff = 'atk'; + const success = this.boost({[statDebuff]: -2}, source, target, this.dex.getActiveMove("Shatter and Scatter")); + if (success) { + target.formeChange('Sableye', this.dex.getActiveMove('Shatter and Scatter'), true); + target.canMegaEvo = 'Sableye-Mega'; + target.switchFlag = 'shatterandscatter' as ID; + } + } + }, + }, + secondary: null, + target: "self", + type: "Dark", + }, + + // Billo + hackcheck: { + accuracy: true, + basePower: 0, + category: "Status", + shortDesc: "Cosmog: 80%: Change into Lunala, else Solgaleo.", + desc: "This move has an 80% chance of transforming the user into Lunala. It has a 20% chance of instead transforming the user into Solgaleo, boosting its Attack by 1 stage, preventing it from switching out, and causing it to faint after three turns, akin to Perish Song. This move cannot be used successfully unless the user's current form, while considering Transform, is Cosmog.", + name: "Hack Check", + gen: 9, + pp: 5, + priority: 0, + flags: {protect: 1, mirror: 1, bypasssub: 1, failcopycat: 1}, + onTry(source) { + if (source.species.name === 'Cosmog') { + return; + } + this.hint("Only Cosmog can use this move."); + this.attrLastMove('[still]'); + this.add('-fail', source, 'move: Hack Check'); + return null; + }, + onTryMove() { + this.attrLastMove('[still]'); + }, + onHit(target, source, move) { + if (this.randomChance(1, 5)) { + changeSet(this, source, ssbSets['Billo-Solgaleo'], true); + source.addVolatile('trapped', source, move, 'trapper'); + source.addVolatile('perishsong'); + this.add('-start', source, 'perish3', '[silent]'); + this.boost({atk: 1}, source, source, move); + this.add(`c:|${getName('Billo')}|This is a streamer mon, you're banned from the room.`); + } else { + changeSet(this, source, ssbSets['Billo-Lunala'], true); + this.add(`c:|${getName('Billo')}|Everything checks out, remember to report any suspicious mons to staff!`); + } + }, + target: "self", + type: "Normal", + }, + + // blazeofvictory + veto: { + accuracy: true, + basePower: 0, + category: "Status", + shortDesc: "Protects user, Disables attackers.", + desc: "Nearly always moves first. The user is protected from most attacks made by other Pokemon during this turn. If a targeted move is blocked during this effect, the move used by the target is disabled and cannot be selected for 4 turns. This move cannot disable more than one move at a time. This move fails if the user moves last, and has an increasing chance to fail when used consecutively.", + name: "Veto", + gen: 9, + pp: 10, + priority: 3, + flags: {noassist: 1, failcopycat: 1}, + stallingMove: true, + volatileStatus: 'veto', + onPrepareHit(pokemon) { + return !!this.queue.willAct() && this.runEvent('StallMove', pokemon); + }, + onHit(pokemon) { + pokemon.addVolatile('stall'); + }, + condition: { + duration: 1, + onStart(target) { + this.add('-singleturn', target, 'move: 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).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 (!source.volatiles['disable']) { + source.addVolatile('disable', this.effectState.target); + } + return this.NOT_FAIL; + }, + onHit(target, source, move) { + if (move.isZOrMaxPowered && !source.volatiles['disable']) { + source.addVolatile('disable', this.effectState.target); + } + }, + }, + secondary: null, + target: "self", + type: "Normal", + }, + + // Blitz + geyserblast: { + accuracy: 95, + basePower: 100, + category: "Special", + shortDesc: "Fire + Water-type attack. Ignores weather.", + desc: "This move combines Fire in its type effectiveness against the target and does not increase or decrease damage dealt based on the current weather condition.", + name: "Geyser Blast", + gen: 9, + pp: 10, + priority: 0, + flags: {protect: 1, mirror: 1}, + onPrepareHit() { + this.attrLastMove('[anim] Steam Eruption'); + }, + onEffectiveness(typeMod, target, type, move) { + return typeMod + this.dex.getEffectiveness('Fire', type); + }, + secondary: null, + target: "normal", + type: "Water", + }, + + // Breadstycks + bakersdouzeoff: { + accuracy: true, + basePower: 0, + category: "Status", + shortDesc: "Wake up -> Wish + Substitute -> Baton Pass.", + desc: "The user wakes up if it is asleep. Then, the user uses the moves Wish, Substitute, and Baton Pass in that order. If the user does not have enough HP to set a Substitute, the rest of the effects of the move will still occur.", + name: "Baker's Douze Off", + gen: 9, + pp: 15, + priority: 1, + flags: {}, + sleepUsable: true, + slotCondition: 'Wish', + volatileStatus: 'substitute', + onPrepareHit(pokemon) { + this.attrLastMove('[anim] Teleport'); + if (pokemon.status === 'slp') pokemon.cureStatus(); + }, + onTry(source, target, move) { + if (source.volatiles['substitute'] || + source.hp <= source.maxhp / 4 || source.maxhp === 1) { // Shedinja clause + delete move.volatileStatus; + } + }, + onHit(target, source, move) { + if (move.volatileStatus) this.directDamage(target.maxhp / 4); + }, + onAfterMoveSecondarySelf(source) { + if (this.canSwitch(source.side)) { + this.actions.useMove('batonpass', source); + source.skipBeforeSwitchOutEventFlag = false; + } + }, + secondary: null, + target: "self", + type: "Normal", + }, + + // Cake + rolesystem: { + accuracy: true, + basePower: 0, + category: "Status", + shortDesc: "Protects, changes set. Can't use twice in a row.", + // it was easier to do it this way rather than implement failing on consecutive uses + desc: "Nearly always moves first. This move cannot be selected if it was the last move used by this Pokemon. The user is protected from most attacks made by other Pokemon during this turn, and all of the user's stat changes are set to 0. Then, the user gains varying stat boosts and changes its moveset based on the role it picks. Fast Attacker: +2 Attack, +4 Speed with Hyper Drill, Combat Torque, and Extreme Speed. Bulky Setup: +1 Attack, +1 Defense, +2 Special Defense with Coil, Body Slam, and Heal Order. Bulky Support: +2 Defense, +2 Special Defense with Heal Order and any two of Ceaseless Edge, Stone Axe, Mortal Spin, and G-Max Steelsurge. Wallbreaker: +6 Special Attack with Blood Moon.", + name: "Role System", + gen: 9, + pp: 40, + priority: 6, + flags: {protect: 1, mirror: 1, cantusetwice: 1, failcopycat: 1}, + onTry(source) { + if (source.species.baseSpecies === 'Dunsparce') { + return; + } + this.attrLastMove('[still]'); + this.add('-fail', source, 'move: Role System'); + this.hint("Only a Pokemon whose form is Dunsparce can use this move."); + return null; + }, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, 'Haze', target); + }, + onHit(target, source, move) { + if (this.randomChance(1, 256)) { + this.add('-activate', target, 'move: Celebrate'); + } else { + target.clearBoosts(); + this.add('-clearboost', target); + target.addVolatile('protect'); + const set = Math.floor(Math.random() * 4); + const newMoves = []; + let role = ''; + switch (set) { + case 0: + newMoves.push('hyperdrill', 'combattorque', 'extremespeed'); + role = 'Fast Attacker'; + this.boost({atk: 2, spe: 4}); + break; + case 1: + newMoves.push('coil', 'bodyslam', 'healorder'); + role = 'Bulky Setup'; + this.boost({atk: 1, def: 1, spd: 2}); + break; + case 2: + const varMoves = ['Ceaseless Edge', 'Stone Axe', 'Mortal Spin', 'G-Max Steelsurge']; + const move1 = this.sample(varMoves); + const move2 = this.sample(varMoves.filter(i => i !== move1)); + newMoves.push('healorder', move1, move2); + role = 'Bulky Support'; + this.boost({def: 2, spd: 2}); + break; + case 3: + newMoves.push('bloodmoon', 'bloodmoon', 'bloodmoon'); + role = 'Wallbreaker'; + this.boost({spa: 6}); + break; + // removing moveslots becomes very messy so this was the next best thing + } + this.add('-message', `Cake takes up the role of ${role}!`); + for (let i = 0; i < 3; i++) { + const replacement = this.dex.moves.get(newMoves[i]); + const replacementMove = { + move: replacement.name, + id: replacement.id, + pp: replacement.pp, + maxpp: replacement.pp, + target: replacement.target, + disabled: false, + used: false, + }; + source.moveSlots[i] = replacementMove; + source.baseMoveSlots[i] = replacementMove; + } + } + }, + secondary: null, + target: "self", + type: "Normal", + // bird type crashes during testing (runStatusImmunity for Bird at sim\pokemon.ts:2101:10). no-go. + }, + + // chaos + outage: { + accuracy: 95, + basePower: 110, + category: "Special", + shortDesc: "Clear Smog + Taunt + Embargo.", + desc: "If this move is successful, the target has all stat stages reset to 0, cannot use status moves for the next 3 turns, and cannot gain any effect from held items for 5 turns. Z-Crystals and forme-changing items are unaffected.", + name: "Outage", + gen: 9, + pp: 5, + priority: 0, + flags: {contact: 1, protect: 1}, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, 'Dark Pulse', target); + }, + secondaries: [ + { + chance: 100, + volatileStatus: 'taunt', + }, { + chance: 100, + volatileStatus: 'embargo', + }, + { + chance: 100, + onHit(target) { + target.clearBoosts(); + this.add('-clearboost', target); + }, + }, + ], + target: "normal", + type: "Dark", + }, + + // Chloe + detodaslasflores: { + accuracy: 90, + basePower: 90, + category: "Physical", + shortDesc: "Sets Grassy Terrain before. -50% HP on miss.", + desc: "Before attacking, this move will set Grassy Terrain for 5 turns. If the attack is not successful, the user loses half of its maximum HP, rounded down, as crash damage.", + name: "De Todas las Flores", + gen: 9, + pp: 15, + priority: 0, + flags: {contact: 1, protect: 1, mirror: 1, gravity: 1}, + hasCrashDamage: true, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.field.setTerrain('grassyterrain'); + this.add('-anim', source, 'High Jump Kick', target); + }, + onMoveFail(target, source, move) { + this.damage(source.baseMaxhp / 2, source, source, this.dex.conditions.get('High Jump Kick')); + }, + secondary: null, + target: "normal", + type: "Grass", + }, + + // Chris + antidote: { + accuracy: true, + basePower: 0, + category: "Status", + name: "Antidote", + shortDesc: "Heal 50% HP + 3 turn Magnet Rise.", + desc: "The user restores 1/2 of its maximum HP, rounded half up. If the user is not currently under the effect of Magnet Rise, it gains the effect of Magnet Rise for 3 turns, causing it to be immune to all Ground-type moves except Thousand Arrows for the duration.", + pp: 10, + priority: 0, + flags: {snatch: 1, heal: 1, gravity: 1, metronome: 1}, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(pokemon) { + this.add('-anim', pokemon, 'Recover', pokemon); + this.add('-anim', pokemon, 'Magnet Rise', pokemon); + }, + onTry(source, target, move) { + if (target.volatiles['smackdown'] || target.volatiles['ingrain']) return false; + + // Additional Gravity check for Z-move variant + if (this.field.getPseudoWeather('Gravity')) { + this.add('cant', source, 'move: Gravity', move); + return null; + } + }, + onHit(target, source, move) { + const success = !!this.heal(this.modify(source.maxhp, 0.25)); + return source.addVolatile('magnetrise', source, move) || success; + }, + secondary: null, + target: "self", + type: "Normal", + }, + + // ciran + summonmonsterviiifiendishmonstrouspiplupedecolossal: { + accuracy: 90, + basePower: 60, + basePowerCallback(pokemon, target, move) { + if (move.hit === 1) return 60; + if (move.hit === 2) return 0; + return 20; + }, + category: "Physical", + shortDesc: "60 BP Bite->Toxic->2-5 multihit w/ 20 BP each.", + desc: "The user calls the following effects in order: a 100% accurate 60 Base Power Poison-type attack with a 20% chance to cause the target to flinch; 100% accurate Toxic; and 2-5 90% accurate 20 Base Power Poison-type attacks.", + name: "Summon Monster VIII: Fiendish monstrous Piplupede, Colossal", + gen: 9, + pp: 15, + priority: 0, + flags: {protect: 1, contact: 1, mirror: 1}, + multihit: [3, 7], + self: { + volatileStatus: 'summonmonsterviiifiendishmonstrouspiplupedecolossal', + }, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, 'Crunch', target); + this.add('-anim', source, 'Fury Swipes', target); + }, + condition: { + duration: 1, + noCopy: true, + onAccuracy(accuracy, target, source, move) { + if (move.hit <= 2) return 100; + return 90; + }, + }, + secondaries: [ + { + chance: 20, + onHit(target, source, move) { + if (move.hit !== 1) return; + target.addVolatile('flinch', source, move); + }, + }, + { + chance: 100, + onHit(target, source, move) { + if (move.hit !== 2) return; + target.trySetStatus('tox', source, move); + }, + }, + ], + onAfterMove(source, target, move) { + this.add(`c:|${getName((source.illusion || source).name)}|There's no way this'll faint in one punch!`); + }, + target: "allAdjacentFoes", + type: "Poison", + }, + + // Clefable + giveaway: { + accuracy: true, + basePower: 0, + category: "Status", + shortDesc: "User switches, passing stat changes and more.", + desc: "The user is replaced with another Pokemon in its party. The selected Pokemon has the user's stat stage changes, confusion, and certain move effects transferred to it.", + name: "Giveaway!", + gen: 9, + pp: 10, + priority: 0, + flags: {metronome: 1}, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, 'Teleport', target); + this.add('-anim', source, 'Baton Pass', target); + }, + // Baton Pass clones are stupid client side so we're doing this + onHit(target) { + this.actions.useMove('batonpass', target); + }, + secondary: null, + target: "self", + type: "Normal", + }, + + // Clementine + o: { + accuracy: 100, + basePower: 100, + category: "Special", + shortDesc: "Phys if Atk > SpA. Flips user.", + desc: "This move becomes a physical attack if the user's Attack is greater than its Special Attack, including stat stage changes. This move's type depends on the user's primary type. If this move is successful and the user is an Avalugg, it either gains or loses the Flipped condition, changing its moveset and base stats. When under the Flipped condition, Avalugg's Base Stats are 95/46/44/184/116/95 and its moveset changes to Earth Power, Volt Switch, and Heal Pulse. This move is super effective against Kennedy.", + name: "(╯°o°)╯︵ ┻━┻", + pp: 10, + priority: 0, + flags: {protect: 1, failcopycat: 1, nosketch: 1}, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, 'Malicious Moonsault', target); + this.add('-anim', source, 'Blizzard', target); + }, + onModifyMove(move, pokemon) { + if (pokemon.getStat('atk', false, true) > pokemon.getStat('spa', false, true)) move.category = 'Physical'; + }, + onModifyType(move, pokemon) { + let type = pokemon.getTypes()[0]; + if (type === "Bird") type = "???"; + if (type === "Stellar") type = pokemon.getTypes(false, true)[0]; + move.type = type; + }, + onEffectiveness(typeMod, target, type) { + if (target?.name === 'Kennedy') return 1; + }, + onHit(target, source, move) { + if (source.illusion || source.baseSpecies.baseSpecies !== 'Avalugg') return; + if (source.volatiles['flipped']) { + source.removeVolatile('flipped'); + changeSet(this, source, ssbSets['Clementine']); + } else { + source.addVolatile('flipped', source, move); + changeSet(this, source, ssbSets['Clementine-Flipped']); + } + }, + target: "normal", + type: "Normal", + }, + + // clerica + stockholmsyndrome: { + accuracy: true, + basePower: 0, + category: "Status", + shortDesc: "Curses and traps foe. User loses 1/2 HP.", + desc: "The user loses 1/2 of its maximum HP, rounded down and even if it would cause fainting, in exchange for the target losing 1/4 of its maximum HP, rounded down, at the end of each turn while it is active and becoming unable to switch out.", + name: "Stockholm Syndrome", + pp: 5, + priority: 0, + flags: {bypasssub: 1}, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, 'Curse', target); + this.add('-anim', source, 'Block', target); + }, + onHit(target, source, move) { + let success = false; + if (!target.volatiles['curse']) { + this.directDamage(source.maxhp / 2, source, source); + target.addVolatile('curse'); + success = true; + } + return target.addVolatile('trapped', source, move, 'trapper') || success; + }, + zMove: {effect: 'heal'}, + secondary: null, + target: "normal", + type: "Ghost", + }, + + // Clouds + windsofchange: { + accuracy: 100, + basePower: 70, + category: "Physical", + shortDesc: "User sets Tailwind and switches out.", + desc: "If this attack is successful and the user has not fainted, the user switches out even if it is trapped and is replaced immediately by a selected party member, and its party members have their Speed doubled for 4 turns.", + name: "Winds of Change", + pp: 15, + priority: 0, + flags: {protect: 1}, + self: { + sideCondition: 'tailwind', + }, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, 'Tailwind', target); + this.add('-anim', source, 'U-turn', target); + }, + selfSwitch: true, + secondary: null, + target: "normal", + type: "Flying", + }, + + // Coolcodename + haxerswill: { + accuracy: 100, + basePower: 0, + category: "Status", + shortDesc: "70% +1 SpA/Spe & Focus Energy, else lose boosts.", + desc: "This move has a 70% chance to boost the user's Special Attack and Speed by 1 stage and grant the user an increased chance of dealing critical hits. If it does not do this, the user's positive stat stage changes will instead be removed.", + name: "Haxer's Will", + gen: 9, + pp: 15, + priority: 0, + flags: {}, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, 'Clangorous Soul', source); + this.add('-anim', source, 'Focus Energy', source); + }, + onHit(pokemon) { + if (this.randomChance(7, 10)) { + this.boost({spa: 1, spe: 1}); + pokemon.addVolatile('focusenergy'); + } else { + pokemon.clearBoosts(); + this.add('-clearboost', pokemon); + } + }, + target: "self", + type: "Normal", + }, + + // Corthius + monkeybeatup: { + accuracy: 100, + basePower: 20, + category: "Physical", + shortDesc: "Hits 4-5 times. +1 priority under Grassy Terrain.", + desc: "Usually moves first when Grassy Terrain is in effect. This move has a 50% chance to hit 4 times and a 50% chance to hit 5 times.", + name: "Monkey Beat Up", + gen: 9, + pp: 10, + priority: 0, + multihit: [4, 5], + flags: {protect: 1, contact: 1}, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, 'Beat Up', target); + this.add('-anim', source, 'Wood Hammer', target); + }, + onModifyPriority(priority, source, target, move) { + if (this.field.isTerrain('grassyterrain') && source.isGrounded()) { + return priority + 1; + } + }, + target: "normal", + type: "Grass", + }, + + // Dawn of Artemis + magicalfocus: { + accuracy: 100, + basePower: 80, + category: "Special", + name: "Magical Focus", + shortDesc: "Move type cycles. Sets Reflect. Fail if Ultra.", + desc: "This move's type cycles between Fire, Electric, and Ice depending on the current turn number, starting at Fire on turn 1, Electric on turn 2, Ice on turn 3, and repeating this pattern on future turns. For 5 turns, all Pokemon on the user's side of the field take 0.5x damage from physical attacks. This move fails if the user is Necrozma-Ultra.", + pp: 10, + priority: 0, + flags: {protect: 1, mirror: 1}, + onTryMove(target, source, move) { + switch (move.type) { + case 'Fire': + this.attrLastMove('[anim] Flamethrower'); + break; + case 'Electric': + this.attrLastMove('[anim] Thunderbolt'); + break; + case 'Ice': + this.attrLastMove('[anim] Ice Beam'); + break; + default: + this.attrLastMove('[anim] Hyper Beam'); + break; + } + }, + onModifyType(move) { + if (this.turn % 3 === 1) { + move.type = 'Fire'; + } else if (this.turn % 3 === 2) { + move.type = 'Electric'; + } else { + move.type = 'Ice'; + } + }, + onDisableMove(pokemon) { + if (pokemon.species.id === 'necrozmaultra') pokemon.disableMove('magicalfocus'); + }, + self: { + sideCondition: 'reflect', + }, + target: "normal", + type: "Normal", + }, + + // DaWoblefet + superegoinflation: { + accuracy: true, + basePower: 0, + category: "Status", + shortDesc: "User heals 25% HP; Target: +2 Atk/SpA + Taunt.", + desc: "The user heals 1/4 of its maximum HP. The target's Attack and Special Attack are raised by 2 stages each, and the target cannot use status moves for 3 turns.", + name: "Super Ego Inflation", + gen: 9, + pp: 5, + priority: -7, + flags: {protect: 1, mirror: 1, bypasssub: 1, reflectable: 1}, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, 'Follow Me', source); + this.add('-anim', target, 'Swords Dance', target); + this.add('-anim', target, 'Nasty Plot', target); + }, + onHit(target, source) { + this.heal(source.maxhp / 4, source); + this.boost({atk: 2, spa: 2}); + target.addVolatile('taunt'); + }, + target: "normal", + type: "Normal", + }, + + // deftinwolf + trivialpursuit: { + accuracy: 100, + basePower: 70, + basePowerCallback(pokemon, target, move) { + // You can't get here unless the pursuit succeeds + if (target.beingCalledBack || target.switchFlag) { + this.debug('Trivial Pursuit damage boost'); + return move.basePower * 2; + } + return move.basePower; + }, + category: "Physical", + shortDesc: "If foe is switching out, 2x power. Doesn't KO.", + desc: "If an opposing Pokemon switches out this turn, this move hits that Pokemon before it leaves the field, even if it was not the original target. If the user moves after an opponent using Flip Turn, Parting Shot, Teleport, U-turn, or Volt Switch, but not Baton Pass, it will hit that opponent before it leaves the field. Power doubles and no accuracy check is done if the user hits an opponent switching out, and the user's turn is over. Leaves the target with at least 1 HP.", + name: "Trivial Pursuit", + pp: 5, + priority: 0, + flags: {contact: 1, protect: 1, mirror: 1}, + onPrepareHit() { + this.attrLastMove('[anim] Pursuit'); + }, + beforeTurnCallback(pokemon) { + for (const side of this.sides) { + if (side.hasAlly(pokemon)) continue; + side.addSideCondition('trivialpursuit', pokemon); + const data = side.getSideConditionData('trivialpursuit'); + 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('trivialpursuit'); + }, + condition: { + duration: 1, + onBeforeSwitchOut(pokemon) { + this.debug('Trivial Pursuit 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: Pursuit'); + 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) { + for (const [actionIndex, action] of this.queue.entries()) { + if (action.pokemon === source && action.choice === 'megaEvo') { + this.actions.runMegaEvo(source); + this.queue.list.splice(actionIndex, 1); + break; + } + } + } + this.actions.runMove('trivialpursuit', source, source.getLocOf(pokemon)); + } + }, + }, + onDamagePriority: -20, + onDamage(damage, target, source, effect) { + if (damage >= target.hp) return target.hp - 1; + }, + secondary: null, + target: "normal", + type: "Dark", + }, + + // dhelmise + bioticorb: { + accuracy: true, + basePower: 0, + category: "Status", + shortDesc: ">50% HP:Set orb that damages foes.<50% heals you.", + desc: "If the user's HP is at or above 50% of its maximum HP, a damaging orb is set on the opponent's side of the field, dealing 50 points of damage at the end of each turn for 4 turns. If the user's HP is below 50% of its maximum HP, a healing orb is set on the user's side of the field, healing the active Pokemon for 65 HP at the end of each turn until it has healed a total of 300 HP. If the appropriate side already has its orb, this move will try to place the other orb down. This move fails if an orb is already in place on the side an orb would be set.", + name: "Biotic Orb", + gen: 9, + pp: 10, + priority: 0, + flags: {reflectable: 1, mustpressure: 1}, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + if (source.hp < source.maxhp / 2) { + this.add('-anim', source, 'Wish', source); + } else { + this.add('-anim', source, 'Shadow Ball', target); + } + }, + // Volatiles implemented in conditions.ts + onHit(target, source, move) { + if (source.hp < source.maxhp / 2) { + if (!source.side.addSideCondition('bioticorbself', source, move)) { + if (!source.side.foe.addSideCondition('bioticorbfoe', source, move)) return null; + } + } else { + if (!source.side.foe.addSideCondition('bioticorbfoe', source, move)) { + if (!source.side.addSideCondition('bioticorbself', source, move)) return null; + } + } + }, + secondary: null, + target: "normal", + type: "Poison", + }, + + // DianaNicole + breathoftiamat: { + accuracy: 95, + basePower: 20, + category: "Special", + shortDesc: "5 hits: Fire, Ice, Poison, Elec, Poison. Is STAB.", + desc: "This move hits 5 times. The first hit is Fire-type, the second is Ice-type, the third is Poison-type, the fourth is Electric-type, and the fifth is Poison-type. Each move checks accuracy individually, and if one hit misses, the attack stops. If the target is immune to one or more of the hits, the rest will still execute as normal. This move will always have Same-Type Attack Bonus.", + name: "Breath of Tiamat", + pp: 20, + priority: 0, + flags: {protect: 1}, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source, move) { + if (target.runImmunity('Fire')) { + this.add('-anim', source, 'Flamethrower', target); + } + }, + onHit(target, source, move) { + const moveTypes = ['Fire', 'Ice', 'Poison', 'Electric', 'Poison']; + const hitTypes = moveTypes.filter(x => target.runImmunity(x)); + if (move.hit >= hitTypes.length) { + move.basePower = 0; + move.category = 'Status'; + /* Problem here - we can't retroactively change the multihit parameter. + With this specific code, the move functions as intended, but will display the incorrect + number of hits if a target is immune to any of them. Even if you try to return false, null, etc + during this step, it will not interrupt the move. Nor will a this.add(-fail) do so either. + This seems to be the only way to get it to work and is a decent enough compromise for now. */ + } else { + move.type = hitTypes[move.hit]; + const moveAnims = ['Flamethrower', 'Ice Beam', 'Gunk Shot', 'Charge Beam', 'Sludge Bomb']; + const hitAnims = []; + for (const [i, anim] of moveAnims.entries()) { + const index2 = Math.min(i, hitTypes.length - 1); + if (moveTypes[i] === hitTypes[index2]) { + hitAnims.push(anim); + } + } + this.add('-anim', source, hitAnims[move.hit], target); + } + }, + multihit: 5, + multiaccuracy: true, + forceSTAB: true, + secondary: null, + target: 'normal', + type: "Fire", + }, + + // EasyOnTheHills + snacktime: { + accuracy: true, + basePower: 0, + category: "Status", + shortDesc: "Charges.Turn 2: +2 Atk/Def, heal 25% for 3 turns.", + desc: "Boosts the user's Attack and Defense by 2 stages, and heals the user for 1/4 of its maximum HP at the end of each turn for 3 turns. This attack charges on the first turn and executes on the second. This move will fail if it is already in effect.", + name: "Snack Time", + pp: 10, + priority: 0, + flags: {}, + volatileStatus: 'snack', + onTryMove(attacker, defender, move) { + if (attacker.volatiles['snack']) { + this.add('-fail', attacker, 'move: Snack Time'); + this.attrLastMove('[still]'); + return null; + } + if (attacker.removeVolatile(move.id)) { + this.attrLastMove('[still]'); + this.add('-anim', attacker, 'Shell Smash', attacker); + return; + } + this.attrLastMove('[still]'); + this.add('-anim', attacker, 'Geomancy', attacker); + if (!this.runEvent('ChargeMove', attacker, defender, move)) { + return; + } + attacker.addVolatile('twoturnmove', defender); + return null; + }, + boosts: { + atk: 2, + def: 2, + }, + // passive recovery implemented in conditions.ts + secondary: null, + target: "self", + type: "Normal", + }, + + // Elliot + teaparty: { + accuracy: true, + basePower: 0, + category: "Status", + shortDesc: "Recover & Refresh. 7/8 get Boiled, 1/8 Beefed.", + desc: "The user heals 1/2 of its maximum HP and cures its non-volatile status condition. The user has a 7/8 chance of gaining the Boiled condition, removing all previously-added extra types, adding a Water typing to the user, replacing its ability with Speed Boost, and replacing Teatime or Body Press with Steam Eruption if it exists on the set; and a 1/8 chance of gaining the Beefed condition, removing all previously-added extra types, adding a Fighting typing to the user, replacing its ability with Stamina, and replacing Teatime or Steam Eruption with Body Press.", + name: "Tea Party", + pp: 5, + priority: 0, + flags: {protect: 1, mirror: 1, heal: 1}, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, 'Milk Drink', source); + }, + onHit(pokemon) { + this.heal(pokemon.baseMaxhp / 2); + pokemon.cureStatus(); + let newMove = ""; + let backupMove = ""; + if (this.randomChance(7, 8)) { // get boiled + pokemon.removeVolatile('beefed'); + pokemon.addVolatile('boiled'); + pokemon.setAbility("Speed Boost"); + newMove = 'steameruption'; + backupMove = 'bodypress'; + if (!pokemon.hasType('Water') && pokemon.addType('Water')) { + this.add('-start', pokemon, 'typeadd', 'Water', '[from] move: Tea Party'); + } + this.add(`c:|${getName((pokemon.illusion || pokemon).name)}|Just tea, thank you`); + } else { // get beefed + pokemon.removeVolatile('boiled'); + pokemon.addVolatile('beefed'); + pokemon.setAbility("Stamina"); + newMove = 'bodypress'; + backupMove = 'steameruption'; + if (!pokemon.hasType('Fighting') && pokemon.addType('Fighting')) { + this.add('-start', pokemon, 'typeadd', 'Fighting', '[from] move: Tea Party'); + } + this.add(`c:|${getName((pokemon.illusion || pokemon).name)}|BOVRIL TIME`); + } + // -start for beefed and boiled is not necessary, i put it in there for an indicator + // as to what form sinistea is currently using. backupMove also eases the form switch + let teaIndex = pokemon.moves.indexOf('teatime'); + const replacement = this.dex.moves.get(newMove); + if (teaIndex < 0) { + if (pokemon.moves.includes(backupMove)) { + teaIndex = pokemon.moves.indexOf(backupMove); + } else { + return; + } + } + const newMoveSlot = { + move: replacement.name, + id: replacement.id, + pp: replacement.pp, + maxpp: replacement.pp, + target: replacement.target, + disabled: false, + used: false, + }; + pokemon.moveSlots[teaIndex] = newMoveSlot; + }, + secondary: null, + target: 'self', + type: "Flying", + }, + + // Elly + sustainedwinds: { + accuracy: 90, + basePower: 20, + category: "Special", + shortDesc: "Hits 5 times.", + name: "Sustained Winds", + pp: 10, + priority: 0, + flags: {protect: 1, mirror: 1, wind: 1}, + onPrepareHit() { + this.attrLastMove('[anim] Bleakwind Storm'); + }, + multihit: 5, + secondary: null, + target: 'normal', + type: "Flying", + }, + + // Emboar02 + insertboarpunhere: { + accuracy: 100, + basePower: 80, + category: "Physical", + shortDesc: "Has 33% recoil. Switch after using.", + desc: "If the target lost HP, the user takes recoil damage equal to 33% of the HP lost by the target, rounded half up, but not less than 1 HP. If this move is successful and the user has not fainted, the user switches out even if it is trapped and is replaced immediately by a selected party member. The user does not switch out if there are no unfainted party members, or if the target switched out using an Eject Button or through the effect of the Emergency Exit or Wimp Out Abilities.", + name: "Insert boar pun here", + pp: 20, + priority: 0, + flags: {protect: 1, contact: 1}, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, 'Collision Course', target); + this.add('-anim', source, 'U-turn', target); + }, + selfSwitch: true, + recoil: [33, 100], + secondary: null, + target: 'normal', + type: "Fighting", + }, + + // Fame + solidarity: { + accuracy: 100, + basePower: 0, + category: "Status", + shortDesc: "Creates a Substitute and sets Leech Seed.", + desc: "The user takes 1/4 of its maximum HP, rounded down, and puts it into a substitute to take its place in battle. The Pokemon at the user's position steals 1/8 of the target's maximum HP, rounded down, at the end of each turn. If either of the affected Pokemon uses Baton Pass, its respective effect will remain for its replacement.", + name: "Solidarity", + pp: 15, + priority: 0, + flags: {protect: 1, reflectable: 1}, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, 'Substitute'); + this.add('-anim', source, 'Leech Seed', target); + }, + onHit(target, source) { + if (target.hasType('Grass') || target.isProtected()) return null; + target.addVolatile('leechseed', source); + }, + self: { + onHit(target, source) { + if (source.volatiles['substitute']) return; + if (source.hp <= source.maxhp / 4 || source.maxhp === 1) { // Shedinja clause + this.add('-fail', source, 'move: Substitute', '[weak]'); + } else { + source.addVolatile('substitute'); + this.directDamage(source.maxhp / 4); + } + }, + }, + secondary: null, + target: 'normal', + type: "Grass", + }, + + // Felucia + riggeddice: { + accuracy: 100, + basePower: 0, + category: "Status", + shortDesc: "Stat changes: inverts, else Taunt. User switches.", + desc: "If the target has any stat stage changes, the target's positive stat stages become negative and vice versa. If the target does not have any stat stage changes, the target cannot use status moves for 3 turns. If this move is successful, the user switches out even if it is trapped and is replaced immediately by a selected party member. The user does not switch out if there are no unfainted party members.", + name: "Rigged Dice", + pp: 10, + priority: 0, + flags: {protect: 1, reflectable: 1}, + selfSwitch: true, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, 'Smart Strike', source); + }, + onHit(target, source) { + let success = false; + let i: BoostID; + for (i in target.boosts) { + if (target.boosts[i] === 0) continue; + target.boosts[i] = -target.boosts[i]; + success = true; + } + if (success) { + this.add('-invertboost', target, '[from] move: Rigged Dice'); + } else { + target.addVolatile('taunt', source); + } + }, + secondary: null, + target: 'normal', + type: "Bug", + }, + + // Froggeh + cringedadjoke: { + accuracy: 90, + basePower: 90, + category: "Physical", + shortDesc: "Confuses the foe. Foe self-hits: +1 Atk/Def.", + desc: "Confuses the target. When the target hits itself in confusion from this move, the user's Attack and Defense are boosted by 1 stage.", + name: "Cringe Dad Joke", + pp: 10, + priority: 0, + flags: {protect: 1}, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, 'Dizzy Punch', target); + this.add('-anim', source, 'Bulk Up', source); + }, + self: { + volatileStatus: 'cringedadjoke', + }, + secondary: { + chance: 100, + volatileStatus: 'confusion', + }, + target: 'normal', + type: "Fighting", + // confusion self-hit stat bonus implemented as an innate because it doesn't work as a move effect + }, + + // Frostyicelad + puffyspikydestruction: { + accuracy: true, + basePower: 0, + category: "Status", + shortDesc: "Turn 1 out: DDance, TSpikes, -Psn type.", + desc: "Nearly always moves first. Removes the user's Poison typing if it has one, and boosts the user's Attack and Speed by 1 stage. Sets one layer of Toxic Spikes on the opposing side of the field, poisoning all grounded, non-Poison-type Pokemon that switch in. Fails unless it's the user's first turn on the field.", + name: "Puffy Spiky Destruction", + pp: 5, + priority: 4, + flags: {}, + onTry(source) { + if (source.activeMoveActions > 1) { + this.hint("Puffy Spiky Destruction only works on your first turn out."); + return false; + } + }, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, 'Quiver Dance', source); + this.add('-anim', source, 'Spiky Shield', source); + this.add('-anim', source, 'Toxic Spikes', target); + }, + onHit(target, source, move) { + source.setType(source.getTypes(true).filter(type => type !== "Poison")); + this.add('-start', source, 'typechange', source.getTypes().join('/'), '[from] move: Puffy Spiky Destruction'); + const foeSide = source.side.foe; + if (!foeSide.sideConditions['toxicspikes'] || foeSide.sideConditions['toxicspikes'].layers < 2) { + foeSide.addSideCondition('toxicspikes', source, move); + } + }, + boosts: { + spe: 1, + atk: 1, + }, + secondary: null, + target: 'self', + type: "Poison", + }, + + // Frozoid + flatoutfalling: { + accuracy: 100, + basePower: 75, + category: "Physical", + shortDesc: "Sets Gravity.", + desc: "Sets Gravity for 5 turns, multiplying the evasiveness of all active Pokemon by 0.6 and grounding them.", + name: "Flat out falling", + pp: 5, + priority: 0, + flags: {protect: 1}, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, 'Head Smash', target); + this.add('-anim', source, 'Gravity', target); + }, + self: { + onHit(source) { + this.field.addPseudoWeather('gravity', source); + }, + }, + secondary: null, + target: 'normal', + type: "???", + }, + + // Ganjafin + wigglingstrike: { + accuracy: 95, + basePower: 10, + category: "Physical", + shortDesc: "Applies Salt Cure and sets a layer of spikes.", + desc: "Causes damage to the target equal to 1/8 of its maximum HP (1/4 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. Sets a layer of Spikes on the target's side of the field, damaging grounded foes when they switch in.", + name: "Wiggling Strike", + gen: 9, + pp: 10, + priority: 0, + flags: {protect: 1, mirror: 1}, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, 'Water Pulse', target); + this.add('-anim', target, 'Aqua Ring', target); + }, + self: { + onHit(source) { + for (const side of source.side.foeSidesWithConditions()) { + side.addSideCondition('spikes'); + } + }, + }, + secondary: { + chance: 100, + volatileStatus: 'saltcure', + }, + target: "normal", + type: "Water", + }, + + // Haste Inky + hastyrevolution: { + accuracy: 100, + basePower: 0, + category: "Status", + shortDesc: "Clear foe stats+copies neg stats+inverts on user.", + desc: "Resets the stat stages of the target to 0. Then, the target receives a copy of the user's negative stat stage changes, and the user's negative stat stage changes become positive.", + name: "Hasty Revolution", + pp: 10, + priority: 4, + flags: {protect: 1, mirror: 1, noassist: 1, failcopycat: 1}, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, 'Pain Split', target); + return !!this.queue.willAct() && this.runEvent('StallMove', source); + }, + onHit(target, source, move) { + source.addVolatile('stall'); + target.clearBoosts(); + this.add('-clearboost', target); + let i: BoostID; + for (i in source.boosts) { + if (source.boosts[i] < 0) { + target.boosts[i] += source.boosts[i]; + this.add('-setboost', target, i as string, target.boosts[i], '[silent]'); + source.boosts[i] = -source.boosts[i]; + this.add('-setboost', source, i as string, source.boosts[i], '[silent]'); + } + } + this.add('-message', `${target.name} received ${source.name}'s negative stat boosts!'`); + this.add('-message', `${source.name} inverted their negative stat boosts!`); + }, + stallingMove: true, + self: { + volatileStatus: 'protect', + }, + secondary: null, + target: "normal", + type: "Normal", + }, + + // havi + augurofebrietas: { + accuracy: 100, + basePower: 70, + category: "Special", + shortDesc: "Disables the target's last move and switches.", + desc: "The target's last used move is disabled and cannot be selected for 4 turns. This move cannot disable more than one move at a time. The user then switches out even if it is trapped and is replaced immediately by a selected party member. The user does not switch out if there are no unfainted party members.", + name: "Augur of Ebrietas", + pp: 10, + priority: 0, + flags: {protect: 1, mirror: 1}, + onPrepareHit() { + this.attrLastMove('[anim] Spirit Shackle'); + }, + onAfterHit(target, source, move) { + this.add(`c:|${getName((source.illusion || source).name)}|as you once did for the vacuous Rom,`); + }, + selfSwitch: true, + volatileStatus: 'disable', + target: "normal", + type: "Ghost", + }, + + // Hecate + testinginproduction: { + accuracy: true, + basePower: 0, + category: "Status", + shortDesc: "+2, -2 to random stats, small chance of harm.", + desc: "The user boosts a random stat by 2 stages, and the user lowers a random stat by 2 stages. These can be the same stat, and cannot include Accuracy or Evasion. Independently, there is a 10% chance for the user to lose 10% of their maximum HP, and there is a 5% chance for the user to gain a random non-volatile status condition.", + name: "Testing in Production", + gen: 9, + pp: 5, + priority: 0, + flags: {}, + onPrepareHit() { + this.attrLastMove('[anim] Curse'); + }, + onHit(pokemon) { + this.add(`c:|${getName((pokemon.illusion || pokemon).name)}|Please don't break...`); + let stats: BoostID[] = []; + const boost: SparseBoostsTable = {}; + let statPlus: BoostID; + for (statPlus in pokemon.boosts) { + if (statPlus === 'accuracy' || statPlus === 'evasion') continue; + if (pokemon.boosts[statPlus] < 6) { + stats.push(statPlus); + } + } + let randomStat: BoostID | undefined = stats.length ? this.sample(stats) : undefined; + if (randomStat) boost[randomStat] = 2; + + stats = []; + let statMinus: BoostID; + for (statMinus in pokemon.boosts) { + if (statMinus === 'accuracy' || statMinus === 'evasion') continue; + if (pokemon.boosts[statMinus] > -6) { + stats.push(statMinus); + } + } + randomStat = stats.length ? this.sample(stats) : undefined; + if (randomStat) { + if (boost[randomStat]) { + boost[randomStat] = 0; + this.add(`c:|${getName((pokemon.illusion || pokemon).name)}|Well. Guess that broke. Time to roll back.`); + return; + } else { + boost[randomStat] = -2; + } + } + + this.boost(boost, pokemon, pokemon); + }, + onAfterMove(pokemon) { + if (this.randomChance(1, 10)) { + this.add(`c:|${getName((pokemon.illusion || pokemon).name)}|Ouch! That crash is really getting on my nerves...`); + this.damage(pokemon.baseMaxhp / 10); + if (pokemon.hp <= 0) return; + } + + if (this.randomChance(1, 20)) { + const status = this.sample(['frz', 'brn', 'psn', 'par']); + let statusText = status; + if (status === 'frz') { + statusText = 'froze'; + } else if (status === 'brn') { + statusText = 'burned'; + } else if (status === 'par') { + statusText = 'paralyzed'; + } else if (status === 'psn') { + statusText = 'poisoned'; + } + + this.add(`c:|${getName((pokemon.illusion || pokemon).name)}|Darn. A bug ${statusText} me. Guess I should have tested this first.`); + pokemon.setStatus(status); + } + }, + secondary: null, + target: "self", + type: "Electric", + }, + + // HiZo + scapegoat: { + accuracy: true, + basePower: 0, + category: "Status", + shortDesc: "KO a teammate; gain more Atk/SpA/Spe if healthy.", + desc: "A party member is selected and faints, raising the user's Attack, Special Attack, and Speed by 1 stage if the party member's HP is below 33%, by 2 stages if the party member's HP is between 33% and 66%, and by 3 stages if the party member's HP is above 66%. Fails if there are no non-fainted Pokemon on the user's side.", + name: "Scapegoat", + gen: 9, + pp: 5, + priority: 0, + flags: {}, + onTryHit(source) { + if (!this.canSwitch(source.side)) { + this.attrLastMove('[still]'); + this.add('-fail', source); + return this.NOT_FAIL; + } + }, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, 'Swords Dance', source); + }, + onHit(target, source) { + this.add(`c:|${getName((source.illusion || source).name)}|Ok I have a stupid idea, just hear me out`); + this.add('message', `A sacrifice is needed.`); + }, + slotCondition: 'scapegoat', + // fake switch a la revival blessing + selfSwitch: true, + condition: { + duration: 1, + // reviving implemented in side.ts, kind of + }, + secondary: null, + target: "self", + type: "Dark", + }, + + + // HoeenHero + reprogram: { + accuracy: 100, + basePower: 0, + category: "Status", + shortDesc: "Rain Dance + Lock-On.", + name: "Re-Program", + pp: 10, + priority: 0, + flags: {protect: 1}, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, 'Calm Mind', source); + this.add('-anim', source, 'Geomancy', target); + }, + onHit(target, source, move) { + let success = false; + if (this.field.setWeather('raindance', source, move)) { + this.add('-message', 'HoeenHero made the environment easier to work with!'); + success = true; + } + if (source.addVolatile('lockon', target)) { + this.add('-message', 'HoeenHero double checked their work and fixed any errors!'); + this.add('-activate', source, 'move: Lock-On', '[of] ' + target); + success = true; + } + if (success) { + this.add('-message', 'HoeenHero reprograms the battle to be more beneficial to them!'); + } + }, + target: "normal", + type: "Psychic", + }, + + // hsy + wonderwing: { + accuracy: 90, + basePower: 150, + category: "Physical", + shortDesc: "No dmg rest of turn. Next turn user has -1 prio.", + desc: "Usually moves last. The user becomes immune to all damage sources for the rest of the turn. The turn after this move is used, the user's moves all gain -1 priority. This move ignores all negative effects associated with contact moves.", + name: "Wonder Wing", + pp: 5, + priority: 0, + flags: {contact: 1}, + // No negative contact effects implemented in Battle#checkMovesMakeContact + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, 'Electric Terrain', source); + this.add('-anim', source, 'Giga Impact', target); + }, + self: { + volatileStatus: 'wonderwing', + }, + condition: { + noCopy: true, + duration: 2, + onStart(pokemon) { + this.add('-start', pokemon, 'Wonder Wing'); + }, + onRestart(target, source, sourceEffect) { + target.removeVolatile('wonderwing'); + }, + onDamage(damage, target, source, effect) { + if (this.effectState.duration < 2) return; + this.add('-activate', source, 'move: Wonder Wing'); + return false; + }, + onModifyPriority(relayVar, source, target, move) { + return -1; + }, + onEnd(pokemon) { + this.add('-end', pokemon, 'Wonder Wing', '[silent]'); + }, + }, + target: "normal", + type: "Flying", + }, + + // Hydrostatics + hydrostatics: { + accuracy: 100, + basePower: 90, + category: "Special", + name: "Hydrostatics", + shortDesc: "70%:+1 SpA,50%:prz,Elec/Water. Differs when Tera.", + desc: "If the user has not Terastallized, this move has a 70% chance to raise the user's Special Attack by 1 stage, has a 50% chance to paralyze the target, and combines the Water type in its type effectiveness. When the user has Terastallized, this move is a purely Water-type attack that gains Same-Type Attack Bonus with Water-types, and it has an 80% chance to raise the user's Special Attack by 1 stage, has a 60% chance to change the target's typing to Water, and is super effective against Water.", + pp: 20, + priority: 1, + flags: {protect: 1, mirror: 1}, + onModifyMove(move, source, target) { + if (source.terastallized) { + move.type = 'Water'; + } + }, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + if (!source.terastallized) this.add('-anim', source, 'Charge Beam', source); + else this.add('-anim', source, 'Water Pulse', target); + }, + onEffectiveness(typeMod, target, type, move) { + if (move.type === 'Electric') return typeMod + this.dex.getEffectiveness('Water', type); + else if (type === 'Water' && move.type === 'Water') return 1; + }, + secondary: { + chance: 100, + onHit(target, source, move) { + // None of these stack with Serene Grace + if (!source.terastallized) { + if (this.randomChance(70, 100)) { + this.boost({spa: 1}, source); + } + if (this.randomChance(50, 100)) { + if (target.isActive) target.trySetStatus('par', source, this.effect); + } + } else { + if (this.randomChance(80, 100)) { + this.boost({spa: 1}, source); + } + if (this.randomChance(60, 100)) { + // Soak + if (target.getTypes().join() !== 'Water' && target.setType('Water')) { + this.add('-start', target, 'typechange', 'Water'); + } + } + } + }, + }, + target: "normal", + type: "Electric", + }, + + // Imperial + stormshroud: { + accuracy: 100, + basePower: 95, + category: "Special", + name: "Storm Shroud", + shortDesc: "Physical + contact if stronger.", + desc: "This move becomes a physical attack that makes contact if the value of ((((2 * the user's level / 5 + 2) * 90 * X) / Y) / 50), where X is the user's Attack stat and Y is the target's Defense stat, is greater than the same value where X is the user's Special Attack stat and Y is the target's Special Defense stat. No stat modifiers other than stat stage changes are considered for this purpose. If the two values are equal, this move chooses a damage category at random.", + pp: 10, + priority: 0, + flags: {protect: 1, mirror: 1}, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, 'Clangorous Soulblaze', target); + }, + 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.random(2) === 0)) { + move.category = 'Physical'; + move.flags.contact = 1; + } + }, + secondary: null, + target: "normal", + type: "Dragon", + }, + + // in the hills + "102040": { + accuracy: 100, + basePower: 10, + category: "Physical", + name: "10-20-40", + shortDesc: "Hits 3 times, 3rd hit crits. sets Safeguard.", + desc: "Hits three times. Power increases to 20 for the second hit and 40 for the third. The third hit is always a critical hit unless the target is under the effect of Lucky Chant or has the Battle Armor or Shell Armor Abilities. If this move deals damage, it applies the effect of Safeguard for 5 turns, protecting the user's team from confusion and non-volatile status conditions.", + pp: 5, + priority: 0, + flags: {protect: 1, mirror: 1}, + basePowerCallback(pokemon, target, move) { + return [10, 20, 40][move.hit - 1]; + }, + onTryHit(target, source, move) { + if (move.hit === 3) { + move.willCrit = true; + } + }, + onPrepareHit() { + this.attrLastMove('[anim] Triple Kick'); + }, + self: { + sideCondition: 'safeguard', + }, + secondary: null, + multihit: 3, + target: "normal", + type: "Ground", + }, + + // ironwater + jirachibanhammer: { + accuracy: 100, + basePower: 120, + category: "Physical", + shortDesc: "Prevents the target from switching out.", + desc: "Prevents the target from switching out. The target can still switch out if it is holding Shed Shell or uses Baton Pass, Flip Turn, Parting Shot, Teleport, U-turn, or Volt Switch. If the target leaves the field using Baton Pass, the replacement will remain trapped. The effect ends if the user leaves the field.", + name: "Jirachi Ban Hammer", + pp: 5, + priority: 0, + flags: {contact: 1, protect: 1, mirror: 1}, + onPrepareHit() { + this.attrLastMove('[anim] Gigaton Hammer'); + }, + secondary: { + chance: 100, + onHit(target, source, move) { + if (source.isActive) target.addVolatile('trapped', source, move, 'trapper'); + }, + }, + target: "normal", + type: "Steel", + }, + + // Irpachuza + bibbidibobbidirands: { + accuracy: true, + basePower: 0, + category: "Status", + shortDesc: "Changes target to a Randbats set.", + desc: "Z-Move requiring Irpatuzinium Z. Nearly always moves first. Permanently transforms the target into a randomized Pokemon that would be generated in one of the following formats: Gen 9 Random Battle, Gen 9 Hackmons Cup, Gen 9 Challenge Cup, or Computer-Generated Teams. In the vast majority of circumstances, this also prevents the target from acting this turn.", + name: "Bibbidi-Bobbidi-Rands", + gen: 9, + pp: 1, + priority: 0, + flags: {protect: 1}, + onPrepareHit(target, source) { + this.attrLastMove('[anim] Doom Desire'); + }, + onHit(target, source) { + const formats = ['gen9randombattle', 'gen9hackmonscup', 'gen9challengecup1v1', 'gen9computergeneratedteams']; + const randFormat = this.sample(formats); + let msg; + switch (randFormat) { + case 'gen9randombattle': + msg = "Ta-dah! You are now blessed with a set from the most popular format on the sim, hope you like it! n.n"; + break; + case 'gen9hackmonscup': + msg = "Hackmons Cup is like Rands but scrambled eggs, cheese and pasta. I'm sure you'll love it too n.n"; + break; + case 'gen9challengecup1v1': + msg = "The only difference between a Challenge Cup Pokémon and my in-game one is that the former actually surpassed lvl. 60, enjoy n.n"; + break; + case 'gen9computergeneratedteams': + msg = "We asked an AI to make a randbats set. YOU WON'T BELIEVE WHAT IT CAME UP WITH N.N"; + break; + } + let team = [] as PokemonSet[]; + const unModdedDex = Dex.mod('base'); + let depth = 0; + while (!team.length) { + team = Teams.generate(randFormat, {name: target.side.name}); + if (depth >= 50) break; // Congrats you won the lottery! + team = team.filter(p => { + const baseSpecies = unModdedDex.species.get(p.species); + const curSpecies = this.dex.species.get(p.species); + if (Object.values(baseSpecies.baseStats).join() !== Object.values(curSpecies.baseStats).join()) { + return false; + } + if (Object.values(baseSpecies.abilities).join() !== Object.values(curSpecies.abilities).join()) { + return false; + } + if (baseSpecies.types.join() !== curSpecies.types.join()) { + return false; + } + return true; + }); + depth++; + } + + this.addMove('-anim', target, 'Wish', target); + target.clearBoosts(); + this.add('-clearboost', target); + // @ts-ignore set wants a sig but randbats sets don't have one + changeSet(this, target, team[0], true); + this.add(`c:|${getName((source.illusion || source).name)}|${msg}`); + }, + isZ: "irpatuziniumz", + secondary: null, + target: "normal", + type: "Fairy", + }, + + // Isaiah + simplegameplan: { + accuracy: 100, + basePower: 95, + category: "Physical", + name: "Simple Gameplan", + shortDesc: "No additional effect.", + pp: 10, + priority: 0, + flags: {contact: 1, protect: 1, mirror: 1}, + onPrepareHit(target, source) { + this.attrLastMove('[anim] High Jump Kick'); + }, + secondary: null, + target: "allAdjacent", + type: "Psychic", + }, + + // J0rdy004 + snowysamba: { + accuracy: true, + basePower: 0, + category: "Status", + name: "Snowy Samba", + shortDesc: "Sets Snow, +1 Sp. Atk, +2 Speed.", + desc: "Raises the user's Special Attack by 1 stage and Speed by 2 stages, and changes the weather to Snow, boosting the defense of Ice-types by 1.5x for 5 turns. Snow will not be set if the weather cannot be changed or if the weather is already Snow.", + pp: 15, + priority: 0, + flags: {snatch: 1, metronome: 1}, + boosts: { + spe: 2, + spa: 1, + }, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, 'Agility', target); + this.add('-anim', source, 'Snowscape', target); + }, + weather: 'snow', + secondary: null, + target: "self", + type: "Ice", + }, + + // Kalalokki + knotweak: { + accuracy: 80, + basePower: 150, + category: "Physical", + name: "Knot Weak", + shortDesc: "Has 1/2 recoil.", + desc: "If the target lost HP, the user takes recoil damage equal to 1/2 the HP lost by the target, rounded half up, but not less than 1 HP.", + pp: 5, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, + recoil: [1, 2], + secondary: null, + priority: 0, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, 'Focus Punch', target); + }, + target: "normal", + type: "Fighting", + }, + + // Karthik + salvagedsacrifice: { + accuracy: 100, + basePower: 0, + damageCallback(pokemon) { + this.add('-anim', pokemon, 'Roost', pokemon); + this.heal(this.modify(pokemon.maxhp, 0.25), pokemon, pokemon, this.dex.getActiveMove('Salvaged Sacrifice')); + const damage = pokemon.hp; + this.add('-anim', pokemon, 'Final Gambit', this.activeTarget); + pokemon.faint(); + return damage; + }, + selfdestruct: "ifHit", + category: "Physical", + name: "Salvaged Sacrifice", + shortDesc: "Heals 25% HP, then uses Final Gambit.", + desc: "The user heals 1/4 of its maximum HP, then deals damage to the target equal to the user's current HP. If this attack is successful, the user faints.", + pp: 5, + priority: 0, + flags: {protect: 1, metronome: 1, noparentalbond: 1}, + onTryMove() { + this.attrLastMove('[still]'); + }, + secondary: null, + target: "normal", + type: "Fighting", + }, + + // ken + ac: { + accuracy: true, + basePower: 0, + category: "Status", + shortDesc: "Does something random.", + desc: "This move performs exactly one of the following at random, ignoring options that would do nothing: 10% chance to burn the target; 10% chance to paralyze the target; 10% chance to poison the target; 3% chance to put the target to sleep; 2% chance to freeze the target; 5% chance each to confuse, infatuate, Taunt, Encore, Torment, or Heal Block the target; 5% chance each to set Stealth Rock, Spikes, Toxic Spikes, or Sticky Web; 5% chance to remove entry hazards from the user's side of the field; 5% chance to lower the foe's highest stat by 1 stage; and a 5% chance to switch out.", + name: ", (ac)", + pp: 15, + priority: 0, + flags: {reflectable: 1, mustpressure: 1}, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, 'Fling', target); + }, + secondary: { + chance: 100, + onHit(target, source, move) { + let success = false; + while (!success) { + const effect = this.random(100); + if (effect < 10) { + if (target.trySetStatus('psn', target)) { + success = true; + } + } else if (effect < 20) { + if (target.trySetStatus('par', target)) { + success = true; + } + } else if (effect < 30) { + if (target.trySetStatus('par', target)) { + success = true; + } + } else if (effect < 33) { + if (target.trySetStatus('slp', target)) { + success = true; + } + } else if (effect < 35) { + if (target.trySetStatus('frz', target)) { + success = true; + } + } else if (effect < 40) { + if (!target.volatiles['confusion']) { + target.addVolatile('confusion', source); + success = true; + } + } else if (effect < 45) { + if (!target.volatiles['attract']) { + target.addVolatile('attract', source); + success = true; + } + } else if (effect < 50) { + if (!target.volatiles['taunt']) { + target.addVolatile('taunt', source); + success = true; + } + } else if (effect < 55) { + if (target.lastMove && !target.volatiles['encore']) { + target.addVolatile('encore', source); + success = true; + } + } else if (effect < 60) { + if (!target.volatiles['torment']) { + target.addVolatile('torment', source); + success = true; + } + } else if (effect < 65) { + if (!target.volatiles['healblock']) { + target.addVolatile('healblock', source); + success = true; + } + } else if (effect < 70) { + if (target.side.addSideCondition('stealthrock')) { + success = true; + } + } else if (effect < 75) { + if (target.side.addSideCondition('stickyweb')) { + success = true; + } + } else if (effect < 80) { + if (target.side.addSideCondition('spikes')) { + success = true; + } + } else if (effect < 85) { + if (target.side.addSideCondition('toxicspikes')) { + success = true; + } + } else if (effect < 90) { + const sideConditions = ['spikes', 'toxicspikes', 'stealthrock', 'stickyweb', 'gmaxsteelsurge']; + for (const condition of sideConditions) { + if (source.side.removeSideCondition(condition)) { + success = true; + this.add('-sideend', source.side, this.dex.conditions.get(condition).name, '[from] move: , (ac)', '[of] ' + source); + } + } + } else if (effect < 95) { + const bestStat = target.getBestStat(true, true); + this.boost({[bestStat]: -1}, target); + success = true; + } else { + if (this.canSwitch(source.side)) { + this.actions.useMove("teleport", source); + success = true; + } + } + } + }, + }, + target: "normal", + type: "Psychic", + }, + + // kenn + stonefaced: { + accuracy: true, + basePower: 0, + category: "Status", + shortDesc: "Sets Stealth Rock. Target: -1 Defense/Speed.", + desc: "Lowers the target's Defense and Speed by 1 stage, and sets Stealth Rock on the target's side of the field, damaging Pokemon as they switch in. If Stealth Rock is already on the target's side of the field, the move will not set Stealth Rock but the other effects will still occur.", + name: "Stone Faced", + pp: 15, + priority: 0, + flags: {reflectable: 1, mustpressure: 1}, + sideCondition: 'stealthrock', + onPrepareHit(target, source) { + this.attrLastMove('[anim] Scary Face'); + this.attrLastMove('[anim] Stone Axe'); + }, + boosts: { + def: -1, + spe: -1, + }, + secondary: null, + target: "normal", + type: "Rock", + }, + + // Kennedy + hattrick: { + accuracy: 98, + basePower: 19, + category: "Physical", + shortDesc: "3 hits. Third hit crits. 3.5% chance to curse.", + desc: "Hits three times. The third hit is always a critical hit unless the target is under the effect of Lucky Chant or has the Battle Armor or Shell Armor Abilities. Each hit has a 3.5% chance to apply the Curse effect to the target, causing them to take damage equal to 25% of their maximum HP at the end of each turn until they switch out.", + name: "Hat-Trick", + gen: 9, + pp: 10, + priority: 0, + flags: {contact: 1, protect: 1}, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, 'Focus Energy', source); + this.add('-anim', source, 'High Jump Kick', target); + this.add('-anim', target, 'Boomburst', source); + this.add('-anim', source, 'Aqua Step', target); + this.add('-anim', source, 'Aqua Step', target); + }, + onTryHit(target, source, move) { + if (move.hit === 3) { + move.willCrit = true; + } + }, + secondary: { + chance: 3.5, + volatileStatus: 'curse', + }, + multihit: 3, + target: "normal", + type: "Ice", + }, + anfieldatmosphere: { + accuracy: true, + basePower: 0, + category: "Status", + name: "Anfield Atmosphere", + shortDesc: "No weather/sleep,share statuses,halve hazard dmg.", + desc: "For 6 turns, sets a field effect. Negates all weather conditions. Prevents Pokemon from falling asleep. Any status conditions and volatile status conditions applied to one Pokemon will also apply to the all Pokemon on the field. Halves entry hazard damage.", + pp: 5, + priority: 0, + flags: {mirror: 1}, + pseudoWeather: 'anfieldatmosphere', + condition: { + duration: 6, + durationCallback(source, effect) { + if (source?.hasAbility('persistent')) { + this.add('-activate', source, 'ability: Persistent', '[move] Anfield Atmosphere'); + return 8; + } + return 6; + }, + onUpdate(pokemon) { + if (pokemon.volatiles['confusion']) { + pokemon.removeVolatile('confusion'); + } + }, + onFieldStart(target, source) { + if (source?.hasAbility('persistent')) { + this.add('-fieldstart', 'move: Anfield Atmosphere', '[of] ' + source, '[persistent]'); + } else { + this.add('-fieldstart', 'move: Anfield Atmosphere', '[of] ' + source); + } + for (const pokemon of this.getAllActive()) { + if (pokemon.volatiles['confusion']) { + pokemon.removeVolatile('confusion'); + } + } + }, + onFieldRestart(target, source) { + this.field.removePseudoWeather('anfieldatmosphere'); + }, + onAnySetWeather(target, source, weather) { + return false; + }, + onSetStatus(status, target, source, effect) { + if (effect.id === 'anfieldatmosphere') return; + if (status.id === 'slp' && !target.isSemiInvulnerable()) { + this.add('-activate', target, 'move: Anfield Atmosphere'); + return false; + } + for (const pokemon of this.getAllActive()) { + if (!pokemon.hp || pokemon.fainted) continue; + pokemon.trySetStatus(status, source, this.effect); + } + }, + onTryAddVolatile(status, target) { + if (target.isSemiInvulnerable()) return; + if (status.id === 'yawn' || status.id === 'confusion') { + this.add('-activate', target, 'move: Anfield Atmosphere'); + return null; + } + }, + onDamage(damage, target, source, effect) { + if (effect && ['stealthrock', 'spikes', 'gmaxsteelsurge'].includes(effect.id)) { + return damage / 2; + } + }, + onFieldResidualOrder: 27, + onFieldResidualSubOrder: 1, + onFieldEnd() { + this.add('-fieldend', 'move: Anfield Atmosphere'); + }, + }, + secondary: null, + target: "all", + type: "Psychic", + }, + + // keys + protectoroftheskies: { + accuracy: true, + basePower: 0, + category: "Status", + shortDesc: "Forces both Pokemon out. Can't be blocked.", + desc: "Both the target and the user are forced to switch out and be replaced with random unfainted allies. This effect cannot be blocked by any means other than having no valid allies that can be sent out.", + name: "Protector of the Skies", + pp: 10, + priority: -1, + flags: {}, + onTryMove(source, target, move) { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source, move) { + for (const pokemon of this.getAllActive()) { + this.add('-anim', source, 'Whirlwind', pokemon); + } + }, + onModifyPriority(priority, source, target, move) { + const foe = source.foes()[0]; + if (foe && Object.values(foe.boosts).some(x => x !== 0)) { + return priority + 1; + } + }, + onHitField(target, source, move) { + for (const pokemon of this.getAllActive()) { + if (pokemon.hp <= 0 || pokemon.fainted) continue; + pokemon.forceSwitchFlag = true; + } + }, + secondary: null, + target: "all", + type: "Flying", + }, + + // kingbaruk + platinumrecord: { + accuracy: true, + basePower: 70, + category: "Special", + shortDesc: "Heals 50% HP, restores 1 PP for all other moves.", + desc: "Heals the user for 1/2 of their maximum HP, and restores 1 PP to all moves on the user's set other than Platinum Record.", + name: "Platinum Record", + pp: 5, + priority: 0, + flags: {sound: 1, heal: 1, protect: 1, mirror: 1}, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, 'Sing', target); + this.add('-anim', source, 'Iron Defense', target); + }, + onHit(target, source, move) { + this.heal(source.maxhp / 2, source, source, move); + for (const moveSlot of source.moveSlots) { + if (moveSlot.id === move.id) continue; + if (moveSlot.pp < moveSlot.maxpp) moveSlot.pp += 1; + } + }, + target: "normal", + type: "Fairy", + + }, + + // Kiwi + madmanifest: { + accuracy: true, + basePower: 0, + category: "Status", + shortDesc: "User: +1 Spe, Foe:Free Curse, 50% brn/par/psn.", + desc: "Applies the Curse effect to the target, causing them to take damage equal to 25% of their maximum HP at the end of each turn until they switch out. Has a 50% chance to cause the target to either become burned, become poisoned, or become paralyzed. Raises the user's Speed by 1 stage.", + name: "Mad Manifest", + pp: 10, + priority: 0, + 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); + } + this.boost({spe: 1}, source); + }, + onPrepareHit(target, source) { + this.attrLastMove('[anim] Dark Void'); + }, + target: "normal", + type: "Fairy", + + }, + + // Klmondo + thebetterwatershuriken: { + accuracy: 100, + basePower: 20, + category: "Physical", + shortDesc: "+1 Priority. Hits 2-5 times.", + desc: "Usually moves first. Hits two to five times. Has a 35% chance to hit two or three times and a 15% chance to hit four or five times. If one of the hits breaks the target's substitute, it will take damage for the remaining hits. If the user has the Skill Link Ability, this move will always hit five times.", + name: "The Better Water Shuriken", + pp: 30, + priority: 1, + flags: {protect: 1, mirror: 1, metronome: 1}, + multihit: [2, 5], + secondary: null, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, 'Water Shuriken', target); + this.add('-anim', source, 'Electro Shot', target); + }, + target: "normal", + type: "Water", + }, + + // kolohe + hangten: { + accuracy: 100, + basePower: 75, + category: "Special", + name: "Hang Ten", + shortDesc: "User sets Electric Terrain on hit.", + desc: "If this move is successful, the terrain becomes Electric Terrain.", + pp: 10, + priority: 0, + flags: {protect: 1, mirror: 1}, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, 'Stoked Sparksurfer', target); + this.add('-anim', source, 'Surf', target); + }, + secondary: { + chance: 100, + self: { + onHit() { + this.field.setTerrain('electricterrain'); + }, + }, + }, + target: "normal", + type: "Water", + }, + + // Kry + attackofopportunity: { + accuracy: 100, + basePower: 60, + basePowerCallback(pokemon, target, move) { + if (target.beingCalledBack || target.switchFlag) { + this.debug('Attack of Opportunity damage boost'); + return move.basePower * 1.5; + } + return move.basePower; + }, + category: "Physical", + shortDesc: "Pursuit, +2 Attack when KOing on switch.", + desc: "If an opposing Pokemon switches out this turn, this move hits that Pokemon before it leaves the field. Power is multiplied by 1.5x and no accuracy check is done if the user hits an opponent switching out, and the user's turn is over; if an opponent faints from this, the user's Attack is boosted by 2 stages and the replacement Pokemon does not become active until the end of the turn. If the user moves after an opponent using Flip Turn, Parting Shot, Teleport, U-turn, or Volt Switch, but not Baton Pass, it will hit that opponent before it leaves the field.", + name: "Attack of Opportunity", + pp: 20, + priority: 0, + flags: {contact: 1, protect: 1, mirror: 1}, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, 'Pursuit', target); + this.add('-anim', source, 'Behemoth Blade', target); + }, + beforeTurnCallback(pokemon) { + for (const side of this.sides) { + if (side.hasAlly(pokemon)) continue; + side.addSideCondition('attackofopportunity', pokemon); + const data = side.getSideConditionData('attackofopportunity'); + if (!data.sources) { + data.sources = []; + } + data.sources.push(pokemon); + } + }, + onModifyMove(move, source, target) { + if (target?.beingCalledBack || target?.switchFlag) { + move.accuracy = true; + move.onAfterMoveSecondarySelf = function (s, t, m) { + if (!t || t.fainted || t.hp <= 0) { + this.boost({atk: 1}, s, s, m); + } + }; + } + }, + onTryHit(target, pokemon) { + target.side.removeSideCondition('attackofopportunity'); + }, + condition: { + duration: 1, + onBeforeSwitchOut(pokemon) { + this.debug('Attack of Opportunity 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: Pursuit'); + alreadyAdded = true; + } + if (source.canMegaEvo) { + for (const [actionIndex, action] of this.queue.entries()) { + if (action.pokemon === source && action.choice === 'megaEvo') { + this.actions.runMegaEvo(source); + this.queue.list.splice(actionIndex, 1); + break; + } + } + } + this.actions.runMove('attackofopportunity', source, source.getLocOf(pokemon)); + } + }, + }, + secondary: null, + target: "normal", + type: "Steel", + contestType: "Clever", + }, + + // Lasen + riseabove: { + accuracy: true, + basePower: 0, + category: "Status", + shortDesc: "Magnet Rise + Aqua Ring.", + desc: "For 5 turns, the user is immune to Ground-type attacks and effects as long as it remains active, and the user will recover 1/16th of their maximum HP at the end of each turn as long as it remains active. If the user uses Baton Pass, the replacement will gain the effects.", + name: "Rise Above", + gen: 9, + pp: 5, + priority: 0, + flags: {}, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(pokemon) { + this.add('-anim', pokemon, 'Magnet Rise', pokemon); + this.add('-anim', pokemon, 'Quiver Dance', pokemon); + }, + volatileStatus: 'riseabove', + onTry(source, target, move) { + if (target.volatiles['smackdown'] || target.volatiles['ingrain']) return false; + + // Additional Gravity check for Z-move variant + if (this.field.getPseudoWeather('Gravity')) { + this.add('cant', source, 'move: Gravity', move); + return null; + } + }, + condition: { + duration: 5, + onStart(target) { + this.add('-start', target, 'Rise Above'); + }, + onImmunity(type) { + if (type === 'Ground') return false; + }, + onResidualOrder: 6, + onResidual(pokemon) { + this.heal(pokemon.baseMaxhp / 16); + }, + onEnd(target) { + this.add('-end', target, 'Rise Above'); + }, + }, + secondary: null, + target: "self", + type: "Electric", + }, + + // Lets go shuckles + shucklepower: { + accuracy: true, + basePower: 0, + category: "Status", + shortDesc: "Trick Room + Power Trick.", + desc: "Until the user switches out, it swaps its Attack and Defense stats, and stat stage changes remain on their respective stats. Sets Trick Room for 5 turns, making the slower Pokemon move first.", + name: "Shuckle Power", + pp: 5, + priority: -6, + flags: {}, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, 'Power Trick', source); + }, + pseudoWeather: 'trickroom', + volatileStatus: 'powertrick', + secondary: null, + target: "self", + type: "Psychic", + }, + + // Lily + powerup: { + accuracy: true, + basePower: 0, + category: "Status", + name: "Power Up", + shortDesc: "Heals 50% HP. Heals 3% more per fainted ally.", + desc: "Heals the user for 50% of their maximum HP. Heals an additional 3% of the user's maximum HP for each team member on the user's side that has fainted.", + pp: 5, + priority: 0, + flags: {heal: 1}, + onModifyMove(move, source, target) { + const fntAllies = source.side.pokemon.filter(ally => ally !== source && ally.fainted); + if (move.heal) move.heal[0] = 50 + (3 * fntAllies.length); + }, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(pokemon) { + this.add('-anim', pokemon, 'Shore Up', pokemon); + this.add('-anim', pokemon, 'Charge', pokemon); + this.add('-anim', pokemon, 'Moonlight', pokemon); + }, + heal: [50, 100], + secondary: null, + target: "self", + type: "Electric", + }, + + // Loethalion + darkmooncackle: { + accuracy: 100, + basePower: 30, + basePowerCallback(pokemon, target, move) { + const bp = move.basePower + 20 * pokemon.positiveBoosts(); + this.debug('BP: ' + bp); + return bp; + }, + category: "Special", + desc: "Power is equal to 30+(X*20), where X is the user's total stat stage changes that are greater than 0. Has a 100% chance to raise the user's Special Attack by 1 stage.", + shortDesc: "+20 bp per stat boost. 100% chance +1 SpA.", + name: "Darkmoon Cackle", + pp: 15, + priority: 0, + flags: {protect: 1, mirror: 1, sound: 1, bypasssub: 1}, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, 'Bulk Up', source); + this.add('-anim', source, 'Cosmic Power', source); + this.add('-anim', source, 'Moonblast', target); + }, + secondary: { + chance: 100, + self: { + boosts: { + spa: 1, + }, + }, + }, + target: "normal", + type: "Normal", + }, + + // Lumari + mysticalbonfire: { + accuracy: 100, + basePower: 100, + basePowerCallback(pokemon, target, move) { + if (target.status || target.hasAbility(['comatose', 'mensiscage'])) { + this.debug('BP doubled from status condition'); + return move.basePower * 1.5; + } + return move.basePower; + }, + category: "Physical", + shortDesc: "50% burn. 1.5x power if target is already statused.", + desc: "This move has a 50% chance to give the target a burn. This move's power is 1.5x stronger if the target has a non-volatile status condition.", + name: "Mystical Bonfire", + pp: 15, + priority: 0, + flags: {protect: 1, mirror: 1}, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, 'Infernal Parade', target); + this.add('-anim', source, 'Fury Attack', target); + }, + secondary: { + chance: 50, + status: 'brn', + }, + target: "normal", + type: "Psychic", + }, + + // Lunell + praisethemoon: { + accuracy: 90, + basePower: 120, + category: "Special", + shortDesc: "First turn: +1 SpA. No charge in Gravity.", + desc: "This attack charges on the first turn and executes on the second. Raises the user's Special Attack by 1 stage on the first turn. If the user is holding a Power Herb or Gravity is active, the move completes in one turn.", + name: "Praise the Moon", + pp: 10, + priority: 0, + flags: {charge: 1, protect: 1, mirror: 1}, + onTryMove(attacker, defender, move) { + this.attrLastMove('[still]'); + if (attacker.removeVolatile(move.id)) { + return; + } + this.boost({spa: 1}, attacker, attacker, move); + if (this.field.pseudoWeather['gravity']) { + 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; + }, + secondary: null, + hasSheerForce: true, + onPrepareHit(target, source) { + this.attrLastMove('[still]'); + this.add('-anim', source, 'Lunar Dance', target); + this.add('-anim', source, 'Moongeist Beam', target); + }, + target: "normal", + type: "Fairy", + }, + + // Lyna + wrathoffrozenflames: { + accuracy: 100, + basePower: 100, + category: "Physical", + shortDesc: "80% gain Ice type, 20% gain Fire type.", + desc: "After using the move, there is an 80% chance the user gains an additional Ice typing, and a 20% chance the user gains an additional Fire typing.", + name: "Wrath of Frozen Flames", + gen: 9, + pp: 10, + priority: 0, + flags: {protect: 1}, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, 'Clangorous Soulblaze', target); + }, + onHit(target, source, move) { + if (source.terastallized) return; + if (this.randomChance(8, 10)) { + source.addType('Ice'); + this.add('-start', source, 'typeadd', 'Ice', '[from] move: Wrath of Frozen Flames'); + } else { + source.addType('Fire'); + this.add('-start', source, 'typeadd', 'Fire', '[from] move: Wrath of Frozen Flames'); + } + }, + secondary: null, + target: "normal", + type: "Dragon", + }, + + // Maia + bodycount: { + accuracy: 100, + basePower: 50, + basePowerCallback(pokemon, target, move) { + return 50 + 50 * pokemon.side.totalFainted; + }, + category: "Special", + shortDesc: "+50 power for each time a party member fainted.", + desc: "Power is equal to 50+(X*50), where X is the total number of times any Pokemon has fainted on the user's side, and X cannot be greater than 100.", + name: "Body Count", + pp: 10, + priority: 0, + flags: {protect: 1, mirror: 1}, + onPrepareHit() { + this.attrLastMove('[anim] Core Enforcer'); + }, + secondary: null, + target: "normal", + type: "Ghost", + }, + + // marillvibes + goodvibesonly: { + accuracy: 100, + basePower: 90, + category: "Physical", + shortDesc: "Raises the user's Speed by 1 stage.", + desc: "Has a 100% chance to raise the user's Speed by 1 stage.", + name: "Good Vibes Only", + gen: 9, + pp: 10, + priority: 0, + flags: {protect: 1, mirror: 1, contact: 1}, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, 'Aqua Step', target); + }, + secondary: { + chance: 100, + self: { + boosts: { + spe: 1, + }, + }, + }, + target: "normal", + type: "Fairy", + }, + + // maroon + metalblast: { + accuracy: 90, + basePower: 90, + category: "Physical", + shortDesc: "Sets G-Max Steelsurge on the foe's side.", + desc: "If this move is successful, it sets up G-Max Steelsurge on the opposing side of the field, damaging each opposing Pokemon that switches in. Foes lose 1/32, 1/16, 1/8, 1/4, or 1/2 of their maximum HP, rounded down, based on their weakness to the Steel type; 0.25x, 0.5x, neutral, 2x, or 4x, respectively. Can be removed from the opposing side if any opposing Pokemon uses Rapid Spin or Defog successfully, or is hit by Defog.", + name: "Metal Blast", + gen: 9, + pp: 10, + priority: 0, + flags: {protect: 1}, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, 'Steel Beam', target); + this.add('-anim', source, 'G-max Steelsurge', target); + }, + onAfterHit(target, source, move) { + if (!move.hasSheerForce && source.hp) { + for (const side of source.side.foeSidesWithConditions()) { + side.addSideCondition('gmaxsteelsurge'); + } + } + }, + onAfterSubDamage(damage, target, source, move) { + if (!move.hasSheerForce && source.hp) { + for (const side of source.side.foeSidesWithConditions()) { + side.addSideCondition('gmaxsteelsurge'); + } + } + }, + secondary: {}, // Sheer Force-boosted + target: "normal", + type: "Steel", + }, + + // Mathy + breakingchange: { + accuracy: 100, + basePower: 70, + category: "Physical", + shortDesc: "Ignores target's Ability; disables it on hit.", + desc: "This move and its effects ignore the Abilities of other Pokemon. When this move hits the target, the target's Ability is suppressed until it switches out. Innate Abilities are unaffected.", + name: "Breaking Change", + gen: 9, + pp: 10, + priority: 0, + flags: {protect: 1, mirror: 1}, + onPrepareHit() { + this.attrLastMove('[anim] Salt Cure'); + }, + onHit(target, source) { + if (target.getAbility().flags['cantsuppress']) return; + if (!target.addVolatile('gastroacid')) return; + this.add(`c:|${getName((source.illusion || source).name)}|Sorry i tried to fix smth but accidentally broke your ability :( will fix it next week`); + }, + ignoreAbility: true, + secondary: null, + target: "normal", + type: "Normal", + }, + + // Merritty + newbracket: { + accuracy: true, + basePower: 0, + category: "Status", + shortDesc: "Forces both Pokemon out. Can't be blocked.", + desc: "Both the target and the user are forced to switch out and be replaced with random unfainted allies. This effect cannot be blocked by any means other than having no valid allies that can be sent out.", + name: "New Bracket", + pp: 10, + priority: 0, + flags: {}, + onTryMove(source, target, move) { + this.attrLastMove('[still]'); + if (source.side.pokemonLeft === 1) { + this.add('-fail', source); + return false; + } + if (!source.hasAbility('endround')) { + this.add('-fail', source); + this.hint(`The user's ability needs to be End Round for New Bracket to work.`); + return false; + } + this.attrLastMove(`[anim] Trick Room`); + }, + onHitField(target, source, move) { + for (const pokemon of this.getAllActive()) { + if (pokemon.hp <= 0 || pokemon.fainted || pokemon.isSemiInvulnerable()) { + continue; + } + pokemon.forceSwitchFlag = true; + } + }, + secondary: null, + target: "all", + type: "Electric", + }, + + // Meteordash + plagiarism: { + accuracy: 100, + basePower: 0, + category: "Status", + name: "Plagiarism", + shortDesc: "Steal+use foe sig move+imprison. Fail: +1 stats.", + desc: "User copies opponents signature move and adds it to its own movepool, replacing this move. The user then uses the copied move immediately and gains the Imprison condition, preventing foes from using moves in the user's moveset. The PP of the copied move will be adjusted to match the PP the copied signature move is supposed to have. If the copied custom move would fail if used in this manner, Plagiarism fails and the user boosts all stats by 1 stage, except Accuracy and Evasion.", + pp: 5, + priority: 1, + flags: {failencore: 1, nosleeptalk: 1, noassist: 1, failcopycat: 1, failinstruct: 1, failmimic: 1, nosketch: 1}, + onTry(source) { + if (source.m.usedPlagiarism) { + this.hint("Plagiarism only works once per switch-in."); + return false; + } + }, + onPrepareHit() { + this.attrLastMove('[anim] Mimic'); + this.attrLastMove('[anim] Imprison'); + }, + onHit(target, source, m) { + let sigMoveName = ssbSets[(target.illusion || target).name]?.signatureMove; + if (!sigMoveName) sigMoveName = target.moveSlots[target.moveSlots.length - 1].id; + const move = this.dex.getActiveMove(sigMoveName); + if (!target || this.queue.willSwitch(target) || target.beingCalledBack || + move.flags['failcopycat'] || move.flags['nosketch']) { + this.boost({spa: 1, spd: 1, spe: 1}, source, source, m); + return; + } + const plagiarismIndex = source.moves.indexOf('plagiarism'); + if (plagiarismIndex < 0) return false; + this.add(`c:|${getName((source.illusion || source).name)}|yoink`); + const plagiarisedMove = { + move: move.name, + id: move.id, + pp: move.pp, + maxpp: move.pp, + target: move.target, + disabled: false, + used: false, + }; + source.moveSlots[plagiarismIndex] = plagiarisedMove; + this.add('-activate', source, 'move: Plagiarism', move.name); + this.add('-message', `${source.name} plagiarised ${target.name}'s ${move.name}!`); + this.actions.useMove(move.id, source, {target}); + delete target.volatiles['imprison']; + source.addVolatile('imprison', source); + source.m.usedPlagiarism = true; + }, + secondary: null, + target: "normal", + type: "Dark", + }, + + // Mex + timeskip: { + accuracy: true, + basePower: 0, + category: "Status", + name: "Time Skip", + shortDesc: "Clears hazards. +10 turns. +1 Spe.", + desc: "Removes all entry hazards from the user's side of the field, increases the turn counter by 10, and boosts the user's Speed by 1 stage.", + pp: 10, + priority: 0, + flags: {}, + onPrepareHit() { + this.attrLastMove('[anim] Trick Room'); + }, + self: { + onHit(pokemon) { + const sideConditions = ['spikes', 'toxicspikes', 'stealthrock', 'stickyweb', 'gmaxsteelsurge']; + for (const condition of sideConditions) { + if (pokemon.side.removeSideCondition(condition)) { + this.add('-sideend', pokemon.side, this.dex.conditions.get(condition).name, '[from] move: Time Skip', '[of] ' + pokemon); + } + } + // 9 turn addition so the +1 from endTurn totals to 10 turns + this.turn += 9; + }, + boosts: { + spe: 1, + }, + }, + secondary: null, + target: "all", + type: "Dragon", + }, + + // Miojo + vruuuuuum: { + accuracy: 100, + basePower: 90, + category: "Physical", + shortDesc: "Super effective on Water.", + desc: "This move's type effectiveness against Water is changed to be super effective no matter what this move's type is.", + name: "vruuuuuum", + pp: 20, + priority: 0, + flags: {contact: 1, protect: 1, mirror: 1}, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, 'Shift Gear', source); + this.add('-anim', source, 'Ice Spinner', target); + }, + onEffectiveness(typeMod, target, type) { + if (type === 'Water') return 1; + }, + secondary: null, + target: "normal", + type: "Ice", + }, + + // Monkey + bananabreakfast: { + accuracy: true, + basePower: 0, + category: "Status", + shortDesc: "2 random stats +1; Lock-On/Laser Focus/Charge.", + desc: "Boosts 2 random stats of the user by 1 stage each, except Accuracy and Evasion. These stats can be the same. Applies one of Lock-On, Laser Focus, or Charge to the user at random.", + name: "Banana Breakfast", + gen: 9, + pp: 10, + priority: 2, + flags: {mirror: 1, heal: 1}, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, 'Fire Fang', target); + this.add('-anim', source, 'Belly Drum', target); + }, + onHit(target, source) { + const stats: BoostID[] = []; + const boost: SparseBoostsTable = {}; + let statPlus: BoostID; + for (statPlus in source.boosts) { + if (statPlus === 'accuracy' || statPlus === 'evasion') continue; + if (source.boosts[statPlus] < 6) { + stats.push(statPlus); + } + } + const randomStat: BoostID | undefined = stats.length ? this.sample(stats) : undefined; + const randomStat2: BoostID | undefined = stats.length ? this.sample(stats) : undefined; + if (randomStat) boost[randomStat] = 1; + if (randomStat2 && randomStat === randomStat2) boost[randomStat] = 2; + else if (randomStat2) boost[randomStat2] = 1; + 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.heal(target.maxhp / 4, target, target, this.effect); + }, + secondary: null, + target: "self", + type: "Grass", + }, + + // MyPearl + eonassault: { + accuracy: 100, + basePower: 45, + category: "Special", + shortDesc: "Hits twice. 20% -1 Sp. Atk, 20% -1 Sp. Def.", + desc: "Hits 2 times. Each hit has a 20% chance to lower Special Attack by 1 stage, and a 20% chance to lower Special Defense by 1 stage.", + name: "Eon Assault", + gen: 9, + pp: 15, + priority: 0, + flags: {protect: 1}, + multihit: 2, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, 'Mist Ball', target); + this.add('-anim', source, 'Luster Purge', target); + }, + secondaries: [ + { + chance: 20, + boosts: { + spa: -1, + }, + }, { + chance: 20, + boosts: { + spd: -1, + }, + }, + ], + target: "normal", + type: "Psychic", + }, + + // Neko + qualitycontrolzoomies: { + accuracy: 100, + basePower: 50, + basePowerCallback(pokemon, target, move) { + if (pokemon.side.pokemonLeft === 1) return move.basePower + 30; + return move.basePower; + }, + category: "Physical", + shortDesc: "Pivot; switchin: Booster Energy. If last: 80BP.", + desc: "If this move is successful and the user has not fainted, the user switches out even if it is trapped and is replaced immediately by a selected party member. The replacement party member gains a Cat Stamp of Approval with the effect of Booster Energy, boosting its highest stat by 1.3x, or 1.5x in the case of Speed. The user does not switch out if there are no unfainted party members, or if the target switched out using an Eject Button or through the effect of the Emergency Exit or Wimp Out Abilities. If there are no unfainted party members, the move's Base Power is increased to 80 and the user gains the Cat Stamp of Approval boost instead.", + name: "Quality Control Zoomies", + gen: 9, + pp: 15, + priority: 0, + flags: {contact: 1, protect: 1, mirror: 1}, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, 'Ice Spinner', target); + this.add('-anim', source, 'Chilly Reception', source); + }, + self: { + slotCondition: 'qualitycontrolzoomies', + }, + condition: { + onSwap(target) { + if (!target.fainted) { + target.addVolatile('catstampofapproval'); + target.side.removeSlotCondition(target, 'qualitycontrolzoomies'); + } + }, + }, + onHit(target, source, move) { + let message = 'Meow has no other options, so ;w;'; + if (source.side.pokemonLeft > 1) { + message = 'Meow is not the right Pokemon to be an example here, swap meow out please.'; + } + this.add(`c:|${getName('Neko')}|${message}`); + }, + onModifyMove(move, pokemon, target) { + if (pokemon.side.pokemonLeft === 1) { + move.self = { + onHit(t, source, m) { + source.addVolatile('catstampofapproval'); + }, + }; + delete move.condition; + } + }, + selfSwitch: true, + secondary: null, + target: "normal", + type: "Ice", + }, + + // Ney + shadowdance: { + accuracy: 90, + basePower: 110, + category: "Physical", + shortDesc: "Raises the user's Attack by 1 stage.", + desc: "100% chance to raise the user's Attack by 1 stage.", + name: "Shadow Dance", + gen: 9, + pp: 10, + priority: 0, + flags: {contact: 1, protect: 1, mirror: 1, dance: 1}, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, 'Poltergeist', target); + this.add('-anim', source, 'Dragon Dance', source); + }, + secondary: { + chance: 100, + self: { + boosts: { + atk: 1, + }, + }, + }, + target: "normal", + type: "Ghost", + }, + + // Notater517 + nyaa: { + accuracy: true, + basePower: 0, + category: "Status", + shortDesc: "Haze and then +1 Atk / Def.", + desc: "Resets the stat stages of all active Pokemon to 0, and then raises the user's Attack and Defense by 1 stage.", + name: "~nyaa", + gen: 9, + pp: 10, + priority: 0, + flags: {bypasssub: 1}, + onPrepareHit(target, source) { + this.attrLastMove('[anim] Haze'); + this.attrLastMove('[anim] Sweet Kiss'); + this.attrLastMove('[anim] Baton Pass'); + }, + onHitField(target, source, move) { + this.add('-clearallboost'); + for (const pokemon of this.getAllActive()) { + pokemon.clearBoosts(); + } + this.boost({atk: 1, def: 1}, source, source, move); + }, + slotCondition: 'nyaa', + condition: { + onSwap(target) { + const source = this.effectState.source; + if (!target.fainted) { + this.add(`c:|${getName((source.illusion || source).name)}|~nyaa ${target.name}`); + this.add(`c:|${getName('Jeopard-E')}|**It is now ${target.name}'s turn to ask a question.**`); + target.side.removeSlotCondition(target, 'nyaa'); + } + }, + }, + secondary: null, + target: "all", + type: "Steel", + }, + + // nya + '3': { + accuracy: 100, + basePower: 70, + category: "Special", + shortDesc: "Moves first. 40% infatuates. 10% backfire chance.", + desc: "Usually moves first. This move has a 40% chance to infatuate the target, regardless of gender, but this move has a 10% chance to be used by the target at the user instead.", + name: ":3", + gen: 9, + pp: 5, + priority: 1, + flags: {protect: 1}, + onTry(pokemon, target, move) { + if (move.sourceEffect !== '3' && this.randomChance(1, 10)) { + this.add('-message', "The move backfired!"); + const activeMove = this.dex.getActiveMove(':3'); + activeMove.hasBounced = true; + this.actions.useMove(activeMove, target, {target: pokemon}); + return null; + } + }, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, 'Attract', target); + }, + secondary: { + volatileStatus: 'attract', + chance: 40, + }, + target: "normal", + type: "Fairy", + }, + + // pants + eerieapathy: { + accuracy: 100, + basePower: 0, + category: "Status", + name: "Eerie Apathy", + shortDesc: "Wish + Taunts the foe.", + pp: 15, + priority: 0, + flags: {snatch: 1, heal: 1, protect: 1, reflectable: 1, mirror: 1, bypasssub: 1}, + self: { + slotCondition: 'Wish', + }, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, 'Memento', target); + }, + onHit(target, source, move) { + if (!target.volatiles['taunt']) { + target.addVolatile('taunt', source, move); + } + }, + secondary: null, + target: "normal", + type: "Ghost", + }, + + // PartMan + alting: { + accuracy: true, + basePower: 0, + category: "Status", + name: "Alting", + shortDesc: "Switch+Protect, Shiny: 69BP ???-type atk instead.", + desc: "If the user is not shiny, it switches out even if it is trapped and is replaced immediately by a selected party member, and if the user moved first this turn, the selected party member will be protected from most attacks made by other Pokemon this turn. If the user is shiny, this move instead becomes a 69 Base Power ???-type special attack.", + pp: 5, + priority: 0, + flags: {snatch: 1}, + stallingMove: true, + sideCondition: 'alting', + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, 'Memento', target); + + this.add(`l|${getName((source.illusion || source).name).split('|')[1]}`); + this.add(`j|FakePart`); + }, + onModifyMove(move, source, target) { + move.type = "???"; + if (source.set?.shiny) { + move.accuracy = 100; + move.basePower = 69; + move.category = "Special"; + move.flags = {protect: 1, bypasssub: 1}; + move.target = "normal"; + + delete move.selfSwitch; + delete move.stallingMove; + delete move.sideCondition; + delete move.condition; + + // Note: Taunt will disable all forms of Alting, including the damaging one. + // This is intentional. + } + }, + condition: { + duration: 1, + onSideStart(target, source) { + this.add('-singleturn', source, 'Alting'); + }, + 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; + this.add('-activate', target, 'move: Alting', move.name); + 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; + }, + }, + selfSwitch: true, + target: "allySide", + type: "Ghost", // Updated to ??? in onModifyMove + }, + + // Pastor Gigas + calltorepentance: { + accuracy: 100, + basePower: 80, + category: "Physical", + shortDesc: "Applies Heal Block and Taunt.", + desc: "If this move deals damage, the target is prevented from using any status moves for 3 turns or restoring any HP for 5 turns, with both effects ending if the target switches out. During the effect, status moves and draining moves are unusable, and Abilities and items that grant healing will not heal the user. If an affected Pokemon uses Baton Pass, the replacement will remain unable to restore its HP or use status moves. The Regenerator Ability is unaffected, and Pokemon with Oblivious are immune to the Taunt effect.", + name: "Call to Repentance", + gen: 9, + pp: 10, + priority: 0, + flags: {protect: 1, mirror: 1}, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, 'Hyper Voice', target); + this.add('-anim', source, 'Judgment', target); + }, + secondaries: [ + { + chance: 100, + volatileStatus: 'healblock', + }, { + chance: 100, + volatileStatus: 'taunt', + }, + ], + target: "normal", + type: "Normal", + }, + + // Peary + "1000gears": { + accuracy: true, + basePower: 0, + category: "Status", + name: "1000 Gears", + shortDesc: "Heals 100% HP,cures status,+1 Def/SpD,+5 levels.", + desc: "Z-Move requiring Pearyum Z. Heals the user for 100% of its maximum HP, cures its non-volatile status effects, boosts its Defense and Special Defense by 1 stage, and raises its level by 5.", + pp: 1, + priority: 0, + flags: {}, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(pokemon) { + this.add('-anim', pokemon, 'Shift Gear', pokemon); + this.add('-anim', pokemon, 'Belly Drum', pokemon); + }, + onHit(target, pokemon, move) { + this.heal(pokemon.maxhp, pokemon, pokemon, move); + pokemon.cureStatus(); + this.boost({def: 1, spd: 1}); + (pokemon as any).level += 5; + pokemon.details = pokemon.species.name + (pokemon.level === 100 ? '' : ', L' + pokemon.level) + + (pokemon.gender === '' ? '' : ', ' + pokemon.gender) + (pokemon.set.shiny ? ', shiny' : ''); + this.add('-anim', pokemon, 'Geomancy', pokemon); + this.add('replace', pokemon, pokemon.details); + this.add('-message', `${pokemon.name} gained 5 levels!`); + }, + isZ: "pearyumz", + secondary: null, + target: "self", + type: "Steel", + }, + + // phoopes + gen1blizzard: { + accuracy: 90, + basePower: 120, + category: "Special", + name: "Gen 1 Blizzard", + desc: "Has a 10% chance to freeze the target.", + shortDesc: "10% chance to freeze the target.", + pp: 5, + priority: 0, + flags: {protect: 1, mirror: 1}, + onPrepareHit() { + this.attrLastMove('[anim] Blizzard'); + }, + secondary: { + chance: 10, + status: 'frz', + }, + target: "normal", + type: "Ice", + }, + + // Pissog + asongoficeandfire: { + accuracy: 100, + basePower: 100, + category: "Special", + name: "A Song of Ice and Fire", + shortDesc: "Type depends on form. Switches form.", + desc: "If the user is Volcarona, this move is Ice-type and, after dealing damage, transforms the user into a Snow Warning Frosmoth with Blizzard, Chilly Reception, and Aurora Veil. If the user is Frosmoth, this move is Fire-type and, after dealing damage, transforms the user into a Drought Volcarona with Torch Song, Morning Sun, and Solar Beam. This move fails if the user is neither Frosmoth nor Volcarona.", + pp: 10, + priority: 0, + flags: {protect: 1, mirror: 1, failcopycat: 1, nosketch: 1}, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source, move) { + if (source.species.name === 'Volcarona') { + this.add('-anim', source, 'Blizzard', target); + } else { + this.add('-anim', source, 'Fiery Dance', target); + } + }, + onModifyType(move, pokemon) { + if (pokemon.species.name === 'Volcarona') { + move.type = "Ice"; + } else { + move.type = "Fire"; + } + }, + onHit(target, source, move) { + if (source.species.name === 'Volcarona') { + changeSet(this, source, ssbSets['Pissog-Frosmoth'], true); + } else if (source.species.name === 'Frosmoth') { + changeSet(this, source, ssbSets['Pissog'], true); + } + }, + target: "normal", + type: "Fire", + }, + + // pokemonvortex + roulette: { + accuracy: true, + basePower: 0, + category: "Status", + name: "Roulette", + shortDesc: "Use a random move, and get a random moveset.", + desc: "A random move is selected for use, and then the user's other three moves are replaced with random moves. Aura Wheel, Dark Void, Explosion, Final Gambit, Healing Wish, Hyperspace Fury, Lunar Dance, Memento, Misty Explosion, Revival Blessing, and Self-Destruct cannot be selected.", + pp: 5, + priority: 0, + flags: {protect: 1, mirror: 1}, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, 'Nasty Plot', source); + this.add('-anim', source, 'Metronome', target); + this.add('-anim', source, 'Explosion', target); + }, + onHit(target, source) { + const bannedList = [ + 'aurawheel', 'darkvoid', 'explosion', 'finalgambit', 'healingwish', 'hyperspacefury', + 'lunardance', 'memento', 'mistyexplosion', 'revivalblessing', 'selfdestruct', + ]; + const moves = this.dex.moves.all().filter(move => ( + !source.moves.includes(move.id) && + (!move.isNonstandard || move.isNonstandard === 'Unobtainable') + )); + this.actions.useMove(this.sample(moves.filter(x => !bannedList.includes(x.id))), target); + for (const i of target.moveSlots.keys()) { + if (i > 2) break; + const randomMove = this.sample(moves.filter(x => !bannedList.includes(x.id))); + bannedList.push(randomMove.id); + const replacement = { + move: randomMove.name, + id: randomMove.id, + pp: randomMove.pp, + maxpp: randomMove.pp, + target: randomMove.target, + disabled: false, + used: false, + }; + target.moveSlots[i] = target.baseMoveSlots[i] = replacement; + } + }, + target: "self", + type: "Normal", + }, + + // Princess Autumn + cottoncandycrush: { + accuracy: 100, + basePower: 80, + category: "Physical", + shortDesc: "Uses Sp. Def over Attack in damage calculation.", + desc: "Damage is calculated using the user's Special Defense stat as its Attack, including stat stage changes. Other effects that modify the Attack stat are used as normal.", + name: "Cotton Candy Crush", + overrideOffensiveStat: "spd", + gen: 9, + pp: 15, + priority: 0, + flags: {contact: 1, protect: 1, mirror: 1}, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, 'Fusion Bolt', target); + this.add('-anim', source, 'Fleur Cannon', target); + }, + target: "normal", + type: "Fairy", + }, + + // ptoad + pleek: { + accuracy: true, + basePower: 0, + category: "Status", + name: "Pleek...", + shortDesc: "+4 Attack + inflict Perish Song on the user.", + desc: "Raises the user's Attack by 4 stages. Inflicts the Perish Song effect on the user, causing it to faint in three turns at the end of the turn.", + pp: 10, + priority: 0, + flags: {sound: 1, bypasssub: 1}, + onTry(source) { + if (source.m.usedPleek) { + this.hint("Pleek... only works once per switch-in."); + return false; + } + }, + onPrepareHit() { + this.attrLastMove('[anim] Hyper Voice'); + this.attrLastMove('[anim] Splash'); + }, + onHit(target, source, move) { + this.add(`c:|${getName((source.illusion || source).name)}|Pleek...`); + this.boost({atk: 4}, source, source, move); + source.addVolatile('perishsong'); + this.add('-start', source, 'perish3', '[silent]'); + source.m.usedPleek = true; + }, + target: "self", + type: "Fairy", + }, + + // Pulse_kS + luckpulse: { + accuracy: 100, + basePower: 90, + category: "Special", + name: "Luck Pulse", + shortDesc: "Random type. 40% random effect. High crit.", + desc: "This move's typing is chosen randomly between the 18 standard types, and each type has a 40% chance to apply a status effect to the target specific to that type. This move has an increased chance to result in a critical hit. The list of effects per type are as follows: Normal can apply drowsy; Fire can apply burn; Water can apply Aqua Ring; Grass can apply Leech Seed; Flying can apply confusion; Fighting can apply partial trapping; Poison can apply Toxic poison; Electric can apply paralysis; Ground can apply No Retreat, trapping the target without granting boosts; Rock can apply Salt Cure; Psychic can apply sleep; Ice can apply freeze; Bug can apply poison; Ghost can apply Disable; Steel can cause the target to flinch; Dragon can cause the target to recharge on their next turn, as if they had just used Hyper Beam; Dark can apply Taunt; and Fairy can apply infatuation.", + critRatio: 2, + pp: 10, + priority: 0, + flags: {pulse: 1, protect: 1}, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source, move) { + this.add('-anim', source, 'Tera Blast ' + move.type, target); + }, + onModifyType(move, pokemon, target) { + const type = this.sample(this.dex.types.names().filter(i => i !== 'Stellar')); + move.type = type; + }, + onTryHit(target, source, move) { + const messages = [ + 'Kai Shinden', + 'Kaio Sama', + 'Kaiba, Seto', + 'Kairyu-Shin', + 'Kaito Shizuki', + 'Kanga Skhan', + 'KanSas', + 'Karakuri Shogun', + 'Kate Stewart', + 'Kendo Spirit', + 'Keratan sulfate', + 'Kernel streaming', + 'Key Stage', + 'Kids Suck', + 'KillSteal', + 'Kilometers / Second', + 'Kilosecond', + 'King of the Swamp', + 'King\'s Shield', + 'Kirk/Spock', + 'Klingon Security', + 'Kuroudo (Cloud) Strife', + 'Kyouko Sakura', + 'KyrgyzStan', + 'Kpop Star', + 'Kartana Swords dance', + ]; + this.add(`c:|${getName((source.illusion || source).name)}|The kS stands for ${this.sample(messages)}`); + }, + secondary: { + chance: 40, + onHit(target, source, move) { + const table: {[k: string]: {volatileStatus?: string, status?: string}} = { + Normal: {volatileStatus: 'yawn'}, + Fire: {status: 'brn'}, + Water: {volatileStatus: 'aquaring'}, + Grass: {volatileStatus: 'leechseed'}, + Flying: {volatileStatus: 'confusion'}, + Fighting: {volatileStatus: 'partiallytrapped'}, + Poison: {status: 'tox'}, + Electric: {status: 'par'}, + Ground: {volatileStatus: 'trapped'}, + Rock: {volatileStatus: 'saltcure'}, + Psychic: {status: 'slp'}, + Ice: {status: 'frz'}, + Bug: {status: 'psn'}, + Ghost: {volatileStatus: 'disable'}, + Steel: {volatileStatus: 'flinch'}, + Dark: {volatileStatus: 'mustrecharge'}, + Dragon: {volatileStatus: 'taunt'}, + Fairy: {volatileStatus: 'attract'}, + }; + let condition = table[move.type]; + if (!condition) condition = table['Normal']; + if (condition.status) { + target.trySetStatus(condition.status); + } else if (condition.volatileStatus) { + target.addVolatile(condition.volatileStatus); + } + }, + }, + target: "normal", + type: "???", + }, + + // PYRO + meatgrinder: { + accuracy: 100, + basePower: 60, + category: "Physical", + name: "Meat Grinder", + shortDesc: "User:+1/8 HP/turn;Foe:-1/8 HP/turn,Nrm/Fairy 1/4.", + desc: "Causes damage to the target equal to 1/8 of its maximum HP (1/4 if the target is Normal or Fairy type), rounded down, and heals the user equal to 1/8 of its maximum HP, both at the end of each turn during effect. This effect ends when the target is no longer active.", + pp: 15, + priority: 0, + flags: {protect: 1, mirror: 1}, + onPrepareHit() { + this.attrLastMove('[anim] Guillotine'); + }, + condition: { + noCopy: true, + onStart(pokemon) { + this.add('-start', pokemon, 'Meat Grinder'); + }, + onResidualOrder: 13, + onResidual(pokemon, source) { + this.damage(pokemon.baseMaxhp / (pokemon.hasType(['Normal', 'Fairy']) ? 4 : 8)); + + const target = this.getAtSlot(pokemon.volatiles['meatgrinder'].sourceSlot); + if (!pokemon || pokemon.fainted || pokemon.hp <= 0) { + this.add(`c:|${getName((target.illusion || target).name)}|Tripping off the beat kinda, dripping off the meat grinder`); + } + if (!target || target.fainted || target.hp <= 0) { + this.debug('Nothing to heal'); + return; + } + this.heal(target.baseMaxhp / 8, target, pokemon); + }, + onEnd(pokemon) { + this.add('-end', pokemon, 'Meat Grinder'); + }, + }, + secondary: { + chance: 100, + volatileStatus: 'meatgrinder', + }, + target: "normal", + type: "Steel", + }, + + // Quite Quiet + worriednoises: { + accuracy: 100, + basePower: 90, + category: "Special", + name: "*Worried Noises*", + shortDesc: "+1 SpA. Type varies based on user's primary type.", + desc: "Has a 100% chance to raise the user's Special Attack by 1 stage. This move's type depends on the user's primary type. If the user's primary type is typeless, this move's type is the user's secondary type if it has one, otherwise the added type from effects that add extra typings. This move is typeless if the user's type is typeless alone.", + pp: 10, + priority: 0, + flags: {protect: 1, mirror: 1, sound: 1, bypasssub: 1}, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, 'Tidy Up', source); + this.add('-anim', source, 'Bug Buzz', target); + }, + onModifyType(move, pokemon) { + let type = pokemon.getTypes()[0]; + if (type === "Bird") type = "???"; + move.type = type; + }, + secondary: { + chance: 100, + self: { + boosts: { + spa: 1, + }, + }, + }, + target: "normal", + type: "Normal", + }, + + // quziel + reshape: { + accuracy: 100, + basePower: 0, + category: "Status", + name: "Reshape", + shortDesc: "User: +1 SpA. Target becomes a random monotype.", + desc: "Raises the user's Special Attack by 1 stage and changes the target's typing to any one of the 18 standard types at random, replacing their old typing.", + pp: 10, + priority: 0, + flags: {}, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, 'Reflect Type', target); + }, + onHit(target, source, move) { + const type = this.sample(this.dex.types.names().filter(i => i !== 'Stellar')); + target.setType(type); + this.add('-start', target, 'typechange', type, '[from] move: Reshape'); + this.boost({spa: 1}, source); + }, + target: "normal", + type: "Normal", + }, + + // R8 + magictrick: { + accuracy: true, + basePower: 0, + category: "Status", + name: "Magic Trick", + shortDesc: "Teleport + Clears field effects.", + desc: "Removes any terrain, weather, entry hazard, or other removable field condition, and then causes the user to switch out out even if it is trapped and be replaced immediately by a selected party member. The user does not switch out if there are no unfainted party members, and the user will still attempt to switch out if there are no active field conditions.", + pp: 5, + priority: 0, + flags: {bypasssub: 1}, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, 'Explosion', target); + }, + onHit(target, source, move) { + let success = false; + const displayText = ['spikes', 'toxicspikes', 'stealthrock', 'stickyweb', 'gmaxsteelsurge']; + for (const player of this.sides) { + for (const targetCondition of Object.keys(player.sideConditions)) { + if (player.removeSideCondition(targetCondition)) { + success = true; + if (displayText.includes(targetCondition)) { + this.add('-sideend', player, this.dex.conditions.get(targetCondition).name, '[from] move: Magic Trick', '[of] ' + source); + } + } + } + } + if (this.field.clearTerrain()) success = true; + if (this.field.clearWeather()) success = true; + for (const pseudoWeather of PSEUDO_WEATHERS) { + if (this.field.removePseudoWeather(pseudoWeather)) success = true; + } + return success || !!this.canSwitch(source.side); + }, + selfSwitch: true, + secondary: null, + target: "self", + type: "Normal", + }, + + // Rainshaft + "hatsunemikusluckyorb": { + accuracy: true, + basePower: 0, + category: "Status", + name: "Hatsune Miku's Lucky Orb", + shortDesc: "Gains +3 to random stat, then uses Baton Pass.", + desc: "Z-Move requiring Rainium Z. Boosts a random stat (except Accuracy and Evasion) by 3 stages, then the user is replaced with another Pokemon in its party. The selected Pokemon has the user's stat stage changes, confusion, and certain move effects transferred to it.", + pp: 1, + priority: 0, + flags: {}, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(pokemon) { + this.add('-anim', pokemon, 'Life Dew', pokemon); + this.add('-anim', pokemon, 'Geomancy', pokemon); + }, + onHit(target, pokemon, move) { + 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); + this.boost({[randomStat]: 3}, pokemon, pokemon, move); + this.actions.useMove('Baton Pass', target); + } + }, + isZ: "rainiumz", + secondary: null, + target: "self", + type: "Water", + }, + + // Ransei + floodoflore: { + accuracy: 100, + basePower: 100, + category: "Special", + name: "Flood of Lore", + shortDesc: "Sets Psychic Terrain.", + desc: "If this move is successful, the terrain becomes Psychic Terrain.", + pp: 5, + priority: 0, + flags: {protect: 1}, + terrain: 'psychicterrain', + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, 'Photon Geyser', target); + }, + secondary: null, + target: "normal", + type: "Psychic", + }, + + // ReturnToMonkey + monkemagic: { + accuracy: true, + basePower: 0, + category: "Status", + name: "Monke Magic", + shortDesc: "Sets Trick Room; user SpA +1.", + desc: "Nearly always goes last. Raises the user's Special Attack by 1 stage and sets Trick Room for 5 turns, making the slower Pokemon move first for the duration.", + pp: 5, + priority: -7, + flags: {}, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, 'Trick', target); + this.add('-anim', source, 'Trick Room', target); + this.add('-anim', source, 'Nasty Plot', target); + }, + pseudoWeather: 'trickroom', + self: { + boosts: { + spa: 1, + }, + }, + target: "all", + type: "Psychic", + }, + + // Rissoux + callofthewild: { + accuracy: true, + basePower: 0, + category: "Status", + name: "Call of the Wild", + shortDesc: "Boosts Atk, Spe, and accuracy by 1 stage.", + pp: 5, + priority: 0, + flags: {sound: 1}, + boosts: { + atk: 1, + spe: 1, + accuracy: 1, + }, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, 'Dragon Dance', source); + this.add('-anim', source, 'Lock-On', source); + }, + secondary: null, + target: "self", + type: "Fire", + }, + + // RSB + confiscate: { + accuracy: 100, + basePower: 60, + category: "Physical", + name: "Confiscate", + shortDesc: "First turn only. Steals boosts and screens.", + desc: "Nearly always moves first. The target's stat stages greater than 0 are stolen from it and applied to the user, and any present effects of Reflect, Light Screen, and Aurora Veil are moved from the target's side of the field to the user's, before dealing damage. Fails unless it is the user's first turn on the field.", + pp: 5, + priority: 2, + flags: {contact: 1, protect: 1, mirror: 1, bite: 1}, + onTry(source) { + if (source.activeMoveActions > 1) { + this.hint("Confiscate only works on your first turn out."); + return false; + } + }, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, 'Crunch', target); + this.add('-anim', source, 'Thief', target); + }, + onTryHit(target, source) { + this.add(`c:|${getName((source.illusion || source).name)}|Contraband detected, confiscating.`); + for (const condition of ['reflect', 'lightscreen', 'auroraveil']) { + if (target.side.removeSideCondition(condition)) { + source.side.addSideCondition(condition); + } + } + }, + stealsBoosts: true, + target: "normal", + type: "Dark", + }, + + // Rumia + midnightbird: { + accuracy: 100, + basePower: 85, + category: "Special", + name: "Midnight Bird", + shortDesc: "100% chance to raise the user's Sp. Atk by 1.", + desc: "Has a 100% chance to raise the user's Special Attack by 1 stage.", + pp: 10, + priority: 0, + flags: {protect: 1, mirror: 1}, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, 'Memento', target); + this.add('-anim', source, 'Brutal Swing', target); + }, + secondary: { + chance: 100, + self: { + boosts: { + spa: 1, + }, + }, + }, + target: "normal", + type: "Dark", + }, + + // Scotteh + purification: { + accuracy: true, + basePower: 0, + category: "Status", + shortDesc: "Heals 50% of max HP. Cures status.", + desc: "Heals the user for 1/2 of their maximum HP and removes any non-volatile status effect from the user.", + name: "Purification", + pp: 5, + priority: 0, + flags: {heal: 1, bypasssub: 1, allyanim: 1}, + onPrepareHit() { + this.attrLastMove('[anim] Moonlight'); + }, + onHit(pokemon) { + const success = !!this.heal(this.modify(pokemon.maxhp, 0.5)); + return pokemon.cureStatus() || success; + }, + secondary: null, + target: "self", + type: "Water", + }, + + // SexyMalasada + hexadecimalfire: { + accuracy: 100, + basePower: 75, + category: "Special", + shortDesc: "20% burn, 20% spite, 20% 1/4th recoil.", + desc: "This move independently has a 20% chance to leave the target with a burn, a 20% chance to reduce the PP of the target's last used move by 4, and a 20% chance to cause the user to take damage equal to 1/4 of the damage dealt to the target.", + name: "Hexadecimal Fire", + pp: 15, + priority: 0, + flags: {heal: 1, bypasssub: 1, allyanim: 1}, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, 'Sacred Fire', target); + this.add('-anim', source, 'Hex', target); + }, + secondaries: [ + { + chance: 20, + status: 'brn', + }, + { + chance: 20, + onHit(target) { + if (!target.hp) return; + let move: Move | ActiveMove | null = target.lastMove; + if (!move || move.isZ) return; + if (move.isMax && move.baseMove) move = this.dex.moves.get(move.baseMove); + const ppDeducted = target.deductPP(move.id, 4); + if (!ppDeducted) return; + this.add('-activate', target, 'move: Hexadecimal Fire', move.name, ppDeducted); + }, + }, + { + chance: 20, + onHit(target, source, move) { + move.recoil = [25, 100]; + }, + }, + ], + target: "normal", + type: "Ghost", + }, + + // sharp_claw + treacheroustraversal: { + accuracy: 100, + basePower: 70, + category: "Physical", + shortDesc: "Clears hazards, sets spikes, switches out.", + desc: "Removes all entry hazards and active terrains from the field, then sets one layer of Spikes if the user is Sneasel or Toxic Spikes otherwise. If this move is successful and the user has not fainted, the user switches out even if it is trapped and is replaced immediately by a selected party member. The user does not switch out if there are no unfainted party members, or if the target switched out using an Eject Button or through the effect of the Emergency Exit or Wimp Out Abilities.", + name: "Treacherous Traversal", + gen: 9, + pp: 20, + priority: 0, + flags: {contact: 1, protect: 1, mirror: 1}, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, 'Defog', source); + this.add('-anim', source, 'Extreme Speed', target); + }, + selfSwitch: true, + self: { + onHit(source) { + let success = false; + const removeTarget = [ + 'reflect', 'lightscreen', 'auroraveil', 'safeguard', 'mist', 'spikes', 'toxicspikes', 'stealthrock', 'stickyweb', 'gmaxsteelsurge', + ]; + const removeAll = [ + 'spikes', 'toxicspikes', 'stealthrock', 'stickyweb', 'gmaxsteelsurge', + ]; + const targetSide = source.side.foe; + for (const targetCondition of removeTarget) { + if (targetSide.removeSideCondition(targetCondition)) { + if (!removeAll.includes(targetCondition)) continue; + this.add('-sideend', targetSide, this.dex.conditions.get(targetCondition).name, '[from] move: Treacherous Traversal', '[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: Treacherous Traversal', '[of] ' + source); + success = true; + } + } + success = this.field.clearTerrain(); + for (const side of source.side.foeSidesWithConditions()) { + if (source.species.name === 'Sneasel') { + success = side.addSideCondition('spikes'); + } else { + success = side.addSideCondition('toxicspikes'); + } + } + return success; + }, + }, + secondary: {}, // allows sheer force to trigger + target: "normal", + type: "Rock", + }, + + // Siegfried + boltbeam: { + accuracy: 100, + basePower: 0, + category: "Status", + shortDesc: "Calls 45 BP Thunderbolt + 45 BP Ice Beam.", + desc: "When used, calls a 45 Base Power Thunderbolt for use, and then calls a 45 Base Power Ice Beam for use. If one move fails, the other will still execute.", + name: "BoltBeam", + pp: 15, + priority: 0, + flags: {}, + onTryMove() { + this.attrLastMove('[still]'); + }, + onTryHit(target) { + const tbolt = this.dex.getActiveMove('thunderbolt'); + tbolt.basePower = 45; + const icebeam = this.dex.getActiveMove('icebeam'); + icebeam.basePower = 45; + this.actions.useMove(tbolt, target); + this.actions.useMove(icebeam, target); + return null; + }, + secondary: null, + target: "self", + type: "Electric", + }, + + // Sificon + grassgaming: { + accuracy: 100, + basePower: 100, + category: "Special", + shortDesc: "Remove item, Leech Seed, Psn if stat raised.", + desc: "If the user has not fainted, the target loses its held item. This move cannot cause Pokemon with the Sticky Hold Ability or Pokemon holding Z-Crystals or Mega Stones to lose their held items. This move summons Leech Seed on the foe. Has a 100% chance to poison the target if it had a stat stage raised this turn.", + name: "Grass Gaming", + pp: 15, + priority: 0, + flags: {protect: 1, reflectable: 1, mirror: 1}, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, 'G-Max Vine Lash', target); + }, + onBasePower(basePower, source, target, move) { + const item = target.getItem(); + if (!this.singleEvent('TakeItem', item, target.itemState, target, target, move, item)) return; + if (item.id) { + return this.chainModify(1.5); + } + }, + onAfterHit(target, source) { + if (source.hp) { + const item = target.takeItem(); + if (item) { + this.add('-enditem', target, item.name, '[from] move: Grass Gaming', '[of] ' + source); + } + } + }, + onHit(target, source, move) { + if (target?.statsRaisedThisTurn) { + target.trySetStatus('psn', source, move); + } + if (!target.hasType('Grass')) { + target.addVolatile('leechseed', source); + } + }, + secondary: null, + target: "normal", + type: "Grass", + }, + + // skies + like: { + accuracy: 100, + basePower: 80, + category: "Physical", + shortDesc: "The user recycles their item.", + desc: "If this attack is successful, the user regains its last used held item, unless it was forcibly removed.", + name: "Like..?", + pp: 5, + priority: 0, + flags: {reflectable: 1, protect: 1}, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, 'Recycle', target); + this.add('-anim', source, 'Seed Bomb', target); + }, + self: { + onHit(pokemon) { + if (!pokemon.item && pokemon.lastItem) { + const item = pokemon.lastItem; + pokemon.lastItem = ''; + this.add('-item', pokemon, this.dex.items.get(item), '[from] move: Recycle'); + pokemon.setItem(item); + } + }, + }, + secondary: null, + target: "normal", + type: "Grass", + }, + + // snake + conceptrelevant: { + accuracy: 100, + basePower: 70, + category: "Physical", + shortDesc: "Sets up 2 random hazards+psn foe. Switch.", + desc: "If this move is successful, all entry hazards are removed from the user's side of the field, the target becomes poisoned, and two random entry hazards are set on the target's side. If this move is successful and the user has not fainted, the user switches out even if it is trapped and is replaced immediately by a selected party member. The user does not switch out if there are no unfainted party members, or if the target switched out using an Eject Button or through the effect of the Emergency Exit or Wimp Out Abilities.", + name: "Concept Relevant", + gen: 9, + pp: 15, + priority: 0, + flags: {contact: 1, protect: 1}, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, 'Mortal Spin', target); + this.add('-anim', source, 'Spikes', target); + this.add('-anim', source, 'U-turn', target); + }, + onAfterHit(target, pokemon) { + if (pokemon.hp && pokemon.removeVolatile('leechseed')) { + this.add('-end', pokemon, 'Leech Seed', '[from] move: Concept Relevant', '[of] ' + pokemon); + } + const sideConditions = ['spikes', 'toxicspikes', 'stealthrock', 'stickyweb', 'gmaxsteelsurge']; + 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: Concept Relevant', '[of] ' + pokemon); + } + } + if (pokemon.hp && pokemon.volatiles['partiallytrapped']) { + pokemon.removeVolatile('partiallytrapped'); + } + for (let i = 0; i < 2; i++) { + const usableSideConditions = sideConditions.filter(condition => { + if (condition === 'spikes') { + return !target.side.sideConditions[condition] || target.side.sideConditions[condition].layers < 3; + } + if (condition === 'toxicspikes') { + return !target.side.sideConditions[condition] || target.side.sideConditions[condition].layers < 2; + } + return !target.side.sideConditions[condition]; + }); + if (usableSideConditions.length) { + target.side.addSideCondition(this.sample(usableSideConditions)); + } + } + }, + onAfterSubDamage(damage, target, pokemon) { + if (pokemon.hp && pokemon.removeVolatile('leechseed')) { + this.add('-end', pokemon, 'Leech Seed', '[from] move: Concept Relevant', '[of] ' + pokemon); + } + const sideConditions = ['spikes', 'toxicspikes', 'stealthrock', 'stickyweb', 'gmaxsteelsurge']; + 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: Concept Relevant', '[of] ' + pokemon); + } + } + if (pokemon.hp && pokemon.volatiles['partiallytrapped']) { + pokemon.removeVolatile('partiallytrapped'); + } + for (let i = 0; i < 2; i++) { + const usableSideConditions = sideConditions.filter(condition => { + if (condition === 'spikes') { + return !target.side.sideConditions[condition] || target.side.sideConditions[condition].layers < 3; + } + if (condition === 'toxicspikes') { + return !target.side.sideConditions[condition] || target.side.sideConditions[condition].layers < 2; + } + return !target.side.sideConditions[condition]; + }); + if (usableSideConditions.length) { + target.side.addSideCondition(this.sample(usableSideConditions)); + } + } + }, + secondary: { + chance: 100, + status: 'psn', + }, + selfSwitch: true, + target: "normal", + type: "Bug", + }, + + // Soft Flex + adaptivebeam: { + accuracy: 100, + basePower: 90, + category: "Special", + shortDesc: "If target has boosts, steals them, +1 prio, 0 BP.", + desc: "If the target of this move has positive stat stage changes, this move will usually move first, and on use the attack deals no damage and instead moves all positive stat stage changes from the target to the user.", + name: "Adaptive Beam", + pp: 15, + priority: 0, + flags: {sound: 1, protect: 1, bypasssub: 1}, + stealsBoosts: true, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, 'Flash Cannon', target); + if (target.positiveBoosts()) { + this.add('-anim', source, 'Extreme Evoboost', source); + } + }, + onModifyMove(move, pokemon, target) { + if (target?.positiveBoosts()) { + move.basePower = 0; + move.category = 'Status'; + } + }, + onModifyPriority(priority, source, target, move) { + if (target?.positiveBoosts()) return priority + 1; + return priority; + }, + secondary: null, + target: "normal", + type: "Steel", + }, + + // Solaros & Lunaris + mindmelt: { + accuracy: 100, + basePower: 100, + category: "Special", + overrideDefensiveStat: 'def', + shortDesc: "Target's the foe's Def instead of Sp. Def.", + desc: "Deals damage to the target based on its Defense instead of Special Defense.", + name: "Mind Melt", + gen: 9, + pp: 10, + priority: 0, + flags: {protect: 1, mirror: 1}, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, 'Burn Up', target); + }, + secondary: null, + target: "normal", + type: "Fire", + }, + + // Spiderz + shepherdofthemafiaroom: { + accuracy: 90, + basePower: 65, + category: "Physical", + shortDesc: "Sets Sticky Web. 1.3x power if moves first.", + desc: "If this move deals damage, it sets up a hazard on the opposing side of the field. This hazard lowers the Speed of each opposing Pokemon that switches in by 1 stage, unless it is a Flying-type Pokemon or has the Levitate Ability. This move's damage is multiplied by 1.3 if the user is the first Pokemon to move during the turn.", + name: "Shepherd of the Mafia Room", + gen: 9, + pp: 15, + priority: 0, + flags: {contact: 1, protect: 1, mirror: 1}, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source, move) { + this.add('-anim', source, 'Explosion', source); + this.add('-anim', source, 'Explosion', source); + this.add('-anim', source, 'Explosion', source); + this.add('-anim', source, 'Explosion', source); + this.add('-anim', source, 'Explosion', source); + this.add('-anim', source, 'Explosion', source); + }, + onBasePower(relayVar, source, target, move) { + if (source.getStat('spe', false, true) > target.getStat('spe', false, true)) { + return this.chainModify([5325, 4096]); + } + }, + onAfterHit(target, source, move) { + if (!move.hasSheerForce && source.hp) { + for (const side of source.side.foeSidesWithConditions()) { + side.addSideCondition('stickyweb'); + } + } + }, + onAfterSubDamage(damage, target, source, move) { + if (!move.hasSheerForce && source.hp) { + for (const side of source.side.foeSidesWithConditions()) { + side.addSideCondition('stickyweb'); + } + } + }, + secondary: {}, // Sheer Force-boosted + target: "normal", + type: "Dark", + }, + + // spoo + cardiotraining: { + accuracy: true, + basePower: 0, + category: "Status", + shortDesc: "Boosts Atk, Def, and Sp. Def by 1 stage.", + desc: "Boosts the user's Attack, Defense, and Special Defense by 1 stage.", + name: "Cardio Training", + gen: 9, + pp: 5, + priority: 0, + flags: {snatch: 1, dance: 1, metronome: 1}, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source, move) { + this.add('-anim', source, 'Geomancy', source); + }, + boosts: { + atk: 1, + def: 1, + spd: 1, + }, + secondary: null, + target: "self", + type: "Fire", + }, + + // Steorra + phantomweapon: { + accuracy: 100, + basePower: 65, + category: "Physical", + name: "Phantom Weapon", + shortDesc: "2x power if user is holding item; destroys item.", + desc: "If the user is holding an item, this move will deal double damage and the user's held item will be removed.", + pp: 20, + priority: 0, + onModifyPriority(priority, pokemon) { + if (!pokemon.item) return priority + 1; + }, + flags: {protect: 1, mirror: 1}, + onModifyMove(move, pokemon, target) { + if (!pokemon.item) { + move.flags['contact'] = 1; + move.flags['mirror'] = 1; + } + }, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source, move) { + this.add('-anim', source, 'Shadow Force', target); + if (!source.item || source.ignoringItem()) return; + const item = source.getItem(); + if (!this.singleEvent('TakeItem', item, source.itemState, source, source, move, item)) return; + move.basePower *= 2; + source.addVolatile('phantomweapon'); + }, + condition: { + onUpdate(pokemon) { + const item = pokemon.getItem(); + pokemon.setItem(''); + pokemon.lastItem = item.id; + pokemon.usedItemThisTurn = true; + this.add('-enditem', pokemon, item.name, '[from] move: Phantom Weapon'); + this.runEvent('AfterUseItem', pokemon, null, null, item); + pokemon.removeVolatile('phantomweapon'); + }, + }, + secondary: null, + target: "normal", + type: "Ghost", + }, + + // Struchni + randfact: { + accuracy: 100, + basePower: 120, + category: "Physical", + shortDesc: "Random type.", + desc: "This move's typing is chosen randomly between the 18 standard types.", + name: "~randfact", + gen: 9, + pp: 10, + priority: 0, + flags: {protect: 1, mirror: 1}, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source, move) { + move.type = this.sample(this.dex.types.names().filter(i => i !== 'Stellar')); + this.add('-anim', source, 'Nasty Plot', source); + this.add('-anim', source, 'Head Smash', target); + }, + secondary: null, + target: "normal", + type: "Steel", + }, + + // Sulo + vengefulmood: { + accuracy: 100, + basePower: 60, + basePowerCallback(pokemon) { + return Math.min(140, 60 + 20 * pokemon.timesAttacked); + }, + category: "Special", + shortDesc: "+20 power for each time user was hit. Max 4 hits.", + desc: "Power is equal to 60+(X*20), where X is the total number of times the user has been hit by a damaging attack during the battle, even if the user did not lose HP from the attack. X cannot be greater than 4 and does not reset upon switching out or fainting. Each hit of a multi-hit attack is counted, but confusion damage is not counted.", + name: "Vengeful Mood", + gen: 9, + pp: 15, + priority: 0, + flags: {protect: 1, mirror: 1}, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, 'Aura Sphere', source); + }, + secondary: null, + target: "normal", + type: "Fighting", + }, + + // Swiffix + stinkbomb: { + accuracy: 85, + basePower: 10, + category: "Special", + shortDesc: "Hits 10 times. Each hit can miss.", + desc: "Hits ten times. This move checks accuracy for each hit, and the attack ends if the target avoids a hit. If one of the hits breaks the target's substitute, it will take damage for the remaining hits. If the user has the Skill Link Ability, this move will always hit ten times. If the user is holding Loaded Dice, this move hits four to ten times at random without checking accuracy between hits.", + name: "Stink Bomb", + gen: 9, + pp: 10, + priority: 0, + flags: {protect: 1, mirror: 1}, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, 'Population Bomb', target); + this.add('-anim', source, 'Venoshock', target); + }, + multihit: 10, + multiaccuracy: true, + secondary: null, + target: "normal", + type: "Poison", + }, + + // Syrinix + asoulforasoul: { + accuracy: 100, + basePower: 0, + category: "Physical", + shortDesc: "KOes foe + user if ally was KOed prev. turn.", + desc: "If one of the user's party members fainted last turn, this move results in a guaranteed KO for both the target and the user. This move can hit Normal-type Pokemon. Fails if one of the user's party members did not faint last turn.", + name: "A Soul for a Soul", + pp: 5, + priority: 1, + flags: {protect: 1, contact: 1}, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, 'Explosion', target); + this.add('-anim', source, 'Final Gambit', target); + }, + onTry(source, target) { + if (!source.side.faintedLastTurn) return false; + source.faint(source); + target?.faint(source); + }, + ignoreImmunity: true, + secondary: null, + target: "normal", + type: "Ghost", + }, + + // Teclis + risingsword: { + accuracy: 100, + basePower: 0, + category: "Status", + shortDesc: "Boosts Attack, Speed, and Crit ratio by 1.", + desc: "Boosts the user's Attack and Speed by 1 stage and increases the user's chance of landing a critical hit.", + name: "Rising Sword", + pp: 5, + priority: 0, + onTryMove() { + this.attrLastMove('[still]'); + }, + onHit(pokemon) { + const success = !!this.boost({atk: 1, spe: 1}); + return pokemon.addVolatile('risingsword') || success; + }, + condition: { + onStart(pokemon, source) { + this.add('-start', pokemon, 'move: Rising Sword'); + }, + onModifyCritRatio(critRatio, source) { + return critRatio + 1; + }, + }, + flags: {}, + onPrepareHit(target, source) { + this.add('-anim', source, 'Focus Energy', target); + this.add('-anim', source, 'Agility', target); + }, + secondary: null, + target: "self", + type: "Psychic", + }, + + // Tenshi + sandeat: { + accuracy: 100, + basePower: 0, + category: "Status", + shortDesc: "Protects user, changes type and gains a new move.", + desc: "Nearly always moves first. The user protects itself from most attacks made by other Pokemon this turn and gains a random type. If the user has Dynamic Punch, Pyro Ball, Triple Axel, Stone Edge, or Aqua Tail, it will also replace that move with a new move based on the type gained. It can gain Fire type and Pyro Ball, Ice type and Triple Axel, Rock type and Stone Edge, and Water type and Aqua Tail. This move fails entirely if the user moved last this turn or if the foe switches out, and this move has an increasing chance to fail when used consectively.", + name: "SAND EAT", + pp: 10, + priority: 4, + flags: {noassist: 1}, + stallingMove: true, + volatileStatus: 'protect', + onTryMove() { + this.attrLastMove('[still]'); + }, + onHit(pokemon) { + pokemon.addVolatile('stall'); + const types = ['Fire', 'Water', 'Ice', 'Rock']; + const moves = ['pyroball', 'aquatail', 'tripleaxel', 'stoneedge']; + const newType = this.sample(types.filter(i => !pokemon.hasType(i))); + const newMove = moves[types.indexOf(newType)]; + const replacementIndex = Math.max( + pokemon.moves.indexOf('dynamicpunch'), + pokemon.moves.indexOf('pyroball'), + pokemon.moves.indexOf('aquatail'), + pokemon.moves.indexOf('tripleaxel'), + pokemon.moves.indexOf('stoneedge') + ); + if (replacementIndex < 0) { + return; + } + const replacement = this.dex.moves.get(newMove); + const replacementMove = { + move: replacement.name, + id: replacement.id, + pp: replacement.pp, + maxpp: replacement.pp, + target: replacement.target, + disabled: false, + used: false, + }; + pokemon.moveSlots[replacementIndex] = replacementMove; + pokemon.baseMoveSlots[replacementIndex] = replacementMove; + pokemon.addType(newType); + this.add('-start', pokemon, 'typeadd', newType, '[from] move: SAND EAT'); + this.add(`c:|${getName((pokemon.illusion || pokemon).name)}|omg look HE EAT`); + }, + onPrepareHit(pokemon, source) { + this.add('-anim', source, 'Dig', pokemon); + this.add('-anim', source, 'Odor Sleuth', pokemon); + this.add('-anim', source, 'Stuff Cheeks', pokemon); + this.add(`c:|${getName((pokemon.illusion || pokemon).name)}|he do be searching for rocks tho`); + return !!this.queue.willAct() && this.runEvent('StallMove', pokemon); + }, + secondary: null, + target: "self", + type: "Ground", + }, + + // Tico + eternalwish: { + accuracy: true, + basePower: 0, + category: "Status", + shortDesc: "Wish + Aromatherapy + Defog.", + desc: "Sets a Wish on the user's side, healing the active Pokemon for 50% of the user's maximum HP at the end of the next turn. Lowers the target's evasiveness by 1 stage. If this move is successful and whether or not the target's evasiveness was affected, the effects of Reflect, Light Screen, Aurora Veil, Safeguard, Mist, Spikes, Toxic Spikes, Stealth Rock, G-Max Steelsurge, and Sticky Web end for the target's side, and for the user's side all team members' non-volatile status conditions and the effects of Spikes, Toxic Spikes, Stealth Rock, G-Max Steelsurge, and Sticky Web are removed. Ignores a target's substitute, although a substitute will still block the lowering of evasiveness. If there is a terrain active and this move is successful, the terrain will be cleared.", + name: "Eternal Wish", + pp: 10, + priority: 0, + flags: {protect: 1, mirror: 1}, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(source, target) { + this.add('-anim', target, 'Wish', target); + this.add('-anim', target, 'Aromatherapy', target); + this.add('-anim', target, 'Defog', target); + }, + onHit(target, source, move) { + let success = false; + if (!target.volatiles['substitute'] || move.infiltrates) success = !!this.boost({evasion: -1}); + const removeTarget = [ + 'reflect', 'lightscreen', 'auroraveil', 'safeguard', 'mist', 'spikes', 'toxicspikes', 'stealthrock', 'stickyweb', 'gmaxsteelsurge', + ]; + const removeAll = [ + 'spikes', 'toxicspikes', 'stealthrock', 'stickyweb', 'gmaxsteelsurge', + ]; + 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: Eternal Wish', '[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: Eternal Wish', '[of] ' + source); + success = true; + } + } + this.field.clearTerrain(); + return success; + }, + self: { + slotCondition: 'Wish', + onHit(target, source, move) { + this.add('-activate', source, 'move: Eternal Wish'); + let success = false; + const allies = [...source.side.pokemon, ...source.side.allySide?.pokemon || []]; + for (const ally of allies) { + if (ally !== source && ((ally.hasAbility('sapsipper')) || + (ally.volatiles['substitute'] && !move.infiltrates))) { + continue; + } + if (ally.cureStatus()) success = true; + } + return success; + }, + }, + secondary: null, + target: "normal", + type: "Ghost", + }, + + // TheJesucristoOsAma + theloveofchrist: { + accuracy: 100, + basePower: 0, + category: "Status", + shortDesc: "Infatuates and confuses the target.", + desc: "Causes the target to become confused and infatuated, regardless of gender. This move cannot ever have more than 1 PP.", + name: "The Love Of Christ", + gen: 9, + pp: 1, + noPPBoosts: true, + priority: 0, + flags: {protect: 1}, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, 'Morning Sun', source); + this.add('-anim', source, 'Lovely Kiss', target); + }, + onHit(target, source) { + target.addVolatile('attract', source); + target.addVolatile('confusion', source); + }, + secondary: null, + target: "normal", + type: "Normal", + }, + + // trace + chronostasis: { + accuracy: 90, + basePower: 80, + category: "Special", + shortDesc: "If target is KOed, user boosts random stat by 2.", + desc: "If this move knocks out the target, the user boosts a random stat, except Accuracy and Evasion, by 2 stages.", + name: "Chronostasis", + gen: 9, + pp: 10, + priority: 0, + flags: {protect: 1, mirror: 1}, + onPrepareHit() { + this.attrLastMove('[anim] Future Sight'); + }, + onAfterMoveSecondarySelf(pokemon, target, move) { + if (!target || target.fainted || target.hp <= 0) { + 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); + this.boost({[randomStat]: 2}, pokemon, pokemon, move); + } + } + }, + secondary: null, + target: "normal", + type: "Psychic", + }, + + // Tuthur + symphonieduzero: { + accuracy: 100, + basePower: 80, + category: "Special", + shortDesc: "Deals an additional 12.5% HP at end of turn.", + desc: "If this move deals damage, at the end of the turn, the target will take an additional 12.5% of its maximum HP in non-attack damage if it is still on the field.", + name: "Symphonie du Ze\u0301ro", + pp: 10, + priority: 0, + flags: {protect: 1, mirror: 1, sound: 1, bypasssub: 1}, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, 'Alluring Voice', target); + }, + volatileStatus: 'symphonieduzero', + condition: { + noCopy: true, + onStart(pokemon) { + this.add('-start', pokemon, 'Symphonie du Ze\u0301ro'); + }, + onResidualOrder: 13, + onResidual(pokemon) { + this.damage(pokemon.baseMaxhp / 8); + }, + onEnd(pokemon) { + this.add('-end', pokemon, 'Symphonie du Ze\u0301ro'); + }, + }, + secondary: null, + target: "normal", + type: "Fairy", + }, + + // Two of Roses + dillydally: { + accuracy: 90, + basePower: 40, + category: "Physical", + shortDesc: "2 hits, +1 random stat/hit. Type=User 2nd type.", + desc: "This move hits 2 times. For each successful hit, the user boosts a random stat, except Accuracy and Evasion, by 1 stage. The typing of this move is equal to the user's secondary type; it will instead use the user's primary type if the user lacks a secondary type.", + name: "Dilly Dally", + pp: 20, + priority: 0, + multihit: 2, + flags: {protect: 1, contact: 1}, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, 'Volt Tackle', source); + this.add('-anim', source, 'Extreme Speed', target); + }, + onModifyType(move, pokemon) { + let type = pokemon.getTypes()[pokemon.getTypes().length - 1]; + if (type === "Bird" || type === undefined) type = "???"; + if (type === "Stellar") type = pokemon.getTypes()[pokemon.getTypes(false, true).length - 1]; + move.type = type; + }, + secondary: { + chance: 100, + onHit(target, source, move) { + const stats: BoostID[] = []; + const boost: SparseBoostsTable = {}; + let statPlus: BoostID; + for (statPlus in source.boosts) { + if (statPlus === 'accuracy' || statPlus === 'evasion') continue; + if (source.boosts[statPlus] < 6) { + stats.push(statPlus); + } + } + const randomStat: BoostID | undefined = stats.length ? this.sample(stats) : undefined; + if (randomStat) boost[randomStat] = 1; + this.boost(boost, source, source); + }, + }, + target: "normal", + type: "???", + }, + + + // UT + myboys: { + accuracy: 100, + basePower: 60, + category: "Physical", + shortDesc: "Uses two status moves, then switches out.", + desc: "The user uses two, at random, of: Feather Dance, Growl, Rain Dance, Sunny Day, Tailwind and Taunt. After these moves execute, the user switches out even if it is trapped and is replaced immediately by a selected party member. The user does not switch out if there are no unfainted party members out.", + name: "My Boys", + pp: 20, + priority: 0, + flags: {contact: 1, protect: 1, mirror: 1}, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + const varMoves = ['Feather Dance', 'Growl', 'Rain Dance', 'Sunny Day', 'Tailwind', 'Taunt', 'Will-O-Wisp']; + const move1 = this.sample(varMoves); + const move2 = this.sample(varMoves.filter(i => i !== move1)); + this.add('-message', `Fletchling used ${move1}!`); + this.actions.useMove(move1, source); + this.add('-message', `Taillow used ${move2}!`); + this.actions.useMove(move2, source); + this.add('-message', `Talonflame attacked!`); + this.add('-anim', source, 'U-Turn', target); + }, + selfSwitch: true, + secondary: null, + target: "normal", + type: "Flying", + }, + + // Valerian + firststrike: { + accuracy: 100, + basePower: 25, + category: "Physical", + name: "First Strike", + shortDesc: "Turn 1 only. Atk: +1 NVE, +2 NE, +3 SE.", + desc: "Boosts the user's Attack by 1 stage if the attack is not very effective, 2 stages if the attack is neutral, and 3 stages if the attack is super effective. Fails unless it is the user's first turn on the field.", + pp: 15, + priority: 3, + flags: {contact: 1, protect: 1, mirror: 1}, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, "Fake Out", target); + }, + onTry(source) { + if (source.activeMoveActions > 1) { + this.hint("First Strike only works on your first turn out."); + return false; + } + }, + onAfterMoveSecondarySelf(pokemon, target, move) { + let boost = 2; + const typeMod = target.getMoveHitData(move).typeMod; + if (typeMod > 0) { + boost = 3; + } else if (typeMod < 0) { + boost = 1; + } + this.boost({atk: boost}, pokemon, pokemon, move); + }, + secondary: null, + target: "normal", + type: "Steel", + }, + + // Venous + yourcripplinginterest: { + accuracy: true, + basePower: 0, + category: "Status", + name: "Your Crippling Interest", + shortDesc: "Tox; clears terrain and hazards on both sides.", + desc: "The target becomes badly poisoned, and all entry hazards and terrain effects are removed from both sides of the field. If the target already has a non-volatile status condition, the removal effect can still occur.", + pp: 15, + priority: 0, + flags: {protect: 1, reflectable: 1, mirror: 1, bypasssub: 1}, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, "Esper Wing", target); + this.add('-anim', source, "Defog", source); + }, + onHit(target, source, move) { + let success = false; + if (!target.volatiles['substitute'] || move.infiltrates) success = !!target.trySetStatus('tox', source); + const removeTarget = [ + 'reflect', 'lightscreen', 'auroraveil', 'safeguard', 'mist', 'spikes', 'toxicspikes', 'stealthrock', 'stickyweb', 'gmaxsteelsurge', + ]; + const removeAll = [ + 'spikes', 'toxicspikes', 'stealthrock', 'stickyweb', 'gmaxsteelsurge', + ]; + 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: Your Crippling Interest', '[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: Your Crippling Interest', '[of] ' + source); + success = true; + } + } + this.field.clearTerrain(); + return success; + }, + ignoreAbility: true, + secondary: null, + target: "normal", + type: "Flying", + }, + + // Violet + buildingcharacter: { + accuracy: 100, + basePower: 50, + basePowerCallback(pokemon, target, move) { + if (target?.terastallized) { + this.debug('BP doubled from tera'); + return move.basePower * 2; + } + return move.basePower; + }, + category: "Physical", + shortDesc: "Vs Tera'd target: 0 prio, 2x BP, removes Tera.", + desc: "Usually moves first. If the target has Terastallized, this move becomes +0 priority and does double damage. If this move is successful against a Terastallized target, the target's Terastallization effect is permanently removed.", + name: "building character", + gen: 9, + pp: 10, + priority: 1, + onModifyPriority(priority, pokemon, target, move) { + if (target?.terastallized) return 0; + }, + flags: {protect: 1, mirror: 1}, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + if (target?.terastallized) this.add('-anim', source, "Block", target); + this.add('-anim', source, "Wicked Blow", target); + }, + onHit(pokemon, source) { + if (pokemon?.terastallized) { + this.add(`c:|${getName((source.illusion || source).name)}|lol never do that ever again thanks`); + this.add('custom', '-endterastallize', pokemon); + delete pokemon.terastallized; + const details = pokemon.species.name + (pokemon.level === 100 ? '' : ', L' + pokemon.level) + + (pokemon.gender === '' ? '' : ', ' + pokemon.gender) + (pokemon.set.shiny ? ', shiny' : ''); + this.add('detailschange', pokemon, details); + } + }, + secondary: null, + target: "normal", + type: "Grass", + }, + + // Vistar + virtualavatar: { + accuracy: true, + basePower: 0, + category: "Status", + shortDesc: "Changes to Idol forme and sets a substitute.", + desc: "If the user is a Zeraora, the user's ability changes to Virtual Idol and its full moveset becomes Overdrive, Sparkling Aria, Torch Song, and Teeter Dance, replacing every currently present move. The user takes 1/4 of its maximum HP, rounded down, and puts it into a substitute to take its place in battle.", + name: "Virtual Avatar", + pp: 10, + priority: 0, + flags: {sound: 1, failcopycat: 1}, + secondary: null, + onTryMove() { + this.attrLastMove('[still]'); + }, + onTry(source) { + if (source.species.name === 'Zeraora') { + return; + } + this.hint("Only Zeraora can use this move."); + this.attrLastMove('[still]'); + this.add('-fail', source, 'move: Virtual Avatar'); + return null; + }, + onPrepareHit(target, source) { + this.add('-anim', source, 'Morning Sun', source); + this.add('-anim', source, 'Seed Flare', target); + }, + onHit(target, source) { + changeSet(this, target, ssbSets['Vistar-Idol'], true); + this.add(`c:|${getName((source.illusion || source).name)}|Finally, I'm making my debut`); + if (source.volatiles['substitute']) return; + if (source.hp <= source.maxhp / 4 || source.maxhp === 1) { // Shedinja clause + this.add('-fail', source, 'move: Substitute', '[weak]'); + } else { + source.addVolatile('substitute'); + this.directDamage(source.maxhp / 4); + } + }, + target: "self", + type: "Normal", + }, + + // vmnunes + gracideasblessing: { + accuracy: 100, + basePower: 0, + category: "Status", + shortDesc: "Uses Wish, switches out. Recipient gets Aqua Ring.", + desc: "Sets a Wish on the user's side, healing the active Pokemon for 50% of the user's maximum HP at the end of the next turn. If this move is successful, the user switches out even if it is trapped and is replaced immediately by a selected party member, which will gain the Aqua Ring effect. The user does not switch out if there are no unfainted party members.", + name: "Gracidea's Blessing", + pp: 10, + priority: 0, + flags: {}, + secondary: null, + selfSwitch: true, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, 'Morning Sun', source); + this.add('-anim', source, 'Seed Flare', target); + }, + slotCondition: 'gracideasblessing', + condition: { + duration: 2, + onStart(pokemon, source) { + this.effectState.hp = source.maxhp / 2; + }, + onSwap(target) { + if (!target.fainted) target.addVolatile('aquaring', target); + }, + onResidualOrder: 4, + onEnd(target) { + if (target && !target.fainted) { + this.heal(this.effectState.hp, target, target); + } + }, + }, + target: "self", + type: "Grass", + }, + + // WarriorGallade + fruitfullongbow: { + accuracy: 90, + basePower: 160, + category: "Special", + shortDesc: "Hit off higher atk, eats berry, Dragon/Fly eff.", + desc: "Uses the user's higher attack stat in damage calculation. Does not need to charge in sun. If this move is successful and the user is holding a berry, the user consumed its held berry and restored 25% of the its maximum HP. This move combines Dragon in its type effectiveness.", + name: "Fruitful Longbow", + gen: 9, + pp: 15, + priority: 0, + flags: {charge: 1, protect: 1, mirror: 1, slicing: 1, wind: 1}, + critRatio: 2, + onEffectiveness(typeMod, target, type, move) { + return typeMod + this.dex.getEffectiveness('Dragon', type); + }, + onModifyMove(move, pokemon, target) { + if (pokemon.getStat('atk') > pokemon.getStat('spa')) { + move.overrideOffensiveStat = 'atk'; + } + }, + onTryMove(attacker, defender, move) { + if (attacker.removeVolatile(move.id)) { + this.attrLastMove('[still]'); + this.add('-anim', attacker, 'Signal Beam', defender); + this.add('-anim', attacker, 'Twister', defender); + this.add('-anim', attacker, 'Psycho Cut', defender); + return; + } + this.add('-anim', attacker, 'Tailwind', attacker); + this.add('-message', `${attacker.name} whipped up an intense whirlwind and began to glow a vivine green!`); + if (attacker.getItem().isBerry) { + attacker.eatItem(true); + this.heal(attacker.maxhp / 4, attacker); + } + if (['sunnyday', 'desolateland'].includes(attacker.effectiveWeather())) { + this.attrLastMove('[still]'); + this.add('-anim', attacker, 'Signal Beam', defender); + this.add('-anim', attacker, 'Twister', defender); + this.add('-anim', attacker, 'Psycho Cut', defender); + return; + } + if (!this.runEvent('ChargeMove', attacker, defender, move)) { + return; + } + attacker.addVolatile('twoturnmove', defender); + return null; + }, + secondary: null, + target: "normal", + type: "Flying", + }, + + // Waves + torrentialdrain: { + accuracy: 100, + basePower: 60, + category: "Special", + shortDesc: "Recovers 50% of damage dealt.", + desc: "The user recovers 1/2 the HP lost by the target, rounded half up.", + name: "Torrential Drain", + pp: 10, + priority: 0, + flags: {protect: 1, mirror: 1, heal: 1, metronome: 1}, + drain: [1, 2], + secondary: null, + target: "allAdjacent", + type: "Water", + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, 'Aqua Ring', source); + this.add('-anim', source, 'Origin Pulse', target); + this.add('-anim', source, 'Parabolic Charge', target); + }, + }, + + // WigglyTree + perfectmimic: { + accuracy: true, + basePower: 0, + category: "Status", + shortDesc: "Endure + Me First. Copied move hits off Atk.", + desc: "Nearly always moves first. The user uses the move the target chose for use this turn against it, if possible, with its power multiplied by 1.5. The move must be a damaging move usable by Me First. The user also activates the Endure effect on itself, preventing it from falling below 1 HP through direct attacks this turn. Ignores the target's substitute for the purpose of copying the move. The move will fail entirely if the user did not move first this turn, or if the target switched out. If the target would use a move not usable by Me First, the Endure effect still occurs. This move has an increasing chance of failing when used in succession.", + name: "Perfect Mimic", + gen: 9, + pp: 10, + priority: 4, + flags: {}, + volatileStatus: 'perfectmimic', + onTryMove() { + this.attrLastMove('[anim] Endure'); + }, + onDisableMove(pokemon) { + if (pokemon.lastMove?.id === 'perfectmimic') pokemon.disableMove('perfectmimic'); + }, + condition: { + duration: 1, + onStart(target) { + this.add('-singleturn', target, 'move: Endure'); + }, + onDamagePriority: -10, + onDamage(damage, target, source, effect) { + if (effect?.effectType === 'Move') { + this.effectState.move = effect.id; + if (damage >= target.hp) { + this.add('-activate', target, 'move: Endure'); + return target.hp - 1; + } + } + }, + onSourceAfterMove(target, source) { + if (target === this.effectState.target || source !== this.effectState.target) return; + if (!target.hp || !this.effectState.move) return; + const move = this.dex.getActiveMove(this.effectState.move); + if (move.isZ || move.isMax || move.category === 'Status') return; + this.add('-message', source.name + ' tried to copy the move!'); + this.add('-anim', source, "Me First", target); + move.overrideOffensiveStat = 'atk'; + this.actions.useMove(move, source, {target}); + delete this.effectState.move; + }, + onBasePowerPriority: 12, + onBasePower() { + return this.chainModify(1.5); + }, + }, + secondary: null, + target: "self", + type: "Normal", + }, + + // XpRienzo + scorchingtruth: { + accuracy: 100, + basePower: 80, + category: "Special", + desc: "Damage is doubled if this move is not very effective against the target.", + shortDesc: "Deals 2x damage with resisted hits.", + name: "Scorching Truth", + gen: 9, + pp: 15, + priority: 0, + flags: {protect: 1, mirror: 1}, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, 'Focus Energy', source); + this.add('-anim', source, 'Fusion Flare', target); + }, + onBasePower(basePower, source, target, move) { + if (target.runEffectiveness(move) < 0) { + this.debug(`Scorching truth resisted buff`); + return this.chainModify(2); + } + }, + secondary: null, + target: "normal", + type: "Fire", + }, + + // xy01 + poisonouswind: { + accuracy: true, + basePower: 0, + category: "Status", + name: "Poisonous Wind", + shortDesc: "Badly poisons the foe and forces them out.", + desc: "Badly poisons the target. If the infliction of status is successful, the target is forced to switch out and be replaced with a random unfainted ally. Fails if the target is the last unfainted Pokemon in its party, or if the target used Ingrain previously or has the Suction Cups Ability. This move will fail entirely if the target has a non-volatile status condition.", + pp: 10, + priority: -6, + flags: {reflectable: 1, mirror: 1, bypasssub: 1, allyanim: 1, metronome: 1, noassist: 1, failcopycat: 1, wind: 1}, + forceSwitch: true, + status: 'tox', + secondary: null, + target: "normal", + type: "Poison", + }, + + // yeet dab xd + topkek: { + accuracy: 100, + basePower: 70, + category: "Physical", + shortDesc: "Gives foe Miracle Seed. Cycles Treasure Bag.", + desc: "If the target is holding an item that can be removed from it, it is replaced with a Mircle Seed. Cycles Treasure Bag.", + name: "top kek", + pp: 15, + priority: 0, + flags: {contact: 1, protect: 1, mirror: 1}, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, "Thief", target); + this.add('-anim', source, "Trick", target); + this.add('-anim', source, "Nasty Plot", source); + }, + onAfterHit(target, source, move) { + if (source.hp) { + if (!target.hasItem('Miracle Seed')) { + const item = target.takeItem(); + if (item) { + this.add('-enditem', target, item.name, '[from] move: top kek', '[of] ' + source); + target.setItem('Miracle Seed', source, move); + } + } + } + }, + secondary: null, + target: "normal", + type: "Dark", + }, + + // Yellow Paint + whiteout: { + accuracy: 85, + basePower: 70, + category: "Special", + shortDesc: "Sets up Snow. Target's ability becomes Normalize.", + desc: "If this move is successful, the current weather becomes snow, boosting the Defense of Ice-types by 1.5x for 5 turns, and the target's ability is replaced with Normalize.", + name: "Whiteout", + pp: 5, + priority: 0, + flags: {protect: 1, mirror: 1, bullet: 1}, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, "Weather Ball", target); + this.add('-anim', source, "Snowscape", source); + }, + onHit(target, source) { + this.field.setWeather('snow'); + if (target.setAbility('normalize')) { + this.add('-ability', target, 'Normalize', '[from] move: Whiteout'); + } + this.add(`c:|${getName((source.illusion || source).name)}|A blank canvas.`); + }, + secondary: null, + target: "normal", + type: "Ice", + }, + + // yuki + tagyoureit: { + accuracy: true, + basePower: 0, + category: "Status", + shortDesc: "Switch out; replacement: Focus Energy, +1 Spe.", + desc: "The user switches out even if it is trapped and is replaced immediately by a selected party member. The replacement's Speed is boosted by 1 stage, and its critical hit rate is boosted by 2 stages. The user does not switch out if there are no unfainted party members.", + name: "Tag, You're It!", + pp: 5, + priority: 0, + flags: {}, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, "Baton Pass", target); + }, + slotCondition: 'tagyoureit', + condition: { + onSwap(target) { + if (target && !target.fainted) { + this.add('-anim', target, "Baton Pass", target); + target.addVolatile('focusenergy'); + this.boost({spe: 1}, target, this.effectState.source, this.dex.getActiveMove('tagyoureit')); + target.side.removeSlotCondition(target, 'tagyoureit'); + } + }, + }, + selfSwitch: true, + secondary: null, + target: "self", + type: "Dark", + }, + + // YveltalNL + highground: { + accuracy: 100, + basePower: 90, + category: "Special", + shortDesc: "If the user is taller than the target, +1 SpA.", + desc: "If the user's height as listed on its Pokedex data is greater than the target's height, the user's Special Attack is boosted by 1 stage.", + name: "High Ground", + pp: 10, + priority: 0, + flags: {protect: 1, mirror: 1}, + secondary: { + chance: 100, + onHit(target, source, move) { + if (this.dex.species.get(source.species).heightm > this.dex.species.get(target.species).heightm) { + this.boost({spa: 1}, source); + } + }, + }, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, "Dragon Ascent", target); + this.add('-anim', source, "Scorching Sands", target); + }, + target: "normal", + type: "Ground", + }, + + // Zalm + dudurafish: { + accuracy: true, + basePower: 0, + category: "Status", + shortDesc: "Heals 25% HP and sets Aqua Ring.", + desc: "The user recovers 1/4 of its maximum HP and gains the Aqua Ring effect, healing it for 1/16th of its maximum HP at the end of each turn. The healing effect will still occur if the user already has Aqua Ring active.", + name: "Dud ur a fish", + pp: 5, + priority: 0, + flags: {heal: 1, snatch: 1}, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', target, "Recover", source); + this.add('-anim', target, "Aqua Ring", source); + }, + onHit(pokemon) { + let didSomething: boolean; + if (pokemon.hasType("Water")) { + didSomething = !!this.heal(this.modify(pokemon.baseMaxhp, 1, 2)); + didSomething = pokemon.cureStatus() || didSomething; + } else { + didSomething = !!this.heal(this.modify(pokemon.baseMaxhp, 1, 4)); + } + didSomething = pokemon.addVolatile('aquaring') || didSomething; + return didSomething; + }, + secondary: null, + target: "self", + type: "Water", + }, + + // za + shitpost: { + accuracy: 100, + basePower: 0, + category: "Status", + name: "Shitpost", + shortDesc: "Confuses and paralyzes the target.", + pp: 20, + priority: 0, + flags: {protect: 1, reflectable: 1}, + onTryMove(pokemon, target, move) { + this.attrLastMove('[still]'); + if (this.randomChance(1, 256)) { + this.add('-fail', pokemon); + this.add('-message', '(In Gen 1, moves with 100% accuracy have a 1/256 chance to miss.)'); + return false; + } + }, + onPrepareHit(target, source) { + this.add('-anim', source, "Hex", target); + }, + onHit(target, source, move) { + if (!target.volatiles['confusion']) { + target.addVolatile('confusion', source, move); + } + target.trySetStatus('par', source, move); + }, + secondary: null, + target: "normal", + type: "Normal", + }, + + // Zarel + tsignore: { + accuracy: 100, + basePower: 100, + category: "Special", + shortDesc: "Bypasses everything. Uses Higher Atk.", + desc: "This move will bypass any negative effect on the field or the target that would impede its ability to deal damage, including type-based immunities. This move is physical if the user's Attack is higher than its Special Attack.", + name: "@ts-ignore", + gen: 9, + pp: 5, + priority: 0, + flags: {}, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, "Conversion", source); + this.add('-anim', source, "Techno Blast", target); + }, + onModifyMove(move, pokemon, target) { + if (pokemon.getStat('atk', false, true) > pokemon.getStat('spa', false, true)) { + move.category = 'Physical'; + } + }, + onModifyType(move, pokemon) { + if (pokemon.species.baseSpecies === 'Meloetta' && pokemon.terastallized) { + move.type = 'Stellar'; + } + }, + ignoreAbility: true, + ignoreImmunity: true, + ignoreDefensive: true, + ignoreNegativeOffensive: true, + breaksProtect: true, + ignoreAccuracy: true, + secondary: null, + target: "normal", + type: "Normal", + }, + + // zee + solarsummon: { + accuracy: 100, + basePower: 0, + category: "Status", + shortDesc: "Sets up Sunny Day and creates a Substitute.", + desc: "Sets sun, powering up Fire-type moves and weakening Water-type moves for 5 turns. The user takes 1/4 of its maximum HP, rounded down, and puts it into a substitute to take its place in battle. If one part of this move is already in effect, the other part will still be attempted.", + name: "Solar Summon", + gen: 9, + pp: 5, + priority: 0, + flags: {}, + onPrepareHit() { + this.attrLastMove('[anim] Sunny Day'); + }, + onHit(pokemon) { + let success = false; + if (this.field.setWeather('sunnyday')) success = true; + if (!pokemon.volatiles['substitute']) { + if (pokemon.hp <= pokemon.maxhp / 4 || pokemon.maxhp === 1) { // Shedinja clause + this.add('-fail', pokemon, 'move: Substitute', '[weak]'); + } else { + pokemon.addVolatile('substitute'); + this.directDamage(pokemon.maxhp / 4); + success = true; + } + } + return success; + }, + secondary: null, + target: "self", + type: "Fire", + }, + + // zoro + darkestnight: { + accuracy: 100, + basePower: 95, + category: "Physical", + shortDesc: "Literally just Foul Play.", + desc: "Damage is calculated using the target's Attack stat, including stat stage changes. The user's Ability, item, and burn are used as normal.", + name: "Darkest Night", + pp: 15, + priority: 0, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, + overrideOffensivePokemon: 'target', + secondary: null, + target: "normal", + type: "Dark", + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, "Foul Play", target); + }, + }, + + // Modified moves + bleakwindstorm: { + inherit: true, + onModifyMove(move, pokemon, target) { + if (target && ['raindance', 'primordialsea', 'stormsurge'].includes(target.effectiveWeather())) { + move.accuracy = true; + } + }, + }, + dig: { + inherit: true, + condition: { + duration: 2, + onImmunity(type, pokemon) { + if (type === 'sandstorm' || type === 'deserteddunes' || type === 'hail') return false; + }, + onInvulnerability(target, source, move) { + if (['earthquake', 'magnitude'].includes(move.id)) { + return; + } + return false; + }, + onSourceModifyDamage(damage, source, target, move) { + if (move.id === 'earthquake' || move.id === 'magnitude') { + return this.chainModify(2); + } + }, + }, + }, + dive: { + inherit: true, + condition: { + duration: 2, + onImmunity(type, pokemon) { + if (type === 'sandstorm' || type === 'deserteddunes' || type === 'hail') return false; + }, + onInvulnerability(target, source, move) { + if (['surf', 'whirlpool'].includes(move.id)) { + return; + } + return false; + }, + onSourceModifyDamage(damage, source, target, move) { + if (move.id === 'surf' || move.id === 'whirlpool') { + return this.chainModify(2); + } + }, + }, + }, + dreameater: { + inherit: true, + onTryImmunity(target) { + return target.status === 'slp' || target.hasAbility(['comatose', 'mensiscage']); + }, + }, + electroshot: { + 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 (['raindance', 'primordialsea', 'stormsurge'].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; + }, + }, + hex: { + inherit: true, + basePowerCallback(pokemon, target, move) { + if (target.status || target.hasAbility(['comatose', 'mensiscage'])) { + this.debug('BP doubled from status condition'); + return move.basePower * 2; + } + return move.basePower; + }, + }, + hurricane: { + inherit: true, + onModifyMove(move, pokemon, target) { + switch (target?.effectiveWeather()) { + case 'raindance': + case 'primordialsea': + case 'stormsurge': + move.accuracy = true; + break; + case 'sunnyday': + case 'desolateland': + move.accuracy = 50; + break; + } + }, + }, + infernalparade: { + inherit: true, + basePowerCallback(pokemon, target, move) { + if (target.status || target.hasAbility(['comatose', 'mensiscage'])) return move.basePower * 2; + return move.basePower; + }, + }, + ingrain: { + inherit: true, + condition: { + onStart(pokemon) { + this.add('-start', pokemon, 'move: Ingrain'); + }, + onResidualOrder: 7, + onResidual(pokemon) { + this.heal(pokemon.baseMaxhp / 16); + }, + onTrapPokemon(pokemon) { + pokemon.tryTrap(); + }, + // groundedness implemented in battle.engine.js:BattlePokemon#isGrounded + onDragOut(pokemon, source, move) { + if (source && this.queue.willMove(source)?.moveid === 'protectoroftheskies') return; + this.add('-activate', pokemon, 'move: Ingrain'); + return null; + }, + }, + }, + mistyterrain: { + inherit: true, + condition: { + 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; + }, + onTryHitPriority: 4, + onTryHit(target, source, effect) { + if (effect && effect.name === "Puffy Spiky Destruction") { + this.add('-activate', target, 'move: Misty Terrain'); + return null; + } + }, + 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); + } + }, + 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'); + }, + }, + }, + moonlight: { + inherit: true, + onHit(pokemon) { + let factor = 0.5; + switch (pokemon.effectiveWeather()) { + case 'sunnyday': + case 'desolateland': + factor = 0.667; + break; + case 'raindance': + case 'primordialsea': + case 'stormsurge': + case 'sandstorm': + case 'deserteddunes': + case 'hail': + case 'snow': + 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; + }, + }, + morningsun: { + inherit: true, + onHit(pokemon) { + let factor = 0.5; + switch (pokemon.effectiveWeather()) { + case 'sunnyday': + case 'desolateland': + factor = 0.667; + break; + case 'raindance': + case 'primordialsea': + case 'stormsurge': + case 'sandstorm': + case 'deserteddunes': + case 'hail': + case 'snow': + 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; + }, + }, + nightmare: { + inherit: true, + condition: { + noCopy: true, + onStart(pokemon) { + if (pokemon.status !== 'slp' && !pokemon.hasAbility(['comatose', 'mensiscage'])) { + return false; + } + this.add('-start', pokemon, 'Nightmare'); + }, + onResidualOrder: 11, + onResidual(pokemon) { + this.damage(pokemon.baseMaxhp / 4); + }, + }, + }, + psychicterrain: { + inherit: true, + condition: { + duration: 5, + durationCallback(source, effect) { + if (source?.hasItem('terrainextender')) { + return 8; + } + return 5; + }, + onTryHitPriority: 4, + onTryHit(target, source, effect) { + if (effect && (effect.priority <= 0.1 || effect.target === 'self') && effect.name !== "Puffy Spiky Destruction") { + return; + } + if (target.isSemiInvulnerable() || target.isAlly(source)) return; + 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."); + } + return; + } + this.add('-activate', target, 'move: Psychic Terrain'); + return null; + }, + onBasePowerPriority: 6, + onBasePower(basePower, attacker, defender, move) { + if (move.type === 'Psychic' && attacker.isGrounded() && !attacker.isSemiInvulnerable()) { + this.debug('psychic terrain boost'); + return this.chainModify([5325, 4096]); + } + }, + onFieldStart(field, source, effect) { + if (effect?.effectType === 'Ability') { + this.add('-fieldstart', 'move: Psychic Terrain', '[from] ability: ' + effect.name, '[of] ' + source); + } else { + this.add('-fieldstart', 'move: Psychic Terrain'); + } + }, + onFieldResidualOrder: 27, + onFieldResidualSubOrder: 7, + onFieldEnd() { + this.add('-fieldend', 'move: Psychic Terrain'); + }, + }, + }, + rest: { + inherit: true, + onTry(source) { + if (source.status === 'slp' || source.hasAbility(['comatose', 'mensiscage'])) return false; + + if (source.hp === source.maxhp) { + this.add('-fail', source, 'heal'); + return null; + } + if (source.hasAbility(['insomnia', 'vitalspirit'])) { + this.add('-fail', source, '[from] ability: ' + source.getAbility().name, '[of] ' + source); + return null; + } + }, + }, + sandsearstorm: { + inherit: true, + onModifyMove(move, pokemon, target) { + if (target && ['raindance', 'primordialsea', 'stormsurge'].includes(target.effectiveWeather())) { + move.accuracy = true; + } + }, + }, + shoreup: { + inherit: true, + onHit(pokemon) { + let factor = 0.5; + if (this.field.isWeather(['sandstorm', 'deserteddunes'])) { + factor = 0.667; + } + const success = !!this.heal(this.modify(pokemon.maxhp, factor)); + if (!success) { + this.add('-fail', pokemon, 'heal'); + return this.NOT_FAIL; + } + return success; + }, + }, + sleeptalk: { + inherit: true, + onTry(source) { + return source.status === 'slp' || source.hasAbility(['comatose', 'mensiscage']); + }, + }, + snore: { + inherit: true, + onTry(source) { + return source.status === 'slp' || source.hasAbility(['comatose', 'mensiscage']); + }, + }, + solarbeam: { + inherit: true, + onBasePower(basePower, pokemon, target) { + const weakWeathers = ['raindance', 'primordialsea', 'stormsurge', 'sandstorm', 'deserteddunes', 'hail', 'snow']; + if (weakWeathers.includes(pokemon.effectiveWeather())) { + this.debug('weakened by weather'); + return this.chainModify(0.5); + } + }, + }, + solarblade: { + inherit: true, + onBasePower(basePower, pokemon, target) { + const weakWeathers = ['raindance', 'primordialsea', 'stormsurge', 'sandstorm', 'deserteddunes', 'hail', 'snow']; + if (weakWeathers.includes(pokemon.effectiveWeather())) { + this.debug('weakened by weather'); + return this.chainModify(0.5); + } + }, + }, + stickyweb: { + inherit: true, + condition: { + onSideStart(side) { + this.add('-sidestart', side, 'move: Sticky Web'); + }, + onEntryHazard(pokemon) { + if (!pokemon.isGrounded() || pokemon.hasItem('heavydutyboots') || pokemon.hasAbility('eternalgenerator')) return; + this.add('-activate', pokemon, 'move: Sticky Web'); + this.boost({spe: -1}, pokemon, pokemon.side.foe.active[0], this.dex.getActiveMove('stickyweb')); + }, + }, + }, + synthesis: { + inherit: true, + onHit(pokemon) { + let factor = 0.5; + switch (pokemon.effectiveWeather()) { + case 'sunnyday': + case 'desolateland': + factor = 0.667; + break; + case 'raindance': + case 'primordialsea': + case 'stormsurge': + case 'sandstorm': + case 'deserteddunes': + case 'hail': + case 'snow': + 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; + }, + }, + thunder: { + inherit: true, + onModifyMove(move, pokemon, target) { + switch (target?.effectiveWeather()) { + case 'raindance': + case 'primordialsea': + case 'stormsurge': + move.accuracy = true; + break; + case 'sunnyday': + case 'desolateland': + move.accuracy = 50; + break; + } + }, + }, + wakeupslap: { + inherit: true, + basePowerCallback(pokemon, target, move) { + if (target.status === 'slp' || target.hasAbility(['comatose', 'mensiscage'])) { + this.debug('BP doubled on sleeping target'); + return move.basePower * 2; + } + return move.basePower; + }, + }, + weatherball: { + inherit: true, + onModifyType(move, pokemon) { + switch (pokemon.effectiveWeather()) { + case 'sunnyday': + case 'desolateland': + move.type = 'Fire'; + break; + case 'raindance': + case 'primordialsea': + case 'stormsurge': + move.type = 'Water'; + break; + case 'sandstorm': + case 'deserteddunes': + move.type = 'Rock'; + break; + case 'hail': + case 'snow': + move.type = 'Ice'; + break; + } + }, + onModifyMove(move, pokemon) { + switch (pokemon.effectiveWeather()) { + case 'sunnyday': + case 'desolateland': + case 'raindance': + case 'primordialsea': + case 'stormsurge': + case 'sandstorm': + case 'deserteddunes': + case 'hail': + case 'snow': + move.basePower *= 2; + break; + } + this.debug('BP: ' + move.basePower); + }, + }, + wildboltstorm: { + inherit: true, + onModifyMove(move, pokemon, target) { + if (target && ['raindance', 'primordialsea', 'stormsurge'].includes(target.effectiveWeather())) { + move.accuracy = true; + } + }, + }, + gravity: { + inherit: true, + condition: { + duration: 5, + durationCallback(source, effect) { + if (source?.hasAbility('persistent')) { + this.add('-activate', source, 'ability: Persistent', '[move] Gravity'); + return 7; + } + return 5; + }, + onFieldStart(target, source) { + if (source?.hasAbility('persistent')) { + this.add('-fieldstart', 'move: Gravity', '[persistent]'); + } else { + this.add('-fieldstart', 'move: Gravity'); + } + for (const pokemon of this.getAllActive()) { + let applies = false; + if (pokemon.removeVolatile('bounce') || pokemon.removeVolatile('fly')) { + applies = true; + this.queue.cancelMove(pokemon); + pokemon.removeVolatile('twoturnmove'); + } + if (pokemon.volatiles['skydrop']) { + applies = true; + this.queue.cancelMove(pokemon); + + if (pokemon.volatiles['skydrop'].source) { + this.add('-end', pokemon.volatiles['twoturnmove'].source, 'Sky Drop', '[interrupt]'); + } + pokemon.removeVolatile('skydrop'); + pokemon.removeVolatile('twoturnmove'); + } + if (pokemon.volatiles['magnetrise']) { + applies = true; + delete pokemon.volatiles['magnetrise']; + } + if (pokemon.volatiles['riseabove']) { + applies = true; + delete pokemon.volatiles['riseabove']; + } + if (pokemon.volatiles['telekinesis']) { + applies = true; + delete pokemon.volatiles['telekinesis']; + } + if (applies) this.add('-activate', pokemon, 'move: Gravity'); + } + }, + onModifyAccuracy(accuracy) { + if (typeof accuracy !== 'number') return; + return this.chainModify([6840, 4096]); + }, + onDisableMove(pokemon) { + for (const moveSlot of pokemon.moveSlots) { + if (this.dex.moves.get(moveSlot.id).flags['gravity']) { + pokemon.disableMove(moveSlot.id); + } + } + }, + // groundedness implemented in battle.engine.js:BattlePokemon#isGrounded + onBeforeMovePriority: 6, + onBeforeMove(pokemon, target, move) { + if (move.flags['gravity'] && !move.isZ) { + this.add('cant', pokemon, 'move: Gravity', move); + return false; + } + }, + onModifyMove(move, pokemon, target) { + if (move.flags['gravity'] && !move.isZ) { + this.add('cant', pokemon, 'move: Gravity', move); + return false; + } + }, + onFieldResidualOrder: 27, + onFieldResidualSubOrder: 2, + onFieldEnd() { + this.add('-fieldend', 'move: Gravity'); + }, + }, + }, + magnetrise: { + inherit: true, + condition: { + duration: 5, + durationCallback(target, source, effect) { + if (effect?.name === 'Antidote') return 3; + return 5; + }, + onStart(target) { + this.add('-start', target, 'Magnet Rise'); + }, + onImmunity(type) { + if (type === 'Ground') return false; + }, + onResidualOrder: 18, + onEnd(target) { + this.add('-end', target, 'Magnet Rise'); + }, + }, + }, + + // Try playing Staff Bros with dynamax clause and see what happens + supermetronome: { + accuracy: true, + basePower: 0, + category: "Status", + desc: "Uses 2-5 random moves. Does not include 1-Base Power Z-Moves, Super Metronome, Metronome, or 10-Base Power Max moves.", + shortDesc: "Uses 2-5 random moves.", + name: "Super Metronome", + isNonstandard: "Custom", + pp: 100, + noPPBoosts: true, + priority: 0, + flags: {}, + onTryMove(pokemon) { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, "Metronome", source); + }, + onHit(target, source, effect) { + const moves = []; + for (const move of this.dex.moves.all()) { + if (move.realMove || move.id.includes('metronome')) continue; + // Calling 1 BP move is somewhat lame and disappointing. However, + // signature Z moves are fine, as they actually have a base power. + if (move.isZ && move.basePower === 1) continue; + if (move.gen > this.gen) continue; + if (move.isMax) continue; + moves.push(move.name); + } + let randomMove: string; + if (moves.length) { + randomMove = this.sample(moves); + } else { + return false; + } + this.actions.useMove(randomMove, target); + }, + multihit: [2, 5], + secondary: null, + target: "self", + type: "???", + }, +}; diff --git a/data/mods/gen9ssb/pokedex.ts b/data/mods/gen9ssb/pokedex.ts new file mode 100644 index 000000000000..622680a33c07 --- /dev/null +++ b/data/mods/gen9ssb/pokedex.ts @@ -0,0 +1,1194 @@ +export const Pokedex: import('../../../sim/dex-species').ModdedSpeciesDataTable = { + /* + // Example + id: { + inherit: true, // Always use this, makes the pokemon inherit its default values from the parent mod (gen7) + baseStats: {hp: 100, atk: 100, def: 100, spa: 100, spd: 100, spe: 100}, // the base stats for the pokemon + }, + */ + // aegii + scizor: { + inherit: true, + abilities: {0: "Unburden"}, + }, + + // Aelita + melmetal: { + inherit: true, + abilities: {0: "Fortified Metal"}, + }, + + // Aethernum + giratinaorigin: { + inherit: true, + abilities: {0: "The Eminence in the Shadow"}, + }, + + // Akir + slowbro: { + inherit: true, + abilities: {0: "Take it Slow"}, + }, + + // Alex + sprigatito: { + inherit: true, + baseStats: {hp: 90, atk: 61, def: 84, spa: 45, spd: 85, spe: 65}, + abilities: {0: "Pawprints"}, + }, + + // Alexander489 + charizard: { + inherit: true, + abilities: {0: "Confirmed Town"}, + }, + + // Apple + applin: { + inherit: true, + baseStats: {hp: 106, atk: 80, def: 110, spa: 120, spd: 80, spe: 44}, + abilities: {0: "Orchard's Gift"}, + }, + + // Appletun a la Mode + appletun: { + inherit: true, + abilities: {0: "Served Cold"}, + }, + + // aQrator + totodile: { + inherit: true, + baseStats: {hp: 85, atk: 105, def: 100, spa: 79, spd: 83, spe: 78}, + abilities: {0: "Neverending fHunt"}, + }, + + // A Quag To The Past + quagsire: { + inherit: true, + baseStats: {hp: 130, atk: 100, def: 75, spa: 20, spd: 60, spe: 45}, + abilities: {0: "Quag of Ruin"}, + }, + clodsire: { + inherit: true, + baseStats: {hp: 130, atk: 60, def: 75, spa: 40, spd: 100, spe: 20}, + abilities: {0: "Clod of Ruin"}, + }, + + // Archas + lilligant: { + inherit: true, + abilities: {0: "Saintly Bullet"}, + }, + + // Arcueid + deoxysattack: { + inherit: true, + abilities: {0: "Marble Phantasm"}, + }, + deoxysdefense: { + inherit: true, + abilities: {0: "Marble Phantasm"}, + }, + + // Arsenal + rabsca: { + inherit: true, + baseStats: {hp: 100, atk: 50, def: 100, spa: 115, spd: 100, spe: 45}, + abilities: {0: "Absorb Phys"}, + }, + + // Artemis + genesect: { + inherit: true, + abilities: {0: "Supervised Learning"}, + }, + + // Arya + trapinch: { + inherit: true, + types: ["Ground", "Dragon"], + baseStats: {hp: 80, atk: 100, def: 90, spa: 120, spd: 100, spe: 130}, + abilities: {0: "Punk Rock"}, + }, + flygon: { + inherit: true, + abilities: {0: "Tinted Lens"}, + }, + + // Audiino + audino: { + inherit: true, + abilities: {0: "Mitosis"}, + }, + + // ausma + hatterene: { + inherit: true, + abilities: {0: "Cascade"}, + }, + + // AuzBat + swoobat: { + inherit: true, + abilities: {0: "Magic Guard"}, + }, + + // avarice + sinistchamasterpiece: { + inherit: true, + abilities: {0: "Serene Grace"}, + }, + + // Beowulf + beedrill: { + inherit: true, + abilities: {0: "Intrepid Sword"}, + }, + + // berry + regirock: { + inherit: true, + abilities: {0: "Sturdy"}, + }, + + // Bert122 + sableye: { + inherit: true, + abilities: {0: "Prankster"}, + }, + sableyemega: { + inherit: true, + abilities: {0: "Pestering Assault"}, + }, + + // Billo + cosmog: { + inherit: true, + abilities: {0: "Wonder Guard"}, + }, + solgaleo: { + inherit: true, + abilities: {0: "Magic Guard"}, + }, + + // blazeofvictory + sylveon: { + inherit: true, + abilities: {0: "Prismatic Lens"}, + }, + + // Blitz + chiyu: { + inherit: true, + types: ["Water", "Dark"], + abilities: {0: "Blitz of Ruin"}, + }, + + // Breadstycks + dachsbun: { + inherit: true, + abilities: {0: "Painful Exit"}, + }, + + // Cake + dunsparce: { + inherit: true, + abilities: {0: "Scrappy"}, + }, + + // chaos + ironjugulis: { + inherit: true, + abilities: {0: "Transistor"}, + }, + + // Chloe + tsareena: { + inherit: true, + abilities: {0: "Acetosa"}, + }, + + // Chris + ragingbolt: { + inherit: true, + abilities: {0: "Astrothunder"}, + }, + + // ciran + rapidash: { + inherit: true, + abilities: {0: "Defiant"}, + }, + + // Clefable + clefable: { + inherit: true, + abilities: {0: "That's Hacked"}, + }, + + // Clementine + avalugg: { + inherit: true, + abilities: {0: "Melting Point"}, + }, + avalugghisui: { + inherit: true, + types: ["Ice"], + baseStats: {hp: 95, atk: 46, def: 44, spa: 184, spd: 117, spe: 95}, + abilities: {0: "Melting Point"}, + }, + + // clerica + mimikyu: { + inherit: true, + abilities: {0: "Masquerade"}, + }, + mimikyubusted: { + inherit: true, + abilities: {0: "Masquerade"}, + }, + + // Clouds + corvisquire: { + inherit: true, + baseStats: {hp: 98, atk: 87, def: 105, spa: 53, spd: 85, spe: 67}, + abilities: {0: "Jet Stream"}, + }, + + // Coolcodename + victini: { + inherit: true, + abilities: {0: "Firewall"}, + }, + + // Corthius + thwackey: { + inherit: true, + abilities: {0: "Grassy Emperor"}, + }, + + // Dawn of Artemis + necrozma: { + inherit: true, + abilities: {0: "Form Change"}, + }, + necrozmaultra: { + inherit: true, + abilities: {0: "Form Change"}, + }, + + // DaWoblefet + wobbuffet: { + inherit: true, + abilities: {0: "Shadow Artifice"}, + }, + + // deftinwolf + yveltal: { + inherit: true, + abilities: {0: "Sharpness"}, + }, + + // dhelmise + slowkinggalar: { + inherit: true, + abilities: {0: "Coalescence"}, + }, + + // DianaNicole + abomasnow: { + inherit: true, + abilities: {0: "Snow Warning"}, + }, + abomasnowmega: { + inherit: true, + abilities: {0: "Flash Fire"}, + }, + + // EasyOnTheHills + snorlax: { + inherit: true, + abilities: {0: "Immunity"}, + }, + + // Elliot + sinistea: { + inherit: true, + baseStats: {hp: 69, atk: 65, def: 114, spa: 134, spd: 65, spe: 70}, + abilities: {0: "Natural Cure"}, + }, + + // Elly + thundurus: { + inherit: true, + abilities: {0: "Storm Surge"}, + }, + + // Emboar02 + emboar: { + inherit: true, + abilities: {0: "Hogwash"}, + }, + + // Fame + jumpluff: { + inherit: true, + abilities: {0: "Social Jumpluff Warrior"}, + }, + + // Felucia + vespiquen: { + inherit: true, + abilities: {0: "Mountaineer"}, + }, + + // Froggeh + toxicroak: { + inherit: true, + abilities: {0: "Super Luck"}, + }, + + // Frostyicelad + qwilfishhisui: { + inherit: true, + abilities: {0: "Almost Frosty"}, + }, + + // Frozoid + gible: { + inherit: true, + baseStats: {hp: 65, atk: 110, def: 55, spa: 50, spd: 55, spe: 108}, + abilities: {0: "Snowballer"}, + }, + + // Ganjafin + wiglett: { + inherit: true, + baseStats: {hp: 80, atk: 60, def: 80, spa: 60, spd: 80, spe: 100}, + abilities: {0: "Gambling Addiction"}, + }, + + // Haste Inky + falinks: { + inherit: true, + abilities: {0: "Simple"}, + }, + + // havi + gastly: { + inherit: true, + baseStats: {hp: 60, atk: 65, def: 60, spa: 130, spd: 75, spe: 110}, + abilities: {0: "Mensis Cage"}, + }, + + // Hecate + mewtwo: { + inherit: true, + abilities: {0: "Hacking"}, + }, + mewtwomegax: { + inherit: true, + abilities: {0: "Hacking"}, + }, + + // HiZo + zoroarkhisui: { + inherit: true, + abilities: {0: "Justified"}, + }, + + // HoeenHero + ludicolo: { + inherit: true, + abilities: {0: "Misspelled"}, + }, + + // hsy + ursaluna: { + inherit: true, + abilities: {0: "Hustle"}, + }, + + // Hydrostatics + pichuspikyeared: { + inherit: true, + baseStats: {hp: 35, atk: 55, def: 40, spa: 50, spd: 50, spe: 90}, + abilities: {0: 'Hydrostatic Positivity'}, + types: ["Electric", "Water"], + }, + + // Imperial + kyurem: { + inherit: true, + abilities: {0: "Frozen Fortuity"}, + }, + kyuremblack: { + inherit: true, + abilities: {0: "Frozen Fortuity"}, + }, + kyuremwhite: { + inherit: true, + abilities: {0: "Frozen Fortuity"}, + }, + + // in the hills + gligar: { + inherit: true, + abilities: {0: "Illterit"}, + }, + + // ironwater + jirachi: { + inherit: true, + abilities: {0: "Good as Gold"}, + }, + + // Irpachuza + mrmime: { + inherit: true, + abilities: {0: "Mime knows best"}, + }, + + // Isaiah + medicham: { + inherit: true, + abilities: {0: "Psychic Surge"}, + }, + + // J0rdy004 + vulpixalola: { + inherit: true, + baseStats: {hp: 73, atk: 67, def: 75, spa: 81, spd: 100, spe: 109}, + abilities: {0: "Fortifying Frost"}, + }, + + // Kalalokki + flamigo: { + inherit: true, + abilities: {0: "Scrappy"}, + }, + + // Karthik + staraptor: { + inherit: true, + abilities: {0: "Tough Claws"}, + }, + + // ken + jigglypuff: { + inherit: true, + baseStats: {hp: 115, atk: 65, def: 99, spa: 65, spd: 115, spe: 111}, + abilities: {0: "Aroma Veil"}, + }, + + // kenn + larvitar: { + inherit: true, + baseStats: {hp: 100, atk: 84, def: 70, spa: 65, spd: 70, spe: 61}, + abilities: {0: "Deserted Dunes"}, + }, + + // Kennedy + cinderace: { + inherit: true, + abilities: {0: "Anfield"}, + otherFormes: ["Cinderace-Gmax"], + }, + cinderacegmax: { + inherit: true, + types: ["Fire", "Ice"], + baseStats: {hp: 84, atk: 119, def: 78, spa: 77, spd: 81, spe: 105}, + abilities: {0: "You'll Never Walk Alone"}, + weightkg: 103, + }, + + // keys + rayquaza: { + inherit: true, + abilities: {0: "Defeatist"}, + }, + rayquazamega: { + inherit: true, + abilities: {0: "Defeatist"}, + requiredMove: "Protector of the Skies", + }, + + // kingbaruk + wigglytuff: { + inherit: true, + abilities: {0: "Peer Pressure"}, + }, + + // Kiwi + minccino: { + inherit: true, + abilities: {0: "Sure Hit Sorcery"}, + }, + + // Klmondo + cloyster: { + inherit: true, + abilities: {0: "Super Skilled"}, + }, + + // kolohe + pikachu: { + inherit: true, + baseStats: {hp: 45, atk: 80, def: 50, spa: 75, spd: 60, spe: 120}, + abilities: {0: "Soul Surfer"}, + }, + + // Kry + mawile: { + inherit: true, + abilities: {0: "Flash Freeze"}, + }, + + // Lasen + zekrom: { + inherit: true, + abilities: {0: "Idealized World"}, + }, + + // Lets go shuckles + shuckle: { + inherit: true, + abilities: {0: "Persistent"}, + }, + + // Lily + togedemaru: { + inherit: true, + abilities: {0: "Unaware"}, + }, + + // Loethalion + ralts: { + inherit: true, + abilities: {0: "Psychic Surge"}, + }, + + // Lumari + ponytagalar: { + inherit: true, + baseStats: {hp: 65, atk: 100, def: 70, spa: 80, spd: 80, spe: 105}, + abilities: {0: "Pyrotechnic"}, + }, + + // Lunell + vaporeon: { + inherit: true, + abilities: {0: "Low Tide, High Tide"}, + }, + + // Lyna + dragonair: { + inherit: true, + baseStats: {hp: 82, atk: 80, def: 80, spa: 80, spd: 80, spe: 80}, + abilities: {0: "Magic Aura"}, + }, + + // Maia + litwick: { + inherit: true, + abilities: {0: "Power Abuse"}, + }, + + // marillvibes + marill: { + inherit: true, + baseStats: {hp: 100, atk: 50, def: 80, spa: 60, spd: 80, spe: 50}, + abilities: {0: "Huge Power"}, + }, + + // maroon + archaludon: { + inherit: true, + abilities: {0: "Built Different"}, + }, + + // Mathy + furret: { + inherit: true, + baseStats: {hp: 105, atk: 96, def: 84, spa: 45, spd: 75, spe: 110}, + abilities: {0: "Dynamic Typing"}, + }, + + // Merritty + torchic: { + inherit: true, + baseStats: {hp: 65, atk: 60, def: 60, spa: 80, spd: 70, spe: 85}, + abilities: {0: "End Round"}, + }, + + // Meteordash + tatsugiri: { + inherit: true, + abilities: {0: "TatsuGlare"}, + }, + + // Mex + dialga: { + inherit: true, + abilities: {0: "Time Dilation"}, + }, + + // Miojo + spheal: { + inherit: true, + baseStats: {hp: 110, atk: 95, def: 90, spa: 80, spd: 90, spe: 65}, + abilities: {0: "The Rolling Spheal"}, + }, + + // Monkey + infernape: { + inherit: true, + abilities: {0: "Harambe Hit"}, + }, + + // MyPearl + latios: { + inherit: true, + abilities: {0: "Eon Call"}, + }, + latias: { + inherit: true, + abilities: {0: "Eon Call"}, + }, + + // Neko + chienpao: { + inherit: true, + abilities: {0: "Weatherproof"}, + }, + + // Ney + banette: { + inherit: true, + abilities: {0: "Insomnia"}, + }, + banettemega: { + inherit: true, + abilities: {0: "Prankster Plus"}, + }, + + // Notater517 + incineroar: { + inherit: true, + abilities: {0: "Vent Crosser"}, + }, + + // nya + delcatty: { + inherit: true, + types: ["Fairy"], + baseStats: {hp: 80, atk: 65, def: 80, spa: 70, spd: 80, spe: 90}, + abilities: {0: "Adorable Grace"}, + }, + + // pants + annihilape: { + inherit: true, + abilities: {0: "Drifting"}, + }, + + // PartMan + chandelure: { + inherit: true, + abilities: {0: "C- Tier Shitposter"}, + }, + + // Pastor Gigas + regigigas: { + inherit: true, + abilities: {0: "God's Mercy"}, + }, + + // Peary + klinklang: { + inherit: true, + abilities: {0: "Levitate"}, + }, + + // phoopes + jynx: { + inherit: true, + baseStats: {hp: 65, atk: 50, def: 35, spa: 115, spd: 115, spe: 95}, + abilities: {0: "I Did It Again"}, + }, + + // Pissog + volcarona: { + inherit: true, + abilities: {0: "Drought"}, + }, + frosmoth: { + inherit: true, + abilities: {0: "Snow Warning"}, + }, + + // pokemonvortex + pokestarsmeargle: { + inherit: true, + baseStats: {hp: 100, atk: 100, def: 100, spa: 100, spd: 100, spe: 100}, + abilities: {0: "Prankster"}, + }, + + // Princess Autumn + altaria: { + inherit: true, + abilities: {0: "Last Hymn"}, + }, + altariamega: { + inherit: true, + abilities: {0: "Last Hymn"}, + }, + + // ptoad + politoed: { + inherit: true, + abilities: {0: "Drizzle"}, + }, + + // Pulse_kS + hydreigon: { + inherit: true, + abilities: {0: "Pulse Luck"}, + }, + + // PYRO + kingambit: { + inherit: true, + abilities: {0: "Hardcore Hustle"}, + }, + + // Quite Quiet + ribombee: { + inherit: true, + abilities: {0: "Fancy Scarf"}, + }, + + // quziel + chromera: { + inherit: true, + abilities: {0: "High Performance Computing"}, + }, + + // R8 + chansey: { + inherit: true, + abilities: {0: "Anti-Pelau"}, + }, + + // Rainshaft + xerneas: { + inherit: true, + abilities: {0: "Rainy's Aura"}, + }, + + // Ransei + audinomega: { + inherit: true, + abilities: {0: "Healer", 1: "Ultra Mystik"}, + }, + + // ReturnToMonkey + oranguru: { + inherit: true, + abilities: {0: "Monke See Monke Do"}, + }, + + // Rissoux + arcaninehisui: { + inherit: true, + abilities: {0: "Hard Headed"}, + }, + + // RSB + growlithe: { + inherit: true, + baseStats: {hp: 70, atk: 86, def: 60, spa: 86, spd: 66, spe: 76}, + abilities: {0: "Hot Pursuit"}, + }, + + // Rumia + duskull: { + inherit: true, + types: ["Ghost", "Dark"], + baseStats: {hp: 50, atk: 55, def: 90, spa: 90, spd: 55, spe: 55}, + abilities: {0: "Youkai of the Dusk"}, + }, + + // Scotteh + suicune: { + inherit: true, + abilities: {0: "Water Absorb"}, + }, + + // SexyMalasada + typhlosion: { + inherit: true, + abilities: {0: "Ancestry Ritual"}, + }, + typhlosionhisui: { + inherit: true, + abilities: {0: "Ancestry Ritual"}, + }, + + // sharp_claw + sneasel: { + inherit: true, + baseStats: {hp: 55, atk: 105, def: 95, spa: 35, spd: 95, spe: 135}, + abilities: {0: "Regenerator"}, + }, + sneaselhisui: { + inherit: true, + baseStats: {hp: 55, atk: 135, def: 75, spa: 35, spd: 85, spe: 135}, + abilities: {0: "Regenerator"}, + }, + + // Siegfried + ampharos: { + inherit: true, + abilities: {0: "Static"}, + }, + ampharosmega: { + inherit: true, + abilities: {0: "Magical Mystery Charge"}, + }, + + // Sificon + hoppip: { + inherit: true, + baseStats: {hp: 75, atk: 55, def: 70, spa: 55, spd: 95, spe: 110}, + abilities: {0: "Perfectly Imperfect"}, + }, + + // skies + chespin: { + inherit: true, + baseStats: {hp: 88, atk: 107, def: 122, spa: 74, spd: 75, spe: 64}, + abilities: {0: "Spikes of Wrath"}, + }, + + // snake + fidgit: { + inherit: true, + abilities: {0: "Persistent"}, + }, + + // Soft Flex + magnezone: { + inherit: true, + abilities: {0: "Adaptive Engineering"}, + }, + + // Solaros & Lunaris + scovillain: { + inherit: true, + abilities: {0: "Ride the Sun!"}, + }, + + // Spiderz + ironthorns: { + inherit: true, + types: ['Dark', 'Ground'], + abilities: {0: "Poison Heal"}, + }, + + // spoo + hemogoblin: { + inherit: true, + abilities: {0: "I Can Hear The Heart Beating As One"}, + }, + + // Steorra + kitsunoh: { + inherit: true, + abilities: {0: "Ghostly Hallow"}, + }, + + // Struchni + aggron: { + inherit: true, + abilities: {0: "Overasked Clause"}, + }, + + // Sulo + reuniclus: { + inherit: true, + abilities: {0: "Protection of the Gelatin"}, + }, + + // Swiffix + piplup: { + inherit: true, + baseStats: {hp: 64, atk: 66, def: 68, spa: 81, spd: 76, spe: 50}, + abilities: {0: "Stinky"}, + }, + + // Syrinix + ceruledge: { + inherit: true, + abilities: {0: "Sword of Ruin"}, + }, + + // Teclis + gallade: { + inherit: true, + abilities: {0: "Sharpness"}, + }, + + // Tenshi + sandshrew: { + inherit: true, + baseStats: {hp: 50, atk: 115, def: 130, spa: 50, spd: 65, spe: 98}, + abilities: {0: "Sand Sleuth"}, + }, + + // TheJesuchristoOsAma + arceus: { + inherit: true, + abilities: {0: "The Grace of Jesus Christ"}, + }, + arceusbug: { + inherit: true, + abilities: {0: "The Grace of Jesus Christ"}, + }, + arceusdark: { + inherit: true, + abilities: {0: "The Grace of Jesus Christ"}, + }, + arceusdragon: { + inherit: true, + abilities: {0: "The Grace of Jesus Christ"}, + }, + arceuselectric: { + inherit: true, + abilities: {0: "The Grace of Jesus Christ"}, + }, + arceusfairy: { + inherit: true, + abilities: {0: "The Grace of Jesus Christ"}, + }, + arceusfighting: { + inherit: true, + abilities: {0: "The Grace of Jesus Christ"}, + }, + arceusfire: { + inherit: true, + abilities: {0: "The Grace of Jesus Christ"}, + }, + arceusflying: { + inherit: true, + abilities: {0: "The Grace of Jesus Christ"}, + }, + arceusghost: { + inherit: true, + abilities: {0: "The Grace of Jesus Christ"}, + }, + arceusgrass: { + inherit: true, + abilities: {0: "The Grace of Jesus Christ"}, + }, + arceusground: { + inherit: true, + abilities: {0: "The Grace of Jesus Christ"}, + }, + arceusice: { + inherit: true, + abilities: {0: "The Grace of Jesus Christ"}, + }, + arceuspoison: { + inherit: true, + abilities: {0: "The Grace of Jesus Christ"}, + }, + arceuspsychic: { + inherit: true, + abilities: {0: "The Grace of Jesus Christ"}, + }, + arceusrock: { + inherit: true, + abilities: {0: "The Grace of Jesus Christ"}, + }, + arceussteel: { + inherit: true, + abilities: {0: "The Grace of Jesus Christ"}, + }, + arceuswater: { + inherit: true, + abilities: {0: "The Grace of Jesus Christ"}, + }, + + // Tico + floetteeternal: { + inherit: true, + abilities: {0: "Eternal Generator"}, + }, + + // trace + delphox: { + inherit: true, + abilities: {0: "Eyes of Eternity"}, + }, + + // Tuthur + screamtail: { + inherit: true, + abilities: {0: "Poison Heal"}, + }, + + // Two of Roses + luxray: { + inherit: true, + abilities: {0: "As We See"}, + }, + + // UT + talonflame: { + inherit: true, + abilities: {0: "Gale Guard"}, + }, + + // Valerian + lucario: { + inherit: true, + abilities: {0: "Full Bloom"}, + }, + + // Venous + mantine: { + inherit: true, + abilities: {0: "Concrete Over Water"}, + }, + + // Violet + ogerpon: { + inherit: true, + abilities: {0: "See No Evil, Hear No Evil, Speak No Evil"}, + }, + ogerpontealtera: { + inherit: true, + abilities: {0: "See No Evil, Hear No Evil, Speak No Evil"}, + }, + ogerponcornerstone: { + inherit: true, + abilities: {0: "See No Evil, Hear No Evil, Speak No Evil"}, + }, + ogerponcornerstonetera: { + inherit: true, + abilities: {0: "See No Evil, Hear No Evil, Speak No Evil"}, + }, + ogerponhearthflame: { + inherit: true, + abilities: {0: "See No Evil, Hear No Evil, Speak No Evil"}, + }, + ogerponhearthflametera: { + inherit: true, + abilities: {0: "See No Evil, Hear No Evil, Speak No Evil"}, + }, + ogerponwellspring: { + inherit: true, + abilities: {0: "See No Evil, Hear No Evil, Speak No Evil"}, + }, + ogerponwellspringtera: { + inherit: true, + abilities: {0: "See No Evil, Hear No Evil, Speak No Evil"}, + }, + + // Vistar + zeraora: { + inherit: true, + abilities: {0: "Prankster"}, + }, + + // vmnunes + shayminsky: { + inherit: true, + abilities: {0: "Wild Growth"}, + }, + + // WarriorGallade + tropius: { + inherit: true, + abilities: {0: "Primeval Harvest"}, + }, + + // Waves + wailord: { + inherit: true, + abilities: {0: "Primordial Sea"}, + }, + + // WigglyTree + sudowoodo: { + inherit: true, + abilities: {0: "Tree Stance"}, + baseStats: {hp: 70, atk: 100, def: 115, spa: 30, spd: 65, spe: 50}, + }, + + // xy01 + blissey: { + inherit: true, + abilities: {0: "Panic"}, + }, + + // yeet dab xd + kecleon: { + inherit: true, + abilities: {0: "Treasure Bag"}, + }, + + // Yellow Paint + rotomfrost: { + inherit: true, + abilities: {0: "Yellow Magic"}, + }, + + ninetalesalola: { + inherit: true, + abilities: {0: "Party Up"}, + }, + + // YveltalNL + farigiraf: { + inherit: true, + abilities: {0: "Height Advantage"}, + }, + + // za + greedent: { + inherit: true, + abilities: {0: "Troll"}, + }, + + // Zalm + weedle: { + inherit: true, + baseStats: {hp: 100, atk: 90, def: 100, spa: 35, spd: 90, spe: 100}, + abilities: {0: "Water Bubble"}, + }, + + // Zarel + meloetta: { + inherit: true, + abilities: {0: "Tempo Change"}, + }, + meloettapirouette: { + inherit: true, + abilities: {0: "Tempo Change"}, + }, + + // zee + lilliganthisui: { + inherit: true, + abilities: {0: "Chlorophyll"}, + }, + + // zoro + umbreon: { + inherit: true, + abilities: {0: "Nine Lives"}, + }, +}; diff --git a/data/mods/gen9ssb/random-teams.ts b/data/mods/gen9ssb/random-teams.ts new file mode 100644 index 000000000000..d3e767f8b499 --- /dev/null +++ b/data/mods/gen9ssb/random-teams.ts @@ -0,0 +1,1250 @@ +import RandomTeams from '../../random-battles/gen9/teams'; + +export interface SSBSet { + species: string; + ability: string | string[]; + item: string | string[]; + gender: GenderName | GenderName[]; + moves: (string | string[])[]; + signatureMove: string; + evs?: {hp?: number, atk?: number, def?: number, spa?: number, spd?: number, spe?: number}; + ivs?: {hp?: number, atk?: number, def?: number, spa?: number, spd?: number, spe?: number}; + nature?: string | string[]; + shiny?: number | boolean; + level?: number; + happiness?: number; + skip?: string; + teraType?: string | string[]; +} +interface SSBSets {[k: string]: SSBSet} + +export const ssbSets: SSBSets = { + /* + // Example: + Username: { + species: 'Species', ability: 'Ability', item: 'Item', gender: '', + moves: ['Move Name', ['Move Name', 'Move Name']], + signatureMove: 'Move Name', + evs: {stat: number}, ivs: {stat: number}, nature: 'Nature', teraType: 'Type', + }, + // Species, ability, and item need to be captialized properly ex: Ludicolo, Swift Swim, Life Orb + // Gender can be M, F, N, or left as an empty string + // each slot in moves needs to be a string (the move name, captialized properly ex: Hydro Pump), or an array of strings (also move names) + // signatureMove also needs to be capitalized properly ex: Scripting + // You can skip Evs (defaults to 84 all) and/or Ivs (defaults to 31 all), or just skip part of the Evs (skipped evs are 0) and/or Ivs (skipped Ivs are 31) + // You can also skip shiny, defaults to false. Level can be skipped (defaults to 100). + // Nature needs to be a valid nature with the first letter capitalized ex: Modest + */ + // Please keep sets organized alphabetically based on staff member name! + aegii: { + species: 'Scizor', ability: 'Unburden', item: 'Lansat Berry', gender: 'M', + moves: ['Acrobatics', 'Attack Order', ['Cross Chop', 'Night Slash']], + signatureMove: 'Equip Aegislash', + evs: {hp: 4, atk: 252, spe: 252}, nature: 'Adamant', teraType: 'Flying', + }, + Aelita: { + species: 'Melmetal', ability: 'Fortified Metal', item: 'Leftovers', gender: '', + moves: ['Heavy Slam', 'Bitter Blade', 'Liquidation'], + signatureMove: 'Smelt', + evs: {hp: 252, atk: 4, spd: 252}, nature: 'Careful', teraType: 'Steel', shiny: true, + }, + Aethernum: { + species: 'Giratina-Origin', ability: 'The Eminence in the Shadow', item: 'Griseous Core', gender: '', + moves: ['Fiery Wrath', 'Lunar Blessing', 'Dragon Energy'], + signatureMove: 'I. AM. ATOMIC.', + evs: {atk: 4, spa: 252, spe: 252}, nature: 'Hasty', teraType: 'Dark', shiny: true, + }, + Akir: { + species: 'Slowbro', ability: 'Take it Slow', item: 'Heavy-Duty Boots', gender: 'M', + moves: ['Future Sight', 'Slack Off', 'Steam Eruption'], + signatureMove: 'Free Switch Button', + evs: {hp: 248, def: 8, spa: 252}, ivs: {spe: 0}, nature: 'Relaxed', teraType: 'Fairy', + }, + Alex: { + species: 'Sprigatito', ability: 'Pawprints', item: 'Eviolite', gender: '', + moves: [['Charm', 'Tickle'], 'Protect', 'Soak'], + signatureMove: 'Spicier Extract', + evs: {hp: 252, def: 4, spd: 252}, nature: 'Careful', teraType: 'Water', + }, + Alexander489: { + species: 'Charizard', ability: 'Confirmed Town', item: 'Heavy-Duty Boots', gender: 'M', + moves: ['No Retreat', 'Bitter Blade', 'Dual Wingbeat'], + signatureMove: 'Scumhunt', + evs: {atk: 252, spa: 4, spe: 252}, nature: 'Naughty', teraType: 'Fire', shiny: true, + }, + Apple: { + species: 'Applin', ability: 'Orchard\'s Gift', item: 'Lum Berry', gender: ['M', 'F'], + moves: ['Apple Acid', 'Leech Seed', 'Dragon Pulse'], + signatureMove: 'Wopple or Flopple', + evs: {hp: 252, spa: 4, spd: 252}, nature: 'Sassy', shiny: 2, teraType: 'Dragon', + }, + 'Appletun a la Mode': { + species: 'Appletun', ability: 'Served Cold', item: 'Sitrus Berry', gender: 'F', + moves: ['Freeze-Dry', 'Apple Acid', 'Fickle Beam'], + signatureMove: "Extra Course", + evs: {hp: 252, spa: 4, spd: 252}, nature: 'Calm', teraType: 'Ground', + }, + aQrator: { + species: 'Totodile', ability: 'Neverending fHunt', item: 'Eviolite', gender: 'F', + moves: ['Whirlpool', 'Noble Roar', 'Slack Off'], + signatureMove: "Tori's Stori", + evs: {hp: 252, def: 4, spd: 252}, nature: 'Sassy', teraType: 'Fighting', + }, + 'A Quag To The Past': { + species: 'Quagsire', ability: 'Quag of Ruin', item: 'Leftovers', gender: 'M', + moves: ['Surging Strikes', 'Precipice Blades', 'Gunk Shot'], + signatureMove: 'Sire Switch', + evs: {hp: 252, def: 4, spd: 252}, nature: 'Careful', teraType: 'Water', + }, + 'A Quag To The Past-Clodsire': { + species: 'Clodsire', ability: 'Clod of Ruin', item: 'Leftovers', gender: 'M', + moves: ['Coil', 'Strength Sap', 'Toxic'], + signatureMove: 'Sire Switch', + evs: {hp: 252, def: 4, spd: 252}, nature: 'Careful', teraType: 'Poison', skip: 'A Quag To The Past', + }, + Archas: { + species: 'Lilligant', ability: 'Saintly Bullet', item: 'Lilligantium Z', gender: 'F', + moves: ['Giga Drain', 'Snipe Shot', 'Aeroblast'], + signatureMove: 'Quiver Dance', + evs: {spa: 252, spd: 4, spe: 252}, nature: 'Timid', + }, + Arcueid: { + species: 'Deoxys-Defense', ability: 'Marble Phantasm', item: 'Heavy-Duty Boots', gender: 'N', + moves: [['Lunar Blessing', 'Jungle Healing'], 'Body Press', ['Toxic', 'Will-O-Wisp', 'Topsy-Turvy']], + signatureMove: 'Funny Vamp', + evs: {hp: 248, def: 252, spd: 8}, nature: 'Bold', teraType: 'Fairy', shiny: true, + }, + 'Arcueid-Attack': { + species: 'Deoxys-Attack', ability: 'Marble Phantasm', item: 'Heavy-Duty Boots', gender: 'N', + moves: ['Moonblast', 'Photon Geyser', 'Flamethrower'], + signatureMove: 'Funny Vamp', + evs: {hp: 4, spa: 252, spe: 252}, nature: 'Timid', teraType: 'Fairy', shiny: true, skip: 'Arcueid', + }, + Arsenal: { + species: 'Rabsca', ability: 'Absorb Phys', item: 'Covert Cloak', gender: 'N', + moves: ['Recover', 'Calm Mind', 'Speed Swap'], + signatureMove: 'Megidolaon', + evs: {hp: 4, spa: 252, spd: 252}, nature: 'Modest', teraType: 'Stellar', shiny: true, + }, + Artemis: { + species: 'Genesect', ability: 'Supervised Learning', item: 'Choice Specs', gender: 'N', + moves: [], + signatureMove: 'Automated Response', + evs: {hp: 4, spa: 252, spe: 252}, nature: 'Serious', shiny: true, + }, + Arya: { + species: 'Flygon', ability: 'Tinted Lens', item: 'Flygonite', gender: 'F', + moves: ['Clanging Scales', 'Roost', 'Bug Buzz'], + signatureMove: 'Anyone can be killed', + evs: {spa: 252, spd: 4, spe: 252}, nature: 'Timid', + }, + Audiino: { + species: 'Audino', ability: 'Mitosis', item: 'Leftovers', gender: 'N', + moves: ['Recover', 'Moongeist Beam', 'Hyper Voice'], + signatureMove: 'Thinking In Progress', + evs: {hp: 252, def: 4, spa: 252}, nature: 'Modest', teraType: 'Ghost', + }, + autumn: { + species: 'Flutter Mane', ability: 'Protosynthesis', item: 'Booster Energy', gender: 'N', + moves: ['Moonblast', 'Taunt', 'Strength Sap'], + signatureMove: 'Season\'s Smite', + evs: {def: 8, spa: 244, spe: 252}, nature: 'Timid', teraType: 'Fairy', + }, + ausma: { + species: 'Hatterene', ability: 'Cascade', item: 'Leftovers', gender: 'F', + moves: ['Light of Ruin', 'Strength Sap', 'Substitute'], + signatureMove: 'Sigil\'s Storm', + evs: {hp: 252, def: 4, spa: 252}, ivs: {atk: 0, spe: 0}, nature: 'Modest', teraType: 'Fairy', + }, + 'ausma-Mismagius': { + species: 'Mismagius', ability: 'Levitate', item: 'Leftovers', gender: 'F', + moves: ['Light of Ruin', 'Strength Sap', 'Substitute'], + signatureMove: 'Sigil\'s Storm', + evs: {spa: 252, spd: 4, spe: 252}, ivs: {atk: 0}, nature: 'Modest', teraType: 'Fairy', skip: 'ausma', + }, + 'ausma-Fennekin': { + species: 'Fennekin', ability: 'Blaze', item: '', gender: '', + moves: ['Tackle', 'Growl'], + signatureMove: 'Ember', + evs: {}, skip: 'ausma', + }, + AuzBat: { + species: 'Swoobat', ability: 'Magic Guard', item: 'Focus Sash', gender: 'M', + moves: ['Stored Power', 'Hurricane', ['Roost', 'Focus Blast']], + signatureMove: 'Prep Time', + evs: {hp: 4, spa: 252, spe: 252}, nature: 'Timid', teraType: 'Psychic', shiny: 8192, + }, + avarice: { + species: 'Sinistcha-Masterpiece', ability: 'Serene Grace', item: ['Covert Cloak', 'Leftovers'], gender: 'N', + moves: ['Strength Sap', 'Calm Mind', 'Matcha Gotcha'], + signatureMove: 'yu-gi-oh reference', + evs: {hp: 252, def: 160, spe: 90}, nature: 'Bold', teraType: 'Steel', + }, + Beowulf: { + species: 'Beedrill', ability: 'Intrepid Sword', item: 'Beedrillite', gender: 'M', + moves: ['Poison Jab', 'X-Scissor', ['Earthquake', 'Volt Tackle', 'Glacial Lance']], + signatureMove: 'Buzzer Stinger Counter', + evs: {hp: 4, atk: 252, spe: 252}, nature: 'Jolly', shiny: 2, + }, + berry: { + species: 'Regirock', ability: 'Sturdy', item: 'Maranga Berry', gender: 'F', + moves: ['Curse', 'Salt Cure', 'Stone Axe'], + signatureMove: 'what kind', + evs: {hp: 252, atk: 4, spd: 252}, nature: 'Careful', teraType: 'Rock', + }, + Bert122: { + species: 'Sableye', ability: 'Prankster', item: 'Sablenite', gender: '', + moves: ['Metal Burst', 'Recover', 'Will-O-Wisp'], + signatureMove: 'Shatter and Scatter', + evs: {hp: 252, def: 28, spd: 224}, ivs: {atk: 0, spe: 0}, nature: 'Relaxed', + }, + Billo: { + species: 'Cosmog', ability: 'Wonder Guard', item: 'Eviolite', gender: 'N', + moves: [], + signatureMove: 'Hack Check', + evs: {spa: 252, spd: 4, spe: 252}, nature: 'Timid', + }, + 'Billo-Solgaleo': { + species: 'Solgaleo', ability: 'Magic Guard', item: 'Choice Scarf', gender: 'N', + moves: ['Wave Crash', 'Volt Tackle', 'Flare Blitz'], + signatureMove: 'Head Smash', + evs: {atk: 252, spd: 4, spe: 252}, nature: 'Jolly', skip: 'Billo', shiny: true, + }, + 'Billo-Lunala': { + species: 'Lunala', ability: 'Shadow Shield', item: 'Lunalium Z', gender: 'N', + moves: ['Moongeist Beam', 'Moonblast', 'Ice Beam'], + signatureMove: 'Thunderbolt', + evs: {spa: 252, spd: 4, spe: 252}, nature: 'Timid', skip: 'Billo', + }, + blazeofvictory: { + species: 'Sylveon', ability: 'Prismatic Lens', item: 'Leftovers', gender: 'F', + moves: ['Wish', 'Baton Pass', 'Hyper Voice'], + signatureMove: 'Veto', + evs: {hp: 252, spa: 252, spe: 4}, nature: 'Modest', teraType: 'Fairy', + }, + Blitz: { + species: 'Chi-Yu', ability: 'Blitz of Ruin', item: 'Life Orb', gender: 'N', + moves: ['Fiery Wrath', 'Lava Plume', 'Nasty Plot'], + signatureMove: 'Geyser Blast', + evs: {def: 4, spa: 252, spe: 252}, nature: 'Modest', teraType: 'Water', shiny: true, + }, + Breadstycks: { + species: 'Dachsbun', ability: 'Painful Exit', item: 'Leftovers', gender: '', + moves: ['Protect', 'Rest', 'Play Rough'], + signatureMove: 'Baker\'s Douze Off', + evs: {hp: 252, def: 252, spd: 4}, nature: 'Impish', teraType: 'Steel', + }, + Cake: { + species: 'Dunsparce', ability: 'Scrappy', item: 'Eviolite', gender: 'N', + moves: [ + 'Topsy-Turvy', 'Lunar Blessing', 'Lovely Kiss', 'Glare', 'Knock Off', 'Gastro Acid', + 'Trick Room', 'Toxic', 'Heal Bell', 'Octolock', 'G-Max Befuddle', 'G-Max Centiferno', + 'G-Max Cannonade', 'Magic Powder', 'Whirlwind', 'Lunar Dance', 'Power Split', + 'Snatch', 'Heal Order', 'Parting Shot', 'Population Bomb', 'Metronome', + ], + signatureMove: 'Role System', + // eslint-disable-next-line max-len + evs: {hp: 85, atk: 85, def: 85, spa: 85, spd: 85, spe: 85}, nature: 'Hardy', teraType: ['Ghost', 'Poison', 'Fairy'], shiny: 1024, level: 97, + }, + chaos: { + species: 'Iron Jugulis', ability: 'Transistor', item: 'Heavy-Duty Boots', gender: 'N', + moves: [['Oblivion Wing', 'Hurricane'], ['Thunderclap', 'Volt Switch'], ['Defog', 'Roost']], + signatureMove: 'Outage', + evs: {spa: 252, spd: 4, spe: 252}, nature: 'Timid', teraType: ['Steel', 'Flying', 'Electric', 'Dark'], + }, + Chloe: { + species: 'Tsareena', ability: 'Acetosa', item: 'Assault Vest', gender: 'F', + moves: ['Rapid Spin', 'Fishious Rend', 'Stone Axe'], + signatureMove: 'De Todas las Flores', + evs: {atk: 252, spd: 4, spe: 252}, nature: 'Jolly', teraType: 'Grass', shiny: true, + }, + Chris: { + species: 'Raging Bolt', ability: 'Astrothunder', item: 'Leftovers', gender: 'N', + moves: ['Thunder', 'Dragon Pulse', 'Calm Mind'], + signatureMove: 'Antidote', + evs: {hp: 148, def: 156, spa: 204}, nature: 'Quiet', teraType: 'Steel', + }, + ciran: { + species: 'Rapidash', ability: 'Defiant', item: 'Heavy-Duty Boots', gender: 'N', + moves: ['Protect', 'Sketch', 'Bitter Blade'], + signatureMove: 'Summon Monster VIII: Fiendish monstrous Piplupede, Colossal', + evs: {atk: 252, spd: 4, spe: 252}, nature: 'Jolly', teraType: 'Poison', shiny: true, + }, + Clefable: { + species: 'Clefable', ability: 'That\'s Hacked', item: 'Leftovers', gender: 'M', + moves: ['Cosmic Power', 'Soft-Boiled', 'Thunder Wave'], + signatureMove: 'Giveaway!', + evs: {hp: 252, def: 200, spd: 56}, nature: 'Calm', teraType: 'Any', shiny: true, + }, + Clementine: { + species: 'Avalugg', ability: 'Melting Point', item: 'Heavy-Duty Boots', gender: '', + moves: ['Land\'s Wrath', 'Flip Turn', 'Milk Drink'], + signatureMove: '(╯°o°)╯︵ ┻━┻', + nature: 'Quirky', teraType: ['Poison', 'Steel'], + }, + 'Clementine-Flipped': { + species: 'Avalugg-Hisui', ability: 'Melting Point', item: 'Heavy-Duty Boots', gender: '', + moves: ['Earth Power', 'Volt Switch', 'Heal Pulse'], + signatureMove: '(╯°o°)╯︵ ┻━┻', + nature: 'Quirky', teraType: ['Poison', 'Steel'], skip: 'Clementine', + }, + clerica: { + species: 'Mimikyu', ability: 'Masquerade', item: 'Ghostium Z', gender: 'F', + moves: ['Protect', 'Substitute', 'Phantom Force'], + signatureMove: 'Stockholm Syndrome', + evs: {atk: 252, spd: 4, spe: 252}, nature: 'Jolly', + }, + Clouds: { + species: 'Corvisquire', ability: 'Jet Stream', item: 'Leftovers', gender: 'M', + moves: ['Brave Bird', 'Roost', 'Defog'], + signatureMove: 'Winds of Change', + evs: {hp: 252, atk: 4, def: 252}, nature: 'Jolly', teraType: 'Flying', shiny: 822, + }, + Coolcodename: { + species: 'Victini', ability: 'Firewall', item: 'Heavy-Duty Boots', gender: 'M', + moves: ['Searing Shot', 'Psychic', 'Dazzling Gleam'], + signatureMove: 'Haxer\'s Will', + evs: {spa: 252, spd: 4, spe: 252}, nature: 'Timid', teraType: 'Fairy', shiny: 1024, + }, + Corthius: { + species: 'Thwackey', ability: 'Grassy Emperor', item: 'Eviolite', gender: 'M', + moves: ['Swords Dance', 'U-turn', 'Close Combat'], + signatureMove: 'Monkey Beat Up', + evs: {atk: 252, def: 4, spe: 252}, nature: 'Adamant', shiny: 69, + }, + 'Dawn of Artemis': { + species: 'Necrozma', ability: 'Form Change', item: 'Expert Belt', gender: 'F', + moves: ['Calm Mind', 'Photon Geyser', 'Earth Power'], + signatureMove: 'Magical Focus', + evs: {spa: 252, spd: 4, spe: 252}, nature: 'Timid', teraType: 'Psychic', shiny: 8192, + }, + 'Dawn of Artemis-Ultra': { + species: 'Necrozma-Ultra', ability: 'Form Change', item: 'Expert Belt', gender: 'F', + moves: ['Swords Dance', 'Photon Geyser', 'Outrage'], + signatureMove: 'Magical Focus', + evs: {atk: 252, spd: 4, spe: 252}, nature: 'Jolly', teraType: 'Dragon', skip: 'Dawn of Artemis', + }, + DaWoblefet: { + species: 'Wobbuffet', ability: 'Shadow Artifice', item: 'Iapapa Berry', gender: 'M', + moves: ['Counter', 'Mirror Coat', 'Encore'], + signatureMove: 'Super Ego Inflation', + evs: {hp: 252, def: 252, spd: 4}, ivs: {spe: 0}, nature: 'Relaxed', teraType: 'Fairy', + }, + deftinwolf: { + species: 'Yveltal', ability: 'Sharpness', item: 'Dread Plate', gender: '', + moves: ['Aerial Ace', 'Ceaseless Edge', 'Cross Poison'], + signatureMove: 'Trivial Pursuit', + evs: {atk: 252, spd: 4, spe: 252}, nature: 'Adamant', teraType: 'Poison', + }, + dhelmise: { + species: 'Slowking-Galar', ability: 'Coalescence', item: 'Black Sludge', gender: 'N', + moves: ['Sludge Bomb', 'Psychic Noise', 'Parting Shot'], + signatureMove: 'Biotic Orb', + evs: {hp: 252, def: 252, spa: 4}, nature: 'Bold', teraType: ['Psychic', 'Poison'], + }, + DianaNicole: { + species: 'Abomasnow', ability: 'Snow Warning', item: 'Abomasite', gender: 'F', + moves: ['Giga Drain', 'Earth Power', 'Blizzard'], + signatureMove: 'Breath of Tiamat', + evs: {hp: 252, def: 4, spa: 252}, nature: 'Modest', shiny: true, + }, + EasyOnTheHills: { + species: 'Snorlax', ability: 'Immunity', item: 'Life Orb', gender: 'M', + moves: ['Darkest Lariat', 'Body Slam', 'Heavy Slam'], + signatureMove: 'Snack Time', + evs: {hp: 252, atk: 252, spd: 4}, nature: 'Adamant', teraType: 'Ghost', shiny: true, + }, + Elliot: { + species: 'Sinistea', ability: 'Natural Cure', item: 'Focus Sash', gender: 'N', + moves: ['Moonblast', 'Shadow Ball', 'Teatime'], + signatureMove: 'Tea Party', + evs: {def: 4, spa: 252, spe: 252}, nature: 'Modest', teraType: 'Water', shiny: true, + }, + Elly: { + species: 'Thundurus', ability: 'Storm Surge', item: 'Heavy-Duty Boots', gender: 'F', + moves: ['Wildbolt Storm', 'Sandsear Storm', 'Volt Switch'], + signatureMove: 'Sustained Winds', + evs: {spa: 252, spd: 4, spe: 252}, nature: 'Timid', teraType: 'Ground', + }, + Emboar02: { + species: 'Emboar', ability: 'Hogwash', item: 'Choice Band', gender: 'F', + moves: ['Flare Blitz', 'Wave Crash', 'Volt Tackle'], + signatureMove: 'Insert boar pun here', + // eslint-disable-next-line max-len + evs: {hp: 252, atk: 252, def: 4}, nature: 'Adamant', teraType: ['Fire', 'Water', 'Fighting', 'Electric'], shiny: 50 / 49, + }, + Fame: { + species: 'Jumpluff', ability: 'Social Jumpluff Warrior', item: 'Leftovers', gender: 'F', + moves: ['Air Slash', 'Thunder Wave', 'Toxic'], + signatureMove: 'Solidarity', + evs: {hp: 4, spa: 252, spe: 252}, nature: 'Timid', teraType: 'Fire', + }, + Felucia: { + species: 'Vespiquen', ability: 'Mountaineer', item: 'Red Card', gender: 'F', + moves: ['Strength Sap', ['Oblivion Wing', 'Night Shade'], ['Thief', 'Calm Mind', 'Toxic']], + signatureMove: 'Rigged Dice', + evs: {hp: 252, def: 4, spd: 252}, nature: 'Calm', + }, + Froggeh: { + species: 'Toxicroak', ability: 'Super Luck', item: 'Leftovers', gender: 'M', + moves: ['Gunk Shot', 'Sucker Punch', 'Drain Punch'], + signatureMove: 'Cringe Dad Joke', + evs: {atk: 252, spd: 4, spe: 252}, nature: 'Adamant', teraType: 'Dark', + }, + Frostyicelad: { + species: 'Qwilfish-Hisui', ability: 'Almost Frosty', item: 'Eviolite', gender: 'M', + moves: ['Darkest Lariat', 'Recover', ['Dire Claw', 'Meteor Mash', 'Bitter Malice']], + signatureMove: 'Puffy Spiky Destruction', + evs: {atk: 252, def: 4, spe: 252}, nature: 'Jolly', teraType: ['Dark', 'Poison', 'Ghost', 'Steel'], shiny: 1024, + }, + Frozoid: { + species: 'Gible', ability: 'Snowballer', item: 'Eviolite', gender: 'M', + moves: ['Dragon Dance', 'Dragon Rush', 'Precipice Blades'], + signatureMove: 'Flat out falling', + evs: {atk: 252, spd: 4, spe: 252}, nature: 'Adamant', teraType: 'Any', shiny: true, + }, + Ganjafin: { + species: 'Wiglett', ability: 'Gambling Addiction', item: 'Eviolite', gender: 'M', + moves: ['Wrap', 'Cosmic Power', 'Strength Sap'], + signatureMove: 'Wiggling Strike', + evs: {hp: 252, def: 4, spe: 252}, nature: 'Timid', teraType: 'Grass', shiny: 2, + }, + 'Haste Inky': { + species: 'Falinks', ability: 'Simple', item: 'Sitrus Berry', gender: 'N', + moves: ['Superpower', 'Ice Hammer', 'Throat Chop'], + signatureMove: 'Hasty Revolution', + evs: {atk: 252, def: 4, spe: 252}, nature: 'Jolly', teraType: 'Dark', + }, + havi: { + species: 'Gastly', ability: 'Mensis Cage', item: 'Leftovers', gender: 'F', + moves: ['Astral Barrage', 'Moonblast', 'Substitute'], + signatureMove: 'Augur of Ebrietas', + evs: {spa: 252, spd: 4, spe: 252}, nature: 'Timid', teraType: 'Ghost', + }, + Hecate: { + species: 'Mewtwo', ability: 'Hacking', item: 'Mewtwonite X', gender: 'F', + moves: ['Photon Geyser', 'Drain Punch', 'Iron Head'], + signatureMove: 'Testing in Production', + evs: {atk: 252, spa: 4, spe: 252}, nature: 'Jolly', + }, + HiZo: { + species: 'Zoroark-Hisui', ability: 'Justified', item: 'Heavy-Duty Boots', gender: 'M', + moves: ['Last Respects', 'Blood Moon', 'Spirit Break'], + signatureMove: 'Scapegoat', + evs: {atk: 252, spa: 4, spe: 252}, nature: 'Naive', teraType: 'Fairy', + }, + HoeenHero: { + species: 'Ludicolo', ability: 'Misspelled', item: 'Life Orb', gender: 'M', + moves: [['Hydro Pump', 'Surf'], 'Giga Drain', 'Ice Beam'], + signatureMove: 'Re-Program', + evs: {spa: 252, spd: 4, spe: 252}, nature: 'Timid', teraType: 'Water', + }, + hsy: { + species: 'Ursaluna', ability: 'Hustle', item: 'Blunder Policy', gender: 'M', + moves: ['Drill Peck', 'Egg Bomb', 'Headlong Rush'], + signatureMove: 'Wonder Wing', + evs: {hp: 252, atk: 252, spe: 4}, nature: 'Adamant', teraType: 'Flying', + }, + Hydrostatics: { + species: 'Pichu-Spiky-eared', ability: 'Hydrostatic Positivity', item: 'Eviolite', gender: 'M', + moves: ['Hydro Pump', 'Thunder', 'Ice Beam'], + signatureMove: 'Hydrostatics', + evs: {def: 4, spa: 252, spe: 252}, nature: 'Modest', teraType: 'Water', shiny: 2, + }, + Imperial: { + species: 'Kyurem', ability: 'Frozen Fortuity', item: 'Never-Melt Ice', gender: 'N', + moves: ['Chilly Reception', 'Fusion Bolt', 'Fusion Flare'], + signatureMove: 'Storm Shroud', + evs: {atk: 128, spa: 128, spe: 252}, nature: 'Docile', teraType: 'Ice', shiny: 193, + }, + 'Imperial-Black': { + species: 'Kyurem-Black', ability: 'Frozen Fortuity', item: 'Never-Melt Ice', gender: 'N', + moves: ['Mountain Gale', 'Fusion Bolt', 'Ice Shard'], + signatureMove: 'Storm Shroud', + evs: {atk: 252, def: 4, spe: 252}, nature: 'Adamant', teraType: 'Electric', shiny: 193, skip: 'Imperial', + }, + 'Imperial-White': { + species: 'Kyurem-White', ability: 'Frozen Fortuity', item: 'Never-Melt Ice', gender: 'N', + moves: ['Ice Beam', 'Freeze-Dry', 'Fusion Flare'], + signatureMove: 'Storm Shroud', + evs: {spa: 252, spd: 4, spe: 252}, nature: 'Modest', teraType: 'Fire', shiny: 193, skip: 'Imperial', + }, + 'in the hills': { + species: 'Gligar', ability: 'Illiterit', item: 'Eviolite', gender: 'M', + moves: ['Roost', 'Knock Off', 'Tidy Up'], + signatureMove: '10-20-40', + evs: {hp: 252, def: 4, spd: 252}, nature: 'Careful', teraType: 'Water', + }, + ironwater: { + species: 'Jirachi', ability: 'Good as Gold', item: 'Leftovers', gender: 'N', + moves: ['Swords Dance', 'Zen Headbutt', 'Hammer Arm'], + signatureMove: 'Jirachi Ban Hammer', + evs: {atk: 252, spd: 4, spe: 252}, nature: 'Jolly', teraType: 'Steel', + }, + 'Irpachuza!': { + species: 'Mr. Mime', ability: 'Mime knows best', item: 'Irpatuzinium Z', gender: 'M', + moves: [['Destiny Bond', 'Lunar Dance'], 'Parting Shot', 'Taunt'], + signatureMove: 'Fleur Cannon', + evs: {hp: 252, spa: 4, spd: 252}, nature: 'Modest', + }, + Isaiah: { + species: 'Medicham', ability: 'Psychic Surge', item: 'Medichamite', gender: 'M', + moves: ['Close Combat', 'Knock Off', 'Triple Axel'], + signatureMove: 'Simple Gameplan', + evs: {atk: 252, def: 4, spe: 252}, nature: 'Jolly', shiny: true, + }, + 'J0rdy004 ♫': { + species: 'Vulpix-Alola', ability: 'Fortifying Frost', item: 'Never-Melt Ice', gender: 'N', + moves: ['Blizzard', 'Focus Blast', 'Recover'], + signatureMove: 'Snowy Samba', + evs: {spa: 252, spd: 4, spe: 252}, nature: 'Timid', shiny: 4, + }, + Kalalokki: { + species: 'Flamigo', ability: 'Scrappy', item: 'Choice Band', gender: 'M', + moves: ['Brave Bird', 'Sucker Punch', ['Drain Punch', 'Rapid Spin']], + signatureMove: 'Knot Weak', + evs: {atk: 252, def: 4, spe: 252}, nature: 'Jolly', teraType: ['Fighting', 'Flying'], + }, + Karthik: { + species: 'Staraptor', ability: 'Tough Claws', item: 'Choice Scarf', gender: 'M', + moves: ['Brave Bird', 'Head Smash', ['Flare Blitz', 'Wave Crash']], + signatureMove: 'Salvaged Sacrifice', + evs: {hp: 252, atk: 4, spe: 252}, nature: 'Adamant', teraType: 'Flying', + }, + ken: { + species: 'Jigglypuff', ability: 'Aroma Veil', item: 'Heavy-Duty Boots', gender: 'M', + moves: ['Dazzling Gleam', 'Heal Order', 'Mortal Spin'], + signatureMove: ', (ac)', + evs: {hp: 252, def: 252, spa: 4}, nature: 'Bold', teraType: 'Any', + }, + kenn: { + species: 'Larvitar', ability: 'Deserted Dunes', item: 'Eviolite', gender: 'M', + moves: ['Salt Cure', 'Shore Up', ['Precipice Blades', 'Headlong Rush']], + signatureMove: 'Stone Faced', + evs: {atk: 252, spd: 4, spe: 252}, nature: 'Adamant', teraType: 'Rock', shiny: true, + }, + Kennedy: { + species: 'Cinderace', ability: 'Anfield', item: 'Berserk Gene', gender: 'M', + moves: ['Blaze Kick', ['Triple Kick', 'Trop Kick'], 'U-turn'], + signatureMove: 'Hat-Trick', + evs: {atk: 252, def: 4, spe: 252}, nature: 'Jolly', teraType: 'Any', + }, + keys: { + species: 'Rayquaza', ability: 'Defeatist', item: 'Heavy-Duty Boots', gender: 'M', + moves: ['Oblivion Wing', 'Sizzly Slide', 'Bouncy Bubble'], + signatureMove: 'Protector of the Skies', + evs: {spa: 252, spd: 4, spe: 252}, nature: 'Timid', shiny: 10, + }, + kingbaruk: { + species: 'Wigglytuff', ability: 'Peer Pressure', item: 'Silk Scarf', gender: 'M', + moves: ['Trump Card', 'Encore', ['Protect', 'Thunder Wave']], + signatureMove: 'Platinum Record', + evs: {hp: 252, def: 4, spa: 252}, nature: 'Modest', teraType: 'Normal', + }, + Kiwi: { + species: 'Minccino', ability: 'Sure Hit Sorcery', item: 'Heavy-Duty Boots', gender: 'M', + moves: ['Dynamic Punch', 'Substitute', 'Noble Roar'], + signatureMove: 'Mad Manifest', + evs: {hp: 252, atk: 144, spe: 112}, nature: 'Adamant', teraType: 'Fighting', shiny: true, + }, + Klmondo: { + species: 'Cloyster', ability: 'Super Skilled', item: 'Heavy-Duty Boots', gender: 'M', + moves: ['Victory Dance', 'Icicle Spear', 'Rock Blast'], + signatureMove: 'The Better Water Shuriken', + evs: {atk: 252, def: 4, spe: 252}, nature: 'Adamant', teraType: 'Water', + }, + 'kolohe ✮彡': { + species: 'Pikachu', ability: 'Soul Surfer', item: 'Light Ball', gender: '', + moves: ['Thunder', 'Volt Switch', 'Bouncy Bubble'], + signatureMove: 'Hang Ten', + evs: {hp: 4, spa: 252, spe: 252}, nature: 'Timid', teraType: 'Water', + }, + Kry: { + species: 'Mawile', ability: 'Flash Freeze', item: 'Mawilite', gender: 'M', + moves: ['Sucker Punch', 'Fire Lash', 'Play Rough'], + signatureMove: 'Attack of Opportunity', + evs: {hp: 252, atk: 252, spd: 4}, nature: 'Adamant', shiny: 1024, + }, + Lasen: { + species: 'Zekrom', ability: 'Idealized World', item: 'Leftovers', gender: 'M', + moves: ['Volt Switch', 'Fusion Bolt', 'Dragon Claw'], + signatureMove: 'Rise Above', + evs: {hp: 252, def: 4, spe: 252}, nature: 'Jolly', teraType: 'Fire', + }, + 'Lets go shuckles': { + species: 'Shuckle', ability: 'Persistent', item: 'Berry Juice', gender: 'M', + moves: ['Diamond Storm', 'Headlong Rush', ['Glacial Lance', 'U-turn']], + signatureMove: 'Shuckle Power', + evs: {hp: 252, def: 252, spd: 4}, ivs: {spe: 0}, nature: 'Relaxed', teraType: 'Ground', shiny: 213, + }, + Lily: { + species: 'Togedemaru', ability: 'Unaware', item: 'Leftovers', gender: 'F', + moves: ['Victory Dance', 'Plasma Fists', 'Meteor Mash'], + signatureMove: 'Power Up', + evs: {hp: 252, def: 4, spd: 252}, nature: 'Careful', teraType: 'Fairy', shiny: 1734, + }, + Loethalion: { + species: 'Ralts', ability: 'Psychic Surge', item: 'Gardevoirite', gender: '', + moves: [['Esper Wing', 'Lumina Crash', 'Psychic Noise'], ['Agility', 'Calm Mind'], ['Draining Kiss', 'Matcha Gotcha']], + signatureMove: 'Darkmoon Cackle', + evs: {spa: 252, spd: 4, spe: 252}, nature: 'Timid', shiny: true, + }, + Lumari: { + species: 'Ponyta-Galar', ability: 'Pyrotechnic', item: 'Eviolite', gender: 'F', + moves: ['Substitute', 'Sappy Seed', 'Magical Torque'], + signatureMove: 'Mystical Bonfire', + evs: {atk: 252, def: 4, spe: 252}, nature: 'Jolly', teraType: 'Fairy', + }, + Lunell: { + species: 'Vaporeon', ability: 'Low Tide, High Tide', item: 'Leftovers', gender: 'F', + moves: ['Hydro Pump', 'Thunder', 'Moonlight'], + signatureMove: 'Praise the Moon', + evs: {hp: 252, def: 4, spa: 252}, nature: 'Calm', teraType: 'Fairy', shiny: 512, + }, + 'Lyna 氷': { + species: 'Dragonair', ability: 'Magic Aura', item: 'Eviolite', gender: 'F', + moves: ['Victory Dance', 'V-create', 'Glacial Lance'], + signatureMove: 'Wrath of Frozen Flames', + evs: {atk: 252, def: 4, spe: 252}, nature: 'Jolly', teraType: 'Dragon', + }, + Maia: { + species: 'Litwick', ability: 'Power Abuse', item: 'Eviolite', gender: 'F', + moves: ['Shadow Ball', 'Flamethrower', 'Giga Drain'], + signatureMove: 'Body Count', + evs: {hp: 252, spa: 252, spd: 4}, nature: 'Modest', teraType: 'Ghost', + }, + 'marillvibes ♫': { + species: 'Marill', ability: 'Huge Power', item: 'Life Orb', gender: 'M', + moves: ['Surging Strikes', 'Jet Punch', 'Close Combat'], + signatureMove: 'Good Vibes Only', + evs: {hp: 4, atk: 252, spe: 252}, nature: 'Adamant', teraType: 'Water', shiny: true, + }, + maroon: { + species: 'Archaludon', ability: 'Built Different', item: 'Leftovers', gender: 'M', + moves: ['Body Press', 'Stealth Rock', 'Rapid Spin'], + signatureMove: 'Metal Blast', + evs: {hp: 252, def: 252, spa: 4}, nature: 'Bold', teraType: 'Flying', + }, + Mathy: { + species: 'Furret', ability: 'Dynamic Typing', item: 'Big Root', gender: 'M', + moves: ['Bitter Blade', 'Swords Dance', 'Taunt'], + signatureMove: 'Breaking Change', + evs: {atk: 252, def: 4, spe: 252}, nature: 'Jolly', teraType: 'Ghost', + }, + Merritty: { + species: 'Torchic', ability: 'End Round', item: 'Eviolite', gender: 'M', + moves: ['Quiver Dance', 'Fiery Dance', 'Strength Sap'], + signatureMove: 'New Bracket', + evs: {hp: 4, def: 36, spa: 196, spd: 36, spe: 236}, nature: 'Timid', teraType: 'Flying', shiny: true, + }, + Meteordash: { + species: 'Tatsugiri', ability: 'TatsuGlare', item: 'Heavy-Duty Boots', gender: 'M', + moves: ['Spacial Rend', 'Steam Eruption', 'Glare'], + signatureMove: 'Plagiarism', + evs: {spa: 252, spd: 4, spe: 252}, nature: 'Timid', teraType: 'Steel', + }, + Mex: { + species: 'Dialga', ability: 'Time Dilation', item: 'Adamant Orb', gender: 'N', + moves: ['Dragon Pulse', 'Flash Cannon', ['Aura Sphere', 'Volt Switch', 'Meteor Beam']], + signatureMove: 'Time Skip', + evs: {hp: 4, spa: 252, spe: 252}, nature: 'Timid', teraType: 'Steel', shiny: true, + }, + Miojo: { + species: 'Spheal', ability: 'The Rolling Spheal', item: 'Choice Band', gender: '', + moves: ['Liquidation', 'Collision Course', 'Flip Turn'], + signatureMove: 'vruuuuuum', + evs: {hp: 8, atk: 252, spd: 4, spe: 244}, nature: 'Jolly', teraType: 'Fighting', shiny: 363, + }, + Monkey: { + species: 'Infernape', ability: 'Harambe Hit', item: 'Blunder Policy', gender: 'M', + moves: ['Dynamic Punch', 'Plasma Fists', 'Fire Punch'], + signatureMove: 'Banana Breakfast', + evs: {hp: 4, atk: 252, spe: 252}, nature: 'Jolly', teraType: 'Electric', shiny: 69, + }, + MyPearl: { + species: 'Latios', ability: 'Eon Call', item: 'Soul Dew', gender: 'M', + moves: ['Draco Meteor', 'Aura Sphere', 'Flip Turn'], + signatureMove: 'Eon Assault', + evs: {hp: 252, def: 4, spe: 252}, ivs: {atk: 0}, nature: 'Timid', teraType: 'Steel', shiny: 50, + }, + 'MyPearl-Latias': { + species: 'Latias', ability: 'Eon Call', item: 'Soul Dew', gender: 'F', + moves: ['Calm Mind', 'Recover', 'Thunder Wave'], + signatureMove: 'Eon Assault', + evs: {hp: 252, def: 4, spe: 252}, ivs: {atk: 0}, nature: 'Timid', teraType: 'Steel', shiny: 50, skip: 'MyPearl', + }, + Neko: { + species: 'Chien-Pao', ability: 'Weatherproof', item: 'Heavy-Duty Boots', gender: 'N', + moves: ['Swords Dance', 'Bitter Blade', ['Crunch', 'Sucker Punch']], + signatureMove: 'Quality Control Zoomies', + evs: {atk: 252, def: 4, spe: 252}, nature: 'Jolly', teraType: 'Fire', + }, + Ney: { + species: 'Banette', ability: 'Insomnia', item: 'Banettite', gender: 'M', + moves: ['Destiny Bond', 'Will-O-Wisp', 'Parting Shot'], + signatureMove: 'Shadow Dance', + evs: {hp: 252, atk: 252, def: 4}, ivs: {spe: 0}, nature: 'Brave', shiny: true, + }, + Notater517: { + species: 'Incineroar', ability: 'Vent Crosser', item: 'Heavy-Duty Boots', gender: 'M', + moves: ['Ceaseless Edge', 'Pyro Ball', ['Rapid Spin', 'Encore']], + signatureMove: '~nyaa', + evs: {hp: 252, atk: 252, spd: 4}, nature: 'Adamant', teraType: 'Steel', + }, + 'nya~ ❤': { + species: 'Delcatty', ability: 'Adorable Grace', item: 'Focus Band', gender: 'F', + moves: ['Freeze-Dry', 'Flamethrower', 'Volt Switch'], + signatureMove: ':3', + evs: {hp: 252, spa: 4, spe: 252}, nature: 'Naive', teraType: 'Ice', + }, + pants: { + species: 'Annihilape', ability: 'Drifting', item: 'Leftovers', gender: 'M', + moves: ['Rage Fist', 'Drain Punch', 'Dragon Dance'], + signatureMove: 'Eerie Apathy', + evs: {hp: 240, spd: 252, spe: 16}, nature: 'Careful', teraType: 'Ghost', + }, + PartMan: { + species: 'Chandelure', ability: 'C- Tier Shitposter', item: 'Leek', gender: 'M', + moves: ['Searing Shot', 'Hex', 'Morning Sun'], + signatureMove: 'Alting', + evs: {hp: 252, spa: 69, spe: 188}, nature: 'Timid', + }, + 'Pastor Gigas': { + species: 'Regigigas', ability: 'God\'s Mercy', item: 'Clear Amulet', gender: 'N', + moves: ['Sacred Fire', 'Knock Off', 'Healing Wish'], + signatureMove: 'Call to Repentance', + evs: {atk: 252, spd: 4, spe: 252}, nature: 'Adamant', teraType: 'Fairy', + }, + Peary: { + species: 'Klinklang', ability: 'Levitate', item: 'Pearyum Z', gender: '', + moves: ['Lock On', 'Sheer Cold', 'Substitute'], + signatureMove: 'Gear Grind', + evs: {hp: 252, def: 4, spe: 252}, nature: 'Jolly', + }, + phoopes: { + species: 'Jynx', ability: 'I Did It Again', item: 'Focus Sash', gender: 'F', + moves: ['Lovely Kiss', 'Psychic', 'Amnesia'], + signatureMove: 'Gen 1 Blizzard', + evs: {hp: 4, spa: 252, spe: 252}, nature: 'Timid', teraType: 'Ice', + }, + Pissog: { + species: 'Volcarona', ability: 'Drought', item: 'Heavy-Duty Boots', gender: 'M', + moves: ['Torch Song', 'Morning Sun', 'Solar Beam'], + signatureMove: 'A Song Of Ice And Fire', + evs: {spa: 252, spd: 4, spe: 252}, nature: 'Timid', teraType: 'Fire', shiny: 1096, + }, + 'Pissog-Frosmoth': { + species: 'Frosmoth', ability: 'Snow Warning', item: 'Heavy-Duty Boots', gender: 'F', + moves: ['Blizzard', 'Chilly Reception', 'Aurora Veil'], + signatureMove: 'A Song Of Ice And Fire', + evs: {spa: 252, spd: 4, spe: 252}, nature: 'Timid', teraType: 'Ice', skip: 'Pissog', shiny: 1096, + }, + pokemonvortex: { + species: 'Pokestar Smeargle', ability: 'Prankster', item: 'Focus Sash', gender: 'N', + moves: ['Spore', 'Extreme Evoboost', 'Substitute'], + signatureMove: 'Roulette', + evs: {hp: 252, def: 4, spe: 252}, nature: 'Timid', teraType: 'Ghost', + }, + 'Princess Autumn': { + species: 'Altaria', ability: 'Last Hymn', item: 'Altarianite', gender: 'F', + moves: ['Earthquake', 'Amnesia', 'Roost'], + signatureMove: 'Cotton Candy Crush', + evs: {hp: 248, spd: 164, spe: 96}, nature: 'Careful', shiny: 4, + }, + ptoad: { + species: 'Politoed', ability: 'Drizzle', item: 'Leftovers', gender: 'M', + moves: ['Jet Punch', 'Ice Punch', 'Earthquake'], + signatureMove: 'Pleek...', + evs: {hp: 252, atk: 252, spd: 4}, nature: 'Adamant', teraType: 'Water', + }, + Pulse_kS: { + species: 'Hydreigon', ability: 'Pulse Luck', item: 'Quick Claw', gender: 'N', + moves: ['Dark Pulse', 'Dragon Pulse', 'Origin Pulse'], + signatureMove: 'Luck Pulse', + evs: {hp: 85, atk: 85, def: 85, spa: 85, spd: 85, spe: 85}, nature: 'Serious', teraType: ['Steel', 'Poison'], + }, + PYRO: { + species: 'Kingambit', ability: 'Hardcore Hustle', item: 'Leftovers', gender: 'M', + moves: ['Kowtow Cleave', 'Sucker Punch', 'Swords Dance'], + signatureMove: 'Meat Grinder', + evs: {hp: 252, atk: 252, def: 4}, nature: 'Adamant', teraType: 'Flying', + }, + 'Quite Quiet': { + species: 'Ribombee', ability: 'Fancy Scarf', item: ['Life Orb', 'Leftovers'], gender: 'F', + moves: ['Roost', 'Moonblast', ['Aura Sphere', 'U-turn']], + signatureMove: '*Worried Noises*', + evs: {hp: 4, spa: 252, spe: 252}, nature: 'Timid', teraType: 'Flying', + // The nature not being Quiet is a crime + }, + quziel: { + species: 'Chromera', ability: 'High Performance Computing', item: 'Covert Cloak', gender: 'M', + moves: ['Recover', 'Revelation Dance', 'Boomburst'], + signatureMove: 'Reshape', + evs: {def: 4, spa: 252, spe: 252}, nature: 'Timid', teraType: 'Ghost', + }, + R8: { + species: 'Chansey', ability: 'Anti-Pelau', item: 'Eviolite', gender: 'N', + moves: ['Ice Beam', 'Thunderbolt', 'Flamethrower'], + signatureMove: 'Magic Trick', + evs: {hp: 252, spa: 252, spe: 4}, ivs: {atk: 0}, nature: 'Modest', teraType: 'Ice', shiny: 256, + }, + Rainshaft: { + species: 'Xerneas', ability: 'Rainy\'s Aura', item: 'Rainium Z', gender: 'F', + moves: ['Psychic Noise', 'Sing', 'Alluring Voice'], + signatureMove: 'Sparkling Aria', + evs: {hp: 252, spa: 252, spe: 4}, nature: 'Mild', + }, + Ransei: { + species: 'Audino-Mega', ability: 'Ultra Mystik', item: 'Safety Goggles', gender: 'M', + moves: ['Psystrike', 'Transform', 'Light of Ruin'], + signatureMove: 'Flood of Lore', + evs: {hp: 252, def: 4, spa: 252}, ivs: {spe: 0}, nature: 'Modest', shiny: 2, + }, + ReturnToMonkey: { + species: 'Oranguru', ability: 'Monke See Monke Do', item: 'Twisted Spoon', gender: 'M', + moves: ['Hyper Voice', 'Psyshock', 'Focus Blast'], + signatureMove: 'Monke Magic', + evs: {hp: 252, def: 4, spa: 252}, ivs: {spe: 0}, nature: 'Quiet', teraType: 'Fighting', + }, + Rissoux: { + species: 'Arcanine-Hisui', ability: 'Hard Headed', item: 'Heavy-Duty Boots', gender: 'M', + moves: ['Head Smash', 'Flare Blitz', 'Morning Sun'], + signatureMove: 'Call of the Wild', + evs: {hp: 4, atk: 252, spe: 252}, nature: 'Jolly', teraType: 'Grass', + }, + RSB: { + species: 'Growlithe', ability: 'Hot Pursuit', item: 'Eviolite', gender: 'M', + moves: ['Fire Fang', 'Thunder Fang', 'Morning Sun'], + signatureMove: 'Confiscate', + evs: {atk: 252, def: 4, spe: 252}, nature: 'Jolly', teraType: 'Grass', + }, + Rumia: { + species: 'Duskull', ability: 'Youkai of the Dusk', item: 'Eviolite', gender: 'N', + moves: ['Infernal Parade', 'Strength Sap', 'Mortal Spin'], + signatureMove: 'Midnight Bird', + evs: {hp: 252, def: 252, spa: 4}, nature: 'Bold', teraType: 'Poison', shiny: true, + }, + Scotteh: { + species: 'Suicune', ability: 'Water Absorb', item: 'Leftovers', gender: '', + moves: ['Calm Mind', 'Scald', 'Ice Beam'], + signatureMove: 'Purification', + evs: {hp: 252, def: 252, spd: 4}, nature: 'Bold', teraType: 'Water', + }, + SexyMalasada: { + species: 'Typhlosion', ability: 'Ancestry Ritual', item: 'Life Orb', gender: 'M', + moves: ['Calm Mind', 'Aura Sphere', 'Flamethrower'], + signatureMove: 'Hexadecimal Fire', + evs: {spa: 252, spd: 4, spe: 252}, nature: 'Timid', teraType: 'Ghost', shiny: true, + }, + sharp_claw: { + species: 'Sneasel', ability: 'Regenerator', item: 'Heavy-Duty Boots', gender: 'F', + moves: ['Knock Off', 'Ice Spinner', 'Ice Shard'], + signatureMove: 'Treacherous Traversal', + evs: {atk: 252, spd: 4, spe: 252}, nature: 'Jolly', teraType: 'Poison', + }, + 'sharp_claw-Rough': { + species: 'Sneasel-Hisui', ability: 'Regenerator', item: 'Heavy-Duty Boots', gender: 'M', + moves: ['Combat Torque', 'Noxious Torque', 'Mach Punch'], + signatureMove: 'Treacherous Traversal', + evs: {atk: 252, spd: 4, spe: 252}, nature: 'Jolly', teraType: 'Poison', skip: 'sharp_claw', + }, + Siegfried: { + species: 'Ampharos', ability: 'Static', item: 'Ampharosite', gender: 'M', + moves: ['Calm Mind', 'Thunderclap', 'Draco Meteor'], + signatureMove: 'BoltBeam', + evs: {hp: 252, spa: 252, spd: 4}, nature: 'Modest', shiny: 64, + }, + 'Sificon~': { + species: 'Hoppip', ability: 'Perfectly Imperfect', item: 'Eviolite', gender: 'M', + moves: ['Strength Sap', 'Spikes', 'Seismic Toss'], + signatureMove: 'Grass Gaming', + evs: {hp: 252, def: 4, spe: 252}, ivs: {atk: 0}, nature: 'Timid', teraType: 'Dragon', + }, + skies: { + species: 'Chespin', ability: 'Spikes of Wrath', item: 'Sitrus Berry', gender: 'F', + moves: ['Bulk Up', 'Strength Sap', 'Body Press'], + signatureMove: 'Like..?', + evs: {hp: 252, atk: 4, def: 252}, nature: 'Impish', teraType: ['Water', 'Steel'], shiny: 15, + }, + snake: { + species: 'Fidgit', ability: 'Persistent', item: ['Mental Herb', 'Covert Cloak', 'Leppa Berry'], gender: 'M', + moves: ['Tailwind', 'Revival Blessing', 'Taunt'], + signatureMove: 'Concept Relevant', + evs: {hp: 252, def: 4, spe: 252}, nature: 'Jolly', teraType: 'Water', + }, + 'Soft Flex': { + species: 'Magnezone', ability: 'Adaptive Engineering', item: 'Leftovers', gender: 'N', + moves: ['Thunderbolt', 'Substitute', 'Parabolic Charge'], + signatureMove: 'Adaptive Beam', + evs: {hp: 248, def: 8, spe: 252}, nature: 'Timid', teraType: 'Flying', + }, + 'Solaros & Lunaris': { + species: 'Scovillain', ability: 'Ride the Sun!', item: 'Heavy-Duty Boots', gender: 'N', + moves: ['Solar Beam', 'Growth', 'Moonlight'], + signatureMove: 'Mind Melt', + evs: {spa: 252, spd: 4, spe: 252}, nature: 'Modest', teraType: 'Fire', + }, + Spiderz: { + species: 'Iron Thorns', ability: 'Poison Heal', item: 'Toxic Orb', gender: 'M', + moves: ['Spiky Shield', 'Stone Axe', 'Thousand Arrows'], + signatureMove: 'Shepherd of the Mafia Room', + evs: {hp: 252, atk: 252, spe: 4}, nature: 'Adamant', teraType: 'Steel', shiny: true, + }, + spoo: { + species: 'Hemogoblin', ability: 'I Can Hear The Heart Beating As One', item: 'Heavy-Duty Boots', gender: 'N', + moves: ['Extreme Speed', 'Bitter Blade', 'Moonlight'], + signatureMove: 'Cardio Training', + evs: {atk: 252, spd: 4, spe: 252}, nature: 'Adamant', teraType: 'Fairy', shiny: 32, + }, + Steorra: { + species: 'Kitsunoh', ability: 'Ghostly Hallow', item: 'Choice Band', gender: '', + moves: ['Meteor Mash', 'Shadow Strike', 'U-turn'], + signatureMove: 'Phantom Weapon', + evs: {atk: 252, spd: 4, spe: 252}, nature: 'Jolly', teraType: ['Steel', 'Ghost'], shiny: 2, + }, + Struchni: { + species: 'Aggron', ability: 'Overasked Clause', item: 'Leftovers', gender: 'M', + moves: ['Detect', 'Encore', 'U-turn'], + signatureMove: '~randfact', + evs: {hp: 252, def: 16, spd: 240}, nature: 'Careful', teraType: 'Steel', + }, + Sulo: { + species: 'Reuniclus', ability: 'Protection of the Gelatin', item: 'Life Orb', gender: 'M', + moves: ['Calm Mind', 'Draining Kiss', 'Stored Power'], + signatureMove: 'Vengeful Mood', + evs: {hp: 252, def: 252, spd: 4}, nature: 'Bold', teraType: 'Fairy', shiny: true, + }, + Swiffix: { + species: 'Piplup', ability: 'Stinky', item: 'Eviolite', gender: 'M', + moves: ['Water Shuriken', 'Nasty Plot', 'Roost'], + signatureMove: 'Stink Bomb', + evs: {hp: 252, def: 4, spa: 252}, nature: 'Modest', teraType: 'Water', + }, + Syrinix: { + species: 'Ceruledge', ability: 'Sword of Ruin', item: 'Life Orb', gender: 'N', + moves: ['Poltergeist', 'Swords Dance', 'Bitter Blade'], + signatureMove: 'A Soul for a Soul', + evs: {hp: 4, atk: 252, spe: 252}, nature: 'Adamant', teraType: 'Fire', + }, + Teclis: { + species: 'Gallade', ability: 'Sharpness', item: 'Life Orb', gender: 'M', + moves: ['Sacred Sword', 'Psycho Cut', 'Leaf Blade'], + signatureMove: 'Rising Sword', + evs: {hp: 4, atk: 252, spe: 252}, nature: 'Adamant', teraType: 'Psychic', + }, + Tenshi: { + species: 'Sandshrew', ability: 'Sand Sleuth', item: 'Eviolite', gender: 'M', + moves: ['Precipice Blades', 'Dynamic Punch', 'Rapid Spin'], + signatureMove: 'SAND EAT', + evs: {atk: 252, def: 4, spe: 252}, nature: 'Jolly', teraType: 'Ground', shiny: 10, + }, + TheJesucristoOsAma: { + species: 'Arceus', ability: 'The Grace Of Jesus Christ', gender: 'N', + item: [ + 'Draco Plate', 'Dread Plate', 'Earth Plate', 'Fist Plate', 'Flame Plate', 'Icicle Plate', 'Insect Plate', 'Iron Plate', 'Meadow Plate', + 'Mind Plate', 'Pixie Plate', 'Sky Plate', 'Splash Plate', 'Spooky Plate', 'Stone Plate', 'Toxic Plate', 'Zap Plate', + ], + moves: ['Earthquake', 'Surf', 'Judgment'], + signatureMove: 'The Love Of Christ', + evs: {hp: 4, spa: 252, spe: 252}, nature: 'Timid', + }, + Tico: { + species: 'Floette-Eternal', ability: 'Eternal Generator', item: ['Covert Cloak', 'Red Card'], gender: 'M', + moves: ['Light of Ruin', 'Lava Plume', 'Teleport'], + signatureMove: 'Eternal Wish', + evs: {hp: 252, def: 16, spe: 240}, nature: 'Timid', teraType: ['Fire', 'Steel'], shiny: false, + }, + trace: { + species: 'Delphox', ability: 'Eyes of Eternity', item: 'Life Orb', gender: 'F', + moves: ['Calm Mind', 'Inferno', 'Recover'], + signatureMove: 'Chronostasis', + evs: {spa: 252, spd: 4, spe: 252}, nature: 'Modest', teraType: 'Psychic', + }, + Tuthur: { + species: 'Scream Tail', ability: 'Poison Heal', item: 'Toxic Orb', gender: 'M', + moves: ['Spikes', 'Burning Bulwark', 'Encore'], + signatureMove: 'Symphonie du Ze\u0301ro', + evs: {hp: 244, def: 12, spe: 252}, nature: 'Timid', teraType: 'Water', + }, + 'Two of Roses': { + species: 'Luxray', ability: 'As We See', item: 'Mirror Herb', gender: 'M', + moves: ['Knock Off', 'Supercell Slam', 'Trailblaze'], + signatureMove: 'Dilly Dally', + evs: {atk: 252, spd: 4, spe: 252}, nature: 'Jolly', teraType: 'Flying', shiny: 1024, + }, + UT: { + species: 'Talonflame', ability: 'Gale Guard', item: 'Leftovers', gender: 'M', + moves: ['Brave Bird', 'Roost', 'Defog'], + signatureMove: 'My Boys', + evs: {hp: 252, def: 4, spe: 252}, nature: 'Jolly', teraType: 'Flying', + }, + Valerian: { + species: 'Lucario', ability: 'Full Bloom', item: 'Clear Amulet', gender: 'F', + moves: ['Bullet Punch', 'Mach Punch', 'Parting Shot'], + signatureMove: 'First Strike', + evs: {hp: 252, atk: 252, def: 4}, nature: 'Adamant', teraType: 'Fighting', + }, + Venous: { + species: 'Mantine', ability: 'Concrete Over Water', item: 'Leftovers', gender: '', + moves: ['Scald', 'Roost', 'Clear Smog'], + signatureMove: 'Your Crippling Interest', + evs: {hp: 248, def: 244, spd: 16}, nature: 'Calm', teraType: 'Normal', shiny: 5, + }, + 'Vio͜͡let': { + species: 'Ogerpon', ability: 'See No Evil, Hear No Evil, Speak No Evil', item: 'Berry Juice', gender: 'F', + moves: ['Crabhammer', 'Mighty Cleave', 'Fire Lash'], + signatureMove: 'building character', + evs: {atk: 252, spd: 4, spe: 252}, nature: 'Jolly', teraType: 'Stellar', + }, + Vistar: { + species: 'Zeraora', ability: 'Prankster', item: 'Throat Spray', gender: 'M', + moves: ['Encore', 'Volt Switch', 'Copycat'], + signatureMove: 'Virtual Avatar', + evs: {def: 4, spa: 252, spe: 252}, nature: 'Timid', teraType: 'Electric', + }, + 'Vistar-Idol': { + species: 'Zeraora', ability: 'Virtual Idol', item: 'Throat Spray', gender: 'M', + moves: ['Sparkling Aria', 'Torch Song', 'Teeter Dance'], + signatureMove: 'Overdrive', + evs: {def: 4, spa: 252, spe: 252}, nature: 'Timid', teraType: 'Electric', shiny: true, skip: 'Vistar', + }, + vmnunes: { + species: 'Shaymin-Sky', ability: 'Wild Growth', item: 'Big Root', gender: 'M', + moves: ['Giga Drain', 'Oblivion Wing', 'Draining Kiss'], + signatureMove: 'Gracidea\'s Blessing', + evs: {spa: 252, spd: 4, spe: 252}, nature: 'Timid', teraType: 'Fairy', + }, + WarriorGallade: { + species: 'Tropius', ability: 'Primeval Harvest', item: 'Starf Berry', gender: ['M', 'M', 'F'], + moves: ['Sunny Day', 'Natural Gift', ['Bitter Blade', 'Sappy Seed', 'Stored Power', 'Counter']], + signatureMove: 'Fruitful Longbow', + // eslint-disable-next-line max-len + evs: {hp: 184, atk: 112, def: 36, spd: 88, spe: 88}, ivs: {spa: 29}, nature: 'Impish', teraType: ['Dragon', 'Psychic', 'Fighting'], shiny: 20, + }, + Waves: { + species: 'Wailord', ability: 'Primordial Sea', item: 'Assault Vest', gender: 'M', + moves: ['Water Spout', 'Hurricane', 'Thunder'], + signatureMove: 'Torrential Drain', + evs: {spa: 252, spd: 4, spe: 252}, nature: 'Modest', teraType: 'Water', + }, + WigglyTree: { + species: 'Sudowoodo', ability: 'Tree Stance', item: 'Liechi Berry', gender: 'M', + moves: ['Shell Smash', 'Wood Hammer', 'Head Smash'], + signatureMove: 'Perfect Mimic', + evs: {atk: 252, def: 4, spe: 252}, nature: 'Adamant', teraType: 'Grass', + }, + 'XpRienzo ☑◡☑': { + species: 'Reshiram', ability: 'Turboblaze', item: 'Choice Scarf', gender: 'M', + moves: ['Draco Meteor', 'Volt Switch', 'Flash Cannon'], + signatureMove: 'Scorching Truth', + evs: {spa: 252, spd: 4, spe: 252}, nature: 'Modest', teraType: 'Fire', + }, + xy01: { + species: 'Blissey', ability: 'Panic', item: 'Heavy-Duty Boots', gender: 'M', + moves: ['Soft-Boiled', 'Seismic Toss', 'Aromatherapy'], + signatureMove: 'Poisonous Wind', + evs: {hp: 248, def: 252, spd: 8}, nature: 'Bold', teraType: 'Fairy', shiny: true, + }, + 'yeet dab xd': { + species: 'Kecleon', ability: 'Treasure Bag', item: 'Silk Scarf', gender: 'M', happiness: 0, + moves: ['Frustration', 'Shadow Sneak', 'Fake Out'], + signatureMove: 'top kek', + evs: {hp: 252, atk: 4, spd: 252}, nature: 'Careful', teraType: 'Ghost', + }, + 'Yellow Paint': { + species: 'Rotom-Frost', ability: 'Yellow Magic', item: 'Chilan Berry', gender: 'N', + moves: ['Thunderbolt', 'Blizzard', 'Ion Deluge'], + signatureMove: 'Whiteout', + evs: {hp: 252, spa: 252, spe: 4}, nature: 'Modest', teraType: 'Steel', shiny: 2, + }, + 'yuki ♪': { + species: 'Ninetales-Alola', ability: 'Party Up', item: 'Light Clay', gender: '', + moves: ['Blizzard', 'Aurora Veil', ['Encore', 'Lovely Kiss']], + signatureMove: 'Tag, You\'re It!', + evs: {hp: 4, spa: 252, spe: 252}, nature: 'Timid', teraType: 'Ghost', + }, + YveltalNL: { + species: 'Farigiraf', ability: 'Height Advantage', item: 'Leftovers', gender: 'M', + moves: ['Freezing Glare', 'Ice Beam', 'Slack Off'], + signatureMove: 'High Ground', + evs: {hp: 248, spa: 252, spe: 8}, nature: 'Modest', teraType: 'Ground', + }, + za: { + species: 'Greedent', ability: 'Troll', item: 'Leftovers', gender: 'M', + moves: ['Headbutt', 'Iron Head', 'Foul Play'], + signatureMove: 'Shitpost', + evs: {hp: 252, def: 252, spe: 6}, nature: 'Impish', teraType: 'Steel', + }, + Zalm: { + species: 'Weedle', ability: 'Water Bubble', item: 'Clear Amulet', gender: '', + moves: ['Surging Strikes', 'Attack Order', 'Dire Claw'], + signatureMove: 'Dud ur a fish', + evs: {hp: 4, atk: 252, spe: 252}, nature: 'Adamant', teraType: 'Water', + }, + Zarel: { + species: 'Meloetta', ability: 'Tempo Change', item: 'Leftovers', gender: 'M', + moves: ['Psystrike', 'Armor Cannon', 'Obstruct'], + signatureMove: '@ts-ignore', + evs: {def: 4, spa: 252, spe: 252}, nature: 'Timid', teraType: 'Stellar', + }, + 'Zarel-Pirouette': { + species: 'Meloetta-Pirouette', ability: 'Tempo Change', item: 'Leftovers', gender: 'M', + moves: ['Close Combat', 'Knock Off', 'Silk Trap'], + signatureMove: '@ts-ignore', + evs: {atk: 252, def: 4, spe: 252}, nature: 'Jolly', teraType: 'Stellar', skip: 'Zarel', + }, + zee: { + species: 'Lilligant-Hisui', ability: 'Chlorophyll', item: 'Heat Rock', gender: 'F', + moves: [['Close Combat', 'Axe Kick'], ['Solar Blade', 'Seed Bomb'], 'Victory Dance'], + signatureMove: 'Solar Summon', + evs: {hp: 80, atk: 176, spe: 252}, nature: 'Adamant', teraType: 'Fire', + }, + zoro: { + species: 'Umbreon', ability: 'Nine Lives', item: 'Leftovers', gender: 'M', + moves: ['Wish', 'Protect', 'Toxic'], + signatureMove: 'Darkest Night', + evs: {hp: 252, def: 240, spd: 16}, nature: 'Calm', teraType: 'Steel', shiny: true, + }, +}; + +const afdSSBSets: SSBSets = { + 'Fox': { + species: 'Fennekin', ability: 'No Ability', item: '', gender: '', + moves: [], + signatureMove: 'Super Metronome', + }, +}; + +export class RandomStaffBrosTeams extends RandomTeams { + randomStaffBrosTeam(options: {inBattle?: boolean} = {}) { + this.enforceNoDirectCustomBanlistChanges(); + + const team: PokemonSet[] = []; + const debug: string[] = []; // Set this to a list of SSB sets to override the normal pool for debugging. + const ruleTable = this.dex.formats.getRuleTable(this.format); + const meme = ruleTable.has('dynamaxclause') && !debug.length; + const monotype = this.forceMonotype || (ruleTable.has('sametypeclause') ? + this.sample([...this.dex.types.names().filter(x => x !== 'Stellar')]) : false); + + let pool = meme ? Object.keys(afdSSBSets) : Object.keys(ssbSets); + if (debug.length) { + while (debug.length < 6) { + const staff = this.sampleNoReplace(pool); + if (debug.includes(staff) || ssbSets[staff].skip) continue; + debug.push(staff); + } + pool = debug; + } + if (monotype && !debug.length) { + pool = pool.filter(x => this.dex.species.get(ssbSets[x].species).types.includes(monotype)); + } + if (global.Config?.disabledssbsets?.length) { + pool = pool.filter(x => !global.Config.disabledssbsets.includes(this.dex.toID(x))); + } + const typePool: {[k: string]: number} = {}; + let depth = 0; + while (pool.length && team.length < this.maxTeamSize) { + if (depth >= 200) throw new Error(`Infinite loop in Super Staff Bros team generation.`); + depth++; + const name = meme ? this.sample(pool) : this.sampleNoReplace(pool); + const ssbSet: SSBSet = meme ? this.dex.deepClone(afdSSBSets[name]) : this.dex.deepClone(ssbSets[name]); + if (ssbSet.skip) continue; + + // Enforce typing limits + if (!(debug.length || monotype || meme)) { // Type limits are ignored for debugging, monotype, or memes. + const species = this.dex.species.get(ssbSet.species); + + const weaknesses = []; + for (const type of this.dex.types.names()) { + const typeMod = this.dex.getEffectiveness(type, species.types); + if (typeMod > 0) weaknesses.push(type); + } + let rejected = false; + for (const type of weaknesses) { + if (typePool[type] === undefined) typePool[type] = 0; + if (typePool[type] >= 3) { + // Reject + rejected = true; + break; + } + } + if (ssbSet.ability === 'Wonder Guard') { + if (!typePool['wonderguard']) { + typePool['wonderguard'] = 1; + } else { + rejected = true; + } + } + if (rejected) continue; + // Update type counts + for (const type of weaknesses) { + typePool[type]++; + } + } + + let teraType: string | undefined; + if (ssbSet.teraType) { + teraType = ssbSet.teraType === 'Any' ? + this.sample(this.dex.types.names()) : + this.sampleIfArray(ssbSet.teraType); + } + const moves: string[] = []; + while (moves.length < 3 && ssbSet.moves.length > 0) { + let move = this.sampleNoReplace(ssbSet.moves); + if (Array.isArray(move)) move = this.sampleNoReplace(move); + moves.push(this.dex.moves.get(move).name); + } + moves.push(this.dex.moves.get(ssbSet.signatureMove).name); + const ivs = {...{hp: 31, atk: 31, def: 31, spa: 31, spd: 31, spe: 31}, ...ssbSet.ivs}; + if (!moves.map(x => this.dex.moves.get(x)).some(x => x.category === 'Physical')) { + ivs.atk = 0; + } + + const set: PokemonSet = { + name, + species: ssbSet.species, + item: this.sampleIfArray(ssbSet.item), + ability: this.sampleIfArray(ssbSet.ability), + moves, + nature: ssbSet.nature ? Array.isArray(ssbSet.nature) ? this.sampleNoReplace(ssbSet.nature) : ssbSet.nature : 'Serious', + gender: ssbSet.gender ? this.sampleIfArray(ssbSet.gender) : this.sample(['M', 'F', 'N']), + evs: ssbSet.evs ? {...{hp: 0, atk: 0, def: 0, spa: 0, spd: 0, spe: 0}, ...ssbSet.evs} : + {hp: 84, atk: 84, def: 84, spa: 84, spd: 84, spe: 84}, + ivs, + level: this.adjustLevel || ssbSet.level || 100, + happiness: typeof ssbSet.happiness === 'number' ? ssbSet.happiness : 255, + shiny: typeof ssbSet.shiny === 'number' ? this.randomChance(1, ssbSet.shiny) : !!ssbSet.shiny, + }; + + // Any set specific tweaks occur here. + if (set.name === "Felucia") { + const cmIndex = set.moves.indexOf("Calm Mind"); + if (cmIndex >= 0 && set.moves.includes("Night Shade")) { + set.moves[cmIndex] = this.sample(["Thief", "Toxic"]); + } + } + if (set.name === "Frostyicelad" && set.shiny) { + const moveIndex = Math.max(set.moves.indexOf('Dire Claw'), + set.moves.indexOf('Meteor Mash'), set.moves.indexOf('Bitter Malice')); + if (moveIndex >= 0) { + set.moves[moveIndex] = 'Fishious Rend'; + teraType = 'Water'; + } + } + + if (teraType) set.teraType = teraType; + + team.push(set); + + // Team specific tweaks occur here + // Swap last and second to last sets if last set has Illusion + if (team.length === this.maxTeamSize && (set.ability === 'Illusion')) { + team[this.maxTeamSize - 1] = team[this.maxTeamSize - 2]; + team[this.maxTeamSize - 2] = set; + } + } + return team; + } +} + +export default RandomStaffBrosTeams; diff --git a/data/mods/gen9ssb/rulesets.ts b/data/mods/gen9ssb/rulesets.ts new file mode 100644 index 000000000000..c5f7cf7d79b8 --- /dev/null +++ b/data/mods/gen9ssb/rulesets.ts @@ -0,0 +1,25 @@ +export const Rulesets: import('../../../sim/dex-formats').ModdedFormatDataTable = { + sleepclausemod: { + inherit: true, + onSetStatus(status, target, source) { + if (source && source.isAlly(target)) { + return; + } + if (status.id === 'slp') { + for (const pokemon of target.side.pokemon) { + if (pokemon.hp && pokemon.status === 'slp') { + if (!pokemon.statusState.source || !pokemon.statusState.source.isAlly(pokemon)) { + if (source.hasAbility('ididitagain')) { + this.add('-ability', source, 'I Did It Again'); + return; + } + this.add('-message', 'Sleep Clause Mod activated.'); + this.hint("Sleep Clause Mod prevents players from putting more than one of their opponent's Pokémon to sleep at a time"); + return false; + } + } + } + } + }, + }, +}; diff --git a/data/mods/gen9ssb/scripts.ts b/data/mods/gen9ssb/scripts.ts new file mode 100644 index 000000000000..3fe0e55a73b8 --- /dev/null +++ b/data/mods/gen9ssb/scripts.ts @@ -0,0 +1,2097 @@ +import {SSBSet} from "./random-teams"; +import {ChosenAction} from '../../../sim/side'; +import {FS} from '../../../lib'; +import {toID} from '../../../sim/dex-data'; + +// Similar to User.usergroups. Cannot import here due to users.ts requiring Chat +// This also acts as a cache, meaning ranks will only update when a hotpatch/restart occurs +const usergroups: {[userid: string]: string} = {}; +const usergroupData = FS('config/usergroups.csv').readIfExistsSync().split('\n'); +for (const row of usergroupData) { + if (!toID(row)) continue; + + const cells = row.split(','); + if (cells.length > 3) throw new Error(`Invalid entry when parsing usergroups.csv`); + usergroups[toID(cells[0])] = cells[1].trim() || ' '; +} + +const roomauth: {[roomid: string]: {[userid: string]: string}} = {}; +/** + * Given a username and room, returns the auth they have in that room. Used for some conditional messages/effects. + * Each room is cached on the first call until the process is restarted. + */ +export function getRoomauth(name: string, room: string) { + const userid = toID(name); + const roomid = toID(room); + if (roomauth[roomid]) return roomauth[roomid][userid] || null; + const roomsList: any[] = JSON.parse(FS('config/chatrooms.json').readIfExistsSync() || '[]'); + const roomData = roomsList.find(r => toID(r.title) === roomid); + if (!roomData) return null; + roomauth[roomid] = roomData.auth; + return roomauth[roomid][userid] || null; +} + +export function getName(name: string): string { + const userid = toID(name); + if (!userid) throw new Error('No/Invalid name passed to getSymbol'); + + let group = usergroups[userid] || ' '; + if (name === 'Artemis') group = '@'; + if (name === 'Jeopard-E' || name === 'Ice Kyubs') group = '*'; + return Math.floor(Date.now() / 1000) + '|' + group + name; +} + +export function enemyStaff(pokemon: Pokemon): string { + const foePokemon = pokemon.side.foe.active[0]; + if (foePokemon.illusion) return foePokemon.illusion.name; + return foePokemon.name; +} + +/** TODO: What happened to make this work weird? + * Assigns a new set to a Pokémon + * @param pokemon the Pokemon to assign the set to + * @param newSet the SSBSet to assign + */ +export function changeSet(context: Battle, pokemon: Pokemon, newSet: SSBSet, changeAbility = false) { + if (pokemon.transformed) return; + const evs: StatsTable = { + hp: newSet.evs?.hp || 0, + atk: newSet.evs?.atk || 0, + def: newSet.evs?.def || 0, + spa: newSet.evs?.spa || 0, + spd: newSet.evs?.spd || 0, + spe: newSet.evs?.spe || 0, + }; + const ivs: StatsTable = { + hp: newSet.ivs?.hp || 31, + atk: newSet.ivs?.atk || 31, + def: newSet.ivs?.def || 31, + spa: newSet.ivs?.spa || 31, + spd: newSet.ivs?.spd || 31, + spe: newSet.ivs?.spe || 31, + }; + pokemon.set.evs = evs; + pokemon.set.ivs = ivs; + if (newSet.nature) pokemon.set.nature = Array.isArray(newSet.nature) ? context.sample(newSet.nature) : newSet.nature; + const oldGender = pokemon.set.gender; + if ((pokemon.set.gender !== newSet.gender) && !Array.isArray(newSet.gender)) { + pokemon.set.gender = newSet.gender; + // @ts-ignore Shut up sharp_claw wanted this + pokemon.gender = newSet.gender; + } + const oldShiny = pokemon.set.shiny; + pokemon.set.shiny = (typeof newSet.shiny === 'number') ? context.randomChance(1, newSet.shiny) : !!newSet.shiny; + let percent = (pokemon.hp / pokemon.baseMaxhp); + if (newSet.species === 'Shedinja') percent = 1; + pokemon.formeChange(newSet.species, context.effect, true); + if (!pokemon.terastallized && newSet.teraType) { + const allTypes = context.dex.types.names(); + pokemon.teraType = newSet.teraType === 'Any' ? context.sample(allTypes) : + Array.isArray(newSet.teraType) ? context.sample(newSet.teraType) : newSet.teraType; + } + const details = pokemon.species.name + (pokemon.level === 100 ? '' : ', L' + pokemon.level) + + (pokemon.gender === '' ? '' : ', ' + pokemon.gender) + (pokemon.set.shiny ? ', shiny' : ''); + if (oldShiny !== pokemon.set.shiny || oldGender !== pokemon.gender) context.add('replace', pokemon, details); + if (changeAbility) pokemon.setAbility(newSet.ability as string, undefined, true); + + pokemon.baseMaxhp = pokemon.species.name === 'Shedinja' ? 1 : Math.floor(Math.floor( + 2 * pokemon.species.baseStats.hp + pokemon.set.ivs.hp + Math.floor(pokemon.set.evs.hp / 4) + 100 + ) * pokemon.level / 100 + 10); + const newMaxHP = pokemon.baseMaxhp; + pokemon.hp = Math.round(newMaxHP * percent); + pokemon.maxhp = newMaxHP; + context.add('-heal', pokemon, pokemon.getHealth, '[silent]'); + if (pokemon.item) { + let item = newSet.item; + if (typeof item !== 'string') item = item[context.random(item.length)]; + if (context.toID(item) !== (pokemon.item || pokemon.lastItem)) pokemon.setItem(item); + } + if (!pokemon.m.datacorrupt) { + const newMoves = changeMoves(context, pokemon, newSet.moves.concat(newSet.signatureMove)); + pokemon.moveSlots = newMoves; + // Necessary so pokemon doesn't get 8 moves + (pokemon as any).baseMoveSlots = newMoves; + } + pokemon.canMegaEvo = context.actions.canMegaEvo(pokemon); + pokemon.canUltraBurst = context.actions.canUltraBurst(pokemon); + pokemon.canTerastallize = (pokemon.canTerastallize === null) ? null : context.actions.canTerastallize(pokemon); + context.add('message', `${pokemon.name} changed form!`); +} + +export const PSEUDO_WEATHERS = [ + // Normal pseudo weathers + 'fairylock', 'gravity', 'iondeluge', 'magicroom', 'mudsport', 'trickroom', 'watersport', 'wonderroom', + // SSB pseudo weathers + 'anfieldatmosphere', +]; + +/** + * Assigns new moves to a Pokemon + * @param pokemon The Pokemon whose moveset is to be modified + * @param newSet The set whose moves should be assigned + */ +export function changeMoves(context: Battle, pokemon: Pokemon, newMoves: (string | string[])[]) { + const carryOver = pokemon.moveSlots.slice().map(m => m.pp / m.maxpp); + // In case there are ever less than 4 moves + while (carryOver.length < 4) { + carryOver.push(1); + } + const result = []; + let slot = 0; + for (const newMove of newMoves) { + 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 moveSlot = { + move: move.name, + id: move.id, + // eslint-disable-next-line max-len + pp: ((move.noPPBoosts || move.isZ) ? Math.floor(move.pp * carryOver[slot]) : Math.floor((move.pp * (8 / 5)) * carryOver[slot])), + maxpp: ((move.noPPBoosts || move.isZ) ? move.pp : move.pp * 8 / 5), + target: move.target, + disabled: false, + disabledSource: '', + used: false, + }; + result.push(moveSlot); + slot++; + } + return result; +} + +export const Scripts: ModdedBattleScriptsData = { + gen: 9, + inherit: 'gen9', + boost(boost, target, source, effect, isSecondary, isSelf) { + if (this.event) { + if (!target) target = this.event.target; + if (!source) source = this.event.source; + if (!effect) effect = this.effect; + } + if (!target?.hp) return 0; + if (!target.isActive) return false; + if (this.gen > 5 && !target.side.foePokemonLeft()) return false; + boost = this.runEvent('ChangeBoost', target, source, effect, {...boost}); + boost = target.getCappedBoost(boost); + boost = this.runEvent('TryBoost', target, source, effect, {...boost}); + let success = null; + let boosted = isSecondary; + let boostName: BoostID; + if (target.set.name === 'phoopes') { + if (boost.spa) { + boost.spd = boost.spa; + } + if (boost.spd) { + boost.spa = boost.spd; + } + } + for (boostName in boost) { + const currentBoost: SparseBoostsTable = { + [boostName]: boost[boostName], + }; + let boostBy = target.boostBy(currentBoost); + let msg = '-boost'; + if (boost[boostName]! < 0 || target.boosts[boostName] === -6) { + msg = '-unboost'; + boostBy = -boostBy; + } + if (boostBy) { + success = true; + switch (effect?.id) { + case 'bellydrum': case 'angerpoint': + this.add('-setboost', target, 'atk', target.boosts['atk'], '[from] ' + effect.fullname); + break; + case 'bellydrum2': + this.add(msg, target, boostName, boostBy, '[silent]'); + this.hint("In Gen 2, Belly Drum boosts by 2 when it fails."); + break; + case 'zpower': + this.add(msg, target, boostName, boostBy, '[zeffect]'); + break; + default: + if (!effect) break; + if (effect.effectType === 'Move') { + this.add(msg, target, boostName, boostBy); + } else if (effect.effectType === 'Item') { + this.add(msg, target, boostName, boostBy, '[from] item: ' + effect.name); + } else { + if (effect.effectType === 'Ability' && !boosted) { + this.add('-ability', target, effect.name, 'boost'); + boosted = true; + } + this.add(msg, target, boostName, boostBy); + } + break; + } + this.runEvent('AfterEachBoost', target, source, effect, currentBoost); + } else if (effect?.effectType === 'Ability') { + if (isSecondary || isSelf) this.add(msg, target, boostName, boostBy); + } else if (!isSecondary && !isSelf) { + this.add(msg, target, boostName, boostBy); + } + } + this.runEvent('AfterBoost', target, source, effect, boost); + if (success) { + if (Object.values(boost).some(x => x > 0)) target.statsRaisedThisTurn = true; + if (Object.values(boost).some(x => x < 0)) target.statsLoweredThisTurn = true; + } + return success; + }, + getActionSpeed(action) { + if (action.choice === 'move') { + let move = action.move; + if (action.zmove) { + const zMoveName = this.actions.getZMove(action.move, action.pokemon, true); + if (zMoveName) { + const zMove = this.dex.getActiveMove(zMoveName); + if (zMove.exists && zMove.isZ) { + move = zMove; + } + } + } + if (action.maxMove) { + const maxMoveName = this.actions.getMaxMove(action.maxMove, action.pokemon); + if (maxMoveName) { + const maxMove = this.actions.getActiveMaxMove(action.move, action.pokemon); + if (maxMove.exists && maxMove.isMax) { + move = maxMove; + } + } + } + // WHY DOES onModifyPriority TAKE A TARGET ARG WHEN IT IS ALWAYS NULL????? + const target = this.getTarget(action.pokemon, action.move, action.targetLoc); + // take priority from the base move, so abilities like Prankster only apply once + // (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, 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; + } + + if (!action.pokemon) { + action.speed = 1; + } else { + action.speed = action.pokemon.getActionSpeed(); + } + }, + // For some god forsaken reason removing the boolean declarations causes the "battles dont end automatically" bug + // I don't know why but in any case please don't touch this unless you know how to fix this + 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.isActive) { + this.add('message', `${pokemon.name} was killed by ${pokemon.side.name}!`); + // TODO: Custom Protocol needed for teambar update + } else { + 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); + pokemon.clearVolatile(false); + pokemon.fainted = true; + pokemon.illusion = null; + pokemon.isActive = false; + pokemon.isStarted = false; + delete pokemon.terastallized; + 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'] && 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; + }, + checkMoveMakesContact(move, attacker, defender, announcePads) { + if (move.flags['contact'] && attacker.hasItem('protectivepads')) { + if (announcePads) { + this.add('-activate', defender, this.effect.fullname); + this.add('-activate', attacker, 'item: Protective Pads'); + } + return false; + } + if (move.id === 'wonderwing') return false; + return !!move.flags['contact']; + }, + // Fake switch needed for HiZo's Scapegoat + runAction(action) { + const pokemonOriginalHP = action.pokemon?.hp; + let residualPokemon: (readonly [Pokemon, number])[] = []; + // returns whether or not we ended in a callback + switch (action.choice) { + case 'start': { + for (const side of this.sides) { + if (side.pokemonLeft) side.pokemonLeft = side.pokemon.length; + } + + this.add('start'); + + // Change Zacian/Zamazenta into their Crowned formes + for (const pokemon of this.getAllPokemon()) { + let rawSpecies: Species | null = null; + if (pokemon.species.id === 'zacian' && pokemon.item === 'rustedsword') { + rawSpecies = this.dex.species.get('Zacian-Crowned'); + } else if (pokemon.species.id === 'zamazenta' && pokemon.item === 'rustedshield') { + rawSpecies = this.dex.species.get('Zamazenta-Crowned'); + } + if (!rawSpecies) continue; + const species = pokemon.setSpecies(rawSpecies); + if (!species) continue; + pokemon.baseSpecies = rawSpecies; + pokemon.details = species.name + (pokemon.level === 100 ? '' : ', L' + pokemon.level) + + (pokemon.gender === '' ? '' : ', ' + pokemon.gender) + (pokemon.set.shiny ? ', shiny' : ''); + // pokemon.setAbility(species.abilities['0'], null, true); + // pokemon.baseAbility = pokemon.ability; + + const behemothMove: {[k: string]: string} = { + 'Zacian-Crowned': 'behemothblade', 'Zamazenta-Crowned': 'behemothbash', + }; + const ironHead = pokemon.baseMoves.indexOf('ironhead'); + if (ironHead >= 0) { + const move = this.dex.moves.get(behemothMove[rawSpecies.name]); + pokemon.baseMoveSlots[ironHead] = { + move: move.name, + id: move.id, + pp: (move.noPPBoosts || move.isZ) ? move.pp : move.pp * 8 / 5, + maxpp: (move.noPPBoosts || move.isZ) ? move.pp : move.pp * 8 / 5, + target: move.target, + disabled: false, + disabledSource: '', + used: false, + }; + pokemon.moveSlots = pokemon.baseMoveSlots.slice(); + } + } + + if (this.format.onBattleStart) this.format.onBattleStart.call(this); + for (const rule of this.ruleTable.keys()) { + if ('+*-!'.includes(rule.charAt(0))) continue; + const subFormat = this.dex.formats.get(rule); + if (subFormat.onBattleStart) subFormat.onBattleStart.call(this); + } + + for (const side of this.sides) { + for (let i = 0; i < side.active.length; i++) { + if (!side.pokemonLeft) { + // forfeited before starting + side.active[i] = side.pokemon[i]; + side.active[i].fainted = true; + side.active[i].hp = 0; + } else { + this.actions.switchIn(side.pokemon[i], i); + } + } + } + for (const pokemon of this.getAllPokemon()) { + this.singleEvent('Start', this.dex.conditions.getByID(pokemon.species.id), pokemon.speciesState, pokemon); + } + this.midTurn = true; + break; + } + + case 'move': + if (!action.pokemon.isActive) return false; + if (action.pokemon.fainted) return false; + this.actions.runMove(action.move, action.pokemon, action.targetLoc, { + sourceEffect: action.sourceEffect, zMove: action.zmove, + maxMove: action.maxMove, originalTarget: action.originalTarget, + }); + break; + case 'megaEvo': + this.actions.runMegaEvo(action.pokemon); + break; + case 'runDynamax': + action.pokemon.addVolatile('dynamax'); + action.pokemon.side.dynamaxUsed = true; + if (action.pokemon.side.allySide) action.pokemon.side.allySide.dynamaxUsed = true; + break; + case 'terastallize': + this.actions.terastallize(action.pokemon); + break; + case 'beforeTurnMove': + if (!action.pokemon.isActive) return false; + if (action.pokemon.fainted) return false; + this.debug('before turn callback: ' + action.move.id); + const target = this.getTarget(action.pokemon, action.move, action.targetLoc); + if (!target) return false; + if (!action.move.beforeTurnCallback) throw new Error(`beforeTurnMove has no beforeTurnCallback`); + action.move.beforeTurnCallback.call(this, action.pokemon, target); + break; + case 'priorityChargeMove': + if (!action.pokemon.isActive) return false; + if (action.pokemon.fainted) return false; + this.debug('priority charge callback: ' + action.move.id); + if (!action.move.priorityChargeCallback) throw new Error(`priorityChargeMove has no priorityChargeCallback`); + action.move.priorityChargeCallback.call(this, action.pokemon); + break; + + case 'event': + this.runEvent(action.event!, action.pokemon); + break; + case 'team': + if (action.index === 0) { + action.pokemon.side.pokemon = []; + } + action.pokemon.side.pokemon.push(action.pokemon); + action.pokemon.position = action.index; + // we return here because the update event would crash since there are no active pokemon yet + return; + + case 'pass': + return; + case 'instaswitch': + case 'switch': + if (action.choice === 'switch' && action.pokemon.status) { + this.singleEvent('CheckShow', this.dex.abilities.getByID('naturalcure' as ID), null, action.pokemon); + } + if (this.actions.switchIn(action.target, action.pokemon.position, action.sourceEffect) === 'pursuitfaint') { + // a pokemon fainted from Pursuit before it could switch + if (this.gen <= 4) { + // in gen 2-4, the switch still happens + this.hint("Previously chosen switches continue in Gen 2-4 after a Pursuit target faints."); + action.priority = -101; + this.queue.unshift(action); + break; + } else { + // in gen 5+, the switch is cancelled + this.hint("A Pokemon can't switch between when it runs out of HP and when it faints"); + break; + } + } + break; + case 'revivalblessing': + action.pokemon.side.pokemonLeft++; + if (action.target.position < action.pokemon.side.active.length) { + this.queue.addChoice({ + choice: 'instaswitch', + pokemon: action.target, + target: action.target, + }); + } + action.target.fainted = false; + action.target.faintQueued = false; + action.target.subFainted = false; + action.target.status = ''; + action.target.hp = 1; // Needed so hp functions works + action.target.sethp(action.target.maxhp / 2); + this.add('-heal', action.target, action.target.getHealth, '[from] move: Revival Blessing'); + action.pokemon.side.removeSlotCondition(action.pokemon, 'revivalblessing'); + break; + // @ts-ignore I'm sorry but it takes a lot + case 'scapegoat': + // @ts-ignore + const percent = (action.target.hp / action.target.baseMaxhp) * 100; + // @ts-ignore TODO: Client support for custom faint + action.target.faint(); + if (percent > 66) { + this.add('message', `Your courage will be greatly rewarded.`); + // @ts-ignore + this.boost({atk: 3, spa: 3, spe: 3}, action.pokemon, action.pokemon, this.dex.moves.get('scapegoat')); + } else if (percent > 33) { + this.add('message', `Your offering was accepted.`); + // @ts-ignore + this.boost({atk: 2, spa: 2, spe: 2}, action.pokemon, action.pokemon, this.dex.moves.get('scapegoat')); + } else { + this.add('message', `Coward.`); + // @ts-ignore + this.boost({atk: 1, spa: 1, spe: 1}, action.pokemon, action.pokemon, this.dex.moves.get('scapegoat')); + } + // @ts-ignore + this.add(`c:|${getName((action.pokemon.illusion || action.pokemon).name)}|Don't worry, if this plan fails we can just blame ${action.target.name}`); + // @ts-ignore + action.pokemon.side.removeSlotCondition(action.pokemon, 'scapegoat'); + break; + case 'runUnnerve': + this.singleEvent('PreStart', action.pokemon.getAbility(), action.pokemon.abilityState, action.pokemon); + break; + case 'runSwitch': + this.actions.runSwitch(action.pokemon); + break; + case 'runPrimal': + if (!action.pokemon.transformed) { + this.singleEvent('Primal', action.pokemon.getItem(), action.pokemon.itemState, action.pokemon); + } + break; + case 'shift': + if (!action.pokemon.isActive) return false; + if (action.pokemon.fainted) return false; + this.swapPosition(action.pokemon, 1); + break; + + case 'beforeTurn': + this.eachEvent('BeforeTurn'); + break; + case 'residual': + this.add(''); + this.clearActiveMove(true); + this.updateSpeed(); + residualPokemon = this.getAllActive().map(pokemon => [pokemon, pokemon.getUndynamaxedHP()] as const); + this.residualEvent('Residual'); + this.add('upkeep'); + break; + } + + // phazing (Roar, etc) + for (const side of this.sides) { + for (const pokemon of side.active) { + if (pokemon.forceSwitchFlag) { + if (pokemon.hp) this.actions.dragIn(pokemon.side, pokemon.position); + pokemon.forceSwitchFlag = false; + } + } + } + + this.clearActiveMove(); + + // fainting + + this.faintMessages(); + if (this.ended) return true; + + // switching (fainted pokemon, U-turn, Baton Pass, etc) + + if (!this.queue.peek() || (this.gen <= 3 && ['move', 'residual'].includes(this.queue.peek()!.choice))) { + // in gen 3 or earlier, switching in fainted pokemon is done after + // every move, rather than only at the end of the turn. + this.checkFainted(); + } else if (action.choice === 'megaEvo' && this.gen === 7) { + this.eachEvent('Update'); + // In Gen 7, the action order is recalculated for a Pokémon that mega evolves. + for (const [i, queuedAction] of this.queue.list.entries()) { + if (queuedAction.pokemon === action.pokemon && queuedAction.choice === 'move') { + this.queue.list.splice(i, 1); + queuedAction.mega = 'done'; + this.queue.insertChoice(queuedAction, true); + break; + } + } + return false; + } else if (this.queue.peek()?.choice === 'instaswitch') { + return false; + } + + if (this.gen >= 5) { + this.eachEvent('Update'); + for (const [pokemon, originalHP] of residualPokemon) { + const maxhp = pokemon.getUndynamaxedHP(pokemon.maxhp); + if (pokemon.hp && pokemon.getUndynamaxedHP() <= maxhp / 2 && originalHP > maxhp / 2) { + this.runEvent('EmergencyExit', pokemon); + } + } + } + + if (action.choice === 'runSwitch') { + const pokemon = action.pokemon; + if (pokemon.hp && pokemon.hp <= pokemon.maxhp / 2 && pokemonOriginalHP! > pokemon.maxhp / 2) { + this.runEvent('EmergencyExit', pokemon); + } + } + + const switches = this.sides.map( + side => side.active.some(pokemon => pokemon && !!pokemon.switchFlag) + ); + + for (let i = 0; i < this.sides.length; i++) { + let reviveSwitch = false; // Used to ignore the fake switch for Revival Blessing + if (switches[i] && !this.canSwitch(this.sides[i])) { + for (const pokemon of this.sides[i].active) { + if (this.sides[i].slotConditions[pokemon.position]['revivalblessing'] || + this.sides[i].slotConditions[pokemon.position]['scapegoat']) { + reviveSwitch = true; + continue; + } + pokemon.switchFlag = false; + } + if (!reviveSwitch) switches[i] = false; + } else if (switches[i]) { + for (const pokemon of this.sides[i].active) { + if (pokemon.hp && pokemon.switchFlag && pokemon.switchFlag !== 'revivalblessing' && + pokemon.switchFlag !== 'scapegoat' && !pokemon.skipBeforeSwitchOutEventFlag) { + this.runEvent('BeforeSwitchOut', pokemon); + pokemon.skipBeforeSwitchOutEventFlag = true; + this.faintMessages(); // Pokemon may have fainted in BeforeSwitchOut + if (this.ended) return true; + if (pokemon.fainted) { + switches[i] = this.sides[i].active.some(sidePokemon => sidePokemon && !!sidePokemon.switchFlag); + } + } + } + } + } + + for (const playerSwitch of switches) { + if (playerSwitch) { + this.makeRequest('switch'); + return true; + } + } + + if (this.gen < 5) this.eachEvent('Update'); + + if (this.gen >= 8 && (this.queue.peek()?.choice === 'move' || this.queue.peek()?.choice === 'runDynamax')) { + // 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) { + if (queueAction.pokemon) this.getActionSpeed(queueAction); + } + this.queue.sort(); + } + + return false; + }, + actions: { + terastallize(pokemon) { + 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') { + const tera = pokemon.species.id === 'ogerpon' ? 'tealtera' : 'tera'; + pokemon.formeChange(pokemon.species.id + tera, null, true); + } + if (pokemon.species.name === 'Terapagos-Terastal' && type === 'Stellar') { + pokemon.formeChange('Terapagos-Stellar', null, true); + pokemon.baseMaxhp = Math.floor(Math.floor( + 2 * pokemon.species.baseStats['hp'] + pokemon.set.ivs['hp'] + Math.floor(pokemon.set.evs['hp'] / 4) + 100 + ) * pokemon.level / 100 + 10); + const newMaxHP = pokemon.baseMaxhp; + pokemon.hp = newMaxHP - (pokemon.maxhp - pokemon.hp); + pokemon.maxhp = newMaxHP; + this.battle.add('-heal', pokemon, pokemon.getHealth, '[silent]'); + } + if (!pokemon.illusion && pokemon.name === 'Neko') { + this.battle.add(`c:|${getName('Neko')}|Possible thermal failure if operation continues (Meow on fire ?)`); + } + this.battle.runEvent('AfterTerastallization', pokemon); + }, + 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 = move.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 && !pokemon.hasAbility('Almost Frosty') ? 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))); + } else { + if (move.id === 'megidolaon') delete move.volatileStatus; + } + + // 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)) { + stab = isSTAB ? 2 : [4915, 4096]; + if (!(pokemon.species.name === 'Terapagos-Stellar' || pokemon.species.baseSpecies === 'Meloetta')) { + 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', 'fortifiedmetal'])) { + 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); + }, + switchIn(pokemon, pos, sourceEffect, 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 + + oldActive.illusion = null; + this.battle.singleEvent('End', oldActive.getAbility(), oldActive.abilityState, 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; + // ptoad + delete oldActive.m.usedPleek; + delete oldActive.m.usedPlagiarism; + oldActive.position = pokemon.position; + 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; + } + this.battle.runEvent('BeforeSwitchIn', pokemon); + if (sourceEffect) { + this.battle.add(isDrag ? 'drag' : 'switch', pokemon, pokemon.getDetails, '[from] ' + sourceEffect); + } else { + this.battle.add(isDrag ? 'drag' : 'switch', pokemon, pokemon.getDetails); + } + pokemon.abilityOrder = this.battle.abilityOrder++; + 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.battle.singleEvent('PreStart', pokemon.getAbility(), pokemon.abilityState, pokemon); + this.runSwitch(pokemon); + } else { + this.battle.queue.insertChoice({choice: 'runUnnerve', pokemon}); + this.battle.queue.insertChoice({choice: 'runSwitch', pokemon}); + } + + return true; + }, + canTerastallize(pokemon) { + if ( + pokemon.terastallized || pokemon.species.isMega || pokemon.species.isPrimal || pokemon.species.forme === "Ultra" || + pokemon.getItem().zMove || pokemon.canMegaEvo || pokemon.side.canDynamaxNow() || this.dex.gen !== 9 + ) { + return null; + } + if (pokemon.baseSpecies.id === 'arceus') return null; + return pokemon.teraType; + }, + // 1 mega per pokemon + runMegaEvo(pokemon) { + const speciesid = pokemon.canMegaEvo || pokemon.canUltraBurst; + if (!speciesid) return false; + + if (speciesid === 'Trapinch' && pokemon.name === 'Arya') { + this.battle.add(`c:|${getName('Arya')}|Oh yeaaaaah!!!!! Finally??!! I can finally Mega-Evolve!!! Vamossss`); + } + + pokemon.formeChange(speciesid, pokemon.getItem(), true); + if (pokemon.canMegaEvo) { + pokemon.canMegaEvo = null; + } else { + pokemon.canUltraBurst = null; + } + + this.battle.runEvent('AfterMega', pokemon); + + // Visual mega type changes here + if (['Arya'].includes(pokemon.name) && !pokemon.illusion) { + this.battle.add('-start', pokemon, 'typechange', pokemon.getTypes(true).join('/'), '[silent]'); + } + + this.battle.add('-ability', pokemon, `${pokemon.getAbility().name}`); + + return true; + }, + + // Modded for Mega Rayquaza + canMegaEvo(pokemon) { + const species = pokemon.baseSpecies; + const altForme = species.otherFormes && this.dex.species.get(species.otherFormes[0]); + const item = pokemon.getItem(); + // Mega Rayquaza + if (altForme?.isMega && altForme?.requiredMove && + pokemon.baseMoves.includes(this.battle.toID(altForme.requiredMove)) && !item.zMove) { + return altForme.name; + } + // a hacked-in Megazard X can mega evolve into Megazard Y, but not into Megazard X + if (item.megaEvolves === species.baseSpecies && item.megaStone !== species.name) { + return item.megaStone; + } + return null; + }, + + // 1 Z per pokemon + canZMove(pokemon) { + if (pokemon.m.zMoveUsed || + (pokemon.transformed && + (pokemon.species.isMega || pokemon.species.isPrimal || pokemon.species.forme === "Ultra")) + ) return; + const item = pokemon.getItem(); + if (!item.zMove) return; + if (item.itemUser && !item.itemUser.includes(pokemon.species.name)) return; + let atLeastOne = false; + let mustStruggle = true; + const zMoves: ZMoveOptions = []; + for (const moveSlot of pokemon.moveSlots) { + if (moveSlot.pp <= 0) { + zMoves.push(null); + continue; + } + if (!moveSlot.disabled) { + mustStruggle = false; + } + const move = this.dex.moves.get(moveSlot.move); + let zMoveName = this.getZMove(move, pokemon, true) || ''; + if (zMoveName) { + const zMove = this.dex.moves.get(zMoveName); + if (!zMove.isZ && zMove.category === 'Status') zMoveName = "Z-" + zMoveName; + zMoves.push({move: zMoveName, target: zMove.target}); + } else { + zMoves.push(null); + } + if (zMoveName) atLeastOne = true; + } + if (atLeastOne && !mustStruggle) return zMoves; + }, + + getZMove(move, pokemon, skipChecks) { + const item = pokemon.getItem(); + if (!skipChecks) { + if (pokemon.m.zMoveUsed) return; + if (!item.zMove) return; + if (item.itemUser && !item.itemUser.includes(pokemon.species.name)) return; + const moveData = pokemon.getMoveData(move); + // Draining the PP of the base move prevents the corresponding Z-move from being used. + if (!moveData?.pp) return; + } + + if (move.name === item.zMoveFrom) { + return item.zMove as string; + } else if (item.zMove === true && move.type === item.zMoveType) { + if (move.category === "Status") { + return move.name; + } else if (move.zMove?.basePower) { + return this.Z_MOVES[move.type]; + } + } + }, + + hitStepAccuracy(targets: Pokemon[], pokemon: Pokemon, move: ActiveMove) { + const hitResults = []; + for (const [i, target] of targets.entries()) { + this.battle.activeTarget = target; + // calculate true accuracy + let accuracy = move.accuracy; + if (move.ohko) { // bypasses accuracy modifiers + if (!target.isSemiInvulnerable()) { + accuracy = 30; + if (move.ohko === 'Ice' && this.battle.gen >= 7 && !pokemon.hasType('Ice')) { + accuracy = 20; + } + if (!target.volatiles['dynamax'] && pokemon.level >= target.level && + (move.ohko === true || !target.hasType(move.ohko))) { + accuracy += (pokemon.level - target.level); + } else { + this.battle.add('-immune', target, '[ohko]'); + hitResults[i] = false; + continue; + } + } + } else { + accuracy = this.battle.runEvent('ModifyAccuracy', target, pokemon, move, accuracy); + if (accuracy !== true) { + let boost = 0; + if (!move.ignoreAccuracy) { + const boosts = this.battle.runEvent('ModifyBoost', pokemon, null, null, {...pokemon.boosts}); + boost = this.battle.clampIntRange(boosts['accuracy'], -6, 6); + } + if (!move.ignoreEvasion) { + const boosts = this.battle.runEvent('ModifyBoost', target, null, null, {...target.boosts}); + boost = this.battle.clampIntRange(boost - boosts['evasion'], -6, 6); + } + if (boost > 0) { + accuracy = this.battle.trunc(accuracy * (3 + boost) / 3); + } else if (boost < 0) { + accuracy = this.battle.trunc(accuracy * 3 / (3 - boost)); + } + } + } + if (move.alwaysHit || (move.id === 'toxic' && this.battle.gen >= 8 && pokemon.hasType('Poison')) || + (move.target === 'self' && move.category === 'Status' && !target.isSemiInvulnerable())) { + accuracy = true; // bypasses ohko accuracy modifiers + } else { + accuracy = this.battle.runEvent('Accuracy', target, pokemon, move, accuracy); + } + if (accuracy !== true && !this.battle.randomChance(accuracy, 100)) { + if (move.smartTarget) { + move.smartTarget = false; + } else { + if (pokemon.hasAbility('misspelled')) { + // Custom miss for HoeenHero + // Typo the move + const typoedMove = move.name.charAt(0) + move.name.charAt(2) + move.name.charAt(1) + move.name.slice(3); + + // Modify the used move to be typoed. + const logEntries = this.battle.log[this.battle.lastMoveLine].split('|'); + logEntries[3] = typoedMove; + this.battle.log[this.battle.lastMoveLine] = logEntries.join('|'); + + this.battle.attrLastMove('[still]'); + this.battle.add('-message', `But it was misspelled!`); + } else { + if (!move.spreadHit) this.battle.attrLastMove('[miss]'); + this.battle.add('-miss', pokemon, target); + } + } + if (!move.ohko && pokemon.hasItem('blunderpolicy') && pokemon.useItem()) { + this.battle.boost({spe: 2}, pokemon); + } + hitResults[i] = false; + continue; + } + hitResults[i] = true; + } + return hitResults; + }, + + runMove(moveOrMoveName, pokemon, targetLoc, options) { + pokemon.activeMoveActions++; + const zMove = options?.zMove; + const maxMove = options?.maxMove; + const externalMove = options?.externalMove; + const originalTarget = options?.originalTarget; + let sourceEffect = options?.sourceEffect; + let target = this.battle.getTarget(pokemon, maxMove || zMove || moveOrMoveName, targetLoc, originalTarget); + let baseMove = this.dex.getActiveMove(moveOrMoveName); + const priority = baseMove.priority; + const pranksterBoosted = baseMove.pranksterBoosted; + if (baseMove.id !== 'struggle' && !zMove && !maxMove && !externalMove) { + const changedMove = this.battle.runEvent('OverrideAction', pokemon, target, baseMove); + if (changedMove && changedMove !== true) { + baseMove = this.dex.getActiveMove(changedMove); + baseMove.priority = priority; + if (pranksterBoosted) baseMove.pranksterBoosted = pranksterBoosted; + target = this.battle.getRandomTarget(pokemon, baseMove); + } + } + let move = baseMove; + if (zMove) { + move = this.getActiveZMove(baseMove, pokemon); + } else if (maxMove) { + move = this.getActiveMaxMove(baseMove, pokemon); + } + + move.isExternal = externalMove; + + this.battle.setActiveMove(move, pokemon, target); + + /* if (pokemon.moveThisTurn) { + // THIS IS PURELY A SANITY CHECK + // DO NOT TAKE ADVANTAGE OF THIS TO PREVENT A POKEMON FROM MOVING; + // USE this.battle.queue.cancelMove INSTEAD + this.battle.debug('' + pokemon.id + ' INCONSISTENT STATE, ALREADY MOVED: ' + pokemon.moveThisTurn); + this.battle.clearActiveMove(true); + return; + } */ + const willTryMove = this.battle.runEvent('BeforeMove', pokemon, target, move); + if (!willTryMove) { + this.battle.runEvent('MoveAborted', pokemon, target, move); + this.battle.clearActiveMove(true); + // The event 'BeforeMove' could have returned false or null + // false indicates that this counts as a move failing for the purpose of calculating Stomping Tantrum's base power + // null indicates the opposite, as the Pokemon didn't have an option to choose anything + pokemon.moveThisTurnResult = willTryMove; + return; + } + if (move.beforeMoveCallback) { + if (move.beforeMoveCallback.call(this.battle, pokemon, target, move)) { + this.battle.clearActiveMove(true); + pokemon.moveThisTurnResult = false; + return; + } + } + pokemon.lastDamage = 0; + let lockedMove; + if (!externalMove) { + lockedMove = this.battle.runEvent('LockMove', pokemon); + if (lockedMove === true) lockedMove = false; + if (!lockedMove) { + if (!pokemon.deductPP(baseMove, null, target) && (move.id !== 'struggle')) { + this.battle.add('cant', pokemon, 'nopp', move); + this.battle.clearActiveMove(true); + pokemon.moveThisTurnResult = false; + return; + } + } else { + sourceEffect = this.dex.conditions.get('lockedmove'); + } + pokemon.moveUsed(move, targetLoc); + } + + // Dancer Petal Dance hack + // TODO: implement properly + const noLock = externalMove && !pokemon.volatiles['lockedmove']; + + if (zMove) { + if (pokemon.illusion) { + this.battle.singleEvent('End', this.dex.abilities.get('Illusion'), pokemon.abilityState, pokemon); + } + this.battle.add('-zpower', pokemon); + // 1 z move per poke + pokemon.m.zMoveUsed = true; + } + + const oldActiveMove = move; + + const moveDidSomething = this.useMove(baseMove, pokemon, {target, sourceEffect, zMove, maxMove}); + this.battle.lastSuccessfulMoveThisTurn = moveDidSomething ? this.battle.activeMove && this.battle.activeMove.id : null; + if (this.battle.activeMove) move = this.battle.activeMove; + this.battle.singleEvent('AfterMove', move, null, pokemon, target, move); + this.battle.runEvent('AfterMove', pokemon, target, move); + + // Dancer's activation order is completely different from any other event, so it's handled separately + if (move.flags['dance'] && moveDidSomething && !move.isExternal) { + const dancers = []; + for (const currentPoke of this.battle.getAllActive()) { + if (pokemon === currentPoke) continue; + if (currentPoke.hasAbility(['dancer', 'virtualidol']) && !currentPoke.isSemiInvulnerable()) { + dancers.push(currentPoke); + } + } + // Dancer activates in order of lowest speed stat to highest + // Note that the speed stat used is after any volatile replacements like Speed Swap, + // but before any multipliers like Agility or Choice Scarf + // Ties go to whichever Pokemon has had the ability for the least amount of time + dancers.sort( + (a, b) => -(b.storedStats['spe'] - a.storedStats['spe']) || b.abilityOrder - a.abilityOrder + ); + const targetOf1stDance = this.battle.activeTarget!; + for (const dancer of dancers) { + if (this.battle.faintMessages()) break; + if (dancer.fainted) continue; + this.battle.add('-activate', dancer, 'ability: ' + dancer.getAbility().name); + const dancersTarget = !targetOf1stDance.isAlly(dancer) && pokemon.isAlly(dancer) ? + targetOf1stDance : + pokemon; + const dancersTargetLoc = dancer.getLocOf(dancersTarget); + this.runMove(move.id, dancer, dancersTargetLoc, {sourceEffect: dancer.getAbility(), externalMove: true}); + } + } + if (noLock && pokemon.volatiles['lockedmove']) delete pokemon.volatiles['lockedmove']; + this.battle.faintMessages(); + this.battle.checkWin(); + + if (this.battle.gen <= 4) { + // In gen 4, the outermost move is considered the last move for Copycat + this.battle.activeMove = oldActiveMove; + } + }, + 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 + } + + // Pursuit Clones support + const pursuitClones = ['pursuit', 'trivialpursuit', 'attackofopportunity']; + const callerMoveForPressure = sourceEffect && (sourceEffect as ActiveMove).pp ? sourceEffect as ActiveMove : null; + if (!sourceEffect || callerMoveForPressure || pursuitClones.includes(sourceEffect.id)) { + 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); + } + } + + if (!this.battle.singleEvent('TryMove', move, null, pokemon, target, move) || + !this.battle.runEvent('TryMove', pokemon, target, move)) { + move.mindBlownRecoil = false; + return false; + } + + 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.negateSecondary && + !(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; + }, + hitStepMoveHitLoop(targets, pokemon, move) { // Temporary name + let damage: (number | boolean | undefined)[] = []; + for (const i of targets.keys()) { + damage[i] = 0; + } + move.totalDamage = 0; + pokemon.lastDamage = 0; + let targetHits = move.multihit || 1; + if (Array.isArray(targetHits)) { + // yes, it's hardcoded... meh + if (targetHits[0] === 2 && targetHits[1] === 5) { + if (this.battle.gen >= 5) { + // 35-35-15-15 out of 100 for 2-3-4-5 hits + targetHits = this.battle.sample([2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 5, 5, 5]); + if (targetHits < 4 && pokemon.hasItem('loadeddice')) { + targetHits = 5 - this.battle.random(2); + } + } else { + targetHits = this.battle.sample([2, 2, 2, 3, 3, 3, 4, 5]); + } + } else { + targetHits = this.battle.random(targetHits[0], targetHits[1] + 1); + } + } + if (targetHits === 10 && pokemon.hasItem('loadeddice')) targetHits -= this.battle.random(7); + targetHits = Math.floor(targetHits); + let nullDamage = true; + let moveDamage: (number | boolean | undefined)[] = []; + // There is no need to recursively check the ´sleepUsable´ flag as Sleep Talk can only be used while asleep. + const isSleepUsable = move.sleepUsable || this.dex.moves.get(move.sourceEffect).sleepUsable; + + let targetsCopy: (Pokemon | false | null)[] = targets.slice(0); + let hit: number; + for (hit = 1; hit <= targetHits; hit++) { + if (damage.includes(false)) break; + if (hit > 1 && pokemon.status === 'slp' && (!isSleepUsable || this.battle.gen === 4)) break; + if (targets.every(target => !target?.hp)) break; + move.hit = hit; + if (move.smartTarget && targets.length > 1) { + targetsCopy = [targets[hit - 1]]; + damage = [damage[hit - 1]]; + } else { + targetsCopy = targets.slice(0); + } + const target = targetsCopy[0]; // some relevant-to-single-target-moves-only things are hardcoded + if (target && typeof move.smartTarget === 'boolean') { + if (hit > 1) { + this.battle.addMove('-anim', pokemon, move.name, target); + } else { + this.battle.retargetLastMove(target); + } + } + + // like this (Triple Kick) + if (target && move.multiaccuracy && hit > 1) { + let accuracy = move.accuracy; + const boostTable = [1, 4 / 3, 5 / 3, 2, 7 / 3, 8 / 3, 3]; + if (accuracy !== true) { + if (!move.ignoreAccuracy) { + const boosts = this.battle.runEvent('ModifyBoost', pokemon, null, null, {...pokemon.boosts}); + const boost = this.battle.clampIntRange(boosts['accuracy'], -6, 6); + if (boost > 0) { + accuracy *= boostTable[boost]; + } else { + accuracy /= boostTable[-boost]; + } + } + if (!move.ignoreEvasion) { + const boosts = this.battle.runEvent('ModifyBoost', target, null, null, {...target.boosts}); + const boost = this.battle.clampIntRange(boosts['evasion'], -6, 6); + if (boost > 0) { + accuracy /= boostTable[boost]; + } else if (boost < 0) { + accuracy *= boostTable[-boost]; + } + } + } + accuracy = this.battle.runEvent('ModifyAccuracy', target, pokemon, move, accuracy); + if (!move.alwaysHit) { + accuracy = this.battle.runEvent('Accuracy', target, pokemon, move, accuracy); + if (accuracy !== true && !this.battle.randomChance(accuracy, 100)) break; + } + } + + const moveData = move; + if (!moveData.flags) moveData.flags = {}; + + let moveDamageThisHit; + // Modifies targetsCopy (which is why it's a copy) + [moveDamageThisHit, targetsCopy] = this.spreadMoveHit(targetsCopy, pokemon, move, moveData); + // When Dragon Darts targets two different pokemon, targetsCopy is a length 1 array each hit + // so spreadMoveHit returns a length 1 damage array + if (move.smartTarget) { + moveDamage.push(...moveDamageThisHit); + } else { + moveDamage = moveDamageThisHit; + } + + if (!moveDamage.some(val => val !== false)) break; + nullDamage = false; + + for (const [i, md] of moveDamage.entries()) { + if (move.smartTarget && i !== hit - 1) continue; + // Damage from each hit is individually counted for the + // purposes of Counter, Metal Burst, and Mirror Coat. + damage[i] = md === true || !md ? 0 : md; + // Total damage dealt is accumulated for the purposes of recoil (Parental Bond). + move.totalDamage += damage[i] as number; + } + if (move.mindBlownRecoil) { + const hpBeforeRecoil = pokemon.hp; + this.battle.damage(Math.round(pokemon.maxhp / 2), pokemon, pokemon, this.dex.conditions.get(move.id), true); + move.mindBlownRecoil = false; + if (pokemon.hp <= pokemon.maxhp / 2 && hpBeforeRecoil > pokemon.maxhp / 2) { + this.battle.runEvent('EmergencyExit', pokemon, pokemon); + } + } + this.battle.eachEvent('Update'); + if (!pokemon.hp && targets.length === 1) { + hit++; // report the correct number of hits for multihit moves + break; + } + } + // hit is 1 higher than the actual hit count + if (hit === 1) return damage.fill(false); + if (nullDamage) damage.fill(false); + this.battle.faintMessages(false, false, !pokemon.hp); + if (move.multihit && typeof move.smartTarget !== 'boolean') { + this.battle.add('-hitcount', targets[0], hit - 1); + } + + if ((move.recoil || move.id === 'chloroblast') && move.totalDamage) { + const hpBeforeRecoil = pokemon.hp; + this.battle.damage(this.calcRecoilDamage(move.totalDamage, move, pokemon), pokemon, pokemon, 'recoil'); + if (pokemon.hp <= pokemon.maxhp / 2 && hpBeforeRecoil > pokemon.maxhp / 2) { + this.battle.runEvent('EmergencyExit', pokemon, pokemon); + } + } + + if (move.struggleRecoil) { + const hpBeforeRecoil = pokemon.hp; + let recoilDamage; + if (this.dex.gen >= 5) { + recoilDamage = this.battle.clampIntRange(Math.round(pokemon.baseMaxhp / 4), 1); + } else { + recoilDamage = this.battle.clampIntRange(this.battle.trunc(pokemon.maxhp / 4), 1); + } + this.battle.directDamage(recoilDamage, pokemon, pokemon, {id: 'strugglerecoil'} as Condition); + if (pokemon.hp <= pokemon.maxhp / 2 && hpBeforeRecoil > pokemon.maxhp / 2) { + this.battle.runEvent('EmergencyExit', pokemon, pokemon); + } + } + + // smartTarget messes up targetsCopy, but smartTarget should in theory ensure that targets will never fail, anyway + if (move.smartTarget) { + targetsCopy = targets.slice(0); + } + + for (const [i, target] of targetsCopy.entries()) { + if (target && pokemon !== target) { + target.gotAttacked(move, moveDamage[i] as number | false | undefined, pokemon); + if (typeof moveDamage[i] === 'number') { + target.timesAttacked += move.smartTarget ? 1 : hit - 1; + } + } + } + + if (move.ohko && !targets[0].hp) this.battle.add('-ohko'); + + if (!damage.some(val => !!val || val === 0)) return damage; + + this.battle.eachEvent('Update'); + + this.afterMoveSecondaryEvent(targetsCopy.filter(val => !!val) as Pokemon[], pokemon, move); + + if (!move.negateSecondary && !(move.hasSheerForce && pokemon.hasAbility('sheerforce'))) { + for (const [i, d] of damage.entries()) { + // There are no multihit spread moves, so it's safe to use move.totalDamage for multihit moves + // The previous check was for `move.multihit`, but that fails for Dragon Darts + const curDamage = targets.length === 1 ? move.totalDamage : d; + if (typeof curDamage === 'number' && targets[i].hp) { + const targetHPBeforeDamage = (targets[i].hurtThisTurn || 0) + curDamage; + if (targets[i].hp <= targets[i].maxhp / 2 && targetHPBeforeDamage > targets[i].maxhp / 2) { + this.battle.runEvent('EmergencyExit', targets[i], pokemon); + } + } + } + } + + return damage; + }, + hitStepTryImmunity(targets, pokemon, move) { + const hitResults = []; + for (const [i, target] of targets.entries()) { + if (this.battle.gen >= 6 && move.flags['powder'] && target !== pokemon && !this.dex.getImmunity('powder', target)) { + this.battle.debug('natural powder immunity'); + this.battle.add('-immune', target); + hitResults[i] = false; + } else if (!this.battle.singleEvent('TryImmunity', move, {}, target, pokemon, move)) { + this.battle.add('-immune', target); + hitResults[i] = false; + } else if (this.battle.gen >= 7 && move.pranksterBoosted && + // Prankster Clone immunity + (pokemon.hasAbility('prankster') || pokemon.hasAbility('youkaiofthedusk') || + pokemon.volatiles['irpachuza'] || pokemon.hasAbility('neverendingfhunt')) && + !targets[i].isAlly(pokemon) && !this.dex.getImmunity('prankster', target)) { + this.battle.debug('natural prankster immunity'); + if (!target.illusion) this.battle.hint("Since gen 7, Dark is immune to Prankster moves."); + this.battle.add('-immune', target); + hitResults[i] = false; + } else { + hitResults[i] = true; + } + } + return hitResults; + }, + 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 as ActiveMove; + 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) { + 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 (pokemon.hp && pokemon.hp <= pokemon.maxhp / 2 && pokemonOriginalHP > pokemon.maxhp / 2) { + this.battle.runEvent('EmergencyExit', pokemon); + } + } + + return [damage, targets]; + }, + }, + pokemon: { + isGrounded(negateImmunity) { + 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.battle.suppressingAbility(this)) return null; + if ('magnetrise' in this.volatiles) return false; + if ('riseabove' in this.volatiles) return false; + if ('telekinesis' in this.volatiles) return false; + return item !== 'airballoon'; + }, + effectiveWeather() { + const weather = this.battle.field.effectiveWeather(); + switch (weather) { + case 'sunnyday': + case 'raindance': + case 'desolateland': + case 'primordialsea': + case 'stormsurge': + if (this.hasItem('utilityumbrella')) return ''; + } + return weather; + }, + getMoveTargets(move, target) { + let targets: Pokemon[] = []; + + switch (move.target) { + case 'all': + case 'foeSide': + case 'allySide': + case 'allyTeam': + if (!move.target.startsWith('foe')) { + targets.push(...this.alliesAndSelf()); + } + if (!move.target.startsWith('ally')) { + targets.push(...this.foes(true)); + } + if (targets.length && !targets.includes(target)) { + this.battle.retargetLastMove(targets[targets.length - 1]); + } + break; + case 'allAdjacent': + targets.push(...this.adjacentAllies()); + // falls through + case 'allAdjacentFoes': + targets.push(...this.adjacentFoes()); + if (targets.length && !targets.includes(target)) { + this.battle.retargetLastMove(targets[targets.length - 1]); + } + break; + case 'allies': + targets = this.alliesAndSelf(); + break; + default: + const selectedTarget = target; + if (!target || (target.fainted && !target.isAlly(this)) && this.battle.gameType !== 'freeforall') { + // If a targeted foe faints, the move is retargeted + const possibleTarget = this.battle.getRandomTarget(this, move); + if (!possibleTarget) return {targets: [], pressureTargets: []}; + target = possibleTarget; + } + if (this.battle.activePerHalf > 1 && !move.tracksTarget) { + const isCharging = move.flags['charge'] && !this.volatiles['twoturnmove'] && + !(move.id.startsWith('solarb') && ['sunnyday', 'desolateland'].includes(this.effectiveWeather())) && + !(move.id === 'fruitfullongbow' && ['sunnyday', 'desolateland'].includes(this.effectiveWeather())) && + !(move.id === 'praisethemoon' && this.battle.field.getPseudoWeather('gravity')) && + !(move.id === 'electroshot' && ['stormsurge', 'raindance', 'primordialsea'].includes(this.effectiveWeather())) && + !(this.hasItem('powerherb') && move.id !== 'skydrop'); + if (!isCharging) { + target = this.battle.priorityEvent('RedirectTarget', this, this, move, target); + } + } + if (move.smartTarget) { + targets = this.getSmartTargets(target, move); + target = targets[0]; + } else { + targets.push(target); + } + if (target.fainted && !move.flags['futuremove']) { + return {targets: [], pressureTargets: []}; + } + if (selectedTarget !== target) { + this.battle.retargetLastMove(target); + } + } + + // Resolve apparent targets for Pressure. + let pressureTargets = targets; + if (move.target === 'foeSide') { + pressureTargets = []; + } + if (move.flags['mustpressure']) { + pressureTargets = this.foes(); + } + + return {targets, pressureTargets}; + }, + }, + side: { + getChoice() { + if (this.choice.actions.length > 1 && this.choice.actions.every(action => action.choice === 'team')) { + return `team ` + this.choice.actions.map(action => action.pokemon!.position + 1).join(', '); + } + return this.choice.actions.map(action => { + switch (action.choice) { + case 'move': + let details = ``; + if (action.targetLoc && this.active.length > 1) details += ` ${action.targetLoc > 0 ? '+' : ''}${action.targetLoc}`; + if (action.mega) details += (action.pokemon!.item === 'ultranecroziumz' ? ` ultra` : ` mega`); + if (action.zmove) details += ` zmove`; + if (action.maxMove) details += ` dynamax`; + if (action.terastallize) details += ` terastallize`; + return `move ${action.moveid}${details}`; + case 'switch': + case 'instaswitch': + case 'revivalblessing': + // @ts-ignore custom status falls through + case 'scapegoat': + return `switch ${action.target!.position + 1}`; + case 'team': + return `team ${action.pokemon!.position + 1}`; + default: + return action.choice; + } + }).join(', '); + }, + + chooseSwitch(slotText) { + if (this.requestState !== 'move' && this.requestState !== 'switch') { + return this.emitChoiceError(`Can't switch: You need a ${this.requestState} response`); + } + const index = this.getChoiceIndex(); + if (index >= this.active.length) { + if (this.requestState === 'switch') { + return this.emitChoiceError(`Can't switch: You sent more switches than Pokémon that need to switch`); + } + return this.emitChoiceError(`Can't switch: You sent more choices than unfainted Pokémon`); + } + const pokemon = this.active[index]; + let slot; + if (!slotText) { + if (this.requestState !== 'switch') { + return this.emitChoiceError(`Can't switch: You need to select a Pokémon to switch in`); + } + if (this.slotConditions[pokemon.position]['revivalblessing']) { + slot = 0; + while (!this.pokemon[slot].fainted) slot++; + } else { + if (!this.choice.forcedSwitchesLeft) return this.choosePass(); + slot = this.active.length; + while (this.choice.switchIns.has(slot) || this.pokemon[slot].fainted) slot++; + } + } else { + slot = parseInt(slotText) - 1; + } + if (isNaN(slot) || slot < 0) { + // maybe it's a name/species id! + slot = -1; + for (const [i, mon] of this.pokemon.entries()) { + if (slotText!.toLowerCase() === mon.name.toLowerCase() || toID(slotText) === mon.species.id) { + slot = i; + break; + } + } + if (slot < 0) { + return this.emitChoiceError(`Can't switch: You do not have a Pokémon named "${slotText}" to switch to`); + } + } + if (slot >= this.pokemon.length) { + return this.emitChoiceError(`Can't switch: You do not have a Pokémon in slot ${slot + 1} to switch to`); + } else if (slot < this.active.length && !this.slotConditions[pokemon.position]['revivalblessing']) { + return this.emitChoiceError(`Can't switch: You can't switch to an active Pokémon`); + } else if (this.choice.switchIns.has(slot)) { + return this.emitChoiceError(`Can't switch: The Pokémon in slot ${slot + 1} can only switch in once`); + } + const targetPokemon = this.pokemon[slot]; + + if (this.slotConditions[pokemon.position]['revivalblessing']) { + if (!targetPokemon.fainted) { + return this.emitChoiceError(`Can't switch: You have to pass to a fainted Pokémon`); + } + // Should always subtract, but stop at 0 to prevent errors. + this.choice.forcedSwitchesLeft = this.battle.clampIntRange(this.choice.forcedSwitchesLeft - 1, 0); + pokemon.switchFlag = false; + this.choice.actions.push({ + choice: 'revivalblessing', + pokemon, + target: targetPokemon, + } as ChosenAction); + return true; + } + + if (targetPokemon.fainted) { + return this.emitChoiceError(`Can't switch: You can't switch to a fainted Pokémon`); + } + + if (this.slotConditions[pokemon.position]['scapegoat']) { + // Should always subtract, but stop at 0 to prevent errors. + this.choice.forcedSwitchesLeft = this.battle.clampIntRange(this.choice.forcedSwitchesLeft - 1, 0); + pokemon.switchFlag = false; + // @ts-ignore custom request + this.choice.actions.push({ + choice: 'scapegoat', + pokemon, + target: targetPokemon, + } as ChosenAction); + return true; + } + + if (this.requestState === 'move') { + if (pokemon.trapped) { + const includeRequest = this.updateRequestForPokemon(pokemon, req => { + let updated = false; + if (req.maybeTrapped) { + delete req.maybeTrapped; + updated = true; + } + if (!req.trapped) { + req.trapped = true; + updated = true; + } + return updated; + }); + const status = this.emitChoiceError(`Can't switch: The active Pokémon is trapped`, includeRequest); + if (includeRequest) this.emitRequest(this.activeRequest!); + return status; + } else if (pokemon.maybeTrapped) { + this.choice.cantUndo = this.choice.cantUndo || pokemon.isLastActive(); + } + } else if (this.requestState === 'switch') { + if (!this.choice.forcedSwitchesLeft) { + throw new Error(`Player somehow switched too many Pokemon`); + } + this.choice.forcedSwitchesLeft--; + } + + this.choice.switchIns.add(slot); + + this.choice.actions.push({ + choice: (this.requestState === 'switch' ? 'instaswitch' : 'switch'), + pokemon, + target: targetPokemon, + } as ChosenAction); + + return true; + }, + }, + queue: { + resolveAction(action, midTurn) { + if (!action) throw new Error(`Action not passed to resolveAction`); + if (action.choice === 'pass') return []; + const actions = [action]; + + if (!action.side && action.pokemon) action.side = action.pokemon.side; + if (!action.move && action.moveid) action.move = this.battle.dex.getActiveMove(action.moveid); + if (!action.order) { + const orders: {[choice: string]: number} = { + team: 1, + start: 2, + instaswitch: 3, + beforeTurn: 4, + beforeTurnMove: 5, + revivalblessing: 6, + scapegoat: 7, + + runUnnerve: 100, + runSwitch: 101, + runPrimal: 102, + switch: 103, + megaEvo: 104, + runDynamax: 105, + terastallize: 106, + priorityChargeMove: 107, + + shift: 200, + // default is 200 (for moves) + + residual: 300, + }; + if (action.choice in orders) { + action.order = orders[action.choice]; + } else { + action.order = 200; + if (!['move', 'event'].includes(action.choice)) { + throw new Error(`Unexpected orderless action ${action.choice}`); + } + } + } + if (!midTurn) { + if (action.choice === 'move') { + if (!action.maxMove && !action.zmove && action.move.beforeTurnCallback) { + actions.unshift(...this.resolveAction({ + choice: 'beforeTurnMove', pokemon: action.pokemon, move: action.move, targetLoc: action.targetLoc, + })); + } + if (action.mega && !action.pokemon.isSkyDropped()) { + actions.unshift(...this.resolveAction({ + choice: 'megaEvo', + pokemon: action.pokemon, + })); + } + if (action.terastallize && !action.pokemon.terastallized) { + actions.unshift(...this.resolveAction({ + choice: 'terastallize', + pokemon: action.pokemon, + })); + } + if (action.maxMove && !action.pokemon.volatiles['dynamax']) { + actions.unshift(...this.resolveAction({ + choice: 'runDynamax', + pokemon: action.pokemon, + })); + } + if (!action.maxMove && !action.zmove && action.move.priorityChargeCallback) { + actions.unshift(...this.resolveAction({ + choice: 'priorityChargeMove', + pokemon: action.pokemon, + move: action.move, + })); + } + action.fractionalPriority = this.battle.runEvent('FractionalPriority', action.pokemon, null, action.move, 0); + } else if (['switch', 'instaswitch'].includes(action.choice)) { + if (typeof action.pokemon.switchFlag === 'string') { + action.sourceEffect = this.battle.dex.moves.get(action.pokemon.switchFlag as ID) as any; + } + action.pokemon.switchFlag = false; + } + } + + const deferPriority = this.battle.gen === 7 && action.mega && action.mega !== 'done'; + if (action.move) { + let target = null; + action.move = this.battle.dex.getActiveMove(action.move); + + if (!action.targetLoc) { + target = this.battle.getRandomTarget(action.pokemon, action.move); + // TODO: what actually happens here? + if (target) action.targetLoc = action.pokemon.getLocOf(target); + } + action.originalTarget = action.pokemon.getAtLoc(action.targetLoc); + } + if (!deferPriority) this.battle.getActionSpeed(action); + return actions as any; + }, + }, +}; diff --git a/data/mods/gen9ssb/typechart.ts b/data/mods/gen9ssb/typechart.ts new file mode 100644 index 000000000000..490d656b5e5e --- /dev/null +++ b/data/mods/gen9ssb/typechart.ts @@ -0,0 +1,82 @@ +export const TypeChart: import('../../../sim/dex-data').ModdedTypeDataTable = { + ground: { + inherit: true, + damageTaken: { + sandstorm: 3, + deserteddunes: 3, + Bug: 0, + Dark: 0, + Dragon: 0, + Electric: 3, + Fairy: 0, + Fighting: 0, + Fire: 0, + Flying: 0, + Ghost: 0, + Grass: 1, + Ground: 0, + Ice: 1, + Normal: 0, + Poison: 2, + Psychic: 0, + Rock: 2, + Steel: 0, + Stellar: 0, + Water: 1, + }, + }, + rock: { + inherit: true, + damageTaken: { + sandstorm: 3, + deserteddunes: 3, + Bug: 0, + Dark: 0, + Dragon: 0, + Electric: 0, + Fairy: 0, + Fighting: 1, + Fire: 2, + Flying: 2, + Ghost: 0, + Grass: 1, + Ground: 1, + Ice: 0, + Normal: 2, + Poison: 2, + Psychic: 0, + Rock: 0, + Steel: 1, + Stellar: 0, + Water: 1, + }, + }, + steel: { + inherit: true, + damageTaken: { + psn: 3, + tox: 3, + sandstorm: 3, + deserteddunes: 3, + Bug: 2, + Dark: 0, + Dragon: 2, + Electric: 0, + Fairy: 2, + Fighting: 1, + Fire: 1, + Flying: 2, + Ghost: 0, + Grass: 2, + Ground: 1, + Ice: 2, + Normal: 2, + Poison: 3, + Psychic: 2, + Rock: 2, + Steel: 2, + Stellar: 0, + Water: 0, + }, + }, +}; diff --git a/data/mods/gennext/README.md b/data/mods/gennext/README.md deleted file mode 100644 index 4403733a35ee..000000000000 --- a/data/mods/gennext/README.md +++ /dev/null @@ -1,535 +0,0 @@ -Generation NEXT! -======================================================================== - -Instructions ------------------------------------------------------------------------- - -Gen-NEXT hasn't been updated in a very long time, but is still playable by -using the `/challenge gen6nextou` command in a PM chat box. - -Manifesto ------------------------------------------------------------------------- - -The goal of NEXT is to improve the diversity of the OU metagame by only doing -things that could plausibly be done between gens. - -Specifically, the core rules of NEXT are: - -1. no base stat changes -2. no removing from movepools -3. no removing from ability distribution -4. no typing changes (except on formes) -5. no buffing OU mons, except maybe tiny buffs to mons at the bottom of OU -6. no doing things that make zero sense flavor-wise - -What's left is mainly changes to how abilities and moves work, which is -most of what NEXT is about. - -A good example is what Game Freak did by giving Ditto the Imposter ability. -This gave a Ditto a role in OU, while still making sense flavor-wise, and -without removing anything it used to have. - -A good example of what NEXT changes is Cherrim. We have taken an interesting -idea (ability designed for Sunny Day support) and made it viable in OU. - -This approach is in sharp contrast to many mods that do change many things on -NEXT's "don't change" list. The result is a metagame that feels a lot like -a new generation: existing OU threats stay mostly the same, but many new -threats and strategies are introduced. - -And yes, we know that "no base stat changes" has been broken in Gen 6. We're -still not doing it, because it's hard to constrain and hard to keep track of. - -Recent changes ------------------------------------------------------------------------- - -A changelog for NEXT is available here: - -https://github.com/smogon/pokemon-showdown/commits/master/data/mods/gennext - -Changes ------------------------------------------------------------------------- - -Generation NEXT currently makes the following changes: - -Major changes: - -- Stealth Rock now does 1/4 damage against Flying-types, and 1/8 damage against - everything else. - -- Drives will change Genesect's typing immediately after switch-in, to Bug/Ice, - Bug/Fire, Bug/Electric, or Bug/Water. However, Download will not activate for - Genesect unless it holds a Drive. - -- Unown gets an item named Strange Orb (select "Stick" in the teambuilder) - It doubles its SpA, SpD, and Spe, and changes its type to the type of its - Hidden Power. - -- Weather moves, such as Sunny Day, Rain Dance, Hail, and Sandstorm have +1 - Priority. - -- Forecast will make weather moves last forever. Cherrim will make Sunny Day - last forever. Phione will make Rain Dance last forever. Cryogonal will make - Hail last forever. Probopass will make Sandstorm last forever. - -- Hail is improved: - - Silver Wind, Ominous Wind, and Avalanche deal 1.5x damage in Hail - - Snow Cloak no longer modifies evasion, but instead decreases damage by 25% - in Hail (and 12.5% out of Hail) - - Ice Body has 30% chance of freezing a contact move (and grants passive - healing out of Hail, too) - - Thick Fat, Marvel Scale, and Flame Body grant immunity to Hail damage - -- Freezing doesn't have a 20% thaw chance. Instead, thawing happens at the end - of the second turn. Because this new freeze effect is a nerf, Blizzard now - has a 30% chance of inflicting freeze. - -- Swift Swim, Chlorophyll, and Sand Rush are nerfed to give a 1.5x speed buff instead. - -- Every Hidden Ability is released. - -- Moves with a charge turn are now a lot more powerful. They remove Protect and - Substitute before hitting, they always crit (although their base power has - been adjusted accordingly), they have perfect accuracy, and one other change - depending on the move: - - SolarBeam: heal 50% on the charge turn, 80 bp - - Razor Wind: 100% confusion, 60 bp - - Skull Bash: +1 Def, +1 SpD, +1 accuracy on the charge turn, 70 bp - - Sky Attack: 100% -1 Def, 95 bp - - Freeze Shock: 100% paralysis, 95 bp - - Ice Burn: 100% burn, 95 bp - - Bounce: 30% paralysis, 60 bp - - Fly: 100% -1 Def, 60 bp - - Dig: 100% -1 Def, 60 bp - - Dive: 100% -1 Def, 60 bp - - Shadow Force: 100% Ghost-Curse, 40 bp - - Sky Drop: 100% -1 Def, 60 bp - - Phantom Force: 100% -1 Def, 60 bp - -- Recharge moves are similarly buffed. They have 100 base power, always crit, - and they only recharge if they KO. Be careful - in return for a KO, they - still give the foe a free switch-in _and_ a turn to set up. - -- Flower Gift now only boosts Sp. Def, but if Sunny Day is used while Cherrim - is out, the next switch-in also receives +1 SpD - -- All Quiver Dancers (except Smeargle) get an item named Gossamer Wing (Select - "Stick" in the teambuilder). It makes them take half damage from Rock, Ice, - and Electric moves if they are Flying type, prevents them from taking - double SR damage, heals 1/16 after using a Status move, and makes Twister - do 1.5x Damage. - -- Swarm also makes the user take half damage from Rock, Ice, Electric moves, - and Stealth Rock if they are Flying type. - -- Relic Song switches Meloetta's SpA and Atk EVs, boosts, and certain natures, - specifically: Modest <-> Adamant, Jolly <-> Timid, other natures are left - untouched. It's now 60 base power +1 priority, with no secondary. - -- Shuckle gets Berry Shell (select "Stick" in the teambuilder), which gives a - 50% boost to Defense and Sp. Def. - -- Ambipom, Spinda, and Mr. Mime get Sketch as an egg move, allowing it to use - exactly one move not normally in its learnset. - -- Spinda gets V-Create, Superpower, Close Combat, Overheat, Leaf Storm, Draco - Meteor. - -- Echoed Voice now has 80 base power, hits once, and then, 2 turns later, - hits again for 80 base power. It's like Doom Desire, except it still hits - that first time. - -- Confusion now deals 30 base power damage every attack, but does not stop - the attack. It now lasts 3-5 turns. - -- Parental Bond now deals half damage on both hits, but confers perfect - accuracy like all multi-hit moves. - -- Life Orb now behaves much more consistently as normal recoil. Reckless - will boost every move if Life Orb is held, and Rock Head will negate Life - Orb recoil. - -- Twister is now a 80 base power Flying move with a 30% confusion chance - -- Floette-Eternal-Flower is released. - -New mechanic: Signature Pokémon: - -- Certain moves have a Signature Pokémon associated with them. A move will - deal 1.5x its usual damage when used by its Signature Pokémon. Some of these - moves also receive other changes that apply to all Pokémon using the move - - those changes are listed in parentheses. - - - Flareon: Fire Fang (20% burn, 30% flinch, 100% accuracy) - - - Walrein: Ice Fang (20% freeze, 30% flinch, 100% accuracy) - - - Luxray: Thunder Fang (20% paralysis, 30% flinch, 100% accuracy) - - - Drapion: Poison Fang (65 base power, 100% toxic poison, 30% flinch) - - - Seviper: Poison Tail (60 base power, 60% toxic poison) - - - Muk: Sludge (60 base power, 100% poison) - - - Weezing: Smog (75 base power, 100% poison, 100% accuracy) - - - Rapidash: Flame Charge (60 base power) - - - Darmanitan: Flame Wheel - - - Eelektross: Spark - - - Hitmontop: Triple Kick - - - Kingdra: BubbleBeam (30% -1 Spe) - - - Galvantula: Electroweb (60 base power, 100% accuracy) - - - Skarmory: Steel Wing (60 base power, 100% accuracy, 50% +1 Def) - - - Beautifly: Giga Drain - - - Glaceon: Icy Wind (60 base power, 100% accuracy) - - - Swampert: Mud Shot (60 base power, 100% accuracy) - - - Kyurem: Glaciate (80 base power, 100% accuracy) - - - Octillery: Octazooka (75 base power, 90% accuracy, 100% -1 accuracy) - - - Serperior: Leaf Tornado (75 base power, 90% accuracy, 100% -1 accuracy) - - - Weavile: Ice Shard - - - Sharpedo: Aqua Jet - - - Hitmonchan: Mach Punch - - - Banette: Shadow Sneak - - - Masquerain: Surf (10% -1 Spe) - - - Snorlax: Snore (100 base power) - - - Persian: Slash (60 base power 30% -1 Def) - -- Again, note that while the Signature Pokémon will get the 1.5x damage boost, - all Pokémon will get the other changes to the move listed above. - -New mechanic: Intrinsics: - -- Pokémon that previously get Levitate are now immune to Ground intrinsically, although - Mold Breaker still bypasses this immunity. Instead, many of them get new abilities - in addition to their Ground immunity: - - - Azelf: Steadfast - - - Bronzong: Heatproof - - - Claydol: Filter - - - Cryogonal: Ice Body - - - Eelektross: Poison Heal - - - Flygon: Compoundeyes, Sand Rush - - - Hydreigon: Sheer Force - - - Mesprit: Serene Grace - - - Mismagius: Cursed Body - - - Rotom (all formes): Trace - - - Unown: Shadow Tag - - - Uxie: Synchronize - - - Weezing: Aftermath - -New: Type-specific items: - -- Big Root: also acts like Leftovers + Shell Bell for Grass types - -- Black Sludge: heals 1/8 per turn for pure Poison types - -- Focus Band: breaks on first hit, but allows pure Fighting types to survive - that hit with 1 HP (so basically it'd be a Focus sash that stays intact - after residual damage); does nothing for other Pokémon - -- Wise Glasses: 1.2x Special damage for pure Psychic types - -- Muscle Band: 1.2x Physical damage for pure Fighting types - -Minor move changes: - -- Parabolic Charge now has 40 base power, but gives -1 SpA, -1 SpD to the - target and +1 SpA, +1 SpD to the user - -- Draining Kiss now has 40 base power, but gives -1 SpA, -1 Atk to the - target and +1 SpA, +1 Atk to the user - -- Defend Order and Heal Order now have +1 priority - -- Rock Throw now removes Stealth Rock from the user's side of the field, - and has 100% accuracy - -- Rapid Spin now has 30 base power - -- Rock Throw and Rapid Spin remove hazards before fainting from Rocky - Helmet etc. And double in power if they remove hazards. - -- All moves' accuracy is rounded up to the nearest multiple of 10% - (including Jump Kick) - -- Charge Beam and Rock Slide are now 100% accurate - -- Blue Flare has 30% burn chance, Fire Blast has 20% burn chance and is - 80% accurate - -- Focus Blast has 30% accuracy (use HP Fighting unless you have No Guard) - -- Close Combat has been nerfed: it now gives -2 Def, -2 SpD - -- Moves that were originally perfect accuracy have their base power increased - to 90 (this includes Aerial Ace, Disarming Voice, and Aura Sphere, among - others) - -- Scald and Steam Eruption's damage is no longer affected by weather: - instead, they get 60% burn chance in sun - -- High Jump Kick now has 100 base power - -- Shadow Ball now has 90 base power and 30% -SpD - -- Multi-hit moves are now all perfect-accuracy - -- Silver Wind, Ominous Wind, and AncientPower have a 100% chance of raising - one of Def/SpA/SpD/Spe at random, rather than a 10% chance of raising every - stat - -- Twineedle has a new base power of 50 - -- Tri Attack now hits 3 times and has a base power of 30 - -- Strength now has a 30% chance of raising user's Atk - -- Cut and Rock Smash are 50 base power and now have a 100% chance of - lowering foe's Def - -- Psycho Cut's Base Power is now 90 - -- Drill Peck, Needle Arm, Attack Order, and Leaf Blade's Base - Powers are now 100 - -- Stomp and Steamroller now have 100 Base Power and perfect accuracy to - reflect their thematic status as counters to Minimize - -- Bide is now a +1 priority move that gives the user Endure (the user - survives all move damage with at least 1 HP) for its duration. Bide fails - if the user has 1 HP when it's used, or if the user's last move used was - Bide. - -- Withdraw gives +1 SpD as well as +1 Def - -- Muddy Water is now 85 base power and 100% accurate - -- Leech Life is now 75 base power - -- Sound-based moves are no longer affected by immunities (ghosts can hear - things) - -- Bonemerang, Bone Club and Bone Rush are no longer affected by immunities - (you can throw a bone to hit birds), Bone Rush nerfed to 20 base power - since it should never be viable - -- Wing Attack and Power Gem are now like Dual Chop: 40 base power, 2-hit - -- Autotomize now gives +3 Speed - -- Zoroark gets a significantly wider movepool. It now learns: Ice Beam, Giga - Drain, Earthquake, Stone Edge, Superpower, X-Scissor - -- If Illusion is active, Night Daze now displays as a random non-Status move - in the copied Pokémon's moveset - -- Selfdestruct and Explosion are now 200 and 250 base power autocrit moves, - respectively, and they are both perfect-accuracy - -- Acid and Acid Spray aren't affected by immunities - -- Protect does not protect Substitutes (with passive healing being more - common, Sub/Protect stalling could be overpowered) and Substitutes increase - accuracy against them to 100% - -- Dizzy Punch is 90 base power, 50% confusion chance - -- Sacred Sword now has 95 base power - -- Egg Bomb is now 40 base power autocrit - -- Minimize only increases evasion by one stage - -- Double Team takes 25% of user's max HP (like Substitute) - -Minor learnset changes: - -- Azumarill gets Belly Drum with no incompatibilities - -- Mantine gets many new moves: Recover, Whirlwind, Baton Pass, Wish, Soak, - Lock-On, Acid Spray, Octazooka, Stockpile - -- Masquerain gets Surf - -- Butterfree, Beautifly, Masquerain, and Mothim get Hurricane - -- Roserade gets Sludge - -- Meloetta gets Fiery Dance - -- Galvantula gets Zap Cannon - -- Virizion gets Horn Leech - -- Scolipede and Steelix get Coil - -- Lumineon, Ampharos, and Lanturn get Tail Glow - -- Rotom formes learn more things: - - Rotom-Wash: BubbleBeam - - Rotom-Fan: Hurricane, Twister - - Rotom-Frost: Frost Breath - - Rotom-Heat: Heat Wave - - Rotom-Mow: Magical Leaf - -- Starters get a new ability option - - Venusaur: Leaf Guard - - Charizard: Flame Body - - Blastoise: Shell Armor - - Meganium: Harvest - - Typhlosion: Magma Armor - - Feraligatr: Strong Jaw - - Sceptile: Limber - - Blaziken: Reckless - - Swampert: Hydration - - Torterra: Weak Armor - - Infernape: No Guard - - Empoleon: Ice Body - - Serperior: Own Tempo - - Emboar: Sheer Force - - Samurott: Technician - - Chesnaught: Battle Armor - - Delphox: Magic Guard - - Greninja: Pickpocket - -- Crawdaunt's Hidden Ability is now Tough Claws (this is because of a - nerf to Adaptability which is discussed below) - -Minor ability changes: - -- Static, Poison Point, and Cute Charm now always activate on - contact. - -- Weak Armor reduces incoming move damage by 1/10 of the user's max HP - and increases the user's Speed for the first hit after switch-in (and - does not activate again until the next switch-in) instead of its - previous effect - -- Shell Armor and Battle Armor reduce incoming move damage by 1/10 of - the user's max HP in addition to their crit negation (also, Shell - Armor is removed when using Shell Smash) - -- Magma Armor reduces incoming move damage by 1/10 of the user's max HP, - provides immunity to Hail and freeze, and provides a one-time immunity - to Water and Ice, after which it turns into Battle Armor - -- Prism Armor reduces incoming move damage by 1/10 of the user's max HP in addition to its normal effects. - -- Adaptability is now 1.33x to non-STAB moves instead of to STAB moves - -- Shadow Tag now lasts only one turn - -- Static and Poison Point have a 100% chance of activating - -- Speed Boost does not activate on turns Protect, Detect, Endure, etc - are used - -- Telepathy grants Imprison on switch-in - -- Compound Eyes and Keen Eye now grant 1.6x accuracy (this replaces Keen - Eye's previous effect) - -- Victory Star grants 1.5x accuracy (but only for the user) - -- Solid Rock and Filter now reduce damage of SE moves by 1/2, not 1/4 - -- Iron Fist now grants a 1.33x boost to punching moves - -- Outrage, Thrash, and Petal Dance don't lock if the user has Own Tempo - -- Stench now grants a 40% flinch chance - -- Slow Start now only lasts 3 turns instead of 5 - -- Truant will only activate if a move succeeds (e.g. not if it misses, fails, - or is Protected against), and will heal the user by 33% during its Truant - turn - -- Clear Body and White Smoke prevents all stat lowering (relevant: the Regis' - Superpower, Metagross' Hammer Arm, and Torkoal's Overheat) - -- Thick Fat grants half damage from Fighting - -- Aftermath no longer requires contact, and is buffed to deal 1/3 of the - foe's max HP - -- Cursed Body works like Aftermath now, but instead of dealing damage, it - causes the foe to be Cursed (like Ghost-type Curse) - -- Gluttony allows a Pokémon to use a Berry twice - -- Heatproof now grants the user immunity to Fire and burns - -- Guts, Quick Feet, and Toxic Boost take half damage from poisoning - -- Guts, Quick Feet, and Flare Boost take half damage from burns - -- Sand Veil grants 20% damage reduction in sand (this replaces Sand Veil's - usual effect) - -- Water Veil grans 12.5% damage reduction out of rain and 25% damage - reduction in rain, in addition to its usual effect - -- Multiscale decreases damage by 1/3 rather than 1/2 (Sorry, Dragonite, - this is in exchange for a usable physical Flying STAB from a buffed - Aerial Ace) - -Minor item changes: - -- Zoom Lens now grants 1.6x accuracy - -- Wide Lens now grants 1.3x accuracy - -Bans: - -- The OU banlist (i.e. Pokémon considered Uber) is now: - - Every Pokémon with over 600 BST except Slaking, Regigigas, and Hoopa-Unbound - - Deoxys (all formes) - - Darkrai - - Shaymin-Sky - -- The following clauses are in effect: - - OHKO Clause - - Sleep Clause - - Soul Dew is banned - -Specifically, differences from regular OU: - -- unbanned: Aegislash, Blaziken, Genesect, Landorus, Gengarite, Kangaskhanite, - Lucarionite, Mawilite, Salamencite - -- banned: Hoopa-Unbound, Kyurem, Kyurem-Black - -- There is no Moody Clause or Evasion Clause diff --git a/data/mods/gennext/abilities.ts b/data/mods/gennext/abilities.ts deleted file mode 100644 index f02dc101b4a7..000000000000 --- a/data/mods/gennext/abilities.ts +++ /dev/null @@ -1,684 +0,0 @@ -export const Abilities: {[k: string]: ModdedAbilityData} = { - swiftswim: { - inherit: true, - onModifySpe(spe, pokemon) { - if (this.field.isWeather(['raindance', 'primordialsea'])) { - return this.chainModify(1.5); - } - }, - shortDesc: "If Rain Dance is active, this Pokemon's Speed is multiplied by 1.5.", - }, - chlorophyll: { - inherit: true, - onModifySpe(spe) { - if (this.field.isWeather(['sunnyday', 'desolateland'])) { - return this.chainModify(1.5); - } - }, - shortDesc: "If Sunny Day is active, this Pokemon's Speed is multiplied by 1.5.", - }, - sandrush: { - inherit: true, - onModifySpe(spe, pokemon) { - if (this.field.isWeather('sandstorm')) { - return this.chainModify(1.5); - } - }, - shortDesc: "If Sandstorm is active, this Pokemon's Speed is multiplied by 1.5.", - }, - slushrush: { - inherit: true, - onModifySpe(spe, pokemon) { - if (this.field.isWeather('hail')) { - return this.chainModify(1.5); - } - }, - shortDesc: "If Hail is active, this Pokemon's Speed is multiplied by 1.5.", - }, - forecast: { - inherit: true, - onModifyMove(move) { - if (move.weather) { - const weather = move.weather; - move.weather = ''; - move.onHit = function (target, source) { - this.field.setWeather(weather, source, this.dex.abilities.get('forecast')); - this.field.weatherState.duration = 0; - }; - move.target = 'self'; - } - }, - desc: "If this Pokemon is a Castform, its type changes to the current weather condition's type, except Sandstorm. Weather moves last forever.", - shortDesc: "Castform's type changes to the current weather condition's type, except Sandstorm; weather moves last forever.", - }, - thickfat: { - inherit: true, - onImmunity(type, pokemon) { - if (type === 'hail') return false; - }, - onSourceModifyAtk(atk, attacker, defender, move) { - if (move.type === 'Ice' || move.type === 'Fire' || move.type === 'Fighting') { - this.add('-message', "The attack was weakened by Thick Fat!"); - return this.chainModify(0.5); - } - }, - onSourceModifySpA(atk, attacker, defender, move) { - if (move.type === 'Ice' || move.type === 'Fire' || move.type === 'Fighting') { - this.add('-message', "The attack was weakened by Thick Fat!"); - return this.chainModify(0.5); - } - }, - desc: "If a Pokemon uses a Fire- or Ice- or Fighting-type attack against this Pokemon, that Pokemon's attacking stat is halved when calculating the damage to this Pokemon. This Pokemon takes no damage from Hail.", - shortDesc: "Fire/Ice/Fighting-type moves against this Pokemon deal damage with a halved attacking stat; immunity to Hail.", - }, - marvelscale: { - inherit: true, - onImmunity(type, pokemon) { - if (type === 'hail') return false; - }, - desc: "If this Pokemon has a major status condition, its Defense is multiplied by 1.5. This Pokemon takes no damage from Hail.", - shortDesc: "If this Pokemon is statused, its Defense is 1.5x; immunity to Hail.", - }, - snowcloak: { - inherit: true, - onSourceBasePower(basePower) { - if (this.field.isWeather('hail')) { - return basePower * 3 / 4; - } - return basePower * 7 / 8; - }, - onModifyAccuracy() {}, - desc: "If Hail is active, attacks against this Pokemon do 25% less than normal. If Hail is not active, attacks against this Pokemon do 12.5% less than normal. This Pokemon takes no damage from Hail.", - shortDesc: "If Hail is active, attacks against this Pokemon do 25% less; immunity to Hail.", - }, - sandveil: { - inherit: true, - desc: "If Sandstorm is active, attacks against this Pokemon do 25% less than normal. If Sandstorm is not active, attacks against this Pokemon do 12.5% less than normal. This Pokemon takes no damage from Sandstorm.", - shortDesc: "If Sandstorm is active, attacks against this Pokemon do 25% less; immunity to Sandstorm.", - onSourceBasePower(basePower) { - if (this.field.isWeather('sandstorm')) { - return basePower * 4 / 5; - } - }, - onModifyAccuracy() {}, - }, - waterveil: { - inherit: true, - onSourceBasePower(basePower) { - if (this.field.isWeather(['raindance', 'primordialsea'])) { - return basePower * 3 / 4; - } - return basePower * 7 / 8; - }, - desc: "If Rain Dance is active, attacks against this Pokemon do 25% less than normal. This Pokemon cannot be burned. Gaining this Ability while burned cures it.", - shortDesc: "If Rain Dance is active, attacks against this Pokemon do 25% less; This Pokemon cannot be burned.", - }, - icebody: { - inherit: true, - desc: "This Pokemon restores 1/16 of its maximum HP, rounded down, at the end of each turn. This Pokemon takes no damage from Hail. There is a 30% chance a Pokemon making contact with this Pokemon will be frozen.", - shortDesc: "This Pokemon heals 1/16 of its max HP each turn; immunity to Hail; 30% chance a Pokemon making contact with this Pokemon will be frozen.", - onResidual(target, source, effect) { - this.heal(target.baseMaxhp / 16); - }, - onDamagingHit(damage, target, source, move) { - if (move.flags['contact'] && this.field.isWeather('hail')) { - if (this.randomChance(3, 10)) { - source.trySetStatus('frz', target); - } - } - }, - onWeather() {}, - }, - flamebody: { - inherit: true, - onImmunity(type, pokemon) { - if (type === 'hail') return false; - }, - shortDesc: "30% chance a Pokemon making contact with this Pokemon will be burned; immunity to Hail.", - }, - static: { - inherit: true, - onDamagingHit(damage, target, source, move) { - if (move.flags['contact']) { - source.trySetStatus('par', target); - } - }, - shortDesc: "100% chance a Pokemon making contact with this Pokemon will be paralyzed.", - }, - cutecharm: { - inherit: true, - onDamagingHit(damage, target, source, move) { - if (move.flags['contact']) { - source.addVolatile('Attract', target); - } - }, - desc: "There is a 100% chance a Pokemon making contact with this Pokemon will become infatuated if it is of the opposite gender.", - shortDesc: "100% chance of infatuating Pokemon of the opposite gender if they make contact.", - }, - poisonpoint: { - inherit: true, - onDamagingHit(damage, target, source, move) { - if (move.flags['contact']) { - source.trySetStatus('psn', target); - } - }, - shortDesc: "100% chance a Pokemon making contact with this Pokemon will be poisoned.", - }, - flowergift: { - inherit: true, - onModifyMove(move) { - if (move.id === 'sunnyday') { - const weather = move.weather as string; - move.weather = ''; - move.onHit = function (target, source) { - this.field.setWeather(weather, source, this.dex.abilities.get('flowergift')); - this.field.weatherState.duration = 0; - }; - move.target = 'self'; - move.sideCondition = 'flowergift'; - } - }, - onUpdate(pokemon) { - if (this.field.isWeather(['sunnyday', 'desolateland'])) { - if (pokemon.isActive && pokemon.species.id === 'cherrim' && this.effectState.forme !== 'Sunshine') { - this.effectState.forme = 'Sunshine'; - this.add('-formechange', pokemon, 'Cherrim-Sunshine', '[msg]'); - this.boost({spd: 1}); - } - } else if (pokemon.isActive && pokemon.species.id === 'cherrim' && this.effectState.forme) { - delete this.effectState.forme; - this.add('-formechange', pokemon, 'Cherrim', '[msg]'); - } - }, - condition: { - onSwitchInPriority: 1, - onSwitchIn(target) { - if (!target.fainted) { - this.boost({spd: 1}, target, target, this.dex.abilities.get('flowergift')); - } - target.side.removeSideCondition('flowergift'); - }, - }, - desc: "If this Pokemon is a Cherrim and Sunny Day is active, it changes to Sunshine Form and the Special Defense of it is multiplied by 1.5. The next Pokemon that switches in gets its Special Defense also multiplied by 1.5.", - shortDesc: "If user is Cherrim and Sunny Day is active, its Sp. Def is multiplied by 1.5; the next switch-in also gets its SpD multiplied by 1.5.", - }, - slowstart: { - inherit: true, - condition: { - duration: 3, - onStart(target) { - this.add('-start', target, 'Slow Start'); - }, - onModifyAtk(atk, pokemon) { - if (pokemon.ability !== 'slowstart') { - pokemon.removeVolatile('slowstart'); - return; - } - return atk / 2; - }, - onModifySpe(spe, pokemon) { - if (pokemon.ability !== 'slowstart') { - pokemon.removeVolatile('slowstart'); - return; - } - return spe / 2; - }, - onEnd(target) { - this.add('-end', target, 'Slow Start'); - }, - }, - shortDesc: "On switch-in, this Pokemon's Attack and Speed are halved for 3 turns.", - }, - compoundeyes: { - inherit: true, - desc: "The accuracy of this Pokemon's moves receives a 60% increase; for example, a 50% accurate move becomes 80% accurate.", - shortDesc: "This Pokemon's moves have their Accuracy boosted to 1.6x.", - onSourceModifyAccuracy(accuracy) { - if (typeof accuracy !== 'number') return; - this.debug('compoundeyes - enhancing accuracy'); - return accuracy * 1.6; - }, - }, - keeneye: { - inherit: true, - desc: "The accuracy of this Pokemon's moves receives a 60% increase; for example, a 50% accurate move becomes 80% accurate.", - shortDesc: "This Pokemon's moves have their Accuracy boosted to 1.6x.", - onModifyMove(move) { - if (typeof move.accuracy !== 'number') return; - this.debug('keeneye - enhancing accuracy'); - move.accuracy *= 1.6; - }, - }, - solidrock: { - inherit: true, - shortDesc: "This Pokemon receives 1/2 damage from supereffective attacks.", - onSourceModifyDamage(damage, attacker, defender, move) { - if (defender.getMoveHitData(move).typeMod > 0) { - this.add('-message', "The attack was weakened by Solid Rock!"); - return this.chainModify(0.5); - } - }, - }, - filter: { - inherit: true, - shortDesc: "This Pokemon receives 1/2 damage from supereffective attacks.", - onSourceModifyDamage(damage, attacker, defender, move) { - if (defender.getMoveHitData(move).typeMod > 0) { - this.add('-message', "The attack was weakened by Filter!"); - return this.chainModify(0.5); - } - }, - }, - heatproof: { - inherit: true, - desc: "The user is completely immune to Fire-type moves and burn damage.", - shortDesc: "The user is immune to Fire type attacks and burn damage.", - onImmunity(type, pokemon) { - if (type === 'Fire' || type === 'brn') return false; - }, - }, - reckless: { - inherit: true, - onBasePower(basePower, attacker, defender, move) { - if (move.recoil || move.hasCrashDamage || attacker.item === 'lifeorb') { - this.debug('Reckless boost'); - return basePower * 12 / 10; - } - }, - desc: "This Pokemon's attacks with recoil or crash damage or if the user is holding a Life Orb have their power multiplied by 1.2. Does not affect Struggle.", - shortDesc: "This Pokemon's attacks with recoil or crash damage or the user's item is Life Orb have 1.2x power; not Struggle.", - }, - clearbody: { - inherit: true, - onTryBoost(boost, target, source) { - let i: BoostID; - for (i in boost) { - if (boost[i]! < 0) { - delete boost[i]; - this.add("-message", target.name + "'s stats were not lowered! (placeholder)"); - } - } - }, - shortDesc: "Prevents any negative stat changes on this Pokemon.", - }, - whitesmoke: { - inherit: true, - onTryBoost(boost, target, source) { - let i: BoostID; - for (i in boost) { - if (boost[i]! < 0) { - delete boost[i]; - this.add("-message", target.name + "'s stats were not lowered! (placeholder)"); - } - } - }, - shortDesc: "Prevents any negative stat changes on this Pokemon.", - }, - rockhead: { - inherit: true, - onDamage(damage, target, source, effect) { - if (effect && ['lifeorb', 'recoil'].includes(effect.id)) return false; - }, - desc: "This Pokemon does not take recoil damage besides Struggle, and crash damage.", - shortDesc: "This Pokemon does not take recoil damage besides Struggle/crash damage.", - }, - download: { - inherit: true, - onStart(pokemon) { - if (pokemon.species.baseSpecies === 'Genesect') { - if (!pokemon.getItem().onDrive) return; - } - let totaldef = 0; - let totalspd = 0; - for (const foe of pokemon.foes()) { - totaldef += foe.storedStats.def; - totalspd += foe.storedStats.spd; - } - if (totaldef && totaldef >= totalspd) { - this.boost({spa: 1}); - } else if (totalspd) { - this.boost({atk: 1}); - } - }, - 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. If the user is a Genesect, this will not have effect unless it holds a Drive.", - shortDesc: "On switch-in, Attack or Sp. Atk is raised 1 stage based on the foes' weaker Defense; Genesect must hold a plate for the effect to work.", - }, - victorystar: { - inherit: true, - onAllyModifyMove(move) { - if (typeof move.accuracy === 'number') { - move.accuracy *= 1.5; - } - }, - shortDesc: "This Pokemon's moves' accuracy is multiplied by 1.5.", - }, - shellarmor: { - inherit: true, - onDamage(damage, target, source, effect) { - if (effect && effect.effectType === 'Move') { - this.add('-message', "Its damage was reduced by Shell Armor!"); - damage -= target.maxhp / 10; - if (damage < 0) damage = 0; - return damage; - } - }, - onHit(target, source, move) { - if (move.id === 'shellsmash') { - target.setAbility(''); - } - }, - desc: "This Pokemon cannot be struck by a critical hit. This ability also reduces incoming move damage by 1/10 of the user's max HP. If the user uses Shell Smash, this ability's effect ends.", - shortDesc: "This Pokemon can't be struck critical hit; reduces incoming move damage by 1/10 of the user's max HP.", - }, - prismarmor: { - inherit: true, - onDamage(damage, target, source, effect) { - if (effect && effect.effectType === 'Move') { - this.add('-message', "Its damage was reduced by Prism Armor!"); - damage -= target.maxhp / 10; - if (damage < 0) damage = 0; - return damage; - } - }, - desc: "This Pokemon receives 3/4 damage from supereffective attacks. Moongeist Beam, Sunsteel Strike, and the Abilities Mold Breaker, Teravolt, and Turboblaze cannot ignore this Ability. This ability also reduces incoming move damage by 1/10 of the user's max HP.", - shortDesc: "This Pokemon receives 3/4 damage from supereffective attacks; reduces incoming move damage by 1/10 of the user's max HP.", - }, - battlearmor: { - inherit: true, - onDamage(damage, target, source, effect) { - if (effect && effect.effectType === 'Move') { - this.add('-message', "Its damage was reduced by Battle Armor!"); - damage -= target.maxhp / 10; - if (damage < 0) damage = 0; - return damage; - } - }, - desc: "This Pokemon cannot be struck by a critical hit. This ability also reduces incoming move damage by 1/10 of the user's max HP.", - shortDesc: "This Pokemon can't be struck critical hit; reduces incoming move damage by 1/10 of the user's max HP.", - }, - weakarmor: { - inherit: true, - onDamage(damage, target, source, effect) { - if (effect && effect.effectType === 'Move') { - this.add('-message', "Its damage was reduced by Weak Armor!"); - damage -= target.maxhp / 10; - if (damage < 0) damage = 0; - target.setAbility(''); - this.boost({spe: 1}); - return damage; - } - }, - onDamagingHit() {}, - desc: "This ability reduces incoming move damage by 1/10 of the user's max HP and increases the user's Speed for the first hit after switch-in (and does not activate again until the next switch-in).", - shortDesc: "Reduces incoming move damage by 1/10 of the user's max HP and increases the user's Spe for the 1st hit after switch-in (doesn't activate until next switch-in).", - }, - magmaarmor: { - inherit: true, - onImmunity(type, pokemon) { - if (type === 'hail') return false; - if (type === 'frz') return false; - }, - onDamage(damage, target, source, effect) { - if (effect && effect.effectType === 'Move') { - damage -= target.maxhp / 10; - if (damage < 0) damage = 0; - if (effect.type === 'Ice' || effect.type === 'Water') { - this.add('-activate', target, 'ability: Magma Armor'); - target.setAbility('battlearmor'); - damage = 0; - } else { - this.add('-message', "Its damage was reduced by Magma Armor!"); - } - return damage; - } - }, - desc: "This ability reduces incoming move damage by 1/10 of the user's max HP, provides immunity to Hail and freeze, and provides a one-time immunity to Water and Ice (after which it turns into Battle Armor).", - shortDesc: "Reduces incoming move damage by 1/10 of the user's max HP, provides immunity to Hail & Frz, and provides a 1 time immunity to Water and Ice.", - }, - multiscale: { - inherit: true, - onSourceModifyDamage(damage, source, target, move) { - if (target.hp >= target.maxhp) { - this.add('-message', "The attack was slightly weakened by Multiscale!"); - return this.chainModify(2 / 3); - } - }, - shortDesc: "If this Pokemon is at full HP, damage taken from attacks is lessened by 1/3.", - }, - ironfist: { - inherit: true, - onBasePower(basePower, attacker, defender, move) { - if (move.flags['punch']) { - return basePower * 1.33; - } - }, - desc: "This Pokemon's punch-based attacks have their power multiplied by 1.33.", - shortDesc: "This Pokemon's punch-based attacks have 1.33x power. Sucker Punch is not boosted.", - }, - 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; - } - move.secondaries.push({ - chance: 40, - volatileStatus: 'flinch', - }); - } - }, - shortDesc: "This Pokemon's attacks without a chance to flinch have a 40% chance to flinch.", - }, - aftermath: { - inherit: true, - onDamagingHit(damage, target, source, move) { - if (!target.hp) { - this.damage(source.baseMaxhp / 3, source, target, null, true); - } - }, - desc: "If this Pokemon is knocked out, that move's user loses 1/4 of its maximum HP, rounded down. If any active Pokemon has the Ability Damp, this effect is prevented.", - shortDesc: "If this Pokemon is KOed, that move's user loses 1/4 its max HP.", - }, - cursedbody: { - desc: "When this Pokemon faints, attacker is Cursed.", - shortDesc: "When this Pokemon faints, attacker is Cursed.", - onFaint(target, source, effect) { - if (effect && effect.effectType === 'Move' && source) { - source.addVolatile('curse'); - } - }, - name: "Cursed Body", - rating: 3, - num: 130, - }, - gluttony: { - inherit: true, - onResidualOrder: 26, - onResidualSubOrder: 1, - onResidual(pokemon) { - if (!pokemon.m.gluttonyFlag && !pokemon.item && this.dex.items.get(pokemon.lastItem).isBerry) { - pokemon.m.gluttonyFlag = true; - pokemon.setItem(pokemon.lastItem); - pokemon.lastItem = ''; - this.add("-item", pokemon, pokemon.item, '[from] ability: Gluttony'); - } - }, - shortDesc: "When this Pokemon has 1/2 or less of its maximum HP, it uses certain Berries early. Each berry has 2 uses.", - }, - guts: { - inherit: true, - onDamage(damage, attacker, defender, effect) { - if (effect && (effect.id === 'brn' || effect.id === 'psn' || effect.id === 'tox')) { - return damage / 2; - } - }, - desc: "If this Pokemon has a major status condition, its Attack is multiplied by 1.5; burn's physical damage halving is ignored; takes half damage from burn/poison/toxic.", - shortDesc: "If this Pokemon is statused, its Attack is 1.5x; ignores burn halving physical damage; takes 1/2 damage from brn/psn/tox.", - }, - quickfeet: { - inherit: true, - onDamage(damage, attacker, defender, effect) { - if (effect && (effect.id === 'brn' || effect.id === 'psn' || effect.id === 'tox')) { - return damage / 2; - } - }, - desc: "If this Pokemon has a major status condition, its Speed is multiplied by 1.5; the Speed drop from paralysis is ignored; takes half damage from burn/poison/toxic.", - shortDesc: "If this Pokemon is statused, its Speed is 1.5x; ignores Speed drop from paralysis; takes 1/2 damage from brn/psn/tox.", - }, - toxicboost: { - inherit: true, - onDamage(damage, attacker, defender, effect) { - if (effect && (effect.id === 'psn' || effect.id === 'tox')) { - return damage / 2; - } - }, - desc: "While this Pokemon is poisoned, the power of its physical attacks is multiplied by 1.5; takes half damage from poison/toxic.", - shortDesc: "While this Pokemon is poisoned, its physical attacks have 1.5x power; takes 1/2 damage from psn/tox.", - }, - truant: { - inherit: true, - onBeforeMove() {}, - onModifyMove(move, pokemon) { - if (!move.self) move.self = {}; - if (!move.self.volatileStatus) move.self.volatileStatus = 'truant'; - }, - condition: { - duration: 2, - onStart(pokemon) { - this.add('-start', pokemon, 'Truant'); - }, - onBeforeMovePriority: 99, - onBeforeMove(pokemon, target, move) { - if (pokemon.removeVolatile('truant')) { - this.add('cant', pokemon, 'ability: Truant'); - this.heal(pokemon.baseMaxhp / 3); - return false; - } - }, - }, - shortDesc: "This Pokemon will not be able to move the turn after a successful move; heals 1/3 of its max HP on its Truant turn.", - }, - flareboost: { - inherit: true, - onDamage(damage, defender, attacker, effect) { - if (effect && (effect.id === 'brn')) { - return damage / 2; - } - }, - desc: "While this Pokemon is burned, the power of its special attacks is multiplied by 1.5; takes half damage from burns.", - shortDesc: "While this Pokemon is burned, its special attacks have 1.5x power; takes 1/2 damage from brn.", - }, - telepathy: { - inherit: true, - onStart(target) { - this.add('-start', target, 'move: Imprison'); - }, - onFoeDisableMove(pokemon) { - for (const moveSlot of this.effectState.target.moveSlots) { - pokemon.disableMove(moveSlot.id, 'hidden'); - } - pokemon.maybeDisabled = true; - }, - onFoeBeforeMove(attacker, defender, move) { - if (move.id !== 'struggle' && this.effectState.target.hasMove(move.id) && !move.isZ) { - this.add('cant', attacker, 'move: Imprison', move); - return false; - } - }, - shortDesc: "This Pokemon does not take damage from attacks made by its allies; imprisons the target upon entry.", - }, - speedboost: { - inherit: true, - onResidualPriority: -1, - onResidual(pokemon) { - if (pokemon.activeTurns && !pokemon.volatiles['stall']) { - this.boost({spe: 1}); - } - }, - desc: "This Pokemon's Speed is raised by 1 stage at the end of each full turn it has been on the field. This ability does not activate on turns Protect, Detect, Endure, etc are used.", - }, - parentalbond: { - inherit: true, - onModifyMove(move, pokemon, target) { - if (move.category === 'Status' || move.selfdestruct || move.multihit) return; - if (!target) return; - // singles, or single-target move - if (this.activePerHalf === 1 || ['any', 'normal', 'randomNormal'].includes(move.target)) { - move.multihit = 2; - move.accuracy = true; - pokemon.addVolatile('parentalbond'); - } - }, - condition: { - duration: 1, - onBasePowerPriority: 8, - onBasePower(basePower) { - return this.chainModify(0.5); - }, - }, - desc: "This Pokemon's damaging moves become multi-hit moves that hit twice. Both hits' damage are halved. Does not affect multi-hit moves or moves that have multiple targets. The moves that are affected will never miss.", - shortDesc: "This Pokemon's damaging moves hit twice. Both hits have their damage halved. Moves affected have -- accuracy.", - }, - swarm: { - inherit: true, - onFoeBasePower(basePower, attacker, defender, move) { - if (defender.hasType('Flying')) { - if (move.type === 'Rock' || move.type === 'Electric' || move.type === 'Ice') { - this.add('-message', "The attack was weakened by Swarm!"); - return basePower / 2; - } - } - }, - onDamage(damage, defender, attacker, effect) { - if (defender.hasType('Flying')) { - if (effect && effect.id === 'stealthrock') { - return damage / 2; - } - } - }, - desc: "When this Pokemon has 1/3 or less of its maximum HP, rounded down, its attacking stat is multiplied by 1.5 while using a Bug-type attack. The user takes half damage from Rock, Ice, Electric moves, and Stealth Rock if they are Flying type.", - shortDesc: "When this Pokemon has 1/3 or less of its max HP, its Bug attacks do 1.5x damage. The user takes 1/2 damage from Rock/Ice/Electric moves, and Stealth Rock, if the user is Flying type.", - }, - adaptability: { - inherit: true, - onModifyMove(move) {}, - onBasePower(power, attacker, defender, move) { - if (!attacker.hasType(move.type)) { - return this.chainModify(1.33); - } - }, - desc: "This Pokemon's moves that don't match one of its types have an attack bonus of 1.33.", - shortDesc: "This Pokemon's non-STAB moves is 1.33x.", - }, - shadowtag: { - desc: "For the first turn after this Pokemon switches in, prevent adjacent opposing Pokemon from choosing to switch out unless they are immune to trapping or also have this Ability.", - shortDesc: "Prevents adjacent foes from choosing to switch for one turn.", - inherit: true, - onStart(pokemon) { - pokemon.addVolatile('shadowtag'); - }, - condition: { - duration: 2, - onFoeTrapPokemon(pokemon) { - if (pokemon.ability !== 'shadowtag') { - pokemon.tryTrap(true); - } - }, - }, - onBeforeMovePriority: 15, - onBeforeMove(pokemon) { - pokemon.removeVolatile('shadowtag'); - }, - onFoeMaybeTrapPokemon(pokemon, source) { - if (!source) source = this.effectState.target; - if (!source || !pokemon.isAdjacent(source)) return; - if (pokemon.ability !== 'shadowtag' && !source.volatiles['shadowtag']) { - pokemon.maybeTrapped = true; - } - }, - onFoeTrapPokemon(pokemon) {}, - }, -}; diff --git a/data/mods/gennext/conditions.ts b/data/mods/gennext/conditions.ts deleted file mode 100644 index cba06a34a1a1..000000000000 --- a/data/mods/gennext/conditions.ts +++ /dev/null @@ -1,387 +0,0 @@ -export const Conditions: {[k: string]: ModdedConditionData} = { - frz: { - name: 'frz', - effectType: 'Status', - onStart(target) { - this.add('-status', target, 'frz'); - }, - duration: 2, - onBeforeMovePriority: 2, - onBeforeMove(pokemon, target, move) { - if (move.flags['defrost']) { - pokemon.cureStatus(); - return; - } - this.add('cant', pokemon, 'frz'); - return false; - }, - onHit(target, source, move) { - if (move.type === 'Fire' && move.category !== 'Status' || move.flags['defrost']) { - target.cureStatus(); - } - }, - onEnd(target) { - this.add('-curestatus', target, 'frz'); - }, - }, - lockedmove: { - // Outrage, Thrash, Petal Dance... - name: 'lockedmove', - durationCallback() { - return this.random(2, 4); - }, - onResidual(target) { - const move = target.lastMove as Move; - if (!move.self || move.self.volatileStatus !== 'lockedmove') { - // don't lock, and bypass confusion for calming - delete target.volatiles['lockedmove']; - } else if (target.ability === 'owntempo') { - // Own Tempo prevents locking - delete target.volatiles['lockedmove']; - } - }, - onEnd(target) { - target.addVolatile('confusion'); - }, - onLockMove(pokemon) { - return pokemon.lastMove!.id; - }, - }, - confusion: { - // this is a volatile status - name: 'confusion', - onStart(target, source, sourceEffect) { - if (sourceEffect && sourceEffect.id === 'lockedmove') { - this.add('-start', target, 'confusion', '[fatigue]'); - } else { - this.add('-start', target, 'confusion'); - } - this.effectState.time = this.random(3, 4); - }, - onEnd(target) { - this.add('-end', target, 'confusion'); - }, - onBeforeMove(pokemon) { - pokemon.volatiles['confusion'].time--; - if (!pokemon.volatiles['confusion'].time) { - pokemon.removeVolatile('confusion'); - return; - } - const damage = this.actions.getDamage(pokemon, pokemon, 40); - if (typeof damage !== 'number') throw new Error("Confusion damage not dealt"); - this.directDamage(damage); - }, - }, - - // weather! - - raindance: { - inherit: true, - onBasePower(basePower, attacker, defender, move) { - if (move.id === 'scald' || move.id === 'steameruption') { - return; - } - if (move.type === 'Water') { - this.debug('rain water boost'); - return basePower * 1.5; - } - if (move.type === 'Fire') { - this.debug('rain fire suppress'); - return basePower * 0.5; - } - }, - }, - sunnyday: { - inherit: true, - onBasePower(basePower, attacker, defender, move) { - if (move.id === 'scald' || move.id === 'steameruption') { - return; - } - if (move.type === 'Fire') { - this.debug('Sunny Day fire boost'); - return basePower * 1.5; - } - if (move.type === 'Water') { - this.debug('Sunny Day water suppress'); - return basePower * 0.5; - } - }, - }, - - // intrinsics! - - bidestall: { - name: 'bidestall', - duration: 3, - }, - - unown: { - // Unown: Shadow Tag - onImmunity(type, pokemon) { - if (type === 'Ground' && !this.suppressingAbility(pokemon)) return false; - }, - onStart(pokemon) { - if (pokemon.ability === 'levitate') { - pokemon.ability = 'shadowtag' as ID; - pokemon.baseAbility = 'shadowtag' as ID; - } - if (pokemon.transformed) return; - pokemon.setType(pokemon.hpType || 'Dark'); - }, - }, - bronzong: { - // Bronzong: Heatproof - onImmunity(type, pokemon) { - if (type === 'Ground' && !this.suppressingAbility(pokemon)) return false; - }, - onStart(pokemon) { - if (pokemon.ability === 'levitate') { - pokemon.ability = 'heatproof' as ID; - pokemon.baseAbility = 'heatproof' as ID; - } - }, - }, - weezing: { - // Weezing: Aftermath - onImmunity(type, pokemon) { - if (type === 'Ground' && !this.suppressingAbility(pokemon)) return false; - }, - onStart(pokemon) { - if (pokemon.ability === 'levitate') { - pokemon.ability = 'aftermath' as ID; - pokemon.baseAbility = 'aftermath' as ID; - } - }, - }, - flygon: { - // Flygon: Compoundeyes - onImmunity(type, pokemon) { - if (type === 'Ground' && !this.suppressingAbility(pokemon)) return false; - }, - onStart(pokemon) { - if (pokemon.ability === 'levitate') { - pokemon.ability = 'compoundeyes' as ID; - pokemon.baseAbility = 'compoundeyes' as ID; - } - }, - }, - eelektross: { - // Eelektross: Poison Heal - onImmunity(type, pokemon) { - if (type === 'Ground' && !this.suppressingAbility(pokemon)) return false; - }, - onStart(pokemon) { - if (pokemon.ability === 'levitate') { - pokemon.ability = 'poisonheal' as ID; - pokemon.baseAbility = 'poisonheal' as ID; - } - }, - }, - claydol: { - // Claydol: Filter - onImmunity(type, pokemon) { - if (type === 'Ground' && !this.suppressingAbility(pokemon)) return false; - }, - onStart(pokemon) { - if (pokemon.ability === 'levitate') { - pokemon.ability = 'filter' as ID; - pokemon.baseAbility = 'filter' as ID; - } - }, - }, - gengar: { - // Gengar: Cursed Body - onImmunity(type, pokemon) { - if (pokemon.species.id !== 'gengarmega' && type === 'Ground' && !this.suppressingAbility(pokemon)) return false; - }, - onStart(pokemon) { - if (pokemon.ability === 'levitate') { - pokemon.ability = 'cursedbody' as ID; - pokemon.baseAbility = 'cursedbody' as ID; - } - }, - }, - mismagius: { - // Mismagius: Cursed Body - onImmunity(type, pokemon) { - if (type === 'Ground' && !this.suppressingAbility(pokemon)) return false; - }, - onStart(pokemon) { - if (pokemon.ability === 'levitate') { - pokemon.ability = 'cursedbody' as ID; - pokemon.baseAbility = 'cursedbody' as ID; - } - }, - }, - mesprit: { - // Mesprit: Serene Grace - onImmunity(type, pokemon) { - if (type === 'Ground' && !this.suppressingAbility(pokemon)) return false; - }, - onStart(pokemon) { - if (pokemon.ability === 'levitate') { - pokemon.ability = 'serenegrace' as ID; - pokemon.baseAbility = 'serenegrace' as ID; - } - }, - }, - uxie: { - // Uxie: Synchronize - onImmunity(type, pokemon) { - if (type === 'Ground' && !this.suppressingAbility(pokemon)) return false; - }, - onStart(pokemon) { - if (pokemon.ability === 'levitate') { - pokemon.ability = 'synchronize' as ID; - pokemon.baseAbility = 'synchronize' as ID; - } - }, - }, - azelf: { - // Azelf: Steadfast - onImmunity(type, pokemon) { - if (type === 'Ground' && !this.suppressingAbility(pokemon)) return false; - }, - onStart(pokemon) { - if (pokemon.ability === 'levitate') { - pokemon.ability = 'steadfast' as ID; - pokemon.baseAbility = 'steadfast' as ID; - } - }, - }, - hydreigon: { - // Hydreigon: Sheer Force - onImmunity(type, pokemon) { - if (type === 'Ground' && !this.suppressingAbility(pokemon)) return false; - }, - onStart(pokemon) { - if (pokemon.ability === 'levitate') { - pokemon.ability = 'sheerforce' as ID; - pokemon.baseAbility = 'sheerforce' as ID; - } - }, - }, - rotom: { - // All Rotoms: Trace - onImmunity(type, pokemon) { - if (type === 'Ground' && !this.suppressingAbility(pokemon)) return false; - }, - onStart(pokemon) { - if (pokemon.ability === 'levitate') { - pokemon.ability = 'trace' as ID; - pokemon.baseAbility = 'trace' as ID; - } - }, - }, - rotomheat: { - // All Rotoms: Trace - onImmunity(type, pokemon) { - if (type === 'Ground' && !this.suppressingAbility(pokemon)) return false; - }, - onStart(pokemon) { - if (pokemon.ability === 'levitate') { - pokemon.ability = 'trace' as ID; - pokemon.baseAbility = 'trace' as ID; - } - }, - }, - rotomwash: { - // All Rotoms: Trace - onImmunity(type, pokemon) { - if (type === 'Ground' && !this.suppressingAbility(pokemon)) return false; - }, - onStart(pokemon) { - if (pokemon.ability === 'levitate') { - pokemon.ability = 'trace' as ID; - pokemon.baseAbility = 'trace' as ID; - } - }, - }, - rotomfan: { - // All Rotoms: Trace - onImmunity(type, pokemon) { - if (type === 'Ground' && !this.suppressingAbility(pokemon)) return false; - }, - onStart(pokemon) { - if (pokemon.ability === 'levitate') { - pokemon.ability = 'trace' as ID; - pokemon.baseAbility = 'trace' as ID; - } - }, - }, - rotomfrost: { - // All Rotoms: Trace - onImmunity(type, pokemon) { - if (type === 'Ground' && !this.suppressingAbility(pokemon)) return false; - }, - onStart(pokemon) { - if (pokemon.ability === 'levitate') { - pokemon.ability = 'trace' as ID; - pokemon.baseAbility = 'trace' as ID; - } - }, - }, - rotommow: { - // All Rotoms: Trace - onImmunity(type, pokemon) { - if (type === 'Ground' && !this.suppressingAbility(pokemon)) return false; - }, - onStart(pokemon) { - if (pokemon.ability === 'levitate') { - pokemon.ability = 'trace' as ID; - pokemon.baseAbility = 'trace' as ID; - } - }, - }, - cryogonal: { - // Cryogonal: infinite hail, Ice Body - onModifyMove(move) { - if (move.id === 'hail') { - const weather = move.weather as string; - move.weather = ''; - move.onHit = function (target, source) { - this.field.setWeather(weather, source, this.dex.abilities.get('snowwarning')); - this.field.weatherState.duration = 0; - }; - move.target = 'self'; - } - }, - onImmunity(type, pokemon) { - if (type === 'Ground' && !this.suppressingAbility(pokemon)) return false; - }, - onStart(pokemon) { - if (pokemon.ability === 'levitate') { - pokemon.ability = 'icebody' as ID; - pokemon.baseAbility = 'icebody' as ID; - } - }, - }, - probopass: { - // Probopass: infinite sand - onModifyMove(move) { - if (move.id === 'sandstorm') { - const weather = move.weather as string; - move.weather = ''; - move.onHit = function (target, source) { - this.field.setWeather(weather, source, this.dex.abilities.get('sandstream')); - this.field.weatherState.duration = 0; - }; - move.target = 'self'; - } - }, - }, - phione: { - // Phione: infinite rain - onModifyMove(move) { - if (move.id === 'raindance') { - const weather = move.weather as string; - move.weather = ''; - move.onHit = function (target, source) { - this.field.setWeather(weather, source, this.dex.abilities.get('drizzle')); - this.field.weatherState.duration = 0; - }; - move.target = 'self'; - } - }, - }, -}; diff --git a/data/mods/gennext/formats-data.ts b/data/mods/gennext/formats-data.ts deleted file mode 100644 index b208a289c873..000000000000 --- a/data/mods/gennext/formats-data.ts +++ /dev/null @@ -1,62 +0,0 @@ -export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { - aegislash: { - inherit: true, - tier: "OU", - }, - blaziken: { - inherit: true, - tier: "OU", - }, - blazikenmega: { - inherit: true, - tier: "OU", - }, - genesect: { - inherit: true, - tier: "OU", - }, - gengarmega: { - inherit: true, - tier: "OU", - }, - greninja: { - inherit: true, - tier: "OU", - }, - kangaskhanmega: { - inherit: true, - tier: "OU", - }, - landorus: { - inherit: true, - tier: "OU", - }, - mawilemega: { - inherit: true, - tier: "OU", - }, - salamencemega: { - inherit: true, - tier: "OU", - }, - deoxysdefense: { - inherit: true, - tier: "Uber", - }, - deoxysspeed: { - inherit: true, - tier: "Uber", - }, - hoopaunbound: { - inherit: true, - tier: "OU", - }, - kyurem: { - inherit: true, - tier: "Uber", - }, - kyuremblack: { - inherit: true, - tier: "Uber", - }, -}; diff --git a/data/mods/gennext/items.ts b/data/mods/gennext/items.ts deleted file mode 100644 index d6ac4b4e160d..000000000000 --- a/data/mods/gennext/items.ts +++ /dev/null @@ -1,178 +0,0 @@ -export const Items: {[k: string]: ModdedItemData} = { - burndrive: { - inherit: true, - onBasePower(basePower, user, target, move) {}, - desc: "Changes Genesect to Genesect-Burn.", - }, - chilldrive: { - inherit: true, - onBasePower(basePower, user, target, move) {}, - desc: "Changes Genesect to Genesect-Chill.", - }, - dousedrive: { - inherit: true, - onBasePower(basePower, user, target, move) {}, - desc: "Changes Genesect to Genesect-Douse.", - }, - shockdrive: { - inherit: true, - onBasePower(basePower, user, target, move) {}, - desc: "Changes Genesect to Genesect-Shock.", - }, - widelens: { - inherit: true, - onSourceModifyAccuracy(accuracy) { - if (typeof accuracy === 'number') { - return accuracy * 1.3; - } - }, - desc: "The accuracy of attacks by the holder is 1.6x.", - }, - zoomlens: { - inherit: true, - onSourceModifyAccuracy(accuracy, target) { - if (typeof accuracy === 'number' && !this.queue.willMove(target)) { - this.debug('Zoom Lens boosting accuracy'); - return accuracy * 1.6; - } - }, - desc: "The accuracy of attacks by the holder is 1.6x if it moves after its target.", - }, - bigroot: { - inherit: true, - onAfterMoveSecondarySelf(source, target) { - if (source.hasType('Grass')) { - this.heal(source.lastDamage / 8, source); - } - }, - onResidualOrder: 5, - onResidualSubOrder: 2, - onResidual(pokemon) { - if (pokemon.hasType('Grass')) { - this.heal(pokemon.baseMaxhp / 16); - } - }, - desc: "Holder gains 1.3x HP from draining/Aqua Ring/Ingrain/Leech Seed/Strength Sap; If the user is a Grass type, the holder heals 1/16 of its max HP every turn, and for every damaging move the holder uses 1/8th of the damage dealt is restored.", - shortDesc: "Holder gains 1.3x from most healing moves; if the user is a Grass type, Leftovers & Shell Bell effects occur.", - }, - blacksludge: { - inherit: true, - onResidualOrder: 5, - onResidualSubOrder: 2, - onResidual(pokemon) { - if (pokemon.hasType('Poison')) { - this.heal(pokemon.baseMaxhp / (pokemon.getTypes().length === 1 ? 8 : 16)); - } else { - this.damage(pokemon.baseMaxhp / 8); - } - }, - desc: "Each turn, if holder is a Poison type, restores 1/16 max HP; loses 1/8 if not. Pure Poison types restore 1/8 max HP.", - }, - focusband: { - inherit: true, - onDamage(damage, target, source, effect) { - const types = target.getTypes(); - if (types.length === 1 && types[0] === 'Fighting' && - effect && effect.effectType === 'Move' && - target.useItem()) { - if (damage >= target.hp) { - this.add("-message", target.name + " held on using its Focus Band!"); - return target.hp - 1; - } else { - this.add("-message", target.name + "'s Focus Band broke!"); - } - } - }, - desc: "Breaks on first hit, but allows pure Fighting types to survive that hit with 1 HP.", - }, - wiseglasses: { - inherit: true, - onBasePower(basePower, user, target, move) { - if (move.category === 'Special') { - const types = user.getTypes(); - if (types.length === 1 && types[0] === 'Psychic') { - return basePower * 1.2; - } - return basePower * 1.1; - } - }, - desc: "Holder's special attacks have 1.1x power. Pure Psychic types special attacks have 1.2x power.", - shortDesc: "Holder's SpA have 1.1x power. Pure Psychic types SpA have 1.2x power.", - }, - muscleband: { - inherit: true, - onBasePower(basePower, user, target, move) { - if (move.category === 'Physical') { - const types = user.getTypes(); - if (types.length === 1 && types[0] === 'Fighting') { - return basePower * 1.2; - } - return basePower * 1.1; - } - }, - desc: "Holder's physical attacks have 1.1x power. Pure Fighting types physical attacks have 1.2x power.", - shortDesc: "Holder's Atk have 1.1x power. Pure Fighting types Atk have 1.2x power.", - }, - stick: { - inherit: true, - // The Stick is a stand-in for a number of pokemon-exclusive items - // introduced with Gen Next - onModifyCritRatio(critRatio, user) { - if (user.species.id === 'farfetchd') { - return critRatio + 2; - } - }, - onModifyDef(def, pokemon) { - if (pokemon.species.name === 'Shuckle') { - return def * 1.5; - } - }, - onModifySpA(spa, pokemon) { - if (pokemon.species.name === 'Unown') { - return spa * 2; - } - }, - onModifySpD(spd, pokemon) { - if (pokemon.species.name === 'Unown') { - return spd * 2; - } - if (pokemon.species.name === 'Shuckle') { - return spd * 1.5; - } - }, - onModifySpe(spe, pokemon) { - if (pokemon.species.name === 'Unown') { - return spe * 2; - } - }, - onFoeBasePower(basePower, attacker, defender, move) { - const GossamerWingUsers = ["Butterfree", "Masquerain", "Beautifly", "Mothim", "Vivillon"]; - if (GossamerWingUsers.includes(defender.species.name)) { - if (['Rock', 'Electric', 'Ice'].includes(move.type)) { - this.add('-message', "The attack was weakened by GoassamerWing!"); - return basePower / 2; - } - } - }, - onDamage(damage, defender, attacker, effect) { - const GossamerWingUsers = ["Butterfree", "Masquerain", "Beautifly", "Mothim", "Vivillon"]; - if (GossamerWingUsers.includes(defender.species.name)) { - if (effect && effect.id === 'stealthrock') { - return damage / 2; - } - } - }, - onAfterMoveSecondarySelf(source, target, move) { - const GossamerWingUsers = ["Butterfree", "Masquerain", "Beautifly", "Mothim", "Vivillon"]; - if (move.effectType === 'Move' && move.category === 'Status' && GossamerWingUsers.includes(source.species.name)) { - this.heal(source.baseMaxhp / 16); - } - }, - // onResidual(pokemon) { - // if (pokemon.species.name === 'Shuckle') { - // this.heal(this.clampIntRange(pokemon.maxhp / 16, 1)); - // } - // }, - desc: "Raises Farfetch\u2019d's critical hit rate two stages.", - }, -}; diff --git a/data/mods/gennext/moves.ts b/data/mods/gennext/moves.ts deleted file mode 100644 index 7fe95c997a4b..000000000000 --- a/data/mods/gennext/moves.ts +++ /dev/null @@ -1,2119 +0,0 @@ -export const Moves: {[k: string]: ModdedMoveData} = { - /****************************************************************** - Perfect accuracy moves: - - base power increased to 90 - - Justification: - - perfect accuracy is too underpowered to have such low base power - - it's not even an adequate counter to accuracy boosting, which - is why the latter is banned in OU - - Precedent: - - Giga Drain and Drain Punch, similar 60 base power moves, have - been upgraded - ******************************************************************/ - aerialace: { - inherit: true, - basePower: 90, - }, - feintattack: { - inherit: true, - basePower: 90, - }, - shadowpunch: { - inherit: true, - basePower: 90, - }, - magnetbomb: { - inherit: true, - basePower: 90, - }, - magicalleaf: { - inherit: true, - basePower: 90, - }, - shockwave: { - inherit: true, - basePower: 90, - }, - swift: { - inherit: true, - basePower: 90, - }, - disarmingvoice: { - inherit: true, - basePower: 90, - }, - aurasphere: { - inherit: true, - basePower: 90, - }, - clearsmog: { - inherit: true, - basePower: 90, - }, - /****************************************************************** - HMs: - - shouldn't suck (as much) - - Justification: - - there are HMs that don't suck - - Precedent: - - Dive! Technically, it was to be in-line with Dig, but still. - ******************************************************************/ - strength: { - inherit: true, - secondary: { - chance: 30, - self: { - boosts: { - atk: 1, - }, - }, - }, - shortDesc: "30% chance of raising user's Atk by 1 stage.", - desc: "This move has a 30% chance of raising the user's Attack by one stage.", - }, - cut: { - inherit: true, - accuracy: 100, - secondary: { - chance: 100, - boosts: { - def: -1, - }, - }, - desc: "100% chance of lowering the target's Defense by one stage.", - shortDesc: "Lowers the target's Def by 1 stage.", - }, - rocksmash: { - inherit: true, - basePower: 50, - secondary: { - chance: 100, - boosts: { - def: -1, - }, - }, - desc: "100% chance of lowering the target's Defense by one stage.", - shortDesc: "Lowers the target's Def by 1 stage.", - }, - /****************************************************************** - Weather moves: - - have increased priority - - Justification: - - several Rain abusers get Prankster, which makes Rain otherwise - overpowered - ******************************************************************/ - raindance: { - inherit: true, - priority: 1, - }, - sunnyday: { - inherit: true, - priority: 1, - }, - sandstorm: { - inherit: true, - priority: 1, - }, - hail: { - inherit: true, - priority: 1, - }, - /****************************************************************** - Substitute: - - has precedence over Protect - - makes all moves hit against it - Minimize: - - only +1 evasion - Double Team: - - -25% maxhp when used - - Justification: - - Sub/Protect stalling is annoying - - Evasion stalling is annoying - ******************************************************************/ - substitute: { - inherit: true, - condition: { - onStart(target) { - this.add('-start', target, 'Substitute'); - this.effectState.hp = Math.floor(target.maxhp / 4); - delete target.volatiles['partiallytrapped']; - }, - onAccuracyPriority: -100, - onAccuracy(accuracy, target, source, move) { - return 100; - }, - onTryPrimaryHitPriority: 2, - onTryPrimaryHit(target, source, move) { - if (target === source || move.flags['bypasssub'] || move.infiltrates) { - return; - } - let damage = this.actions.getDamage(source, target, move); - if (!damage) { - return null; - } - damage = this.runEvent('SubDamage', target, source, move, damage); - if (!damage) { - return damage; - } - if (damage > target.volatiles['substitute'].hp) { - damage = target.volatiles['substitute'].hp as number; - } - target.volatiles['substitute'].hp -= damage; - source.lastDamage = damage; - if (target.volatiles['substitute'].hp <= 0) { - target.removeVolatile('substitute'); - } else { - this.add('-activate', target, 'Substitute', '[damage]'); - } - if (move.recoil) { - this.damage(this.clampIntRange(Math.round(damage * move.recoil[0] / move.recoil[1]), 1), source, target, 'recoil'); - } - if (move.drain) { - this.heal(Math.ceil(damage * move.drain[0] / move.drain[1]), source, target, 'drain'); - } - this.runEvent('AfterSubDamage', target, source, move, damage); - return this.HIT_SUBSTITUTE; - }, - onEnd(target) { - this.add('-end', target, 'Substitute'); - }, - }, - }, - protect: { - inherit: true, - condition: { - duration: 1, - onStart(target) { - this.add('-singleturn', target, 'Protect'); - }, - onTryHitPriority: 3, - onTryHit(target, source, move) { - if (target.volatiles['substitute'] || !move.flags['protect']) return; - this.add('-activate', target, 'Protect'); - const lockedmove = source.getVolatile('lockedmove'); - if (lockedmove) { - // Outrage counter is reset - if (source.volatiles['lockedmove'].duration === 2) { - delete source.volatiles['lockedmove']; - } - } - return null; - }, - }, - }, - kingsshield: { - inherit: true, - condition: { - duration: 1, - onStart(target) { - this.add('-singleturn', target, 'Protect'); - }, - onTryHitPriority: 3, - onTryHit(target, source, move) { - if (target.volatiles['substitute'] || !move.flags['protect'] || move.category === 'Status') return; - this.add('-activate', target, 'Protect'); - const lockedmove = source.getVolatile('lockedmove'); - if (lockedmove) { - // Outrage counter is reset - if (source.volatiles['lockedmove'].duration === 2) { - delete source.volatiles['lockedmove']; - } - } - if (move.flags['contact']) { - this.boost({atk: -2}, source, target, move); - } - return null; - }, - }, - }, - spikyshield: { - inherit: true, - condition: { - duration: 1, - onStart(target) { - this.add('-singleturn', target, 'move: Protect'); - }, - onTryHitPriority: 3, - onTryHit(target, source, move) { - if (target.volatiles['substitute'] || !move.flags['protect']) return; - if (move && (move.target === 'self' || move.id === 'suckerpunch')) return; - this.add('-activate', target, 'move: Protect'); - if (move.flags['contact']) { - this.damage(source.baseMaxhp / 8, source, target); - } - return null; - }, - }, - }, - minimize: { - inherit: true, - boosts: { - evasion: 1, - }, - desc: "Raises the user's evasiveness by 1 stages. Whether or not the user's evasiveness was changed, Body Slam, Dragon Rush, Flying Press, Heat Crash, Heavy Slam, Phantom Force, Shadow Force, Steamroller, and Stomp will not check accuracy and have their damage doubled if used against the user while it is active.", - shortDesc: "Raises the user's evasiveness by 1.", - }, - doubleteam: { - inherit: true, - onTryHit(target) { - if (target.boosts.evasion >= 6) { - return false; - } - if (target.hp <= target.maxhp / 4 || target.maxhp === 1) { // Shedinja clause - return false; - } - }, - onHit(target) { - this.directDamage(target.maxhp / 4); - }, - boosts: { - evasion: 1, - }, - desc: "Raises the user's evasiveness by 1 stage; the user loses 1/4 of its max HP.", - shortDesc: "Raises the user's evasiveness by 1; the user loses 25% of its max HP.", - }, - /****************************************************************** - Two-turn moves: - - now a bit better - - Justification: - - Historically, these moves are useless. - ******************************************************************/ - solarbeam: { - inherit: true, - basePower: 80, - basePowerCallback(pokemon, target) { - return 80; - }, - willCrit: true, - accuracy: true, - onTryHit(target) { - target.removeVolatile('substitute'); - }, - condition: { - duration: 2, - onLockMove: 'solarbeam', - onStart(pokemon) { - this.heal(pokemon.baseMaxhp / 2); - }, - }, - desc: "This attack charges on the first turn and executes on the second. Power is halved if the weather is Hail, Rain Dance, or Sandstorm. If the user is holding a Power Herb or the weather is Sunny Day, the move completes in one turn. The user heals 1/2 of its max HP during the charge turn. This move removes the target's Substitute (if one is active), and bypasses Protect. This move is also a guaranteed critical hit.", - shortDesc: "Charges turn 1. Hits turn 2. No charge in sunlight. Heals 1/2 of the user's max HP, on charge.", - flags: {charge: 1, mirror: 1}, - breaksProtect: true, - }, - razorwind: { - inherit: true, - basePower: 60, - willCrit: true, - accuracy: true, - onTryHit(target) { - target.removeVolatile('substitute'); - }, - secondary: { - chance: 100, - volatileStatus: 'confusion', - }, - desc: "Has a higher chance for a critical hit. This attack charges on the first turn and executes on the second. If the user is holding a Power Herb, the move completes in one turn. 100% chance to confuse the target. This move removes the target's Substitute (if one is active), and bypasses Protect. This move is also a guaranteed critical hit.", - shortDesc: "Charges, then hits foe(s) turn 2. High crit ratio. Confuses target.", - flags: {charge: 1, mirror: 1}, - breaksProtect: true, - }, - skullbash: { - inherit: true, - basePower: 70, - willCrit: true, - accuracy: true, - onTryHit(target) { - target.removeVolatile('substitute'); - }, - onTryMove(attacker, defender, move) { - if (attacker.removeVolatile(move.id)) { - return; - } - this.add('-prepare', attacker, move.name); - this.boost({def: 1, spd: 1, accuracy: 1}, attacker, attacker, move); - if (!this.runEvent('ChargeMove', attacker, defender, move)) { - return; - } - attacker.addVolatile('twoturnmove', defender); - return null; - }, - flags: {contact: 1, charge: 1, mirror: 1}, - breaksProtect: true, - desc: "This attack charges on the first turn and executes on the second. Raises the user's Defense, Special Defense, and Accuracy by 1 stage on the first turn. If the user is holding a Power Herb, the move completes in one turn. This move removes the target's Substitute (if one is active), and bypasses Protect. This move is also a guaranteed critical hit.", - shortDesc: "Raises user's Def, SpD, Acc by 1 on turn 1. Hits turn 2.", - }, - skyattack: { - inherit: true, - basePower: 95, - willCrit: true, - accuracy: true, - onTryHit(target) { - target.removeVolatile('substitute'); - }, - secondary: { - chance: 100, - boosts: { - def: -1, - }, - }, - flags: {charge: 1, mirror: 1, distance: 1}, - breaksProtect: true, - desc: "Has a 30% chance to flinch the target and a higher chance for a critical hit. This attack charges on the first turn and executes on the second. If the user is holding a Power Herb, the move completes in one turn. 100% chance to lower the target's Defense by one stage. This move removes the target's Substitute (if one is active), and bypasses Protect. This move is also a guaranteed critical hit.", - shortDesc: "Charges, then hits turn 2. 30% flinch. High crit.", - }, - freezeshock: { - inherit: true, - basePower: 95, - willCrit: true, - accuracy: true, - onTryHit(target) { - target.removeVolatile('substitute'); - }, - secondary: { - chance: 100, - status: 'par', - }, - flags: {charge: 1, mirror: 1}, - breaksProtect: true, - desc: "Has a 100% chance to paralyze the target. This attack charges on the first turn and executes on the second. If the user is holding a Power Herb, the move completes in one turn. This move removes the target's Substitute (if one is active), and bypasses Protect. This move is also a guaranteed critical hit.", - shortDesc: "Charges turn 1. Hits turn 2. 100% paralyze.", - }, - iceburn: { - inherit: true, - basePower: 95, - willCrit: true, - accuracy: true, - onTryHit(target) { - target.removeVolatile('substitute'); - }, - secondary: { - chance: 100, - status: 'brn', - }, - flags: {charge: 1, mirror: 1}, - breaksProtect: true, - desc: "Has a 100% chance to burn the target. This attack charges on the first turn and executes on the second. If the user is holding a Power Herb, the move completes in one turn. This move removes the target's Substitute (if one is active), and bypasses Protect. This move is also a guaranteed critical hit.", - shortDesc: "Charges turn 1. Hits turn 2. 100% burn.", - }, - bounce: { - inherit: true, - basePower: 60, - willCrit: true, - accuracy: true, - onTryHit(target) { - target.removeVolatile('substitute'); - }, - flags: {contact: 1, charge: 1, mirror: 1, gravity: 1, distance: 1}, - breaksProtect: true, - desc: "Has a 30% chance to paralyze the target. This attack charges on the first turn and executes on the second. On the first turn, the user avoids all attacks other than Gust, Hurricane, Sky Uppercut, Smack Down, Thousand Arrows, Thunder, and Twister. If the user is holding a Power Herb, the move completes in one turn. This move removes the target's Substitute (if one is active), and bypasses Protect. This move is also a guaranteed critical hit.", - shortDesc: "Bounces turn 1. Hits turn 2. 30% paralyze.", - }, - fly: { - inherit: true, - basePower: 60, - willCrit: true, - accuracy: true, - onTryHit(target) { - target.removeVolatile('substitute'); - }, - secondary: { - chance: 100, - boosts: { - def: -1, - }, - }, - flags: {contact: 1, charge: 1, mirror: 1, gravity: 1, distance: 1}, - breaksProtect: true, - desc: "This attack charges on the first turn and executes on the second. On the first turn, the user avoids all attacks other than Gust, Hurricane, Sky Uppercut, Smack Down, Thousand Arrows, Thunder, and Twister. If the user is holding a Power Herb, the move completes in one turn. 100% chance to lower the target's Defense by one stage. This move removes the target's Substitute (if one is active), and bypasses Protect. This move is also a guaranteed critical hit.", - shortDesc: "Flies up on first turn, then strikes the next turn. Lowers target's Def by 1 stage.", - }, - dig: { - inherit: true, - basePower: 60, - willCrit: true, - accuracy: true, - onTryHit(target) { - target.removeVolatile('substitute'); - }, - secondary: { - chance: 100, - boosts: { - def: -1, - }, - }, - desc: "This attack charges on the first turn and executes on the second. On the first turn, the user avoids all attacks other than Earthquake and Magnitude but takes double damage from them, and is also unaffected by weather. If the user is holding a Power Herb, the move completes in one turn. 100% chance to lower the target's Defense by one stage. This move removes the target's Substitute (if one is active), and bypasses Protect. This move is also a guaranteed critical hit.", - shortDesc: "Digs underground turn 1, strikes turn 2. Lowers target's Def by 1 stage.", - flags: {contact: 1, charge: 1, mirror: 1, nonsky: 1}, - breaksProtect: true, - }, - dive: { - inherit: true, - basePower: 60, - willCrit: true, - accuracy: true, - onTryHit(target) { - target.removeVolatile('substitute'); - }, - secondary: { - chance: 100, - boosts: { - def: -1, - }, - }, - desc: "This attack charges on the first turn and executes on the second. On the first turn, the user avoids all attacks other than Surf and Whirlpool but takes double damage from them, and is also unaffected by weather. If the user is holding a Power Herb, the move completes in one turn. 100% chance to lower the target's Defense by one stage. This move removes the target's Substitute (if one is active), and bypasses Protect. This move is also a guaranteed critical hit.", - shortDesc: "Dives underwater turn 1, strikes turn 2. Lowers target's Def by 1 stage.", - flags: {contact: 1, charge: 1, mirror: 1, nonsky: 1}, - breaksProtect: true, - }, - phantomforce: { - inherit: true, - basePower: 60, - willCrit: true, - accuracy: true, - onTryHit(target) { - target.removeVolatile('substitute'); - }, - secondary: { - chance: 100, - boosts: { - def: -1, - }, - }, - desc: "If this move is successful, it breaks through the target's Detect, King's Shield, Protect, or Spiky Shield for this turn, allowing other Pokemon to attack the target normally. If the target's side is protected by Crafty Shield, Mat Block, Quick Guard, or Wide Guard, that protection is also broken for this turn and other Pokemon may attack the target's side normally. This attack charges on the first turn and executes on the second. On the first turn, the user avoids all attacks. If the user is holding a Power Herb, the move completes in one turn. Damage doubles and no accuracy check is done if the target has used Minimize while active. 100% chance to lower the target's Defense by one stage. This move removes the target's Substitute (if one is active). This move is also a guaranteed critical hit.", - shortDesc: "Disappears turn 1. Hits turn 2. Breaks protection. Lowers target's Def by 1 stage.", - }, - shadowforce: { - inherit: true, - basePower: 40, - willCrit: true, - accuracy: true, - onTryHit(target) { - target.removeVolatile('substitute'); - }, - secondary: { - chance: 100, - volatileStatus: 'curse', - }, - desc: "If this move is successful, it breaks through the target's Detect, King's Shield, Protect, or Spiky Shield for this turn, allowing other Pokemon to attack the target normally. If the target's side is protected by Crafty Shield, Mat Block, Quick Guard, or Wide Guard, that protection is also broken for this turn and other Pokemon may attack the target's side normally. This attack charges on the first turn and executes on the second. On the first turn, the user avoids all attacks. If the user is holding a Power Herb, the move completes in one turn. Damage doubles and no accuracy check is done if the target has used Minimize while active. 100% chance to inflict a curse (ghost type) onto the target. This move removes the target's Substitute (if one is active). This move is also a guaranteed critical hit.", - shortDesc: "Disappears turn 1. Hits turn 2. Breaks protection. Curses the target.", - }, - skydrop: { - inherit: true, - basePower: 60, - willCrit: true, - accuracy: true, - secondary: { - chance: 100, - boosts: { - def: -1, - }, - }, - desc: "This attack takes the target into the air with the user on the first turn and executes on the second. Pokemon weighing 200kg or more cannot be lifted. On the first turn, the user and the target avoid all attacks other than Gust, Hurricane, Sky Uppercut, Smack Down, Thousand Arrows, Thunder, and Twister. The user and the target cannot make a move between turns, but the target can select a move to use. This move cannot damage Flying-type Pokemon. Fails on the first turn if the target is an ally or if the target has a substitute. Lowers the target's Defense by one stage. This move is a guaranteed critical hit. This move ignores Protection.", - shortDesc: "User and foe fly up turn 1. Damages on turn 2. Lowers target's Def by 1 stage.", - flags: {contact: 1, charge: 1, mirror: 1, gravity: 1, distance: 1}, - breaksProtect: true, - }, - hyperbeam: { - inherit: true, - accuracy: true, - basePower: 100, - willCrit: true, - self: null, - onHit(target, source) { - if (!target.hp) { - source.addVolatile('mustrecharge'); - } - }, - desc: "If this move is successful, the user must recharge on the following turn and cannot make a move. If the target is knocked out by this move, the user does not have to recharge. This move is a guaranteed critical hit.", - shortDesc: "User cannot move next turn, if the target isn't KO'ed.", - }, - gigaimpact: { - inherit: true, - accuracy: true, - basePower: 100, - willCrit: true, - self: null, - onHit(target, source) { - if (!target.hp) { - source.addVolatile('mustrecharge'); - } - }, - desc: "If this move is successful, the user must recharge on the following turn and cannot make a move. If the target is knocked out by this move, the user does not have to recharge. This move is a guaranteed critical hit.", - shortDesc: "User cannot move next turn, if the target isn't KO'ed.", - }, - blastburn: { - inherit: true, - accuracy: true, - basePower: 100, - willCrit: true, - self: null, - onHit(target, source) { - if (!target.hp) { - source.addVolatile('mustrecharge'); - } - }, - desc: "If this move is successful, the user must recharge on the following turn and cannot make a move. If the target is knocked out by this move, the user does not have to recharge. This move is a guaranteed critical hit.", - shortDesc: "User cannot move next turn, if the target isn't KO'ed.", - }, - frenzyplant: { - inherit: true, - accuracy: true, - basePower: 100, - willCrit: true, - self: null, - onHit(target, source) { - if (!target.hp) { - source.addVolatile('mustrecharge'); - } - }, - desc: "If this move is successful, the user must recharge on the following turn and cannot make a move. If the target is knocked out by this move, the user does not have to recharge. This move is a guaranteed critical hit.", - shortDesc: "User cannot move next turn, if the target isn't KO'ed.", - }, - hydrocannon: { - inherit: true, - accuracy: true, - basePower: 100, - willCrit: true, - self: null, - onHit(target, source) { - if (!target.hp) { - source.addVolatile('mustrecharge'); - } - }, - desc: "If this move is successful, the user must recharge on the following turn and cannot make a move. If the target is knocked out by this move, the user does not have to recharge. This move is a guaranteed critical hit.", - shortDesc: "User cannot move next turn, if the target isn't KO'ed.", - }, - rockwrecker: { - inherit: true, - accuracy: true, - basePower: 100, - willCrit: true, - self: null, - onHit(target, source) { - if (!target.hp) { - source.addVolatile('mustrecharge'); - } - }, - desc: "If this move is successful, the user must recharge on the following turn and cannot make a move. If the target is knocked out by this move, the user does not have to recharge. This move is a guaranteed critical hit.", - shortDesc: "User cannot move next turn, if the target isn't KO'ed.", - }, - roaroftime: { - inherit: true, - accuracy: true, - basePower: 100, - willCrit: true, - self: null, - onHit(target, source) { - if (!target.hp) { - source.addVolatile('mustrecharge'); - } - }, - desc: "If this move is successful, the user must recharge on the following turn and cannot make a move. If the target is knocked out by this move, the user does not have to recharge. This move is a guaranteed critical hit.", - shortDesc: "User cannot move next turn, if the target isn't KO'ed.", - }, - bide: { - inherit: true, - onTryHit(pokemon) { - return this.queue.willAct() && this.runEvent('StallMove', pokemon); - }, - condition: { - duration: 2, - onLockMove: 'bide', - onStart(pokemon) { - if (pokemon.removeVolatile('bidestall') || pokemon.hp <= 1) return false; - pokemon.addVolatile('bidestall'); - this.effectState.totalDamage = 0; - this.add('-start', pokemon, 'Bide'); - }, - onDamagePriority: -11, - onDamage(damage, target, source, effect) { - if (!effect || effect.effectType !== 'Move') return; - if (!source || source.isAlly(target)) return; - if (effect.effectType === 'Move' && damage >= target.hp) { - damage = target.hp - 1; - } - this.effectState.totalDamage += damage; - this.effectState.sourceSlot = source.getSlot(); - return damage; - }, - onAfterSetStatus(status, pokemon) { - if (status.id === 'slp') { - pokemon.removeVolatile('bide'); - pokemon.removeVolatile('bidestall'); - } - }, - onBeforeMove(pokemon, t, move) { - if (this.effectState.duration === 1) { - if (!this.effectState.totalDamage) { - this.add('-end', pokemon, 'Bide'); - this.add('-fail', pokemon); - return false; - } - this.add('-end', pokemon, 'Bide'); - const target = this.getAtSlot(this.effectState.sourceSlot); - const moveData = { - damage: this.effectState.totalDamage * 2, - } as unknown as ActiveMove; - this.actions.moveHit(target, pokemon, this.dex.getActiveMove('bide'), moveData); - return false; - } - this.add('-activate', pokemon, 'Bide'); - return false; - }, - onMoveAborted(pokemon) { - pokemon.removeVolatile('bide'); - }, - }, - }, - /****************************************************************** - Snore: - - base power increased to 100 - - Justification: - - Sleep Talk needs some competition - ******************************************************************/ - snore: { - inherit: true, - basePower: 100, - onBasePower(power, user) { - if (user.species.id === 'snorlax') return power * 1.5; - }, - ignoreImmunity: true, - desc: "Has a 30% chance to flinch the target. Fails if the user is not asleep. If the user is a Snorlax, this move does 1.5x more damage.", - }, - /****************************************************************** - Sound-based Normal-type moves: - - not affected by immunities - - Justification: - - they're already affected by Soundproof, also, ghosts can hear - sounds - ******************************************************************/ - boomburst: { - inherit: true, - ignoreImmunity: true, - }, - hypervoice: { - inherit: true, - ignoreImmunity: true, - }, - round: { - inherit: true, - ignoreImmunity: true, - }, - uproar: { - inherit: true, - ignoreImmunity: true, - }, - /****************************************************************** - Bonemerang, Bone Rush, Bone Club moves: - - not affected by Ground immunities - - Bone Rush nerfed to 20 base power so it's not viable on Lucario - - Justification: - - flavor, also Marowak could use a buff - ******************************************************************/ - bonemerang: { - inherit: true, - ignoreImmunity: true, - accuracy: true, - }, - bonerush: { - inherit: true, - basePower: 20, - ignoreImmunity: true, - accuracy: true, - }, - boneclub: { - inherit: true, - ignoreImmunity: true, - accuracy: 90, - }, - /****************************************************************** - Relic Song: - - now 60 bp priority move with no secondary - - Justification: - - Meloetta-P needs viability - ******************************************************************/ - relicsong: { - inherit: true, - basePower: 60, - ignoreImmunity: true, - onHit(target, pokemon) { - if (pokemon.baseSpecies.name !== 'Meloetta' || pokemon.transformed) { - return; - } - const natureChange: {[k: string]: string} = { - Modest: 'Adamant', - Adamant: 'Modest', - Timid: 'Jolly', - Jolly: 'Timid', - }; - let tmpAtkEVs: number; - let Atk2SpA: number; - if (pokemon.species.id === 'meloettapirouette' && pokemon.formeChange('Meloetta', this.effect, false, '[msg]')) { - tmpAtkEVs = pokemon.set.evs.atk; - pokemon.set.evs.atk = pokemon.set.evs.spa; - pokemon.set.evs.spa = tmpAtkEVs; - if (natureChange[pokemon.set.nature]) pokemon.set.nature = natureChange[pokemon.set.nature]; - Atk2SpA = (pokemon.boosts.spa || 0) - (pokemon.boosts.atk || 0); - this.boost({ - atk: Atk2SpA, - spa: -Atk2SpA, - }, pokemon); - } else if (pokemon.formeChange('Meloetta-Pirouette', this.effect, false, '[msg]')) { - tmpAtkEVs = pokemon.set.evs.atk; - pokemon.set.evs.atk = pokemon.set.evs.spa; - pokemon.set.evs.spa = tmpAtkEVs; - if (natureChange[pokemon.set.nature]) pokemon.set.nature = natureChange[pokemon.set.nature]; - Atk2SpA = (pokemon.boosts.spa || 0) - (pokemon.boosts.atk || 0); - this.boost({ - atk: Atk2SpA, - spa: -Atk2SpA, - }, pokemon); - } - // renderer takes care of this for us - pokemon.transformed = false; - }, - priority: 1, - secondary: null, - desc: "Has a 10% chance to cause the target to fall asleep. If this move is successful on at least one target and the user is a Meloetta, it changes to Pirouette Forme if it is currently in Aria Forme, or changes to Aria Forme if it is currently in Pirouette Forme. This forme change does not happen if the Meloetta has the Ability Sheer Force. The Pirouette Forme reverts to Aria Forme when Meloetta is not active. This move also switches Meloetta's SpA and Atk EVs, boosts, and certain natures, specifically: Modest <-> Adamant, Jolly <-> Timid, other natures are left untouched.", - }, - /****************************************************************** - Defend Order, Heal Order: - - now +1 priority - - Justification: - - Vespiquen needs viability - ******************************************************************/ - defendorder: { - inherit: true, - priority: 1, - }, - healorder: { - inherit: true, - priority: 1, - }, - /****************************************************************** - Stealth Rock: - - 1/4 damage to Flying-types, 1/8 damage to everything else - - Justification: - - Never has one move affected the viability of types been affected - by one move to such an extent. Stealth Rock makes many - interesting pokemon NU, changing it gives them a fighting chance. - - Flavor justification: - - Removes from it the status of only residual damage affected by - weaknesses/resistances, which is nice. The double damage to - Flying can be explained as counteracting Flying's immunity to - Spikes. - ******************************************************************/ - stealthrock: { - inherit: true, - condition: { - // this is a side condition - onSideStart(side) { - this.add('-sidestart', side, 'move: Stealth Rock'); - }, - onEntryHazard(pokemon) { - let factor = 2; - if (pokemon.hasType('Flying')) factor = 4; - this.damage(pokemon.maxhp * factor / 16); - }, - }, - desc: "Sets up a hazard on the foe's side of the field. Flying types take 1/4 of their max HP from this hazard. Everything else takes 1/8 of their max HP. Can be removed from the foe's side if any foe uses Rapid Spin or Defog, or is hit by Defog.", - shortDesc: "Hurts foes on switch-in (1/8 for every type except Flying types take 1/4).", - }, - /****************************************************************** - Silver Wind, Ominous Wind, AncientPower: - - 100% chance of raising one stat, instead of 10% chance of raising - all stats - - Silver Wind, Ominous Wind: 90 base power in Hail - - Justification: - - Hail sucks - - Precedent: - - Many weathers strengthen moves. SolarBeam's base power is - modified by weather. - - Flavor justification: - - Winds are more damaging when it's hailing. - ******************************************************************/ - silverwind: { - inherit: true, - basePowerCallback() { - if (this.field.isWeather('hail')) { - return 90; - } - return 60; - }, - secondary: { - chance: 100, - self: { - onHit(target, source) { - const stats: BoostID[] = []; - let stat: BoostID; - for (stat in target.boosts) { - if (stat !== 'accuracy' && stat !== 'evasion' && stat !== 'atk' && target.boosts[stat] < 6) { - stats.push(stat); - } - } - if (stats.length) { - const randomStat = this.sample(stats); - const boost: SparseBoostsTable = {}; - boost[randomStat] = 1; - this.boost(boost); - } else { - return false; - } - }, - }, - }, - desc: "Has a 100% chance to raise the user's Attack, Defense, Special Attack, Special Defense, and Speed by 1 stage. This attack's base power becomes 90, if the weather is set to Hail.", - shortDesc: "Raises all stats by 1 (not acc/eva).", - }, - ominouswind: { - inherit: true, - basePowerCallback() { - if (this.field.isWeather('hail')) { - return 90; - } - return 60; - }, - secondary: { - chance: 100, - self: { - onHit(target, source) { - const stats: BoostID[] = []; - let stat: BoostID; - for (stat in target.boosts) { - if (stat !== 'accuracy' && stat !== 'evasion' && stat !== 'atk' && target.boosts[stat] < 6) { - stats.push(stat); - } - } - if (stats.length) { - const randomStat = this.sample(stats); - const boost: SparseBoostsTable = {}; - boost[randomStat] = 1; - this.boost(boost); - } else { - return false; - } - }, - }, - }, - desc: "Has a 100% chance to raise the user's Attack, Defense, Special Attack, Special Defense, and Speed by 1 stage. This attack's base power becomes 90, if the weather is set to Hail.", - shortDesc: "Raises all stats by 1 (not acc/eva).", - }, - ancientpower: { - inherit: true, - secondary: { - chance: 100, - self: { - onHit(target, source) { - const stats: BoostID[] = []; - let stat: BoostID; - for (stat in target.boosts) { - if (stat !== 'accuracy' && stat !== 'evasion' && stat !== 'atk' && target.boosts[stat] < 6) { - stats.push(stat); - } - } - if (stats.length) { - const randomStat = this.sample(stats); - const boost: SparseBoostsTable = {}; - boost[randomStat] = 1; - this.boost(boost); - } else { - return false; - } - }, - }, - }, - desc: "Has a 100% chance to raise the user's Attack, Defense, Special Attack, Special Defense, and Speed by 1 stage.", - shortDesc: "Raises all stats by 1 (not acc/eva).", - }, - /****************************************************************** - Moves relating to Hail: - - boost in some way - - Justification: - - Hail sucks - ******************************************************************/ - avalanche: { - inherit: true, - basePowerCallback(pokemon, source) { - const lastAttackedBy = pokemon.getLastAttackedBy(); - if (lastAttackedBy) { - if (lastAttackedBy.damage > 0 && lastAttackedBy.thisTurn) { - this.debug('Boosted for getting hit by ' + lastAttackedBy.move); - return this.field.isWeather('hail') ? 180 : 120; - } - } - return this.field.isWeather('hail') ? 90 : 60; - }, - desc: "Power doubles if the user was hit by the target this turn. If the weather is set to hail, this move does 1.5x more damage.", - shortDesc: "Power doubles if user is damaged by the target.", - }, - /****************************************************************** - Direct phazing moves: - - changed to perfect accuracy - - Justification: - - NEXT has buffed perfect accuracy to the point where unbanning - +evasion could be viable. - - as the primary counter to set-up, these should be able to counter - DT (and subDT) in case they are ever unbanned. - - Precedent: - - Haze, a move with a similar role, has perfect accuracy - - Flavor justification: - - Whirlwinds and roaring are wide-area enough that dodging them - isn't generally feasible. - ******************************************************************/ - roar: { - inherit: true, - accuracy: true, - }, - whirlwind: { - inherit: true, - accuracy: true, - }, - /****************************************************************** - Multi-hit moves: - - changed to perfect accuracy - - Justification: - - as an Interesting Mechanic in terms of being able to hit past - Substitute, it could use a buff - - Flavor justification: - - You're going to attack that many times and they're all going to - miss? - ******************************************************************/ - doublehit: { - inherit: true, - accuracy: true, - }, - armthrust: { - inherit: true, - accuracy: true, - }, - barrage: { - inherit: true, - accuracy: true, - }, - beatup: { - inherit: true, - accuracy: true, - }, - bulletseed: { - inherit: true, - accuracy: true, - }, - cometpunch: { - inherit: true, - accuracy: true, - }, - doublekick: { - inherit: true, - accuracy: true, - }, - doubleslap: { - inherit: true, - accuracy: true, - }, - dualchop: { - inherit: true, - accuracy: true, - }, - furyattack: { - inherit: true, - accuracy: true, - }, - furyswipes: { - inherit: true, - accuracy: true, - }, - geargrind: { - inherit: true, - accuracy: true, - }, - iciclespear: { - inherit: true, - accuracy: true, - }, - pinmissile: { - inherit: true, - accuracy: true, - }, - rockblast: { - inherit: true, - accuracy: true, - }, - spikecannon: { - inherit: true, - accuracy: true, - }, - tailslap: { - inherit: true, - accuracy: true, - }, - watershuriken: { - inherit: true, - accuracy: true, - }, - /****************************************************************** - Draining moves: - - buff Leech Life - - Justification: - - Poison, Bug, Grass, and Ghost make sense for draining types. - ******************************************************************/ - leechlife: { - inherit: true, - basePower: 75, - }, - /****************************************************************** - Flying moves: - - now a bit better - - Justification: - - Flying has always been the type that's suffered from limited - distribution. Let's see how it does without that disadvantage. - ******************************************************************/ - twister: { - inherit: true, - basePower: 80, - onBasePower(power, user) { - const GossamerWingUsers = [ - "Butterfree", "Venomoth", "Masquerain", "Dustox", "Beautifly", "Mothim", "Lilligant", "Volcarona", "Vivillon", - ]; - if (user.hasItem('stick') && GossamerWingUsers.includes(user.species.name)) { - return power * 1.5; - } - }, - secondary: { - chance: 30, - volatileStatus: 'confusion', - }, - desc: "Has a 30% chance to flinch the target. Damage doubles if the target is using Bounce, Fly, or Sky Drop. If the user holds the Gossamer Wing, this move does 1.5x more damage.", - shortDesc: "30% chance to flinch the foe(s).", - pp: 15, - type: "Flying", - }, - wingattack: { - inherit: true, - basePower: 40, - accuracy: true, - multihit: [2, 2], - desc: "This move hits twice.", - shortDesc: "Hits twice.", - }, - /****************************************************************** - Moves with not enough drawbacks: - - intensify drawbacks - - Justification: - - Close Combat is way too common. - ******************************************************************/ - closecombat: { - inherit: true, - self: { - boosts: { - def: -2, - spd: -2, - }, - }, - desc: "Lowers the user's Defense and Special Defense by 2 stage.", - shortDesc: "Lowers the user's Defense and Sp. Def by 2.", - }, - /****************************************************************** - Blizzard: - - 30% freeze chance - - Justification: - - freeze was nerfed, Blizzard can now have Thunder/Hurricane-like - secondary chances. - ******************************************************************/ - blizzard: { - inherit: true, - secondary: { - chance: 30, - status: 'frz', - }, - desc: "Has a 30% chance to freeze the target. If the weather is Hail, this move does not check accuracy.", - shortDesc: "30% chance to freeze foe(s). Can't miss in hail.", - }, - /****************************************************************** - Special Ghost and Fighting: - - buff Ghost, nerf Fighting - - Justification: - - Special Fighting shouldn't be so strong. - - Special Ghost is buffed to compensate for having to use HP - Fighting after this - ******************************************************************/ - focusblast: { - inherit: true, - accuracy: 30, - }, - shadowball: { - inherit: true, - basePower: 90, - secondary: { - chance: 30, - boosts: { - spd: -1, - }, - }, - desc: "Has a 30% chance to lower the target's Special Defense by 1 stage.", - shortDesc: "30% chance to lower the target's Sp. Def by 1.", - }, - /****************************************************************** - Selfdestruct and Explosion: - - 200 and 250 base power autocrit - - Justification: - - these were nerfed unreasonably in gen 5, they're now somewhat - usable again. - ******************************************************************/ - selfdestruct: { - inherit: true, - basePower: 200, - accuracy: true, - willCrit: true, - desc: "The user faints after using this move, even if this move fails for having no target. This move is prevented from executing if any active Pokemon has the Ability Damp. This move is a guaranteed critical hit.", - }, - explosion: { - inherit: true, - basePower: 250, - accuracy: true, - willCrit: true, - desc: "The user faints after using this move, even if this move fails for having no target. This move is prevented from executing if any active Pokemon has the Ability Damp. This move is a guaranteed critical hit.", - }, - /****************************************************************** - Scald and Steam Eruption: - - base power not affected by weather - - 60% burn in sun - - Justification: - - rain could use a nerf - ******************************************************************/ - scald: { - inherit: true, - onModifyMove(move) { - switch (this.field.effectiveWeather()) { - case 'sunnyday': - move.secondary!.chance = 60; - break; - } - }, - desc: "Has a 30% chance to burn the target. The target thaws out if it is frozen. If the weather is set to Sunny Day, there is a 60% chance to burn the target.", - }, - steameruption: { - inherit: true, - accuracy: 100, - onModifyMove(move) { - switch (this.field.effectiveWeather()) { - case 'sunnyday': - move.secondary!.chance = 60; - break; - } - }, - desc: "Has a 30% chance to burn the target. The target thaws out if it is frozen. If the weather is set to Sunny Day, there is a 60% chance to burn the target.", - }, - /****************************************************************** - High Jump Kick: - - 100 bp - - Justification: - - Blaziken nerf - ******************************************************************/ - highjumpkick: { - inherit: true, - basePower: 100, - }, - /****************************************************************** - Echoed Voice: - - change - - Justification: - - no one uses Echoed Voice. - ******************************************************************/ - echoedvoice: { - inherit: true, - basePower: 80, - basePowerCallback() { - return 80; - }, - ignoreImmunity: true, - onHit(target, source) { - if (!target.side.addSlotCondition(target, 'futuremove')) return false; - Object.assign(target.side.slotConditions[target.position]['futuremove'], { - duration: 3, - move: 'echoedvoice', - source: source, - moveData: { - id: 'echoedvoice', - name: "Echoed Voice", - accuracy: 100, - basePower: 80, - category: "Special", - priority: 0, - flags: {futuremove: 1}, - ignoreImmunity: false, - effectType: 'Move', - type: 'Normal', - }, - }); - this.add('-start', source, 'move: Echoed Voice'); - return null; - }, - desc: "Deals damage two turns after this move is used. At the end of that turn, the damage is calculated at that time and dealt to the Pokemon at the position the target had when the move was used. If the user is no longer active at the time, damage is calculated based on the user's natural Special Attack stat, types, and level, with no boosts from its held item or Ability. Fails if this move or Future Sight is already in effect for the target's position.", - shortDesc: "Hits two turns after being used.", - }, - /****************************************************************** - Rapid Spin, Rock Throw: - - remove hazards before dealing damage - - double damage if hazards are removed - - Rock Throw removes SR only - - Rapid Spin now has base power 30 - - Rock Throw now has accuracy 100 - - Justification: - - hazards could use a nerf - ******************************************************************/ - rapidspin: { - inherit: true, - basePower: 30, - onBasePower(power, user) { - let doubled = false; - if (user.removeVolatile('leechseed')) { - this.add('-end', user, 'Leech Seed', '[from] move: Rapid Spin', '[of] ' + user); - doubled = true; - } - const sideConditions = ['spikes', 'toxicspikes', 'stealthrock']; - for (const condition of sideConditions) { - if (user.side.removeSideCondition(condition)) { - this.add('-sideend', user.side, this.dex.conditions.get(condition).name, '[from] move: Rapid Spin', '[of] ' + user); - doubled = true; - } - } - if (user.volatiles['partiallytrapped']) { - this.add('-remove', user, user.volatiles['partiallytrapped'].sourceEffect.name, '[from] move: Rapid Spin', '[of] ' + user, '[partiallytrapped]'); - doubled = true; - delete user.volatiles['partiallytrapped']; - } - if (doubled) return power * 2; - }, - self: undefined, - desc: "If this move is successful the user removes hazards before it attacks, the effects of Leech Seed and partial-trapping moves end for the user, and all hazards are removed from the user's side of the field. This move does double the damage, if a hazard is removed.", - }, - rockthrow: { - inherit: true, - accuracy: 100, - onBasePower(power, user) { - if (user.side.removeSideCondition('stealthrock')) { - this.add('-sideend', user.side, "Stealth Rock", '[from] move: Rapid Spin', '[of] ' + user); - return power * 2; - } - }, - desc: "This move attempts to remove Stealth Rocks from the user's side, if Stealth Rocks are removed this move does double the damage.", - shortDesc: "Frees the user of Stealth Rock, does 2x damage if it does.", - }, - /****************************************************************** - New feature: Signature Pokemon - - Selected weak moves receive a 1.5x damage boost when used by a - compatible Pokemon. - - Justification: - - Gives a use for many otherwise competitively unviable moves - - This is the sort of change that Game Freak is likely to make - ******************************************************************/ - firefang: { - inherit: true, - onBasePower(power, user) { - if (user.species.id === 'flareon') return this.chainModify(1.5); - }, - accuracy: 100, - secondaries: [ - {chance: 20, status: 'brn'}, - {chance: 30, volatileStatus: 'flinch'}, - ], - desc: "Has a 20% chance to burn the target and a 30% chance to flinch it. If the user is a Flareon, this move does 1.5x more damage.", - shortDesc: "20% chance to burn. 30% chance to flinch.", - }, - icefang: { - inherit: true, - onBasePower(power, user) { - if (user.species.id === 'walrein') return this.chainModify(1.5); - }, - accuracy: 100, - secondaries: [ - {chance: 20, status: 'frz'}, - {chance: 30, volatileStatus: 'flinch'}, - ], - desc: "Has a 20% chance to freeze the target and a 30% chance to flinch it. If the user is a Walrein, this move does 1.5x more damage.", - shortDesc: "20% chance to freeze. 30% chance to flinch.", - }, - thunderfang: { - inherit: true, - onBasePower(power, user) { - if (user.species.id === 'luxray') return this.chainModify(1.5); - }, - accuracy: 100, - secondaries: [ - {chance: 20, status: 'par'}, - {chance: 30, volatileStatus: 'flinch'}, - ], - desc: "Has a 20% chance to paralyze the target and a 30% chance to flinch it. If the user is a Luxray, this move does 1.5x more damage.", - shortDesc: "20% chance to paralyze. 30% chance to flinch.", - }, - poisonfang: { - inherit: true, - onBasePower(power, user) { - if (user.species.id === 'drapion') return this.chainModify(1.5); - }, - accuracy: 100, - secondaries: [ - {chance: 100, status: 'tox'}, - {chance: 30, volatileStatus: 'flinch'}, - ], - desc: "Has a 100% chance to badly poison the target and a 30% chance to flinch it. If the user is a Drapion, this move does 1.5x more damage.", - shortDesc: "100% chance to badly poison. 30% chance to flinch.", - }, - poisontail: { - inherit: true, - basePower: 60, - onBasePower(power, user) { - if (user.species.id === 'seviper') return this.chainModify(1.5); - }, - accuracy: 100, - secondary: { - chance: 60, - status: 'tox', - }, - desc: "Has a 60% chance to badly poison the target and a higher chance for a critical hit. If the user is a Seviper, this move does 1.5x more damage.", - shortDesc: "High critical hit ratio. 60% chance to badly poison.", - }, - slash: { - inherit: true, - basePower: 60, - onBasePower(power, user) { - if (user.species.id === 'persian') return this.chainModify(1.5); - }, - secondary: { - chance: 30, - boosts: { - def: -1, - }, - }, - desc: "Has a higher chance for a critical hit. 30% chance to lower the target's Defense by one stage. If the user is a Persian, this move does 1.5x more damage.", - shortDesc: "High critical hit ratio. 30% chance to lower Def by 1.", - }, - sludge: { - inherit: true, - basePower: 60, - onBasePower(power, user) { - if (user.species.id === 'muk') return this.chainModify(1.5); - }, - secondary: { - chance: 100, - status: 'psn', - }, - desc: "Has a 100% chance to poison the target. If the user is a Muk, this move does 1.5x more damage.", - shortDesc: "100% chance to poison the target.", - }, - smog: { - inherit: true, - basePower: 75, - accuracy: 100, - onBasePower(power, user) { - if (user.species.id === 'weezing') return this.chainModify(1.5); - }, - secondary: { - chance: 100, - status: 'psn', - }, - desc: "Has a 100% chance to poison the target. If the user is a Weezing, this move does 1.5x more damage.", - shortDesc: "100% chance to poison the target.", - }, - flamecharge: { - inherit: true, - basePower: 60, - onBasePower(power, user) { - if (user.species.id === 'rapidash') return this.chainModify(1.5); - }, - desc: "Has a 100% chance to raise the user's Speed by 1 stage. If the user is a Rapidash, this move does 1.5x more damage.", - }, - flamewheel: { - inherit: true, - onBasePower(power, user) { - if (user.species.id === 'darmanitan') return this.chainModify(1.5); - }, - desc: "Has a 10% chance to burn the target. If the user is a Darmanitan, this move does 1.5x more damage.", - }, - spark: { - inherit: true, - onBasePower(power, user) { - if (user.species.id === 'eelektross') return this.chainModify(1.5); - }, - desc: "Has a 30% chance to paralyze the target. If the user is an Eelektross, this move does 1.5x more damage.", - }, - triplekick: { - inherit: true, - onBasePower(power, user) { - if (user.species.id === 'hitmontop') return this.chainModify(1.5); - }, - accuracy: true, - desc: "Hits three times. Power increases to 20 for the second hit and 30 for the third. This move checks accuracy for each hit, and the attack ends if the target avoids any of the hits. If one of the hits breaks the target's substitute, it will take damage for the remaining hits. If the user has the Ability Skill Link, this move will always hit three times. If the user is a Hitmontop, this move does 1.5x more damage.", - }, - bubblebeam: { - inherit: true, - onBasePower(power, user) { - if (user.species.id === 'kingdra') return this.chainModify(1.5); - }, - secondary: { - chance: 30, - boosts: { - spe: -1, - }, - }, - desc: "Has a 30% chance to lower the target's Speed by 1 stage. If the user is a Kingdra, this move does 1.5x more damage.", - shortDesc: "30% chance to lower the target's Speed by 1.", - }, - electroweb: { - inherit: true, - basePower: 60, - onBasePower(power, user) { - if (user.species.id === 'galvantula') return this.chainModify(1.5); - }, - desc: "Has a 100% chance to lower the target's Speed by 1 stage. If the user is a Galvantula, this move does 1.5x more damage.", - accuracy: 100, - }, - gigadrain: { - inherit: true, - basePower: 60, - onBasePower(power, user) { - if (user.species.id === 'beautifly') return this.chainModify(1.5); - }, - desc: "The user recovers 1/2 the HP lost by the target, rounded half up. If Big Root is held by the user, the HP recovered is 1.3x normal, rounded half down. If the user is a Beautifly, this move does 1.5x more damage.", - accuracy: 100, - }, - icywind: { - inherit: true, - basePower: 60, - onBasePower(power, user) { - if (user.species.id === 'glaceon') return this.chainModify(1.5); - }, - desc: "Has a 100% chance to lower the target's Speed by 1 stage. If the user is a Glaceon, this move does 1.5x more damage.", - accuracy: 100, - }, - mudshot: { - inherit: true, - basePower: 60, - onBasePower(power, user) { - if (user.species.id === 'swampert') return this.chainModify(1.5); - }, - desc: "Has a 100% chance to lower the target's Speed by 1 stage. If the user is a Swampert, this move does 1.5x more damage.", - accuracy: 100, - }, - glaciate: { - inherit: true, - basePower: 80, - onBasePower(power, user) { - if (user.species.id === 'kyurem') return this.chainModify(1.5); - }, - desc: "Has a 100% chance to lower the target's Speed by 1 stage. If the user is a Kyurem, this move does 1.5x more damage.", - accuracy: 100, - }, - octazooka: { - inherit: true, - basePower: 75, - onBasePower(power, user) { - if (user.species.id === 'octillery') return this.chainModify(1.5); - }, - accuracy: 90, - secondary: { - chance: 100, - boosts: { - accuracy: -1, - }, - }, - desc: "Has a 100% chance to lower the target's accuracy by 1 stage. If the user is a Octillery, this move does 1.5x more damage.", - shortDesc: "100% chance to lower the target's accuracy by 1.", - }, - leaftornado: { - inherit: true, - basePower: 75, - onBasePower(power, user) { - if (user.species.id === 'serperior') return this.chainModify(1.5); - }, - accuracy: 90, - secondary: { - chance: 100, - boosts: { - accuracy: -1, - }, - }, - desc: "Has a 100% chance to lower the target's accuracy by 1 stage. If the user is a Serperior, this move does 1.5x more damage.", - shortDesc: "100% chance to lower the target's accuracy by 1.", - }, - iceshard: { - inherit: true, - onBasePower(power, user) { - if (user.species.id === 'weavile') return this.chainModify(1.5); - }, - desc: "If the user is a Weavile, this move does 1.5x more damage.", - }, - aquajet: { - inherit: true, - onBasePower(power, user) { - if (user.species.id === 'sharpedo') return this.chainModify(1.5); - }, - desc: "If the user is a Sharpedo, this move does 1.5x more damage.", - }, - machpunch: { - inherit: true, - onBasePower(power, user) { - if (user.species.id === 'hitmonchan') return this.chainModify(1.5); - }, - desc: "If the user is a Hitmonchan, this move does 1.5x more damage.", - }, - shadowsneak: { - inherit: true, - onBasePower(power, user) { - if (user.species.id === 'banette') return this.chainModify(1.5); - }, - desc: "If the user is a Banette, this move does 1.5x more damage.", - }, - steelwing: { - inherit: true, - basePower: 60, - onBasePower(power, user) { - if (user.species.id === 'skarmory') return this.chainModify(1.5); - }, - accuracy: 100, - secondary: { - chance: 50, - self: { - boosts: { - def: 1, - }, - }, - }, - desc: "Has a 50% chance to raise the user's Defense by 1 stage. If the user is a Skarmory, this move does 1.5x more damage.", - shortDesc: "50% chance to raise the user's Defense by 1.", - }, - surf: { - inherit: true, - onBasePower(power, user) { - if (user.species.id === 'masquerain') return this.chainModify(1.5); - }, - secondary: { - chance: 10, - boosts: { - spe: -1, - }, - }, - desc: "Damage doubles if the target is using Dive. 10% chance to lower the target's Speed by one stage. If the user is a Masquerain, this move does 1.5x more damage.", - shortDesc: "Power doubles on Dive. 10% chance to lower Spe by 1.", - }, - hiddenpower: { - inherit: true, - onBasePower(power, user) { - if (user.species.id === 'unown') return this.chainModify(1.5); - }, - }, - /****************************************************************** - Moves with accuracy not a multiple of 10% - - round up to a multiple of 10% - - Rock Slide and Charge Beam also round up to 100% - - Justification: - - missing Hydro Pump is losing a gamble, but missing V-create is - nothing but hax - - Rock Slide is included for being similar enough to Air Slash - - Charge Beam is included because its 30% chance of no boost is enough - ******************************************************************/ - jumpkick: { - inherit: true, - accuracy: 100, - }, - razorshell: { - inherit: true, - accuracy: 100, - }, - drillrun: { - inherit: true, - accuracy: 100, - }, - vcreate: { - inherit: true, - accuracy: 100, - }, - aeroblast: { - inherit: true, - accuracy: 100, - }, - sacredfire: { - inherit: true, - accuracy: 100, - }, - spacialrend: { - inherit: true, - accuracy: 100, - }, - originpulse: { - inherit: true, - accuracy: 90, - }, - precipiceblades: { - inherit: true, - accuracy: 90, - }, - airslash: { - inherit: true, - accuracy: 100, - }, - rockslide: { - inherit: true, - accuracy: 100, - }, - chargebeam: { - inherit: true, - accuracy: 100, - }, - aircutter: { - inherit: true, - accuracy: 100, - }, - furycutter: { - inherit: true, - accuracy: 100, - }, - flyingpress: { - inherit: true, - accuracy: 100, - }, - crushclaw: { - inherit: true, - accuracy: 100, - }, - razorleaf: { - inherit: true, - accuracy: 100, - }, - stringshot: { - inherit: true, - accuracy: 100, - }, - metalclaw: { - inherit: true, - accuracy: 100, - }, - diamondstorm: { - inherit: true, - accuracy: 100, - }, - snarl: { - inherit: true, - accuracy: 100, - }, - powerwhip: { - inherit: true, - accuracy: 90, - }, - seedflare: { - inherit: true, - accuracy: 90, - }, - willowisp: { - inherit: true, - accuracy: 90, - }, - meteormash: { - inherit: true, - accuracy: 90, - }, - boltstrike: { - inherit: true, - accuracy: 90, - secondary: { - chance: 30, - status: 'par', - }, - desc: "Has a 30% chance to paralyze the target.", - shortDesc: "30% chance to paralyze the target.", - }, - blueflare: { - inherit: true, - accuracy: 90, - secondary: { - chance: 30, - status: 'brn', - }, - desc: "Has a 30% chance to burn the target.", - shortDesc: "30% chance to burn the target.", - }, - dragonrush: { - inherit: true, - accuracy: 80, - }, - rocktomb: { - inherit: true, - accuracy: 100, - }, - fireblast: { - inherit: true, - accuracy: 80, - secondary: { - chance: 20, - status: 'brn', - }, - desc: "Has a 20% chance to burn the target.", - shortDesc: "20% chance to burn the target.", - }, - irontail: { - inherit: true, - accuracy: 80, - }, - magmastorm: { - inherit: true, - accuracy: 80, - }, - megahorn: { - inherit: true, - accuracy: 90, - }, - megapunch: { - inherit: true, - accuracy: 90, - }, - megakick: { - inherit: true, - accuracy: 80, - }, - slam: { - inherit: true, - accuracy: 80, - }, - rollingkick: { - inherit: true, - accuracy: 90, - }, - takedown: { - inherit: true, - accuracy: 90, - }, - mudbomb: { - inherit: true, - accuracy: 90, - }, - mirrorshot: { - inherit: true, - accuracy: 90, - }, - rockclimb: { - inherit: true, - accuracy: 90, - }, - poisonpowder: { - inherit: true, - accuracy: 80, - }, - stunspore: { - inherit: true, - accuracy: 80, - }, - sleeppowder: { - inherit: true, - accuracy: 80, - }, - sweetkiss: { - inherit: true, - accuracy: 80, - }, - lovelykiss: { - inherit: true, - accuracy: 80, - }, - whirlpool: { - inherit: true, - accuracy: 90, - }, - firespin: { - inherit: true, - accuracy: 90, - }, - clamp: { - inherit: true, - accuracy: 90, - }, - sandtomb: { - inherit: true, - accuracy: 90, - }, - bind: { - inherit: true, - accuracy: 90, - }, - grasswhistle: { - inherit: true, - accuracy: 60, - }, - sing: { - inherit: true, - accuracy: 60, - }, - supersonic: { - inherit: true, - accuracy: 60, - }, - screech: { - inherit: true, - accuracy: 90, - }, - metalsound: { - inherit: true, - accuracy: 90, - }, - /****************************************************************** - Signature moves and other moves with limited distribution: - - buffed in various ways - - Justification: - - more metagame variety is always good - ******************************************************************/ - psychocut: { - inherit: true, - basePower: 90, - }, - twineedle: { - inherit: true, - accuracy: true, - basePower: 50, - }, - drillpeck: { - inherit: true, - basePower: 100, - pp: 10, - }, - needlearm: { - inherit: true, - basePower: 100, - pp: 10, - }, - leafblade: { - inherit: true, - basePower: 100, - pp: 10, - }, - attackorder: { - inherit: true, - basePower: 100, - pp: 10, - }, - withdraw: { - inherit: true, - boosts: { - def: 1, - spd: 1, - }, - desc: "Raises the user's Defense and Special Defense by 1 stage.", - shortDesc: "Raises the user's Def and SpD by 1.", - }, - paraboliccharge: { - inherit: true, - basePower: 40, - secondary: { - chance: 100, - boosts: { - spa: -1, - spd: -1, - }, - self: { - boosts: { - spa: 1, - spd: 1, - }, - }, - }, - desc: "The user recovers 1/2 the HP lost by the target, rounded half up. If Big Root is held by the user, the HP recovered is 1.3x normal, rounded half down. 100% chance to lower the target's Special Attack and Special Defense by one stage, and boost the user's Special Attack and Special Defense by one stage.", - }, - drainingkiss: { - inherit: true, - basePower: 40, - secondary: { - chance: 100, - boosts: { - spa: -1, - atk: -1, - }, - self: { - boosts: { - spa: 1, - atk: 1, - }, - }, - }, - desc: "The user recovers 3/4 the HP lost by the target, rounded half up. If Big Root is held by the user, the HP recovered is 1.3x normal, rounded half down. 100% chance to lower the target's Special Attack and Special Defense by one stage, and boost the user's Special Attack and Special Defense by one stage.", - }, - stomp: { - inherit: true, - basePower: 100, - accuracy: true, - pp: 10, - }, - steamroller: { - inherit: true, - basePower: 100, - accuracy: true, - pp: 10, - }, - crabhammer: { - inherit: true, - basePower: 100, - accuracy: 100, - }, - autotomize: { - inherit: true, - boosts: { - spe: 3, - }, - desc: "Raises the user's Speed by 3 stages. If the user's Speed was changed, the user's weight is reduced by 100kg as long as it remains active. This effect is stackable but cannot reduce the user's weight to less than 0.1kg.", - shortDesc: "Raises the user's Speed by 3; user loses 100 kg.", - }, - dizzypunch: { - inherit: true, - basePower: 90, - secondary: { - chance: 50, - volatileStatus: 'confusion', - }, - desc: "Has a 50% chance to confuse the target.", - shortDesc: "50% chance to confuse the target.", - }, - nightdaze: { - inherit: true, - accuracy: 100, - onModifyMove(move, user) { - if (user.illusion) { - const illusionMoves = user.illusion.moves.filter(m => this.dex.moves.get(m).category !== 'Status'); - if (!illusionMoves.length) return; - // I'll figure out a better fix for this later - (move as any).name = this.dex.moves.get(this.sample(illusionMoves)).name; - } - }, - desc: "Has a 40% chance to lower the target's accuracy by 1 stage. If Illusion is active, displays as a random non-Status move in the copied Pokémon's moveset.", - }, - muddywater: { - inherit: true, - basePower: 85, - accuracy: 100, - }, - powergem: { - inherit: true, - basePower: 40, - accuracy: true, - multihit: [2, 2], - desc: "Hits twice. If the first hit breaks the target's substitute, it will take damage for the second hit.", - shortDesc: "Hits 2 times in one turn.", - }, - acid: { - inherit: true, - ignoreImmunity: true, - }, - acidspray: { - inherit: true, - ignoreImmunity: true, - }, - eggbomb: { - inherit: true, - accuracy: 80, - basePower: 60, - willCrit: true, - desc: "This move is always a critical hit unless the target is under the effect of Lucky Chant or has the Abilities Battle Armor or Shell Armor.", - shortDesc: "Always results in a critical hit.", - }, - sacredsword: { - inherit: true, - basePower: 95, - }, - triattack: { - inherit: true, - accuracy: true, - basePower: 30, - desc: "Hits 3 times. Has a 10% chance to burn, paralyze or freeze the target each time.", - shortDesc: "Hits 3x; 10% chance to paralyze/burn/freeze.", - multihit: [3, 3], - secondary: { - chance: 10, - 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); - } - }, - }, - }, - /****************************************************************** - Custom moves: - ******************************************************************/ - magikarpsrevenge: { - num: 0, - accuracy: true, - basePower: 120, - category: "Physical", - desc: "Has a 100% chance to confuse the target and lower its Defense and Special Attack by 1 stage. The user recovers 1/2 the HP lost by the target, rounded half up. If Big Root is held by the user, the HP recovered is 1.3x normal, rounded half down. The user steals the foe's boosts. If this move is successful, the weather changes to rain unless it is already in effect, and the user gains the effects of Aqua Ring and Magic Coat.", - shortDesc: "Does many things turn 1. Can't move turn 2.", - name: "Magikarp's Revenge", - pp: 10, - priority: 0, - flags: {contact: 1, recharge: 1, protect: 1, mirror: 1, heal: 1}, - noSketch: true, - drain: [1, 2], - onTry(pokemon) { - if (pokemon.species.name !== 'Magikarp') { - this.add('-fail', pokemon, 'move: Magikarp\'s Revenge'); - return null; - } - }, - self: { - onHit(source) { - this.field.setWeather('raindance'); - source.addVolatile('magiccoat'); - source.addVolatile('aquaring'); - }, - volatileStatus: 'mustrecharge', - }, - secondary: { - chance: 100, - volatileStatus: 'confusion', - boosts: { - def: -1, - spa: -1, - }, - }, - stealsBoosts: true, - target: "normal", - type: "Water", - contestType: "Cute", - }, -}; diff --git a/data/mods/gennext/pokedex.ts b/data/mods/gennext/pokedex.ts deleted file mode 100644 index d04603358bc7..000000000000 --- a/data/mods/gennext/pokedex.ts +++ /dev/null @@ -1,18 +0,0 @@ -export const Pokedex: {[k: string]: ModdedSpeciesData} = { - genesectdouse: { - inherit: true, - types: ["Bug", "Water"], - }, - genesectshock: { - inherit: true, - types: ["Bug", "Electric"], - }, - genesectburn: { - inherit: true, - types: ["Bug", "Fire"], - }, - genesectchill: { - inherit: true, - types: ["Bug", "Ice"], - }, -}; diff --git a/data/mods/gennext/scripts.ts b/data/mods/gennext/scripts.ts deleted file mode 100644 index c0916bf04b6b..000000000000 --- a/data/mods/gennext/scripts.ts +++ /dev/null @@ -1,145 +0,0 @@ -export const Scripts: ModdedBattleScriptsData = { - inherit: 'gen6', - init() { - this.modData('Pokedex', 'cherrimsunshine').types = ['Grass', 'Fire']; - - // Give Hurricane to all the Bug/Flying Quiver-dancers - // Precedent: Volcarona - this.modData('Learnsets', 'masquerain').learnset.hurricane = ['5L100']; - this.modData('Learnsets', 'butterfree').learnset.hurricane = ['5L100']; - this.modData('Learnsets', 'beautifly').learnset.hurricane = ['5L100']; - this.modData('Learnsets', 'mothim').learnset.hurricane = ['5L100']; - - // Masquerain also gets Surf because we want it to be viable - this.modData('Learnsets', 'masquerain').learnset.surf = ['5M']; - - // Roserade gets Sludge - this.modData('Learnsets', 'roserade').learnset.sludge = ['5L100']; - - // Meloetta: Fiery Dance - this.modData('Learnsets', 'meloetta').learnset.fierydance = ['5L100']; - - // Galvantula: Zap Cannon - this.modData('Learnsets', 'galvantula').learnset.zapcannon = ['5L100']; - - // Virizion: Horn Leech - this.modData('Learnsets', 'virizion').learnset.hornleech = ['5L100']; - - // Scolipede, Milotic, Steelix: Coil - this.modData('Learnsets', 'milotic').learnset.coil = ['5L100']; - this.modData('Learnsets', 'scolipede').learnset.coil = ['5L100']; - this.modData('Learnsets', 'steelix').learnset.coil = ['5L100']; - - // Rotoms: lots of moves - this.modData('Learnsets', 'rotomwash').learnset.bubblebeam = ['5L100']; - this.modData('Learnsets', 'rotomfan').learnset.hurricane = ['5L100']; - this.modData('Learnsets', 'rotomfan').learnset.twister = ['5L100']; - this.modData('Learnsets', 'rotomfrost').learnset.frostbreath = ['5L100']; - this.modData('Learnsets', 'rotomheat').learnset.heatwave = ['5L100']; - this.modData('Learnsets', 'rotommow').learnset.magicalleaf = ['5L100']; - - // Zororark: much wider movepool - this.modData('Learnsets', 'zoroark').learnset.earthquake = ['5M']; - this.modData('Learnsets', 'zoroark').learnset.stoneedge = ['5M']; - this.modData('Learnsets', 'zoroark').learnset.icebeam = ['5M']; - this.modData('Learnsets', 'zoroark').learnset.xscissor = ['5M']; - this.modData('Learnsets', 'zoroark').learnset.gigadrain = ['5T']; - this.modData('Learnsets', 'zoroark').learnset.superpower = ['5T']; - - // Mantine: lots of moves - this.modData('Learnsets', 'mantine').learnset.recover = ['5L100']; - this.modData('Learnsets', 'mantine').learnset.whirlwind = ['5L100']; - this.modData('Learnsets', 'mantine').learnset.batonpass = ['5L100']; - this.modData('Learnsets', 'mantine').learnset.wish = ['5L100']; - this.modData('Learnsets', 'mantine').learnset.soak = ['5L100']; - this.modData('Learnsets', 'mantine').learnset.lockon = ['5L100']; - this.modData('Learnsets', 'mantine').learnset.acidspray = ['5L100']; - this.modData('Learnsets', 'mantine').learnset.octazooka = ['5L100']; - this.modData('Learnsets', 'mantine').learnset.stockpile = ['5L100']; - - // eggSketch! :D - this.modData('Learnsets', 'aipom').learnset.sketch = ['5E']; - this.modData('Learnsets', 'spinda').learnset.sketch = ['5E']; - this.modData('Learnsets', 'mimejr').learnset.sketch = ['5E']; - - // Tail Glow :D - this.modData('Learnsets', 'finneon').learnset.tailglow = ['5L100']; - this.modData('Learnsets', 'lumineon').learnset.tailglow = ['5L100']; - this.modData('Learnsets', 'mareep').learnset.tailglow = ['5L100']; - this.modData('Learnsets', 'ampharos').learnset.tailglow = ['5L100']; - this.modData('Learnsets', 'chinchou').learnset.tailglow = ['5L100']; - this.modData('Learnsets', 'lanturn').learnset.tailglow = ['5L100']; - - // Spinda: Contrary - this.modData('Learnsets', 'spinda').learnset.vcreate = ['5L100']; - this.modData('Learnsets', 'spinda').learnset.superpower = ['5L100']; - this.modData('Learnsets', 'spinda').learnset.closecombat = ['5L100']; - this.modData('Learnsets', 'spinda').learnset.overheat = ['5L100']; - this.modData('Learnsets', 'spinda').learnset.leafstorm = ['5L100']; - this.modData('Learnsets', 'spinda').learnset.dracometeor = ['5L100']; - - // Venusaur - this.modData('Pokedex', 'venusaur').abilities['1'] = 'Leaf Guard'; - // Charizard - this.modData('Pokedex', 'charizard').abilities['1'] = 'Flame Body'; - // Blastoise - this.modData('Pokedex', 'blastoise').abilities['1'] = 'Shell Armor'; - // Meganium - this.modData('Pokedex', 'meganium').abilities['1'] = 'Harvest'; - // Typhlosion - this.modData('Pokedex', 'typhlosion').abilities['1'] = 'Magma Armor'; - // Feraligatr - this.modData('Pokedex', 'feraligatr').abilities['1'] = 'Strong Jaw'; - // Sceptile - this.modData('Pokedex', 'sceptile').abilities['1'] = 'Limber'; - // Blaziken - this.modData('Pokedex', 'blaziken').abilities['1'] = 'Reckless'; - // Swampert - this.modData('Pokedex', 'swampert').abilities['1'] = 'Hydration'; - // Torterra - this.modData('Pokedex', 'torterra').abilities['1'] = 'Weak Armor'; - // Infernape - this.modData('Pokedex', 'infernape').abilities['1'] = 'No Guard'; - // Empoleon - this.modData('Pokedex', 'empoleon').abilities['1'] = 'Ice Body'; - // Serperior - this.modData('Pokedex', 'serperior').abilities['1'] = 'Own Tempo'; - // Emboar - this.modData('Pokedex', 'emboar').abilities['1'] = 'Sheer Force'; - // Samurott - this.modData('Pokedex', 'samurott').abilities['1'] = 'Technician'; - // Chesnaught - this.modData('Pokedex', 'chesnaught').abilities['1'] = 'Battle Armor'; - // Delphox - this.modData('Pokedex', 'delphox').abilities['1'] = 'Magic Guard'; - // Greninja - this.modData('Pokedex', 'greninja').abilities['1'] = 'Pickpocket'; - - // Levitate mons - this.modData('Pokedex', 'unown').abilities['1'] = 'Shadow Tag'; - this.modData('Pokedex', 'flygon').abilities['1'] = 'Compound Eyes'; - this.modData('Pokedex', 'flygon').abilities['H'] = 'Sand Rush'; - this.modData('Pokedex', 'weezing').abilities['1'] = 'Aftermath'; - this.modData('Pokedex', 'eelektross').abilities['1'] = 'Poison Heal'; - this.modData('Pokedex', 'claydol').abilities['1'] = 'Filter'; - this.modData('Pokedex', 'mismagius').abilities['1'] = 'Cursed Body'; - this.modData('Pokedex', 'cryogonal').abilities['1'] = 'Ice Body'; - this.modData('Pokedex', 'mesprit').abilities['1'] = 'Serene Grace'; - this.modData('Pokedex', 'uxie').abilities['1'] = 'Synchronize'; - this.modData('Pokedex', 'azelf').abilities['1'] = 'Steadfast'; - this.modData('Pokedex', 'hydreigon').abilities['1'] = 'Sheer Force'; - // Rotoms - this.modData('Pokedex', 'rotom').abilities['1'] = 'Trace'; - this.modData('Pokedex', 'rotomwash').abilities['1'] = 'Trace'; - this.modData('Pokedex', 'rotomheat').abilities['1'] = 'Trace'; - this.modData('Pokedex', 'rotommow').abilities['1'] = 'Trace'; - this.modData('Pokedex', 'rotomfrost').abilities['1'] = 'Trace'; - this.modData('Pokedex', 'rotomfan').abilities['1'] = 'Trace'; - - // Adaptability change - this.modData('Pokedex', 'crawdaunt').abilities['H'] = 'Tough Claws'; - - // Vespiquen - this.modData('Pokedex', 'vespiquen').abilities['1'] = 'Swarm'; - }, -}; diff --git a/data/mods/mixandmega/items.ts b/data/mods/mixandmega/items.ts index 8d62a4bf520d..e4d3533f2753 100644 --- a/data/mods/mixandmega/items.ts +++ b/data/mods/mixandmega/items.ts @@ -1,4 +1,4 @@ -export const Items: {[k: string]: ModdedItemData} = { +export const Items: import('../../../sim/dex-items').ModdedItemDataTable = { abomasite: { inherit: true, isNonstandard: null, diff --git a/data/mods/mixandmega/random-teams.ts b/data/mods/mixandmega/random-teams.ts deleted file mode 100644 index 188541d28a9f..000000000000 --- a/data/mods/mixandmega/random-teams.ts +++ /dev/null @@ -1,154 +0,0 @@ -import {RandomTeams} from './../../random-teams'; -import {toID} from '../../../sim/dex'; - -const mnmItems = [ - 'blueorb', 'redorb', 'rustedshield', 'rustedsword', -]; - -export class RandomMnMTeams extends RandomTeams { - randomCCTeam(): RandomTeamsTypes.RandomSet[] { - this.enforceNoDirectCustomBanlistChanges(); - - const dex = this.dex; - const team = []; - - const natures = this.dex.natures.all(); - const items = this.dex.items.all().filter(item => item.megaStone || mnmItems.includes(item.id)); - - const randomN = this.randomNPokemon(this.maxTeamSize, this.forceMonotype, undefined, undefined, true); - - for (let forme of randomN) { - let species = dex.species.get(forme); - if (species.isNonstandard) species = dex.species.get(species.baseSpecies); - - // Random legal item - let item = ''; - let isIllegalItem; - if (this.gen >= 2) { - do { - item = this.sample(items).name; - isIllegalItem = this.dex.items.get(item).gen > this.gen || this.dex.items.get(item).isNonstandard; - } while (isIllegalItem); - } - - // Make sure forme is legal - if (species.battleOnly) { - if (typeof species.battleOnly === 'string') { - species = dex.species.get(species.battleOnly); - } else { - species = dex.species.get(this.sample(species.battleOnly)); - } - forme = species.name; - } else if (species.requiredItems && !species.requiredItems.some(req => toID(req) === item)) { - if (!species.changesFrom) throw new Error(`${species.name} needs a changesFrom value`); - species = dex.species.get(species.changesFrom); - forme = species.name; - } - - // Random legal ability - const abilities = Object.values(species.abilities).filter(a => this.dex.abilities.get(a).gen <= this.gen); - const ability: string = this.gen <= 2 ? 'No Ability' : this.sample(abilities); - - // Four random unique moves from the movepool - let pool = ['struggle']; - if (forme === 'Smeargle') { - pool = this.dex.moves.all() - .filter(move => !(move.isNonstandard || move.isZ || move.isMax || move.realMove)) - .map(m => m.id); - } else { - pool = [...this.dex.species.getMovePool(species.id)]; - } - - const moves = this.multipleSamplesNoReplace(pool, this.maxMoveCount); - - // Random EVs - const evs: StatsTable = {hp: 0, atk: 0, def: 0, spa: 0, spd: 0, spe: 0}; - const s: StatID[] = ["hp", "atk", "def", "spa", "spd", "spe"]; - let evpool = 510; - do { - const x = this.sample(s); - const y = this.random(Math.min(256 - evs[x], evpool + 1)); - evs[x] += y; - evpool -= y; - } while (evpool > 0); - - // Random IVs - const ivs = { - hp: this.random(32), - atk: this.random(32), - def: this.random(32), - spa: this.random(32), - spd: this.random(32), - spe: this.random(32), - }; - - // Random nature - const nature = this.sample(natures).name; - - // Level balance--calculate directly from stats rather than using some silly lookup table - const mbstmin = 1307; // Sunkern has the lowest modified base stat total, and that total is 807 - - let stats = species.baseStats; - // If Wishiwashi, use the school-forme's much higher stats - if (species.baseSpecies === 'Wishiwashi') stats = Dex.species.get('wishiwashischool').baseStats; - - // Modified base stat total assumes 31 IVs, 85 EVs in every stat - let mbst = (stats["hp"] * 2 + 31 + 21 + 100) + 10; - mbst += (stats["atk"] * 2 + 31 + 21 + 100) + 5; - mbst += (stats["def"] * 2 + 31 + 21 + 100) + 5; - mbst += (stats["spa"] * 2 + 31 + 21 + 100) + 5; - mbst += (stats["spd"] * 2 + 31 + 21 + 100) + 5; - mbst += (stats["spe"] * 2 + 31 + 21 + 100) + 5; - - let level; - if (this.adjustLevel) { - level = this.adjustLevel; - } else { - level = Math.floor(100 * mbstmin / mbst); // Initial level guess will underestimate - - while (level < 100) { - mbst = Math.floor((stats["hp"] * 2 + 31 + 21 + 100) * level / 100 + 10); - // Since damage is roughly proportional to level - mbst += Math.floor(((stats["atk"] * 2 + 31 + 21 + 100) * level / 100 + 5) * level / 100); - mbst += Math.floor((stats["def"] * 2 + 31 + 21 + 100) * level / 100 + 5); - mbst += Math.floor(((stats["spa"] * 2 + 31 + 21 + 100) * level / 100 + 5) * level / 100); - mbst += Math.floor((stats["spd"] * 2 + 31 + 21 + 100) * level / 100 + 5); - mbst += Math.floor((stats["spe"] * 2 + 31 + 21 + 100) * level / 100 + 5); - - if (mbst >= mbstmin) break; - level++; - } - } - - // Random happiness - const happiness = this.random(256); - - // Random shininess - const shiny = this.randomChance(1, 1024); - - const set: RandomTeamsTypes.RandomSet = { - name: species.baseSpecies, - species: species.name, - gender: species.gender, - item, - ability, - moves, - evs, - ivs, - nature, - level, - happiness, - shiny, - }; - if (this.gen === 9) { - // Tera type - set.teraType = this.sample(this.dex.types.all()).name; - } - team.push(set); - } - - return team; - } -} - -export default RandomMnMTeams; diff --git a/data/mods/mixandmega/scripts.ts b/data/mods/mixandmega/scripts.ts index 7fb9f4d494d3..5cffa62b6471 100644 --- a/data/mods/mixandmega/scripts.ts +++ b/data/mods/mixandmega/scripts.ts @@ -92,7 +92,7 @@ export const Scripts: ModdedBattleScriptsData = { this.queue.addChoice({choice: 'start'}); this.midTurn = true; - if (!this.requestState) this.go(); + if (!this.requestState) this.turnLoop(); }, runAction(action) { const pokemonOriginalHP = action.pokemon?.hp; @@ -175,8 +175,10 @@ export const Scripts: ModdedBattleScriptsData = { case 'move': if (!action.pokemon.isActive) return false; if (action.pokemon.fainted) return false; - this.actions.runMove(action.move, action.pokemon, action.targetLoc, action.sourceEffect, - action.zmove, undefined, action.maxMove, action.originalTarget); + this.actions.runMove(action.move, action.pokemon, action.targetLoc, { + sourceEffect: action.sourceEffect, zMove: action.zmove, + maxMove: action.maxMove, originalTarget: action.originalTarget, + }); break; case 'megaEvo': this.actions.runMegaEvo(action.pokemon); diff --git a/data/mods/mnmdlc1/items.ts b/data/mods/mnmdlc1/items.ts deleted file mode 100644 index 8d62a4bf520d..000000000000 --- a/data/mods/mnmdlc1/items.ts +++ /dev/null @@ -1,309 +0,0 @@ -export const Items: {[k: string]: ModdedItemData} = { - abomasite: { - inherit: true, - isNonstandard: null, - }, - absolite: { - inherit: true, - isNonstandard: null, - }, - adamantcrystal: { - inherit: true, - onBasePower(basePower, user, target, move) { - if (move.type === 'Steel' || move.type === 'Dragon') { - return this.chainModify([4915, 4096]); - } - }, - onTakeItem: false, - }, - aerodactylite: { - inherit: true, - isNonstandard: null, - }, - aggronite: { - inherit: true, - isNonstandard: null, - }, - alakazite: { - inherit: true, - isNonstandard: null, - }, - altarianite: { - inherit: true, - isNonstandard: null, - }, - ampharosite: { - inherit: true, - isNonstandard: null, - }, - audinite: { - inherit: true, - isNonstandard: null, - }, - banettite: { - inherit: true, - isNonstandard: null, - }, - beedrillite: { - inherit: true, - isNonstandard: null, - }, - blastoisinite: { - inherit: true, - isNonstandard: null, - }, - blazikenite: { - inherit: true, - isNonstandard: null, - }, - blueorb: { - inherit: true, - onSwitchIn(pokemon) { - if (pokemon.isActive && !pokemon.species.isPrimal) { - this.queue.insertChoice({pokemon, choice: 'runPrimal'}); - } - }, - onPrimal(pokemon) { - // @ts-ignore - 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]'); - } - pokemon.canTerastallize = null; - }, - onTakeItem: false, - isNonstandard: null, - }, - cameruptite: { - inherit: true, - isNonstandard: null, - }, - charizarditex: { - inherit: true, - isNonstandard: null, - }, - charizarditey: { - inherit: true, - isNonstandard: null, - }, - cornerstonemask: { - inherit: true, - onBasePower(basePower, user, target, move) { - return this.chainModify([4915, 4096]); - }, - onTakeItem: false, - }, - diancite: { - inherit: true, - isNonstandard: null, - }, - galladite: { - inherit: true, - isNonstandard: null, - }, - garchompite: { - inherit: true, - isNonstandard: null, - }, - gardevoirite: { - inherit: true, - isNonstandard: null, - }, - gengarite: { - inherit: true, - isNonstandard: null, - }, - glalitite: { - inherit: true, - isNonstandard: null, - }, - griseouscore: { - inherit: true, - onBasePower(basePower, user, target, move) { - if (move.type === 'Ghost' || move.type === 'Dragon') { - return this.chainModify([4915, 4096]); - } - }, - onTakeItem: false, - }, - gyaradosite: { - inherit: true, - isNonstandard: null, - }, - hearthflamemask: { - inherit: true, - onBasePower(basePower, user, target, move) { - return this.chainModify([4915, 4096]); - }, - onTakeItem: false, - }, - heracronite: { - inherit: true, - isNonstandard: null, - }, - houndoominite: { - inherit: true, - isNonstandard: null, - }, - kangaskhanite: { - inherit: true, - isNonstandard: null, - }, - latiasite: { - inherit: true, - isNonstandard: null, - }, - latiosite: { - inherit: true, - isNonstandard: null, - }, - lopunnite: { - inherit: true, - isNonstandard: null, - }, - lucarionite: { - inherit: true, - isNonstandard: null, - }, - lustrousglobe: { - inherit: true, - onBasePower(basePower, user, target, move) { - if (move.type === 'Water' || move.type === 'Dragon') { - return this.chainModify([4915, 4096]); - } - }, - onTakeItem: false, - }, - manectite: { - inherit: true, - isNonstandard: null, - }, - mawilite: { - inherit: true, - isNonstandard: null, - }, - medichamite: { - inherit: true, - isNonstandard: null, - }, - metagrossite: { - inherit: true, - isNonstandard: null, - }, - mewtwonitex: { - inherit: true, - isNonstandard: null, - }, - mewtwonitey: { - inherit: true, - isNonstandard: null, - }, - pidgeotite: { - inherit: true, - isNonstandard: null, - }, - pinsirite: { - inherit: true, - isNonstandard: null, - }, - redorb: { - inherit: true, - onSwitchIn(pokemon) { - if (pokemon.isActive && !pokemon.species.isPrimal) { - this.queue.insertChoice({pokemon, choice: 'runPrimal'}); - } - }, - onPrimal(pokemon) { - // @ts-ignore - 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]'); - } - } - pokemon.canTerastallize = null; - }, - onTakeItem: false, - isNonstandard: null, - }, - rustedshield: { - inherit: true, - onTakeItem: false, - }, - rustedsword: { - inherit: true, - onTakeItem: false, - }, - sablenite: { - inherit: true, - isNonstandard: null, - }, - salamencite: { - inherit: true, - isNonstandard: null, - }, - sceptilite: { - inherit: true, - isNonstandard: null, - }, - scizorite: { - inherit: true, - isNonstandard: null, - }, - sharpedonite: { - inherit: true, - isNonstandard: null, - }, - slowbronite: { - inherit: true, - isNonstandard: null, - }, - steelixite: { - inherit: true, - isNonstandard: null, - }, - swampertite: { - inherit: true, - isNonstandard: null, - }, - tyranitarite: { - inherit: true, - isNonstandard: null, - }, - venusaurite: { - inherit: true, - isNonstandard: null, - }, - vilevial: { - inherit: true, - onBasePower(basePower, user, target, move) { - if (['Poison', 'Flying'].includes(move.type)) { - return this.chainModify([4915, 4096]); - } - }, - onTakeItem: false, - }, - wellspringmask: { - inherit: true, - onBasePower(basePower, user, target, move) { - return this.chainModify([4915, 4096]); - }, - onTakeItem: false, - }, -}; diff --git a/data/mods/mnmdlc1/random-teams.ts b/data/mods/mnmdlc1/random-teams.ts deleted file mode 100644 index 772b553621d8..000000000000 --- a/data/mods/mnmdlc1/random-teams.ts +++ /dev/null @@ -1,154 +0,0 @@ -import {RandomTeams} from '../../random-teams'; -import {toID} from '../../../sim/dex'; - -const mnmItems = [ - 'blueorb', 'redorb', 'rustedshield', 'rustedsword', -]; - -export class RandomMnMTeams extends RandomTeams { - randomCCTeam(): RandomTeamsTypes.RandomSet[] { - this.enforceNoDirectCustomBanlistChanges(); - - const dex = this.dex; - const team = []; - - const natures = this.dex.natures.all(); - const items = this.dex.items.all().filter(item => item.megaStone || mnmItems.includes(item.id)); - - const randomN = this.randomNPokemon(this.maxTeamSize, this.forceMonotype, undefined, undefined, true); - - for (let forme of randomN) { - let species = dex.species.get(forme); - if (species.isNonstandard) species = dex.species.get(species.baseSpecies); - - // Random legal item - let item = ''; - let isIllegalItem; - if (this.gen >= 2) { - do { - item = this.sample(items).name; - isIllegalItem = this.dex.items.get(item).gen > this.gen || this.dex.items.get(item).isNonstandard; - } while (isIllegalItem); - } - - // Make sure forme is legal - if (species.battleOnly) { - if (typeof species.battleOnly === 'string') { - species = dex.species.get(species.battleOnly); - } else { - species = dex.species.get(this.sample(species.battleOnly)); - } - forme = species.name; - } else if (species.requiredItems && !species.requiredItems.some(req => toID(req) === item)) { - if (!species.changesFrom) throw new Error(`${species.name} needs a changesFrom value`); - species = dex.species.get(species.changesFrom); - forme = species.name; - } - - // Random legal ability - const abilities = Object.values(species.abilities).filter(a => this.dex.abilities.get(a).gen <= this.gen); - const ability: string = this.gen <= 2 ? 'No Ability' : this.sample(abilities); - - // Four random unique moves from the movepool - let pool = ['struggle']; - if (forme === 'Smeargle') { - pool = this.dex.moves.all() - .filter(move => !(move.isNonstandard || move.isZ || move.isMax || move.realMove)) - .map(m => m.id); - } else { - pool = [...this.dex.species.getMovePool(species.id)]; - } - - const moves = this.multipleSamplesNoReplace(pool, this.maxMoveCount); - - // Random EVs - const evs: StatsTable = {hp: 0, atk: 0, def: 0, spa: 0, spd: 0, spe: 0}; - const s: StatID[] = ["hp", "atk", "def", "spa", "spd", "spe"]; - let evpool = 510; - do { - const x = this.sample(s); - const y = this.random(Math.min(256 - evs[x], evpool + 1)); - evs[x] += y; - evpool -= y; - } while (evpool > 0); - - // Random IVs - const ivs = { - hp: this.random(32), - atk: this.random(32), - def: this.random(32), - spa: this.random(32), - spd: this.random(32), - spe: this.random(32), - }; - - // Random nature - const nature = this.sample(natures).name; - - // Level balance--calculate directly from stats rather than using some silly lookup table - const mbstmin = 1307; // Sunkern has the lowest modified base stat total, and that total is 807 - - let stats = species.baseStats; - // If Wishiwashi, use the school-forme's much higher stats - if (species.baseSpecies === 'Wishiwashi') stats = Dex.species.get('wishiwashischool').baseStats; - - // Modified base stat total assumes 31 IVs, 85 EVs in every stat - let mbst = (stats["hp"] * 2 + 31 + 21 + 100) + 10; - mbst += (stats["atk"] * 2 + 31 + 21 + 100) + 5; - mbst += (stats["def"] * 2 + 31 + 21 + 100) + 5; - mbst += (stats["spa"] * 2 + 31 + 21 + 100) + 5; - mbst += (stats["spd"] * 2 + 31 + 21 + 100) + 5; - mbst += (stats["spe"] * 2 + 31 + 21 + 100) + 5; - - let level; - if (this.adjustLevel) { - level = this.adjustLevel; - } else { - level = Math.floor(100 * mbstmin / mbst); // Initial level guess will underestimate - - while (level < 100) { - mbst = Math.floor((stats["hp"] * 2 + 31 + 21 + 100) * level / 100 + 10); - // Since damage is roughly proportional to level - mbst += Math.floor(((stats["atk"] * 2 + 31 + 21 + 100) * level / 100 + 5) * level / 100); - mbst += Math.floor((stats["def"] * 2 + 31 + 21 + 100) * level / 100 + 5); - mbst += Math.floor(((stats["spa"] * 2 + 31 + 21 + 100) * level / 100 + 5) * level / 100); - mbst += Math.floor((stats["spd"] * 2 + 31 + 21 + 100) * level / 100 + 5); - mbst += Math.floor((stats["spe"] * 2 + 31 + 21 + 100) * level / 100 + 5); - - if (mbst >= mbstmin) break; - level++; - } - } - - // Random happiness - const happiness = this.random(256); - - // Random shininess - const shiny = this.randomChance(1, 1024); - - const set: RandomTeamsTypes.RandomSet = { - name: species.baseSpecies, - species: species.name, - gender: species.gender, - item, - ability, - moves, - evs, - ivs, - nature, - level, - happiness, - shiny, - }; - if (this.gen === 9) { - // Tera type - set.teraType = this.sample(this.dex.types.all()).name; - } - team.push(set); - } - - return team; - } -} - -export default RandomMnMTeams; diff --git a/data/mods/mnmdlc1/scripts.ts b/data/mods/mnmdlc1/scripts.ts deleted file mode 100644 index c3701967841b..000000000000 --- a/data/mods/mnmdlc1/scripts.ts +++ /dev/null @@ -1,544 +0,0 @@ -export const Scripts: ModdedBattleScriptsData = { - gen: 9, - inherit: "gen9dlc1", - init() { - for (const i in this.data.Items) { - if (!this.data.Items[i].megaStone) continue; - this.modData('Items', i).onTakeItem = false; - const id = this.toID(this.data.Items[i].megaStone); - this.modData('FormatsData', id).isNonstandard = null; - } - }, - start() { - // Deserialized games should use restart() - if (this.deserialized) return; - // need all players to start - if (!this.sides.every(side => !!side)) throw new Error(`Missing sides: ${this.sides}`); - - if (this.started) throw new Error(`Battle already started`); - - const format = this.format; - this.started = true; - if (this.gameType === 'multi') { - this.sides[1].foe = this.sides[2]!; - this.sides[0].foe = this.sides[3]!; - this.sides[2]!.foe = this.sides[1]; - this.sides[3]!.foe = this.sides[0]; - this.sides[1].allySide = this.sides[3]!; - this.sides[0].allySide = this.sides[2]!; - this.sides[2]!.allySide = this.sides[0]; - this.sides[3]!.allySide = this.sides[1]; - // sync side conditions - this.sides[2]!.sideConditions = this.sides[0].sideConditions; - this.sides[3]!.sideConditions = this.sides[1].sideConditions; - } else { - this.sides[1].foe = this.sides[0]; - this.sides[0].foe = this.sides[1]; - if (this.sides.length > 2) { // ffa - this.sides[2]!.foe = this.sides[3]!; - this.sides[3]!.foe = this.sides[2]!; - } - } - - for (const side of this.sides) { - this.add('teamsize', side.id, side.pokemon.length); - } - - this.add('gen', this.gen); - - this.add('tier', format.name); - if (this.rated) { - if (this.rated === 'Rated battle') this.rated = true; - this.add('rated', typeof this.rated === 'string' ? this.rated : ''); - } - - if (format.onBegin) format.onBegin.call(this); - for (const rule of this.ruleTable.keys()) { - if ('+*-!'.includes(rule.charAt(0))) continue; - const subFormat = this.dex.formats.get(rule); - if (subFormat.onBegin) subFormat.onBegin.call(this); - } - for (const pokemon of this.getAllPokemon()) { - const item = pokemon.getItem(); - if ([ - 'adamantcrystal', 'griseouscore', 'lustrousglobe', 'wellspringmask', - 'cornerstonemask', 'hearthflamemask', 'vilevial', - ].includes(item.id) && item.forcedForme !== pokemon.species.name) { - // @ts-ignore - const rawSpecies = this.actions.getMixedSpecies(pokemon.m.originalSpecies, item.forcedForme!, pokemon); - const species = pokemon.setSpecies(rawSpecies); - if (!species) continue; - pokemon.baseSpecies = rawSpecies; - pokemon.details = species.name + (pokemon.level === 100 ? '' : ', L' + pokemon.level) + - (pokemon.gender === '' ? '' : ', ' + pokemon.gender) + (pokemon.set.shiny ? ', shiny' : ''); - pokemon.ability = this.toID(species.abilities['0']); - pokemon.baseAbility = pokemon.ability; - } - } - - if (this.sides.some(side => !side.pokemon[0])) { - throw new Error('Battle not started: A player has an empty team.'); - } - - if (this.debugMode) { - this.checkEVBalance(); - } - - if (format.onTeamPreview) format.onTeamPreview.call(this); - for (const rule of this.ruleTable.keys()) { - if ('+*-!'.includes(rule.charAt(0))) continue; - const subFormat = this.dex.formats.get(rule); - if (subFormat.onTeamPreview) subFormat.onTeamPreview.call(this); - } - - this.queue.addChoice({choice: 'start'}); - this.midTurn = true; - if (!this.requestState) this.go(); - }, - runAction(action) { - const pokemonOriginalHP = action.pokemon?.hp; - let residualPokemon: (readonly [Pokemon, number])[] = []; - // returns whether or not we ended in a callback - switch (action.choice) { - case 'start': { - for (const side of this.sides) { - if (side.pokemonLeft) side.pokemonLeft = side.pokemon.length; - } - - this.add('start'); - - // Change Pokemon holding Rusted items into their Crowned formes - for (const pokemon of this.getAllPokemon()) { - let rawSpecies: Species | null = null; - const item = pokemon.getItem(); - if (item.id === 'rustedsword') { - // @ts-ignore - rawSpecies = this.actions.getMixedSpecies(pokemon.m.originalSpecies, 'Zacian-Crowned', pokemon); - } else if (item.id === 'rustedshield') { - // @ts-ignore - rawSpecies = this.actions.getMixedSpecies(pokemon.m.originalSpecies, 'Zamazenta-Crowned', pokemon); - } - if (!rawSpecies) continue; - const species = pokemon.setSpecies(rawSpecies); - if (!species) continue; - pokemon.baseSpecies = rawSpecies; - pokemon.details = species.name + (pokemon.level === 100 ? '' : ', L' + pokemon.level) + - (pokemon.gender === '' ? '' : ', ' + pokemon.gender) + (pokemon.set.shiny ? ', shiny' : ''); - pokemon.ability = this.toID(species.abilities['0']); - pokemon.baseAbility = pokemon.ability; - - const behemothMove: {[k: string]: string} = { - 'Rusted Sword': 'behemothblade', 'Rusted Shield': 'behemothbash', - }; - const ironHead = pokemon.baseMoves.indexOf('ironhead'); - if (ironHead >= 0) { - const move = this.dex.moves.get(behemothMove[pokemon.getItem().name]); - pokemon.baseMoveSlots[ironHead] = { - move: move.name, - id: move.id, - pp: (move.noPPBoosts || move.isZ) ? move.pp : move.pp * 8 / 5, - maxpp: (move.noPPBoosts || move.isZ) ? move.pp : move.pp * 8 / 5, - target: move.target, - disabled: false, - disabledSource: '', - used: false, - }; - pokemon.moveSlots = pokemon.baseMoveSlots.slice(); - } - } - - if (this.format.onBattleStart) this.format.onBattleStart.call(this); - for (const rule of this.ruleTable.keys()) { - if ('+*-!'.includes(rule.charAt(0))) continue; - const subFormat = this.dex.formats.get(rule); - if (subFormat.onBattleStart) subFormat.onBattleStart.call(this); - } - - for (const side of this.sides) { - for (let i = 0; i < side.active.length; i++) { - if (!side.pokemonLeft) { - // forfeited before starting - side.active[i] = side.pokemon[i]; - side.active[i].fainted = true; - side.active[i].hp = 0; - } else { - this.actions.switchIn(side.pokemon[i], i); - } - } - } - for (const pokemon of this.getAllPokemon()) { - this.singleEvent('Start', this.dex.conditions.getByID(pokemon.species.id), pokemon.speciesState, pokemon); - } - this.midTurn = true; - break; - } - - case 'move': - if (!action.pokemon.isActive) return false; - if (action.pokemon.fainted) return false; - this.actions.runMove(action.move, action.pokemon, action.targetLoc, action.sourceEffect, - action.zmove, undefined, action.maxMove, action.originalTarget); - break; - case 'megaEvo': - this.actions.runMegaEvo(action.pokemon); - break; - case 'runDynamax': - action.pokemon.addVolatile('dynamax'); - action.pokemon.side.dynamaxUsed = true; - if (action.pokemon.side.allySide) action.pokemon.side.allySide.dynamaxUsed = true; - break; - case 'terastallize': - this.actions.terastallize(action.pokemon); - break; - case 'beforeTurnMove': - if (!action.pokemon.isActive) return false; - if (action.pokemon.fainted) return false; - this.debug('before turn callback: ' + action.move.id); - const target = this.getTarget(action.pokemon, action.move, action.targetLoc); - if (!target) return false; - if (!action.move.beforeTurnCallback) throw new Error(`beforeTurnMove has no beforeTurnCallback`); - action.move.beforeTurnCallback.call(this, action.pokemon, target); - break; - case 'priorityChargeMove': - if (!action.pokemon.isActive) return false; - if (action.pokemon.fainted) return false; - this.debug('priority charge callback: ' + action.move.id); - if (!action.move.priorityChargeCallback) throw new Error(`priorityChargeMove has no priorityChargeCallback`); - action.move.priorityChargeCallback.call(this, action.pokemon); - break; - - case 'event': - this.runEvent(action.event!, action.pokemon); - break; - case 'team': - if (action.index === 0) { - action.pokemon.side.pokemon = []; - } - action.pokemon.side.pokemon.push(action.pokemon); - action.pokemon.position = action.index; - // we return here because the update event would crash since there are no active pokemon yet - return; - - case 'pass': - return; - case 'instaswitch': - case 'switch': - if (action.choice === 'switch' && action.pokemon.status) { - this.singleEvent('CheckShow', this.dex.abilities.getByID('naturalcure' as ID), null, action.pokemon); - } - if (this.actions.switchIn(action.target, action.pokemon.position, action.sourceEffect) === 'pursuitfaint') { - // a pokemon fainted from Pursuit before it could switch - if (this.gen <= 4) { - // in gen 2-4, the switch still happens - this.hint("Previously chosen switches continue in Gen 2-4 after a Pursuit target faints."); - action.priority = -101; - this.queue.unshift(action); - break; - } else { - // in gen 5+, the switch is cancelled - this.hint("A Pokemon can't switch between when it runs out of HP and when it faints"); - break; - } - } - break; - case 'revivalblessing': - action.pokemon.side.pokemonLeft++; - if (action.target.position < action.pokemon.side.active.length) { - this.queue.addChoice({ - choice: 'instaswitch', - pokemon: action.target, - target: action.target, - }); - } - action.target.fainted = false; - action.target.faintQueued = false; - action.target.subFainted = false; - action.target.status = ''; - action.target.hp = 1; // Needed so hp functions works - action.target.sethp(action.target.maxhp / 2); - this.add('-heal', action.target, action.target.getHealth, '[from] move: Revival Blessing'); - action.pokemon.side.removeSlotCondition(action.pokemon, 'revivalblessing'); - break; - case 'runUnnerve': - this.singleEvent('PreStart', action.pokemon.getAbility(), action.pokemon.abilityState, action.pokemon); - break; - case 'runSwitch': - this.actions.runSwitch(action.pokemon); - break; - case 'runPrimal': - if (!action.pokemon.transformed) { - this.singleEvent('Primal', action.pokemon.getItem(), action.pokemon.itemState, action.pokemon); - } - break; - case 'shift': - if (!action.pokemon.isActive) return false; - if (action.pokemon.fainted) return false; - this.swapPosition(action.pokemon, 1); - break; - - case 'beforeTurn': - this.eachEvent('BeforeTurn'); - break; - case 'residual': - this.add(''); - this.clearActiveMove(true); - this.updateSpeed(); - residualPokemon = this.getAllActive().map(pokemon => [pokemon, pokemon.getUndynamaxedHP()] as const); - this.residualEvent('Residual'); - this.add('upkeep'); - break; - } - - // phazing (Roar, etc) - for (const side of this.sides) { - for (const pokemon of side.active) { - if (pokemon.forceSwitchFlag) { - if (pokemon.hp) this.actions.dragIn(pokemon.side, pokemon.position); - pokemon.forceSwitchFlag = false; - } - } - } - - this.clearActiveMove(); - - // fainting - - this.faintMessages(); - if (this.ended) return true; - - // switching (fainted pokemon, U-turn, Baton Pass, etc) - - if (!this.queue.peek() || (this.gen <= 3 && ['move', 'residual'].includes(this.queue.peek()!.choice))) { - // in gen 3 or earlier, switching in fainted pokemon is done after - // every move, rather than only at the end of the turn. - this.checkFainted(); - } else if (action.choice === 'megaEvo' && this.gen === 7) { - this.eachEvent('Update'); - // In Gen 7, the action order is recalculated for a Pokémon that mega evolves. - for (const [i, queuedAction] of this.queue.list.entries()) { - if (queuedAction.pokemon === action.pokemon && queuedAction.choice === 'move') { - this.queue.list.splice(i, 1); - queuedAction.mega = 'done'; - this.queue.insertChoice(queuedAction, true); - break; - } - } - return false; - } else if (this.queue.peek()?.choice === 'instaswitch') { - return false; - } - - if (this.gen >= 5) { - this.eachEvent('Update'); - for (const [pokemon, originalHP] of residualPokemon) { - const maxhp = pokemon.getUndynamaxedHP(pokemon.maxhp); - if (pokemon.hp && pokemon.getUndynamaxedHP() <= maxhp / 2 && originalHP > maxhp / 2) { - this.runEvent('EmergencyExit', pokemon); - } - } - } - - if (action.choice === 'runSwitch') { - const pokemon = action.pokemon; - if (pokemon.hp && pokemon.hp <= pokemon.maxhp / 2 && pokemonOriginalHP! > pokemon.maxhp / 2) { - this.runEvent('EmergencyExit', pokemon); - } - } - - const switches = this.sides.map( - side => side.active.some(pokemon => pokemon && !!pokemon.switchFlag) - ); - - for (let i = 0; i < this.sides.length; i++) { - let reviveSwitch = false; // Used to ignore the fake switch for Revival Blessing - if (switches[i] && !this.canSwitch(this.sides[i])) { - for (const pokemon of this.sides[i].active) { - if (this.sides[i].slotConditions[pokemon.position]['revivalblessing']) { - reviveSwitch = true; - continue; - } - pokemon.switchFlag = false; - } - if (!reviveSwitch) switches[i] = false; - } else if (switches[i]) { - for (const pokemon of this.sides[i].active) { - if (pokemon.switchFlag && pokemon.switchFlag !== 'revivalblessing' && !pokemon.skipBeforeSwitchOutEventFlag) { - this.runEvent('BeforeSwitchOut', pokemon); - pokemon.skipBeforeSwitchOutEventFlag = true; - this.faintMessages(); // Pokemon may have fainted in BeforeSwitchOut - if (this.ended) return true; - if (pokemon.fainted) { - switches[i] = this.sides[i].active.some(sidePokemon => sidePokemon && !!sidePokemon.switchFlag); - } - } - } - } - } - - for (const playerSwitch of switches) { - if (playerSwitch) { - this.makeRequest('switch'); - return true; - } - } - - if (this.gen < 5) this.eachEvent('Update'); - - if (this.gen >= 8 && (this.queue.peek()?.choice === 'move' || this.queue.peek()?.choice === 'runDynamax')) { - // 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) { - if (queueAction.pokemon) this.getActionSpeed(queueAction); - } - this.queue.sort(); - } - - return false; - }, - actions: { - canMegaEvo(pokemon) { - if (pokemon.species.isMega) return null; - - const item = pokemon.getItem(); - if (item.megaStone) { - if (item.megaStone === pokemon.baseSpecies.name) return null; - return item.megaStone; - } else { - return null; - } - }, - runMegaEvo(pokemon) { - if (pokemon.species.isMega) return false; - - // @ts-ignore - const species: Species = this.getMixedSpecies(pokemon.m.originalSpecies, pokemon.canMegaEvo, pokemon); - - // Do we have a proper sprite for it? - 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); - // @ts-ignore - const oMegaSpecies = this.dex.species.get(species.originalSpecies); - pokemon.formeChange(species, pokemon.getItem(), true); - this.battle.add('-start', pokemon, oMegaSpecies.requiredItem, '[silent]'); - if (oSpecies.types.length !== pokemon.species.types.length || oSpecies.types[1] !== pokemon.species.types[1]) { - this.battle.add('-start', pokemon, 'typechange', pokemon.species.types.join('/'), '[silent]'); - } - } - - pokemon.canMegaEvo = null; - return true; - }, - terastallize(pokemon) { - if (pokemon.illusion?.species.baseSpecies === 'Ogerpon') { - this.battle.singleEvent('End', this.dex.abilities.get('Illusion'), pokemon.abilityState, pokemon); - } - - let type = pokemon.teraType; - if (pokemon.species.baseSpecies !== 'Ogerpon' && pokemon.getItem().name.endsWith('Mask')) { - type = this.dex.species.get(pokemon.getItem().forcedForme).forceTeraType!; - } - 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') { - const tera = pokemon.species.id === 'ogerpon' ? 'tealtera' : 'tera'; - pokemon.formeChange(pokemon.species.id + tera, pokemon.getItem(), true); - } else { - if (pokemon.getItem().name.endsWith('Mask')) { - // @ts-ignore - const species: Species = this.getMixedSpecies(pokemon.m.originalSpecies, - pokemon.getItem().forcedForme! + '-Tera', pokemon); - const oSpecies = this.dex.species.get(pokemon.m.originalSpecies); - // @ts-ignore - const originalTeraSpecies = this.dex.species.get(species.originalSpecies); - pokemon.formeChange(species, pokemon.getItem(), true); - this.battle.add('-start', pokemon, originalTeraSpecies.requiredItem, '[silent]'); - if (oSpecies.types.length !== pokemon.species.types.length || oSpecies.types[1] !== pokemon.species.types[1]) { - this.battle.add('-start', pokemon, 'typechange', pokemon.species.types.join('/'), '[silent]'); - } - } - } - this.battle.runEvent('AfterTerastallization', pokemon); - }, - getMixedSpecies(originalForme, megaForme, pokemon) { - const originalSpecies = this.dex.species.get(originalForme); - const megaSpecies = this.dex.species.get(megaForme); - if (originalSpecies.baseSpecies === megaSpecies.baseSpecies) return megaSpecies; - // @ts-ignore - const deltas = this.getFormeChangeDeltas(megaSpecies, pokemon); - // @ts-ignore - const species = this.mutateOriginalSpecies(originalSpecies, deltas); - return species; - }, - getFormeChangeDeltas(formeChangeSpecies, pokemon) { - const baseSpecies = this.dex.species.get(formeChangeSpecies.baseSpecies); - const deltas: { - ability: string, - baseStats: SparseStatsTable, - weighthg: number, - originalSpecies: string, - requiredItem: string | undefined, - type?: string, - formeType?: string, - } = { - ability: formeChangeSpecies.abilities['0'], - baseStats: {}, - weighthg: formeChangeSpecies.weighthg - baseSpecies.weighthg, - 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]; - } - let formeType: string | null = null; - if (formeChangeSpecies.isMega) formeType = 'Mega'; - if (formeChangeSpecies.isPrimal) formeType = 'Primal'; - if (formeChangeSpecies.name.endsWith('Crowned')) formeType = 'Crowned'; - if (formeType) deltas.formeType = formeType; - if (!deltas.formeType && formeChangeSpecies.abilities['H'] && - pokemon && pokemon.baseSpecies.abilities['H'] === pokemon.getAbility().name) { - deltas.ability = formeChangeSpecies.abilities['H']; - } - 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.originalSpecies = deltas.originalSpecies; - species.requiredItem = deltas.requiredItem; - switch (deltas.formeType) { - case 'Mega': species.isMega = true; break; - case 'Primal': species.isPrimal = true; break; - } - return species; - }, - }, -}; diff --git a/data/mods/moderngen1/formats-data.ts b/data/mods/moderngen1/formats-data.ts deleted file mode 100644 index d8cbc7fda97f..000000000000 --- a/data/mods/moderngen1/formats-data.ts +++ /dev/null @@ -1,3583 +0,0 @@ -export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = { - bulbasaur: { - tier: "LC", - }, - ivysaur: { - tier: "NFE", - }, - venusaur: { - tier: "UU", - }, - charmander: { - tier: "LC", - }, - charmeleon: { - tier: "NFE", - }, - charizard: { - tier: "UU", - }, - 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", - }, - rattataalola: { - tier: "LC", - }, - raticate: { - tier: "UU", - }, - raticatealola: { - tier: "UU", - }, - spearow: { - tier: "LC", - }, - fearow: { - tier: "UU", - }, - ekans: { - tier: "LC", - }, - arbok: { - tier: "UU", - }, - pichu: { - tier: "LC", - }, - pichuspikyeared: { - tier: "Illegal", - }, - pikachu: { - tier: "NFE", - }, - pikachucosplay: { - tier: "Illegal", - }, - pikachurockstar: { - tier: "Illegal", - }, - pikachubelle: { - tier: "Illegal", - }, - pikachupopstar: { - tier: "Illegal", - }, - pikachuphd: { - tier: "Illegal", - }, - pikachulibre: { - tier: "Illegal", - }, - pikachuoriginal: { - tier: "UU", - }, - pikachuhoenn: { - tier: "UU", - }, - pikachusinnoh: { - tier: "UU", - }, - pikachuunova: { - tier: "UU", - }, - pikachukalos: { - tier: "UU", - }, - pikachualola: { - tier: "UU", - }, - pikachupartner: { - tier: "UU", - }, - pikachuworld: { - tier: "UU", - }, - raichu: { - tier: "UU", - }, - raichualola: { - tier: "UU", - }, - sandshrew: { - tier: "LC", - }, - sandshrewalola: { - tier: "LC", - }, - sandslash: { - tier: "UU", - }, - sandslashalola: { - 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", - }, - vulpixalola: { - tier: "LC", - }, - ninetales: { - tier: "UU", - }, - ninetalesalola: { - tier: "UU", - }, - 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: "UU", - }, - bellossom: { - tier: "UU", - }, - paras: { - tier: "LC", - }, - parasect: { - tier: "UU", - }, - venonat: { - tier: "LC", - }, - venomoth: { - tier: "UU", - }, - diglett: { - tier: "LC", - }, - diglettalola: { - tier: "LC", - }, - dugtrio: { - tier: "UU", - }, - dugtrioalola: { - tier: "UU", - }, - meowth: { - tier: "LC", - }, - meowthalola: { - tier: "LC", - }, - meowthgalar: { - tier: "LC", - }, - persian: { - tier: "UU", - }, - persianalola: { - tier: "UU", - }, - perrserker: { - tier: "UU", - }, - psyduck: { - tier: "LC", - }, - golduck: { - tier: "UU", - }, - mankey: { - tier: "LC", - }, - primeape: { - tier: "UU", - }, - growlithe: { - tier: "LC", - }, - growlithehisui: { - isNonstandard: null, - tier: "LC", - }, - arcanine: { - tier: "UU", - }, - arcaninehisui: { - isNonstandard: null, - tier: "UU", - }, - poliwag: { - tier: "LC", - }, - poliwhirl: { - tier: "NFE", - }, - poliwrath: { - tier: "UU", - }, - politoed: { - tier: "UU", - }, - abra: { - tier: "LC", - }, - kadabra: { - tier: "NFE", - }, - alakazam: { - tier: "UU", - }, - machop: { - tier: "LC", - }, - machoke: { - tier: "NFE", - }, - machamp: { - tier: "UU", - }, - bellsprout: { - tier: "LC", - }, - weepinbell: { - tier: "NFE", - }, - victreebel: { - tier: "UU", - }, - tentacool: { - tier: "LC", - }, - tentacruel: { - tier: "UU", - }, - geodude: { - tier: "LC", - }, - geodudealola: { - tier: "LC", - }, - graveler: { - tier: "NFE", - }, - graveleralola: { - tier: "NFE", - }, - golem: { - tier: "UU", - }, - golemalola: { - tier: "UU", - }, - ponyta: { - tier: "LC", - }, - ponytagalar: { - tier: "LC", - }, - rapidash: { - tier: "UU", - }, - rapidashgalar: { - tier: "UU", - }, - slowpoke: { - tier: "LC", - }, - slowpokegalar: { - tier: "LC", - }, - slowbro: { - tier: "UU", - }, - slowbrogalar: { - tier: "UU", - }, - slowking: { - tier: "UU", - }, - slowkinggalar: { - tier: "UU", - }, - magnemite: { - tier: "LC", - }, - magneton: { - tier: "NFE", - }, - magnezone: { - tier: "UU", - }, - farfetchd: { - tier: "UU", - }, - farfetchdgalar: { - tier: "LC", - }, - sirfetchd: { - tier: "UU", - }, - doduo: { - tier: "LC", - }, - dodrio: { - tier: "UU", - }, - seel: { - tier: "LC", - }, - dewgong: { - tier: "UU", - }, - grimer: { - tier: "LC", - }, - grimeralola: { - tier: "LC", - }, - muk: { - tier: "UU", - }, - mukalola: { - tier: "UU", - }, - shellder: { - tier: "LC", - }, - cloyster: { - tier: "Uber", - }, - gastly: { - tier: "LC", - }, - haunter: { - tier: "NFE", - }, - gengar: { - tier: "UU", - }, - onix: { - tier: "LC", - }, - steelix: { - tier: "UU", - }, - drowzee: { - tier: "LC", - }, - hypno: { - tier: "UU", - }, - krabby: { - tier: "LC", - }, - kingler: { - tier: "UU", - }, - voltorb: { - tier: "LC", - }, - voltorbhisui: { - isNonstandard: null, - tier: "LC", - }, - electrode: { - tier: "UU", - }, - electrodehisui: { - isNonstandard: null, - tier: "OU", - }, - exeggcute: { - tier: "LC", - }, - exeggutor: { - tier: "UU", - }, - exeggutoralola: { - tier: "UU", - }, - cubone: { - tier: "LC", - }, - marowak: { - tier: "UU", - }, - marowakalola: { - tier: "UU", - }, - tyrogue: { - tier: "LC", - }, - hitmonlee: { - tier: "UU", - }, - hitmonchan: { - tier: "UU", - }, - hitmontop: { - tier: "UU", - }, - lickitung: { - tier: "LC", - }, - lickilicky: { - tier: "UU", - }, - koffing: { - tier: "LC", - }, - weezing: { - tier: "UU", - }, - weezinggalar: { - tier: "UU", - }, - rhyhorn: { - tier: "LC", - }, - rhydon: { - tier: "NFE", - }, - rhyperior: { - tier: "UU", - }, - happiny: { - tier: "LC", - }, - chansey: { - tier: "OU", - }, - blissey: { - tier: "UU", - }, - tangela: { - tier: "NFE", - }, - tangrowth: { - tier: "UU", - }, - kangaskhan: { - tier: "UU", - }, - horsea: { - tier: "LC", - }, - seadra: { - tier: "NFE", - }, - kingdra: { - tier: "UU", - }, - goldeen: { - tier: "LC", - }, - seaking: { - tier: "UU", - }, - staryu: { - tier: "LC", - }, - starmie: { - tier: "OU", - }, - mimejr: { - tier: "LC", - }, - mrmime: { - tier: "UU", - }, - mrmimegalar: { - tier: "NFE", - }, - mrrime: { - tier: "UU", - }, - scyther: { - tier: "NFE", - }, - scizor: { - tier: "UU", - }, - kleavor: { - isNonstandard: null, - tier: "UU", - }, - smoochum: { - tier: "LC", - }, - jynx: { - tier: "UU", - }, - elekid: { - tier: "LC", - }, - electabuzz: { - tier: "NFE", - }, - electivire: { - tier: "UU", - }, - magby: { - tier: "LC", - }, - magmar: { - tier: "NFE", - }, - magmortar: { - tier: "UU", - }, - pinsir: { - tier: "UU", - }, - tauros: { - tier: "UU", - }, - taurospaldeacombat: { - tier: "UU", - }, - taurospaldeablaze: { - tier: "UU", - }, - taurospaldeaaqua: { - tier: "UU", - }, - magikarp: { - tier: "LC", - }, - gyarados: { - tier: "UU", - }, - lapras: { - tier: "UU", - }, - ditto: { - tier: "UU", - }, - eevee: { - tier: "LC", - }, - vaporeon: { - tier: "UU", - }, - jolteon: { - tier: "UU", - }, - flareon: { - tier: "UU", - }, - espeon: { - tier: "UU", - }, - umbreon: { - tier: "UU", - }, - leafeon: { - tier: "UU", - }, - glaceon: { - tier: "UU", - }, - sylveon: { - tier: "UU", - }, - porygon: { - tier: "LC", - }, - porygon2: { - tier: "NFE", - }, - porygonz: { - tier: "UU", - }, - omanyte: { - tier: "LC", - }, - omastar: { - tier: "Uber", - }, - kabuto: { - tier: "LC", - }, - kabutops: { - tier: "UU", - }, - aerodactyl: { - tier: "UU", - }, - munchlax: { - tier: "LC", - }, - snorlax: { - tier: "UU", - }, - articuno: { - tier: "UU", - }, - articunogalar: { - tier: "UU", - }, - zapdos: { - tier: "UU", - }, - zapdosgalar: { - tier: "UU", - }, - moltres: { - tier: "UU", - }, - moltresgalar: { - tier: "UU", - }, - dratini: { - tier: "LC", - }, - dragonair: { - tier: "NFE", - }, - dragonite: { - tier: "UU", - }, - mewtwo: { - tier: "Uber", - }, - mew: { - tier: "Uber", - }, - chikorita: { - tier: "LC", - }, - bayleef: { - tier: "NFE", - }, - meganium: { - tier: "UU", - }, - cyndaquil: { - tier: "LC", - }, - quilava: { - tier: "NFE", - }, - typhlosion: { - tier: "UU", - }, - typhlosionhisui: { - isNonstandard: null, - tier: "UU", - }, - totodile: { - tier: "LC", - }, - croconaw: { - tier: "NFE", - }, - feraligatr: { - tier: "UU", - }, - sentret: { - tier: "LC", - }, - furret: { - tier: "UU", - }, - hoothoot: { - tier: "LC", - }, - noctowl: { - tier: "UU", - }, - ledyba: { - tier: "LC", - }, - ledian: { - tier: "UU", - }, - spinarak: { - tier: "LC", - }, - ariados: { - tier: "UU", - }, - chinchou: { - tier: "LC", - }, - lanturn: { - tier: "UU", - }, - togepi: { - tier: "LC", - }, - togetic: { - tier: "NFE", - }, - togekiss: { - tier: "UU", - }, - natu: { - tier: "LC", - }, - xatu: { - tier: "UU", - }, - mareep: { - tier: "LC", - }, - flaaffy: { - tier: "NFE", - }, - ampharos: { - tier: "UU", - }, - azurill: { - tier: "LC", - }, - marill: { - tier: "NFE", - }, - azumarill: { - tier: "UU", - }, - bonsly: { - tier: "LC", - }, - sudowoodo: { - tier: "UU", - }, - hoppip: { - tier: "LC", - }, - skiploom: { - tier: "NFE", - }, - jumpluff: { - tier: "UU", - }, - aipom: { - tier: "LC", - }, - ambipom: { - tier: "UU", - }, - sunkern: { - tier: "LC", - }, - sunflora: { - tier: "UU", - }, - yanma: { - tier: "LC", - }, - yanmega: { - tier: "UU", - }, - wooper: { - tier: "LC", - }, - wooperpaldea: { - tier: "LC", - }, - quagsire: { - tier: "UU", - }, - murkrow: { - tier: "LC", - }, - honchkrow: { - tier: "UU", - }, - misdreavus: { - tier: "LC", - }, - mismagius: { - tier: "UU", - }, - unown: { - tier: "UU", - }, - wynaut: { - tier: "LC", - }, - wobbuffet: { - tier: "UU", - }, - girafarig: { - tier: "NFE", - }, - farigiraf: { - tier: "UU", - }, - pineco: { - tier: "LC", - }, - forretress: { - tier: "UU", - }, - dunsparce: { - tier: "LC", - }, - dudunsparce: { - tier: "UU", - }, - gligar: { - tier: "LC", - }, - gliscor: { - tier: "UU", - }, - snubbull: { - tier: "LC", - }, - granbull: { - tier: "UU", - }, - qwilfish: { - tier: "UU", - }, - qwilfishhisui: { - isNonstandard: null, - tier: "NFE", - }, - overqwil: { - isNonstandard: null, - tier: "UU", - }, - shuckle: { - tier: "UU", - }, - heracross: { - tier: "UU", - }, - sneasel: { - tier: "NFE", - }, - sneaselhisui: { - isNonstandard: null, - tier: "NFE", - }, - weavile: { - tier: "UU", - }, - sneasler: { - isNonstandard: null, - tier: "OU", - }, - teddiursa: { - tier: "LC", - }, - ursaring: { - tier: "UU", - }, - ursaluna: { - isNonstandard: null, - tier: "OU", - }, - ursalunabloodmoon: { - tier: "UU", - }, - slugma: { - tier: "LC", - }, - magcargo: { - tier: "UU", - }, - swinub: { - tier: "LC", - }, - piloswine: { - tier: "NFE", - }, - mamoswine: { - tier: "UU", - }, - corsola: { - tier: "UU", - }, - corsolagalar: { - tier: "LC", - }, - cursola: { - tier: "UU", - }, - remoraid: { - tier: "LC", - }, - octillery: { - tier: "UU", - }, - delibird: { - tier: "UU", - }, - mantyke: { - tier: "LC", - }, - mantine: { - tier: "UU", - }, - skarmory: { - tier: "UU", - }, - houndour: { - tier: "LC", - }, - houndoom: { - tier: "UU", - }, - phanpy: { - tier: "LC", - }, - donphan: { - tier: "UU", - }, - stantler: { - tier: "NFE", - }, - wyrdeer: { - isNonstandard: null, - tier: "UU", - }, - smeargle: { - tier: "UU", - }, - miltank: { - tier: "UU", - }, - raikou: { - tier: "UU", - }, - entei: { - tier: "UU", - }, - suicune: { - tier: "UU", - }, - larvitar: { - tier: "LC", - }, - pupitar: { - tier: "NFE", - }, - tyranitar: { - tier: "UU", - }, - lugia: { - tier: "Uber", - }, - hooh: { - tier: "Uber", - }, - celebi: { - tier: "UU", - }, - treecko: { - tier: "LC", - }, - grovyle: { - tier: "NFE", - }, - sceptile: { - tier: "UU", - }, - torchic: { - tier: "LC", - }, - combusken: { - tier: "NFE", - }, - blaziken: { - tier: "UU", - }, - mudkip: { - tier: "LC", - }, - marshtomp: { - tier: "NFE", - }, - swampert: { - tier: "UU", - }, - poochyena: { - tier: "LC", - }, - mightyena: { - tier: "UU", - }, - zigzagoon: { - tier: "LC", - }, - zigzagoongalar: { - tier: "LC", - }, - linoone: { - tier: "UU", - }, - linoonegalar: { - tier: "NFE", - }, - obstagoon: { - tier: "UU", - }, - wurmple: { - tier: "LC", - }, - silcoon: { - tier: "NFE", - }, - beautifly: { - tier: "UU", - }, - cascoon: { - tier: "NFE", - }, - dustox: { - tier: "UU", - }, - lotad: { - tier: "LC", - }, - lombre: { - tier: "NFE", - }, - ludicolo: { - tier: "UU", - }, - seedot: { - tier: "LC", - }, - nuzleaf: { - tier: "NFE", - }, - shiftry: { - tier: "UU", - }, - taillow: { - tier: "LC", - }, - swellow: { - tier: "UU", - }, - wingull: { - tier: "LC", - }, - pelipper: { - tier: "UU", - }, - ralts: { - tier: "LC", - }, - kirlia: { - tier: "NFE", - }, - gardevoir: { - tier: "UU", - }, - gallade: { - tier: "UU", - }, - surskit: { - tier: "LC", - }, - masquerain: { - tier: "UU", - }, - shroomish: { - tier: "LC", - }, - breloom: { - tier: "UU", - }, - slakoth: { - tier: "LC", - }, - vigoroth: { - tier: "NFE", - }, - slaking: { - tier: "Uber", - }, - nincada: { - tier: "LC", - }, - ninjask: { - tier: "OU", - }, - shedinja: { - tier: "UU", - }, - whismur: { - tier: "LC", - }, - loudred: { - tier: "NFE", - }, - exploud: { - tier: "UU", - }, - makuhita: { - tier: "LC", - }, - hariyama: { - tier: "UU", - }, - nosepass: { - tier: "LC", - }, - probopass: { - tier: "UU", - }, - skitty: { - tier: "LC", - }, - delcatty: { - tier: "UU", - }, - sableye: { - tier: "UU", - }, - mawile: { - tier: "UU", - }, - aron: { - tier: "LC", - }, - lairon: { - tier: "NFE", - }, - aggron: { - tier: "UU", - }, - meditite: { - tier: "LC", - }, - medicham: { - tier: "UU", - }, - electrike: { - tier: "LC", - }, - manectric: { - tier: "UU", - }, - plusle: { - tier: "UU", - }, - minun: { - tier: "UU", - }, - volbeat: { - tier: "UU", - }, - illumise: { - tier: "UU", - }, - budew: { - tier: "LC", - }, - roselia: { - tier: "NFE", - }, - roserade: { - tier: "UU", - }, - gulpin: { - tier: "LC", - }, - swalot: { - tier: "UU", - }, - carvanha: { - tier: "LC", - }, - sharpedo: { - tier: "UU", - }, - wailmer: { - tier: "LC", - }, - wailord: { - tier: "UU", - }, - numel: { - tier: "LC", - }, - camerupt: { - tier: "UU", - }, - torkoal: { - tier: "UU", - }, - spoink: { - tier: "LC", - }, - grumpig: { - tier: "UU", - }, - spinda: { - tier: "UU", - }, - trapinch: { - tier: "LC", - }, - vibrava: { - tier: "NFE", - }, - flygon: { - tier: "UU", - }, - cacnea: { - tier: "LC", - }, - cacturne: { - tier: "UU", - }, - swablu: { - tier: "LC", - }, - altaria: { - tier: "UU", - }, - zangoose: { - tier: "UU", - }, - seviper: { - tier: "UU", - }, - lunatone: { - tier: "UU", - }, - solrock: { - tier: "UU", - }, - barboach: { - tier: "LC", - }, - whiscash: { - tier: "UU", - }, - corphish: { - tier: "LC", - }, - crawdaunt: { - tier: "UU", - }, - baltoy: { - tier: "LC", - }, - claydol: { - tier: "UU", - }, - lileep: { - tier: "LC", - }, - cradily: { - tier: "UU", - }, - anorith: { - tier: "LC", - }, - armaldo: { - tier: "UU", - }, - feebas: { - tier: "LC", - }, - milotic: { - tier: "UU", - }, - castform: { - tier: "UU", - }, - kecleon: { - tier: "UU", - }, - shuppet: { - tier: "LC", - }, - banette: { - tier: "UU", - }, - duskull: { - tier: "LC", - }, - dusclops: { - tier: "NFE", - }, - dusknoir: { - tier: "UU", - }, - tropius: { - tier: "UU", - }, - chingling: { - tier: "LC", - }, - chimecho: { - tier: "UU", - }, - absol: { - tier: "UU", - }, - snorunt: { - tier: "LC", - }, - glalie: { - tier: "UU", - }, - froslass: { - tier: "UU", - }, - spheal: { - tier: "LC", - }, - sealeo: { - tier: "NFE", - }, - walrein: { - tier: "UU", - }, - clamperl: { - tier: "LC", - }, - huntail: { - tier: "UU", - }, - gorebyss: { - tier: "Uber", - }, - relicanth: { - tier: "UU", - }, - luvdisc: { - tier: "UU", - }, - bagon: { - tier: "LC", - }, - shelgon: { - tier: "NFE", - }, - salamence: { - tier: "UU", - }, - beldum: { - tier: "LC", - }, - metang: { - tier: "NFE", - }, - metagross: { - tier: "UU", - }, - regirock: { - tier: "UU", - }, - regice: { - tier: "UU", - }, - registeel: { - tier: "UU", - }, - latias: { - tier: "UU", - }, - latios: { - tier: "OU", - }, - kyogre: { - tier: "Uber", - }, - groudon: { - tier: "Uber", - }, - rayquaza: { - tier: "Uber", - }, - rayquazamega: { - tier: "Uber", - }, - jirachi: { - tier: "UU", - }, - deoxys: { - tier: "Uber", - }, - deoxysattack: { - tier: "Uber", - }, - deoxysdefense: { - tier: "UU", - }, - deoxysspeed: { - tier: "Uber", - }, - turtwig: { - tier: "LC", - }, - grotle: { - tier: "NFE", - }, - torterra: { - tier: "OU", - }, - chimchar: { - tier: "LC", - }, - monferno: { - tier: "NFE", - }, - infernape: { - tier: "UU", - }, - piplup: { - tier: "LC", - }, - prinplup: { - tier: "NFE", - }, - empoleon: { - tier: "OU", - }, - starly: { - tier: "LC", - }, - staravia: { - tier: "NFE", - }, - staraptor: { - tier: "UU", - }, - bidoof: { - tier: "LC", - }, - bibarel: { - tier: "UU", - }, - kricketot: { - tier: "LC", - }, - kricketune: { - tier: "UU", - }, - shinx: { - tier: "LC", - }, - luxio: { - tier: "NFE", - }, - luxray: { - tier: "UU", - }, - cranidos: { - tier: "LC", - }, - rampardos: { - tier: "UU", - }, - shieldon: { - tier: "LC", - }, - bastiodon: { - tier: "UU", - }, - burmy: { - tier: "LC", - }, - wormadam: { - tier: "UU", - }, - wormadamsandy: { - tier: "UU", - }, - wormadamtrash: { - tier: "UU", - }, - mothim: { - tier: "UU", - }, - combee: { - tier: "LC", - }, - vespiquen: { - tier: "UU", - }, - pachirisu: { - tier: "UU", - }, - buizel: { - tier: "LC", - }, - floatzel: { - tier: "UU", - }, - cherubi: { - tier: "LC", - }, - cherrim: { - tier: "UU", - }, - cherrimsunshine: { - tier: "Illegal", - }, - shellos: { - tier: "LC", - }, - gastrodon: { - tier: "OU", - }, - drifloon: { - tier: "LC", - }, - drifblim: { - tier: "UU", - }, - buneary: { - tier: "LC", - }, - lopunny: { - tier: "UU", - }, - glameow: { - tier: "LC", - }, - purugly: { - tier: "UU", - }, - stunky: { - tier: "LC", - }, - skuntank: { - tier: "UU", - }, - bronzor: { - tier: "LC", - }, - bronzong: { - tier: "UU", - }, - chatot: { - tier: "UU", - }, - spiritomb: { - tier: "UU", - }, - gible: { - tier: "LC", - }, - gabite: { - tier: "UU", - }, - garchomp: { - tier: "OU", - }, - riolu: { - tier: "LC", - }, - lucario: { - tier: "UU", - }, - hippopotas: { - tier: "LC", - }, - hippowdon: { - tier: "UU", - }, - skorupi: { - tier: "LC", - }, - drapion: { - tier: "UU", - }, - croagunk: { - tier: "LC", - }, - toxicroak: { - tier: "UU", - }, - carnivine: { - tier: "UU", - }, - finneon: { - tier: "LC", - }, - lumineon: { - tier: "UU", - }, - snover: { - tier: "LC", - }, - abomasnow: { - tier: "UU", - }, - rotom: { - tier: "UU", - }, - rotomheat: { - tier: "UU", - }, - rotomwash: { - tier: "UU", - }, - rotomfrost: { - tier: "UU", - }, - rotomfan: { - tier: "UU", - }, - rotommow: { - tier: "UU", - }, - uxie: { - tier: "UU", - }, - mesprit: { - tier: "UU", - }, - azelf: { - tier: "OU", - }, - dialga: { - tier: "Uber", - }, - dialgaorigin: { - tier: "Illegal", - }, - palkia: { - tier: "Uber", - }, - palkiaorigin: { - tier: "Illegal", - }, - heatran: { - tier: "UU", - }, - regigigas: { - tier: "Uber", - }, - giratina: { - tier: "OU", - }, - giratinaorigin: { - tier: "Illegal", - }, - cresselia: { - tier: "UU", - }, - phione: { - tier: "UU", - }, - manaphy: { - tier: "UU", - }, - darkrai: { - tier: "Uber", - }, - shaymin: { - tier: "UU", - }, - shayminsky: { - tier: "UU", - }, - arceus: { - tier: "Uber", - }, - victini: { - tier: "OU", - }, - snivy: { - tier: "LC", - }, - servine: { - tier: "NFE", - }, - serperior: { - tier: "UU", - }, - tepig: { - tier: "LC", - }, - pignite: { - tier: "NFE", - }, - emboar: { - tier: "UU", - }, - oshawott: { - tier: "LC", - }, - dewott: { - tier: "NFE", - }, - samurott: { - tier: "UU", - }, - samurotthisui: { - isNonstandard: null, - tier: "UU", - }, - patrat: { - tier: "LC", - }, - watchog: { - tier: "UU", - }, - lillipup: { - tier: "LC", - }, - herdier: { - tier: "NFE", - }, - stoutland: { - tier: "UU", - }, - purrloin: { - tier: "LC", - }, - liepard: { - tier: "UU", - }, - pansage: { - tier: "LC", - }, - simisage: { - tier: "UU", - }, - pansear: { - tier: "LC", - }, - simisear: { - tier: "UU", - }, - panpour: { - tier: "LC", - }, - simipour: { - tier: "UU", - }, - munna: { - tier: "LC", - }, - musharna: { - tier: "UU", - }, - pidove: { - tier: "LC", - }, - tranquill: { - tier: "NFE", - }, - unfezant: { - tier: "UU", - }, - blitzle: { - tier: "LC", - }, - zebstrika: { - tier: "UU", - }, - roggenrola: { - tier: "LC", - }, - boldore: { - tier: "NFE", - }, - gigalith: { - tier: "UU", - }, - woobat: { - tier: "LC", - }, - swoobat: { - tier: "UU", - }, - drilbur: { - tier: "LC", - }, - excadrill: { - tier: "UU", - }, - audino: { - tier: "UU", - }, - timburr: { - tier: "LC", - }, - gurdurr: { - tier: "NFE", - }, - conkeldurr: { - tier: "UU", - }, - tympole: { - tier: "LC", - }, - palpitoad: { - tier: "NFE", - }, - seismitoad: { - tier: "UU", - }, - throh: { - tier: "UU", - }, - sawk: { - tier: "UU", - }, - sewaddle: { - tier: "LC", - }, - swadloon: { - tier: "NFE", - }, - leavanny: { - tier: "UU", - }, - venipede: { - tier: "LC", - }, - whirlipede: { - tier: "NFE", - }, - scolipede: { - tier: "UU", - }, - cottonee: { - tier: "LC", - }, - whimsicott: { - tier: "UU", - }, - petilil: { - tier: "LC", - }, - lilligant: { - tier: "UU", - }, - lilliganthisui: { - isNonstandard: null, - tier: "UU", - }, - basculin: { - tier: "UU", - }, - basculinbluestriped: { - tier: "UU", - }, - basculinwhitestriped: { - isNonstandard: null, - tier: "NFE", - }, - basculegion: { - isNonstandard: null, - tier: "UU", - }, - basculegionf: { - isNonstandard: null, - tier: "UU", - }, - sandile: { - tier: "LC", - }, - krokorok: { - tier: "NFE", - }, - krookodile: { - tier: "UU", - }, - darumaka: { - tier: "LC", - }, - darumakagalar: { - tier: "LC", - }, - darmanitan: { - tier: "UU", - }, - darmanitanzen: { - tier: "Illegal", - }, - darmanitangalar: { - tier: "UU", - }, - darmanitangalarzen: { - tier: "Illegal", - }, - maractus: { - tier: "UU", - }, - dwebble: { - tier: "LC", - }, - crustle: { - tier: "UU", - }, - scraggy: { - tier: "LC", - }, - scrafty: { - tier: "UU", - }, - sigilyph: { - tier: "UU", - }, - yamask: { - tier: "LC", - }, - yamaskgalar: { - tier: "LC", - }, - cofagrigus: { - tier: "UU", - }, - runerigus: { - tier: "UU", - }, - tirtouga: { - tier: "LC", - }, - carracosta: { - tier: "UU", - }, - archen: { - tier: "LC", - }, - archeops: { - tier: "OU", - }, - trubbish: { - tier: "LC", - }, - garbodor: { - tier: "UU", - }, - zorua: { - tier: "LC", - }, - zoruahisui: { - isNonstandard: null, - tier: "LC", - }, - zoroark: { - tier: "UU", - }, - zoroarkhisui: { - isNonstandard: null, - tier: "UU", - }, - minccino: { - tier: "LC", - }, - cinccino: { - tier: "UU", - }, - gothita: { - tier: "LC", - }, - gothorita: { - tier: "NFE", - }, - gothitelle: { - tier: "UU", - }, - solosis: { - tier: "LC", - }, - duosion: { - tier: "NFE", - }, - reuniclus: { - tier: "UU", - }, - ducklett: { - tier: "LC", - }, - swanna: { - tier: "UU", - }, - vanillite: { - tier: "LC", - }, - vanillish: { - tier: "NFE", - }, - vanilluxe: { - tier: "UU", - }, - deerling: { - tier: "LC", - }, - sawsbuck: { - tier: "UU", - }, - emolga: { - tier: "UU", - }, - karrablast: { - tier: "LC", - }, - escavalier: { - tier: "UU", - }, - foongus: { - tier: "LC", - }, - amoonguss: { - tier: "UU", - }, - frillish: { - tier: "LC", - }, - jellicent: { - tier: "UU", - }, - alomomola: { - tier: "UU", - }, - joltik: { - tier: "LC", - }, - galvantula: { - tier: "UU", - }, - ferroseed: { - tier: "LC", - }, - ferrothorn: { - tier: "UU", - }, - klink: { - tier: "LC", - }, - klang: { - tier: "UU", - }, - klinklang: { - tier: "UU", - }, - tynamo: { - tier: "LC", - }, - eelektrik: { - tier: "NFE", - }, - eelektross: { - tier: "UU", - }, - elgyem: { - tier: "LC", - }, - beheeyem: { - tier: "UU", - }, - litwick: { - tier: "LC", - }, - lampent: { - tier: "NFE", - }, - chandelure: { - tier: "UU", - }, - axew: { - tier: "LC", - }, - fraxure: { - tier: "NFE", - }, - haxorus: { - tier: "UU", - }, - cubchoo: { - tier: "LC", - }, - beartic: { - tier: "UU", - }, - cryogonal: { - tier: "UU", - }, - shelmet: { - tier: "LC", - }, - accelgor: { - tier: "UU", - }, - stunfisk: { - tier: "UU", - }, - stunfiskgalar: { - tier: "UU", - }, - mienfoo: { - tier: "LC", - }, - mienshao: { - tier: "UU", - }, - druddigon: { - tier: "UU", - }, - golett: { - tier: "LC", - }, - golurk: { - tier: "UU", - }, - pawniard: { - tier: "LC", - }, - bisharp: { - tier: "UU", - }, - bouffalant: { - tier: "UU", - }, - rufflet: { - tier: "LC", - }, - braviary: { - tier: "UU", - }, - braviaryhisui: { - isNonstandard: null, - tier: "UU", - }, - vullaby: { - tier: "LC", - }, - mandibuzz: { - tier: "UU", - }, - heatmor: { - tier: "UU", - }, - durant: { - tier: "UU", - }, - deino: { - tier: "LC", - }, - zweilous: { - tier: "NFE", - }, - hydreigon: { - tier: "UU", - }, - larvesta: { - tier: "LC", - }, - volcarona: { - tier: "UU", - }, - cobalion: { - tier: "UU", - }, - terrakion: { - tier: "UU", - }, - virizion: { - tier: "UU", - }, - tornadus: { - tier: "UU", - }, - tornadustherian: { - tier: "UU", - }, - thundurus: { - tier: "UU", - }, - thundurustherian: { - tier: "UU", - }, - reshiram: { - tier: "Uber", - }, - zekrom: { - tier: "Uber", - }, - landorus: { - tier: "UU", - }, - landorustherian: { - tier: "OU", - }, - kyurem: { - tier: "OU", - }, - kyuremblack: { - tier: "Uber", - }, - kyuremwhite: { - tier: "Uber", - }, - keldeo: { - tier: "UU", - }, - keldeoresolute: { - tier: "UU", - }, - meloetta: { - tier: "UU", - }, - meloettapirouette: { - tier: "UU", - }, - genesect: { - tier: "OU", - }, - genesectburn: { - tier: "Illegal", - }, - genesectchill: { - tier: "Illegal", - }, - genesectdouse: { - tier: "Illegal", - }, - genesectshock: { - tier: "Illegal", - }, - chespin: { - tier: "LC", - }, - quilladin: { - tier: "NFE", - }, - chesnaught: { - tier: "UU", - }, - fennekin: { - tier: "LC", - }, - braixen: { - tier: "NFE", - }, - delphox: { - tier: "UU", - }, - froakie: { - tier: "LC", - }, - frogadier: { - tier: "NFE", - }, - greninja: { - tier: "UU", - }, - greninjaash: { - tier: "Illegal", - }, - bunnelby: { - tier: "LC", - }, - diggersby: { - tier: "UU", - }, - fletchling: { - tier: "LC", - }, - fletchinder: { - tier: "NFE", - }, - talonflame: { - tier: "UU", - }, - scatterbug: { - tier: "LC", - }, - spewpa: { - tier: "NFE", - }, - vivillon: { - tier: "UU", - }, - vivillonfancy: { - tier: "UU", - }, - vivillonpokeball: { - tier: "UU", - }, - litleo: { - tier: "LC", - }, - pyroar: { - tier: "UU", - }, - flabebe: { - tier: "LC", - }, - floette: { - tier: "NFE", - }, - floetteeternal: { - tier: "UU", - }, - florges: { - tier: "UU", - }, - skiddo: { - tier: "LC", - }, - gogoat: { - tier: "UU", - }, - pancham: { - tier: "LC", - }, - pangoro: { - tier: "UU", - }, - furfrou: { - tier: "UU", - }, - espurr: { - tier: "LC", - }, - meowstic: { - tier: "UU", - }, - meowsticf: { - tier: "UU", - }, - honedge: { - tier: "LC", - }, - doublade: { - tier: "NFE", - }, - aegislash: { - tier: "UU", - }, - aegislashblade: { - }, - spritzee: { - tier: "LC", - }, - aromatisse: { - tier: "UU", - }, - swirlix: { - tier: "LC", - }, - slurpuff: { - tier: "UU", - }, - inkay: { - tier: "LC", - }, - malamar: { - tier: "UU", - }, - binacle: { - tier: "LC", - }, - barbaracle: { - tier: "UU", - }, - skrelp: { - tier: "LC", - }, - dragalge: { - tier: "UU", - }, - clauncher: { - tier: "LC", - }, - clawitzer: { - tier: "UU", - }, - helioptile: { - tier: "LC", - }, - heliolisk: { - tier: "UU", - }, - tyrunt: { - tier: "LC", - }, - tyrantrum: { - tier: "UU", - }, - amaura: { - tier: "LC", - }, - aurorus: { - tier: "UU", - }, - hawlucha: { - tier: "UU", - }, - dedenne: { - tier: "UU", - }, - carbink: { - tier: "UU", - }, - goomy: { - tier: "LC", - }, - sliggoo: { - tier: "NFE", - }, - sliggoohisui: { - isNonstandard: null, - tier: "NFE", - }, - goodra: { - tier: "UU", - }, - goodrahisui: { - isNonstandard: null, - tier: "OU", - }, - klefki: { - tier: "UU", - }, - phantump: { - tier: "LC", - }, - trevenant: { - tier: "UU", - }, - pumpkaboo: { - tier: "LC", - }, - pumpkaboosmall: { - tier: "LC", - }, - pumpkaboolarge: { - tier: "LC", - }, - pumpkaboosuper: { - tier: "LC", - }, - gourgeist: { - tier: "UU", - }, - gourgeistsmall: { - tier: "UU", - }, - gourgeistlarge: { - tier: "UU", - }, - gourgeistsuper: { - tier: "UU", - }, - bergmite: { - tier: "LC", - }, - avalugg: { - tier: "UU", - }, - avalugghisui: { - isNonstandard: null, - tier: "UU", - }, - noibat: { - tier: "LC", - }, - noivern: { - tier: "UU", - }, - xerneas: { - tier: "Uber", - }, - yveltal: { - tier: "OU", - }, - zygarde: { - tier: "UU", - }, - zygarde10: { - tier: "UU", - }, - zygardecomplete: { - tier: "Illegal", - }, - diancie: { - tier: "UU", - }, - hoopa: { - tier: "UU", - }, - hoopaunbound: { - tier: "UU", - }, - volcanion: { - tier: "UU", - }, - rowlet: { - tier: "LC", - }, - dartrix: { - tier: "UU", - }, - decidueye: { - tier: "UU", - }, - decidueyehisui: { - isNonstandard: null, - tier: "UU", - }, - litten: { - tier: "LC", - }, - torracat: { - tier: "NFE", - }, - incineroar: { - tier: "UU", - }, - popplio: { - tier: "LC", - }, - brionne: { - tier: "NFE", - }, - primarina: { - tier: "UU", - }, - pikipek: { - tier: "LC", - }, - trumbeak: { - tier: "NFE", - }, - toucannon: { - tier: "UU", - }, - yungoos: { - tier: "LC", - }, - gumshoos: { - tier: "UU", - }, - grubbin: { - tier: "LC", - }, - charjabug: { - tier: "NFE", - }, - vikavolt: { - tier: "UU", - }, - crabrawler: { - tier: "LC", - }, - crabominable: { - tier: "UU", - }, - oricorio: { - tier: "UU", - }, - oricoriopompom: { - tier: "UU", - }, - oricoriopau: { - tier: "UU", - }, - oricoriosensu: { - tier: "UU", - }, - cutiefly: { - tier: "LC", - }, - ribombee: { - tier: "UU", - }, - rockruff: { - tier: "LC", - }, - rockruffdusk: { - tier: "LC", - }, - lycanroc: { - tier: "UU", - }, - lycanrocmidnight: { - tier: "UU", - }, - lycanrocdusk: { - tier: "UU", - }, - wishiwashi: { - tier: "UU", - }, - wishiwashischool: { - }, - mareanie: { - tier: "LC", - }, - toxapex: { - tier: "UU", - }, - mudbray: { - tier: "LC", - }, - mudsdale: { - tier: "UU", - }, - dewpider: { - tier: "LC", - }, - araquanid: { - tier: "UU", - }, - fomantis: { - tier: "LC", - }, - lurantis: { - tier: "UU", - }, - morelull: { - tier: "LC", - }, - shiinotic: { - tier: "UU", - }, - salandit: { - tier: "LC", - }, - salazzle: { - tier: "UU", - }, - stufful: { - tier: "LC", - }, - bewear: { - tier: "UU", - }, - bounsweet: { - tier: "LC", - }, - steenee: { - tier: "NFE", - }, - tsareena: { - tier: "UU", - }, - comfey: { - tier: "UU", - }, - oranguru: { - tier: "UU", - }, - passimian: { - tier: "UU", - }, - wimpod: { - tier: "LC", - }, - golisopod: { - tier: "OU", - }, - sandygast: { - tier: "LC", - }, - palossand: { - tier: "UU", - }, - pyukumuku: { - tier: "UU", - }, - typenull: { - tier: "NFE", - }, - silvally: { - tier: "UU", - }, - silvallybug: { - tier: "Illegal", - }, - silvallydark: { - tier: "Illegal", - }, - silvallydragon: { - tier: "Illegal", - }, - silvallyelectric: { - tier: "Illegal", - }, - silvallyfairy: { - tier: "Illegal", - }, - silvallyfighting: { - tier: "Illegal", - }, - silvallyfire: { - tier: "Illegal", - }, - silvallyflying: { - tier: "Illegal", - }, - silvallyghost: { - tier: "Illegal", - }, - silvallygrass: { - tier: "Illegal", - }, - silvallyground: { - tier: "Illegal", - }, - silvallyice: { - tier: "Illegal", - }, - silvallypoison: { - tier: "Illegal", - }, - silvallypsychic: { - tier: "Illegal", - }, - silvallyrock: { - tier: "Illegal", - }, - silvallysteel: { - tier: "Illegal", - }, - silvallywater: { - tier: "Illegal", - }, - minior: { - tier: "UU", - }, - miniormeteor: { - }, - komala: { - tier: "UU", - }, - turtonator: { - tier: "UU", - }, - togedemaru: { - tier: "UU", - }, - mimikyu: { - tier: "UU", - }, - bruxish: { - tier: "UU", - }, - drampa: { - tier: "UU", - }, - dhelmise: { - tier: "UU", - }, - jangmoo: { - tier: "LC", - }, - hakamoo: { - tier: "NFE", - }, - kommoo: { - tier: "UU", - }, - tapukoko: { - tier: "OU", - }, - tapulele: { - tier: "UU", - }, - tapubulu: { - tier: "UU", - }, - tapufini: { - tier: "UU", - }, - cosmog: { - tier: "LC", - }, - cosmoem: { - tier: "NFE", - }, - solgaleo: { - tier: "Uber", - }, - lunala: { - tier: "Uber", - }, - nihilego: { - tier: "UU", - }, - buzzwole: { - tier: "UU", - }, - pheromosa: { - tier: "Uber", - }, - xurkitree: { - tier: "UU", - }, - celesteela: { - tier: "UU", - }, - kartana: { - tier: "OU", - }, - guzzlord: { - tier: "UU", - }, - necrozma: { - tier: "UU", - }, - necrozmaduskmane: { - tier: "Uber", - }, - necrozmadawnwings: { - tier: "Uber", - }, - necrozmaultra: { - tier: "Illegal", - }, - magearna: { - tier: "OU", - }, - marshadow: { - tier: "Uber", - }, - poipole: { - tier: "NFE", - }, - naganadel: { - tier: "Uber", - }, - stakataka: { - tier: "UU", - }, - blacephalon: { - tier: "UU", - }, - zeraora: { - tier: "OU", - }, - meltan: { - tier: "UU", - }, - melmetal: { - tier: "UU", - }, - grookey: { - tier: "LC", - }, - thwackey: { - tier: "UU", - }, - rillaboom: { - tier: "UU", - }, - scorbunny: { - tier: "LC", - }, - raboot: { - tier: "NFE", - }, - cinderace: { - tier: "UU", - }, - sobble: { - tier: "LC", - }, - drizzile: { - tier: "NFE", - }, - inteleon: { - tier: "Uber", - }, - skwovet: { - tier: "LC", - }, - greedent: { - tier: "UU", - }, - rookidee: { - tier: "LC", - }, - corvisquire: { - tier: "NFE", - }, - corviknight: { - tier: "OU", - }, - blipbug: { - tier: "LC", - }, - dottler: { - tier: "NFE", - }, - orbeetle: { - tier: "LC", - }, - nickit: { - tier: "LC", - }, - thievul: { - tier: "UU", - }, - gossifleur: { - tier: "LC", - }, - eldegoss: { - tier: "UU", - }, - wooloo: { - tier: "LC", - }, - dubwool: { - tier: "UU", - }, - chewtle: { - tier: "LC", - }, - drednaw: { - tier: "UU", - }, - yamper: { - tier: "LC", - }, - boltund: { - tier: "UU", - }, - rolycoly: { - tier: "LC", - }, - carkol: { - tier: "NFE", - }, - coalossal: { - tier: "UU", - }, - applin: { - tier: "LC", - }, - flapple: { - tier: "UU", - }, - appletun: { - tier: "UU", - }, - dipplin: { - tier: "NFE", - }, - silicobra: { - tier: "LC", - }, - sandaconda: { - tier: "UU", - }, - cramorant: { - tier: "UU", - }, - cramorantgorging: { - tier: "Illegal", - }, - cramorantgulping: { - tier: "Illegal", - }, - arrokuda: { - tier: "LC", - }, - barraskewda: { - tier: "UU", - }, - toxel: { - tier: "LC", - }, - toxtricity: { - tier: "UU", - }, - toxtricitylowkey: { - tier: "UU", - }, - sizzlipede: { - tier: "LC", - }, - centiskorch: { - tier: "UU", - }, - clobbopus: { - tier: "LC", - }, - grapploct: { - tier: "UU", - }, - sinistea: { - tier: "LC", - }, - polteageist: { - tier: "UU", - }, - hatenna: { - tier: "LC", - }, - hattrem: { - tier: "NFE", - }, - hatterene: { - tier: "UU", - }, - impidimp: { - tier: "LC", - }, - morgrem: { - tier: "NFE", - }, - grimmsnarl: { - tier: "UU", - }, - milcery: { - tier: "LC", - }, - alcremie: { - tier: "UU", - }, - falinks: { - tier: "UU", - }, - pincurchin: { - tier: "UU", - }, - snom: { - tier: "LC", - }, - frosmoth: { - tier: "UU", - }, - stonjourner: { - tier: "UU", - }, - eiscue: { - tier: "UU", - }, - eiscuenoice: { - tier: "Illegal", - }, - indeedee: { - tier: "UU", - }, - indeedeef: { - tier: "UU", - }, - morpeko: { - tier: "UU", - }, - morpekohangry: { - tier: "Illegal", - }, - cufant: { - tier: "LC", - }, - copperajah: { - tier: "UU", - }, - dracozolt: { - tier: "UU", - }, - arctozolt: { - tier: "UU", - }, - dracovish: { - tier: "UU", - }, - arctovish: { - tier: "UU", - }, - duraludon: { - tier: "NFE", - }, - dreepy: { - tier: "LC", - }, - drakloak: { - tier: "NFE", - }, - dragapult: { - tier: "Uber", - }, - zacian: { - tier: "Uber", - }, - zaciancrowned: { - tier: "Illegal", - }, - zamazenta: { - tier: "Uber", - }, - zamazentacrowned: { - tier: "Illegal", - }, - eternatus: { - tier: "Uber", - }, - kubfu: { - tier: "NFE", - }, - urshifu: { - tier: "UU", - }, - urshifurapidstrike: { - tier: "UU", - }, - zarude: { - tier: "UU", - }, - regieleki: { - tier: "UU", - }, - regidrago: { - tier: "UU", - }, - glastrier: { - tier: "UU", - }, - spectrier: { - tier: "UU", - }, - calyrex: { - tier: "UU", - }, - calyrexice: { - tier: "Uber", - }, - calyrexshadow: { - tier: "Uber", - }, - enamorus: { - isNonstandard: null, - tier: "UU", - }, - enamorustherian: { - isNonstandard: null, - tier: "UU", - }, - sprigatito: { - tier: "LC", - }, - floragato: { - tier: "NFE", - }, - meowscarada: { - tier: "UU", - }, - fuecoco: { - tier: "LC", - }, - crocalor: { - tier: "NFE", - }, - skeledirge: { - tier: "UU", - }, - quaxly: { - tier: "LC", - }, - quaxwell: { - tier: "UU", - }, - quaquaval: { - tier: "UU", - }, - lechonk: { - tier: "LC", - }, - oinkologne: { - tier: "UU", - }, - oinkolognef: { - tier: "UU", - }, - tarountula: { - tier: "LC", - }, - spidops: { - tier: "UU", - }, - nymble: { - tier: "LC", - }, - lokix: { - tier: "UU", - }, - rellor: { - tier: "LC", - }, - rabsca: { - tier: "UU", - }, - greavard: { - tier: "LC", - }, - houndstone: { - tier: "UU", - }, - flittle: { - tier: "NFE", - }, - espathra: { - tier: "UU", - }, - wiglett: { - tier: "LC", - }, - wugtrio: { - tier: "UU", - }, - dondozo: { - tier: "UU", - }, - veluza: { - tier: "UU", - }, - finizen: { - tier: "LC", - }, - palafin: { - tier: "UU", - }, - smoliv: { - tier: "LC", - }, - dolliv: { - tier: "NFE", - }, - arboliva: { - tier: "UU", - }, - capsakid: { - tier: "LC", - }, - scovillain: { - tier: "UU", - }, - tadbulb: { - tier: "LC", - }, - bellibolt: { - tier: "UU", - }, - varoom: { - tier: "LC", - }, - revavroom: { - tier: "UU", - }, - orthworm: { - tier: "UU", - }, - tandemaus: { - tier: "LC", - }, - maushold: { - tier: "UU", - }, - cetoddle: { - tier: "LC", - }, - cetitan: { - tier: "UU", - }, - frigibax: { - tier: "LC", - }, - arctibax: { - tier: "NFE", - }, - baxcalibur: { - tier: "UU", - }, - tatsugiri: { - tier: "UU", - }, - cyclizar: { - tier: "UU", - }, - pawmi: { - tier: "LC", - }, - pawmo: { - tier: "NFE", - }, - pawmot: { - tier: "UU", - }, - wattrel: { - tier: "LC", - }, - kilowattrel: { - tier: "UU", - }, - bombirdier: { - tier: "UU", - }, - squawkabilly: { - tier: "UU", - }, - flamigo: { - tier: "UU", - }, - klawf: { - tier: "UU", - }, - nacli: { - tier: "LC", - }, - naclstack: { - tier: "UU", - }, - garganacl: { - tier: "UU", - }, - glimmet: { - tier: "LC", - }, - glimmora: { - tier: "UU", - }, - shroodle: { - tier: "LC", - }, - grafaiai: { - tier: "UU", - }, - fidough: { - tier: "LC", - }, - dachsbun: { - tier: "UU", - }, - maschiff: { - tier: "LC", - }, - mabosstiff: { - tier: "UU", - }, - bramblin: { - tier: "LC", - }, - brambleghast: { - tier: "UU", - }, - gimmighoul: { - tier: "LC", - }, - gimmighoulroaming: { - tier: "LC", - }, - gholdengo: { - tier: "UU", - }, - greattusk: { - tier: "OU", - }, - brutebonnet: { - tier: "UU", - }, - sandyshocks: { - tier: "UU", - }, - screamtail: { - tier: "OU", - }, - fluttermane: { - tier: "UU", - }, - slitherwing: { - tier: "UU", - }, - roaringmoon: { - tier: "UU", - }, - irontreads: { - tier: "OU", - }, - ironmoth: { - tier: "UU", - }, - ironhands: { - tier: "UU", - }, - ironjugulis: { - tier: "UU", - }, - ironthorns: { - tier: "UU", - }, - ironbundle: { - tier: "Uber", - }, - ironvaliant: { - tier: "Uber", - }, - tinglu: { - tier: "UU", - }, - chienpao: { - tier: "UU", - }, - wochien: { - tier: "UU", - }, - chiyu: { - tier: "UU", - }, - koraidon: { - tier: "Uber", - }, - miraidon: { - tier: "Uber", - }, - tinkatink: { - tier: "LC", - }, - tinkatuff: { - tier: "UU", - }, - tinkaton: { - tier: "UU", - }, - charcadet: { - tier: "LC", - }, - armarouge: { - tier: "UU", - }, - ceruledge: { - tier: "UU", - }, - toedscool: { - tier: "LC", - }, - toedscruel: { - tier: "UU", - }, - kingambit: { - tier: "UU", - }, - clodsire: { - tier: "UU", - }, - annihilape: { - tier: "UU", - }, - walkingwake: { - tier: "OU", - }, - ironleaves: { - tier: "UU", - }, - poltchageist: { - tier: "LC", - }, - sinistcha: { - tier: "UU", - }, - okidogi: { - tier: "UU", - }, - munkidori: { - tier: "UU", - }, - fezandipiti: { - tier: "UU", - }, - ogerpon: { - tier: "UU", - }, - terapagos: { - tier: "OU", - }, - hydrapple: { - tier: "OU", - }, - ragingbolt: { - tier: "OU", - }, - gougingfire: { - tier: "OU", - }, - archaludon: { - tier: "OU", - }, - ironcrown: { - tier: "OU", - }, - ironboulder: { - tier: "OU", - }, -}; diff --git a/data/mods/moderngen1/learnsets.ts b/data/mods/moderngen1/learnsets.ts deleted file mode 100644 index c63b6d56e50d..000000000000 --- a/data/mods/moderngen1/learnsets.ts +++ /dev/null @@ -1,99360 +0,0 @@ -export const Learnsets: {[k: string]: ModdedLearnsetData} = { - missingno: { - learnset: { - blizzard: ["1L1"], - bubblebeam: ["1L1"], - cut: ["1L1"], - doubleedge: ["1L1"], - earthquake: ["1L1"], - fissure: ["1L1"], - fly: ["1L1"], - icebeam: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - psychic: ["1L1"], - rage: ["1L1"], - razorwind: ["1L1"], - rest: ["1L1"], - seismictoss: ["1L1"], - skyattack: ["1L1"], - submission: ["1L1"], - substitute: ["1L1"], - swordsdance: ["1L1"], - takedown: ["1L1"], - teleport: ["1L1"], - thunder: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - triattack: ["1L1"], - watergun: ["1L1"], - }, - }, - bulbasaur: { - learnset: { - acidspray: ["1L1"], - amnesia: ["1L1"], - attract: ["1L1"], - bide: ["1L1"], - bind: ["1L1"], - block: ["1L1"], - bodyslam: ["1L1"], - bulletseed: ["1L1"], - captivate: ["1L1"], - celebrate: ["1L1"], - charm: ["1L1"], - confide: ["1L1"], - curse: ["1L1"], - cut: ["1L1"], - defensecurl: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - echoedvoice: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - falseswipe: ["1L1"], - flash: ["1L1"], - frenzyplant: ["1L1"], - frustration: ["1L1"], - furycutter: ["1L1"], - gigadrain: ["1L1"], - grassknot: ["1L1"], - grasspledge: ["1L1"], - grasswhistle: ["1L1"], - grassyglide: ["1L1"], - grassyterrain: ["1L1"], - growl: ["1L1"], - growth: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - ingrain: ["1L1"], - knockoff: ["1L1"], - leafstorm: ["1L1"], - leechseed: ["1L1"], - lightscreen: ["1L1"], - magicalleaf: ["1L1"], - megadrain: ["1L1"], - mimic: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - naturepower: ["1L1"], - outrage: ["1L1"], - petaldance: ["1L1"], - poisonpowder: ["1L1"], - powerwhip: ["1L1"], - protect: ["1L1"], - rage: ["1L1"], - razorleaf: ["1L1"], - razorwind: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rocksmash: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - secretpower: ["1L1"], - seedbomb: ["1L1"], - skullbash: ["1L1"], - sleeppowder: ["1L1"], - sleeptalk: ["1L1"], - sludge: ["1L1"], - sludgebomb: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - strength: ["1L1"], - stringshot: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - sweetscent: ["1L1"], - swordsdance: ["1L1"], - synthesis: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - venoshock: ["1L1"], - vinewhip: ["1L1"], - weatherball: ["1L1"], - workup: ["1L1"], - worryseed: ["1L1"], - }, - eventData: [ - {generation: 3, level: 70, moves: ["1L1"], pokeball: "pokeball"}, - {generation: 3, level: 10, gender: "M", moves: ["1L1"], pokeball: "pokeball"}, - {generation: 5, level: 10, gender: "M", isHidden: true, moves: ["1L1"]}, - {generation: 5, level: 1, shiny: 1, ivs: {def: 31}, moves: ["1L1"], pokeball: "pokeball"}, - {generation: 6, level: 5, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 6, level: 5, isHidden: true, moves: ["1L1"], pokeball: "cherishball"}, - ], - encounters: [ - {generation: 1, level: 5}, - ], - }, - ivysaur: { - learnset: { - acidspray: ["1L1"], - amnesia: ["1L1"], - attract: ["1L1"], - bide: ["1L1"], - bind: ["1L1"], - bodyslam: ["1L1"], - bulletseed: ["1L1"], - captivate: ["1L1"], - charm: ["1L1"], - confide: ["1L1"], - curse: ["1L1"], - cut: ["1L1"], - defensecurl: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - echoedvoice: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - falseswipe: ["1L1"], - flash: ["1L1"], - frustration: ["1L1"], - furycutter: ["1L1"], - gigadrain: ["1L1"], - grassknot: ["1L1"], - grasspledge: ["1L1"], - grassyglide: ["1L1"], - grassyterrain: ["1L1"], - growl: ["1L1"], - growth: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - knockoff: ["1L1"], - leafstorm: ["1L1"], - leechseed: ["1L1"], - lightscreen: ["1L1"], - magicalleaf: ["1L1"], - megadrain: ["1L1"], - mimic: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - naturepower: ["1L1"], - outrage: ["1L1"], - poisonpowder: ["1L1"], - powerwhip: ["1L1"], - protect: ["1L1"], - rage: ["1L1"], - razorleaf: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roar: ["1L1"], - rocksmash: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - secretpower: ["1L1"], - seedbomb: ["1L1"], - sleeppowder: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - strength: ["1L1"], - stringshot: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - sweetscent: ["1L1"], - swordsdance: ["1L1"], - synthesis: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - venoshock: ["1L1"], - vinewhip: ["1L1"], - weatherball: ["1L1"], - workup: ["1L1"], - worryseed: ["1L1"], - }, - }, - venusaur: { - learnset: { - acidspray: ["1L1"], - amnesia: ["1L1"], - attract: ["1L1"], - bide: ["1L1"], - bind: ["1L1"], - block: ["1L1"], - bodyslam: ["1L1"], - bulldoze: ["1L1"], - bulletseed: ["1L1"], - captivate: ["1L1"], - charm: ["1L1"], - confide: ["1L1"], - curse: ["1L1"], - cut: ["1L1"], - defensecurl: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - echoedvoice: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - falseswipe: ["1L1"], - flash: ["1L1"], - frenzyplant: ["1L1"], - frustration: ["1L1"], - furycutter: ["1L1"], - gigadrain: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - grasspledge: ["1L1"], - grassyglide: ["1L1"], - grassyterrain: ["1L1"], - growl: ["1L1"], - growth: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - knockoff: ["1L1"], - leafstorm: ["1L1"], - leechseed: ["1L1"], - lightscreen: ["1L1"], - magicalleaf: ["1L1"], - megadrain: ["1L1"], - mimic: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - naturepower: ["1L1"], - outrage: ["1L1"], - petalblizzard: ["1L1"], - petaldance: ["1L1"], - poisonjab: ["1L1"], - poisonpowder: ["1L1"], - powerwhip: ["1L1"], - protect: ["1L1"], - rage: ["1L1"], - razorleaf: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roar: ["1L1"], - rockclimb: ["1L1"], - rocksmash: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - scaryface: ["1L1"], - secretpower: ["1L1"], - seedbomb: ["1L1"], - sleeppowder: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - stompingtantrum: ["1L1"], - strength: ["1L1"], - stringshot: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - sweetscent: ["1L1"], - swordsdance: ["1L1"], - synthesis: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - terrainpulse: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - venoshock: ["1L1"], - vinewhip: ["1L1"], - weatherball: ["1L1"], - workup: ["1L1"], - worryseed: ["1L1"], - }, - eventData: [ - {generation: 6, level: 100, isHidden: true, moves: ["1L1"], pokeball: "cherishball"}, - ], - }, - charmander: { - learnset: { - acrobatics: ["1L1"], - aerialace: ["1L1"], - aircutter: ["1L1"], - ancientpower: ["1L1"], - attract: ["1L1"], - beatup: ["1L1"], - bellydrum: ["1L1"], - bide: ["1L1"], - bite: ["1L1"], - blastburn: ["1L1"], - block: ["1L1"], - bodyslam: ["1L1"], - breakingswipe: ["1L1"], - brickbreak: ["1L1"], - captivate: ["1L1"], - celebrate: ["1L1"], - confide: ["1L1"], - counter: ["1L1"], - crunch: ["1L1"], - curse: ["1L1"], - cut: ["1L1"], - defensecurl: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dragonbreath: ["1L1"], - dragonclaw: ["1L1"], - dragondance: ["1L1"], - dragonpulse: ["1L1"], - dragonrage: ["1L1"], - dragonrush: ["1L1"], - dragontail: ["1L1"], - dynamicpunch: ["1L1"], - echoedvoice: ["1L1"], - ember: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - falseswipe: ["1L1"], - fireblast: ["1L1"], - firefang: ["1L1"], - firepledge: ["1L1"], - firepunch: ["1L1"], - firespin: ["1L1"], - flameburst: ["1L1"], - flamecharge: ["1L1"], - flamethrower: ["1L1"], - flareblitz: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - focuspunch: ["1L1"], - frustration: ["1L1"], - furycutter: ["1L1"], - furyswipes: ["1L1"], - growl: ["1L1"], - headbutt: ["1L1"], - heatwave: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - honeclaws: ["1L1"], - howl: ["1L1"], - incinerate: ["1L1"], - inferno: ["1L1"], - irontail: ["1L1"], - leer: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - metalclaw: ["1L1"], - mimic: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - outrage: ["1L1"], - overheat: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - quickattack: ["1L1"], - rage: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roar: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - scaryface: ["1L1"], - scratch: ["1L1"], - secretpower: ["1L1"], - seismictoss: ["1L1"], - shadowclaw: ["1L1"], - skullbash: ["1L1"], - slash: ["1L1"], - sleeptalk: ["1L1"], - smokescreen: ["1L1"], - snore: ["1L1"], - strength: ["1L1"], - submission: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - swordsdance: ["1L1"], - takedown: ["1L1"], - temperflare: ["1L1"], - terablast: ["1L1"], - thunderpunch: ["1L1"], - toxic: ["1L1"], - weatherball: ["1L1"], - willowisp: ["1L1"], - wingattack: ["1L1"], - workup: ["1L1"], - }, - eventData: [ - {generation: 3, level: 10, gender: "M", moves: ["1L1"], pokeball: "pokeball"}, - {generation: 4, level: 40, gender: "M", nature: "Mild", moves: ["1L1"], pokeball: "cherishball"}, - {generation: 4, level: 40, gender: "M", nature: "Naive", moves: ["1L1"], pokeball: "cherishball"}, - {generation: 4, level: 40, gender: "M", nature: "Naughty", moves: ["1L1"], pokeball: "cherishball"}, - {generation: 5, level: 10, gender: "M", isHidden: true, moves: ["1L1"]}, - {generation: 4, level: 40, gender: "M", nature: "Hardy", moves: ["1L1"], pokeball: "cherishball"}, - {generation: 5, level: 1, shiny: 1, ivs: {spe: 31}, moves: ["1L1"], pokeball: "pokeball"}, - {generation: 6, level: 5, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 6, level: 5, isHidden: true, moves: ["1L1"], pokeball: "cherishball"}, - ], - encounters: [ - {generation: 1, level: 5}, - ], - }, - charmeleon: { - learnset: { - acrobatics: ["1L1"], - aerialace: ["1L1"], - attract: ["1L1"], - beatup: ["1L1"], - bide: ["1L1"], - bodyslam: ["1L1"], - breakingswipe: ["1L1"], - brickbreak: ["1L1"], - captivate: ["1L1"], - confide: ["1L1"], - counter: ["1L1"], - crunch: ["1L1"], - curse: ["1L1"], - cut: ["1L1"], - defensecurl: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dragonbreath: ["1L1"], - dragonclaw: ["1L1"], - dragondance: ["1L1"], - dragonpulse: ["1L1"], - dragonrage: ["1L1"], - dragontail: ["1L1"], - dynamicpunch: ["1L1"], - echoedvoice: ["1L1"], - ember: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - falseswipe: ["1L1"], - fireblast: ["1L1"], - firefang: ["1L1"], - firepledge: ["1L1"], - firepunch: ["1L1"], - firespin: ["1L1"], - flameburst: ["1L1"], - flamecharge: ["1L1"], - flamethrower: ["1L1"], - flareblitz: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - focuspunch: ["1L1"], - frustration: ["1L1"], - furycutter: ["1L1"], - furyswipes: ["1L1"], - growl: ["1L1"], - headbutt: ["1L1"], - heatwave: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - honeclaws: ["1L1"], - incinerate: ["1L1"], - inferno: ["1L1"], - irontail: ["1L1"], - leer: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - metalclaw: ["1L1"], - mimic: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - outrage: ["1L1"], - overheat: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - rage: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roar: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - scaryface: ["1L1"], - scratch: ["1L1"], - secretpower: ["1L1"], - seismictoss: ["1L1"], - shadowclaw: ["1L1"], - skullbash: ["1L1"], - slash: ["1L1"], - sleeptalk: ["1L1"], - smokescreen: ["1L1"], - snore: ["1L1"], - strength: ["1L1"], - submission: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - swordsdance: ["1L1"], - takedown: ["1L1"], - temperflare: ["1L1"], - terablast: ["1L1"], - thunderpunch: ["1L1"], - toxic: ["1L1"], - weatherball: ["1L1"], - willowisp: ["1L1"], - workup: ["1L1"], - }, - }, - charizard: { - learnset: { - acrobatics: ["1L1"], - aerialace: ["1L1"], - aircutter: ["1L1"], - airslash: ["1L1"], - attract: ["1L1"], - beatup: ["1L1"], - bellydrum: ["1L1"], - bide: ["1L1"], - blastburn: ["1L1"], - blazekick: ["1L1"], - bodyslam: ["1L1"], - breakingswipe: ["1L1"], - brickbreak: ["1L1"], - brutalswing: ["1L1"], - bulldoze: ["1L1"], - captivate: ["1L1"], - confide: ["1L1"], - counter: ["1L1"], - crunch: ["1L1"], - curse: ["1L1"], - cut: ["1L1"], - defensecurl: ["1L1"], - defog: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dragonbreath: ["1L1"], - dragoncheer: ["1L1"], - dragonclaw: ["1L1"], - dragondance: ["1L1"], - dragonpulse: ["1L1"], - dragonrage: ["1L1"], - dragontail: ["1L1"], - dualwingbeat: ["1L1"], - dynamicpunch: ["1L1"], - earthquake: ["1L1"], - echoedvoice: ["1L1"], - ember: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - falseswipe: ["1L1"], - fireblast: ["1L1"], - firefang: ["1L1"], - firepledge: ["1L1"], - firepunch: ["1L1"], - firespin: ["1L1"], - fissure: ["1L1"], - flameburst: ["1L1"], - flamecharge: ["1L1"], - flamethrower: ["1L1"], - flareblitz: ["1L1"], - fling: ["1L1"], - fly: ["1L1"], - focusblast: ["1L1"], - focuspunch: ["1L1"], - frustration: ["1L1"], - furycutter: ["1L1"], - furyswipes: ["1L1"], - gigaimpact: ["1L1"], - growl: ["1L1"], - headbutt: ["1L1"], - heatcrash: ["1L1"], - heatwave: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - holdhands: ["1L1"], - honeclaws: ["1L1"], - hurricane: ["1L1"], - hyperbeam: ["1L1"], - incinerate: ["1L1"], - inferno: ["1L1"], - irontail: ["1L1"], - leer: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - metalclaw: ["1L1"], - mimic: ["1L1"], - mudslap: ["1L1"], - mysticalfire: ["1L1"], - naturalgift: ["1L1"], - ominouswind: ["1L1"], - outrage: ["1L1"], - overheat: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - rage: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roar: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - roost: ["1L1"], - round: ["1L1"], - sandstorm: ["1L1"], - scaleshot: ["1L1"], - scaryface: ["1L1"], - scorchingsands: ["1L1"], - scratch: ["1L1"], - secretpower: ["1L1"], - seismictoss: ["1L1"], - shadowclaw: ["1L1"], - skullbash: ["1L1"], - skydrop: ["1L1"], - slash: ["1L1"], - sleeptalk: ["1L1"], - smokescreen: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - steelwing: ["1L1"], - strength: ["1L1"], - submission: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - swordsdance: ["1L1"], - tailwind: ["1L1"], - takedown: ["1L1"], - temperflare: ["1L1"], - terablast: ["1L1"], - thunderpunch: ["1L1"], - toxic: ["1L1"], - twister: ["1L1"], - weatherball: ["1L1"], - willowisp: ["1L1"], - wingattack: ["1L1"], - workup: ["1L1"], - }, - eventData: [ - {generation: 3, level: 70, moves: ["1L1"], pokeball: "pokeball"}, - {generation: 6, level: 36, gender: "M", moves: ["1L1"], pokeball: "cherishball"}, - {generation: 6, level: 36, gender: "M", moves: ["1L1"], pokeball: "cherishball"}, - {generation: 6, level: 36, shiny: true, gender: "M", moves: ["1L1"], pokeball: "cherishball"}, - {generation: 6, level: 100, isHidden: true, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 6, level: 36, gender: "M", nature: "Serious", moves: ["1L1"], pokeball: "cherishball"}, - {generation: 7, level: 40, nature: "Jolly", moves: ["1L1"], pokeball: "cherishball"}, - {generation: 7, level: 40, gender: "M", nature: "Jolly", moves: ["1L1"], pokeball: "cherishball"}, - {generation: 7, level: 40, gender: "M", nature: "Adamant", moves: ["1L1"], pokeball: "pokeball"}, - {generation: 7, level: 50, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 8, level: 50, gender: "M", nature: "Adamant", moves: ["1L1"], pokeball: "pokeball"}, - {generation: 9, level: 50, nature: "Adamant", ivs: {hp: 20, atk: 31, def: 20, spa: 20, spd: 20, spe: 31}, moves: ["1L1"], pokeball: "pokeball"}, - ], - }, - squirtle: { - learnset: { - aquajet: ["1L1"], - aquaring: ["1L1"], - aquatail: ["1L1"], - attract: ["1L1"], - aurasphere: ["1L1"], - bide: ["1L1"], - bite: ["1L1"], - blizzard: ["1L1"], - block: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - brine: ["1L1"], - bubble: ["1L1"], - bubblebeam: ["1L1"], - captivate: ["1L1"], - celebrate: ["1L1"], - chillingwater: ["1L1"], - confide: ["1L1"], - confusion: ["1L1"], - counter: ["1L1"], - curse: ["1L1"], - defensecurl: ["1L1"], - dig: ["1L1"], - dive: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dragonpulse: ["1L1"], - dynamicpunch: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fakeout: ["1L1"], - falseswipe: ["1L1"], - flail: ["1L1"], - fling: ["1L1"], - flipturn: ["1L1"], - focuspunch: ["1L1"], - followme: ["1L1"], - foresight: ["1L1"], - frustration: ["1L1"], - gyroball: ["1L1"], - hail: ["1L1"], - haze: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hydrocannon: ["1L1"], - hydropump: ["1L1"], - icebeam: ["1L1"], - icepunch: ["1L1"], - icespinner: ["1L1"], - icywind: ["1L1"], - irondefense: ["1L1"], - irontail: ["1L1"], - lifedew: ["1L1"], - liquidation: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - mimic: ["1L1"], - mirrorcoat: ["1L1"], - mist: ["1L1"], - muddywater: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - mudsport: ["1L1"], - naturalgift: ["1L1"], - outrage: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - rage: ["1L1"], - raindance: ["1L1"], - rapidspin: ["1L1"], - reflect: ["1L1"], - refresh: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - scald: ["1L1"], - secretpower: ["1L1"], - seismictoss: ["1L1"], - shellsmash: ["1L1"], - skullbash: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - strength: ["1L1"], - submission: ["1L1"], - substitute: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - tackle: ["1L1"], - tailwhip: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - toxic: ["1L1"], - waterfall: ["1L1"], - watergun: ["1L1"], - waterpledge: ["1L1"], - waterpulse: ["1L1"], - waterspout: ["1L1"], - wavecrash: ["1L1"], - weatherball: ["1L1"], - whirlpool: ["1L1"], - withdraw: ["1L1"], - workup: ["1L1"], - yawn: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 3, level: 10, gender: "M", moves: ["1L1"], pokeball: "pokeball"}, - {generation: 5, level: 10, gender: "M", isHidden: true, moves: ["1L1"]}, - {generation: 5, level: 1, shiny: 1, ivs: {hp: 31}, moves: ["1L1"], pokeball: "pokeball"}, - {generation: 6, level: 5, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 6, level: 5, isHidden: true, moves: ["1L1"], pokeball: "cherishball"}, - ], - encounters: [ - {generation: 1, level: 5}, - ], - }, - wartortle: { - learnset: { - aquatail: ["1L1"], - attract: ["1L1"], - aurasphere: ["1L1"], - bide: ["1L1"], - bite: ["1L1"], - blizzard: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - brine: ["1L1"], - bubble: ["1L1"], - bubblebeam: ["1L1"], - captivate: ["1L1"], - chillingwater: ["1L1"], - confide: ["1L1"], - counter: ["1L1"], - curse: ["1L1"], - defensecurl: ["1L1"], - dig: ["1L1"], - dive: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dragonpulse: ["1L1"], - dynamicpunch: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - falseswipe: ["1L1"], - fling: ["1L1"], - flipturn: ["1L1"], - focuspunch: ["1L1"], - frustration: ["1L1"], - gyroball: ["1L1"], - hail: ["1L1"], - haze: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hydropump: ["1L1"], - icebeam: ["1L1"], - icepunch: ["1L1"], - icespinner: ["1L1"], - icywind: ["1L1"], - irondefense: ["1L1"], - irontail: ["1L1"], - liquidation: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - mimic: ["1L1"], - muddywater: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - outrage: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - rage: ["1L1"], - raindance: ["1L1"], - rapidspin: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - scald: ["1L1"], - secretpower: ["1L1"], - seismictoss: ["1L1"], - shellsmash: ["1L1"], - skullbash: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - strength: ["1L1"], - submission: ["1L1"], - substitute: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - tackle: ["1L1"], - tailwhip: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - toxic: ["1L1"], - waterfall: ["1L1"], - watergun: ["1L1"], - waterpledge: ["1L1"], - waterpulse: ["1L1"], - wavecrash: ["1L1"], - weatherball: ["1L1"], - whirlpool: ["1L1"], - withdraw: ["1L1"], - workup: ["1L1"], - zenheadbutt: ["1L1"], - }, - }, - blastoise: { - learnset: { - aquajet: ["1L1"], - aquatail: ["1L1"], - attract: ["1L1"], - aurasphere: ["1L1"], - avalanche: ["1L1"], - bide: ["1L1"], - bite: ["1L1"], - blizzard: ["1L1"], - bodypress: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - brine: ["1L1"], - bubble: ["1L1"], - bubblebeam: ["1L1"], - bulldoze: ["1L1"], - captivate: ["1L1"], - chillingwater: ["1L1"], - confide: ["1L1"], - counter: ["1L1"], - crunch: ["1L1"], - curse: ["1L1"], - darkpulse: ["1L1"], - defensecurl: ["1L1"], - dig: ["1L1"], - dive: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dragonpulse: ["1L1"], - dragontail: ["1L1"], - dynamicpunch: ["1L1"], - earthquake: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fakeout: ["1L1"], - falseswipe: ["1L1"], - fissure: ["1L1"], - flashcannon: ["1L1"], - fling: ["1L1"], - flipturn: ["1L1"], - focusblast: ["1L1"], - focuspunch: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - gyroball: ["1L1"], - hail: ["1L1"], - haze: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hydrocannon: ["1L1"], - hydropump: ["1L1"], - hyperbeam: ["1L1"], - icebeam: ["1L1"], - icepunch: ["1L1"], - icespinner: ["1L1"], - icywind: ["1L1"], - irondefense: ["1L1"], - irontail: ["1L1"], - liquidation: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - mimic: ["1L1"], - muddywater: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - outrage: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - rage: ["1L1"], - raindance: ["1L1"], - rapidspin: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roar: ["1L1"], - rockclimb: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - scald: ["1L1"], - scaryface: ["1L1"], - secretpower: ["1L1"], - seismictoss: ["1L1"], - shellsmash: ["1L1"], - signalbeam: ["1L1"], - skullbash: ["1L1"], - sleeptalk: ["1L1"], - smackdown: ["1L1"], - snore: ["1L1"], - strength: ["1L1"], - submission: ["1L1"], - substitute: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - tackle: ["1L1"], - tailwhip: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - terrainpulse: ["1L1"], - toxic: ["1L1"], - waterfall: ["1L1"], - watergun: ["1L1"], - waterpledge: ["1L1"], - waterpulse: ["1L1"], - wavecrash: ["1L1"], - weatherball: ["1L1"], - whirlpool: ["1L1"], - withdraw: ["1L1"], - workup: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 3, level: 70, moves: ["1L1"], pokeball: "pokeball"}, - {generation: 6, level: 100, isHidden: true, moves: ["1L1"], pokeball: "cherishball"}, - ], - }, - caterpie: { - learnset: { - bugbite: ["1L1"], - electroweb: ["1L1"], - snore: ["1L1"], - stringshot: ["1L1"], - tackle: ["1L1"], - }, - encounters: [ - {generation: 1, level: 3}, - {generation: 2, level: 3}, - {generation: 3, level: 3}, - ], - }, - metapod: { - learnset: { - bugbite: ["1L1"], - electroweb: ["1L1"], - harden: ["1L1"], - irondefense: ["1L1"], - stringshot: ["1L1"], - }, - encounters: [ - {generation: 1, level: 4}, - {generation: 2, level: 4}, - {generation: 3, level: 4}, - {generation: 4, level: 3}, - {generation: 6, level: 4}, - {generation: 7, level: 3}, - ], - }, - butterfree: { - learnset: { - acrobatics: ["1L1"], - aerialace: ["1L1"], - aircutter: ["1L1"], - airslash: ["1L1"], - attract: ["1L1"], - batonpass: ["1L1"], - bide: ["1L1"], - bugbite: ["1L1"], - bugbuzz: ["1L1"], - captivate: ["1L1"], - confide: ["1L1"], - confusion: ["1L1"], - curse: ["1L1"], - defog: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - drainingkiss: ["1L1"], - dreameater: ["1L1"], - dualwingbeat: ["1L1"], - electroweb: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - flash: ["1L1"], - frustration: ["1L1"], - gigadrain: ["1L1"], - gigaimpact: ["1L1"], - gust: ["1L1"], - harden: ["1L1"], - headbutt: ["1L1"], - hiddenpower: ["1L1"], - hurricane: ["1L1"], - hyperbeam: ["1L1"], - infestation: ["1L1"], - irondefense: ["1L1"], - megadrain: ["1L1"], - mimic: ["1L1"], - morningsun: ["1L1"], - naturalgift: ["1L1"], - nightmare: ["1L1"], - ominouswind: ["1L1"], - poisonpowder: ["1L1"], - pollenpuff: ["1L1"], - protect: ["1L1"], - psybeam: ["1L1"], - psychic: ["1L1"], - psychup: ["1L1"], - psywave: ["1L1"], - quiverdance: ["1L1"], - rage: ["1L1"], - ragepowder: ["1L1"], - raindance: ["1L1"], - razorwind: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roost: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - secretpower: ["1L1"], - shadowball: ["1L1"], - signalbeam: ["1L1"], - silverwind: ["1L1"], - skillswap: ["1L1"], - sleeppowder: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - stringshot: ["1L1"], - strugglebug: ["1L1"], - stunspore: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - supersonic: ["1L1"], - swagger: ["1L1"], - sweetscent: ["1L1"], - swift: ["1L1"], - tackle: ["1L1"], - tailwind: ["1L1"], - takedown: ["1L1"], - teleport: ["1L1"], - thief: ["1L1"], - toxic: ["1L1"], - twister: ["1L1"], - uturn: ["1L1"], - venoshock: ["1L1"], - whirlwind: ["1L1"], - }, - eventData: [ - {generation: 3, level: 30, moves: ["1L1"]}, - ], - encounters: [ - {generation: 2, level: 7}, - {generation: 4, level: 6}, - {generation: 7, level: 9}, - ], - }, - weedle: { - learnset: { - bugbite: ["1L1"], - electroweb: ["1L1"], - poisonsting: ["1L1"], - stringshot: ["1L1"], - }, - encounters: [ - {generation: 1, level: 3}, - {generation: 2, level: 3}, - {generation: 3, level: 3}, - ], - }, - kakuna: { - learnset: { - bugbite: ["1L1"], - electroweb: ["1L1"], - harden: ["1L1"], - irondefense: ["1L1"], - stringshot: ["1L1"], - }, - encounters: [ - {generation: 1, level: 4}, - {generation: 2, level: 4}, - {generation: 3, level: 4}, - {generation: 4, level: 3}, - {generation: 6, level: 4}, - {generation: 7, level: 3}, - ], - }, - beedrill: { - learnset: { - acrobatics: ["1L1"], - aerialace: ["1L1"], - agility: ["1L1"], - aircutter: ["1L1"], - assurance: ["1L1"], - attract: ["1L1"], - batonpass: ["1L1"], - bide: ["1L1"], - brickbreak: ["1L1"], - brutalswing: ["1L1"], - bugbite: ["1L1"], - captivate: ["1L1"], - confide: ["1L1"], - curse: ["1L1"], - cut: ["1L1"], - defog: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - drillrun: ["1L1"], - electroweb: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - falseswipe: ["1L1"], - fellstinger: ["1L1"], - flash: ["1L1"], - focusenergy: ["1L1"], - frustration: ["1L1"], - furyattack: ["1L1"], - furycutter: ["1L1"], - gigadrain: ["1L1"], - gigaimpact: ["1L1"], - headbutt: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - infestation: ["1L1"], - knockoff: ["1L1"], - laserfocus: ["1L1"], - megadrain: ["1L1"], - mimic: ["1L1"], - naturalgift: ["1L1"], - ominouswind: ["1L1"], - outrage: ["1L1"], - payback: ["1L1"], - peck: ["1L1"], - pinmissile: ["1L1"], - poisonjab: ["1L1"], - protect: ["1L1"], - pursuit: ["1L1"], - rage: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rocksmash: ["1L1"], - roost: ["1L1"], - round: ["1L1"], - secretpower: ["1L1"], - silverwind: ["1L1"], - skullbash: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - stringshot: ["1L1"], - strugglebug: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - sweetscent: ["1L1"], - swift: ["1L1"], - swordsdance: ["1L1"], - tailwind: ["1L1"], - takedown: ["1L1"], - thief: ["1L1"], - throatchop: ["1L1"], - toxic: ["1L1"], - toxicspikes: ["1L1"], - twineedle: ["1L1"], - uturn: ["1L1"], - venoshock: ["1L1"], - xscissor: ["1L1"], - }, - eventData: [ - {generation: 3, level: 30, moves: ["1L1"]}, - ], - encounters: [ - {generation: 2, level: 7}, - {generation: 4, level: 6}, - ], - }, - pidgey: { - learnset: { - aerialace: ["1L1"], - agility: ["1L1"], - aircutter: ["1L1"], - airslash: ["1L1"], - attract: ["1L1"], - bide: ["1L1"], - bravebird: ["1L1"], - captivate: ["1L1"], - confide: ["1L1"], - curse: ["1L1"], - defog: ["1L1"], - detect: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - featherdance: ["1L1"], - feintattack: ["1L1"], - fly: ["1L1"], - foresight: ["1L1"], - frustration: ["1L1"], - gust: ["1L1"], - headbutt: ["1L1"], - heatwave: ["1L1"], - hiddenpower: ["1L1"], - hurricane: ["1L1"], - mimic: ["1L1"], - mirrormove: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - ominouswind: ["1L1"], - pluck: ["1L1"], - protect: ["1L1"], - pursuit: ["1L1"], - quickattack: ["1L1"], - rage: ["1L1"], - raindance: ["1L1"], - razorwind: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roost: ["1L1"], - round: ["1L1"], - sandattack: ["1L1"], - secretpower: ["1L1"], - skyattack: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - steelwing: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - tackle: ["1L1"], - tailwind: ["1L1"], - takedown: ["1L1"], - thief: ["1L1"], - toxic: ["1L1"], - twister: ["1L1"], - uproar: ["1L1"], - uturn: ["1L1"], - whirlwind: ["1L1"], - wingattack: ["1L1"], - workup: ["1L1"], - }, - encounters: [ - {generation: 1, level: 2}, - {generation: 2, level: 2}, - {generation: 3, level: 2}, - ], - }, - pidgeotto: { - learnset: { - aerialace: ["1L1"], - agility: ["1L1"], - aircutter: ["1L1"], - airslash: ["1L1"], - attract: ["1L1"], - bide: ["1L1"], - captivate: ["1L1"], - confide: ["1L1"], - curse: ["1L1"], - defog: ["1L1"], - detect: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - featherdance: ["1L1"], - fly: ["1L1"], - frustration: ["1L1"], - gust: ["1L1"], - headbutt: ["1L1"], - heatwave: ["1L1"], - hiddenpower: ["1L1"], - hurricane: ["1L1"], - mimic: ["1L1"], - mirrormove: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - ominouswind: ["1L1"], - pluck: ["1L1"], - protect: ["1L1"], - quickattack: ["1L1"], - rage: ["1L1"], - raindance: ["1L1"], - razorwind: ["1L1"], - reflect: ["1L1"], - refresh: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roost: ["1L1"], - round: ["1L1"], - sandattack: ["1L1"], - secretpower: ["1L1"], - skyattack: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - steelwing: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - tackle: ["1L1"], - tailwind: ["1L1"], - takedown: ["1L1"], - thief: ["1L1"], - toxic: ["1L1"], - twister: ["1L1"], - uproar: ["1L1"], - uturn: ["1L1"], - whirlwind: ["1L1"], - wingattack: ["1L1"], - workup: ["1L1"], - }, - eventData: [ - {generation: 3, level: 30, abilities: ["1L1"], moves: ["1L1"]}, - ], - encounters: [ - {generation: 1, level: 9}, - {generation: 2, level: 7}, - {generation: 3, level: 7}, - {generation: 4, level: 7}, - ], - }, - pidgeot: { - learnset: { - aerialace: ["1L1"], - agility: ["1L1"], - aircutter: ["1L1"], - airslash: ["1L1"], - attract: ["1L1"], - bide: ["1L1"], - captivate: ["1L1"], - confide: ["1L1"], - curse: ["1L1"], - defog: ["1L1"], - detect: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - featherdance: ["1L1"], - fly: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - gust: ["1L1"], - headbutt: ["1L1"], - heatwave: ["1L1"], - hiddenpower: ["1L1"], - hurricane: ["1L1"], - hyperbeam: ["1L1"], - laserfocus: ["1L1"], - mimic: ["1L1"], - mirrormove: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - ominouswind: ["1L1"], - pluck: ["1L1"], - protect: ["1L1"], - quickattack: ["1L1"], - rage: ["1L1"], - raindance: ["1L1"], - razorwind: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roost: ["1L1"], - round: ["1L1"], - sandattack: ["1L1"], - secretpower: ["1L1"], - skyattack: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - steelwing: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - tackle: ["1L1"], - tailwind: ["1L1"], - takedown: ["1L1"], - thief: ["1L1"], - toxic: ["1L1"], - twister: ["1L1"], - uproar: ["1L1"], - uturn: ["1L1"], - whirlwind: ["1L1"], - wingattack: ["1L1"], - workup: ["1L1"], - }, - eventData: [ - {generation: 5, level: 61, gender: "M", nature: "Naughty", ivs: {hp: 30, atk: 30, def: 30, spa: 30, spd: 30, spe: 30}, abilities: ["1L1"], moves: ["1L1"], pokeball: "cherishball"}, - ], - encounters: [ - {generation: 7, level: 29}, - ], - }, - rattata: { - learnset: { - assurance: ["1L1"], - attract: ["1L1"], - bide: ["1L1"], - bite: ["1L1"], - blizzard: ["1L1"], - bodyslam: ["1L1"], - bubblebeam: ["1L1"], - captivate: ["1L1"], - chargebeam: ["1L1"], - confide: ["1L1"], - counter: ["1L1"], - covet: ["1L1"], - crunch: ["1L1"], - curse: ["1L1"], - cut: ["1L1"], - defensecurl: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - finalgambit: ["1L1"], - flamewheel: ["1L1"], - focusenergy: ["1L1"], - frustration: ["1L1"], - furyswipes: ["1L1"], - grassknot: ["1L1"], - headbutt: ["1L1"], - hiddenpower: ["1L1"], - hyperfang: ["1L1"], - icebeam: ["1L1"], - icywind: ["1L1"], - irontail: ["1L1"], - lastresort: ["1L1"], - mefirst: ["1L1"], - mimic: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - pluck: ["1L1"], - protect: ["1L1"], - pursuit: ["1L1"], - quickattack: ["1L1"], - rage: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - revenge: ["1L1"], - reversal: ["1L1"], - rocksmash: ["1L1"], - round: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - shadowball: ["1L1"], - shockwave: ["1L1"], - skullbash: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - sunnyday: ["1L1"], - superfang: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - tackle: ["1L1"], - tailwhip: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - thief: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - uproar: ["1L1"], - uturn: ["1L1"], - watergun: ["1L1"], - wildcharge: ["1L1"], - workup: ["1L1"], - zenheadbutt: ["1L1"], - }, - encounters: [ - {generation: 1, level: 2}, - {generation: 2, level: 2}, - {generation: 3, level: 2}, - ], - }, - rattataalola: { - learnset: { - assurance: ["1L1"], - attract: ["1L1"], - bite: ["1L1"], - blizzard: ["1L1"], - confide: ["1L1"], - counter: ["1L1"], - covet: ["1L1"], - crunch: ["1L1"], - darkpulse: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - embargo: ["1L1"], - endeavor: ["1L1"], - facade: ["1L1"], - finalgambit: ["1L1"], - focusenergy: ["1L1"], - frustration: ["1L1"], - furyswipes: ["1L1"], - grassknot: ["1L1"], - headbutt: ["1L1"], - hiddenpower: ["1L1"], - hyperfang: ["1L1"], - icebeam: ["1L1"], - icywind: ["1L1"], - irontail: ["1L1"], - lastresort: ["1L1"], - mefirst: ["1L1"], - protect: ["1L1"], - pursuit: ["1L1"], - quash: ["1L1"], - quickattack: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - revenge: ["1L1"], - reversal: ["1L1"], - round: ["1L1"], - shadowball: ["1L1"], - shadowclaw: ["1L1"], - shockwave: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - snarl: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - stockpile: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - sunnyday: ["1L1"], - superfang: ["1L1"], - swagger: ["1L1"], - swallow: ["1L1"], - switcheroo: ["1L1"], - tackle: ["1L1"], - tailwhip: ["1L1"], - taunt: ["1L1"], - thief: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - uproar: ["1L1"], - uturn: ["1L1"], - zenheadbutt: ["1L1"], - }, - }, - raticate: { - learnset: { - assurance: ["1L1"], - attract: ["1L1"], - bide: ["1L1"], - bite: ["1L1"], - blizzard: ["1L1"], - bodyslam: ["1L1"], - bubblebeam: ["1L1"], - captivate: ["1L1"], - chargebeam: ["1L1"], - confide: ["1L1"], - counter: ["1L1"], - covet: ["1L1"], - crunch: ["1L1"], - curse: ["1L1"], - cut: ["1L1"], - defensecurl: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - focusenergy: ["1L1"], - frustration: ["1L1"], - furyswipes: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - headbutt: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - hyperfang: ["1L1"], - icebeam: ["1L1"], - icywind: ["1L1"], - irontail: ["1L1"], - lastresort: ["1L1"], - mimic: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - pluck: ["1L1"], - protect: ["1L1"], - pursuit: ["1L1"], - quickattack: ["1L1"], - rage: ["1L1"], - raindance: ["1L1"], - refresh: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - roar: ["1L1"], - rocksmash: ["1L1"], - round: ["1L1"], - scaryface: ["1L1"], - secretpower: ["1L1"], - shadowball: ["1L1"], - shockwave: ["1L1"], - skullbash: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - stompingtantrum: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - sunnyday: ["1L1"], - superfang: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - swordsdance: ["1L1"], - tackle: ["1L1"], - tailwhip: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - thief: ["1L1"], - throatchop: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - uproar: ["1L1"], - uturn: ["1L1"], - watergun: ["1L1"], - wildcharge: ["1L1"], - workup: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 3, level: 34, moves: ["1L1"]}, - ], - encounters: [ - {generation: 1, level: 15}, - {generation: 2, level: 6}, - {generation: 4, level: 13}, - ], - }, - raticatealola: { - learnset: { - assurance: ["1L1"], - attract: ["1L1"], - bite: ["1L1"], - blizzard: ["1L1"], - bulkup: ["1L1"], - confide: ["1L1"], - counter: ["1L1"], - covet: ["1L1"], - crunch: ["1L1"], - darkpulse: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - embargo: ["1L1"], - endeavor: ["1L1"], - facade: ["1L1"], - focusenergy: ["1L1"], - frustration: ["1L1"], - furyswipes: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - headbutt: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - hyperfang: ["1L1"], - icebeam: ["1L1"], - icywind: ["1L1"], - irontail: ["1L1"], - knockoff: ["1L1"], - lastresort: ["1L1"], - protect: ["1L1"], - pursuit: ["1L1"], - quash: ["1L1"], - quickattack: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roar: ["1L1"], - round: ["1L1"], - scaryface: ["1L1"], - shadowball: ["1L1"], - shadowclaw: ["1L1"], - shockwave: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - sludgewave: ["1L1"], - snarl: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - stompingtantrum: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - sunnyday: ["1L1"], - superfang: ["1L1"], - swagger: ["1L1"], - swordsdance: ["1L1"], - tackle: ["1L1"], - tailwhip: ["1L1"], - taunt: ["1L1"], - thief: ["1L1"], - throatchop: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - uproar: ["1L1"], - uturn: ["1L1"], - venoshock: ["1L1"], - zenheadbutt: ["1L1"], - }, - encounters: [ - {generation: 7, level: 17}, - ], - }, - raticatealolatotem: { - learnset: { - assurance: ["1L1"], - attract: ["1L1"], - bite: ["1L1"], - blizzard: ["1L1"], - bulkup: ["1L1"], - confide: ["1L1"], - covet: ["1L1"], - crunch: ["1L1"], - darkpulse: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - embargo: ["1L1"], - endeavor: ["1L1"], - facade: ["1L1"], - focusenergy: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - hyperfang: ["1L1"], - icebeam: ["1L1"], - icywind: ["1L1"], - irontail: ["1L1"], - knockoff: ["1L1"], - lastresort: ["1L1"], - protect: ["1L1"], - pursuit: ["1L1"], - quash: ["1L1"], - quickattack: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roar: ["1L1"], - round: ["1L1"], - scaryface: ["1L1"], - shadowball: ["1L1"], - shadowclaw: ["1L1"], - shockwave: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - sludgewave: ["1L1"], - snarl: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - stompingtantrum: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - sunnyday: ["1L1"], - superfang: ["1L1"], - swagger: ["1L1"], - swordsdance: ["1L1"], - tackle: ["1L1"], - tailwhip: ["1L1"], - taunt: ["1L1"], - thief: ["1L1"], - throatchop: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - uproar: ["1L1"], - uturn: ["1L1"], - venoshock: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 7, level: 20, perfectIVs: 3, moves: ["1L1"], pokeball: "pokeball"}, - ], - eventOnly: false, - }, - spearow: { - learnset: { - aerialace: ["1L1"], - agility: ["1L1"], - aircutter: ["1L1"], - assurance: ["1L1"], - astonish: ["1L1"], - attract: ["1L1"], - batonpass: ["1L1"], - bide: ["1L1"], - captivate: ["1L1"], - confide: ["1L1"], - curse: ["1L1"], - defog: ["1L1"], - detect: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - drillpeck: ["1L1"], - drillrun: ["1L1"], - echoedvoice: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - falseswipe: ["1L1"], - featherdance: ["1L1"], - feintattack: ["1L1"], - fly: ["1L1"], - focusenergy: ["1L1"], - frustration: ["1L1"], - furyattack: ["1L1"], - growl: ["1L1"], - headbutt: ["1L1"], - heatwave: ["1L1"], - hiddenpower: ["1L1"], - leer: ["1L1"], - mimic: ["1L1"], - mirrormove: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - ominouswind: ["1L1"], - peck: ["1L1"], - pluck: ["1L1"], - protect: ["1L1"], - pursuit: ["1L1"], - quickattack: ["1L1"], - rage: ["1L1"], - raindance: ["1L1"], - razorwind: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roost: ["1L1"], - round: ["1L1"], - scaryface: ["1L1"], - secretpower: ["1L1"], - skyattack: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - steelwing: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - tailwind: ["1L1"], - takedown: ["1L1"], - thief: ["1L1"], - toxic: ["1L1"], - triattack: ["1L1"], - twister: ["1L1"], - uproar: ["1L1"], - uturn: ["1L1"], - whirlwind: ["1L1"], - workup: ["1L1"], - }, - eventData: [ - {generation: 3, level: 22, moves: ["1L1"]}, - ], - encounters: [ - {generation: 1, level: 3}, - {generation: 2, level: 2}, - {generation: 3, level: 3}, - ], - }, - fearow: { - learnset: { - aerialace: ["1L1"], - agility: ["1L1"], - aircutter: ["1L1"], - assurance: ["1L1"], - attract: ["1L1"], - bide: ["1L1"], - captivate: ["1L1"], - confide: ["1L1"], - curse: ["1L1"], - defog: ["1L1"], - detect: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - drillpeck: ["1L1"], - drillrun: ["1L1"], - echoedvoice: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - falseswipe: ["1L1"], - fly: ["1L1"], - focusenergy: ["1L1"], - frustration: ["1L1"], - furyattack: ["1L1"], - gigaimpact: ["1L1"], - growl: ["1L1"], - headbutt: ["1L1"], - heatwave: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - laserfocus: ["1L1"], - leer: ["1L1"], - mimic: ["1L1"], - mirrormove: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - ominouswind: ["1L1"], - peck: ["1L1"], - pluck: ["1L1"], - protect: ["1L1"], - pursuit: ["1L1"], - quickattack: ["1L1"], - rage: ["1L1"], - raindance: ["1L1"], - razorwind: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roost: ["1L1"], - round: ["1L1"], - secretpower: ["1L1"], - skyattack: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - steelwing: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - tailwind: ["1L1"], - takedown: ["1L1"], - thief: ["1L1"], - throatchop: ["1L1"], - toxic: ["1L1"], - triattack: ["1L1"], - twister: ["1L1"], - uproar: ["1L1"], - uturn: ["1L1"], - whirlwind: ["1L1"], - workup: ["1L1"], - }, - encounters: [ - {generation: 1, level: 19}, - {generation: 2, level: 7}, - {generation: 4, level: 7}, - ], - }, - ekans: { - learnset: { - acid: ["1L1"], - acidspray: ["1L1"], - aquatail: ["1L1"], - attract: ["1L1"], - beatup: ["1L1"], - belch: ["1L1"], - bide: ["1L1"], - bind: ["1L1"], - bite: ["1L1"], - bodyslam: ["1L1"], - brutalswing: ["1L1"], - bulldoze: ["1L1"], - captivate: ["1L1"], - coil: ["1L1"], - confide: ["1L1"], - crunch: ["1L1"], - curse: ["1L1"], - darkpulse: ["1L1"], - dig: ["1L1"], - disable: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - earthquake: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - firefang: ["1L1"], - fissure: ["1L1"], - frustration: ["1L1"], - gastroacid: ["1L1"], - gigadrain: ["1L1"], - glare: ["1L1"], - gunkshot: ["1L1"], - haze: ["1L1"], - headbutt: ["1L1"], - hiddenpower: ["1L1"], - infestation: ["1L1"], - irontail: ["1L1"], - knockoff: ["1L1"], - lashout: ["1L1"], - leechlife: ["1L1"], - leer: ["1L1"], - megadrain: ["1L1"], - mimic: ["1L1"], - mudbomb: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - payback: ["1L1"], - poisonfang: ["1L1"], - poisonjab: ["1L1"], - poisonsting: ["1L1"], - poisontail: ["1L1"], - protect: ["1L1"], - psychicfangs: ["1L1"], - pursuit: ["1L1"], - rage: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rockslide: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - scaleshot: ["1L1"], - scaryface: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - seedbomb: ["1L1"], - skittersmack: ["1L1"], - skullbash: ["1L1"], - slam: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - sludgewave: ["1L1"], - snarl: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - spite: ["1L1"], - spitup: ["1L1"], - stockpile: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swallow: ["1L1"], - switcheroo: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - toxicspikes: ["1L1"], - trailblaze: ["1L1"], - venoshock: ["1L1"], - wrap: ["1L1"], - }, - eventData: [ - {generation: 3, level: 14, gender: "F", nature: "Docile", ivs: {hp: 26, atk: 28, def: 6, spa: 14, spd: 30, spe: 11}, abilities: ["1L1"], moves: ["1L1"], pokeball: "pokeball"}, - {generation: 3, level: 10, gender: "M", moves: ["1L1"], pokeball: "pokeball"}, - ], - encounters: [ - {generation: 1, level: 6}, - {generation: 2, level: 4}, - ], - }, - arbok: { - learnset: { - acid: ["1L1"], - acidspray: ["1L1"], - aquatail: ["1L1"], - attract: ["1L1"], - belch: ["1L1"], - bide: ["1L1"], - bind: ["1L1"], - bite: ["1L1"], - bodyslam: ["1L1"], - breakingswipe: ["1L1"], - brutalswing: ["1L1"], - bulldoze: ["1L1"], - captivate: ["1L1"], - coil: ["1L1"], - confide: ["1L1"], - crunch: ["1L1"], - curse: ["1L1"], - darkpulse: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dragontail: ["1L1"], - earthquake: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - firefang: ["1L1"], - fissure: ["1L1"], - frustration: ["1L1"], - gastroacid: ["1L1"], - gigadrain: ["1L1"], - gigaimpact: ["1L1"], - glare: ["1L1"], - gunkshot: ["1L1"], - haze: ["1L1"], - headbutt: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - icefang: ["1L1"], - infestation: ["1L1"], - irontail: ["1L1"], - knockoff: ["1L1"], - lashout: ["1L1"], - leechlife: ["1L1"], - leer: ["1L1"], - megadrain: ["1L1"], - mimic: ["1L1"], - mudbomb: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - painsplit: ["1L1"], - payback: ["1L1"], - poisonjab: ["1L1"], - poisonsting: ["1L1"], - poisontail: ["1L1"], - protect: ["1L1"], - psychicfangs: ["1L1"], - rage: ["1L1"], - raindance: ["1L1"], - refresh: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rockslide: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - scaleshot: ["1L1"], - scaryface: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - seedbomb: ["1L1"], - skittersmack: ["1L1"], - skullbash: ["1L1"], - slam: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - sludgewave: ["1L1"], - snarl: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - spite: ["1L1"], - spitup: ["1L1"], - stockpile: ["1L1"], - stompingtantrum: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swallow: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - throatchop: ["1L1"], - thunderfang: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - toxicspikes: ["1L1"], - trailblaze: ["1L1"], - venoshock: ["1L1"], - wrap: ["1L1"], - }, - eventData: [ - {generation: 3, level: 33, moves: ["1L1"]}, - ], - encounters: [ - {generation: 2, level: 10}, - {generation: 4, level: 10}, - ], - }, - pichu: { - learnset: { - attract: ["1L1"], - bestow: ["1L1"], - bide: ["1L1"], - bodyslam: ["1L1"], - captivate: ["1L1"], - charge: ["1L1"], - chargebeam: ["1L1"], - charm: ["1L1"], - confide: ["1L1"], - counter: ["1L1"], - covet: ["1L1"], - curse: ["1L1"], - defensecurl: ["1L1"], - detect: ["1L1"], - disarmingvoice: ["1L1"], - doubleedge: ["1L1"], - doubleslap: ["1L1"], - doubleteam: ["1L1"], - echoedvoice: ["1L1"], - electricterrain: ["1L1"], - electroball: ["1L1"], - electroweb: ["1L1"], - encore: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fakeout: ["1L1"], - flail: ["1L1"], - flash: ["1L1"], - fling: ["1L1"], - followme: ["1L1"], - frustration: ["1L1"], - grassknot: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - irontail: ["1L1"], - lightscreen: ["1L1"], - luckychant: ["1L1"], - magnetrise: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - mimic: ["1L1"], - mudslap: ["1L1"], - nastyplot: ["1L1"], - naturalgift: ["1L1"], - nuzzle: ["1L1"], - playnice: ["1L1"], - playrough: ["1L1"], - present: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - reversal: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - secretpower: ["1L1"], - seismictoss: ["1L1"], - shockwave: ["1L1"], - signalbeam: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - substitute: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - sweetkiss: ["1L1"], - swift: ["1L1"], - tailwhip: ["1L1"], - takedown: ["1L1"], - teeterdance: ["1L1"], - terablast: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderpunch: ["1L1"], - thundershock: ["1L1"], - thunderwave: ["1L1"], - tickle: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - uproar: ["1L1"], - voltswitch: ["1L1"], - volttackle: ["1L1"], - wildcharge: ["1L1"], - wish: ["1L1"], - zapcannon: ["1L1"], - }, - eventData: [ - {generation: 3, level: 5, shiny: 1, moves: ["1L1"], pokeball: "pokeball", emeraldEventEgg: true}, - {generation: 3, level: 5, shiny: 1, moves: ["1L1"], pokeball: "pokeball"}, - {generation: 3, level: 5, shiny: 1, moves: ["1L1"], pokeball: "pokeball"}, - {generation: 3, level: 5, shiny: 1, moves: ["1L1"], pokeball: "pokeball", emeraldEventEgg: true}, - {generation: 4, level: 1, moves: ["1L1"], pokeball: "pokeball"}, - {generation: 4, level: 30, shiny: true, gender: "M", nature: "Jolly", moves: ["1L1"], pokeball: "cherishball"}, - {generation: 9, level: 30, shiny: true, gender: "M", nature: "Jolly", moves: ["1L1"], pokeball: "cherishball"}, - ], - }, - pichuspikyeared: { - learnset: { - attract: ["1L1"], - captivate: ["1L1"], - chargebeam: ["1L1"], - charm: ["1L1"], - doubleteam: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - flash: ["1L1"], - fling: ["1L1"], - frustration: ["1L1"], - grassknot: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - irontail: ["1L1"], - lightscreen: ["1L1"], - magnetrise: ["1L1"], - mudslap: ["1L1"], - nastyplot: ["1L1"], - naturalgift: ["1L1"], - painsplit: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rollout: ["1L1"], - secretpower: ["1L1"], - shockwave: ["1L1"], - signalbeam: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - substitute: ["1L1"], - swagger: ["1L1"], - sweetkiss: ["1L1"], - swift: ["1L1"], - tailwhip: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thundershock: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - uproar: ["1L1"], - volttackle: ["1L1"], - }, - eventData: [ - {generation: 4, level: 30, gender: "F", nature: "Naughty", moves: ["1L1"], pokeball: "pokeball"}, - ], - eventOnly: false, - }, - pikachu: { - learnset: { - agility: ["1L1"], - alluringvoice: ["1L1"], - attract: ["1L1"], - bestow: ["1L1"], - bide: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - calmmind: ["1L1"], - captivate: ["1L1"], - celebrate: ["1L1"], - charge: ["1L1"], - chargebeam: ["1L1"], - charm: ["1L1"], - confide: ["1L1"], - counter: ["1L1"], - covet: ["1L1"], - curse: ["1L1"], - defensecurl: ["1L1"], - detect: ["1L1"], - dig: ["1L1"], - disarmingvoice: ["1L1"], - discharge: ["1L1"], - doubleedge: ["1L1"], - doublekick: ["1L1"], - doubleteam: ["1L1"], - drainingkiss: ["1L1"], - dynamicpunch: ["1L1"], - echoedvoice: ["1L1"], - eerieimpulse: ["1L1"], - electricterrain: ["1L1"], - electroball: ["1L1"], - electroweb: ["1L1"], - encore: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - extremespeed: ["1L1"], - facade: ["1L1"], - fakeout: ["1L1"], - faketears: ["1L1"], - feint: ["1L1"], - flash: ["1L1"], - fling: ["1L1"], - fly: ["1L1"], - focuspunch: ["1L1"], - frustration: ["1L1"], - grassknot: ["1L1"], - growl: ["1L1"], - happyhour: ["1L1"], - headbutt: ["1L1"], - heartstamp: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - holdhands: ["1L1"], - irontail: ["1L1"], - knockoff: ["1L1"], - laserfocus: ["1L1"], - lastresort: ["1L1"], - lightscreen: ["1L1"], - magnetrise: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - mimic: ["1L1"], - mudslap: ["1L1"], - nastyplot: ["1L1"], - naturalgift: ["1L1"], - nuzzle: ["1L1"], - payday: ["1L1"], - playnice: ["1L1"], - playrough: ["1L1"], - present: ["1L1"], - protect: ["1L1"], - quickattack: ["1L1"], - rage: ["1L1"], - raindance: ["1L1"], - reflect: ["1L1"], - refresh: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - reversal: ["1L1"], - risingvoltage: ["1L1"], - rocksmash: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - secretpower: ["1L1"], - seismictoss: ["1L1"], - shockwave: ["1L1"], - signalbeam: ["1L1"], - sing: ["1L1"], - skullbash: ["1L1"], - slam: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - spark: ["1L1"], - strength: ["1L1"], - submission: ["1L1"], - substitute: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - sweetkiss: ["1L1"], - sweetscent: ["1L1"], - swift: ["1L1"], - tailwhip: ["1L1"], - takedown: ["1L1"], - teeterdance: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderpunch: ["1L1"], - thundershock: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - upperhand: ["1L1"], - uproar: ["1L1"], - voltswitch: ["1L1"], - volttackle: ["1L1"], - wildcharge: ["1L1"], - wish: ["1L1"], - yawn: ["1L1"], - zapcannon: ["1L1"], - }, - eventData: [ - {generation: 3, level: 50, moves: ["1L1"], pokeball: "pokeball"}, - {generation: 3, level: 10, moves: ["1L1"], pokeball: "pokeball"}, - {generation: 3, level: 10, moves: ["1L1"], pokeball: "pokeball"}, - {generation: 3, level: 5, moves: ["1L1"], pokeball: "pokeball"}, - {generation: 3, level: 10, moves: ["1L1"], pokeball: "pokeball"}, - {generation: 3, level: 10, moves: ["1L1"], pokeball: "pokeball"}, - {generation: 3, level: 70, moves: ["1L1"], pokeball: "pokeball"}, - {generation: 3, level: 70, moves: ["1L1"], pokeball: "pokeball"}, - {generation: 3, level: 70, moves: ["1L1"], pokeball: "pokeball"}, - {generation: 4, level: 10, gender: "F", nature: "Hardy", moves: ["1L1"], pokeball: "pokeball"}, - {generation: 3, level: 10, gender: "M", moves: ["1L1"], pokeball: "pokeball"}, - {generation: 4, level: 50, gender: "M", nature: "Hardy", moves: ["1L1"], pokeball: "cherishball"}, - {generation: 4, level: 20, gender: "F", nature: "Bashful", moves: ["1L1"], pokeball: "cherishball"}, - {generation: 4, level: 20, gender: "M", nature: "Jolly", moves: ["1L1"], pokeball: "pokeball"}, - {generation: 4, level: 40, gender: "M", nature: "Modest", moves: ["1L1"], pokeball: "cherishball"}, - {generation: 4, level: 20, gender: "F", nature: "Bashful", moves: ["1L1"], pokeball: "cherishball"}, - {generation: 4, level: 40, gender: "M", nature: "Mild", moves: ["1L1"], pokeball: "cherishball"}, - {generation: 4, level: 20, gender: "F", nature: "Bashful", moves: ["1L1"], pokeball: "cherishball"}, - {generation: 4, level: 30, gender: "M", nature: "Naughty", moves: ["1L1"], pokeball: "cherishball"}, - {generation: 4, level: 50, gender: "M", nature: "Relaxed", moves: ["1L1"], pokeball: "cherishball"}, - {generation: 4, level: 20, gender: "M", nature: "Docile", moves: ["1L1"], pokeball: "cherishball"}, - {generation: 4, level: 50, gender: "M", nature: "Naughty", moves: ["1L1"], pokeball: "cherishball"}, - {generation: 4, level: 20, gender: "M", nature: "Bashful", moves: ["1L1"], pokeball: "cherishball"}, - {generation: 5, level: 30, gender: "F", isHidden: true, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 5, level: 50, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 5, level: 100, shiny: 1, gender: "F", moves: ["1L1"], pokeball: "cherishball"}, - {generation: 5, level: 50, shiny: 1, gender: "F", moves: ["1L1"], pokeball: "cherishball"}, - {generation: 5, level: 50, gender: "F", nature: "Timid", isHidden: true, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 5, level: 10, gender: "M", isHidden: true, moves: ["1L1"]}, - {generation: 5, level: 100, gender: "M", isHidden: true, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 5, level: 50, gender: "M", nature: "Brave", moves: ["1L1"], pokeball: "cherishball"}, - {generation: 6, level: 10, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 6, level: 22, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 6, level: 10, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 6, level: 10, gender: "F", moves: ["1L1"], pokeball: "healball"}, - {generation: 6, level: 36, shiny: true, isHidden: true, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 6, level: 10, gender: "F", moves: ["1L1"], pokeball: "cherishball"}, - {generation: 6, level: 50, gender: "M", nature: "Naughty", moves: ["1L1"], pokeball: "cherishball"}, - {generation: 6, level: 10, shiny: true, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 6, level: 10, perfectIVs: 2, isHidden: true, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 6, level: 99, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 6, level: 10, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 6, level: 10, moves: ["1L1"], pokeball: "healball"}, - {generation: 7, level: 10, nature: "Jolly", moves: ["1L1"], pokeball: "cherishball"}, - {generation: 7, level: 10, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 7, level: 10, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 7, level: 10, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 7, level: 40, shiny: 1, perfectIVs: 3, moves: ["1L1"], pokeball: "pokeball"}, - {generation: 7, level: 5, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 7, level: 10, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 8, level: 5, gender: "M", nature: "Serious", moves: ["1L1"], pokeball: "cherishball"}, - {generation: 8, level: 21, gender: "M", nature: "Brave", moves: ["1L1"], pokeball: "cherishball"}, - {generation: 8, level: 25, isHidden: true, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 9, level: 5, moves: ["1L1"], pokeball: "pokeball"}, - {generation: 9, level: 100, gender: "M", nature: "Quiet", perfectIVs: 6, isHidden: true, moves: ["1L1"], pokeball: "pokeball"}, - {generation: 9, level: 25, gender: "M", ivs: {hp: 25, atk: 25, def: 25, spa: 25, spd: 25, spe: 25}, moves: ["1L1"], pokeball: "cherishball"}, - ], - encounters: [ - {generation: 1, level: 3}, - {generation: 2, level: 4}, - {generation: 3, level: 3}, - ], - }, - pikachucosplay: { - learnset: { - agility: ["1L1"], - attract: ["1L1"], - brickbreak: ["1L1"], - chargebeam: ["1L1"], - confide: ["1L1"], - covet: ["1L1"], - dig: ["1L1"], - discharge: ["1L1"], - doubleteam: ["1L1"], - echoedvoice: ["1L1"], - electroball: ["1L1"], - electroweb: ["1L1"], - facade: ["1L1"], - feint: ["1L1"], - flash: ["1L1"], - fling: ["1L1"], - focuspunch: ["1L1"], - frustration: ["1L1"], - grassknot: ["1L1"], - growl: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - irontail: ["1L1"], - knockoff: ["1L1"], - lightscreen: ["1L1"], - magnetrise: ["1L1"], - nuzzle: ["1L1"], - playnice: ["1L1"], - protect: ["1L1"], - quickattack: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rocksmash: ["1L1"], - round: ["1L1"], - secretpower: ["1L1"], - shockwave: ["1L1"], - signalbeam: ["1L1"], - slam: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - spark: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - swagger: ["1L1"], - tailwhip: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderpunch: ["1L1"], - thundershock: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - voltswitch: ["1L1"], - wildcharge: ["1L1"], - }, - eventData: [ - {generation: 6, level: 20, perfectIVs: 3, moves: ["1L1"], pokeball: "pokeball"}, - ], - eventOnly: false, - }, - pikachurockstar: { - learnset: { - meteormash: ["1L1"], - }, - eventOnly: false, - }, - pikachubelle: { - learnset: { - iciclecrash: ["1L1"], - }, - eventOnly: false, - }, - pikachupopstar: { - learnset: { - drainingkiss: ["1L1"], - }, - eventOnly: false, - }, - pikachuphd: { - learnset: { - electricterrain: ["1L1"], - }, - eventOnly: false, - }, - pikachulibre: { - learnset: { - flyingpress: ["1L1"], - }, - eventOnly: false, - }, - pikachuoriginal: { - learnset: { - agility: ["1L1"], - alluringvoice: ["1L1"], - attract: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - charge: ["1L1"], - chargebeam: ["1L1"], - charm: ["1L1"], - confide: ["1L1"], - covet: ["1L1"], - dig: ["1L1"], - disarmingvoice: ["1L1"], - discharge: ["1L1"], - doubleteam: ["1L1"], - drainingkiss: ["1L1"], - echoedvoice: ["1L1"], - eerieimpulse: ["1L1"], - electricterrain: ["1L1"], - electroball: ["1L1"], - electroweb: ["1L1"], - encore: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fakeout: ["1L1"], - faketears: ["1L1"], - feint: ["1L1"], - flail: ["1L1"], - fling: ["1L1"], - focuspunch: ["1L1"], - frustration: ["1L1"], - grassknot: ["1L1"], - growl: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - irontail: ["1L1"], - knockoff: ["1L1"], - laserfocus: ["1L1"], - lightscreen: ["1L1"], - magnetrise: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - nastyplot: ["1L1"], - nuzzle: ["1L1"], - payday: ["1L1"], - playnice: ["1L1"], - playrough: ["1L1"], - present: ["1L1"], - protect: ["1L1"], - quickattack: ["1L1"], - raindance: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - reversal: ["1L1"], - risingvoltage: ["1L1"], - round: ["1L1"], - shockwave: ["1L1"], - signalbeam: ["1L1"], - slam: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - spark: ["1L1"], - substitute: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - sweetkiss: ["1L1"], - swift: ["1L1"], - tailwhip: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderpunch: ["1L1"], - thundershock: ["1L1"], - thunderwave: ["1L1"], - tickle: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - upperhand: ["1L1"], - uproar: ["1L1"], - voltswitch: ["1L1"], - volttackle: ["1L1"], - wildcharge: ["1L1"], - wish: ["1L1"], - }, - eventData: [ - {generation: 7, level: 1, nature: "Hardy", moves: ["1L1"], pokeball: "pokeball"}, - {generation: 8, level: 25, nature: "Hardy", isHidden: true, moves: ["1L1"], pokeball: "pokeball"}, - ], - eventOnly: false, - }, - pikachuhoenn: { - learnset: { - agility: ["1L1"], - alluringvoice: ["1L1"], - attract: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - charge: ["1L1"], - chargebeam: ["1L1"], - charm: ["1L1"], - confide: ["1L1"], - covet: ["1L1"], - dig: ["1L1"], - disarmingvoice: ["1L1"], - discharge: ["1L1"], - doubleteam: ["1L1"], - drainingkiss: ["1L1"], - echoedvoice: ["1L1"], - eerieimpulse: ["1L1"], - electricterrain: ["1L1"], - electroball: ["1L1"], - electroweb: ["1L1"], - encore: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fakeout: ["1L1"], - faketears: ["1L1"], - feint: ["1L1"], - flail: ["1L1"], - fling: ["1L1"], - focuspunch: ["1L1"], - frustration: ["1L1"], - grassknot: ["1L1"], - growl: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - irontail: ["1L1"], - knockoff: ["1L1"], - laserfocus: ["1L1"], - lightscreen: ["1L1"], - magnetrise: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - nastyplot: ["1L1"], - nuzzle: ["1L1"], - payday: ["1L1"], - playnice: ["1L1"], - playrough: ["1L1"], - present: ["1L1"], - protect: ["1L1"], - quickattack: ["1L1"], - raindance: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - reversal: ["1L1"], - risingvoltage: ["1L1"], - round: ["1L1"], - shockwave: ["1L1"], - signalbeam: ["1L1"], - slam: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - spark: ["1L1"], - substitute: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - sweetkiss: ["1L1"], - swift: ["1L1"], - tailwhip: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderpunch: ["1L1"], - thundershock: ["1L1"], - thunderwave: ["1L1"], - tickle: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - upperhand: ["1L1"], - uproar: ["1L1"], - voltswitch: ["1L1"], - volttackle: ["1L1"], - wildcharge: ["1L1"], - wish: ["1L1"], - }, - eventData: [ - {generation: 7, level: 6, nature: "Hardy", moves: ["1L1"], pokeball: "pokeball"}, - {generation: 8, level: 25, nature: "Hardy", isHidden: true, moves: ["1L1"], pokeball: "pokeball"}, - ], - eventOnly: false, - }, - pikachusinnoh: { - learnset: { - agility: ["1L1"], - alluringvoice: ["1L1"], - attract: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - charge: ["1L1"], - chargebeam: ["1L1"], - charm: ["1L1"], - confide: ["1L1"], - covet: ["1L1"], - dig: ["1L1"], - disarmingvoice: ["1L1"], - discharge: ["1L1"], - doubleteam: ["1L1"], - drainingkiss: ["1L1"], - echoedvoice: ["1L1"], - eerieimpulse: ["1L1"], - electricterrain: ["1L1"], - electroball: ["1L1"], - electroweb: ["1L1"], - encore: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fakeout: ["1L1"], - faketears: ["1L1"], - feint: ["1L1"], - flail: ["1L1"], - fling: ["1L1"], - focuspunch: ["1L1"], - frustration: ["1L1"], - grassknot: ["1L1"], - growl: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - irontail: ["1L1"], - knockoff: ["1L1"], - laserfocus: ["1L1"], - lightscreen: ["1L1"], - magnetrise: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - nastyplot: ["1L1"], - nuzzle: ["1L1"], - payday: ["1L1"], - playnice: ["1L1"], - playrough: ["1L1"], - present: ["1L1"], - protect: ["1L1"], - quickattack: ["1L1"], - raindance: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - reversal: ["1L1"], - risingvoltage: ["1L1"], - round: ["1L1"], - shockwave: ["1L1"], - signalbeam: ["1L1"], - slam: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - spark: ["1L1"], - substitute: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - sweetkiss: ["1L1"], - swift: ["1L1"], - tailwhip: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderpunch: ["1L1"], - thundershock: ["1L1"], - thunderwave: ["1L1"], - tickle: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - upperhand: ["1L1"], - uproar: ["1L1"], - voltswitch: ["1L1"], - volttackle: ["1L1"], - wildcharge: ["1L1"], - wish: ["1L1"], - }, - eventData: [ - {generation: 7, level: 10, nature: "Hardy", moves: ["1L1"], pokeball: "pokeball"}, - {generation: 8, level: 25, nature: "Hardy", isHidden: true, moves: ["1L1"], pokeball: "pokeball"}, - ], - eventOnly: false, - }, - pikachuunova: { - learnset: { - agility: ["1L1"], - alluringvoice: ["1L1"], - attract: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - charge: ["1L1"], - chargebeam: ["1L1"], - charm: ["1L1"], - confide: ["1L1"], - covet: ["1L1"], - dig: ["1L1"], - disarmingvoice: ["1L1"], - discharge: ["1L1"], - doubleteam: ["1L1"], - drainingkiss: ["1L1"], - echoedvoice: ["1L1"], - eerieimpulse: ["1L1"], - electricterrain: ["1L1"], - electroball: ["1L1"], - electroweb: ["1L1"], - encore: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fakeout: ["1L1"], - faketears: ["1L1"], - feint: ["1L1"], - flail: ["1L1"], - fling: ["1L1"], - focuspunch: ["1L1"], - frustration: ["1L1"], - grassknot: ["1L1"], - growl: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - irontail: ["1L1"], - knockoff: ["1L1"], - laserfocus: ["1L1"], - lightscreen: ["1L1"], - magnetrise: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - nastyplot: ["1L1"], - nuzzle: ["1L1"], - payday: ["1L1"], - playnice: ["1L1"], - playrough: ["1L1"], - present: ["1L1"], - protect: ["1L1"], - quickattack: ["1L1"], - raindance: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - reversal: ["1L1"], - risingvoltage: ["1L1"], - round: ["1L1"], - shockwave: ["1L1"], - signalbeam: ["1L1"], - slam: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - spark: ["1L1"], - substitute: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - sweetkiss: ["1L1"], - swift: ["1L1"], - tailwhip: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderpunch: ["1L1"], - thundershock: ["1L1"], - thunderwave: ["1L1"], - tickle: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - upperhand: ["1L1"], - uproar: ["1L1"], - voltswitch: ["1L1"], - volttackle: ["1L1"], - wildcharge: ["1L1"], - wish: ["1L1"], - }, - eventData: [ - {generation: 7, level: 14, nature: "Hardy", moves: ["1L1"], pokeball: "pokeball"}, - {generation: 8, level: 25, nature: "Hardy", isHidden: true, moves: ["1L1"], pokeball: "pokeball"}, - ], - eventOnly: false, - }, - pikachukalos: { - learnset: { - agility: ["1L1"], - alluringvoice: ["1L1"], - attract: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - charge: ["1L1"], - chargebeam: ["1L1"], - charm: ["1L1"], - confide: ["1L1"], - covet: ["1L1"], - dig: ["1L1"], - disarmingvoice: ["1L1"], - discharge: ["1L1"], - doubleteam: ["1L1"], - drainingkiss: ["1L1"], - echoedvoice: ["1L1"], - eerieimpulse: ["1L1"], - electricterrain: ["1L1"], - electroball: ["1L1"], - electroweb: ["1L1"], - encore: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fakeout: ["1L1"], - faketears: ["1L1"], - feint: ["1L1"], - flail: ["1L1"], - fling: ["1L1"], - focuspunch: ["1L1"], - frustration: ["1L1"], - grassknot: ["1L1"], - growl: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - irontail: ["1L1"], - knockoff: ["1L1"], - laserfocus: ["1L1"], - lightscreen: ["1L1"], - magnetrise: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - nastyplot: ["1L1"], - nuzzle: ["1L1"], - payday: ["1L1"], - playnice: ["1L1"], - playrough: ["1L1"], - present: ["1L1"], - protect: ["1L1"], - quickattack: ["1L1"], - raindance: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - reversal: ["1L1"], - risingvoltage: ["1L1"], - round: ["1L1"], - shockwave: ["1L1"], - signalbeam: ["1L1"], - slam: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - spark: ["1L1"], - substitute: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - sweetkiss: ["1L1"], - swift: ["1L1"], - tailwhip: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderpunch: ["1L1"], - thundershock: ["1L1"], - thunderwave: ["1L1"], - tickle: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - upperhand: ["1L1"], - uproar: ["1L1"], - voltswitch: ["1L1"], - volttackle: ["1L1"], - wildcharge: ["1L1"], - wish: ["1L1"], - }, - eventData: [ - {generation: 7, level: 17, nature: "Hardy", moves: ["1L1"], pokeball: "pokeball"}, - {generation: 8, level: 25, nature: "Hardy", isHidden: true, moves: ["1L1"], pokeball: "pokeball"}, - ], - eventOnly: false, - }, - pikachualola: { - learnset: { - agility: ["1L1"], - alluringvoice: ["1L1"], - attract: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - charge: ["1L1"], - chargebeam: ["1L1"], - charm: ["1L1"], - confide: ["1L1"], - covet: ["1L1"], - dig: ["1L1"], - disarmingvoice: ["1L1"], - discharge: ["1L1"], - doubleteam: ["1L1"], - drainingkiss: ["1L1"], - echoedvoice: ["1L1"], - eerieimpulse: ["1L1"], - electricterrain: ["1L1"], - electroball: ["1L1"], - electroweb: ["1L1"], - encore: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fakeout: ["1L1"], - faketears: ["1L1"], - feint: ["1L1"], - flail: ["1L1"], - fling: ["1L1"], - focuspunch: ["1L1"], - frustration: ["1L1"], - grassknot: ["1L1"], - growl: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - irontail: ["1L1"], - knockoff: ["1L1"], - laserfocus: ["1L1"], - lightscreen: ["1L1"], - magnetrise: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - nastyplot: ["1L1"], - nuzzle: ["1L1"], - payday: ["1L1"], - playnice: ["1L1"], - playrough: ["1L1"], - present: ["1L1"], - protect: ["1L1"], - quickattack: ["1L1"], - raindance: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - reversal: ["1L1"], - risingvoltage: ["1L1"], - round: ["1L1"], - shockwave: ["1L1"], - signalbeam: ["1L1"], - slam: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - spark: ["1L1"], - substitute: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - sweetkiss: ["1L1"], - swift: ["1L1"], - tailwhip: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderpunch: ["1L1"], - thundershock: ["1L1"], - thunderwave: ["1L1"], - tickle: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - upperhand: ["1L1"], - uproar: ["1L1"], - voltswitch: ["1L1"], - volttackle: ["1L1"], - wildcharge: ["1L1"], - wish: ["1L1"], - }, - eventData: [ - {generation: 7, level: 20, nature: "Hardy", moves: ["1L1"], pokeball: "pokeball"}, - {generation: 8, level: 25, nature: "Hardy", isHidden: true, moves: ["1L1"], pokeball: "pokeball"}, - ], - eventOnly: false, - }, - pikachupartner: { - learnset: { - agility: ["1L1"], - alluringvoice: ["1L1"], - attract: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - charge: ["1L1"], - chargebeam: ["1L1"], - charm: ["1L1"], - confide: ["1L1"], - covet: ["1L1"], - dig: ["1L1"], - disarmingvoice: ["1L1"], - discharge: ["1L1"], - doubleteam: ["1L1"], - drainingkiss: ["1L1"], - echoedvoice: ["1L1"], - eerieimpulse: ["1L1"], - electricterrain: ["1L1"], - electroball: ["1L1"], - electroweb: ["1L1"], - encore: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fakeout: ["1L1"], - faketears: ["1L1"], - feint: ["1L1"], - flail: ["1L1"], - fling: ["1L1"], - focuspunch: ["1L1"], - frustration: ["1L1"], - grassknot: ["1L1"], - growl: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - irontail: ["1L1"], - knockoff: ["1L1"], - laserfocus: ["1L1"], - lightscreen: ["1L1"], - magnetrise: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - nastyplot: ["1L1"], - nuzzle: ["1L1"], - payday: ["1L1"], - playnice: ["1L1"], - playrough: ["1L1"], - present: ["1L1"], - protect: ["1L1"], - quickattack: ["1L1"], - raindance: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - reversal: ["1L1"], - risingvoltage: ["1L1"], - round: ["1L1"], - shockwave: ["1L1"], - signalbeam: ["1L1"], - slam: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - spark: ["1L1"], - substitute: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - sweetkiss: ["1L1"], - swift: ["1L1"], - tailwhip: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderpunch: ["1L1"], - thundershock: ["1L1"], - thunderwave: ["1L1"], - tickle: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - upperhand: ["1L1"], - uproar: ["1L1"], - voltswitch: ["1L1"], - volttackle: ["1L1"], - wildcharge: ["1L1"], - wish: ["1L1"], - }, - eventData: [ - {generation: 7, level: 21, shiny: 1, nature: "Hardy", moves: ["1L1"], pokeball: "pokeball"}, - {generation: 8, level: 25, nature: "Hardy", isHidden: true, moves: ["1L1"], pokeball: "pokeball"}, - ], - eventOnly: false, - }, - pikachustarter: { - learnset: { - agility: ["1L1"], - brickbreak: ["1L1"], - calmmind: ["1L1"], - dig: ["1L1"], - doublekick: ["1L1"], - doubleteam: ["1L1"], - facade: ["1L1"], - floatyfall: ["1L1"], - growl: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - irontail: ["1L1"], - lightscreen: ["1L1"], - payday: ["1L1"], - pikapapow: ["1L1"], - protect: ["1L1"], - quickattack: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - seismictoss: ["1L1"], - slam: ["1L1"], - splishysplash: ["1L1"], - substitute: ["1L1"], - tailwhip: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderpunch: ["1L1"], - thundershock: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - zippyzap: ["1L1"], - }, - eventData: [ - {generation: 7, level: 5, perfectIVs: 6, moves: ["1L1"], pokeball: "pokeball"}, - ], - eventOnly: false, - }, - pikachuworld: { - learnset: { - agility: ["1L1"], - attract: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - charge: ["1L1"], - chargebeam: ["1L1"], - charm: ["1L1"], - dig: ["1L1"], - disarmingvoice: ["1L1"], - discharge: ["1L1"], - doubleteam: ["1L1"], - drainingkiss: ["1L1"], - eerieimpulse: ["1L1"], - electricterrain: ["1L1"], - electroball: ["1L1"], - electroweb: ["1L1"], - encore: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fakeout: ["1L1"], - faketears: ["1L1"], - feint: ["1L1"], - flail: ["1L1"], - fling: ["1L1"], - grassknot: ["1L1"], - growl: ["1L1"], - helpinghand: ["1L1"], - irontail: ["1L1"], - lightscreen: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - nastyplot: ["1L1"], - nuzzle: ["1L1"], - payday: ["1L1"], - playnice: ["1L1"], - playrough: ["1L1"], - present: ["1L1"], - protect: ["1L1"], - quickattack: ["1L1"], - raindance: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - reversal: ["1L1"], - risingvoltage: ["1L1"], - round: ["1L1"], - slam: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - spark: ["1L1"], - substitute: ["1L1"], - surf: ["1L1"], - sweetkiss: ["1L1"], - swift: ["1L1"], - tailwhip: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderpunch: ["1L1"], - thundershock: ["1L1"], - thunderwave: ["1L1"], - tickle: ["1L1"], - trailblaze: ["1L1"], - uproar: ["1L1"], - voltswitch: ["1L1"], - volttackle: ["1L1"], - wildcharge: ["1L1"], - wish: ["1L1"], - }, - eventData: [ - {generation: 8, level: 25, nature: "Hardy", moves: ["1L1"], pokeball: "pokeball"}, - {generation: 8, level: 80, nature: "Hardy", ivs: {hp: 31, atk: 30, def: 30, spa: 31, spd: 30, spe: 31}, moves: ["1L1"], pokeball: "pokeball"}, - ], - eventOnly: false, - }, - raichu: { - learnset: { - agility: ["1L1"], - alluringvoice: ["1L1"], - attract: ["1L1"], - bide: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - brutalswing: ["1L1"], - calmmind: ["1L1"], - captivate: ["1L1"], - charge: ["1L1"], - chargebeam: ["1L1"], - charm: ["1L1"], - confide: ["1L1"], - counter: ["1L1"], - covet: ["1L1"], - curse: ["1L1"], - defensecurl: ["1L1"], - detect: ["1L1"], - dig: ["1L1"], - disarmingvoice: ["1L1"], - discharge: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - drainingkiss: ["1L1"], - dynamicpunch: ["1L1"], - echoedvoice: ["1L1"], - eerieimpulse: ["1L1"], - electricterrain: ["1L1"], - electroball: ["1L1"], - electroweb: ["1L1"], - encore: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fakeout: ["1L1"], - faketears: ["1L1"], - feint: ["1L1"], - flash: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - focuspunch: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - growl: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - irontail: ["1L1"], - knockoff: ["1L1"], - laserfocus: ["1L1"], - lightscreen: ["1L1"], - magnetrise: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - mimic: ["1L1"], - mudslap: ["1L1"], - nastyplot: ["1L1"], - naturalgift: ["1L1"], - nuzzle: ["1L1"], - payday: ["1L1"], - playnice: ["1L1"], - playrough: ["1L1"], - protect: ["1L1"], - quickattack: ["1L1"], - rage: ["1L1"], - raindance: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - reversal: ["1L1"], - risingvoltage: ["1L1"], - rocksmash: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - secretpower: ["1L1"], - seismictoss: ["1L1"], - shockwave: ["1L1"], - signalbeam: ["1L1"], - skullbash: ["1L1"], - slam: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - spark: ["1L1"], - speedswap: ["1L1"], - strength: ["1L1"], - submission: ["1L1"], - substitute: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - sweetkiss: ["1L1"], - swift: ["1L1"], - tailwhip: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderpunch: ["1L1"], - thundershock: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - upperhand: ["1L1"], - uproar: ["1L1"], - voltswitch: ["1L1"], - wildcharge: ["1L1"], - zapcannon: ["1L1"], - }, - }, - raichualola: { - learnset: { - agility: ["1L1"], - alluringvoice: ["1L1"], - allyswitch: ["1L1"], - attract: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - calmmind: ["1L1"], - charge: ["1L1"], - chargebeam: ["1L1"], - charm: ["1L1"], - confide: ["1L1"], - covet: ["1L1"], - dig: ["1L1"], - discharge: ["1L1"], - doubleteam: ["1L1"], - drainingkiss: ["1L1"], - echoedvoice: ["1L1"], - eerieimpulse: ["1L1"], - electricterrain: ["1L1"], - electroball: ["1L1"], - electroweb: ["1L1"], - encore: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - expandingforce: ["1L1"], - facade: ["1L1"], - fakeout: ["1L1"], - faketears: ["1L1"], - feint: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - focuspunch: ["1L1"], - frustration: ["1L1"], - futuresight: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - growl: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - irontail: ["1L1"], - knockoff: ["1L1"], - laserfocus: ["1L1"], - lightscreen: ["1L1"], - magiccoat: ["1L1"], - magicroom: ["1L1"], - magnetrise: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - nastyplot: ["1L1"], - nuzzle: ["1L1"], - payday: ["1L1"], - playnice: ["1L1"], - playrough: ["1L1"], - protect: ["1L1"], - psychic: ["1L1"], - psychicnoise: ["1L1"], - psychicterrain: ["1L1"], - psyshock: ["1L1"], - quickattack: ["1L1"], - raindance: ["1L1"], - recycle: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - reversal: ["1L1"], - risingvoltage: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - seismictoss: ["1L1"], - shockwave: ["1L1"], - signalbeam: ["1L1"], - skillswap: ["1L1"], - slam: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - spark: ["1L1"], - speedswap: ["1L1"], - storedpower: ["1L1"], - substitute: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - sweetkiss: ["1L1"], - swift: ["1L1"], - tailwhip: ["1L1"], - takedown: ["1L1"], - telekinesis: ["1L1"], - teleport: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderpunch: ["1L1"], - thundershock: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - upperhand: ["1L1"], - uproar: ["1L1"], - voltswitch: ["1L1"], - wildcharge: ["1L1"], - }, - }, - sandshrew: { - learnset: { - aerialace: ["1L1"], - agility: ["1L1"], - amnesia: ["1L1"], - attract: ["1L1"], - bide: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - bulldoze: ["1L1"], - captivate: ["1L1"], - chipaway: ["1L1"], - confide: ["1L1"], - counter: ["1L1"], - covet: ["1L1"], - crushclaw: ["1L1"], - curse: ["1L1"], - cut: ["1L1"], - defensecurl: ["1L1"], - detect: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dynamicpunch: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - falseswipe: ["1L1"], - fissure: ["1L1"], - flail: ["1L1"], - fling: ["1L1"], - focuspunch: ["1L1"], - frustration: ["1L1"], - furycutter: ["1L1"], - furyswipes: ["1L1"], - gyroball: ["1L1"], - headbutt: ["1L1"], - hiddenpower: ["1L1"], - highhorsepower: ["1L1"], - honeclaws: ["1L1"], - irontail: ["1L1"], - knockoff: ["1L1"], - leechlife: ["1L1"], - lowkick: ["1L1"], - magnitude: ["1L1"], - metalclaw: ["1L1"], - mimic: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - nightslash: ["1L1"], - poisonjab: ["1L1"], - poisonsting: ["1L1"], - protect: ["1L1"], - rage: ["1L1"], - rapidspin: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rockclimb: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - rollout: ["1L1"], - rototiller: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - sandattack: ["1L1"], - sandstorm: ["1L1"], - sandtomb: ["1L1"], - scorchingsands: ["1L1"], - scratch: ["1L1"], - secretpower: ["1L1"], - seismictoss: ["1L1"], - shadowclaw: ["1L1"], - skullbash: ["1L1"], - slash: ["1L1"], - sleeptalk: ["1L1"], - smackdown: ["1L1"], - snore: ["1L1"], - spikes: ["1L1"], - stealthrock: ["1L1"], - steelroller: ["1L1"], - stompingtantrum: ["1L1"], - stoneedge: ["1L1"], - strength: ["1L1"], - submission: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - superfang: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - swordsdance: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - throatchop: ["1L1"], - toxic: ["1L1"], - workup: ["1L1"], - xscissor: ["1L1"], - }, - eventData: [ - {generation: 3, level: 12, gender: "M", nature: "Docile", ivs: {hp: 4, atk: 23, def: 8, spa: 31, spd: 1, spe: 25}, moves: ["1L1"], pokeball: "pokeball"}, - ], - encounters: [ - {generation: 1, level: 6}, - ], - }, - sandshrewalola: { - learnset: { - aerialace: ["1L1"], - amnesia: ["1L1"], - aquatail: ["1L1"], - attract: ["1L1"], - auroraveil: ["1L1"], - avalanche: ["1L1"], - bide: ["1L1"], - blizzard: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - bulldoze: ["1L1"], - chipaway: ["1L1"], - confide: ["1L1"], - counter: ["1L1"], - covet: ["1L1"], - crushclaw: ["1L1"], - curse: ["1L1"], - defensecurl: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - earthquake: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - flail: ["1L1"], - flashcannon: ["1L1"], - fling: ["1L1"], - focuspunch: ["1L1"], - frostbreath: ["1L1"], - frustration: ["1L1"], - furycutter: ["1L1"], - furyswipes: ["1L1"], - gyroball: ["1L1"], - hail: ["1L1"], - headbutt: ["1L1"], - hiddenpower: ["1L1"], - honeclaws: ["1L1"], - iceball: ["1L1"], - icebeam: ["1L1"], - icepunch: ["1L1"], - iceshard: ["1L1"], - icespinner: ["1L1"], - iciclecrash: ["1L1"], - iciclespear: ["1L1"], - icywind: ["1L1"], - irondefense: ["1L1"], - ironhead: ["1L1"], - irontail: ["1L1"], - knockoff: ["1L1"], - leechlife: ["1L1"], - lowkick: ["1L1"], - metalclaw: ["1L1"], - mirrorcoat: ["1L1"], - mist: ["1L1"], - nightslash: ["1L1"], - poisonjab: ["1L1"], - powdersnow: ["1L1"], - protect: ["1L1"], - rapidspin: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rockslide: ["1L1"], - rocktomb: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - scratch: ["1L1"], - seismictoss: ["1L1"], - shadowclaw: ["1L1"], - slash: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - snowscape: ["1L1"], - stealthrock: ["1L1"], - steelbeam: ["1L1"], - steelroller: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - superfang: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - swordsdance: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - throatchop: ["1L1"], - toxic: ["1L1"], - tripleaxel: ["1L1"], - workup: ["1L1"], - xscissor: ["1L1"], - }, - eventData: [ - {generation: 7, level: 10, moves: ["1L1"], pokeball: "cherishball"}, - ], - }, - sandslash: { - learnset: { - aerialace: ["1L1"], - agility: ["1L1"], - amnesia: ["1L1"], - attract: ["1L1"], - bide: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - bulldoze: ["1L1"], - captivate: ["1L1"], - confide: ["1L1"], - counter: ["1L1"], - covet: ["1L1"], - crushclaw: ["1L1"], - curse: ["1L1"], - cut: ["1L1"], - defensecurl: ["1L1"], - detect: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - drillrun: ["1L1"], - dynamicpunch: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - falseswipe: ["1L1"], - fissure: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - focuspunch: ["1L1"], - frustration: ["1L1"], - furycutter: ["1L1"], - furyswipes: ["1L1"], - gigaimpact: ["1L1"], - gunkshot: ["1L1"], - gyroball: ["1L1"], - headbutt: ["1L1"], - hiddenpower: ["1L1"], - highhorsepower: ["1L1"], - honeclaws: ["1L1"], - hyperbeam: ["1L1"], - irontail: ["1L1"], - knockoff: ["1L1"], - leechlife: ["1L1"], - lowkick: ["1L1"], - magnitude: ["1L1"], - metalclaw: ["1L1"], - mimic: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - pinmissile: ["1L1"], - poisonjab: ["1L1"], - poisonsting: ["1L1"], - protect: ["1L1"], - rage: ["1L1"], - rapidspin: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rockclimb: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - sandattack: ["1L1"], - sandstorm: ["1L1"], - sandtomb: ["1L1"], - scorchingsands: ["1L1"], - scratch: ["1L1"], - secretpower: ["1L1"], - seismictoss: ["1L1"], - shadowclaw: ["1L1"], - skullbash: ["1L1"], - slash: ["1L1"], - sleeptalk: ["1L1"], - smackdown: ["1L1"], - snore: ["1L1"], - spikes: ["1L1"], - stealthrock: ["1L1"], - steelroller: ["1L1"], - stompingtantrum: ["1L1"], - stoneedge: ["1L1"], - strength: ["1L1"], - submission: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - superfang: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - swordsdance: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - throatchop: ["1L1"], - toxic: ["1L1"], - workup: ["1L1"], - xscissor: ["1L1"], - }, - encounters: [ - {generation: 2, level: 10}, - {generation: 4, level: 10}, - ], - }, - sandslashalola: { - learnset: { - aerialace: ["1L1"], - agility: ["1L1"], - amnesia: ["1L1"], - aquatail: ["1L1"], - attract: ["1L1"], - auroraveil: ["1L1"], - avalanche: ["1L1"], - bide: ["1L1"], - blizzard: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - bulldoze: ["1L1"], - confide: ["1L1"], - counter: ["1L1"], - covet: ["1L1"], - curse: ["1L1"], - defensecurl: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - drillrun: ["1L1"], - earthquake: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - falseswipe: ["1L1"], - flashcannon: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - focuspunch: ["1L1"], - frostbreath: ["1L1"], - frustration: ["1L1"], - furycutter: ["1L1"], - furyswipes: ["1L1"], - gigaimpact: ["1L1"], - gyroball: ["1L1"], - hail: ["1L1"], - headbutt: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - iceball: ["1L1"], - icebeam: ["1L1"], - icepunch: ["1L1"], - iceshard: ["1L1"], - icespinner: ["1L1"], - iciclecrash: ["1L1"], - iciclespear: ["1L1"], - icywind: ["1L1"], - irondefense: ["1L1"], - ironhead: ["1L1"], - irontail: ["1L1"], - knockoff: ["1L1"], - leechlife: ["1L1"], - lowkick: ["1L1"], - metalburst: ["1L1"], - metalclaw: ["1L1"], - mist: ["1L1"], - pinmissile: ["1L1"], - poisonjab: ["1L1"], - powdersnow: ["1L1"], - protect: ["1L1"], - rapidspin: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rockslide: ["1L1"], - rocktomb: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - scratch: ["1L1"], - seismictoss: ["1L1"], - shadowclaw: ["1L1"], - slash: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - snowscape: ["1L1"], - spikes: ["1L1"], - stealthrock: ["1L1"], - steelbeam: ["1L1"], - steelroller: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - superfang: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - swordsdance: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - throatchop: ["1L1"], - toxic: ["1L1"], - tripleaxel: ["1L1"], - workup: ["1L1"], - xscissor: ["1L1"], - }, - }, - nidoranf: { - learnset: { - aerialace: ["1L1"], - attract: ["1L1"], - beatup: ["1L1"], - bide: ["1L1"], - bite: ["1L1"], - blizzard: ["1L1"], - bodyslam: ["1L1"], - captivate: ["1L1"], - charm: ["1L1"], - chipaway: ["1L1"], - confide: ["1L1"], - counter: ["1L1"], - crunch: ["1L1"], - curse: ["1L1"], - cut: ["1L1"], - defensecurl: ["1L1"], - detect: ["1L1"], - dig: ["1L1"], - disable: ["1L1"], - doubleedge: ["1L1"], - doublekick: ["1L1"], - doubleteam: ["1L1"], - earthpower: ["1L1"], - echoedvoice: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - flatter: ["1L1"], - focusenergy: ["1L1"], - frustration: ["1L1"], - furyswipes: ["1L1"], - growl: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - honeclaws: ["1L1"], - icebeam: ["1L1"], - irontail: ["1L1"], - mimic: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - poisonfang: ["1L1"], - poisonjab: ["1L1"], - poisonsting: ["1L1"], - poisontail: ["1L1"], - protect: ["1L1"], - pursuit: ["1L1"], - rage: ["1L1"], - raindance: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rocksmash: ["1L1"], - round: ["1L1"], - scratch: ["1L1"], - secretpower: ["1L1"], - shadowclaw: ["1L1"], - shockwave: ["1L1"], - skullbash: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - snore: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - sunnyday: ["1L1"], - superfang: ["1L1"], - supersonic: ["1L1"], - swagger: ["1L1"], - tackle: ["1L1"], - tailwhip: ["1L1"], - takedown: ["1L1"], - thief: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - toxic: ["1L1"], - toxicspikes: ["1L1"], - venomdrench: ["1L1"], - venoshock: ["1L1"], - waterpulse: ["1L1"], - }, - encounters: [ - {generation: 1, level: 2}, - ], - }, - nidorina: { - learnset: { - aerialace: ["1L1"], - attract: ["1L1"], - beatup: ["1L1"], - bide: ["1L1"], - bite: ["1L1"], - blizzard: ["1L1"], - bodyslam: ["1L1"], - bubblebeam: ["1L1"], - captivate: ["1L1"], - charm: ["1L1"], - confide: ["1L1"], - counter: ["1L1"], - crunch: ["1L1"], - curse: ["1L1"], - cut: ["1L1"], - defensecurl: ["1L1"], - detect: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doublekick: ["1L1"], - doubleteam: ["1L1"], - earthpower: ["1L1"], - echoedvoice: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - flatter: ["1L1"], - focusenergy: ["1L1"], - frustration: ["1L1"], - furyswipes: ["1L1"], - growl: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - honeclaws: ["1L1"], - horndrill: ["1L1"], - icebeam: ["1L1"], - irontail: ["1L1"], - mimic: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - poisonfang: ["1L1"], - poisonjab: ["1L1"], - poisonsting: ["1L1"], - protect: ["1L1"], - rage: ["1L1"], - raindance: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rocksmash: ["1L1"], - round: ["1L1"], - scratch: ["1L1"], - secretpower: ["1L1"], - shadowclaw: ["1L1"], - shockwave: ["1L1"], - skullbash: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - snore: ["1L1"], - stompingtantrum: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - superfang: ["1L1"], - swagger: ["1L1"], - tackle: ["1L1"], - tailwhip: ["1L1"], - takedown: ["1L1"], - thief: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - toxic: ["1L1"], - toxicspikes: ["1L1"], - venomdrench: ["1L1"], - venoshock: ["1L1"], - watergun: ["1L1"], - waterpulse: ["1L1"], - }, - encounters: [ - {generation: 4, level: 15, pokeball: "safariball"}, - ], - }, - nidoqueen: { - learnset: { - aerialace: ["1L1"], - aquatail: ["1L1"], - attract: ["1L1"], - avalanche: ["1L1"], - beatup: ["1L1"], - bide: ["1L1"], - bite: ["1L1"], - blizzard: ["1L1"], - bodypress: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - bubblebeam: ["1L1"], - bulldoze: ["1L1"], - captivate: ["1L1"], - charm: ["1L1"], - chipaway: ["1L1"], - confide: ["1L1"], - counter: ["1L1"], - crunch: ["1L1"], - curse: ["1L1"], - cut: ["1L1"], - defensecurl: ["1L1"], - detect: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doublekick: ["1L1"], - doubleteam: ["1L1"], - dragonpulse: ["1L1"], - dragontail: ["1L1"], - drillrun: ["1L1"], - dynamicpunch: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - echoedvoice: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fireblast: ["1L1"], - firepunch: ["1L1"], - fissure: ["1L1"], - flamethrower: ["1L1"], - flatter: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - focusenergy: ["1L1"], - focuspunch: ["1L1"], - frustration: ["1L1"], - furycutter: ["1L1"], - furyswipes: ["1L1"], - gigaimpact: ["1L1"], - growl: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hex: ["1L1"], - hiddenpower: ["1L1"], - highhorsepower: ["1L1"], - honeclaws: ["1L1"], - horndrill: ["1L1"], - hyperbeam: ["1L1"], - icebeam: ["1L1"], - icepunch: ["1L1"], - icywind: ["1L1"], - incinerate: ["1L1"], - irontail: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - mimic: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - outrage: ["1L1"], - payday: ["1L1"], - poisonjab: ["1L1"], - poisonsting: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - quash: ["1L1"], - rage: ["1L1"], - raindance: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roar: ["1L1"], - rockblast: ["1L1"], - rockclimb: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - sandstorm: ["1L1"], - sandtomb: ["1L1"], - scorchingsands: ["1L1"], - scratch: ["1L1"], - secretpower: ["1L1"], - seismictoss: ["1L1"], - shadowball: ["1L1"], - shadowclaw: ["1L1"], - shockwave: ["1L1"], - skullbash: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - sludgewave: ["1L1"], - smackdown: ["1L1"], - snore: ["1L1"], - stealthrock: ["1L1"], - stompingtantrum: ["1L1"], - stoneedge: ["1L1"], - strength: ["1L1"], - submission: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - superfang: ["1L1"], - superpower: ["1L1"], - supersonic: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - tackle: ["1L1"], - tailwhip: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - thief: ["1L1"], - throatchop: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderpunch: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - toxicspikes: ["1L1"], - uproar: ["1L1"], - venomdrench: ["1L1"], - venoshock: ["1L1"], - watergun: ["1L1"], - waterpulse: ["1L1"], - whirlpool: ["1L1"], - }, - eventData: [ - {generation: 6, level: 41, perfectIVs: 2, abilities: ["1L1"], moves: ["1L1"], pokeball: "cherishball"}, - ], - }, - nidoranm: { - learnset: { - amnesia: ["1L1"], - attract: ["1L1"], - beatup: ["1L1"], - bide: ["1L1"], - blizzard: ["1L1"], - bodyslam: ["1L1"], - captivate: ["1L1"], - chipaway: ["1L1"], - confide: ["1L1"], - confusion: ["1L1"], - counter: ["1L1"], - curse: ["1L1"], - cut: ["1L1"], - defensecurl: ["1L1"], - detect: ["1L1"], - dig: ["1L1"], - disable: ["1L1"], - doubleedge: ["1L1"], - doublekick: ["1L1"], - doubleteam: ["1L1"], - drillrun: ["1L1"], - earthpower: ["1L1"], - echoedvoice: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - flatter: ["1L1"], - focusenergy: ["1L1"], - frustration: ["1L1"], - furyattack: ["1L1"], - headbutt: ["1L1"], - headsmash: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - honeclaws: ["1L1"], - hornattack: ["1L1"], - horndrill: ["1L1"], - icebeam: ["1L1"], - irontail: ["1L1"], - leer: ["1L1"], - mimic: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - peck: ["1L1"], - poisonjab: ["1L1"], - poisonsting: ["1L1"], - poisontail: ["1L1"], - protect: ["1L1"], - rage: ["1L1"], - raindance: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rocksmash: ["1L1"], - round: ["1L1"], - secretpower: ["1L1"], - shadowclaw: ["1L1"], - shockwave: ["1L1"], - skullbash: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - smartstrike: ["1L1"], - snore: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - sunnyday: ["1L1"], - superfang: ["1L1"], - supersonic: ["1L1"], - swagger: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - thief: ["1L1"], - thrash: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - toxic: ["1L1"], - toxicspikes: ["1L1"], - venomdrench: ["1L1"], - venoshock: ["1L1"], - waterpulse: ["1L1"], - }, - encounters: [ - {generation: 1, level: 2}, - ], - }, - nidorino: { - learnset: { - amnesia: ["1L1"], - attract: ["1L1"], - beatup: ["1L1"], - bide: ["1L1"], - blizzard: ["1L1"], - bodyslam: ["1L1"], - bubblebeam: ["1L1"], - captivate: ["1L1"], - confide: ["1L1"], - counter: ["1L1"], - curse: ["1L1"], - cut: ["1L1"], - defensecurl: ["1L1"], - detect: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doublekick: ["1L1"], - doubleteam: ["1L1"], - drillrun: ["1L1"], - earthpower: ["1L1"], - echoedvoice: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - flatter: ["1L1"], - focusenergy: ["1L1"], - frustration: ["1L1"], - furyattack: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - honeclaws: ["1L1"], - hornattack: ["1L1"], - horndrill: ["1L1"], - icebeam: ["1L1"], - irontail: ["1L1"], - leer: ["1L1"], - mimic: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - peck: ["1L1"], - poisonjab: ["1L1"], - poisonsting: ["1L1"], - protect: ["1L1"], - rage: ["1L1"], - raindance: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rocksmash: ["1L1"], - round: ["1L1"], - secretpower: ["1L1"], - shadowclaw: ["1L1"], - shockwave: ["1L1"], - skullbash: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - smartstrike: ["1L1"], - snore: ["1L1"], - stompingtantrum: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - sunnyday: ["1L1"], - superfang: ["1L1"], - swagger: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - thief: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - toxic: ["1L1"], - toxicspikes: ["1L1"], - venomdrench: ["1L1"], - venoshock: ["1L1"], - watergun: ["1L1"], - waterpulse: ["1L1"], - }, - encounters: [ - {generation: 4, level: 15, pokeball: "safariball"}, - ], - }, - nidoking: { - learnset: { - amnesia: ["1L1"], - aquatail: ["1L1"], - attract: ["1L1"], - avalanche: ["1L1"], - beatup: ["1L1"], - bide: ["1L1"], - blizzard: ["1L1"], - bodypress: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - bubblebeam: ["1L1"], - bulldoze: ["1L1"], - captivate: ["1L1"], - chipaway: ["1L1"], - confide: ["1L1"], - counter: ["1L1"], - curse: ["1L1"], - cut: ["1L1"], - defensecurl: ["1L1"], - detect: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doublekick: ["1L1"], - doubleteam: ["1L1"], - dragonpulse: ["1L1"], - dragontail: ["1L1"], - drillrun: ["1L1"], - dynamicpunch: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - echoedvoice: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fireblast: ["1L1"], - firepunch: ["1L1"], - fissure: ["1L1"], - flamethrower: ["1L1"], - flatter: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - focusenergy: ["1L1"], - focuspunch: ["1L1"], - frustration: ["1L1"], - furyattack: ["1L1"], - furycutter: ["1L1"], - gigaimpact: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hex: ["1L1"], - hiddenpower: ["1L1"], - highhorsepower: ["1L1"], - honeclaws: ["1L1"], - hornattack: ["1L1"], - horndrill: ["1L1"], - hyperbeam: ["1L1"], - icebeam: ["1L1"], - icepunch: ["1L1"], - icywind: ["1L1"], - incinerate: ["1L1"], - irontail: ["1L1"], - leer: ["1L1"], - megahorn: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - mimic: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - outrage: ["1L1"], - payday: ["1L1"], - peck: ["1L1"], - poisonjab: ["1L1"], - poisonsting: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - quash: ["1L1"], - rage: ["1L1"], - raindance: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roar: ["1L1"], - rockblast: ["1L1"], - rockclimb: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - sandstorm: ["1L1"], - sandtomb: ["1L1"], - scorchingsands: ["1L1"], - secretpower: ["1L1"], - seismictoss: ["1L1"], - shadowball: ["1L1"], - shadowclaw: ["1L1"], - shockwave: ["1L1"], - skullbash: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - sludgewave: ["1L1"], - smackdown: ["1L1"], - smartstrike: ["1L1"], - snore: ["1L1"], - stealthrock: ["1L1"], - stompingtantrum: ["1L1"], - stoneedge: ["1L1"], - strength: ["1L1"], - submission: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - sunnyday: ["1L1"], - superfang: ["1L1"], - superpower: ["1L1"], - supersonic: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - thief: ["1L1"], - thrash: ["1L1"], - throatchop: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderpunch: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - toxicspikes: ["1L1"], - uproar: ["1L1"], - venomdrench: ["1L1"], - venoshock: ["1L1"], - watergun: ["1L1"], - waterpulse: ["1L1"], - whirlpool: ["1L1"], - }, - eventData: [ - {generation: 7, level: 68, abilities: ["1L1"], moves: ["1L1"], pokeball: "cherishball"}, - ], - }, - cleffa: { - learnset: { - afteryou: ["1L1"], - alluringvoice: ["1L1"], - amnesia: ["1L1"], - aromatherapy: ["1L1"], - attract: ["1L1"], - bellydrum: ["1L1"], - bodyslam: ["1L1"], - calmmind: ["1L1"], - captivate: ["1L1"], - charm: ["1L1"], - chillingwater: ["1L1"], - confide: ["1L1"], - copycat: ["1L1"], - counter: ["1L1"], - covet: ["1L1"], - curse: ["1L1"], - dazzlinggleam: ["1L1"], - defensecurl: ["1L1"], - detect: ["1L1"], - dig: ["1L1"], - disarmingvoice: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - drainingkiss: ["1L1"], - dreameater: ["1L1"], - echoedvoice: ["1L1"], - encore: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - faketears: ["1L1"], - fireblast: ["1L1"], - flamethrower: ["1L1"], - flash: ["1L1"], - fling: ["1L1"], - frustration: ["1L1"], - grassknot: ["1L1"], - gravity: ["1L1"], - headbutt: ["1L1"], - healpulse: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hypervoice: ["1L1"], - icywind: ["1L1"], - incinerate: ["1L1"], - irontail: ["1L1"], - lastresort: ["1L1"], - lightscreen: ["1L1"], - magicalleaf: ["1L1"], - magiccoat: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - metronome: ["1L1"], - mimic: ["1L1"], - mistyterrain: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - nightmare: ["1L1"], - playrough: ["1L1"], - pound: ["1L1"], - present: ["1L1"], - protect: ["1L1"], - psybeam: ["1L1"], - psychic: ["1L1"], - psychup: ["1L1"], - psyshock: ["1L1"], - raindance: ["1L1"], - recycle: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roleplay: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - secretpower: ["1L1"], - seismictoss: ["1L1"], - shadowball: ["1L1"], - shockwave: ["1L1"], - signalbeam: ["1L1"], - sing: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - softboiled: ["1L1"], - solarbeam: ["1L1"], - splash: ["1L1"], - storedpower: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - sweetkiss: ["1L1"], - swift: ["1L1"], - telekinesis: ["1L1"], - terablast: ["1L1"], - thunderwave: ["1L1"], - tickle: ["1L1"], - toxic: ["1L1"], - trick: ["1L1"], - uproar: ["1L1"], - waterpulse: ["1L1"], - wish: ["1L1"], - wonderroom: ["1L1"], - workup: ["1L1"], - zapcannon: ["1L1"], - zenheadbutt: ["1L1"], - }, - }, - clefairy: { - learnset: { - afteryou: ["1L1"], - alluringvoice: ["1L1"], - allyswitch: ["1L1"], - amnesia: ["1L1"], - attract: ["1L1"], - batonpass: ["1L1"], - bestow: ["1L1"], - bide: ["1L1"], - blizzard: ["1L1"], - bodyslam: ["1L1"], - bounce: ["1L1"], - brickbreak: ["1L1"], - bubblebeam: ["1L1"], - calmmind: ["1L1"], - captivate: ["1L1"], - chargebeam: ["1L1"], - charm: ["1L1"], - chillingwater: ["1L1"], - confide: ["1L1"], - copycat: ["1L1"], - cosmicpower: ["1L1"], - counter: ["1L1"], - covet: ["1L1"], - curse: ["1L1"], - dazzlinggleam: ["1L1"], - defensecurl: ["1L1"], - detect: ["1L1"], - dig: ["1L1"], - disarmingvoice: ["1L1"], - doubleedge: ["1L1"], - doubleslap: ["1L1"], - doubleteam: ["1L1"], - drainingkiss: ["1L1"], - drainpunch: ["1L1"], - dreameater: ["1L1"], - dualwingbeat: ["1L1"], - dynamicpunch: ["1L1"], - echoedvoice: ["1L1"], - encore: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - faketears: ["1L1"], - fireblast: ["1L1"], - firepunch: ["1L1"], - flamethrower: ["1L1"], - flash: ["1L1"], - fling: ["1L1"], - focuspunch: ["1L1"], - followme: ["1L1"], - frustration: ["1L1"], - grassknot: ["1L1"], - gravity: ["1L1"], - growl: ["1L1"], - headbutt: ["1L1"], - healbell: ["1L1"], - healingwish: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hypervoice: ["1L1"], - icebeam: ["1L1"], - icepunch: ["1L1"], - icywind: ["1L1"], - imprison: ["1L1"], - incinerate: ["1L1"], - irontail: ["1L1"], - knockoff: ["1L1"], - lastresort: ["1L1"], - lifedew: ["1L1"], - lightscreen: ["1L1"], - luckychant: ["1L1"], - magicalleaf: ["1L1"], - magiccoat: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - meteorbeam: ["1L1"], - meteormash: ["1L1"], - metronome: ["1L1"], - mimic: ["1L1"], - minimize: ["1L1"], - mistyexplosion: ["1L1"], - mistyterrain: ["1L1"], - moonblast: ["1L1"], - moonlight: ["1L1"], - mudslap: ["1L1"], - mysticalfire: ["1L1"], - naturalgift: ["1L1"], - nightmare: ["1L1"], - nightshade: ["1L1"], - playrough: ["1L1"], - pound: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - psybeam: ["1L1"], - psychic: ["1L1"], - psychup: ["1L1"], - psyshock: ["1L1"], - psywave: ["1L1"], - rage: ["1L1"], - raindance: ["1L1"], - recycle: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - rocksmash: ["1L1"], - roleplay: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - secretpower: ["1L1"], - seismictoss: ["1L1"], - shadowball: ["1L1"], - shockwave: ["1L1"], - signalbeam: ["1L1"], - sing: ["1L1"], - skillswap: ["1L1"], - skullbash: ["1L1"], - sleeptalk: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - softboiled: ["1L1"], - solarbeam: ["1L1"], - splash: ["1L1"], - spotlight: ["1L1"], - stealthrock: ["1L1"], - storedpower: ["1L1"], - strength: ["1L1"], - submission: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - sweetkiss: ["1L1"], - swift: ["1L1"], - takedown: ["1L1"], - telekinesis: ["1L1"], - teleport: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderpunch: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - triattack: ["1L1"], - trick: ["1L1"], - uproar: ["1L1"], - wakeupslap: ["1L1"], - watergun: ["1L1"], - waterpulse: ["1L1"], - wonderroom: ["1L1"], - workup: ["1L1"], - zapcannon: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 8, level: 50, gender: "F", shiny: true, nature: "Bold", isHidden: true, ivs: {hp: 31, atk: 0, def: 31, spa: 31, spd: 31, spe: 31}, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 8, level: 15, gender: "M", nature: "Modest", abilities: ["1L1"], moves: ["1L1"], pokeball: "moonball"}, - ], - encounters: [ - {generation: 1, level: 8}, - ], - }, - clefable: { - learnset: { - afteryou: ["1L1"], - alluringvoice: ["1L1"], - allyswitch: ["1L1"], - amnesia: ["1L1"], - attract: ["1L1"], - batonpass: ["1L1"], - bide: ["1L1"], - blizzard: ["1L1"], - bodyslam: ["1L1"], - bounce: ["1L1"], - brickbreak: ["1L1"], - bubblebeam: ["1L1"], - calmmind: ["1L1"], - captivate: ["1L1"], - chargebeam: ["1L1"], - charm: ["1L1"], - chillingwater: ["1L1"], - confide: ["1L1"], - copycat: ["1L1"], - cosmicpower: ["1L1"], - counter: ["1L1"], - covet: ["1L1"], - curse: ["1L1"], - dazzlinggleam: ["1L1"], - defensecurl: ["1L1"], - detect: ["1L1"], - dig: ["1L1"], - disarmingvoice: ["1L1"], - doubleedge: ["1L1"], - doubleslap: ["1L1"], - doubleteam: ["1L1"], - drainingkiss: ["1L1"], - drainpunch: ["1L1"], - dreameater: ["1L1"], - dualwingbeat: ["1L1"], - dynamicpunch: ["1L1"], - echoedvoice: ["1L1"], - encore: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - faketears: ["1L1"], - fireblast: ["1L1"], - firepunch: ["1L1"], - flamethrower: ["1L1"], - flash: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - focuspunch: ["1L1"], - followme: ["1L1"], - frustration: ["1L1"], - futuresight: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - gravity: ["1L1"], - growl: ["1L1"], - headbutt: ["1L1"], - healbell: ["1L1"], - healingwish: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - hypervoice: ["1L1"], - icebeam: ["1L1"], - icepunch: ["1L1"], - icywind: ["1L1"], - imprison: ["1L1"], - incinerate: ["1L1"], - irontail: ["1L1"], - knockoff: ["1L1"], - laserfocus: ["1L1"], - lastresort: ["1L1"], - lifedew: ["1L1"], - lightscreen: ["1L1"], - magicalleaf: ["1L1"], - magiccoat: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - meteorbeam: ["1L1"], - meteormash: ["1L1"], - metronome: ["1L1"], - mimic: ["1L1"], - minimize: ["1L1"], - mistyexplosion: ["1L1"], - mistyterrain: ["1L1"], - moonblast: ["1L1"], - moonlight: ["1L1"], - mudslap: ["1L1"], - mysticalfire: ["1L1"], - naturalgift: ["1L1"], - nightmare: ["1L1"], - nightshade: ["1L1"], - playrough: ["1L1"], - pound: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - psybeam: ["1L1"], - psychic: ["1L1"], - psychup: ["1L1"], - psyshock: ["1L1"], - psywave: ["1L1"], - rage: ["1L1"], - raindance: ["1L1"], - recycle: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - rocksmash: ["1L1"], - roleplay: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - secretpower: ["1L1"], - seismictoss: ["1L1"], - shadowball: ["1L1"], - shockwave: ["1L1"], - signalbeam: ["1L1"], - sing: ["1L1"], - skillswap: ["1L1"], - skullbash: ["1L1"], - sleeptalk: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - softboiled: ["1L1"], - solarbeam: ["1L1"], - splash: ["1L1"], - spotlight: ["1L1"], - stealthrock: ["1L1"], - storedpower: ["1L1"], - strength: ["1L1"], - submission: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - sweetkiss: ["1L1"], - swift: ["1L1"], - takedown: ["1L1"], - telekinesis: ["1L1"], - teleport: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderpunch: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - triattack: ["1L1"], - trick: ["1L1"], - uproar: ["1L1"], - watergun: ["1L1"], - waterpulse: ["1L1"], - wonderroom: ["1L1"], - workup: ["1L1"], - zapcannon: ["1L1"], - zenheadbutt: ["1L1"], - }, - }, - vulpix: { - learnset: { - agility: ["1L1"], - attract: ["1L1"], - babydolleyes: ["1L1"], - batonpass: ["1L1"], - bide: ["1L1"], - bodyslam: ["1L1"], - burningjealousy: ["1L1"], - captivate: ["1L1"], - charm: ["1L1"], - confide: ["1L1"], - confuseray: ["1L1"], - covet: ["1L1"], - curse: ["1L1"], - darkpulse: ["1L1"], - dig: ["1L1"], - disable: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - ember: ["1L1"], - encore: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - extrasensory: ["1L1"], - facade: ["1L1"], - feintattack: ["1L1"], - fireblast: ["1L1"], - firespin: ["1L1"], - flail: ["1L1"], - flameburst: ["1L1"], - flamecharge: ["1L1"], - flamethrower: ["1L1"], - flareblitz: ["1L1"], - foulplay: ["1L1"], - frustration: ["1L1"], - grudge: ["1L1"], - headbutt: ["1L1"], - healingwish: ["1L1"], - heatwave: ["1L1"], - helpinghand: ["1L1"], - hex: ["1L1"], - hiddenpower: ["1L1"], - howl: ["1L1"], - hypnosis: ["1L1"], - imprison: ["1L1"], - incinerate: ["1L1"], - inferno: ["1L1"], - irontail: ["1L1"], - memento: ["1L1"], - mimic: ["1L1"], - mysticalfire: ["1L1"], - nastyplot: ["1L1"], - naturalgift: ["1L1"], - ominouswind: ["1L1"], - overheat: ["1L1"], - painsplit: ["1L1"], - payback: ["1L1"], - powerswap: ["1L1"], - protect: ["1L1"], - psychup: ["1L1"], - quickattack: ["1L1"], - rage: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roar: ["1L1"], - roleplay: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - secretpower: ["1L1"], - skullbash: ["1L1"], - sleeptalk: ["1L1"], - snarl: ["1L1"], - snore: ["1L1"], - spite: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - tackle: ["1L1"], - tailslap: ["1L1"], - tailwhip: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - toxic: ["1L1"], - weatherball: ["1L1"], - willowisp: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 3, level: 18, gender: "F", nature: "Quirky", ivs: {hp: 15, atk: 6, def: 3, spa: 25, spd: 13, spe: 22}, moves: ["1L1"], pokeball: "pokeball"}, - {generation: 3, level: 18, moves: ["1L1"]}, - ], - encounters: [ - {generation: 1, level: 18}, - ], - }, - vulpixalola: { - learnset: { - agility: ["1L1"], - aquatail: ["1L1"], - attract: ["1L1"], - aurorabeam: ["1L1"], - auroraveil: ["1L1"], - babydolleyes: ["1L1"], - batonpass: ["1L1"], - blizzard: ["1L1"], - bodyslam: ["1L1"], - captivate: ["1L1"], - celebrate: ["1L1"], - charm: ["1L1"], - chillingwater: ["1L1"], - confide: ["1L1"], - confuseray: ["1L1"], - covet: ["1L1"], - darkpulse: ["1L1"], - dazzlinggleam: ["1L1"], - dig: ["1L1"], - disable: ["1L1"], - disarmingvoice: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - drainingkiss: ["1L1"], - encore: ["1L1"], - endure: ["1L1"], - extrasensory: ["1L1"], - facade: ["1L1"], - faketears: ["1L1"], - feintattack: ["1L1"], - flail: ["1L1"], - foulplay: ["1L1"], - freezedry: ["1L1"], - frostbreath: ["1L1"], - frustration: ["1L1"], - grudge: ["1L1"], - hail: ["1L1"], - headbutt: ["1L1"], - healbell: ["1L1"], - helpinghand: ["1L1"], - hex: ["1L1"], - hiddenpower: ["1L1"], - howl: ["1L1"], - hypnosis: ["1L1"], - icebeam: ["1L1"], - iceshard: ["1L1"], - iciclespear: ["1L1"], - icywind: ["1L1"], - imprison: ["1L1"], - irontail: ["1L1"], - mist: ["1L1"], - mistyterrain: ["1L1"], - moonblast: ["1L1"], - nastyplot: ["1L1"], - painsplit: ["1L1"], - payback: ["1L1"], - playrough: ["1L1"], - powdersnow: ["1L1"], - powerswap: ["1L1"], - protect: ["1L1"], - psychup: ["1L1"], - raindance: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roar: ["1L1"], - roleplay: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - secretpower: ["1L1"], - sheercold: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - snowscape: ["1L1"], - spite: ["1L1"], - storedpower: ["1L1"], - substitute: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - tackle: ["1L1"], - tailslap: ["1L1"], - tailwhip: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - toxic: ["1L1"], - weatherball: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 7, level: 10, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 7, level: 10, gender: "F", nature: "Modest", moves: ["1L1"], pokeball: "cherishball"}, - ], - }, - ninetales: { - learnset: { - agility: ["1L1"], - attract: ["1L1"], - batonpass: ["1L1"], - bide: ["1L1"], - bodyslam: ["1L1"], - burningjealousy: ["1L1"], - calmmind: ["1L1"], - captivate: ["1L1"], - charm: ["1L1"], - confide: ["1L1"], - confuseray: ["1L1"], - covet: ["1L1"], - curse: ["1L1"], - darkpulse: ["1L1"], - dig: ["1L1"], - disable: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dreameater: ["1L1"], - ember: ["1L1"], - encore: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - extrasensory: ["1L1"], - facade: ["1L1"], - faketears: ["1L1"], - fireblast: ["1L1"], - firespin: ["1L1"], - flamecharge: ["1L1"], - flamethrower: ["1L1"], - flareblitz: ["1L1"], - foulplay: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - grudge: ["1L1"], - headbutt: ["1L1"], - heatwave: ["1L1"], - helpinghand: ["1L1"], - hex: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - hypnosis: ["1L1"], - imprison: ["1L1"], - incinerate: ["1L1"], - inferno: ["1L1"], - irontail: ["1L1"], - laserfocus: ["1L1"], - mimic: ["1L1"], - mysticalfire: ["1L1"], - nastyplot: ["1L1"], - naturalgift: ["1L1"], - nightshade: ["1L1"], - ominouswind: ["1L1"], - overheat: ["1L1"], - painsplit: ["1L1"], - payback: ["1L1"], - powerswap: ["1L1"], - protect: ["1L1"], - psychup: ["1L1"], - psyshock: ["1L1"], - quickattack: ["1L1"], - rage: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roar: ["1L1"], - roleplay: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - scorchingsands: ["1L1"], - secretpower: ["1L1"], - shadowball: ["1L1"], - skullbash: ["1L1"], - sleeptalk: ["1L1"], - snarl: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - spite: ["1L1"], - storedpower: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - tackle: ["1L1"], - tailslap: ["1L1"], - tailwhip: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - toxic: ["1L1"], - weatherball: ["1L1"], - willowisp: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 5, level: 50, gender: "M", nature: "Bold", ivs: {def: 31}, isHidden: true, moves: ["1L1"], pokeball: "cherishball"}, - ], - }, - ninetalesalola: { - learnset: { - agility: ["1L1"], - aquatail: ["1L1"], - attract: ["1L1"], - aurorabeam: ["1L1"], - auroraveil: ["1L1"], - avalanche: ["1L1"], - batonpass: ["1L1"], - blizzard: ["1L1"], - bodyslam: ["1L1"], - calmmind: ["1L1"], - charm: ["1L1"], - chillingwater: ["1L1"], - confide: ["1L1"], - confuseray: ["1L1"], - covet: ["1L1"], - darkpulse: ["1L1"], - dazzlinggleam: ["1L1"], - dig: ["1L1"], - disable: ["1L1"], - disarmingvoice: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - drainingkiss: ["1L1"], - dreameater: ["1L1"], - encore: ["1L1"], - endure: ["1L1"], - extrasensory: ["1L1"], - facade: ["1L1"], - faketears: ["1L1"], - foulplay: ["1L1"], - freezedry: ["1L1"], - frostbreath: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - grudge: ["1L1"], - hail: ["1L1"], - headbutt: ["1L1"], - healbell: ["1L1"], - helpinghand: ["1L1"], - hex: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - hypnosis: ["1L1"], - icebeam: ["1L1"], - iceshard: ["1L1"], - iciclespear: ["1L1"], - icywind: ["1L1"], - imprison: ["1L1"], - irontail: ["1L1"], - laserfocus: ["1L1"], - mist: ["1L1"], - mistyterrain: ["1L1"], - nastyplot: ["1L1"], - painsplit: ["1L1"], - payback: ["1L1"], - playrough: ["1L1"], - powdersnow: ["1L1"], - powerswap: ["1L1"], - protect: ["1L1"], - psychup: ["1L1"], - psyshock: ["1L1"], - raindance: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roar: ["1L1"], - roleplay: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - sheercold: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - snowscape: ["1L1"], - solarbeam: ["1L1"], - spite: ["1L1"], - storedpower: ["1L1"], - substitute: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - tackle: ["1L1"], - tailslap: ["1L1"], - tailwhip: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - toxic: ["1L1"], - tripleaxel: ["1L1"], - weatherball: ["1L1"], - wonderroom: ["1L1"], - zenheadbutt: ["1L1"], - }, - }, - igglybuff: { - learnset: { - alluringvoice: ["1L1"], - attract: ["1L1"], - bodyslam: ["1L1"], - bounce: ["1L1"], - captivate: ["1L1"], - charm: ["1L1"], - confide: ["1L1"], - copycat: ["1L1"], - counter: ["1L1"], - covet: ["1L1"], - curse: ["1L1"], - dazzlinggleam: ["1L1"], - defensecurl: ["1L1"], - detect: ["1L1"], - dig: ["1L1"], - disable: ["1L1"], - disarmingvoice: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - drainingkiss: ["1L1"], - dreameater: ["1L1"], - echoedvoice: ["1L1"], - encore: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - faketears: ["1L1"], - feintattack: ["1L1"], - fireblast: ["1L1"], - flamethrower: ["1L1"], - flash: ["1L1"], - fling: ["1L1"], - frustration: ["1L1"], - grassknot: ["1L1"], - gravity: ["1L1"], - headbutt: ["1L1"], - healbell: ["1L1"], - healpulse: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hypervoice: ["1L1"], - icywind: ["1L1"], - incinerate: ["1L1"], - lastresort: ["1L1"], - lightscreen: ["1L1"], - magiccoat: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - mimic: ["1L1"], - mistyterrain: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - nightmare: ["1L1"], - painsplit: ["1L1"], - perishsong: ["1L1"], - playrough: ["1L1"], - pound: ["1L1"], - present: ["1L1"], - protect: ["1L1"], - psychic: ["1L1"], - psychup: ["1L1"], - punishment: ["1L1"], - raindance: ["1L1"], - recycle: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roleplay: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - seismictoss: ["1L1"], - shadowball: ["1L1"], - shockwave: ["1L1"], - sing: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - sweetkiss: ["1L1"], - swift: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thunderwave: ["1L1"], - tickle: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - uproar: ["1L1"], - waterpulse: ["1L1"], - wildcharge: ["1L1"], - wish: ["1L1"], - workup: ["1L1"], - zapcannon: ["1L1"], - }, - eventData: [ - {generation: 3, level: 5, shiny: 1, abilities: ["1L1"], moves: ["1L1"], pokeball: "pokeball", emeraldEventEgg: true}, - ], - }, - jigglypuff: { - learnset: { - alluringvoice: ["1L1"], - allyswitch: ["1L1"], - amnesia: ["1L1"], - attract: ["1L1"], - batonpass: ["1L1"], - bide: ["1L1"], - blizzard: ["1L1"], - bodypress: ["1L1"], - bodyslam: ["1L1"], - bounce: ["1L1"], - brickbreak: ["1L1"], - bubblebeam: ["1L1"], - calmmind: ["1L1"], - captivate: ["1L1"], - chargebeam: ["1L1"], - charm: ["1L1"], - chillingwater: ["1L1"], - confide: ["1L1"], - copycat: ["1L1"], - counter: ["1L1"], - covet: ["1L1"], - curse: ["1L1"], - darkpulse: ["1L1"], - dazzlinggleam: ["1L1"], - defensecurl: ["1L1"], - detect: ["1L1"], - dig: ["1L1"], - disable: ["1L1"], - disarmingvoice: ["1L1"], - doubleedge: ["1L1"], - doubleslap: ["1L1"], - doubleteam: ["1L1"], - drainingkiss: ["1L1"], - drainpunch: ["1L1"], - dreameater: ["1L1"], - dynamicpunch: ["1L1"], - echoedvoice: ["1L1"], - encore: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - faketears: ["1L1"], - fireblast: ["1L1"], - firepunch: ["1L1"], - flamethrower: ["1L1"], - flash: ["1L1"], - fling: ["1L1"], - focuspunch: ["1L1"], - frustration: ["1L1"], - grassknot: ["1L1"], - gravity: ["1L1"], - gyroball: ["1L1"], - headbutt: ["1L1"], - healbell: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hypervoice: ["1L1"], - icebeam: ["1L1"], - icepunch: ["1L1"], - icespinner: ["1L1"], - icywind: ["1L1"], - incinerate: ["1L1"], - knockoff: ["1L1"], - lastresort: ["1L1"], - lightscreen: ["1L1"], - magicalleaf: ["1L1"], - magiccoat: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - metronome: ["1L1"], - mimic: ["1L1"], - mistyexplosion: ["1L1"], - mistyterrain: ["1L1"], - mudslap: ["1L1"], - nastyplot: ["1L1"], - naturalgift: ["1L1"], - nightmare: ["1L1"], - painsplit: ["1L1"], - playnice: ["1L1"], - playrough: ["1L1"], - pound: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - psychic: ["1L1"], - psychicnoise: ["1L1"], - psychup: ["1L1"], - psyshock: ["1L1"], - psywave: ["1L1"], - rage: ["1L1"], - raindance: ["1L1"], - recycle: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - roleplay: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - sandstorm: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - seismictoss: ["1L1"], - selfdestruct: ["1L1"], - shadowball: ["1L1"], - shockwave: ["1L1"], - sing: ["1L1"], - skillswap: ["1L1"], - skullbash: ["1L1"], - sleeptalk: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - spitup: ["1L1"], - stealthrock: ["1L1"], - steelroller: ["1L1"], - stockpile: ["1L1"], - storedpower: ["1L1"], - strength: ["1L1"], - submission: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swallow: ["1L1"], - sweetkiss: ["1L1"], - swift: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - telekinesis: ["1L1"], - teleport: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderpunch: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - triattack: ["1L1"], - uproar: ["1L1"], - wakeupslap: ["1L1"], - watergun: ["1L1"], - waterpulse: ["1L1"], - wildcharge: ["1L1"], - workup: ["1L1"], - zapcannon: ["1L1"], - zenheadbutt: ["1L1"], - }, - encounters: [ - {generation: 1, level: 3}, - {generation: 2, level: 3}, - {generation: 3, level: 3}, - ], - }, - wigglytuff: { - learnset: { - alluringvoice: ["1L1"], - allyswitch: ["1L1"], - amnesia: ["1L1"], - attract: ["1L1"], - batonpass: ["1L1"], - bide: ["1L1"], - blizzard: ["1L1"], - bodypress: ["1L1"], - bodyslam: ["1L1"], - bounce: ["1L1"], - brickbreak: ["1L1"], - bubblebeam: ["1L1"], - calmmind: ["1L1"], - captivate: ["1L1"], - chargebeam: ["1L1"], - charm: ["1L1"], - chillingwater: ["1L1"], - confide: ["1L1"], - copycat: ["1L1"], - counter: ["1L1"], - covet: ["1L1"], - curse: ["1L1"], - darkpulse: ["1L1"], - dazzlinggleam: ["1L1"], - defensecurl: ["1L1"], - detect: ["1L1"], - dig: ["1L1"], - disable: ["1L1"], - disarmingvoice: ["1L1"], - doubleedge: ["1L1"], - doubleslap: ["1L1"], - doubleteam: ["1L1"], - drainingkiss: ["1L1"], - drainpunch: ["1L1"], - dreameater: ["1L1"], - dynamicpunch: ["1L1"], - echoedvoice: ["1L1"], - encore: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - expandingforce: ["1L1"], - facade: ["1L1"], - faketears: ["1L1"], - fireblast: ["1L1"], - firepunch: ["1L1"], - flamethrower: ["1L1"], - flash: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - focuspunch: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - gravity: ["1L1"], - gyroball: ["1L1"], - headbutt: ["1L1"], - healbell: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - hypervoice: ["1L1"], - icebeam: ["1L1"], - icepunch: ["1L1"], - icespinner: ["1L1"], - icywind: ["1L1"], - incinerate: ["1L1"], - knockoff: ["1L1"], - laserfocus: ["1L1"], - lastresort: ["1L1"], - lightscreen: ["1L1"], - magicalleaf: ["1L1"], - magiccoat: ["1L1"], - magicroom: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - metronome: ["1L1"], - mimic: ["1L1"], - minimize: ["1L1"], - mistyexplosion: ["1L1"], - mistyterrain: ["1L1"], - mudslap: ["1L1"], - nastyplot: ["1L1"], - naturalgift: ["1L1"], - nightmare: ["1L1"], - painsplit: ["1L1"], - playrough: ["1L1"], - pound: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - psychic: ["1L1"], - psychicnoise: ["1L1"], - psychup: ["1L1"], - psyshock: ["1L1"], - psywave: ["1L1"], - rage: ["1L1"], - raindance: ["1L1"], - recycle: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - roleplay: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - sandstorm: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - seismictoss: ["1L1"], - selfdestruct: ["1L1"], - shadowball: ["1L1"], - shockwave: ["1L1"], - sing: ["1L1"], - skillswap: ["1L1"], - skullbash: ["1L1"], - sleeptalk: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - spitup: ["1L1"], - stealthrock: ["1L1"], - steelroller: ["1L1"], - stockpile: ["1L1"], - storedpower: ["1L1"], - strength: ["1L1"], - submission: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swallow: ["1L1"], - sweetkiss: ["1L1"], - swift: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - telekinesis: ["1L1"], - teleport: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderpunch: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - triattack: ["1L1"], - uproar: ["1L1"], - watergun: ["1L1"], - waterpulse: ["1L1"], - wildcharge: ["1L1"], - workup: ["1L1"], - zapcannon: ["1L1"], - zenheadbutt: ["1L1"], - }, - encounters: [ - {generation: 1, level: 22}, - ], - }, - zubat: { - learnset: { - absorb: ["1L1"], - acrobatics: ["1L1"], - aerialace: ["1L1"], - agility: ["1L1"], - aircutter: ["1L1"], - airslash: ["1L1"], - assurance: ["1L1"], - astonish: ["1L1"], - attract: ["1L1"], - bide: ["1L1"], - bite: ["1L1"], - bravebird: ["1L1"], - captivate: ["1L1"], - confide: ["1L1"], - confuseray: ["1L1"], - crunch: ["1L1"], - curse: ["1L1"], - defog: ["1L1"], - detect: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dualwingbeat: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - feintattack: ["1L1"], - fly: ["1L1"], - frustration: ["1L1"], - gigadrain: ["1L1"], - gust: ["1L1"], - haze: ["1L1"], - headbutt: ["1L1"], - heatwave: ["1L1"], - hiddenpower: ["1L1"], - hypnosis: ["1L1"], - leechlife: ["1L1"], - meanlook: ["1L1"], - megadrain: ["1L1"], - mimic: ["1L1"], - nastyplot: ["1L1"], - naturalgift: ["1L1"], - ominouswind: ["1L1"], - payback: ["1L1"], - pluck: ["1L1"], - poisonfang: ["1L1"], - protect: ["1L1"], - pursuit: ["1L1"], - quickattack: ["1L1"], - quickguard: ["1L1"], - rage: ["1L1"], - raindance: ["1L1"], - razorwind: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roost: ["1L1"], - round: ["1L1"], - secretpower: ["1L1"], - shadowball: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - steelwing: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - superfang: ["1L1"], - supersonic: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - tailwind: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - thief: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - twister: ["1L1"], - uproar: ["1L1"], - uturn: ["1L1"], - venomdrench: ["1L1"], - venoshock: ["1L1"], - whirlwind: ["1L1"], - wingattack: ["1L1"], - zenheadbutt: ["1L1"], - }, - encounters: [ - {generation: 1, level: 6}, - {generation: 2, level: 2}, - ], - }, - golbat: { - learnset: { - absorb: ["1L1"], - acrobatics: ["1L1"], - aerialace: ["1L1"], - agility: ["1L1"], - aircutter: ["1L1"], - airslash: ["1L1"], - assurance: ["1L1"], - astonish: ["1L1"], - attract: ["1L1"], - bide: ["1L1"], - bite: ["1L1"], - bravebird: ["1L1"], - captivate: ["1L1"], - confide: ["1L1"], - confuseray: ["1L1"], - crunch: ["1L1"], - curse: ["1L1"], - defog: ["1L1"], - detect: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dualwingbeat: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fly: ["1L1"], - frustration: ["1L1"], - gigadrain: ["1L1"], - gigaimpact: ["1L1"], - haze: ["1L1"], - headbutt: ["1L1"], - heatwave: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - leechlife: ["1L1"], - meanlook: ["1L1"], - megadrain: ["1L1"], - mimic: ["1L1"], - nastyplot: ["1L1"], - naturalgift: ["1L1"], - ominouswind: ["1L1"], - payback: ["1L1"], - pluck: ["1L1"], - poisonfang: ["1L1"], - protect: ["1L1"], - quickattack: ["1L1"], - quickguard: ["1L1"], - rage: ["1L1"], - raindance: ["1L1"], - razorwind: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roost: ["1L1"], - round: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - shadowball: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - steelwing: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - superfang: ["1L1"], - supersonic: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - tailwind: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - thief: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - twister: ["1L1"], - uproar: ["1L1"], - uturn: ["1L1"], - venomdrench: ["1L1"], - venoshock: ["1L1"], - whirlwind: ["1L1"], - wingattack: ["1L1"], - zenheadbutt: ["1L1"], - }, - encounters: [ - {generation: 2, level: 13}, - {generation: 3, level: 5}, - {generation: 4, level: 10}, - {generation: 6, level: 19, maxEggMoves: 1}, - {generation: 7, level: 20}, - ], - }, - crobat: { - learnset: { - absorb: ["1L1"], - acrobatics: ["1L1"], - aerialace: ["1L1"], - agility: ["1L1"], - aircutter: ["1L1"], - airslash: ["1L1"], - assurance: ["1L1"], - astonish: ["1L1"], - attract: ["1L1"], - bite: ["1L1"], - bravebird: ["1L1"], - captivate: ["1L1"], - confide: ["1L1"], - confuseray: ["1L1"], - crosspoison: ["1L1"], - crunch: ["1L1"], - curse: ["1L1"], - darkpulse: ["1L1"], - defog: ["1L1"], - detect: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dualwingbeat: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fly: ["1L1"], - frustration: ["1L1"], - gigadrain: ["1L1"], - gigaimpact: ["1L1"], - haze: ["1L1"], - heatwave: ["1L1"], - hex: ["1L1"], - hiddenpower: ["1L1"], - hurricane: ["1L1"], - hyperbeam: ["1L1"], - leechlife: ["1L1"], - meanlook: ["1L1"], - mimic: ["1L1"], - nastyplot: ["1L1"], - naturalgift: ["1L1"], - ominouswind: ["1L1"], - payback: ["1L1"], - pluck: ["1L1"], - poisonfang: ["1L1"], - protect: ["1L1"], - quickguard: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roost: ["1L1"], - round: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - shadowball: ["1L1"], - skyattack: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - steelwing: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - superfang: ["1L1"], - supersonic: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - tailwind: ["1L1"], - taunt: ["1L1"], - thief: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - twister: ["1L1"], - uproar: ["1L1"], - uturn: ["1L1"], - venomdrench: ["1L1"], - venoshock: ["1L1"], - wingattack: ["1L1"], - xscissor: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 4, level: 30, gender: "M", nature: "Timid", moves: ["1L1"], pokeball: "cherishball"}, - {generation: 7, level: 64, gender: "M", moves: ["1L1"], pokeball: "cherishball"}, - ], - }, - oddish: { - learnset: { - absorb: ["1L1"], - acid: ["1L1"], - acidspray: ["1L1"], - afteryou: ["1L1"], - attract: ["1L1"], - bide: ["1L1"], - bulletseed: ["1L1"], - captivate: ["1L1"], - charm: ["1L1"], - confide: ["1L1"], - curse: ["1L1"], - cut: ["1L1"], - dazzlinggleam: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - flail: ["1L1"], - flash: ["1L1"], - frustration: ["1L1"], - gastroacid: ["1L1"], - gigadrain: ["1L1"], - grassknot: ["1L1"], - grassyglide: ["1L1"], - grassyterrain: ["1L1"], - growth: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - infestation: ["1L1"], - ingrain: ["1L1"], - leafstorm: ["1L1"], - leechseed: ["1L1"], - luckychant: ["1L1"], - magicalleaf: ["1L1"], - megadrain: ["1L1"], - mimic: ["1L1"], - moonblast: ["1L1"], - moonlight: ["1L1"], - naturalgift: ["1L1"], - naturepower: ["1L1"], - petaldance: ["1L1"], - poisonpowder: ["1L1"], - protect: ["1L1"], - rage: ["1L1"], - razorleaf: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - round: ["1L1"], - secretpower: ["1L1"], - seedbomb: ["1L1"], - sleeppowder: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - strengthsap: ["1L1"], - stunspore: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - sweetscent: ["1L1"], - swordsdance: ["1L1"], - synthesis: ["1L1"], - takedown: ["1L1"], - teeterdance: ["1L1"], - terablast: ["1L1"], - tickle: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - venoshock: ["1L1"], - worryseed: ["1L1"], - }, - eventData: [ - {generation: 3, level: 26, gender: "M", nature: "Quirky", ivs: {hp: 23, atk: 24, def: 20, spa: 21, spd: 9, spe: 16}, moves: ["1L1"], pokeball: "pokeball"}, - {generation: 3, level: 5, shiny: 1, moves: ["1L1"], pokeball: "pokeball"}, - ], - encounters: [ - {generation: 1, level: 12}, - ], - }, - gloom: { - learnset: { - absorb: ["1L1"], - acid: ["1L1"], - acidspray: ["1L1"], - afteryou: ["1L1"], - attract: ["1L1"], - bide: ["1L1"], - bulletseed: ["1L1"], - captivate: ["1L1"], - charm: ["1L1"], - confide: ["1L1"], - curse: ["1L1"], - cut: ["1L1"], - dazzlinggleam: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - drainpunch: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - flash: ["1L1"], - fling: ["1L1"], - frustration: ["1L1"], - gastroacid: ["1L1"], - gigadrain: ["1L1"], - grassknot: ["1L1"], - grassyglide: ["1L1"], - grassyterrain: ["1L1"], - growth: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - infestation: ["1L1"], - leafstorm: ["1L1"], - luckychant: ["1L1"], - magicalleaf: ["1L1"], - megadrain: ["1L1"], - mimic: ["1L1"], - moonblast: ["1L1"], - moonlight: ["1L1"], - naturalgift: ["1L1"], - naturepower: ["1L1"], - petalblizzard: ["1L1"], - petaldance: ["1L1"], - poisonpowder: ["1L1"], - pollenpuff: ["1L1"], - protect: ["1L1"], - rage: ["1L1"], - razorleaf: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - round: ["1L1"], - secretpower: ["1L1"], - seedbomb: ["1L1"], - sleeppowder: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - stunspore: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - sweetscent: ["1L1"], - swordsdance: ["1L1"], - synthesis: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - venoshock: ["1L1"], - worryseed: ["1L1"], - }, - eventData: [ - {generation: 3, level: 50, moves: ["1L1"], pokeball: "pokeball"}, - ], - encounters: [ - {generation: 2, level: 14}, - {generation: 4, level: 14}, - {generation: 6, level: 18, maxEggMoves: 1}, - ], - }, - vileplume: { - learnset: { - absorb: ["1L1"], - acid: ["1L1"], - acidspray: ["1L1"], - afteryou: ["1L1"], - aromatherapy: ["1L1"], - attract: ["1L1"], - bide: ["1L1"], - bodyslam: ["1L1"], - bulletseed: ["1L1"], - captivate: ["1L1"], - charm: ["1L1"], - confide: ["1L1"], - corrosivegas: ["1L1"], - curse: ["1L1"], - cut: ["1L1"], - dazzlinggleam: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - drainpunch: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - flash: ["1L1"], - fling: ["1L1"], - frustration: ["1L1"], - gastroacid: ["1L1"], - gigadrain: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - grassyglide: ["1L1"], - grassyterrain: ["1L1"], - growth: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - infestation: ["1L1"], - leafstorm: ["1L1"], - magicalleaf: ["1L1"], - megadrain: ["1L1"], - mimic: ["1L1"], - moonblast: ["1L1"], - moonlight: ["1L1"], - naturalgift: ["1L1"], - naturepower: ["1L1"], - petalblizzard: ["1L1"], - petaldance: ["1L1"], - poisonpowder: ["1L1"], - pollenpuff: ["1L1"], - protect: ["1L1"], - rage: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - secretpower: ["1L1"], - seedbomb: ["1L1"], - sleeppowder: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - sludgewave: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - solarblade: ["1L1"], - stunspore: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - sweetscent: ["1L1"], - swordsdance: ["1L1"], - synthesis: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - venoshock: ["1L1"], - weatherball: ["1L1"], - worryseed: ["1L1"], - }, - }, - bellossom: { - learnset: { - absorb: ["1L1"], - acid: ["1L1"], - acidspray: ["1L1"], - afteryou: ["1L1"], - attract: ["1L1"], - batonpass: ["1L1"], - bulletseed: ["1L1"], - captivate: ["1L1"], - charm: ["1L1"], - confide: ["1L1"], - curse: ["1L1"], - cut: ["1L1"], - dazzlinggleam: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - drainpunch: ["1L1"], - encore: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - flash: ["1L1"], - fling: ["1L1"], - frustration: ["1L1"], - gastroacid: ["1L1"], - gigadrain: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - grassyglide: ["1L1"], - grassyterrain: ["1L1"], - growth: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - infestation: ["1L1"], - laserfocus: ["1L1"], - leafblade: ["1L1"], - leafstorm: ["1L1"], - magicalleaf: ["1L1"], - megadrain: ["1L1"], - mimic: ["1L1"], - moonblast: ["1L1"], - moonlight: ["1L1"], - naturalgift: ["1L1"], - naturepower: ["1L1"], - petalblizzard: ["1L1"], - petaldance: ["1L1"], - playrough: ["1L1"], - poisonpowder: ["1L1"], - pollenpuff: ["1L1"], - protect: ["1L1"], - quiverdance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - secretpower: ["1L1"], - seedbomb: ["1L1"], - sleeppowder: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - solarblade: ["1L1"], - stunspore: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - sweetscent: ["1L1"], - swordsdance: ["1L1"], - synthesis: ["1L1"], - terablast: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - tripleaxel: ["1L1"], - uproar: ["1L1"], - venoshock: ["1L1"], - weatherball: ["1L1"], - worryseed: ["1L1"], - }, - }, - paras: { - learnset: { - absorb: ["1L1"], - aerialace: ["1L1"], - afteryou: ["1L1"], - agility: ["1L1"], - aromatherapy: ["1L1"], - attract: ["1L1"], - bide: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - bugbite: ["1L1"], - bulletseed: ["1L1"], - captivate: ["1L1"], - confide: ["1L1"], - counter: ["1L1"], - crosspoison: ["1L1"], - curse: ["1L1"], - cut: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - falseswipe: ["1L1"], - fellstinger: ["1L1"], - flail: ["1L1"], - flash: ["1L1"], - frustration: ["1L1"], - furycutter: ["1L1"], - furyswipes: ["1L1"], - gigadrain: ["1L1"], - grassknot: ["1L1"], - grassyterrain: ["1L1"], - growth: ["1L1"], - headbutt: ["1L1"], - hiddenpower: ["1L1"], - honeclaws: ["1L1"], - knockoff: ["1L1"], - leechlife: ["1L1"], - leechseed: ["1L1"], - lightscreen: ["1L1"], - megadrain: ["1L1"], - metalclaw: ["1L1"], - mimic: ["1L1"], - naturalgift: ["1L1"], - naturepower: ["1L1"], - poisonpowder: ["1L1"], - protect: ["1L1"], - psybeam: ["1L1"], - pursuit: ["1L1"], - rage: ["1L1"], - ragepowder: ["1L1"], - reflect: ["1L1"], - refresh: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rocksmash: ["1L1"], - rototiller: ["1L1"], - round: ["1L1"], - scratch: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - seedbomb: ["1L1"], - skullbash: ["1L1"], - slash: ["1L1"], - sleeppowder: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - spore: ["1L1"], - stringshot: ["1L1"], - strugglebug: ["1L1"], - stunspore: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - sweetscent: ["1L1"], - swordsdance: ["1L1"], - synthesis: ["1L1"], - takedown: ["1L1"], - thief: ["1L1"], - toxic: ["1L1"], - venoshock: ["1L1"], - wideguard: ["1L1"], - worryseed: ["1L1"], - xscissor: ["1L1"], - }, - eventData: [ - {generation: 3, level: 28, abilities: ["1L1"], moves: ["1L1"]}, - ], - encounters: [ - {generation: 1, level: 8}, - ], - }, - parasect: { - learnset: { - absorb: ["1L1"], - aerialace: ["1L1"], - afteryou: ["1L1"], - aromatherapy: ["1L1"], - attract: ["1L1"], - bide: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - bugbite: ["1L1"], - bulletseed: ["1L1"], - captivate: ["1L1"], - confide: ["1L1"], - counter: ["1L1"], - crosspoison: ["1L1"], - curse: ["1L1"], - cut: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - falseswipe: ["1L1"], - flash: ["1L1"], - frustration: ["1L1"], - furycutter: ["1L1"], - furyswipes: ["1L1"], - gigadrain: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - growth: ["1L1"], - headbutt: ["1L1"], - hiddenpower: ["1L1"], - honeclaws: ["1L1"], - hyperbeam: ["1L1"], - knockoff: ["1L1"], - leechlife: ["1L1"], - leechseed: ["1L1"], - lightscreen: ["1L1"], - megadrain: ["1L1"], - mimic: ["1L1"], - naturalgift: ["1L1"], - naturepower: ["1L1"], - poisonpowder: ["1L1"], - protect: ["1L1"], - rage: ["1L1"], - ragepowder: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rocksmash: ["1L1"], - round: ["1L1"], - scratch: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - seedbomb: ["1L1"], - skullbash: ["1L1"], - slash: ["1L1"], - sleeppowder: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - spore: ["1L1"], - stringshot: ["1L1"], - strugglebug: ["1L1"], - stunspore: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - sweetscent: ["1L1"], - swordsdance: ["1L1"], - synthesis: ["1L1"], - takedown: ["1L1"], - thief: ["1L1"], - throatchop: ["1L1"], - toxic: ["1L1"], - venoshock: ["1L1"], - worryseed: ["1L1"], - xscissor: ["1L1"], - }, - encounters: [ - {generation: 1, level: 13}, - {generation: 2, level: 5}, - ], - }, - venonat: { - learnset: { - acidspray: ["1L1"], - agility: ["1L1"], - attract: ["1L1"], - batonpass: ["1L1"], - bide: ["1L1"], - bugbite: ["1L1"], - bugbuzz: ["1L1"], - captivate: ["1L1"], - confide: ["1L1"], - confuseray: ["1L1"], - confusion: ["1L1"], - curse: ["1L1"], - disable: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - flash: ["1L1"], - foresight: ["1L1"], - frustration: ["1L1"], - gigadrain: ["1L1"], - headbutt: ["1L1"], - hiddenpower: ["1L1"], - infestation: ["1L1"], - leechlife: ["1L1"], - lunge: ["1L1"], - megadrain: ["1L1"], - mimic: ["1L1"], - morningsun: ["1L1"], - naturalgift: ["1L1"], - nightshade: ["1L1"], - poisonfang: ["1L1"], - poisonpowder: ["1L1"], - pounce: ["1L1"], - protect: ["1L1"], - psybeam: ["1L1"], - psychic: ["1L1"], - psychicnoise: ["1L1"], - psywave: ["1L1"], - rage: ["1L1"], - ragepowder: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - round: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - signalbeam: ["1L1"], - skillswap: ["1L1"], - skittersmack: ["1L1"], - sleeppowder: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - stringshot: ["1L1"], - strugglebug: ["1L1"], - stunspore: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - supersonic: ["1L1"], - swagger: ["1L1"], - sweetscent: ["1L1"], - swift: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - toxic: ["1L1"], - toxicspikes: ["1L1"], - venoshock: ["1L1"], - zenheadbutt: ["1L1"], - }, - encounters: [ - {generation: 1, level: 13}, - ], - }, - venomoth: { - learnset: { - acidspray: ["1L1"], - acrobatics: ["1L1"], - aerialace: ["1L1"], - agility: ["1L1"], - aircutter: ["1L1"], - airslash: ["1L1"], - attract: ["1L1"], - batonpass: ["1L1"], - bide: ["1L1"], - bugbite: ["1L1"], - bugbuzz: ["1L1"], - captivate: ["1L1"], - confide: ["1L1"], - confuseray: ["1L1"], - confusion: ["1L1"], - curse: ["1L1"], - defog: ["1L1"], - disable: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dreameater: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - flash: ["1L1"], - foresight: ["1L1"], - frustration: ["1L1"], - gigadrain: ["1L1"], - gigaimpact: ["1L1"], - gust: ["1L1"], - headbutt: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - infestation: ["1L1"], - leechlife: ["1L1"], - lunge: ["1L1"], - megadrain: ["1L1"], - mimic: ["1L1"], - naturalgift: ["1L1"], - nightshade: ["1L1"], - ominouswind: ["1L1"], - poisonfang: ["1L1"], - poisonpowder: ["1L1"], - pounce: ["1L1"], - protect: ["1L1"], - psybeam: ["1L1"], - psychic: ["1L1"], - psychicnoise: ["1L1"], - psywave: ["1L1"], - quiverdance: ["1L1"], - rage: ["1L1"], - razorwind: ["1L1"], - reflect: ["1L1"], - refresh: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roost: ["1L1"], - round: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - signalbeam: ["1L1"], - silverwind: ["1L1"], - skillswap: ["1L1"], - skittersmack: ["1L1"], - sleeppowder: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - sludgewave: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - stringshot: ["1L1"], - strugglebug: ["1L1"], - stunspore: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - supersonic: ["1L1"], - swagger: ["1L1"], - sweetscent: ["1L1"], - swift: ["1L1"], - tackle: ["1L1"], - tailwind: ["1L1"], - takedown: ["1L1"], - teleport: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - toxic: ["1L1"], - toxicspikes: ["1L1"], - twister: ["1L1"], - uturn: ["1L1"], - venoshock: ["1L1"], - whirlwind: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 3, level: 32, abilities: ["1L1"], moves: ["1L1"]}, - ], - encounters: [ - {generation: 1, level: 30}, - {generation: 2, level: 10}, - {generation: 4, level: 8}, - {generation: 6, level: 30}, - ], - }, - diglett: { - learnset: { - aerialace: ["1L1"], - agility: ["1L1"], - allyswitch: ["1L1"], - ancientpower: ["1L1"], - assurance: ["1L1"], - astonish: ["1L1"], - attract: ["1L1"], - beatup: ["1L1"], - bide: ["1L1"], - bodyslam: ["1L1"], - bulldoze: ["1L1"], - captivate: ["1L1"], - charm: ["1L1"], - confide: ["1L1"], - curse: ["1L1"], - cut: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - echoedvoice: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - feintattack: ["1L1"], - finalgambit: ["1L1"], - fissure: ["1L1"], - foulplay: ["1L1"], - frustration: ["1L1"], - furyswipes: ["1L1"], - growl: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - honeclaws: ["1L1"], - magnitude: ["1L1"], - memento: ["1L1"], - mimic: ["1L1"], - mudbomb: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - protect: ["1L1"], - pursuit: ["1L1"], - rage: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - reversal: ["1L1"], - rockblast: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - sandattack: ["1L1"], - sandstorm: ["1L1"], - sandtomb: ["1L1"], - scorchingsands: ["1L1"], - scratch: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - shadowclaw: ["1L1"], - slash: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - smackdown: ["1L1"], - snore: ["1L1"], - stealthrock: ["1L1"], - stompingtantrum: ["1L1"], - stoneedge: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swordsdance: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - throatchop: ["1L1"], - toxic: ["1L1"], - uproar: ["1L1"], - workup: ["1L1"], - }, - encounters: [ - {generation: 1, level: 15}, - {generation: 2, level: 2}, - ], - }, - diglettalola: { - learnset: { - aerialace: ["1L1"], - agility: ["1L1"], - allyswitch: ["1L1"], - ancientpower: ["1L1"], - assurance: ["1L1"], - astonish: ["1L1"], - attract: ["1L1"], - beatup: ["1L1"], - bodyslam: ["1L1"], - bulldoze: ["1L1"], - charm: ["1L1"], - confide: ["1L1"], - dig: ["1L1"], - doubleteam: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - echoedvoice: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - feintattack: ["1L1"], - finalgambit: ["1L1"], - fissure: ["1L1"], - flashcannon: ["1L1"], - foulplay: ["1L1"], - frustration: ["1L1"], - furyswipes: ["1L1"], - growl: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - honeclaws: ["1L1"], - irondefense: ["1L1"], - ironhead: ["1L1"], - magnitude: ["1L1"], - memento: ["1L1"], - metalclaw: ["1L1"], - metalsound: ["1L1"], - mudbomb: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - protect: ["1L1"], - pursuit: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - reversal: ["1L1"], - rockblast: ["1L1"], - rockslide: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - sandattack: ["1L1"], - sandstorm: ["1L1"], - sandtomb: ["1L1"], - scaryface: ["1L1"], - scorchingsands: ["1L1"], - scratch: ["1L1"], - screech: ["1L1"], - shadowclaw: ["1L1"], - slash: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - smackdown: ["1L1"], - snore: ["1L1"], - stealthrock: ["1L1"], - steelbeam: ["1L1"], - stompingtantrum: ["1L1"], - stoneedge: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swordsdance: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thrash: ["1L1"], - toxic: ["1L1"], - uproar: ["1L1"], - workup: ["1L1"], - }, - eventData: [ - {generation: 7, level: 10, abilities: ["1L1"], moves: ["1L1"], pokeball: "cherishball"}, - ], - }, - dugtrio: { - learnset: { - aerialace: ["1L1"], - agility: ["1L1"], - allyswitch: ["1L1"], - assurance: ["1L1"], - astonish: ["1L1"], - attract: ["1L1"], - beatup: ["1L1"], - bide: ["1L1"], - bodyslam: ["1L1"], - bulldoze: ["1L1"], - captivate: ["1L1"], - charm: ["1L1"], - confide: ["1L1"], - curse: ["1L1"], - cut: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - echoedvoice: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fissure: ["1L1"], - foulplay: ["1L1"], - frustration: ["1L1"], - furyswipes: ["1L1"], - gigaimpact: ["1L1"], - growl: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - highhorsepower: ["1L1"], - honeclaws: ["1L1"], - hyperbeam: ["1L1"], - magnitude: ["1L1"], - mimic: ["1L1"], - mudbomb: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - nightslash: ["1L1"], - protect: ["1L1"], - rage: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - reversal: ["1L1"], - rockblast: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - rototiller: ["1L1"], - round: ["1L1"], - sandattack: ["1L1"], - sandstorm: ["1L1"], - sandtomb: ["1L1"], - scaryface: ["1L1"], - scorchingsands: ["1L1"], - scratch: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - shadowclaw: ["1L1"], - slash: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - sludgewave: ["1L1"], - smackdown: ["1L1"], - snore: ["1L1"], - stealthrock: ["1L1"], - stompingtantrum: ["1L1"], - stoneedge: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swordsdance: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - throatchop: ["1L1"], - toxic: ["1L1"], - triattack: ["1L1"], - uproar: ["1L1"], - workup: ["1L1"], - }, - eventData: [ - {generation: 3, level: 40, moves: ["1L1"]}, - ], - encounters: [ - {generation: 1, level: 15}, - {generation: 2, level: 5}, - {generation: 4, level: 19}, - ], - }, - dugtrioalola: { - learnset: { - aerialace: ["1L1"], - agility: ["1L1"], - allyswitch: ["1L1"], - assurance: ["1L1"], - astonish: ["1L1"], - attract: ["1L1"], - beatup: ["1L1"], - bodyslam: ["1L1"], - bulldoze: ["1L1"], - charm: ["1L1"], - confide: ["1L1"], - curse: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - echoedvoice: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fissure: ["1L1"], - flashcannon: ["1L1"], - foulplay: ["1L1"], - frustration: ["1L1"], - furyswipes: ["1L1"], - gigaimpact: ["1L1"], - growl: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - highhorsepower: ["1L1"], - hyperbeam: ["1L1"], - irondefense: ["1L1"], - ironhead: ["1L1"], - magnitude: ["1L1"], - metalclaw: ["1L1"], - metalsound: ["1L1"], - mudbomb: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - nightslash: ["1L1"], - protect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - reversal: ["1L1"], - rockblast: ["1L1"], - rockslide: ["1L1"], - rocktomb: ["1L1"], - rototiller: ["1L1"], - round: ["1L1"], - sandattack: ["1L1"], - sandstorm: ["1L1"], - sandtomb: ["1L1"], - scaryface: ["1L1"], - scorchingsands: ["1L1"], - scratch: ["1L1"], - screech: ["1L1"], - shadowclaw: ["1L1"], - slash: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - sludgewave: ["1L1"], - smackdown: ["1L1"], - snore: ["1L1"], - stealthrock: ["1L1"], - steelbeam: ["1L1"], - stompingtantrum: ["1L1"], - stoneedge: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swordsdance: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - throatchop: ["1L1"], - toxic: ["1L1"], - triattack: ["1L1"], - uproar: ["1L1"], - workup: ["1L1"], - }, - }, - meowth: { - learnset: { - aerialace: ["1L1"], - agility: ["1L1"], - amnesia: ["1L1"], - assist: ["1L1"], - assurance: ["1L1"], - attract: ["1L1"], - bide: ["1L1"], - bite: ["1L1"], - bodyslam: ["1L1"], - bubblebeam: ["1L1"], - captivate: ["1L1"], - charm: ["1L1"], - chillingwater: ["1L1"], - confide: ["1L1"], - covet: ["1L1"], - curse: ["1L1"], - cut: ["1L1"], - darkpulse: ["1L1"], - defensecurl: ["1L1"], - detect: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dreameater: ["1L1"], - echoedvoice: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fakeout: ["1L1"], - faketears: ["1L1"], - falseswipe: ["1L1"], - feint: ["1L1"], - feintattack: ["1L1"], - flail: ["1L1"], - flash: ["1L1"], - foulplay: ["1L1"], - frustration: ["1L1"], - furyswipes: ["1L1"], - growl: ["1L1"], - gunkshot: ["1L1"], - happyhour: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - honeclaws: ["1L1"], - hypervoice: ["1L1"], - hypnosis: ["1L1"], - icywind: ["1L1"], - irontail: ["1L1"], - knockoff: ["1L1"], - lashout: ["1L1"], - lastresort: ["1L1"], - metalclaw: ["1L1"], - mimic: ["1L1"], - mudslap: ["1L1"], - nastyplot: ["1L1"], - naturalgift: ["1L1"], - nightmare: ["1L1"], - nightslash: ["1L1"], - odorsleuth: ["1L1"], - painsplit: ["1L1"], - payback: ["1L1"], - payday: ["1L1"], - petaldance: ["1L1"], - playrough: ["1L1"], - powergem: ["1L1"], - protect: ["1L1"], - psychup: ["1L1"], - punishment: ["1L1"], - rage: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - round: ["1L1"], - scratch: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - seedbomb: ["1L1"], - shadowball: ["1L1"], - shadowclaw: ["1L1"], - shockwave: ["1L1"], - sing: ["1L1"], - skullbash: ["1L1"], - slash: ["1L1"], - sleeptalk: ["1L1"], - snarl: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - spite: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - tailwhip: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - throatchop: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderwave: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - uproar: ["1L1"], - uturn: ["1L1"], - watergun: ["1L1"], - waterpulse: ["1L1"], - workup: ["1L1"], - zapcannon: ["1L1"], - }, - eventData: [ - {generation: 3, level: 5, shiny: 1, moves: ["1L1"], pokeball: "pokeball"}, - {generation: 3, level: 5, moves: ["1L1"], pokeball: "pokeball"}, - {generation: 3, level: 10, gender: "M", moves: ["1L1"], pokeball: "pokeball"}, - {generation: 3, level: 22, moves: ["1L1"]}, - {generation: 4, level: 21, gender: "F", nature: "Jolly", abilities: ["1L1"], moves: ["1L1"], pokeball: "cherishball"}, - {generation: 4, level: 10, gender: "M", nature: "Jolly", abilities: ["1L1"], moves: ["1L1"], pokeball: "cherishball"}, - {generation: 5, level: 15, gender: "M", abilities: ["1L1"], moves: ["1L1"], pokeball: "cherishball"}, - {generation: 6, level: 20, abilities: ["1L1"], moves: ["1L1"], pokeball: "cherishball"}, - ], - encounters: [ - {generation: 1, level: 10}, - {generation: 3, level: 3, gender: "M", nature: "Naive", ivs: {hp: 4, atk: 5, def: 4, spa: 5, spd: 4, spe: 4}, abilities: ["1L1"], pokeball: "pokeball"}, - ], - }, - meowthalola: { - learnset: { - aerialace: ["1L1"], - agility: ["1L1"], - amnesia: ["1L1"], - assist: ["1L1"], - assurance: ["1L1"], - attract: ["1L1"], - bite: ["1L1"], - bodyslam: ["1L1"], - captivate: ["1L1"], - charm: ["1L1"], - chillingwater: ["1L1"], - confide: ["1L1"], - confuseray: ["1L1"], - covet: ["1L1"], - curse: ["1L1"], - darkpulse: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dreameater: ["1L1"], - echoedvoice: ["1L1"], - embargo: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fakeout: ["1L1"], - faketears: ["1L1"], - feint: ["1L1"], - feintattack: ["1L1"], - flail: ["1L1"], - flatter: ["1L1"], - foulplay: ["1L1"], - frustration: ["1L1"], - furyswipes: ["1L1"], - growl: ["1L1"], - gunkshot: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hypervoice: ["1L1"], - hypnosis: ["1L1"], - icywind: ["1L1"], - irontail: ["1L1"], - knockoff: ["1L1"], - lashout: ["1L1"], - lastresort: ["1L1"], - metalclaw: ["1L1"], - nastyplot: ["1L1"], - nightslash: ["1L1"], - partingshot: ["1L1"], - payback: ["1L1"], - payday: ["1L1"], - playrough: ["1L1"], - powergem: ["1L1"], - protect: ["1L1"], - psychup: ["1L1"], - punishment: ["1L1"], - quash: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - round: ["1L1"], - scratch: ["1L1"], - screech: ["1L1"], - seedbomb: ["1L1"], - shadowball: ["1L1"], - shadowclaw: ["1L1"], - shockwave: ["1L1"], - slash: ["1L1"], - sleeptalk: ["1L1"], - snarl: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - spite: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - throatchop: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderwave: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - uproar: ["1L1"], - uturn: ["1L1"], - waterpulse: ["1L1"], - workup: ["1L1"], - }, - }, - meowthgalar: { - learnset: { - aerialace: ["1L1"], - amnesia: ["1L1"], - assurance: ["1L1"], - attract: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - charm: ["1L1"], - covet: ["1L1"], - crunch: ["1L1"], - curse: ["1L1"], - darkpulse: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fakeout: ["1L1"], - faketears: ["1L1"], - falseswipe: ["1L1"], - flail: ["1L1"], - flashcannon: ["1L1"], - fling: ["1L1"], - foulplay: ["1L1"], - furyswipes: ["1L1"], - growl: ["1L1"], - gunkshot: ["1L1"], - gyroball: ["1L1"], - helpinghand: ["1L1"], - honeclaws: ["1L1"], - hypervoice: ["1L1"], - irondefense: ["1L1"], - ironhead: ["1L1"], - irontail: ["1L1"], - knockoff: ["1L1"], - lashout: ["1L1"], - metalclaw: ["1L1"], - metalsound: ["1L1"], - metronome: ["1L1"], - nastyplot: ["1L1"], - nightslash: ["1L1"], - payback: ["1L1"], - payday: ["1L1"], - playrough: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - round: ["1L1"], - scratch: ["1L1"], - screech: ["1L1"], - seedbomb: ["1L1"], - shadowball: ["1L1"], - shadowclaw: ["1L1"], - slash: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - spite: ["1L1"], - stealthrock: ["1L1"], - steelbeam: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swordsdance: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thrash: ["1L1"], - throatchop: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - trailblaze: ["1L1"], - uproar: ["1L1"], - uturn: ["1L1"], - workup: ["1L1"], - xscissor: ["1L1"], - }, - eventData: [ - {generation: 8, level: 15, isHidden: true, moves: ["1L1"], pokeball: "cherishball"}, - ], - }, - persian: { - learnset: { - aerialace: ["1L1"], - agility: ["1L1"], - amnesia: ["1L1"], - assurance: ["1L1"], - attract: ["1L1"], - bide: ["1L1"], - bite: ["1L1"], - bodyslam: ["1L1"], - bubblebeam: ["1L1"], - captivate: ["1L1"], - charm: ["1L1"], - chillingwater: ["1L1"], - confide: ["1L1"], - covet: ["1L1"], - curse: ["1L1"], - cut: ["1L1"], - darkpulse: ["1L1"], - defensecurl: ["1L1"], - detect: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dreameater: ["1L1"], - echoedvoice: ["1L1"], - embargo: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fakeout: ["1L1"], - faketears: ["1L1"], - falseswipe: ["1L1"], - feint: ["1L1"], - feintattack: ["1L1"], - flash: ["1L1"], - foulplay: ["1L1"], - frustration: ["1L1"], - furyswipes: ["1L1"], - gigaimpact: ["1L1"], - growl: ["1L1"], - gunkshot: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - honeclaws: ["1L1"], - hyperbeam: ["1L1"], - hypervoice: ["1L1"], - hypnosis: ["1L1"], - icywind: ["1L1"], - irontail: ["1L1"], - knockoff: ["1L1"], - lashout: ["1L1"], - lastresort: ["1L1"], - metalclaw: ["1L1"], - mimic: ["1L1"], - mudslap: ["1L1"], - nastyplot: ["1L1"], - naturalgift: ["1L1"], - nightmare: ["1L1"], - nightslash: ["1L1"], - painsplit: ["1L1"], - payback: ["1L1"], - payday: ["1L1"], - playrough: ["1L1"], - powergem: ["1L1"], - protect: ["1L1"], - psychup: ["1L1"], - rage: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - roar: ["1L1"], - round: ["1L1"], - scratch: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - seedbomb: ["1L1"], - shadowball: ["1L1"], - shadowclaw: ["1L1"], - shockwave: ["1L1"], - skittersmack: ["1L1"], - skullbash: ["1L1"], - slash: ["1L1"], - sleeptalk: ["1L1"], - snarl: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - spite: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - switcheroo: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - throatchop: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderwave: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - uproar: ["1L1"], - uturn: ["1L1"], - watergun: ["1L1"], - waterpulse: ["1L1"], - workup: ["1L1"], - zapcannon: ["1L1"], - }, - encounters: [ - {generation: 2, level: 18}, - {generation: 4, level: 19}, - ], - }, - persianalola: { - learnset: { - aerialace: ["1L1"], - agility: ["1L1"], - amnesia: ["1L1"], - assurance: ["1L1"], - attract: ["1L1"], - beatup: ["1L1"], - bite: ["1L1"], - bodyslam: ["1L1"], - burningjealousy: ["1L1"], - captivate: ["1L1"], - charm: ["1L1"], - chillingwater: ["1L1"], - confide: ["1L1"], - confuseray: ["1L1"], - covet: ["1L1"], - curse: ["1L1"], - darkpulse: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dreameater: ["1L1"], - echoedvoice: ["1L1"], - embargo: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fakeout: ["1L1"], - faketears: ["1L1"], - feint: ["1L1"], - feintattack: ["1L1"], - foulplay: ["1L1"], - frustration: ["1L1"], - furyswipes: ["1L1"], - gigaimpact: ["1L1"], - growl: ["1L1"], - gunkshot: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - hypervoice: ["1L1"], - hypnosis: ["1L1"], - icywind: ["1L1"], - irontail: ["1L1"], - knockoff: ["1L1"], - lashout: ["1L1"], - lastresort: ["1L1"], - metalclaw: ["1L1"], - nastyplot: ["1L1"], - nightslash: ["1L1"], - payback: ["1L1"], - payday: ["1L1"], - playrough: ["1L1"], - powergem: ["1L1"], - protect: ["1L1"], - psychup: ["1L1"], - quash: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - roar: ["1L1"], - round: ["1L1"], - scratch: ["1L1"], - screech: ["1L1"], - seedbomb: ["1L1"], - shadowball: ["1L1"], - shadowclaw: ["1L1"], - shockwave: ["1L1"], - skittersmack: ["1L1"], - slash: ["1L1"], - sleeptalk: ["1L1"], - smackdown: ["1L1"], - snarl: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - spite: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - switcheroo: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - throatchop: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderwave: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - uproar: ["1L1"], - uturn: ["1L1"], - waterpulse: ["1L1"], - workup: ["1L1"], - }, - }, - perrserker: { - learnset: { - aerialace: ["1L1"], - amnesia: ["1L1"], - assurance: ["1L1"], - attract: ["1L1"], - batonpass: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - charm: ["1L1"], - chillingwater: ["1L1"], - closecombat: ["1L1"], - crunch: ["1L1"], - curse: ["1L1"], - darkpulse: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fakeout: ["1L1"], - faketears: ["1L1"], - falseswipe: ["1L1"], - flashcannon: ["1L1"], - fling: ["1L1"], - foulplay: ["1L1"], - furyswipes: ["1L1"], - gigaimpact: ["1L1"], - growl: ["1L1"], - gunkshot: ["1L1"], - gyroball: ["1L1"], - heavyslam: ["1L1"], - helpinghand: ["1L1"], - honeclaws: ["1L1"], - hyperbeam: ["1L1"], - hypervoice: ["1L1"], - irondefense: ["1L1"], - ironhead: ["1L1"], - irontail: ["1L1"], - knockoff: ["1L1"], - lashout: ["1L1"], - metalburst: ["1L1"], - metalclaw: ["1L1"], - metalsound: ["1L1"], - metronome: ["1L1"], - nastyplot: ["1L1"], - payback: ["1L1"], - payday: ["1L1"], - playrough: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - round: ["1L1"], - scratch: ["1L1"], - screech: ["1L1"], - seedbomb: ["1L1"], - shadowball: ["1L1"], - shadowclaw: ["1L1"], - slash: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - spite: ["1L1"], - stealthrock: ["1L1"], - steelbeam: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swordsdance: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thrash: ["1L1"], - throatchop: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - trailblaze: ["1L1"], - uproar: ["1L1"], - uturn: ["1L1"], - workup: ["1L1"], - xscissor: ["1L1"], - }, - }, - psyduck: { - learnset: { - aerialace: ["1L1"], - amnesia: ["1L1"], - aquatail: ["1L1"], - attract: ["1L1"], - bide: ["1L1"], - blizzard: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - brine: ["1L1"], - bubblebeam: ["1L1"], - calmmind: ["1L1"], - captivate: ["1L1"], - chillingwater: ["1L1"], - clearsmog: ["1L1"], - confide: ["1L1"], - confuseray: ["1L1"], - confusion: ["1L1"], - counter: ["1L1"], - crosschop: ["1L1"], - curse: ["1L1"], - dig: ["1L1"], - disable: ["1L1"], - dive: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dynamicpunch: ["1L1"], - encore: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - flash: ["1L1"], - fling: ["1L1"], - flipturn: ["1L1"], - focuspunch: ["1L1"], - foresight: ["1L1"], - frustration: ["1L1"], - furyswipes: ["1L1"], - futuresight: ["1L1"], - hail: ["1L1"], - haze: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - honeclaws: ["1L1"], - hydropump: ["1L1"], - hypnosis: ["1L1"], - icebeam: ["1L1"], - icepunch: ["1L1"], - icywind: ["1L1"], - irontail: ["1L1"], - knockoff: ["1L1"], - lightscreen: ["1L1"], - liquidation: ["1L1"], - lowkick: ["1L1"], - lowsweep: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - metronome: ["1L1"], - mimic: ["1L1"], - mudbomb: ["1L1"], - muddywater: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - mudsport: ["1L1"], - nastyplot: ["1L1"], - naturalgift: ["1L1"], - payday: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - psybeam: ["1L1"], - psychic: ["1L1"], - psychicnoise: ["1L1"], - psychup: ["1L1"], - psyshock: ["1L1"], - rage: ["1L1"], - raindance: ["1L1"], - refresh: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rocksmash: ["1L1"], - roleplay: ["1L1"], - round: ["1L1"], - scald: ["1L1"], - scratch: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - seismictoss: ["1L1"], - shadowclaw: ["1L1"], - signalbeam: ["1L1"], - simplebeam: ["1L1"], - skillswap: ["1L1"], - skullbash: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - soak: ["1L1"], - strength: ["1L1"], - submission: ["1L1"], - substitute: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - synchronoise: ["1L1"], - tailwhip: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - telekinesis: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - vacuumwave: ["1L1"], - waterfall: ["1L1"], - watergun: ["1L1"], - waterpulse: ["1L1"], - watersport: ["1L1"], - whirlpool: ["1L1"], - wonderroom: ["1L1"], - worryseed: ["1L1"], - yawn: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 3, level: 27, gender: "M", nature: "Lax", ivs: {hp: 31, atk: 16, def: 12, spa: 29, spd: 31, spe: 14}, abilities: ["1L1"], moves: ["1L1"], pokeball: "pokeball"}, - {generation: 3, level: 5, shiny: 1, moves: ["1L1"], pokeball: "pokeball", emeraldEventEgg: true}, - ], - encounters: [ - {generation: 1, level: 15}, - ], - }, - golduck: { - learnset: { - aerialace: ["1L1"], - amnesia: ["1L1"], - aquajet: ["1L1"], - aquatail: ["1L1"], - attract: ["1L1"], - bide: ["1L1"], - blizzard: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - brine: ["1L1"], - bubblebeam: ["1L1"], - calmmind: ["1L1"], - captivate: ["1L1"], - charm: ["1L1"], - chillingwater: ["1L1"], - confide: ["1L1"], - confuseray: ["1L1"], - confusion: ["1L1"], - counter: ["1L1"], - curse: ["1L1"], - dig: ["1L1"], - disable: ["1L1"], - dive: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dynamicpunch: ["1L1"], - encore: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - flash: ["1L1"], - fling: ["1L1"], - flipturn: ["1L1"], - focusblast: ["1L1"], - focuspunch: ["1L1"], - frustration: ["1L1"], - furycutter: ["1L1"], - furyswipes: ["1L1"], - futuresight: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - hail: ["1L1"], - haze: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - honeclaws: ["1L1"], - hydropump: ["1L1"], - hyperbeam: ["1L1"], - icebeam: ["1L1"], - icepunch: ["1L1"], - icywind: ["1L1"], - irontail: ["1L1"], - knockoff: ["1L1"], - laserfocus: ["1L1"], - lightscreen: ["1L1"], - liquidation: ["1L1"], - lowkick: ["1L1"], - lowsweep: ["1L1"], - mefirst: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - metronome: ["1L1"], - mimic: ["1L1"], - muddywater: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - nastyplot: ["1L1"], - naturalgift: ["1L1"], - payday: ["1L1"], - powergem: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - psybeam: ["1L1"], - psychic: ["1L1"], - psychicnoise: ["1L1"], - psychup: ["1L1"], - psyshock: ["1L1"], - rage: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rockclimb: ["1L1"], - rocksmash: ["1L1"], - roleplay: ["1L1"], - round: ["1L1"], - scald: ["1L1"], - scratch: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - seismictoss: ["1L1"], - shadowclaw: ["1L1"], - signalbeam: ["1L1"], - skillswap: ["1L1"], - skullbash: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - soak: ["1L1"], - strength: ["1L1"], - submission: ["1L1"], - substitute: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - tailwhip: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - telekinesis: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - vacuumwave: ["1L1"], - waterfall: ["1L1"], - watergun: ["1L1"], - waterpulse: ["1L1"], - watersport: ["1L1"], - whirlpool: ["1L1"], - wonderroom: ["1L1"], - worryseed: ["1L1"], - yawn: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 3, level: 33, moves: ["1L1"]}, - {generation: 7, level: 50, gender: "M", nature: "Timid", ivs: {hp: 31, atk: 30, def: 31, spa: 31, spd: 31, spe: 31}, isHidden: true, moves: ["1L1"], pokeball: "cherishball"}, - ], - encounters: [ - {generation: 1, level: 15}, - {generation: 2, level: 10}, - {generation: 3, level: 25, pokeball: "safariball"}, - {generation: 4, level: 10}, - ], - }, - mankey: { - learnset: { - acrobatics: ["1L1"], - aerialace: ["1L1"], - assurance: ["1L1"], - attract: ["1L1"], - beatup: ["1L1"], - bide: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - bulkup: ["1L1"], - bulldoze: ["1L1"], - captivate: ["1L1"], - closecombat: ["1L1"], - confide: ["1L1"], - counter: ["1L1"], - covet: ["1L1"], - crosschop: ["1L1"], - curse: ["1L1"], - defensecurl: ["1L1"], - detect: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - drainpunch: ["1L1"], - dualchop: ["1L1"], - dynamicpunch: ["1L1"], - earthquake: ["1L1"], - encore: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - finalgambit: ["1L1"], - firepunch: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - focusenergy: ["1L1"], - focuspunch: ["1L1"], - foresight: ["1L1"], - frustration: ["1L1"], - furyswipes: ["1L1"], - gunkshot: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - honeclaws: ["1L1"], - icepunch: ["1L1"], - irontail: ["1L1"], - karatechop: ["1L1"], - lashout: ["1L1"], - leer: ["1L1"], - lowkick: ["1L1"], - lowsweep: ["1L1"], - meditate: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - metronome: ["1L1"], - mimic: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - nightslash: ["1L1"], - outrage: ["1L1"], - overheat: ["1L1"], - payback: ["1L1"], - payday: ["1L1"], - poisonjab: ["1L1"], - powertrip: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - psychup: ["1L1"], - punishment: ["1L1"], - pursuit: ["1L1"], - rage: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - revenge: ["1L1"], - reversal: ["1L1"], - rockclimb: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - roleplay: ["1L1"], - round: ["1L1"], - scaryface: ["1L1"], - scratch: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - seedbomb: ["1L1"], - seismictoss: ["1L1"], - shadowclaw: ["1L1"], - skullbash: ["1L1"], - sleeptalk: ["1L1"], - smackdown: ["1L1"], - smellingsalts: ["1L1"], - snore: ["1L1"], - spite: ["1L1"], - stompingtantrum: ["1L1"], - stoneedge: ["1L1"], - strength: ["1L1"], - submission: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thrash: ["1L1"], - throatchop: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderpunch: ["1L1"], - toxic: ["1L1"], - uproar: ["1L1"], - uturn: ["1L1"], - vacuumwave: ["1L1"], - workup: ["1L1"], - }, - encounters: [ - {generation: 1, level: 3}, - {generation: 3, level: 2}, - ], - }, - primeape: { - learnset: { - acrobatics: ["1L1"], - aerialace: ["1L1"], - assurance: ["1L1"], - attract: ["1L1"], - bide: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - bulkup: ["1L1"], - bulldoze: ["1L1"], - captivate: ["1L1"], - closecombat: ["1L1"], - confide: ["1L1"], - counter: ["1L1"], - covet: ["1L1"], - crosschop: ["1L1"], - curse: ["1L1"], - defensecurl: ["1L1"], - detect: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - drainpunch: ["1L1"], - dualchop: ["1L1"], - dynamicpunch: ["1L1"], - earthquake: ["1L1"], - encore: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - finalgambit: ["1L1"], - firepunch: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - focusenergy: ["1L1"], - focuspunch: ["1L1"], - frustration: ["1L1"], - furyswipes: ["1L1"], - gigaimpact: ["1L1"], - gunkshot: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - honeclaws: ["1L1"], - hyperbeam: ["1L1"], - icepunch: ["1L1"], - irontail: ["1L1"], - karatechop: ["1L1"], - lashout: ["1L1"], - leer: ["1L1"], - lowkick: ["1L1"], - lowsweep: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - metronome: ["1L1"], - mimic: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - outrage: ["1L1"], - overheat: ["1L1"], - payback: ["1L1"], - payday: ["1L1"], - poisonjab: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - psychup: ["1L1"], - punishment: ["1L1"], - pursuit: ["1L1"], - rage: ["1L1"], - ragefist: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - reversal: ["1L1"], - rockclimb: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - roleplay: ["1L1"], - round: ["1L1"], - scaryface: ["1L1"], - scratch: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - seedbomb: ["1L1"], - seismictoss: ["1L1"], - shadowclaw: ["1L1"], - skullbash: ["1L1"], - sleeptalk: ["1L1"], - smackdown: ["1L1"], - snore: ["1L1"], - spite: ["1L1"], - stealthrock: ["1L1"], - stompingtantrum: ["1L1"], - stoneedge: ["1L1"], - strength: ["1L1"], - submission: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thrash: ["1L1"], - throatchop: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderpunch: ["1L1"], - toxic: ["1L1"], - uproar: ["1L1"], - uturn: ["1L1"], - vacuumwave: ["1L1"], - workup: ["1L1"], - }, - eventData: [ - {generation: 3, level: 34, abilities: ["1L1"], moves: ["1L1"]}, - ], - encounters: [ - {generation: 2, level: 15}, - {generation: 4, level: 15}, - ], - }, - annihilape: { - learnset: { - acrobatics: ["1L1"], - assurance: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - bulkup: ["1L1"], - bulldoze: ["1L1"], - closecombat: ["1L1"], - coaching: ["1L1"], - counter: ["1L1"], - crosschop: ["1L1"], - curse: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - drainpunch: ["1L1"], - earthquake: ["1L1"], - encore: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - finalgambit: ["1L1"], - firepunch: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - focusenergy: ["1L1"], - focuspunch: ["1L1"], - furyswipes: ["1L1"], - gigaimpact: ["1L1"], - gunkshot: ["1L1"], - helpinghand: ["1L1"], - hyperbeam: ["1L1"], - icepunch: ["1L1"], - lashout: ["1L1"], - leer: ["1L1"], - lowkick: ["1L1"], - lowsweep: ["1L1"], - metronome: ["1L1"], - nightshade: ["1L1"], - outrage: ["1L1"], - overheat: ["1L1"], - phantomforce: ["1L1"], - poisonjab: ["1L1"], - protect: ["1L1"], - ragefist: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - reversal: ["1L1"], - rockslide: ["1L1"], - rocktomb: ["1L1"], - scaryface: ["1L1"], - scratch: ["1L1"], - screech: ["1L1"], - seedbomb: ["1L1"], - seismictoss: ["1L1"], - shadowball: ["1L1"], - shadowclaw: ["1L1"], - shadowpunch: ["1L1"], - sleeptalk: ["1L1"], - smackdown: ["1L1"], - spite: ["1L1"], - stealthrock: ["1L1"], - stompingtantrum: ["1L1"], - stoneedge: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thrash: ["1L1"], - throatchop: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderpunch: ["1L1"], - uproar: ["1L1"], - uturn: ["1L1"], - vacuumwave: ["1L1"], - }, - }, - growlithe: { - learnset: { - aerialace: ["1L1"], - agility: ["1L1"], - attract: ["1L1"], - bide: ["1L1"], - bite: ["1L1"], - bodyslam: ["1L1"], - burnup: ["1L1"], - captivate: ["1L1"], - charm: ["1L1"], - closecombat: ["1L1"], - confide: ["1L1"], - covet: ["1L1"], - crunch: ["1L1"], - curse: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doublekick: ["1L1"], - doubleteam: ["1L1"], - dragonbreath: ["1L1"], - dragonrage: ["1L1"], - ember: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fireblast: ["1L1"], - firefang: ["1L1"], - firespin: ["1L1"], - flameburst: ["1L1"], - flamecharge: ["1L1"], - flamethrower: ["1L1"], - flamewheel: ["1L1"], - flareblitz: ["1L1"], - frustration: ["1L1"], - headbutt: ["1L1"], - heatwave: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - howl: ["1L1"], - incinerate: ["1L1"], - irontail: ["1L1"], - leer: ["1L1"], - mimic: ["1L1"], - morningsun: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - odorsleuth: ["1L1"], - outrage: ["1L1"], - overheat: ["1L1"], - playrough: ["1L1"], - protect: ["1L1"], - psychicfangs: ["1L1"], - rage: ["1L1"], - ragingfury: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - reversal: ["1L1"], - roar: ["1L1"], - rocksmash: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - scaryface: ["1L1"], - secretpower: ["1L1"], - skullbash: ["1L1"], - sleeptalk: ["1L1"], - snarl: ["1L1"], - snore: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - takedown: ["1L1"], - temperflare: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thrash: ["1L1"], - thunderfang: ["1L1"], - toxic: ["1L1"], - wildcharge: ["1L1"], - willowisp: ["1L1"], - }, - eventData: [ - {generation: 3, level: 32, gender: "F", nature: "Quiet", ivs: {hp: 11, atk: 24, def: 28, spa: 1, spd: 20, spe: 2}, abilities: ["1L1"], moves: ["1L1"], pokeball: "pokeball"}, - {generation: 3, level: 10, gender: "M", moves: ["1L1"], pokeball: "pokeball"}, - {generation: 3, level: 28, moves: ["1L1"]}, - ], - encounters: [ - {generation: 1, level: 15}, - ], - }, - growlithehisui: { - learnset: { - agility: ["1L1"], - bite: ["1L1"], - bodyslam: ["1L1"], - closecombat: ["1L1"], - covet: ["1L1"], - crunch: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doublekick: ["1L1"], - ember: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fireblast: ["1L1"], - firefang: ["1L1"], - firespin: ["1L1"], - flamecharge: ["1L1"], - flamethrower: ["1L1"], - flamewheel: ["1L1"], - flareblitz: ["1L1"], - headsmash: ["1L1"], - heatwave: ["1L1"], - helpinghand: ["1L1"], - howl: ["1L1"], - leer: ["1L1"], - morningsun: ["1L1"], - outrage: ["1L1"], - overheat: ["1L1"], - powergem: ["1L1"], - protect: ["1L1"], - psychicfangs: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - reversal: ["1L1"], - roar: ["1L1"], - rockblast: ["1L1"], - rockslide: ["1L1"], - rocktomb: ["1L1"], - sandstorm: ["1L1"], - scaryface: ["1L1"], - scorchingsands: ["1L1"], - sleeptalk: ["1L1"], - smackdown: ["1L1"], - smartstrike: ["1L1"], - stealthrock: ["1L1"], - stoneedge: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - takedown: ["1L1"], - temperflare: ["1L1"], - terablast: ["1L1"], - thrash: ["1L1"], - thunderfang: ["1L1"], - wildcharge: ["1L1"], - willowisp: ["1L1"], - }, - eventData: [ - {generation: 9, level: 15, isHidden: true, nature: "Jolly", ivs: {hp: 31, atk: 31, def: 20, spa: 20, spd: 20, spe: 31}, moves: ["1L1"], pokeball: "pokeball"}, - ], - }, - arcanine: { - learnset: { - aerialace: ["1L1"], - agility: ["1L1"], - attract: ["1L1"], - bide: ["1L1"], - bite: ["1L1"], - bodyslam: ["1L1"], - bulldoze: ["1L1"], - burnup: ["1L1"], - captivate: ["1L1"], - charm: ["1L1"], - closecombat: ["1L1"], - confide: ["1L1"], - covet: ["1L1"], - crunch: ["1L1"], - curse: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dragonbreath: ["1L1"], - dragonpulse: ["1L1"], - dragonrage: ["1L1"], - ember: ["1L1"], - endure: ["1L1"], - extremespeed: ["1L1"], - facade: ["1L1"], - fireblast: ["1L1"], - firefang: ["1L1"], - firespin: ["1L1"], - flamecharge: ["1L1"], - flamethrower: ["1L1"], - flamewheel: ["1L1"], - flareblitz: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - headbutt: ["1L1"], - heatcrash: ["1L1"], - heatwave: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - howl: ["1L1"], - hyperbeam: ["1L1"], - hypervoice: ["1L1"], - incinerate: ["1L1"], - ironhead: ["1L1"], - irontail: ["1L1"], - laserfocus: ["1L1"], - leer: ["1L1"], - mimic: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - odorsleuth: ["1L1"], - outrage: ["1L1"], - overheat: ["1L1"], - playrough: ["1L1"], - protect: ["1L1"], - psychicfangs: ["1L1"], - rage: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - reversal: ["1L1"], - roar: ["1L1"], - rockclimb: ["1L1"], - rocksmash: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - scaryface: ["1L1"], - scorchingsands: ["1L1"], - secretpower: ["1L1"], - skullbash: ["1L1"], - sleeptalk: ["1L1"], - snarl: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - superpower: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - takedown: ["1L1"], - teleport: ["1L1"], - temperflare: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thunderfang: ["1L1"], - toxic: ["1L1"], - wildcharge: ["1L1"], - willowisp: ["1L1"], - }, - eventData: [ - {generation: 4, level: 50, abilities: ["1L1"], moves: ["1L1"], pokeball: "cherishball"}, - {generation: 7, level: 50, abilities: ["1L1"], moves: ["1L1"], pokeball: "cherishball"}, - {generation: 9, level: 50, shiny: true, gender: "F", nature: "Adamant", abilities: ["1L1"], ivs: {hp: 31, atk: 31, def: 31, spa: 8, spd: 31, spe: 31}, moves: ["1L1"], pokeball: "cherishball"}, - ], - }, - arcaninehisui: { - learnset: { - aerialace: ["1L1"], - agility: ["1L1"], - bite: ["1L1"], - bodyslam: ["1L1"], - bulldoze: ["1L1"], - closecombat: ["1L1"], - crunch: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - dragonpulse: ["1L1"], - ember: ["1L1"], - endure: ["1L1"], - extremespeed: ["1L1"], - facade: ["1L1"], - fireblast: ["1L1"], - firefang: ["1L1"], - firespin: ["1L1"], - flamecharge: ["1L1"], - flamethrower: ["1L1"], - flamewheel: ["1L1"], - flareblitz: ["1L1"], - gigaimpact: ["1L1"], - heatcrash: ["1L1"], - heatwave: ["1L1"], - helpinghand: ["1L1"], - howl: ["1L1"], - hyperbeam: ["1L1"], - hypervoice: ["1L1"], - ironhead: ["1L1"], - leer: ["1L1"], - outrage: ["1L1"], - overheat: ["1L1"], - powergem: ["1L1"], - protect: ["1L1"], - psychicfangs: ["1L1"], - ragingfury: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - reversal: ["1L1"], - roar: ["1L1"], - rockblast: ["1L1"], - rockslide: ["1L1"], - rockthrow: ["1L1"], - rocktomb: ["1L1"], - sandstorm: ["1L1"], - scaryface: ["1L1"], - scorchingsands: ["1L1"], - sleeptalk: ["1L1"], - smackdown: ["1L1"], - smartstrike: ["1L1"], - snarl: ["1L1"], - solarbeam: ["1L1"], - stealthrock: ["1L1"], - stoneedge: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - takedown: ["1L1"], - temperflare: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thunderfang: ["1L1"], - wildcharge: ["1L1"], - willowisp: ["1L1"], - }, - }, - poliwag: { - learnset: { - amnesia: ["1L1"], - attract: ["1L1"], - bellydrum: ["1L1"], - bide: ["1L1"], - blizzard: ["1L1"], - bodyslam: ["1L1"], - bubble: ["1L1"], - bubblebeam: ["1L1"], - bulldoze: ["1L1"], - captivate: ["1L1"], - chillingwater: ["1L1"], - confide: ["1L1"], - curse: ["1L1"], - defensecurl: ["1L1"], - dig: ["1L1"], - dive: ["1L1"], - doubleedge: ["1L1"], - doubleslap: ["1L1"], - doubleteam: ["1L1"], - earthpower: ["1L1"], - encore: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - focuspunch: ["1L1"], - frustration: ["1L1"], - hail: ["1L1"], - haze: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hydropump: ["1L1"], - hypnosis: ["1L1"], - iceball: ["1L1"], - icebeam: ["1L1"], - icywind: ["1L1"], - liquidation: ["1L1"], - lowkick: ["1L1"], - mimic: ["1L1"], - mindreader: ["1L1"], - mist: ["1L1"], - mudbomb: ["1L1"], - muddywater: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - pound: ["1L1"], - protect: ["1L1"], - psychic: ["1L1"], - psywave: ["1L1"], - rage: ["1L1"], - raindance: ["1L1"], - refresh: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - round: ["1L1"], - scald: ["1L1"], - secretpower: ["1L1"], - skullbash: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - splash: ["1L1"], - substitute: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - sweetkiss: ["1L1"], - swift: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - toxic: ["1L1"], - wakeupslap: ["1L1"], - waterfall: ["1L1"], - watergun: ["1L1"], - waterpulse: ["1L1"], - watersport: ["1L1"], - weatherball: ["1L1"], - whirlpool: ["1L1"], - }, - eventData: [ - {generation: 3, level: 5, shiny: 1, moves: ["1L1"], pokeball: "pokeball"}, - ], - encounters: [ - {generation: 1, level: 5}, - {generation: 2, level: 3}, - ], - }, - poliwhirl: { - learnset: { - amnesia: ["1L1"], - attract: ["1L1"], - bellydrum: ["1L1"], - bide: ["1L1"], - blizzard: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - bubble: ["1L1"], - bubblebeam: ["1L1"], - bulldoze: ["1L1"], - captivate: ["1L1"], - chillingwater: ["1L1"], - confide: ["1L1"], - counter: ["1L1"], - curse: ["1L1"], - defensecurl: ["1L1"], - detect: ["1L1"], - dig: ["1L1"], - dive: ["1L1"], - doubleedge: ["1L1"], - doubleslap: ["1L1"], - doubleteam: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - encore: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fissure: ["1L1"], - fling: ["1L1"], - focuspunch: ["1L1"], - frustration: ["1L1"], - hail: ["1L1"], - haze: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hydropump: ["1L1"], - hypnosis: ["1L1"], - icebeam: ["1L1"], - icepunch: ["1L1"], - icywind: ["1L1"], - liquidation: ["1L1"], - lowkick: ["1L1"], - lowsweep: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - metronome: ["1L1"], - mimic: ["1L1"], - mudbomb: ["1L1"], - muddywater: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - pound: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - psychic: ["1L1"], - psychup: ["1L1"], - psywave: ["1L1"], - rage: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rocksmash: ["1L1"], - round: ["1L1"], - scald: ["1L1"], - secretpower: ["1L1"], - seismictoss: ["1L1"], - skullbash: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - strength: ["1L1"], - submission: ["1L1"], - substitute: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - toxic: ["1L1"], - wakeupslap: ["1L1"], - waterfall: ["1L1"], - watergun: ["1L1"], - waterpulse: ["1L1"], - watersport: ["1L1"], - weatherball: ["1L1"], - whirlpool: ["1L1"], - }, - encounters: [ - {generation: 1, level: 15}, - {generation: 2, level: 10}, - {generation: 3, level: 20}, - {generation: 4, level: 10}, - {generation: 7, level: 24}, - {generation: 7, level: 22, gender: "F", nature: "Naughty", abilities: ["1L1"], pokeball: "pokeball"}, - ], - }, - poliwrath: { - learnset: { - amnesia: ["1L1"], - attract: ["1L1"], - batonpass: ["1L1"], - bellydrum: ["1L1"], - bide: ["1L1"], - blizzard: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - bubble: ["1L1"], - bubblebeam: ["1L1"], - bulkup: ["1L1"], - bulldoze: ["1L1"], - captivate: ["1L1"], - chillingwater: ["1L1"], - circlethrow: ["1L1"], - closecombat: ["1L1"], - coaching: ["1L1"], - confide: ["1L1"], - counter: ["1L1"], - curse: ["1L1"], - darkestlariat: ["1L1"], - defensecurl: ["1L1"], - detect: ["1L1"], - dig: ["1L1"], - dive: ["1L1"], - doubleedge: ["1L1"], - doubleslap: ["1L1"], - doubleteam: ["1L1"], - drainpunch: ["1L1"], - dualchop: ["1L1"], - dynamicpunch: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - encore: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fissure: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - focuspunch: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - hail: ["1L1"], - haze: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - highhorsepower: ["1L1"], - hydropump: ["1L1"], - hyperbeam: ["1L1"], - hypnosis: ["1L1"], - icebeam: ["1L1"], - icepunch: ["1L1"], - icywind: ["1L1"], - knockoff: ["1L1"], - liquidation: ["1L1"], - lowkick: ["1L1"], - lowsweep: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - metronome: ["1L1"], - mimic: ["1L1"], - mindreader: ["1L1"], - mist: ["1L1"], - muddywater: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - payback: ["1L1"], - poisonjab: ["1L1"], - pound: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - psychic: ["1L1"], - psychup: ["1L1"], - psywave: ["1L1"], - rage: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - reversal: ["1L1"], - rockclimb: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - scald: ["1L1"], - scaryface: ["1L1"], - secretpower: ["1L1"], - seismictoss: ["1L1"], - skullbash: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - strength: ["1L1"], - submission: ["1L1"], - substitute: ["1L1"], - superpower: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - throatchop: ["1L1"], - toxic: ["1L1"], - upperhand: ["1L1"], - vacuumwave: ["1L1"], - waterfall: ["1L1"], - watergun: ["1L1"], - waterpulse: ["1L1"], - weatherball: ["1L1"], - whirlpool: ["1L1"], - workup: ["1L1"], - }, - eventData: [ - {generation: 3, level: 42, moves: ["1L1"]}, - ], - }, - politoed: { - learnset: { - amnesia: ["1L1"], - attract: ["1L1"], - bellydrum: ["1L1"], - blizzard: ["1L1"], - bodyslam: ["1L1"], - bounce: ["1L1"], - brickbreak: ["1L1"], - bubblebeam: ["1L1"], - bulldoze: ["1L1"], - captivate: ["1L1"], - chillingwater: ["1L1"], - confide: ["1L1"], - counter: ["1L1"], - curse: ["1L1"], - defensecurl: ["1L1"], - detect: ["1L1"], - dig: ["1L1"], - dive: ["1L1"], - doubleedge: ["1L1"], - doubleslap: ["1L1"], - doubleteam: ["1L1"], - dynamicpunch: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - echoedvoice: ["1L1"], - encore: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - focuspunch: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - hail: ["1L1"], - haze: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hydropump: ["1L1"], - hyperbeam: ["1L1"], - hypervoice: ["1L1"], - hypnosis: ["1L1"], - icebeam: ["1L1"], - icepunch: ["1L1"], - icywind: ["1L1"], - liquidation: ["1L1"], - lowkick: ["1L1"], - lowsweep: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - metronome: ["1L1"], - mimic: ["1L1"], - muddywater: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - payback: ["1L1"], - perishsong: ["1L1"], - pound: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - psychic: ["1L1"], - psychup: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rocksmash: ["1L1"], - round: ["1L1"], - scald: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - seismictoss: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - toxic: ["1L1"], - uproar: ["1L1"], - waterfall: ["1L1"], - watergun: ["1L1"], - waterpulse: ["1L1"], - weatherball: ["1L1"], - whirlpool: ["1L1"], - }, - eventData: [ - {generation: 5, level: 50, gender: "M", nature: "Calm", ivs: {hp: 31, atk: 13, def: 31, spa: 5, spd: 31, spe: 5}, isHidden: true, moves: ["1L1"], pokeball: "cherishball"}, - ], - }, - abra: { - learnset: { - allyswitch: ["1L1"], - attract: ["1L1"], - barrier: ["1L1"], - bide: ["1L1"], - bodyslam: ["1L1"], - calmmind: ["1L1"], - captivate: ["1L1"], - chargebeam: ["1L1"], - confide: ["1L1"], - confusion: ["1L1"], - counter: ["1L1"], - curse: ["1L1"], - dazzlinggleam: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - drainpunch: ["1L1"], - dreameater: ["1L1"], - dynamicpunch: ["1L1"], - embargo: ["1L1"], - encore: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - firepunch: ["1L1"], - flash: ["1L1"], - fling: ["1L1"], - focuspunch: ["1L1"], - foulplay: ["1L1"], - frustration: ["1L1"], - grassknot: ["1L1"], - gravity: ["1L1"], - guardsplit: ["1L1"], - guardswap: ["1L1"], - headbutt: ["1L1"], - hiddenpower: ["1L1"], - icepunch: ["1L1"], - irontail: ["1L1"], - knockoff: ["1L1"], - lightscreen: ["1L1"], - magiccoat: ["1L1"], - magicroom: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - metronome: ["1L1"], - mimic: ["1L1"], - naturalgift: ["1L1"], - nightmare: ["1L1"], - powerswap: ["1L1"], - powertrick: ["1L1"], - protect: ["1L1"], - psychic: ["1L1"], - psychicterrain: ["1L1"], - psychoshift: ["1L1"], - psychup: ["1L1"], - psyshock: ["1L1"], - psywave: ["1L1"], - rage: ["1L1"], - raindance: ["1L1"], - recycle: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roleplay: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - secretpower: ["1L1"], - seismictoss: ["1L1"], - shadowball: ["1L1"], - shockwave: ["1L1"], - signalbeam: ["1L1"], - skillswap: ["1L1"], - skullbash: ["1L1"], - sleeptalk: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - speedswap: ["1L1"], - submission: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - telekinesis: ["1L1"], - teleport: ["1L1"], - thief: ["1L1"], - thunderpunch: ["1L1"], - thunderwave: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - triattack: ["1L1"], - trick: ["1L1"], - trickroom: ["1L1"], - wonderroom: ["1L1"], - zapcannon: ["1L1"], - zenheadbutt: ["1L1"], - }, - encounters: [ - {generation: 1, level: 6}, - ], - }, - kadabra: { - learnset: { - allyswitch: ["1L1"], - attract: ["1L1"], - bide: ["1L1"], - bodyslam: ["1L1"], - calmmind: ["1L1"], - captivate: ["1L1"], - chargebeam: ["1L1"], - confide: ["1L1"], - confusion: ["1L1"], - counter: ["1L1"], - curse: ["1L1"], - dazzlinggleam: ["1L1"], - dig: ["1L1"], - disable: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - drainpunch: ["1L1"], - dreameater: ["1L1"], - dynamicpunch: ["1L1"], - embargo: ["1L1"], - encore: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - expandingforce: ["1L1"], - facade: ["1L1"], - firepunch: ["1L1"], - flash: ["1L1"], - fling: ["1L1"], - focuspunch: ["1L1"], - foulplay: ["1L1"], - frustration: ["1L1"], - futuresight: ["1L1"], - grassknot: ["1L1"], - gravity: ["1L1"], - guardswap: ["1L1"], - headbutt: ["1L1"], - hiddenpower: ["1L1"], - icepunch: ["1L1"], - irontail: ["1L1"], - kinesis: ["1L1"], - knockoff: ["1L1"], - lightscreen: ["1L1"], - magiccoat: ["1L1"], - magicroom: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - metronome: ["1L1"], - mimic: ["1L1"], - miracleeye: ["1L1"], - naturalgift: ["1L1"], - nightmare: ["1L1"], - nightshade: ["1L1"], - powerswap: ["1L1"], - protect: ["1L1"], - psybeam: ["1L1"], - psychic: ["1L1"], - psychicterrain: ["1L1"], - psychocut: ["1L1"], - psychup: ["1L1"], - psyshock: ["1L1"], - psywave: ["1L1"], - rage: ["1L1"], - raindance: ["1L1"], - recover: ["1L1"], - recycle: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roleplay: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - secretpower: ["1L1"], - seismictoss: ["1L1"], - shadowball: ["1L1"], - shockwave: ["1L1"], - signalbeam: ["1L1"], - skillswap: ["1L1"], - skullbash: ["1L1"], - sleeptalk: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - speedswap: ["1L1"], - submission: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - telekinesis: ["1L1"], - teleport: ["1L1"], - thief: ["1L1"], - thunderpunch: ["1L1"], - thunderwave: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - triattack: ["1L1"], - trick: ["1L1"], - trickroom: ["1L1"], - wonderroom: ["1L1"], - zapcannon: ["1L1"], - zenheadbutt: ["1L1"], - }, - encounters: [ - {generation: 2, level: 15}, - {generation: 4, level: 15}, - {generation: 7, level: 11, pokeball: "pokeball"}, - ], - }, - alakazam: { - learnset: { - allyswitch: ["1L1"], - attract: ["1L1"], - barrier: ["1L1"], - bide: ["1L1"], - bodyslam: ["1L1"], - calmmind: ["1L1"], - captivate: ["1L1"], - chargebeam: ["1L1"], - confide: ["1L1"], - confusion: ["1L1"], - counter: ["1L1"], - curse: ["1L1"], - dazzlinggleam: ["1L1"], - dig: ["1L1"], - disable: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - drainpunch: ["1L1"], - dreameater: ["1L1"], - dynamicpunch: ["1L1"], - embargo: ["1L1"], - encore: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - expandingforce: ["1L1"], - facade: ["1L1"], - firepunch: ["1L1"], - flash: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - focuspunch: ["1L1"], - foulplay: ["1L1"], - frustration: ["1L1"], - futuresight: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - gravity: ["1L1"], - guardswap: ["1L1"], - headbutt: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - icepunch: ["1L1"], - imprison: ["1L1"], - irontail: ["1L1"], - kinesis: ["1L1"], - knockoff: ["1L1"], - laserfocus: ["1L1"], - lightscreen: ["1L1"], - magiccoat: ["1L1"], - magicroom: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - metronome: ["1L1"], - mimic: ["1L1"], - miracleeye: ["1L1"], - nastyplot: ["1L1"], - naturalgift: ["1L1"], - nightmare: ["1L1"], - nightshade: ["1L1"], - powerswap: ["1L1"], - protect: ["1L1"], - psybeam: ["1L1"], - psychic: ["1L1"], - psychicterrain: ["1L1"], - psychocut: ["1L1"], - psychup: ["1L1"], - psyshock: ["1L1"], - psywave: ["1L1"], - rage: ["1L1"], - raindance: ["1L1"], - recover: ["1L1"], - recycle: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roleplay: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - secretpower: ["1L1"], - seismictoss: ["1L1"], - shadowball: ["1L1"], - shockwave: ["1L1"], - signalbeam: ["1L1"], - skillswap: ["1L1"], - skullbash: ["1L1"], - sleeptalk: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - speedswap: ["1L1"], - storedpower: ["1L1"], - submission: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - telekinesis: ["1L1"], - teleport: ["1L1"], - thief: ["1L1"], - thunderpunch: ["1L1"], - thunderwave: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - triattack: ["1L1"], - trick: ["1L1"], - trickroom: ["1L1"], - wonderroom: ["1L1"], - zapcannon: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 3, level: 70, moves: ["1L1"], pokeball: "pokeball"}, - ], - }, - machop: { - learnset: { - attract: ["1L1"], - bide: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - bulkup: ["1L1"], - bulldoze: ["1L1"], - bulletpunch: ["1L1"], - captivate: ["1L1"], - closecombat: ["1L1"], - coaching: ["1L1"], - confide: ["1L1"], - counter: ["1L1"], - crosschop: ["1L1"], - curse: ["1L1"], - detect: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dualchop: ["1L1"], - dynamicpunch: ["1L1"], - earthquake: ["1L1"], - encore: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fireblast: ["1L1"], - firepunch: ["1L1"], - fissure: ["1L1"], - flamethrower: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - focusenergy: ["1L1"], - focuspunch: ["1L1"], - foresight: ["1L1"], - frustration: ["1L1"], - headbutt: ["1L1"], - heavyslam: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - icepunch: ["1L1"], - incinerate: ["1L1"], - karatechop: ["1L1"], - knockoff: ["1L1"], - leer: ["1L1"], - lightscreen: ["1L1"], - lowkick: ["1L1"], - lowsweep: ["1L1"], - meditate: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - metronome: ["1L1"], - mimic: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - payback: ["1L1"], - poisonjab: ["1L1"], - powertrick: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - quickguard: ["1L1"], - rage: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - revenge: ["1L1"], - reversal: ["1L1"], - rockclimb: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - roleplay: ["1L1"], - rollingkick: ["1L1"], - round: ["1L1"], - scaryface: ["1L1"], - secretpower: ["1L1"], - seismictoss: ["1L1"], - skullbash: ["1L1"], - sleeptalk: ["1L1"], - smackdown: ["1L1"], - smellingsalts: ["1L1"], - snore: ["1L1"], - strength: ["1L1"], - submission: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - superpower: ["1L1"], - swagger: ["1L1"], - takedown: ["1L1"], - thief: ["1L1"], - thunderpunch: ["1L1"], - tickle: ["1L1"], - toxic: ["1L1"], - vacuumwave: ["1L1"], - vitalthrow: ["1L1"], - wakeupslap: ["1L1"], - workup: ["1L1"], - }, - encounters: [ - {generation: 1, level: 15}, - ], - }, - machoke: { - learnset: { - attract: ["1L1"], - bide: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - bulkup: ["1L1"], - bulldoze: ["1L1"], - captivate: ["1L1"], - closecombat: ["1L1"], - coaching: ["1L1"], - confide: ["1L1"], - counter: ["1L1"], - crosschop: ["1L1"], - curse: ["1L1"], - detect: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dualchop: ["1L1"], - dynamicpunch: ["1L1"], - earthquake: ["1L1"], - encore: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fireblast: ["1L1"], - firepunch: ["1L1"], - fissure: ["1L1"], - flamethrower: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - focusenergy: ["1L1"], - focuspunch: ["1L1"], - foresight: ["1L1"], - frustration: ["1L1"], - headbutt: ["1L1"], - heavyslam: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - icepunch: ["1L1"], - incinerate: ["1L1"], - karatechop: ["1L1"], - knockoff: ["1L1"], - leer: ["1L1"], - lightscreen: ["1L1"], - lowkick: ["1L1"], - lowsweep: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - metronome: ["1L1"], - mimic: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - payback: ["1L1"], - poisonjab: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - rage: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - revenge: ["1L1"], - reversal: ["1L1"], - rockclimb: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - roleplay: ["1L1"], - round: ["1L1"], - scaryface: ["1L1"], - secretpower: ["1L1"], - seismictoss: ["1L1"], - skullbash: ["1L1"], - sleeptalk: ["1L1"], - smackdown: ["1L1"], - snore: ["1L1"], - stompingtantrum: ["1L1"], - strength: ["1L1"], - submission: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - superpower: ["1L1"], - swagger: ["1L1"], - takedown: ["1L1"], - thief: ["1L1"], - thunderpunch: ["1L1"], - toxic: ["1L1"], - vacuumwave: ["1L1"], - vitalthrow: ["1L1"], - wakeupslap: ["1L1"], - workup: ["1L1"], - }, - eventData: [ - {generation: 5, level: 30, moves: ["1L1"], pokeball: "cherishball"}, - ], - encounters: [ - {generation: 2, level: 14}, - {generation: 4, level: 14}, - ], - }, - machamp: { - learnset: { - assurance: ["1L1"], - attract: ["1L1"], - bide: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - bulkup: ["1L1"], - bulldoze: ["1L1"], - captivate: ["1L1"], - closecombat: ["1L1"], - coaching: ["1L1"], - confide: ["1L1"], - counter: ["1L1"], - crosschop: ["1L1"], - crosspoison: ["1L1"], - curse: ["1L1"], - darkestlariat: ["1L1"], - detect: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dualchop: ["1L1"], - dynamicpunch: ["1L1"], - earthquake: ["1L1"], - encore: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fireblast: ["1L1"], - firepunch: ["1L1"], - fissure: ["1L1"], - flamethrower: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - focusenergy: ["1L1"], - focuspunch: ["1L1"], - foresight: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - headbutt: ["1L1"], - heavyslam: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - highhorsepower: ["1L1"], - hyperbeam: ["1L1"], - icepunch: ["1L1"], - incinerate: ["1L1"], - karatechop: ["1L1"], - knockoff: ["1L1"], - leer: ["1L1"], - lightscreen: ["1L1"], - lowkick: ["1L1"], - lowsweep: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - metronome: ["1L1"], - mimic: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - payback: ["1L1"], - poisonjab: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - quickguard: ["1L1"], - rage: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - revenge: ["1L1"], - reversal: ["1L1"], - rockblast: ["1L1"], - rockclimb: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - roleplay: ["1L1"], - round: ["1L1"], - scaryface: ["1L1"], - secretpower: ["1L1"], - seismictoss: ["1L1"], - skullbash: ["1L1"], - sleeptalk: ["1L1"], - smackdown: ["1L1"], - snore: ["1L1"], - stompingtantrum: ["1L1"], - stoneedge: ["1L1"], - strength: ["1L1"], - submission: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - superpower: ["1L1"], - swagger: ["1L1"], - takedown: ["1L1"], - thief: ["1L1"], - throatchop: ["1L1"], - thunderpunch: ["1L1"], - toxic: ["1L1"], - vacuumwave: ["1L1"], - vitalthrow: ["1L1"], - wakeupslap: ["1L1"], - wideguard: ["1L1"], - workup: ["1L1"], - }, - eventData: [ - {generation: 3, level: 38, gender: "M", nature: "Quiet", ivs: {hp: 9, atk: 23, def: 25, spa: 20, spd: 15, spe: 10}, abilities: ["1L1"], moves: ["1L1"], pokeball: "pokeball"}, - {generation: 6, level: 50, shiny: true, gender: "M", nature: "Adamant", ivs: {hp: 31, atk: 31, def: 31, spa: 31, spd: 31, spe: 31}, abilities: ["1L1"], moves: ["1L1"], pokeball: "cherishball"}, - {generation: 6, level: 39, gender: "M", nature: "Hardy", abilities: ["1L1"], moves: ["1L1"], pokeball: "cherishball"}, - {generation: 7, level: 34, gender: "F", nature: "Brave", ivs: {atk: 31}, abilities: ["1L1"], moves: ["1L1"], pokeball: "cherishball"}, - ], - encounters: [ - {generation: 1, level: 16}, - {generation: 2, level: 5}, - ], - }, - bellsprout: { - learnset: { - acid: ["1L1"], - acidspray: ["1L1"], - attract: ["1L1"], - belch: ["1L1"], - bide: ["1L1"], - bind: ["1L1"], - bulletseed: ["1L1"], - captivate: ["1L1"], - clearsmog: ["1L1"], - confide: ["1L1"], - curse: ["1L1"], - cut: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - encore: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - flash: ["1L1"], - frustration: ["1L1"], - gastroacid: ["1L1"], - gigadrain: ["1L1"], - grassknot: ["1L1"], - grassyglide: ["1L1"], - grassyterrain: ["1L1"], - growth: ["1L1"], - headbutt: ["1L1"], - hiddenpower: ["1L1"], - infestation: ["1L1"], - ingrain: ["1L1"], - knockoff: ["1L1"], - leafstorm: ["1L1"], - leechlife: ["1L1"], - lunge: ["1L1"], - magicalleaf: ["1L1"], - megadrain: ["1L1"], - mimic: ["1L1"], - naturalgift: ["1L1"], - naturepower: ["1L1"], - poisonjab: ["1L1"], - poisonpowder: ["1L1"], - pounce: ["1L1"], - powerwhip: ["1L1"], - protect: ["1L1"], - rage: ["1L1"], - razorleaf: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - round: ["1L1"], - secretpower: ["1L1"], - seedbomb: ["1L1"], - slam: ["1L1"], - sleeppowder: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - sludgewave: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - strengthsap: ["1L1"], - stunspore: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - sweetscent: ["1L1"], - swordsdance: ["1L1"], - synthesis: ["1L1"], - takedown: ["1L1"], - teeterdance: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - tickle: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - venoshock: ["1L1"], - vinewhip: ["1L1"], - weatherball: ["1L1"], - worryseed: ["1L1"], - wrap: ["1L1"], - wringout: ["1L1"], - }, - eventData: [ - {generation: 3, level: 5, shiny: 1, moves: ["1L1"], pokeball: "pokeball"}, - {generation: 3, level: 10, gender: "M", moves: ["1L1"], pokeball: "pokeball"}, - ], - encounters: [ - {generation: 1, level: 12}, - {generation: 2, level: 3}, - ], - }, - weepinbell: { - learnset: { - acid: ["1L1"], - acidspray: ["1L1"], - attract: ["1L1"], - bide: ["1L1"], - bind: ["1L1"], - bodyslam: ["1L1"], - bugbite: ["1L1"], - bulletseed: ["1L1"], - captivate: ["1L1"], - confide: ["1L1"], - curse: ["1L1"], - cut: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - encore: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - flash: ["1L1"], - frustration: ["1L1"], - gastroacid: ["1L1"], - gigadrain: ["1L1"], - grassknot: ["1L1"], - grassyglide: ["1L1"], - grassyterrain: ["1L1"], - growth: ["1L1"], - headbutt: ["1L1"], - hiddenpower: ["1L1"], - infestation: ["1L1"], - knockoff: ["1L1"], - leafstorm: ["1L1"], - leechlife: ["1L1"], - lunge: ["1L1"], - magicalleaf: ["1L1"], - megadrain: ["1L1"], - mimic: ["1L1"], - morningsun: ["1L1"], - naturalgift: ["1L1"], - naturepower: ["1L1"], - poisonjab: ["1L1"], - poisonpowder: ["1L1"], - pounce: ["1L1"], - powerwhip: ["1L1"], - protect: ["1L1"], - rage: ["1L1"], - razorleaf: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - round: ["1L1"], - secretpower: ["1L1"], - seedbomb: ["1L1"], - slam: ["1L1"], - sleeppowder: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - sludgewave: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - stunspore: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - sweetscent: ["1L1"], - swift: ["1L1"], - swordsdance: ["1L1"], - synthesis: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - venoshock: ["1L1"], - vinewhip: ["1L1"], - weatherball: ["1L1"], - worryseed: ["1L1"], - wrap: ["1L1"], - wringout: ["1L1"], - }, - eventData: [ - {generation: 3, level: 32, moves: ["1L1"]}, - ], - encounters: [ - {generation: 2, level: 12}, - {generation: 4, level: 10}, - ], - }, - victreebel: { - learnset: { - acid: ["1L1"], - acidspray: ["1L1"], - attract: ["1L1"], - bide: ["1L1"], - bind: ["1L1"], - bodyslam: ["1L1"], - bugbite: ["1L1"], - bulletseed: ["1L1"], - captivate: ["1L1"], - clearsmog: ["1L1"], - confide: ["1L1"], - curse: ["1L1"], - cut: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - encore: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - flash: ["1L1"], - frustration: ["1L1"], - gastroacid: ["1L1"], - gigadrain: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - grassyglide: ["1L1"], - grassyterrain: ["1L1"], - growth: ["1L1"], - headbutt: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - infestation: ["1L1"], - knockoff: ["1L1"], - leafblade: ["1L1"], - leafstorm: ["1L1"], - leaftornado: ["1L1"], - leechlife: ["1L1"], - lunge: ["1L1"], - magicalleaf: ["1L1"], - megadrain: ["1L1"], - mimic: ["1L1"], - naturalgift: ["1L1"], - naturepower: ["1L1"], - poisonjab: ["1L1"], - poisonpowder: ["1L1"], - pounce: ["1L1"], - powerwhip: ["1L1"], - protect: ["1L1"], - rage: ["1L1"], - razorleaf: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - round: ["1L1"], - scaryface: ["1L1"], - secretpower: ["1L1"], - seedbomb: ["1L1"], - sleeppowder: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - sludgewave: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - spitup: ["1L1"], - stockpile: ["1L1"], - stunspore: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swallow: ["1L1"], - sweetscent: ["1L1"], - swift: ["1L1"], - swordsdance: ["1L1"], - synthesis: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - venoshock: ["1L1"], - vinewhip: ["1L1"], - weatherball: ["1L1"], - worryseed: ["1L1"], - wrap: ["1L1"], - }, - }, - tentacool: { - learnset: { - acid: ["1L1"], - acidarmor: ["1L1"], - acidspray: ["1L1"], - acupressure: ["1L1"], - aquaring: ["1L1"], - attract: ["1L1"], - aurorabeam: ["1L1"], - barrier: ["1L1"], - bide: ["1L1"], - bind: ["1L1"], - blizzard: ["1L1"], - brine: ["1L1"], - brutalswing: ["1L1"], - bubble: ["1L1"], - bubblebeam: ["1L1"], - captivate: ["1L1"], - chillingwater: ["1L1"], - confide: ["1L1"], - confuseray: ["1L1"], - constrict: ["1L1"], - crosspoison: ["1L1"], - curse: ["1L1"], - cut: ["1L1"], - dazzlinggleam: ["1L1"], - dive: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - flipturn: ["1L1"], - frustration: ["1L1"], - gigadrain: ["1L1"], - gunkshot: ["1L1"], - hail: ["1L1"], - haze: ["1L1"], - headbutt: ["1L1"], - hex: ["1L1"], - hiddenpower: ["1L1"], - hydropump: ["1L1"], - icebeam: ["1L1"], - icywind: ["1L1"], - infestation: ["1L1"], - knockoff: ["1L1"], - liquidation: ["1L1"], - magiccoat: ["1L1"], - megadrain: ["1L1"], - mimic: ["1L1"], - mirrorcoat: ["1L1"], - muddywater: ["1L1"], - mudshot: ["1L1"], - naturalgift: ["1L1"], - payback: ["1L1"], - poisonjab: ["1L1"], - poisonsting: ["1L1"], - pounce: ["1L1"], - protect: ["1L1"], - rage: ["1L1"], - raindance: ["1L1"], - rapidspin: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - scald: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - skullbash: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - sludgewave: ["1L1"], - snore: ["1L1"], - substitute: ["1L1"], - supersonic: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - swordsdance: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - throatchop: ["1L1"], - tickle: ["1L1"], - toxic: ["1L1"], - toxicspikes: ["1L1"], - venoshock: ["1L1"], - waterfall: ["1L1"], - watergun: ["1L1"], - waterpulse: ["1L1"], - whirlpool: ["1L1"], - wrap: ["1L1"], - wringout: ["1L1"], - }, - encounters: [ - {generation: 1, level: 5}, - ], - }, - tentacruel: { - learnset: { - acid: ["1L1"], - acidarmor: ["1L1"], - acidspray: ["1L1"], - attract: ["1L1"], - barrier: ["1L1"], - bide: ["1L1"], - bind: ["1L1"], - blizzard: ["1L1"], - brine: ["1L1"], - brutalswing: ["1L1"], - bubblebeam: ["1L1"], - captivate: ["1L1"], - chillingwater: ["1L1"], - confide: ["1L1"], - confuseray: ["1L1"], - constrict: ["1L1"], - corrosivegas: ["1L1"], - crosspoison: ["1L1"], - curse: ["1L1"], - cut: ["1L1"], - dazzlinggleam: ["1L1"], - dive: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - flipturn: ["1L1"], - frustration: ["1L1"], - gigadrain: ["1L1"], - gigaimpact: ["1L1"], - gunkshot: ["1L1"], - hail: ["1L1"], - haze: ["1L1"], - headbutt: ["1L1"], - hex: ["1L1"], - hiddenpower: ["1L1"], - hydropump: ["1L1"], - hyperbeam: ["1L1"], - icebeam: ["1L1"], - icywind: ["1L1"], - infestation: ["1L1"], - knockoff: ["1L1"], - liquidation: ["1L1"], - magiccoat: ["1L1"], - megadrain: ["1L1"], - mimic: ["1L1"], - mirrorcoat: ["1L1"], - muddywater: ["1L1"], - mudshot: ["1L1"], - naturalgift: ["1L1"], - payback: ["1L1"], - poisonjab: ["1L1"], - poisonsting: ["1L1"], - pounce: ["1L1"], - protect: ["1L1"], - rage: ["1L1"], - raindance: ["1L1"], - reflect: ["1L1"], - reflecttype: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - scald: ["1L1"], - scaryface: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - skittersmack: ["1L1"], - skullbash: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - sludgewave: ["1L1"], - snore: ["1L1"], - substitute: ["1L1"], - supersonic: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - swordsdance: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - throatchop: ["1L1"], - toxic: ["1L1"], - toxicspikes: ["1L1"], - venomdrench: ["1L1"], - venoshock: ["1L1"], - waterfall: ["1L1"], - watergun: ["1L1"], - waterpulse: ["1L1"], - weatherball: ["1L1"], - whirlpool: ["1L1"], - wrap: ["1L1"], - wringout: ["1L1"], - }, - encounters: [ - {generation: 1, level: 20}, - {generation: 2, level: 20}, - {generation: 3, level: 20}, - {generation: 4, level: 15}, - {generation: 6, level: 21, maxEggMoves: 1}, - ], - }, - geodude: { - learnset: { - ancientpower: ["1L1"], - attract: ["1L1"], - autotomize: ["1L1"], - bide: ["1L1"], - block: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - bulldoze: ["1L1"], - captivate: ["1L1"], - confide: ["1L1"], - counter: ["1L1"], - curse: ["1L1"], - defensecurl: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dynamicpunch: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - endure: ["1L1"], - explosion: ["1L1"], - facade: ["1L1"], - fireblast: ["1L1"], - firepunch: ["1L1"], - fissure: ["1L1"], - flail: ["1L1"], - flamethrower: ["1L1"], - fling: ["1L1"], - focuspunch: ["1L1"], - frustration: ["1L1"], - gyroball: ["1L1"], - hammerarm: ["1L1"], - harden: ["1L1"], - headbutt: ["1L1"], - hiddenpower: ["1L1"], - highhorsepower: ["1L1"], - incinerate: ["1L1"], - irondefense: ["1L1"], - magnitude: ["1L1"], - megapunch: ["1L1"], - metronome: ["1L1"], - mimic: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - mudsport: ["1L1"], - naturalgift: ["1L1"], - naturepower: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - rage: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rockblast: ["1L1"], - rockclimb: ["1L1"], - rockpolish: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rockthrow: ["1L1"], - rocktomb: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - sandattack: ["1L1"], - sandstorm: ["1L1"], - scaryface: ["1L1"], - secretpower: ["1L1"], - seismictoss: ["1L1"], - selfdestruct: ["1L1"], - sleeptalk: ["1L1"], - smackdown: ["1L1"], - snore: ["1L1"], - stealthrock: ["1L1"], - stompingtantrum: ["1L1"], - stoneedge: ["1L1"], - strength: ["1L1"], - submission: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - sunnyday: ["1L1"], - superpower: ["1L1"], - swagger: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thunderpunch: ["1L1"], - toxic: ["1L1"], - wideguard: ["1L1"], - }, - encounters: [ - {generation: 1, level: 7}, - {generation: 2, level: 2}, - ], - }, - geodudealola: { - learnset: { - attract: ["1L1"], - autotomize: ["1L1"], - bide: ["1L1"], - block: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - brutalswing: ["1L1"], - bulldoze: ["1L1"], - charge: ["1L1"], - chargebeam: ["1L1"], - confide: ["1L1"], - counter: ["1L1"], - curse: ["1L1"], - defensecurl: ["1L1"], - dig: ["1L1"], - discharge: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - electroweb: ["1L1"], - endure: ["1L1"], - explosion: ["1L1"], - facade: ["1L1"], - fireblast: ["1L1"], - firepunch: ["1L1"], - flail: ["1L1"], - flamethrower: ["1L1"], - fling: ["1L1"], - focuspunch: ["1L1"], - frustration: ["1L1"], - gyroball: ["1L1"], - headbutt: ["1L1"], - hiddenpower: ["1L1"], - highhorsepower: ["1L1"], - irondefense: ["1L1"], - magnetrise: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - naturepower: ["1L1"], - protect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rockblast: ["1L1"], - rockclimb: ["1L1"], - rockpolish: ["1L1"], - rockslide: ["1L1"], - rockthrow: ["1L1"], - rocktomb: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - sandstorm: ["1L1"], - screech: ["1L1"], - seismictoss: ["1L1"], - selfdestruct: ["1L1"], - sleeptalk: ["1L1"], - smackdown: ["1L1"], - snore: ["1L1"], - spark: ["1L1"], - stealthrock: ["1L1"], - stoneedge: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - supercellslam: ["1L1"], - superpower: ["1L1"], - swagger: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderpunch: ["1L1"], - thundershock: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - voltswitch: ["1L1"], - wideguard: ["1L1"], - wildcharge: ["1L1"], - zapcannon: ["1L1"], - }, - }, - graveler: { - learnset: { - ancientpower: ["1L1"], - attract: ["1L1"], - bide: ["1L1"], - block: ["1L1"], - bodypress: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - bulldoze: ["1L1"], - captivate: ["1L1"], - confide: ["1L1"], - counter: ["1L1"], - curse: ["1L1"], - defensecurl: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dynamicpunch: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - endure: ["1L1"], - explosion: ["1L1"], - facade: ["1L1"], - fireblast: ["1L1"], - firepunch: ["1L1"], - fissure: ["1L1"], - flamethrower: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - focuspunch: ["1L1"], - frustration: ["1L1"], - gyroball: ["1L1"], - harden: ["1L1"], - hardpress: ["1L1"], - headbutt: ["1L1"], - heavyslam: ["1L1"], - hiddenpower: ["1L1"], - highhorsepower: ["1L1"], - incinerate: ["1L1"], - irondefense: ["1L1"], - ironhead: ["1L1"], - magnitude: ["1L1"], - megapunch: ["1L1"], - metronome: ["1L1"], - mimic: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - mudsport: ["1L1"], - naturalgift: ["1L1"], - naturepower: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - rage: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rockblast: ["1L1"], - rockclimb: ["1L1"], - rockpolish: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rockthrow: ["1L1"], - rocktomb: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - sandattack: ["1L1"], - sandstorm: ["1L1"], - scaryface: ["1L1"], - secretpower: ["1L1"], - seismictoss: ["1L1"], - selfdestruct: ["1L1"], - sleeptalk: ["1L1"], - smackdown: ["1L1"], - snore: ["1L1"], - stealthrock: ["1L1"], - stompingtantrum: ["1L1"], - stoneedge: ["1L1"], - strength: ["1L1"], - submission: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - sunnyday: ["1L1"], - superpower: ["1L1"], - swagger: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thunderpunch: ["1L1"], - toxic: ["1L1"], - }, - encounters: [ - {generation: 2, level: 23}, - {generation: 4, level: 16, pokeball: "safariball"}, - {generation: 6, level: 24}, - ], - }, - graveleralola: { - learnset: { - allyswitch: ["1L1"], - attract: ["1L1"], - bide: ["1L1"], - block: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - brutalswing: ["1L1"], - bulldoze: ["1L1"], - charge: ["1L1"], - chargebeam: ["1L1"], - confide: ["1L1"], - curse: ["1L1"], - defensecurl: ["1L1"], - dig: ["1L1"], - discharge: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - electricterrain: ["1L1"], - electroweb: ["1L1"], - endure: ["1L1"], - explosion: ["1L1"], - facade: ["1L1"], - fireblast: ["1L1"], - firepunch: ["1L1"], - flamethrower: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - focuspunch: ["1L1"], - frustration: ["1L1"], - gyroball: ["1L1"], - hardpress: ["1L1"], - headbutt: ["1L1"], - hiddenpower: ["1L1"], - highhorsepower: ["1L1"], - irondefense: ["1L1"], - magnetrise: ["1L1"], - metronome: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - naturepower: ["1L1"], - protect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rockblast: ["1L1"], - rockpolish: ["1L1"], - rockslide: ["1L1"], - rockthrow: ["1L1"], - rocktomb: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - sandstorm: ["1L1"], - scaryface: ["1L1"], - seismictoss: ["1L1"], - selfdestruct: ["1L1"], - shockwave: ["1L1"], - sleeptalk: ["1L1"], - smackdown: ["1L1"], - snore: ["1L1"], - spark: ["1L1"], - stealthrock: ["1L1"], - stompingtantrum: ["1L1"], - stoneedge: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - supercellslam: ["1L1"], - superpower: ["1L1"], - swagger: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderpunch: ["1L1"], - thundershock: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - voltswitch: ["1L1"], - wildcharge: ["1L1"], - }, - }, - golem: { - learnset: { - ancientpower: ["1L1"], - attract: ["1L1"], - bide: ["1L1"], - block: ["1L1"], - bodypress: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - bulldoze: ["1L1"], - captivate: ["1L1"], - confide: ["1L1"], - counter: ["1L1"], - curse: ["1L1"], - defensecurl: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dynamicpunch: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - endure: ["1L1"], - explosion: ["1L1"], - facade: ["1L1"], - fireblast: ["1L1"], - firepunch: ["1L1"], - fissure: ["1L1"], - flamethrower: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - focuspunch: ["1L1"], - frustration: ["1L1"], - furycutter: ["1L1"], - gigaimpact: ["1L1"], - gyroball: ["1L1"], - harden: ["1L1"], - hardpress: ["1L1"], - headbutt: ["1L1"], - heavyslam: ["1L1"], - hiddenpower: ["1L1"], - highhorsepower: ["1L1"], - hyperbeam: ["1L1"], - incinerate: ["1L1"], - irondefense: ["1L1"], - ironhead: ["1L1"], - magnitude: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - metronome: ["1L1"], - mimic: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - mudsport: ["1L1"], - naturalgift: ["1L1"], - naturepower: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - rage: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roar: ["1L1"], - rockblast: ["1L1"], - rockclimb: ["1L1"], - rockpolish: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rockthrow: ["1L1"], - rocktomb: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - sandattack: ["1L1"], - sandstorm: ["1L1"], - scaryface: ["1L1"], - secretpower: ["1L1"], - seismictoss: ["1L1"], - selfdestruct: ["1L1"], - sleeptalk: ["1L1"], - smackdown: ["1L1"], - snore: ["1L1"], - stealthrock: ["1L1"], - steamroller: ["1L1"], - stompingtantrum: ["1L1"], - stoneedge: ["1L1"], - strength: ["1L1"], - submission: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - sunnyday: ["1L1"], - superpower: ["1L1"], - swagger: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thunderpunch: ["1L1"], - toxic: ["1L1"], - }, - }, - golemalola: { - learnset: { - allyswitch: ["1L1"], - attract: ["1L1"], - bide: ["1L1"], - block: ["1L1"], - bodypress: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - brutalswing: ["1L1"], - bulldoze: ["1L1"], - charge: ["1L1"], - chargebeam: ["1L1"], - confide: ["1L1"], - curse: ["1L1"], - defensecurl: ["1L1"], - dig: ["1L1"], - discharge: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - echoedvoice: ["1L1"], - electricterrain: ["1L1"], - electroweb: ["1L1"], - endure: ["1L1"], - explosion: ["1L1"], - facade: ["1L1"], - fireblast: ["1L1"], - firepunch: ["1L1"], - flamethrower: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - focuspunch: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - gyroball: ["1L1"], - hardpress: ["1L1"], - headbutt: ["1L1"], - heavyslam: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - irondefense: ["1L1"], - ironhead: ["1L1"], - magnetrise: ["1L1"], - megapunch: ["1L1"], - meteorbeam: ["1L1"], - metronome: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - naturepower: ["1L1"], - protect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roar: ["1L1"], - rockblast: ["1L1"], - rockpolish: ["1L1"], - rockslide: ["1L1"], - rockthrow: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - sandstorm: ["1L1"], - scaryface: ["1L1"], - seismictoss: ["1L1"], - selfdestruct: ["1L1"], - shockwave: ["1L1"], - sleeptalk: ["1L1"], - smackdown: ["1L1"], - snore: ["1L1"], - spark: ["1L1"], - stealthrock: ["1L1"], - steamroller: ["1L1"], - stompingtantrum: ["1L1"], - stoneedge: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - supercellslam: ["1L1"], - superpower: ["1L1"], - swagger: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderpunch: ["1L1"], - thundershock: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - voltswitch: ["1L1"], - wildcharge: ["1L1"], - }, - }, - ponyta: { - learnset: { - agility: ["1L1"], - allyswitch: ["1L1"], - attract: ["1L1"], - bide: ["1L1"], - bodyslam: ["1L1"], - bounce: ["1L1"], - captivate: ["1L1"], - charm: ["1L1"], - confide: ["1L1"], - curse: ["1L1"], - doubleedge: ["1L1"], - doublekick: ["1L1"], - doubleteam: ["1L1"], - echoedvoice: ["1L1"], - ember: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fireblast: ["1L1"], - firespin: ["1L1"], - flamecharge: ["1L1"], - flamethrower: ["1L1"], - flamewheel: ["1L1"], - flareblitz: ["1L1"], - frustration: ["1L1"], - growl: ["1L1"], - headbutt: ["1L1"], - heatwave: ["1L1"], - hiddenpower: ["1L1"], - highhorsepower: ["1L1"], - horndrill: ["1L1"], - hypnosis: ["1L1"], - incinerate: ["1L1"], - inferno: ["1L1"], - irontail: ["1L1"], - lowkick: ["1L1"], - mimic: ["1L1"], - morningsun: ["1L1"], - mysticalfire: ["1L1"], - naturalgift: ["1L1"], - overheat: ["1L1"], - playrough: ["1L1"], - protect: ["1L1"], - quickattack: ["1L1"], - rage: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - round: ["1L1"], - secretpower: ["1L1"], - skullbash: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - solarblade: ["1L1"], - stomp: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - tackle: ["1L1"], - tailwhip: ["1L1"], - takedown: ["1L1"], - thrash: ["1L1"], - toxic: ["1L1"], - wildcharge: ["1L1"], - willowisp: ["1L1"], - }, - encounters: [ - {generation: 1, level: 28}, - ], - }, - ponytagalar: { - learnset: { - agility: ["1L1"], - allyswitch: ["1L1"], - attract: ["1L1"], - bodyslam: ["1L1"], - bounce: ["1L1"], - calmmind: ["1L1"], - charm: ["1L1"], - confusion: ["1L1"], - dazzlinggleam: ["1L1"], - doubleedge: ["1L1"], - doublekick: ["1L1"], - endure: ["1L1"], - expandingforce: ["1L1"], - facade: ["1L1"], - fairywind: ["1L1"], - futuresight: ["1L1"], - growl: ["1L1"], - healingwish: ["1L1"], - healpulse: ["1L1"], - highhorsepower: ["1L1"], - horndrill: ["1L1"], - hypnosis: ["1L1"], - imprison: ["1L1"], - irontail: ["1L1"], - lowkick: ["1L1"], - morningsun: ["1L1"], - mysticalfire: ["1L1"], - playrough: ["1L1"], - protect: ["1L1"], - psybeam: ["1L1"], - psychic: ["1L1"], - rest: ["1L1"], - round: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - stomp: ["1L1"], - storedpower: ["1L1"], - substitute: ["1L1"], - swift: ["1L1"], - tackle: ["1L1"], - tailwhip: ["1L1"], - takedown: ["1L1"], - thrash: ["1L1"], - wildcharge: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 8, level: 15, isHidden: true, moves: ["1L1"], pokeball: "cherishball"}, - ], - }, - rapidash: { - learnset: { - agility: ["1L1"], - allyswitch: ["1L1"], - attract: ["1L1"], - batonpass: ["1L1"], - bide: ["1L1"], - bodyslam: ["1L1"], - bounce: ["1L1"], - captivate: ["1L1"], - charm: ["1L1"], - confide: ["1L1"], - curse: ["1L1"], - doubleedge: ["1L1"], - doublekick: ["1L1"], - doubleteam: ["1L1"], - drillrun: ["1L1"], - echoedvoice: ["1L1"], - ember: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fireblast: ["1L1"], - firespin: ["1L1"], - flamecharge: ["1L1"], - flamethrower: ["1L1"], - flamewheel: ["1L1"], - flareblitz: ["1L1"], - frustration: ["1L1"], - furyattack: ["1L1"], - gigaimpact: ["1L1"], - growl: ["1L1"], - headbutt: ["1L1"], - heatwave: ["1L1"], - hiddenpower: ["1L1"], - highhorsepower: ["1L1"], - horndrill: ["1L1"], - hyperbeam: ["1L1"], - hypnosis: ["1L1"], - incinerate: ["1L1"], - inferno: ["1L1"], - irontail: ["1L1"], - lowkick: ["1L1"], - megahorn: ["1L1"], - mimic: ["1L1"], - mysticalfire: ["1L1"], - naturalgift: ["1L1"], - overheat: ["1L1"], - payday: ["1L1"], - playrough: ["1L1"], - poisonjab: ["1L1"], - protect: ["1L1"], - quickattack: ["1L1"], - rage: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - round: ["1L1"], - scorchingsands: ["1L1"], - secretpower: ["1L1"], - skullbash: ["1L1"], - sleeptalk: ["1L1"], - smartstrike: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - solarblade: ["1L1"], - stomp: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - swordsdance: ["1L1"], - tackle: ["1L1"], - tailwhip: ["1L1"], - takedown: ["1L1"], - throatchop: ["1L1"], - toxic: ["1L1"], - wildcharge: ["1L1"], - willowisp: ["1L1"], - }, - eventData: [ - {generation: 3, level: 40, moves: ["1L1"]}, - ], - encounters: [ - {generation: 2, level: 14, gender: "M"}, - {generation: 3, level: 37}, - ], - }, - rapidashgalar: { - learnset: { - agility: ["1L1"], - allyswitch: ["1L1"], - attract: ["1L1"], - batonpass: ["1L1"], - bodyslam: ["1L1"], - bounce: ["1L1"], - calmmind: ["1L1"], - charm: ["1L1"], - confusion: ["1L1"], - dazzlinggleam: ["1L1"], - drillrun: ["1L1"], - endure: ["1L1"], - expandingforce: ["1L1"], - facade: ["1L1"], - fairywind: ["1L1"], - futuresight: ["1L1"], - gigaimpact: ["1L1"], - growl: ["1L1"], - healingwish: ["1L1"], - healpulse: ["1L1"], - highhorsepower: ["1L1"], - hyperbeam: ["1L1"], - imprison: ["1L1"], - irontail: ["1L1"], - lowkick: ["1L1"], - magicroom: ["1L1"], - megahorn: ["1L1"], - mistyterrain: ["1L1"], - mysticalfire: ["1L1"], - payday: ["1L1"], - playrough: ["1L1"], - protect: ["1L1"], - psybeam: ["1L1"], - psychic: ["1L1"], - psychicterrain: ["1L1"], - psychocut: ["1L1"], - quickattack: ["1L1"], - rest: ["1L1"], - round: ["1L1"], - sleeptalk: ["1L1"], - smartstrike: ["1L1"], - snore: ["1L1"], - stomp: ["1L1"], - storedpower: ["1L1"], - substitute: ["1L1"], - swift: ["1L1"], - swordsdance: ["1L1"], - tackle: ["1L1"], - tailwhip: ["1L1"], - takedown: ["1L1"], - throatchop: ["1L1"], - trickroom: ["1L1"], - wildcharge: ["1L1"], - wonderroom: ["1L1"], - zenheadbutt: ["1L1"], - }, - }, - slowpoke: { - learnset: { - afteryou: ["1L1"], - amnesia: ["1L1"], - aquatail: ["1L1"], - attract: ["1L1"], - avalanche: ["1L1"], - belch: ["1L1"], - bellydrum: ["1L1"], - bide: ["1L1"], - blizzard: ["1L1"], - block: ["1L1"], - bodyslam: ["1L1"], - brine: ["1L1"], - bubblebeam: ["1L1"], - bulldoze: ["1L1"], - calmmind: ["1L1"], - captivate: ["1L1"], - chillingwater: ["1L1"], - confide: ["1L1"], - confusion: ["1L1"], - curse: ["1L1"], - dig: ["1L1"], - disable: ["1L1"], - dive: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dreameater: ["1L1"], - earthquake: ["1L1"], - echoedvoice: ["1L1"], - endure: ["1L1"], - expandingforce: ["1L1"], - facade: ["1L1"], - fireblast: ["1L1"], - fissure: ["1L1"], - flamethrower: ["1L1"], - flash: ["1L1"], - foulplay: ["1L1"], - frustration: ["1L1"], - futuresight: ["1L1"], - grassknot: ["1L1"], - growl: ["1L1"], - hail: ["1L1"], - headbutt: ["1L1"], - healpulse: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hydropump: ["1L1"], - icebeam: ["1L1"], - icywind: ["1L1"], - imprison: ["1L1"], - incinerate: ["1L1"], - irontail: ["1L1"], - lightscreen: ["1L1"], - liquidation: ["1L1"], - magiccoat: ["1L1"], - mefirst: ["1L1"], - mimic: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - mudsport: ["1L1"], - naturalgift: ["1L1"], - nightmare: ["1L1"], - payday: ["1L1"], - protect: ["1L1"], - psybeam: ["1L1"], - psychic: ["1L1"], - psychicterrain: ["1L1"], - psychup: ["1L1"], - psyshock: ["1L1"], - psywave: ["1L1"], - rage: ["1L1"], - raindance: ["1L1"], - recycle: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - scald: ["1L1"], - secretpower: ["1L1"], - shadowball: ["1L1"], - signalbeam: ["1L1"], - skillswap: ["1L1"], - skullbash: ["1L1"], - slackoff: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - snowscape: ["1L1"], - stomp: ["1L1"], - storedpower: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - telekinesis: ["1L1"], - teleport: ["1L1"], - terablast: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - triattack: ["1L1"], - trick: ["1L1"], - trickroom: ["1L1"], - waterfall: ["1L1"], - watergun: ["1L1"], - waterpulse: ["1L1"], - weatherball: ["1L1"], - whirlpool: ["1L1"], - wonderroom: ["1L1"], - yawn: ["1L1"], - zapcannon: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 3, level: 31, gender: "F", nature: "Naive", ivs: {hp: 17, atk: 11, def: 19, spa: 20, spd: 5, spe: 10}, abilities: ["1L1"], moves: ["1L1"], pokeball: "pokeball"}, - {generation: 3, level: 10, gender: "M", moves: ["1L1"], pokeball: "pokeball"}, - {generation: 5, level: 30, moves: ["1L1"], pokeball: "cherishball"}, - ], - encounters: [ - {generation: 1, level: 15}, - ], - }, - slowpokegalar: { - learnset: { - acid: ["1L1"], - amnesia: ["1L1"], - attract: ["1L1"], - avalanche: ["1L1"], - belch: ["1L1"], - bellydrum: ["1L1"], - blizzard: ["1L1"], - block: ["1L1"], - bodyslam: ["1L1"], - brine: ["1L1"], - bulldoze: ["1L1"], - calmmind: ["1L1"], - chillingwater: ["1L1"], - confusion: ["1L1"], - curse: ["1L1"], - dig: ["1L1"], - disable: ["1L1"], - dive: ["1L1"], - earthquake: ["1L1"], - endure: ["1L1"], - expandingforce: ["1L1"], - facade: ["1L1"], - fireblast: ["1L1"], - flamethrower: ["1L1"], - foulplay: ["1L1"], - futuresight: ["1L1"], - grassknot: ["1L1"], - growl: ["1L1"], - hail: ["1L1"], - headbutt: ["1L1"], - healpulse: ["1L1"], - helpinghand: ["1L1"], - hydropump: ["1L1"], - icebeam: ["1L1"], - icywind: ["1L1"], - imprison: ["1L1"], - irontail: ["1L1"], - lightscreen: ["1L1"], - liquidation: ["1L1"], - mudshot: ["1L1"], - payday: ["1L1"], - protect: ["1L1"], - psybeam: ["1L1"], - psychic: ["1L1"], - psychicterrain: ["1L1"], - psychup: ["1L1"], - psyshock: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - scald: ["1L1"], - shadowball: ["1L1"], - skillswap: ["1L1"], - slackoff: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - snowscape: ["1L1"], - stomp: ["1L1"], - storedpower: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - surf: ["1L1"], - swift: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thunderwave: ["1L1"], - triattack: ["1L1"], - trick: ["1L1"], - trickroom: ["1L1"], - waterfall: ["1L1"], - waterpulse: ["1L1"], - weatherball: ["1L1"], - whirlpool: ["1L1"], - wonderroom: ["1L1"], - yawn: ["1L1"], - zenheadbutt: ["1L1"], - }, - }, - slowbro: { - learnset: { - aerialace: ["1L1"], - afteryou: ["1L1"], - amnesia: ["1L1"], - aquatail: ["1L1"], - attract: ["1L1"], - avalanche: ["1L1"], - bide: ["1L1"], - blizzard: ["1L1"], - block: ["1L1"], - bodypress: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - brine: ["1L1"], - bubblebeam: ["1L1"], - bulldoze: ["1L1"], - calmmind: ["1L1"], - captivate: ["1L1"], - chillingwater: ["1L1"], - confide: ["1L1"], - confusion: ["1L1"], - counter: ["1L1"], - curse: ["1L1"], - dig: ["1L1"], - disable: ["1L1"], - dive: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - drainpunch: ["1L1"], - dreameater: ["1L1"], - dynamicpunch: ["1L1"], - earthquake: ["1L1"], - echoedvoice: ["1L1"], - endure: ["1L1"], - expandingforce: ["1L1"], - facade: ["1L1"], - fireblast: ["1L1"], - fissure: ["1L1"], - flamethrower: ["1L1"], - flash: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - focuspunch: ["1L1"], - foulplay: ["1L1"], - frustration: ["1L1"], - furycutter: ["1L1"], - futuresight: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - growl: ["1L1"], - hail: ["1L1"], - headbutt: ["1L1"], - healpulse: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hydropump: ["1L1"], - hyperbeam: ["1L1"], - icebeam: ["1L1"], - icepunch: ["1L1"], - icywind: ["1L1"], - imprison: ["1L1"], - incinerate: ["1L1"], - irondefense: ["1L1"], - irontail: ["1L1"], - lightscreen: ["1L1"], - liquidation: ["1L1"], - magiccoat: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - metronome: ["1L1"], - mimic: ["1L1"], - muddywater: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - nastyplot: ["1L1"], - naturalgift: ["1L1"], - nightmare: ["1L1"], - payday: ["1L1"], - protect: ["1L1"], - psybeam: ["1L1"], - psychic: ["1L1"], - psychicnoise: ["1L1"], - psychicterrain: ["1L1"], - psychup: ["1L1"], - psyshock: ["1L1"], - psywave: ["1L1"], - rage: ["1L1"], - raindance: ["1L1"], - razorshell: ["1L1"], - recycle: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rocksmash: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - scald: ["1L1"], - secretpower: ["1L1"], - seismictoss: ["1L1"], - shadowball: ["1L1"], - signalbeam: ["1L1"], - skillswap: ["1L1"], - skullbash: ["1L1"], - slackoff: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - snowscape: ["1L1"], - stomp: ["1L1"], - storedpower: ["1L1"], - strength: ["1L1"], - submission: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - telekinesis: ["1L1"], - teleport: ["1L1"], - terablast: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - triattack: ["1L1"], - trick: ["1L1"], - trickroom: ["1L1"], - waterfall: ["1L1"], - watergun: ["1L1"], - waterpulse: ["1L1"], - weatherball: ["1L1"], - whirlpool: ["1L1"], - withdraw: ["1L1"], - wonderroom: ["1L1"], - yawn: ["1L1"], - zapcannon: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 6, level: 100, nature: "Quiet", abilities: ["1L1"], moves: ["1L1"], pokeball: "cherishball"}, - ], - encounters: [ - {generation: 1, level: 15}, - {generation: 1, level: 23}, - {generation: 2, level: 20}, - {generation: 3, level: 32}, - {generation: 4, level: 15}, - {generation: 5, level: 35}, - {generation: 7, level: 15}, - ], - }, - slowbrogalar: { - learnset: { - acid: ["1L1"], - acidspray: ["1L1"], - amnesia: ["1L1"], - attract: ["1L1"], - avalanche: ["1L1"], - blizzard: ["1L1"], - bodypress: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - brine: ["1L1"], - brutalswing: ["1L1"], - bulldoze: ["1L1"], - calmmind: ["1L1"], - chillingwater: ["1L1"], - confusion: ["1L1"], - curse: ["1L1"], - dig: ["1L1"], - disable: ["1L1"], - dive: ["1L1"], - doubleedge: ["1L1"], - drainpunch: ["1L1"], - earthquake: ["1L1"], - endure: ["1L1"], - expandingforce: ["1L1"], - facade: ["1L1"], - fireblast: ["1L1"], - flamethrower: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - foulplay: ["1L1"], - futuresight: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - growl: ["1L1"], - gunkshot: ["1L1"], - hail: ["1L1"], - haze: ["1L1"], - headbutt: ["1L1"], - healpulse: ["1L1"], - helpinghand: ["1L1"], - hydropump: ["1L1"], - hyperbeam: ["1L1"], - icebeam: ["1L1"], - icefang: ["1L1"], - icepunch: ["1L1"], - icywind: ["1L1"], - imprison: ["1L1"], - irondefense: ["1L1"], - irontail: ["1L1"], - lightscreen: ["1L1"], - liquidation: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - metronome: ["1L1"], - muddywater: ["1L1"], - mudshot: ["1L1"], - nastyplot: ["1L1"], - payday: ["1L1"], - poisonjab: ["1L1"], - powergem: ["1L1"], - protect: ["1L1"], - psybeam: ["1L1"], - psychic: ["1L1"], - psychicterrain: ["1L1"], - psychup: ["1L1"], - psyshock: ["1L1"], - raindance: ["1L1"], - razorshell: ["1L1"], - rest: ["1L1"], - rockblast: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - sandstorm: ["1L1"], - scald: ["1L1"], - scaryface: ["1L1"], - shadowball: ["1L1"], - shellsidearm: ["1L1"], - skillswap: ["1L1"], - slackoff: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - sludgewave: ["1L1"], - smackdown: ["1L1"], - snore: ["1L1"], - snowscape: ["1L1"], - storedpower: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - surf: ["1L1"], - swift: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - triattack: ["1L1"], - trick: ["1L1"], - trickroom: ["1L1"], - venoshock: ["1L1"], - waterfall: ["1L1"], - watergun: ["1L1"], - waterpulse: ["1L1"], - weatherball: ["1L1"], - whirlpool: ["1L1"], - withdraw: ["1L1"], - wonderroom: ["1L1"], - yawn: ["1L1"], - zenheadbutt: ["1L1"], - }, - }, - slowking: { - learnset: { - afteryou: ["1L1"], - allyswitch: ["1L1"], - amnesia: ["1L1"], - aquatail: ["1L1"], - attract: ["1L1"], - avalanche: ["1L1"], - blizzard: ["1L1"], - block: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - brine: ["1L1"], - bulldoze: ["1L1"], - calmmind: ["1L1"], - captivate: ["1L1"], - chillingwater: ["1L1"], - chillyreception: ["1L1"], - confide: ["1L1"], - confusion: ["1L1"], - counter: ["1L1"], - curse: ["1L1"], - dig: ["1L1"], - disable: ["1L1"], - dive: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dragontail: ["1L1"], - drainpunch: ["1L1"], - dreameater: ["1L1"], - dynamicpunch: ["1L1"], - earthquake: ["1L1"], - echoedvoice: ["1L1"], - endure: ["1L1"], - expandingforce: ["1L1"], - facade: ["1L1"], - fireblast: ["1L1"], - firepunch: ["1L1"], - flamethrower: ["1L1"], - flash: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - focuspunch: ["1L1"], - foulplay: ["1L1"], - frustration: ["1L1"], - furycutter: ["1L1"], - futuresight: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - growl: ["1L1"], - hail: ["1L1"], - headbutt: ["1L1"], - healpulse: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hydropump: ["1L1"], - hyperbeam: ["1L1"], - icebeam: ["1L1"], - icepunch: ["1L1"], - icywind: ["1L1"], - imprison: ["1L1"], - incinerate: ["1L1"], - irondefense: ["1L1"], - irontail: ["1L1"], - laserfocus: ["1L1"], - lightscreen: ["1L1"], - liquidation: ["1L1"], - magiccoat: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - metronome: ["1L1"], - mimic: ["1L1"], - muddywater: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - nastyplot: ["1L1"], - naturalgift: ["1L1"], - nightmare: ["1L1"], - payday: ["1L1"], - powergem: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - psybeam: ["1L1"], - psychic: ["1L1"], - psychicnoise: ["1L1"], - psychicterrain: ["1L1"], - psychup: ["1L1"], - psyshock: ["1L1"], - quash: ["1L1"], - raindance: ["1L1"], - razorshell: ["1L1"], - recycle: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - scald: ["1L1"], - secretpower: ["1L1"], - seismictoss: ["1L1"], - shadowball: ["1L1"], - signalbeam: ["1L1"], - skillswap: ["1L1"], - slackoff: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - snowscape: ["1L1"], - storedpower: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - telekinesis: ["1L1"], - terablast: ["1L1"], - thunderpunch: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - triattack: ["1L1"], - trick: ["1L1"], - trickroom: ["1L1"], - trumpcard: ["1L1"], - waterfall: ["1L1"], - watergun: ["1L1"], - waterpulse: ["1L1"], - weatherball: ["1L1"], - whirlpool: ["1L1"], - wonderroom: ["1L1"], - yawn: ["1L1"], - zapcannon: ["1L1"], - zenheadbutt: ["1L1"], - }, - }, - slowkinggalar: { - learnset: { - acid: ["1L1"], - acidspray: ["1L1"], - amnesia: ["1L1"], - attract: ["1L1"], - avalanche: ["1L1"], - blizzard: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - brine: ["1L1"], - bulldoze: ["1L1"], - calmmind: ["1L1"], - chillingwater: ["1L1"], - chillyreception: ["1L1"], - confusion: ["1L1"], - curse: ["1L1"], - dig: ["1L1"], - disable: ["1L1"], - dive: ["1L1"], - drainpunch: ["1L1"], - earthquake: ["1L1"], - eeriespell: ["1L1"], - endure: ["1L1"], - expandingforce: ["1L1"], - facade: ["1L1"], - fireblast: ["1L1"], - firepunch: ["1L1"], - flamethrower: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - foulplay: ["1L1"], - futuresight: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - growl: ["1L1"], - gunkshot: ["1L1"], - hail: ["1L1"], - headbutt: ["1L1"], - healpulse: ["1L1"], - helpinghand: ["1L1"], - hex: ["1L1"], - hydropump: ["1L1"], - hyperbeam: ["1L1"], - icebeam: ["1L1"], - icepunch: ["1L1"], - icywind: ["1L1"], - imprison: ["1L1"], - irondefense: ["1L1"], - irontail: ["1L1"], - lightscreen: ["1L1"], - liquidation: ["1L1"], - lowsweep: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - metronome: ["1L1"], - muddywater: ["1L1"], - mudshot: ["1L1"], - nastyplot: ["1L1"], - payday: ["1L1"], - poisonjab: ["1L1"], - powergem: ["1L1"], - protect: ["1L1"], - psybeam: ["1L1"], - psychic: ["1L1"], - psychicnoise: ["1L1"], - psychicterrain: ["1L1"], - psychup: ["1L1"], - psyshock: ["1L1"], - raindance: ["1L1"], - razorshell: ["1L1"], - rest: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - scald: ["1L1"], - scaryface: ["1L1"], - shadowball: ["1L1"], - skillswap: ["1L1"], - slackoff: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - sludgewave: ["1L1"], - snarl: ["1L1"], - snore: ["1L1"], - snowscape: ["1L1"], - stompingtantrum: ["1L1"], - storedpower: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thunderpunch: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - toxicspikes: ["1L1"], - triattack: ["1L1"], - trick: ["1L1"], - trickroom: ["1L1"], - venomdrench: ["1L1"], - venoshock: ["1L1"], - waterfall: ["1L1"], - waterpulse: ["1L1"], - weatherball: ["1L1"], - whirlpool: ["1L1"], - wonderroom: ["1L1"], - yawn: ["1L1"], - zenheadbutt: ["1L1"], - }, - }, - magnemite: { - learnset: { - bide: ["1L1"], - charge: ["1L1"], - chargebeam: ["1L1"], - confide: ["1L1"], - confuseray: ["1L1"], - curse: ["1L1"], - discharge: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - eerieimpulse: ["1L1"], - electricterrain: ["1L1"], - electroball: ["1L1"], - electroweb: ["1L1"], - endure: ["1L1"], - explosion: ["1L1"], - facade: ["1L1"], - flash: ["1L1"], - flashcannon: ["1L1"], - frustration: ["1L1"], - gravity: ["1L1"], - gyroball: ["1L1"], - headbutt: ["1L1"], - heavyslam: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - irondefense: ["1L1"], - ironhead: ["1L1"], - lightscreen: ["1L1"], - lockon: ["1L1"], - magiccoat: ["1L1"], - magnetbomb: ["1L1"], - magnetrise: ["1L1"], - metalsound: ["1L1"], - mimic: ["1L1"], - mirrorshot: ["1L1"], - naturalgift: ["1L1"], - protect: ["1L1"], - psychup: ["1L1"], - rage: ["1L1"], - raindance: ["1L1"], - recycle: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - risingvoltage: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - sandstorm: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - shockwave: ["1L1"], - signalbeam: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - sonicboom: ["1L1"], - spark: ["1L1"], - steelbeam: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - supersonic: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - teleport: ["1L1"], - terablast: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thundershock: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - voltswitch: ["1L1"], - wildcharge: ["1L1"], - zapcannon: ["1L1"], - }, - encounters: [ - {generation: 1, level: 16}, - ], - }, - magneton: { - learnset: { - bide: ["1L1"], - charge: ["1L1"], - chargebeam: ["1L1"], - confide: ["1L1"], - confuseray: ["1L1"], - curse: ["1L1"], - discharge: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - eerieimpulse: ["1L1"], - electricterrain: ["1L1"], - electroball: ["1L1"], - electroweb: ["1L1"], - endure: ["1L1"], - explosion: ["1L1"], - facade: ["1L1"], - flash: ["1L1"], - flashcannon: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - gravity: ["1L1"], - gyroball: ["1L1"], - headbutt: ["1L1"], - heavyslam: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - irondefense: ["1L1"], - ironhead: ["1L1"], - lightscreen: ["1L1"], - lockon: ["1L1"], - magiccoat: ["1L1"], - magnetbomb: ["1L1"], - magnetrise: ["1L1"], - metalsound: ["1L1"], - mimic: ["1L1"], - mirrorshot: ["1L1"], - naturalgift: ["1L1"], - protect: ["1L1"], - psychup: ["1L1"], - rage: ["1L1"], - raindance: ["1L1"], - recycle: ["1L1"], - reflect: ["1L1"], - refresh: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - risingvoltage: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - sandstorm: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - shockwave: ["1L1"], - signalbeam: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - sonicboom: ["1L1"], - spark: ["1L1"], - steelbeam: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - supersonic: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - teleport: ["1L1"], - terablast: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thundershock: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - triattack: ["1L1"], - voltswitch: ["1L1"], - wildcharge: ["1L1"], - zapcannon: ["1L1"], - }, - eventData: [ - {generation: 3, level: 30, moves: ["1L1"]}, - ], - encounters: [ - {generation: 2, level: 5}, - {generation: 3, level: 26}, - {generation: 4, level: 17, pokeball: "safariball"}, - ], - }, - magnezone: { - learnset: { - allyswitch: ["1L1"], - barrier: ["1L1"], - bodypress: ["1L1"], - bodyslam: ["1L1"], - charge: ["1L1"], - chargebeam: ["1L1"], - confide: ["1L1"], - confuseray: ["1L1"], - discharge: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - eerieimpulse: ["1L1"], - electricterrain: ["1L1"], - electroball: ["1L1"], - electroweb: ["1L1"], - endure: ["1L1"], - explosion: ["1L1"], - facade: ["1L1"], - flash: ["1L1"], - flashcannon: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - gravity: ["1L1"], - gyroball: ["1L1"], - hardpress: ["1L1"], - heavyslam: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - irondefense: ["1L1"], - ironhead: ["1L1"], - lightscreen: ["1L1"], - lockon: ["1L1"], - magiccoat: ["1L1"], - magnetbomb: ["1L1"], - magneticflux: ["1L1"], - magnetrise: ["1L1"], - metalsound: ["1L1"], - mirrorcoat: ["1L1"], - mirrorshot: ["1L1"], - naturalgift: ["1L1"], - protect: ["1L1"], - psychup: ["1L1"], - raindance: ["1L1"], - recycle: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - risingvoltage: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - sandstorm: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - selfdestruct: ["1L1"], - shockwave: ["1L1"], - signalbeam: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - sonicboom: ["1L1"], - spark: ["1L1"], - steelbeam: ["1L1"], - steelroller: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - supercellslam: ["1L1"], - supersonic: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thundershock: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - triattack: ["1L1"], - voltswitch: ["1L1"], - wildcharge: ["1L1"], - zapcannon: ["1L1"], - }, - }, - farfetchd: { - learnset: { - acrobatics: ["1L1"], - aerialace: ["1L1"], - agility: ["1L1"], - aircutter: ["1L1"], - airslash: ["1L1"], - attract: ["1L1"], - batonpass: ["1L1"], - bide: ["1L1"], - bodyslam: ["1L1"], - bravebird: ["1L1"], - brutalswing: ["1L1"], - captivate: ["1L1"], - closecombat: ["1L1"], - confide: ["1L1"], - covet: ["1L1"], - curse: ["1L1"], - cut: ["1L1"], - defog: ["1L1"], - detect: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dualwingbeat: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - falseswipe: ["1L1"], - featherdance: ["1L1"], - feint: ["1L1"], - finalgambit: ["1L1"], - firstimpression: ["1L1"], - flail: ["1L1"], - fly: ["1L1"], - focusenergy: ["1L1"], - foresight: ["1L1"], - frustration: ["1L1"], - furyattack: ["1L1"], - furycutter: ["1L1"], - gust: ["1L1"], - headbutt: ["1L1"], - heatwave: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - irontail: ["1L1"], - knockoff: ["1L1"], - laserfocus: ["1L1"], - lastresort: ["1L1"], - leafblade: ["1L1"], - leer: ["1L1"], - mimic: ["1L1"], - mirrormove: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - nightslash: ["1L1"], - ominouswind: ["1L1"], - peck: ["1L1"], - pluck: ["1L1"], - poisonjab: ["1L1"], - protect: ["1L1"], - psychup: ["1L1"], - quickattack: ["1L1"], - rage: ["1L1"], - razorleaf: ["1L1"], - razorwind: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - revenge: ["1L1"], - roost: ["1L1"], - round: ["1L1"], - sandattack: ["1L1"], - secretpower: ["1L1"], - simplebeam: ["1L1"], - skullbash: ["1L1"], - skyattack: ["1L1"], - slash: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - solarblade: ["1L1"], - steelwing: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - swordsdance: ["1L1"], - tailwind: ["1L1"], - takedown: ["1L1"], - thief: ["1L1"], - throatchop: ["1L1"], - toxic: ["1L1"], - trumpcard: ["1L1"], - twister: ["1L1"], - uproar: ["1L1"], - uturn: ["1L1"], - whirlwind: ["1L1"], - wish: ["1L1"], - workup: ["1L1"], - yawn: ["1L1"], - }, - eventData: [ - {generation: 3, level: 5, shiny: 1, moves: ["1L1"], pokeball: "pokeball"}, - {generation: 3, level: 36, moves: ["1L1"]}, - ], - encounters: [ - {generation: 1, level: 3}, - {generation: 3, level: 3, gender: "M", nature: "Adamant", ivs: {hp: 20, atk: 25, def: 21, spa: 24, spd: 15, spe: 20}, abilities: ["1L1"], pokeball: "pokeball"}, - ], - }, - farfetchdgalar: { - learnset: { - assurance: ["1L1"], - attract: ["1L1"], - bodyslam: ["1L1"], - bravebird: ["1L1"], - brickbreak: ["1L1"], - brutalswing: ["1L1"], - closecombat: ["1L1"], - counter: ["1L1"], - covet: ["1L1"], - curse: ["1L1"], - defog: ["1L1"], - detect: ["1L1"], - doubleedge: ["1L1"], - dualwingbeat: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - feint: ["1L1"], - finalgambit: ["1L1"], - flail: ["1L1"], - focusenergy: ["1L1"], - furycutter: ["1L1"], - helpinghand: ["1L1"], - knockoff: ["1L1"], - leafblade: ["1L1"], - leer: ["1L1"], - nightslash: ["1L1"], - peck: ["1L1"], - poisonjab: ["1L1"], - protect: ["1L1"], - quickattack: ["1L1"], - quickguard: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - revenge: ["1L1"], - rocksmash: ["1L1"], - round: ["1L1"], - sandattack: ["1L1"], - simplebeam: ["1L1"], - skyattack: ["1L1"], - slam: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - solarblade: ["1L1"], - steelwing: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - superpower: ["1L1"], - swordsdance: ["1L1"], - throatchop: ["1L1"], - workup: ["1L1"], - }, - }, - sirfetchd: { - learnset: { - assurance: ["1L1"], - attract: ["1L1"], - bodyslam: ["1L1"], - bravebird: ["1L1"], - brickbreak: ["1L1"], - brutalswing: ["1L1"], - closecombat: ["1L1"], - coaching: ["1L1"], - defog: ["1L1"], - detect: ["1L1"], - dualwingbeat: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - finalgambit: ["1L1"], - firstimpression: ["1L1"], - focusenergy: ["1L1"], - furycutter: ["1L1"], - grassyglide: ["1L1"], - helpinghand: ["1L1"], - irondefense: ["1L1"], - knockoff: ["1L1"], - leafblade: ["1L1"], - leer: ["1L1"], - meteorassault: ["1L1"], - peck: ["1L1"], - poisonjab: ["1L1"], - protect: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - revenge: ["1L1"], - rocksmash: ["1L1"], - round: ["1L1"], - sandattack: ["1L1"], - slam: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - solarblade: ["1L1"], - steelwing: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - superpower: ["1L1"], - swordsdance: ["1L1"], - throatchop: ["1L1"], - workup: ["1L1"], - }, - eventData: [ - {generation: 8, level: 80, gender: "M", nature: "Brave", abilities: ["1L1"], ivs: {hp: 30, atk: 31, def: 31, spa: 30, spd: 30, spe: 31}, moves: ["1L1"], pokeball: "pokeball"}, - ], - }, - doduo: { - learnset: { - acrobatics: ["1L1"], - acupressure: ["1L1"], - aerialace: ["1L1"], - agility: ["1L1"], - aircutter: ["1L1"], - assurance: ["1L1"], - attract: ["1L1"], - batonpass: ["1L1"], - bide: ["1L1"], - bodyslam: ["1L1"], - bravebird: ["1L1"], - captivate: ["1L1"], - confide: ["1L1"], - curse: ["1L1"], - doubleedge: ["1L1"], - doublehit: ["1L1"], - doubleteam: ["1L1"], - drillpeck: ["1L1"], - echoedvoice: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - featherdance: ["1L1"], - feintattack: ["1L1"], - flail: ["1L1"], - fly: ["1L1"], - frustration: ["1L1"], - furyattack: ["1L1"], - growl: ["1L1"], - haze: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - jumpkick: ["1L1"], - knockoff: ["1L1"], - lowkick: ["1L1"], - lunge: ["1L1"], - mimic: ["1L1"], - mirrormove: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - peck: ["1L1"], - pluck: ["1L1"], - protect: ["1L1"], - pursuit: ["1L1"], - quickattack: ["1L1"], - rage: ["1L1"], - raindance: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roost: ["1L1"], - round: ["1L1"], - secretpower: ["1L1"], - skullbash: ["1L1"], - skyattack: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - steelwing: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - supersonic: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - swordsdance: ["1L1"], - tailwind: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thrash: ["1L1"], - throatchop: ["1L1"], - toxic: ["1L1"], - triattack: ["1L1"], - uproar: ["1L1"], - whirlwind: ["1L1"], - workup: ["1L1"], - }, - encounters: [ - {generation: 1, level: 18}, - {generation: 2, level: 4}, - ], - }, - dodrio: { - learnset: { - acrobatics: ["1L1"], - acupressure: ["1L1"], - aerialace: ["1L1"], - agility: ["1L1"], - aircutter: ["1L1"], - attract: ["1L1"], - batonpass: ["1L1"], - bide: ["1L1"], - bodyslam: ["1L1"], - bravebird: ["1L1"], - captivate: ["1L1"], - confide: ["1L1"], - curse: ["1L1"], - doubleedge: ["1L1"], - doublehit: ["1L1"], - doubleteam: ["1L1"], - drillpeck: ["1L1"], - drillrun: ["1L1"], - echoedvoice: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - featherdance: ["1L1"], - fly: ["1L1"], - frustration: ["1L1"], - furyattack: ["1L1"], - gigaimpact: ["1L1"], - growl: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - jumpkick: ["1L1"], - knockoff: ["1L1"], - lowkick: ["1L1"], - lunge: ["1L1"], - mimic: ["1L1"], - mirrormove: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - payback: ["1L1"], - peck: ["1L1"], - pluck: ["1L1"], - pounce: ["1L1"], - protect: ["1L1"], - pursuit: ["1L1"], - quickattack: ["1L1"], - rage: ["1L1"], - raindance: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roost: ["1L1"], - round: ["1L1"], - scaryface: ["1L1"], - secretpower: ["1L1"], - skullbash: ["1L1"], - skyattack: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - steelwing: ["1L1"], - stompingtantrum: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - supersonic: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - swordsdance: ["1L1"], - tailwind: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thrash: ["1L1"], - throatchop: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - triattack: ["1L1"], - uproar: ["1L1"], - whirlwind: ["1L1"], - workup: ["1L1"], - }, - eventData: [ - {generation: 3, level: 34, moves: ["1L1"]}, - ], - encounters: [ - {generation: 1, level: 29}, - {generation: 2, level: 10, gender: "F"}, - {generation: 2, level: 30}, - {generation: 3, level: 29, pokeball: "safariball"}, - {generation: 4, level: 15, gender: "F", nature: "Impish", ivs: {hp: 20, atk: 20, def: 20, spa: 15, spd: 15, spe: 15}, abilities: ["1L1"], pokeball: "pokeball"}, - ], - }, - seel: { - learnset: { - aquajet: ["1L1"], - aquaring: ["1L1"], - aquatail: ["1L1"], - attract: ["1L1"], - aurorabeam: ["1L1"], - avalanche: ["1L1"], - belch: ["1L1"], - bide: ["1L1"], - blizzard: ["1L1"], - bodyslam: ["1L1"], - brine: ["1L1"], - bubblebeam: ["1L1"], - captivate: ["1L1"], - charm: ["1L1"], - chillingwater: ["1L1"], - confide: ["1L1"], - curse: ["1L1"], - disable: ["1L1"], - dive: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - drillrun: ["1L1"], - echoedvoice: ["1L1"], - encore: ["1L1"], - endure: ["1L1"], - entrainment: ["1L1"], - facade: ["1L1"], - fakeout: ["1L1"], - fling: ["1L1"], - flipturn: ["1L1"], - frustration: ["1L1"], - growl: ["1L1"], - hail: ["1L1"], - haze: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - horndrill: ["1L1"], - hydropump: ["1L1"], - icebeam: ["1L1"], - iceshard: ["1L1"], - icespinner: ["1L1"], - iciclespear: ["1L1"], - icywind: ["1L1"], - irontail: ["1L1"], - lick: ["1L1"], - megahorn: ["1L1"], - mimic: ["1L1"], - muddywater: ["1L1"], - naturalgift: ["1L1"], - payday: ["1L1"], - peck: ["1L1"], - perishsong: ["1L1"], - protect: ["1L1"], - rage: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - secretpower: ["1L1"], - signalbeam: ["1L1"], - skullbash: ["1L1"], - slam: ["1L1"], - sleeptalk: ["1L1"], - smartstrike: ["1L1"], - snore: ["1L1"], - snowscape: ["1L1"], - spitup: ["1L1"], - stockpile: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - swallow: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - toxic: ["1L1"], - tripleaxel: ["1L1"], - uproar: ["1L1"], - waterfall: ["1L1"], - watergun: ["1L1"], - waterpulse: ["1L1"], - watersport: ["1L1"], - weatherball: ["1L1"], - whirlpool: ["1L1"], - }, - eventData: [ - {generation: 3, level: 23, abilities: ["1L1"], moves: ["1L1"]}, - ], - encounters: [ - {generation: 1, level: 22}, - ], - }, - dewgong: { - learnset: { - alluringvoice: ["1L1"], - aquajet: ["1L1"], - aquaring: ["1L1"], - aquatail: ["1L1"], - attract: ["1L1"], - aurorabeam: ["1L1"], - avalanche: ["1L1"], - bide: ["1L1"], - blizzard: ["1L1"], - bodyslam: ["1L1"], - brine: ["1L1"], - bubblebeam: ["1L1"], - captivate: ["1L1"], - charm: ["1L1"], - chillingwater: ["1L1"], - confide: ["1L1"], - curse: ["1L1"], - dive: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - drillrun: ["1L1"], - echoedvoice: ["1L1"], - encore: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fakeout: ["1L1"], - fling: ["1L1"], - flipturn: ["1L1"], - frostbreath: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - growl: ["1L1"], - hail: ["1L1"], - haze: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - horndrill: ["1L1"], - hydropump: ["1L1"], - hyperbeam: ["1L1"], - icebeam: ["1L1"], - iceshard: ["1L1"], - icespinner: ["1L1"], - iciclespear: ["1L1"], - icywind: ["1L1"], - irontail: ["1L1"], - knockoff: ["1L1"], - liquidation: ["1L1"], - megahorn: ["1L1"], - mimic: ["1L1"], - muddywater: ["1L1"], - naturalgift: ["1L1"], - payday: ["1L1"], - playrough: ["1L1"], - protect: ["1L1"], - rage: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - secretpower: ["1L1"], - sheercold: ["1L1"], - signalbeam: ["1L1"], - skullbash: ["1L1"], - sleeptalk: ["1L1"], - smartstrike: ["1L1"], - snore: ["1L1"], - snowscape: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - toxic: ["1L1"], - tripleaxel: ["1L1"], - uproar: ["1L1"], - waterfall: ["1L1"], - watergun: ["1L1"], - waterpulse: ["1L1"], - weatherball: ["1L1"], - whirlpool: ["1L1"], - }, - encounters: [ - {generation: 1, level: 15}, - {generation: 2, level: 5}, - {generation: 3, level: 32}, - {generation: 5, level: 30}, - {generation: 6, level: 30, maxEggMoves: 1}, - ], - }, - grimer: { - learnset: { - acidarmor: ["1L1"], - acidspray: ["1L1"], - attract: ["1L1"], - belch: ["1L1"], - bide: ["1L1"], - bodyslam: ["1L1"], - captivate: ["1L1"], - confide: ["1L1"], - confuseray: ["1L1"], - curse: ["1L1"], - dig: ["1L1"], - disable: ["1L1"], - doubleteam: ["1L1"], - drainpunch: ["1L1"], - dynamicpunch: ["1L1"], - endure: ["1L1"], - explosion: ["1L1"], - facade: ["1L1"], - fireblast: ["1L1"], - firepunch: ["1L1"], - flamethrower: ["1L1"], - fling: ["1L1"], - frustration: ["1L1"], - gigadrain: ["1L1"], - gunkshot: ["1L1"], - harden: ["1L1"], - haze: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hex: ["1L1"], - hiddenpower: ["1L1"], - icepunch: ["1L1"], - imprison: ["1L1"], - incinerate: ["1L1"], - infestation: ["1L1"], - lick: ["1L1"], - meanlook: ["1L1"], - megadrain: ["1L1"], - memento: ["1L1"], - metronome: ["1L1"], - mimic: ["1L1"], - minimize: ["1L1"], - mudbomb: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - painsplit: ["1L1"], - payback: ["1L1"], - poisongas: ["1L1"], - poisonjab: ["1L1"], - pound: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - rage: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rockslide: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - sandstorm: ["1L1"], - scaryface: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - selfdestruct: ["1L1"], - shadowball: ["1L1"], - shadowpunch: ["1L1"], - shadowsneak: ["1L1"], - shockwave: ["1L1"], - sleeptalk: ["1L1"], - sludge: ["1L1"], - sludgebomb: ["1L1"], - sludgewave: ["1L1"], - snore: ["1L1"], - spitup: ["1L1"], - stockpile: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swallow: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderpunch: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - venoshock: ["1L1"], - zapcannon: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 3, level: 23, moves: ["1L1"]}, - ], - encounters: [ - {generation: 1, level: 23}, - ], - }, - grimeralola: { - learnset: { - acidarmor: ["1L1"], - acidspray: ["1L1"], - assurance: ["1L1"], - attract: ["1L1"], - belch: ["1L1"], - bite: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - brutalswing: ["1L1"], - clearsmog: ["1L1"], - confide: ["1L1"], - crunch: ["1L1"], - curse: ["1L1"], - darkpulse: ["1L1"], - dig: ["1L1"], - disable: ["1L1"], - doubleteam: ["1L1"], - drainpunch: ["1L1"], - embargo: ["1L1"], - endure: ["1L1"], - explosion: ["1L1"], - facade: ["1L1"], - fireblast: ["1L1"], - firepunch: ["1L1"], - flamethrower: ["1L1"], - fling: ["1L1"], - frustration: ["1L1"], - gastroacid: ["1L1"], - gigadrain: ["1L1"], - gigaimpact: ["1L1"], - gunkshot: ["1L1"], - harden: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hex: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - icepunch: ["1L1"], - imprison: ["1L1"], - infestation: ["1L1"], - knockoff: ["1L1"], - meanlook: ["1L1"], - megadrain: ["1L1"], - memento: ["1L1"], - metronome: ["1L1"], - minimize: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - painsplit: ["1L1"], - payback: ["1L1"], - poisonfang: ["1L1"], - poisongas: ["1L1"], - poisonjab: ["1L1"], - pound: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - pursuit: ["1L1"], - quash: ["1L1"], - raindance: ["1L1"], - recycle: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rockpolish: ["1L1"], - rockslide: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - sandstorm: ["1L1"], - scaryface: ["1L1"], - screech: ["1L1"], - selfdestruct: ["1L1"], - shadowball: ["1L1"], - shadowsneak: ["1L1"], - shockwave: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - sludgewave: ["1L1"], - snarl: ["1L1"], - snore: ["1L1"], - spite: ["1L1"], - spitup: ["1L1"], - stockpile: ["1L1"], - stoneedge: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swallow: ["1L1"], - swift: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderpunch: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - venoshock: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 7, level: 10, abilities: ["1L1"], moves: ["1L1"], pokeball: "cherishball"}, - ], - }, - muk: { - learnset: { - acidarmor: ["1L1"], - acidspray: ["1L1"], - attract: ["1L1"], - belch: ["1L1"], - bide: ["1L1"], - block: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - captivate: ["1L1"], - confide: ["1L1"], - confuseray: ["1L1"], - curse: ["1L1"], - darkpulse: ["1L1"], - dig: ["1L1"], - disable: ["1L1"], - doubleteam: ["1L1"], - drainpunch: ["1L1"], - dynamicpunch: ["1L1"], - endure: ["1L1"], - explosion: ["1L1"], - facade: ["1L1"], - fireblast: ["1L1"], - firepunch: ["1L1"], - flamethrower: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - focuspunch: ["1L1"], - frustration: ["1L1"], - gigadrain: ["1L1"], - gigaimpact: ["1L1"], - gunkshot: ["1L1"], - harden: ["1L1"], - haze: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hex: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - icepunch: ["1L1"], - imprison: ["1L1"], - incinerate: ["1L1"], - infestation: ["1L1"], - knockoff: ["1L1"], - lashout: ["1L1"], - lunge: ["1L1"], - megadrain: ["1L1"], - memento: ["1L1"], - metronome: ["1L1"], - mimic: ["1L1"], - minimize: ["1L1"], - moonblast: ["1L1"], - mudbomb: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - painsplit: ["1L1"], - payback: ["1L1"], - poisongas: ["1L1"], - poisonjab: ["1L1"], - pound: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - rage: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - sandstorm: ["1L1"], - scaryface: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - selfdestruct: ["1L1"], - shadowball: ["1L1"], - shockwave: ["1L1"], - sleeptalk: ["1L1"], - sludge: ["1L1"], - sludgebomb: ["1L1"], - sludgewave: ["1L1"], - snore: ["1L1"], - spite: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderpunch: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - toxicspikes: ["1L1"], - venomdrench: ["1L1"], - venoshock: ["1L1"], - zapcannon: ["1L1"], - zenheadbutt: ["1L1"], - }, - encounters: [ - {generation: 1, level: 25}, - {generation: 2, level: 5}, - {generation: 3, level: 32}, - {generation: 4, level: 15}, - {generation: 5, level: 5}, - {generation: 5, level: 35, isHidden: true}, - {generation: 6, level: 30}, - ], - }, - mukalola: { - learnset: { - acidarmor: ["1L1"], - acidspray: ["1L1"], - attract: ["1L1"], - belch: ["1L1"], - bite: ["1L1"], - block: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - brutalswing: ["1L1"], - confide: ["1L1"], - crunch: ["1L1"], - curse: ["1L1"], - darkpulse: ["1L1"], - dig: ["1L1"], - disable: ["1L1"], - doubleteam: ["1L1"], - drainpunch: ["1L1"], - embargo: ["1L1"], - endure: ["1L1"], - explosion: ["1L1"], - facade: ["1L1"], - fireblast: ["1L1"], - firepunch: ["1L1"], - flamethrower: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - focuspunch: ["1L1"], - foulplay: ["1L1"], - frustration: ["1L1"], - gastroacid: ["1L1"], - gigadrain: ["1L1"], - gigaimpact: ["1L1"], - gunkshot: ["1L1"], - harden: ["1L1"], - haze: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hex: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - icepunch: ["1L1"], - imprison: ["1L1"], - infestation: ["1L1"], - knockoff: ["1L1"], - lashout: ["1L1"], - megadrain: ["1L1"], - memento: ["1L1"], - metronome: ["1L1"], - minimize: ["1L1"], - moonblast: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - painsplit: ["1L1"], - payback: ["1L1"], - poisonfang: ["1L1"], - poisongas: ["1L1"], - poisonjab: ["1L1"], - pound: ["1L1"], - protect: ["1L1"], - quash: ["1L1"], - raindance: ["1L1"], - recycle: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rockpolish: ["1L1"], - rockslide: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - sandstorm: ["1L1"], - scaryface: ["1L1"], - screech: ["1L1"], - selfdestruct: ["1L1"], - shadowball: ["1L1"], - shockwave: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - sludgewave: ["1L1"], - snarl: ["1L1"], - snore: ["1L1"], - spite: ["1L1"], - stoneedge: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderpunch: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - venomdrench: ["1L1"], - venoshock: ["1L1"], - zenheadbutt: ["1L1"], - }, - }, - shellder: { - learnset: { - aquaring: ["1L1"], - attract: ["1L1"], - aurorabeam: ["1L1"], - avalanche: ["1L1"], - barrier: ["1L1"], - bide: ["1L1"], - blizzard: ["1L1"], - brine: ["1L1"], - bubblebeam: ["1L1"], - captivate: ["1L1"], - chillingwater: ["1L1"], - clamp: ["1L1"], - confide: ["1L1"], - curse: ["1L1"], - dive: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - endure: ["1L1"], - explosion: ["1L1"], - facade: ["1L1"], - frustration: ["1L1"], - hail: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hydropump: ["1L1"], - icebeam: ["1L1"], - iceshard: ["1L1"], - icespinner: ["1L1"], - iciclespear: ["1L1"], - icywind: ["1L1"], - irondefense: ["1L1"], - leer: ["1L1"], - lifedew: ["1L1"], - liquidation: ["1L1"], - mimic: ["1L1"], - mudshot: ["1L1"], - naturalgift: ["1L1"], - payback: ["1L1"], - protect: ["1L1"], - rage: ["1L1"], - raindance: ["1L1"], - rapidspin: ["1L1"], - razorshell: ["1L1"], - reflect: ["1L1"], - refresh: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rockblast: ["1L1"], - round: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - selfdestruct: ["1L1"], - shellsmash: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - snowscape: ["1L1"], - spikes: ["1L1"], - substitute: ["1L1"], - supersonic: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - teleport: ["1L1"], - terablast: ["1L1"], - toxic: ["1L1"], - toxicspikes: ["1L1"], - triattack: ["1L1"], - twineedle: ["1L1"], - waterfall: ["1L1"], - watergun: ["1L1"], - waterpulse: ["1L1"], - whirlpool: ["1L1"], - withdraw: ["1L1"], - }, - eventData: [ - {generation: 3, level: 24, gender: "F", nature: "Brave", ivs: {hp: 5, atk: 19, def: 18, spa: 5, spd: 11, spe: 13}, abilities: ["1L1"], moves: ["1L1"], pokeball: "pokeball"}, - {generation: 3, level: 10, gender: "M", abilities: ["1L1"], moves: ["1L1"], pokeball: "pokeball"}, - {generation: 3, level: 29, abilities: ["1L1"], moves: ["1L1"]}, - ], - encounters: [ - {generation: 1, level: 10}, - ], - }, - cloyster: { - learnset: { - attract: ["1L1"], - aurorabeam: ["1L1"], - avalanche: ["1L1"], - barrier: ["1L1"], - bide: ["1L1"], - blizzard: ["1L1"], - bodyslam: ["1L1"], - brine: ["1L1"], - bubblebeam: ["1L1"], - captivate: ["1L1"], - chillingwater: ["1L1"], - clamp: ["1L1"], - confide: ["1L1"], - curse: ["1L1"], - dive: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - drillrun: ["1L1"], - endure: ["1L1"], - explosion: ["1L1"], - facade: ["1L1"], - frostbreath: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - hail: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hydropump: ["1L1"], - hyperbeam: ["1L1"], - icebeam: ["1L1"], - iceshard: ["1L1"], - icespinner: ["1L1"], - iciclecrash: ["1L1"], - iciclespear: ["1L1"], - icywind: ["1L1"], - irondefense: ["1L1"], - leer: ["1L1"], - lightscreen: ["1L1"], - liquidation: ["1L1"], - mimic: ["1L1"], - mudshot: ["1L1"], - naturalgift: ["1L1"], - payback: ["1L1"], - pinmissile: ["1L1"], - poisonjab: ["1L1"], - protect: ["1L1"], - rage: ["1L1"], - raindance: ["1L1"], - razorshell: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rockblast: ["1L1"], - round: ["1L1"], - scaryface: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - selfdestruct: ["1L1"], - shellsmash: ["1L1"], - signalbeam: ["1L1"], - sleeptalk: ["1L1"], - smartstrike: ["1L1"], - snore: ["1L1"], - snowscape: ["1L1"], - spikecannon: ["1L1"], - spikes: ["1L1"], - steelroller: ["1L1"], - substitute: ["1L1"], - supersonic: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - teleport: ["1L1"], - terablast: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - toxicspikes: ["1L1"], - triattack: ["1L1"], - twineedle: ["1L1"], - waterfall: ["1L1"], - watergun: ["1L1"], - waterpulse: ["1L1"], - weatherball: ["1L1"], - whirlpool: ["1L1"], - withdraw: ["1L1"], - }, - eventData: [ - {generation: 5, level: 30, gender: "M", nature: "Naughty", abilities: ["1L1"], moves: ["1L1"], pokeball: "pokeball"}, - ], - }, - gastly: { - learnset: { - acidspray: ["1L1"], - allyswitch: ["1L1"], - astonish: ["1L1"], - attract: ["1L1"], - bide: ["1L1"], - captivate: ["1L1"], - clearsmog: ["1L1"], - confide: ["1L1"], - confuseray: ["1L1"], - corrosivegas: ["1L1"], - curse: ["1L1"], - darkpulse: ["1L1"], - dazzlinggleam: ["1L1"], - destinybond: ["1L1"], - disable: ["1L1"], - doubleteam: ["1L1"], - dreameater: ["1L1"], - embargo: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - explosion: ["1L1"], - facade: ["1L1"], - firepunch: ["1L1"], - foulplay: ["1L1"], - frustration: ["1L1"], - gigadrain: ["1L1"], - grudge: ["1L1"], - gunkshot: ["1L1"], - haze: ["1L1"], - headbutt: ["1L1"], - hex: ["1L1"], - hiddenpower: ["1L1"], - hypnosis: ["1L1"], - icepunch: ["1L1"], - icywind: ["1L1"], - imprison: ["1L1"], - infestation: ["1L1"], - knockoff: ["1L1"], - lick: ["1L1"], - meanlook: ["1L1"], - megadrain: ["1L1"], - mimic: ["1L1"], - nastyplot: ["1L1"], - naturalgift: ["1L1"], - nightmare: ["1L1"], - nightshade: ["1L1"], - ominouswind: ["1L1"], - painsplit: ["1L1"], - payback: ["1L1"], - perishsong: ["1L1"], - poisongas: ["1L1"], - poisonjab: ["1L1"], - poltergeist: ["1L1"], - protect: ["1L1"], - psychic: ["1L1"], - psychup: ["1L1"], - psywave: ["1L1"], - rage: ["1L1"], - raindance: ["1L1"], - reflecttype: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - round: ["1L1"], - scaryface: ["1L1"], - secretpower: ["1L1"], - selfdestruct: ["1L1"], - shadowball: ["1L1"], - skillswap: ["1L1"], - skittersmack: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - sludgewave: ["1L1"], - smog: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - spite: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - taunt: ["1L1"], - telekinesis: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderpunch: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - trick: ["1L1"], - trickroom: ["1L1"], - uproar: ["1L1"], - venoshock: ["1L1"], - willowisp: ["1L1"], - wonderroom: ["1L1"], - zapcannon: ["1L1"], - }, - encounters: [ - {generation: 1, level: 18}, - ], - }, - haunter: { - learnset: { - acidspray: ["1L1"], - allyswitch: ["1L1"], - attract: ["1L1"], - bide: ["1L1"], - captivate: ["1L1"], - confide: ["1L1"], - confuseray: ["1L1"], - corrosivegas: ["1L1"], - curse: ["1L1"], - darkpulse: ["1L1"], - dazzlinggleam: ["1L1"], - destinybond: ["1L1"], - doubleteam: ["1L1"], - dreameater: ["1L1"], - embargo: ["1L1"], - encore: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - explosion: ["1L1"], - facade: ["1L1"], - firepunch: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - foulplay: ["1L1"], - frustration: ["1L1"], - gigadrain: ["1L1"], - gunkshot: ["1L1"], - haze: ["1L1"], - headbutt: ["1L1"], - hex: ["1L1"], - hiddenpower: ["1L1"], - hypnosis: ["1L1"], - icepunch: ["1L1"], - icywind: ["1L1"], - imprison: ["1L1"], - infestation: ["1L1"], - knockoff: ["1L1"], - lick: ["1L1"], - meanlook: ["1L1"], - megadrain: ["1L1"], - metronome: ["1L1"], - mimic: ["1L1"], - nastyplot: ["1L1"], - naturalgift: ["1L1"], - nightmare: ["1L1"], - nightshade: ["1L1"], - ominouswind: ["1L1"], - painsplit: ["1L1"], - payback: ["1L1"], - phantomforce: ["1L1"], - poisongas: ["1L1"], - poisonjab: ["1L1"], - poltergeist: ["1L1"], - protect: ["1L1"], - psychic: ["1L1"], - psychup: ["1L1"], - psywave: ["1L1"], - rage: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - round: ["1L1"], - scaryface: ["1L1"], - secretpower: ["1L1"], - selfdestruct: ["1L1"], - shadowball: ["1L1"], - shadowclaw: ["1L1"], - shadowpunch: ["1L1"], - skillswap: ["1L1"], - skittersmack: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - sludgewave: ["1L1"], - smog: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - spite: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - taunt: ["1L1"], - telekinesis: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderpunch: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - toxicspikes: ["1L1"], - trick: ["1L1"], - trickroom: ["1L1"], - uproar: ["1L1"], - venoshock: ["1L1"], - willowisp: ["1L1"], - wonderroom: ["1L1"], - zapcannon: ["1L1"], - }, - eventData: [ - {generation: 5, level: 30, moves: ["1L1"], pokeball: "cherishball"}, - ], - encounters: [ - {generation: 1, level: 20}, - {generation: 2, level: 15}, - {generation: 3, level: 20}, - {generation: 4, level: 16}, - ], - }, - gengar: { - learnset: { - acidspray: ["1L1"], - allyswitch: ["1L1"], - astonish: ["1L1"], - attract: ["1L1"], - bide: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - captivate: ["1L1"], - confide: ["1L1"], - confuseray: ["1L1"], - corrosivegas: ["1L1"], - counter: ["1L1"], - curse: ["1L1"], - darkpulse: ["1L1"], - dazzlinggleam: ["1L1"], - destinybond: ["1L1"], - disable: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - drainpunch: ["1L1"], - dreameater: ["1L1"], - dynamicpunch: ["1L1"], - embargo: ["1L1"], - encore: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - explosion: ["1L1"], - facade: ["1L1"], - firepunch: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - focuspunch: ["1L1"], - foulplay: ["1L1"], - frustration: ["1L1"], - gigadrain: ["1L1"], - gigaimpact: ["1L1"], - gunkshot: ["1L1"], - haze: ["1L1"], - headbutt: ["1L1"], - hex: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - hypnosis: ["1L1"], - icepunch: ["1L1"], - icywind: ["1L1"], - imprison: ["1L1"], - infestation: ["1L1"], - knockoff: ["1L1"], - laserfocus: ["1L1"], - lick: ["1L1"], - meanlook: ["1L1"], - megadrain: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - metronome: ["1L1"], - mimic: ["1L1"], - nastyplot: ["1L1"], - naturalgift: ["1L1"], - nightmare: ["1L1"], - nightshade: ["1L1"], - ominouswind: ["1L1"], - painsplit: ["1L1"], - payback: ["1L1"], - perishsong: ["1L1"], - phantomforce: ["1L1"], - poisongas: ["1L1"], - poisonjab: ["1L1"], - poltergeist: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - psychic: ["1L1"], - psychicnoise: ["1L1"], - psychup: ["1L1"], - psywave: ["1L1"], - rage: ["1L1"], - raindance: ["1L1"], - reflecttype: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rocksmash: ["1L1"], - roleplay: ["1L1"], - round: ["1L1"], - scaryface: ["1L1"], - secretpower: ["1L1"], - seismictoss: ["1L1"], - selfdestruct: ["1L1"], - shadowball: ["1L1"], - shadowclaw: ["1L1"], - shadowpunch: ["1L1"], - skillswap: ["1L1"], - skittersmack: ["1L1"], - skullbash: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - sludgewave: ["1L1"], - smog: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - spite: ["1L1"], - strength: ["1L1"], - submission: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - telekinesis: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderpunch: ["1L1"], - thunderwave: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - toxicspikes: ["1L1"], - trick: ["1L1"], - trickroom: ["1L1"], - uproar: ["1L1"], - venoshock: ["1L1"], - willowisp: ["1L1"], - wonderroom: ["1L1"], - zapcannon: ["1L1"], - }, - eventData: [ - {generation: 3, level: 23, gender: "F", nature: "Hardy", ivs: {hp: 19, atk: 14, def: 0, spa: 14, spd: 17, spe: 27}, moves: ["1L1"], pokeball: "pokeball"}, - {generation: 6, level: 25, nature: "Timid", moves: ["1L1"], pokeball: "cherishball"}, - {generation: 6, level: 25, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 6, level: 50, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 6, level: 25, shiny: true, moves: ["1L1"], pokeball: "duskball"}, - {generation: 6, level: 50, shiny: true, gender: "M", moves: ["1L1"], pokeball: "cherishball"}, - {generation: 6, level: 100, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 8, level: 80, gender: "M", nature: "Naughty", abilities: ["1L1"], ivs: {hp: 30, atk: 30, def: 30, spa: 31, spd: 31, spe: 31}, moves: ["1L1"], pokeball: "pokeball"}, - ], - }, - onix: { - learnset: { - ancientpower: ["1L1"], - attract: ["1L1"], - bide: ["1L1"], - bind: ["1L1"], - block: ["1L1"], - bodypress: ["1L1"], - bodyslam: ["1L1"], - breakingswipe: ["1L1"], - brutalswing: ["1L1"], - bulldoze: ["1L1"], - captivate: ["1L1"], - confide: ["1L1"], - curse: ["1L1"], - defensecurl: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dragonbreath: ["1L1"], - dragondance: ["1L1"], - dragonpulse: ["1L1"], - dragontail: ["1L1"], - drillrun: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - endure: ["1L1"], - explosion: ["1L1"], - facade: ["1L1"], - fissure: ["1L1"], - flail: ["1L1"], - flashcannon: ["1L1"], - frustration: ["1L1"], - gyroball: ["1L1"], - harden: ["1L1"], - headbutt: ["1L1"], - headsmash: ["1L1"], - heavyslam: ["1L1"], - hiddenpower: ["1L1"], - highhorsepower: ["1L1"], - ironhead: ["1L1"], - irontail: ["1L1"], - meteorbeam: ["1L1"], - mimic: ["1L1"], - mudslap: ["1L1"], - mudsport: ["1L1"], - naturalgift: ["1L1"], - naturepower: ["1L1"], - payback: ["1L1"], - protect: ["1L1"], - psychup: ["1L1"], - rage: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roar: ["1L1"], - rockblast: ["1L1"], - rockclimb: ["1L1"], - rockpolish: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rockthrow: ["1L1"], - rocktomb: ["1L1"], - rollout: ["1L1"], - rototiller: ["1L1"], - round: ["1L1"], - sandstorm: ["1L1"], - sandtomb: ["1L1"], - scaryface: ["1L1"], - scorchingsands: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - selfdestruct: ["1L1"], - skullbash: ["1L1"], - slam: ["1L1"], - sleeptalk: ["1L1"], - smackdown: ["1L1"], - snore: ["1L1"], - stealthrock: ["1L1"], - stompingtantrum: ["1L1"], - stoneedge: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - twister: ["1L1"], - wideguard: ["1L1"], - }, - encounters: [ - {generation: 1, level: 13}, - ], - }, - steelix: { - learnset: { - ancientpower: ["1L1"], - aquatail: ["1L1"], - attract: ["1L1"], - autotomize: ["1L1"], - bind: ["1L1"], - block: ["1L1"], - bodypress: ["1L1"], - bodyslam: ["1L1"], - breakingswipe: ["1L1"], - brutalswing: ["1L1"], - bulldoze: ["1L1"], - captivate: ["1L1"], - confide: ["1L1"], - crunch: ["1L1"], - curse: ["1L1"], - cut: ["1L1"], - darkpulse: ["1L1"], - defensecurl: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dragonbreath: ["1L1"], - dragondance: ["1L1"], - dragonpulse: ["1L1"], - dragontail: ["1L1"], - drillrun: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - endure: ["1L1"], - explosion: ["1L1"], - facade: ["1L1"], - firefang: ["1L1"], - flashcannon: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - gyroball: ["1L1"], - harden: ["1L1"], - headbutt: ["1L1"], - heavyslam: ["1L1"], - hiddenpower: ["1L1"], - highhorsepower: ["1L1"], - hyperbeam: ["1L1"], - icefang: ["1L1"], - irondefense: ["1L1"], - ironhead: ["1L1"], - irontail: ["1L1"], - magnetrise: ["1L1"], - meteorbeam: ["1L1"], - mimic: ["1L1"], - mudslap: ["1L1"], - mudsport: ["1L1"], - naturalgift: ["1L1"], - naturepower: ["1L1"], - payback: ["1L1"], - protect: ["1L1"], - psychicfangs: ["1L1"], - psychup: ["1L1"], - rage: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roar: ["1L1"], - rockblast: ["1L1"], - rockclimb: ["1L1"], - rockpolish: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rockthrow: ["1L1"], - rocktomb: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - sandstorm: ["1L1"], - sandtomb: ["1L1"], - scaryface: ["1L1"], - scorchingsands: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - selfdestruct: ["1L1"], - slam: ["1L1"], - sleeptalk: ["1L1"], - smackdown: ["1L1"], - snore: ["1L1"], - stealthrock: ["1L1"], - steelbeam: ["1L1"], - steelroller: ["1L1"], - stompingtantrum: ["1L1"], - stoneedge: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - tackle: ["1L1"], - taunt: ["1L1"], - thunderfang: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - twister: ["1L1"], - }, - }, - drowzee: { - learnset: { - allyswitch: ["1L1"], - assist: ["1L1"], - attract: ["1L1"], - barrier: ["1L1"], - bellydrum: ["1L1"], - bide: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - calmmind: ["1L1"], - captivate: ["1L1"], - confide: ["1L1"], - confusion: ["1L1"], - counter: ["1L1"], - curse: ["1L1"], - dazzlinggleam: ["1L1"], - disable: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - drainingkiss: ["1L1"], - drainpunch: ["1L1"], - dreameater: ["1L1"], - dynamicpunch: ["1L1"], - encore: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - expandingforce: ["1L1"], - facade: ["1L1"], - firepunch: ["1L1"], - flash: ["1L1"], - flatter: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - focuspunch: ["1L1"], - foulplay: ["1L1"], - frustration: ["1L1"], - futuresight: ["1L1"], - grassknot: ["1L1"], - guardswap: ["1L1"], - haze: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hypnosis: ["1L1"], - icepunch: ["1L1"], - imprison: ["1L1"], - knockoff: ["1L1"], - lightscreen: ["1L1"], - lowkick: ["1L1"], - lowsweep: ["1L1"], - magiccoat: ["1L1"], - magicroom: ["1L1"], - meditate: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - metronome: ["1L1"], - mimic: ["1L1"], - nastyplot: ["1L1"], - naturalgift: ["1L1"], - nightmare: ["1L1"], - nightshade: ["1L1"], - poisongas: ["1L1"], - pound: ["1L1"], - powersplit: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - psybeam: ["1L1"], - psychic: ["1L1"], - psychicnoise: ["1L1"], - psychicterrain: ["1L1"], - psychocut: ["1L1"], - psychup: ["1L1"], - psyshock: ["1L1"], - psywave: ["1L1"], - rage: ["1L1"], - raindance: ["1L1"], - recycle: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roleplay: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - secretpower: ["1L1"], - seismictoss: ["1L1"], - shadowball: ["1L1"], - signalbeam: ["1L1"], - skillswap: ["1L1"], - skullbash: ["1L1"], - sleeptalk: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - storedpower: ["1L1"], - submission: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - synchronoise: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - telekinesis: ["1L1"], - teleport: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thunderpunch: ["1L1"], - thunderwave: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - triattack: ["1L1"], - trick: ["1L1"], - trickroom: ["1L1"], - wakeupslap: ["1L1"], - wish: ["1L1"], - zapcannon: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 3, level: 5, shiny: 1, abilities: ["1L1"], moves: ["1L1"], pokeball: "pokeball"}, - ], - encounters: [ - {generation: 1, level: 9}, - ], - }, - hypno: { - learnset: { - allyswitch: ["1L1"], - attract: ["1L1"], - barrier: ["1L1"], - batonpass: ["1L1"], - bide: ["1L1"], - bodypress: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - calmmind: ["1L1"], - captivate: ["1L1"], - confide: ["1L1"], - confuseray: ["1L1"], - confusion: ["1L1"], - counter: ["1L1"], - curse: ["1L1"], - dazzlinggleam: ["1L1"], - disable: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - drainingkiss: ["1L1"], - drainpunch: ["1L1"], - dreameater: ["1L1"], - dynamicpunch: ["1L1"], - encore: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - expandingforce: ["1L1"], - facade: ["1L1"], - firepunch: ["1L1"], - flash: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - focuspunch: ["1L1"], - foulplay: ["1L1"], - frustration: ["1L1"], - futuresight: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - haze: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hex: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - hypnosis: ["1L1"], - icepunch: ["1L1"], - imprison: ["1L1"], - knockoff: ["1L1"], - lightscreen: ["1L1"], - lowkick: ["1L1"], - lowsweep: ["1L1"], - magiccoat: ["1L1"], - magicroom: ["1L1"], - meditate: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - metronome: ["1L1"], - mimic: ["1L1"], - nastyplot: ["1L1"], - naturalgift: ["1L1"], - nightmare: ["1L1"], - nightshade: ["1L1"], - poisongas: ["1L1"], - pound: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - psybeam: ["1L1"], - psychic: ["1L1"], - psychicnoise: ["1L1"], - psychicterrain: ["1L1"], - psychup: ["1L1"], - psyshock: ["1L1"], - psywave: ["1L1"], - rage: ["1L1"], - raindance: ["1L1"], - recycle: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roleplay: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - scaryface: ["1L1"], - secretpower: ["1L1"], - seismictoss: ["1L1"], - shadowball: ["1L1"], - signalbeam: ["1L1"], - skillswap: ["1L1"], - skullbash: ["1L1"], - sleeptalk: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - storedpower: ["1L1"], - submission: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - switcheroo: ["1L1"], - synchronoise: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - telekinesis: ["1L1"], - teleport: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thunderpunch: ["1L1"], - thunderwave: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - triattack: ["1L1"], - trick: ["1L1"], - trickroom: ["1L1"], - wakeupslap: ["1L1"], - zapcannon: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 3, level: 34, abilities: ["1L1"], moves: ["1L1"]}, - ], - encounters: [ - {generation: 2, level: 16}, - {generation: 4, level: 16}, - ], - }, - krabby: { - learnset: { - agility: ["1L1"], - allyswitch: ["1L1"], - amnesia: ["1L1"], - ancientpower: ["1L1"], - attract: ["1L1"], - bide: ["1L1"], - blizzard: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - brine: ["1L1"], - bubble: ["1L1"], - bubblebeam: ["1L1"], - captivate: ["1L1"], - chipaway: ["1L1"], - confide: ["1L1"], - crabhammer: ["1L1"], - curse: ["1L1"], - cut: ["1L1"], - dig: ["1L1"], - dive: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - falseswipe: ["1L1"], - flail: ["1L1"], - fling: ["1L1"], - frustration: ["1L1"], - furycutter: ["1L1"], - guillotine: ["1L1"], - hail: ["1L1"], - hammerarm: ["1L1"], - harden: ["1L1"], - haze: ["1L1"], - headbutt: ["1L1"], - hiddenpower: ["1L1"], - honeclaws: ["1L1"], - icebeam: ["1L1"], - icywind: ["1L1"], - irondefense: ["1L1"], - knockoff: ["1L1"], - leer: ["1L1"], - liquidation: ["1L1"], - metalclaw: ["1L1"], - mimic: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - mudsport: ["1L1"], - naturalgift: ["1L1"], - nightslash: ["1L1"], - protect: ["1L1"], - rage: ["1L1"], - raindance: ["1L1"], - razorshell: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - scald: ["1L1"], - secretpower: ["1L1"], - slam: ["1L1"], - slash: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - stomp: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - superpower: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - swordsdance: ["1L1"], - takedown: ["1L1"], - thief: ["1L1"], - tickle: ["1L1"], - toxic: ["1L1"], - visegrip: ["1L1"], - watergun: ["1L1"], - waterpulse: ["1L1"], - whirlpool: ["1L1"], - xscissor: ["1L1"], - }, - encounters: [ - {generation: 1, level: 10}, - ], - }, - kingler: { - learnset: { - agility: ["1L1"], - allyswitch: ["1L1"], - amnesia: ["1L1"], - ancientpower: ["1L1"], - attract: ["1L1"], - bide: ["1L1"], - blizzard: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - brine: ["1L1"], - brutalswing: ["1L1"], - bubble: ["1L1"], - bubblebeam: ["1L1"], - captivate: ["1L1"], - confide: ["1L1"], - crabhammer: ["1L1"], - curse: ["1L1"], - cut: ["1L1"], - dig: ["1L1"], - dive: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - falseswipe: ["1L1"], - flail: ["1L1"], - fling: ["1L1"], - frustration: ["1L1"], - furycutter: ["1L1"], - gigaimpact: ["1L1"], - guillotine: ["1L1"], - hail: ["1L1"], - hammerarm: ["1L1"], - harden: ["1L1"], - headbutt: ["1L1"], - hiddenpower: ["1L1"], - highhorsepower: ["1L1"], - honeclaws: ["1L1"], - hydropump: ["1L1"], - hyperbeam: ["1L1"], - icebeam: ["1L1"], - icywind: ["1L1"], - irondefense: ["1L1"], - knockoff: ["1L1"], - leer: ["1L1"], - liquidation: ["1L1"], - metalclaw: ["1L1"], - mimic: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - mudsport: ["1L1"], - naturalgift: ["1L1"], - protect: ["1L1"], - quash: ["1L1"], - rage: ["1L1"], - raindance: ["1L1"], - razorshell: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - scald: ["1L1"], - secretpower: ["1L1"], - slam: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - stomp: ["1L1"], - stompingtantrum: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - superpower: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - swordsdance: ["1L1"], - takedown: ["1L1"], - thief: ["1L1"], - toxic: ["1L1"], - visegrip: ["1L1"], - watergun: ["1L1"], - waterpulse: ["1L1"], - whirlpool: ["1L1"], - wideguard: ["1L1"], - xscissor: ["1L1"], - }, - encounters: [ - {generation: 1, level: 15}, - {generation: 3, level: 25}, - {generation: 4, level: 22}, - ], - }, - voltorb: { - learnset: { - agility: ["1L1"], - bide: ["1L1"], - charge: ["1L1"], - chargebeam: ["1L1"], - confide: ["1L1"], - curse: ["1L1"], - discharge: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - eerieimpulse: ["1L1"], - electricterrain: ["1L1"], - electroball: ["1L1"], - electroweb: ["1L1"], - endure: ["1L1"], - explosion: ["1L1"], - facade: ["1L1"], - flash: ["1L1"], - foulplay: ["1L1"], - frustration: ["1L1"], - gyroball: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - lightscreen: ["1L1"], - magiccoat: ["1L1"], - magnetrise: ["1L1"], - metalsound: ["1L1"], - mimic: ["1L1"], - mirrorcoat: ["1L1"], - naturalgift: ["1L1"], - protect: ["1L1"], - rage: ["1L1"], - raindance: ["1L1"], - recycle: ["1L1"], - reflect: ["1L1"], - refresh: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - selfdestruct: ["1L1"], - shockwave: ["1L1"], - signalbeam: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - sonicboom: ["1L1"], - spark: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - teleport: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thundershock: ["1L1"], - thunderwave: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - voltswitch: ["1L1"], - wildcharge: ["1L1"], - zapcannon: ["1L1"], - }, - eventData: [ - {generation: 3, level: 19, moves: ["1L1"]}, - ], - encounters: [ - {generation: 1, level: 14}, - {generation: 1, level: 40}, - ], - }, - voltorbhisui: { - learnset: { - agility: ["1L1"], - bulletseed: ["1L1"], - charge: ["1L1"], - chargebeam: ["1L1"], - discharge: ["1L1"], - doubleedge: ["1L1"], - electricterrain: ["1L1"], - electroball: ["1L1"], - electroweb: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - explosion: ["1L1"], - facade: ["1L1"], - foulplay: ["1L1"], - gigadrain: ["1L1"], - grassknot: ["1L1"], - grassyglide: ["1L1"], - grassyterrain: ["1L1"], - gyroball: ["1L1"], - leafstorm: ["1L1"], - leechseed: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - recycle: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - rollout: ["1L1"], - screech: ["1L1"], - seedbomb: ["1L1"], - selfdestruct: ["1L1"], - sleeptalk: ["1L1"], - solarbeam: ["1L1"], - stunspore: ["1L1"], - substitute: ["1L1"], - swift: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thundershock: ["1L1"], - thunderwave: ["1L1"], - voltswitch: ["1L1"], - wildcharge: ["1L1"], - worryseed: ["1L1"], - }, - }, - electrode: { - learnset: { - agility: ["1L1"], - bide: ["1L1"], - charge: ["1L1"], - chargebeam: ["1L1"], - confide: ["1L1"], - curse: ["1L1"], - discharge: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - eerieimpulse: ["1L1"], - electricterrain: ["1L1"], - electroball: ["1L1"], - electroweb: ["1L1"], - endure: ["1L1"], - explosion: ["1L1"], - facade: ["1L1"], - flash: ["1L1"], - foulplay: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - gyroball: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - lightscreen: ["1L1"], - magiccoat: ["1L1"], - magneticflux: ["1L1"], - magnetrise: ["1L1"], - metalsound: ["1L1"], - mimic: ["1L1"], - mirrorcoat: ["1L1"], - naturalgift: ["1L1"], - protect: ["1L1"], - rage: ["1L1"], - raindance: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - scaryface: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - selfdestruct: ["1L1"], - shockwave: ["1L1"], - signalbeam: ["1L1"], - skullbash: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - sonicboom: ["1L1"], - spark: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - supercellslam: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - telekinesis: ["1L1"], - teleport: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thundershock: ["1L1"], - thunderwave: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - voltswitch: ["1L1"], - wildcharge: ["1L1"], - zapcannon: ["1L1"], - }, - 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: ["1L1"], pokeball: "pokeball"}, - {generation: 4, level: 23}, - ], - }, - electrodehisui: { - learnset: { - agility: ["1L1"], - bulletseed: ["1L1"], - charge: ["1L1"], - chargebeam: ["1L1"], - chloroblast: ["1L1"], - curse: ["1L1"], - discharge: ["1L1"], - doubleedge: ["1L1"], - electricterrain: ["1L1"], - electroball: ["1L1"], - electroweb: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - explosion: ["1L1"], - facade: ["1L1"], - foulplay: ["1L1"], - gigadrain: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - grassyglide: ["1L1"], - grassyterrain: ["1L1"], - gyroball: ["1L1"], - hyperbeam: ["1L1"], - leafstorm: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - rollout: ["1L1"], - scaryface: ["1L1"], - screech: ["1L1"], - seedbomb: ["1L1"], - selfdestruct: ["1L1"], - sleeptalk: ["1L1"], - solarbeam: ["1L1"], - stunspore: ["1L1"], - substitute: ["1L1"], - supercellslam: ["1L1"], - swift: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thundershock: ["1L1"], - thunderwave: ["1L1"], - voltswitch: ["1L1"], - wildcharge: ["1L1"], - }, - }, - exeggcute: { - learnset: { - absorb: ["1L1"], - ancientpower: ["1L1"], - attract: ["1L1"], - barrage: ["1L1"], - bestow: ["1L1"], - bide: ["1L1"], - block: ["1L1"], - bulletseed: ["1L1"], - captivate: ["1L1"], - confide: ["1L1"], - confusion: ["1L1"], - curse: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dreameater: ["1L1"], - eggbomb: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - explosion: ["1L1"], - extrasensory: ["1L1"], - facade: ["1L1"], - flash: ["1L1"], - frustration: ["1L1"], - gigadrain: ["1L1"], - grassknot: ["1L1"], - grassyglide: ["1L1"], - grassyterrain: ["1L1"], - gravity: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hypnosis: ["1L1"], - imprison: ["1L1"], - infestation: ["1L1"], - ingrain: ["1L1"], - leafstorm: ["1L1"], - leechseed: ["1L1"], - lightscreen: ["1L1"], - luckychant: ["1L1"], - megadrain: ["1L1"], - mimic: ["1L1"], - moonlight: ["1L1"], - naturalgift: ["1L1"], - naturepower: ["1L1"], - nightmare: ["1L1"], - poisonpowder: ["1L1"], - powerswap: ["1L1"], - protect: ["1L1"], - psybeam: ["1L1"], - psychic: ["1L1"], - psychicnoise: ["1L1"], - psychup: ["1L1"], - psyshock: ["1L1"], - psywave: ["1L1"], - rage: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - secretpower: ["1L1"], - seedbomb: ["1L1"], - selfdestruct: ["1L1"], - skillswap: ["1L1"], - sleeppowder: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - storedpower: ["1L1"], - strength: ["1L1"], - stunspore: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - sweetscent: ["1L1"], - swordsdance: ["1L1"], - synthesis: ["1L1"], - takedown: ["1L1"], - telekinesis: ["1L1"], - teleport: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - toxic: ["1L1"], - trick: ["1L1"], - trickroom: ["1L1"], - uproar: ["1L1"], - wish: ["1L1"], - worryseed: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 3, level: 5, shiny: 1, moves: ["1L1"], pokeball: "pokeball"}, - ], - encounters: [ - {generation: 1, level: 20}, - ], - }, - exeggutor: { - learnset: { - absorb: ["1L1"], - ancientpower: ["1L1"], - attract: ["1L1"], - barrage: ["1L1"], - bide: ["1L1"], - block: ["1L1"], - bodyslam: ["1L1"], - breakingswipe: ["1L1"], - brickbreak: ["1L1"], - bulldoze: ["1L1"], - bulletseed: ["1L1"], - calmmind: ["1L1"], - captivate: ["1L1"], - confide: ["1L1"], - confusion: ["1L1"], - curse: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dracometeor: ["1L1"], - dragoncheer: ["1L1"], - dragonhammer: ["1L1"], - dragonpulse: ["1L1"], - dragontail: ["1L1"], - dreameater: ["1L1"], - earthquake: ["1L1"], - eggbomb: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - expandingforce: ["1L1"], - explosion: ["1L1"], - extrasensory: ["1L1"], - facade: ["1L1"], - flamethrower: ["1L1"], - flash: ["1L1"], - frustration: ["1L1"], - futuresight: ["1L1"], - gigadrain: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - grassyglide: ["1L1"], - grassyterrain: ["1L1"], - gravity: ["1L1"], - growth: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - hypnosis: ["1L1"], - imprison: ["1L1"], - infestation: ["1L1"], - ironhead: ["1L1"], - knockoff: ["1L1"], - leafstorm: ["1L1"], - leechseed: ["1L1"], - lightscreen: ["1L1"], - lowkick: ["1L1"], - magicalleaf: ["1L1"], - megadrain: ["1L1"], - mimic: ["1L1"], - naturalgift: ["1L1"], - naturepower: ["1L1"], - nightmare: ["1L1"], - outrage: ["1L1"], - powerswap: ["1L1"], - powerwhip: ["1L1"], - protect: ["1L1"], - psybeam: ["1L1"], - psychic: ["1L1"], - psychicnoise: ["1L1"], - psychicterrain: ["1L1"], - psychocut: ["1L1"], - psychup: ["1L1"], - psyshock: ["1L1"], - psywave: ["1L1"], - rage: ["1L1"], - reflect: ["1L1"], - refresh: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - secretpower: ["1L1"], - seedbomb: ["1L1"], - selfdestruct: ["1L1"], - skillswap: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - stomp: ["1L1"], - stompingtantrum: ["1L1"], - storedpower: ["1L1"], - strength: ["1L1"], - stunspore: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swordsdance: ["1L1"], - synthesis: ["1L1"], - takedown: ["1L1"], - telekinesis: ["1L1"], - teleport: ["1L1"], - terablast: ["1L1"], - terrainpulse: ["1L1"], - thief: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - trick: ["1L1"], - trickroom: ["1L1"], - uproar: ["1L1"], - woodhammer: ["1L1"], - worryseed: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 3, level: 46, moves: ["1L1"]}, - ], - }, - exeggutoralola: { - learnset: { - absorb: ["1L1"], - attract: ["1L1"], - barrage: ["1L1"], - block: ["1L1"], - bodyslam: ["1L1"], - breakingswipe: ["1L1"], - brickbreak: ["1L1"], - brutalswing: ["1L1"], - bulldoze: ["1L1"], - bulletseed: ["1L1"], - calmmind: ["1L1"], - celebrate: ["1L1"], - confide: ["1L1"], - confusion: ["1L1"], - curse: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dracometeor: ["1L1"], - dragoncheer: ["1L1"], - dragonhammer: ["1L1"], - dragonpulse: ["1L1"], - dragontail: ["1L1"], - dreameater: ["1L1"], - earthquake: ["1L1"], - eggbomb: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - explosion: ["1L1"], - extrasensory: ["1L1"], - facade: ["1L1"], - flamethrower: ["1L1"], - frustration: ["1L1"], - gigadrain: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - grassyglide: ["1L1"], - grassyterrain: ["1L1"], - gravity: ["1L1"], - growth: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - hypnosis: ["1L1"], - imprison: ["1L1"], - infestation: ["1L1"], - ironhead: ["1L1"], - irontail: ["1L1"], - knockoff: ["1L1"], - leafstorm: ["1L1"], - leechseed: ["1L1"], - lightscreen: ["1L1"], - lowkick: ["1L1"], - magicalleaf: ["1L1"], - megadrain: ["1L1"], - naturepower: ["1L1"], - outrage: ["1L1"], - powerswap: ["1L1"], - powerwhip: ["1L1"], - protect: ["1L1"], - psybeam: ["1L1"], - psychic: ["1L1"], - psychicnoise: ["1L1"], - psychicterrain: ["1L1"], - psychup: ["1L1"], - psyshock: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - round: ["1L1"], - seedbomb: ["1L1"], - selfdestruct: ["1L1"], - skillswap: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - stompingtantrum: ["1L1"], - storedpower: ["1L1"], - stunspore: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - superpower: ["1L1"], - swagger: ["1L1"], - swordsdance: ["1L1"], - synthesis: ["1L1"], - takedown: ["1L1"], - telekinesis: ["1L1"], - teleport: ["1L1"], - terablast: ["1L1"], - terrainpulse: ["1L1"], - thief: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - trick: ["1L1"], - trickroom: ["1L1"], - uproar: ["1L1"], - woodhammer: ["1L1"], - worryseed: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 7, level: 50, gender: "M", nature: "Modest", isHidden: true, moves: ["1L1"], pokeball: "cherishball"}, - ], - }, - cubone: { - learnset: { - aerialace: ["1L1"], - ancientpower: ["1L1"], - attract: ["1L1"], - bellydrum: ["1L1"], - bide: ["1L1"], - blizzard: ["1L1"], - bodyslam: ["1L1"], - boneclub: ["1L1"], - bonemerang: ["1L1"], - bonerush: ["1L1"], - brickbreak: ["1L1"], - brutalswing: ["1L1"], - bubblebeam: ["1L1"], - bulldoze: ["1L1"], - captivate: ["1L1"], - chipaway: ["1L1"], - confide: ["1L1"], - counter: ["1L1"], - curse: ["1L1"], - detect: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doublekick: ["1L1"], - doubleteam: ["1L1"], - dynamicpunch: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - echoedvoice: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - falseswipe: ["1L1"], - fireblast: ["1L1"], - firepunch: ["1L1"], - fissure: ["1L1"], - flamethrower: ["1L1"], - fling: ["1L1"], - focusenergy: ["1L1"], - focuspunch: ["1L1"], - frustration: ["1L1"], - furycutter: ["1L1"], - growl: ["1L1"], - headbutt: ["1L1"], - hiddenpower: ["1L1"], - icebeam: ["1L1"], - icywind: ["1L1"], - incinerate: ["1L1"], - irondefense: ["1L1"], - ironhead: ["1L1"], - irontail: ["1L1"], - knockoff: ["1L1"], - leer: ["1L1"], - lowkick: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - mimic: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - perishsong: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - rage: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - rockclimb: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - sandstorm: ["1L1"], - scorchingsands: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - seismictoss: ["1L1"], - skullbash: ["1L1"], - sleeptalk: ["1L1"], - smackdown: ["1L1"], - snore: ["1L1"], - stealthrock: ["1L1"], - stompingtantrum: ["1L1"], - strength: ["1L1"], - submission: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - swordsdance: ["1L1"], - tailwhip: ["1L1"], - takedown: ["1L1"], - thief: ["1L1"], - thrash: ["1L1"], - thunderpunch: ["1L1"], - toxic: ["1L1"], - uproar: ["1L1"], - watergun: ["1L1"], - }, - encounters: [ - {generation: 1, level: 16}, - ], - }, - marowak: { - learnset: { - aerialace: ["1L1"], - attract: ["1L1"], - bide: ["1L1"], - blizzard: ["1L1"], - bodyslam: ["1L1"], - boneclub: ["1L1"], - bonemerang: ["1L1"], - bonerush: ["1L1"], - brickbreak: ["1L1"], - brutalswing: ["1L1"], - bubblebeam: ["1L1"], - bulldoze: ["1L1"], - captivate: ["1L1"], - confide: ["1L1"], - counter: ["1L1"], - curse: ["1L1"], - detect: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dynamicpunch: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - echoedvoice: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - falseswipe: ["1L1"], - fireblast: ["1L1"], - firepunch: ["1L1"], - fissure: ["1L1"], - flamethrower: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - focusenergy: ["1L1"], - focuspunch: ["1L1"], - frustration: ["1L1"], - furycutter: ["1L1"], - gigaimpact: ["1L1"], - growl: ["1L1"], - headbutt: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - icebeam: ["1L1"], - icywind: ["1L1"], - incinerate: ["1L1"], - irondefense: ["1L1"], - ironhead: ["1L1"], - irontail: ["1L1"], - knockoff: ["1L1"], - laserfocus: ["1L1"], - leer: ["1L1"], - lowkick: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - mimic: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - outrage: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - rage: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - rockclimb: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - sandstorm: ["1L1"], - scorchingsands: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - seismictoss: ["1L1"], - sing: ["1L1"], - skullbash: ["1L1"], - sleeptalk: ["1L1"], - smackdown: ["1L1"], - snore: ["1L1"], - stealthrock: ["1L1"], - stompingtantrum: ["1L1"], - stoneedge: ["1L1"], - strength: ["1L1"], - submission: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - swordsdance: ["1L1"], - tailwhip: ["1L1"], - takedown: ["1L1"], - thief: ["1L1"], - thrash: ["1L1"], - throatchop: ["1L1"], - thunderpunch: ["1L1"], - toxic: ["1L1"], - uproar: ["1L1"], - watergun: ["1L1"], - }, - eventData: [ - {generation: 3, level: 44, moves: ["1L1"]}, - ], - encounters: [ - {generation: 1, level: 24}, - {generation: 2, level: 12}, - {generation: 4, level: 14}, - ], - }, - marowakalola: { - learnset: { - aerialace: ["1L1"], - allyswitch: ["1L1"], - attract: ["1L1"], - blizzard: ["1L1"], - bodyslam: ["1L1"], - boneclub: ["1L1"], - bonemerang: ["1L1"], - bonerush: ["1L1"], - brickbreak: ["1L1"], - brutalswing: ["1L1"], - bulldoze: ["1L1"], - burningjealousy: ["1L1"], - confide: ["1L1"], - darkpulse: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dreameater: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - echoedvoice: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - falseswipe: ["1L1"], - fireblast: ["1L1"], - firepunch: ["1L1"], - firespin: ["1L1"], - flamecharge: ["1L1"], - flamethrower: ["1L1"], - flamewheel: ["1L1"], - flareblitz: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - focusenergy: ["1L1"], - focuspunch: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - growl: ["1L1"], - headbutt: ["1L1"], - heatwave: ["1L1"], - hex: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - icebeam: ["1L1"], - icywind: ["1L1"], - imprison: ["1L1"], - irondefense: ["1L1"], - ironhead: ["1L1"], - irontail: ["1L1"], - knockoff: ["1L1"], - laserfocus: ["1L1"], - leer: ["1L1"], - lowkick: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - mudslap: ["1L1"], - outrage: ["1L1"], - painsplit: ["1L1"], - poltergeist: ["1L1"], - protect: ["1L1"], - rage: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - rockslide: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - sandstorm: ["1L1"], - scorchingsands: ["1L1"], - screech: ["1L1"], - seismictoss: ["1L1"], - shadowball: ["1L1"], - shadowbone: ["1L1"], - sleeptalk: ["1L1"], - smackdown: ["1L1"], - snore: ["1L1"], - spite: ["1L1"], - stealthrock: ["1L1"], - stompingtantrum: ["1L1"], - stoneedge: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - swordsdance: ["1L1"], - tailwhip: ["1L1"], - thief: ["1L1"], - thrash: ["1L1"], - throatchop: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderpunch: ["1L1"], - toxic: ["1L1"], - uproar: ["1L1"], - willowisp: ["1L1"], - }, - }, - marowakalolatotem: { - learnset: { - aerialace: ["1L1"], - allyswitch: ["1L1"], - attract: ["1L1"], - blizzard: ["1L1"], - boneclub: ["1L1"], - bonemerang: ["1L1"], - bonerush: ["1L1"], - brickbreak: ["1L1"], - brutalswing: ["1L1"], - bulldoze: ["1L1"], - confide: ["1L1"], - darkpulse: ["1L1"], - doubleteam: ["1L1"], - dreameater: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - echoedvoice: ["1L1"], - endeavor: ["1L1"], - facade: ["1L1"], - falseswipe: ["1L1"], - fireblast: ["1L1"], - firepunch: ["1L1"], - flamecharge: ["1L1"], - flamethrower: ["1L1"], - flamewheel: ["1L1"], - flareblitz: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - focuspunch: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - growl: ["1L1"], - heatwave: ["1L1"], - hex: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - icebeam: ["1L1"], - icywind: ["1L1"], - irondefense: ["1L1"], - ironhead: ["1L1"], - irontail: ["1L1"], - knockoff: ["1L1"], - laserfocus: ["1L1"], - leer: ["1L1"], - lowkick: ["1L1"], - outrage: ["1L1"], - painsplit: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - rockslide: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - sandstorm: ["1L1"], - shadowball: ["1L1"], - shadowbone: ["1L1"], - sleeptalk: ["1L1"], - smackdown: ["1L1"], - snore: ["1L1"], - spite: ["1L1"], - stealthrock: ["1L1"], - stompingtantrum: ["1L1"], - stoneedge: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swordsdance: ["1L1"], - tailwhip: ["1L1"], - thief: ["1L1"], - thrash: ["1L1"], - throatchop: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderpunch: ["1L1"], - toxic: ["1L1"], - uproar: ["1L1"], - willowisp: ["1L1"], - }, - eventData: [ - {generation: 7, level: 25, perfectIVs: 3, moves: ["1L1"], pokeball: "pokeball"}, - ], - eventOnly: false, - }, - tyrogue: { - learnset: { - attract: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - bulkup: ["1L1"], - bulldoze: ["1L1"], - bulletpunch: ["1L1"], - captivate: ["1L1"], - confide: ["1L1"], - counter: ["1L1"], - covet: ["1L1"], - curse: ["1L1"], - detect: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - earthquake: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fakeout: ["1L1"], - feint: ["1L1"], - focusenergy: ["1L1"], - foresight: ["1L1"], - frustration: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - highjumpkick: ["1L1"], - laserfocus: ["1L1"], - lowkick: ["1L1"], - lowsweep: ["1L1"], - machpunch: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - mimic: ["1L1"], - mindreader: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - protect: ["1L1"], - pursuit: ["1L1"], - raindance: ["1L1"], - rapidspin: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - roleplay: ["1L1"], - round: ["1L1"], - secretpower: ["1L1"], - seismictoss: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - toxic: ["1L1"], - upperhand: ["1L1"], - uproar: ["1L1"], - vacuumwave: ["1L1"], - workup: ["1L1"], - }, - }, - hitmonlee: { - learnset: { - attract: ["1L1"], - aurasphere: ["1L1"], - axekick: ["1L1"], - batonpass: ["1L1"], - bide: ["1L1"], - blazekick: ["1L1"], - bodyslam: ["1L1"], - bounce: ["1L1"], - brickbreak: ["1L1"], - bulkup: ["1L1"], - bulldoze: ["1L1"], - captivate: ["1L1"], - closecombat: ["1L1"], - coaching: ["1L1"], - confide: ["1L1"], - counter: ["1L1"], - covet: ["1L1"], - curse: ["1L1"], - detect: ["1L1"], - doubleedge: ["1L1"], - doublekick: ["1L1"], - doubleteam: ["1L1"], - dynamicpunch: ["1L1"], - earthquake: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fakeout: ["1L1"], - feint: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - focusenergy: ["1L1"], - focuspunch: ["1L1"], - foresight: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - highjumpkick: ["1L1"], - jumpkick: ["1L1"], - knockoff: ["1L1"], - laserfocus: ["1L1"], - lowkick: ["1L1"], - lowsweep: ["1L1"], - lunge: ["1L1"], - meditate: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - metronome: ["1L1"], - mimic: ["1L1"], - mindreader: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - poisonjab: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - rage: ["1L1"], - raindance: ["1L1"], - refresh: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - revenge: ["1L1"], - reversal: ["1L1"], - rockclimb: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - roleplay: ["1L1"], - rollingkick: ["1L1"], - round: ["1L1"], - scaryface: ["1L1"], - secretpower: ["1L1"], - seismictoss: ["1L1"], - skullbash: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - stompingtantrum: ["1L1"], - stoneedge: ["1L1"], - strength: ["1L1"], - submission: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - sunnyday: ["1L1"], - superpower: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - swordsdance: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - throatchop: ["1L1"], - toxic: ["1L1"], - upperhand: ["1L1"], - uproar: ["1L1"], - vacuumwave: ["1L1"], - wideguard: ["1L1"], - workup: ["1L1"], - }, - eventData: [ - {generation: 3, level: 38, abilities: ["1L1"], moves: ["1L1"]}, - ], - encounters: [ - {generation: 1, level: 30}, - ], - }, - hitmonchan: { - learnset: { - agility: ["1L1"], - attract: ["1L1"], - aurasphere: ["1L1"], - batonpass: ["1L1"], - bide: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - bulkup: ["1L1"], - bulldoze: ["1L1"], - bulletpunch: ["1L1"], - captivate: ["1L1"], - closecombat: ["1L1"], - coaching: ["1L1"], - cometpunch: ["1L1"], - confide: ["1L1"], - counter: ["1L1"], - covet: ["1L1"], - curse: ["1L1"], - detect: ["1L1"], - dizzypunch: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - drainpunch: ["1L1"], - dynamicpunch: ["1L1"], - earthquake: ["1L1"], - encore: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fakeout: ["1L1"], - feint: ["1L1"], - firepunch: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - focusenergy: ["1L1"], - focuspunch: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - icepunch: ["1L1"], - knockoff: ["1L1"], - laserfocus: ["1L1"], - leer: ["1L1"], - lowkick: ["1L1"], - lowsweep: ["1L1"], - machpunch: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - metronome: ["1L1"], - mimic: ["1L1"], - mindreader: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - poisonjab: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - pursuit: ["1L1"], - quickguard: ["1L1"], - rage: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - revenge: ["1L1"], - reversal: ["1L1"], - rockclimb: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - roleplay: ["1L1"], - round: ["1L1"], - scaryface: ["1L1"], - secretpower: ["1L1"], - seismictoss: ["1L1"], - skullbash: ["1L1"], - skyuppercut: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - stoneedge: ["1L1"], - strength: ["1L1"], - submission: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - swordsdance: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - throatchop: ["1L1"], - thunderpunch: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - upperhand: ["1L1"], - uproar: ["1L1"], - vacuumwave: ["1L1"], - workup: ["1L1"], - }, - eventData: [ - {generation: 3, level: 38, abilities: ["1L1"], moves: ["1L1"]}, - ], - encounters: [ - {generation: 1, level: 30}, - ], - }, - hitmontop: { - learnset: { - aerialace: ["1L1"], - agility: ["1L1"], - attract: ["1L1"], - batonpass: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - brutalswing: ["1L1"], - bulkup: ["1L1"], - bulldoze: ["1L1"], - captivate: ["1L1"], - closecombat: ["1L1"], - coaching: ["1L1"], - confide: ["1L1"], - counter: ["1L1"], - covet: ["1L1"], - curse: ["1L1"], - detect: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - drillrun: ["1L1"], - earthquake: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fakeout: ["1L1"], - feint: ["1L1"], - focusblast: ["1L1"], - focusenergy: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - gyroball: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - icespinner: ["1L1"], - laserfocus: ["1L1"], - lowkick: ["1L1"], - lowsweep: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - mimic: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - protect: ["1L1"], - pursuit: ["1L1"], - quickattack: ["1L1"], - quickguard: ["1L1"], - raindance: ["1L1"], - rapidspin: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - revenge: ["1L1"], - reversal: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - roleplay: ["1L1"], - rollingkick: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - sandstorm: ["1L1"], - secretpower: ["1L1"], - seismictoss: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - stoneedge: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - toxic: ["1L1"], - tripleaxel: ["1L1"], - triplekick: ["1L1"], - twister: ["1L1"], - upperhand: ["1L1"], - uproar: ["1L1"], - vacuumwave: ["1L1"], - wideguard: ["1L1"], - workup: ["1L1"], - }, - eventData: [ - {generation: 5, level: 55, gender: "M", nature: "Adamant", abilities: ["1L1"], moves: ["1L1"]}, - ], - }, - lickitung: { - learnset: { - acid: ["1L1"], - amnesia: ["1L1"], - aquatail: ["1L1"], - attract: ["1L1"], - belch: ["1L1"], - bellydrum: ["1L1"], - bide: ["1L1"], - bind: ["1L1"], - blizzard: ["1L1"], - bodypress: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - brutalswing: ["1L1"], - bubblebeam: ["1L1"], - bulldoze: ["1L1"], - captivate: ["1L1"], - chipaway: ["1L1"], - confide: ["1L1"], - counter: ["1L1"], - curse: ["1L1"], - cut: ["1L1"], - defensecurl: ["1L1"], - dig: ["1L1"], - disable: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dragontail: ["1L1"], - dreameater: ["1L1"], - dynamicpunch: ["1L1"], - earthquake: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fireblast: ["1L1"], - firepunch: ["1L1"], - fissure: ["1L1"], - flamethrower: ["1L1"], - fling: ["1L1"], - focuspunch: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - hammerarm: ["1L1"], - headbutt: ["1L1"], - healbell: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hydropump: ["1L1"], - hyperbeam: ["1L1"], - icebeam: ["1L1"], - icepunch: ["1L1"], - icywind: ["1L1"], - incinerate: ["1L1"], - irontail: ["1L1"], - knockoff: ["1L1"], - lick: ["1L1"], - magnitude: ["1L1"], - mefirst: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - mimic: ["1L1"], - muddywater: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - nightmare: ["1L1"], - poweruppunch: ["1L1"], - powerwhip: ["1L1"], - protect: ["1L1"], - psychup: ["1L1"], - rage: ["1L1"], - raindance: ["1L1"], - refresh: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - rockclimb: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - sandstorm: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - seismictoss: ["1L1"], - shadowball: ["1L1"], - shockwave: ["1L1"], - skullbash: ["1L1"], - slam: ["1L1"], - sleeptalk: ["1L1"], - smellingsalts: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - steelroller: ["1L1"], - stomp: ["1L1"], - stompingtantrum: ["1L1"], - strength: ["1L1"], - submission: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - supersonic: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - swordsdance: ["1L1"], - takedown: ["1L1"], - terrainpulse: ["1L1"], - thief: ["1L1"], - thrash: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderpunch: ["1L1"], - toxic: ["1L1"], - watergun: ["1L1"], - waterpulse: ["1L1"], - whirlpool: ["1L1"], - wish: ["1L1"], - workup: ["1L1"], - wrap: ["1L1"], - wringout: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 3, level: 5, shiny: 1, moves: ["1L1"], pokeball: "pokeball"}, - {generation: 3, level: 38, moves: ["1L1"]}, - ], - encounters: [ - {generation: 1, level: 15}, - ], - }, - lickilicky: { - learnset: { - amnesia: ["1L1"], - aquatail: ["1L1"], - attract: ["1L1"], - bellydrum: ["1L1"], - bind: ["1L1"], - blizzard: ["1L1"], - block: ["1L1"], - bodypress: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - brutalswing: ["1L1"], - bulldoze: ["1L1"], - captivate: ["1L1"], - chipaway: ["1L1"], - confide: ["1L1"], - cut: ["1L1"], - defensecurl: ["1L1"], - dig: ["1L1"], - disable: ["1L1"], - doubleteam: ["1L1"], - dragontail: ["1L1"], - dreameater: ["1L1"], - earthquake: ["1L1"], - endure: ["1L1"], - explosion: ["1L1"], - facade: ["1L1"], - fireblast: ["1L1"], - firepunch: ["1L1"], - flamethrower: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - focuspunch: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - gyroball: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hydropump: ["1L1"], - hyperbeam: ["1L1"], - icebeam: ["1L1"], - icepunch: ["1L1"], - icywind: ["1L1"], - incinerate: ["1L1"], - irontail: ["1L1"], - knockoff: ["1L1"], - lick: ["1L1"], - mefirst: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - muddywater: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - poweruppunch: ["1L1"], - powerwhip: ["1L1"], - protect: ["1L1"], - psychup: ["1L1"], - raindance: ["1L1"], - refresh: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - rockclimb: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - sandstorm: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - selfdestruct: ["1L1"], - shadowball: ["1L1"], - shockwave: ["1L1"], - slam: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - steelroller: ["1L1"], - stomp: ["1L1"], - stompingtantrum: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - supersonic: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - swordsdance: ["1L1"], - terrainpulse: ["1L1"], - thief: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderpunch: ["1L1"], - toxic: ["1L1"], - waterpulse: ["1L1"], - whirlpool: ["1L1"], - workup: ["1L1"], - wrap: ["1L1"], - wringout: ["1L1"], - zenheadbutt: ["1L1"], - }, - }, - koffing: { - learnset: { - acidspray: ["1L1"], - assurance: ["1L1"], - attract: ["1L1"], - belch: ["1L1"], - bide: ["1L1"], - bodyslam: ["1L1"], - captivate: ["1L1"], - clearsmog: ["1L1"], - confide: ["1L1"], - corrosivegas: ["1L1"], - curse: ["1L1"], - darkpulse: ["1L1"], - destinybond: ["1L1"], - doubleteam: ["1L1"], - endure: ["1L1"], - explosion: ["1L1"], - facade: ["1L1"], - fireblast: ["1L1"], - flamethrower: ["1L1"], - flash: ["1L1"], - frustration: ["1L1"], - grudge: ["1L1"], - gunkshot: ["1L1"], - gyroball: ["1L1"], - haze: ["1L1"], - headbutt: ["1L1"], - hiddenpower: ["1L1"], - incinerate: ["1L1"], - infestation: ["1L1"], - memento: ["1L1"], - mimic: ["1L1"], - naturalgift: ["1L1"], - painsplit: ["1L1"], - payback: ["1L1"], - poisongas: ["1L1"], - protect: ["1L1"], - psybeam: ["1L1"], - psywave: ["1L1"], - rage: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - scaryface: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - selfdestruct: ["1L1"], - shadowball: ["1L1"], - shockwave: ["1L1"], - sleeptalk: ["1L1"], - sludge: ["1L1"], - sludgebomb: ["1L1"], - sludgewave: ["1L1"], - smog: ["1L1"], - smokescreen: ["1L1"], - snore: ["1L1"], - spite: ["1L1"], - spitup: ["1L1"], - stockpile: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swallow: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - toxicspikes: ["1L1"], - uproar: ["1L1"], - venomdrench: ["1L1"], - venoshock: ["1L1"], - willowisp: ["1L1"], - zapcannon: ["1L1"], - }, - encounters: [ - {generation: 1, level: 30}, - ], - }, - weezing: { - learnset: { - acidspray: ["1L1"], - assurance: ["1L1"], - attract: ["1L1"], - belch: ["1L1"], - bide: ["1L1"], - bodyslam: ["1L1"], - captivate: ["1L1"], - clearsmog: ["1L1"], - confide: ["1L1"], - corrosivegas: ["1L1"], - curse: ["1L1"], - darkpulse: ["1L1"], - destinybond: ["1L1"], - doublehit: ["1L1"], - doubleteam: ["1L1"], - endure: ["1L1"], - explosion: ["1L1"], - facade: ["1L1"], - fireblast: ["1L1"], - flamethrower: ["1L1"], - flash: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - gunkshot: ["1L1"], - gyroball: ["1L1"], - haze: ["1L1"], - headbutt: ["1L1"], - heatwave: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - incinerate: ["1L1"], - infestation: ["1L1"], - memento: ["1L1"], - mimic: ["1L1"], - naturalgift: ["1L1"], - painsplit: ["1L1"], - payback: ["1L1"], - poisongas: ["1L1"], - protect: ["1L1"], - psybeam: ["1L1"], - rage: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - scaryface: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - selfdestruct: ["1L1"], - shadowball: ["1L1"], - shockwave: ["1L1"], - sleeptalk: ["1L1"], - sludge: ["1L1"], - sludgebomb: ["1L1"], - sludgewave: ["1L1"], - smog: ["1L1"], - smokescreen: ["1L1"], - snore: ["1L1"], - spite: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - toxicspikes: ["1L1"], - uproar: ["1L1"], - venomdrench: ["1L1"], - venoshock: ["1L1"], - willowisp: ["1L1"], - zapcannon: ["1L1"], - }, - encounters: [ - {generation: 2, level: 16}, - {generation: 3, level: 32}, - {generation: 4, level: 15, pokeball: "safariball"}, - ], - }, - weezinggalar: { - learnset: { - acidspray: ["1L1"], - aromatherapy: ["1L1"], - aromaticmist: ["1L1"], - assurance: ["1L1"], - attract: ["1L1"], - belch: ["1L1"], - bodyslam: ["1L1"], - brutalswing: ["1L1"], - clearsmog: ["1L1"], - corrosivegas: ["1L1"], - curse: ["1L1"], - darkpulse: ["1L1"], - dazzlinggleam: ["1L1"], - defog: ["1L1"], - destinybond: ["1L1"], - doubleedge: ["1L1"], - doublehit: ["1L1"], - endure: ["1L1"], - explosion: ["1L1"], - facade: ["1L1"], - fairywind: ["1L1"], - fireblast: ["1L1"], - flamethrower: ["1L1"], - gigaimpact: ["1L1"], - gunkshot: ["1L1"], - gyroball: ["1L1"], - haze: ["1L1"], - heatwave: ["1L1"], - hyperbeam: ["1L1"], - memento: ["1L1"], - mistyexplosion: ["1L1"], - mistyterrain: ["1L1"], - overheat: ["1L1"], - painsplit: ["1L1"], - payback: ["1L1"], - playrough: ["1L1"], - poisongas: ["1L1"], - protect: ["1L1"], - psybeam: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - round: ["1L1"], - scaryface: ["1L1"], - screech: ["1L1"], - selfdestruct: ["1L1"], - shadowball: ["1L1"], - sleeptalk: ["1L1"], - sludge: ["1L1"], - sludgebomb: ["1L1"], - sludgewave: ["1L1"], - smog: ["1L1"], - smokescreen: ["1L1"], - snore: ["1L1"], - spite: ["1L1"], - strangesteam: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - toxic: ["1L1"], - toxicspikes: ["1L1"], - uproar: ["1L1"], - venomdrench: ["1L1"], - venoshock: ["1L1"], - willowisp: ["1L1"], - wonderroom: ["1L1"], - }, - }, - rhyhorn: { - learnset: { - ancientpower: ["1L1"], - aquatail: ["1L1"], - attract: ["1L1"], - bide: ["1L1"], - blizzard: ["1L1"], - bodypress: ["1L1"], - bodyslam: ["1L1"], - bulldoze: ["1L1"], - captivate: ["1L1"], - chipaway: ["1L1"], - confide: ["1L1"], - counter: ["1L1"], - crunch: ["1L1"], - crushclaw: ["1L1"], - curse: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dragonpulse: ["1L1"], - dragonrush: ["1L1"], - drillrun: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fireblast: ["1L1"], - firefang: ["1L1"], - fissure: ["1L1"], - flamethrower: ["1L1"], - frustration: ["1L1"], - furyattack: ["1L1"], - guardsplit: ["1L1"], - headbutt: ["1L1"], - heavyslam: ["1L1"], - hiddenpower: ["1L1"], - highhorsepower: ["1L1"], - hornattack: ["1L1"], - horndrill: ["1L1"], - icebeam: ["1L1"], - icefang: ["1L1"], - icywind: ["1L1"], - incinerate: ["1L1"], - irontail: ["1L1"], - leer: ["1L1"], - magnitude: ["1L1"], - megahorn: ["1L1"], - metalburst: ["1L1"], - mimic: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - payback: ["1L1"], - poisonjab: ["1L1"], - protect: ["1L1"], - pursuit: ["1L1"], - rage: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - reversal: ["1L1"], - roar: ["1L1"], - rockblast: ["1L1"], - rockclimb: ["1L1"], - rockpolish: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rockthrow: ["1L1"], - rocktomb: ["1L1"], - rollout: ["1L1"], - rototiller: ["1L1"], - round: ["1L1"], - sandattack: ["1L1"], - sandstorm: ["1L1"], - scaryface: ["1L1"], - scorchingsands: ["1L1"], - secretpower: ["1L1"], - shockwave: ["1L1"], - skullbash: ["1L1"], - sleeptalk: ["1L1"], - smackdown: ["1L1"], - smartstrike: ["1L1"], - snore: ["1L1"], - spite: ["1L1"], - stealthrock: ["1L1"], - stomp: ["1L1"], - stompingtantrum: ["1L1"], - stoneedge: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - supercellslam: ["1L1"], - superpower: ["1L1"], - swagger: ["1L1"], - swordsdance: ["1L1"], - tackle: ["1L1"], - tailwhip: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thrash: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderfang: ["1L1"], - toxic: ["1L1"], - uproar: ["1L1"], - zapcannon: ["1L1"], - }, - encounters: [ - {generation: 1, level: 20}, - ], - }, - rhydon: { - learnset: { - ancientpower: ["1L1"], - aquatail: ["1L1"], - attract: ["1L1"], - avalanche: ["1L1"], - bide: ["1L1"], - blizzard: ["1L1"], - block: ["1L1"], - bodypress: ["1L1"], - bodyslam: ["1L1"], - breakingswipe: ["1L1"], - brickbreak: ["1L1"], - brutalswing: ["1L1"], - bubblebeam: ["1L1"], - bulldoze: ["1L1"], - captivate: ["1L1"], - chipaway: ["1L1"], - confide: ["1L1"], - counter: ["1L1"], - crunch: ["1L1"], - curse: ["1L1"], - cut: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dragonpulse: ["1L1"], - dragontail: ["1L1"], - drillrun: ["1L1"], - dynamicpunch: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fireblast: ["1L1"], - firefang: ["1L1"], - firepunch: ["1L1"], - fissure: ["1L1"], - flamethrower: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - focuspunch: ["1L1"], - frustration: ["1L1"], - furyattack: ["1L1"], - furycutter: ["1L1"], - gigaimpact: ["1L1"], - hammerarm: ["1L1"], - headbutt: ["1L1"], - heatcrash: ["1L1"], - heavyslam: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - highhorsepower: ["1L1"], - hornattack: ["1L1"], - horndrill: ["1L1"], - hydropump: ["1L1"], - hyperbeam: ["1L1"], - icebeam: ["1L1"], - icefang: ["1L1"], - icepunch: ["1L1"], - icywind: ["1L1"], - incinerate: ["1L1"], - irondefense: ["1L1"], - irontail: ["1L1"], - leer: ["1L1"], - megahorn: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - meteorbeam: ["1L1"], - mimic: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - outrage: ["1L1"], - payback: ["1L1"], - payday: ["1L1"], - poisonjab: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - rage: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - reversal: ["1L1"], - roar: ["1L1"], - rockblast: ["1L1"], - rockclimb: ["1L1"], - rockpolish: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rockthrow: ["1L1"], - rocktomb: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - sandattack: ["1L1"], - sandstorm: ["1L1"], - scaryface: ["1L1"], - scorchingsands: ["1L1"], - secretpower: ["1L1"], - seismictoss: ["1L1"], - shadowclaw: ["1L1"], - shockwave: ["1L1"], - skullbash: ["1L1"], - sleeptalk: ["1L1"], - smackdown: ["1L1"], - smartstrike: ["1L1"], - snore: ["1L1"], - spite: ["1L1"], - stealthrock: ["1L1"], - stomp: ["1L1"], - stompingtantrum: ["1L1"], - stoneedge: ["1L1"], - strength: ["1L1"], - submission: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - supercellslam: ["1L1"], - superpower: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - swordsdance: ["1L1"], - tackle: ["1L1"], - tailwhip: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderfang: ["1L1"], - thunderpunch: ["1L1"], - toxic: ["1L1"], - uproar: ["1L1"], - watergun: ["1L1"], - whirlpool: ["1L1"], - zapcannon: ["1L1"], - }, - eventData: [ - {generation: 3, level: 46, moves: ["1L1"]}, - ], - encounters: [ - {generation: 1, level: 15}, - {generation: 2, level: 10}, - {generation: 4, level: 41}, - {generation: 6, level: 30}, - ], - }, - rhyperior: { - learnset: { - ancientpower: ["1L1"], - aquatail: ["1L1"], - attract: ["1L1"], - avalanche: ["1L1"], - blizzard: ["1L1"], - block: ["1L1"], - bodypress: ["1L1"], - bodyslam: ["1L1"], - breakingswipe: ["1L1"], - brickbreak: ["1L1"], - brutalswing: ["1L1"], - bulldoze: ["1L1"], - captivate: ["1L1"], - chipaway: ["1L1"], - confide: ["1L1"], - crunch: ["1L1"], - curse: ["1L1"], - cut: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dragonpulse: ["1L1"], - dragontail: ["1L1"], - drillrun: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fireblast: ["1L1"], - firefang: ["1L1"], - firepunch: ["1L1"], - flamethrower: ["1L1"], - flashcannon: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - focuspunch: ["1L1"], - frustration: ["1L1"], - furyattack: ["1L1"], - furycutter: ["1L1"], - gigaimpact: ["1L1"], - hammerarm: ["1L1"], - headbutt: ["1L1"], - heatcrash: ["1L1"], - heavyslam: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - highhorsepower: ["1L1"], - hornattack: ["1L1"], - horndrill: ["1L1"], - hydropump: ["1L1"], - hyperbeam: ["1L1"], - icebeam: ["1L1"], - icefang: ["1L1"], - icepunch: ["1L1"], - icywind: ["1L1"], - incinerate: ["1L1"], - irondefense: ["1L1"], - ironhead: ["1L1"], - irontail: ["1L1"], - megahorn: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - metalclaw: ["1L1"], - meteorbeam: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - outrage: ["1L1"], - payback: ["1L1"], - payday: ["1L1"], - poisonjab: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - reversal: ["1L1"], - roar: ["1L1"], - rockblast: ["1L1"], - rockclimb: ["1L1"], - rockpolish: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - rockwrecker: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - sandstorm: ["1L1"], - scaryface: ["1L1"], - scorchingsands: ["1L1"], - secretpower: ["1L1"], - shadowclaw: ["1L1"], - shockwave: ["1L1"], - sleeptalk: ["1L1"], - smackdown: ["1L1"], - smartstrike: ["1L1"], - snore: ["1L1"], - spite: ["1L1"], - stealthrock: ["1L1"], - stomp: ["1L1"], - stompingtantrum: ["1L1"], - stoneedge: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - supercellslam: ["1L1"], - superpower: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - swordsdance: ["1L1"], - tackle: ["1L1"], - tailwhip: ["1L1"], - takedown: ["1L1"], - temperflare: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderfang: ["1L1"], - thunderpunch: ["1L1"], - toxic: ["1L1"], - uproar: ["1L1"], - whirlpool: ["1L1"], - }, - }, - happiny: { - learnset: { - aromatherapy: ["1L1"], - attract: ["1L1"], - captivate: ["1L1"], - charm: ["1L1"], - confide: ["1L1"], - copycat: ["1L1"], - counter: ["1L1"], - covet: ["1L1"], - defensecurl: ["1L1"], - disarmingvoice: ["1L1"], - doubleteam: ["1L1"], - drainpunch: ["1L1"], - dreameater: ["1L1"], - echoedvoice: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fireblast: ["1L1"], - flamethrower: ["1L1"], - flash: ["1L1"], - fling: ["1L1"], - frustration: ["1L1"], - grassknot: ["1L1"], - gravity: ["1L1"], - hail: ["1L1"], - headbutt: ["1L1"], - healbell: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hypervoice: ["1L1"], - icywind: ["1L1"], - incinerate: ["1L1"], - lastresort: ["1L1"], - lightscreen: ["1L1"], - metronome: ["1L1"], - minimize: ["1L1"], - mudbomb: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - pound: ["1L1"], - present: ["1L1"], - protect: ["1L1"], - psychic: ["1L1"], - psychup: ["1L1"], - raindance: ["1L1"], - recycle: ["1L1"], - refresh: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - secretpower: ["1L1"], - seismictoss: ["1L1"], - shadowball: ["1L1"], - shockwave: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - snowscape: ["1L1"], - solarbeam: ["1L1"], - storedpower: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - sweetkiss: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - uproar: ["1L1"], - waterpulse: ["1L1"], - workup: ["1L1"], - zenheadbutt: ["1L1"], - }, - }, - chansey: { - learnset: { - allyswitch: ["1L1"], - aromatherapy: ["1L1"], - attract: ["1L1"], - bestow: ["1L1"], - bide: ["1L1"], - blizzard: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - bubblebeam: ["1L1"], - bulldoze: ["1L1"], - calmmind: ["1L1"], - captivate: ["1L1"], - celebrate: ["1L1"], - chargebeam: ["1L1"], - charm: ["1L1"], - chillingwater: ["1L1"], - confide: ["1L1"], - copycat: ["1L1"], - counter: ["1L1"], - covet: ["1L1"], - curse: ["1L1"], - dazzlinggleam: ["1L1"], - defensecurl: ["1L1"], - disarmingvoice: ["1L1"], - doubleedge: ["1L1"], - doubleslap: ["1L1"], - doubleteam: ["1L1"], - drainpunch: ["1L1"], - dreameater: ["1L1"], - dynamicpunch: ["1L1"], - earthquake: ["1L1"], - echoedvoice: ["1L1"], - eggbomb: ["1L1"], - electricterrain: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fireblast: ["1L1"], - firepunch: ["1L1"], - flamethrower: ["1L1"], - flash: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - focuspunch: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - gravity: ["1L1"], - growl: ["1L1"], - hail: ["1L1"], - headbutt: ["1L1"], - healbell: ["1L1"], - healingwish: ["1L1"], - healpulse: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - hypervoice: ["1L1"], - icebeam: ["1L1"], - icepunch: ["1L1"], - icywind: ["1L1"], - incinerate: ["1L1"], - irontail: ["1L1"], - laserfocus: ["1L1"], - lastresort: ["1L1"], - lifedew: ["1L1"], - lightscreen: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - metronome: ["1L1"], - mimic: ["1L1"], - minimize: ["1L1"], - mudbomb: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - pound: ["1L1"], - poweruppunch: ["1L1"], - present: ["1L1"], - protect: ["1L1"], - psychic: ["1L1"], - psychup: ["1L1"], - psywave: ["1L1"], - rage: ["1L1"], - raindance: ["1L1"], - recycle: ["1L1"], - reflect: ["1L1"], - refresh: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - rockclimb: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - sandstorm: ["1L1"], - secretpower: ["1L1"], - seismictoss: ["1L1"], - shadowball: ["1L1"], - shockwave: ["1L1"], - sing: ["1L1"], - skillswap: ["1L1"], - skullbash: ["1L1"], - sleeptalk: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - snowscape: ["1L1"], - softboiled: ["1L1"], - solarbeam: ["1L1"], - stealthrock: ["1L1"], - stompingtantrum: ["1L1"], - storedpower: ["1L1"], - strength: ["1L1"], - submission: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - sweetkiss: ["1L1"], - sweetscent: ["1L1"], - swift: ["1L1"], - tailwhip: ["1L1"], - takedown: ["1L1"], - telekinesis: ["1L1"], - teleport: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderpunch: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - triattack: ["1L1"], - uproar: ["1L1"], - watergun: ["1L1"], - waterpulse: ["1L1"], - wildcharge: ["1L1"], - wish: ["1L1"], - workup: ["1L1"], - zapcannon: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 3, level: 5, shiny: 1, moves: ["1L1"], pokeball: "pokeball"}, - {generation: 3, level: 10, moves: ["1L1"], pokeball: "pokeball"}, - {generation: 3, level: 39, moves: ["1L1"]}, - {generation: 8, level: 7, moves: ["1L1"], pokeball: "cherishball"}, - ], - encounters: [ - {generation: 1, level: 7}, - ], - }, - blissey: { - learnset: { - alluringvoice: ["1L1"], - allyswitch: ["1L1"], - attract: ["1L1"], - avalanche: ["1L1"], - bestow: ["1L1"], - blizzard: ["1L1"], - block: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - bulldoze: ["1L1"], - calmmind: ["1L1"], - captivate: ["1L1"], - chargebeam: ["1L1"], - charm: ["1L1"], - chillingwater: ["1L1"], - confide: ["1L1"], - copycat: ["1L1"], - counter: ["1L1"], - covet: ["1L1"], - curse: ["1L1"], - dazzlinggleam: ["1L1"], - defensecurl: ["1L1"], - disarmingvoice: ["1L1"], - doubleedge: ["1L1"], - doubleslap: ["1L1"], - doubleteam: ["1L1"], - drainpunch: ["1L1"], - dreameater: ["1L1"], - dynamicpunch: ["1L1"], - earthquake: ["1L1"], - echoedvoice: ["1L1"], - eggbomb: ["1L1"], - electricterrain: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fireblast: ["1L1"], - firepunch: ["1L1"], - flamethrower: ["1L1"], - flash: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - focuspunch: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - gravity: ["1L1"], - growl: ["1L1"], - hail: ["1L1"], - headbutt: ["1L1"], - healbell: ["1L1"], - healingwish: ["1L1"], - healpulse: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - hypervoice: ["1L1"], - icebeam: ["1L1"], - icepunch: ["1L1"], - icywind: ["1L1"], - incinerate: ["1L1"], - irontail: ["1L1"], - laserfocus: ["1L1"], - lastresort: ["1L1"], - lifedew: ["1L1"], - lightscreen: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - metronome: ["1L1"], - mimic: ["1L1"], - minimize: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - pound: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - psychic: ["1L1"], - psychup: ["1L1"], - raindance: ["1L1"], - recycle: ["1L1"], - refresh: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - rockclimb: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - sandstorm: ["1L1"], - secretpower: ["1L1"], - seismictoss: ["1L1"], - shadowball: ["1L1"], - shockwave: ["1L1"], - sing: ["1L1"], - skillswap: ["1L1"], - sleeptalk: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - snowscape: ["1L1"], - softboiled: ["1L1"], - solarbeam: ["1L1"], - stealthrock: ["1L1"], - stompingtantrum: ["1L1"], - storedpower: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - sweetkiss: ["1L1"], - swift: ["1L1"], - tailwhip: ["1L1"], - takedown: ["1L1"], - telekinesis: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderpunch: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - triattack: ["1L1"], - trick: ["1L1"], - uproar: ["1L1"], - waterpulse: ["1L1"], - wildcharge: ["1L1"], - workup: ["1L1"], - zapcannon: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 5, level: 10, isHidden: true, moves: ["1L1"]}, - ], - }, - tangela: { - learnset: { - absorb: ["1L1"], - amnesia: ["1L1"], - ancientpower: ["1L1"], - attract: ["1L1"], - bide: ["1L1"], - bind: ["1L1"], - bodyslam: ["1L1"], - bulletseed: ["1L1"], - captivate: ["1L1"], - confide: ["1L1"], - confusion: ["1L1"], - constrict: ["1L1"], - curse: ["1L1"], - cut: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - flail: ["1L1"], - flash: ["1L1"], - frustration: ["1L1"], - gigadrain: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - grassyglide: ["1L1"], - grassyterrain: ["1L1"], - growth: ["1L1"], - headbutt: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - infestation: ["1L1"], - ingrain: ["1L1"], - knockoff: ["1L1"], - leafstorm: ["1L1"], - leechseed: ["1L1"], - megadrain: ["1L1"], - mimic: ["1L1"], - morningsun: ["1L1"], - naturalgift: ["1L1"], - naturepower: ["1L1"], - painsplit: ["1L1"], - poisonpowder: ["1L1"], - powerswap: ["1L1"], - powerwhip: ["1L1"], - protect: ["1L1"], - psychup: ["1L1"], - rage: ["1L1"], - ragepowder: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rocksmash: ["1L1"], - round: ["1L1"], - secretpower: ["1L1"], - seedbomb: ["1L1"], - shockwave: ["1L1"], - skullbash: ["1L1"], - slam: ["1L1"], - sleeppowder: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - stunspore: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - sweetscent: ["1L1"], - swordsdance: ["1L1"], - synthesis: ["1L1"], - takedown: ["1L1"], - thief: ["1L1"], - tickle: ["1L1"], - toxic: ["1L1"], - vinewhip: ["1L1"], - wakeupslap: ["1L1"], - worryseed: ["1L1"], - wringout: ["1L1"], - }, - eventData: [ - {generation: 3, level: 30, abilities: ["1L1"], moves: ["1L1"]}, - ], - encounters: [ - {generation: 1, level: 13}, - ], - }, - tangrowth: { - learnset: { - absorb: ["1L1"], - aerialace: ["1L1"], - amnesia: ["1L1"], - ancientpower: ["1L1"], - attract: ["1L1"], - bind: ["1L1"], - block: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - brutalswing: ["1L1"], - bulldoze: ["1L1"], - bulletseed: ["1L1"], - captivate: ["1L1"], - confide: ["1L1"], - constrict: ["1L1"], - cut: ["1L1"], - doubleteam: ["1L1"], - earthquake: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - flash: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - frustration: ["1L1"], - gigadrain: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - grassyglide: ["1L1"], - grassyterrain: ["1L1"], - growth: ["1L1"], - headbutt: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - infestation: ["1L1"], - ingrain: ["1L1"], - knockoff: ["1L1"], - leafstorm: ["1L1"], - megadrain: ["1L1"], - morningsun: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - naturepower: ["1L1"], - painsplit: ["1L1"], - payback: ["1L1"], - poisonjab: ["1L1"], - poisonpowder: ["1L1"], - powerswap: ["1L1"], - powerwhip: ["1L1"], - protect: ["1L1"], - psychup: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - secretpower: ["1L1"], - seedbomb: ["1L1"], - shockwave: ["1L1"], - slam: ["1L1"], - sleeppowder: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - solarblade: ["1L1"], - stompingtantrum: ["1L1"], - strength: ["1L1"], - stunspore: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swordsdance: ["1L1"], - synthesis: ["1L1"], - thief: ["1L1"], - tickle: ["1L1"], - toxic: ["1L1"], - vinewhip: ["1L1"], - worryseed: ["1L1"], - wringout: ["1L1"], - }, - eventData: [ - {generation: 4, level: 50, gender: "M", nature: "Brave", moves: ["1L1"], pokeball: "cherishball"}, - ], - }, - kangaskhan: { - learnset: { - aerialace: ["1L1"], - aquatail: ["1L1"], - assurance: ["1L1"], - attract: ["1L1"], - avalanche: ["1L1"], - beatup: ["1L1"], - bide: ["1L1"], - bite: ["1L1"], - blizzard: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - bubblebeam: ["1L1"], - bulldoze: ["1L1"], - captivate: ["1L1"], - chipaway: ["1L1"], - circlethrow: ["1L1"], - cometpunch: ["1L1"], - confide: ["1L1"], - counter: ["1L1"], - covet: ["1L1"], - crunch: ["1L1"], - crushclaw: ["1L1"], - curse: ["1L1"], - cut: ["1L1"], - dig: ["1L1"], - disable: ["1L1"], - dizzypunch: ["1L1"], - doubleedge: ["1L1"], - doublehit: ["1L1"], - doubleteam: ["1L1"], - drainpunch: ["1L1"], - dynamicpunch: ["1L1"], - earthquake: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fakeout: ["1L1"], - fireblast: ["1L1"], - firepunch: ["1L1"], - fissure: ["1L1"], - flamethrower: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - focusenergy: ["1L1"], - focuspunch: ["1L1"], - foresight: ["1L1"], - frustration: ["1L1"], - furycutter: ["1L1"], - gigaimpact: ["1L1"], - growl: ["1L1"], - hail: ["1L1"], - hammerarm: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hydropump: ["1L1"], - hyperbeam: ["1L1"], - icebeam: ["1L1"], - icepunch: ["1L1"], - icywind: ["1L1"], - incinerate: ["1L1"], - irontail: ["1L1"], - lastresort: ["1L1"], - leer: ["1L1"], - lowkick: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - mimic: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - outrage: ["1L1"], - pound: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - rage: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - reversal: ["1L1"], - roar: ["1L1"], - rockclimb: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - sandstorm: ["1L1"], - secretpower: ["1L1"], - seismictoss: ["1L1"], - shadowball: ["1L1"], - shadowclaw: ["1L1"], - shockwave: ["1L1"], - sing: ["1L1"], - skullbash: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - spite: ["1L1"], - stomp: ["1L1"], - strength: ["1L1"], - submission: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - sunnyday: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - tailwhip: ["1L1"], - takedown: ["1L1"], - terrainpulse: ["1L1"], - thief: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderpunch: ["1L1"], - toxic: ["1L1"], - trumpcard: ["1L1"], - uproar: ["1L1"], - watergun: ["1L1"], - waterpulse: ["1L1"], - whirlpool: ["1L1"], - wish: ["1L1"], - workup: ["1L1"], - yawn: ["1L1"], - zapcannon: ["1L1"], - }, - eventData: [ - {generation: 3, level: 5, shiny: 1, abilities: ["1L1"], moves: ["1L1"], pokeball: "pokeball"}, - {generation: 3, level: 10, abilities: ["1L1"], moves: ["1L1"], pokeball: "pokeball"}, - {generation: 3, level: 35, abilities: ["1L1"], moves: ["1L1"]}, - {generation: 6, level: 50, abilities: ["1L1"], moves: ["1L1"], pokeball: "cherishball"}, - ], - encounters: [ - {generation: 1, level: 25}, - ], - }, - horsea: { - learnset: { - agility: ["1L1"], - attract: ["1L1"], - aurorabeam: ["1L1"], - bide: ["1L1"], - blizzard: ["1L1"], - bounce: ["1L1"], - brine: ["1L1"], - bubble: ["1L1"], - bubblebeam: ["1L1"], - captivate: ["1L1"], - chillingwater: ["1L1"], - clearsmog: ["1L1"], - confide: ["1L1"], - curse: ["1L1"], - disable: ["1L1"], - dive: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dragonbreath: ["1L1"], - dragondance: ["1L1"], - dragonpulse: ["1L1"], - dragonrage: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - flail: ["1L1"], - flashcannon: ["1L1"], - flipturn: ["1L1"], - focusenergy: ["1L1"], - frustration: ["1L1"], - hail: ["1L1"], - headbutt: ["1L1"], - hiddenpower: ["1L1"], - hydropump: ["1L1"], - icebeam: ["1L1"], - icywind: ["1L1"], - laserfocus: ["1L1"], - leer: ["1L1"], - liquidation: ["1L1"], - mimic: ["1L1"], - muddywater: ["1L1"], - naturalgift: ["1L1"], - octazooka: ["1L1"], - outrage: ["1L1"], - protect: ["1L1"], - rage: ["1L1"], - raindance: ["1L1"], - razorwind: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - round: ["1L1"], - scald: ["1L1"], - scaleshot: ["1L1"], - secretpower: ["1L1"], - signalbeam: ["1L1"], - skullbash: ["1L1"], - sleeptalk: ["1L1"], - smokescreen: ["1L1"], - snore: ["1L1"], - splash: ["1L1"], - substitute: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - toxic: ["1L1"], - twister: ["1L1"], - waterfall: ["1L1"], - watergun: ["1L1"], - waterpulse: ["1L1"], - weatherball: ["1L1"], - whirlpool: ["1L1"], - }, - eventData: [ - {generation: 5, level: 1, shiny: true, moves: ["1L1"], pokeball: "pokeball"}, - ], - encounters: [ - {generation: 1, level: 5}, - ], - }, - seadra: { - learnset: { - agility: ["1L1"], - attract: ["1L1"], - bide: ["1L1"], - blizzard: ["1L1"], - bounce: ["1L1"], - brine: ["1L1"], - bubble: ["1L1"], - bubblebeam: ["1L1"], - captivate: ["1L1"], - chillingwater: ["1L1"], - clearsmog: ["1L1"], - confide: ["1L1"], - curse: ["1L1"], - disable: ["1L1"], - dive: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dragonbreath: ["1L1"], - dragondance: ["1L1"], - dragonpulse: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - flashcannon: ["1L1"], - flipturn: ["1L1"], - focusenergy: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - hail: ["1L1"], - headbutt: ["1L1"], - hiddenpower: ["1L1"], - hydropump: ["1L1"], - hyperbeam: ["1L1"], - icebeam: ["1L1"], - icywind: ["1L1"], - laserfocus: ["1L1"], - leer: ["1L1"], - liquidation: ["1L1"], - mimic: ["1L1"], - muddywater: ["1L1"], - naturalgift: ["1L1"], - outrage: ["1L1"], - protect: ["1L1"], - rage: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - round: ["1L1"], - scald: ["1L1"], - scaleshot: ["1L1"], - scaryface: ["1L1"], - secretpower: ["1L1"], - signalbeam: ["1L1"], - skullbash: ["1L1"], - sleeptalk: ["1L1"], - smokescreen: ["1L1"], - snore: ["1L1"], - snowscape: ["1L1"], - substitute: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - toxic: ["1L1"], - twister: ["1L1"], - waterfall: ["1L1"], - watergun: ["1L1"], - waterpulse: ["1L1"], - weatherball: ["1L1"], - whirlpool: ["1L1"], - }, - eventData: [ - {generation: 3, level: 45, abilities: ["1L1"], moves: ["1L1"], pokeball: "pokeball"}, - ], - encounters: [ - {generation: 1, level: 20}, - {generation: 2, level: 20}, - {generation: 3, level: 25}, - {generation: 4, level: 15}, - ], - }, - kingdra: { - learnset: { - agility: ["1L1"], - attract: ["1L1"], - blizzard: ["1L1"], - bodyslam: ["1L1"], - bounce: ["1L1"], - breakingswipe: ["1L1"], - brine: ["1L1"], - bubble: ["1L1"], - bubblebeam: ["1L1"], - captivate: ["1L1"], - chillingwater: ["1L1"], - confide: ["1L1"], - curse: ["1L1"], - dive: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dracometeor: ["1L1"], - dragonbreath: ["1L1"], - dragondance: ["1L1"], - dragonpulse: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - flashcannon: ["1L1"], - flipturn: ["1L1"], - focusenergy: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - hail: ["1L1"], - headbutt: ["1L1"], - hiddenpower: ["1L1"], - hurricane: ["1L1"], - hydropump: ["1L1"], - hyperbeam: ["1L1"], - icebeam: ["1L1"], - icywind: ["1L1"], - ironhead: ["1L1"], - laserfocus: ["1L1"], - leer: ["1L1"], - liquidation: ["1L1"], - mimic: ["1L1"], - muddywater: ["1L1"], - naturalgift: ["1L1"], - outrage: ["1L1"], - protect: ["1L1"], - quash: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - round: ["1L1"], - scald: ["1L1"], - scaleshot: ["1L1"], - scaryface: ["1L1"], - secretpower: ["1L1"], - signalbeam: ["1L1"], - sleeptalk: ["1L1"], - smokescreen: ["1L1"], - snore: ["1L1"], - snowscape: ["1L1"], - substitute: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - toxic: ["1L1"], - twister: ["1L1"], - waterfall: ["1L1"], - watergun: ["1L1"], - waterpulse: ["1L1"], - wavecrash: ["1L1"], - weatherball: ["1L1"], - whirlpool: ["1L1"], - yawn: ["1L1"], - }, - eventData: [ - {generation: 3, level: 50, abilities: ["1L1"], moves: ["1L1"], pokeball: "pokeball"}, - {generation: 5, level: 50, gender: "M", nature: "Timid", ivs: {hp: 31, atk: 17, def: 8, spa: 31, spd: 11, spe: 31}, abilities: ["1L1"], moves: ["1L1"], pokeball: "cherishball"}, - ], - }, - goldeen: { - learnset: { - acupressure: ["1L1"], - agility: ["1L1"], - aquaring: ["1L1"], - aquatail: ["1L1"], - attract: ["1L1"], - bide: ["1L1"], - blizzard: ["1L1"], - bodyslam: ["1L1"], - bounce: ["1L1"], - bubblebeam: ["1L1"], - captivate: ["1L1"], - confide: ["1L1"], - curse: ["1L1"], - dive: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - drillrun: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - flail: ["1L1"], - flipturn: ["1L1"], - frustration: ["1L1"], - furyattack: ["1L1"], - furycutter: ["1L1"], - hail: ["1L1"], - haze: ["1L1"], - headbutt: ["1L1"], - hiddenpower: ["1L1"], - hornattack: ["1L1"], - horndrill: ["1L1"], - hydropump: ["1L1"], - icebeam: ["1L1"], - icywind: ["1L1"], - knockoff: ["1L1"], - megahorn: ["1L1"], - mimic: ["1L1"], - muddywater: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - mudsport: ["1L1"], - naturalgift: ["1L1"], - peck: ["1L1"], - poisonjab: ["1L1"], - protect: ["1L1"], - psybeam: ["1L1"], - quickattack: ["1L1"], - rage: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - round: ["1L1"], - scald: ["1L1"], - scaleshot: ["1L1"], - secretpower: ["1L1"], - signalbeam: ["1L1"], - skullbash: ["1L1"], - sleeptalk: ["1L1"], - smartstrike: ["1L1"], - snore: ["1L1"], - soak: ["1L1"], - substitute: ["1L1"], - supersonic: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - swordsdance: ["1L1"], - tailwhip: ["1L1"], - takedown: ["1L1"], - throatchop: ["1L1"], - toxic: ["1L1"], - waterfall: ["1L1"], - watergun: ["1L1"], - waterpulse: ["1L1"], - watersport: ["1L1"], - whirlpool: ["1L1"], - }, - encounters: [ - {generation: 1, level: 5}, - ], - }, - seaking: { - learnset: { - agility: ["1L1"], - aquaring: ["1L1"], - aquatail: ["1L1"], - attract: ["1L1"], - bide: ["1L1"], - blizzard: ["1L1"], - bodyslam: ["1L1"], - bounce: ["1L1"], - bubblebeam: ["1L1"], - captivate: ["1L1"], - confide: ["1L1"], - curse: ["1L1"], - dive: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - drillrun: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - flail: ["1L1"], - flipturn: ["1L1"], - frustration: ["1L1"], - furyattack: ["1L1"], - furycutter: ["1L1"], - gigaimpact: ["1L1"], - hail: ["1L1"], - headbutt: ["1L1"], - hiddenpower: ["1L1"], - hornattack: ["1L1"], - horndrill: ["1L1"], - hydropump: ["1L1"], - hyperbeam: ["1L1"], - icebeam: ["1L1"], - icywind: ["1L1"], - knockoff: ["1L1"], - megahorn: ["1L1"], - mimic: ["1L1"], - muddywater: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - peck: ["1L1"], - poisonjab: ["1L1"], - protect: ["1L1"], - psybeam: ["1L1"], - quickattack: ["1L1"], - rage: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - round: ["1L1"], - scald: ["1L1"], - scaleshot: ["1L1"], - secretpower: ["1L1"], - signalbeam: ["1L1"], - skullbash: ["1L1"], - sleeptalk: ["1L1"], - smartstrike: ["1L1"], - snore: ["1L1"], - soak: ["1L1"], - substitute: ["1L1"], - supersonic: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - swordsdance: ["1L1"], - tailwhip: ["1L1"], - takedown: ["1L1"], - throatchop: ["1L1"], - toxic: ["1L1"], - waterfall: ["1L1"], - watergun: ["1L1"], - waterpulse: ["1L1"], - watersport: ["1L1"], - whirlpool: ["1L1"], - }, - encounters: [ - {generation: 1, level: 23}, - {generation: 2, level: 10}, - {generation: 3, level: 20}, - {generation: 4, level: 10}, - {generation: 6, level: 26, maxEggMoves: 1}, - {generation: 7, level: 10}, - ], - }, - staryu: { - learnset: { - attract: ["1L1"], - bide: ["1L1"], - blizzard: ["1L1"], - brine: ["1L1"], - bubblebeam: ["1L1"], - camouflage: ["1L1"], - confide: ["1L1"], - confuseray: ["1L1"], - cosmicpower: ["1L1"], - curse: ["1L1"], - dazzlinggleam: ["1L1"], - dive: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - flash: ["1L1"], - flashcannon: ["1L1"], - flipturn: ["1L1"], - frustration: ["1L1"], - gravity: ["1L1"], - gyroball: ["1L1"], - hail: ["1L1"], - harden: ["1L1"], - headbutt: ["1L1"], - hiddenpower: ["1L1"], - hydropump: ["1L1"], - icebeam: ["1L1"], - icywind: ["1L1"], - lightscreen: ["1L1"], - magiccoat: ["1L1"], - mimic: ["1L1"], - minimize: ["1L1"], - naturalgift: ["1L1"], - painsplit: ["1L1"], - powergem: ["1L1"], - protect: ["1L1"], - psybeam: ["1L1"], - psychic: ["1L1"], - psychup: ["1L1"], - psywave: ["1L1"], - rage: ["1L1"], - raindance: ["1L1"], - rapidspin: ["1L1"], - recover: ["1L1"], - recycle: ["1L1"], - reflect: ["1L1"], - reflecttype: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - scald: ["1L1"], - secretpower: ["1L1"], - signalbeam: ["1L1"], - skullbash: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - substitute: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - teleport: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - triattack: ["1L1"], - twister: ["1L1"], - waterfall: ["1L1"], - watergun: ["1L1"], - waterpulse: ["1L1"], - whirlpool: ["1L1"], - zapcannon: ["1L1"], - }, - eventData: [ - {generation: 3, level: 50, moves: ["1L1"], pokeball: "pokeball"}, - {generation: 3, level: 18, nature: "Timid", ivs: {hp: 10, atk: 3, def: 22, spa: 24, spd: 3, spe: 18}, abilities: ["1L1"], moves: ["1L1"], pokeball: "pokeball"}, - ], - encounters: [ - {generation: 1, level: 5}, - ], - }, - starmie: { - learnset: { - agility: ["1L1"], - allyswitch: ["1L1"], - attract: ["1L1"], - avalanche: ["1L1"], - bide: ["1L1"], - blizzard: ["1L1"], - brine: ["1L1"], - bubblebeam: ["1L1"], - confide: ["1L1"], - confuseray: ["1L1"], - cosmicpower: ["1L1"], - curse: ["1L1"], - dazzlinggleam: ["1L1"], - dive: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dreameater: ["1L1"], - endure: ["1L1"], - expandingforce: ["1L1"], - facade: ["1L1"], - flash: ["1L1"], - flashcannon: ["1L1"], - flipturn: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - gravity: ["1L1"], - gyroball: ["1L1"], - hail: ["1L1"], - harden: ["1L1"], - headbutt: ["1L1"], - hiddenpower: ["1L1"], - hydropump: ["1L1"], - hyperbeam: ["1L1"], - icebeam: ["1L1"], - icywind: ["1L1"], - lightscreen: ["1L1"], - magiccoat: ["1L1"], - meteorbeam: ["1L1"], - mimic: ["1L1"], - minimize: ["1L1"], - naturalgift: ["1L1"], - nightmare: ["1L1"], - painsplit: ["1L1"], - powergem: ["1L1"], - protect: ["1L1"], - psybeam: ["1L1"], - psychic: ["1L1"], - psychocut: ["1L1"], - psychup: ["1L1"], - psyshock: ["1L1"], - psywave: ["1L1"], - rage: ["1L1"], - raindance: ["1L1"], - rapidspin: ["1L1"], - recover: ["1L1"], - recycle: ["1L1"], - reflect: ["1L1"], - refresh: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - scald: ["1L1"], - secretpower: ["1L1"], - signalbeam: ["1L1"], - skillswap: ["1L1"], - skullbash: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - spotlight: ["1L1"], - substitute: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - telekinesis: ["1L1"], - teleport: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - triattack: ["1L1"], - trick: ["1L1"], - trickroom: ["1L1"], - twister: ["1L1"], - waterfall: ["1L1"], - watergun: ["1L1"], - waterpulse: ["1L1"], - whirlpool: ["1L1"], - wonderroom: ["1L1"], - zapcannon: ["1L1"], - }, - eventData: [ - {generation: 3, level: 41, moves: ["1L1"]}, - ], - }, - mimejr: { - learnset: { - allyswitch: ["1L1"], - attract: ["1L1"], - barrier: ["1L1"], - batonpass: ["1L1"], - brickbreak: ["1L1"], - calmmind: ["1L1"], - captivate: ["1L1"], - chargebeam: ["1L1"], - charm: ["1L1"], - confide: ["1L1"], - confuseray: ["1L1"], - confusion: ["1L1"], - copycat: ["1L1"], - covet: ["1L1"], - dazzlinggleam: ["1L1"], - doubleslap: ["1L1"], - doubleteam: ["1L1"], - drainpunch: ["1L1"], - dreameater: ["1L1"], - encore: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fakeout: ["1L1"], - flash: ["1L1"], - fling: ["1L1"], - focuspunch: ["1L1"], - frustration: ["1L1"], - futuresight: ["1L1"], - grassknot: ["1L1"], - headbutt: ["1L1"], - healingwish: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hypnosis: ["1L1"], - icywind: ["1L1"], - infestation: ["1L1"], - lightscreen: ["1L1"], - magiccoat: ["1L1"], - magicroom: ["1L1"], - meditate: ["1L1"], - mimic: ["1L1"], - mistyterrain: ["1L1"], - mudslap: ["1L1"], - nastyplot: ["1L1"], - naturalgift: ["1L1"], - pound: ["1L1"], - powersplit: ["1L1"], - protect: ["1L1"], - psybeam: ["1L1"], - psychic: ["1L1"], - psychicterrain: ["1L1"], - psychup: ["1L1"], - psyshock: ["1L1"], - raindance: ["1L1"], - recycle: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roleplay: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - secretpower: ["1L1"], - shadowball: ["1L1"], - shockwave: ["1L1"], - signalbeam: ["1L1"], - skillswap: ["1L1"], - sleeptalk: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - storedpower: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - taunt: ["1L1"], - teeterdance: ["1L1"], - telekinesis: ["1L1"], - thief: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderwave: ["1L1"], - tickle: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - trick: ["1L1"], - trickroom: ["1L1"], - uproar: ["1L1"], - wakeupslap: ["1L1"], - wonderroom: ["1L1"], - }, - }, - mrmime: { - learnset: { - aerialace: ["1L1"], - allyswitch: ["1L1"], - attract: ["1L1"], - barrier: ["1L1"], - batonpass: ["1L1"], - bide: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - calmmind: ["1L1"], - captivate: ["1L1"], - chargebeam: ["1L1"], - charm: ["1L1"], - confide: ["1L1"], - confuseray: ["1L1"], - confusion: ["1L1"], - copycat: ["1L1"], - counter: ["1L1"], - covet: ["1L1"], - curse: ["1L1"], - dazzlinggleam: ["1L1"], - doubleedge: ["1L1"], - doubleslap: ["1L1"], - doubleteam: ["1L1"], - drainpunch: ["1L1"], - dreameater: ["1L1"], - dynamicpunch: ["1L1"], - encore: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - expandingforce: ["1L1"], - facade: ["1L1"], - fakeout: ["1L1"], - firepunch: ["1L1"], - flash: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - focuspunch: ["1L1"], - followme: ["1L1"], - foulplay: ["1L1"], - frustration: ["1L1"], - futuresight: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - guardswap: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - hypnosis: ["1L1"], - icepunch: ["1L1"], - icywind: ["1L1"], - infestation: ["1L1"], - irondefense: ["1L1"], - lightscreen: ["1L1"], - magicalleaf: ["1L1"], - magiccoat: ["1L1"], - magicroom: ["1L1"], - meditate: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - metronome: ["1L1"], - mimic: ["1L1"], - mistyterrain: ["1L1"], - mudslap: ["1L1"], - mysticalfire: ["1L1"], - nastyplot: ["1L1"], - naturalgift: ["1L1"], - nightmare: ["1L1"], - payback: ["1L1"], - pound: ["1L1"], - powersplit: ["1L1"], - powerswap: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - psybeam: ["1L1"], - psychic: ["1L1"], - psychicterrain: ["1L1"], - psychup: ["1L1"], - psyshock: ["1L1"], - psywave: ["1L1"], - quickguard: ["1L1"], - rage: ["1L1"], - raindance: ["1L1"], - recycle: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roleplay: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - secretpower: ["1L1"], - seismictoss: ["1L1"], - shadowball: ["1L1"], - shockwave: ["1L1"], - signalbeam: ["1L1"], - skillswap: ["1L1"], - skullbash: ["1L1"], - sleeptalk: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - storedpower: ["1L1"], - submission: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - teeterdance: ["1L1"], - telekinesis: ["1L1"], - teleport: ["1L1"], - thief: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderpunch: ["1L1"], - thunderwave: ["1L1"], - tickle: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - trick: ["1L1"], - trickroom: ["1L1"], - uproar: ["1L1"], - wakeupslap: ["1L1"], - wideguard: ["1L1"], - wonderroom: ["1L1"], - zapcannon: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 3, level: 42, abilities: ["1L1"], moves: ["1L1"]}, - ], - encounters: [ - {generation: 1, level: 6}, - ], - }, - mrmimegalar: { - learnset: { - allyswitch: ["1L1"], - attract: ["1L1"], - avalanche: ["1L1"], - batonpass: ["1L1"], - blizzard: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - calmmind: ["1L1"], - charm: ["1L1"], - confuseray: ["1L1"], - confusion: ["1L1"], - copycat: ["1L1"], - dazzlinggleam: ["1L1"], - doublekick: ["1L1"], - drainpunch: ["1L1"], - encore: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - expandingforce: ["1L1"], - facade: ["1L1"], - fakeout: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - foulplay: ["1L1"], - freezedry: ["1L1"], - futuresight: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - guardswap: ["1L1"], - hail: ["1L1"], - helpinghand: ["1L1"], - hyperbeam: ["1L1"], - hypnosis: ["1L1"], - icebeam: ["1L1"], - icepunch: ["1L1"], - iceshard: ["1L1"], - iciclespear: ["1L1"], - icywind: ["1L1"], - irondefense: ["1L1"], - lightscreen: ["1L1"], - magicroom: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - metronome: ["1L1"], - mimic: ["1L1"], - mirrorcoat: ["1L1"], - mistyterrain: ["1L1"], - nastyplot: ["1L1"], - payback: ["1L1"], - pound: ["1L1"], - powersplit: ["1L1"], - powerswap: ["1L1"], - protect: ["1L1"], - psybeam: ["1L1"], - psychic: ["1L1"], - psychicterrain: ["1L1"], - psyshock: ["1L1"], - raindance: ["1L1"], - rapidspin: ["1L1"], - recycle: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - roleplay: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - screech: ["1L1"], - shadowball: ["1L1"], - skillswap: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - stompingtantrum: ["1L1"], - storedpower: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - sunnyday: ["1L1"], - taunt: ["1L1"], - teeterdance: ["1L1"], - thief: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderwave: ["1L1"], - tickle: ["1L1"], - trick: ["1L1"], - trickroom: ["1L1"], - tripleaxel: ["1L1"], - uproar: ["1L1"], - wonderroom: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 8, level: 15, isHidden: true, moves: ["1L1"], pokeball: "cherishball"}, - ], - }, - mrrime: { - learnset: { - afteryou: ["1L1"], - allyswitch: ["1L1"], - attract: ["1L1"], - avalanche: ["1L1"], - batonpass: ["1L1"], - blizzard: ["1L1"], - block: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - calmmind: ["1L1"], - charm: ["1L1"], - confusion: ["1L1"], - copycat: ["1L1"], - dazzlinggleam: ["1L1"], - doublekick: ["1L1"], - drainpunch: ["1L1"], - encore: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - expandingforce: ["1L1"], - facade: ["1L1"], - faketears: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - foulplay: ["1L1"], - freezedry: ["1L1"], - futuresight: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - guardswap: ["1L1"], - hail: ["1L1"], - helpinghand: ["1L1"], - hyperbeam: ["1L1"], - hypnosis: ["1L1"], - icebeam: ["1L1"], - icepunch: ["1L1"], - iceshard: ["1L1"], - iciclespear: ["1L1"], - icywind: ["1L1"], - irondefense: ["1L1"], - lightscreen: ["1L1"], - magicroom: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - metronome: ["1L1"], - mimic: ["1L1"], - mirrorcoat: ["1L1"], - mistyterrain: ["1L1"], - nastyplot: ["1L1"], - payback: ["1L1"], - pound: ["1L1"], - powerswap: ["1L1"], - protect: ["1L1"], - psybeam: ["1L1"], - psychic: ["1L1"], - psychicterrain: ["1L1"], - psyshock: ["1L1"], - raindance: ["1L1"], - rapidspin: ["1L1"], - recycle: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - roleplay: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - screech: ["1L1"], - shadowball: ["1L1"], - skillswap: ["1L1"], - slackoff: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - stompingtantrum: ["1L1"], - storedpower: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - sunnyday: ["1L1"], - taunt: ["1L1"], - teeterdance: ["1L1"], - thief: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderwave: ["1L1"], - trick: ["1L1"], - trickroom: ["1L1"], - tripleaxel: ["1L1"], - uproar: ["1L1"], - wonderroom: ["1L1"], - zenheadbutt: ["1L1"], - }, - }, - scyther: { - learnset: { - acrobatics: ["1L1"], - aerialace: ["1L1"], - agility: ["1L1"], - aircutter: ["1L1"], - airslash: ["1L1"], - assurance: ["1L1"], - attract: ["1L1"], - batonpass: ["1L1"], - bide: ["1L1"], - brickbreak: ["1L1"], - brutalswing: ["1L1"], - bugbite: ["1L1"], - bugbuzz: ["1L1"], - captivate: ["1L1"], - closecombat: ["1L1"], - confide: ["1L1"], - counter: ["1L1"], - crosspoison: ["1L1"], - curse: ["1L1"], - cut: ["1L1"], - defog: ["1L1"], - detect: ["1L1"], - doubleedge: ["1L1"], - doublehit: ["1L1"], - doubleteam: ["1L1"], - dualwingbeat: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - falseswipe: ["1L1"], - feint: ["1L1"], - focusenergy: ["1L1"], - frustration: ["1L1"], - furycutter: ["1L1"], - gigaimpact: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - knockoff: ["1L1"], - laserfocus: ["1L1"], - leer: ["1L1"], - lightscreen: ["1L1"], - lunge: ["1L1"], - mimic: ["1L1"], - morningsun: ["1L1"], - naturalgift: ["1L1"], - nightslash: ["1L1"], - ominouswind: ["1L1"], - pounce: ["1L1"], - protect: ["1L1"], - psychocut: ["1L1"], - pursuit: ["1L1"], - quickattack: ["1L1"], - quickguard: ["1L1"], - rage: ["1L1"], - raindance: ["1L1"], - razorwind: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - reversal: ["1L1"], - rocksmash: ["1L1"], - roost: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - scaryface: ["1L1"], - secretpower: ["1L1"], - silverwind: ["1L1"], - skittersmack: ["1L1"], - skullbash: ["1L1"], - slash: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - steelwing: ["1L1"], - strugglebug: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - swordsdance: ["1L1"], - tailwind: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - uturn: ["1L1"], - vacuumwave: ["1L1"], - wingattack: ["1L1"], - xscissor: ["1L1"], - }, - eventData: [ - {generation: 3, level: 10, gender: "M", abilities: ["1L1"], moves: ["1L1"], pokeball: "pokeball"}, - {generation: 3, level: 40, abilities: ["1L1"], moves: ["1L1"]}, - {generation: 5, level: 30, moves: ["1L1"], pokeball: "cherishball"}, - ], - encounters: [ - {generation: 1, level: 15}, - {generation: 1, level: 25}, - ], - }, - scizor: { - learnset: { - acrobatics: ["1L1"], - aerialace: ["1L1"], - agility: ["1L1"], - aircutter: ["1L1"], - airslash: ["1L1"], - assurance: ["1L1"], - attract: ["1L1"], - batonpass: ["1L1"], - brickbreak: ["1L1"], - brutalswing: ["1L1"], - bugbite: ["1L1"], - bugbuzz: ["1L1"], - bulletpunch: ["1L1"], - captivate: ["1L1"], - closecombat: ["1L1"], - confide: ["1L1"], - counter: ["1L1"], - crosspoison: ["1L1"], - curse: ["1L1"], - cut: ["1L1"], - defog: ["1L1"], - detect: ["1L1"], - doubleedge: ["1L1"], - doublehit: ["1L1"], - doubleteam: ["1L1"], - dualwingbeat: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - falseswipe: ["1L1"], - feint: ["1L1"], - flashcannon: ["1L1"], - fling: ["1L1"], - focusenergy: ["1L1"], - frustration: ["1L1"], - furycutter: ["1L1"], - gigaimpact: ["1L1"], - hardpress: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - irondefense: ["1L1"], - ironhead: ["1L1"], - knockoff: ["1L1"], - laserfocus: ["1L1"], - leer: ["1L1"], - lightscreen: ["1L1"], - lunge: ["1L1"], - metalclaw: ["1L1"], - mimic: ["1L1"], - naturalgift: ["1L1"], - nightslash: ["1L1"], - ominouswind: ["1L1"], - pounce: ["1L1"], - protect: ["1L1"], - psychocut: ["1L1"], - pursuit: ["1L1"], - quickattack: ["1L1"], - raindance: ["1L1"], - razorwind: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - reversal: ["1L1"], - rocksmash: ["1L1"], - roost: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - sandstorm: ["1L1"], - sandtomb: ["1L1"], - scaryface: ["1L1"], - secretpower: ["1L1"], - silverwind: ["1L1"], - skittersmack: ["1L1"], - slash: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - steelbeam: ["1L1"], - steelwing: ["1L1"], - strength: ["1L1"], - strugglebug: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - superpower: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - swordsdance: ["1L1"], - tailwind: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - uturn: ["1L1"], - vacuumwave: ["1L1"], - venoshock: ["1L1"], - wingattack: ["1L1"], - xscissor: ["1L1"], - }, - eventData: [ - {generation: 3, level: 50, gender: "M", abilities: ["1L1"], moves: ["1L1"], pokeball: "pokeball"}, - {generation: 4, level: 50, gender: "M", nature: "Adamant", abilities: ["1L1"], moves: ["1L1"], pokeball: "cherishball"}, - {generation: 5, level: 100, gender: "M", abilities: ["1L1"], moves: ["1L1"], pokeball: "cherishball"}, - {generation: 5, level: 10, gender: "M", isHidden: true, moves: ["1L1"]}, - {generation: 6, level: 50, gender: "M", moves: ["1L1"], pokeball: "cherishball"}, - {generation: 6, level: 25, nature: "Adamant", abilities: ["1L1"], moves: ["1L1"], pokeball: "cherishball"}, - {generation: 6, level: 25, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 6, level: 50, abilities: ["1L1"], moves: ["1L1"], pokeball: "cherishball"}, - ], - }, - kleavor: { - learnset: { - acrobatics: ["1L1"], - aerialace: ["1L1"], - agility: ["1L1"], - aircutter: ["1L1"], - airslash: ["1L1"], - batonpass: ["1L1"], - brickbreak: ["1L1"], - bugbite: ["1L1"], - bugbuzz: ["1L1"], - closecombat: ["1L1"], - doubleedge: ["1L1"], - doublehit: ["1L1"], - doubleteam: ["1L1"], - dualwingbeat: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - falseswipe: ["1L1"], - focusenergy: ["1L1"], - furycutter: ["1L1"], - gigaimpact: ["1L1"], - helpinghand: ["1L1"], - hyperbeam: ["1L1"], - leer: ["1L1"], - lightscreen: ["1L1"], - lunge: ["1L1"], - pounce: ["1L1"], - protect: ["1L1"], - quickattack: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - reversal: ["1L1"], - rockblast: ["1L1"], - rockslide: ["1L1"], - rocktomb: ["1L1"], - sandstorm: ["1L1"], - scaryface: ["1L1"], - skittersmack: ["1L1"], - slash: ["1L1"], - sleeptalk: ["1L1"], - smackdown: ["1L1"], - stealthrock: ["1L1"], - stoneaxe: ["1L1"], - stoneedge: ["1L1"], - strugglebug: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swift: ["1L1"], - swordsdance: ["1L1"], - tailwind: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - trailblaze: ["1L1"], - uturn: ["1L1"], - vacuumwave: ["1L1"], - xscissor: ["1L1"], - }, - }, - smoochum: { - learnset: { - attract: ["1L1"], - auroraveil: ["1L1"], - avalanche: ["1L1"], - blizzard: ["1L1"], - bodyslam: ["1L1"], - calmmind: ["1L1"], - captivate: ["1L1"], - charm: ["1L1"], - confide: ["1L1"], - confusion: ["1L1"], - copycat: ["1L1"], - counter: ["1L1"], - covet: ["1L1"], - curse: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - drainingkiss: ["1L1"], - dreameater: ["1L1"], - dynamicpunch: ["1L1"], - echoedvoice: ["1L1"], - encore: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fakeout: ["1L1"], - faketears: ["1L1"], - flash: ["1L1"], - fling: ["1L1"], - frostbreath: ["1L1"], - frustration: ["1L1"], - grassknot: ["1L1"], - hail: ["1L1"], - healbell: ["1L1"], - heartstamp: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - icebeam: ["1L1"], - icepunch: ["1L1"], - icywind: ["1L1"], - lick: ["1L1"], - lightscreen: ["1L1"], - luckychant: ["1L1"], - magiccoat: ["1L1"], - magicroom: ["1L1"], - meanlook: ["1L1"], - meditate: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - metronome: ["1L1"], - mimic: ["1L1"], - miracleeye: ["1L1"], - mudslap: ["1L1"], - nastyplot: ["1L1"], - naturalgift: ["1L1"], - nightmare: ["1L1"], - payback: ["1L1"], - perishsong: ["1L1"], - pound: ["1L1"], - powdersnow: ["1L1"], - protect: ["1L1"], - psychic: ["1L1"], - psychup: ["1L1"], - psyshock: ["1L1"], - raindance: ["1L1"], - recycle: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roleplay: ["1L1"], - round: ["1L1"], - secretpower: ["1L1"], - seismictoss: ["1L1"], - shadowball: ["1L1"], - signalbeam: ["1L1"], - sing: ["1L1"], - skillswap: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - storedpower: ["1L1"], - substitute: ["1L1"], - swagger: ["1L1"], - sweetkiss: ["1L1"], - sweetscent: ["1L1"], - thief: ["1L1"], - toxic: ["1L1"], - trick: ["1L1"], - trickroom: ["1L1"], - uproar: ["1L1"], - wakeupslap: ["1L1"], - waterpulse: ["1L1"], - wish: ["1L1"], - wonderroom: ["1L1"], - zenheadbutt: ["1L1"], - }, - }, - jynx: { - learnset: { - allyswitch: ["1L1"], - attract: ["1L1"], - auroraveil: ["1L1"], - avalanche: ["1L1"], - bide: ["1L1"], - blizzard: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - bubblebeam: ["1L1"], - calmmind: ["1L1"], - captivate: ["1L1"], - charm: ["1L1"], - confide: ["1L1"], - confusion: ["1L1"], - copycat: ["1L1"], - counter: ["1L1"], - covet: ["1L1"], - curse: ["1L1"], - doubleedge: ["1L1"], - doubleslap: ["1L1"], - doubleteam: ["1L1"], - drainingkiss: ["1L1"], - drainpunch: ["1L1"], - dreameater: ["1L1"], - dynamicpunch: ["1L1"], - echoedvoice: ["1L1"], - encore: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - expandingforce: ["1L1"], - facade: ["1L1"], - faketears: ["1L1"], - flash: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - focuspunch: ["1L1"], - frostbreath: ["1L1"], - frustration: ["1L1"], - futuresight: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - hail: ["1L1"], - headbutt: ["1L1"], - healbell: ["1L1"], - heartstamp: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - hypervoice: ["1L1"], - icebeam: ["1L1"], - icepunch: ["1L1"], - iciclespear: ["1L1"], - icywind: ["1L1"], - lick: ["1L1"], - lightscreen: ["1L1"], - lovelykiss: ["1L1"], - magiccoat: ["1L1"], - magicroom: ["1L1"], - meanlook: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - metronome: ["1L1"], - mimic: ["1L1"], - mudslap: ["1L1"], - nastyplot: ["1L1"], - naturalgift: ["1L1"], - nightmare: ["1L1"], - payback: ["1L1"], - perishsong: ["1L1"], - pound: ["1L1"], - powdersnow: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - psychic: ["1L1"], - psychicterrain: ["1L1"], - psychocut: ["1L1"], - psychup: ["1L1"], - psyshock: ["1L1"], - psywave: ["1L1"], - rage: ["1L1"], - raindance: ["1L1"], - recycle: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roleplay: ["1L1"], - round: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - seismictoss: ["1L1"], - shadowball: ["1L1"], - signalbeam: ["1L1"], - sing: ["1L1"], - skillswap: ["1L1"], - skullbash: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - storedpower: ["1L1"], - submission: ["1L1"], - substitute: ["1L1"], - swagger: ["1L1"], - sweetkiss: ["1L1"], - sweetscent: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - telekinesis: ["1L1"], - teleport: ["1L1"], - thief: ["1L1"], - thrash: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - trick: ["1L1"], - trickroom: ["1L1"], - tripleaxel: ["1L1"], - uproar: ["1L1"], - wakeupslap: ["1L1"], - watergun: ["1L1"], - waterpulse: ["1L1"], - wonderroom: ["1L1"], - wringout: ["1L1"], - zenheadbutt: ["1L1"], - }, - encounters: [ - {generation: 1, level: 15}, - {generation: 2, level: 10}, - {generation: 3, level: 20, nature: "Mild", ivs: {hp: 18, atk: 17, def: 18, spa: 22, spd: 25, spe: 21}, abilities: ["1L1"], pokeball: "pokeball"}, - {generation: 4, level: 22}, - {generation: 7, level: 9}, - ], - }, - elekid: { - learnset: { - attract: ["1L1"], - barrier: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - captivate: ["1L1"], - charge: ["1L1"], - chargebeam: ["1L1"], - confide: ["1L1"], - counter: ["1L1"], - covet: ["1L1"], - crosschop: ["1L1"], - curse: ["1L1"], - detect: ["1L1"], - discharge: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dualchop: ["1L1"], - dynamicpunch: ["1L1"], - eerieimpulse: ["1L1"], - electricterrain: ["1L1"], - electroball: ["1L1"], - electroweb: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - feint: ["1L1"], - firepunch: ["1L1"], - flash: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - focuspunch: ["1L1"], - followme: ["1L1"], - frustration: ["1L1"], - hammerarm: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - icepunch: ["1L1"], - karatechop: ["1L1"], - knockoff: ["1L1"], - leer: ["1L1"], - lightscreen: ["1L1"], - lowkick: ["1L1"], - magnetrise: ["1L1"], - meditate: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - metalsound: ["1L1"], - mimic: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - psychic: ["1L1"], - quickattack: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rocksmash: ["1L1"], - rollingkick: ["1L1"], - round: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - seismictoss: ["1L1"], - shockwave: ["1L1"], - signalbeam: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - substitute: ["1L1"], - supercellslam: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderpunch: ["1L1"], - thundershock: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - uproar: ["1L1"], - voltswitch: ["1L1"], - wildcharge: ["1L1"], - zapcannon: ["1L1"], - }, - eventData: [ - {generation: 3, level: 20, moves: ["1L1"], pokeball: "pokeball"}, - ], - }, - electabuzz: { - learnset: { - attract: ["1L1"], - bide: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - bulkup: ["1L1"], - captivate: ["1L1"], - charge: ["1L1"], - chargebeam: ["1L1"], - confide: ["1L1"], - counter: ["1L1"], - covet: ["1L1"], - crosschop: ["1L1"], - curse: ["1L1"], - detect: ["1L1"], - discharge: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dualchop: ["1L1"], - dynamicpunch: ["1L1"], - eerieimpulse: ["1L1"], - electricterrain: ["1L1"], - electroball: ["1L1"], - electroweb: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - firepunch: ["1L1"], - flash: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - focuspunch: ["1L1"], - followme: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - icepunch: ["1L1"], - irontail: ["1L1"], - knockoff: ["1L1"], - leer: ["1L1"], - lightscreen: ["1L1"], - lowkick: ["1L1"], - lowsweep: ["1L1"], - magnetrise: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - metalsound: ["1L1"], - metronome: ["1L1"], - mimic: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - psychic: ["1L1"], - psywave: ["1L1"], - quickattack: ["1L1"], - rage: ["1L1"], - raindance: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - risingvoltage: ["1L1"], - rockclimb: ["1L1"], - rocksmash: ["1L1"], - round: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - seismictoss: ["1L1"], - shockwave: ["1L1"], - signalbeam: ["1L1"], - skullbash: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - strength: ["1L1"], - submission: ["1L1"], - substitute: ["1L1"], - supercellslam: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - teleport: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderpunch: ["1L1"], - thundershock: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - uproar: ["1L1"], - voltswitch: ["1L1"], - wildcharge: ["1L1"], - zapcannon: ["1L1"], - }, - eventData: [ - {generation: 3, level: 10, gender: "M", moves: ["1L1"], pokeball: "pokeball"}, - {generation: 3, level: 43, moves: ["1L1"]}, - {generation: 4, level: 30, gender: "M", nature: "Naughty", moves: ["1L1"], pokeball: "pokeball"}, - {generation: 5, level: 30, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 6, level: 30, gender: "M", isHidden: true, moves: ["1L1"], pokeball: "cherishball"}, - ], - encounters: [ - {generation: 1, level: 33}, - {generation: 2, level: 15}, - {generation: 4, level: 15}, - {generation: 7, level: 25}, - ], - }, - electivire: { - learnset: { - attract: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - bulkup: ["1L1"], - bulldoze: ["1L1"], - captivate: ["1L1"], - charge: ["1L1"], - chargebeam: ["1L1"], - confide: ["1L1"], - covet: ["1L1"], - crosschop: ["1L1"], - darkestlariat: ["1L1"], - dig: ["1L1"], - discharge: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dualchop: ["1L1"], - earthquake: ["1L1"], - eerieimpulse: ["1L1"], - electricterrain: ["1L1"], - electroball: ["1L1"], - electroweb: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - firepunch: ["1L1"], - flamethrower: ["1L1"], - flash: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - focuspunch: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - icepunch: ["1L1"], - iondeluge: ["1L1"], - irontail: ["1L1"], - knockoff: ["1L1"], - leer: ["1L1"], - lightscreen: ["1L1"], - lowkick: ["1L1"], - lowsweep: ["1L1"], - magnetrise: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - metalsound: ["1L1"], - metronome: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - psychic: ["1L1"], - quickattack: ["1L1"], - raindance: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - risingvoltage: ["1L1"], - rockclimb: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - shockwave: ["1L1"], - signalbeam: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - stompingtantrum: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - supercellslam: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderpunch: ["1L1"], - thundershock: ["1L1"], - thunderwave: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - uproar: ["1L1"], - voltswitch: ["1L1"], - weatherball: ["1L1"], - wildcharge: ["1L1"], - }, - eventData: [ - {generation: 4, level: 50, gender: "M", nature: "Adamant", moves: ["1L1"], pokeball: "pokeball"}, - {generation: 4, level: 50, gender: "M", nature: "Serious", moves: ["1L1"], pokeball: "cherishball"}, - ], - }, - magby: { - learnset: { - acidspray: ["1L1"], - attract: ["1L1"], - barrier: ["1L1"], - belch: ["1L1"], - bellydrum: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - burningjealousy: ["1L1"], - captivate: ["1L1"], - clearsmog: ["1L1"], - confide: ["1L1"], - confuseray: ["1L1"], - counter: ["1L1"], - covet: ["1L1"], - crosschop: ["1L1"], - curse: ["1L1"], - detect: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dualchop: ["1L1"], - dynamicpunch: ["1L1"], - ember: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - feintattack: ["1L1"], - fireblast: ["1L1"], - firepunch: ["1L1"], - firespin: ["1L1"], - flameburst: ["1L1"], - flamecharge: ["1L1"], - flamethrower: ["1L1"], - flamewheel: ["1L1"], - flareblitz: ["1L1"], - fling: ["1L1"], - focusenergy: ["1L1"], - focuspunch: ["1L1"], - followme: ["1L1"], - frustration: ["1L1"], - headbutt: ["1L1"], - heatwave: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - incinerate: ["1L1"], - irontail: ["1L1"], - karatechop: ["1L1"], - lavaplume: ["1L1"], - leer: ["1L1"], - lowkick: ["1L1"], - machpunch: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - mimic: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - overheat: ["1L1"], - poisonjab: ["1L1"], - powerswap: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - psychic: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rocksmash: ["1L1"], - round: ["1L1"], - scaryface: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - seismictoss: ["1L1"], - sleeptalk: ["1L1"], - smog: ["1L1"], - smokescreen: ["1L1"], - snore: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - takedown: ["1L1"], - temperflare: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thunderpunch: ["1L1"], - toxic: ["1L1"], - uproar: ["1L1"], - willowisp: ["1L1"], - }, - }, - magmar: { - learnset: { - acidspray: ["1L1"], - attract: ["1L1"], - bide: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - burningjealousy: ["1L1"], - captivate: ["1L1"], - clearsmog: ["1L1"], - confide: ["1L1"], - confuseray: ["1L1"], - counter: ["1L1"], - covet: ["1L1"], - crosschop: ["1L1"], - curse: ["1L1"], - detect: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dualchop: ["1L1"], - dynamicpunch: ["1L1"], - ember: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - feintattack: ["1L1"], - fireblast: ["1L1"], - firepunch: ["1L1"], - firespin: ["1L1"], - flameburst: ["1L1"], - flamecharge: ["1L1"], - flamethrower: ["1L1"], - flamewheel: ["1L1"], - flareblitz: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - focusenergy: ["1L1"], - focuspunch: ["1L1"], - followme: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - headbutt: ["1L1"], - heatcrash: ["1L1"], - heatwave: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - incinerate: ["1L1"], - irontail: ["1L1"], - knockoff: ["1L1"], - lavaplume: ["1L1"], - leer: ["1L1"], - lowkick: ["1L1"], - lowsweep: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - metronome: ["1L1"], - mimic: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - overheat: ["1L1"], - poisonjab: ["1L1"], - powerswap: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - psychic: ["1L1"], - psywave: ["1L1"], - rage: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roar: ["1L1"], - rockclimb: ["1L1"], - rocksmash: ["1L1"], - round: ["1L1"], - scaryface: ["1L1"], - scorchingsands: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - seismictoss: ["1L1"], - skullbash: ["1L1"], - sleeptalk: ["1L1"], - smog: ["1L1"], - smokescreen: ["1L1"], - snore: ["1L1"], - strength: ["1L1"], - submission: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - teleport: ["1L1"], - temperflare: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thunderpunch: ["1L1"], - toxic: ["1L1"], - uproar: ["1L1"], - willowisp: ["1L1"], - }, - eventData: [ - {generation: 3, level: 10, gender: "M", moves: ["1L1"], pokeball: "pokeball"}, - {generation: 3, level: 36, moves: ["1L1"]}, - {generation: 4, level: 30, gender: "M", nature: "Quiet", moves: ["1L1"], pokeball: "pokeball"}, - {generation: 5, level: 30, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 6, level: 30, gender: "M", isHidden: true, moves: ["1L1"], pokeball: "cherishball"}, - ], - encounters: [ - {generation: 1, level: 34}, - {generation: 2, level: 14}, - {generation: 4, level: 14}, - {generation: 7, level: 16}, - ], - }, - magmortar: { - learnset: { - acidspray: ["1L1"], - attract: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - bulldoze: ["1L1"], - burningjealousy: ["1L1"], - captivate: ["1L1"], - clearsmog: ["1L1"], - confide: ["1L1"], - confuseray: ["1L1"], - covet: ["1L1"], - curse: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dualchop: ["1L1"], - earthquake: ["1L1"], - ember: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - feintattack: ["1L1"], - fireblast: ["1L1"], - firepunch: ["1L1"], - firespin: ["1L1"], - flameburst: ["1L1"], - flamecharge: ["1L1"], - flamethrower: ["1L1"], - flamewheel: ["1L1"], - flareblitz: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - focusenergy: ["1L1"], - focuspunch: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - headbutt: ["1L1"], - heatcrash: ["1L1"], - heatwave: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - hypervoice: ["1L1"], - incinerate: ["1L1"], - irontail: ["1L1"], - knockoff: ["1L1"], - lavaplume: ["1L1"], - leer: ["1L1"], - lowkick: ["1L1"], - lowsweep: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - metronome: ["1L1"], - mudslap: ["1L1"], - mysticalfire: ["1L1"], - naturalgift: ["1L1"], - overheat: ["1L1"], - poisonjab: ["1L1"], - powerswap: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - psychic: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roar: ["1L1"], - rockclimb: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - scaryface: ["1L1"], - scorchingsands: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - sleeptalk: ["1L1"], - smog: ["1L1"], - smokescreen: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - stompingtantrum: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - temperflare: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thunderbolt: ["1L1"], - thunderpunch: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - uproar: ["1L1"], - weatherball: ["1L1"], - willowisp: ["1L1"], - }, - eventData: [ - {generation: 4, level: 50, gender: "F", nature: "Modest", moves: ["1L1"], pokeball: "pokeball"}, - {generation: 4, level: 50, gender: "M", nature: "Hardy", moves: ["1L1"], pokeball: "cherishball"}, - ], - }, - pinsir: { - learnset: { - attract: ["1L1"], - bide: ["1L1"], - bind: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - brutalswing: ["1L1"], - bugbite: ["1L1"], - bulkup: ["1L1"], - bulldoze: ["1L1"], - captivate: ["1L1"], - closecombat: ["1L1"], - confide: ["1L1"], - curse: ["1L1"], - cut: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doublehit: ["1L1"], - doubleteam: ["1L1"], - earthquake: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - falseswipe: ["1L1"], - feint: ["1L1"], - feintattack: ["1L1"], - flail: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - focusenergy: ["1L1"], - focuspunch: ["1L1"], - frustration: ["1L1"], - furyattack: ["1L1"], - furycutter: ["1L1"], - gigaimpact: ["1L1"], - guillotine: ["1L1"], - harden: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - highhorsepower: ["1L1"], - hyperbeam: ["1L1"], - irondefense: ["1L1"], - knockoff: ["1L1"], - mefirst: ["1L1"], - mimic: ["1L1"], - naturalgift: ["1L1"], - outrage: ["1L1"], - protect: ["1L1"], - quickattack: ["1L1"], - rage: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - revenge: ["1L1"], - reversal: ["1L1"], - rockclimb: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - secretpower: ["1L1"], - seismictoss: ["1L1"], - slash: ["1L1"], - sleeptalk: ["1L1"], - smackdown: ["1L1"], - snore: ["1L1"], - stealthrock: ["1L1"], - stoneedge: ["1L1"], - stormthrow: ["1L1"], - strength: ["1L1"], - stringshot: ["1L1"], - strugglebug: ["1L1"], - submission: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - superpower: ["1L1"], - swagger: ["1L1"], - swordsdance: ["1L1"], - takedown: ["1L1"], - thief: ["1L1"], - thrash: ["1L1"], - throatchop: ["1L1"], - toxic: ["1L1"], - visegrip: ["1L1"], - vitalthrow: ["1L1"], - xscissor: ["1L1"], - }, - eventData: [ - {generation: 3, level: 35, abilities: ["1L1"], moves: ["1L1"]}, - {generation: 6, level: 50, gender: "F", nature: "Adamant", moves: ["1L1"], pokeball: "cherishball"}, - {generation: 6, level: 50, nature: "Jolly", isHidden: true, moves: ["1L1"], pokeball: "cherishball"}, - ], - encounters: [ - {generation: 1, level: 15}, - {generation: 1, level: 20}, - ], - }, - tauros: { - learnset: { - assurance: ["1L1"], - attract: ["1L1"], - bide: ["1L1"], - blizzard: ["1L1"], - bodyslam: ["1L1"], - bulldoze: ["1L1"], - captivate: ["1L1"], - closecombat: ["1L1"], - confide: ["1L1"], - curse: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - earthquake: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fireblast: ["1L1"], - fissure: ["1L1"], - flamethrower: ["1L1"], - focusenergy: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - highhorsepower: ["1L1"], - hornattack: ["1L1"], - horndrill: ["1L1"], - hyperbeam: ["1L1"], - icebeam: ["1L1"], - icywind: ["1L1"], - incinerate: ["1L1"], - ironhead: ["1L1"], - irontail: ["1L1"], - lashout: ["1L1"], - leer: ["1L1"], - megahorn: ["1L1"], - mimic: ["1L1"], - naturalgift: ["1L1"], - outrage: ["1L1"], - payback: ["1L1"], - protect: ["1L1"], - pursuit: ["1L1"], - rage: ["1L1"], - ragingbull: ["1L1"], - raindance: ["1L1"], - refresh: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - revenge: ["1L1"], - reversal: ["1L1"], - rockclimb: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - roleplay: ["1L1"], - round: ["1L1"], - sandstorm: ["1L1"], - scaryface: ["1L1"], - secretpower: ["1L1"], - shadowball: ["1L1"], - shockwave: ["1L1"], - skullbash: ["1L1"], - sleeptalk: ["1L1"], - smartstrike: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - spite: ["1L1"], - stomp: ["1L1"], - stompingtantrum: ["1L1"], - stoneedge: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - tackle: ["1L1"], - tailwhip: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thrash: ["1L1"], - throatchop: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - uproar: ["1L1"], - waterpulse: ["1L1"], - whirlpool: ["1L1"], - wildcharge: ["1L1"], - workup: ["1L1"], - zapcannon: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 3, level: 25, nature: "Docile", ivs: {hp: 14, atk: 19, def: 12, spa: 17, spd: 5, spe: 26}, abilities: ["1L1"], moves: ["1L1"], pokeball: "safariball"}, - {generation: 3, level: 10, abilities: ["1L1"], moves: ["1L1"], pokeball: "pokeball"}, - {generation: 3, level: 46, abilities: ["1L1"], moves: ["1L1"]}, - ], - encounters: [ - {generation: 1, level: 21}, - ], - }, - taurospaldeacombat: { - learnset: { - assurance: ["1L1"], - bodypress: ["1L1"], - bodyslam: ["1L1"], - bulkup: ["1L1"], - bulldoze: ["1L1"], - closecombat: ["1L1"], - curse: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doublekick: ["1L1"], - drillrun: ["1L1"], - earthquake: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - gigaimpact: ["1L1"], - headbutt: ["1L1"], - highhorsepower: ["1L1"], - hyperbeam: ["1L1"], - ironhead: ["1L1"], - lashout: ["1L1"], - outrage: ["1L1"], - protect: ["1L1"], - ragingbull: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - reversal: ["1L1"], - rockslide: ["1L1"], - rocktomb: ["1L1"], - sandstorm: ["1L1"], - scaryface: ["1L1"], - sleeptalk: ["1L1"], - smartstrike: ["1L1"], - stompingtantrum: ["1L1"], - stoneedge: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - tackle: ["1L1"], - tailwhip: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thrash: ["1L1"], - throatchop: ["1L1"], - trailblaze: ["1L1"], - wildcharge: ["1L1"], - workup: ["1L1"], - zenheadbutt: ["1L1"], - }, - }, - taurospaldeablaze: { - learnset: { - bodypress: ["1L1"], - bodyslam: ["1L1"], - bulkup: ["1L1"], - bulldoze: ["1L1"], - closecombat: ["1L1"], - curse: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doublekick: ["1L1"], - drillrun: ["1L1"], - earthquake: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fireblast: ["1L1"], - firespin: ["1L1"], - flamecharge: ["1L1"], - flamethrower: ["1L1"], - flareblitz: ["1L1"], - gigaimpact: ["1L1"], - headbutt: ["1L1"], - highhorsepower: ["1L1"], - hyperbeam: ["1L1"], - ironhead: ["1L1"], - lashout: ["1L1"], - outrage: ["1L1"], - overheat: ["1L1"], - protect: ["1L1"], - ragingbull: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - reversal: ["1L1"], - rockslide: ["1L1"], - rocktomb: ["1L1"], - sandstorm: ["1L1"], - scaryface: ["1L1"], - sleeptalk: ["1L1"], - smartstrike: ["1L1"], - stompingtantrum: ["1L1"], - stoneedge: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - tackle: ["1L1"], - tailwhip: ["1L1"], - takedown: ["1L1"], - temperflare: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thrash: ["1L1"], - trailblaze: ["1L1"], - wildcharge: ["1L1"], - willowisp: ["1L1"], - workup: ["1L1"], - zenheadbutt: ["1L1"], - }, - }, - taurospaldeaaqua: { - learnset: { - aquajet: ["1L1"], - bodypress: ["1L1"], - bodyslam: ["1L1"], - bulkup: ["1L1"], - bulldoze: ["1L1"], - chillingwater: ["1L1"], - closecombat: ["1L1"], - curse: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doublekick: ["1L1"], - drillrun: ["1L1"], - earthquake: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - gigaimpact: ["1L1"], - headbutt: ["1L1"], - highhorsepower: ["1L1"], - hydropump: ["1L1"], - hyperbeam: ["1L1"], - ironhead: ["1L1"], - lashout: ["1L1"], - liquidation: ["1L1"], - outrage: ["1L1"], - protect: ["1L1"], - ragingbull: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - reversal: ["1L1"], - rockslide: ["1L1"], - rocktomb: ["1L1"], - sandstorm: ["1L1"], - scaryface: ["1L1"], - sleeptalk: ["1L1"], - smartstrike: ["1L1"], - stompingtantrum: ["1L1"], - stoneedge: ["1L1"], - substitute: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - tackle: ["1L1"], - tailwhip: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thrash: ["1L1"], - trailblaze: ["1L1"], - waterpulse: ["1L1"], - wavecrash: ["1L1"], - whirlpool: ["1L1"], - wildcharge: ["1L1"], - workup: ["1L1"], - zenheadbutt: ["1L1"], - }, - }, - magikarp: { - learnset: { - bounce: ["1L1"], - celebrate: ["1L1"], - flail: ["1L1"], - happyhour: ["1L1"], - hydropump: ["1L1"], - splash: ["1L1"], - tackle: ["1L1"], - }, - eventData: [ - {generation: 4, level: 5, gender: "M", nature: "Relaxed", moves: ["1L1"], pokeball: "pokeball"}, - {generation: 4, level: 6, gender: "F", nature: "Rash", moves: ["1L1"], pokeball: "pokeball"}, - {generation: 4, level: 7, gender: "F", nature: "Hardy", moves: ["1L1"], pokeball: "pokeball"}, - {generation: 4, level: 5, gender: "F", nature: "Lonely", moves: ["1L1"], pokeball: "pokeball"}, - {generation: 4, level: 4, gender: "M", nature: "Modest", moves: ["1L1"], pokeball: "pokeball"}, - {generation: 5, level: 99, shiny: true, gender: "M", moves: ["1L1"], pokeball: "cherishball"}, - {generation: 6, level: 1, shiny: 1, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 7, level: 19, shiny: true, moves: ["1L1"], pokeball: "cherishball"}, - ], - encounters: [ - {generation: 1, level: 5}, - ], - }, - gyarados: { - learnset: { - aquatail: ["1L1"], - attract: ["1L1"], - avalanche: ["1L1"], - bide: ["1L1"], - bind: ["1L1"], - bite: ["1L1"], - blizzard: ["1L1"], - bodyslam: ["1L1"], - bounce: ["1L1"], - brine: ["1L1"], - brutalswing: ["1L1"], - bubblebeam: ["1L1"], - bulldoze: ["1L1"], - captivate: ["1L1"], - chillingwater: ["1L1"], - confide: ["1L1"], - crunch: ["1L1"], - curse: ["1L1"], - darkpulse: ["1L1"], - dive: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dragonbreath: ["1L1"], - dragoncheer: ["1L1"], - dragondance: ["1L1"], - dragonpulse: ["1L1"], - dragonrage: ["1L1"], - dragontail: ["1L1"], - earthquake: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fireblast: ["1L1"], - flail: ["1L1"], - flamethrower: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - hail: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hurricane: ["1L1"], - hydropump: ["1L1"], - hyperbeam: ["1L1"], - icebeam: ["1L1"], - icefang: ["1L1"], - icywind: ["1L1"], - incinerate: ["1L1"], - ironhead: ["1L1"], - irontail: ["1L1"], - lashout: ["1L1"], - leer: ["1L1"], - mimic: ["1L1"], - muddywater: ["1L1"], - naturalgift: ["1L1"], - outrage: ["1L1"], - payback: ["1L1"], - powerwhip: ["1L1"], - protect: ["1L1"], - rage: ["1L1"], - raindance: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roar: ["1L1"], - rocksmash: ["1L1"], - round: ["1L1"], - sandstorm: ["1L1"], - scald: ["1L1"], - scaleshot: ["1L1"], - scaryface: ["1L1"], - secretpower: ["1L1"], - skullbash: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - spite: ["1L1"], - splash: ["1L1"], - stoneedge: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - temperflare: ["1L1"], - terablast: ["1L1"], - thrash: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderwave: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - twister: ["1L1"], - uproar: ["1L1"], - waterfall: ["1L1"], - watergun: ["1L1"], - waterpulse: ["1L1"], - whirlpool: ["1L1"], - zapcannon: ["1L1"], - }, - eventData: [ - {generation: 6, level: 50, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 6, level: 20, shiny: true, moves: ["1L1"], pokeball: "cherishball"}, - ], - encounters: [ - {generation: 1, level: 15}, - {generation: 2, level: 15}, - {generation: 3, level: 5}, - {generation: 4, level: 10}, - {generation: 5, level: 1}, - {generation: 7, level: 10}, - ], - }, - lapras: { - learnset: { - alluringvoice: ["1L1"], - ancientpower: ["1L1"], - aquatail: ["1L1"], - attract: ["1L1"], - aurorabeam: ["1L1"], - avalanche: ["1L1"], - bide: ["1L1"], - blizzard: ["1L1"], - block: ["1L1"], - bodypress: ["1L1"], - bodyslam: ["1L1"], - brine: ["1L1"], - bubblebeam: ["1L1"], - bulldoze: ["1L1"], - captivate: ["1L1"], - charm: ["1L1"], - chillingwater: ["1L1"], - confide: ["1L1"], - confuseray: ["1L1"], - curse: ["1L1"], - disarmingvoice: ["1L1"], - dive: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dragonbreath: ["1L1"], - dragoncheer: ["1L1"], - dragondance: ["1L1"], - dragonpulse: ["1L1"], - dragonrage: ["1L1"], - dreameater: ["1L1"], - drillrun: ["1L1"], - earthquake: ["1L1"], - echoedvoice: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fissure: ["1L1"], - foresight: ["1L1"], - freezedry: ["1L1"], - frostbreath: ["1L1"], - frustration: ["1L1"], - futuresight: ["1L1"], - gigaimpact: ["1L1"], - growl: ["1L1"], - hail: ["1L1"], - haze: ["1L1"], - headbutt: ["1L1"], - healbell: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - horndrill: ["1L1"], - hydropump: ["1L1"], - hyperbeam: ["1L1"], - hypervoice: ["1L1"], - icebeam: ["1L1"], - iceshard: ["1L1"], - iciclespear: ["1L1"], - icywind: ["1L1"], - ironhead: ["1L1"], - irontail: ["1L1"], - lifedew: ["1L1"], - liquidation: ["1L1"], - megahorn: ["1L1"], - mimic: ["1L1"], - mist: ["1L1"], - muddywater: ["1L1"], - naturalgift: ["1L1"], - nightmare: ["1L1"], - outrage: ["1L1"], - perishsong: ["1L1"], - protect: ["1L1"], - psychic: ["1L1"], - psychicnoise: ["1L1"], - psywave: ["1L1"], - rage: ["1L1"], - raindance: ["1L1"], - reflect: ["1L1"], - refresh: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roar: ["1L1"], - rocksmash: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - secretpower: ["1L1"], - sheercold: ["1L1"], - shockwave: ["1L1"], - signalbeam: ["1L1"], - sing: ["1L1"], - skullbash: ["1L1"], - sleeptalk: ["1L1"], - smartstrike: ["1L1"], - snore: ["1L1"], - snowscape: ["1L1"], - solarbeam: ["1L1"], - sparklingaria: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - tickle: ["1L1"], - toxic: ["1L1"], - waterfall: ["1L1"], - watergun: ["1L1"], - waterpulse: ["1L1"], - weatherball: ["1L1"], - whirlpool: ["1L1"], - zapcannon: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 3, level: 44, moves: ["1L1"]}, - ], - encounters: [ - {generation: 1, level: 15}, - ], - }, - ditto: { - learnset: { - transform: ["1L1"], - }, - eventData: [ - {generation: 7, level: 10, moves: ["1L1"], pokeball: "cherishball"}, - ], - encounters: [ - {generation: 1, level: 12}, - {generation: 2, level: 10}, - {generation: 3, level: 23}, - {generation: 4, level: 10}, - {generation: 5, level: 45}, - {generation: 6, level: 30}, - {generation: 7, level: 25}, - ], - }, - eevee: { - learnset: { - alluringvoice: ["1L1"], - attract: ["1L1"], - babydolleyes: ["1L1"], - batonpass: ["1L1"], - bide: ["1L1"], - bite: ["1L1"], - bodyslam: ["1L1"], - calmmind: ["1L1"], - captivate: ["1L1"], - celebrate: ["1L1"], - charm: ["1L1"], - confide: ["1L1"], - copycat: ["1L1"], - covet: ["1L1"], - curse: ["1L1"], - detect: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doublekick: ["1L1"], - doubleteam: ["1L1"], - echoedvoice: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - faketears: ["1L1"], - flail: ["1L1"], - focusenergy: ["1L1"], - frustration: ["1L1"], - growl: ["1L1"], - headbutt: ["1L1"], - healbell: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hypervoice: ["1L1"], - irontail: ["1L1"], - laserfocus: ["1L1"], - lastresort: ["1L1"], - mimic: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - payday: ["1L1"], - protect: ["1L1"], - quickattack: ["1L1"], - rage: ["1L1"], - raindance: ["1L1"], - reflect: ["1L1"], - refresh: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - roar: ["1L1"], - round: ["1L1"], - sandattack: ["1L1"], - secretpower: ["1L1"], - shadowball: ["1L1"], - sing: ["1L1"], - skullbash: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - storedpower: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - synchronoise: ["1L1"], - tackle: ["1L1"], - tailwhip: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - tickle: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - trumpcard: ["1L1"], - weatherball: ["1L1"], - wish: ["1L1"], - workup: ["1L1"], - yawn: ["1L1"], - }, - eventData: [ - {generation: 4, level: 10, gender: "F", nature: "Lonely", abilities: ["1L1"], moves: ["1L1"], pokeball: "cherishball"}, - {generation: 4, level: 50, shiny: true, gender: "M", nature: "Hardy", abilities: ["1L1"], moves: ["1L1"], pokeball: "cherishball"}, - {generation: 5, level: 50, gender: "F", nature: "Hardy", abilities: ["1L1"], moves: ["1L1"], pokeball: "cherishball"}, - {generation: 6, level: 10, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 6, level: 15, shiny: true, isHidden: true, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 7, level: 10, nature: "Jolly", moves: ["1L1"], pokeball: "cherishball"}, - {generation: 8, level: 5, gender: "M", nature: "Docile", abilities: ["1L1"], moves: ["1L1"], pokeball: "cherishball"}, - ], - encounters: [ - {generation: 1, level: 25}, - ], - }, - eeveestarter: { - learnset: { - baddybad: ["1L1"], - bite: ["1L1"], - bouncybubble: ["1L1"], - buzzybuzz: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doublekick: ["1L1"], - facade: ["1L1"], - freezyfrost: ["1L1"], - glitzyglow: ["1L1"], - growl: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - irontail: ["1L1"], - payday: ["1L1"], - protect: ["1L1"], - quickattack: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - sandattack: ["1L1"], - sappyseed: ["1L1"], - shadowball: ["1L1"], - sizzlyslide: ["1L1"], - sparklyswirl: ["1L1"], - substitute: ["1L1"], - swift: ["1L1"], - tackle: ["1L1"], - tailwhip: ["1L1"], - takedown: ["1L1"], - toxic: ["1L1"], - veeveevolley: ["1L1"], - }, - eventData: [ - {generation: 7, level: 5, perfectIVs: 6, moves: ["1L1"], pokeball: "pokeball"}, - ], - eventOnly: false, - }, - vaporeon: { - learnset: { - acidarmor: ["1L1"], - alluringvoice: ["1L1"], - aquaring: ["1L1"], - aquatail: ["1L1"], - attract: ["1L1"], - aurorabeam: ["1L1"], - babydolleyes: ["1L1"], - batonpass: ["1L1"], - bide: ["1L1"], - bite: ["1L1"], - blizzard: ["1L1"], - bodyslam: ["1L1"], - brine: ["1L1"], - bubblebeam: ["1L1"], - calmmind: ["1L1"], - captivate: ["1L1"], - celebrate: ["1L1"], - charm: ["1L1"], - chillingwater: ["1L1"], - confide: ["1L1"], - copycat: ["1L1"], - covet: ["1L1"], - curse: ["1L1"], - detect: ["1L1"], - dig: ["1L1"], - dive: ["1L1"], - doubleedge: ["1L1"], - doublekick: ["1L1"], - doubleteam: ["1L1"], - echoedvoice: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - faketears: ["1L1"], - flipturn: ["1L1"], - focusenergy: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - growl: ["1L1"], - hail: ["1L1"], - haze: ["1L1"], - headbutt: ["1L1"], - healbell: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hydropump: ["1L1"], - hyperbeam: ["1L1"], - hypervoice: ["1L1"], - icebeam: ["1L1"], - icywind: ["1L1"], - irontail: ["1L1"], - laserfocus: ["1L1"], - lastresort: ["1L1"], - liquidation: ["1L1"], - mimic: ["1L1"], - mist: ["1L1"], - muddywater: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - payday: ["1L1"], - protect: ["1L1"], - quickattack: ["1L1"], - rage: ["1L1"], - raindance: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - roar: ["1L1"], - rocksmash: ["1L1"], - round: ["1L1"], - sandattack: ["1L1"], - scald: ["1L1"], - secretpower: ["1L1"], - shadowball: ["1L1"], - signalbeam: ["1L1"], - skullbash: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - storedpower: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - tackle: ["1L1"], - tailwhip: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - waterfall: ["1L1"], - watergun: ["1L1"], - waterpulse: ["1L1"], - weatherball: ["1L1"], - whirlpool: ["1L1"], - workup: ["1L1"], - yawn: ["1L1"], - }, - eventData: [ - {generation: 5, level: 10, gender: "M", isHidden: true, moves: ["1L1"]}, - {generation: 6, level: 10, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 7, level: 50, gender: "F", isHidden: true, moves: ["1L1"], pokeball: "cherishball"}, - ], - }, - jolteon: { - learnset: { - agility: ["1L1"], - alluringvoice: ["1L1"], - attract: ["1L1"], - babydolleyes: ["1L1"], - batonpass: ["1L1"], - bide: ["1L1"], - bite: ["1L1"], - bodyslam: ["1L1"], - calmmind: ["1L1"], - captivate: ["1L1"], - celebrate: ["1L1"], - charge: ["1L1"], - chargebeam: ["1L1"], - charm: ["1L1"], - confide: ["1L1"], - copycat: ["1L1"], - covet: ["1L1"], - curse: ["1L1"], - detect: ["1L1"], - dig: ["1L1"], - discharge: ["1L1"], - doubleedge: ["1L1"], - doublekick: ["1L1"], - doubleteam: ["1L1"], - echoedvoice: ["1L1"], - eerieimpulse: ["1L1"], - electricterrain: ["1L1"], - electroball: ["1L1"], - electroweb: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - faketears: ["1L1"], - falseswipe: ["1L1"], - flash: ["1L1"], - focusenergy: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - growl: ["1L1"], - headbutt: ["1L1"], - healbell: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - hypervoice: ["1L1"], - irontail: ["1L1"], - laserfocus: ["1L1"], - lastresort: ["1L1"], - lightscreen: ["1L1"], - magnetrise: ["1L1"], - metalsound: ["1L1"], - mimic: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - payday: ["1L1"], - pinmissile: ["1L1"], - protect: ["1L1"], - quickattack: ["1L1"], - rage: ["1L1"], - raindance: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - risingvoltage: ["1L1"], - roar: ["1L1"], - rocksmash: ["1L1"], - round: ["1L1"], - sandattack: ["1L1"], - secretpower: ["1L1"], - shadowball: ["1L1"], - shockwave: ["1L1"], - signalbeam: ["1L1"], - skullbash: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - storedpower: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - tackle: ["1L1"], - tailwhip: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderfang: ["1L1"], - thundershock: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - voltswitch: ["1L1"], - weatherball: ["1L1"], - wildcharge: ["1L1"], - workup: ["1L1"], - yawn: ["1L1"], - zapcannon: ["1L1"], - }, - eventData: [ - {generation: 5, level: 10, gender: "M", isHidden: true, moves: ["1L1"]}, - {generation: 6, level: 10, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 7, level: 50, gender: "F", moves: ["1L1"], pokeball: "cherishball"}, - ], - }, - flareon: { - learnset: { - alluringvoice: ["1L1"], - attract: ["1L1"], - babydolleyes: ["1L1"], - batonpass: ["1L1"], - bide: ["1L1"], - bite: ["1L1"], - bodyslam: ["1L1"], - burningjealousy: ["1L1"], - calmmind: ["1L1"], - captivate: ["1L1"], - celebrate: ["1L1"], - charm: ["1L1"], - confide: ["1L1"], - copycat: ["1L1"], - covet: ["1L1"], - curse: ["1L1"], - detect: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doublekick: ["1L1"], - doubleteam: ["1L1"], - echoedvoice: ["1L1"], - ember: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - faketears: ["1L1"], - fireblast: ["1L1"], - firefang: ["1L1"], - firespin: ["1L1"], - flamecharge: ["1L1"], - flamethrower: ["1L1"], - flareblitz: ["1L1"], - focusenergy: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - growl: ["1L1"], - headbutt: ["1L1"], - healbell: ["1L1"], - heatwave: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - hypervoice: ["1L1"], - incinerate: ["1L1"], - irontail: ["1L1"], - laserfocus: ["1L1"], - lastresort: ["1L1"], - lavaplume: ["1L1"], - leer: ["1L1"], - mimic: ["1L1"], - mudslap: ["1L1"], - mysticalfire: ["1L1"], - naturalgift: ["1L1"], - overheat: ["1L1"], - payday: ["1L1"], - protect: ["1L1"], - quickattack: ["1L1"], - rage: ["1L1"], - raindance: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - roar: ["1L1"], - rocksmash: ["1L1"], - round: ["1L1"], - sandattack: ["1L1"], - scaryface: ["1L1"], - scorchingsands: ["1L1"], - secretpower: ["1L1"], - shadowball: ["1L1"], - skullbash: ["1L1"], - sleeptalk: ["1L1"], - smog: ["1L1"], - snore: ["1L1"], - storedpower: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - superpower: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - tackle: ["1L1"], - tailwhip: ["1L1"], - takedown: ["1L1"], - temperflare: ["1L1"], - terablast: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - weatherball: ["1L1"], - willowisp: ["1L1"], - workup: ["1L1"], - yawn: ["1L1"], - zapcannon: ["1L1"], - }, - eventData: [ - {generation: 5, level: 10, gender: "M", isHidden: true, moves: ["1L1"]}, - {generation: 6, level: 10, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 7, level: 50, gender: "F", isHidden: true, moves: ["1L1"], pokeball: "cherishball"}, - ], - }, - espeon: { - learnset: { - alluringvoice: ["1L1"], - allyswitch: ["1L1"], - attract: ["1L1"], - babydolleyes: ["1L1"], - batonpass: ["1L1"], - bite: ["1L1"], - bodyslam: ["1L1"], - calmmind: ["1L1"], - captivate: ["1L1"], - celebrate: ["1L1"], - charm: ["1L1"], - confide: ["1L1"], - confuseray: ["1L1"], - confusion: ["1L1"], - copycat: ["1L1"], - covet: ["1L1"], - curse: ["1L1"], - cut: ["1L1"], - dazzlinggleam: ["1L1"], - detect: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - drainingkiss: ["1L1"], - dreameater: ["1L1"], - echoedvoice: ["1L1"], - endure: ["1L1"], - expandingforce: ["1L1"], - facade: ["1L1"], - faketears: ["1L1"], - flash: ["1L1"], - focusenergy: ["1L1"], - frustration: ["1L1"], - futuresight: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - gravity: ["1L1"], - growl: ["1L1"], - headbutt: ["1L1"], - healbell: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - hypervoice: ["1L1"], - imprison: ["1L1"], - irontail: ["1L1"], - laserfocus: ["1L1"], - lastresort: ["1L1"], - lightscreen: ["1L1"], - magicalleaf: ["1L1"], - magiccoat: ["1L1"], - magicroom: ["1L1"], - mimic: ["1L1"], - morningsun: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - nightmare: ["1L1"], - payday: ["1L1"], - powergem: ["1L1"], - powerswap: ["1L1"], - protect: ["1L1"], - psybeam: ["1L1"], - psychic: ["1L1"], - psychicfangs: ["1L1"], - psychicnoise: ["1L1"], - psychicterrain: ["1L1"], - psychup: ["1L1"], - psyshock: ["1L1"], - quickattack: ["1L1"], - raindance: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - roar: ["1L1"], - round: ["1L1"], - sandattack: ["1L1"], - secretpower: ["1L1"], - shadowball: ["1L1"], - signalbeam: ["1L1"], - skillswap: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - storedpower: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - tackle: ["1L1"], - tailwhip: ["1L1"], - takedown: ["1L1"], - telekinesis: ["1L1"], - terablast: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - trick: ["1L1"], - trickroom: ["1L1"], - weatherball: ["1L1"], - workup: ["1L1"], - zapcannon: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 3, level: 70, moves: ["1L1"], pokeball: "pokeball"}, - {generation: 5, level: 10, gender: "M", isHidden: true, moves: ["1L1"]}, - {generation: 6, level: 10, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 7, level: 50, gender: "F", isHidden: true, moves: ["1L1"], pokeball: "cherishball"}, - ], - }, - umbreon: { - learnset: { - alluringvoice: ["1L1"], - assurance: ["1L1"], - attract: ["1L1"], - babydolleyes: ["1L1"], - batonpass: ["1L1"], - bite: ["1L1"], - bodyslam: ["1L1"], - calmmind: ["1L1"], - captivate: ["1L1"], - celebrate: ["1L1"], - charm: ["1L1"], - confide: ["1L1"], - confuseray: ["1L1"], - copycat: ["1L1"], - covet: ["1L1"], - crunch: ["1L1"], - curse: ["1L1"], - cut: ["1L1"], - darkpulse: ["1L1"], - detect: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dreameater: ["1L1"], - echoedvoice: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - faketears: ["1L1"], - feintattack: ["1L1"], - flash: ["1L1"], - focusenergy: ["1L1"], - foulplay: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - growl: ["1L1"], - guardswap: ["1L1"], - headbutt: ["1L1"], - healbell: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - hypervoice: ["1L1"], - irontail: ["1L1"], - laserfocus: ["1L1"], - lashout: ["1L1"], - lastresort: ["1L1"], - lightscreen: ["1L1"], - meanlook: ["1L1"], - mimic: ["1L1"], - moonlight: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - nightmare: ["1L1"], - payback: ["1L1"], - payday: ["1L1"], - protect: ["1L1"], - psychic: ["1L1"], - psychup: ["1L1"], - pursuit: ["1L1"], - quickattack: ["1L1"], - raindance: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - roar: ["1L1"], - round: ["1L1"], - sandattack: ["1L1"], - scaryface: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - shadowball: ["1L1"], - skillswap: ["1L1"], - sleeptalk: ["1L1"], - snarl: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - spite: ["1L1"], - storedpower: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - tackle: ["1L1"], - tailwhip: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - throatchop: ["1L1"], - thunderwave: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - weatherball: ["1L1"], - wonderroom: ["1L1"], - workup: ["1L1"], - zapcannon: ["1L1"], - }, - eventData: [ - {generation: 3, level: 70, moves: ["1L1"], pokeball: "pokeball"}, - {generation: 5, level: 10, gender: "M", isHidden: true, moves: ["1L1"]}, - {generation: 6, level: 10, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 7, level: 50, gender: "F", moves: ["1L1"], pokeball: "cherishball"}, - ], - }, - leafeon: { - learnset: { - aerialace: ["1L1"], - alluringvoice: ["1L1"], - attract: ["1L1"], - babydolleyes: ["1L1"], - batonpass: ["1L1"], - bite: ["1L1"], - bodyslam: ["1L1"], - bulletseed: ["1L1"], - calmmind: ["1L1"], - captivate: ["1L1"], - celebrate: ["1L1"], - charm: ["1L1"], - confide: ["1L1"], - copycat: ["1L1"], - covet: ["1L1"], - curse: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - echoedvoice: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - faketears: ["1L1"], - flash: ["1L1"], - focusenergy: ["1L1"], - frustration: ["1L1"], - furycutter: ["1L1"], - gigadrain: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - grasswhistle: ["1L1"], - grassyglide: ["1L1"], - growl: ["1L1"], - headbutt: ["1L1"], - healbell: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - hypervoice: ["1L1"], - irontail: ["1L1"], - knockoff: ["1L1"], - laserfocus: ["1L1"], - lastresort: ["1L1"], - leafblade: ["1L1"], - leafstorm: ["1L1"], - leechseed: ["1L1"], - magicalleaf: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - naturepower: ["1L1"], - payday: ["1L1"], - protect: ["1L1"], - quickattack: ["1L1"], - raindance: ["1L1"], - razorleaf: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - roar: ["1L1"], - rocksmash: ["1L1"], - round: ["1L1"], - sandattack: ["1L1"], - secretpower: ["1L1"], - seedbomb: ["1L1"], - shadowball: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - solarblade: ["1L1"], - storedpower: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - swordsdance: ["1L1"], - synthesis: ["1L1"], - tackle: ["1L1"], - tailwhip: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - weatherball: ["1L1"], - workup: ["1L1"], - worryseed: ["1L1"], - xscissor: ["1L1"], - }, - eventData: [ - {generation: 5, level: 10, gender: "M", isHidden: true, moves: ["1L1"]}, - {generation: 6, level: 10, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 7, level: 50, gender: "F", isHidden: true, moves: ["1L1"], pokeball: "cherishball"}, - ], - }, - glaceon: { - learnset: { - alluringvoice: ["1L1"], - aquatail: ["1L1"], - attract: ["1L1"], - auroraveil: ["1L1"], - avalanche: ["1L1"], - babydolleyes: ["1L1"], - barrier: ["1L1"], - batonpass: ["1L1"], - bite: ["1L1"], - blizzard: ["1L1"], - bodyslam: ["1L1"], - calmmind: ["1L1"], - captivate: ["1L1"], - celebrate: ["1L1"], - charm: ["1L1"], - chillingwater: ["1L1"], - confide: ["1L1"], - copycat: ["1L1"], - covet: ["1L1"], - curse: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - echoedvoice: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - faketears: ["1L1"], - focusenergy: ["1L1"], - freezedry: ["1L1"], - frostbreath: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - gravity: ["1L1"], - growl: ["1L1"], - hail: ["1L1"], - haze: ["1L1"], - headbutt: ["1L1"], - healbell: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - hypervoice: ["1L1"], - icebeam: ["1L1"], - icefang: ["1L1"], - iceshard: ["1L1"], - iciclespear: ["1L1"], - icywind: ["1L1"], - irontail: ["1L1"], - laserfocus: ["1L1"], - lastresort: ["1L1"], - mirrorcoat: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - payday: ["1L1"], - protect: ["1L1"], - quickattack: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - roar: ["1L1"], - rocksmash: ["1L1"], - round: ["1L1"], - sandattack: ["1L1"], - secretpower: ["1L1"], - shadowball: ["1L1"], - signalbeam: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - snowscape: ["1L1"], - storedpower: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - tackle: ["1L1"], - tailwhip: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - tripleaxel: ["1L1"], - waterpulse: ["1L1"], - weatherball: ["1L1"], - workup: ["1L1"], - }, - eventData: [ - {generation: 5, level: 10, gender: "M", isHidden: true, moves: ["1L1"]}, - {generation: 6, level: 10, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 7, level: 50, gender: "F", moves: ["1L1"], pokeball: "cherishball"}, - ], - }, - porygon: { - learnset: { - aerialace: ["1L1"], - agility: ["1L1"], - allyswitch: ["1L1"], - barrier: ["1L1"], - bide: ["1L1"], - blizzard: ["1L1"], - charge: ["1L1"], - chargebeam: ["1L1"], - confide: ["1L1"], - conversion: ["1L1"], - conversion2: ["1L1"], - curse: ["1L1"], - defensecurl: ["1L1"], - discharge: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dreameater: ["1L1"], - eerieimpulse: ["1L1"], - electroweb: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - flash: ["1L1"], - foulplay: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - gravity: ["1L1"], - guardswap: ["1L1"], - headbutt: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - icebeam: ["1L1"], - icywind: ["1L1"], - irontail: ["1L1"], - lastresort: ["1L1"], - lockon: ["1L1"], - magiccoat: ["1L1"], - magnetrise: ["1L1"], - mimic: ["1L1"], - naturalgift: ["1L1"], - nightmare: ["1L1"], - painsplit: ["1L1"], - powerswap: ["1L1"], - protect: ["1L1"], - psybeam: ["1L1"], - psychic: ["1L1"], - psychup: ["1L1"], - psyshock: ["1L1"], - psywave: ["1L1"], - rage: ["1L1"], - raindance: ["1L1"], - recover: ["1L1"], - recycle: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - round: ["1L1"], - secretpower: ["1L1"], - shadowball: ["1L1"], - sharpen: ["1L1"], - shockwave: ["1L1"], - signalbeam: ["1L1"], - skullbash: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - speedswap: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - telekinesis: ["1L1"], - teleport: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thundershock: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - triattack: ["1L1"], - trick: ["1L1"], - trickroom: ["1L1"], - wonderroom: ["1L1"], - zapcannon: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 5, level: 10, isHidden: true, moves: ["1L1"]}, - {generation: 8, level: 25, isHidden: true, moves: ["1L1"], pokeball: "pokeball"}, - ], - encounters: [ - {generation: 1, level: 18}, - ], - }, - porygon2: { - learnset: { - aerialace: ["1L1"], - agility: ["1L1"], - allyswitch: ["1L1"], - blizzard: ["1L1"], - charge: ["1L1"], - chargebeam: ["1L1"], - confide: ["1L1"], - conversion: ["1L1"], - conversion2: ["1L1"], - curse: ["1L1"], - defensecurl: ["1L1"], - discharge: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dreameater: ["1L1"], - eerieimpulse: ["1L1"], - electroweb: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - flash: ["1L1"], - foulplay: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - gravity: ["1L1"], - guardswap: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - icebeam: ["1L1"], - icywind: ["1L1"], - irontail: ["1L1"], - lastresort: ["1L1"], - lockon: ["1L1"], - magiccoat: ["1L1"], - magnetrise: ["1L1"], - mimic: ["1L1"], - naturalgift: ["1L1"], - nightmare: ["1L1"], - painsplit: ["1L1"], - powerswap: ["1L1"], - protect: ["1L1"], - psybeam: ["1L1"], - psychic: ["1L1"], - psychup: ["1L1"], - psyshock: ["1L1"], - raindance: ["1L1"], - recover: ["1L1"], - recycle: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - round: ["1L1"], - secretpower: ["1L1"], - shadowball: ["1L1"], - shockwave: ["1L1"], - signalbeam: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - speedswap: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - telekinesis: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thundershock: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - triattack: ["1L1"], - trick: ["1L1"], - trickroom: ["1L1"], - wonderroom: ["1L1"], - zapcannon: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 8, level: 50, nature: "Sassy", abilities: ["1L1"], ivs: {hp: 31, atk: 0, spe: 0}, moves: ["1L1"], pokeball: "cherishball"}, - ], - }, - porygonz: { - learnset: { - aerialace: ["1L1"], - agility: ["1L1"], - allyswitch: ["1L1"], - blizzard: ["1L1"], - charge: ["1L1"], - chargebeam: ["1L1"], - confide: ["1L1"], - conversion: ["1L1"], - conversion2: ["1L1"], - darkpulse: ["1L1"], - defensecurl: ["1L1"], - discharge: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dreameater: ["1L1"], - eerieimpulse: ["1L1"], - electroweb: ["1L1"], - embargo: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - flash: ["1L1"], - foulplay: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - gravity: ["1L1"], - guardswap: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - icebeam: ["1L1"], - icywind: ["1L1"], - irontail: ["1L1"], - lastresort: ["1L1"], - lockon: ["1L1"], - magiccoat: ["1L1"], - magnetrise: ["1L1"], - nastyplot: ["1L1"], - naturalgift: ["1L1"], - painsplit: ["1L1"], - powerswap: ["1L1"], - protect: ["1L1"], - psybeam: ["1L1"], - psychic: ["1L1"], - psychup: ["1L1"], - psyshock: ["1L1"], - raindance: ["1L1"], - recover: ["1L1"], - recycle: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - round: ["1L1"], - secretpower: ["1L1"], - shadowball: ["1L1"], - shockwave: ["1L1"], - signalbeam: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - speedswap: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - telekinesis: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thundershock: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - triattack: ["1L1"], - trick: ["1L1"], - trickroom: ["1L1"], - uproar: ["1L1"], - wonderroom: ["1L1"], - zapcannon: ["1L1"], - zenheadbutt: ["1L1"], - }, - }, - omanyte: { - learnset: { - ancientpower: ["1L1"], - attract: ["1L1"], - aurorabeam: ["1L1"], - bide: ["1L1"], - bind: ["1L1"], - bite: ["1L1"], - blizzard: ["1L1"], - bodyslam: ["1L1"], - brine: ["1L1"], - bubblebeam: ["1L1"], - captivate: ["1L1"], - confide: ["1L1"], - constrict: ["1L1"], - curse: ["1L1"], - dive: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - earthpower: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - frustration: ["1L1"], - gyroball: ["1L1"], - hail: ["1L1"], - haze: ["1L1"], - headbutt: ["1L1"], - hiddenpower: ["1L1"], - hornattack: ["1L1"], - hydropump: ["1L1"], - icebeam: ["1L1"], - icywind: ["1L1"], - irondefense: ["1L1"], - knockoff: ["1L1"], - leer: ["1L1"], - meteorbeam: ["1L1"], - mimic: ["1L1"], - muddywater: ["1L1"], - mudshot: ["1L1"], - naturalgift: ["1L1"], - protect: ["1L1"], - rage: ["1L1"], - raindance: ["1L1"], - reflect: ["1L1"], - reflecttype: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rockblast: ["1L1"], - rockpolish: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rockthrow: ["1L1"], - rocktomb: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - sandattack: ["1L1"], - sandstorm: ["1L1"], - scald: ["1L1"], - secretpower: ["1L1"], - shellsmash: ["1L1"], - slam: ["1L1"], - sleeptalk: ["1L1"], - smackdown: ["1L1"], - snore: ["1L1"], - spikecannon: ["1L1"], - spikes: ["1L1"], - stealthrock: ["1L1"], - substitute: ["1L1"], - supersonic: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - takedown: ["1L1"], - thief: ["1L1"], - tickle: ["1L1"], - toxic: ["1L1"], - toxicspikes: ["1L1"], - waterfall: ["1L1"], - watergun: ["1L1"], - waterpulse: ["1L1"], - whirlpool: ["1L1"], - withdraw: ["1L1"], - wringout: ["1L1"], - }, - eventData: [ - {generation: 5, level: 15, gender: "M", abilities: ["1L1"], moves: ["1L1"], pokeball: "cherishball"}, - ], - encounters: [ - {generation: 1, level: 30}, - ], - }, - omastar: { - learnset: { - ancientpower: ["1L1"], - attract: ["1L1"], - bide: ["1L1"], - bind: ["1L1"], - bite: ["1L1"], - blizzard: ["1L1"], - bodyslam: ["1L1"], - brine: ["1L1"], - bubblebeam: ["1L1"], - captivate: ["1L1"], - confide: ["1L1"], - constrict: ["1L1"], - crunch: ["1L1"], - curse: ["1L1"], - dive: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - earthpower: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - gyroball: ["1L1"], - hail: ["1L1"], - headbutt: ["1L1"], - hiddenpower: ["1L1"], - hornattack: ["1L1"], - horndrill: ["1L1"], - hydropump: ["1L1"], - hyperbeam: ["1L1"], - icebeam: ["1L1"], - icywind: ["1L1"], - irondefense: ["1L1"], - knockoff: ["1L1"], - leer: ["1L1"], - liquidation: ["1L1"], - meteorbeam: ["1L1"], - mimic: ["1L1"], - muddywater: ["1L1"], - mudshot: ["1L1"], - naturalgift: ["1L1"], - pinmissile: ["1L1"], - protect: ["1L1"], - rage: ["1L1"], - raindance: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rockblast: ["1L1"], - rockclimb: ["1L1"], - rockpolish: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rockthrow: ["1L1"], - rocktomb: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - sandattack: ["1L1"], - sandstorm: ["1L1"], - scald: ["1L1"], - secretpower: ["1L1"], - seismictoss: ["1L1"], - shellsmash: ["1L1"], - skullbash: ["1L1"], - sleeptalk: ["1L1"], - smackdown: ["1L1"], - snore: ["1L1"], - spikecannon: ["1L1"], - spikes: ["1L1"], - stealthrock: ["1L1"], - stoneedge: ["1L1"], - submission: ["1L1"], - substitute: ["1L1"], - supersonic: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - takedown: ["1L1"], - thief: ["1L1"], - tickle: ["1L1"], - toxic: ["1L1"], - toxicspikes: ["1L1"], - waterfall: ["1L1"], - watergun: ["1L1"], - waterpulse: ["1L1"], - whirlpool: ["1L1"], - withdraw: ["1L1"], - }, - }, - kabuto: { - learnset: { - absorb: ["1L1"], - aerialace: ["1L1"], - ancientpower: ["1L1"], - aquajet: ["1L1"], - attract: ["1L1"], - aurorabeam: ["1L1"], - bide: ["1L1"], - blizzard: ["1L1"], - bodyslam: ["1L1"], - brine: ["1L1"], - bubblebeam: ["1L1"], - captivate: ["1L1"], - confide: ["1L1"], - confuseray: ["1L1"], - curse: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - earthpower: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - flail: ["1L1"], - foresight: ["1L1"], - frustration: ["1L1"], - gigadrain: ["1L1"], - hail: ["1L1"], - harden: ["1L1"], - headbutt: ["1L1"], - hiddenpower: ["1L1"], - honeclaws: ["1L1"], - hydropump: ["1L1"], - icebeam: ["1L1"], - icywind: ["1L1"], - irondefense: ["1L1"], - knockoff: ["1L1"], - leechlife: ["1L1"], - leer: ["1L1"], - liquidation: ["1L1"], - megadrain: ["1L1"], - metalsound: ["1L1"], - meteorbeam: ["1L1"], - mimic: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - protect: ["1L1"], - rage: ["1L1"], - raindance: ["1L1"], - rapidspin: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rockblast: ["1L1"], - rockpolish: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rockthrow: ["1L1"], - rocktomb: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - sandattack: ["1L1"], - sandstorm: ["1L1"], - scald: ["1L1"], - scratch: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - slash: ["1L1"], - sleeptalk: ["1L1"], - smackdown: ["1L1"], - snore: ["1L1"], - stealthrock: ["1L1"], - stoneedge: ["1L1"], - substitute: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - takedown: ["1L1"], - thief: ["1L1"], - toxic: ["1L1"], - waterfall: ["1L1"], - watergun: ["1L1"], - waterpulse: ["1L1"], - whirlpool: ["1L1"], - wringout: ["1L1"], - }, - eventData: [ - {generation: 5, level: 15, gender: "M", abilities: ["1L1"], moves: ["1L1"], pokeball: "cherishball"}, - ], - encounters: [ - {generation: 1, level: 30}, - ], - }, - kabutops: { - learnset: { - absorb: ["1L1"], - aerialace: ["1L1"], - ancientpower: ["1L1"], - aquajet: ["1L1"], - aquatail: ["1L1"], - attract: ["1L1"], - bide: ["1L1"], - blizzard: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - brine: ["1L1"], - bubblebeam: ["1L1"], - captivate: ["1L1"], - confide: ["1L1"], - confuseray: ["1L1"], - crosspoison: ["1L1"], - curse: ["1L1"], - cut: ["1L1"], - dig: ["1L1"], - dive: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - earthpower: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - feint: ["1L1"], - flipturn: ["1L1"], - frustration: ["1L1"], - furycutter: ["1L1"], - gigadrain: ["1L1"], - gigaimpact: ["1L1"], - hail: ["1L1"], - harden: ["1L1"], - headbutt: ["1L1"], - hiddenpower: ["1L1"], - honeclaws: ["1L1"], - hydropump: ["1L1"], - hyperbeam: ["1L1"], - icebeam: ["1L1"], - icywind: ["1L1"], - irondefense: ["1L1"], - knockoff: ["1L1"], - leechlife: ["1L1"], - leer: ["1L1"], - liquidation: ["1L1"], - lowkick: ["1L1"], - megadrain: ["1L1"], - megakick: ["1L1"], - metalsound: ["1L1"], - meteorbeam: ["1L1"], - mimic: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - naturepower: ["1L1"], - nightslash: ["1L1"], - protect: ["1L1"], - psychocut: ["1L1"], - rage: ["1L1"], - raindance: ["1L1"], - razorshell: ["1L1"], - razorwind: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rockblast: ["1L1"], - rockclimb: ["1L1"], - rockpolish: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rockthrow: ["1L1"], - rocktomb: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - sandattack: ["1L1"], - sandstorm: ["1L1"], - scald: ["1L1"], - scratch: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - seismictoss: ["1L1"], - skullbash: ["1L1"], - slash: ["1L1"], - sleeptalk: ["1L1"], - smackdown: ["1L1"], - snore: ["1L1"], - stealthrock: ["1L1"], - stoneedge: ["1L1"], - submission: ["1L1"], - substitute: ["1L1"], - superpower: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - swordsdance: ["1L1"], - takedown: ["1L1"], - thief: ["1L1"], - toxic: ["1L1"], - waterfall: ["1L1"], - watergun: ["1L1"], - waterpulse: ["1L1"], - whirlpool: ["1L1"], - wringout: ["1L1"], - xscissor: ["1L1"], - }, - }, - aerodactyl: { - learnset: { - aerialace: ["1L1"], - agility: ["1L1"], - aircutter: ["1L1"], - ancientpower: ["1L1"], - aquatail: ["1L1"], - assurance: ["1L1"], - attract: ["1L1"], - bide: ["1L1"], - bite: ["1L1"], - brutalswing: ["1L1"], - bulldoze: ["1L1"], - captivate: ["1L1"], - celebrate: ["1L1"], - confide: ["1L1"], - crunch: ["1L1"], - curse: ["1L1"], - defog: ["1L1"], - detect: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dragonbreath: ["1L1"], - dragonclaw: ["1L1"], - dragondance: ["1L1"], - dragonpulse: ["1L1"], - dragonrage: ["1L1"], - dualwingbeat: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fireblast: ["1L1"], - firefang: ["1L1"], - flamethrower: ["1L1"], - fly: ["1L1"], - foresight: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - headbutt: ["1L1"], - heatwave: ["1L1"], - hiddenpower: ["1L1"], - honeclaws: ["1L1"], - hurricane: ["1L1"], - hyperbeam: ["1L1"], - icefang: ["1L1"], - incinerate: ["1L1"], - ironhead: ["1L1"], - irontail: ["1L1"], - laserfocus: ["1L1"], - meteorbeam: ["1L1"], - mimic: ["1L1"], - naturalgift: ["1L1"], - ominouswind: ["1L1"], - payback: ["1L1"], - protect: ["1L1"], - psychicfangs: ["1L1"], - pursuit: ["1L1"], - rage: ["1L1"], - raindance: ["1L1"], - razorwind: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roar: ["1L1"], - rockblast: ["1L1"], - rockpolish: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rockthrow: ["1L1"], - rocktomb: ["1L1"], - roost: ["1L1"], - round: ["1L1"], - sandstorm: ["1L1"], - scaryface: ["1L1"], - secretpower: ["1L1"], - skyattack: ["1L1"], - skydrop: ["1L1"], - sleeptalk: ["1L1"], - smackdown: ["1L1"], - snore: ["1L1"], - stealthrock: ["1L1"], - steelwing: ["1L1"], - stoneedge: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - supersonic: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - tailwind: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - thief: ["1L1"], - thunderfang: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - twister: ["1L1"], - whirlwind: ["1L1"], - wideguard: ["1L1"], - wingattack: ["1L1"], - }, - eventData: [ - {generation: 5, level: 15, gender: "M", abilities: ["1L1"], moves: ["1L1"], pokeball: "cherishball"}, - {generation: 7, level: 50, isHidden: true, moves: ["1L1"], pokeball: "cherishball"}, - ], - encounters: [ - {generation: 1, level: 30}, - ], - }, - munchlax: { - learnset: { - afteryou: ["1L1"], - amnesia: ["1L1"], - attract: ["1L1"], - belch: ["1L1"], - bellydrum: ["1L1"], - bite: ["1L1"], - blizzard: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - bulldoze: ["1L1"], - captivate: ["1L1"], - charm: ["1L1"], - chillingwater: ["1L1"], - chipaway: ["1L1"], - confide: ["1L1"], - counter: ["1L1"], - covet: ["1L1"], - crunch: ["1L1"], - curse: ["1L1"], - defensecurl: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - earthquake: ["1L1"], - encore: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fireblast: ["1L1"], - firepunch: ["1L1"], - fissure: ["1L1"], - flail: ["1L1"], - flamethrower: ["1L1"], - fling: ["1L1"], - focuspunch: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - gunkshot: ["1L1"], - happyhour: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - holdback: ["1L1"], - hydropump: ["1L1"], - hypervoice: ["1L1"], - icebeam: ["1L1"], - icepunch: ["1L1"], - icywind: ["1L1"], - incinerate: ["1L1"], - lastresort: ["1L1"], - lick: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - metronome: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - odorsleuth: ["1L1"], - payday: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - psychic: ["1L1"], - pursuit: ["1L1"], - raindance: ["1L1"], - recycle: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - rockclimb: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - sandstorm: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - seedbomb: ["1L1"], - selfdestruct: ["1L1"], - shadowball: ["1L1"], - shockwave: ["1L1"], - sleeptalk: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - stockpile: ["1L1"], - stompingtantrum: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - superpower: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - swallow: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderpunch: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - uproar: ["1L1"], - waterpulse: ["1L1"], - whirlpool: ["1L1"], - whirlwind: ["1L1"], - workup: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 4, level: 5, moves: ["1L1"]}, - {generation: 4, level: 5, gender: "F", nature: "Relaxed", abilities: ["1L1"], moves: ["1L1"], pokeball: "cherishball"}, - {generation: 7, level: 5, abilities: ["1L1"], moves: ["1L1"], pokeball: "cherishball"}, - {generation: 9, level: 1, shiny: true, gender: "M", isHidden: true, nature: "Impish", moves: ["1L1"], pokeball: "pokeball"}, - ], - }, - snorlax: { - learnset: { - afteryou: ["1L1"], - amnesia: ["1L1"], - attract: ["1L1"], - belch: ["1L1"], - bellydrum: ["1L1"], - bide: ["1L1"], - bite: ["1L1"], - blizzard: ["1L1"], - block: ["1L1"], - bodypress: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - bubblebeam: ["1L1"], - bulldoze: ["1L1"], - captivate: ["1L1"], - celebrate: ["1L1"], - charm: ["1L1"], - chillingwater: ["1L1"], - chipaway: ["1L1"], - confide: ["1L1"], - counter: ["1L1"], - covet: ["1L1"], - crunch: ["1L1"], - curse: ["1L1"], - darkestlariat: ["1L1"], - defensecurl: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dynamicpunch: ["1L1"], - earthquake: ["1L1"], - encore: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fireblast: ["1L1"], - firepunch: ["1L1"], - fissure: ["1L1"], - flail: ["1L1"], - flamethrower: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - focuspunch: ["1L1"], - frustration: ["1L1"], - gastroacid: ["1L1"], - gigaimpact: ["1L1"], - gunkshot: ["1L1"], - hammerarm: ["1L1"], - harden: ["1L1"], - hardpress: ["1L1"], - headbutt: ["1L1"], - heatcrash: ["1L1"], - heavyslam: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - highhorsepower: ["1L1"], - hydropump: ["1L1"], - hyperbeam: ["1L1"], - hypervoice: ["1L1"], - icebeam: ["1L1"], - icepunch: ["1L1"], - icywind: ["1L1"], - incinerate: ["1L1"], - ironhead: ["1L1"], - lastresort: ["1L1"], - lick: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - metronome: ["1L1"], - mimic: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - outrage: ["1L1"], - payday: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - psychic: ["1L1"], - psychup: ["1L1"], - psywave: ["1L1"], - pursuit: ["1L1"], - rage: ["1L1"], - raindance: ["1L1"], - recycle: ["1L1"], - reflect: ["1L1"], - refresh: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - rockclimb: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - sandstorm: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - seedbomb: ["1L1"], - seismictoss: ["1L1"], - selfdestruct: ["1L1"], - shadowball: ["1L1"], - shockwave: ["1L1"], - skullbash: ["1L1"], - sleeptalk: ["1L1"], - smackdown: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - steelroller: ["1L1"], - stockpile: ["1L1"], - stompingtantrum: ["1L1"], - strength: ["1L1"], - submission: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - supercellslam: ["1L1"], - superpower: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - swallow: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - terrainpulse: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderpunch: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - uproar: ["1L1"], - watergun: ["1L1"], - waterpulse: ["1L1"], - whirlpool: ["1L1"], - whirlwind: ["1L1"], - wildcharge: ["1L1"], - workup: ["1L1"], - yawn: ["1L1"], - zapcannon: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 3, level: 43, moves: ["1L1"]}, - {generation: 7, level: 30, abilities: ["1L1"], moves: ["1L1"], pokeball: "cherishball"}, - ], - encounters: [ - {generation: 1, level: 30}, - ], - }, - articuno: { - learnset: { - aerialace: ["1L1"], - agility: ["1L1"], - aircutter: ["1L1"], - airslash: ["1L1"], - ancientpower: ["1L1"], - auroraveil: ["1L1"], - avalanche: ["1L1"], - bide: ["1L1"], - blizzard: ["1L1"], - bravebird: ["1L1"], - bubblebeam: ["1L1"], - confide: ["1L1"], - curse: ["1L1"], - defog: ["1L1"], - detect: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dualwingbeat: ["1L1"], - endure: ["1L1"], - extrasensory: ["1L1"], - facade: ["1L1"], - featherdance: ["1L1"], - fly: ["1L1"], - freezedry: ["1L1"], - frostbreath: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - gust: ["1L1"], - hail: ["1L1"], - haze: ["1L1"], - headbutt: ["1L1"], - healbell: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hurricane: ["1L1"], - hyperbeam: ["1L1"], - icebeam: ["1L1"], - iceshard: ["1L1"], - icespinner: ["1L1"], - iciclespear: ["1L1"], - icywind: ["1L1"], - laserfocus: ["1L1"], - leer: ["1L1"], - lightscreen: ["1L1"], - mimic: ["1L1"], - mindreader: ["1L1"], - mirrorcoat: ["1L1"], - mist: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - ominouswind: ["1L1"], - peck: ["1L1"], - pluck: ["1L1"], - powdersnow: ["1L1"], - protect: ["1L1"], - rage: ["1L1"], - raindance: ["1L1"], - razorwind: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roar: ["1L1"], - rocksmash: ["1L1"], - roost: ["1L1"], - round: ["1L1"], - sandstorm: ["1L1"], - secretpower: ["1L1"], - sheercold: ["1L1"], - signalbeam: ["1L1"], - skyattack: ["1L1"], - skydrop: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - snowscape: ["1L1"], - steelwing: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - tailwind: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - toxic: ["1L1"], - tripleaxel: ["1L1"], - twister: ["1L1"], - uturn: ["1L1"], - watergun: ["1L1"], - waterpulse: ["1L1"], - weatherball: ["1L1"], - whirlwind: ["1L1"], - }, - eventData: [ - {generation: 3, level: 50, shiny: 1, moves: ["1L1"]}, - {generation: 3, level: 70, moves: ["1L1"], pokeball: "pokeball"}, - {generation: 3, level: 50, moves: ["1L1"]}, - {generation: 4, level: 60, shiny: 1, moves: ["1L1"]}, - {generation: 4, level: 50, shiny: 1, moves: ["1L1"]}, - {generation: 6, level: 70, moves: ["1L1"]}, - {generation: 6, level: 70, isHidden: true, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 7, level: 60, shiny: 1, moves: ["1L1"]}, - {generation: 8, level: 70, shiny: 1, moves: ["1L1"]}, - ], - encounters: [ - {generation: 1, level: 50}, - ], - eventOnly: false, - }, - articunogalar: { - learnset: { - agility: ["1L1"], - aircutter: ["1L1"], - airslash: ["1L1"], - allyswitch: ["1L1"], - ancientpower: ["1L1"], - bravebird: ["1L1"], - calmmind: ["1L1"], - confusion: ["1L1"], - doubleteam: ["1L1"], - dreameater: ["1L1"], - dualwingbeat: ["1L1"], - endure: ["1L1"], - expandingforce: ["1L1"], - facade: ["1L1"], - fly: ["1L1"], - freezingglare: ["1L1"], - futuresight: ["1L1"], - gigaimpact: ["1L1"], - guardswap: ["1L1"], - gust: ["1L1"], - helpinghand: ["1L1"], - hurricane: ["1L1"], - hyperbeam: ["1L1"], - hypervoice: ["1L1"], - hypnosis: ["1L1"], - imprison: ["1L1"], - lightscreen: ["1L1"], - mindreader: ["1L1"], - powerswap: ["1L1"], - protect: ["1L1"], - psybeam: ["1L1"], - psychic: ["1L1"], - psychicnoise: ["1L1"], - psychocut: ["1L1"], - psychoshift: ["1L1"], - psyshock: ["1L1"], - raindance: ["1L1"], - recover: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - round: ["1L1"], - scaryface: ["1L1"], - shadowball: ["1L1"], - skillswap: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - snowscape: ["1L1"], - steelwing: ["1L1"], - storedpower: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swift: ["1L1"], - tailwind: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - trick: ["1L1"], - trickroom: ["1L1"], - uturn: ["1L1"], - }, - eventData: [ - {generation: 8, level: 70, moves: ["1L1"]}, - {generation: 8, level: 70, shiny: true, moves: ["1L1"], pokeball: "cherishball"}, - ], - eventOnly: false, - }, - zapdos: { - learnset: { - acrobatics: ["1L1"], - aerialace: ["1L1"], - agility: ["1L1"], - aircutter: ["1L1"], - ancientpower: ["1L1"], - batonpass: ["1L1"], - bide: ["1L1"], - bravebird: ["1L1"], - charge: ["1L1"], - chargebeam: ["1L1"], - confide: ["1L1"], - curse: ["1L1"], - defog: ["1L1"], - detect: ["1L1"], - discharge: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - drillpeck: ["1L1"], - dualwingbeat: ["1L1"], - eerieimpulse: ["1L1"], - electricterrain: ["1L1"], - electroball: ["1L1"], - endure: ["1L1"], - extrasensory: ["1L1"], - facade: ["1L1"], - flash: ["1L1"], - fly: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - hail: ["1L1"], - headbutt: ["1L1"], - heatwave: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hurricane: ["1L1"], - hyperbeam: ["1L1"], - laserfocus: ["1L1"], - leer: ["1L1"], - lightscreen: ["1L1"], - magneticflux: ["1L1"], - metalsound: ["1L1"], - mimic: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - ominouswind: ["1L1"], - peck: ["1L1"], - pluck: ["1L1"], - protect: ["1L1"], - rage: ["1L1"], - raindance: ["1L1"], - razorwind: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - risingvoltage: ["1L1"], - roar: ["1L1"], - rocksmash: ["1L1"], - roost: ["1L1"], - round: ["1L1"], - sandstorm: ["1L1"], - secretpower: ["1L1"], - shockwave: ["1L1"], - signalbeam: ["1L1"], - skyattack: ["1L1"], - skydrop: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - steelwing: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - supercellslam: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - tailwind: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thundershock: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - twister: ["1L1"], - uturn: ["1L1"], - voltswitch: ["1L1"], - weatherball: ["1L1"], - whirlwind: ["1L1"], - wildcharge: ["1L1"], - zapcannon: ["1L1"], - }, - eventData: [ - {generation: 3, level: 50, shiny: 1, moves: ["1L1"]}, - {generation: 3, level: 70, moves: ["1L1"], pokeball: "pokeball"}, - {generation: 3, level: 50, moves: ["1L1"]}, - {generation: 4, level: 60, shiny: 1, moves: ["1L1"]}, - {generation: 4, level: 50, shiny: 1, moves: ["1L1"]}, - {generation: 6, level: 70, moves: ["1L1"]}, - {generation: 6, level: 70, isHidden: true, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 7, level: 60, shiny: 1, moves: ["1L1"]}, - {generation: 8, level: 70, shiny: 1, moves: ["1L1"]}, - ], - encounters: [ - {generation: 1, level: 50}, - ], - eventOnly: false, - }, - zapdosgalar: { - learnset: { - acrobatics: ["1L1"], - aerialace: ["1L1"], - agility: ["1L1"], - ancientpower: ["1L1"], - assurance: ["1L1"], - blazekick: ["1L1"], - bounce: ["1L1"], - bravebird: ["1L1"], - brickbreak: ["1L1"], - bulkup: ["1L1"], - closecombat: ["1L1"], - coaching: ["1L1"], - counter: ["1L1"], - detect: ["1L1"], - doubleedge: ["1L1"], - drillpeck: ["1L1"], - dualwingbeat: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fly: ["1L1"], - focusenergy: ["1L1"], - gigaimpact: ["1L1"], - helpinghand: ["1L1"], - hurricane: ["1L1"], - hyperbeam: ["1L1"], - knockoff: ["1L1"], - lightscreen: ["1L1"], - lowkick: ["1L1"], - lowsweep: ["1L1"], - megakick: ["1L1"], - payback: ["1L1"], - peck: ["1L1"], - pluck: ["1L1"], - protect: ["1L1"], - quickguard: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - revenge: ["1L1"], - reversal: ["1L1"], - rocksmash: ["1L1"], - round: ["1L1"], - sandstorm: ["1L1"], - scaryface: ["1L1"], - screech: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - steelwing: ["1L1"], - stompingtantrum: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - superpower: ["1L1"], - swift: ["1L1"], - tailwind: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - throatchop: ["1L1"], - thunderouskick: ["1L1"], - trailblaze: ["1L1"], - uturn: ["1L1"], - }, - eventData: [ - {generation: 8, level: 70, moves: ["1L1"]}, - {generation: 8, level: 70, shiny: true, moves: ["1L1"], pokeball: "cherishball"}, - ], - eventOnly: false, - }, - moltres: { - learnset: { - acrobatics: ["1L1"], - aerialace: ["1L1"], - agility: ["1L1"], - aircutter: ["1L1"], - airslash: ["1L1"], - ancientpower: ["1L1"], - bide: ["1L1"], - bravebird: ["1L1"], - burningjealousy: ["1L1"], - burnup: ["1L1"], - confide: ["1L1"], - curse: ["1L1"], - defog: ["1L1"], - detect: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dualwingbeat: ["1L1"], - ember: ["1L1"], - endure: ["1L1"], - extrasensory: ["1L1"], - facade: ["1L1"], - fireblast: ["1L1"], - firespin: ["1L1"], - flamecharge: ["1L1"], - flamethrower: ["1L1"], - flareblitz: ["1L1"], - fly: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - gust: ["1L1"], - headbutt: ["1L1"], - heatwave: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hurricane: ["1L1"], - hyperbeam: ["1L1"], - incinerate: ["1L1"], - laserfocus: ["1L1"], - leer: ["1L1"], - mimic: ["1L1"], - morningsun: ["1L1"], - mudslap: ["1L1"], - mysticalfire: ["1L1"], - naturalgift: ["1L1"], - ominouswind: ["1L1"], - overheat: ["1L1"], - peck: ["1L1"], - pluck: ["1L1"], - protect: ["1L1"], - rage: ["1L1"], - raindance: ["1L1"], - razorwind: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roar: ["1L1"], - rocksmash: ["1L1"], - roost: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - sandstorm: ["1L1"], - scorchingsands: ["1L1"], - secretpower: ["1L1"], - skyattack: ["1L1"], - skydrop: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - steelwing: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - tailwind: ["1L1"], - takedown: ["1L1"], - temperflare: ["1L1"], - terablast: ["1L1"], - toxic: ["1L1"], - twister: ["1L1"], - uturn: ["1L1"], - weatherball: ["1L1"], - whirlwind: ["1L1"], - willowisp: ["1L1"], - wingattack: ["1L1"], - }, - eventData: [ - {generation: 3, level: 50, shiny: 1, moves: ["1L1"]}, - {generation: 3, level: 70, moves: ["1L1"], pokeball: "pokeball"}, - {generation: 3, level: 50, moves: ["1L1"]}, - {generation: 4, level: 60, shiny: 1, moves: ["1L1"]}, - {generation: 4, level: 50, shiny: 1, moves: ["1L1"]}, - {generation: 6, level: 70, moves: ["1L1"]}, - {generation: 6, level: 70, isHidden: true, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 7, level: 60, shiny: 1, moves: ["1L1"]}, - {generation: 8, level: 70, shiny: 1, moves: ["1L1"]}, - ], - encounters: [ - {generation: 1, level: 50}, - ], - eventOnly: false, - }, - moltresgalar: { - learnset: { - acrobatics: ["1L1"], - aerialace: ["1L1"], - afteryou: ["1L1"], - agility: ["1L1"], - airslash: ["1L1"], - ancientpower: ["1L1"], - assurance: ["1L1"], - bravebird: ["1L1"], - darkpulse: ["1L1"], - dualwingbeat: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fierywrath: ["1L1"], - fly: ["1L1"], - foulplay: ["1L1"], - gigaimpact: ["1L1"], - gust: ["1L1"], - helpinghand: ["1L1"], - hex: ["1L1"], - hurricane: ["1L1"], - hyperbeam: ["1L1"], - hypervoice: ["1L1"], - imprison: ["1L1"], - lashout: ["1L1"], - leer: ["1L1"], - memento: ["1L1"], - nastyplot: ["1L1"], - painsplit: ["1L1"], - payback: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - sandstorm: ["1L1"], - scaryface: ["1L1"], - shadowball: ["1L1"], - skyattack: ["1L1"], - sleeptalk: ["1L1"], - snarl: ["1L1"], - snore: ["1L1"], - spite: ["1L1"], - steelwing: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - sunnyday: ["1L1"], - swift: ["1L1"], - tailwind: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - uturn: ["1L1"], - wingattack: ["1L1"], - }, - eventData: [ - {generation: 8, level: 70, moves: ["1L1"]}, - {generation: 8, level: 70, shiny: true, moves: ["1L1"], pokeball: "cherishball"}, - ], - eventOnly: false, - }, - dratini: { - learnset: { - agility: ["1L1"], - aquajet: ["1L1"], - aquatail: ["1L1"], - attract: ["1L1"], - bide: ["1L1"], - bind: ["1L1"], - blizzard: ["1L1"], - bodyslam: ["1L1"], - breakingswipe: ["1L1"], - brutalswing: ["1L1"], - bubblebeam: ["1L1"], - captivate: ["1L1"], - chillingwater: ["1L1"], - confide: ["1L1"], - curse: ["1L1"], - detect: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dracometeor: ["1L1"], - dragonbreath: ["1L1"], - dragoncheer: ["1L1"], - dragondance: ["1L1"], - dragonpulse: ["1L1"], - dragonrage: ["1L1"], - dragonrush: ["1L1"], - dragontail: ["1L1"], - endure: ["1L1"], - extremespeed: ["1L1"], - facade: ["1L1"], - fireblast: ["1L1"], - firespin: ["1L1"], - flamethrower: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - hail: ["1L1"], - haze: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hydropump: ["1L1"], - hyperbeam: ["1L1"], - icebeam: ["1L1"], - icywind: ["1L1"], - incinerate: ["1L1"], - ironhead: ["1L1"], - irontail: ["1L1"], - leer: ["1L1"], - lightscreen: ["1L1"], - mimic: ["1L1"], - mist: ["1L1"], - naturalgift: ["1L1"], - outrage: ["1L1"], - protect: ["1L1"], - rage: ["1L1"], - raindance: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - scaleshot: ["1L1"], - secretpower: ["1L1"], - shockwave: ["1L1"], - skullbash: ["1L1"], - slam: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - supersonic: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - twister: ["1L1"], - waterfall: ["1L1"], - watergun: ["1L1"], - waterpulse: ["1L1"], - whirlpool: ["1L1"], - wrap: ["1L1"], - zapcannon: ["1L1"], - }, - encounters: [ - {generation: 1, level: 10}, - ], - }, - dragonair: { - learnset: { - agility: ["1L1"], - aquatail: ["1L1"], - attract: ["1L1"], - bide: ["1L1"], - bind: ["1L1"], - blizzard: ["1L1"], - bodyslam: ["1L1"], - breakingswipe: ["1L1"], - brutalswing: ["1L1"], - bubblebeam: ["1L1"], - captivate: ["1L1"], - chillingwater: ["1L1"], - confide: ["1L1"], - curse: ["1L1"], - detect: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dracometeor: ["1L1"], - dragonbreath: ["1L1"], - dragoncheer: ["1L1"], - dragondance: ["1L1"], - dragonpulse: ["1L1"], - dragonrage: ["1L1"], - dragonrush: ["1L1"], - dragontail: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fireblast: ["1L1"], - firespin: ["1L1"], - flamethrower: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - hail: ["1L1"], - haze: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - horndrill: ["1L1"], - hydropump: ["1L1"], - hyperbeam: ["1L1"], - icebeam: ["1L1"], - icywind: ["1L1"], - incinerate: ["1L1"], - ironhead: ["1L1"], - irontail: ["1L1"], - leer: ["1L1"], - lightscreen: ["1L1"], - mimic: ["1L1"], - naturalgift: ["1L1"], - outrage: ["1L1"], - protect: ["1L1"], - rage: ["1L1"], - raindance: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - scaleshot: ["1L1"], - secretpower: ["1L1"], - shockwave: ["1L1"], - skullbash: ["1L1"], - slam: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - twister: ["1L1"], - waterfall: ["1L1"], - watergun: ["1L1"], - waterpulse: ["1L1"], - weatherball: ["1L1"], - whirlpool: ["1L1"], - wrap: ["1L1"], - zapcannon: ["1L1"], - }, - encounters: [ - {generation: 1, level: 15}, - {generation: 2, level: 10}, - {generation: 3, level: 25, pokeball: "safariball"}, - {generation: 4, level: 15}, - {generation: 7, level: 10}, - ], - }, - dragonite: { - learnset: { - aerialace: ["1L1"], - agility: ["1L1"], - aircutter: ["1L1"], - airslash: ["1L1"], - aquajet: ["1L1"], - aquatail: ["1L1"], - attract: ["1L1"], - barrier: ["1L1"], - bide: ["1L1"], - bind: ["1L1"], - blizzard: ["1L1"], - bodypress: ["1L1"], - bodyslam: ["1L1"], - breakingswipe: ["1L1"], - brickbreak: ["1L1"], - brutalswing: ["1L1"], - bubblebeam: ["1L1"], - bulldoze: ["1L1"], - captivate: ["1L1"], - chillingwater: ["1L1"], - confide: ["1L1"], - curse: ["1L1"], - cut: ["1L1"], - defog: ["1L1"], - detect: ["1L1"], - dive: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dracometeor: ["1L1"], - dragonbreath: ["1L1"], - dragoncheer: ["1L1"], - dragonclaw: ["1L1"], - dragondance: ["1L1"], - dragonpulse: ["1L1"], - dragonrage: ["1L1"], - dragonrush: ["1L1"], - dragontail: ["1L1"], - dualwingbeat: ["1L1"], - dynamicpunch: ["1L1"], - earthquake: ["1L1"], - encore: ["1L1"], - endure: ["1L1"], - extremespeed: ["1L1"], - facade: ["1L1"], - fireblast: ["1L1"], - firepunch: ["1L1"], - firespin: ["1L1"], - flamethrower: ["1L1"], - fling: ["1L1"], - fly: ["1L1"], - focusblast: ["1L1"], - focuspunch: ["1L1"], - frustration: ["1L1"], - furycutter: ["1L1"], - gigaimpact: ["1L1"], - hail: ["1L1"], - haze: ["1L1"], - headbutt: ["1L1"], - healbell: ["1L1"], - heatwave: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - honeclaws: ["1L1"], - horndrill: ["1L1"], - hurricane: ["1L1"], - hydropump: ["1L1"], - hyperbeam: ["1L1"], - icebeam: ["1L1"], - icepunch: ["1L1"], - icespinner: ["1L1"], - icywind: ["1L1"], - incinerate: ["1L1"], - ironhead: ["1L1"], - irontail: ["1L1"], - leer: ["1L1"], - lightscreen: ["1L1"], - lowkick: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - metronome: ["1L1"], - mimic: ["1L1"], - mist: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - ominouswind: ["1L1"], - outrage: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - rage: ["1L1"], - raindance: ["1L1"], - razorwind: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roar: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - roost: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - sandstorm: ["1L1"], - scaleshot: ["1L1"], - scaryface: ["1L1"], - secretpower: ["1L1"], - shockwave: ["1L1"], - skullbash: ["1L1"], - skydrop: ["1L1"], - slam: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - snowscape: ["1L1"], - steelwing: ["1L1"], - stompingtantrum: ["1L1"], - stoneedge: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - superpower: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - tailwind: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderpunch: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - twister: ["1L1"], - waterfall: ["1L1"], - watergun: ["1L1"], - waterpulse: ["1L1"], - weatherball: ["1L1"], - whirlpool: ["1L1"], - wingattack: ["1L1"], - wrap: ["1L1"], - zapcannon: ["1L1"], - }, - eventData: [ - {generation: 3, level: 70, moves: ["1L1"], pokeball: "pokeball"}, - {generation: 3, level: 55, moves: ["1L1"]}, - {generation: 4, level: 50, gender: "M", nature: "Mild", moves: ["1L1"], pokeball: "cherishball"}, - {generation: 5, level: 100, gender: "M", isHidden: true, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 5, level: 55, gender: "M", isHidden: true, moves: ["1L1"]}, - {generation: 5, level: 55, gender: "M", isHidden: true, moves: ["1L1"]}, - {generation: 5, level: 50, gender: "M", nature: "Brave", ivs: {hp: 30, atk: 30, def: 30, spa: 30, spd: 30, spe: 30}, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 6, level: 55, gender: "M", isHidden: true, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 6, level: 62, gender: "M", ivs: {hp: 31, def: 31, spa: 31, spd: 31}, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 8, level: 80, gender: "F", nature: "Jolly", abilities: ["1L1"], ivs: {hp: 30, atk: 31, def: 30, spa: 30, spd: 31, spe: 31}, moves: ["1L1"], pokeball: "pokeball"}, - ], - encounters: [ - {generation: 5, level: 50}, - {generation: 7, level: 10}, - ], - }, - mewtwo: { - learnset: { - aerialace: ["1L1"], - agility: ["1L1"], - allyswitch: ["1L1"], - amnesia: ["1L1"], - ancientpower: ["1L1"], - aquatail: ["1L1"], - aurasphere: ["1L1"], - avalanche: ["1L1"], - barrier: ["1L1"], - bide: ["1L1"], - blizzard: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - brutalswing: ["1L1"], - bubblebeam: ["1L1"], - bulkup: ["1L1"], - bulldoze: ["1L1"], - calmmind: ["1L1"], - chargebeam: ["1L1"], - chillingwater: ["1L1"], - confide: ["1L1"], - confuseray: ["1L1"], - confusion: ["1L1"], - counter: ["1L1"], - curse: ["1L1"], - darkpulse: ["1L1"], - detect: ["1L1"], - disable: ["1L1"], - dive: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - drainpunch: ["1L1"], - dreameater: ["1L1"], - dynamicpunch: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - electroball: ["1L1"], - embargo: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - expandingforce: ["1L1"], - facade: ["1L1"], - fireblast: ["1L1"], - firepunch: ["1L1"], - flamethrower: ["1L1"], - flash: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - focuspunch: ["1L1"], - foulplay: ["1L1"], - frustration: ["1L1"], - futuresight: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - gravity: ["1L1"], - guardswap: ["1L1"], - hail: ["1L1"], - headbutt: ["1L1"], - healpulse: ["1L1"], - helpinghand: ["1L1"], - hex: ["1L1"], - hiddenpower: ["1L1"], - hurricane: ["1L1"], - hyperbeam: ["1L1"], - icebeam: ["1L1"], - icepunch: ["1L1"], - icywind: ["1L1"], - imprison: ["1L1"], - incinerate: ["1L1"], - irontail: ["1L1"], - knockoff: ["1L1"], - laserfocus: ["1L1"], - lashout: ["1L1"], - lifedew: ["1L1"], - lightscreen: ["1L1"], - lowkick: ["1L1"], - lowsweep: ["1L1"], - magiccoat: ["1L1"], - magicroom: ["1L1"], - mefirst: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - metronome: ["1L1"], - mimic: ["1L1"], - miracleeye: ["1L1"], - mist: ["1L1"], - mudslap: ["1L1"], - nastyplot: ["1L1"], - naturalgift: ["1L1"], - nightmare: ["1L1"], - nightshade: ["1L1"], - payday: ["1L1"], - poisonjab: ["1L1"], - powergem: ["1L1"], - powerswap: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - psybeam: ["1L1"], - psychic: ["1L1"], - psychicnoise: ["1L1"], - psychicterrain: ["1L1"], - psychocut: ["1L1"], - psychup: ["1L1"], - psyshock: ["1L1"], - psystrike: ["1L1"], - psywave: ["1L1"], - rage: ["1L1"], - raindance: ["1L1"], - recover: ["1L1"], - recycle: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - reversal: ["1L1"], - rockclimb: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - roleplay: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - sandstorm: ["1L1"], - scaryface: ["1L1"], - secretpower: ["1L1"], - seismictoss: ["1L1"], - selfdestruct: ["1L1"], - shadowball: ["1L1"], - shockwave: ["1L1"], - signalbeam: ["1L1"], - skillswap: ["1L1"], - skullbash: ["1L1"], - sleeptalk: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - speedswap: ["1L1"], - spite: ["1L1"], - stompingtantrum: ["1L1"], - stoneedge: ["1L1"], - storedpower: ["1L1"], - strength: ["1L1"], - submission: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - telekinesis: ["1L1"], - teleport: ["1L1"], - terablast: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderpunch: ["1L1"], - thunderwave: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - triattack: ["1L1"], - trick: ["1L1"], - trickroom: ["1L1"], - watergun: ["1L1"], - waterpulse: ["1L1"], - weatherball: ["1L1"], - willowisp: ["1L1"], - wonderroom: ["1L1"], - zapcannon: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 3, level: 70, shiny: 1, moves: ["1L1"]}, - {generation: 4, level: 70, shiny: 1, moves: ["1L1"]}, - {generation: 5, level: 70, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 5, level: 100, nature: "Timid", ivs: {spa: 31, spe: 31}, isHidden: true, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 6, level: 70, moves: ["1L1"]}, - {generation: 6, level: 100, shiny: true, isHidden: true, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 7, level: 60, shiny: 1, moves: ["1L1"]}, - {generation: 8, level: 70, shiny: 1, moves: ["1L1"]}, - {generation: 9, level: 100, nature: "Modest", perfectIVs: 6, isHidden: true, moves: ["1L1"]}, - ], - encounters: [ - {generation: 1, level: 70}, - ], - eventOnly: false, - }, - mew: { - learnset: { - acidspray: ["1L1"], - acrobatics: ["1L1"], - aerialace: ["1L1"], - afteryou: ["1L1"], - agility: ["1L1"], - aircutter: ["1L1"], - airslash: ["1L1"], - alluringvoice: ["1L1"], - allyswitch: ["1L1"], - amnesia: ["1L1"], - ancientpower: ["1L1"], - aquatail: ["1L1"], - assurance: ["1L1"], - attract: ["1L1"], - aurasphere: ["1L1"], - auroraveil: ["1L1"], - avalanche: ["1L1"], - barrier: ["1L1"], - batonpass: ["1L1"], - beatup: ["1L1"], - bide: ["1L1"], - bind: ["1L1"], - blastburn: ["1L1"], - blazekick: ["1L1"], - blizzard: ["1L1"], - block: ["1L1"], - bodypress: ["1L1"], - bodyslam: ["1L1"], - bounce: ["1L1"], - bravebird: ["1L1"], - breakingswipe: ["1L1"], - brickbreak: ["1L1"], - brine: ["1L1"], - brutalswing: ["1L1"], - bubblebeam: ["1L1"], - bugbite: ["1L1"], - bugbuzz: ["1L1"], - bulkup: ["1L1"], - bulldoze: ["1L1"], - bulletseed: ["1L1"], - burningjealousy: ["1L1"], - calmmind: ["1L1"], - captivate: ["1L1"], - charge: ["1L1"], - chargebeam: ["1L1"], - charm: ["1L1"], - chillingwater: ["1L1"], - closecombat: ["1L1"], - coaching: ["1L1"], - confide: ["1L1"], - confuseray: ["1L1"], - confusion: ["1L1"], - corrosivegas: ["1L1"], - cosmicpower: ["1L1"], - counter: ["1L1"], - covet: ["1L1"], - crosspoison: ["1L1"], - crunch: ["1L1"], - curse: ["1L1"], - cut: ["1L1"], - darkestlariat: ["1L1"], - darkpulse: ["1L1"], - dazzlinggleam: ["1L1"], - defensecurl: ["1L1"], - defog: ["1L1"], - detect: ["1L1"], - dig: ["1L1"], - disarmingvoice: ["1L1"], - dive: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dracometeor: ["1L1"], - dragonbreath: ["1L1"], - dragoncheer: ["1L1"], - dragonclaw: ["1L1"], - dragondance: ["1L1"], - dragonpulse: ["1L1"], - dragonrage: ["1L1"], - dragontail: ["1L1"], - drainingkiss: ["1L1"], - drainpunch: ["1L1"], - dreameater: ["1L1"], - drillrun: ["1L1"], - dualchop: ["1L1"], - dualwingbeat: ["1L1"], - dynamicpunch: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - echoedvoice: ["1L1"], - eerieimpulse: ["1L1"], - eggbomb: ["1L1"], - electricterrain: ["1L1"], - electroball: ["1L1"], - electroweb: ["1L1"], - embargo: ["1L1"], - encore: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - expandingforce: ["1L1"], - explosion: ["1L1"], - facade: ["1L1"], - fakeout: ["1L1"], - faketears: ["1L1"], - falseswipe: ["1L1"], - featherdance: ["1L1"], - feintattack: ["1L1"], - fireblast: ["1L1"], - firefang: ["1L1"], - firepledge: ["1L1"], - firepunch: ["1L1"], - firespin: ["1L1"], - fissure: ["1L1"], - flamecharge: ["1L1"], - flamethrower: ["1L1"], - flareblitz: ["1L1"], - flash: ["1L1"], - flashcannon: ["1L1"], - fling: ["1L1"], - flipturn: ["1L1"], - fly: ["1L1"], - focusblast: ["1L1"], - focusenergy: ["1L1"], - focuspunch: ["1L1"], - foulplay: ["1L1"], - frenzyplant: ["1L1"], - frostbreath: ["1L1"], - frustration: ["1L1"], - furycutter: ["1L1"], - futuresight: ["1L1"], - gastroacid: ["1L1"], - gigadrain: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - grasspledge: ["1L1"], - grassyglide: ["1L1"], - grassyterrain: ["1L1"], - gravity: ["1L1"], - guardswap: ["1L1"], - gunkshot: ["1L1"], - gyroball: ["1L1"], - hail: ["1L1"], - hardpress: ["1L1"], - haze: ["1L1"], - headbutt: ["1L1"], - healbell: ["1L1"], - heatcrash: ["1L1"], - heatwave: ["1L1"], - heavyslam: ["1L1"], - helpinghand: ["1L1"], - hex: ["1L1"], - hiddenpower: ["1L1"], - highhorsepower: ["1L1"], - honeclaws: ["1L1"], - horndrill: ["1L1"], - hurricane: ["1L1"], - hydrocannon: ["1L1"], - hydropump: ["1L1"], - hyperbeam: ["1L1"], - hypervoice: ["1L1"], - hypnosis: ["1L1"], - icebeam: ["1L1"], - icefang: ["1L1"], - icepunch: ["1L1"], - icespinner: ["1L1"], - iciclespear: ["1L1"], - icywind: ["1L1"], - imprison: ["1L1"], - incinerate: ["1L1"], - infestation: ["1L1"], - irondefense: ["1L1"], - ironhead: ["1L1"], - irontail: ["1L1"], - knockoff: ["1L1"], - laserfocus: ["1L1"], - lashout: ["1L1"], - lastresort: ["1L1"], - leafblade: ["1L1"], - leafstorm: ["1L1"], - leechlife: ["1L1"], - lifedew: ["1L1"], - lightscreen: ["1L1"], - liquidation: ["1L1"], - lowkick: ["1L1"], - lowsweep: ["1L1"], - lunge: ["1L1"], - magicalleaf: ["1L1"], - magiccoat: ["1L1"], - magicroom: ["1L1"], - magnetrise: ["1L1"], - mefirst: ["1L1"], - megadrain: ["1L1"], - megahorn: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - metalclaw: ["1L1"], - metalsound: ["1L1"], - meteorbeam: ["1L1"], - metronome: ["1L1"], - mimic: ["1L1"], - mistyexplosion: ["1L1"], - mistyterrain: ["1L1"], - muddywater: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - mysticalfire: ["1L1"], - nastyplot: ["1L1"], - naturalgift: ["1L1"], - naturepower: ["1L1"], - nightmare: ["1L1"], - nightshade: ["1L1"], - ominouswind: ["1L1"], - outrage: ["1L1"], - overheat: ["1L1"], - painsplit: ["1L1"], - payback: ["1L1"], - payday: ["1L1"], - petalblizzard: ["1L1"], - phantomforce: ["1L1"], - pinmissile: ["1L1"], - playrough: ["1L1"], - pluck: ["1L1"], - poisonjab: ["1L1"], - poisontail: ["1L1"], - pollenpuff: ["1L1"], - poltergeist: ["1L1"], - pounce: ["1L1"], - pound: ["1L1"], - powergem: ["1L1"], - powerswap: ["1L1"], - poweruppunch: ["1L1"], - powerwhip: ["1L1"], - protect: ["1L1"], - psybeam: ["1L1"], - psychic: ["1L1"], - psychicfangs: ["1L1"], - psychicnoise: ["1L1"], - psychicterrain: ["1L1"], - psychocut: ["1L1"], - psychup: ["1L1"], - psyshock: ["1L1"], - psywave: ["1L1"], - quash: ["1L1"], - rage: ["1L1"], - raindance: ["1L1"], - razorshell: ["1L1"], - razorwind: ["1L1"], - recycle: ["1L1"], - reflect: ["1L1"], - reflecttype: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - revenge: ["1L1"], - reversal: ["1L1"], - risingvoltage: ["1L1"], - roar: ["1L1"], - rockblast: ["1L1"], - rockclimb: ["1L1"], - rockpolish: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - roleplay: ["1L1"], - rollout: ["1L1"], - roost: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - sandstorm: ["1L1"], - sandtomb: ["1L1"], - scald: ["1L1"], - scaleshot: ["1L1"], - scaryface: ["1L1"], - scorchingsands: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - seedbomb: ["1L1"], - seismictoss: ["1L1"], - selfdestruct: ["1L1"], - shadowball: ["1L1"], - shadowclaw: ["1L1"], - shockwave: ["1L1"], - signalbeam: ["1L1"], - silverwind: ["1L1"], - skillswap: ["1L1"], - skittersmack: ["1L1"], - skullbash: ["1L1"], - skyattack: ["1L1"], - skydrop: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - sludgewave: ["1L1"], - smackdown: ["1L1"], - smartstrike: ["1L1"], - snarl: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - snowscape: ["1L1"], - softboiled: ["1L1"], - solarbeam: ["1L1"], - solarblade: ["1L1"], - speedswap: ["1L1"], - spikes: ["1L1"], - spite: ["1L1"], - stealthrock: ["1L1"], - steelbeam: ["1L1"], - steelroller: ["1L1"], - steelwing: ["1L1"], - stompingtantrum: ["1L1"], - stoneedge: ["1L1"], - storedpower: ["1L1"], - strength: ["1L1"], - stringshot: ["1L1"], - strugglebug: ["1L1"], - submission: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - sunnyday: ["1L1"], - supercellslam: ["1L1"], - superfang: ["1L1"], - superpower: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - sweetscent: ["1L1"], - swift: ["1L1"], - swordsdance: ["1L1"], - synthesis: ["1L1"], - tailslap: ["1L1"], - tailwind: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - telekinesis: ["1L1"], - teleport: ["1L1"], - temperflare: ["1L1"], - terablast: ["1L1"], - terrainpulse: ["1L1"], - thief: ["1L1"], - throatchop: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderfang: ["1L1"], - thunderpunch: ["1L1"], - thunderwave: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - toxicspikes: ["1L1"], - trailblaze: ["1L1"], - transform: ["1L1"], - triattack: ["1L1"], - trick: ["1L1"], - trickroom: ["1L1"], - tripleaxel: ["1L1"], - twister: ["1L1"], - upperhand: ["1L1"], - uproar: ["1L1"], - uturn: ["1L1"], - vacuumwave: ["1L1"], - venomdrench: ["1L1"], - venoshock: ["1L1"], - voltswitch: ["1L1"], - waterfall: ["1L1"], - watergun: ["1L1"], - waterpledge: ["1L1"], - waterpulse: ["1L1"], - weatherball: ["1L1"], - whirlpool: ["1L1"], - whirlwind: ["1L1"], - wildcharge: ["1L1"], - willowisp: ["1L1"], - wonderroom: ["1L1"], - workup: ["1L1"], - worryseed: ["1L1"], - xscissor: ["1L1"], - zapcannon: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 3, level: 30, shiny: 1, moves: ["1L1"]}, - {generation: 3, level: 10, moves: ["1L1"], pokeball: "pokeball"}, - {generation: 3, level: 30, shiny: 1, moves: ["1L1"]}, - {generation: 3, level: 10, moves: ["1L1"], pokeball: "pokeball"}, - {generation: 3, level: 30, shiny: 1, moves: ["1L1"]}, - {generation: 3, level: 10, moves: ["1L1"], pokeball: "pokeball"}, - {generation: 3, level: 30, shiny: 1, moves: ["1L1"]}, - {generation: 3, level: 10, moves: ["1L1"], pokeball: "pokeball"}, - {generation: 3, level: 30, shiny: 1, moves: ["1L1"]}, - {generation: 3, level: 10, moves: ["1L1"], pokeball: "pokeball"}, - {generation: 3, level: 30, shiny: 1, moves: ["1L1"]}, - {generation: 3, level: 10, moves: ["1L1"], pokeball: "pokeball"}, - {generation: 3, level: 30, shiny: 1, moves: ["1L1"]}, - {generation: 3, level: 10, moves: ["1L1"], pokeball: "pokeball"}, - {generation: 4, level: 50, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 4, level: 50, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 4, level: 50, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 4, level: 50, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 4, level: 50, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 4, level: 50, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 4, level: 50, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 4, level: 5, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 6, level: 100, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 7, level: 5, perfectIVs: 5, moves: ["1L1"], pokeball: "pokeball"}, - {generation: 7, level: 50, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 8, level: 1, moves: ["1L1"], pokeball: "pokeball"}, - {generation: 9, level: 5, moves: ["1L1"], pokeball: "pokeball"}, - ], - eventOnly: false, - }, - chikorita: { - learnset: { - ancientpower: ["1L1"], - aromatherapy: ["1L1"], - attract: ["1L1"], - bodyslam: ["1L1"], - bulletseed: ["1L1"], - captivate: ["1L1"], - charm: ["1L1"], - confide: ["1L1"], - counter: ["1L1"], - curse: ["1L1"], - cut: ["1L1"], - detect: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - echoedvoice: ["1L1"], - encore: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - faketears: ["1L1"], - flail: ["1L1"], - flash: ["1L1"], - frenzyplant: ["1L1"], - frustration: ["1L1"], - furycutter: ["1L1"], - gigadrain: ["1L1"], - grassknot: ["1L1"], - grasspledge: ["1L1"], - grasswhistle: ["1L1"], - grassyglide: ["1L1"], - grassyterrain: ["1L1"], - growl: ["1L1"], - headbutt: ["1L1"], - healpulse: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - ingrain: ["1L1"], - irontail: ["1L1"], - leafstorm: ["1L1"], - leechseed: ["1L1"], - lightscreen: ["1L1"], - magicalleaf: ["1L1"], - magiccoat: ["1L1"], - mimic: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - naturepower: ["1L1"], - poisonpowder: ["1L1"], - protect: ["1L1"], - razorleaf: ["1L1"], - reflect: ["1L1"], - refresh: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - secretpower: ["1L1"], - seedbomb: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - solarblade: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - sweetscent: ["1L1"], - swordsdance: ["1L1"], - synthesis: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - vinewhip: ["1L1"], - workup: ["1L1"], - worryseed: ["1L1"], - wringout: ["1L1"], - }, - eventData: [ - {generation: 3, level: 10, gender: "M", moves: ["1L1"], pokeball: "pokeball"}, - {generation: 3, level: 5, moves: ["1L1"], pokeball: "pokeball"}, - {generation: 6, level: 5, moves: ["1L1"], pokeball: "cherishball"}, - ], - }, - bayleef: { - learnset: { - ancientpower: ["1L1"], - aromatherapy: ["1L1"], - attract: ["1L1"], - bodyslam: ["1L1"], - bulletseed: ["1L1"], - captivate: ["1L1"], - charm: ["1L1"], - confide: ["1L1"], - counter: ["1L1"], - curse: ["1L1"], - cut: ["1L1"], - detect: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - echoedvoice: ["1L1"], - encore: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - faketears: ["1L1"], - flash: ["1L1"], - frustration: ["1L1"], - furycutter: ["1L1"], - gigadrain: ["1L1"], - grassknot: ["1L1"], - grasspledge: ["1L1"], - grassyglide: ["1L1"], - grassyterrain: ["1L1"], - growl: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - irontail: ["1L1"], - knockoff: ["1L1"], - laserfocus: ["1L1"], - leafstorm: ["1L1"], - leechseed: ["1L1"], - lightscreen: ["1L1"], - magicalleaf: ["1L1"], - magiccoat: ["1L1"], - mimic: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - naturepower: ["1L1"], - poisonpowder: ["1L1"], - protect: ["1L1"], - razorleaf: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rocksmash: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - secretpower: ["1L1"], - seedbomb: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - solarblade: ["1L1"], - stompingtantrum: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - sweetscent: ["1L1"], - swordsdance: ["1L1"], - synthesis: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - workup: ["1L1"], - worryseed: ["1L1"], - }, - }, - meganium: { - learnset: { - ancientpower: ["1L1"], - aromatherapy: ["1L1"], - attract: ["1L1"], - bodypress: ["1L1"], - bodyslam: ["1L1"], - bulldoze: ["1L1"], - bulletseed: ["1L1"], - captivate: ["1L1"], - charm: ["1L1"], - confide: ["1L1"], - counter: ["1L1"], - curse: ["1L1"], - cut: ["1L1"], - detect: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dragontail: ["1L1"], - earthquake: ["1L1"], - echoedvoice: ["1L1"], - encore: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - faketears: ["1L1"], - flash: ["1L1"], - frenzyplant: ["1L1"], - frustration: ["1L1"], - furycutter: ["1L1"], - gigadrain: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - grasspledge: ["1L1"], - grassyglide: ["1L1"], - grassyterrain: ["1L1"], - growl: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - irontail: ["1L1"], - knockoff: ["1L1"], - laserfocus: ["1L1"], - leafstorm: ["1L1"], - leechseed: ["1L1"], - lightscreen: ["1L1"], - magicalleaf: ["1L1"], - magiccoat: ["1L1"], - mimic: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - naturepower: ["1L1"], - outrage: ["1L1"], - petalblizzard: ["1L1"], - petaldance: ["1L1"], - poisonpowder: ["1L1"], - protect: ["1L1"], - razorleaf: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rockclimb: ["1L1"], - rocksmash: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - secretpower: ["1L1"], - seedbomb: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - solarblade: ["1L1"], - stompingtantrum: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - sweetscent: ["1L1"], - swordsdance: ["1L1"], - synthesis: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - weatherball: ["1L1"], - workup: ["1L1"], - worryseed: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 6, level: 50, isHidden: true, moves: ["1L1"], pokeball: "pokeball"}, - ], - }, - cyndaquil: { - learnset: { - aerialace: ["1L1"], - attract: ["1L1"], - blastburn: ["1L1"], - bodyslam: ["1L1"], - burningjealousy: ["1L1"], - burnup: ["1L1"], - captivate: ["1L1"], - confide: ["1L1"], - covet: ["1L1"], - crushclaw: ["1L1"], - curse: ["1L1"], - cut: ["1L1"], - defensecurl: ["1L1"], - detect: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doublekick: ["1L1"], - doubleteam: ["1L1"], - ember: ["1L1"], - endure: ["1L1"], - eruption: ["1L1"], - extrasensory: ["1L1"], - facade: ["1L1"], - fireblast: ["1L1"], - firefang: ["1L1"], - firepledge: ["1L1"], - firespin: ["1L1"], - flameburst: ["1L1"], - flamecharge: ["1L1"], - flamethrower: ["1L1"], - flamewheel: ["1L1"], - flareblitz: ["1L1"], - foresight: ["1L1"], - frustration: ["1L1"], - furyswipes: ["1L1"], - headbutt: ["1L1"], - heatwave: ["1L1"], - hiddenpower: ["1L1"], - howl: ["1L1"], - incinerate: ["1L1"], - inferno: ["1L1"], - ironhead: ["1L1"], - irontail: ["1L1"], - lavaplume: ["1L1"], - leer: ["1L1"], - mimic: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - naturepower: ["1L1"], - overheat: ["1L1"], - playrough: ["1L1"], - protect: ["1L1"], - quickattack: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - reversal: ["1L1"], - roar: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - secretpower: ["1L1"], - sleeptalk: ["1L1"], - smokescreen: ["1L1"], - snore: ["1L1"], - submission: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - temperflare: ["1L1"], - terablast: ["1L1"], - thrash: ["1L1"], - toxic: ["1L1"], - wildcharge: ["1L1"], - willowisp: ["1L1"], - workup: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 3, level: 10, gender: "M", moves: ["1L1"], pokeball: "pokeball"}, - {generation: 3, level: 5, moves: ["1L1"], pokeball: "pokeball"}, - {generation: 6, level: 5, moves: ["1L1"], pokeball: "cherishball"}, - ], - }, - quilava: { - learnset: { - aerialace: ["1L1"], - attract: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - burningjealousy: ["1L1"], - burnup: ["1L1"], - captivate: ["1L1"], - confide: ["1L1"], - covet: ["1L1"], - curse: ["1L1"], - cut: ["1L1"], - defensecurl: ["1L1"], - detect: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - ember: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - eruption: ["1L1"], - facade: ["1L1"], - fireblast: ["1L1"], - firefang: ["1L1"], - firepledge: ["1L1"], - firespin: ["1L1"], - flamecharge: ["1L1"], - flamethrower: ["1L1"], - flamewheel: ["1L1"], - flareblitz: ["1L1"], - focuspunch: ["1L1"], - frustration: ["1L1"], - furycutter: ["1L1"], - headbutt: ["1L1"], - heatwave: ["1L1"], - hiddenpower: ["1L1"], - incinerate: ["1L1"], - inferno: ["1L1"], - ironhead: ["1L1"], - irontail: ["1L1"], - lavaplume: ["1L1"], - leer: ["1L1"], - mimic: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - naturepower: ["1L1"], - overheat: ["1L1"], - playrough: ["1L1"], - protect: ["1L1"], - quickattack: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - reversal: ["1L1"], - roar: ["1L1"], - rocksmash: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - secretpower: ["1L1"], - sleeptalk: ["1L1"], - smokescreen: ["1L1"], - snore: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - temperflare: ["1L1"], - terablast: ["1L1"], - toxic: ["1L1"], - wildcharge: ["1L1"], - willowisp: ["1L1"], - workup: ["1L1"], - zenheadbutt: ["1L1"], - }, - }, - typhlosion: { - learnset: { - aerialace: ["1L1"], - attract: ["1L1"], - blastburn: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - bulldoze: ["1L1"], - burningjealousy: ["1L1"], - burnup: ["1L1"], - captivate: ["1L1"], - confide: ["1L1"], - counter: ["1L1"], - covet: ["1L1"], - curse: ["1L1"], - cut: ["1L1"], - defensecurl: ["1L1"], - detect: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dynamicpunch: ["1L1"], - earthquake: ["1L1"], - ember: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - eruption: ["1L1"], - facade: ["1L1"], - fireblast: ["1L1"], - firefang: ["1L1"], - firepledge: ["1L1"], - firepunch: ["1L1"], - firespin: ["1L1"], - flamecharge: ["1L1"], - flamethrower: ["1L1"], - flamewheel: ["1L1"], - flareblitz: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - focuspunch: ["1L1"], - frustration: ["1L1"], - furycutter: ["1L1"], - gigaimpact: ["1L1"], - gyroball: ["1L1"], - headbutt: ["1L1"], - heatwave: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - incinerate: ["1L1"], - inferno: ["1L1"], - ironhead: ["1L1"], - irontail: ["1L1"], - laserfocus: ["1L1"], - lavaplume: ["1L1"], - leer: ["1L1"], - lowkick: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - mimic: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - naturepower: ["1L1"], - overheat: ["1L1"], - playrough: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - quickattack: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - reversal: ["1L1"], - roar: ["1L1"], - rockclimb: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - scorchingsands: ["1L1"], - secretpower: ["1L1"], - seismictoss: ["1L1"], - shadowball: ["1L1"], - shadowclaw: ["1L1"], - sleeptalk: ["1L1"], - smokescreen: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - stompingtantrum: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - temperflare: ["1L1"], - terablast: ["1L1"], - throatchop: ["1L1"], - thunderpunch: ["1L1"], - toxic: ["1L1"], - wildcharge: ["1L1"], - willowisp: ["1L1"], - workup: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 3, level: 70, moves: ["1L1"], pokeball: "pokeball"}, - {generation: 6, level: 50, isHidden: true, moves: ["1L1"], pokeball: "pokeball"}, - ], - }, - typhlosionhisui: { - learnset: { - aerialace: ["1L1"], - blastburn: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - bulldoze: ["1L1"], - burningjealousy: ["1L1"], - calmmind: ["1L1"], - confuseray: ["1L1"], - curse: ["1L1"], - defensecurl: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - earthquake: ["1L1"], - ember: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - eruption: ["1L1"], - facade: ["1L1"], - fireblast: ["1L1"], - firefang: ["1L1"], - firepledge: ["1L1"], - firepunch: ["1L1"], - firespin: ["1L1"], - flamecharge: ["1L1"], - flamethrower: ["1L1"], - flamewheel: ["1L1"], - flareblitz: ["1L1"], - focusblast: ["1L1"], - focuspunch: ["1L1"], - gigaimpact: ["1L1"], - gyroball: ["1L1"], - heatwave: ["1L1"], - hex: ["1L1"], - hyperbeam: ["1L1"], - infernalparade: ["1L1"], - inferno: ["1L1"], - ironhead: ["1L1"], - lavaplume: ["1L1"], - leer: ["1L1"], - lowkick: ["1L1"], - nightshade: ["1L1"], - overheat: ["1L1"], - playrough: ["1L1"], - poltergeist: ["1L1"], - protect: ["1L1"], - quickattack: ["1L1"], - rest: ["1L1"], - reversal: ["1L1"], - roar: ["1L1"], - rockslide: ["1L1"], - rollout: ["1L1"], - shadowball: ["1L1"], - shadowclaw: ["1L1"], - sleeptalk: ["1L1"], - smokescreen: ["1L1"], - solarbeam: ["1L1"], - spite: ["1L1"], - stompingtantrum: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swift: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - temperflare: ["1L1"], - terablast: ["1L1"], - thunderpunch: ["1L1"], - wildcharge: ["1L1"], - willowisp: ["1L1"], - zenheadbutt: ["1L1"], - }, - }, - totodile: { - learnset: { - aerialace: ["1L1"], - ancientpower: ["1L1"], - aquajet: ["1L1"], - aquatail: ["1L1"], - attract: ["1L1"], - bite: ["1L1"], - blizzard: ["1L1"], - block: ["1L1"], - bodyslam: ["1L1"], - breakingswipe: ["1L1"], - brickbreak: ["1L1"], - captivate: ["1L1"], - chillingwater: ["1L1"], - chipaway: ["1L1"], - confide: ["1L1"], - counter: ["1L1"], - crunch: ["1L1"], - curse: ["1L1"], - cut: ["1L1"], - detect: ["1L1"], - dig: ["1L1"], - dive: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dragonclaw: ["1L1"], - dragondance: ["1L1"], - dynamicpunch: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - faketears: ["1L1"], - flail: ["1L1"], - flatter: ["1L1"], - fling: ["1L1"], - flipturn: ["1L1"], - focuspunch: ["1L1"], - frustration: ["1L1"], - hail: ["1L1"], - headbutt: ["1L1"], - hiddenpower: ["1L1"], - honeclaws: ["1L1"], - hydrocannon: ["1L1"], - hydropump: ["1L1"], - icebeam: ["1L1"], - icefang: ["1L1"], - icepunch: ["1L1"], - icywind: ["1L1"], - irontail: ["1L1"], - leer: ["1L1"], - liquidation: ["1L1"], - lowkick: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - metalclaw: ["1L1"], - mimic: ["1L1"], - muddywater: ["1L1"], - mudslap: ["1L1"], - mudsport: ["1L1"], - naturalgift: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - rage: ["1L1"], - raindance: ["1L1"], - razorwind: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rockslide: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - scald: ["1L1"], - scaryface: ["1L1"], - scratch: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - seismictoss: ["1L1"], - shadowclaw: ["1L1"], - slash: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - spite: ["1L1"], - substitute: ["1L1"], - superpower: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - swordsdance: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thrash: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - uproar: ["1L1"], - waterfall: ["1L1"], - watergun: ["1L1"], - waterpledge: ["1L1"], - waterpulse: ["1L1"], - watersport: ["1L1"], - whirlpool: ["1L1"], - workup: ["1L1"], - }, - eventData: [ - {generation: 3, level: 10, gender: "M", moves: ["1L1"], pokeball: "pokeball"}, - {generation: 3, level: 5, moves: ["1L1"], pokeball: "pokeball"}, - {generation: 6, level: 5, moves: ["1L1"], pokeball: "cherishball"}, - ], - }, - croconaw: { - learnset: { - aerialace: ["1L1"], - ancientpower: ["1L1"], - aquatail: ["1L1"], - attract: ["1L1"], - bite: ["1L1"], - blizzard: ["1L1"], - block: ["1L1"], - bodyslam: ["1L1"], - breakingswipe: ["1L1"], - brickbreak: ["1L1"], - captivate: ["1L1"], - chillingwater: ["1L1"], - chipaway: ["1L1"], - confide: ["1L1"], - counter: ["1L1"], - crunch: ["1L1"], - curse: ["1L1"], - cut: ["1L1"], - detect: ["1L1"], - dig: ["1L1"], - dive: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dragonclaw: ["1L1"], - dragondance: ["1L1"], - dynamicpunch: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - faketears: ["1L1"], - flail: ["1L1"], - fling: ["1L1"], - flipturn: ["1L1"], - focuspunch: ["1L1"], - frustration: ["1L1"], - furycutter: ["1L1"], - hail: ["1L1"], - headbutt: ["1L1"], - hiddenpower: ["1L1"], - honeclaws: ["1L1"], - hydropump: ["1L1"], - icebeam: ["1L1"], - icefang: ["1L1"], - icepunch: ["1L1"], - icywind: ["1L1"], - irontail: ["1L1"], - leer: ["1L1"], - liquidation: ["1L1"], - lowkick: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - metalclaw: ["1L1"], - mimic: ["1L1"], - muddywater: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - psychicfangs: ["1L1"], - rage: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roar: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - scald: ["1L1"], - scaryface: ["1L1"], - scratch: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - seismictoss: ["1L1"], - shadowclaw: ["1L1"], - slash: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - spite: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - superpower: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - swordsdance: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thrash: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - uproar: ["1L1"], - waterfall: ["1L1"], - watergun: ["1L1"], - waterpledge: ["1L1"], - waterpulse: ["1L1"], - whirlpool: ["1L1"], - workup: ["1L1"], - }, - }, - feraligatr: { - learnset: { - aerialace: ["1L1"], - agility: ["1L1"], - ancientpower: ["1L1"], - aquatail: ["1L1"], - attract: ["1L1"], - avalanche: ["1L1"], - bite: ["1L1"], - blizzard: ["1L1"], - block: ["1L1"], - bodyslam: ["1L1"], - breakingswipe: ["1L1"], - brickbreak: ["1L1"], - bulldoze: ["1L1"], - captivate: ["1L1"], - chillingwater: ["1L1"], - chipaway: ["1L1"], - confide: ["1L1"], - counter: ["1L1"], - crunch: ["1L1"], - curse: ["1L1"], - cut: ["1L1"], - detect: ["1L1"], - dig: ["1L1"], - dive: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dragonclaw: ["1L1"], - dragondance: ["1L1"], - dragonpulse: ["1L1"], - dragontail: ["1L1"], - dynamicpunch: ["1L1"], - earthquake: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - faketears: ["1L1"], - flail: ["1L1"], - fling: ["1L1"], - flipturn: ["1L1"], - focusblast: ["1L1"], - focuspunch: ["1L1"], - frustration: ["1L1"], - furycutter: ["1L1"], - gigaimpact: ["1L1"], - hail: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - honeclaws: ["1L1"], - hydrocannon: ["1L1"], - hydropump: ["1L1"], - hyperbeam: ["1L1"], - icebeam: ["1L1"], - icefang: ["1L1"], - icepunch: ["1L1"], - icywind: ["1L1"], - irontail: ["1L1"], - lashout: ["1L1"], - leer: ["1L1"], - liquidation: ["1L1"], - lowkick: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - metalclaw: ["1L1"], - mimic: ["1L1"], - muddywater: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - outrage: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - psychicfangs: ["1L1"], - rage: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roar: ["1L1"], - rockclimb: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - scald: ["1L1"], - scaleshot: ["1L1"], - scaryface: ["1L1"], - scratch: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - seismictoss: ["1L1"], - shadowclaw: ["1L1"], - slash: ["1L1"], - sleeptalk: ["1L1"], - snarl: ["1L1"], - snore: ["1L1"], - spite: ["1L1"], - stompingtantrum: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - superpower: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - swordsdance: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thrash: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - uproar: ["1L1"], - waterfall: ["1L1"], - watergun: ["1L1"], - waterpledge: ["1L1"], - waterpulse: ["1L1"], - whirlpool: ["1L1"], - workup: ["1L1"], - }, - eventData: [ - {generation: 6, level: 50, isHidden: true, moves: ["1L1"], pokeball: "pokeball"}, - ], - }, - sentret: { - learnset: { - amnesia: ["1L1"], - aquatail: ["1L1"], - assist: ["1L1"], - attract: ["1L1"], - babydolleyes: ["1L1"], - batonpass: ["1L1"], - blizzard: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - brutalswing: ["1L1"], - captivate: ["1L1"], - chargebeam: ["1L1"], - charm: ["1L1"], - chillingwater: ["1L1"], - confide: ["1L1"], - covet: ["1L1"], - curse: ["1L1"], - cut: ["1L1"], - defensecurl: ["1L1"], - detect: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dynamicpunch: ["1L1"], - echoedvoice: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - firepunch: ["1L1"], - flamethrower: ["1L1"], - fling: ["1L1"], - focusenergy: ["1L1"], - focuspunch: ["1L1"], - followme: ["1L1"], - foresight: ["1L1"], - frustration: ["1L1"], - furycutter: ["1L1"], - furyswipes: ["1L1"], - grassknot: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - honeclaws: ["1L1"], - hypervoice: ["1L1"], - icebeam: ["1L1"], - icepunch: ["1L1"], - irontail: ["1L1"], - knockoff: ["1L1"], - lastresort: ["1L1"], - mefirst: ["1L1"], - mimic: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - playrough: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - pursuit: ["1L1"], - quickattack: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - reversal: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - scratch: ["1L1"], - secretpower: ["1L1"], - seedbomb: ["1L1"], - shadowball: ["1L1"], - shadowclaw: ["1L1"], - shockwave: ["1L1"], - slam: ["1L1"], - slash: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - sunnyday: ["1L1"], - superfang: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderpunch: ["1L1"], - tidyup: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - trick: ["1L1"], - uproar: ["1L1"], - uturn: ["1L1"], - waterpulse: ["1L1"], - whirlpool: ["1L1"], - workup: ["1L1"], - }, - encounters: [ - {generation: 2, level: 2}, - ], - }, - furret: { - learnset: { - agility: ["1L1"], - amnesia: ["1L1"], - aquatail: ["1L1"], - attract: ["1L1"], - batonpass: ["1L1"], - blizzard: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - brutalswing: ["1L1"], - captivate: ["1L1"], - chargebeam: ["1L1"], - charm: ["1L1"], - chillingwater: ["1L1"], - coil: ["1L1"], - confide: ["1L1"], - covet: ["1L1"], - curse: ["1L1"], - cut: ["1L1"], - defensecurl: ["1L1"], - detect: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dynamicpunch: ["1L1"], - echoedvoice: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - firepunch: ["1L1"], - flamethrower: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - focuspunch: ["1L1"], - followme: ["1L1"], - foresight: ["1L1"], - frustration: ["1L1"], - furycutter: ["1L1"], - furyswipes: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - honeclaws: ["1L1"], - hyperbeam: ["1L1"], - hypervoice: ["1L1"], - icebeam: ["1L1"], - icepunch: ["1L1"], - irontail: ["1L1"], - knockoff: ["1L1"], - lastresort: ["1L1"], - mefirst: ["1L1"], - mimic: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - playrough: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - quickattack: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - reversal: ["1L1"], - rocksmash: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - scratch: ["1L1"], - secretpower: ["1L1"], - seedbomb: ["1L1"], - shadowball: ["1L1"], - shadowclaw: ["1L1"], - shockwave: ["1L1"], - slam: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - sunnyday: ["1L1"], - superfang: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderpunch: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - trick: ["1L1"], - uproar: ["1L1"], - uturn: ["1L1"], - waterpulse: ["1L1"], - whirlpool: ["1L1"], - workup: ["1L1"], - zenheadbutt: ["1L1"], - }, - encounters: [ - {generation: 2, level: 6}, - {generation: 4, level: 6}, - ], - }, - hoothoot: { - learnset: { - acrobatics: ["1L1"], - aerialace: ["1L1"], - agility: ["1L1"], - aircutter: ["1L1"], - airslash: ["1L1"], - amnesia: ["1L1"], - attract: ["1L1"], - bravebird: ["1L1"], - calmmind: ["1L1"], - captivate: ["1L1"], - confide: ["1L1"], - confuseray: ["1L1"], - confusion: ["1L1"], - curse: ["1L1"], - defog: ["1L1"], - detect: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dreameater: ["1L1"], - dualwingbeat: ["1L1"], - echoedvoice: ["1L1"], - endure: ["1L1"], - extrasensory: ["1L1"], - facade: ["1L1"], - featherdance: ["1L1"], - feintattack: ["1L1"], - flash: ["1L1"], - fly: ["1L1"], - foresight: ["1L1"], - frustration: ["1L1"], - growl: ["1L1"], - haze: ["1L1"], - heatwave: ["1L1"], - hiddenpower: ["1L1"], - hurricane: ["1L1"], - hypervoice: ["1L1"], - hypnosis: ["1L1"], - imprison: ["1L1"], - magiccoat: ["1L1"], - meanlook: ["1L1"], - mimic: ["1L1"], - mirrormove: ["1L1"], - moonblast: ["1L1"], - mudslap: ["1L1"], - nastyplot: ["1L1"], - naturalgift: ["1L1"], - nightmare: ["1L1"], - nightshade: ["1L1"], - ominouswind: ["1L1"], - peck: ["1L1"], - pluck: ["1L1"], - protect: ["1L1"], - psybeam: ["1L1"], - psychic: ["1L1"], - psychoshift: ["1L1"], - psychup: ["1L1"], - raindance: ["1L1"], - recycle: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roost: ["1L1"], - round: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - shadowball: ["1L1"], - silverwind: ["1L1"], - skillswap: ["1L1"], - skyattack: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - spite: ["1L1"], - steelwing: ["1L1"], - storedpower: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - supersonic: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - synchronoise: ["1L1"], - tackle: ["1L1"], - tailwind: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - toxic: ["1L1"], - twister: ["1L1"], - uproar: ["1L1"], - whirlwind: ["1L1"], - wingattack: ["1L1"], - workup: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 3, level: 10, gender: "M", moves: ["1L1"], pokeball: "pokeball"}, - ], - encounters: [ - {generation: 2, level: 2}, - ], - }, - noctowl: { - learnset: { - acrobatics: ["1L1"], - aerialace: ["1L1"], - agility: ["1L1"], - aircutter: ["1L1"], - airslash: ["1L1"], - amnesia: ["1L1"], - attract: ["1L1"], - bodyslam: ["1L1"], - bravebird: ["1L1"], - calmmind: ["1L1"], - captivate: ["1L1"], - confide: ["1L1"], - confuseray: ["1L1"], - confusion: ["1L1"], - curse: ["1L1"], - defog: ["1L1"], - detect: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dreameater: ["1L1"], - dualwingbeat: ["1L1"], - echoedvoice: ["1L1"], - endure: ["1L1"], - extrasensory: ["1L1"], - facade: ["1L1"], - featherdance: ["1L1"], - flash: ["1L1"], - fly: ["1L1"], - foresight: ["1L1"], - frustration: ["1L1"], - futuresight: ["1L1"], - gigaimpact: ["1L1"], - growl: ["1L1"], - haze: ["1L1"], - heatwave: ["1L1"], - hiddenpower: ["1L1"], - hurricane: ["1L1"], - hyperbeam: ["1L1"], - hypervoice: ["1L1"], - hypnosis: ["1L1"], - imprison: ["1L1"], - laserfocus: ["1L1"], - magiccoat: ["1L1"], - mimic: ["1L1"], - moonblast: ["1L1"], - mudslap: ["1L1"], - nastyplot: ["1L1"], - naturalgift: ["1L1"], - nightmare: ["1L1"], - nightshade: ["1L1"], - ominouswind: ["1L1"], - peck: ["1L1"], - pluck: ["1L1"], - protect: ["1L1"], - psybeam: ["1L1"], - psychic: ["1L1"], - psychicnoise: ["1L1"], - psychoshift: ["1L1"], - psychup: ["1L1"], - raindance: ["1L1"], - recycle: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roost: ["1L1"], - round: ["1L1"], - scaryface: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - shadowball: ["1L1"], - silverwind: ["1L1"], - skillswap: ["1L1"], - skyattack: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - spite: ["1L1"], - steelwing: ["1L1"], - storedpower: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - synchronoise: ["1L1"], - tackle: ["1L1"], - tailwind: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - toxic: ["1L1"], - twister: ["1L1"], - uproar: ["1L1"], - workup: ["1L1"], - zenheadbutt: ["1L1"], - }, - encounters: [ - {generation: 2, level: 7}, - {generation: 4, level: 5}, - {generation: 7, level: 19}, - ], - }, - ledyba: { - learnset: { - acrobatics: ["1L1"], - aerialace: ["1L1"], - agility: ["1L1"], - aircutter: ["1L1"], - airslash: ["1L1"], - attract: ["1L1"], - batonpass: ["1L1"], - bide: ["1L1"], - brickbreak: ["1L1"], - bugbite: ["1L1"], - bugbuzz: ["1L1"], - captivate: ["1L1"], - cometpunch: ["1L1"], - confide: ["1L1"], - counter: ["1L1"], - curse: ["1L1"], - dig: ["1L1"], - dizzypunch: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - drainpunch: ["1L1"], - dynamicpunch: ["1L1"], - encore: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - flash: ["1L1"], - fling: ["1L1"], - focuspunch: ["1L1"], - frustration: ["1L1"], - gigadrain: ["1L1"], - headbutt: ["1L1"], - hiddenpower: ["1L1"], - icepunch: ["1L1"], - infestation: ["1L1"], - knockoff: ["1L1"], - lightscreen: ["1L1"], - machpunch: ["1L1"], - megapunch: ["1L1"], - mimic: ["1L1"], - naturalgift: ["1L1"], - ominouswind: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - psybeam: ["1L1"], - reflect: ["1L1"], - refresh: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rollout: ["1L1"], - roost: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - silverwind: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - stringshot: ["1L1"], - strugglebug: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - supersonic: ["1L1"], - swagger: ["1L1"], - sweetscent: ["1L1"], - swift: ["1L1"], - swordsdance: ["1L1"], - tackle: ["1L1"], - tailwind: ["1L1"], - thief: ["1L1"], - thunderpunch: ["1L1"], - toxic: ["1L1"], - uproar: ["1L1"], - uturn: ["1L1"], - }, - eventData: [ - {generation: 3, level: 10, moves: ["1L1"]}, - ], - encounters: [ - {generation: 2, level: 3}, - ], - }, - ledian: { - learnset: { - acrobatics: ["1L1"], - aerialace: ["1L1"], - agility: ["1L1"], - aircutter: ["1L1"], - airslash: ["1L1"], - attract: ["1L1"], - batonpass: ["1L1"], - brickbreak: ["1L1"], - bugbite: ["1L1"], - bugbuzz: ["1L1"], - captivate: ["1L1"], - cometpunch: ["1L1"], - confide: ["1L1"], - curse: ["1L1"], - defog: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - drainpunch: ["1L1"], - dynamicpunch: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - flash: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - focuspunch: ["1L1"], - frustration: ["1L1"], - gigadrain: ["1L1"], - gigaimpact: ["1L1"], - headbutt: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - icepunch: ["1L1"], - infestation: ["1L1"], - knockoff: ["1L1"], - lightscreen: ["1L1"], - machpunch: ["1L1"], - megapunch: ["1L1"], - mimic: ["1L1"], - naturalgift: ["1L1"], - ominouswind: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rocksmash: ["1L1"], - rollout: ["1L1"], - roost: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - secretpower: ["1L1"], - silverwind: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - strength: ["1L1"], - stringshot: ["1L1"], - strugglebug: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - supersonic: ["1L1"], - swagger: ["1L1"], - sweetscent: ["1L1"], - swift: ["1L1"], - swordsdance: ["1L1"], - tackle: ["1L1"], - tailwind: ["1L1"], - thief: ["1L1"], - thunderpunch: ["1L1"], - toxic: ["1L1"], - uproar: ["1L1"], - uturn: ["1L1"], - }, - encounters: [ - {generation: 2, level: 7}, - {generation: 4, level: 5}, - ], - }, - spinarak: { - learnset: { - absorb: ["1L1"], - acidspray: ["1L1"], - agility: ["1L1"], - attract: ["1L1"], - batonpass: ["1L1"], - bodyslam: ["1L1"], - bounce: ["1L1"], - bugbite: ["1L1"], - bugbuzz: ["1L1"], - captivate: ["1L1"], - confide: ["1L1"], - constrict: ["1L1"], - crosspoison: ["1L1"], - curse: ["1L1"], - dig: ["1L1"], - disable: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - electroweb: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - flash: ["1L1"], - foulplay: ["1L1"], - frustration: ["1L1"], - furyswipes: ["1L1"], - gigadrain: ["1L1"], - hex: ["1L1"], - hiddenpower: ["1L1"], - honeclaws: ["1L1"], - infestation: ["1L1"], - knockoff: ["1L1"], - leechlife: ["1L1"], - lunge: ["1L1"], - megahorn: ["1L1"], - mimic: ["1L1"], - naturalgift: ["1L1"], - nightshade: ["1L1"], - nightslash: ["1L1"], - pinmissile: ["1L1"], - poisonjab: ["1L1"], - poisonsting: ["1L1"], - pounce: ["1L1"], - protect: ["1L1"], - psybeam: ["1L1"], - psychic: ["1L1"], - pursuit: ["1L1"], - ragepowder: ["1L1"], - refresh: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - round: ["1L1"], - scaryface: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - shadowsneak: ["1L1"], - signalbeam: ["1L1"], - skittersmack: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - sludgewave: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - sonicboom: ["1L1"], - spiderweb: ["1L1"], - spite: ["1L1"], - stickyweb: ["1L1"], - stringshot: ["1L1"], - strugglebug: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - toxic: ["1L1"], - toxicspikes: ["1L1"], - toxicthread: ["1L1"], - trailblaze: ["1L1"], - twineedle: ["1L1"], - venoshock: ["1L1"], - xscissor: ["1L1"], - }, - eventData: [ - {generation: 3, level: 14, moves: ["1L1"]}, - ], - encounters: [ - {generation: 2, level: 3}, - ], - }, - ariados: { - learnset: { - absorb: ["1L1"], - acidspray: ["1L1"], - agility: ["1L1"], - attract: ["1L1"], - batonpass: ["1L1"], - bodyslam: ["1L1"], - bounce: ["1L1"], - bugbite: ["1L1"], - bugbuzz: ["1L1"], - captivate: ["1L1"], - confide: ["1L1"], - constrict: ["1L1"], - crosspoison: ["1L1"], - curse: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - electroweb: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fellstinger: ["1L1"], - flash: ["1L1"], - focusenergy: ["1L1"], - foulplay: ["1L1"], - frustration: ["1L1"], - furyswipes: ["1L1"], - gigadrain: ["1L1"], - gigaimpact: ["1L1"], - hex: ["1L1"], - hiddenpower: ["1L1"], - honeclaws: ["1L1"], - hyperbeam: ["1L1"], - infestation: ["1L1"], - knockoff: ["1L1"], - leechlife: ["1L1"], - lunge: ["1L1"], - mimic: ["1L1"], - naturalgift: ["1L1"], - nightshade: ["1L1"], - pinmissile: ["1L1"], - poisonjab: ["1L1"], - poisonsting: ["1L1"], - pounce: ["1L1"], - protect: ["1L1"], - psychic: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - round: ["1L1"], - scaryface: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - shadowsneak: ["1L1"], - signalbeam: ["1L1"], - skittersmack: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - sludgewave: ["1L1"], - smartstrike: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - spiderweb: ["1L1"], - spite: ["1L1"], - stickyweb: ["1L1"], - stompingtantrum: ["1L1"], - stringshot: ["1L1"], - strugglebug: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swordsdance: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - throatchop: ["1L1"], - toxic: ["1L1"], - toxicspikes: ["1L1"], - toxicthread: ["1L1"], - trailblaze: ["1L1"], - venomdrench: ["1L1"], - venoshock: ["1L1"], - xscissor: ["1L1"], - }, - eventData: [ - {generation: 9, level: 65, gender: "M", nature: "Hardy", abilities: ["1L1"], ivs: {hp: 20, atk: 20, def: 20, spa: 20, spd: 20, spe: 20}, moves: ["1L1"]}, - ], - encounters: [ - {generation: 2, level: 7}, - {generation: 4, level: 5}, - {generation: 6, level: 19, maxEggMoves: 1}, - ], - }, - chinchou: { - learnset: { - agility: ["1L1"], - amnesia: ["1L1"], - aquaring: ["1L1"], - attract: ["1L1"], - blizzard: ["1L1"], - bounce: ["1L1"], - brine: ["1L1"], - bubble: ["1L1"], - bubblebeam: ["1L1"], - captivate: ["1L1"], - charge: ["1L1"], - chargebeam: ["1L1"], - chillingwater: ["1L1"], - confide: ["1L1"], - confuseray: ["1L1"], - curse: ["1L1"], - dazzlinggleam: ["1L1"], - discharge: ["1L1"], - dive: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - eerieimpulse: ["1L1"], - electricterrain: ["1L1"], - electroball: ["1L1"], - electroweb: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - flail: ["1L1"], - flash: ["1L1"], - flipturn: ["1L1"], - frustration: ["1L1"], - hail: ["1L1"], - healbell: ["1L1"], - hiddenpower: ["1L1"], - hydropump: ["1L1"], - icebeam: ["1L1"], - icywind: ["1L1"], - iondeluge: ["1L1"], - liquidation: ["1L1"], - mimic: ["1L1"], - mist: ["1L1"], - muddywater: ["1L1"], - naturalgift: ["1L1"], - protect: ["1L1"], - psybeam: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - risingvoltage: ["1L1"], - round: ["1L1"], - scald: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - shockwave: ["1L1"], - signalbeam: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - soak: ["1L1"], - spark: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - supersonic: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - voltswitch: ["1L1"], - waterfall: ["1L1"], - watergun: ["1L1"], - waterpulse: ["1L1"], - whirlpool: ["1L1"], - wildcharge: ["1L1"], - zapcannon: ["1L1"], - }, - }, - lanturn: { - learnset: { - agility: ["1L1"], - amnesia: ["1L1"], - aquaring: ["1L1"], - aquatail: ["1L1"], - attract: ["1L1"], - blizzard: ["1L1"], - bounce: ["1L1"], - brine: ["1L1"], - bubble: ["1L1"], - bubblebeam: ["1L1"], - captivate: ["1L1"], - charge: ["1L1"], - chargebeam: ["1L1"], - chillingwater: ["1L1"], - confide: ["1L1"], - confuseray: ["1L1"], - curse: ["1L1"], - dazzlinggleam: ["1L1"], - discharge: ["1L1"], - dive: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - eerieimpulse: ["1L1"], - electricterrain: ["1L1"], - electroball: ["1L1"], - electroweb: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - flail: ["1L1"], - flash: ["1L1"], - flipturn: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - hail: ["1L1"], - healbell: ["1L1"], - hiddenpower: ["1L1"], - hydropump: ["1L1"], - hyperbeam: ["1L1"], - icebeam: ["1L1"], - icywind: ["1L1"], - iondeluge: ["1L1"], - liquidation: ["1L1"], - mimic: ["1L1"], - muddywater: ["1L1"], - naturalgift: ["1L1"], - protect: ["1L1"], - psybeam: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - risingvoltage: ["1L1"], - round: ["1L1"], - scald: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - shockwave: ["1L1"], - signalbeam: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - spark: ["1L1"], - spitup: ["1L1"], - spotlight: ["1L1"], - stockpile: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - supersonic: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - swallow: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - voltswitch: ["1L1"], - waterfall: ["1L1"], - watergun: ["1L1"], - waterpulse: ["1L1"], - whirlpool: ["1L1"], - wildcharge: ["1L1"], - zapcannon: ["1L1"], - }, - encounters: [ - {generation: 4, level: 20}, - {generation: 6, level: 26, maxEggMoves: 1}, - {generation: 7, level: 10}, - ], - }, - togepi: { - learnset: { - aerialace: ["1L1"], - afteryou: ["1L1"], - ancientpower: ["1L1"], - attract: ["1L1"], - batonpass: ["1L1"], - bestow: ["1L1"], - bodyslam: ["1L1"], - captivate: ["1L1"], - charm: ["1L1"], - confide: ["1L1"], - counter: ["1L1"], - covet: ["1L1"], - curse: ["1L1"], - dazzlinggleam: ["1L1"], - defensecurl: ["1L1"], - detect: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - drainingkiss: ["1L1"], - dreameater: ["1L1"], - echoedvoice: ["1L1"], - encore: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - extrasensory: ["1L1"], - facade: ["1L1"], - fireblast: ["1L1"], - flamethrower: ["1L1"], - flash: ["1L1"], - fling: ["1L1"], - followme: ["1L1"], - foresight: ["1L1"], - frustration: ["1L1"], - futuresight: ["1L1"], - grassknot: ["1L1"], - growl: ["1L1"], - headbutt: ["1L1"], - healbell: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hypervoice: ["1L1"], - incinerate: ["1L1"], - lastresort: ["1L1"], - lifedew: ["1L1"], - lightscreen: ["1L1"], - luckychant: ["1L1"], - magiccoat: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - metronome: ["1L1"], - mimic: ["1L1"], - mirrormove: ["1L1"], - morningsun: ["1L1"], - mudslap: ["1L1"], - mysticalfire: ["1L1"], - nastyplot: ["1L1"], - naturalgift: ["1L1"], - peck: ["1L1"], - playrough: ["1L1"], - pound: ["1L1"], - present: ["1L1"], - protect: ["1L1"], - psychic: ["1L1"], - psychoshift: ["1L1"], - psychup: ["1L1"], - psyshock: ["1L1"], - raindance: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rocksmash: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - secretpower: ["1L1"], - seismictoss: ["1L1"], - shadowball: ["1L1"], - shockwave: ["1L1"], - signalbeam: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - softboiled: ["1L1"], - solarbeam: ["1L1"], - storedpower: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - sweetkiss: ["1L1"], - swift: ["1L1"], - telekinesis: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - triattack: ["1L1"], - trick: ["1L1"], - uproar: ["1L1"], - waterpulse: ["1L1"], - wish: ["1L1"], - workup: ["1L1"], - yawn: ["1L1"], - zapcannon: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 3, level: 20, gender: "F", abilities: ["1L1"], moves: ["1L1"], pokeball: "pokeball"}, - {generation: 3, level: 25, moves: ["1L1"]}, - ], - }, - togetic: { - learnset: { - aerialace: ["1L1"], - afteryou: ["1L1"], - aircutter: ["1L1"], - ancientpower: ["1L1"], - attract: ["1L1"], - batonpass: ["1L1"], - bestow: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - captivate: ["1L1"], - charm: ["1L1"], - confide: ["1L1"], - counter: ["1L1"], - covet: ["1L1"], - curse: ["1L1"], - dazzlinggleam: ["1L1"], - defensecurl: ["1L1"], - defog: ["1L1"], - detect: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - drainingkiss: ["1L1"], - drainpunch: ["1L1"], - dreameater: ["1L1"], - dualwingbeat: ["1L1"], - echoedvoice: ["1L1"], - encore: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fairywind: ["1L1"], - fireblast: ["1L1"], - flamethrower: ["1L1"], - flash: ["1L1"], - fling: ["1L1"], - fly: ["1L1"], - focuspunch: ["1L1"], - followme: ["1L1"], - frustration: ["1L1"], - futuresight: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - growl: ["1L1"], - headbutt: ["1L1"], - healbell: ["1L1"], - heatwave: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - hypervoice: ["1L1"], - imprison: ["1L1"], - incinerate: ["1L1"], - lastresort: ["1L1"], - lifedew: ["1L1"], - lightscreen: ["1L1"], - magicalleaf: ["1L1"], - magiccoat: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - metronome: ["1L1"], - mimic: ["1L1"], - mudslap: ["1L1"], - mysticalfire: ["1L1"], - nastyplot: ["1L1"], - naturalgift: ["1L1"], - ominouswind: ["1L1"], - playrough: ["1L1"], - pound: ["1L1"], - protect: ["1L1"], - psychic: ["1L1"], - psychup: ["1L1"], - psyshock: ["1L1"], - raindance: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - rocksmash: ["1L1"], - rollout: ["1L1"], - roost: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - secretpower: ["1L1"], - seismictoss: ["1L1"], - shadowball: ["1L1"], - shockwave: ["1L1"], - signalbeam: ["1L1"], - silverwind: ["1L1"], - skyattack: ["1L1"], - sleeptalk: ["1L1"], - smartstrike: ["1L1"], - snore: ["1L1"], - softboiled: ["1L1"], - solarbeam: ["1L1"], - steelwing: ["1L1"], - storedpower: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - sweetkiss: ["1L1"], - swift: ["1L1"], - tailwind: ["1L1"], - telekinesis: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - triattack: ["1L1"], - trick: ["1L1"], - twister: ["1L1"], - uproar: ["1L1"], - waterpulse: ["1L1"], - wish: ["1L1"], - workup: ["1L1"], - yawn: ["1L1"], - zapcannon: ["1L1"], - zenheadbutt: ["1L1"], - }, - }, - togekiss: { - learnset: { - aerialace: ["1L1"], - afteryou: ["1L1"], - aircutter: ["1L1"], - airslash: ["1L1"], - allyswitch: ["1L1"], - amnesia: ["1L1"], - ancientpower: ["1L1"], - attract: ["1L1"], - aurasphere: ["1L1"], - batonpass: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - captivate: ["1L1"], - charm: ["1L1"], - confide: ["1L1"], - covet: ["1L1"], - dazzlinggleam: ["1L1"], - defog: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - drainingkiss: ["1L1"], - drainpunch: ["1L1"], - dreameater: ["1L1"], - dualwingbeat: ["1L1"], - echoedvoice: ["1L1"], - encore: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - extremespeed: ["1L1"], - facade: ["1L1"], - fairywind: ["1L1"], - fireblast: ["1L1"], - flamethrower: ["1L1"], - flash: ["1L1"], - fling: ["1L1"], - fly: ["1L1"], - focuspunch: ["1L1"], - followme: ["1L1"], - frustration: ["1L1"], - futuresight: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - growl: ["1L1"], - headbutt: ["1L1"], - healbell: ["1L1"], - heatwave: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - hypervoice: ["1L1"], - imprison: ["1L1"], - incinerate: ["1L1"], - laserfocus: ["1L1"], - lastresort: ["1L1"], - lifedew: ["1L1"], - lightscreen: ["1L1"], - magicalleaf: ["1L1"], - magiccoat: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - metronome: ["1L1"], - mudslap: ["1L1"], - mysticalfire: ["1L1"], - nastyplot: ["1L1"], - naturalgift: ["1L1"], - ominouswind: ["1L1"], - playrough: ["1L1"], - pluck: ["1L1"], - pound: ["1L1"], - present: ["1L1"], - protect: ["1L1"], - psychic: ["1L1"], - psychup: ["1L1"], - psyshock: ["1L1"], - raindance: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - rocksmash: ["1L1"], - rollout: ["1L1"], - roost: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - secretpower: ["1L1"], - shadowball: ["1L1"], - shockwave: ["1L1"], - signalbeam: ["1L1"], - silverwind: ["1L1"], - skyattack: ["1L1"], - sleeptalk: ["1L1"], - smartstrike: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - steelwing: ["1L1"], - storedpower: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - sweetkiss: ["1L1"], - swift: ["1L1"], - tailwind: ["1L1"], - telekinesis: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - triattack: ["1L1"], - trick: ["1L1"], - twister: ["1L1"], - uproar: ["1L1"], - waterpulse: ["1L1"], - wish: ["1L1"], - workup: ["1L1"], - yawn: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 5, level: 10, gender: "M", isHidden: true, moves: ["1L1"]}, - ], - }, - natu: { - learnset: { - aerialace: ["1L1"], - aircutter: ["1L1"], - airslash: ["1L1"], - allyswitch: ["1L1"], - attract: ["1L1"], - batonpass: ["1L1"], - calmmind: ["1L1"], - captivate: ["1L1"], - confide: ["1L1"], - confuseray: ["1L1"], - cosmicpower: ["1L1"], - curse: ["1L1"], - dazzlinggleam: ["1L1"], - detect: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dreameater: ["1L1"], - drillpeck: ["1L1"], - dualwingbeat: ["1L1"], - endure: ["1L1"], - expandingforce: ["1L1"], - facade: ["1L1"], - featherdance: ["1L1"], - feintattack: ["1L1"], - flash: ["1L1"], - frustration: ["1L1"], - futuresight: ["1L1"], - gigadrain: ["1L1"], - grassknot: ["1L1"], - guardswap: ["1L1"], - haze: ["1L1"], - heatwave: ["1L1"], - hiddenpower: ["1L1"], - imprison: ["1L1"], - leer: ["1L1"], - lightscreen: ["1L1"], - luckychant: ["1L1"], - magiccoat: ["1L1"], - magicroom: ["1L1"], - mefirst: ["1L1"], - mimic: ["1L1"], - miracleeye: ["1L1"], - naturalgift: ["1L1"], - nightmare: ["1L1"], - nightshade: ["1L1"], - ominouswind: ["1L1"], - painsplit: ["1L1"], - peck: ["1L1"], - pluck: ["1L1"], - powerswap: ["1L1"], - protect: ["1L1"], - psychic: ["1L1"], - psychoshift: ["1L1"], - psychup: ["1L1"], - psyshock: ["1L1"], - quickattack: ["1L1"], - raindance: ["1L1"], - reflect: ["1L1"], - refresh: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roost: ["1L1"], - round: ["1L1"], - secretpower: ["1L1"], - shadowball: ["1L1"], - signalbeam: ["1L1"], - silverwind: ["1L1"], - simplebeam: ["1L1"], - skillswap: ["1L1"], - skyattack: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - steelwing: ["1L1"], - storedpower: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - synchronoise: ["1L1"], - tailwind: ["1L1"], - telekinesis: ["1L1"], - teleport: ["1L1"], - thief: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - trick: ["1L1"], - trickroom: ["1L1"], - twister: ["1L1"], - uturn: ["1L1"], - wish: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 3, level: 22, moves: ["1L1"]}, - ], - }, - xatu: { - learnset: { - aerialace: ["1L1"], - aircutter: ["1L1"], - airslash: ["1L1"], - allyswitch: ["1L1"], - attract: ["1L1"], - batonpass: ["1L1"], - calmmind: ["1L1"], - captivate: ["1L1"], - confide: ["1L1"], - confuseray: ["1L1"], - cosmicpower: ["1L1"], - curse: ["1L1"], - dazzlinggleam: ["1L1"], - defog: ["1L1"], - detect: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dreameater: ["1L1"], - dualwingbeat: ["1L1"], - endure: ["1L1"], - expandingforce: ["1L1"], - facade: ["1L1"], - flash: ["1L1"], - fly: ["1L1"], - foulplay: ["1L1"], - frustration: ["1L1"], - futuresight: ["1L1"], - gigadrain: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - guardswap: ["1L1"], - heatwave: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - imprison: ["1L1"], - laserfocus: ["1L1"], - leer: ["1L1"], - lightscreen: ["1L1"], - luckychant: ["1L1"], - magiccoat: ["1L1"], - magicroom: ["1L1"], - mefirst: ["1L1"], - mimic: ["1L1"], - miracleeye: ["1L1"], - naturalgift: ["1L1"], - nightmare: ["1L1"], - nightshade: ["1L1"], - ominouswind: ["1L1"], - painsplit: ["1L1"], - peck: ["1L1"], - pluck: ["1L1"], - powerswap: ["1L1"], - protect: ["1L1"], - psychic: ["1L1"], - psychoshift: ["1L1"], - psychup: ["1L1"], - psyshock: ["1L1"], - raindance: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roost: ["1L1"], - round: ["1L1"], - secretpower: ["1L1"], - shadowball: ["1L1"], - signalbeam: ["1L1"], - silverwind: ["1L1"], - skillswap: ["1L1"], - skyattack: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - steelwing: ["1L1"], - storedpower: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - tailwind: ["1L1"], - telekinesis: ["1L1"], - teleport: ["1L1"], - thief: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - trick: ["1L1"], - trickroom: ["1L1"], - twister: ["1L1"], - uturn: ["1L1"], - wish: ["1L1"], - zenheadbutt: ["1L1"], - }, - encounters: [ - {generation: 2, level: 15}, - {generation: 4, level: 16, gender: "M", nature: "Modest", ivs: {hp: 15, atk: 20, def: 15, spa: 20, spd: 20, spe: 20}, abilities: ["1L1"], pokeball: "pokeball"}, - {generation: 6, level: 24, maxEggMoves: 1}, - {generation: 7, level: 21}, - ], - }, - mareep: { - learnset: { - afteryou: ["1L1"], - agility: ["1L1"], - attract: ["1L1"], - bodyslam: ["1L1"], - captivate: ["1L1"], - charge: ["1L1"], - chargebeam: ["1L1"], - confide: ["1L1"], - confuseray: ["1L1"], - cottonguard: ["1L1"], - cottonspore: ["1L1"], - curse: ["1L1"], - dazzlinggleam: ["1L1"], - defensecurl: ["1L1"], - dig: ["1L1"], - discharge: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - echoedvoice: ["1L1"], - eerieimpulse: ["1L1"], - electricterrain: ["1L1"], - electroball: ["1L1"], - electroweb: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - flash: ["1L1"], - flatter: ["1L1"], - frustration: ["1L1"], - growl: ["1L1"], - headbutt: ["1L1"], - healbell: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - holdback: ["1L1"], - irontail: ["1L1"], - lightscreen: ["1L1"], - magnetrise: ["1L1"], - mimic: ["1L1"], - naturalgift: ["1L1"], - odorsleuth: ["1L1"], - powergem: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - sandattack: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - shockwave: ["1L1"], - signalbeam: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thundershock: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - voltswitch: ["1L1"], - wildcharge: ["1L1"], - zapcannon: ["1L1"], - }, - eventData: [ - {generation: 3, level: 37, gender: "F", moves: ["1L1"], pokeball: "pokeball"}, - {generation: 3, level: 10, gender: "M", moves: ["1L1"], pokeball: "pokeball"}, - {generation: 3, level: 17, moves: ["1L1"]}, - {generation: 6, level: 10, moves: ["1L1"], pokeball: "cherishball"}, - ], - }, - flaaffy: { - learnset: { - afteryou: ["1L1"], - agility: ["1L1"], - attract: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - captivate: ["1L1"], - charge: ["1L1"], - chargebeam: ["1L1"], - confide: ["1L1"], - confuseray: ["1L1"], - cottonguard: ["1L1"], - cottonspore: ["1L1"], - counter: ["1L1"], - curse: ["1L1"], - dazzlinggleam: ["1L1"], - defensecurl: ["1L1"], - dig: ["1L1"], - discharge: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dynamicpunch: ["1L1"], - echoedvoice: ["1L1"], - eerieimpulse: ["1L1"], - electricterrain: ["1L1"], - electroball: ["1L1"], - electroweb: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - firepunch: ["1L1"], - flash: ["1L1"], - fling: ["1L1"], - focuspunch: ["1L1"], - frustration: ["1L1"], - growl: ["1L1"], - headbutt: ["1L1"], - healbell: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - icepunch: ["1L1"], - irontail: ["1L1"], - lightscreen: ["1L1"], - lowkick: ["1L1"], - magnetrise: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - mimic: ["1L1"], - naturalgift: ["1L1"], - powergem: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roar: ["1L1"], - rocksmash: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - secretpower: ["1L1"], - seismictoss: ["1L1"], - shockwave: ["1L1"], - signalbeam: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderpunch: ["1L1"], - thundershock: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - voltswitch: ["1L1"], - wildcharge: ["1L1"], - zapcannon: ["1L1"], - }, - encounters: [ - {generation: 7, level: 11, pokeball: "pokeball"}, - ], - }, - ampharos: { - learnset: { - afteryou: ["1L1"], - agility: ["1L1"], - attract: ["1L1"], - bodyslam: ["1L1"], - breakingswipe: ["1L1"], - brickbreak: ["1L1"], - brutalswing: ["1L1"], - bulldoze: ["1L1"], - captivate: ["1L1"], - charge: ["1L1"], - chargebeam: ["1L1"], - confide: ["1L1"], - confuseray: ["1L1"], - cottonguard: ["1L1"], - cottonspore: ["1L1"], - counter: ["1L1"], - curse: ["1L1"], - dazzlinggleam: ["1L1"], - defensecurl: ["1L1"], - dig: ["1L1"], - discharge: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dragoncheer: ["1L1"], - dragonpulse: ["1L1"], - dragontail: ["1L1"], - dynamicpunch: ["1L1"], - echoedvoice: ["1L1"], - eerieimpulse: ["1L1"], - electricterrain: ["1L1"], - electroball: ["1L1"], - electroweb: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - firepunch: ["1L1"], - flash: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - focuspunch: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - growl: ["1L1"], - headbutt: ["1L1"], - healbell: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - icepunch: ["1L1"], - iondeluge: ["1L1"], - irontail: ["1L1"], - laserfocus: ["1L1"], - lightscreen: ["1L1"], - lowkick: ["1L1"], - magneticflux: ["1L1"], - magnetrise: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - meteorbeam: ["1L1"], - mimic: ["1L1"], - naturalgift: ["1L1"], - outrage: ["1L1"], - powergem: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roar: ["1L1"], - rockclimb: ["1L1"], - rocksmash: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - secretpower: ["1L1"], - seismictoss: ["1L1"], - shockwave: ["1L1"], - signalbeam: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - stompingtantrum: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - supercellslam: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderpunch: ["1L1"], - thundershock: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - voltswitch: ["1L1"], - wildcharge: ["1L1"], - zapcannon: ["1L1"], - }, - }, - azurill: { - learnset: { - alluringvoice: ["1L1"], - aquajet: ["1L1"], - attract: ["1L1"], - bellydrum: ["1L1"], - blizzard: ["1L1"], - bodyslam: ["1L1"], - bounce: ["1L1"], - brutalswing: ["1L1"], - bubble: ["1L1"], - bubblebeam: ["1L1"], - camouflage: ["1L1"], - captivate: ["1L1"], - charm: ["1L1"], - confide: ["1L1"], - copycat: ["1L1"], - covet: ["1L1"], - defensecurl: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - drainingkiss: ["1L1"], - encore: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - faketears: ["1L1"], - frustration: ["1L1"], - hail: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hypervoice: ["1L1"], - icebeam: ["1L1"], - icywind: ["1L1"], - irontail: ["1L1"], - knockoff: ["1L1"], - lightscreen: ["1L1"], - mimic: ["1L1"], - muddywater: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - perishsong: ["1L1"], - present: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - refresh: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - scald: ["1L1"], - secretpower: ["1L1"], - sing: ["1L1"], - slam: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - soak: ["1L1"], - splash: ["1L1"], - substitute: ["1L1"], - supersonic: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - tailwhip: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - tickle: ["1L1"], - toxic: ["1L1"], - uproar: ["1L1"], - waterfall: ["1L1"], - watergun: ["1L1"], - waterpulse: ["1L1"], - watersport: ["1L1"], - whirlpool: ["1L1"], - workup: ["1L1"], - }, - }, - marill: { - learnset: { - alluringvoice: ["1L1"], - amnesia: ["1L1"], - aquajet: ["1L1"], - aquaring: ["1L1"], - aquatail: ["1L1"], - attract: ["1L1"], - bellydrum: ["1L1"], - blizzard: ["1L1"], - bodyslam: ["1L1"], - bounce: ["1L1"], - brickbreak: ["1L1"], - brutalswing: ["1L1"], - bubble: ["1L1"], - bubblebeam: ["1L1"], - bulldoze: ["1L1"], - camouflage: ["1L1"], - captivate: ["1L1"], - charm: ["1L1"], - chillingwater: ["1L1"], - confide: ["1L1"], - copycat: ["1L1"], - covet: ["1L1"], - curse: ["1L1"], - defensecurl: ["1L1"], - dig: ["1L1"], - disarmingvoice: ["1L1"], - dive: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - drainingkiss: ["1L1"], - dynamicpunch: ["1L1"], - encore: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - faketears: ["1L1"], - fling: ["1L1"], - focuspunch: ["1L1"], - foresight: ["1L1"], - frustration: ["1L1"], - futuresight: ["1L1"], - grassknot: ["1L1"], - hail: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hydropump: ["1L1"], - hypervoice: ["1L1"], - icebeam: ["1L1"], - icepunch: ["1L1"], - icespinner: ["1L1"], - icywind: ["1L1"], - irontail: ["1L1"], - knockoff: ["1L1"], - lightscreen: ["1L1"], - liquidation: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - metronome: ["1L1"], - mimic: ["1L1"], - mistyexplosion: ["1L1"], - mistyterrain: ["1L1"], - muddywater: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - perishsong: ["1L1"], - playrough: ["1L1"], - poweruppunch: ["1L1"], - present: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - refresh: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rocksmash: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - scald: ["1L1"], - secretpower: ["1L1"], - seismictoss: ["1L1"], - sing: ["1L1"], - slam: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - snowscape: ["1L1"], - soak: ["1L1"], - steelroller: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - superpower: ["1L1"], - supersonic: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - tackle: ["1L1"], - tailwhip: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - tickle: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - uproar: ["1L1"], - waterfall: ["1L1"], - watergun: ["1L1"], - waterpulse: ["1L1"], - watersport: ["1L1"], - whirlpool: ["1L1"], - workup: ["1L1"], - }, - }, - azumarill: { - learnset: { - alluringvoice: ["1L1"], - amnesia: ["1L1"], - aquaring: ["1L1"], - aquatail: ["1L1"], - attract: ["1L1"], - blizzard: ["1L1"], - bodyslam: ["1L1"], - bounce: ["1L1"], - brickbreak: ["1L1"], - brutalswing: ["1L1"], - bubble: ["1L1"], - bubblebeam: ["1L1"], - bulldoze: ["1L1"], - captivate: ["1L1"], - charm: ["1L1"], - chillingwater: ["1L1"], - confide: ["1L1"], - covet: ["1L1"], - curse: ["1L1"], - defensecurl: ["1L1"], - dig: ["1L1"], - disarmingvoice: ["1L1"], - dive: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - drainingkiss: ["1L1"], - dynamicpunch: ["1L1"], - encore: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - faketears: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - focuspunch: ["1L1"], - frustration: ["1L1"], - futuresight: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - hail: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hydropump: ["1L1"], - hyperbeam: ["1L1"], - hypervoice: ["1L1"], - icebeam: ["1L1"], - icepunch: ["1L1"], - icespinner: ["1L1"], - icywind: ["1L1"], - irontail: ["1L1"], - knockoff: ["1L1"], - lightscreen: ["1L1"], - liquidation: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - metronome: ["1L1"], - mimic: ["1L1"], - mistyexplosion: ["1L1"], - mistyterrain: ["1L1"], - muddywater: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - playrough: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rocksmash: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - scald: ["1L1"], - secretpower: ["1L1"], - seismictoss: ["1L1"], - slam: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - snowscape: ["1L1"], - steelroller: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - superpower: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - tackle: ["1L1"], - tailwhip: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - uproar: ["1L1"], - waterfall: ["1L1"], - watergun: ["1L1"], - waterpulse: ["1L1"], - watersport: ["1L1"], - whirlpool: ["1L1"], - workup: ["1L1"], - }, - encounters: [ - {generation: 5, level: 5}, - {generation: 6, level: 16, maxEggMoves: 1}, - ], - }, - bonsly: { - learnset: { - afteryou: ["1L1"], - attract: ["1L1"], - block: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - bulldoze: ["1L1"], - calmmind: ["1L1"], - captivate: ["1L1"], - confide: ["1L1"], - copycat: ["1L1"], - counter: ["1L1"], - covet: ["1L1"], - curse: ["1L1"], - defensecurl: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - endure: ["1L1"], - explosion: ["1L1"], - facade: ["1L1"], - faketears: ["1L1"], - feintattack: ["1L1"], - flail: ["1L1"], - foulplay: ["1L1"], - frustration: ["1L1"], - grassknot: ["1L1"], - harden: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - lowkick: ["1L1"], - mimic: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - naturepower: ["1L1"], - powergem: ["1L1"], - protect: ["1L1"], - psychup: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rockblast: ["1L1"], - rockpolish: ["1L1"], - rockslide: ["1L1"], - rockthrow: ["1L1"], - rocktomb: ["1L1"], - roleplay: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - sandstorm: ["1L1"], - sandtomb: ["1L1"], - secretpower: ["1L1"], - selfdestruct: ["1L1"], - slam: ["1L1"], - sleeptalk: ["1L1"], - smackdown: ["1L1"], - snore: ["1L1"], - spikes: ["1L1"], - stealthrock: ["1L1"], - stompingtantrum: ["1L1"], - stoneedge: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - takedown: ["1L1"], - tearfullook: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - uproar: ["1L1"], - }, - }, - sudowoodo: { - learnset: { - afteryou: ["1L1"], - attract: ["1L1"], - block: ["1L1"], - bodypress: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - bulldoze: ["1L1"], - calmmind: ["1L1"], - captivate: ["1L1"], - confide: ["1L1"], - copycat: ["1L1"], - counter: ["1L1"], - covet: ["1L1"], - curse: ["1L1"], - defensecurl: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - drainpunch: ["1L1"], - dynamicpunch: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - explosion: ["1L1"], - facade: ["1L1"], - faketears: ["1L1"], - feintattack: ["1L1"], - firepunch: ["1L1"], - flail: ["1L1"], - fling: ["1L1"], - focuspunch: ["1L1"], - foulplay: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - hammerarm: ["1L1"], - harden: ["1L1"], - headbutt: ["1L1"], - headsmash: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - highhorsepower: ["1L1"], - hyperbeam: ["1L1"], - icepunch: ["1L1"], - irondefense: ["1L1"], - lowkick: ["1L1"], - lowsweep: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - meteorbeam: ["1L1"], - mimic: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - naturepower: ["1L1"], - powergem: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - psychup: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rockblast: ["1L1"], - rockpolish: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rockthrow: ["1L1"], - rocktomb: ["1L1"], - roleplay: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - sandstorm: ["1L1"], - sandtomb: ["1L1"], - secretpower: ["1L1"], - seismictoss: ["1L1"], - selfdestruct: ["1L1"], - slam: ["1L1"], - sleeptalk: ["1L1"], - smackdown: ["1L1"], - snore: ["1L1"], - spikes: ["1L1"], - stealthrock: ["1L1"], - stompingtantrum: ["1L1"], - stoneedge: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - tearfullook: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thunderpunch: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - uproar: ["1L1"], - woodhammer: ["1L1"], - }, - }, - hoppip: { - learnset: { - absorb: ["1L1"], - acrobatics: ["1L1"], - aerialace: ["1L1"], - amnesia: ["1L1"], - aromatherapy: ["1L1"], - attract: ["1L1"], - batonpass: ["1L1"], - bounce: ["1L1"], - bulletseed: ["1L1"], - captivate: ["1L1"], - charm: ["1L1"], - confide: ["1L1"], - confusion: ["1L1"], - cottonguard: ["1L1"], - cottonspore: ["1L1"], - curse: ["1L1"], - dazzlinggleam: ["1L1"], - defensecurl: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - encore: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - fairywind: ["1L1"], - flash: ["1L1"], - fling: ["1L1"], - frustration: ["1L1"], - gigadrain: ["1L1"], - grassknot: ["1L1"], - grassyterrain: ["1L1"], - growl: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - infestation: ["1L1"], - leafstorm: ["1L1"], - leechseed: ["1L1"], - lightscreen: ["1L1"], - lunge: ["1L1"], - magicalleaf: ["1L1"], - megadrain: ["1L1"], - memento: ["1L1"], - mimic: ["1L1"], - naturalgift: ["1L1"], - payday: ["1L1"], - poisonpowder: ["1L1"], - pollenpuff: ["1L1"], - protect: ["1L1"], - psychup: ["1L1"], - ragepowder: ["1L1"], - raindance: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - round: ["1L1"], - secretpower: ["1L1"], - seedbomb: ["1L1"], - silverwind: ["1L1"], - sleeppowder: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - splash: ["1L1"], - strengthsap: ["1L1"], - stunspore: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - sweetscent: ["1L1"], - switcheroo: ["1L1"], - swordsdance: ["1L1"], - synthesis: ["1L1"], - tackle: ["1L1"], - tailwhip: ["1L1"], - tailwind: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - uturn: ["1L1"], - worryseed: ["1L1"], - }, - encounters: [ - {generation: 2, level: 3}, - ], - }, - skiploom: { - learnset: { - absorb: ["1L1"], - acrobatics: ["1L1"], - aerialace: ["1L1"], - attract: ["1L1"], - batonpass: ["1L1"], - bounce: ["1L1"], - bulletseed: ["1L1"], - captivate: ["1L1"], - charm: ["1L1"], - confide: ["1L1"], - cottonspore: ["1L1"], - curse: ["1L1"], - dazzlinggleam: ["1L1"], - defensecurl: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - encore: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - fairywind: ["1L1"], - flash: ["1L1"], - fling: ["1L1"], - frustration: ["1L1"], - gigadrain: ["1L1"], - grassknot: ["1L1"], - grassyterrain: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - infestation: ["1L1"], - leafstorm: ["1L1"], - leechseed: ["1L1"], - lightscreen: ["1L1"], - lunge: ["1L1"], - magicalleaf: ["1L1"], - megadrain: ["1L1"], - memento: ["1L1"], - mimic: ["1L1"], - naturalgift: ["1L1"], - poisonpowder: ["1L1"], - pollenpuff: ["1L1"], - protect: ["1L1"], - psychup: ["1L1"], - ragepowder: ["1L1"], - raindance: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - round: ["1L1"], - secretpower: ["1L1"], - seedbomb: ["1L1"], - silverwind: ["1L1"], - sleeppowder: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - splash: ["1L1"], - stunspore: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - sweetscent: ["1L1"], - swordsdance: ["1L1"], - synthesis: ["1L1"], - tackle: ["1L1"], - tailwhip: ["1L1"], - tailwind: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - uturn: ["1L1"], - worryseed: ["1L1"], - }, - encounters: [ - {generation: 4, level: 12}, - ], - }, - jumpluff: { - learnset: { - absorb: ["1L1"], - acrobatics: ["1L1"], - aerialace: ["1L1"], - attract: ["1L1"], - batonpass: ["1L1"], - bounce: ["1L1"], - bulletseed: ["1L1"], - captivate: ["1L1"], - charm: ["1L1"], - confide: ["1L1"], - cottonspore: ["1L1"], - curse: ["1L1"], - dazzlinggleam: ["1L1"], - defensecurl: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - encore: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - fairywind: ["1L1"], - falseswipe: ["1L1"], - flash: ["1L1"], - fling: ["1L1"], - frustration: ["1L1"], - gigadrain: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - grassyterrain: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - infestation: ["1L1"], - leafstorm: ["1L1"], - leechseed: ["1L1"], - lightscreen: ["1L1"], - lunge: ["1L1"], - magicalleaf: ["1L1"], - megadrain: ["1L1"], - memento: ["1L1"], - mimic: ["1L1"], - naturalgift: ["1L1"], - poisonpowder: ["1L1"], - pollenpuff: ["1L1"], - protect: ["1L1"], - psychup: ["1L1"], - ragepowder: ["1L1"], - raindance: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - round: ["1L1"], - secretpower: ["1L1"], - seedbomb: ["1L1"], - silverwind: ["1L1"], - sleeppowder: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - splash: ["1L1"], - stunspore: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - sweetscent: ["1L1"], - swordsdance: ["1L1"], - synthesis: ["1L1"], - tackle: ["1L1"], - tailwhip: ["1L1"], - tailwind: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - uturn: ["1L1"], - worryseed: ["1L1"], - }, - eventData: [ - {generation: 5, level: 27, gender: "M", isHidden: true, moves: ["1L1"]}, - ], - }, - aipom: { - learnset: { - acrobatics: ["1L1"], - aerialace: ["1L1"], - agility: ["1L1"], - astonish: ["1L1"], - attract: ["1L1"], - batonpass: ["1L1"], - beatup: ["1L1"], - bodyslam: ["1L1"], - bounce: ["1L1"], - brickbreak: ["1L1"], - captivate: ["1L1"], - chillingwater: ["1L1"], - confide: ["1L1"], - counter: ["1L1"], - covet: ["1L1"], - curse: ["1L1"], - cut: ["1L1"], - defensecurl: ["1L1"], - detect: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doublehit: ["1L1"], - doubleslap: ["1L1"], - doubleteam: ["1L1"], - dreameater: ["1L1"], - dynamicpunch: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fakeout: ["1L1"], - firepunch: ["1L1"], - fling: ["1L1"], - focuspunch: ["1L1"], - foulplay: ["1L1"], - frustration: ["1L1"], - furycutter: ["1L1"], - furyswipes: ["1L1"], - grassknot: ["1L1"], - gunkshot: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - honeclaws: ["1L1"], - icepunch: ["1L1"], - irontail: ["1L1"], - knockoff: ["1L1"], - lastresort: ["1L1"], - lowkick: ["1L1"], - lowsweep: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - metronome: ["1L1"], - mimic: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - nastyplot: ["1L1"], - naturalgift: ["1L1"], - nightmare: ["1L1"], - payback: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - pursuit: ["1L1"], - quickguard: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - revenge: ["1L1"], - rocksmash: ["1L1"], - roleplay: ["1L1"], - round: ["1L1"], - sandattack: ["1L1"], - scratch: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - seedbomb: ["1L1"], - seismictoss: ["1L1"], - shadowball: ["1L1"], - shadowclaw: ["1L1"], - shockwave: ["1L1"], - slam: ["1L1"], - sleeptalk: ["1L1"], - smackdown: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - spite: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - switcheroo: ["1L1"], - tailslap: ["1L1"], - tailwhip: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - throatchop: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderpunch: ["1L1"], - thunderwave: ["1L1"], - tickle: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - upperhand: ["1L1"], - uproar: ["1L1"], - uturn: ["1L1"], - waterpulse: ["1L1"], - workup: ["1L1"], - zapcannon: ["1L1"], - }, - eventData: [ - {generation: 3, level: 10, gender: "M", moves: ["1L1"], pokeball: "pokeball"}, - ], - }, - ambipom: { - learnset: { - acrobatics: ["1L1"], - aerialace: ["1L1"], - agility: ["1L1"], - astonish: ["1L1"], - attract: ["1L1"], - batonpass: ["1L1"], - bounce: ["1L1"], - brickbreak: ["1L1"], - captivate: ["1L1"], - chillingwater: ["1L1"], - confide: ["1L1"], - covet: ["1L1"], - cut: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doublehit: ["1L1"], - doubleteam: ["1L1"], - dreameater: ["1L1"], - dualchop: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - firepunch: ["1L1"], - fling: ["1L1"], - focuspunch: ["1L1"], - foulplay: ["1L1"], - frustration: ["1L1"], - furycutter: ["1L1"], - furyswipes: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - gunkshot: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - honeclaws: ["1L1"], - hyperbeam: ["1L1"], - icepunch: ["1L1"], - irontail: ["1L1"], - knockoff: ["1L1"], - laserfocus: ["1L1"], - lastresort: ["1L1"], - lowkick: ["1L1"], - lowsweep: ["1L1"], - metronome: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - nastyplot: ["1L1"], - naturalgift: ["1L1"], - payback: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - rocksmash: ["1L1"], - roleplay: ["1L1"], - round: ["1L1"], - sandattack: ["1L1"], - scratch: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - seedbomb: ["1L1"], - shadowball: ["1L1"], - shadowclaw: ["1L1"], - shockwave: ["1L1"], - sleeptalk: ["1L1"], - smackdown: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - spite: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - tailwhip: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - throatchop: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderpunch: ["1L1"], - thunderwave: ["1L1"], - tickle: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - tripleaxel: ["1L1"], - upperhand: ["1L1"], - uproar: ["1L1"], - uturn: ["1L1"], - waterpulse: ["1L1"], - workup: ["1L1"], - }, - }, - sunkern: { - learnset: { - absorb: ["1L1"], - afteryou: ["1L1"], - attract: ["1L1"], - bide: ["1L1"], - bulletseed: ["1L1"], - captivate: ["1L1"], - confide: ["1L1"], - curse: ["1L1"], - cut: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - earthpower: ["1L1"], - encore: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - flash: ["1L1"], - frustration: ["1L1"], - gigadrain: ["1L1"], - grassknot: ["1L1"], - grasswhistle: ["1L1"], - grassyterrain: ["1L1"], - growth: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - ingrain: ["1L1"], - leafstorm: ["1L1"], - leechseed: ["1L1"], - lightscreen: ["1L1"], - magicalleaf: ["1L1"], - megadrain: ["1L1"], - mimic: ["1L1"], - morningsun: ["1L1"], - naturalgift: ["1L1"], - naturepower: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - razorleaf: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - secretpower: ["1L1"], - seedbomb: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - sweetscent: ["1L1"], - swordsdance: ["1L1"], - synthesis: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - uproar: ["1L1"], - weatherball: ["1L1"], - worryseed: ["1L1"], - }, - eventData: [ - {generation: 3, level: 10, gender: "M", abilities: ["1L1"], moves: ["1L1"], pokeball: "pokeball"}, - ], - }, - sunflora: { - learnset: { - absorb: ["1L1"], - afteryou: ["1L1"], - attract: ["1L1"], - bulletseed: ["1L1"], - captivate: ["1L1"], - confide: ["1L1"], - curse: ["1L1"], - cut: ["1L1"], - dazzlinggleam: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - earthpower: ["1L1"], - encore: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - flash: ["1L1"], - flowershield: ["1L1"], - frustration: ["1L1"], - gigadrain: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - grasswhistle: ["1L1"], - grassyglide: ["1L1"], - grassyterrain: ["1L1"], - growth: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - ingrain: ["1L1"], - leafstorm: ["1L1"], - leechseed: ["1L1"], - lightscreen: ["1L1"], - magicalleaf: ["1L1"], - megadrain: ["1L1"], - mimic: ["1L1"], - naturalgift: ["1L1"], - naturepower: ["1L1"], - petalblizzard: ["1L1"], - petaldance: ["1L1"], - pound: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - razorleaf: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - secretpower: ["1L1"], - seedbomb: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - sweetscent: ["1L1"], - swordsdance: ["1L1"], - synthesis: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - uproar: ["1L1"], - weatherball: ["1L1"], - worryseed: ["1L1"], - }, - }, - yanma: { - learnset: { - aerialace: ["1L1"], - aircutter: ["1L1"], - airslash: ["1L1"], - ancientpower: ["1L1"], - attract: ["1L1"], - bugbite: ["1L1"], - bugbuzz: ["1L1"], - captivate: ["1L1"], - confide: ["1L1"], - curse: ["1L1"], - defog: ["1L1"], - detect: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dreameater: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - feint: ["1L1"], - feintattack: ["1L1"], - flash: ["1L1"], - foresight: ["1L1"], - frustration: ["1L1"], - gigadrain: ["1L1"], - headbutt: ["1L1"], - hiddenpower: ["1L1"], - hypnosis: ["1L1"], - leechlife: ["1L1"], - lunge: ["1L1"], - mimic: ["1L1"], - naturalgift: ["1L1"], - ominouswind: ["1L1"], - pounce: ["1L1"], - protect: ["1L1"], - psychic: ["1L1"], - psychicnoise: ["1L1"], - psychup: ["1L1"], - pursuit: ["1L1"], - quickattack: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - reversal: ["1L1"], - roost: ["1L1"], - round: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - shadowball: ["1L1"], - signalbeam: ["1L1"], - silverwind: ["1L1"], - skittersmack: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - sonicboom: ["1L1"], - steelwing: ["1L1"], - stringshot: ["1L1"], - strugglebug: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - supersonic: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - swordsdance: ["1L1"], - tackle: ["1L1"], - tailwind: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - toxic: ["1L1"], - uproar: ["1L1"], - uturn: ["1L1"], - whirlwind: ["1L1"], - wingattack: ["1L1"], - }, - }, - yanmega: { - learnset: { - aerialace: ["1L1"], - aircutter: ["1L1"], - airslash: ["1L1"], - ancientpower: ["1L1"], - attract: ["1L1"], - bugbite: ["1L1"], - bugbuzz: ["1L1"], - captivate: ["1L1"], - confide: ["1L1"], - crunch: ["1L1"], - defog: ["1L1"], - detect: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dreameater: ["1L1"], - dualwingbeat: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - feint: ["1L1"], - flash: ["1L1"], - foresight: ["1L1"], - frustration: ["1L1"], - gigadrain: ["1L1"], - gigaimpact: ["1L1"], - headbutt: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - hypnosis: ["1L1"], - laserfocus: ["1L1"], - leechlife: ["1L1"], - lunge: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - nightslash: ["1L1"], - ominouswind: ["1L1"], - pounce: ["1L1"], - protect: ["1L1"], - psychic: ["1L1"], - psychicnoise: ["1L1"], - psychup: ["1L1"], - pursuit: ["1L1"], - quickattack: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - reversal: ["1L1"], - roost: ["1L1"], - round: ["1L1"], - scaryface: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - shadowball: ["1L1"], - signalbeam: ["1L1"], - silverwind: ["1L1"], - skittersmack: ["1L1"], - slash: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - sonicboom: ["1L1"], - steelwing: ["1L1"], - stringshot: ["1L1"], - strugglebug: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - supersonic: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - swordsdance: ["1L1"], - tackle: ["1L1"], - tailwind: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - toxic: ["1L1"], - uproar: ["1L1"], - uturn: ["1L1"], - }, - }, - wooper: { - learnset: { - acidspray: ["1L1"], - afteryou: ["1L1"], - amnesia: ["1L1"], - ancientpower: ["1L1"], - aquatail: ["1L1"], - attract: ["1L1"], - avalanche: ["1L1"], - blizzard: ["1L1"], - bodyslam: ["1L1"], - bulldoze: ["1L1"], - captivate: ["1L1"], - chillingwater: ["1L1"], - confide: ["1L1"], - counter: ["1L1"], - curse: ["1L1"], - defensecurl: ["1L1"], - dig: ["1L1"], - dive: ["1L1"], - doubleedge: ["1L1"], - doublekick: ["1L1"], - doubleteam: ["1L1"], - dynamicpunch: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - eerieimpulse: ["1L1"], - encore: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - flash: ["1L1"], - frustration: ["1L1"], - guardswap: ["1L1"], - hail: ["1L1"], - haze: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hydropump: ["1L1"], - icebeam: ["1L1"], - icepunch: ["1L1"], - icywind: ["1L1"], - infestation: ["1L1"], - irontail: ["1L1"], - liquidation: ["1L1"], - mimic: ["1L1"], - mist: ["1L1"], - mudbomb: ["1L1"], - muddywater: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - mudsport: ["1L1"], - naturalgift: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - recover: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - sandstorm: ["1L1"], - scald: ["1L1"], - secretpower: ["1L1"], - slam: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - sludgewave: ["1L1"], - snore: ["1L1"], - snowscape: ["1L1"], - spikes: ["1L1"], - spitup: ["1L1"], - stealthrock: ["1L1"], - stockpile: ["1L1"], - stompingtantrum: ["1L1"], - stoneedge: ["1L1"], - substitute: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - swallow: ["1L1"], - tailwhip: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - waterfall: ["1L1"], - watergun: ["1L1"], - waterpulse: ["1L1"], - whirlpool: ["1L1"], - yawn: ["1L1"], - }, - encounters: [ - {generation: 2, level: 4}, - ], - }, - wooperpaldea: { - learnset: { - acidspray: ["1L1"], - afteryou: ["1L1"], - amnesia: ["1L1"], - ancientpower: ["1L1"], - bodypress: ["1L1"], - bodyslam: ["1L1"], - bulldoze: ["1L1"], - chillingwater: ["1L1"], - counter: ["1L1"], - curse: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doublekick: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - gunkshot: ["1L1"], - haze: ["1L1"], - helpinghand: ["1L1"], - hydropump: ["1L1"], - liquidation: ["1L1"], - lowkick: ["1L1"], - mist: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - poisonjab: ["1L1"], - poisontail: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - recover: ["1L1"], - rest: ["1L1"], - rockslide: ["1L1"], - rocktomb: ["1L1"], - sandstorm: ["1L1"], - slam: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - sludgewave: ["1L1"], - spikes: ["1L1"], - spitup: ["1L1"], - stealthrock: ["1L1"], - stockpile: ["1L1"], - stompingtantrum: ["1L1"], - stoneedge: ["1L1"], - substitute: ["1L1"], - surf: ["1L1"], - swallow: ["1L1"], - tackle: ["1L1"], - tailwhip: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - toxic: ["1L1"], - toxicspikes: ["1L1"], - trailblaze: ["1L1"], - venoshock: ["1L1"], - waterfall: ["1L1"], - waterpulse: ["1L1"], - yawn: ["1L1"], - }, - }, - quagsire: { - learnset: { - acidspray: ["1L1"], - afteryou: ["1L1"], - amnesia: ["1L1"], - ancientpower: ["1L1"], - aquatail: ["1L1"], - attract: ["1L1"], - avalanche: ["1L1"], - blizzard: ["1L1"], - bodypress: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - bulldoze: ["1L1"], - captivate: ["1L1"], - chillingwater: ["1L1"], - confide: ["1L1"], - counter: ["1L1"], - curse: ["1L1"], - defensecurl: ["1L1"], - dig: ["1L1"], - dive: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - drainpunch: ["1L1"], - dynamicpunch: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - eerieimpulse: ["1L1"], - encore: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - flash: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - focuspunch: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - guardswap: ["1L1"], - hail: ["1L1"], - haze: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - highhorsepower: ["1L1"], - hydropump: ["1L1"], - hyperbeam: ["1L1"], - icebeam: ["1L1"], - icepunch: ["1L1"], - icywind: ["1L1"], - infestation: ["1L1"], - irontail: ["1L1"], - liquidation: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - mimic: ["1L1"], - mist: ["1L1"], - mudbomb: ["1L1"], - muddywater: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - mudsport: ["1L1"], - naturalgift: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - sandstorm: ["1L1"], - scald: ["1L1"], - secretpower: ["1L1"], - seismictoss: ["1L1"], - slam: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - sludgewave: ["1L1"], - snore: ["1L1"], - snowscape: ["1L1"], - spikes: ["1L1"], - stealthrock: ["1L1"], - stompingtantrum: ["1L1"], - stoneedge: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - tailwhip: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - toxic: ["1L1"], - toxicspikes: ["1L1"], - trailblaze: ["1L1"], - waterfall: ["1L1"], - watergun: ["1L1"], - waterpulse: ["1L1"], - whirlpool: ["1L1"], - yawn: ["1L1"], - }, - encounters: [ - {generation: 2, level: 15}, - {generation: 4, level: 10}, - ], - }, - clodsire: { - learnset: { - acidspray: ["1L1"], - amnesia: ["1L1"], - bodypress: ["1L1"], - bodyslam: ["1L1"], - bulldoze: ["1L1"], - chillingwater: ["1L1"], - curse: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - gigaimpact: ["1L1"], - gunkshot: ["1L1"], - haze: ["1L1"], - heavyslam: ["1L1"], - helpinghand: ["1L1"], - highhorsepower: ["1L1"], - hydropump: ["1L1"], - hyperbeam: ["1L1"], - ironhead: ["1L1"], - liquidation: ["1L1"], - lowkick: ["1L1"], - megahorn: ["1L1"], - muddywater: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - poisonjab: ["1L1"], - poisonsting: ["1L1"], - poisontail: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - rockslide: ["1L1"], - rocktomb: ["1L1"], - sandstorm: ["1L1"], - slam: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - sludgewave: ["1L1"], - spikes: ["1L1"], - stealthrock: ["1L1"], - stompingtantrum: ["1L1"], - stoneedge: ["1L1"], - substitute: ["1L1"], - surf: ["1L1"], - tailwhip: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - toxic: ["1L1"], - toxicspikes: ["1L1"], - trailblaze: ["1L1"], - venoshock: ["1L1"], - waterfall: ["1L1"], - waterpulse: ["1L1"], - yawn: ["1L1"], - zenheadbutt: ["1L1"], - }, - }, - murkrow: { - learnset: { - acrobatics: ["1L1"], - aerialace: ["1L1"], - aircutter: ["1L1"], - airslash: ["1L1"], - assurance: ["1L1"], - astonish: ["1L1"], - attract: ["1L1"], - bravebird: ["1L1"], - calmmind: ["1L1"], - captivate: ["1L1"], - confide: ["1L1"], - confuseray: ["1L1"], - curse: ["1L1"], - darkpulse: ["1L1"], - defog: ["1L1"], - detect: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dreameater: ["1L1"], - drillpeck: ["1L1"], - dualwingbeat: ["1L1"], - embargo: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - featherdance: ["1L1"], - feintattack: ["1L1"], - flatter: ["1L1"], - fly: ["1L1"], - foulplay: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - gust: ["1L1"], - haze: ["1L1"], - heatwave: ["1L1"], - hex: ["1L1"], - hiddenpower: ["1L1"], - hurricane: ["1L1"], - hyperbeam: ["1L1"], - icywind: ["1L1"], - lashout: ["1L1"], - meanlook: ["1L1"], - mimic: ["1L1"], - mirrormove: ["1L1"], - mudslap: ["1L1"], - nastyplot: ["1L1"], - naturalgift: ["1L1"], - nightmare: ["1L1"], - nightshade: ["1L1"], - ominouswind: ["1L1"], - payback: ["1L1"], - peck: ["1L1"], - perishsong: ["1L1"], - pluck: ["1L1"], - protect: ["1L1"], - psychic: ["1L1"], - psychicnoise: ["1L1"], - psychoshift: ["1L1"], - psychup: ["1L1"], - pursuit: ["1L1"], - quash: ["1L1"], - quickattack: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - roost: ["1L1"], - round: ["1L1"], - scaryface: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - shadowball: ["1L1"], - skyattack: ["1L1"], - sleeptalk: ["1L1"], - snarl: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - spite: ["1L1"], - steelwing: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - tailwind: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thunderwave: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - twister: ["1L1"], - uproar: ["1L1"], - uturn: ["1L1"], - whirlwind: ["1L1"], - wingattack: ["1L1"], - }, - eventData: [ - {generation: 3, level: 10, gender: "M", abilities: ["1L1"], moves: ["1L1"], pokeball: "pokeball"}, - ], - }, - honchkrow: { - learnset: { - acrobatics: ["1L1"], - aerialace: ["1L1"], - aircutter: ["1L1"], - airslash: ["1L1"], - astonish: ["1L1"], - attract: ["1L1"], - bravebird: ["1L1"], - calmmind: ["1L1"], - captivate: ["1L1"], - chillingwater: ["1L1"], - comeuppance: ["1L1"], - confide: ["1L1"], - confuseray: ["1L1"], - darkpulse: ["1L1"], - defog: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dreameater: ["1L1"], - dualwingbeat: ["1L1"], - embargo: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - featherdance: ["1L1"], - fly: ["1L1"], - foulplay: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - haze: ["1L1"], - heatwave: ["1L1"], - helpinghand: ["1L1"], - hex: ["1L1"], - hiddenpower: ["1L1"], - hurricane: ["1L1"], - hyperbeam: ["1L1"], - icywind: ["1L1"], - incinerate: ["1L1"], - lashout: ["1L1"], - mudslap: ["1L1"], - nastyplot: ["1L1"], - naturalgift: ["1L1"], - nightshade: ["1L1"], - nightslash: ["1L1"], - ominouswind: ["1L1"], - payback: ["1L1"], - pluck: ["1L1"], - protect: ["1L1"], - psychic: ["1L1"], - psychicnoise: ["1L1"], - psychup: ["1L1"], - pursuit: ["1L1"], - quash: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - roost: ["1L1"], - round: ["1L1"], - scaryface: ["1L1"], - secretpower: ["1L1"], - shadowball: ["1L1"], - skyattack: ["1L1"], - sleeptalk: ["1L1"], - snarl: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - spite: ["1L1"], - steelwing: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - sunnyday: ["1L1"], - superpower: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - tailwind: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thunderwave: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - twister: ["1L1"], - uproar: ["1L1"], - uturn: ["1L1"], - wingattack: ["1L1"], - }, - eventData: [ - {generation: 7, level: 65, gender: "M", abilities: ["1L1"], moves: ["1L1"], pokeball: "cherishball"}, - ], - }, - misdreavus: { - learnset: { - aerialace: ["1L1"], - allyswitch: ["1L1"], - astonish: ["1L1"], - attract: ["1L1"], - burningjealousy: ["1L1"], - calmmind: ["1L1"], - captivate: ["1L1"], - chargebeam: ["1L1"], - charm: ["1L1"], - confide: ["1L1"], - confuseray: ["1L1"], - confusion: ["1L1"], - curse: ["1L1"], - darkpulse: ["1L1"], - dazzlinggleam: ["1L1"], - defensecurl: ["1L1"], - destinybond: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - drainingkiss: ["1L1"], - dreameater: ["1L1"], - echoedvoice: ["1L1"], - embargo: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - faketears: ["1L1"], - flash: ["1L1"], - foulplay: ["1L1"], - frustration: ["1L1"], - futuresight: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - growl: ["1L1"], - grudge: ["1L1"], - headbutt: ["1L1"], - healbell: ["1L1"], - helpinghand: ["1L1"], - hex: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - hypervoice: ["1L1"], - icywind: ["1L1"], - imprison: ["1L1"], - inferno: ["1L1"], - magicalleaf: ["1L1"], - magiccoat: ["1L1"], - magicroom: ["1L1"], - meanlook: ["1L1"], - mefirst: ["1L1"], - memento: ["1L1"], - mimic: ["1L1"], - nastyplot: ["1L1"], - naturalgift: ["1L1"], - nightmare: ["1L1"], - nightshade: ["1L1"], - ominouswind: ["1L1"], - painsplit: ["1L1"], - payback: ["1L1"], - perishsong: ["1L1"], - phantomforce: ["1L1"], - poltergeist: ["1L1"], - powergem: ["1L1"], - protect: ["1L1"], - psybeam: ["1L1"], - psychic: ["1L1"], - psychicnoise: ["1L1"], - psychup: ["1L1"], - psyshock: ["1L1"], - psywave: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - round: ["1L1"], - scaryface: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - shadowball: ["1L1"], - shadowsneak: ["1L1"], - shockwave: ["1L1"], - skillswap: ["1L1"], - sleeptalk: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - snowscape: ["1L1"], - spite: ["1L1"], - storedpower: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - taunt: ["1L1"], - telekinesis: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderwave: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - trick: ["1L1"], - trickroom: ["1L1"], - uproar: ["1L1"], - willowisp: ["1L1"], - wonderroom: ["1L1"], - zapcannon: ["1L1"], - }, - eventData: [ - {generation: 3, level: 10, gender: "M", moves: ["1L1"], pokeball: "pokeball"}, - ], - }, - mismagius: { - learnset: { - aerialace: ["1L1"], - allyswitch: ["1L1"], - astonish: ["1L1"], - attract: ["1L1"], - burningjealousy: ["1L1"], - calmmind: ["1L1"], - captivate: ["1L1"], - chargebeam: ["1L1"], - charm: ["1L1"], - confide: ["1L1"], - confuseray: ["1L1"], - curse: ["1L1"], - darkpulse: ["1L1"], - dazzlinggleam: ["1L1"], - doubleteam: ["1L1"], - drainingkiss: ["1L1"], - dreameater: ["1L1"], - echoedvoice: ["1L1"], - embargo: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - faketears: ["1L1"], - flash: ["1L1"], - foulplay: ["1L1"], - frustration: ["1L1"], - futuresight: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - growl: ["1L1"], - headbutt: ["1L1"], - healbell: ["1L1"], - helpinghand: ["1L1"], - hex: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - hypervoice: ["1L1"], - icywind: ["1L1"], - imprison: ["1L1"], - laserfocus: ["1L1"], - lashout: ["1L1"], - luckychant: ["1L1"], - magicalleaf: ["1L1"], - magiccoat: ["1L1"], - magicroom: ["1L1"], - mysticalfire: ["1L1"], - nastyplot: ["1L1"], - naturalgift: ["1L1"], - nightshade: ["1L1"], - ominouswind: ["1L1"], - painsplit: ["1L1"], - payback: ["1L1"], - phantomforce: ["1L1"], - poltergeist: ["1L1"], - powergem: ["1L1"], - protect: ["1L1"], - psybeam: ["1L1"], - psychic: ["1L1"], - psychicnoise: ["1L1"], - psychup: ["1L1"], - psyshock: ["1L1"], - psywave: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - round: ["1L1"], - scaryface: ["1L1"], - secretpower: ["1L1"], - shadowball: ["1L1"], - shockwave: ["1L1"], - skillswap: ["1L1"], - sleeptalk: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - snowscape: ["1L1"], - spite: ["1L1"], - storedpower: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - taunt: ["1L1"], - telekinesis: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderwave: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - trick: ["1L1"], - trickroom: ["1L1"], - uproar: ["1L1"], - willowisp: ["1L1"], - wonderroom: ["1L1"], - }, - }, - unown: { - learnset: { - hiddenpower: ["1L1"], - }, - encounters: [ - {generation: 2, level: 5}, - {generation: 3, level: 25}, - {generation: 4, level: 5}, - {generation: 6, level: 32}, - ], - }, - wynaut: { - learnset: { - amnesia: ["1L1"], - charm: ["1L1"], - counter: ["1L1"], - destinybond: ["1L1"], - encore: ["1L1"], - mirrorcoat: ["1L1"], - safeguard: ["1L1"], - splash: ["1L1"], - tickle: ["1L1"], - }, - eventData: [ - {generation: 3, level: 5, shiny: 1, moves: ["1L1"], pokeball: "pokeball", emeraldEventEgg: true}, - ], - }, - wobbuffet: { - learnset: { - amnesia: ["1L1"], - charm: ["1L1"], - counter: ["1L1"], - destinybond: ["1L1"], - encore: ["1L1"], - mirrorcoat: ["1L1"], - safeguard: ["1L1"], - splash: ["1L1"], - }, - eventData: [ - {generation: 3, level: 5, moves: ["1L1"], pokeball: "pokeball"}, - {generation: 3, level: 10, gender: "M", moves: ["1L1"], pokeball: "pokeball"}, - {generation: 6, level: 10, gender: "M", moves: ["1L1"], pokeball: "cherishball"}, - {generation: 6, level: 15, gender: "M", moves: ["1L1"], pokeball: "cherishball"}, - ], - encounters: [ - {generation: 2, level: 5}, - {generation: 4, level: 3}, - ], - }, - girafarig: { - learnset: { - agility: ["1L1"], - allyswitch: ["1L1"], - amnesia: ["1L1"], - assurance: ["1L1"], - astonish: ["1L1"], - attract: ["1L1"], - batonpass: ["1L1"], - beatup: ["1L1"], - bodyslam: ["1L1"], - bulldoze: ["1L1"], - calmmind: ["1L1"], - captivate: ["1L1"], - chargebeam: ["1L1"], - confide: ["1L1"], - confuseray: ["1L1"], - confusion: ["1L1"], - crunch: ["1L1"], - curse: ["1L1"], - dazzlinggleam: ["1L1"], - doubleedge: ["1L1"], - doublehit: ["1L1"], - doublekick: ["1L1"], - doubleteam: ["1L1"], - dreameater: ["1L1"], - earthquake: ["1L1"], - echoedvoice: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - expandingforce: ["1L1"], - facade: ["1L1"], - flash: ["1L1"], - foresight: ["1L1"], - foulplay: ["1L1"], - frustration: ["1L1"], - futuresight: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - gravity: ["1L1"], - growl: ["1L1"], - guardswap: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - highhorsepower: ["1L1"], - hyperbeam: ["1L1"], - hypervoice: ["1L1"], - imprison: ["1L1"], - irontail: ["1L1"], - lightscreen: ["1L1"], - lowkick: ["1L1"], - magiccoat: ["1L1"], - meanlook: ["1L1"], - mimic: ["1L1"], - mirrorcoat: ["1L1"], - mudslap: ["1L1"], - nastyplot: ["1L1"], - naturalgift: ["1L1"], - nightmare: ["1L1"], - odorsleuth: ["1L1"], - powerswap: ["1L1"], - protect: ["1L1"], - psybeam: ["1L1"], - psychic: ["1L1"], - psychicfangs: ["1L1"], - psychicnoise: ["1L1"], - psychicterrain: ["1L1"], - psychup: ["1L1"], - psyshock: ["1L1"], - raindance: ["1L1"], - razorwind: ["1L1"], - recycle: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - rocksmash: ["1L1"], - round: ["1L1"], - secretpower: ["1L1"], - shadowball: ["1L1"], - shockwave: ["1L1"], - signalbeam: ["1L1"], - skillswap: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - stomp: ["1L1"], - stompingtantrum: ["1L1"], - storedpower: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - telekinesis: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - trick: ["1L1"], - trickroom: ["1L1"], - twinbeam: ["1L1"], - uproar: ["1L1"], - wish: ["1L1"], - workup: ["1L1"], - zapcannon: ["1L1"], - zenheadbutt: ["1L1"], - }, - }, - pineco: { - learnset: { - attract: ["1L1"], - bide: ["1L1"], - bodyslam: ["1L1"], - bugbite: ["1L1"], - bugbuzz: ["1L1"], - bulldoze: ["1L1"], - captivate: ["1L1"], - confide: ["1L1"], - counter: ["1L1"], - curse: ["1L1"], - defensecurl: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - drillrun: ["1L1"], - earthquake: ["1L1"], - endure: ["1L1"], - explosion: ["1L1"], - facade: ["1L1"], - flail: ["1L1"], - frustration: ["1L1"], - gigadrain: ["1L1"], - gravity: ["1L1"], - gyroball: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - icespinner: ["1L1"], - irondefense: ["1L1"], - lightscreen: ["1L1"], - lunge: ["1L1"], - mimic: ["1L1"], - naturalgift: ["1L1"], - painsplit: ["1L1"], - payback: ["1L1"], - pinmissile: ["1L1"], - poisonjab: ["1L1"], - pounce: ["1L1"], - powertrick: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - rapidspin: ["1L1"], - reflect: ["1L1"], - refresh: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - revenge: ["1L1"], - reversal: ["1L1"], - rockblast: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - sandstorm: ["1L1"], - sandtomb: ["1L1"], - secretpower: ["1L1"], - seedbomb: ["1L1"], - selfdestruct: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - spikes: ["1L1"], - stealthrock: ["1L1"], - strength: ["1L1"], - stringshot: ["1L1"], - strugglebug: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - sweetscent: ["1L1"], - swift: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - toxic: ["1L1"], - toxicspikes: ["1L1"], - venoshock: ["1L1"], - }, - eventData: [ - {generation: 3, level: 10, gender: "M", moves: ["1L1"], pokeball: "pokeball"}, - {generation: 3, level: 20, moves: ["1L1"]}, - ], - }, - forretress: { - learnset: { - allyswitch: ["1L1"], - attract: ["1L1"], - autotomize: ["1L1"], - bide: ["1L1"], - block: ["1L1"], - bodypress: ["1L1"], - bodyslam: ["1L1"], - bugbite: ["1L1"], - bugbuzz: ["1L1"], - bulldoze: ["1L1"], - captivate: ["1L1"], - confide: ["1L1"], - counter: ["1L1"], - curse: ["1L1"], - defensecurl: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - drillrun: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - endure: ["1L1"], - explosion: ["1L1"], - facade: ["1L1"], - flashcannon: ["1L1"], - frustration: ["1L1"], - gigadrain: ["1L1"], - gigaimpact: ["1L1"], - gravity: ["1L1"], - gyroball: ["1L1"], - hardpress: ["1L1"], - headbutt: ["1L1"], - heavyslam: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - icespinner: ["1L1"], - irondefense: ["1L1"], - ironhead: ["1L1"], - laserfocus: ["1L1"], - lightscreen: ["1L1"], - lunge: ["1L1"], - magnetrise: ["1L1"], - metalsound: ["1L1"], - mimic: ["1L1"], - mirrorshot: ["1L1"], - naturalgift: ["1L1"], - painsplit: ["1L1"], - payback: ["1L1"], - poisonjab: ["1L1"], - pounce: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - rapidspin: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - reversal: ["1L1"], - rockblast: ["1L1"], - rockpolish: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - sandstorm: ["1L1"], - sandtomb: ["1L1"], - secretpower: ["1L1"], - seedbomb: ["1L1"], - selfdestruct: ["1L1"], - signalbeam: ["1L1"], - sleeptalk: ["1L1"], - smartstrike: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - spikes: ["1L1"], - stealthrock: ["1L1"], - steelbeam: ["1L1"], - stoneedge: ["1L1"], - strength: ["1L1"], - stringshot: ["1L1"], - strugglebug: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - sweetscent: ["1L1"], - swift: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - telekinesis: ["1L1"], - terablast: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - toxicspikes: ["1L1"], - venoshock: ["1L1"], - voltswitch: ["1L1"], - zapcannon: ["1L1"], - }, - encounters: [ - {generation: 6, level: 30}, - ], - }, - dunsparce: { - learnset: { - agility: ["1L1"], - airslash: ["1L1"], - amnesia: ["1L1"], - ancientpower: ["1L1"], - aquatail: ["1L1"], - astonish: ["1L1"], - attract: ["1L1"], - batonpass: ["1L1"], - bide: ["1L1"], - bind: ["1L1"], - bite: ["1L1"], - blizzard: ["1L1"], - bodyslam: ["1L1"], - breakingswipe: ["1L1"], - bulldoze: ["1L1"], - calmmind: ["1L1"], - captivate: ["1L1"], - chargebeam: ["1L1"], - chillingwater: ["1L1"], - coil: ["1L1"], - confide: ["1L1"], - counter: ["1L1"], - curse: ["1L1"], - defensecurl: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dragonrush: ["1L1"], - dreameater: ["1L1"], - drillrun: ["1L1"], - dualwingbeat: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fireblast: ["1L1"], - flail: ["1L1"], - flamethrower: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - glare: ["1L1"], - gyroball: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hex: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - hyperdrill: ["1L1"], - hypervoice: ["1L1"], - icebeam: ["1L1"], - icespinner: ["1L1"], - incinerate: ["1L1"], - irontail: ["1L1"], - lastresort: ["1L1"], - lunge: ["1L1"], - magiccoat: ["1L1"], - mimic: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - nightmare: ["1L1"], - painsplit: ["1L1"], - poisonjab: ["1L1"], - poisontail: ["1L1"], - pounce: ["1L1"], - protect: ["1L1"], - psychup: ["1L1"], - pursuit: ["1L1"], - rage: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - rollout: ["1L1"], - roost: ["1L1"], - round: ["1L1"], - sandstorm: ["1L1"], - scaleshot: ["1L1"], - scaryface: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - shadowball: ["1L1"], - shockwave: ["1L1"], - skittersmack: ["1L1"], - sleeptalk: ["1L1"], - smartstrike: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - spite: ["1L1"], - stealthrock: ["1L1"], - stompingtantrum: ["1L1"], - stoneedge: ["1L1"], - storedpower: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - terrainpulse: ["1L1"], - thief: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - trumpcard: ["1L1"], - uproar: ["1L1"], - waterpulse: ["1L1"], - wildcharge: ["1L1"], - yawn: ["1L1"], - zapcannon: ["1L1"], - zenheadbutt: ["1L1"], - }, - }, - dudunsparce: { - learnset: { - agility: ["1L1"], - airslash: ["1L1"], - amnesia: ["1L1"], - ancientpower: ["1L1"], - batonpass: ["1L1"], - blizzard: ["1L1"], - bodypress: ["1L1"], - bodyslam: ["1L1"], - boomburst: ["1L1"], - breakingswipe: ["1L1"], - bulldoze: ["1L1"], - calmmind: ["1L1"], - chillingwater: ["1L1"], - coil: ["1L1"], - curse: ["1L1"], - defensecurl: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - dragonrush: ["1L1"], - dragontail: ["1L1"], - drillrun: ["1L1"], - dualwingbeat: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fireblast: ["1L1"], - flail: ["1L1"], - flamethrower: ["1L1"], - gigaimpact: ["1L1"], - glare: ["1L1"], - gyroball: ["1L1"], - heavyslam: ["1L1"], - helpinghand: ["1L1"], - hex: ["1L1"], - hurricane: ["1L1"], - hyperbeam: ["1L1"], - hyperdrill: ["1L1"], - hypervoice: ["1L1"], - icebeam: ["1L1"], - icespinner: ["1L1"], - lunge: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - outrage: ["1L1"], - painsplit: ["1L1"], - poisonjab: ["1L1"], - poisontail: ["1L1"], - pounce: ["1L1"], - protect: ["1L1"], - psychup: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - rockslide: ["1L1"], - rocktomb: ["1L1"], - rollout: ["1L1"], - roost: ["1L1"], - sandstorm: ["1L1"], - scaleshot: ["1L1"], - scaryface: ["1L1"], - screech: ["1L1"], - shadowball: ["1L1"], - skittersmack: ["1L1"], - sleeptalk: ["1L1"], - smartstrike: ["1L1"], - solarbeam: ["1L1"], - spite: ["1L1"], - stealthrock: ["1L1"], - stompingtantrum: ["1L1"], - stoneedge: ["1L1"], - storedpower: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - tailwind: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - throatchop: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - toxic: ["1L1"], - uproar: ["1L1"], - wildcharge: ["1L1"], - yawn: ["1L1"], - zenheadbutt: ["1L1"], - }, - }, - gligar: { - learnset: { - acrobatics: ["1L1"], - aerialace: ["1L1"], - agility: ["1L1"], - aquatail: ["1L1"], - attract: ["1L1"], - batonpass: ["1L1"], - breakingswipe: ["1L1"], - brickbreak: ["1L1"], - bugbite: ["1L1"], - bulldoze: ["1L1"], - captivate: ["1L1"], - confide: ["1L1"], - counter: ["1L1"], - crabhammer: ["1L1"], - crosspoison: ["1L1"], - crunch: ["1L1"], - curse: ["1L1"], - cut: ["1L1"], - darkpulse: ["1L1"], - defog: ["1L1"], - detect: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dreameater: ["1L1"], - dualwingbeat: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - falseswipe: ["1L1"], - feint: ["1L1"], - feintattack: ["1L1"], - firefang: ["1L1"], - fling: ["1L1"], - frustration: ["1L1"], - furycutter: ["1L1"], - guillotine: ["1L1"], - gunkshot: ["1L1"], - harden: ["1L1"], - headbutt: ["1L1"], - hiddenpower: ["1L1"], - highhorsepower: ["1L1"], - honeclaws: ["1L1"], - icefang: ["1L1"], - irontail: ["1L1"], - knockoff: ["1L1"], - lunge: ["1L1"], - metalclaw: ["1L1"], - mimic: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - nightslash: ["1L1"], - payback: ["1L1"], - poisonjab: ["1L1"], - poisonsting: ["1L1"], - poisontail: ["1L1"], - powertrick: ["1L1"], - protect: ["1L1"], - psychicfangs: ["1L1"], - quickattack: ["1L1"], - raindance: ["1L1"], - razorwind: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rockclimb: ["1L1"], - rockpolish: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - roost: ["1L1"], - round: ["1L1"], - sandattack: ["1L1"], - sandstorm: ["1L1"], - sandtomb: ["1L1"], - scaleshot: ["1L1"], - scaryface: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - skittersmack: ["1L1"], - skyuppercut: ["1L1"], - slash: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - snore: ["1L1"], - spikes: ["1L1"], - stealthrock: ["1L1"], - steelwing: ["1L1"], - stoneedge: ["1L1"], - strength: ["1L1"], - strugglebug: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - swordsdance: ["1L1"], - tailwind: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - throatchop: ["1L1"], - thunderfang: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - toxicspikes: ["1L1"], - uturn: ["1L1"], - venoshock: ["1L1"], - wingattack: ["1L1"], - xscissor: ["1L1"], - }, - eventData: [ - {generation: 3, level: 10, gender: "M", moves: ["1L1"], pokeball: "pokeball"}, - ], - }, - gliscor: { - learnset: { - acrobatics: ["1L1"], - aerialace: ["1L1"], - agility: ["1L1"], - aquatail: ["1L1"], - attract: ["1L1"], - batonpass: ["1L1"], - breakingswipe: ["1L1"], - brickbreak: ["1L1"], - brutalswing: ["1L1"], - bugbite: ["1L1"], - bulldoze: ["1L1"], - captivate: ["1L1"], - confide: ["1L1"], - crabhammer: ["1L1"], - crunch: ["1L1"], - cut: ["1L1"], - darkpulse: ["1L1"], - defog: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dualwingbeat: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - falseswipe: ["1L1"], - feintattack: ["1L1"], - firefang: ["1L1"], - fling: ["1L1"], - frustration: ["1L1"], - furycutter: ["1L1"], - gigaimpact: ["1L1"], - guillotine: ["1L1"], - gunkshot: ["1L1"], - harden: ["1L1"], - headbutt: ["1L1"], - hiddenpower: ["1L1"], - highhorsepower: ["1L1"], - honeclaws: ["1L1"], - hyperbeam: ["1L1"], - icefang: ["1L1"], - irontail: ["1L1"], - knockoff: ["1L1"], - lunge: ["1L1"], - metalclaw: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - nightslash: ["1L1"], - payback: ["1L1"], - poisonjab: ["1L1"], - poisontail: ["1L1"], - protect: ["1L1"], - psychicfangs: ["1L1"], - quickattack: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rockpolish: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - roost: ["1L1"], - round: ["1L1"], - sandattack: ["1L1"], - sandstorm: ["1L1"], - sandtomb: ["1L1"], - scaleshot: ["1L1"], - scaryface: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - skittersmack: ["1L1"], - skyattack: ["1L1"], - skyuppercut: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - snore: ["1L1"], - spikes: ["1L1"], - stealthrock: ["1L1"], - steelwing: ["1L1"], - stoneedge: ["1L1"], - strength: ["1L1"], - strugglebug: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - swordsdance: ["1L1"], - tailwind: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - throatchop: ["1L1"], - thunderfang: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - toxicspikes: ["1L1"], - uturn: ["1L1"], - venoshock: ["1L1"], - xscissor: ["1L1"], - }, - }, - snubbull: { - learnset: { - attract: ["1L1"], - bite: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - bulkup: ["1L1"], - bulldoze: ["1L1"], - captivate: ["1L1"], - charm: ["1L1"], - closecombat: ["1L1"], - confide: ["1L1"], - counter: ["1L1"], - covet: ["1L1"], - crunch: ["1L1"], - curse: ["1L1"], - dazzlinggleam: ["1L1"], - defensecurl: ["1L1"], - detect: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dynamicpunch: ["1L1"], - earthquake: ["1L1"], - encore: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - faketears: ["1L1"], - feintattack: ["1L1"], - fireblast: ["1L1"], - firefang: ["1L1"], - firepunch: ["1L1"], - flamethrower: ["1L1"], - fling: ["1L1"], - focuspunch: ["1L1"], - frustration: ["1L1"], - growl: ["1L1"], - headbutt: ["1L1"], - healbell: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hypervoice: ["1L1"], - icefang: ["1L1"], - icepunch: ["1L1"], - incinerate: ["1L1"], - lashout: ["1L1"], - lastresort: ["1L1"], - leer: ["1L1"], - lick: ["1L1"], - lowkick: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - metronome: ["1L1"], - mimic: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - overheat: ["1L1"], - payback: ["1L1"], - playrough: ["1L1"], - poweruppunch: ["1L1"], - present: ["1L1"], - protect: ["1L1"], - psychicfangs: ["1L1"], - rage: ["1L1"], - raindance: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - reversal: ["1L1"], - roar: ["1L1"], - rocksmash: ["1L1"], - round: ["1L1"], - scaryface: ["1L1"], - secretpower: ["1L1"], - seismictoss: ["1L1"], - shadowball: ["1L1"], - shockwave: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - smellingsalts: ["1L1"], - snarl: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - spite: ["1L1"], - stompingtantrum: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - superfang: ["1L1"], - superpower: ["1L1"], - swagger: ["1L1"], - tackle: ["1L1"], - tailwhip: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - temperflare: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderfang: ["1L1"], - thunderpunch: ["1L1"], - thunderwave: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - uproar: ["1L1"], - waterpulse: ["1L1"], - wildcharge: ["1L1"], - workup: ["1L1"], - zapcannon: ["1L1"], - }, - eventData: [ - {generation: 3, level: 10, gender: "M", moves: ["1L1"], pokeball: "pokeball"}, - ], - }, - granbull: { - learnset: { - attract: ["1L1"], - bite: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - bulkup: ["1L1"], - bulldoze: ["1L1"], - captivate: ["1L1"], - charm: ["1L1"], - closecombat: ["1L1"], - confide: ["1L1"], - counter: ["1L1"], - covet: ["1L1"], - crunch: ["1L1"], - curse: ["1L1"], - dazzlinggleam: ["1L1"], - defensecurl: ["1L1"], - detect: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dynamicpunch: ["1L1"], - earthquake: ["1L1"], - encore: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - faketears: ["1L1"], - fireblast: ["1L1"], - firefang: ["1L1"], - firepunch: ["1L1"], - flamethrower: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - focuspunch: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - growl: ["1L1"], - headbutt: ["1L1"], - healbell: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - hypervoice: ["1L1"], - icefang: ["1L1"], - icepunch: ["1L1"], - incinerate: ["1L1"], - irontail: ["1L1"], - lashout: ["1L1"], - lastresort: ["1L1"], - lick: ["1L1"], - lowkick: ["1L1"], - lowsweep: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - metronome: ["1L1"], - mimic: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - outrage: ["1L1"], - overheat: ["1L1"], - payback: ["1L1"], - playrough: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - psychicfangs: ["1L1"], - rage: ["1L1"], - raindance: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - reversal: ["1L1"], - roar: ["1L1"], - rockclimb: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - scaryface: ["1L1"], - secretpower: ["1L1"], - seismictoss: ["1L1"], - shadowball: ["1L1"], - shockwave: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - snarl: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - spite: ["1L1"], - stompingtantrum: ["1L1"], - stoneedge: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - superfang: ["1L1"], - superpower: ["1L1"], - swagger: ["1L1"], - tackle: ["1L1"], - tailwhip: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - temperflare: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderfang: ["1L1"], - thunderpunch: ["1L1"], - thunderwave: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - uproar: ["1L1"], - waterpulse: ["1L1"], - wildcharge: ["1L1"], - workup: ["1L1"], - zapcannon: ["1L1"], - }, - encounters: [ - {generation: 2, level: 15}, - ], - }, - qwilfish: { - learnset: { - acidspray: ["1L1"], - acupressure: ["1L1"], - agility: ["1L1"], - aquajet: ["1L1"], - aquatail: ["1L1"], - assurance: ["1L1"], - astonish: ["1L1"], - attract: ["1L1"], - barbbarrage: ["1L1"], - blizzard: ["1L1"], - bounce: ["1L1"], - brine: ["1L1"], - bubble: ["1L1"], - bubblebeam: ["1L1"], - captivate: ["1L1"], - chillingwater: ["1L1"], - confide: ["1L1"], - crunch: ["1L1"], - curse: ["1L1"], - defensecurl: ["1L1"], - destinybond: ["1L1"], - dive: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - endure: ["1L1"], - explosion: ["1L1"], - facade: ["1L1"], - fellstinger: ["1L1"], - flail: ["1L1"], - flipturn: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - gunkshot: ["1L1"], - gyroball: ["1L1"], - hail: ["1L1"], - harden: ["1L1"], - haze: ["1L1"], - headbutt: ["1L1"], - hex: ["1L1"], - hiddenpower: ["1L1"], - hydropump: ["1L1"], - icebeam: ["1L1"], - icywind: ["1L1"], - liquidation: ["1L1"], - mimic: ["1L1"], - minimize: ["1L1"], - mudshot: ["1L1"], - naturalgift: ["1L1"], - painsplit: ["1L1"], - payback: ["1L1"], - pinmissile: ["1L1"], - poisonjab: ["1L1"], - poisonsting: ["1L1"], - poisontail: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - revenge: ["1L1"], - reversal: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - scald: ["1L1"], - scaleshot: ["1L1"], - scaryface: ["1L1"], - secretpower: ["1L1"], - selfdestruct: ["1L1"], - shadowball: ["1L1"], - shockwave: ["1L1"], - signalbeam: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - sludgewave: ["1L1"], - snore: ["1L1"], - spikes: ["1L1"], - spite: ["1L1"], - spitup: ["1L1"], - steelroller: ["1L1"], - stockpile: ["1L1"], - substitute: ["1L1"], - supersonic: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - swordsdance: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - throatchop: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - toxicspikes: ["1L1"], - venomdrench: ["1L1"], - venoshock: ["1L1"], - waterfall: ["1L1"], - watergun: ["1L1"], - waterpulse: ["1L1"], - whirlpool: ["1L1"], - }, - eventData: [ - {generation: 3, level: 10, gender: "M", moves: ["1L1"], pokeball: "pokeball"}, - ], - }, - qwilfishhisui: { - learnset: { - acidspray: ["1L1"], - acupressure: ["1L1"], - agility: ["1L1"], - aquajet: ["1L1"], - aquatail: ["1L1"], - astonish: ["1L1"], - barbbarrage: ["1L1"], - bite: ["1L1"], - blizzard: ["1L1"], - brine: ["1L1"], - bubblebeam: ["1L1"], - chillingwater: ["1L1"], - crunch: ["1L1"], - curse: ["1L1"], - darkpulse: ["1L1"], - destinybond: ["1L1"], - doubleedge: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fellstinger: ["1L1"], - flail: ["1L1"], - gigaimpact: ["1L1"], - gunkshot: ["1L1"], - gyroball: ["1L1"], - harden: ["1L1"], - haze: ["1L1"], - hex: ["1L1"], - hydropump: ["1L1"], - icebeam: ["1L1"], - icywind: ["1L1"], - lashout: ["1L1"], - liquidation: ["1L1"], - minimize: ["1L1"], - mudshot: ["1L1"], - painsplit: ["1L1"], - pinmissile: ["1L1"], - poisonjab: ["1L1"], - poisonsting: ["1L1"], - poisontail: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - reversal: ["1L1"], - scaleshot: ["1L1"], - scaryface: ["1L1"], - selfdestruct: ["1L1"], - shadowball: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - spikes: ["1L1"], - spite: ["1L1"], - spitup: ["1L1"], - stockpile: ["1L1"], - substitute: ["1L1"], - supersonic: ["1L1"], - surf: ["1L1"], - swift: ["1L1"], - swordsdance: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - throatchop: ["1L1"], - toxic: ["1L1"], - toxicspikes: ["1L1"], - venoshock: ["1L1"], - waterfall: ["1L1"], - waterpulse: ["1L1"], - }, - }, - overqwil: { - learnset: { - acidspray: ["1L1"], - acupressure: ["1L1"], - agility: ["1L1"], - barbbarrage: ["1L1"], - bite: ["1L1"], - blizzard: ["1L1"], - brine: ["1L1"], - chillingwater: ["1L1"], - crunch: ["1L1"], - curse: ["1L1"], - darkpulse: ["1L1"], - destinybond: ["1L1"], - doubleedge: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fellstinger: ["1L1"], - gigaimpact: ["1L1"], - gunkshot: ["1L1"], - gyroball: ["1L1"], - harden: ["1L1"], - haze: ["1L1"], - hex: ["1L1"], - hydropump: ["1L1"], - hyperbeam: ["1L1"], - icebeam: ["1L1"], - icywind: ["1L1"], - lashout: ["1L1"], - liquidation: ["1L1"], - minimize: ["1L1"], - mudshot: ["1L1"], - painsplit: ["1L1"], - pinmissile: ["1L1"], - poisonjab: ["1L1"], - poisonsting: ["1L1"], - poisontail: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - reversal: ["1L1"], - scaleshot: ["1L1"], - scaryface: ["1L1"], - shadowball: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - sludgewave: ["1L1"], - smartstrike: ["1L1"], - spikes: ["1L1"], - spite: ["1L1"], - spitup: ["1L1"], - stockpile: ["1L1"], - substitute: ["1L1"], - surf: ["1L1"], - swift: ["1L1"], - swordsdance: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - throatchop: ["1L1"], - toxic: ["1L1"], - toxicspikes: ["1L1"], - venoshock: ["1L1"], - waterfall: ["1L1"], - waterpulse: ["1L1"], - }, - }, - shuckle: { - learnset: { - acid: ["1L1"], - acupressure: ["1L1"], - afteryou: ["1L1"], - ancientpower: ["1L1"], - attract: ["1L1"], - bide: ["1L1"], - bind: ["1L1"], - bodyslam: ["1L1"], - bugbite: ["1L1"], - bulldoze: ["1L1"], - captivate: ["1L1"], - confide: ["1L1"], - constrict: ["1L1"], - covet: ["1L1"], - curse: ["1L1"], - defensecurl: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - encore: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - finalgambit: ["1L1"], - flash: ["1L1"], - frustration: ["1L1"], - gastroacid: ["1L1"], - guardsplit: ["1L1"], - gyroball: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - infestation: ["1L1"], - irondefense: ["1L1"], - knockoff: ["1L1"], - meteorbeam: ["1L1"], - mimic: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - powersplit: ["1L1"], - powertrick: ["1L1"], - protect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - reversal: ["1L1"], - rockblast: ["1L1"], - rockpolish: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rockthrow: ["1L1"], - rocktomb: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - sandstorm: ["1L1"], - sandtomb: ["1L1"], - secretpower: ["1L1"], - shellsmash: ["1L1"], - skittersmack: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - sludgewave: ["1L1"], - smackdown: ["1L1"], - snore: ["1L1"], - stealthrock: ["1L1"], - steelroller: ["1L1"], - stickyweb: ["1L1"], - stoneedge: ["1L1"], - strength: ["1L1"], - stringshot: ["1L1"], - strugglebug: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - sweetscent: ["1L1"], - toxic: ["1L1"], - venoshock: ["1L1"], - withdraw: ["1L1"], - wrap: ["1L1"], - }, - eventData: [ - {generation: 3, level: 10, gender: "M", abilities: ["1L1"], moves: ["1L1"], pokeball: "pokeball"}, - {generation: 3, level: 20, abilities: ["1L1"], moves: ["1L1"], pokeball: "pokeball"}, - ], - }, - heracross: { - learnset: { - aerialace: ["1L1"], - armthrust: ["1L1"], - assurance: ["1L1"], - attract: ["1L1"], - bide: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - brutalswing: ["1L1"], - bugbite: ["1L1"], - bugbuzz: ["1L1"], - bulkup: ["1L1"], - bulldoze: ["1L1"], - bulletseed: ["1L1"], - captivate: ["1L1"], - chipaway: ["1L1"], - closecombat: ["1L1"], - coaching: ["1L1"], - confide: ["1L1"], - counter: ["1L1"], - curse: ["1L1"], - cut: ["1L1"], - detect: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - earthquake: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - falseswipe: ["1L1"], - feint: ["1L1"], - flail: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - focuspunch: ["1L1"], - frustration: ["1L1"], - furyattack: ["1L1"], - furycutter: ["1L1"], - gigaimpact: ["1L1"], - harden: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - highhorsepower: ["1L1"], - hornattack: ["1L1"], - hyperbeam: ["1L1"], - irondefense: ["1L1"], - knockoff: ["1L1"], - leer: ["1L1"], - lowkick: ["1L1"], - lunge: ["1L1"], - megahorn: ["1L1"], - mimic: ["1L1"], - naturalgift: ["1L1"], - nightslash: ["1L1"], - pinmissile: ["1L1"], - pounce: ["1L1"], - protect: ["1L1"], - pursuit: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - revenge: ["1L1"], - reversal: ["1L1"], - rockblast: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - secretpower: ["1L1"], - seismictoss: ["1L1"], - shadowclaw: ["1L1"], - skittersmack: ["1L1"], - sleeptalk: ["1L1"], - smackdown: ["1L1"], - smartstrike: ["1L1"], - snore: ["1L1"], - spikes: ["1L1"], - stoneedge: ["1L1"], - strength: ["1L1"], - strugglebug: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swordsdance: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thrash: ["1L1"], - throatchop: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - upperhand: ["1L1"], - vacuumwave: ["1L1"], - venoshock: ["1L1"], - workup: ["1L1"], - }, - eventData: [ - {generation: 6, level: 50, gender: "F", nature: "Adamant", moves: ["1L1"], pokeball: "cherishball"}, - {generation: 6, level: 50, nature: "Adamant", abilities: ["1L1"], moves: ["1L1"], pokeball: "cherishball"}, - ], - }, - sneasel: { - learnset: { - aerialace: ["1L1"], - agility: ["1L1"], - assist: ["1L1"], - attract: ["1L1"], - avalanche: ["1L1"], - beatup: ["1L1"], - bite: ["1L1"], - blizzard: ["1L1"], - brickbreak: ["1L1"], - calmmind: ["1L1"], - captivate: ["1L1"], - confide: ["1L1"], - counter: ["1L1"], - crushclaw: ["1L1"], - curse: ["1L1"], - cut: ["1L1"], - darkpulse: ["1L1"], - defensecurl: ["1L1"], - detect: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doublehit: ["1L1"], - doubleteam: ["1L1"], - dreameater: ["1L1"], - dynamicpunch: ["1L1"], - embargo: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fakeout: ["1L1"], - faketears: ["1L1"], - falseswipe: ["1L1"], - feint: ["1L1"], - feintattack: ["1L1"], - fling: ["1L1"], - focuspunch: ["1L1"], - foresight: ["1L1"], - foulplay: ["1L1"], - frustration: ["1L1"], - furycutter: ["1L1"], - furyswipes: ["1L1"], - gigaimpact: ["1L1"], - hail: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - honeclaws: ["1L1"], - icebeam: ["1L1"], - icepunch: ["1L1"], - iceshard: ["1L1"], - iciclecrash: ["1L1"], - iciclespear: ["1L1"], - icywind: ["1L1"], - irontail: ["1L1"], - knockoff: ["1L1"], - laserfocus: ["1L1"], - lashout: ["1L1"], - leer: ["1L1"], - lowkick: ["1L1"], - lowsweep: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - metalclaw: ["1L1"], - mimic: ["1L1"], - mudslap: ["1L1"], - nastyplot: ["1L1"], - naturalgift: ["1L1"], - nightmare: ["1L1"], - payback: ["1L1"], - poisonjab: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - psychocut: ["1L1"], - psychup: ["1L1"], - punishment: ["1L1"], - pursuit: ["1L1"], - quickattack: ["1L1"], - raindance: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - reversal: ["1L1"], - rocksmash: ["1L1"], - round: ["1L1"], - scaryface: ["1L1"], - scratch: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - shadowball: ["1L1"], - shadowclaw: ["1L1"], - slash: ["1L1"], - sleeptalk: ["1L1"], - snarl: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - snowscape: ["1L1"], - spite: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - swordsdance: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - throatchop: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - tripleaxel: ["1L1"], - upperhand: ["1L1"], - waterpulse: ["1L1"], - whirlpool: ["1L1"], - xscissor: ["1L1"], - }, - eventData: [ - {generation: 3, level: 10, gender: "M", moves: ["1L1"], pokeball: "pokeball"}, - ], - }, - sneaselhisui: { - learnset: { - acidspray: ["1L1"], - aerialace: ["1L1"], - agility: ["1L1"], - brickbreak: ["1L1"], - bulkup: ["1L1"], - calmmind: ["1L1"], - closecombat: ["1L1"], - coaching: ["1L1"], - counter: ["1L1"], - dig: ["1L1"], - doublehit: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fakeout: ["1L1"], - falseswipe: ["1L1"], - feint: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - focuspunch: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - gunkshot: ["1L1"], - honeclaws: ["1L1"], - lashout: ["1L1"], - leer: ["1L1"], - lowkick: ["1L1"], - lowsweep: ["1L1"], - metalclaw: ["1L1"], - nastyplot: ["1L1"], - nightslash: ["1L1"], - poisonjab: ["1L1"], - poisontail: ["1L1"], - protect: ["1L1"], - quickattack: ["1L1"], - quickguard: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - reversal: ["1L1"], - rocksmash: ["1L1"], - scratch: ["1L1"], - screech: ["1L1"], - shadowball: ["1L1"], - shadowclaw: ["1L1"], - slash: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - sludgewave: ["1L1"], - spite: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swift: ["1L1"], - switcheroo: ["1L1"], - swordsdance: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - throatchop: ["1L1"], - toxic: ["1L1"], - toxicspikes: ["1L1"], - trailblaze: ["1L1"], - vacuumwave: ["1L1"], - venoshock: ["1L1"], - xscissor: ["1L1"], - }, - }, - weavile: { - learnset: { - aerialace: ["1L1"], - agility: ["1L1"], - assurance: ["1L1"], - attract: ["1L1"], - avalanche: ["1L1"], - batonpass: ["1L1"], - beatup: ["1L1"], - blizzard: ["1L1"], - brickbreak: ["1L1"], - calmmind: ["1L1"], - captivate: ["1L1"], - chillingwater: ["1L1"], - confide: ["1L1"], - cut: ["1L1"], - darkpulse: ["1L1"], - dig: ["1L1"], - doubleteam: ["1L1"], - dreameater: ["1L1"], - embargo: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fakeout: ["1L1"], - faketears: ["1L1"], - falseswipe: ["1L1"], - feintattack: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - focuspunch: ["1L1"], - foulplay: ["1L1"], - frustration: ["1L1"], - furycutter: ["1L1"], - furyswipes: ["1L1"], - gigaimpact: ["1L1"], - hail: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - honeclaws: ["1L1"], - hyperbeam: ["1L1"], - icebeam: ["1L1"], - icepunch: ["1L1"], - iceshard: ["1L1"], - icespinner: ["1L1"], - iciclespear: ["1L1"], - icywind: ["1L1"], - irontail: ["1L1"], - knockoff: ["1L1"], - laserfocus: ["1L1"], - lashout: ["1L1"], - leer: ["1L1"], - lowkick: ["1L1"], - lowsweep: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - metalclaw: ["1L1"], - metronome: ["1L1"], - mudslap: ["1L1"], - nastyplot: ["1L1"], - naturalgift: ["1L1"], - nightslash: ["1L1"], - payback: ["1L1"], - poisonjab: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - psychocut: ["1L1"], - psychup: ["1L1"], - punishment: ["1L1"], - quickattack: ["1L1"], - raindance: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - revenge: ["1L1"], - reversal: ["1L1"], - rocksmash: ["1L1"], - round: ["1L1"], - scaryface: ["1L1"], - scratch: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - shadowball: ["1L1"], - shadowclaw: ["1L1"], - slash: ["1L1"], - sleeptalk: ["1L1"], - snarl: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - snowscape: ["1L1"], - spite: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - swordsdance: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - throatchop: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - tripleaxel: ["1L1"], - upperhand: ["1L1"], - waterpulse: ["1L1"], - whirlpool: ["1L1"], - xscissor: ["1L1"], - }, - eventData: [ - {generation: 4, level: 30, gender: "M", nature: "Jolly", moves: ["1L1"], pokeball: "cherishball"}, - {generation: 6, level: 48, gender: "M", perfectIVs: 2, moves: ["1L1"], pokeball: "cherishball"}, - ], - }, - sneasler: { - learnset: { - acidspray: ["1L1"], - acrobatics: ["1L1"], - aerialace: ["1L1"], - agility: ["1L1"], - brickbreak: ["1L1"], - bulkup: ["1L1"], - calmmind: ["1L1"], - closecombat: ["1L1"], - coaching: ["1L1"], - dig: ["1L1"], - direclaw: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - falseswipe: ["1L1"], - firepunch: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - focuspunch: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - gunkshot: ["1L1"], - honeclaws: ["1L1"], - hyperbeam: ["1L1"], - lashout: ["1L1"], - leer: ["1L1"], - lowkick: ["1L1"], - lowsweep: ["1L1"], - metalclaw: ["1L1"], - nastyplot: ["1L1"], - poisonjab: ["1L1"], - poisontail: ["1L1"], - protect: ["1L1"], - quickattack: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - reversal: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - scratch: ["1L1"], - screech: ["1L1"], - shadowball: ["1L1"], - shadowclaw: ["1L1"], - slash: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - sludgewave: ["1L1"], - spite: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swift: ["1L1"], - swordsdance: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - throatchop: ["1L1"], - toxic: ["1L1"], - toxicspikes: ["1L1"], - trailblaze: ["1L1"], - upperhand: ["1L1"], - uturn: ["1L1"], - vacuumwave: ["1L1"], - venoshock: ["1L1"], - xscissor: ["1L1"], - }, - }, - teddiursa: { - learnset: { - aerialace: ["1L1"], - attract: ["1L1"], - avalanche: ["1L1"], - babydolleyes: ["1L1"], - bellydrum: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - bulkup: ["1L1"], - bulldoze: ["1L1"], - captivate: ["1L1"], - charm: ["1L1"], - chipaway: ["1L1"], - closecombat: ["1L1"], - confide: ["1L1"], - counter: ["1L1"], - covet: ["1L1"], - crosschop: ["1L1"], - crunch: ["1L1"], - curse: ["1L1"], - cut: ["1L1"], - defensecurl: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dynamicpunch: ["1L1"], - earthquake: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - faketears: ["1L1"], - feintattack: ["1L1"], - firepunch: ["1L1"], - fling: ["1L1"], - focusenergy: ["1L1"], - focuspunch: ["1L1"], - frustration: ["1L1"], - furycutter: ["1L1"], - furyswipes: ["1L1"], - gunkshot: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - honeclaws: ["1L1"], - hypervoice: ["1L1"], - icepunch: ["1L1"], - lastresort: ["1L1"], - leer: ["1L1"], - lick: ["1L1"], - lowkick: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - metalclaw: ["1L1"], - metronome: ["1L1"], - mimic: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - nightslash: ["1L1"], - payback: ["1L1"], - playnice: ["1L1"], - playrough: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - refresh: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - roar: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - scratch: ["1L1"], - secretpower: ["1L1"], - seedbomb: ["1L1"], - seismictoss: ["1L1"], - shadowclaw: ["1L1"], - slash: ["1L1"], - sleeptalk: ["1L1"], - smackdown: ["1L1"], - snore: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - superpower: ["1L1"], - swagger: ["1L1"], - sweetscent: ["1L1"], - swift: ["1L1"], - swordsdance: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thrash: ["1L1"], - thunderpunch: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - uproar: ["1L1"], - workup: ["1L1"], - yawn: ["1L1"], - zapcannon: ["1L1"], - }, - eventData: [ - {generation: 3, level: 10, gender: "M", abilities: ["1L1"], moves: ["1L1"], pokeball: "pokeball"}, - {generation: 3, level: 11, abilities: ["1L1"], moves: ["1L1"]}, - ], - encounters: [ - {generation: 2, level: 2}, - ], - }, - ursaring: { - learnset: { - aerialace: ["1L1"], - attract: ["1L1"], - avalanche: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - bulkup: ["1L1"], - bulldoze: ["1L1"], - captivate: ["1L1"], - charm: ["1L1"], - closecombat: ["1L1"], - confide: ["1L1"], - counter: ["1L1"], - covet: ["1L1"], - crunch: ["1L1"], - curse: ["1L1"], - cut: ["1L1"], - defensecurl: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dynamicpunch: ["1L1"], - earthquake: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - faketears: ["1L1"], - feintattack: ["1L1"], - firepunch: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - focuspunch: ["1L1"], - frustration: ["1L1"], - furycutter: ["1L1"], - furyswipes: ["1L1"], - gigaimpact: ["1L1"], - gunkshot: ["1L1"], - hammerarm: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - highhorsepower: ["1L1"], - honeclaws: ["1L1"], - hyperbeam: ["1L1"], - hypervoice: ["1L1"], - icepunch: ["1L1"], - laserfocus: ["1L1"], - lastresort: ["1L1"], - leer: ["1L1"], - lick: ["1L1"], - lowkick: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - metalclaw: ["1L1"], - metronome: ["1L1"], - mimic: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - payback: ["1L1"], - playnice: ["1L1"], - playrough: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - roar: ["1L1"], - rockclimb: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - scaryface: ["1L1"], - scratch: ["1L1"], - secretpower: ["1L1"], - seedbomb: ["1L1"], - seismictoss: ["1L1"], - shadowclaw: ["1L1"], - slash: ["1L1"], - sleeptalk: ["1L1"], - smackdown: ["1L1"], - snore: ["1L1"], - stompingtantrum: ["1L1"], - stoneedge: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - superpower: ["1L1"], - swagger: ["1L1"], - sweetscent: ["1L1"], - swift: ["1L1"], - swordsdance: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thrash: ["1L1"], - throatchop: ["1L1"], - thunderpunch: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - uproar: ["1L1"], - workup: ["1L1"], - zapcannon: ["1L1"], - }, - encounters: [ - {generation: 2, level: 25}, - ], - }, - ursaluna: { - learnset: { - aerialace: ["1L1"], - avalanche: ["1L1"], - bodypress: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - bulkup: ["1L1"], - bulldoze: ["1L1"], - charm: ["1L1"], - closecombat: ["1L1"], - covet: ["1L1"], - crunch: ["1L1"], - curse: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - drainpunch: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - faketears: ["1L1"], - firepunch: ["1L1"], - fling: ["1L1"], - focuspunch: ["1L1"], - furyswipes: ["1L1"], - gigaimpact: ["1L1"], - gunkshot: ["1L1"], - hammerarm: ["1L1"], - hardpress: ["1L1"], - headlongrush: ["1L1"], - heavyslam: ["1L1"], - helpinghand: ["1L1"], - highhorsepower: ["1L1"], - hyperbeam: ["1L1"], - hypervoice: ["1L1"], - icepunch: ["1L1"], - leer: ["1L1"], - lick: ["1L1"], - lowkick: ["1L1"], - metalclaw: ["1L1"], - metronome: ["1L1"], - payback: ["1L1"], - playnice: ["1L1"], - playrough: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - roar: ["1L1"], - rockslide: ["1L1"], - rocktomb: ["1L1"], - scaryface: ["1L1"], - scratch: ["1L1"], - seedbomb: ["1L1"], - shadowclaw: ["1L1"], - slash: ["1L1"], - sleeptalk: ["1L1"], - smackdown: ["1L1"], - snore: ["1L1"], - stompingtantrum: ["1L1"], - stoneedge: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - supercellslam: ["1L1"], - sweetscent: ["1L1"], - swift: ["1L1"], - swordsdance: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thrash: ["1L1"], - throatchop: ["1L1"], - thunderpunch: ["1L1"], - trailblaze: ["1L1"], - uproar: ["1L1"], - }, - }, - ursalunabloodmoon: { - learnset: { - avalanche: ["1L1"], - bellydrum: ["1L1"], - bloodmoon: ["1L1"], - bodypress: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - bulldoze: ["1L1"], - calmmind: ["1L1"], - closecombat: ["1L1"], - counter: ["1L1"], - crosschop: ["1L1"], - crunch: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - faketears: ["1L1"], - firepunch: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - focuspunch: ["1L1"], - furycutter: ["1L1"], - furyswipes: ["1L1"], - gigaimpact: ["1L1"], - gunkshot: ["1L1"], - hammerarm: ["1L1"], - harden: ["1L1"], - hardpress: ["1L1"], - headlongrush: ["1L1"], - heavyslam: ["1L1"], - helpinghand: ["1L1"], - highhorsepower: ["1L1"], - hyperbeam: ["1L1"], - hypervoice: ["1L1"], - icepunch: ["1L1"], - leer: ["1L1"], - lick: ["1L1"], - lowkick: ["1L1"], - metalclaw: ["1L1"], - moonblast: ["1L1"], - moonlight: ["1L1"], - mudshot: ["1L1"], - nightslash: ["1L1"], - payback: ["1L1"], - playnice: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - roar: ["1L1"], - rockslide: ["1L1"], - rocktomb: ["1L1"], - scaryface: ["1L1"], - scratch: ["1L1"], - seedbomb: ["1L1"], - seismictoss: ["1L1"], - shadowclaw: ["1L1"], - slash: ["1L1"], - sleeptalk: ["1L1"], - smackdown: ["1L1"], - snarl: ["1L1"], - snore: ["1L1"], - stompingtantrum: ["1L1"], - stoneedge: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swift: ["1L1"], - swordsdance: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thunderpunch: ["1L1"], - trailblaze: ["1L1"], - uproar: ["1L1"], - vacuumwave: ["1L1"], - yawn: ["1L1"], - }, - eventData: [ - {generation: 9, level: 70, nature: "Hardy", perfectIVs: 3, moves: ["1L1"]}, - ], - eventOnly: false, - }, - slugma: { - learnset: { - acidarmor: ["1L1"], - afteryou: ["1L1"], - amnesia: ["1L1"], - ancientpower: ["1L1"], - attract: ["1L1"], - bodyslam: ["1L1"], - bulldoze: ["1L1"], - captivate: ["1L1"], - clearsmog: ["1L1"], - confide: ["1L1"], - curse: ["1L1"], - defensecurl: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - ember: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fireblast: ["1L1"], - firespin: ["1L1"], - flameburst: ["1L1"], - flamecharge: ["1L1"], - flamethrower: ["1L1"], - frustration: ["1L1"], - guardswap: ["1L1"], - harden: ["1L1"], - heatcrash: ["1L1"], - heatwave: ["1L1"], - hiddenpower: ["1L1"], - highhorsepower: ["1L1"], - incinerate: ["1L1"], - inferno: ["1L1"], - infestation: ["1L1"], - irondefense: ["1L1"], - lavaplume: ["1L1"], - lightscreen: ["1L1"], - memento: ["1L1"], - mimic: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - naturepower: ["1L1"], - overheat: ["1L1"], - painsplit: ["1L1"], - powergem: ["1L1"], - protect: ["1L1"], - recover: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rockblast: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rockthrow: ["1L1"], - rocktomb: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - sandstorm: ["1L1"], - secretpower: ["1L1"], - selfdestruct: ["1L1"], - sleeptalk: ["1L1"], - smackdown: ["1L1"], - smog: ["1L1"], - smokescreen: ["1L1"], - snore: ["1L1"], - spitup: ["1L1"], - stealthrock: ["1L1"], - stockpile: ["1L1"], - stoneedge: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swallow: ["1L1"], - takedown: ["1L1"], - temperflare: ["1L1"], - terablast: ["1L1"], - toxic: ["1L1"], - willowisp: ["1L1"], - yawn: ["1L1"], - }, - }, - magcargo: { - learnset: { - afteryou: ["1L1"], - amnesia: ["1L1"], - ancientpower: ["1L1"], - attract: ["1L1"], - bodyslam: ["1L1"], - bulldoze: ["1L1"], - burningjealousy: ["1L1"], - captivate: ["1L1"], - clearsmog: ["1L1"], - confide: ["1L1"], - curse: ["1L1"], - defensecurl: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - ember: ["1L1"], - endure: ["1L1"], - explosion: ["1L1"], - facade: ["1L1"], - fireblast: ["1L1"], - firespin: ["1L1"], - flameburst: ["1L1"], - flamecharge: ["1L1"], - flamethrower: ["1L1"], - flareblitz: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - gyroball: ["1L1"], - harden: ["1L1"], - heatcrash: ["1L1"], - heatwave: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - incinerate: ["1L1"], - infestation: ["1L1"], - irondefense: ["1L1"], - lavaplume: ["1L1"], - lightscreen: ["1L1"], - mimic: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - naturepower: ["1L1"], - overheat: ["1L1"], - painsplit: ["1L1"], - powergem: ["1L1"], - protect: ["1L1"], - recover: ["1L1"], - reflect: ["1L1"], - refresh: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rockblast: ["1L1"], - rockpolish: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rockthrow: ["1L1"], - rocktomb: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - sandstorm: ["1L1"], - sandtomb: ["1L1"], - scorchingsands: ["1L1"], - secretpower: ["1L1"], - selfdestruct: ["1L1"], - shellsmash: ["1L1"], - sleeptalk: ["1L1"], - smackdown: ["1L1"], - smog: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - stealthrock: ["1L1"], - stompingtantrum: ["1L1"], - stoneedge: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - takedown: ["1L1"], - temperflare: ["1L1"], - terablast: ["1L1"], - toxic: ["1L1"], - willowisp: ["1L1"], - yawn: ["1L1"], - }, - eventData: [ - {generation: 3, level: 38, moves: ["1L1"]}, - ], - encounters: [ - {generation: 3, level: 25}, - {generation: 6, level: 30}, - ], - }, - swinub: { - learnset: { - amnesia: ["1L1"], - ancientpower: ["1L1"], - attract: ["1L1"], - avalanche: ["1L1"], - bite: ["1L1"], - blizzard: ["1L1"], - bodyslam: ["1L1"], - bulldoze: ["1L1"], - captivate: ["1L1"], - charm: ["1L1"], - confide: ["1L1"], - curse: ["1L1"], - defensecurl: ["1L1"], - detect: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fissure: ["1L1"], - flail: ["1L1"], - freezedry: ["1L1"], - frustration: ["1L1"], - hail: ["1L1"], - haze: ["1L1"], - headbutt: ["1L1"], - hiddenpower: ["1L1"], - highhorsepower: ["1L1"], - icebeam: ["1L1"], - icefang: ["1L1"], - iceshard: ["1L1"], - iciclecrash: ["1L1"], - iciclespear: ["1L1"], - icywind: ["1L1"], - lightscreen: ["1L1"], - mimic: ["1L1"], - mist: ["1L1"], - mudbomb: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - mudsport: ["1L1"], - naturalgift: ["1L1"], - odorsleuth: ["1L1"], - powdersnow: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - reversal: ["1L1"], - roar: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - sandstorm: ["1L1"], - sandtomb: ["1L1"], - scaryface: ["1L1"], - secretpower: ["1L1"], - sleeptalk: ["1L1"], - smackdown: ["1L1"], - snore: ["1L1"], - snowscape: ["1L1"], - stealthrock: ["1L1"], - stompingtantrum: ["1L1"], - stoneedge: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - superpower: ["1L1"], - swagger: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - }, - eventData: [ - {generation: 3, level: 22, abilities: ["1L1"], moves: ["1L1"]}, - ], - }, - piloswine: { - learnset: { - amnesia: ["1L1"], - ancientpower: ["1L1"], - attract: ["1L1"], - avalanche: ["1L1"], - blizzard: ["1L1"], - bodyslam: ["1L1"], - bulldoze: ["1L1"], - captivate: ["1L1"], - charm: ["1L1"], - confide: ["1L1"], - curse: ["1L1"], - defensecurl: ["1L1"], - detect: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - flail: ["1L1"], - frustration: ["1L1"], - furyattack: ["1L1"], - gigaimpact: ["1L1"], - hail: ["1L1"], - haze: ["1L1"], - headbutt: ["1L1"], - hiddenpower: ["1L1"], - highhorsepower: ["1L1"], - hornattack: ["1L1"], - hyperbeam: ["1L1"], - icebeam: ["1L1"], - icefang: ["1L1"], - iceshard: ["1L1"], - iciclespear: ["1L1"], - icywind: ["1L1"], - lightscreen: ["1L1"], - mimic: ["1L1"], - mist: ["1L1"], - mudbomb: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - mudsport: ["1L1"], - naturalgift: ["1L1"], - odorsleuth: ["1L1"], - peck: ["1L1"], - powdersnow: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - reversal: ["1L1"], - roar: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - sandstorm: ["1L1"], - sandtomb: ["1L1"], - scaryface: ["1L1"], - secretpower: ["1L1"], - sleeptalk: ["1L1"], - smackdown: ["1L1"], - snore: ["1L1"], - snowscape: ["1L1"], - stealthrock: ["1L1"], - stompingtantrum: ["1L1"], - stoneedge: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - superpower: ["1L1"], - swagger: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thrash: ["1L1"], - throatchop: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - }, - encounters: [ - {generation: 6, level: 30}, - ], - }, - mamoswine: { - learnset: { - amnesia: ["1L1"], - ancientpower: ["1L1"], - attract: ["1L1"], - avalanche: ["1L1"], - blizzard: ["1L1"], - block: ["1L1"], - bodypress: ["1L1"], - bodyslam: ["1L1"], - bulldoze: ["1L1"], - captivate: ["1L1"], - charm: ["1L1"], - confide: ["1L1"], - curse: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doublehit: ["1L1"], - doubleteam: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - flail: ["1L1"], - frustration: ["1L1"], - furyattack: ["1L1"], - furycutter: ["1L1"], - gigaimpact: ["1L1"], - hail: ["1L1"], - hardpress: ["1L1"], - haze: ["1L1"], - headbutt: ["1L1"], - heavyslam: ["1L1"], - hiddenpower: ["1L1"], - highhorsepower: ["1L1"], - hyperbeam: ["1L1"], - icebeam: ["1L1"], - icefang: ["1L1"], - iceshard: ["1L1"], - iciclecrash: ["1L1"], - iciclespear: ["1L1"], - icywind: ["1L1"], - ironhead: ["1L1"], - knockoff: ["1L1"], - lightscreen: ["1L1"], - mist: ["1L1"], - mudbomb: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - mudsport: ["1L1"], - naturalgift: ["1L1"], - odorsleuth: ["1L1"], - peck: ["1L1"], - powdersnow: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - reversal: ["1L1"], - roar: ["1L1"], - rockblast: ["1L1"], - rockclimb: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - sandstorm: ["1L1"], - sandtomb: ["1L1"], - scaryface: ["1L1"], - secretpower: ["1L1"], - sleeptalk: ["1L1"], - smackdown: ["1L1"], - snore: ["1L1"], - snowscape: ["1L1"], - stealthrock: ["1L1"], - stompingtantrum: ["1L1"], - stoneedge: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - superpower: ["1L1"], - swagger: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thrash: ["1L1"], - throatchop: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - }, - eventData: [ - {generation: 5, level: 34, gender: "M", isHidden: true, moves: ["1L1"]}, - {generation: 6, level: 50, shiny: true, gender: "M", nature: "Adamant", isHidden: true, moves: ["1L1"], pokeball: "pokeball"}, - ], - }, - corsola: { - learnset: { - amnesia: ["1L1"], - ancientpower: ["1L1"], - aquaring: ["1L1"], - attract: ["1L1"], - barrier: ["1L1"], - bide: ["1L1"], - blizzard: ["1L1"], - bodyslam: ["1L1"], - brine: ["1L1"], - bubble: ["1L1"], - bubblebeam: ["1L1"], - bulldoze: ["1L1"], - calmmind: ["1L1"], - camouflage: ["1L1"], - captivate: ["1L1"], - confide: ["1L1"], - confuseray: ["1L1"], - curse: ["1L1"], - defensecurl: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - explosion: ["1L1"], - facade: ["1L1"], - flail: ["1L1"], - frustration: ["1L1"], - hail: ["1L1"], - harden: ["1L1"], - headbutt: ["1L1"], - headsmash: ["1L1"], - hiddenpower: ["1L1"], - hydropump: ["1L1"], - icebeam: ["1L1"], - iciclespear: ["1L1"], - icywind: ["1L1"], - ingrain: ["1L1"], - irondefense: ["1L1"], - lifedew: ["1L1"], - lightscreen: ["1L1"], - liquidation: ["1L1"], - luckychant: ["1L1"], - magiccoat: ["1L1"], - meteorbeam: ["1L1"], - mimic: ["1L1"], - mirrorcoat: ["1L1"], - mist: ["1L1"], - mudslap: ["1L1"], - mudsport: ["1L1"], - naturalgift: ["1L1"], - naturepower: ["1L1"], - powergem: ["1L1"], - protect: ["1L1"], - psychic: ["1L1"], - raindance: ["1L1"], - recover: ["1L1"], - reflect: ["1L1"], - refresh: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rockblast: ["1L1"], - rockpolish: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - sandstorm: ["1L1"], - scald: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - selfdestruct: ["1L1"], - shadowball: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - spikecannon: ["1L1"], - stealthrock: ["1L1"], - stompingtantrum: ["1L1"], - stoneedge: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - sunnyday: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - tackle: ["1L1"], - throatchop: ["1L1"], - toxic: ["1L1"], - watergun: ["1L1"], - waterpulse: ["1L1"], - whirlpool: ["1L1"], - }, - eventData: [ - {generation: 3, level: 5, shiny: 1, moves: ["1L1"], pokeball: "pokeball", emeraldEventEgg: true}, - {generation: 7, level: 50, gender: "F", nature: "Serious", abilities: ["1L1"], moves: ["1L1"], pokeball: "ultraball"}, - ], - }, - corsolagalar: { - learnset: { - amnesia: ["1L1"], - ancientpower: ["1L1"], - astonish: ["1L1"], - attract: ["1L1"], - blizzard: ["1L1"], - bodyslam: ["1L1"], - brine: ["1L1"], - bulldoze: ["1L1"], - calmmind: ["1L1"], - confuseray: ["1L1"], - curse: ["1L1"], - destinybond: ["1L1"], - dig: ["1L1"], - disable: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - gigadrain: ["1L1"], - grudge: ["1L1"], - hail: ["1L1"], - harden: ["1L1"], - haze: ["1L1"], - headsmash: ["1L1"], - hex: ["1L1"], - hydropump: ["1L1"], - icebeam: ["1L1"], - iciclespear: ["1L1"], - icywind: ["1L1"], - irondefense: ["1L1"], - lightscreen: ["1L1"], - liquidation: ["1L1"], - meteorbeam: ["1L1"], - mirrorcoat: ["1L1"], - naturepower: ["1L1"], - nightshade: ["1L1"], - powergem: ["1L1"], - protect: ["1L1"], - psychic: ["1L1"], - raindance: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - rockblast: ["1L1"], - rockslide: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - sandstorm: ["1L1"], - scald: ["1L1"], - screech: ["1L1"], - selfdestruct: ["1L1"], - shadowball: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - spite: ["1L1"], - stealthrock: ["1L1"], - stompingtantrum: ["1L1"], - stoneedge: ["1L1"], - strengthsap: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - surf: ["1L1"], - tackle: ["1L1"], - throatchop: ["1L1"], - waterpulse: ["1L1"], - whirlpool: ["1L1"], - willowisp: ["1L1"], - }, - eventData: [ - {generation: 8, level: 15, isHidden: true, moves: ["1L1"], pokeball: "cherishball"}, - ], - }, - cursola: { - learnset: { - amnesia: ["1L1"], - ancientpower: ["1L1"], - astonish: ["1L1"], - attract: ["1L1"], - blizzard: ["1L1"], - bodyslam: ["1L1"], - brine: ["1L1"], - bulldoze: ["1L1"], - burningjealousy: ["1L1"], - calmmind: ["1L1"], - curse: ["1L1"], - dig: ["1L1"], - disable: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - gigadrain: ["1L1"], - gigaimpact: ["1L1"], - grudge: ["1L1"], - hail: ["1L1"], - harden: ["1L1"], - hex: ["1L1"], - hydropump: ["1L1"], - hyperbeam: ["1L1"], - icebeam: ["1L1"], - iciclespear: ["1L1"], - icywind: ["1L1"], - irondefense: ["1L1"], - leechlife: ["1L1"], - lightscreen: ["1L1"], - liquidation: ["1L1"], - meteorbeam: ["1L1"], - mirrorcoat: ["1L1"], - nightshade: ["1L1"], - perishsong: ["1L1"], - pinmissile: ["1L1"], - poltergeist: ["1L1"], - powergem: ["1L1"], - protect: ["1L1"], - psychic: ["1L1"], - raindance: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - revenge: ["1L1"], - rockblast: ["1L1"], - rockslide: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - sandstorm: ["1L1"], - scald: ["1L1"], - screech: ["1L1"], - selfdestruct: ["1L1"], - shadowball: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - spite: ["1L1"], - stealthrock: ["1L1"], - stompingtantrum: ["1L1"], - stoneedge: ["1L1"], - strengthsap: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - surf: ["1L1"], - tackle: ["1L1"], - throatchop: ["1L1"], - whirlpool: ["1L1"], - willowisp: ["1L1"], - }, - }, - remoraid: { - learnset: { - acidspray: ["1L1"], - assurance: ["1L1"], - attract: ["1L1"], - aurorabeam: ["1L1"], - blizzard: ["1L1"], - bounce: ["1L1"], - brine: ["1L1"], - bubblebeam: ["1L1"], - bulletseed: ["1L1"], - captivate: ["1L1"], - chargebeam: ["1L1"], - confide: ["1L1"], - curse: ["1L1"], - defensecurl: ["1L1"], - dive: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - endure: ["1L1"], - entrainment: ["1L1"], - facade: ["1L1"], - fireblast: ["1L1"], - flail: ["1L1"], - flamethrower: ["1L1"], - focusenergy: ["1L1"], - frustration: ["1L1"], - gunkshot: ["1L1"], - haze: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hydropump: ["1L1"], - hyperbeam: ["1L1"], - icebeam: ["1L1"], - icywind: ["1L1"], - incinerate: ["1L1"], - lockon: ["1L1"], - mimic: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - octazooka: ["1L1"], - protect: ["1L1"], - psybeam: ["1L1"], - psychic: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rockblast: ["1L1"], - round: ["1L1"], - scald: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - seedbomb: ["1L1"], - signalbeam: ["1L1"], - sleeptalk: ["1L1"], - smackdown: ["1L1"], - snore: ["1L1"], - soak: ["1L1"], - stringshot: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - supersonic: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - thief: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - waterfall: ["1L1"], - watergun: ["1L1"], - waterpulse: ["1L1"], - waterspout: ["1L1"], - whirlpool: ["1L1"], - }, - }, - octillery: { - learnset: { - assurance: ["1L1"], - attract: ["1L1"], - aurorabeam: ["1L1"], - bind: ["1L1"], - blizzard: ["1L1"], - bounce: ["1L1"], - brine: ["1L1"], - bubblebeam: ["1L1"], - bulletseed: ["1L1"], - captivate: ["1L1"], - chargebeam: ["1L1"], - confide: ["1L1"], - constrict: ["1L1"], - curse: ["1L1"], - defensecurl: ["1L1"], - dive: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - fireblast: ["1L1"], - flamethrower: ["1L1"], - flashcannon: ["1L1"], - focusenergy: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - gunkshot: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hydropump: ["1L1"], - hyperbeam: ["1L1"], - icebeam: ["1L1"], - icywind: ["1L1"], - incinerate: ["1L1"], - liquidation: ["1L1"], - lockon: ["1L1"], - mimic: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - octazooka: ["1L1"], - payback: ["1L1"], - protect: ["1L1"], - psybeam: ["1L1"], - psychic: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rockblast: ["1L1"], - round: ["1L1"], - scald: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - seedbomb: ["1L1"], - seismictoss: ["1L1"], - signalbeam: ["1L1"], - skittersmack: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - sludgewave: ["1L1"], - smackdown: ["1L1"], - snore: ["1L1"], - soak: ["1L1"], - stringshot: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - thief: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - waterfall: ["1L1"], - watergun: ["1L1"], - waterpulse: ["1L1"], - whirlpool: ["1L1"], - wrap: ["1L1"], - wringout: ["1L1"], - }, - eventData: [ - {generation: 4, level: 50, gender: "F", nature: "Serious", abilities: ["1L1"], moves: ["1L1"], pokeball: "cherishball"}, - ], - encounters: [ - {generation: 4, level: 19}, - {generation: 7, level: 10}, - ], - }, - delibird: { - learnset: { - acrobatics: ["1L1"], - aerialace: ["1L1"], - agility: ["1L1"], - aircutter: ["1L1"], - airslash: ["1L1"], - assurance: ["1L1"], - attract: ["1L1"], - aurorabeam: ["1L1"], - auroraveil: ["1L1"], - avalanche: ["1L1"], - batonpass: ["1L1"], - bestow: ["1L1"], - blizzard: ["1L1"], - bodyslam: ["1L1"], - bounce: ["1L1"], - bravebird: ["1L1"], - brickbreak: ["1L1"], - brutalswing: ["1L1"], - captivate: ["1L1"], - chillingwater: ["1L1"], - confide: ["1L1"], - counter: ["1L1"], - curse: ["1L1"], - defog: ["1L1"], - destinybond: ["1L1"], - detect: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - drillpeck: ["1L1"], - drillrun: ["1L1"], - dualwingbeat: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fakeout: ["1L1"], - featherdance: ["1L1"], - fling: ["1L1"], - fly: ["1L1"], - focuspunch: ["1L1"], - foulplay: ["1L1"], - freezedry: ["1L1"], - frostbreath: ["1L1"], - frustration: ["1L1"], - futuresight: ["1L1"], - gigaimpact: ["1L1"], - gunkshot: ["1L1"], - hail: ["1L1"], - happyhour: ["1L1"], - haze: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - iceball: ["1L1"], - icebeam: ["1L1"], - icepunch: ["1L1"], - iceshard: ["1L1"], - icespinner: ["1L1"], - iciclespear: ["1L1"], - icywind: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - memento: ["1L1"], - mimic: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - pluck: ["1L1"], - poweruppunch: ["1L1"], - present: ["1L1"], - protect: ["1L1"], - quickattack: ["1L1"], - raindance: ["1L1"], - rapidspin: ["1L1"], - recycle: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - reversal: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - secretpower: ["1L1"], - seedbomb: ["1L1"], - seismictoss: ["1L1"], - signalbeam: ["1L1"], - skyattack: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - snowscape: ["1L1"], - spikes: ["1L1"], - splash: ["1L1"], - steelwing: ["1L1"], - substitute: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - tailwind: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - tripleaxel: ["1L1"], - waterpulse: ["1L1"], - weatherball: ["1L1"], - }, - eventData: [ - {generation: 3, level: 10, gender: "M", moves: ["1L1"], pokeball: "pokeball"}, - {generation: 6, level: 10, abilities: ["1L1"], moves: ["1L1"], pokeball: "cherishball"}, - ], - }, - mantyke: { - learnset: { - acrobatics: ["1L1"], - aerialace: ["1L1"], - agility: ["1L1"], - aircutter: ["1L1"], - airslash: ["1L1"], - amnesia: ["1L1"], - aquaring: ["1L1"], - attract: ["1L1"], - blizzard: ["1L1"], - bounce: ["1L1"], - bubble: ["1L1"], - bubblebeam: ["1L1"], - bulldoze: ["1L1"], - captivate: ["1L1"], - confide: ["1L1"], - confuseray: ["1L1"], - dive: ["1L1"], - doubleteam: ["1L1"], - earthquake: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - frustration: ["1L1"], - hail: ["1L1"], - haze: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hydropump: ["1L1"], - icebeam: ["1L1"], - icywind: ["1L1"], - mirrorcoat: ["1L1"], - mudslap: ["1L1"], - mudsport: ["1L1"], - naturalgift: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rockslide: ["1L1"], - round: ["1L1"], - scald: ["1L1"], - secretpower: ["1L1"], - signalbeam: ["1L1"], - slam: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - splash: ["1L1"], - substitute: ["1L1"], - supersonic: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - tackle: ["1L1"], - tailwind: ["1L1"], - takedown: ["1L1"], - toxic: ["1L1"], - twister: ["1L1"], - waterfall: ["1L1"], - watergun: ["1L1"], - waterpulse: ["1L1"], - watersport: ["1L1"], - whirlpool: ["1L1"], - wideguard: ["1L1"], - wingattack: ["1L1"], - }, - }, - mantine: { - learnset: { - acrobatics: ["1L1"], - aerialace: ["1L1"], - agility: ["1L1"], - aircutter: ["1L1"], - airslash: ["1L1"], - amnesia: ["1L1"], - aquaring: ["1L1"], - aquatail: ["1L1"], - assurance: ["1L1"], - attract: ["1L1"], - blizzard: ["1L1"], - bodypress: ["1L1"], - bodyslam: ["1L1"], - bounce: ["1L1"], - brine: ["1L1"], - bubble: ["1L1"], - bubblebeam: ["1L1"], - bulldoze: ["1L1"], - bulletseed: ["1L1"], - captivate: ["1L1"], - confide: ["1L1"], - confuseray: ["1L1"], - curse: ["1L1"], - defog: ["1L1"], - dive: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dualwingbeat: ["1L1"], - earthquake: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - gunkshot: ["1L1"], - hail: ["1L1"], - haze: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hurricane: ["1L1"], - hydropump: ["1L1"], - hyperbeam: ["1L1"], - icebeam: ["1L1"], - icywind: ["1L1"], - ironhead: ["1L1"], - liquidation: ["1L1"], - mimic: ["1L1"], - mirrorcoat: ["1L1"], - mudslap: ["1L1"], - mudsport: ["1L1"], - naturalgift: ["1L1"], - protect: ["1L1"], - psybeam: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rockblast: ["1L1"], - rockslide: ["1L1"], - rocktomb: ["1L1"], - roost: ["1L1"], - round: ["1L1"], - scald: ["1L1"], - secretpower: ["1L1"], - seedbomb: ["1L1"], - signalbeam: ["1L1"], - slam: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - splash: ["1L1"], - stringshot: ["1L1"], - substitute: ["1L1"], - supersonic: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - tackle: ["1L1"], - tailwind: ["1L1"], - takedown: ["1L1"], - toxic: ["1L1"], - twister: ["1L1"], - waterfall: ["1L1"], - watergun: ["1L1"], - waterpulse: ["1L1"], - watersport: ["1L1"], - whirlpool: ["1L1"], - wideguard: ["1L1"], - wingattack: ["1L1"], - }, - eventData: [ - {generation: 3, level: 10, gender: "M", moves: ["1L1"], pokeball: "pokeball"}, - ], - }, - skarmory: { - learnset: { - aerialace: ["1L1"], - agility: ["1L1"], - aircutter: ["1L1"], - airslash: ["1L1"], - assurance: ["1L1"], - attract: ["1L1"], - autotomize: ["1L1"], - bodypress: ["1L1"], - bravebird: ["1L1"], - captivate: ["1L1"], - confide: ["1L1"], - counter: ["1L1"], - curse: ["1L1"], - cut: ["1L1"], - darkpulse: ["1L1"], - defog: ["1L1"], - detect: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - drillpeck: ["1L1"], - drillrun: ["1L1"], - dualwingbeat: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - feint: ["1L1"], - flash: ["1L1"], - flashcannon: ["1L1"], - fly: ["1L1"], - frustration: ["1L1"], - furyattack: ["1L1"], - furycutter: ["1L1"], - gigaimpact: ["1L1"], - guardswap: ["1L1"], - hiddenpower: ["1L1"], - hurricane: ["1L1"], - hyperbeam: ["1L1"], - icywind: ["1L1"], - irondefense: ["1L1"], - ironhead: ["1L1"], - leer: ["1L1"], - metalclaw: ["1L1"], - metalsound: ["1L1"], - mimic: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - nightslash: ["1L1"], - ominouswind: ["1L1"], - payback: ["1L1"], - peck: ["1L1"], - pluck: ["1L1"], - protect: ["1L1"], - pursuit: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - reversal: ["1L1"], - roar: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - roost: ["1L1"], - round: ["1L1"], - sandattack: ["1L1"], - sandstorm: ["1L1"], - sandtomb: ["1L1"], - secretpower: ["1L1"], - skyattack: ["1L1"], - skydrop: ["1L1"], - slash: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - spikes: ["1L1"], - stealthrock: ["1L1"], - steelbeam: ["1L1"], - steelwing: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - swordsdance: ["1L1"], - tailwind: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - twister: ["1L1"], - whirlwind: ["1L1"], - wingattack: ["1L1"], - xscissor: ["1L1"], - }, - }, - houndour: { - learnset: { - attract: ["1L1"], - beatup: ["1L1"], - bite: ["1L1"], - bodyslam: ["1L1"], - burningjealousy: ["1L1"], - captivate: ["1L1"], - charm: ["1L1"], - comeuppance: ["1L1"], - confide: ["1L1"], - counter: ["1L1"], - crunch: ["1L1"], - curse: ["1L1"], - darkpulse: ["1L1"], - destinybond: ["1L1"], - detect: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dreameater: ["1L1"], - embargo: ["1L1"], - ember: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - feint: ["1L1"], - feintattack: ["1L1"], - fireblast: ["1L1"], - firefang: ["1L1"], - firespin: ["1L1"], - flamecharge: ["1L1"], - flamethrower: ["1L1"], - flareblitz: ["1L1"], - foulplay: ["1L1"], - frustration: ["1L1"], - headbutt: ["1L1"], - heatwave: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - howl: ["1L1"], - hypervoice: ["1L1"], - incinerate: ["1L1"], - inferno: ["1L1"], - irontail: ["1L1"], - lashout: ["1L1"], - leer: ["1L1"], - mimic: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - nastyplot: ["1L1"], - naturalgift: ["1L1"], - nightmare: ["1L1"], - odorsleuth: ["1L1"], - overheat: ["1L1"], - painsplit: ["1L1"], - payback: ["1L1"], - protect: ["1L1"], - psychicfangs: ["1L1"], - punishment: ["1L1"], - pursuit: ["1L1"], - rage: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - reversal: ["1L1"], - roar: ["1L1"], - rocksmash: ["1L1"], - roleplay: ["1L1"], - round: ["1L1"], - scaryface: ["1L1"], - secretpower: ["1L1"], - shadowball: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - smog: ["1L1"], - snarl: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - spite: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - sunnyday: ["1L1"], - superfang: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - temperflare: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thunderfang: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - uproar: ["1L1"], - willowisp: ["1L1"], - }, - eventData: [ - {generation: 3, level: 10, gender: "M", moves: ["1L1"], pokeball: "pokeball"}, - {generation: 3, level: 17, moves: ["1L1"]}, - ], - }, - houndoom: { - learnset: { - attract: ["1L1"], - beatup: ["1L1"], - bite: ["1L1"], - bodyslam: ["1L1"], - burningjealousy: ["1L1"], - captivate: ["1L1"], - comeuppance: ["1L1"], - confide: ["1L1"], - counter: ["1L1"], - crunch: ["1L1"], - curse: ["1L1"], - darkpulse: ["1L1"], - detect: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dreameater: ["1L1"], - embargo: ["1L1"], - ember: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - feintattack: ["1L1"], - fireblast: ["1L1"], - firefang: ["1L1"], - firespin: ["1L1"], - flamecharge: ["1L1"], - flamethrower: ["1L1"], - flareblitz: ["1L1"], - foulplay: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - headbutt: ["1L1"], - heatwave: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - howl: ["1L1"], - hyperbeam: ["1L1"], - hypervoice: ["1L1"], - incinerate: ["1L1"], - inferno: ["1L1"], - irontail: ["1L1"], - laserfocus: ["1L1"], - lashout: ["1L1"], - leer: ["1L1"], - mimic: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - nastyplot: ["1L1"], - naturalgift: ["1L1"], - nightmare: ["1L1"], - odorsleuth: ["1L1"], - overheat: ["1L1"], - painsplit: ["1L1"], - payback: ["1L1"], - protect: ["1L1"], - psychicfangs: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - reversal: ["1L1"], - roar: ["1L1"], - rocksmash: ["1L1"], - roleplay: ["1L1"], - round: ["1L1"], - scaryface: ["1L1"], - secretpower: ["1L1"], - shadowball: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - smog: ["1L1"], - snarl: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - spite: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - sunnyday: ["1L1"], - superfang: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - temperflare: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - throatchop: ["1L1"], - thunderfang: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - uproar: ["1L1"], - willowisp: ["1L1"], - }, - eventData: [ - {generation: 6, level: 50, nature: "Timid", abilities: ["1L1"], moves: ["1L1"], pokeball: "cherishball"}, - ], - encounters: [ - {generation: 4, level: 20}, - ], - }, - phanpy: { - learnset: { - ancientpower: ["1L1"], - attract: ["1L1"], - bodyslam: ["1L1"], - bulldoze: ["1L1"], - captivate: ["1L1"], - charm: ["1L1"], - confide: ["1L1"], - counter: ["1L1"], - curse: ["1L1"], - defensecurl: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - echoedvoice: ["1L1"], - encore: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fissure: ["1L1"], - flail: ["1L1"], - focusenergy: ["1L1"], - frustration: ["1L1"], - growl: ["1L1"], - gunkshot: ["1L1"], - headbutt: ["1L1"], - headsmash: ["1L1"], - heavyslam: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - highhorsepower: ["1L1"], - hypervoice: ["1L1"], - iceshard: ["1L1"], - ironhead: ["1L1"], - irontail: ["1L1"], - knockoff: ["1L1"], - lastresort: ["1L1"], - mimic: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - odorsleuth: ["1L1"], - playrough: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roar: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - sandstorm: ["1L1"], - sandtomb: ["1L1"], - secretpower: ["1L1"], - seedbomb: ["1L1"], - slam: ["1L1"], - sleeptalk: ["1L1"], - smackdown: ["1L1"], - snore: ["1L1"], - stealthrock: ["1L1"], - stompingtantrum: ["1L1"], - stoneedge: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - superpower: ["1L1"], - swagger: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - watergun: ["1L1"], - }, - encounters: [ - {generation: 2, level: 2}, - ], - }, - donphan: { - learnset: { - ancientpower: ["1L1"], - assurance: ["1L1"], - attract: ["1L1"], - block: ["1L1"], - bodypress: ["1L1"], - bodyslam: ["1L1"], - bounce: ["1L1"], - brutalswing: ["1L1"], - bulldoze: ["1L1"], - captivate: ["1L1"], - charm: ["1L1"], - confide: ["1L1"], - counter: ["1L1"], - curse: ["1L1"], - defensecurl: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - echoedvoice: ["1L1"], - encore: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - firefang: ["1L1"], - flail: ["1L1"], - frustration: ["1L1"], - furyattack: ["1L1"], - gigaimpact: ["1L1"], - growl: ["1L1"], - gunkshot: ["1L1"], - gyroball: ["1L1"], - headbutt: ["1L1"], - heavyslam: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - highhorsepower: ["1L1"], - hornattack: ["1L1"], - hyperbeam: ["1L1"], - hypervoice: ["1L1"], - icefang: ["1L1"], - icespinner: ["1L1"], - irondefense: ["1L1"], - ironhead: ["1L1"], - irontail: ["1L1"], - knockoff: ["1L1"], - lastresort: ["1L1"], - magnitude: ["1L1"], - mimic: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - odorsleuth: ["1L1"], - playrough: ["1L1"], - poisonjab: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - rapidspin: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roar: ["1L1"], - rockpolish: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - sandstorm: ["1L1"], - sandtomb: ["1L1"], - scaryface: ["1L1"], - secretpower: ["1L1"], - seedbomb: ["1L1"], - slam: ["1L1"], - sleeptalk: ["1L1"], - smackdown: ["1L1"], - smartstrike: ["1L1"], - snore: ["1L1"], - stealthrock: ["1L1"], - stompingtantrum: ["1L1"], - stoneedge: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - superpower: ["1L1"], - swagger: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - throatchop: ["1L1"], - thunderfang: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - }, - encounters: [ - {generation: 6, level: 24, maxEggMoves: 1}, - ], - }, - stantler: { - learnset: { - agility: ["1L1"], - astonish: ["1L1"], - attract: ["1L1"], - bite: ["1L1"], - bodyslam: ["1L1"], - bounce: ["1L1"], - bulldoze: ["1L1"], - calmmind: ["1L1"], - captivate: ["1L1"], - chargebeam: ["1L1"], - confide: ["1L1"], - confuseray: ["1L1"], - curse: ["1L1"], - detect: ["1L1"], - dig: ["1L1"], - disable: ["1L1"], - doubleedge: ["1L1"], - doublekick: ["1L1"], - doubleteam: ["1L1"], - dreameater: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - extrasensory: ["1L1"], - facade: ["1L1"], - flash: ["1L1"], - frustration: ["1L1"], - futuresight: ["1L1"], - gigaimpact: ["1L1"], - gravity: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - hypnosis: ["1L1"], - imprison: ["1L1"], - irontail: ["1L1"], - jumpkick: ["1L1"], - lastresort: ["1L1"], - leer: ["1L1"], - lightscreen: ["1L1"], - lunge: ["1L1"], - magicroom: ["1L1"], - mefirst: ["1L1"], - megahorn: ["1L1"], - mimic: ["1L1"], - mudslap: ["1L1"], - mudsport: ["1L1"], - naturalgift: ["1L1"], - nightmare: ["1L1"], - protect: ["1L1"], - psybeam: ["1L1"], - psychic: ["1L1"], - psychup: ["1L1"], - psyshieldbash: ["1L1"], - psyshock: ["1L1"], - rage: ["1L1"], - raindance: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - roar: ["1L1"], - roleplay: ["1L1"], - round: ["1L1"], - sandattack: ["1L1"], - scaryface: ["1L1"], - secretpower: ["1L1"], - shadowball: ["1L1"], - shockwave: ["1L1"], - signalbeam: ["1L1"], - skillswap: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - spite: ["1L1"], - stomp: ["1L1"], - storedpower: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thrash: ["1L1"], - throatchop: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - trick: ["1L1"], - trickroom: ["1L1"], - uproar: ["1L1"], - wildcharge: ["1L1"], - workup: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 3, level: 10, gender: "M", abilities: ["1L1"], moves: ["1L1"], pokeball: "pokeball"}, - ], - }, - wyrdeer: { - learnset: { - agility: ["1L1"], - astonish: ["1L1"], - bodyslam: ["1L1"], - bulldoze: ["1L1"], - calmmind: ["1L1"], - chargebeam: ["1L1"], - confuseray: ["1L1"], - curse: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - expandingforce: ["1L1"], - facade: ["1L1"], - futuresight: ["1L1"], - gigaimpact: ["1L1"], - gravity: ["1L1"], - helpinghand: ["1L1"], - highhorsepower: ["1L1"], - hyperbeam: ["1L1"], - hypnosis: ["1L1"], - imprison: ["1L1"], - leer: ["1L1"], - lightscreen: ["1L1"], - lunge: ["1L1"], - megahorn: ["1L1"], - protect: ["1L1"], - psybeam: ["1L1"], - psychic: ["1L1"], - psychicnoise: ["1L1"], - psychup: ["1L1"], - psyshieldbash: ["1L1"], - psyshock: ["1L1"], - raindance: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - roar: ["1L1"], - roleplay: ["1L1"], - sandattack: ["1L1"], - scaryface: ["1L1"], - shadowball: ["1L1"], - skillswap: ["1L1"], - sleeptalk: ["1L1"], - solarbeam: ["1L1"], - spite: ["1L1"], - stomp: ["1L1"], - storedpower: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swift: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - throatchop: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderwave: ["1L1"], - trailblaze: ["1L1"], - trick: ["1L1"], - trickroom: ["1L1"], - uproar: ["1L1"], - wildcharge: ["1L1"], - zenheadbutt: ["1L1"], - }, - }, - smeargle: { - learnset: { - captivate: ["1L1"], - falseswipe: ["1L1"], - flamethrower: ["1L1"], - furyswipes: ["1L1"], - meanlook: ["1L1"], - odorsleuth: ["1L1"], - seismictoss: ["1L1"], - sketch: ["1L1"], - sleeptalk: ["1L1"], - spore: ["1L1"], - }, - eventData: [ - {generation: 3, level: 10, gender: "M", abilities: ["1L1"], moves: ["1L1"], pokeball: "pokeball"}, - {generation: 5, level: 50, gender: "F", nature: "Jolly", ivs: {atk: 31, spe: 31}, abilities: ["1L1"], moves: ["1L1"], pokeball: "cherishball"}, - {generation: 6, level: 40, gender: "M", nature: "Jolly", abilities: ["1L1"], moves: ["1L1"], pokeball: "cherishball"}, - ], - }, - miltank: { - learnset: { - afteryou: ["1L1"], - attract: ["1L1"], - belch: ["1L1"], - bide: ["1L1"], - blizzard: ["1L1"], - block: ["1L1"], - bodypress: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - bulldoze: ["1L1"], - captivate: ["1L1"], - charm: ["1L1"], - confide: ["1L1"], - counter: ["1L1"], - curse: ["1L1"], - defensecurl: ["1L1"], - dizzypunch: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dynamicpunch: ["1L1"], - earthquake: ["1L1"], - echoedvoice: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - firepunch: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - focuspunch: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - growl: ["1L1"], - gyroball: ["1L1"], - hammerarm: ["1L1"], - headbutt: ["1L1"], - healbell: ["1L1"], - heartstamp: ["1L1"], - heavyslam: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - highhorsepower: ["1L1"], - hyperbeam: ["1L1"], - icebeam: ["1L1"], - icepunch: ["1L1"], - icywind: ["1L1"], - ironhead: ["1L1"], - irontail: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - metronome: ["1L1"], - milkdrink: ["1L1"], - mimic: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - playrough: ["1L1"], - poweruppunch: ["1L1"], - present: ["1L1"], - protect: ["1L1"], - psychup: ["1L1"], - punishment: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - reversal: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - sandstorm: ["1L1"], - secretpower: ["1L1"], - seismictoss: ["1L1"], - shadowball: ["1L1"], - shockwave: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - stealthrock: ["1L1"], - steelroller: ["1L1"], - stomp: ["1L1"], - stompingtantrum: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - sweetscent: ["1L1"], - tackle: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderpunch: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - wakeupslap: ["1L1"], - waterpulse: ["1L1"], - whirlpool: ["1L1"], - workup: ["1L1"], - zapcannon: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 6, level: 20, perfectIVs: 3, abilities: ["1L1"], moves: ["1L1"], pokeball: "cherishball"}, - ], - }, - raikou: { - learnset: { - agility: ["1L1"], - aurasphere: ["1L1"], - bite: ["1L1"], - bodyslam: ["1L1"], - bulldoze: ["1L1"], - calmmind: ["1L1"], - charge: ["1L1"], - chargebeam: ["1L1"], - confide: ["1L1"], - crunch: ["1L1"], - curse: ["1L1"], - cut: ["1L1"], - detect: ["1L1"], - dig: ["1L1"], - discharge: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - eerieimpulse: ["1L1"], - electricterrain: ["1L1"], - electroball: ["1L1"], - electroweb: ["1L1"], - endure: ["1L1"], - extrasensory: ["1L1"], - extremespeed: ["1L1"], - facade: ["1L1"], - flash: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - howl: ["1L1"], - hyperbeam: ["1L1"], - ironhead: ["1L1"], - irontail: ["1L1"], - laserfocus: ["1L1"], - leer: ["1L1"], - lightscreen: ["1L1"], - magnetrise: ["1L1"], - mimic: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - protect: ["1L1"], - psychup: ["1L1"], - quash: ["1L1"], - quickattack: ["1L1"], - raindance: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - risingvoltage: ["1L1"], - roar: ["1L1"], - rockclimb: ["1L1"], - rocksmash: ["1L1"], - round: ["1L1"], - sandstorm: ["1L1"], - scald: ["1L1"], - scaryface: ["1L1"], - secretpower: ["1L1"], - shadowball: ["1L1"], - shockwave: ["1L1"], - signalbeam: ["1L1"], - sleeptalk: ["1L1"], - snarl: ["1L1"], - snore: ["1L1"], - spark: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - supercellslam: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - throatchop: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderfang: ["1L1"], - thundershock: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - voltswitch: ["1L1"], - weatherball: ["1L1"], - wildcharge: ["1L1"], - zapcannon: ["1L1"], - }, - eventData: [ - {generation: 3, level: 50, shiny: 1, moves: ["1L1"]}, - {generation: 3, level: 70, moves: ["1L1"], pokeball: "pokeball"}, - {generation: 4, level: 40, shiny: 1, moves: ["1L1"]}, - {generation: 4, level: 30, shiny: true, nature: "Rash", moves: ["1L1"], pokeball: "cherishball"}, - {generation: 6, level: 50, shiny: 1, moves: ["1L1"]}, - {generation: 7, level: 60, shiny: 1, moves: ["1L1"]}, - {generation: 7, level: 60, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 7, level: 100, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 8, level: 70, shiny: 1, moves: ["1L1"]}, - ], - encounters: [ - {generation: 2, level: 40}, - {generation: 3, level: 40}, - ], - eventOnly: false, - }, - entei: { - learnset: { - agility: ["1L1"], - bite: ["1L1"], - bodyslam: ["1L1"], - bulldoze: ["1L1"], - calmmind: ["1L1"], - confide: ["1L1"], - crunch: ["1L1"], - crushclaw: ["1L1"], - curse: ["1L1"], - cut: ["1L1"], - detect: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - ember: ["1L1"], - endure: ["1L1"], - eruption: ["1L1"], - extrasensory: ["1L1"], - extremespeed: ["1L1"], - facade: ["1L1"], - fireblast: ["1L1"], - firefang: ["1L1"], - firespin: ["1L1"], - flamecharge: ["1L1"], - flamethrower: ["1L1"], - flamewheel: ["1L1"], - flareblitz: ["1L1"], - flash: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - headbutt: ["1L1"], - heatwave: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - howl: ["1L1"], - hyperbeam: ["1L1"], - incinerate: ["1L1"], - ironhead: ["1L1"], - irontail: ["1L1"], - laserfocus: ["1L1"], - lavaplume: ["1L1"], - leer: ["1L1"], - mimic: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - overheat: ["1L1"], - protect: ["1L1"], - psychup: ["1L1"], - quash: ["1L1"], - raindance: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - reversal: ["1L1"], - roar: ["1L1"], - rockclimb: ["1L1"], - rocksmash: ["1L1"], - round: ["1L1"], - sacredfire: ["1L1"], - sandstorm: ["1L1"], - scaryface: ["1L1"], - scorchingsands: ["1L1"], - secretpower: ["1L1"], - shadowball: ["1L1"], - sleeptalk: ["1L1"], - smokescreen: ["1L1"], - snarl: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - stomp: ["1L1"], - stompingtantrum: ["1L1"], - stoneedge: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - weatherball: ["1L1"], - willowisp: ["1L1"], - }, - eventData: [ - {generation: 3, level: 50, shiny: 1, moves: ["1L1"]}, - {generation: 3, level: 70, moves: ["1L1"], pokeball: "pokeball"}, - {generation: 4, level: 40, shiny: 1, moves: ["1L1"]}, - {generation: 4, level: 30, shiny: true, nature: "Adamant", moves: ["1L1"], pokeball: "cherishball"}, - {generation: 6, level: 50, shiny: 1, moves: ["1L1"]}, - {generation: 7, level: 60, shiny: 1, moves: ["1L1"]}, - {generation: 7, level: 60, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 7, level: 100, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 8, level: 70, shiny: 1, moves: ["1L1"]}, - ], - encounters: [ - {generation: 2, level: 40}, - {generation: 3, level: 40}, - ], - eventOnly: false, - }, - suicune: { - learnset: { - agility: ["1L1"], - airslash: ["1L1"], - aquaring: ["1L1"], - aurorabeam: ["1L1"], - avalanche: ["1L1"], - bite: ["1L1"], - blizzard: ["1L1"], - bodyslam: ["1L1"], - brine: ["1L1"], - bubblebeam: ["1L1"], - bulldoze: ["1L1"], - calmmind: ["1L1"], - chillingwater: ["1L1"], - confide: ["1L1"], - crunch: ["1L1"], - curse: ["1L1"], - cut: ["1L1"], - detect: ["1L1"], - dig: ["1L1"], - dive: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - endure: ["1L1"], - extrasensory: ["1L1"], - extremespeed: ["1L1"], - facade: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - gust: ["1L1"], - hail: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hydropump: ["1L1"], - hyperbeam: ["1L1"], - icebeam: ["1L1"], - icefang: ["1L1"], - icywind: ["1L1"], - ironhead: ["1L1"], - irontail: ["1L1"], - laserfocus: ["1L1"], - leer: ["1L1"], - liquidation: ["1L1"], - mimic: ["1L1"], - mirrorcoat: ["1L1"], - mist: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - ominouswind: ["1L1"], - protect: ["1L1"], - psychup: ["1L1"], - quash: ["1L1"], - raindance: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roar: ["1L1"], - rockclimb: ["1L1"], - rocksmash: ["1L1"], - round: ["1L1"], - sandstorm: ["1L1"], - scald: ["1L1"], - secretpower: ["1L1"], - shadowball: ["1L1"], - sheercold: ["1L1"], - signalbeam: ["1L1"], - sleeptalk: ["1L1"], - snarl: ["1L1"], - snore: ["1L1"], - snowscape: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - tailwind: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - waterfall: ["1L1"], - watergun: ["1L1"], - waterpulse: ["1L1"], - weatherball: ["1L1"], - whirlpool: ["1L1"], - }, - eventData: [ - {generation: 3, level: 50, shiny: 1, moves: ["1L1"]}, - {generation: 3, level: 70, moves: ["1L1"], pokeball: "pokeball"}, - {generation: 4, level: 40, shiny: 1, moves: ["1L1"]}, - {generation: 4, level: 30, shiny: true, nature: "Relaxed", moves: ["1L1"], pokeball: "cherishball"}, - {generation: 6, level: 50, shiny: 1, moves: ["1L1"]}, - {generation: 7, level: 60, shiny: 1, moves: ["1L1"]}, - {generation: 8, level: 70, shiny: 1, moves: ["1L1"]}, - ], - encounters: [ - {generation: 2, level: 40}, - {generation: 3, level: 40}, - ], - eventOnly: false, - }, - larvitar: { - learnset: { - ancientpower: ["1L1"], - assurance: ["1L1"], - attract: ["1L1"], - bite: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - bulldoze: ["1L1"], - captivate: ["1L1"], - chipaway: ["1L1"], - confide: ["1L1"], - crunch: ["1L1"], - curse: ["1L1"], - darkpulse: ["1L1"], - detect: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dragondance: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - focusenergy: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - irondefense: ["1L1"], - ironhead: ["1L1"], - irontail: ["1L1"], - leer: ["1L1"], - mimic: ["1L1"], - muddywater: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - outrage: ["1L1"], - payback: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - pursuit: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - rockblast: ["1L1"], - rockpolish: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rockthrow: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - sandstorm: ["1L1"], - sandtomb: ["1L1"], - scaryface: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - sleeptalk: ["1L1"], - smackdown: ["1L1"], - snarl: ["1L1"], - snore: ["1L1"], - spite: ["1L1"], - stealthrock: ["1L1"], - stomp: ["1L1"], - stompingtantrum: ["1L1"], - stoneedge: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - superpower: ["1L1"], - swagger: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thrash: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - uproar: ["1L1"], - }, - eventData: [ - {generation: 3, level: 20, moves: ["1L1"], pokeball: "pokeball"}, - {generation: 5, level: 5, shiny: true, gender: "M", moves: ["1L1"], pokeball: "cherishball"}, - ], - }, - pupitar: { - learnset: { - aerialace: ["1L1"], - ancientpower: ["1L1"], - assurance: ["1L1"], - attract: ["1L1"], - bite: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - bulldoze: ["1L1"], - captivate: ["1L1"], - chipaway: ["1L1"], - confide: ["1L1"], - crunch: ["1L1"], - curse: ["1L1"], - darkpulse: ["1L1"], - detect: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dragondance: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - focusenergy: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - highhorsepower: ["1L1"], - hyperbeam: ["1L1"], - irondefense: ["1L1"], - ironhead: ["1L1"], - irontail: ["1L1"], - lashout: ["1L1"], - leer: ["1L1"], - mimic: ["1L1"], - muddywater: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - outrage: ["1L1"], - payback: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - rockblast: ["1L1"], - rockpolish: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rockthrow: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - sandstorm: ["1L1"], - sandtomb: ["1L1"], - scaryface: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - sleeptalk: ["1L1"], - smackdown: ["1L1"], - snarl: ["1L1"], - snore: ["1L1"], - spite: ["1L1"], - stealthrock: ["1L1"], - stompingtantrum: ["1L1"], - stoneedge: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - superpower: ["1L1"], - swagger: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thrash: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - uproar: ["1L1"], - }, - }, - tyranitar: { - learnset: { - aerialace: ["1L1"], - ancientpower: ["1L1"], - aquatail: ["1L1"], - assurance: ["1L1"], - attract: ["1L1"], - avalanche: ["1L1"], - bite: ["1L1"], - blizzard: ["1L1"], - block: ["1L1"], - bodypress: ["1L1"], - bodyslam: ["1L1"], - breakingswipe: ["1L1"], - brickbreak: ["1L1"], - brutalswing: ["1L1"], - bulldoze: ["1L1"], - captivate: ["1L1"], - chipaway: ["1L1"], - confide: ["1L1"], - counter: ["1L1"], - crunch: ["1L1"], - curse: ["1L1"], - cut: ["1L1"], - darkpulse: ["1L1"], - detect: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dragonbreath: ["1L1"], - dragonclaw: ["1L1"], - dragondance: ["1L1"], - dragonpulse: ["1L1"], - dragontail: ["1L1"], - dynamicpunch: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fireblast: ["1L1"], - firefang: ["1L1"], - firepunch: ["1L1"], - flamethrower: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - focusenergy: ["1L1"], - focuspunch: ["1L1"], - foulplay: ["1L1"], - frustration: ["1L1"], - furycutter: ["1L1"], - gigaimpact: ["1L1"], - hardpress: ["1L1"], - headbutt: ["1L1"], - heavyslam: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - highhorsepower: ["1L1"], - honeclaws: ["1L1"], - hydropump: ["1L1"], - hyperbeam: ["1L1"], - icebeam: ["1L1"], - icefang: ["1L1"], - icepunch: ["1L1"], - icywind: ["1L1"], - incinerate: ["1L1"], - irondefense: ["1L1"], - ironhead: ["1L1"], - irontail: ["1L1"], - knockoff: ["1L1"], - lashout: ["1L1"], - leer: ["1L1"], - lowkick: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - mimic: ["1L1"], - muddywater: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - nightmare: ["1L1"], - outrage: ["1L1"], - payback: ["1L1"], - powergem: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - revenge: ["1L1"], - roar: ["1L1"], - rockblast: ["1L1"], - rockclimb: ["1L1"], - rockpolish: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rockthrow: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - sandstorm: ["1L1"], - sandtomb: ["1L1"], - scaryface: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - seismictoss: ["1L1"], - shadowclaw: ["1L1"], - shockwave: ["1L1"], - sleeptalk: ["1L1"], - smackdown: ["1L1"], - snarl: ["1L1"], - snore: ["1L1"], - spite: ["1L1"], - stealthrock: ["1L1"], - stompingtantrum: ["1L1"], - stoneedge: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - superpower: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thrash: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderfang: ["1L1"], - thunderpunch: ["1L1"], - thunderwave: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - uproar: ["1L1"], - waterpulse: ["1L1"], - whirlpool: ["1L1"], - }, - eventData: [ - {generation: 3, level: 70, moves: ["1L1"], pokeball: "pokeball"}, - {generation: 5, level: 100, gender: "M", moves: ["1L1"], pokeball: "cherishball"}, - {generation: 5, level: 55, gender: "M", isHidden: true, moves: ["1L1"]}, - {generation: 6, level: 50, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 6, level: 50, nature: "Jolly", moves: ["1L1"], pokeball: "cherishball"}, - {generation: 6, level: 55, shiny: true, nature: "Adamant", ivs: {hp: 31, atk: 31, def: 31, spa: 14, spd: 31, spe: 0}, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 6, level: 100, moves: ["1L1"], pokeball: "cherishball"}, - ], - encounters: [ - {generation: 5, level: 50}, - ], - }, - lugia: { - learnset: { - acrobatics: ["1L1"], - aerialace: ["1L1"], - aeroblast: ["1L1"], - aircutter: ["1L1"], - airslash: ["1L1"], - ancientpower: ["1L1"], - aquatail: ["1L1"], - avalanche: ["1L1"], - blizzard: ["1L1"], - bodyslam: ["1L1"], - bravebird: ["1L1"], - brine: ["1L1"], - bulldoze: ["1L1"], - calmmind: ["1L1"], - chargebeam: ["1L1"], - chillingwater: ["1L1"], - confide: ["1L1"], - curse: ["1L1"], - defog: ["1L1"], - detect: ["1L1"], - dive: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dragonbreath: ["1L1"], - dragonpulse: ["1L1"], - dragonrush: ["1L1"], - dragontail: ["1L1"], - dreameater: ["1L1"], - dualwingbeat: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - echoedvoice: ["1L1"], - endure: ["1L1"], - extrasensory: ["1L1"], - facade: ["1L1"], - featherdance: ["1L1"], - flash: ["1L1"], - fly: ["1L1"], - frustration: ["1L1"], - futuresight: ["1L1"], - gigadrain: ["1L1"], - gigaimpact: ["1L1"], - gust: ["1L1"], - hail: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hurricane: ["1L1"], - hydropump: ["1L1"], - hyperbeam: ["1L1"], - hypervoice: ["1L1"], - icebeam: ["1L1"], - icywind: ["1L1"], - imprison: ["1L1"], - ironhead: ["1L1"], - irontail: ["1L1"], - laserfocus: ["1L1"], - lightscreen: ["1L1"], - liquidation: ["1L1"], - mimic: ["1L1"], - mist: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - nightmare: ["1L1"], - ominouswind: ["1L1"], - protect: ["1L1"], - psychic: ["1L1"], - psychicnoise: ["1L1"], - psychoboost: ["1L1"], - psychup: ["1L1"], - psyshock: ["1L1"], - punishment: ["1L1"], - raindance: ["1L1"], - recover: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roar: ["1L1"], - rocksmash: ["1L1"], - roost: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - sandstorm: ["1L1"], - scaleshot: ["1L1"], - scaryface: ["1L1"], - secretpower: ["1L1"], - shadowball: ["1L1"], - shockwave: ["1L1"], - signalbeam: ["1L1"], - skillswap: ["1L1"], - skyattack: ["1L1"], - skydrop: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - steelwing: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - tailwind: ["1L1"], - takedown: ["1L1"], - telekinesis: ["1L1"], - terablast: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - trick: ["1L1"], - twister: ["1L1"], - waterfall: ["1L1"], - waterpulse: ["1L1"], - weatherball: ["1L1"], - whirlpool: ["1L1"], - whirlwind: ["1L1"], - wonderroom: ["1L1"], - zapcannon: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 3, level: 70, shiny: 1, moves: ["1L1"]}, - {generation: 3, level: 50, moves: ["1L1"]}, - {generation: 4, level: 45, shiny: 1, moves: ["1L1"]}, - {generation: 4, level: 70, shiny: 1, moves: ["1L1"]}, - {generation: 5, level: 5, isHidden: true, moves: ["1L1"], pokeball: "dreamball"}, - {generation: 6, level: 50, shiny: 1, moves: ["1L1"]}, - {generation: 6, level: 50, nature: "Timid", moves: ["1L1"], pokeball: "cherishball"}, - {generation: 7, level: 60, shiny: 1, moves: ["1L1"]}, - {generation: 7, level: 100, isHidden: true, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 7, level: 60, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 7, level: 100, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 8, level: 70, shiny: 1, moves: ["1L1"]}, - ], - encounters: [ - {generation: 2, level: 40}, - ], - eventOnly: false, - }, - hooh: { - learnset: { - aerialace: ["1L1"], - aircutter: ["1L1"], - airslash: ["1L1"], - ancientpower: ["1L1"], - bodyslam: ["1L1"], - bravebird: ["1L1"], - bulldoze: ["1L1"], - burnup: ["1L1"], - calmmind: ["1L1"], - celebrate: ["1L1"], - chargebeam: ["1L1"], - confide: ["1L1"], - curse: ["1L1"], - defog: ["1L1"], - detect: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dragonbreath: ["1L1"], - dreameater: ["1L1"], - dualwingbeat: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - echoedvoice: ["1L1"], - endure: ["1L1"], - extrasensory: ["1L1"], - facade: ["1L1"], - fireblast: ["1L1"], - firespin: ["1L1"], - flamecharge: ["1L1"], - flamethrower: ["1L1"], - flareblitz: ["1L1"], - flash: ["1L1"], - fly: ["1L1"], - frustration: ["1L1"], - futuresight: ["1L1"], - gigadrain: ["1L1"], - gigaimpact: ["1L1"], - gust: ["1L1"], - heatwave: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hurricane: ["1L1"], - hyperbeam: ["1L1"], - hypervoice: ["1L1"], - imprison: ["1L1"], - incinerate: ["1L1"], - ironhead: ["1L1"], - laserfocus: ["1L1"], - lifedew: ["1L1"], - lightscreen: ["1L1"], - mimic: ["1L1"], - mudslap: ["1L1"], - mysticalfire: ["1L1"], - naturalgift: ["1L1"], - nightmare: ["1L1"], - ominouswind: ["1L1"], - overheat: ["1L1"], - pluck: ["1L1"], - protect: ["1L1"], - psychic: ["1L1"], - psychup: ["1L1"], - punishment: ["1L1"], - raindance: ["1L1"], - recover: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roar: ["1L1"], - rocksmash: ["1L1"], - roost: ["1L1"], - round: ["1L1"], - sacredfire: ["1L1"], - safeguard: ["1L1"], - sandstorm: ["1L1"], - scorchingsands: ["1L1"], - secretpower: ["1L1"], - shadowball: ["1L1"], - shockwave: ["1L1"], - signalbeam: ["1L1"], - skyattack: ["1L1"], - skydrop: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - steelwing: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - tailwind: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - twister: ["1L1"], - weatherball: ["1L1"], - whirlwind: ["1L1"], - willowisp: ["1L1"], - zapcannon: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 3, level: 70, shiny: 1, moves: ["1L1"]}, - {generation: 4, level: 45, shiny: 1, moves: ["1L1"]}, - {generation: 4, level: 70, shiny: 1, moves: ["1L1"]}, - {generation: 5, level: 5, isHidden: true, moves: ["1L1"], pokeball: "dreamball"}, - {generation: 6, level: 50, shiny: 1, moves: ["1L1"]}, - {generation: 6, level: 50, shiny: true, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 7, level: 100, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 7, level: 60, shiny: 1, moves: ["1L1"]}, - {generation: 7, level: 60, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 7, level: 100, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 8, level: 70, shiny: 1, moves: ["1L1"]}, - ], - encounters: [ - {generation: 2, level: 40}, - ], - eventOnly: false, - }, - celebi: { - learnset: { - aerialace: ["1L1"], - allyswitch: ["1L1"], - ancientpower: ["1L1"], - aurasphere: ["1L1"], - batonpass: ["1L1"], - calmmind: ["1L1"], - chargebeam: ["1L1"], - confide: ["1L1"], - confusion: ["1L1"], - curse: ["1L1"], - cut: ["1L1"], - dazzlinggleam: ["1L1"], - defensecurl: ["1L1"], - detect: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dreameater: ["1L1"], - dualwingbeat: ["1L1"], - earthpower: ["1L1"], - echoedvoice: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - expandingforce: ["1L1"], - facade: ["1L1"], - flash: ["1L1"], - fling: ["1L1"], - frustration: ["1L1"], - futuresight: ["1L1"], - gigadrain: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - grassyglide: ["1L1"], - grassyterrain: ["1L1"], - healbell: ["1L1"], - healblock: ["1L1"], - healingwish: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - holdback: ["1L1"], - hyperbeam: ["1L1"], - imprison: ["1L1"], - laserfocus: ["1L1"], - lastresort: ["1L1"], - leafblade: ["1L1"], - leafstorm: ["1L1"], - leechseed: ["1L1"], - lifedew: ["1L1"], - lightscreen: ["1L1"], - magicalleaf: ["1L1"], - magiccoat: ["1L1"], - magicroom: ["1L1"], - metronome: ["1L1"], - mimic: ["1L1"], - mudslap: ["1L1"], - nastyplot: ["1L1"], - naturalgift: ["1L1"], - naturepower: ["1L1"], - nightmare: ["1L1"], - perishsong: ["1L1"], - pollenpuff: ["1L1"], - protect: ["1L1"], - psychic: ["1L1"], - psychicterrain: ["1L1"], - psychocut: ["1L1"], - psychup: ["1L1"], - raindance: ["1L1"], - recover: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - sandstorm: ["1L1"], - secretpower: ["1L1"], - seedbomb: ["1L1"], - shadowball: ["1L1"], - shockwave: ["1L1"], - signalbeam: ["1L1"], - silverwind: ["1L1"], - skillswap: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - solarblade: ["1L1"], - stealthrock: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - sweetscent: ["1L1"], - swift: ["1L1"], - swordsdance: ["1L1"], - synthesis: ["1L1"], - telekinesis: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - trick: ["1L1"], - trickroom: ["1L1"], - uproar: ["1L1"], - uturn: ["1L1"], - waterpulse: ["1L1"], - weatherball: ["1L1"], - wonderroom: ["1L1"], - worryseed: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 3, level: 10, moves: ["1L1"], pokeball: "pokeball"}, - {generation: 3, level: 70, moves: ["1L1"], pokeball: "pokeball"}, - {generation: 3, level: 10, moves: ["1L1"], pokeball: "pokeball"}, - {generation: 3, level: 30, moves: ["1L1"], pokeball: "pokeball"}, - {generation: 4, level: 50, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 6, level: 10, moves: ["1L1"], pokeball: "luxuryball"}, - {generation: 6, level: 100, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 7, level: 30, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 8, level: 60, shiny: true, nature: "Quirky", moves: ["1L1"], pokeball: "cherishball"}, - ], - encounters: [ - {generation: 2, level: 30}, - ], - eventOnly: false, - }, - treecko: { - learnset: { - absorb: ["1L1"], - acrobatics: ["1L1"], - aerialace: ["1L1"], - agility: ["1L1"], - assurance: ["1L1"], - attract: ["1L1"], - bodyslam: ["1L1"], - breakingswipe: ["1L1"], - brickbreak: ["1L1"], - bulletseed: ["1L1"], - captivate: ["1L1"], - confide: ["1L1"], - counter: ["1L1"], - crunch: ["1L1"], - crushclaw: ["1L1"], - cut: ["1L1"], - detect: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doublekick: ["1L1"], - doubleteam: ["1L1"], - dragonbreath: ["1L1"], - dragontail: ["1L1"], - drainpunch: ["1L1"], - dynamicpunch: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - flash: ["1L1"], - fling: ["1L1"], - focuspunch: ["1L1"], - frustration: ["1L1"], - furycutter: ["1L1"], - gigadrain: ["1L1"], - grassknot: ["1L1"], - grasspledge: ["1L1"], - grasswhistle: ["1L1"], - grassyglide: ["1L1"], - grassyterrain: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - irontail: ["1L1"], - leafage: ["1L1"], - leafstorm: ["1L1"], - leechseed: ["1L1"], - leer: ["1L1"], - lowkick: ["1L1"], - magicalleaf: ["1L1"], - megadrain: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - mimic: ["1L1"], - mudslap: ["1L1"], - mudsport: ["1L1"], - naturalgift: ["1L1"], - naturepower: ["1L1"], - nightslash: ["1L1"], - pound: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - pursuit: ["1L1"], - quickattack: ["1L1"], - quickguard: ["1L1"], - razorwind: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - seedbomb: ["1L1"], - seismictoss: ["1L1"], - slam: ["1L1"], - slash: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - swordsdance: ["1L1"], - synthesis: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thunderpunch: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - upperhand: ["1L1"], - workup: ["1L1"], - worryseed: ["1L1"], - }, - eventData: [ - {generation: 3, level: 10, gender: "M", moves: ["1L1"], pokeball: "pokeball"}, - {generation: 5, level: 10, gender: "M", isHidden: true, moves: ["1L1"]}, - ], - }, - grovyle: { - learnset: { - absorb: ["1L1"], - acrobatics: ["1L1"], - aerialace: ["1L1"], - agility: ["1L1"], - assurance: ["1L1"], - attract: ["1L1"], - bodyslam: ["1L1"], - breakingswipe: ["1L1"], - brickbreak: ["1L1"], - bulletseed: ["1L1"], - captivate: ["1L1"], - confide: ["1L1"], - counter: ["1L1"], - crunch: ["1L1"], - cut: ["1L1"], - detect: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dragontail: ["1L1"], - drainpunch: ["1L1"], - dynamicpunch: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - falseswipe: ["1L1"], - flash: ["1L1"], - fling: ["1L1"], - focuspunch: ["1L1"], - frustration: ["1L1"], - furycutter: ["1L1"], - gigadrain: ["1L1"], - grassknot: ["1L1"], - grasspledge: ["1L1"], - grassyglide: ["1L1"], - grassyterrain: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - irontail: ["1L1"], - leafage: ["1L1"], - leafblade: ["1L1"], - leafstorm: ["1L1"], - leer: ["1L1"], - lowkick: ["1L1"], - lowsweep: ["1L1"], - magicalleaf: ["1L1"], - megadrain: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - mimic: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - naturepower: ["1L1"], - pound: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - pursuit: ["1L1"], - quickattack: ["1L1"], - quickguard: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - seedbomb: ["1L1"], - seismictoss: ["1L1"], - slam: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - solarblade: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - swordsdance: ["1L1"], - synthesis: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thunderpunch: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - upperhand: ["1L1"], - vacuumwave: ["1L1"], - workup: ["1L1"], - worryseed: ["1L1"], - xscissor: ["1L1"], - }, - }, - sceptile: { - learnset: { - absorb: ["1L1"], - acrobatics: ["1L1"], - aerialace: ["1L1"], - agility: ["1L1"], - assurance: ["1L1"], - attract: ["1L1"], - bodyslam: ["1L1"], - breakingswipe: ["1L1"], - brickbreak: ["1L1"], - brutalswing: ["1L1"], - bulldoze: ["1L1"], - bulletseed: ["1L1"], - captivate: ["1L1"], - confide: ["1L1"], - counter: ["1L1"], - crosspoison: ["1L1"], - crunch: ["1L1"], - cut: ["1L1"], - detect: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dragoncheer: ["1L1"], - dragonclaw: ["1L1"], - dragondance: ["1L1"], - dragonpulse: ["1L1"], - dragontail: ["1L1"], - drainpunch: ["1L1"], - dualchop: ["1L1"], - dynamicpunch: ["1L1"], - earthquake: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - falseswipe: ["1L1"], - flash: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - focuspunch: ["1L1"], - frenzyplant: ["1L1"], - frustration: ["1L1"], - furycutter: ["1L1"], - gigadrain: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - grasspledge: ["1L1"], - grassyglide: ["1L1"], - grassyterrain: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - honeclaws: ["1L1"], - hyperbeam: ["1L1"], - irontail: ["1L1"], - laserfocus: ["1L1"], - leafage: ["1L1"], - leafblade: ["1L1"], - leafstorm: ["1L1"], - leer: ["1L1"], - lowkick: ["1L1"], - lowsweep: ["1L1"], - magicalleaf: ["1L1"], - megadrain: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - mimic: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - naturepower: ["1L1"], - nightslash: ["1L1"], - outrage: ["1L1"], - pound: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - pursuit: ["1L1"], - quickattack: ["1L1"], - quickguard: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roar: ["1L1"], - rockclimb: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - scaleshot: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - seedbomb: ["1L1"], - seismictoss: ["1L1"], - shedtail: ["1L1"], - slam: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - solarblade: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - swordsdance: ["1L1"], - synthesis: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - throatchop: ["1L1"], - thunderpunch: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - upperhand: ["1L1"], - vacuumwave: ["1L1"], - workup: ["1L1"], - worryseed: ["1L1"], - xscissor: ["1L1"], - }, - eventData: [ - {generation: 5, level: 50, shiny: 1, moves: ["1L1"], pokeball: "cherishball"}, - ], - }, - torchic: { - learnset: { - aerialace: ["1L1"], - agility: ["1L1"], - assurance: ["1L1"], - attract: ["1L1"], - batonpass: ["1L1"], - bodyslam: ["1L1"], - bounce: ["1L1"], - captivate: ["1L1"], - confide: ["1L1"], - counter: ["1L1"], - crushclaw: ["1L1"], - curse: ["1L1"], - cut: ["1L1"], - defog: ["1L1"], - detect: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - echoedvoice: ["1L1"], - ember: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - featherdance: ["1L1"], - feint: ["1L1"], - fireblast: ["1L1"], - firepledge: ["1L1"], - firespin: ["1L1"], - flameburst: ["1L1"], - flamecharge: ["1L1"], - flamethrower: ["1L1"], - flareblitz: ["1L1"], - focusenergy: ["1L1"], - frustration: ["1L1"], - growl: ["1L1"], - headbutt: ["1L1"], - heatwave: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - honeclaws: ["1L1"], - incinerate: ["1L1"], - lastresort: ["1L1"], - lowkick: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - mimic: ["1L1"], - mirrormove: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - nightslash: ["1L1"], - overheat: ["1L1"], - peck: ["1L1"], - protect: ["1L1"], - quickattack: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - reversal: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - sandattack: ["1L1"], - scratch: ["1L1"], - secretpower: ["1L1"], - seismictoss: ["1L1"], - shadowclaw: ["1L1"], - slash: ["1L1"], - sleeptalk: ["1L1"], - smellingsalts: ["1L1"], - snore: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - swordsdance: ["1L1"], - takedown: ["1L1"], - temperflare: ["1L1"], - terablast: ["1L1"], - toxic: ["1L1"], - uproar: ["1L1"], - willowisp: ["1L1"], - workup: ["1L1"], - }, - eventData: [ - {generation: 3, level: 10, gender: "M", moves: ["1L1"], pokeball: "pokeball"}, - {generation: 5, level: 10, gender: "M", isHidden: true, moves: ["1L1"]}, - {generation: 6, level: 10, gender: "M", isHidden: true, moves: ["1L1"], pokeball: "cherishball"}, - ], - }, - combusken: { - learnset: { - aerialace: ["1L1"], - agility: ["1L1"], - assurance: ["1L1"], - attract: ["1L1"], - batonpass: ["1L1"], - blazekick: ["1L1"], - bodyslam: ["1L1"], - bounce: ["1L1"], - brickbreak: ["1L1"], - bulkup: ["1L1"], - captivate: ["1L1"], - closecombat: ["1L1"], - coaching: ["1L1"], - confide: ["1L1"], - counter: ["1L1"], - curse: ["1L1"], - cut: ["1L1"], - defog: ["1L1"], - detect: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doublekick: ["1L1"], - doubleteam: ["1L1"], - dualchop: ["1L1"], - dynamicpunch: ["1L1"], - echoedvoice: ["1L1"], - ember: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - featherdance: ["1L1"], - fireblast: ["1L1"], - firepledge: ["1L1"], - firepunch: ["1L1"], - firespin: ["1L1"], - flamecharge: ["1L1"], - flamethrower: ["1L1"], - flareblitz: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - focusenergy: ["1L1"], - focuspunch: ["1L1"], - frustration: ["1L1"], - furycutter: ["1L1"], - growl: ["1L1"], - headbutt: ["1L1"], - heatwave: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - honeclaws: ["1L1"], - incinerate: ["1L1"], - lastresort: ["1L1"], - lowkick: ["1L1"], - lowsweep: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - mimic: ["1L1"], - mirrormove: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - overheat: ["1L1"], - peck: ["1L1"], - poisonjab: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - quickattack: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - revenge: ["1L1"], - reversal: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - sandattack: ["1L1"], - scratch: ["1L1"], - secretpower: ["1L1"], - seismictoss: ["1L1"], - shadowclaw: ["1L1"], - skyuppercut: ["1L1"], - slash: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - swordsdance: ["1L1"], - takedown: ["1L1"], - temperflare: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thunderpunch: ["1L1"], - toxic: ["1L1"], - uproar: ["1L1"], - vacuumwave: ["1L1"], - willowisp: ["1L1"], - workup: ["1L1"], - }, - }, - blaziken: { - learnset: { - acrobatics: ["1L1"], - aerialace: ["1L1"], - agility: ["1L1"], - assurance: ["1L1"], - attract: ["1L1"], - aurasphere: ["1L1"], - batonpass: ["1L1"], - blastburn: ["1L1"], - blazekick: ["1L1"], - bodyslam: ["1L1"], - bounce: ["1L1"], - bravebird: ["1L1"], - brickbreak: ["1L1"], - bulkup: ["1L1"], - bulldoze: ["1L1"], - captivate: ["1L1"], - closecombat: ["1L1"], - coaching: ["1L1"], - confide: ["1L1"], - counter: ["1L1"], - curse: ["1L1"], - cut: ["1L1"], - defog: ["1L1"], - detect: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doublekick: ["1L1"], - doubleteam: ["1L1"], - dualchop: ["1L1"], - dynamicpunch: ["1L1"], - earthquake: ["1L1"], - echoedvoice: ["1L1"], - ember: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - featherdance: ["1L1"], - fireblast: ["1L1"], - firepledge: ["1L1"], - firepunch: ["1L1"], - firespin: ["1L1"], - flamecharge: ["1L1"], - flamethrower: ["1L1"], - flareblitz: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - focusenergy: ["1L1"], - focuspunch: ["1L1"], - frustration: ["1L1"], - furycutter: ["1L1"], - gigaimpact: ["1L1"], - growl: ["1L1"], - headbutt: ["1L1"], - heatcrash: ["1L1"], - heatwave: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - highjumpkick: ["1L1"], - honeclaws: ["1L1"], - hyperbeam: ["1L1"], - incinerate: ["1L1"], - knockoff: ["1L1"], - laserfocus: ["1L1"], - lastresort: ["1L1"], - lowkick: ["1L1"], - lowsweep: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - mimic: ["1L1"], - mirrormove: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - overheat: ["1L1"], - peck: ["1L1"], - poisonjab: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - quickattack: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - revenge: ["1L1"], - reversal: ["1L1"], - roar: ["1L1"], - rockclimb: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - roleplay: ["1L1"], - round: ["1L1"], - sandattack: ["1L1"], - scorchingsands: ["1L1"], - scratch: ["1L1"], - secretpower: ["1L1"], - seismictoss: ["1L1"], - shadowclaw: ["1L1"], - skyuppercut: ["1L1"], - slash: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - stoneedge: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - superpower: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - swordsdance: ["1L1"], - takedown: ["1L1"], - temperflare: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thunderpunch: ["1L1"], - toxic: ["1L1"], - upperhand: ["1L1"], - uproar: ["1L1"], - uturn: ["1L1"], - vacuumwave: ["1L1"], - willowisp: ["1L1"], - workup: ["1L1"], - }, - eventData: [ - {generation: 3, level: 70, moves: ["1L1"], pokeball: "pokeball"}, - {generation: 5, level: 50, shiny: 1, moves: ["1L1"], pokeball: "cherishball"}, - ], - }, - mudkip: { - learnset: { - amnesia: ["1L1"], - ancientpower: ["1L1"], - aquatail: ["1L1"], - attract: ["1L1"], - avalanche: ["1L1"], - barrier: ["1L1"], - bide: ["1L1"], - bite: ["1L1"], - blizzard: ["1L1"], - bodyslam: ["1L1"], - captivate: ["1L1"], - chillingwater: ["1L1"], - confide: ["1L1"], - counter: ["1L1"], - curse: ["1L1"], - defensecurl: ["1L1"], - dig: ["1L1"], - dive: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - earthpower: ["1L1"], - echoedvoice: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - foresight: ["1L1"], - frustration: ["1L1"], - growl: ["1L1"], - hail: ["1L1"], - headbutt: ["1L1"], - hiddenpower: ["1L1"], - hydropump: ["1L1"], - iceball: ["1L1"], - icebeam: ["1L1"], - icywind: ["1L1"], - irontail: ["1L1"], - liquidation: ["1L1"], - lowkick: ["1L1"], - mimic: ["1L1"], - mirrorcoat: ["1L1"], - mudbomb: ["1L1"], - muddywater: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - mudsport: ["1L1"], - naturalgift: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - refresh: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roar: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rockthrow: ["1L1"], - rocktomb: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - scald: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - sleeptalk: ["1L1"], - sludge: ["1L1"], - sludgewave: ["1L1"], - snore: ["1L1"], - stomp: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - superpower: ["1L1"], - supersonic: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - toxic: ["1L1"], - uproar: ["1L1"], - waterfall: ["1L1"], - watergun: ["1L1"], - waterpledge: ["1L1"], - waterpulse: ["1L1"], - whirlpool: ["1L1"], - wideguard: ["1L1"], - workup: ["1L1"], - yawn: ["1L1"], - }, - eventData: [ - {generation: 3, level: 10, gender: "M", moves: ["1L1"], pokeball: "pokeball"}, - {generation: 5, level: 10, gender: "M", isHidden: true, moves: ["1L1"]}, - ], - }, - marshtomp: { - learnset: { - amnesia: ["1L1"], - ancientpower: ["1L1"], - aquatail: ["1L1"], - attract: ["1L1"], - avalanche: ["1L1"], - bide: ["1L1"], - blizzard: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - bulldoze: ["1L1"], - captivate: ["1L1"], - chillingwater: ["1L1"], - confide: ["1L1"], - counter: ["1L1"], - curse: ["1L1"], - defensecurl: ["1L1"], - dig: ["1L1"], - dive: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dynamicpunch: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - echoedvoice: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fling: ["1L1"], - focuspunch: ["1L1"], - foresight: ["1L1"], - frustration: ["1L1"], - growl: ["1L1"], - hail: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hydropump: ["1L1"], - icebeam: ["1L1"], - icepunch: ["1L1"], - icywind: ["1L1"], - irontail: ["1L1"], - liquidation: ["1L1"], - lowkick: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - mimic: ["1L1"], - mudbomb: ["1L1"], - muddywater: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - mudsport: ["1L1"], - naturalgift: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roar: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rockthrow: ["1L1"], - rocktomb: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - sandtomb: ["1L1"], - scald: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - seismictoss: ["1L1"], - sleeptalk: ["1L1"], - sludgewave: ["1L1"], - snore: ["1L1"], - stealthrock: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - superpower: ["1L1"], - supersonic: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - toxic: ["1L1"], - uproar: ["1L1"], - waterfall: ["1L1"], - watergun: ["1L1"], - waterpledge: ["1L1"], - waterpulse: ["1L1"], - whirlpool: ["1L1"], - workup: ["1L1"], - }, - }, - swampert: { - learnset: { - amnesia: ["1L1"], - ancientpower: ["1L1"], - aquatail: ["1L1"], - attract: ["1L1"], - avalanche: ["1L1"], - bide: ["1L1"], - blizzard: ["1L1"], - bodypress: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - bulkup: ["1L1"], - bulldoze: ["1L1"], - captivate: ["1L1"], - chillingwater: ["1L1"], - confide: ["1L1"], - counter: ["1L1"], - curse: ["1L1"], - darkestlariat: ["1L1"], - defensecurl: ["1L1"], - dig: ["1L1"], - dive: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dynamicpunch: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - echoedvoice: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fling: ["1L1"], - flipturn: ["1L1"], - focusblast: ["1L1"], - focuspunch: ["1L1"], - foresight: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - growl: ["1L1"], - hail: ["1L1"], - hammerarm: ["1L1"], - hardpress: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - highhorsepower: ["1L1"], - hydrocannon: ["1L1"], - hydropump: ["1L1"], - hyperbeam: ["1L1"], - icebeam: ["1L1"], - icepunch: ["1L1"], - icywind: ["1L1"], - irontail: ["1L1"], - knockoff: ["1L1"], - liquidation: ["1L1"], - lowkick: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - mimic: ["1L1"], - mudbomb: ["1L1"], - muddywater: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - mudsport: ["1L1"], - naturalgift: ["1L1"], - outrage: ["1L1"], - poisonjab: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roar: ["1L1"], - rockclimb: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rockthrow: ["1L1"], - rocktomb: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - sandtomb: ["1L1"], - scald: ["1L1"], - scaryface: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - seismictoss: ["1L1"], - sleeptalk: ["1L1"], - sludgewave: ["1L1"], - smackdown: ["1L1"], - snore: ["1L1"], - stealthrock: ["1L1"], - stompingtantrum: ["1L1"], - stoneedge: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - superpower: ["1L1"], - supersonic: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - toxic: ["1L1"], - uproar: ["1L1"], - waterfall: ["1L1"], - watergun: ["1L1"], - waterpledge: ["1L1"], - waterpulse: ["1L1"], - weatherball: ["1L1"], - whirlpool: ["1L1"], - workup: ["1L1"], - }, - eventData: [ - {generation: 5, level: 50, shiny: 1, moves: ["1L1"], pokeball: "cherishball"}, - ], - }, - poochyena: { - learnset: { - assurance: ["1L1"], - astonish: ["1L1"], - attract: ["1L1"], - bite: ["1L1"], - bodyslam: ["1L1"], - captivate: ["1L1"], - charm: ["1L1"], - confide: ["1L1"], - counter: ["1L1"], - covet: ["1L1"], - crunch: ["1L1"], - darkpulse: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - embargo: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - firefang: ["1L1"], - foulplay: ["1L1"], - frustration: ["1L1"], - headbutt: ["1L1"], - healbell: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - howl: ["1L1"], - hypervoice: ["1L1"], - icefang: ["1L1"], - incinerate: ["1L1"], - irontail: ["1L1"], - lashout: ["1L1"], - leer: ["1L1"], - mefirst: ["1L1"], - mimic: ["1L1"], - mudslap: ["1L1"], - nastyplot: ["1L1"], - naturalgift: ["1L1"], - odorsleuth: ["1L1"], - payback: ["1L1"], - playrough: ["1L1"], - poisonfang: ["1L1"], - protect: ["1L1"], - psychicfangs: ["1L1"], - psychup: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - roar: ["1L1"], - rocksmash: ["1L1"], - round: ["1L1"], - sandattack: ["1L1"], - scaryface: ["1L1"], - secretpower: ["1L1"], - shadowball: ["1L1"], - sleeptalk: ["1L1"], - snarl: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - spite: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - sunnyday: ["1L1"], - superfang: ["1L1"], - swagger: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thunderfang: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - uproar: ["1L1"], - yawn: ["1L1"], - }, - eventData: [ - {generation: 3, level: 10, abilities: ["1L1"], moves: ["1L1"]}, - ], - encounters: [ - {generation: 3, level: 2}, - ], - }, - mightyena: { - learnset: { - assurance: ["1L1"], - attract: ["1L1"], - bite: ["1L1"], - bodyslam: ["1L1"], - captivate: ["1L1"], - charm: ["1L1"], - confide: ["1L1"], - counter: ["1L1"], - covet: ["1L1"], - crunch: ["1L1"], - darkpulse: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - embargo: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - firefang: ["1L1"], - foulplay: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - howl: ["1L1"], - hyperbeam: ["1L1"], - hypervoice: ["1L1"], - icefang: ["1L1"], - incinerate: ["1L1"], - irontail: ["1L1"], - laserfocus: ["1L1"], - lashout: ["1L1"], - leer: ["1L1"], - mimic: ["1L1"], - mudslap: ["1L1"], - nastyplot: ["1L1"], - naturalgift: ["1L1"], - odorsleuth: ["1L1"], - payback: ["1L1"], - playrough: ["1L1"], - protect: ["1L1"], - psychicfangs: ["1L1"], - psychup: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - roar: ["1L1"], - rocksmash: ["1L1"], - round: ["1L1"], - sandattack: ["1L1"], - scaryface: ["1L1"], - secretpower: ["1L1"], - shadowball: ["1L1"], - sleeptalk: ["1L1"], - snarl: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - spite: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - sunnyday: ["1L1"], - superfang: ["1L1"], - swagger: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - throatchop: ["1L1"], - thunderfang: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - uproar: ["1L1"], - yawn: ["1L1"], - }, - eventData: [ - {generation: 7, level: 64, gender: "M", abilities: ["1L1"], moves: ["1L1"], pokeball: "cherishball"}, - ], - }, - zigzagoon: { - learnset: { - attract: ["1L1"], - babydolleyes: ["1L1"], - bellydrum: ["1L1"], - bestow: ["1L1"], - blizzard: ["1L1"], - bodyslam: ["1L1"], - captivate: ["1L1"], - chargebeam: ["1L1"], - charm: ["1L1"], - confide: ["1L1"], - covet: ["1L1"], - cut: ["1L1"], - defensecurl: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - echoedvoice: ["1L1"], - endure: ["1L1"], - extremespeed: ["1L1"], - facade: ["1L1"], - flail: ["1L1"], - fling: ["1L1"], - frustration: ["1L1"], - furycutter: ["1L1"], - grassknot: ["1L1"], - growl: ["1L1"], - gunkshot: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - honeclaws: ["1L1"], - hypervoice: ["1L1"], - icebeam: ["1L1"], - icywind: ["1L1"], - irontail: ["1L1"], - lastresort: ["1L1"], - mimic: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - mudsport: ["1L1"], - naturalgift: ["1L1"], - odorsleuth: ["1L1"], - pinmissile: ["1L1"], - protect: ["1L1"], - pursuit: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - rockclimb: ["1L1"], - rocksmash: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - sandattack: ["1L1"], - secretpower: ["1L1"], - seedbomb: ["1L1"], - shadowball: ["1L1"], - shockwave: ["1L1"], - simplebeam: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - superfang: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - tackle: ["1L1"], - tailslap: ["1L1"], - tailwhip: ["1L1"], - takedown: ["1L1"], - thief: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderwave: ["1L1"], - tickle: ["1L1"], - toxic: ["1L1"], - trick: ["1L1"], - waterpulse: ["1L1"], - whirlpool: ["1L1"], - workup: ["1L1"], - }, - eventData: [ - {generation: 3, level: 5, shiny: true, abilities: ["1L1"], moves: ["1L1"], pokeball: "pokeball"}, - {generation: 3, level: 5, shiny: 1, abilities: ["1L1"], moves: ["1L1"], pokeball: "pokeball", emeraldEventEgg: true}, - ], - encounters: [ - {generation: 3, level: 2}, - ], - }, - zigzagoongalar: { - learnset: { - assurance: ["1L1"], - attract: ["1L1"], - babydolleyes: ["1L1"], - blizzard: ["1L1"], - bodyslam: ["1L1"], - counter: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - faketears: ["1L1"], - fling: ["1L1"], - grassknot: ["1L1"], - gunkshot: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hypervoice: ["1L1"], - icebeam: ["1L1"], - icywind: ["1L1"], - irontail: ["1L1"], - knockoff: ["1L1"], - lashout: ["1L1"], - leer: ["1L1"], - lick: ["1L1"], - mudshot: ["1L1"], - partingshot: ["1L1"], - payback: ["1L1"], - pinmissile: ["1L1"], - protect: ["1L1"], - quickguard: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - round: ["1L1"], - sandattack: ["1L1"], - scaryface: ["1L1"], - screech: ["1L1"], - seedbomb: ["1L1"], - shadowball: ["1L1"], - sleeptalk: ["1L1"], - snarl: ["1L1"], - snore: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - surf: ["1L1"], - swift: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - thief: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderwave: ["1L1"], - trick: ["1L1"], - whirlpool: ["1L1"], - workup: ["1L1"], - }, - }, - linoone: { - learnset: { - attract: ["1L1"], - babydolleyes: ["1L1"], - bellydrum: ["1L1"], - bestow: ["1L1"], - blizzard: ["1L1"], - bodyslam: ["1L1"], - captivate: ["1L1"], - chargebeam: ["1L1"], - charm: ["1L1"], - confide: ["1L1"], - covet: ["1L1"], - cut: ["1L1"], - defensecurl: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - echoedvoice: ["1L1"], - endure: ["1L1"], - extremespeed: ["1L1"], - facade: ["1L1"], - flail: ["1L1"], - fling: ["1L1"], - frustration: ["1L1"], - furycutter: ["1L1"], - furyswipes: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - growl: ["1L1"], - gunkshot: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - honeclaws: ["1L1"], - hyperbeam: ["1L1"], - hypervoice: ["1L1"], - icebeam: ["1L1"], - icywind: ["1L1"], - irontail: ["1L1"], - lastresort: ["1L1"], - mimic: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - mudsport: ["1L1"], - naturalgift: ["1L1"], - odorsleuth: ["1L1"], - pinmissile: ["1L1"], - playrough: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - roar: ["1L1"], - rocksmash: ["1L1"], - rollout: ["1L1"], - rototiller: ["1L1"], - round: ["1L1"], - sandattack: ["1L1"], - secretpower: ["1L1"], - seedbomb: ["1L1"], - shadowball: ["1L1"], - shadowclaw: ["1L1"], - shockwave: ["1L1"], - slash: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - stompingtantrum: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - superfang: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - switcheroo: ["1L1"], - tackle: ["1L1"], - tailslap: ["1L1"], - tailwhip: ["1L1"], - takedown: ["1L1"], - thief: ["1L1"], - throatchop: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - trick: ["1L1"], - waterpulse: ["1L1"], - whirlpool: ["1L1"], - workup: ["1L1"], - }, - eventData: [ - {generation: 6, level: 50, moves: ["1L1"], pokeball: "cherishball"}, - ], - encounters: [ - {generation: 4, level: 3}, - {generation: 6, level: 17, maxEggMoves: 1}, - ], - }, - linoonegalar: { - learnset: { - assurance: ["1L1"], - attract: ["1L1"], - babydolleyes: ["1L1"], - blizzard: ["1L1"], - bodypress: ["1L1"], - bodyslam: ["1L1"], - counter: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - faketears: ["1L1"], - fling: ["1L1"], - furyswipes: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - gunkshot: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - honeclaws: ["1L1"], - hyperbeam: ["1L1"], - hypervoice: ["1L1"], - icebeam: ["1L1"], - icywind: ["1L1"], - irontail: ["1L1"], - lashout: ["1L1"], - leer: ["1L1"], - lick: ["1L1"], - mudshot: ["1L1"], - nightslash: ["1L1"], - payback: ["1L1"], - pinmissile: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - round: ["1L1"], - sandattack: ["1L1"], - scaryface: ["1L1"], - screech: ["1L1"], - seedbomb: ["1L1"], - shadowball: ["1L1"], - shadowclaw: ["1L1"], - sleeptalk: ["1L1"], - snarl: ["1L1"], - snore: ["1L1"], - stompingtantrum: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - surf: ["1L1"], - swift: ["1L1"], - switcheroo: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - thief: ["1L1"], - throatchop: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderwave: ["1L1"], - trick: ["1L1"], - whirlpool: ["1L1"], - workup: ["1L1"], - }, - }, - obstagoon: { - learnset: { - assurance: ["1L1"], - attract: ["1L1"], - babydolleyes: ["1L1"], - blizzard: ["1L1"], - bodypress: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - bulkup: ["1L1"], - closecombat: ["1L1"], - counter: ["1L1"], - crosschop: ["1L1"], - crosspoison: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - faketears: ["1L1"], - firepunch: ["1L1"], - fling: ["1L1"], - focusenergy: ["1L1"], - furyswipes: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - gunkshot: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - honeclaws: ["1L1"], - hyperbeam: ["1L1"], - hypervoice: ["1L1"], - icebeam: ["1L1"], - icepunch: ["1L1"], - icywind: ["1L1"], - irondefense: ["1L1"], - irontail: ["1L1"], - lashout: ["1L1"], - leer: ["1L1"], - lick: ["1L1"], - lowkick: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - mudshot: ["1L1"], - nightslash: ["1L1"], - obstruct: ["1L1"], - payback: ["1L1"], - pinmissile: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - revenge: ["1L1"], - reversal: ["1L1"], - round: ["1L1"], - sandattack: ["1L1"], - scaryface: ["1L1"], - screech: ["1L1"], - seedbomb: ["1L1"], - shadowball: ["1L1"], - shadowclaw: ["1L1"], - sleeptalk: ["1L1"], - snarl: ["1L1"], - snore: ["1L1"], - stompingtantrum: ["1L1"], - submission: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - surf: ["1L1"], - swift: ["1L1"], - switcheroo: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - thief: ["1L1"], - throatchop: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderpunch: ["1L1"], - thunderwave: ["1L1"], - trick: ["1L1"], - whirlpool: ["1L1"], - workup: ["1L1"], - xscissor: ["1L1"], - }, - }, - wurmple: { - learnset: { - bugbite: ["1L1"], - electroweb: ["1L1"], - poisonsting: ["1L1"], - snore: ["1L1"], - stringshot: ["1L1"], - tackle: ["1L1"], - }, - encounters: [ - {generation: 3, level: 2}, - ], - }, - silcoon: { - learnset: { - bugbite: ["1L1"], - electroweb: ["1L1"], - harden: ["1L1"], - irondefense: ["1L1"], - stringshot: ["1L1"], - }, - encounters: [ - {generation: 3, level: 5}, - {generation: 4, level: 5}, - {generation: 6, level: 2, maxEggMoves: 1}, - ], - }, - beautifly: { - learnset: { - absorb: ["1L1"], - acrobatics: ["1L1"], - aerialace: ["1L1"], - aircutter: ["1L1"], - attract: ["1L1"], - bugbite: ["1L1"], - bugbuzz: ["1L1"], - captivate: ["1L1"], - confide: ["1L1"], - defog: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - electroweb: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - flash: ["1L1"], - frustration: ["1L1"], - gigadrain: ["1L1"], - gigaimpact: ["1L1"], - gust: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - infestation: ["1L1"], - laserfocus: ["1L1"], - megadrain: ["1L1"], - mimic: ["1L1"], - morningsun: ["1L1"], - naturalgift: ["1L1"], - ominouswind: ["1L1"], - protect: ["1L1"], - psychic: ["1L1"], - quiverdance: ["1L1"], - rage: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roost: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - secretpower: ["1L1"], - shadowball: ["1L1"], - signalbeam: ["1L1"], - silverwind: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - stringshot: ["1L1"], - strugglebug: ["1L1"], - stunspore: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - tailwind: ["1L1"], - thief: ["1L1"], - toxic: ["1L1"], - twister: ["1L1"], - uturn: ["1L1"], - venoshock: ["1L1"], - whirlwind: ["1L1"], - }, - }, - cascoon: { - learnset: { - bugbite: ["1L1"], - electroweb: ["1L1"], - harden: ["1L1"], - irondefense: ["1L1"], - stringshot: ["1L1"], - }, - encounters: [ - {generation: 3, level: 5}, - {generation: 4, level: 5}, - {generation: 6, level: 2, maxEggMoves: 1}, - ], - }, - dustox: { - learnset: { - acrobatics: ["1L1"], - aerialace: ["1L1"], - aircutter: ["1L1"], - attract: ["1L1"], - bugbite: ["1L1"], - bugbuzz: ["1L1"], - captivate: ["1L1"], - confide: ["1L1"], - confusion: ["1L1"], - defog: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - electroweb: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - flash: ["1L1"], - frustration: ["1L1"], - gigadrain: ["1L1"], - gigaimpact: ["1L1"], - gust: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - infestation: ["1L1"], - laserfocus: ["1L1"], - lightscreen: ["1L1"], - mimic: ["1L1"], - moonlight: ["1L1"], - naturalgift: ["1L1"], - ominouswind: ["1L1"], - poisonpowder: ["1L1"], - protect: ["1L1"], - psybeam: ["1L1"], - psychic: ["1L1"], - quiverdance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roost: ["1L1"], - round: ["1L1"], - secretpower: ["1L1"], - shadowball: ["1L1"], - signalbeam: ["1L1"], - silverwind: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - stringshot: ["1L1"], - strugglebug: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - tailwind: ["1L1"], - thief: ["1L1"], - toxic: ["1L1"], - twister: ["1L1"], - uturn: ["1L1"], - venoshock: ["1L1"], - whirlwind: ["1L1"], - }, - }, - lotad: { - learnset: { - absorb: ["1L1"], - astonish: ["1L1"], - attract: ["1L1"], - blizzard: ["1L1"], - bodyslam: ["1L1"], - bubble: ["1L1"], - bubblebeam: ["1L1"], - bulletseed: ["1L1"], - captivate: ["1L1"], - chillingwater: ["1L1"], - confide: ["1L1"], - counter: ["1L1"], - disarmingvoice: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - echoedvoice: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - flail: ["1L1"], - flash: ["1L1"], - frustration: ["1L1"], - gigadrain: ["1L1"], - grassknot: ["1L1"], - grassyglide: ["1L1"], - grassyterrain: ["1L1"], - growl: ["1L1"], - hail: ["1L1"], - headbutt: ["1L1"], - hiddenpower: ["1L1"], - icebeam: ["1L1"], - icywind: ["1L1"], - leechseed: ["1L1"], - magicalleaf: ["1L1"], - megadrain: ["1L1"], - mimic: ["1L1"], - mist: ["1L1"], - muddywater: ["1L1"], - naturalgift: ["1L1"], - naturepower: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - razorleaf: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - round: ["1L1"], - scald: ["1L1"], - secretpower: ["1L1"], - seedbomb: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - sweetscent: ["1L1"], - swordsdance: ["1L1"], - synthesis: ["1L1"], - takedown: ["1L1"], - teeterdance: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - tickle: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - uproar: ["1L1"], - watergun: ["1L1"], - waterpulse: ["1L1"], - weatherball: ["1L1"], - whirlpool: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 3, level: 10, gender: "M", moves: ["1L1"], pokeball: "pokeball"}, - ], - encounters: [ - {generation: 3, level: 3}, - ], - }, - lombre: { - learnset: { - absorb: ["1L1"], - astonish: ["1L1"], - attract: ["1L1"], - blizzard: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - bubble: ["1L1"], - bubblebeam: ["1L1"], - bulletseed: ["1L1"], - captivate: ["1L1"], - chillingwater: ["1L1"], - confide: ["1L1"], - disarmingvoice: ["1L1"], - dive: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - drainpunch: ["1L1"], - dynamicpunch: ["1L1"], - echoedvoice: ["1L1"], - encore: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - fakeout: ["1L1"], - firepunch: ["1L1"], - flail: ["1L1"], - flash: ["1L1"], - fling: ["1L1"], - frustration: ["1L1"], - furyswipes: ["1L1"], - gigadrain: ["1L1"], - grassknot: ["1L1"], - grassyglide: ["1L1"], - grassyterrain: ["1L1"], - growl: ["1L1"], - hail: ["1L1"], - headbutt: ["1L1"], - hiddenpower: ["1L1"], - honeclaws: ["1L1"], - hydropump: ["1L1"], - hypervoice: ["1L1"], - icebeam: ["1L1"], - icepunch: ["1L1"], - icywind: ["1L1"], - knockoff: ["1L1"], - leechseed: ["1L1"], - magicalleaf: ["1L1"], - megadrain: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - metronome: ["1L1"], - mimic: ["1L1"], - mist: ["1L1"], - muddywater: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - naturepower: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rocksmash: ["1L1"], - round: ["1L1"], - scald: ["1L1"], - secretpower: ["1L1"], - seedbomb: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - swordsdance: ["1L1"], - synthesis: ["1L1"], - takedown: ["1L1"], - teeterdance: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thunderpunch: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - uproar: ["1L1"], - waterfall: ["1L1"], - watergun: ["1L1"], - waterpulse: ["1L1"], - watersport: ["1L1"], - weatherball: ["1L1"], - whirlpool: ["1L1"], - zenheadbutt: ["1L1"], - }, - encounters: [ - {generation: 6, level: 13, maxEggMoves: 1}, - ], - }, - ludicolo: { - learnset: { - absorb: ["1L1"], - amnesia: ["1L1"], - astonish: ["1L1"], - attract: ["1L1"], - blizzard: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - bubblebeam: ["1L1"], - bulletseed: ["1L1"], - captivate: ["1L1"], - chillingwater: ["1L1"], - confide: ["1L1"], - counter: ["1L1"], - disarmingvoice: ["1L1"], - dive: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - drainpunch: ["1L1"], - dynamicpunch: ["1L1"], - echoedvoice: ["1L1"], - encore: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - fakeout: ["1L1"], - firepunch: ["1L1"], - flail: ["1L1"], - flash: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - focuspunch: ["1L1"], - frustration: ["1L1"], - furyswipes: ["1L1"], - gigadrain: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - grassyglide: ["1L1"], - grassyterrain: ["1L1"], - growl: ["1L1"], - hail: ["1L1"], - headbutt: ["1L1"], - hiddenpower: ["1L1"], - honeclaws: ["1L1"], - hydropump: ["1L1"], - hyperbeam: ["1L1"], - hypervoice: ["1L1"], - icebeam: ["1L1"], - icepunch: ["1L1"], - icespinner: ["1L1"], - icywind: ["1L1"], - knockoff: ["1L1"], - leafstorm: ["1L1"], - magicalleaf: ["1L1"], - megadrain: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - metronome: ["1L1"], - mimic: ["1L1"], - mist: ["1L1"], - muddywater: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - naturepower: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rockclimb: ["1L1"], - rocksmash: ["1L1"], - round: ["1L1"], - scald: ["1L1"], - secretpower: ["1L1"], - seedbomb: ["1L1"], - seismictoss: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - swordsdance: ["1L1"], - synthesis: ["1L1"], - takedown: ["1L1"], - teeterdance: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thunderpunch: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - uproar: ["1L1"], - waterfall: ["1L1"], - watergun: ["1L1"], - waterpulse: ["1L1"], - weatherball: ["1L1"], - whirlpool: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 5, level: 50, shiny: 1, abilities: ["1L1"], moves: ["1L1"], pokeball: "cherishball"}, - {generation: 5, level: 30, gender: "M", nature: "Calm", abilities: ["1L1"], moves: ["1L1"], pokeball: "pokeball"}, - ], - }, - seedot: { - learnset: { - absorb: ["1L1"], - amnesia: ["1L1"], - astonish: ["1L1"], - attract: ["1L1"], - beatup: ["1L1"], - bide: ["1L1"], - bodyslam: ["1L1"], - bulletseed: ["1L1"], - captivate: ["1L1"], - confide: ["1L1"], - curse: ["1L1"], - defensecurl: ["1L1"], - defog: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - explosion: ["1L1"], - facade: ["1L1"], - falseswipe: ["1L1"], - flash: ["1L1"], - foulplay: ["1L1"], - frustration: ["1L1"], - gigadrain: ["1L1"], - grassknot: ["1L1"], - grassyglide: ["1L1"], - grassyterrain: ["1L1"], - growth: ["1L1"], - harden: ["1L1"], - headbutt: ["1L1"], - hiddenpower: ["1L1"], - leafstorm: ["1L1"], - leechseed: ["1L1"], - magicalleaf: ["1L1"], - megadrain: ["1L1"], - mimic: ["1L1"], - nastyplot: ["1L1"], - naturalgift: ["1L1"], - naturepower: ["1L1"], - nightslash: ["1L1"], - payback: ["1L1"], - powerswap: ["1L1"], - protect: ["1L1"], - quickattack: ["1L1"], - raindance: ["1L1"], - razorwind: ["1L1"], - refresh: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - rocksmash: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - secretpower: ["1L1"], - seedbomb: ["1L1"], - selfdestruct: ["1L1"], - shadowball: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - spite: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swordsdance: ["1L1"], - synthesis: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - worryseed: ["1L1"], - }, - eventData: [ - {generation: 3, level: 10, gender: "M", moves: ["1L1"], pokeball: "pokeball"}, - {generation: 3, level: 17, moves: ["1L1"]}, - ], - encounters: [ - {generation: 3, level: 3}, - ], - }, - nuzleaf: { - learnset: { - absorb: ["1L1"], - aircutter: ["1L1"], - amnesia: ["1L1"], - assurance: ["1L1"], - astonish: ["1L1"], - attract: ["1L1"], - beatup: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - bulletseed: ["1L1"], - captivate: ["1L1"], - chillingwater: ["1L1"], - confide: ["1L1"], - curse: ["1L1"], - cut: ["1L1"], - darkpulse: ["1L1"], - defensecurl: ["1L1"], - defog: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - embargo: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - explosion: ["1L1"], - extrasensory: ["1L1"], - facade: ["1L1"], - fakeout: ["1L1"], - falseswipe: ["1L1"], - feintattack: ["1L1"], - flash: ["1L1"], - fling: ["1L1"], - foulplay: ["1L1"], - frustration: ["1L1"], - furycutter: ["1L1"], - gigadrain: ["1L1"], - grassknot: ["1L1"], - grassyglide: ["1L1"], - grassyterrain: ["1L1"], - growth: ["1L1"], - harden: ["1L1"], - headbutt: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - knockoff: ["1L1"], - lashout: ["1L1"], - leafblade: ["1L1"], - leafstorm: ["1L1"], - lowkick: ["1L1"], - lowsweep: ["1L1"], - magicalleaf: ["1L1"], - megadrain: ["1L1"], - megakick: ["1L1"], - mimic: ["1L1"], - mudslap: ["1L1"], - nastyplot: ["1L1"], - naturalgift: ["1L1"], - naturepower: ["1L1"], - payback: ["1L1"], - pound: ["1L1"], - powerswap: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - psychup: ["1L1"], - raindance: ["1L1"], - razorleaf: ["1L1"], - razorwind: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - scaryface: ["1L1"], - secretpower: ["1L1"], - seedbomb: ["1L1"], - selfdestruct: ["1L1"], - shadowball: ["1L1"], - sleeptalk: ["1L1"], - snarl: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - solarblade: ["1L1"], - spite: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - swordsdance: ["1L1"], - synthesis: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - uproar: ["1L1"], - weatherball: ["1L1"], - worryseed: ["1L1"], - }, - encounters: [ - {generation: 6, level: 13, maxEggMoves: 1}, - ], - }, - shiftry: { - learnset: { - absorb: ["1L1"], - aerialace: ["1L1"], - aircutter: ["1L1"], - airslash: ["1L1"], - amnesia: ["1L1"], - assurance: ["1L1"], - astonish: ["1L1"], - attract: ["1L1"], - beatup: ["1L1"], - bodyslam: ["1L1"], - bounce: ["1L1"], - brickbreak: ["1L1"], - brutalswing: ["1L1"], - bulletseed: ["1L1"], - captivate: ["1L1"], - chillingwater: ["1L1"], - confide: ["1L1"], - confuseray: ["1L1"], - curse: ["1L1"], - cut: ["1L1"], - darkpulse: ["1L1"], - defensecurl: ["1L1"], - defog: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - embargo: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - explosion: ["1L1"], - extrasensory: ["1L1"], - facade: ["1L1"], - fakeout: ["1L1"], - falseswipe: ["1L1"], - feintattack: ["1L1"], - flash: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - foulplay: ["1L1"], - frustration: ["1L1"], - furycutter: ["1L1"], - gigadrain: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - grassyglide: ["1L1"], - grassyterrain: ["1L1"], - growth: ["1L1"], - harden: ["1L1"], - headbutt: ["1L1"], - heatwave: ["1L1"], - hex: ["1L1"], - hiddenpower: ["1L1"], - hurricane: ["1L1"], - hyperbeam: ["1L1"], - icywind: ["1L1"], - imprison: ["1L1"], - knockoff: ["1L1"], - lashout: ["1L1"], - leafblade: ["1L1"], - leafstorm: ["1L1"], - leaftornado: ["1L1"], - lowkick: ["1L1"], - lowsweep: ["1L1"], - magicalleaf: ["1L1"], - megadrain: ["1L1"], - megakick: ["1L1"], - mimic: ["1L1"], - mudslap: ["1L1"], - nastyplot: ["1L1"], - naturalgift: ["1L1"], - naturepower: ["1L1"], - ominouswind: ["1L1"], - payback: ["1L1"], - petalblizzard: ["1L1"], - pound: ["1L1"], - powerswap: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - psychup: ["1L1"], - raindance: ["1L1"], - razorleaf: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - revenge: ["1L1"], - reversal: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - scaryface: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - seedbomb: ["1L1"], - selfdestruct: ["1L1"], - shadowball: ["1L1"], - silverwind: ["1L1"], - sleeptalk: ["1L1"], - snarl: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - solarblade: ["1L1"], - spite: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - swordsdance: ["1L1"], - synthesis: ["1L1"], - tackle: ["1L1"], - tailwind: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - throatchop: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - toxicspikes: ["1L1"], - trailblaze: ["1L1"], - twister: ["1L1"], - upperhand: ["1L1"], - uproar: ["1L1"], - vacuumwave: ["1L1"], - weatherball: ["1L1"], - whirlwind: ["1L1"], - willowisp: ["1L1"], - worryseed: ["1L1"], - xscissor: ["1L1"], - }, - }, - taillow: { - learnset: { - aerialace: ["1L1"], - agility: ["1L1"], - aircutter: ["1L1"], - airslash: ["1L1"], - attract: ["1L1"], - boomburst: ["1L1"], - bravebird: ["1L1"], - captivate: ["1L1"], - confide: ["1L1"], - counter: ["1L1"], - defog: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - echoedvoice: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - featherdance: ["1L1"], - fly: ["1L1"], - focusenergy: ["1L1"], - frustration: ["1L1"], - growl: ["1L1"], - heatwave: ["1L1"], - hiddenpower: ["1L1"], - hurricane: ["1L1"], - mimic: ["1L1"], - mirrormove: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - ominouswind: ["1L1"], - peck: ["1L1"], - pluck: ["1L1"], - protect: ["1L1"], - pursuit: ["1L1"], - quickattack: ["1L1"], - quickguard: ["1L1"], - rage: ["1L1"], - raindance: ["1L1"], - refresh: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - reversal: ["1L1"], - roost: ["1L1"], - round: ["1L1"], - secretpower: ["1L1"], - skyattack: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - steelwing: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - supersonic: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - tailwind: ["1L1"], - thief: ["1L1"], - toxic: ["1L1"], - twister: ["1L1"], - uturn: ["1L1"], - whirlwind: ["1L1"], - wingattack: ["1L1"], - workup: ["1L1"], - }, - eventData: [ - {generation: 3, level: 5, shiny: 1, moves: ["1L1"], pokeball: "pokeball", emeraldEventEgg: true}, - ], - encounters: [ - {generation: 3, level: 4}, - ], - }, - swellow: { - learnset: { - aerialace: ["1L1"], - agility: ["1L1"], - aircutter: ["1L1"], - airslash: ["1L1"], - attract: ["1L1"], - batonpass: ["1L1"], - bravebird: ["1L1"], - captivate: ["1L1"], - confide: ["1L1"], - counter: ["1L1"], - defog: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - echoedvoice: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fly: ["1L1"], - focusenergy: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - growl: ["1L1"], - heatwave: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - laserfocus: ["1L1"], - mimic: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - ominouswind: ["1L1"], - peck: ["1L1"], - pluck: ["1L1"], - protect: ["1L1"], - quickattack: ["1L1"], - quickguard: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - reversal: ["1L1"], - roost: ["1L1"], - round: ["1L1"], - secretpower: ["1L1"], - skyattack: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - steelwing: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - tailwind: ["1L1"], - thief: ["1L1"], - toxic: ["1L1"], - twister: ["1L1"], - uturn: ["1L1"], - wingattack: ["1L1"], - workup: ["1L1"], - }, - eventData: [ - {generation: 3, level: 43, moves: ["1L1"]}, - ], - encounters: [ - {generation: 4, level: 20}, - ], - }, - wingull: { - learnset: { - acrobatics: ["1L1"], - aerialace: ["1L1"], - agility: ["1L1"], - aircutter: ["1L1"], - airslash: ["1L1"], - aquaring: ["1L1"], - attract: ["1L1"], - blizzard: ["1L1"], - bravebird: ["1L1"], - brine: ["1L1"], - captivate: ["1L1"], - chillingwater: ["1L1"], - confide: ["1L1"], - defog: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dualwingbeat: ["1L1"], - echoedvoice: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - featherdance: ["1L1"], - fly: ["1L1"], - frustration: ["1L1"], - growl: ["1L1"], - gust: ["1L1"], - hail: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hurricane: ["1L1"], - hydropump: ["1L1"], - icebeam: ["1L1"], - icywind: ["1L1"], - knockoff: ["1L1"], - liquidation: ["1L1"], - mimic: ["1L1"], - mist: ["1L1"], - muddywater: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - ominouswind: ["1L1"], - pluck: ["1L1"], - protect: ["1L1"], - pursuit: ["1L1"], - quickattack: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roost: ["1L1"], - round: ["1L1"], - scald: ["1L1"], - secretpower: ["1L1"], - shockwave: ["1L1"], - skyattack: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - snowscape: ["1L1"], - soak: ["1L1"], - steelwing: ["1L1"], - substitute: ["1L1"], - supersonic: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - tailwind: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - toxic: ["1L1"], - twister: ["1L1"], - uproar: ["1L1"], - uturn: ["1L1"], - waterfall: ["1L1"], - watergun: ["1L1"], - waterpulse: ["1L1"], - watersport: ["1L1"], - whirlpool: ["1L1"], - wideguard: ["1L1"], - wingattack: ["1L1"], - }, - encounters: [ - {generation: 3, level: 2}, - ], - }, - pelipper: { - learnset: { - acrobatics: ["1L1"], - aerialace: ["1L1"], - agility: ["1L1"], - aircutter: ["1L1"], - airslash: ["1L1"], - attract: ["1L1"], - blizzard: ["1L1"], - bodyslam: ["1L1"], - bravebird: ["1L1"], - brine: ["1L1"], - captivate: ["1L1"], - chillingwater: ["1L1"], - confide: ["1L1"], - defog: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dualwingbeat: ["1L1"], - echoedvoice: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - featherdance: ["1L1"], - fling: ["1L1"], - fly: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - growl: ["1L1"], - gunkshot: ["1L1"], - hail: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hurricane: ["1L1"], - hydropump: ["1L1"], - hyperbeam: ["1L1"], - icebeam: ["1L1"], - icywind: ["1L1"], - knockoff: ["1L1"], - liquidation: ["1L1"], - mimic: ["1L1"], - mist: ["1L1"], - muddywater: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - ominouswind: ["1L1"], - payback: ["1L1"], - pluck: ["1L1"], - protect: ["1L1"], - quickattack: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roost: ["1L1"], - round: ["1L1"], - scald: ["1L1"], - secretpower: ["1L1"], - seedbomb: ["1L1"], - shockwave: ["1L1"], - skyattack: ["1L1"], - skydrop: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - snowscape: ["1L1"], - soak: ["1L1"], - spitup: ["1L1"], - steelwing: ["1L1"], - stockpile: ["1L1"], - substitute: ["1L1"], - supersonic: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - swallow: ["1L1"], - swift: ["1L1"], - tailwind: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - toxic: ["1L1"], - twister: ["1L1"], - uproar: ["1L1"], - uturn: ["1L1"], - waterfall: ["1L1"], - watergun: ["1L1"], - waterpulse: ["1L1"], - watersport: ["1L1"], - weatherball: ["1L1"], - whirlpool: ["1L1"], - wingattack: ["1L1"], - }, - encounters: [ - {generation: 4, level: 15}, - {generation: 6, level: 18, maxEggMoves: 1}, - ], - }, - ralts: { - learnset: { - alluringvoice: ["1L1"], - allyswitch: ["1L1"], - attract: ["1L1"], - bodyslam: ["1L1"], - calmmind: ["1L1"], - captivate: ["1L1"], - chargebeam: ["1L1"], - charm: ["1L1"], - confide: ["1L1"], - confuseray: ["1L1"], - confusion: ["1L1"], - dazzlinggleam: ["1L1"], - defensecurl: ["1L1"], - destinybond: ["1L1"], - disable: ["1L1"], - disarmingvoice: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - drainingkiss: ["1L1"], - dreameater: ["1L1"], - echoedvoice: ["1L1"], - encore: ["1L1"], - endure: ["1L1"], - expandingforce: ["1L1"], - facade: ["1L1"], - firepunch: ["1L1"], - flash: ["1L1"], - fling: ["1L1"], - frustration: ["1L1"], - futuresight: ["1L1"], - grassknot: ["1L1"], - growl: ["1L1"], - grudge: ["1L1"], - headbutt: ["1L1"], - healpulse: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hypervoice: ["1L1"], - hypnosis: ["1L1"], - icepunch: ["1L1"], - icywind: ["1L1"], - imprison: ["1L1"], - knockoff: ["1L1"], - lifedew: ["1L1"], - lightscreen: ["1L1"], - luckychant: ["1L1"], - magicalleaf: ["1L1"], - magiccoat: ["1L1"], - magicroom: ["1L1"], - meanlook: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - memento: ["1L1"], - metronome: ["1L1"], - mimic: ["1L1"], - mistyterrain: ["1L1"], - mudslap: ["1L1"], - mysticalfire: ["1L1"], - naturalgift: ["1L1"], - nightmare: ["1L1"], - painsplit: ["1L1"], - protect: ["1L1"], - psybeam: ["1L1"], - psychic: ["1L1"], - psychicterrain: ["1L1"], - psychup: ["1L1"], - psyshock: ["1L1"], - raindance: ["1L1"], - recycle: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - secretpower: ["1L1"], - shadowball: ["1L1"], - shadowsneak: ["1L1"], - shockwave: ["1L1"], - signalbeam: ["1L1"], - sing: ["1L1"], - skillswap: ["1L1"], - sleeptalk: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - storedpower: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - synchronoise: ["1L1"], - taunt: ["1L1"], - telekinesis: ["1L1"], - teleport: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thunderbolt: ["1L1"], - thunderpunch: ["1L1"], - thunderwave: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - trick: ["1L1"], - trickroom: ["1L1"], - willowisp: ["1L1"], - wish: ["1L1"], - wonderroom: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 3, level: 5, shiny: 1, moves: ["1L1"], pokeball: "pokeball"}, - {generation: 3, level: 5, shiny: 1, moves: ["1L1"], pokeball: "pokeball"}, - {generation: 3, level: 20, moves: ["1L1"]}, - {generation: 6, level: 1, isHidden: true, moves: ["1L1"], pokeball: "pokeball"}, - ], - encounters: [ - {generation: 3, level: 4}, - ], - }, - kirlia: { - learnset: { - alluringvoice: ["1L1"], - allyswitch: ["1L1"], - attract: ["1L1"], - bodyslam: ["1L1"], - calmmind: ["1L1"], - captivate: ["1L1"], - chargebeam: ["1L1"], - charm: ["1L1"], - confide: ["1L1"], - confuseray: ["1L1"], - confusion: ["1L1"], - dazzlinggleam: ["1L1"], - defensecurl: ["1L1"], - disarmingvoice: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - drainingkiss: ["1L1"], - dreameater: ["1L1"], - echoedvoice: ["1L1"], - encore: ["1L1"], - endure: ["1L1"], - expandingforce: ["1L1"], - facade: ["1L1"], - firepunch: ["1L1"], - flash: ["1L1"], - fling: ["1L1"], - frustration: ["1L1"], - futuresight: ["1L1"], - grassknot: ["1L1"], - growl: ["1L1"], - headbutt: ["1L1"], - healpulse: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - hypervoice: ["1L1"], - hypnosis: ["1L1"], - icepunch: ["1L1"], - icywind: ["1L1"], - imprison: ["1L1"], - knockoff: ["1L1"], - lifedew: ["1L1"], - lightscreen: ["1L1"], - luckychant: ["1L1"], - magicalleaf: ["1L1"], - magiccoat: ["1L1"], - magicroom: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - metronome: ["1L1"], - mimic: ["1L1"], - mistyterrain: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - nightmare: ["1L1"], - painsplit: ["1L1"], - protect: ["1L1"], - psybeam: ["1L1"], - psychic: ["1L1"], - psychicterrain: ["1L1"], - psychup: ["1L1"], - psyshock: ["1L1"], - raindance: ["1L1"], - recycle: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - secretpower: ["1L1"], - shadowball: ["1L1"], - shockwave: ["1L1"], - signalbeam: ["1L1"], - skillswap: ["1L1"], - sleeptalk: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - storedpower: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - taunt: ["1L1"], - telekinesis: ["1L1"], - teleport: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thunderbolt: ["1L1"], - thunderpunch: ["1L1"], - thunderwave: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - trick: ["1L1"], - trickroom: ["1L1"], - tripleaxel: ["1L1"], - willowisp: ["1L1"], - wonderroom: ["1L1"], - zenheadbutt: ["1L1"], - }, - encounters: [ - {generation: 4, level: 6}, - ], - }, - gardevoir: { - learnset: { - alluringvoice: ["1L1"], - allyswitch: ["1L1"], - attract: ["1L1"], - aurasphere: ["1L1"], - bodyslam: ["1L1"], - calmmind: ["1L1"], - captivate: ["1L1"], - chargebeam: ["1L1"], - charm: ["1L1"], - confide: ["1L1"], - confuseray: ["1L1"], - confusion: ["1L1"], - dazzlinggleam: ["1L1"], - defensecurl: ["1L1"], - disarmingvoice: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - drainingkiss: ["1L1"], - dreameater: ["1L1"], - echoedvoice: ["1L1"], - encore: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - expandingforce: ["1L1"], - facade: ["1L1"], - firepunch: ["1L1"], - flash: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - frustration: ["1L1"], - futuresight: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - gravity: ["1L1"], - growl: ["1L1"], - guardswap: ["1L1"], - headbutt: ["1L1"], - healbell: ["1L1"], - healingwish: ["1L1"], - healpulse: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - hypervoice: ["1L1"], - hypnosis: ["1L1"], - icepunch: ["1L1"], - icywind: ["1L1"], - imprison: ["1L1"], - knockoff: ["1L1"], - laserfocus: ["1L1"], - lifedew: ["1L1"], - lightscreen: ["1L1"], - magicalleaf: ["1L1"], - magiccoat: ["1L1"], - magicroom: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - metronome: ["1L1"], - mimic: ["1L1"], - mistyexplosion: ["1L1"], - mistyterrain: ["1L1"], - moonblast: ["1L1"], - mudslap: ["1L1"], - mysticalfire: ["1L1"], - naturalgift: ["1L1"], - nightmare: ["1L1"], - nightshade: ["1L1"], - painsplit: ["1L1"], - powerswap: ["1L1"], - protect: ["1L1"], - psybeam: ["1L1"], - psychic: ["1L1"], - psychicnoise: ["1L1"], - psychicterrain: ["1L1"], - psychup: ["1L1"], - psyshock: ["1L1"], - raindance: ["1L1"], - recycle: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - secretpower: ["1L1"], - shadowball: ["1L1"], - shockwave: ["1L1"], - signalbeam: ["1L1"], - skillswap: ["1L1"], - sleeptalk: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - storedpower: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - taunt: ["1L1"], - telekinesis: ["1L1"], - teleport: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thunderbolt: ["1L1"], - thunderpunch: ["1L1"], - thunderwave: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - trick: ["1L1"], - trickroom: ["1L1"], - tripleaxel: ["1L1"], - vacuumwave: ["1L1"], - willowisp: ["1L1"], - wish: ["1L1"], - wonderroom: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 5, level: 50, shiny: 1, abilities: ["1L1"], moves: ["1L1"], pokeball: "cherishball"}, - {generation: 6, level: 50, shiny: true, gender: "F", abilities: ["1L1"], moves: ["1L1"], pokeball: "cherishball"}, - ], - }, - gallade: { - learnset: { - aerialace: ["1L1"], - agility: ["1L1"], - airslash: ["1L1"], - alluringvoice: ["1L1"], - allyswitch: ["1L1"], - aquacutter: ["1L1"], - attract: ["1L1"], - aurasphere: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - bulkup: ["1L1"], - bulldoze: ["1L1"], - calmmind: ["1L1"], - captivate: ["1L1"], - chargebeam: ["1L1"], - charm: ["1L1"], - closecombat: ["1L1"], - coaching: ["1L1"], - confide: ["1L1"], - confuseray: ["1L1"], - confusion: ["1L1"], - cut: ["1L1"], - dazzlinggleam: ["1L1"], - disarmingvoice: ["1L1"], - doubleteam: ["1L1"], - drainingkiss: ["1L1"], - drainpunch: ["1L1"], - dreameater: ["1L1"], - dualchop: ["1L1"], - earthquake: ["1L1"], - echoedvoice: ["1L1"], - encore: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - expandingforce: ["1L1"], - facade: ["1L1"], - falseswipe: ["1L1"], - feint: ["1L1"], - firepunch: ["1L1"], - flash: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - focuspunch: ["1L1"], - frustration: ["1L1"], - furycutter: ["1L1"], - futuresight: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - growl: ["1L1"], - headbutt: ["1L1"], - healpulse: ["1L1"], - helpinghand: ["1L1"], - hex: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - hypervoice: ["1L1"], - hypnosis: ["1L1"], - icepunch: ["1L1"], - icywind: ["1L1"], - imprison: ["1L1"], - knockoff: ["1L1"], - laserfocus: ["1L1"], - leafblade: ["1L1"], - leer: ["1L1"], - lifedew: ["1L1"], - lightscreen: ["1L1"], - lowkick: ["1L1"], - lowsweep: ["1L1"], - magicalleaf: ["1L1"], - magiccoat: ["1L1"], - magicroom: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - metronome: ["1L1"], - mistyterrain: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - nightshade: ["1L1"], - nightslash: ["1L1"], - painsplit: ["1L1"], - poisonjab: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - psybeam: ["1L1"], - psychic: ["1L1"], - psychicterrain: ["1L1"], - psychocut: ["1L1"], - psychup: ["1L1"], - psyshock: ["1L1"], - quickguard: ["1L1"], - raindance: ["1L1"], - recycle: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - revenge: ["1L1"], - reversal: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - sacredsword: ["1L1"], - safeguard: ["1L1"], - secretpower: ["1L1"], - shadowball: ["1L1"], - shadowclaw: ["1L1"], - shockwave: ["1L1"], - signalbeam: ["1L1"], - skillswap: ["1L1"], - slash: ["1L1"], - sleeptalk: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - solarblade: ["1L1"], - stoneedge: ["1L1"], - storedpower: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - swordsdance: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - telekinesis: ["1L1"], - teleport: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - throatchop: ["1L1"], - thunderbolt: ["1L1"], - thunderpunch: ["1L1"], - thunderwave: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - trick: ["1L1"], - trickroom: ["1L1"], - tripleaxel: ["1L1"], - upperhand: ["1L1"], - vacuumwave: ["1L1"], - wideguard: ["1L1"], - willowisp: ["1L1"], - wonderroom: ["1L1"], - workup: ["1L1"], - xscissor: ["1L1"], - zenheadbutt: ["1L1"], - }, - }, - surskit: { - learnset: { - acrobatics: ["1L1"], - agility: ["1L1"], - aquajet: ["1L1"], - attract: ["1L1"], - batonpass: ["1L1"], - blizzard: ["1L1"], - bubble: ["1L1"], - bubblebeam: ["1L1"], - bugbite: ["1L1"], - bugbuzz: ["1L1"], - captivate: ["1L1"], - chillingwater: ["1L1"], - confide: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fellstinger: ["1L1"], - flash: ["1L1"], - foresight: ["1L1"], - frustration: ["1L1"], - gigadrain: ["1L1"], - haze: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hydropump: ["1L1"], - icebeam: ["1L1"], - icywind: ["1L1"], - infestation: ["1L1"], - leechlife: ["1L1"], - liquidation: ["1L1"], - lunge: ["1L1"], - mimic: ["1L1"], - mindreader: ["1L1"], - mist: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - mudsport: ["1L1"], - naturalgift: ["1L1"], - pounce: ["1L1"], - powersplit: ["1L1"], - protect: ["1L1"], - psybeam: ["1L1"], - psychup: ["1L1"], - quickattack: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - round: ["1L1"], - scald: ["1L1"], - secretpower: ["1L1"], - shadowball: ["1L1"], - signalbeam: ["1L1"], - skittersmack: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - soak: ["1L1"], - solarbeam: ["1L1"], - stickyweb: ["1L1"], - stringshot: ["1L1"], - strugglebug: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - sweetscent: ["1L1"], - swift: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - toxic: ["1L1"], - waterfall: ["1L1"], - watergun: ["1L1"], - waterpulse: ["1L1"], - watersport: ["1L1"], - }, - eventData: [ - {generation: 3, level: 5, shiny: 1, moves: ["1L1"], pokeball: "pokeball", emeraldEventEgg: true}, - {generation: 3, level: 10, gender: "M", moves: ["1L1"], pokeball: "pokeball"}, - ], - encounters: [ - {generation: 3, level: 3}, - ], - }, - masquerain: { - learnset: { - acrobatics: ["1L1"], - aerialace: ["1L1"], - agility: ["1L1"], - aircutter: ["1L1"], - airslash: ["1L1"], - attract: ["1L1"], - batonpass: ["1L1"], - blizzard: ["1L1"], - bubble: ["1L1"], - bugbite: ["1L1"], - bugbuzz: ["1L1"], - captivate: ["1L1"], - chillingwater: ["1L1"], - confide: ["1L1"], - defog: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dualwingbeat: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - flash: ["1L1"], - foulplay: ["1L1"], - frustration: ["1L1"], - gigadrain: ["1L1"], - gigaimpact: ["1L1"], - gust: ["1L1"], - haze: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hurricane: ["1L1"], - hydropump: ["1L1"], - hyperbeam: ["1L1"], - icebeam: ["1L1"], - icywind: ["1L1"], - infestation: ["1L1"], - leechlife: ["1L1"], - liquidation: ["1L1"], - lunge: ["1L1"], - mimic: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - nightmare: ["1L1"], - ominouswind: ["1L1"], - pounce: ["1L1"], - protect: ["1L1"], - psybeam: ["1L1"], - psychup: ["1L1"], - quickattack: ["1L1"], - quiverdance: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roost: ["1L1"], - round: ["1L1"], - scald: ["1L1"], - scaryface: ["1L1"], - secretpower: ["1L1"], - shadowball: ["1L1"], - signalbeam: ["1L1"], - silverwind: ["1L1"], - skittersmack: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - soak: ["1L1"], - solarbeam: ["1L1"], - stringshot: ["1L1"], - strugglebug: ["1L1"], - stunspore: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - sweetscent: ["1L1"], - swift: ["1L1"], - tailwind: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - toxic: ["1L1"], - twister: ["1L1"], - uturn: ["1L1"], - waterfall: ["1L1"], - watergun: ["1L1"], - waterpulse: ["1L1"], - watersport: ["1L1"], - weatherball: ["1L1"], - whirlwind: ["1L1"], - }, - encounters: [ - {generation: 6, level: 21, maxEggMoves: 1}, - ], - }, - shroomish: { - learnset: { - absorb: ["1L1"], - attract: ["1L1"], - bodyslam: ["1L1"], - bulletseed: ["1L1"], - captivate: ["1L1"], - charm: ["1L1"], - confide: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - drainpunch: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - faketears: ["1L1"], - falseswipe: ["1L1"], - flash: ["1L1"], - focuspunch: ["1L1"], - frustration: ["1L1"], - gigadrain: ["1L1"], - grassknot: ["1L1"], - grassyterrain: ["1L1"], - growth: ["1L1"], - gunkshot: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - leechseed: ["1L1"], - magicalleaf: ["1L1"], - megadrain: ["1L1"], - mimic: ["1L1"], - naturalgift: ["1L1"], - poisonpowder: ["1L1"], - pounce: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - refresh: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - secretpower: ["1L1"], - seedbomb: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - spore: ["1L1"], - stunspore: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - swordsdance: ["1L1"], - synthesis: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - toxic: ["1L1"], - venoshock: ["1L1"], - wakeupslap: ["1L1"], - worryseed: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 3, level: 15, abilities: ["1L1"], moves: ["1L1"]}, - ], - }, - breloom: { - learnset: { - absorb: ["1L1"], - aerialace: ["1L1"], - attract: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - bulkup: ["1L1"], - bulldoze: ["1L1"], - bulletseed: ["1L1"], - captivate: ["1L1"], - charm: ["1L1"], - closecombat: ["1L1"], - confide: ["1L1"], - counter: ["1L1"], - cut: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - drainpunch: ["1L1"], - dynamicpunch: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - faketears: ["1L1"], - falseswipe: ["1L1"], - feint: ["1L1"], - flash: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - focuspunch: ["1L1"], - forcepalm: ["1L1"], - frustration: ["1L1"], - furycutter: ["1L1"], - gigadrain: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - grassyterrain: ["1L1"], - growth: ["1L1"], - gunkshot: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - irontail: ["1L1"], - laserfocus: ["1L1"], - leafstorm: ["1L1"], - leechseed: ["1L1"], - lowkick: ["1L1"], - lowsweep: ["1L1"], - machpunch: ["1L1"], - magicalleaf: ["1L1"], - megadrain: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - mimic: ["1L1"], - mindreader: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - poisonjab: ["1L1"], - poisonpowder: ["1L1"], - pounce: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - reversal: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - secretpower: ["1L1"], - seedbomb: ["1L1"], - seismictoss: ["1L1"], - skyuppercut: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - spore: ["1L1"], - stoneedge: ["1L1"], - strength: ["1L1"], - stunspore: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - superpower: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - swordsdance: ["1L1"], - synthesis: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thunderpunch: ["1L1"], - toxic: ["1L1"], - vacuumwave: ["1L1"], - venoshock: ["1L1"], - workup: ["1L1"], - worryseed: ["1L1"], - zenheadbutt: ["1L1"], - }, - }, - slakoth: { - learnset: { - aerialace: ["1L1"], - afteryou: ["1L1"], - amnesia: ["1L1"], - attract: ["1L1"], - blizzard: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - bulkup: ["1L1"], - captivate: ["1L1"], - chillingwater: ["1L1"], - chipaway: ["1L1"], - confide: ["1L1"], - counter: ["1L1"], - covet: ["1L1"], - crushclaw: ["1L1"], - curse: ["1L1"], - cut: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dynamicpunch: ["1L1"], - encore: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - falseswipe: ["1L1"], - feintattack: ["1L1"], - fireblast: ["1L1"], - firepunch: ["1L1"], - flail: ["1L1"], - flamethrower: ["1L1"], - fling: ["1L1"], - focuspunch: ["1L1"], - frustration: ["1L1"], - furycutter: ["1L1"], - gunkshot: ["1L1"], - hammerarm: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - honeclaws: ["1L1"], - icebeam: ["1L1"], - icepunch: ["1L1"], - icywind: ["1L1"], - incinerate: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - metalclaw: ["1L1"], - metronome: ["1L1"], - mimic: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - nightslash: ["1L1"], - playrough: ["1L1"], - poisonjab: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - pursuit: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - scratch: ["1L1"], - secretpower: ["1L1"], - seedbomb: ["1L1"], - seismictoss: ["1L1"], - shadowball: ["1L1"], - shadowclaw: ["1L1"], - shockwave: ["1L1"], - slackoff: ["1L1"], - slash: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - throatchop: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderpunch: ["1L1"], - tickle: ["1L1"], - toxic: ["1L1"], - waterpulse: ["1L1"], - workup: ["1L1"], - xscissor: ["1L1"], - yawn: ["1L1"], - zenheadbutt: ["1L1"], - }, - }, - vigoroth: { - learnset: { - aerialace: ["1L1"], - afteryou: ["1L1"], - amnesia: ["1L1"], - attract: ["1L1"], - blizzard: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - bulkup: ["1L1"], - bulldoze: ["1L1"], - captivate: ["1L1"], - chillingwater: ["1L1"], - chipaway: ["1L1"], - confide: ["1L1"], - counter: ["1L1"], - covet: ["1L1"], - curse: ["1L1"], - cut: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - drainpunch: ["1L1"], - dynamicpunch: ["1L1"], - earthquake: ["1L1"], - encore: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - falseswipe: ["1L1"], - fireblast: ["1L1"], - firepunch: ["1L1"], - flamethrower: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - focusenergy: ["1L1"], - focuspunch: ["1L1"], - frustration: ["1L1"], - furycutter: ["1L1"], - furyswipes: ["1L1"], - gunkshot: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - honeclaws: ["1L1"], - hypervoice: ["1L1"], - icebeam: ["1L1"], - icepunch: ["1L1"], - icywind: ["1L1"], - incinerate: ["1L1"], - knockoff: ["1L1"], - lashout: ["1L1"], - lowkick: ["1L1"], - lowsweep: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - metalclaw: ["1L1"], - metronome: ["1L1"], - mimic: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - outrage: ["1L1"], - playrough: ["1L1"], - poisonjab: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - reversal: ["1L1"], - roar: ["1L1"], - rockclimb: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - scaryface: ["1L1"], - scratch: ["1L1"], - secretpower: ["1L1"], - seedbomb: ["1L1"], - seismictoss: ["1L1"], - shadowball: ["1L1"], - shadowclaw: ["1L1"], - shockwave: ["1L1"], - slash: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - stompingtantrum: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - throatchop: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderpunch: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - uproar: ["1L1"], - waterpulse: ["1L1"], - workup: ["1L1"], - xscissor: ["1L1"], - zenheadbutt: ["1L1"], - }, - }, - slaking: { - learnset: { - aerialace: ["1L1"], - afteryou: ["1L1"], - amnesia: ["1L1"], - attract: ["1L1"], - blizzard: ["1L1"], - block: ["1L1"], - bodypress: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - bulkup: ["1L1"], - bulldoze: ["1L1"], - captivate: ["1L1"], - chillingwater: ["1L1"], - chipaway: ["1L1"], - confide: ["1L1"], - counter: ["1L1"], - covet: ["1L1"], - curse: ["1L1"], - cut: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - drainpunch: ["1L1"], - dynamicpunch: ["1L1"], - earthquake: ["1L1"], - encore: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - falseswipe: ["1L1"], - feintattack: ["1L1"], - fireblast: ["1L1"], - firepunch: ["1L1"], - flail: ["1L1"], - flamethrower: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - focuspunch: ["1L1"], - frustration: ["1L1"], - furycutter: ["1L1"], - gigaimpact: ["1L1"], - gunkshot: ["1L1"], - hammerarm: ["1L1"], - hardpress: ["1L1"], - headbutt: ["1L1"], - heavyslam: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - highhorsepower: ["1L1"], - honeclaws: ["1L1"], - hyperbeam: ["1L1"], - hypervoice: ["1L1"], - icebeam: ["1L1"], - icepunch: ["1L1"], - icywind: ["1L1"], - incinerate: ["1L1"], - knockoff: ["1L1"], - lashout: ["1L1"], - lowkick: ["1L1"], - lowsweep: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - metalclaw: ["1L1"], - metronome: ["1L1"], - mimic: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - outrage: ["1L1"], - playrough: ["1L1"], - poisonjab: ["1L1"], - pounce: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - punishment: ["1L1"], - quash: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - reversal: ["1L1"], - roar: ["1L1"], - rockclimb: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - scaryface: ["1L1"], - scratch: ["1L1"], - secretpower: ["1L1"], - seedbomb: ["1L1"], - seismictoss: ["1L1"], - shadowball: ["1L1"], - shadowclaw: ["1L1"], - shockwave: ["1L1"], - slackoff: ["1L1"], - sleeptalk: ["1L1"], - smackdown: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - stompingtantrum: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - throatchop: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderpunch: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - uproar: ["1L1"], - waterpulse: ["1L1"], - wildcharge: ["1L1"], - workup: ["1L1"], - xscissor: ["1L1"], - yawn: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 4, level: 50, gender: "M", nature: "Adamant", moves: ["1L1"], pokeball: "cherishball"}, - ], - }, - nincada: { - learnset: { - absorb: ["1L1"], - aerialace: ["1L1"], - bide: ["1L1"], - bugbite: ["1L1"], - bugbuzz: ["1L1"], - confide: ["1L1"], - cut: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - falseswipe: ["1L1"], - feintattack: ["1L1"], - finalgambit: ["1L1"], - flail: ["1L1"], - flash: ["1L1"], - frustration: ["1L1"], - furycutter: ["1L1"], - furyswipes: ["1L1"], - gigadrain: ["1L1"], - gust: ["1L1"], - harden: ["1L1"], - hiddenpower: ["1L1"], - honeclaws: ["1L1"], - leechlife: ["1L1"], - metalclaw: ["1L1"], - mimic: ["1L1"], - mindreader: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - nightslash: ["1L1"], - protect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - round: ["1L1"], - sandattack: ["1L1"], - sandstorm: ["1L1"], - scratch: ["1L1"], - secretpower: ["1L1"], - shadowball: ["1L1"], - silverwind: ["1L1"], - skittersmack: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - spite: ["1L1"], - stringshot: ["1L1"], - strugglebug: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - toxic: ["1L1"], - xscissor: ["1L1"], - }, - }, - ninjask: { - learnset: { - absorb: ["1L1"], - acrobatics: ["1L1"], - aerialace: ["1L1"], - agility: ["1L1"], - aircutter: ["1L1"], - airslash: ["1L1"], - attract: ["1L1"], - batonpass: ["1L1"], - bugbite: ["1L1"], - bugbuzz: ["1L1"], - captivate: ["1L1"], - confide: ["1L1"], - cut: ["1L1"], - defog: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dualwingbeat: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - falseswipe: ["1L1"], - flash: ["1L1"], - frustration: ["1L1"], - furycutter: ["1L1"], - furyswipes: ["1L1"], - gigadrain: ["1L1"], - gigaimpact: ["1L1"], - harden: ["1L1"], - hiddenpower: ["1L1"], - honeclaws: ["1L1"], - hyperbeam: ["1L1"], - laserfocus: ["1L1"], - leechlife: ["1L1"], - metalclaw: ["1L1"], - mimic: ["1L1"], - mindreader: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - ominouswind: ["1L1"], - protect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roost: ["1L1"], - round: ["1L1"], - sandattack: ["1L1"], - sandstorm: ["1L1"], - scratch: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - shadowball: ["1L1"], - silverwind: ["1L1"], - skittersmack: ["1L1"], - slash: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - spite: ["1L1"], - stringshot: ["1L1"], - strugglebug: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - swordsdance: ["1L1"], - thief: ["1L1"], - toxic: ["1L1"], - uproar: ["1L1"], - uturn: ["1L1"], - xscissor: ["1L1"], - }, - }, - shedinja: { - learnset: { - absorb: ["1L1"], - aerialace: ["1L1"], - agility: ["1L1"], - allyswitch: ["1L1"], - batonpass: ["1L1"], - bugbite: ["1L1"], - bugbuzz: ["1L1"], - confide: ["1L1"], - confuseray: ["1L1"], - cut: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dreameater: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - falseswipe: ["1L1"], - flash: ["1L1"], - frustration: ["1L1"], - furycutter: ["1L1"], - furyswipes: ["1L1"], - gigadrain: ["1L1"], - gigaimpact: ["1L1"], - grudge: ["1L1"], - harden: ["1L1"], - healblock: ["1L1"], - hex: ["1L1"], - hiddenpower: ["1L1"], - honeclaws: ["1L1"], - hyperbeam: ["1L1"], - leechlife: ["1L1"], - metalclaw: ["1L1"], - mimic: ["1L1"], - mindreader: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - nightmare: ["1L1"], - phantomforce: ["1L1"], - poltergeist: ["1L1"], - protect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - round: ["1L1"], - sandattack: ["1L1"], - sandstorm: ["1L1"], - scratch: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - shadowball: ["1L1"], - shadowclaw: ["1L1"], - shadowsneak: ["1L1"], - skittersmack: ["1L1"], - slash: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - spite: ["1L1"], - stringshot: ["1L1"], - strugglebug: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swordsdance: ["1L1"], - telekinesis: ["1L1"], - thief: ["1L1"], - toxic: ["1L1"], - trick: ["1L1"], - willowisp: ["1L1"], - xscissor: ["1L1"], - }, - eventData: [ - {generation: 3, level: 50, moves: ["1L1"], pokeball: "pokeball"}, - ], - }, - whismur: { - learnset: { - astonish: ["1L1"], - attract: ["1L1"], - blizzard: ["1L1"], - bodyslam: ["1L1"], - captivate: ["1L1"], - circlethrow: ["1L1"], - confide: ["1L1"], - counter: ["1L1"], - defensecurl: ["1L1"], - disarmingvoice: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dynamicpunch: ["1L1"], - echoedvoice: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - extrasensory: ["1L1"], - facade: ["1L1"], - faketears: ["1L1"], - fireblast: ["1L1"], - firepunch: ["1L1"], - flamethrower: ["1L1"], - fling: ["1L1"], - frustration: ["1L1"], - hammerarm: ["1L1"], - headbutt: ["1L1"], - hiddenpower: ["1L1"], - howl: ["1L1"], - hypervoice: ["1L1"], - icebeam: ["1L1"], - icepunch: ["1L1"], - icywind: ["1L1"], - incinerate: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - mimic: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - pound: ["1L1"], - protect: ["1L1"], - psychup: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - roar: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - seismictoss: ["1L1"], - shadowball: ["1L1"], - shockwave: ["1L1"], - sleeptalk: ["1L1"], - smellingsalts: ["1L1"], - smokescreen: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - stomp: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - supersonic: ["1L1"], - swagger: ["1L1"], - synchronoise: ["1L1"], - takedown: ["1L1"], - teeterdance: ["1L1"], - thunderpunch: ["1L1"], - toxic: ["1L1"], - uproar: ["1L1"], - waterpulse: ["1L1"], - whirlwind: ["1L1"], - workup: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 3, level: 5, shiny: 1, moves: ["1L1"], pokeball: "pokeball", emeraldEventEgg: true}, - ], - }, - loudred: { - learnset: { - astonish: ["1L1"], - attract: ["1L1"], - bite: ["1L1"], - blizzard: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - bulldoze: ["1L1"], - captivate: ["1L1"], - confide: ["1L1"], - counter: ["1L1"], - defensecurl: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dynamicpunch: ["1L1"], - earthquake: ["1L1"], - echoedvoice: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - faketears: ["1L1"], - fireblast: ["1L1"], - firepunch: ["1L1"], - flamethrower: ["1L1"], - fling: ["1L1"], - frustration: ["1L1"], - headbutt: ["1L1"], - hiddenpower: ["1L1"], - howl: ["1L1"], - hypervoice: ["1L1"], - icebeam: ["1L1"], - icepunch: ["1L1"], - icywind: ["1L1"], - incinerate: ["1L1"], - lowkick: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - mimic: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - overheat: ["1L1"], - pound: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - psychup: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - roar: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - seismictoss: ["1L1"], - shadowball: ["1L1"], - shockwave: ["1L1"], - sleeptalk: ["1L1"], - smackdown: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - stomp: ["1L1"], - stompingtantrum: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - supersonic: ["1L1"], - swagger: ["1L1"], - synchronoise: ["1L1"], - taunt: ["1L1"], - thunderpunch: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - uproar: ["1L1"], - waterpulse: ["1L1"], - workup: ["1L1"], - zenheadbutt: ["1L1"], - }, - encounters: [ - {generation: 6, level: 16, maxEggMoves: 1}, - ], - }, - exploud: { - learnset: { - astonish: ["1L1"], - attract: ["1L1"], - avalanche: ["1L1"], - bite: ["1L1"], - blizzard: ["1L1"], - bodyslam: ["1L1"], - boomburst: ["1L1"], - brickbreak: ["1L1"], - bulldoze: ["1L1"], - captivate: ["1L1"], - confide: ["1L1"], - counter: ["1L1"], - crunch: ["1L1"], - defensecurl: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dynamicpunch: ["1L1"], - earthquake: ["1L1"], - echoedvoice: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - faketears: ["1L1"], - fireblast: ["1L1"], - firefang: ["1L1"], - firepunch: ["1L1"], - flamethrower: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - headbutt: ["1L1"], - hiddenpower: ["1L1"], - howl: ["1L1"], - hydropump: ["1L1"], - hyperbeam: ["1L1"], - hypervoice: ["1L1"], - icebeam: ["1L1"], - icefang: ["1L1"], - icepunch: ["1L1"], - icywind: ["1L1"], - incinerate: ["1L1"], - lowkick: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - mimic: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - outrage: ["1L1"], - overheat: ["1L1"], - pound: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - psychup: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - roar: ["1L1"], - rockclimb: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - seismictoss: ["1L1"], - shadowball: ["1L1"], - shockwave: ["1L1"], - sleeptalk: ["1L1"], - smackdown: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - stomp: ["1L1"], - stompingtantrum: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - supersonic: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - synchronoise: ["1L1"], - taunt: ["1L1"], - terrainpulse: ["1L1"], - thunderfang: ["1L1"], - thunderpunch: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - uproar: ["1L1"], - waterpulse: ["1L1"], - whirlpool: ["1L1"], - workup: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 3, level: 100, moves: ["1L1"], pokeball: "pokeball"}, - {generation: 3, level: 50, moves: ["1L1"], pokeball: "pokeball"}, - ], - }, - makuhita: { - learnset: { - armthrust: ["1L1"], - attract: ["1L1"], - bellydrum: ["1L1"], - bodypress: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - bulkup: ["1L1"], - bulldoze: ["1L1"], - bulletpunch: ["1L1"], - captivate: ["1L1"], - chillingwater: ["1L1"], - chipaway: ["1L1"], - closecombat: ["1L1"], - coaching: ["1L1"], - confide: ["1L1"], - counter: ["1L1"], - crosschop: ["1L1"], - detect: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - drainpunch: ["1L1"], - dynamicpunch: ["1L1"], - earthquake: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fakeout: ["1L1"], - feint: ["1L1"], - feintattack: ["1L1"], - firepunch: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - focusenergy: ["1L1"], - focuspunch: ["1L1"], - forcepalm: ["1L1"], - foresight: ["1L1"], - frustration: ["1L1"], - headbutt: ["1L1"], - heavyslam: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - icepunch: ["1L1"], - knockoff: ["1L1"], - lowkick: ["1L1"], - lowsweep: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - metronome: ["1L1"], - mimic: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - poisonjab: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - refresh: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - revenge: ["1L1"], - reversal: ["1L1"], - rockclimb: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - roleplay: ["1L1"], - round: ["1L1"], - sandattack: ["1L1"], - secretpower: ["1L1"], - seismictoss: ["1L1"], - sleeptalk: ["1L1"], - smackdown: ["1L1"], - smellingsalts: ["1L1"], - snore: ["1L1"], - stompingtantrum: ["1L1"], - stoneedge: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - superpower: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thunderpunch: ["1L1"], - toxic: ["1L1"], - upperhand: ["1L1"], - vacuumwave: ["1L1"], - vitalthrow: ["1L1"], - wakeupslap: ["1L1"], - whirlpool: ["1L1"], - whirlwind: ["1L1"], - wideguard: ["1L1"], - workup: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 3, level: 18, moves: ["1L1"]}, - ], - }, - hariyama: { - learnset: { - armthrust: ["1L1"], - attract: ["1L1"], - bellydrum: ["1L1"], - bodypress: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - brine: ["1L1"], - bulkup: ["1L1"], - bulldoze: ["1L1"], - captivate: ["1L1"], - chillingwater: ["1L1"], - closecombat: ["1L1"], - coaching: ["1L1"], - confide: ["1L1"], - counter: ["1L1"], - curse: ["1L1"], - detect: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - drainpunch: ["1L1"], - dynamicpunch: ["1L1"], - earthquake: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fakeout: ["1L1"], - firepunch: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - focusenergy: ["1L1"], - focuspunch: ["1L1"], - forcepalm: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - headbutt: ["1L1"], - headlongrush: ["1L1"], - heavyslam: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - icepunch: ["1L1"], - ironhead: ["1L1"], - knockoff: ["1L1"], - lashout: ["1L1"], - lowkick: ["1L1"], - lowsweep: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - metronome: ["1L1"], - mimic: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - payback: ["1L1"], - poisonjab: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - reversal: ["1L1"], - rockclimb: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - roleplay: ["1L1"], - round: ["1L1"], - sandattack: ["1L1"], - scaryface: ["1L1"], - secretpower: ["1L1"], - seismictoss: ["1L1"], - sleeptalk: ["1L1"], - smackdown: ["1L1"], - smellingsalts: ["1L1"], - snore: ["1L1"], - stompingtantrum: ["1L1"], - stoneedge: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - superpower: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - throatchop: ["1L1"], - thunderpunch: ["1L1"], - toxic: ["1L1"], - upperhand: ["1L1"], - vacuumwave: ["1L1"], - vitalthrow: ["1L1"], - wakeupslap: ["1L1"], - whirlpool: ["1L1"], - whirlwind: ["1L1"], - workup: ["1L1"], - zenheadbutt: ["1L1"], - }, - encounters: [ - {generation: 6, level: 22}, - ], - }, - nosepass: { - learnset: { - ancientpower: ["1L1"], - attract: ["1L1"], - block: ["1L1"], - bodypress: ["1L1"], - bodyslam: ["1L1"], - bulldoze: ["1L1"], - captivate: ["1L1"], - confide: ["1L1"], - curse: ["1L1"], - dazzlinggleam: ["1L1"], - defensecurl: ["1L1"], - discharge: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dynamicpunch: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - endure: ["1L1"], - explosion: ["1L1"], - facade: ["1L1"], - firepunch: ["1L1"], - flashcannon: ["1L1"], - frustration: ["1L1"], - gravity: ["1L1"], - harden: ["1L1"], - headbutt: ["1L1"], - headsmash: ["1L1"], - heavyslam: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - highhorsepower: ["1L1"], - icepunch: ["1L1"], - irondefense: ["1L1"], - lockon: ["1L1"], - magiccoat: ["1L1"], - magnetrise: ["1L1"], - magnitude: ["1L1"], - meteorbeam: ["1L1"], - mimic: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - painsplit: ["1L1"], - powergem: ["1L1"], - protect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rockblast: ["1L1"], - rockpolish: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rockthrow: ["1L1"], - rocktomb: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - sandstorm: ["1L1"], - sandtomb: ["1L1"], - secretpower: ["1L1"], - selfdestruct: ["1L1"], - shockwave: ["1L1"], - sleeptalk: ["1L1"], - smackdown: ["1L1"], - snore: ["1L1"], - spark: ["1L1"], - stealthrock: ["1L1"], - steelbeam: ["1L1"], - stompingtantrum: ["1L1"], - stoneedge: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderpunch: ["1L1"], - thunderwave: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - voltswitch: ["1L1"], - wideguard: ["1L1"], - zapcannon: ["1L1"], - }, - eventData: [ - {generation: 3, level: 26, moves: ["1L1"]}, - ], - }, - probopass: { - learnset: { - allyswitch: ["1L1"], - ancientpower: ["1L1"], - attract: ["1L1"], - block: ["1L1"], - bodypress: ["1L1"], - bodyslam: ["1L1"], - bulldoze: ["1L1"], - captivate: ["1L1"], - confide: ["1L1"], - curse: ["1L1"], - dazzlinggleam: ["1L1"], - discharge: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - endure: ["1L1"], - explosion: ["1L1"], - facade: ["1L1"], - firepunch: ["1L1"], - flashcannon: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - gravity: ["1L1"], - hardpress: ["1L1"], - headbutt: ["1L1"], - heavyslam: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - highhorsepower: ["1L1"], - hyperbeam: ["1L1"], - icepunch: ["1L1"], - irondefense: ["1L1"], - ironhead: ["1L1"], - lockon: ["1L1"], - magiccoat: ["1L1"], - magnetbomb: ["1L1"], - magneticflux: ["1L1"], - magnetrise: ["1L1"], - metalsound: ["1L1"], - meteorbeam: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - painsplit: ["1L1"], - powergem: ["1L1"], - protect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rockblast: ["1L1"], - rockpolish: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - sandstorm: ["1L1"], - sandtomb: ["1L1"], - secretpower: ["1L1"], - shockwave: ["1L1"], - sleeptalk: ["1L1"], - smackdown: ["1L1"], - snore: ["1L1"], - spark: ["1L1"], - stealthrock: ["1L1"], - steelbeam: ["1L1"], - stompingtantrum: ["1L1"], - stoneedge: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - supercellslam: ["1L1"], - swagger: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - telekinesis: ["1L1"], - terablast: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderpunch: ["1L1"], - thunderwave: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - triattack: ["1L1"], - voltswitch: ["1L1"], - wideguard: ["1L1"], - zapcannon: ["1L1"], - }, - }, - skitty: { - learnset: { - assist: ["1L1"], - attract: ["1L1"], - batonpass: ["1L1"], - blizzard: ["1L1"], - bodyslam: ["1L1"], - calmmind: ["1L1"], - captivate: ["1L1"], - chargebeam: ["1L1"], - charm: ["1L1"], - confide: ["1L1"], - copycat: ["1L1"], - cosmicpower: ["1L1"], - covet: ["1L1"], - defensecurl: ["1L1"], - dig: ["1L1"], - disarmingvoice: ["1L1"], - doubleedge: ["1L1"], - doubleslap: ["1L1"], - doubleteam: ["1L1"], - dreameater: ["1L1"], - echoedvoice: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fakeout: ["1L1"], - faketears: ["1L1"], - feintattack: ["1L1"], - flash: ["1L1"], - foresight: ["1L1"], - frustration: ["1L1"], - grassknot: ["1L1"], - growl: ["1L1"], - headbutt: ["1L1"], - healbell: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hypervoice: ["1L1"], - icebeam: ["1L1"], - icywind: ["1L1"], - irontail: ["1L1"], - lastresort: ["1L1"], - mimic: ["1L1"], - mudbomb: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - payback: ["1L1"], - payday: ["1L1"], - playrough: ["1L1"], - protect: ["1L1"], - psychup: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - secretpower: ["1L1"], - shadowball: ["1L1"], - shockwave: ["1L1"], - simplebeam: ["1L1"], - sing: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - tackle: ["1L1"], - tailwhip: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderwave: ["1L1"], - tickle: ["1L1"], - toxic: ["1L1"], - uproar: ["1L1"], - wakeupslap: ["1L1"], - waterpulse: ["1L1"], - wildcharge: ["1L1"], - wish: ["1L1"], - workup: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 3, level: 5, shiny: 1, abilities: ["1L1"], moves: ["1L1"], pokeball: "pokeball", emeraldEventEgg: true}, - {generation: 3, level: 5, shiny: 1, abilities: ["1L1"], moves: ["1L1"], pokeball: "pokeball", emeraldEventEgg: true}, - {generation: 3, level: 10, gender: "M", abilities: ["1L1"], moves: ["1L1"], pokeball: "pokeball"}, - ], - encounters: [ - {generation: 3, level: 3, gender: "F", ivs: {hp: 5, atk: 4, def: 4, spa: 5, spd: 4, spe: 4}, abilities: ["1L1"], pokeball: "pokeball"}, - ], - }, - delcatty: { - learnset: { - attract: ["1L1"], - blizzard: ["1L1"], - bodyslam: ["1L1"], - calmmind: ["1L1"], - captivate: ["1L1"], - chargebeam: ["1L1"], - confide: ["1L1"], - covet: ["1L1"], - defensecurl: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doubleslap: ["1L1"], - doubleteam: ["1L1"], - dreameater: ["1L1"], - echoedvoice: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fakeout: ["1L1"], - flash: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - growl: ["1L1"], - headbutt: ["1L1"], - healbell: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - hypervoice: ["1L1"], - icebeam: ["1L1"], - icywind: ["1L1"], - irontail: ["1L1"], - laserfocus: ["1L1"], - lastresort: ["1L1"], - mimic: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - payback: ["1L1"], - protect: ["1L1"], - psychup: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - rocksmash: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - secretpower: ["1L1"], - shadowball: ["1L1"], - shockwave: ["1L1"], - sing: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - stompingtantrum: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - sweetkiss: ["1L1"], - swift: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - uproar: ["1L1"], - waterpulse: ["1L1"], - wildcharge: ["1L1"], - workup: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 3, level: 18, abilities: ["1L1"], moves: ["1L1"]}, - ], - }, - sableye: { - learnset: { - aerialace: ["1L1"], - allyswitch: ["1L1"], - astonish: ["1L1"], - attract: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - bulkup: ["1L1"], - calmmind: ["1L1"], - captivate: ["1L1"], - confide: ["1L1"], - confuseray: ["1L1"], - counter: ["1L1"], - cut: ["1L1"], - darkpulse: ["1L1"], - dazzlinggleam: ["1L1"], - detect: ["1L1"], - dig: ["1L1"], - disable: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - drainpunch: ["1L1"], - dreameater: ["1L1"], - dynamicpunch: ["1L1"], - embargo: ["1L1"], - encore: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - fakeout: ["1L1"], - feint: ["1L1"], - feintattack: ["1L1"], - firepunch: ["1L1"], - flash: ["1L1"], - flatter: ["1L1"], - fling: ["1L1"], - focuspunch: ["1L1"], - foresight: ["1L1"], - foulplay: ["1L1"], - frustration: ["1L1"], - furycutter: ["1L1"], - furyswipes: ["1L1"], - gigadrain: ["1L1"], - gigaimpact: ["1L1"], - gravity: ["1L1"], - gyroball: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hex: ["1L1"], - hiddenpower: ["1L1"], - honeclaws: ["1L1"], - hyperbeam: ["1L1"], - icepunch: ["1L1"], - icywind: ["1L1"], - imprison: ["1L1"], - incinerate: ["1L1"], - knockoff: ["1L1"], - lashout: ["1L1"], - leer: ["1L1"], - lightscreen: ["1L1"], - lowkick: ["1L1"], - lowsweep: ["1L1"], - magiccoat: ["1L1"], - meanlook: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - metalburst: ["1L1"], - metalclaw: ["1L1"], - metronome: ["1L1"], - mimic: ["1L1"], - moonlight: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - nastyplot: ["1L1"], - naturalgift: ["1L1"], - nightmare: ["1L1"], - nightshade: ["1L1"], - octazooka: ["1L1"], - ominouswind: ["1L1"], - painsplit: ["1L1"], - payback: ["1L1"], - phantomforce: ["1L1"], - poisonjab: ["1L1"], - poltergeist: ["1L1"], - powergem: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - psybeam: ["1L1"], - psychic: ["1L1"], - psychup: ["1L1"], - punishment: ["1L1"], - quash: ["1L1"], - raindance: ["1L1"], - recover: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - roleplay: ["1L1"], - round: ["1L1"], - scratch: ["1L1"], - secretpower: ["1L1"], - seismictoss: ["1L1"], - shadowball: ["1L1"], - shadowclaw: ["1L1"], - shadowsneak: ["1L1"], - shockwave: ["1L1"], - signalbeam: ["1L1"], - skillswap: ["1L1"], - skittersmack: ["1L1"], - sleeptalk: ["1L1"], - snarl: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - spite: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - telekinesis: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - throatchop: ["1L1"], - thunderpunch: ["1L1"], - thunderwave: ["1L1"], - tickle: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - trick: ["1L1"], - waterpulse: ["1L1"], - willowisp: ["1L1"], - wonderroom: ["1L1"], - xscissor: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 3, level: 10, gender: "M", abilities: ["1L1"], moves: ["1L1"], pokeball: "pokeball"}, - {generation: 3, level: 33, abilities: ["1L1"], moves: ["1L1"]}, - {generation: 5, level: 50, gender: "M", isHidden: true, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 6, level: 50, nature: "Relaxed", ivs: {hp: 31, spa: 31}, isHidden: true, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 6, level: 100, nature: "Bold", isHidden: true, moves: ["1L1"], pokeball: "cherishball"}, - ], - }, - mawile: { - learnset: { - ancientpower: ["1L1"], - assurance: ["1L1"], - astonish: ["1L1"], - attract: ["1L1"], - batonpass: ["1L1"], - bite: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - brutalswing: ["1L1"], - captivate: ["1L1"], - chargebeam: ["1L1"], - confide: ["1L1"], - counter: ["1L1"], - crunch: ["1L1"], - darkpulse: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - drainingkiss: ["1L1"], - dynamicpunch: ["1L1"], - embargo: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fairywind: ["1L1"], - faketears: ["1L1"], - falseswipe: ["1L1"], - feintattack: ["1L1"], - fireblast: ["1L1"], - firefang: ["1L1"], - flamethrower: ["1L1"], - flashcannon: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - focuspunch: ["1L1"], - foulplay: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - growl: ["1L1"], - guardswap: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - icebeam: ["1L1"], - icefang: ["1L1"], - icepunch: ["1L1"], - icywind: ["1L1"], - incinerate: ["1L1"], - irondefense: ["1L1"], - ironhead: ["1L1"], - knockoff: ["1L1"], - laserfocus: ["1L1"], - lastresort: ["1L1"], - magnetrise: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - metalburst: ["1L1"], - mimic: ["1L1"], - mistyterrain: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - painsplit: ["1L1"], - payback: ["1L1"], - playrough: ["1L1"], - poisonfang: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - psychicfangs: ["1L1"], - psychup: ["1L1"], - punishment: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - sandstorm: ["1L1"], - secretpower: ["1L1"], - seismictoss: ["1L1"], - shadowball: ["1L1"], - sing: ["1L1"], - slam: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - spitup: ["1L1"], - stealthrock: ["1L1"], - steelbeam: ["1L1"], - stockpile: ["1L1"], - stoneedge: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - sunnyday: ["1L1"], - superfang: ["1L1"], - swagger: ["1L1"], - swallow: ["1L1"], - sweetscent: ["1L1"], - swordsdance: ["1L1"], - taunt: ["1L1"], - thunderfang: ["1L1"], - thunderpunch: ["1L1"], - tickle: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - visegrip: ["1L1"], - }, - eventData: [ - {generation: 3, level: 10, gender: "M", moves: ["1L1"], pokeball: "pokeball"}, - {generation: 3, level: 22, moves: ["1L1"]}, - {generation: 6, level: 50, abilities: ["1L1"], moves: ["1L1"], pokeball: "cherishball"}, - {generation: 6, level: 100, abilities: ["1L1"], moves: ["1L1"], pokeball: "cherishball"}, - ], - }, - aron: { - learnset: { - aerialace: ["1L1"], - ancientpower: ["1L1"], - attract: ["1L1"], - autotomize: ["1L1"], - bodypress: ["1L1"], - bodyslam: ["1L1"], - bulldoze: ["1L1"], - captivate: ["1L1"], - confide: ["1L1"], - curse: ["1L1"], - cut: ["1L1"], - defensecurl: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dragonrush: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - frustration: ["1L1"], - furycutter: ["1L1"], - harden: ["1L1"], - headbutt: ["1L1"], - headsmash: ["1L1"], - heavyslam: ["1L1"], - hiddenpower: ["1L1"], - honeclaws: ["1L1"], - irondefense: ["1L1"], - ironhead: ["1L1"], - irontail: ["1L1"], - magnetrise: ["1L1"], - metalburst: ["1L1"], - metalclaw: ["1L1"], - metalsound: ["1L1"], - mimic: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - reversal: ["1L1"], - roar: ["1L1"], - rockpolish: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - sandstorm: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - shadowclaw: ["1L1"], - shockwave: ["1L1"], - sleeptalk: ["1L1"], - smellingsalts: ["1L1"], - snore: ["1L1"], - spite: ["1L1"], - stealthrock: ["1L1"], - steelbeam: ["1L1"], - steelroller: ["1L1"], - stomp: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - superpower: ["1L1"], - swagger: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - toxic: ["1L1"], - uproar: ["1L1"], - waterpulse: ["1L1"], - }, - }, - lairon: { - learnset: { - aerialace: ["1L1"], - ancientpower: ["1L1"], - attract: ["1L1"], - autotomize: ["1L1"], - bodypress: ["1L1"], - bodyslam: ["1L1"], - bulldoze: ["1L1"], - captivate: ["1L1"], - confide: ["1L1"], - cut: ["1L1"], - defensecurl: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - frustration: ["1L1"], - furycutter: ["1L1"], - harden: ["1L1"], - headbutt: ["1L1"], - heavyslam: ["1L1"], - hiddenpower: ["1L1"], - honeclaws: ["1L1"], - irondefense: ["1L1"], - ironhead: ["1L1"], - irontail: ["1L1"], - magnetrise: ["1L1"], - metalburst: ["1L1"], - metalclaw: ["1L1"], - metalsound: ["1L1"], - mimic: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - reversal: ["1L1"], - roar: ["1L1"], - rockblast: ["1L1"], - rockpolish: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - sandstorm: ["1L1"], - sandtomb: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - shadowclaw: ["1L1"], - shockwave: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - spite: ["1L1"], - stealthrock: ["1L1"], - steelbeam: ["1L1"], - steelroller: ["1L1"], - stompingtantrum: ["1L1"], - stoneedge: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - superpower: ["1L1"], - swagger: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - toxic: ["1L1"], - uproar: ["1L1"], - waterpulse: ["1L1"], - }, - }, - aggron: { - learnset: { - aerialace: ["1L1"], - ancientpower: ["1L1"], - aquatail: ["1L1"], - attract: ["1L1"], - autotomize: ["1L1"], - avalanche: ["1L1"], - blizzard: ["1L1"], - block: ["1L1"], - bodypress: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - brutalswing: ["1L1"], - bulldoze: ["1L1"], - captivate: ["1L1"], - confide: ["1L1"], - counter: ["1L1"], - crunch: ["1L1"], - cut: ["1L1"], - darkpulse: ["1L1"], - defensecurl: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dragonclaw: ["1L1"], - dragonpulse: ["1L1"], - dragontail: ["1L1"], - dynamicpunch: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fireblast: ["1L1"], - firepunch: ["1L1"], - flamethrower: ["1L1"], - flashcannon: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - focuspunch: ["1L1"], - frustration: ["1L1"], - furycutter: ["1L1"], - gigaimpact: ["1L1"], - harden: ["1L1"], - headbutt: ["1L1"], - headsmash: ["1L1"], - heavyslam: ["1L1"], - hiddenpower: ["1L1"], - highhorsepower: ["1L1"], - honeclaws: ["1L1"], - hydropump: ["1L1"], - hyperbeam: ["1L1"], - icebeam: ["1L1"], - icepunch: ["1L1"], - icywind: ["1L1"], - incinerate: ["1L1"], - irondefense: ["1L1"], - ironhead: ["1L1"], - irontail: ["1L1"], - lowkick: ["1L1"], - magnetrise: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - metalburst: ["1L1"], - metalclaw: ["1L1"], - metalsound: ["1L1"], - meteorbeam: ["1L1"], - mimic: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - outrage: ["1L1"], - payback: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - reversal: ["1L1"], - roar: ["1L1"], - rockblast: ["1L1"], - rockclimb: ["1L1"], - rockpolish: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - sandstorm: ["1L1"], - sandtomb: ["1L1"], - scaryface: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - seismictoss: ["1L1"], - shadowclaw: ["1L1"], - shockwave: ["1L1"], - sleeptalk: ["1L1"], - smackdown: ["1L1"], - smartstrike: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - spite: ["1L1"], - stealthrock: ["1L1"], - steelbeam: ["1L1"], - steelroller: ["1L1"], - stompingtantrum: ["1L1"], - stoneedge: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - superpower: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderpunch: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - uproar: ["1L1"], - waterpulse: ["1L1"], - whirlpool: ["1L1"], - }, - eventData: [ - {generation: 3, level: 100, moves: ["1L1"], pokeball: "pokeball"}, - {generation: 3, level: 50, moves: ["1L1"], pokeball: "pokeball"}, - {generation: 6, level: 50, nature: "Brave", abilities: ["1L1"], moves: ["1L1"], pokeball: "cherishball"}, - ], - }, - meditite: { - learnset: { - acupressure: ["1L1"], - aerialace: ["1L1"], - attract: ["1L1"], - batonpass: ["1L1"], - bide: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - bulkup: ["1L1"], - bulletpunch: ["1L1"], - calmmind: ["1L1"], - captivate: ["1L1"], - closecombat: ["1L1"], - confide: ["1L1"], - confusion: ["1L1"], - counter: ["1L1"], - detect: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - drainpunch: ["1L1"], - dreameater: ["1L1"], - dynamicpunch: ["1L1"], - endure: ["1L1"], - expandingforce: ["1L1"], - facade: ["1L1"], - fakeout: ["1L1"], - feint: ["1L1"], - firepunch: ["1L1"], - flash: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - focuspunch: ["1L1"], - forcepalm: ["1L1"], - foresight: ["1L1"], - frustration: ["1L1"], - grassknot: ["1L1"], - gravity: ["1L1"], - guardswap: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - highjumpkick: ["1L1"], - icepunch: ["1L1"], - imprison: ["1L1"], - lightscreen: ["1L1"], - lowkick: ["1L1"], - lowsweep: ["1L1"], - magiccoat: ["1L1"], - meditate: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - metronome: ["1L1"], - mimic: ["1L1"], - mindreader: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - nightshade: ["1L1"], - painsplit: ["1L1"], - poisonjab: ["1L1"], - powerswap: ["1L1"], - powertrick: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - psybeam: ["1L1"], - psychic: ["1L1"], - psychicterrain: ["1L1"], - psychocut: ["1L1"], - psychup: ["1L1"], - psyshock: ["1L1"], - quickguard: ["1L1"], - raindance: ["1L1"], - recover: ["1L1"], - recycle: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - reversal: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - roleplay: ["1L1"], - round: ["1L1"], - secretpower: ["1L1"], - seismictoss: ["1L1"], - shadowball: ["1L1"], - signalbeam: ["1L1"], - skillswap: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - storedpower: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - telekinesis: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thunderpunch: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - trick: ["1L1"], - trickroom: ["1L1"], - upperhand: ["1L1"], - vacuumwave: ["1L1"], - workup: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 3, level: 10, gender: "M", moves: ["1L1"], pokeball: "pokeball"}, - {generation: 3, level: 20, moves: ["1L1"], pokeball: "pokeball"}, - ], - }, - medicham: { - learnset: { - acupressure: ["1L1"], - aerialace: ["1L1"], - attract: ["1L1"], - aurasphere: ["1L1"], - axekick: ["1L1"], - batonpass: ["1L1"], - bide: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - bulkup: ["1L1"], - calmmind: ["1L1"], - captivate: ["1L1"], - closecombat: ["1L1"], - confide: ["1L1"], - confusion: ["1L1"], - counter: ["1L1"], - detect: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - drainpunch: ["1L1"], - dreameater: ["1L1"], - dynamicpunch: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - expandingforce: ["1L1"], - facade: ["1L1"], - feint: ["1L1"], - firepunch: ["1L1"], - flash: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - focuspunch: ["1L1"], - forcepalm: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - gravity: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - highjumpkick: ["1L1"], - hyperbeam: ["1L1"], - icepunch: ["1L1"], - imprison: ["1L1"], - laserfocus: ["1L1"], - lightscreen: ["1L1"], - lowkick: ["1L1"], - lowsweep: ["1L1"], - magiccoat: ["1L1"], - meditate: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - metronome: ["1L1"], - mimic: ["1L1"], - mindreader: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - nightshade: ["1L1"], - painsplit: ["1L1"], - poisonjab: ["1L1"], - powertrick: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - psybeam: ["1L1"], - psychic: ["1L1"], - psychicterrain: ["1L1"], - psychup: ["1L1"], - psyshock: ["1L1"], - raindance: ["1L1"], - recover: ["1L1"], - recycle: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - reversal: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - roleplay: ["1L1"], - round: ["1L1"], - secretpower: ["1L1"], - seismictoss: ["1L1"], - shadowball: ["1L1"], - signalbeam: ["1L1"], - skillswap: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - storedpower: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - telekinesis: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thunderpunch: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - trick: ["1L1"], - trickroom: ["1L1"], - upperhand: ["1L1"], - vacuumwave: ["1L1"], - workup: ["1L1"], - zenheadbutt: ["1L1"], - }, - encounters: [ - {generation: 4, level: 35}, - {generation: 6, level: 34, maxEggMoves: 1}, - ], - }, - electrike: { - learnset: { - agility: ["1L1"], - attract: ["1L1"], - bite: ["1L1"], - bodyslam: ["1L1"], - captivate: ["1L1"], - charge: ["1L1"], - chargebeam: ["1L1"], - confide: ["1L1"], - crunch: ["1L1"], - curse: ["1L1"], - discharge: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - eerieimpulse: ["1L1"], - electroball: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - firefang: ["1L1"], - flameburst: ["1L1"], - flamethrower: ["1L1"], - flash: ["1L1"], - frustration: ["1L1"], - headbutt: ["1L1"], - hiddenpower: ["1L1"], - howl: ["1L1"], - icefang: ["1L1"], - irontail: ["1L1"], - leer: ["1L1"], - lightscreen: ["1L1"], - magnetrise: ["1L1"], - mimic: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - odorsleuth: ["1L1"], - protect: ["1L1"], - psychicfangs: ["1L1"], - quickattack: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - risingvoltage: ["1L1"], - roar: ["1L1"], - round: ["1L1"], - secretpower: ["1L1"], - shockwave: ["1L1"], - signalbeam: ["1L1"], - sleeptalk: ["1L1"], - snarl: ["1L1"], - snore: ["1L1"], - spark: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - switcheroo: ["1L1"], - tackle: ["1L1"], - thief: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderfang: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - uproar: ["1L1"], - voltswitch: ["1L1"], - wildcharge: ["1L1"], - }, - }, - manectric: { - learnset: { - agility: ["1L1"], - attract: ["1L1"], - bite: ["1L1"], - bodyslam: ["1L1"], - captivate: ["1L1"], - charge: ["1L1"], - chargebeam: ["1L1"], - confide: ["1L1"], - crunch: ["1L1"], - discharge: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - eerieimpulse: ["1L1"], - electricterrain: ["1L1"], - electroball: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - firefang: ["1L1"], - flamethrower: ["1L1"], - flash: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - headbutt: ["1L1"], - hiddenpower: ["1L1"], - howl: ["1L1"], - hyperbeam: ["1L1"], - hypervoice: ["1L1"], - icefang: ["1L1"], - irontail: ["1L1"], - laserfocus: ["1L1"], - leer: ["1L1"], - lightscreen: ["1L1"], - magnetrise: ["1L1"], - mimic: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - odorsleuth: ["1L1"], - overheat: ["1L1"], - protect: ["1L1"], - psychicfangs: ["1L1"], - quickattack: ["1L1"], - raindance: ["1L1"], - refresh: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - risingvoltage: ["1L1"], - roar: ["1L1"], - round: ["1L1"], - scaryface: ["1L1"], - secretpower: ["1L1"], - shockwave: ["1L1"], - signalbeam: ["1L1"], - sleeptalk: ["1L1"], - snarl: ["1L1"], - snore: ["1L1"], - spark: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - tackle: ["1L1"], - thief: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderfang: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - uproar: ["1L1"], - voltswitch: ["1L1"], - wildcharge: ["1L1"], - }, - eventData: [ - {generation: 3, level: 44, moves: ["1L1"]}, - {generation: 6, level: 50, nature: "Timid", abilities: ["1L1"], moves: ["1L1"], pokeball: "cherishball"}, - ], - }, - plusle: { - learnset: { - agility: ["1L1"], - alluringvoice: ["1L1"], - attract: ["1L1"], - batonpass: ["1L1"], - bestow: ["1L1"], - bodyslam: ["1L1"], - captivate: ["1L1"], - charge: ["1L1"], - chargebeam: ["1L1"], - charm: ["1L1"], - confide: ["1L1"], - copycat: ["1L1"], - counter: ["1L1"], - covet: ["1L1"], - defensecurl: ["1L1"], - discharge: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dynamicpunch: ["1L1"], - echoedvoice: ["1L1"], - eerieimpulse: ["1L1"], - electricterrain: ["1L1"], - electroball: ["1L1"], - electroweb: ["1L1"], - encore: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - entrainment: ["1L1"], - facade: ["1L1"], - faketears: ["1L1"], - flash: ["1L1"], - fling: ["1L1"], - frustration: ["1L1"], - grassknot: ["1L1"], - growl: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - irontail: ["1L1"], - lastresort: ["1L1"], - lightscreen: ["1L1"], - luckychant: ["1L1"], - magnetrise: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - metronome: ["1L1"], - mimic: ["1L1"], - mudslap: ["1L1"], - nastyplot: ["1L1"], - naturalgift: ["1L1"], - nuzzle: ["1L1"], - playnice: ["1L1"], - playrough: ["1L1"], - protect: ["1L1"], - quickattack: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - secretpower: ["1L1"], - seismictoss: ["1L1"], - shockwave: ["1L1"], - signalbeam: ["1L1"], - sing: ["1L1"], - skillswap: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - spark: ["1L1"], - substitute: ["1L1"], - superfang: ["1L1"], - swagger: ["1L1"], - sweetkiss: ["1L1"], - swift: ["1L1"], - switcheroo: ["1L1"], - tearfullook: ["1L1"], - terablast: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderpunch: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - uproar: ["1L1"], - voltswitch: ["1L1"], - watersport: ["1L1"], - wildcharge: ["1L1"], - wish: ["1L1"], - }, - eventData: [ - {generation: 3, level: 5, shiny: 1, moves: ["1L1"], pokeball: "pokeball", emeraldEventEgg: true}, - {generation: 3, level: 10, gender: "M", moves: ["1L1"], pokeball: "pokeball"}, - ], - }, - minun: { - learnset: { - agility: ["1L1"], - alluringvoice: ["1L1"], - attract: ["1L1"], - batonpass: ["1L1"], - bodyslam: ["1L1"], - captivate: ["1L1"], - charge: ["1L1"], - chargebeam: ["1L1"], - charm: ["1L1"], - confide: ["1L1"], - copycat: ["1L1"], - counter: ["1L1"], - covet: ["1L1"], - defensecurl: ["1L1"], - discharge: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dynamicpunch: ["1L1"], - echoedvoice: ["1L1"], - electricterrain: ["1L1"], - electroball: ["1L1"], - electroweb: ["1L1"], - encore: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - entrainment: ["1L1"], - facade: ["1L1"], - faketears: ["1L1"], - flash: ["1L1"], - fling: ["1L1"], - frustration: ["1L1"], - grassknot: ["1L1"], - growl: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - irontail: ["1L1"], - lastresort: ["1L1"], - lightscreen: ["1L1"], - luckychant: ["1L1"], - magnetrise: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - metronome: ["1L1"], - mimic: ["1L1"], - mudslap: ["1L1"], - mudsport: ["1L1"], - nastyplot: ["1L1"], - naturalgift: ["1L1"], - nuzzle: ["1L1"], - playnice: ["1L1"], - playrough: ["1L1"], - protect: ["1L1"], - quickattack: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - secretpower: ["1L1"], - seismictoss: ["1L1"], - shockwave: ["1L1"], - signalbeam: ["1L1"], - sing: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - spark: ["1L1"], - substitute: ["1L1"], - superfang: ["1L1"], - swagger: ["1L1"], - sweetkiss: ["1L1"], - swift: ["1L1"], - switcheroo: ["1L1"], - tearfullook: ["1L1"], - terablast: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderpunch: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - trumpcard: ["1L1"], - uproar: ["1L1"], - voltswitch: ["1L1"], - wildcharge: ["1L1"], - wish: ["1L1"], - }, - eventData: [ - {generation: 3, level: 5, shiny: 1, moves: ["1L1"], pokeball: "pokeball", emeraldEventEgg: true}, - {generation: 3, level: 10, gender: "M", moves: ["1L1"], pokeball: "pokeball"}, - ], - }, - volbeat: { - learnset: { - acrobatics: ["1L1"], - aerialace: ["1L1"], - aircutter: ["1L1"], - airslash: ["1L1"], - attract: ["1L1"], - batonpass: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - bugbite: ["1L1"], - bugbuzz: ["1L1"], - captivate: ["1L1"], - chargebeam: ["1L1"], - chillingwater: ["1L1"], - confide: ["1L1"], - confuseray: ["1L1"], - counter: ["1L1"], - dazzlinggleam: ["1L1"], - defog: ["1L1"], - dizzypunch: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dynamicpunch: ["1L1"], - encore: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - flash: ["1L1"], - fling: ["1L1"], - focuspunch: ["1L1"], - frustration: ["1L1"], - gigadrain: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - icepunch: ["1L1"], - infestation: ["1L1"], - lightscreen: ["1L1"], - lunge: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - metronome: ["1L1"], - mimic: ["1L1"], - moonlight: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - ominouswind: ["1L1"], - playrough: ["1L1"], - pounce: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - psychup: ["1L1"], - quickattack: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roost: ["1L1"], - round: ["1L1"], - secretpower: ["1L1"], - seismictoss: ["1L1"], - shadowball: ["1L1"], - shockwave: ["1L1"], - signalbeam: ["1L1"], - silverwind: ["1L1"], - skittersmack: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - stringshot: ["1L1"], - strugglebug: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - tackle: ["1L1"], - tailglow: ["1L1"], - tailwind: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderpunch: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - trick: ["1L1"], - uturn: ["1L1"], - waterpulse: ["1L1"], - zenheadbutt: ["1L1"], - }, - }, - illumise: { - learnset: { - acrobatics: ["1L1"], - aerialace: ["1L1"], - aircutter: ["1L1"], - airslash: ["1L1"], - aromatherapy: ["1L1"], - attract: ["1L1"], - batonpass: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - bugbite: ["1L1"], - bugbuzz: ["1L1"], - captivate: ["1L1"], - chargebeam: ["1L1"], - charm: ["1L1"], - confide: ["1L1"], - confuseray: ["1L1"], - counter: ["1L1"], - covet: ["1L1"], - dazzlinggleam: ["1L1"], - defog: ["1L1"], - disarmingvoice: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - drainingkiss: ["1L1"], - dynamicpunch: ["1L1"], - encore: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - faketears: ["1L1"], - flash: ["1L1"], - flatter: ["1L1"], - fling: ["1L1"], - focuspunch: ["1L1"], - frustration: ["1L1"], - gigadrain: ["1L1"], - growth: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - icepunch: ["1L1"], - infestation: ["1L1"], - lightscreen: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - metronome: ["1L1"], - mimic: ["1L1"], - moonlight: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - ominouswind: ["1L1"], - playnice: ["1L1"], - playrough: ["1L1"], - pounce: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - psychup: ["1L1"], - quickattack: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roost: ["1L1"], - round: ["1L1"], - secretpower: ["1L1"], - seismictoss: ["1L1"], - shadowball: ["1L1"], - shockwave: ["1L1"], - silverwind: ["1L1"], - skittersmack: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - stringshot: ["1L1"], - strugglebug: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - sweetscent: ["1L1"], - swift: ["1L1"], - tackle: ["1L1"], - tailwind: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderpunch: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - trick: ["1L1"], - uturn: ["1L1"], - waterpulse: ["1L1"], - wish: ["1L1"], - zenheadbutt: ["1L1"], - }, - }, - budew: { - learnset: { - absorb: ["1L1"], - attract: ["1L1"], - bulletseed: ["1L1"], - captivate: ["1L1"], - confide: ["1L1"], - cottonspore: ["1L1"], - covet: ["1L1"], - cut: ["1L1"], - dazzlinggleam: ["1L1"], - doubleteam: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - extrasensory: ["1L1"], - facade: ["1L1"], - flash: ["1L1"], - frustration: ["1L1"], - gigadrain: ["1L1"], - grassknot: ["1L1"], - grasswhistle: ["1L1"], - grassyglide: ["1L1"], - growth: ["1L1"], - hiddenpower: ["1L1"], - leafstorm: ["1L1"], - lifedew: ["1L1"], - megadrain: ["1L1"], - mindreader: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - naturepower: ["1L1"], - pinmissile: ["1L1"], - protect: ["1L1"], - psychup: ["1L1"], - raindance: ["1L1"], - razorleaf: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - round: ["1L1"], - secretpower: ["1L1"], - seedbomb: ["1L1"], - shadowball: ["1L1"], - sleeppowder: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - spikes: ["1L1"], - stunspore: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - swordsdance: ["1L1"], - synthesis: ["1L1"], - toxic: ["1L1"], - uproar: ["1L1"], - venoshock: ["1L1"], - watersport: ["1L1"], - weatherball: ["1L1"], - worryseed: ["1L1"], - }, - }, - roselia: { - learnset: { - absorb: ["1L1"], - aromatherapy: ["1L1"], - attract: ["1L1"], - bodyslam: ["1L1"], - bulletseed: ["1L1"], - captivate: ["1L1"], - confide: ["1L1"], - cottonspore: ["1L1"], - covet: ["1L1"], - cut: ["1L1"], - dazzlinggleam: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - extrasensory: ["1L1"], - facade: ["1L1"], - flash: ["1L1"], - frustration: ["1L1"], - furycutter: ["1L1"], - gigadrain: ["1L1"], - grassknot: ["1L1"], - grasswhistle: ["1L1"], - grassyglide: ["1L1"], - growth: ["1L1"], - hiddenpower: ["1L1"], - ingrain: ["1L1"], - leafstorm: ["1L1"], - leechseed: ["1L1"], - lifedew: ["1L1"], - magicalleaf: ["1L1"], - megadrain: ["1L1"], - mimic: ["1L1"], - mindreader: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - naturepower: ["1L1"], - nightmare: ["1L1"], - petalblizzard: ["1L1"], - petaldance: ["1L1"], - pinmissile: ["1L1"], - poisonjab: ["1L1"], - poisonsting: ["1L1"], - powerwhip: ["1L1"], - protect: ["1L1"], - psychup: ["1L1"], - raindance: ["1L1"], - razorleaf: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - round: ["1L1"], - secretpower: ["1L1"], - seedbomb: ["1L1"], - shadowball: ["1L1"], - sleeppowder: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - spikes: ["1L1"], - stunspore: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - sweetkiss: ["1L1"], - sweetscent: ["1L1"], - swift: ["1L1"], - swordsdance: ["1L1"], - synthesis: ["1L1"], - toxic: ["1L1"], - toxicspikes: ["1L1"], - uproar: ["1L1"], - venoshock: ["1L1"], - weatherball: ["1L1"], - worryseed: ["1L1"], - }, - eventData: [ - {generation: 3, level: 10, gender: "M", moves: ["1L1"], pokeball: "pokeball"}, - {generation: 3, level: 22, moves: ["1L1"]}, - ], - }, - roserade: { - learnset: { - absorb: ["1L1"], - aromatherapy: ["1L1"], - attract: ["1L1"], - bodyslam: ["1L1"], - bulletseed: ["1L1"], - captivate: ["1L1"], - confide: ["1L1"], - covet: ["1L1"], - cut: ["1L1"], - dazzlinggleam: ["1L1"], - doubleteam: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - flash: ["1L1"], - frustration: ["1L1"], - furycutter: ["1L1"], - gigadrain: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - grassyglide: ["1L1"], - grassyterrain: ["1L1"], - growth: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - ingrain: ["1L1"], - laserfocus: ["1L1"], - leafstorm: ["1L1"], - leechseed: ["1L1"], - magicalleaf: ["1L1"], - megadrain: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - naturepower: ["1L1"], - petalblizzard: ["1L1"], - petaldance: ["1L1"], - pinmissile: ["1L1"], - poisonjab: ["1L1"], - poisonsting: ["1L1"], - powerwhip: ["1L1"], - protect: ["1L1"], - psychup: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - round: ["1L1"], - secretpower: ["1L1"], - seedbomb: ["1L1"], - shadowball: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - spikes: ["1L1"], - stunspore: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - sweetscent: ["1L1"], - swift: ["1L1"], - swordsdance: ["1L1"], - synthesis: ["1L1"], - toxic: ["1L1"], - toxicspikes: ["1L1"], - uproar: ["1L1"], - venomdrench: ["1L1"], - venoshock: ["1L1"], - weatherball: ["1L1"], - worryseed: ["1L1"], - }, - }, - gulpin: { - learnset: { - acidarmor: ["1L1"], - acidspray: ["1L1"], - amnesia: ["1L1"], - attract: ["1L1"], - belch: ["1L1"], - bodyslam: ["1L1"], - bulletseed: ["1L1"], - captivate: ["1L1"], - clearsmog: ["1L1"], - confide: ["1L1"], - counter: ["1L1"], - curse: ["1L1"], - defensecurl: ["1L1"], - destinybond: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dreameater: ["1L1"], - dynamicpunch: ["1L1"], - encore: ["1L1"], - endure: ["1L1"], - explosion: ["1L1"], - facade: ["1L1"], - firepunch: ["1L1"], - fling: ["1L1"], - frustration: ["1L1"], - gastroacid: ["1L1"], - gigadrain: ["1L1"], - gunkshot: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - icebeam: ["1L1"], - icepunch: ["1L1"], - infestation: ["1L1"], - mimic: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - nightmare: ["1L1"], - painsplit: ["1L1"], - poisongas: ["1L1"], - poisonjab: ["1L1"], - pound: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rocksmash: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - secretpower: ["1L1"], - seedbomb: ["1L1"], - selfdestruct: ["1L1"], - shadowball: ["1L1"], - shockwave: ["1L1"], - sing: ["1L1"], - sleeptalk: ["1L1"], - sludge: ["1L1"], - sludgebomb: ["1L1"], - sludgewave: ["1L1"], - smog: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - spitup: ["1L1"], - stockpile: ["1L1"], - strength: ["1L1"], - stuffcheeks: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swallow: ["1L1"], - swordsdance: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thunderpunch: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - toxicspikes: ["1L1"], - venomdrench: ["1L1"], - venoshock: ["1L1"], - waterpulse: ["1L1"], - wringout: ["1L1"], - yawn: ["1L1"], - }, - eventData: [ - {generation: 3, level: 17, moves: ["1L1"]}, - ], - }, - swalot: { - learnset: { - acidspray: ["1L1"], - amnesia: ["1L1"], - attract: ["1L1"], - belch: ["1L1"], - block: ["1L1"], - bodypress: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - bulldoze: ["1L1"], - bulletseed: ["1L1"], - captivate: ["1L1"], - confide: ["1L1"], - counter: ["1L1"], - curse: ["1L1"], - defensecurl: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dreameater: ["1L1"], - dynamicpunch: ["1L1"], - earthquake: ["1L1"], - encore: ["1L1"], - endure: ["1L1"], - explosion: ["1L1"], - facade: ["1L1"], - firepunch: ["1L1"], - fling: ["1L1"], - frustration: ["1L1"], - gastroacid: ["1L1"], - gigadrain: ["1L1"], - gigaimpact: ["1L1"], - gunkshot: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - icebeam: ["1L1"], - icepunch: ["1L1"], - infestation: ["1L1"], - knockoff: ["1L1"], - metronome: ["1L1"], - mimic: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - nightmare: ["1L1"], - painsplit: ["1L1"], - poisongas: ["1L1"], - poisonjab: ["1L1"], - pound: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rocksmash: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - secretpower: ["1L1"], - seedbomb: ["1L1"], - selfdestruct: ["1L1"], - shadowball: ["1L1"], - shockwave: ["1L1"], - sleeptalk: ["1L1"], - sludge: ["1L1"], - sludgebomb: ["1L1"], - sludgewave: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - spitup: ["1L1"], - stockpile: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swallow: ["1L1"], - swordsdance: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thunderpunch: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - toxicspikes: ["1L1"], - venomdrench: ["1L1"], - venoshock: ["1L1"], - waterpulse: ["1L1"], - wringout: ["1L1"], - yawn: ["1L1"], - zenheadbutt: ["1L1"], - }, - }, - carvanha: { - learnset: { - agility: ["1L1"], - ancientpower: ["1L1"], - aquajet: ["1L1"], - assurance: ["1L1"], - attract: ["1L1"], - bite: ["1L1"], - blizzard: ["1L1"], - bounce: ["1L1"], - brine: ["1L1"], - captivate: ["1L1"], - confide: ["1L1"], - crunch: ["1L1"], - darkpulse: ["1L1"], - destinybond: ["1L1"], - dive: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - flipturn: ["1L1"], - focusenergy: ["1L1"], - frustration: ["1L1"], - furycutter: ["1L1"], - hail: ["1L1"], - hiddenpower: ["1L1"], - hydropump: ["1L1"], - icebeam: ["1L1"], - icefang: ["1L1"], - icywind: ["1L1"], - leer: ["1L1"], - liquidation: ["1L1"], - mimic: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - payback: ["1L1"], - poisonfang: ["1L1"], - protect: ["1L1"], - psychicfangs: ["1L1"], - rage: ["1L1"], - raindance: ["1L1"], - refresh: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - round: ["1L1"], - scald: ["1L1"], - scaleshot: ["1L1"], - scaryface: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - sleeptalk: ["1L1"], - snarl: ["1L1"], - snore: ["1L1"], - spite: ["1L1"], - substitute: ["1L1"], - superfang: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - thief: ["1L1"], - thrash: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - uproar: ["1L1"], - waterfall: ["1L1"], - waterpulse: ["1L1"], - whirlpool: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 3, level: 15, moves: ["1L1"]}, - {generation: 6, level: 1, isHidden: true, moves: ["1L1"], pokeball: "pokeball"}, - ], - }, - sharpedo: { - learnset: { - agility: ["1L1"], - ancientpower: ["1L1"], - aquajet: ["1L1"], - assurance: ["1L1"], - attract: ["1L1"], - avalanche: ["1L1"], - bite: ["1L1"], - blizzard: ["1L1"], - bounce: ["1L1"], - brine: ["1L1"], - bulldoze: ["1L1"], - captivate: ["1L1"], - closecombat: ["1L1"], - confide: ["1L1"], - crunch: ["1L1"], - darkpulse: ["1L1"], - destinybond: ["1L1"], - dive: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - earthquake: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - feint: ["1L1"], - flipturn: ["1L1"], - focusenergy: ["1L1"], - frustration: ["1L1"], - furycutter: ["1L1"], - gigaimpact: ["1L1"], - hail: ["1L1"], - hiddenpower: ["1L1"], - hydropump: ["1L1"], - hyperbeam: ["1L1"], - icebeam: ["1L1"], - icefang: ["1L1"], - icywind: ["1L1"], - leer: ["1L1"], - liquidation: ["1L1"], - mimic: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - nightslash: ["1L1"], - payback: ["1L1"], - poisonfang: ["1L1"], - poisonjab: ["1L1"], - protect: ["1L1"], - psychicfangs: ["1L1"], - rage: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - roar: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - scald: ["1L1"], - scaleshot: ["1L1"], - scaryface: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - skullbash: ["1L1"], - slash: ["1L1"], - sleeptalk: ["1L1"], - snarl: ["1L1"], - snore: ["1L1"], - spite: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - superfang: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - thief: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - uproar: ["1L1"], - waterfall: ["1L1"], - waterpulse: ["1L1"], - whirlpool: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 6, level: 50, nature: "Adamant", isHidden: true, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 6, level: 43, gender: "M", perfectIVs: 2, moves: ["1L1"], pokeball: "cherishball"}, - ], - encounters: [ - {generation: 7, level: 10}, - ], - }, - wailmer: { - learnset: { - amnesia: ["1L1"], - aquaring: ["1L1"], - astonish: ["1L1"], - attract: ["1L1"], - avalanche: ["1L1"], - blizzard: ["1L1"], - bodypress: ["1L1"], - bodyslam: ["1L1"], - bounce: ["1L1"], - brine: ["1L1"], - bulldoze: ["1L1"], - captivate: ["1L1"], - clearsmog: ["1L1"], - confide: ["1L1"], - curse: ["1L1"], - defensecurl: ["1L1"], - dive: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - earthquake: ["1L1"], - echoedvoice: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fissure: ["1L1"], - frustration: ["1L1"], - growl: ["1L1"], - hail: ["1L1"], - headbutt: ["1L1"], - heavyslam: ["1L1"], - hiddenpower: ["1L1"], - hydropump: ["1L1"], - hypervoice: ["1L1"], - icebeam: ["1L1"], - icywind: ["1L1"], - mimic: ["1L1"], - mist: ["1L1"], - naturalgift: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roar: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - scald: ["1L1"], - secretpower: ["1L1"], - selfdestruct: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - soak: ["1L1"], - splash: ["1L1"], - steelroller: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - thrash: ["1L1"], - tickle: ["1L1"], - toxic: ["1L1"], - waterfall: ["1L1"], - watergun: ["1L1"], - waterpulse: ["1L1"], - waterspout: ["1L1"], - weatherball: ["1L1"], - whirlpool: ["1L1"], - zenheadbutt: ["1L1"], - }, - }, - wailord: { - learnset: { - amnesia: ["1L1"], - astonish: ["1L1"], - attract: ["1L1"], - avalanche: ["1L1"], - blizzard: ["1L1"], - block: ["1L1"], - bodypress: ["1L1"], - bodyslam: ["1L1"], - bounce: ["1L1"], - brine: ["1L1"], - bulldoze: ["1L1"], - captivate: ["1L1"], - confide: ["1L1"], - defensecurl: ["1L1"], - dive: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - earthquake: ["1L1"], - echoedvoice: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - growl: ["1L1"], - hail: ["1L1"], - headbutt: ["1L1"], - heavyslam: ["1L1"], - hiddenpower: ["1L1"], - hydropump: ["1L1"], - hyperbeam: ["1L1"], - hypervoice: ["1L1"], - icebeam: ["1L1"], - icywind: ["1L1"], - ironhead: ["1L1"], - liquidation: ["1L1"], - mimic: ["1L1"], - mist: ["1L1"], - naturalgift: ["1L1"], - nobleroar: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roar: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - scald: ["1L1"], - secretpower: ["1L1"], - selfdestruct: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - soak: ["1L1"], - splash: ["1L1"], - steelroller: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - toxic: ["1L1"], - waterfall: ["1L1"], - watergun: ["1L1"], - waterpulse: ["1L1"], - waterspout: ["1L1"], - weatherball: ["1L1"], - whirlpool: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 3, level: 100, moves: ["1L1"], pokeball: "pokeball"}, - {generation: 3, level: 50, moves: ["1L1"], pokeball: "pokeball"}, - ], - encounters: [ - {generation: 3, level: 25}, - {generation: 4, level: 35}, - {generation: 5, level: 30}, - {generation: 7, level: 10}, - ], - }, - numel: { - learnset: { - afteryou: ["1L1"], - amnesia: ["1L1"], - ancientpower: ["1L1"], - attract: ["1L1"], - bodypress: ["1L1"], - bodyslam: ["1L1"], - bulldoze: ["1L1"], - captivate: ["1L1"], - charm: ["1L1"], - confide: ["1L1"], - curse: ["1L1"], - defensecurl: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - echoedvoice: ["1L1"], - ember: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fireblast: ["1L1"], - firespin: ["1L1"], - flameburst: ["1L1"], - flamecharge: ["1L1"], - flamethrower: ["1L1"], - flareblitz: ["1L1"], - flashcannon: ["1L1"], - focusenergy: ["1L1"], - frustration: ["1L1"], - growl: ["1L1"], - growth: ["1L1"], - headbutt: ["1L1"], - heatcrash: ["1L1"], - heatwave: ["1L1"], - heavyslam: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - highhorsepower: ["1L1"], - howl: ["1L1"], - incinerate: ["1L1"], - ironhead: ["1L1"], - lashout: ["1L1"], - lavaplume: ["1L1"], - magnitude: ["1L1"], - mimic: ["1L1"], - mudbomb: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - naturepower: ["1L1"], - overheat: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roar: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - sandstorm: ["1L1"], - scaryface: ["1L1"], - scorchingsands: ["1L1"], - secretpower: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - spitup: ["1L1"], - stealthrock: ["1L1"], - stockpile: ["1L1"], - stomp: ["1L1"], - stompingtantrum: ["1L1"], - stoneedge: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swallow: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - temperflare: ["1L1"], - terablast: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - willowisp: ["1L1"], - yawn: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 3, level: 14, abilities: ["1L1"], moves: ["1L1"]}, - {generation: 6, level: 1, moves: ["1L1"], pokeball: "pokeball"}, - ], - }, - camerupt: { - learnset: { - afteryou: ["1L1"], - amnesia: ["1L1"], - attract: ["1L1"], - bodypress: ["1L1"], - bodyslam: ["1L1"], - bulldoze: ["1L1"], - captivate: ["1L1"], - charm: ["1L1"], - confide: ["1L1"], - curse: ["1L1"], - defensecurl: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - echoedvoice: ["1L1"], - ember: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - eruption: ["1L1"], - explosion: ["1L1"], - facade: ["1L1"], - fireblast: ["1L1"], - firespin: ["1L1"], - fissure: ["1L1"], - flameburst: ["1L1"], - flamecharge: ["1L1"], - flamethrower: ["1L1"], - flareblitz: ["1L1"], - flashcannon: ["1L1"], - focusenergy: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - growl: ["1L1"], - headbutt: ["1L1"], - heatcrash: ["1L1"], - heatwave: ["1L1"], - heavyslam: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - highhorsepower: ["1L1"], - hyperbeam: ["1L1"], - incinerate: ["1L1"], - ironhead: ["1L1"], - lashout: ["1L1"], - lavaplume: ["1L1"], - magnitude: ["1L1"], - mimic: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - naturepower: ["1L1"], - overheat: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roar: ["1L1"], - rockpolish: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - sandstorm: ["1L1"], - scaryface: ["1L1"], - scorchingsands: ["1L1"], - secretpower: ["1L1"], - selfdestruct: ["1L1"], - sleeptalk: ["1L1"], - smackdown: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - stealthrock: ["1L1"], - stompingtantrum: ["1L1"], - stoneedge: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - temperflare: ["1L1"], - terablast: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - willowisp: ["1L1"], - yawn: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 6, level: 43, gender: "M", perfectIVs: 2, abilities: ["1L1"], moves: ["1L1"], pokeball: "cherishball"}, - ], - encounters: [ - {generation: 6, level: 30}, - ], - }, - torkoal: { - learnset: { - afteryou: ["1L1"], - amnesia: ["1L1"], - ancientpower: ["1L1"], - attract: ["1L1"], - bodypress: ["1L1"], - bodyslam: ["1L1"], - bulldoze: ["1L1"], - burningjealousy: ["1L1"], - captivate: ["1L1"], - clearsmog: ["1L1"], - confide: ["1L1"], - curse: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - ember: ["1L1"], - endure: ["1L1"], - eruption: ["1L1"], - explosion: ["1L1"], - facade: ["1L1"], - fireblast: ["1L1"], - firespin: ["1L1"], - fissure: ["1L1"], - flail: ["1L1"], - flameburst: ["1L1"], - flamecharge: ["1L1"], - flamethrower: ["1L1"], - flamewheel: ["1L1"], - flareblitz: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - gyroball: ["1L1"], - headbutt: ["1L1"], - heatcrash: ["1L1"], - heatwave: ["1L1"], - heavyslam: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - incinerate: ["1L1"], - inferno: ["1L1"], - irondefense: ["1L1"], - irontail: ["1L1"], - lavaplume: ["1L1"], - mimic: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - naturepower: ["1L1"], - overheat: ["1L1"], - protect: ["1L1"], - rapidspin: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - sandstorm: ["1L1"], - scorchingsands: ["1L1"], - secretpower: ["1L1"], - selfdestruct: ["1L1"], - shellsmash: ["1L1"], - skullbash: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - smog: ["1L1"], - smokescreen: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - stealthrock: ["1L1"], - stompingtantrum: ["1L1"], - stoneedge: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - superpower: ["1L1"], - swagger: ["1L1"], - takedown: ["1L1"], - temperflare: ["1L1"], - terablast: ["1L1"], - toxic: ["1L1"], - weatherball: ["1L1"], - willowisp: ["1L1"], - withdraw: ["1L1"], - yawn: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 8, level: 50, gender: "M", nature: "Bold", abilities: ["1L1"], ivs: {hp: 31, atk: 12, def: 31, spa: 31, spd: 31, spe: 0}, moves: ["1L1"], pokeball: "cherishball"}, - ], - }, - spoink: { - learnset: { - allyswitch: ["1L1"], - amnesia: ["1L1"], - attract: ["1L1"], - bodyslam: ["1L1"], - bounce: ["1L1"], - calmmind: ["1L1"], - captivate: ["1L1"], - chargebeam: ["1L1"], - chillingwater: ["1L1"], - confide: ["1L1"], - confuseray: ["1L1"], - confusion: ["1L1"], - covet: ["1L1"], - dazzlinggleam: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dreameater: ["1L1"], - encore: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - expandingforce: ["1L1"], - extrasensory: ["1L1"], - facade: ["1L1"], - flash: ["1L1"], - flashcannon: ["1L1"], - frustration: ["1L1"], - futuresight: ["1L1"], - grassknot: ["1L1"], - growl: ["1L1"], - headbutt: ["1L1"], - healbell: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - icywind: ["1L1"], - imprison: ["1L1"], - irontail: ["1L1"], - lightscreen: ["1L1"], - luckychant: ["1L1"], - lunge: ["1L1"], - magiccoat: ["1L1"], - mimic: ["1L1"], - mirrorcoat: ["1L1"], - naturalgift: ["1L1"], - nightshade: ["1L1"], - odorsleuth: ["1L1"], - payback: ["1L1"], - powergem: ["1L1"], - protect: ["1L1"], - psybeam: ["1L1"], - psychic: ["1L1"], - psychicterrain: ["1L1"], - psychup: ["1L1"], - psyshock: ["1L1"], - psywave: ["1L1"], - raindance: ["1L1"], - recycle: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roleplay: ["1L1"], - round: ["1L1"], - secretpower: ["1L1"], - shadowball: ["1L1"], - shockwave: ["1L1"], - signalbeam: ["1L1"], - simplebeam: ["1L1"], - skillswap: ["1L1"], - sleeptalk: ["1L1"], - snarl: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - snowscape: ["1L1"], - splash: ["1L1"], - storedpower: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - telekinesis: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thunderwave: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - trick: ["1L1"], - trickroom: ["1L1"], - uproar: ["1L1"], - whirlwind: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 3, level: 5, shiny: 1, abilities: ["1L1"], moves: ["1L1"], pokeball: "pokeball", emeraldEventEgg: true}, - ], - }, - grumpig: { - learnset: { - allyswitch: ["1L1"], - amnesia: ["1L1"], - attract: ["1L1"], - belch: ["1L1"], - bodypress: ["1L1"], - bodyslam: ["1L1"], - bounce: ["1L1"], - brickbreak: ["1L1"], - bulldoze: ["1L1"], - calmmind: ["1L1"], - captivate: ["1L1"], - chargebeam: ["1L1"], - chillingwater: ["1L1"], - confide: ["1L1"], - confuseray: ["1L1"], - confusion: ["1L1"], - counter: ["1L1"], - covet: ["1L1"], - dazzlinggleam: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - drainpunch: ["1L1"], - dreameater: ["1L1"], - dynamicpunch: ["1L1"], - earthpower: ["1L1"], - encore: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - expandingforce: ["1L1"], - facade: ["1L1"], - firepunch: ["1L1"], - flash: ["1L1"], - flashcannon: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - focuspunch: ["1L1"], - frustration: ["1L1"], - futuresight: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - headbutt: ["1L1"], - healbell: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - hypervoice: ["1L1"], - icepunch: ["1L1"], - icywind: ["1L1"], - imprison: ["1L1"], - irontail: ["1L1"], - laserfocus: ["1L1"], - lightscreen: ["1L1"], - lowkick: ["1L1"], - lowsweep: ["1L1"], - lunge: ["1L1"], - magiccoat: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - metronome: ["1L1"], - mimic: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - nastyplot: ["1L1"], - naturalgift: ["1L1"], - nightshade: ["1L1"], - odorsleuth: ["1L1"], - payback: ["1L1"], - powergem: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - psybeam: ["1L1"], - psychic: ["1L1"], - psychicnoise: ["1L1"], - psychicterrain: ["1L1"], - psychup: ["1L1"], - psyshock: ["1L1"], - psywave: ["1L1"], - raindance: ["1L1"], - recycle: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roleplay: ["1L1"], - round: ["1L1"], - secretpower: ["1L1"], - seedbomb: ["1L1"], - seismictoss: ["1L1"], - shadowball: ["1L1"], - shockwave: ["1L1"], - signalbeam: ["1L1"], - skillswap: ["1L1"], - sleeptalk: ["1L1"], - snarl: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - snowscape: ["1L1"], - splash: ["1L1"], - stompingtantrum: ["1L1"], - storedpower: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - teeterdance: ["1L1"], - telekinesis: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thunderpunch: ["1L1"], - thunderwave: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - trick: ["1L1"], - trickroom: ["1L1"], - uproar: ["1L1"], - zenheadbutt: ["1L1"], - }, - encounters: [ - {generation: 6, level: 30}, - ], - }, - spinda: { - learnset: { - assist: ["1L1"], - attract: ["1L1"], - batonpass: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - calmmind: ["1L1"], - captivate: ["1L1"], - confide: ["1L1"], - copycat: ["1L1"], - counter: ["1L1"], - covet: ["1L1"], - defensecurl: ["1L1"], - dig: ["1L1"], - disable: ["1L1"], - dizzypunch: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - drainpunch: ["1L1"], - dreameater: ["1L1"], - dynamicpunch: ["1L1"], - encore: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fakeout: ["1L1"], - faketears: ["1L1"], - feintattack: ["1L1"], - firepunch: ["1L1"], - flail: ["1L1"], - flash: ["1L1"], - fling: ["1L1"], - focuspunch: ["1L1"], - frustration: ["1L1"], - guardsplit: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hypervoice: ["1L1"], - hypnosis: ["1L1"], - icepunch: ["1L1"], - icywind: ["1L1"], - lastresort: ["1L1"], - lowkick: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - metronome: ["1L1"], - mimic: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - nightmare: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - psybeam: ["1L1"], - psychic: ["1L1"], - psychocut: ["1L1"], - psychoshift: ["1L1"], - psychup: ["1L1"], - raindance: ["1L1"], - rapidspin: ["1L1"], - recycle: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - roleplay: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - secretpower: ["1L1"], - seismictoss: ["1L1"], - shadowball: ["1L1"], - shockwave: ["1L1"], - sing: ["1L1"], - skillswap: ["1L1"], - sleeptalk: ["1L1"], - smellingsalts: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - spotlight: ["1L1"], - stompingtantrum: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - sunnyday: ["1L1"], - superpower: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - tackle: ["1L1"], - teeterdance: ["1L1"], - thief: ["1L1"], - thrash: ["1L1"], - thunderpunch: ["1L1"], - toxic: ["1L1"], - trick: ["1L1"], - trickroom: ["1L1"], - uproar: ["1L1"], - waterpulse: ["1L1"], - wildcharge: ["1L1"], - wish: ["1L1"], - workup: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 3, level: 5, shiny: 1, moves: ["1L1"], pokeball: "pokeball", emeraldEventEgg: true}, - ], - }, - trapinch: { - learnset: { - astonish: ["1L1"], - attract: ["1L1"], - bide: ["1L1"], - bite: ["1L1"], - bodyslam: ["1L1"], - bugbite: ["1L1"], - bulldoze: ["1L1"], - captivate: ["1L1"], - confide: ["1L1"], - crunch: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - feint: ["1L1"], - feintattack: ["1L1"], - firstimpression: ["1L1"], - fissure: ["1L1"], - flail: ["1L1"], - focusenergy: ["1L1"], - frustration: ["1L1"], - furycutter: ["1L1"], - gigadrain: ["1L1"], - gust: ["1L1"], - headbutt: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - laserfocus: ["1L1"], - mimic: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - protect: ["1L1"], - quickattack: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - sandattack: ["1L1"], - sandstorm: ["1L1"], - sandtomb: ["1L1"], - scorchingsands: ["1L1"], - secretpower: ["1L1"], - signalbeam: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - stealthrock: ["1L1"], - stoneedge: ["1L1"], - strength: ["1L1"], - strugglebug: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - superpower: ["1L1"], - swagger: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - toxic: ["1L1"], - }, - eventData: [ - {generation: 5, level: 1, shiny: true, moves: ["1L1"], pokeball: "pokeball"}, - ], - }, - vibrava: { - learnset: { - aerialace: ["1L1"], - aircutter: ["1L1"], - airslash: ["1L1"], - astonish: ["1L1"], - attract: ["1L1"], - bide: ["1L1"], - bite: ["1L1"], - bodyslam: ["1L1"], - boomburst: ["1L1"], - bugbite: ["1L1"], - bugbuzz: ["1L1"], - bulldoze: ["1L1"], - captivate: ["1L1"], - confide: ["1L1"], - crunch: ["1L1"], - defog: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dracometeor: ["1L1"], - dragonbreath: ["1L1"], - dragonclaw: ["1L1"], - dragonpulse: ["1L1"], - dragonrush: ["1L1"], - dragontail: ["1L1"], - dualwingbeat: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - feintattack: ["1L1"], - fissure: ["1L1"], - fly: ["1L1"], - focusenergy: ["1L1"], - frustration: ["1L1"], - furycutter: ["1L1"], - gigadrain: ["1L1"], - gigaimpact: ["1L1"], - headbutt: ["1L1"], - heatwave: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - laserfocus: ["1L1"], - mimic: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - ominouswind: ["1L1"], - outrage: ["1L1"], - protect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - roost: ["1L1"], - round: ["1L1"], - sandattack: ["1L1"], - sandstorm: ["1L1"], - sandtomb: ["1L1"], - scorchingsands: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - signalbeam: ["1L1"], - silverwind: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - sonicboom: ["1L1"], - stealthrock: ["1L1"], - steelwing: ["1L1"], - stoneedge: ["1L1"], - strength: ["1L1"], - strugglebug: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - superpower: ["1L1"], - supersonic: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - tailwind: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - throatchop: ["1L1"], - toxic: ["1L1"], - twister: ["1L1"], - uproar: ["1L1"], - uturn: ["1L1"], - }, - }, - flygon: { - learnset: { - aerialace: ["1L1"], - agility: ["1L1"], - aircutter: ["1L1"], - airslash: ["1L1"], - alluringvoice: ["1L1"], - astonish: ["1L1"], - attract: ["1L1"], - bide: ["1L1"], - bite: ["1L1"], - bodyslam: ["1L1"], - boomburst: ["1L1"], - breakingswipe: ["1L1"], - brutalswing: ["1L1"], - bugbite: ["1L1"], - bugbuzz: ["1L1"], - bulldoze: ["1L1"], - captivate: ["1L1"], - confide: ["1L1"], - crunch: ["1L1"], - defog: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dracometeor: ["1L1"], - dragonbreath: ["1L1"], - dragoncheer: ["1L1"], - dragonclaw: ["1L1"], - dragondance: ["1L1"], - dragonpulse: ["1L1"], - dragonrush: ["1L1"], - dragontail: ["1L1"], - dualwingbeat: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - feint: ["1L1"], - feintattack: ["1L1"], - fireblast: ["1L1"], - firepunch: ["1L1"], - firespin: ["1L1"], - fissure: ["1L1"], - flamethrower: ["1L1"], - fly: ["1L1"], - focusenergy: ["1L1"], - frustration: ["1L1"], - furycutter: ["1L1"], - gigadrain: ["1L1"], - gigaimpact: ["1L1"], - headbutt: ["1L1"], - heatwave: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - honeclaws: ["1L1"], - hyperbeam: ["1L1"], - incinerate: ["1L1"], - irontail: ["1L1"], - laserfocus: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - mimic: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - ominouswind: ["1L1"], - outrage: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - psychicnoise: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - roost: ["1L1"], - round: ["1L1"], - sandattack: ["1L1"], - sandstorm: ["1L1"], - sandtomb: ["1L1"], - scaleshot: ["1L1"], - scorchingsands: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - signalbeam: ["1L1"], - silverwind: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - sonicboom: ["1L1"], - stealthrock: ["1L1"], - steelwing: ["1L1"], - stoneedge: ["1L1"], - strength: ["1L1"], - strugglebug: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - superpower: ["1L1"], - supersonic: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - tailwind: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - throatchop: ["1L1"], - thunderpunch: ["1L1"], - toxic: ["1L1"], - twister: ["1L1"], - uproar: ["1L1"], - uturn: ["1L1"], - vacuumwave: ["1L1"], - }, - eventData: [ - {generation: 3, level: 45, moves: ["1L1"], pokeball: "pokeball"}, - {generation: 4, level: 50, gender: "M", nature: "Naive", moves: ["1L1"], pokeball: "cherishball"}, - ], - }, - cacnea: { - learnset: { - absorb: ["1L1"], - acid: ["1L1"], - attract: ["1L1"], - belch: ["1L1"], - block: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - bulldoze: ["1L1"], - bulletseed: ["1L1"], - captivate: ["1L1"], - confide: ["1L1"], - cottonspore: ["1L1"], - counter: ["1L1"], - curse: ["1L1"], - cut: ["1L1"], - darkpulse: ["1L1"], - destinybond: ["1L1"], - dig: ["1L1"], - disable: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - drainpunch: ["1L1"], - dynamicpunch: ["1L1"], - encore: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - feintattack: ["1L1"], - fellstinger: ["1L1"], - flash: ["1L1"], - fling: ["1L1"], - focuspunch: ["1L1"], - foulplay: ["1L1"], - frustration: ["1L1"], - furycutter: ["1L1"], - gigadrain: ["1L1"], - grassknot: ["1L1"], - grasswhistle: ["1L1"], - grassyglide: ["1L1"], - grassyterrain: ["1L1"], - growth: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - ingrain: ["1L1"], - leafstorm: ["1L1"], - leechseed: ["1L1"], - leer: ["1L1"], - lowkick: ["1L1"], - magicalleaf: ["1L1"], - megapunch: ["1L1"], - mimic: ["1L1"], - mudslap: ["1L1"], - nastyplot: ["1L1"], - naturalgift: ["1L1"], - naturepower: ["1L1"], - needlearm: ["1L1"], - payback: ["1L1"], - pinmissile: ["1L1"], - poisonjab: ["1L1"], - poisonsting: ["1L1"], - powertrip: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roleplay: ["1L1"], - rototiller: ["1L1"], - round: ["1L1"], - sandattack: ["1L1"], - sandstorm: ["1L1"], - scaryface: ["1L1"], - secretpower: ["1L1"], - seedbomb: ["1L1"], - seismictoss: ["1L1"], - skittersmack: ["1L1"], - sleeptalk: ["1L1"], - smellingsalts: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - spikes: ["1L1"], - spite: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - switcheroo: ["1L1"], - swordsdance: ["1L1"], - synthesis: ["1L1"], - takedown: ["1L1"], - teeterdance: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - throatchop: ["1L1"], - thunderpunch: ["1L1"], - toxic: ["1L1"], - toxicspikes: ["1L1"], - trailblaze: ["1L1"], - venoshock: ["1L1"], - worryseed: ["1L1"], - }, - eventData: [ - {generation: 3, level: 5, shiny: 1, moves: ["1L1"], pokeball: "pokeball", emeraldEventEgg: true}, - ], - }, - cacturne: { - learnset: { - absorb: ["1L1"], - attract: ["1L1"], - block: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - bulldoze: ["1L1"], - bulletseed: ["1L1"], - captivate: ["1L1"], - confide: ["1L1"], - cottonspore: ["1L1"], - counter: ["1L1"], - curse: ["1L1"], - cut: ["1L1"], - darkpulse: ["1L1"], - destinybond: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - drainpunch: ["1L1"], - dynamicpunch: ["1L1"], - embargo: ["1L1"], - encore: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - feintattack: ["1L1"], - flash: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - focuspunch: ["1L1"], - foulplay: ["1L1"], - frustration: ["1L1"], - furycutter: ["1L1"], - gigadrain: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - grassyglide: ["1L1"], - grassyterrain: ["1L1"], - growth: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - ingrain: ["1L1"], - knockoff: ["1L1"], - lashout: ["1L1"], - leafstorm: ["1L1"], - leechseed: ["1L1"], - leer: ["1L1"], - lowkick: ["1L1"], - lunge: ["1L1"], - magicalleaf: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - mimic: ["1L1"], - mudslap: ["1L1"], - nastyplot: ["1L1"], - naturalgift: ["1L1"], - naturepower: ["1L1"], - needlearm: ["1L1"], - payback: ["1L1"], - pinmissile: ["1L1"], - poisonjab: ["1L1"], - poisonsting: ["1L1"], - powertrip: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - revenge: ["1L1"], - roleplay: ["1L1"], - round: ["1L1"], - sandattack: ["1L1"], - sandstorm: ["1L1"], - scaryface: ["1L1"], - secretpower: ["1L1"], - seedbomb: ["1L1"], - seismictoss: ["1L1"], - shadowball: ["1L1"], - skittersmack: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - spikes: ["1L1"], - spikyshield: ["1L1"], - spite: ["1L1"], - stompingtantrum: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - sunnyday: ["1L1"], - superpower: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - swordsdance: ["1L1"], - synthesis: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - throatchop: ["1L1"], - thunderpunch: ["1L1"], - toxic: ["1L1"], - toxicspikes: ["1L1"], - trailblaze: ["1L1"], - venoshock: ["1L1"], - worryseed: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 3, level: 45, moves: ["1L1"], pokeball: "pokeball"}, - ], - encounters: [ - {generation: 6, level: 30}, - ], - }, - swablu: { - learnset: { - acrobatics: ["1L1"], - aerialace: ["1L1"], - agility: ["1L1"], - aircutter: ["1L1"], - astonish: ["1L1"], - attract: ["1L1"], - bodyslam: ["1L1"], - bravebird: ["1L1"], - captivate: ["1L1"], - confide: ["1L1"], - cottonguard: ["1L1"], - dazzlinggleam: ["1L1"], - defog: ["1L1"], - disarmingvoice: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dragonbreath: ["1L1"], - dragoncheer: ["1L1"], - dragonpulse: ["1L1"], - dragonrush: ["1L1"], - dreameater: ["1L1"], - dualwingbeat: ["1L1"], - echoedvoice: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - falseswipe: ["1L1"], - featherdance: ["1L1"], - fly: ["1L1"], - frustration: ["1L1"], - furyattack: ["1L1"], - growl: ["1L1"], - haze: ["1L1"], - healbell: ["1L1"], - heatwave: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hurricane: ["1L1"], - hypervoice: ["1L1"], - icebeam: ["1L1"], - mimic: ["1L1"], - mirrormove: ["1L1"], - mist: ["1L1"], - moonblast: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - ominouswind: ["1L1"], - outrage: ["1L1"], - peck: ["1L1"], - perishsong: ["1L1"], - playrough: ["1L1"], - pluck: ["1L1"], - powerswap: ["1L1"], - protect: ["1L1"], - psychup: ["1L1"], - pursuit: ["1L1"], - rage: ["1L1"], - raindance: ["1L1"], - refresh: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roost: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - secretpower: ["1L1"], - sing: ["1L1"], - skyattack: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - steelwing: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - tailwind: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - twister: ["1L1"], - uproar: ["1L1"], - }, - eventData: [ - {generation: 3, level: 5, shiny: 1, moves: ["1L1"], pokeball: "pokeball", emeraldEventEgg: true}, - {generation: 5, level: 1, shiny: true, moves: ["1L1"], pokeball: "pokeball"}, - {generation: 6, level: 1, isHidden: true, moves: ["1L1"], pokeball: "pokeball"}, - ], - }, - altaria: { - learnset: { - acrobatics: ["1L1"], - aerialace: ["1L1"], - agility: ["1L1"], - aircutter: ["1L1"], - alluringvoice: ["1L1"], - astonish: ["1L1"], - attract: ["1L1"], - bodyslam: ["1L1"], - bravebird: ["1L1"], - breakingswipe: ["1L1"], - bulldoze: ["1L1"], - captivate: ["1L1"], - confide: ["1L1"], - cottonguard: ["1L1"], - dazzlinggleam: ["1L1"], - defog: ["1L1"], - disarmingvoice: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dracometeor: ["1L1"], - dragonbreath: ["1L1"], - dragoncheer: ["1L1"], - dragonclaw: ["1L1"], - dragondance: ["1L1"], - dragonpulse: ["1L1"], - dreameater: ["1L1"], - dualwingbeat: ["1L1"], - earthquake: ["1L1"], - echoedvoice: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - falseswipe: ["1L1"], - featherdance: ["1L1"], - fireblast: ["1L1"], - firespin: ["1L1"], - flamethrower: ["1L1"], - fly: ["1L1"], - frustration: ["1L1"], - furyattack: ["1L1"], - gigaimpact: ["1L1"], - growl: ["1L1"], - haze: ["1L1"], - healbell: ["1L1"], - heatwave: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - honeclaws: ["1L1"], - hurricane: ["1L1"], - hyperbeam: ["1L1"], - hypervoice: ["1L1"], - icebeam: ["1L1"], - incinerate: ["1L1"], - irontail: ["1L1"], - mimic: ["1L1"], - mist: ["1L1"], - moonblast: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - ominouswind: ["1L1"], - outrage: ["1L1"], - peck: ["1L1"], - perishsong: ["1L1"], - playrough: ["1L1"], - pluck: ["1L1"], - powerswap: ["1L1"], - protect: ["1L1"], - psychup: ["1L1"], - raindance: ["1L1"], - refresh: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roar: ["1L1"], - rocksmash: ["1L1"], - roost: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - secretpower: ["1L1"], - sing: ["1L1"], - skyattack: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - snowscape: ["1L1"], - solarbeam: ["1L1"], - steelwing: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - tailwind: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - twister: ["1L1"], - uproar: ["1L1"], - weatherball: ["1L1"], - willowisp: ["1L1"], - wonderroom: ["1L1"], - }, - eventData: [ - {generation: 3, level: 45, moves: ["1L1"], pokeball: "pokeball"}, - {generation: 3, level: 36, moves: ["1L1"]}, - {generation: 5, level: 35, gender: "M", isHidden: true, moves: ["1L1"]}, - {generation: 6, level: 100, nature: "Modest", isHidden: true, moves: ["1L1"], pokeball: "cherishball"}, - ], - }, - zangoose: { - learnset: { - aerialace: ["1L1"], - agility: ["1L1"], - attract: ["1L1"], - aurasphere: ["1L1"], - batonpass: ["1L1"], - bellydrum: ["1L1"], - blizzard: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - captivate: ["1L1"], - closecombat: ["1L1"], - confide: ["1L1"], - counter: ["1L1"], - crushclaw: ["1L1"], - curse: ["1L1"], - defensecurl: ["1L1"], - detect: ["1L1"], - dig: ["1L1"], - disable: ["1L1"], - doubleedge: ["1L1"], - doublehit: ["1L1"], - doublekick: ["1L1"], - doubleteam: ["1L1"], - dynamicpunch: ["1L1"], - embargo: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - falseswipe: ["1L1"], - feint: ["1L1"], - finalgambit: ["1L1"], - fireblast: ["1L1"], - firepunch: ["1L1"], - flail: ["1L1"], - flamethrower: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - focuspunch: ["1L1"], - frustration: ["1L1"], - furycutter: ["1L1"], - furyswipes: ["1L1"], - gigadrain: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - gunkshot: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - honeclaws: ["1L1"], - hyperbeam: ["1L1"], - icebeam: ["1L1"], - icepunch: ["1L1"], - icywind: ["1L1"], - incinerate: ["1L1"], - irontail: ["1L1"], - knockoff: ["1L1"], - lastresort: ["1L1"], - leer: ["1L1"], - lowkick: ["1L1"], - lowsweep: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - metalclaw: ["1L1"], - mimic: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - nightslash: ["1L1"], - payback: ["1L1"], - poisonjab: ["1L1"], - powertrip: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - pursuit: ["1L1"], - quickattack: ["1L1"], - quickguard: ["1L1"], - raindance: ["1L1"], - razorwind: ["1L1"], - refresh: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - revenge: ["1L1"], - reversal: ["1L1"], - roar: ["1L1"], - rockclimb: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - scratch: ["1L1"], - secretpower: ["1L1"], - seedbomb: ["1L1"], - seismictoss: ["1L1"], - shadowball: ["1L1"], - shadowclaw: ["1L1"], - shockwave: ["1L1"], - slash: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - switcheroo: ["1L1"], - swordsdance: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - throatchop: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderpunch: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - upperhand: ["1L1"], - waterpulse: ["1L1"], - workup: ["1L1"], - xscissor: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 3, level: 18, moves: ["1L1"], pokeball: "pokeball"}, - {generation: 3, level: 10, gender: "M", moves: ["1L1"], pokeball: "pokeball"}, - {generation: 3, level: 28, moves: ["1L1"]}, - ], - }, - seviper: { - learnset: { - acidspray: ["1L1"], - aquatail: ["1L1"], - assurance: ["1L1"], - attract: ["1L1"], - belch: ["1L1"], - bind: ["1L1"], - bite: ["1L1"], - bodyslam: ["1L1"], - breakingswipe: ["1L1"], - brickbreak: ["1L1"], - brutalswing: ["1L1"], - bulldoze: ["1L1"], - captivate: ["1L1"], - coil: ["1L1"], - confide: ["1L1"], - crunch: ["1L1"], - curse: ["1L1"], - darkpulse: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dragontail: ["1L1"], - earthquake: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - feint: ["1L1"], - finalgambit: ["1L1"], - firefang: ["1L1"], - flamethrower: ["1L1"], - frustration: ["1L1"], - furycutter: ["1L1"], - gastroacid: ["1L1"], - gigadrain: ["1L1"], - gigaimpact: ["1L1"], - glare: ["1L1"], - gunkshot: ["1L1"], - haze: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - icefang: ["1L1"], - infestation: ["1L1"], - ironhead: ["1L1"], - irontail: ["1L1"], - knockoff: ["1L1"], - lashout: ["1L1"], - lick: ["1L1"], - mimic: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - nightslash: ["1L1"], - payback: ["1L1"], - poisonfang: ["1L1"], - poisonjab: ["1L1"], - poisontail: ["1L1"], - pounce: ["1L1"], - protect: ["1L1"], - psychicfangs: ["1L1"], - punishment: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - reversal: ["1L1"], - rocksmash: ["1L1"], - round: ["1L1"], - scaryface: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - seedbomb: ["1L1"], - skittersmack: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - sludgewave: ["1L1"], - snarl: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - spitup: ["1L1"], - stockpile: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swallow: ["1L1"], - swift: ["1L1"], - switcheroo: ["1L1"], - swordsdance: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - throatchop: ["1L1"], - thunderfang: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - venomdrench: ["1L1"], - venoshock: ["1L1"], - wrap: ["1L1"], - wringout: ["1L1"], - xscissor: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 3, level: 18, moves: ["1L1"], pokeball: "pokeball"}, - {generation: 3, level: 30, moves: ["1L1"], pokeball: "pokeball"}, - {generation: 3, level: 10, gender: "M", moves: ["1L1"], pokeball: "pokeball"}, - ], - }, - lunatone: { - learnset: { - acrobatics: ["1L1"], - allyswitch: ["1L1"], - ancientpower: ["1L1"], - batonpass: ["1L1"], - blizzard: ["1L1"], - bodyslam: ["1L1"], - bulldoze: ["1L1"], - calmmind: ["1L1"], - chargebeam: ["1L1"], - confide: ["1L1"], - confusion: ["1L1"], - cosmicpower: ["1L1"], - defensecurl: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dreameater: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - embargo: ["1L1"], - endure: ["1L1"], - explosion: ["1L1"], - facade: ["1L1"], - flash: ["1L1"], - frustration: ["1L1"], - futuresight: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - gravity: ["1L1"], - gyroball: ["1L1"], - hail: ["1L1"], - harden: ["1L1"], - healblock: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - hypnosis: ["1L1"], - icebeam: ["1L1"], - icywind: ["1L1"], - ironhead: ["1L1"], - laserfocus: ["1L1"], - lightscreen: ["1L1"], - magiccoat: ["1L1"], - magicroom: ["1L1"], - meteorbeam: ["1L1"], - mimic: ["1L1"], - moonblast: ["1L1"], - moonlight: ["1L1"], - nastyplot: ["1L1"], - naturalgift: ["1L1"], - painsplit: ["1L1"], - powergem: ["1L1"], - powerswap: ["1L1"], - protect: ["1L1"], - psychic: ["1L1"], - psychicterrain: ["1L1"], - psychup: ["1L1"], - psyshock: ["1L1"], - psywave: ["1L1"], - raindance: ["1L1"], - recycle: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rockblast: ["1L1"], - rockpolish: ["1L1"], - rockslide: ["1L1"], - rockthrow: ["1L1"], - rocktomb: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - sandstorm: ["1L1"], - sandtomb: ["1L1"], - secretpower: ["1L1"], - selfdestruct: ["1L1"], - shadowball: ["1L1"], - signalbeam: ["1L1"], - skillswap: ["1L1"], - sleeptalk: ["1L1"], - smackdown: ["1L1"], - snore: ["1L1"], - stealthrock: ["1L1"], - stompingtantrum: ["1L1"], - stoneedge: ["1L1"], - storedpower: ["1L1"], - substitute: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - tackle: ["1L1"], - telekinesis: ["1L1"], - toxic: ["1L1"], - trickroom: ["1L1"], - weatherball: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 3, level: 10, moves: ["1L1"], pokeball: "pokeball"}, - {generation: 3, level: 25, moves: ["1L1"]}, - {generation: 7, level: 30, moves: ["1L1"], pokeball: "cherishball"}, - ], - }, - solrock: { - learnset: { - acrobatics: ["1L1"], - allyswitch: ["1L1"], - ancientpower: ["1L1"], - batonpass: ["1L1"], - bodyslam: ["1L1"], - bulldoze: ["1L1"], - calmmind: ["1L1"], - chargebeam: ["1L1"], - confide: ["1L1"], - confusion: ["1L1"], - cosmicpower: ["1L1"], - defensecurl: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dreameater: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - embargo: ["1L1"], - endure: ["1L1"], - explosion: ["1L1"], - facade: ["1L1"], - fireblast: ["1L1"], - firespin: ["1L1"], - flamethrower: ["1L1"], - flareblitz: ["1L1"], - flash: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - gravity: ["1L1"], - gyroball: ["1L1"], - harden: ["1L1"], - healblock: ["1L1"], - heatwave: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - hypnosis: ["1L1"], - incinerate: ["1L1"], - irondefense: ["1L1"], - ironhead: ["1L1"], - laserfocus: ["1L1"], - lightscreen: ["1L1"], - magiccoat: ["1L1"], - meteorbeam: ["1L1"], - mimic: ["1L1"], - morningsun: ["1L1"], - naturalgift: ["1L1"], - overheat: ["1L1"], - painsplit: ["1L1"], - powerswap: ["1L1"], - protect: ["1L1"], - psychic: ["1L1"], - psychicterrain: ["1L1"], - psychup: ["1L1"], - psyshock: ["1L1"], - psywave: ["1L1"], - raindance: ["1L1"], - recycle: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rockblast: ["1L1"], - rockpolish: ["1L1"], - rockslide: ["1L1"], - rockthrow: ["1L1"], - rocktomb: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - sandstorm: ["1L1"], - sandtomb: ["1L1"], - secretpower: ["1L1"], - selfdestruct: ["1L1"], - shadowball: ["1L1"], - signalbeam: ["1L1"], - skillswap: ["1L1"], - sleeptalk: ["1L1"], - smackdown: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - stealthrock: ["1L1"], - stompingtantrum: ["1L1"], - stoneedge: ["1L1"], - storedpower: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - swordsdance: ["1L1"], - tackle: ["1L1"], - telekinesis: ["1L1"], - toxic: ["1L1"], - trickroom: ["1L1"], - weatherball: ["1L1"], - willowisp: ["1L1"], - wonderroom: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 3, level: 10, moves: ["1L1"], pokeball: "pokeball"}, - {generation: 3, level: 41, moves: ["1L1"]}, - {generation: 7, level: 30, moves: ["1L1"], pokeball: "cherishball"}, - ], - }, - barboach: { - learnset: { - amnesia: ["1L1"], - aquatail: ["1L1"], - attract: ["1L1"], - blizzard: ["1L1"], - bounce: ["1L1"], - bulldoze: ["1L1"], - captivate: ["1L1"], - chillingwater: ["1L1"], - confide: ["1L1"], - dive: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dragondance: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fissure: ["1L1"], - flail: ["1L1"], - frustration: ["1L1"], - futuresight: ["1L1"], - hail: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - highhorsepower: ["1L1"], - hydropump: ["1L1"], - icebeam: ["1L1"], - icywind: ["1L1"], - liquidation: ["1L1"], - magnitude: ["1L1"], - mimic: ["1L1"], - mudbomb: ["1L1"], - muddywater: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - mudsport: ["1L1"], - naturalgift: ["1L1"], - outrage: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rockslide: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - sandstorm: ["1L1"], - scald: ["1L1"], - secretpower: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - spark: ["1L1"], - stealthrock: ["1L1"], - stompingtantrum: ["1L1"], - stoneedge: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thrash: ["1L1"], - toxic: ["1L1"], - waterfall: ["1L1"], - watergun: ["1L1"], - waterpulse: ["1L1"], - watersport: ["1L1"], - whirlpool: ["1L1"], - zenheadbutt: ["1L1"], - }, - }, - whiscash: { - learnset: { - amnesia: ["1L1"], - aquatail: ["1L1"], - attract: ["1L1"], - belch: ["1L1"], - blizzard: ["1L1"], - bodyslam: ["1L1"], - bounce: ["1L1"], - bulldoze: ["1L1"], - captivate: ["1L1"], - chillingwater: ["1L1"], - confide: ["1L1"], - curse: ["1L1"], - dive: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dragondance: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fissure: ["1L1"], - frustration: ["1L1"], - futuresight: ["1L1"], - gigaimpact: ["1L1"], - hail: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - highhorsepower: ["1L1"], - hydropump: ["1L1"], - hyperbeam: ["1L1"], - icebeam: ["1L1"], - icywind: ["1L1"], - liquidation: ["1L1"], - magnitude: ["1L1"], - mimic: ["1L1"], - mudbomb: ["1L1"], - muddywater: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - mudsport: ["1L1"], - naturalgift: ["1L1"], - outrage: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - sandstorm: ["1L1"], - sandtomb: ["1L1"], - scald: ["1L1"], - scaryface: ["1L1"], - secretpower: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - spikes: ["1L1"], - stealthrock: ["1L1"], - stompingtantrum: ["1L1"], - stoneedge: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thrash: ["1L1"], - tickle: ["1L1"], - toxic: ["1L1"], - uproar: ["1L1"], - waterfall: ["1L1"], - watergun: ["1L1"], - waterpulse: ["1L1"], - watersport: ["1L1"], - weatherball: ["1L1"], - whirlpool: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 4, level: 51, gender: "F", nature: "Gentle", abilities: ["1L1"], moves: ["1L1"], pokeball: "cherishball"}, - ], - encounters: [ - {generation: 4, level: 10}, - {generation: 7, level: 10}, - ], - }, - corphish: { - learnset: { - aerialace: ["1L1"], - ancientpower: ["1L1"], - aquajet: ["1L1"], - attract: ["1L1"], - blizzard: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - bubble: ["1L1"], - bubblebeam: ["1L1"], - captivate: ["1L1"], - chillingwater: ["1L1"], - chipaway: ["1L1"], - confide: ["1L1"], - counter: ["1L1"], - crabhammer: ["1L1"], - crunch: ["1L1"], - cut: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doublehit: ["1L1"], - doubleteam: ["1L1"], - dragondance: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - falseswipe: ["1L1"], - fling: ["1L1"], - frustration: ["1L1"], - furycutter: ["1L1"], - guillotine: ["1L1"], - hail: ["1L1"], - harden: ["1L1"], - hiddenpower: ["1L1"], - honeclaws: ["1L1"], - hydropump: ["1L1"], - icebeam: ["1L1"], - icywind: ["1L1"], - irondefense: ["1L1"], - knockoff: ["1L1"], - leer: ["1L1"], - liquidation: ["1L1"], - metalclaw: ["1L1"], - mimic: ["1L1"], - muddywater: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - mudsport: ["1L1"], - naturalgift: ["1L1"], - nightslash: ["1L1"], - payback: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - razorshell: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - scald: ["1L1"], - secretpower: ["1L1"], - slash: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - snore: ["1L1"], - spite: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - superpower: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - switcheroo: ["1L1"], - swordsdance: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - toxic: ["1L1"], - trumpcard: ["1L1"], - visegrip: ["1L1"], - waterfall: ["1L1"], - watergun: ["1L1"], - waterpulse: ["1L1"], - watersport: ["1L1"], - whirlpool: ["1L1"], - xscissor: ["1L1"], - }, - eventData: [ - {generation: 3, level: 5, shiny: 1, moves: ["1L1"], pokeball: "pokeball", emeraldEventEgg: true}, - ], - }, - crawdaunt: { - learnset: { - aerialace: ["1L1"], - ancientpower: ["1L1"], - attract: ["1L1"], - avalanche: ["1L1"], - blizzard: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - bubble: ["1L1"], - bubblebeam: ["1L1"], - captivate: ["1L1"], - chillingwater: ["1L1"], - closecombat: ["1L1"], - confide: ["1L1"], - counter: ["1L1"], - crabhammer: ["1L1"], - crunch: ["1L1"], - cut: ["1L1"], - darkpulse: ["1L1"], - dig: ["1L1"], - dive: ["1L1"], - doubleedge: ["1L1"], - doublehit: ["1L1"], - doubleteam: ["1L1"], - dragondance: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - falseswipe: ["1L1"], - fling: ["1L1"], - frustration: ["1L1"], - furycutter: ["1L1"], - gigaimpact: ["1L1"], - guillotine: ["1L1"], - hail: ["1L1"], - harden: ["1L1"], - hardpress: ["1L1"], - hiddenpower: ["1L1"], - honeclaws: ["1L1"], - hydropump: ["1L1"], - hyperbeam: ["1L1"], - icebeam: ["1L1"], - icywind: ["1L1"], - irondefense: ["1L1"], - knockoff: ["1L1"], - lashout: ["1L1"], - leer: ["1L1"], - liquidation: ["1L1"], - metalclaw: ["1L1"], - mimic: ["1L1"], - muddywater: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - nastyplot: ["1L1"], - naturalgift: ["1L1"], - naturepower: ["1L1"], - nightslash: ["1L1"], - payback: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - razorshell: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - revenge: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - scald: ["1L1"], - scaryface: ["1L1"], - secretpower: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - sludgewave: ["1L1"], - snarl: ["1L1"], - snore: ["1L1"], - spite: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - superpower: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - swordsdance: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - toxic: ["1L1"], - visegrip: ["1L1"], - waterfall: ["1L1"], - watergun: ["1L1"], - waterpulse: ["1L1"], - whirlpool: ["1L1"], - xscissor: ["1L1"], - }, - eventData: [ - {generation: 3, level: 100, moves: ["1L1"], pokeball: "pokeball"}, - {generation: 3, level: 50, moves: ["1L1"], pokeball: "pokeball"}, - ], - encounters: [ - {generation: 7, level: 10}, - ], - }, - baltoy: { - learnset: { - allyswitch: ["1L1"], - ancientpower: ["1L1"], - bulldoze: ["1L1"], - calmmind: ["1L1"], - chargebeam: ["1L1"], - confide: ["1L1"], - confusion: ["1L1"], - cosmicpower: ["1L1"], - dazzlinggleam: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dreameater: ["1L1"], - drillrun: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - eerieimpulse: ["1L1"], - endure: ["1L1"], - expandingforce: ["1L1"], - explosion: ["1L1"], - extrasensory: ["1L1"], - facade: ["1L1"], - flash: ["1L1"], - frustration: ["1L1"], - grassknot: ["1L1"], - gravity: ["1L1"], - guardsplit: ["1L1"], - guardswap: ["1L1"], - gyroball: ["1L1"], - harden: ["1L1"], - headbutt: ["1L1"], - healblock: ["1L1"], - hex: ["1L1"], - hiddenpower: ["1L1"], - icebeam: ["1L1"], - imprison: ["1L1"], - lightscreen: ["1L1"], - magiccoat: ["1L1"], - mimic: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - powersplit: ["1L1"], - powerswap: ["1L1"], - powertrick: ["1L1"], - protect: ["1L1"], - psybeam: ["1L1"], - psychic: ["1L1"], - psychicterrain: ["1L1"], - psychup: ["1L1"], - psyshock: ["1L1"], - raindance: ["1L1"], - rapidspin: ["1L1"], - recycle: ["1L1"], - reflect: ["1L1"], - refresh: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rockpolish: ["1L1"], - rockslide: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - sandstorm: ["1L1"], - sandtomb: ["1L1"], - scorchingsands: ["1L1"], - secretpower: ["1L1"], - selfdestruct: ["1L1"], - shadowball: ["1L1"], - signalbeam: ["1L1"], - skillswap: ["1L1"], - sleeptalk: ["1L1"], - smackdown: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - stealthrock: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - telekinesis: ["1L1"], - toxic: ["1L1"], - trick: ["1L1"], - trickroom: ["1L1"], - wonderroom: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 3, level: 17, moves: ["1L1"]}, - ], - }, - claydol: { - learnset: { - allyswitch: ["1L1"], - ancientpower: ["1L1"], - bodypress: ["1L1"], - bulldoze: ["1L1"], - calmmind: ["1L1"], - chargebeam: ["1L1"], - confide: ["1L1"], - confusion: ["1L1"], - cosmicpower: ["1L1"], - dazzlinggleam: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dreameater: ["1L1"], - drillrun: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - eerieimpulse: ["1L1"], - endure: ["1L1"], - expandingforce: ["1L1"], - explosion: ["1L1"], - extrasensory: ["1L1"], - facade: ["1L1"], - flash: ["1L1"], - frustration: ["1L1"], - futuresight: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - gravity: ["1L1"], - guardsplit: ["1L1"], - guardswap: ["1L1"], - gyroball: ["1L1"], - harden: ["1L1"], - headbutt: ["1L1"], - healblock: ["1L1"], - hex: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - icebeam: ["1L1"], - imprison: ["1L1"], - irondefense: ["1L1"], - lightscreen: ["1L1"], - magiccoat: ["1L1"], - mimic: ["1L1"], - mudslap: ["1L1"], - nastyplot: ["1L1"], - naturalgift: ["1L1"], - powersplit: ["1L1"], - powerswap: ["1L1"], - powertrick: ["1L1"], - protect: ["1L1"], - psybeam: ["1L1"], - psychic: ["1L1"], - psychicterrain: ["1L1"], - psychup: ["1L1"], - psyshock: ["1L1"], - raindance: ["1L1"], - rapidspin: ["1L1"], - recycle: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rockpolish: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - sandstorm: ["1L1"], - sandtomb: ["1L1"], - scorchingsands: ["1L1"], - secretpower: ["1L1"], - selfdestruct: ["1L1"], - shadowball: ["1L1"], - signalbeam: ["1L1"], - skillswap: ["1L1"], - sleeptalk: ["1L1"], - smackdown: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - stealthrock: ["1L1"], - stoneedge: ["1L1"], - storedpower: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - telekinesis: ["1L1"], - teleport: ["1L1"], - toxic: ["1L1"], - trick: ["1L1"], - trickroom: ["1L1"], - wonderroom: ["1L1"], - zenheadbutt: ["1L1"], - }, - }, - lileep: { - learnset: { - acid: ["1L1"], - amnesia: ["1L1"], - ancientpower: ["1L1"], - astonish: ["1L1"], - attract: ["1L1"], - barrier: ["1L1"], - bind: ["1L1"], - bodyslam: ["1L1"], - brine: ["1L1"], - bulletseed: ["1L1"], - captivate: ["1L1"], - confide: ["1L1"], - confuseray: ["1L1"], - constrict: ["1L1"], - curse: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - earthpower: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - flash: ["1L1"], - frustration: ["1L1"], - gastroacid: ["1L1"], - gigadrain: ["1L1"], - grassknot: ["1L1"], - hiddenpower: ["1L1"], - infestation: ["1L1"], - ingrain: ["1L1"], - megadrain: ["1L1"], - meteorbeam: ["1L1"], - mimic: ["1L1"], - mirrorcoat: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - painsplit: ["1L1"], - protect: ["1L1"], - psychup: ["1L1"], - recover: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rockblast: ["1L1"], - rockpolish: ["1L1"], - rockslide: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - sandstorm: ["1L1"], - secretpower: ["1L1"], - seedbomb: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - smackdown: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - spitup: ["1L1"], - stealthrock: ["1L1"], - stockpile: ["1L1"], - stringshot: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swallow: ["1L1"], - swordsdance: ["1L1"], - synthesis: ["1L1"], - tickle: ["1L1"], - toxic: ["1L1"], - worryseed: ["1L1"], - wrap: ["1L1"], - wringout: ["1L1"], - }, - eventData: [ - {generation: 5, level: 15, gender: "M", moves: ["1L1"], pokeball: "cherishball"}, - ], - }, - cradily: { - learnset: { - acid: ["1L1"], - amnesia: ["1L1"], - ancientpower: ["1L1"], - astonish: ["1L1"], - attract: ["1L1"], - bind: ["1L1"], - block: ["1L1"], - bodyslam: ["1L1"], - brine: ["1L1"], - bulldoze: ["1L1"], - bulletseed: ["1L1"], - captivate: ["1L1"], - confide: ["1L1"], - confuseray: ["1L1"], - constrict: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - flash: ["1L1"], - frustration: ["1L1"], - gastroacid: ["1L1"], - gigadrain: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - grassyterrain: ["1L1"], - headbutt: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - infestation: ["1L1"], - ingrain: ["1L1"], - leechseed: ["1L1"], - megadrain: ["1L1"], - meteorbeam: ["1L1"], - mimic: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - painsplit: ["1L1"], - powerwhip: ["1L1"], - protect: ["1L1"], - psychup: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rockblast: ["1L1"], - rockpolish: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - sandstorm: ["1L1"], - secretpower: ["1L1"], - seedbomb: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - sludgewave: ["1L1"], - smackdown: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - spitup: ["1L1"], - stealthrock: ["1L1"], - stockpile: ["1L1"], - stoneedge: ["1L1"], - strength: ["1L1"], - stringshot: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swallow: ["1L1"], - swordsdance: ["1L1"], - synthesis: ["1L1"], - toxic: ["1L1"], - worryseed: ["1L1"], - wrap: ["1L1"], - wringout: ["1L1"], - }, - }, - anorith: { - learnset: { - aerialace: ["1L1"], - ancientpower: ["1L1"], - aquajet: ["1L1"], - attract: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - brine: ["1L1"], - bugbite: ["1L1"], - captivate: ["1L1"], - confide: ["1L1"], - crosspoison: ["1L1"], - crushclaw: ["1L1"], - curse: ["1L1"], - cut: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - earthpower: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - falseswipe: ["1L1"], - frustration: ["1L1"], - furycutter: ["1L1"], - harden: ["1L1"], - headbutt: ["1L1"], - hiddenpower: ["1L1"], - honeclaws: ["1L1"], - irondefense: ["1L1"], - knockoff: ["1L1"], - metalclaw: ["1L1"], - meteorbeam: ["1L1"], - mimic: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - mudsport: ["1L1"], - naturalgift: ["1L1"], - protect: ["1L1"], - rapidspin: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rockblast: ["1L1"], - rockpolish: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - sandattack: ["1L1"], - sandstorm: ["1L1"], - scratch: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - slash: ["1L1"], - sleeptalk: ["1L1"], - smackdown: ["1L1"], - snore: ["1L1"], - stealthrock: ["1L1"], - stringshot: ["1L1"], - strugglebug: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swordsdance: ["1L1"], - toxic: ["1L1"], - watergun: ["1L1"], - waterpulse: ["1L1"], - xscissor: ["1L1"], - }, - eventData: [ - {generation: 5, level: 15, gender: "M", moves: ["1L1"], pokeball: "cherishball"}, - ], - }, - armaldo: { - learnset: { - aerialace: ["1L1"], - ancientpower: ["1L1"], - aquatail: ["1L1"], - attract: ["1L1"], - block: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - brine: ["1L1"], - brutalswing: ["1L1"], - bugbite: ["1L1"], - bulldoze: ["1L1"], - captivate: ["1L1"], - confide: ["1L1"], - crosspoison: ["1L1"], - crushclaw: ["1L1"], - cut: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - falseswipe: ["1L1"], - flashcannon: ["1L1"], - frustration: ["1L1"], - furycutter: ["1L1"], - gigaimpact: ["1L1"], - harden: ["1L1"], - headbutt: ["1L1"], - hiddenpower: ["1L1"], - honeclaws: ["1L1"], - hyperbeam: ["1L1"], - irondefense: ["1L1"], - irontail: ["1L1"], - knockoff: ["1L1"], - liquidation: ["1L1"], - lowkick: ["1L1"], - metalclaw: ["1L1"], - meteorbeam: ["1L1"], - mimic: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - mudsport: ["1L1"], - naturalgift: ["1L1"], - protect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rockblast: ["1L1"], - rockpolish: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - sandstorm: ["1L1"], - scratch: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - seismictoss: ["1L1"], - shadowclaw: ["1L1"], - slash: ["1L1"], - sleeptalk: ["1L1"], - smackdown: ["1L1"], - snore: ["1L1"], - stealthrock: ["1L1"], - stompingtantrum: ["1L1"], - stoneedge: ["1L1"], - strength: ["1L1"], - stringshot: ["1L1"], - strugglebug: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - superpower: ["1L1"], - swagger: ["1L1"], - swordsdance: ["1L1"], - toxic: ["1L1"], - watergun: ["1L1"], - waterpulse: ["1L1"], - xscissor: ["1L1"], - }, - }, - feebas: { - learnset: { - attract: ["1L1"], - blizzard: ["1L1"], - brine: ["1L1"], - captivate: ["1L1"], - chillingwater: ["1L1"], - confide: ["1L1"], - confuseray: ["1L1"], - dive: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dragonbreath: ["1L1"], - dragonpulse: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - flail: ["1L1"], - frustration: ["1L1"], - hail: ["1L1"], - haze: ["1L1"], - hiddenpower: ["1L1"], - hypnosis: ["1L1"], - icebeam: ["1L1"], - icywind: ["1L1"], - irontail: ["1L1"], - lightscreen: ["1L1"], - mimic: ["1L1"], - mirrorcoat: ["1L1"], - mist: ["1L1"], - muddywater: ["1L1"], - mudshot: ["1L1"], - mudsport: ["1L1"], - naturalgift: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - round: ["1L1"], - scald: ["1L1"], - scaleshot: ["1L1"], - secretpower: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - splash: ["1L1"], - substitute: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - tackle: ["1L1"], - terablast: ["1L1"], - tickle: ["1L1"], - toxic: ["1L1"], - waterfall: ["1L1"], - waterpulse: ["1L1"], - whirlpool: ["1L1"], - }, - eventData: [ - {generation: 4, level: 5, gender: "F", nature: "Calm", moves: ["1L1"], pokeball: "cherishball"}, - ], - }, - milotic: { - learnset: { - alluringvoice: ["1L1"], - aquaring: ["1L1"], - aquatail: ["1L1"], - attract: ["1L1"], - avalanche: ["1L1"], - bind: ["1L1"], - blizzard: ["1L1"], - bodyslam: ["1L1"], - breakingswipe: ["1L1"], - brine: ["1L1"], - brutalswing: ["1L1"], - bulldoze: ["1L1"], - captivate: ["1L1"], - chillingwater: ["1L1"], - coil: ["1L1"], - confide: ["1L1"], - confuseray: ["1L1"], - disarmingvoice: ["1L1"], - dive: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dragoncheer: ["1L1"], - dragondance: ["1L1"], - dragonpulse: ["1L1"], - dragontail: ["1L1"], - drainingkiss: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - flail: ["1L1"], - flipturn: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - hail: ["1L1"], - haze: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hydropump: ["1L1"], - hyperbeam: ["1L1"], - icebeam: ["1L1"], - icywind: ["1L1"], - imprison: ["1L1"], - ironhead: ["1L1"], - irontail: ["1L1"], - laserfocus: ["1L1"], - lifedew: ["1L1"], - lightscreen: ["1L1"], - magiccoat: ["1L1"], - mimic: ["1L1"], - mirrorcoat: ["1L1"], - muddywater: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - protect: ["1L1"], - psychup: ["1L1"], - raindance: ["1L1"], - recover: ["1L1"], - refresh: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - scald: ["1L1"], - scaleshot: ["1L1"], - secretpower: ["1L1"], - skittersmack: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - splash: ["1L1"], - substitute: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - toxic: ["1L1"], - tripleaxel: ["1L1"], - twister: ["1L1"], - waterfall: ["1L1"], - watergun: ["1L1"], - waterpulse: ["1L1"], - watersport: ["1L1"], - weatherball: ["1L1"], - whirlpool: ["1L1"], - wrap: ["1L1"], - }, - eventData: [ - {generation: 3, level: 35, moves: ["1L1"], pokeball: "pokeball"}, - {generation: 4, level: 50, gender: "F", nature: "Bold", moves: ["1L1"], pokeball: "cherishball"}, - {generation: 4, level: 50, shiny: true, gender: "M", nature: "Timid", moves: ["1L1"], pokeball: "cherishball"}, - {generation: 5, level: 50, shiny: 1, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 5, level: 58, gender: "M", nature: "Lax", ivs: {hp: 30, atk: 30, def: 30, spa: 30, spd: 30, spe: 30}, moves: ["1L1"], pokeball: "cherishball"}, - ], - }, - castform: { - learnset: { - amnesia: ["1L1"], - attract: ["1L1"], - avalanche: ["1L1"], - blizzard: ["1L1"], - bodyslam: ["1L1"], - captivate: ["1L1"], - clearsmog: ["1L1"], - confide: ["1L1"], - cosmicpower: ["1L1"], - defensecurl: ["1L1"], - defog: ["1L1"], - disable: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - ember: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - fireblast: ["1L1"], - flamethrower: ["1L1"], - flash: ["1L1"], - frustration: ["1L1"], - futuresight: ["1L1"], - guardswap: ["1L1"], - hail: ["1L1"], - headbutt: ["1L1"], - hex: ["1L1"], - hiddenpower: ["1L1"], - hurricane: ["1L1"], - hydropump: ["1L1"], - icebeam: ["1L1"], - icywind: ["1L1"], - incinerate: ["1L1"], - lastresort: ["1L1"], - luckychant: ["1L1"], - mimic: ["1L1"], - naturalgift: ["1L1"], - ominouswind: ["1L1"], - powdersnow: ["1L1"], - protect: ["1L1"], - psychup: ["1L1"], - raindance: ["1L1"], - reflecttype: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - round: ["1L1"], - sandstorm: ["1L1"], - scald: ["1L1"], - secretpower: ["1L1"], - shadowball: ["1L1"], - shockwave: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - tackle: ["1L1"], - tailwind: ["1L1"], - thief: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - watergun: ["1L1"], - waterpulse: ["1L1"], - weatherball: ["1L1"], - workup: ["1L1"], - }, - }, - kecleon: { - learnset: { - aerialace: ["1L1"], - afteryou: ["1L1"], - ancientpower: ["1L1"], - aquatail: ["1L1"], - astonish: ["1L1"], - attract: ["1L1"], - bind: ["1L1"], - blizzard: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - camouflage: ["1L1"], - captivate: ["1L1"], - chargebeam: ["1L1"], - confide: ["1L1"], - counter: ["1L1"], - cut: ["1L1"], - defensecurl: ["1L1"], - dig: ["1L1"], - disable: ["1L1"], - dizzypunch: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - drainpunch: ["1L1"], - dynamicpunch: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fakeout: ["1L1"], - feint: ["1L1"], - feintattack: ["1L1"], - fireblast: ["1L1"], - firepunch: ["1L1"], - flamethrower: ["1L1"], - flash: ["1L1"], - fling: ["1L1"], - focuspunch: ["1L1"], - foulplay: ["1L1"], - frustration: ["1L1"], - furycutter: ["1L1"], - furyswipes: ["1L1"], - grassknot: ["1L1"], - headbutt: ["1L1"], - hiddenpower: ["1L1"], - honeclaws: ["1L1"], - icebeam: ["1L1"], - icepunch: ["1L1"], - icywind: ["1L1"], - incinerate: ["1L1"], - irontail: ["1L1"], - knockoff: ["1L1"], - lastresort: ["1L1"], - lick: ["1L1"], - lowkick: ["1L1"], - magiccoat: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - metronome: ["1L1"], - mimic: ["1L1"], - mudslap: ["1L1"], - nastyplot: ["1L1"], - naturalgift: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - psybeam: ["1L1"], - psychup: ["1L1"], - raindance: ["1L1"], - recover: ["1L1"], - recycle: ["1L1"], - reflecttype: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - roleplay: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - scratch: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - seismictoss: ["1L1"], - shadowball: ["1L1"], - shadowclaw: ["1L1"], - shadowsneak: ["1L1"], - shockwave: ["1L1"], - skillswap: ["1L1"], - slash: ["1L1"], - sleeptalk: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - stealthrock: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - synchronoise: ["1L1"], - tailwhip: ["1L1"], - thief: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderpunch: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - trick: ["1L1"], - trickroom: ["1L1"], - waterpulse: ["1L1"], - wonderroom: ["1L1"], - workup: ["1L1"], - }, - }, - shuppet: { - learnset: { - allyswitch: ["1L1"], - astonish: ["1L1"], - attract: ["1L1"], - bodyslam: ["1L1"], - calmmind: ["1L1"], - captivate: ["1L1"], - chargebeam: ["1L1"], - confide: ["1L1"], - confuseray: ["1L1"], - curse: ["1L1"], - darkpulse: ["1L1"], - dazzlinggleam: ["1L1"], - destinybond: ["1L1"], - disable: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dreameater: ["1L1"], - embargo: ["1L1"], - encore: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - feintattack: ["1L1"], - flash: ["1L1"], - foresight: ["1L1"], - foulplay: ["1L1"], - frustration: ["1L1"], - grudge: ["1L1"], - gunkshot: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hex: ["1L1"], - hiddenpower: ["1L1"], - icywind: ["1L1"], - imprison: ["1L1"], - knockoff: ["1L1"], - lashout: ["1L1"], - magiccoat: ["1L1"], - magicroom: ["1L1"], - metronome: ["1L1"], - mimic: ["1L1"], - nastyplot: ["1L1"], - naturalgift: ["1L1"], - nightmare: ["1L1"], - nightshade: ["1L1"], - ominouswind: ["1L1"], - painsplit: ["1L1"], - payback: ["1L1"], - phantomforce: ["1L1"], - poltergeist: ["1L1"], - pounce: ["1L1"], - protect: ["1L1"], - psybeam: ["1L1"], - psychic: ["1L1"], - psychup: ["1L1"], - pursuit: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roleplay: ["1L1"], - round: ["1L1"], - scaryface: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - shadowball: ["1L1"], - shadowsneak: ["1L1"], - shockwave: ["1L1"], - skillswap: ["1L1"], - skittersmack: ["1L1"], - sleeptalk: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - spite: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - taunt: ["1L1"], - telekinesis: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderwave: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - trick: ["1L1"], - trickroom: ["1L1"], - willowisp: ["1L1"], - }, - eventData: [ - {generation: 3, level: 45, abilities: ["1L1"], moves: ["1L1"], pokeball: "pokeball"}, - ], - }, - banette: { - learnset: { - allyswitch: ["1L1"], - attract: ["1L1"], - bodyslam: ["1L1"], - burningjealousy: ["1L1"], - calmmind: ["1L1"], - captivate: ["1L1"], - chargebeam: ["1L1"], - confide: ["1L1"], - confuseray: ["1L1"], - cottonguard: ["1L1"], - curse: ["1L1"], - darkpulse: ["1L1"], - dazzlinggleam: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dreameater: ["1L1"], - embargo: ["1L1"], - encore: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - feintattack: ["1L1"], - flash: ["1L1"], - fling: ["1L1"], - foulplay: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - grudge: ["1L1"], - gunkshot: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hex: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - icywind: ["1L1"], - imprison: ["1L1"], - infestation: ["1L1"], - knockoff: ["1L1"], - lashout: ["1L1"], - magiccoat: ["1L1"], - magicroom: ["1L1"], - metronome: ["1L1"], - mimic: ["1L1"], - mudslap: ["1L1"], - nastyplot: ["1L1"], - naturalgift: ["1L1"], - nightmare: ["1L1"], - nightshade: ["1L1"], - ominouswind: ["1L1"], - painsplit: ["1L1"], - payback: ["1L1"], - phantomforce: ["1L1"], - poltergeist: ["1L1"], - pounce: ["1L1"], - protect: ["1L1"], - psybeam: ["1L1"], - psychic: ["1L1"], - psychup: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roleplay: ["1L1"], - round: ["1L1"], - scaryface: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - shadowball: ["1L1"], - shadowclaw: ["1L1"], - shadowsneak: ["1L1"], - shockwave: ["1L1"], - skillswap: ["1L1"], - skittersmack: ["1L1"], - sleeptalk: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - spite: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swordsdance: ["1L1"], - taunt: ["1L1"], - telekinesis: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - throatchop: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderwave: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - trick: ["1L1"], - trickroom: ["1L1"], - willowisp: ["1L1"], - }, - eventData: [ - {generation: 3, level: 37, abilities: ["1L1"], moves: ["1L1"]}, - {generation: 5, level: 37, gender: "F", isHidden: true, moves: ["1L1"]}, - ], - encounters: [ - {generation: 5, level: 32}, - ], - }, - duskull: { - learnset: { - allyswitch: ["1L1"], - astonish: ["1L1"], - attract: ["1L1"], - blizzard: ["1L1"], - bodyslam: ["1L1"], - calmmind: ["1L1"], - captivate: ["1L1"], - chargebeam: ["1L1"], - confide: ["1L1"], - confuseray: ["1L1"], - curse: ["1L1"], - darkpulse: ["1L1"], - destinybond: ["1L1"], - disable: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dreameater: ["1L1"], - embargo: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - feintattack: ["1L1"], - flash: ["1L1"], - fling: ["1L1"], - foresight: ["1L1"], - frustration: ["1L1"], - futuresight: ["1L1"], - gravity: ["1L1"], - grudge: ["1L1"], - haze: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hex: ["1L1"], - hiddenpower: ["1L1"], - icebeam: ["1L1"], - icywind: ["1L1"], - imprison: ["1L1"], - infestation: ["1L1"], - leechlife: ["1L1"], - leer: ["1L1"], - meanlook: ["1L1"], - memento: ["1L1"], - mimic: ["1L1"], - naturalgift: ["1L1"], - nightmare: ["1L1"], - nightshade: ["1L1"], - ominouswind: ["1L1"], - painsplit: ["1L1"], - payback: ["1L1"], - phantomforce: ["1L1"], - poltergeist: ["1L1"], - protect: ["1L1"], - psychic: ["1L1"], - psychup: ["1L1"], - pursuit: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - revenge: ["1L1"], - round: ["1L1"], - secretpower: ["1L1"], - shadowball: ["1L1"], - shadowsneak: ["1L1"], - skillswap: ["1L1"], - skittersmack: ["1L1"], - sleeptalk: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - spite: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - taunt: ["1L1"], - telekinesis: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - trick: ["1L1"], - trickroom: ["1L1"], - willowisp: ["1L1"], - wonderroom: ["1L1"], - }, - eventData: [ - {generation: 3, level: 45, moves: ["1L1"], pokeball: "pokeball"}, - {generation: 3, level: 19, moves: ["1L1"]}, - ], - }, - dusclops: { - learnset: { - allyswitch: ["1L1"], - astonish: ["1L1"], - attract: ["1L1"], - bind: ["1L1"], - blizzard: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - bulldoze: ["1L1"], - calmmind: ["1L1"], - captivate: ["1L1"], - chargebeam: ["1L1"], - confide: ["1L1"], - confuseray: ["1L1"], - counter: ["1L1"], - curse: ["1L1"], - darkpulse: ["1L1"], - disable: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dreameater: ["1L1"], - dynamicpunch: ["1L1"], - earthquake: ["1L1"], - embargo: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - firepunch: ["1L1"], - flash: ["1L1"], - fling: ["1L1"], - focuspunch: ["1L1"], - foresight: ["1L1"], - frustration: ["1L1"], - futuresight: ["1L1"], - gigaimpact: ["1L1"], - gravity: ["1L1"], - haze: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hex: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - icebeam: ["1L1"], - icepunch: ["1L1"], - icywind: ["1L1"], - imprison: ["1L1"], - infestation: ["1L1"], - leechlife: ["1L1"], - leer: ["1L1"], - meanlook: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - metronome: ["1L1"], - mimic: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - nightmare: ["1L1"], - nightshade: ["1L1"], - ominouswind: ["1L1"], - painsplit: ["1L1"], - payback: ["1L1"], - phantomforce: ["1L1"], - poltergeist: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - psychic: ["1L1"], - psychup: ["1L1"], - pursuit: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - revenge: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - secretpower: ["1L1"], - seismictoss: ["1L1"], - shadowball: ["1L1"], - shadowpunch: ["1L1"], - shadowsneak: ["1L1"], - skillswap: ["1L1"], - skittersmack: ["1L1"], - sleeptalk: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - spite: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - taunt: ["1L1"], - telekinesis: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thunderpunch: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - trick: ["1L1"], - trickroom: ["1L1"], - willowisp: ["1L1"], - wonderroom: ["1L1"], - }, - encounters: [ - {generation: 4, level: 16}, - {generation: 6, level: 30}, - ], - }, - dusknoir: { - learnset: { - allyswitch: ["1L1"], - astonish: ["1L1"], - attract: ["1L1"], - bind: ["1L1"], - blizzard: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - bulldoze: ["1L1"], - calmmind: ["1L1"], - captivate: ["1L1"], - chargebeam: ["1L1"], - confide: ["1L1"], - confuseray: ["1L1"], - curse: ["1L1"], - darkestlariat: ["1L1"], - darkpulse: ["1L1"], - destinybond: ["1L1"], - disable: ["1L1"], - doubleteam: ["1L1"], - dreameater: ["1L1"], - earthquake: ["1L1"], - embargo: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - firepunch: ["1L1"], - flash: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - focuspunch: ["1L1"], - foresight: ["1L1"], - frustration: ["1L1"], - futuresight: ["1L1"], - gigaimpact: ["1L1"], - gravity: ["1L1"], - hardpress: ["1L1"], - haze: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hex: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - icebeam: ["1L1"], - icepunch: ["1L1"], - icywind: ["1L1"], - imprison: ["1L1"], - infestation: ["1L1"], - laserfocus: ["1L1"], - leechlife: ["1L1"], - leer: ["1L1"], - meanlook: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - metronome: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - nightshade: ["1L1"], - ominouswind: ["1L1"], - painsplit: ["1L1"], - payback: ["1L1"], - phantomforce: ["1L1"], - poltergeist: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - psychic: ["1L1"], - psychup: ["1L1"], - pursuit: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - revenge: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - secretpower: ["1L1"], - shadowball: ["1L1"], - shadowpunch: ["1L1"], - shadowsneak: ["1L1"], - skillswap: ["1L1"], - skittersmack: ["1L1"], - sleeptalk: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - spite: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - taunt: ["1L1"], - telekinesis: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thunderpunch: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - trick: ["1L1"], - trickroom: ["1L1"], - willowisp: ["1L1"], - wonderroom: ["1L1"], - }, - }, - tropius: { - learnset: { - aerialace: ["1L1"], - aircutter: ["1L1"], - airslash: ["1L1"], - attract: ["1L1"], - bestow: ["1L1"], - bodypress: ["1L1"], - bodyslam: ["1L1"], - brutalswing: ["1L1"], - bulldoze: ["1L1"], - bulletseed: ["1L1"], - calmmind: ["1L1"], - captivate: ["1L1"], - confide: ["1L1"], - curse: ["1L1"], - cut: ["1L1"], - defog: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dragondance: ["1L1"], - dragonhammer: ["1L1"], - dragonpulse: ["1L1"], - dragontail: ["1L1"], - dualwingbeat: ["1L1"], - earthquake: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - flash: ["1L1"], - fly: ["1L1"], - frustration: ["1L1"], - furycutter: ["1L1"], - gigadrain: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - grassyterrain: ["1L1"], - growth: ["1L1"], - gust: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hurricane: ["1L1"], - hyperbeam: ["1L1"], - leafblade: ["1L1"], - leafstorm: ["1L1"], - leaftornado: ["1L1"], - leechseed: ["1L1"], - leer: ["1L1"], - magicalleaf: ["1L1"], - mimic: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - naturepower: ["1L1"], - ominouswind: ["1L1"], - outrage: ["1L1"], - petalblizzard: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - razorleaf: ["1L1"], - razorwind: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roar: ["1L1"], - rocksmash: ["1L1"], - roost: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - secretpower: ["1L1"], - seedbomb: ["1L1"], - silverwind: ["1L1"], - slam: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - solarblade: ["1L1"], - spite: ["1L1"], - steelwing: ["1L1"], - stomp: ["1L1"], - stompingtantrum: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - sweetscent: ["1L1"], - swordsdance: ["1L1"], - synthesis: ["1L1"], - tailwind: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - twister: ["1L1"], - uturn: ["1L1"], - whirlwind: ["1L1"], - wideguard: ["1L1"], - worryseed: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 4, level: 53, gender: "F", nature: "Jolly", abilities: ["1L1"], moves: ["1L1"], pokeball: "cherishball"}, - ], - }, - chingling: { - learnset: { - allyswitch: ["1L1"], - astonish: ["1L1"], - attract: ["1L1"], - batonpass: ["1L1"], - bind: ["1L1"], - calmmind: ["1L1"], - captivate: ["1L1"], - chargebeam: ["1L1"], - confide: ["1L1"], - confusion: ["1L1"], - cosmicpower: ["1L1"], - curse: ["1L1"], - dazzlinggleam: ["1L1"], - disable: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dreameater: ["1L1"], - echoedvoice: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - entrainment: ["1L1"], - facade: ["1L1"], - flash: ["1L1"], - frustration: ["1L1"], - futuresight: ["1L1"], - grassknot: ["1L1"], - gravity: ["1L1"], - growl: ["1L1"], - healbell: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hypervoice: ["1L1"], - hypnosis: ["1L1"], - icywind: ["1L1"], - knockoff: ["1L1"], - lastresort: ["1L1"], - lightscreen: ["1L1"], - magiccoat: ["1L1"], - naturalgift: ["1L1"], - protect: ["1L1"], - psychic: ["1L1"], - psychicnoise: ["1L1"], - psychup: ["1L1"], - psyshock: ["1L1"], - raindance: ["1L1"], - recover: ["1L1"], - recycle: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - secretpower: ["1L1"], - shadowball: ["1L1"], - shockwave: ["1L1"], - signalbeam: ["1L1"], - skillswap: ["1L1"], - sleeptalk: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - storedpower: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - taunt: ["1L1"], - telekinesis: ["1L1"], - terablast: ["1L1"], - thunderwave: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - trick: ["1L1"], - trickroom: ["1L1"], - uproar: ["1L1"], - wish: ["1L1"], - wrap: ["1L1"], - yawn: ["1L1"], - zenheadbutt: ["1L1"], - }, - }, - chimecho: { - learnset: { - allyswitch: ["1L1"], - astonish: ["1L1"], - attract: ["1L1"], - batonpass: ["1L1"], - bind: ["1L1"], - calmmind: ["1L1"], - captivate: ["1L1"], - chargebeam: ["1L1"], - charm: ["1L1"], - confide: ["1L1"], - confusion: ["1L1"], - cosmicpower: ["1L1"], - craftyshield: ["1L1"], - curse: ["1L1"], - dazzlinggleam: ["1L1"], - defensecurl: ["1L1"], - defog: ["1L1"], - disable: ["1L1"], - disarmingvoice: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - drainingkiss: ["1L1"], - dreameater: ["1L1"], - echoedvoice: ["1L1"], - encore: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - expandingforce: ["1L1"], - extrasensory: ["1L1"], - facade: ["1L1"], - faketears: ["1L1"], - flash: ["1L1"], - frustration: ["1L1"], - futuresight: ["1L1"], - grassknot: ["1L1"], - gravity: ["1L1"], - growl: ["1L1"], - healbell: ["1L1"], - healingwish: ["1L1"], - healpulse: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hypervoice: ["1L1"], - hypnosis: ["1L1"], - icywind: ["1L1"], - imprison: ["1L1"], - knockoff: ["1L1"], - laserfocus: ["1L1"], - lastresort: ["1L1"], - lightscreen: ["1L1"], - magiccoat: ["1L1"], - mimic: ["1L1"], - naturalgift: ["1L1"], - nightmare: ["1L1"], - perishsong: ["1L1"], - protect: ["1L1"], - psybeam: ["1L1"], - psychic: ["1L1"], - psychicnoise: ["1L1"], - psychup: ["1L1"], - psyshock: ["1L1"], - psywave: ["1L1"], - raindance: ["1L1"], - recover: ["1L1"], - recycle: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - secretpower: ["1L1"], - shadowball: ["1L1"], - shockwave: ["1L1"], - signalbeam: ["1L1"], - skillswap: ["1L1"], - sleeptalk: ["1L1"], - snarl: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - storedpower: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - synchronoise: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - telekinesis: ["1L1"], - terablast: ["1L1"], - thunderwave: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - trick: ["1L1"], - trickroom: ["1L1"], - uproar: ["1L1"], - wish: ["1L1"], - wrap: ["1L1"], - yawn: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 3, level: 10, gender: "M", moves: ["1L1"], pokeball: "pokeball"}, - ], - }, - absol: { - learnset: { - aerialace: ["1L1"], - airslash: ["1L1"], - assurance: ["1L1"], - attract: ["1L1"], - batonpass: ["1L1"], - bite: ["1L1"], - blizzard: ["1L1"], - bodyslam: ["1L1"], - bounce: ["1L1"], - brutalswing: ["1L1"], - calmmind: ["1L1"], - captivate: ["1L1"], - chargebeam: ["1L1"], - closecombat: ["1L1"], - confide: ["1L1"], - counter: ["1L1"], - curse: ["1L1"], - cut: ["1L1"], - darkpulse: ["1L1"], - detect: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dreameater: ["1L1"], - echoedvoice: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - falseswipe: ["1L1"], - feint: ["1L1"], - feintattack: ["1L1"], - fireblast: ["1L1"], - flamethrower: ["1L1"], - flash: ["1L1"], - focusenergy: ["1L1"], - foulplay: ["1L1"], - frustration: ["1L1"], - furycutter: ["1L1"], - futuresight: ["1L1"], - gigaimpact: ["1L1"], - hail: ["1L1"], - headbutt: ["1L1"], - hex: ["1L1"], - hiddenpower: ["1L1"], - honeclaws: ["1L1"], - hyperbeam: ["1L1"], - icebeam: ["1L1"], - icywind: ["1L1"], - incinerate: ["1L1"], - irontail: ["1L1"], - knockoff: ["1L1"], - laserfocus: ["1L1"], - leer: ["1L1"], - magiccoat: ["1L1"], - meanlook: ["1L1"], - mefirst: ["1L1"], - megahorn: ["1L1"], - mimic: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - nightmare: ["1L1"], - nightslash: ["1L1"], - payback: ["1L1"], - perishsong: ["1L1"], - playrough: ["1L1"], - protect: ["1L1"], - psychocut: ["1L1"], - psychup: ["1L1"], - punishment: ["1L1"], - pursuit: ["1L1"], - quickattack: ["1L1"], - raindance: ["1L1"], - razorwind: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - roleplay: ["1L1"], - round: ["1L1"], - sandstorm: ["1L1"], - scratch: ["1L1"], - secretpower: ["1L1"], - shadowball: ["1L1"], - shadowclaw: ["1L1"], - shockwave: ["1L1"], - slash: ["1L1"], - sleeptalk: ["1L1"], - snarl: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - spite: ["1L1"], - stoneedge: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - sunnyday: ["1L1"], - superpower: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - swordsdance: ["1L1"], - taunt: ["1L1"], - thief: ["1L1"], - throatchop: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderwave: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - waterpulse: ["1L1"], - willowisp: ["1L1"], - wish: ["1L1"], - xscissor: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 3, level: 5, shiny: 1, abilities: ["1L1"], moves: ["1L1"], pokeball: "pokeball"}, - {generation: 3, level: 5, shiny: 1, abilities: ["1L1"], moves: ["1L1"], pokeball: "pokeball"}, - {generation: 3, level: 35, abilities: ["1L1"], moves: ["1L1"], pokeball: "pokeball"}, - {generation: 3, level: 70, abilities: ["1L1"], moves: ["1L1"], pokeball: "pokeball"}, - ], - }, - snorunt: { - learnset: { - astonish: ["1L1"], - attract: ["1L1"], - avalanche: ["1L1"], - bide: ["1L1"], - bite: ["1L1"], - blizzard: ["1L1"], - block: ["1L1"], - bodyslam: ["1L1"], - captivate: ["1L1"], - chillingwater: ["1L1"], - confide: ["1L1"], - crunch: ["1L1"], - disable: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - faketears: ["1L1"], - flash: ["1L1"], - frostbreath: ["1L1"], - frustration: ["1L1"], - hail: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hex: ["1L1"], - hiddenpower: ["1L1"], - icebeam: ["1L1"], - icefang: ["1L1"], - iceshard: ["1L1"], - icespinner: ["1L1"], - iciclecrash: ["1L1"], - iciclespear: ["1L1"], - icywind: ["1L1"], - leer: ["1L1"], - lightscreen: ["1L1"], - mimic: ["1L1"], - naturalgift: ["1L1"], - powdersnow: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - secretpower: ["1L1"], - shadowball: ["1L1"], - sing: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - snowscape: ["1L1"], - spikes: ["1L1"], - spite: ["1L1"], - substitute: ["1L1"], - swagger: ["1L1"], - switcheroo: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - waterpulse: ["1L1"], - weatherball: ["1L1"], - }, - eventData: [ - {generation: 3, level: 20, abilities: ["1L1"], moves: ["1L1"]}, - ], - }, - glalie: { - learnset: { - astonish: ["1L1"], - attract: ["1L1"], - avalanche: ["1L1"], - bite: ["1L1"], - blizzard: ["1L1"], - block: ["1L1"], - bodyslam: ["1L1"], - bulldoze: ["1L1"], - captivate: ["1L1"], - chillingwater: ["1L1"], - confide: ["1L1"], - crunch: ["1L1"], - darkpulse: ["1L1"], - defensecurl: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - earthquake: ["1L1"], - endure: ["1L1"], - explosion: ["1L1"], - facade: ["1L1"], - faketears: ["1L1"], - flash: ["1L1"], - foulplay: ["1L1"], - freezedry: ["1L1"], - frostbreath: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - gyroball: ["1L1"], - hail: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hex: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - icebeam: ["1L1"], - icefang: ["1L1"], - iceshard: ["1L1"], - icespinner: ["1L1"], - iciclespear: ["1L1"], - icywind: ["1L1"], - ironhead: ["1L1"], - laserfocus: ["1L1"], - leer: ["1L1"], - lightscreen: ["1L1"], - mimic: ["1L1"], - naturalgift: ["1L1"], - payback: ["1L1"], - powdersnow: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - scaryface: ["1L1"], - secretpower: ["1L1"], - selfdestruct: ["1L1"], - shadowball: ["1L1"], - sheercold: ["1L1"], - signalbeam: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - snowscape: ["1L1"], - spikes: ["1L1"], - spite: ["1L1"], - steelroller: ["1L1"], - substitute: ["1L1"], - superfang: ["1L1"], - swagger: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - waterpulse: ["1L1"], - weatherball: ["1L1"], - }, - }, - froslass: { - learnset: { - allyswitch: ["1L1"], - astonish: ["1L1"], - attract: ["1L1"], - auroraveil: ["1L1"], - avalanche: ["1L1"], - bite: ["1L1"], - blizzard: ["1L1"], - block: ["1L1"], - bodyslam: ["1L1"], - captivate: ["1L1"], - charm: ["1L1"], - chillingwater: ["1L1"], - confide: ["1L1"], - confuseray: ["1L1"], - crunch: ["1L1"], - curse: ["1L1"], - destinybond: ["1L1"], - doubleteam: ["1L1"], - drainingkiss: ["1L1"], - dreameater: ["1L1"], - embargo: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - faketears: ["1L1"], - flash: ["1L1"], - fling: ["1L1"], - frostbreath: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - hail: ["1L1"], - haze: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hex: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - icebeam: ["1L1"], - icefang: ["1L1"], - icepunch: ["1L1"], - iceshard: ["1L1"], - icespinner: ["1L1"], - iciclespear: ["1L1"], - icywind: ["1L1"], - imprison: ["1L1"], - laserfocus: ["1L1"], - leer: ["1L1"], - lightscreen: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - nightshade: ["1L1"], - ominouswind: ["1L1"], - painsplit: ["1L1"], - payback: ["1L1"], - poltergeist: ["1L1"], - powdersnow: ["1L1"], - protect: ["1L1"], - psychic: ["1L1"], - psychup: ["1L1"], - raindance: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - scaryface: ["1L1"], - secretpower: ["1L1"], - shadowball: ["1L1"], - shockwave: ["1L1"], - signalbeam: ["1L1"], - sleeptalk: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - snowscape: ["1L1"], - spikes: ["1L1"], - spite: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - swagger: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - telekinesis: ["1L1"], - terablast: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderwave: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - trick: ["1L1"], - tripleaxel: ["1L1"], - wakeupslap: ["1L1"], - waterpulse: ["1L1"], - weatherball: ["1L1"], - willowisp: ["1L1"], - }, - }, - spheal: { - learnset: { - aquaring: ["1L1"], - aquatail: ["1L1"], - attract: ["1L1"], - aurorabeam: ["1L1"], - bellydrum: ["1L1"], - blizzard: ["1L1"], - bodyslam: ["1L1"], - brine: ["1L1"], - bulldoze: ["1L1"], - captivate: ["1L1"], - charm: ["1L1"], - confide: ["1L1"], - curse: ["1L1"], - defensecurl: ["1L1"], - dive: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - earthquake: ["1L1"], - echoedvoice: ["1L1"], - encore: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fissure: ["1L1"], - frostbreath: ["1L1"], - frustration: ["1L1"], - growl: ["1L1"], - hail: ["1L1"], - headbutt: ["1L1"], - hiddenpower: ["1L1"], - iceball: ["1L1"], - icebeam: ["1L1"], - icywind: ["1L1"], - irontail: ["1L1"], - mimic: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - powdersnow: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - secretpower: ["1L1"], - sheercold: ["1L1"], - signalbeam: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - spitup: ["1L1"], - steelroller: ["1L1"], - stockpile: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - superfang: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - swallow: ["1L1"], - toxic: ["1L1"], - waterfall: ["1L1"], - watergun: ["1L1"], - waterpulse: ["1L1"], - watersport: ["1L1"], - whirlpool: ["1L1"], - yawn: ["1L1"], - }, - eventData: [ - {generation: 3, level: 17, abilities: ["1L1"], moves: ["1L1"]}, - ], - }, - sealeo: { - learnset: { - aquatail: ["1L1"], - attract: ["1L1"], - aurorabeam: ["1L1"], - blizzard: ["1L1"], - bodyslam: ["1L1"], - brine: ["1L1"], - bulldoze: ["1L1"], - captivate: ["1L1"], - confide: ["1L1"], - defensecurl: ["1L1"], - dive: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - earthquake: ["1L1"], - echoedvoice: ["1L1"], - encore: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - frostbreath: ["1L1"], - frustration: ["1L1"], - growl: ["1L1"], - hail: ["1L1"], - headbutt: ["1L1"], - hiddenpower: ["1L1"], - iceball: ["1L1"], - icebeam: ["1L1"], - iciclespear: ["1L1"], - icywind: ["1L1"], - irontail: ["1L1"], - mimic: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - powdersnow: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roar: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - secretpower: ["1L1"], - sheercold: ["1L1"], - signalbeam: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - steelroller: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - superfang: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - toxic: ["1L1"], - waterfall: ["1L1"], - watergun: ["1L1"], - waterpulse: ["1L1"], - whirlpool: ["1L1"], - }, - encounters: [ - {generation: 4, level: 25}, - {generation: 6, level: 28, maxEggMoves: 1}, - ], - }, - walrein: { - learnset: { - aquatail: ["1L1"], - attract: ["1L1"], - aurorabeam: ["1L1"], - avalanche: ["1L1"], - blizzard: ["1L1"], - block: ["1L1"], - bodypress: ["1L1"], - bodyslam: ["1L1"], - brine: ["1L1"], - bulldoze: ["1L1"], - captivate: ["1L1"], - confide: ["1L1"], - crunch: ["1L1"], - defensecurl: ["1L1"], - dive: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - earthquake: ["1L1"], - echoedvoice: ["1L1"], - encore: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - frostbreath: ["1L1"], - frustration: ["1L1"], - furycutter: ["1L1"], - gigaimpact: ["1L1"], - growl: ["1L1"], - hail: ["1L1"], - headbutt: ["1L1"], - heavyslam: ["1L1"], - hiddenpower: ["1L1"], - hydropump: ["1L1"], - hyperbeam: ["1L1"], - iceball: ["1L1"], - icebeam: ["1L1"], - icefang: ["1L1"], - iciclespear: ["1L1"], - icywind: ["1L1"], - ironhead: ["1L1"], - irontail: ["1L1"], - liquidation: ["1L1"], - mimic: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - powdersnow: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roar: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - secretpower: ["1L1"], - sheercold: ["1L1"], - signalbeam: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - steelroller: ["1L1"], - stompingtantrum: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - superfang: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - swordsdance: ["1L1"], - toxic: ["1L1"], - waterfall: ["1L1"], - watergun: ["1L1"], - waterpulse: ["1L1"], - whirlpool: ["1L1"], - }, - eventData: [ - {generation: 5, level: 50, abilities: ["1L1"], moves: ["1L1"], pokeball: "cherishball"}, - ], - encounters: [ - {generation: 5, level: 30}, - ], - }, - clamperl: { - learnset: { - aquaring: ["1L1"], - attract: ["1L1"], - barrier: ["1L1"], - blizzard: ["1L1"], - bodyslam: ["1L1"], - brine: ["1L1"], - captivate: ["1L1"], - clamp: ["1L1"], - confide: ["1L1"], - confuseray: ["1L1"], - dive: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - frustration: ["1L1"], - hail: ["1L1"], - hiddenpower: ["1L1"], - icebeam: ["1L1"], - icywind: ["1L1"], - irondefense: ["1L1"], - mimic: ["1L1"], - muddywater: ["1L1"], - mudsport: ["1L1"], - naturalgift: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - refresh: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - round: ["1L1"], - scald: ["1L1"], - secretpower: ["1L1"], - shellsmash: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - substitute: ["1L1"], - supersonic: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - toxic: ["1L1"], - waterfall: ["1L1"], - watergun: ["1L1"], - waterpulse: ["1L1"], - whirlpool: ["1L1"], - }, - }, - huntail: { - learnset: { - aquatail: ["1L1"], - attract: ["1L1"], - batonpass: ["1L1"], - bind: ["1L1"], - bite: ["1L1"], - blizzard: ["1L1"], - bodyslam: ["1L1"], - bounce: ["1L1"], - brine: ["1L1"], - captivate: ["1L1"], - coil: ["1L1"], - confide: ["1L1"], - crunch: ["1L1"], - dive: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - feintattack: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - hail: ["1L1"], - hiddenpower: ["1L1"], - hydropump: ["1L1"], - hyperbeam: ["1L1"], - icebeam: ["1L1"], - icefang: ["1L1"], - icywind: ["1L1"], - infestation: ["1L1"], - mimic: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - scald: ["1L1"], - scaryface: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - sleeptalk: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - superfang: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - toxic: ["1L1"], - waterfall: ["1L1"], - waterpulse: ["1L1"], - whirlpool: ["1L1"], - }, - }, - gorebyss: { - learnset: { - agility: ["1L1"], - amnesia: ["1L1"], - aquaring: ["1L1"], - aquatail: ["1L1"], - attract: ["1L1"], - batonpass: ["1L1"], - bind: ["1L1"], - blizzard: ["1L1"], - bodyslam: ["1L1"], - bounce: ["1L1"], - brine: ["1L1"], - captivate: ["1L1"], - coil: ["1L1"], - confide: ["1L1"], - confusion: ["1L1"], - dive: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - drainingkiss: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - hail: ["1L1"], - hiddenpower: ["1L1"], - hydropump: ["1L1"], - hyperbeam: ["1L1"], - icebeam: ["1L1"], - icywind: ["1L1"], - infestation: ["1L1"], - mimic: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - protect: ["1L1"], - psychic: ["1L1"], - psychup: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - scald: ["1L1"], - secretpower: ["1L1"], - shadowball: ["1L1"], - signalbeam: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - substitute: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - toxic: ["1L1"], - waterfall: ["1L1"], - waterpulse: ["1L1"], - watersport: ["1L1"], - whirlpool: ["1L1"], - }, - }, - relicanth: { - learnset: { - amnesia: ["1L1"], - ancientpower: ["1L1"], - aquatail: ["1L1"], - attract: ["1L1"], - blizzard: ["1L1"], - bodypress: ["1L1"], - bodyslam: ["1L1"], - bounce: ["1L1"], - brine: ["1L1"], - bulldoze: ["1L1"], - calmmind: ["1L1"], - captivate: ["1L1"], - confide: ["1L1"], - dive: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - flail: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - hail: ["1L1"], - harden: ["1L1"], - headbutt: ["1L1"], - headsmash: ["1L1"], - hiddenpower: ["1L1"], - hydropump: ["1L1"], - hyperbeam: ["1L1"], - icebeam: ["1L1"], - icywind: ["1L1"], - irondefense: ["1L1"], - liquidation: ["1L1"], - magnitude: ["1L1"], - meteorbeam: ["1L1"], - mimic: ["1L1"], - muddywater: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - mudsport: ["1L1"], - naturalgift: ["1L1"], - protect: ["1L1"], - psychup: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rockblast: ["1L1"], - rockpolish: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - sandstorm: ["1L1"], - scald: ["1L1"], - scaleshot: ["1L1"], - secretpower: ["1L1"], - skullbash: ["1L1"], - sleeptalk: ["1L1"], - smackdown: ["1L1"], - snore: ["1L1"], - stealthrock: ["1L1"], - stompingtantrum: ["1L1"], - stoneedge: ["1L1"], - substitute: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - toxic: ["1L1"], - waterfall: ["1L1"], - watergun: ["1L1"], - waterpulse: ["1L1"], - watersport: ["1L1"], - whirlpool: ["1L1"], - yawn: ["1L1"], - zenheadbutt: ["1L1"], - }, - }, - luvdisc: { - learnset: { - agility: ["1L1"], - aquajet: ["1L1"], - aquaring: ["1L1"], - attract: ["1L1"], - babydolleyes: ["1L1"], - blizzard: ["1L1"], - bounce: ["1L1"], - brine: ["1L1"], - captivate: ["1L1"], - charm: ["1L1"], - confide: ["1L1"], - dive: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - drainingkiss: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - entrainment: ["1L1"], - facade: ["1L1"], - flail: ["1L1"], - flipturn: ["1L1"], - frustration: ["1L1"], - hail: ["1L1"], - healpulse: ["1L1"], - heartstamp: ["1L1"], - hiddenpower: ["1L1"], - hydropump: ["1L1"], - icebeam: ["1L1"], - icywind: ["1L1"], - liquidation: ["1L1"], - luckychant: ["1L1"], - mimic: ["1L1"], - mudsport: ["1L1"], - naturalgift: ["1L1"], - protect: ["1L1"], - psychup: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - scald: ["1L1"], - scaleshot: ["1L1"], - secretpower: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - snowscape: ["1L1"], - soak: ["1L1"], - splash: ["1L1"], - substitute: ["1L1"], - supersonic: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - sweetkiss: ["1L1"], - swift: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - toxic: ["1L1"], - waterfall: ["1L1"], - watergun: ["1L1"], - waterpulse: ["1L1"], - watersport: ["1L1"], - whirlpool: ["1L1"], - wish: ["1L1"], - }, - }, - bagon: { - learnset: { - aerialace: ["1L1"], - attract: ["1L1"], - bite: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - captivate: ["1L1"], - confide: ["1L1"], - crunch: ["1L1"], - cut: ["1L1"], - defensecurl: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dracometeor: ["1L1"], - dragonbreath: ["1L1"], - dragoncheer: ["1L1"], - dragonclaw: ["1L1"], - dragondance: ["1L1"], - dragonpulse: ["1L1"], - dragonrage: ["1L1"], - dragonrush: ["1L1"], - dragontail: ["1L1"], - ember: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fireblast: ["1L1"], - firefang: ["1L1"], - firespin: ["1L1"], - flamethrower: ["1L1"], - focusenergy: ["1L1"], - frustration: ["1L1"], - furycutter: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - honeclaws: ["1L1"], - hydropump: ["1L1"], - hypervoice: ["1L1"], - incinerate: ["1L1"], - irondefense: ["1L1"], - ironhead: ["1L1"], - leer: ["1L1"], - mimic: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - outrage: ["1L1"], - protect: ["1L1"], - rage: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roar: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - scaryface: ["1L1"], - secretpower: ["1L1"], - shadowclaw: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thrash: ["1L1"], - thunderfang: ["1L1"], - toxic: ["1L1"], - twister: ["1L1"], - wish: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 3, level: 5, shiny: 1, moves: ["1L1"], pokeball: "pokeball"}, - {generation: 3, level: 5, shiny: 1, moves: ["1L1"], pokeball: "pokeball"}, - {generation: 5, level: 1, shiny: true, moves: ["1L1"], pokeball: "pokeball"}, - {generation: 6, level: 1, moves: ["1L1"], pokeball: "pokeball"}, - ], - }, - shelgon: { - learnset: { - aerialace: ["1L1"], - attract: ["1L1"], - bite: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - captivate: ["1L1"], - confide: ["1L1"], - crunch: ["1L1"], - cut: ["1L1"], - defensecurl: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dracometeor: ["1L1"], - dragonbreath: ["1L1"], - dragoncheer: ["1L1"], - dragonclaw: ["1L1"], - dragondance: ["1L1"], - dragonpulse: ["1L1"], - dragontail: ["1L1"], - ember: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fireblast: ["1L1"], - firefang: ["1L1"], - firespin: ["1L1"], - flamethrower: ["1L1"], - focusenergy: ["1L1"], - frustration: ["1L1"], - furycutter: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - honeclaws: ["1L1"], - hydropump: ["1L1"], - hypervoice: ["1L1"], - incinerate: ["1L1"], - irondefense: ["1L1"], - ironhead: ["1L1"], - leer: ["1L1"], - mimic: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - outrage: ["1L1"], - protect: ["1L1"], - rage: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roar: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - scaryface: ["1L1"], - secretpower: ["1L1"], - shadowclaw: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - takedown: ["1L1"], - temperflare: ["1L1"], - terablast: ["1L1"], - thunderfang: ["1L1"], - toxic: ["1L1"], - twister: ["1L1"], - zenheadbutt: ["1L1"], - }, - encounters: [ - {generation: 7, level: 15}, - ], - }, - salamence: { - learnset: { - aerialace: ["1L1"], - aircutter: ["1L1"], - airslash: ["1L1"], - aquatail: ["1L1"], - attract: ["1L1"], - bite: ["1L1"], - bodyslam: ["1L1"], - breakingswipe: ["1L1"], - brickbreak: ["1L1"], - brutalswing: ["1L1"], - bulldoze: ["1L1"], - captivate: ["1L1"], - confide: ["1L1"], - crunch: ["1L1"], - cut: ["1L1"], - defensecurl: ["1L1"], - defog: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dracometeor: ["1L1"], - dragonbreath: ["1L1"], - dragoncheer: ["1L1"], - dragonclaw: ["1L1"], - dragondance: ["1L1"], - dragonpulse: ["1L1"], - dragontail: ["1L1"], - dualwingbeat: ["1L1"], - earthquake: ["1L1"], - ember: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fireblast: ["1L1"], - firefang: ["1L1"], - firespin: ["1L1"], - flamethrower: ["1L1"], - fly: ["1L1"], - focusenergy: ["1L1"], - frustration: ["1L1"], - furycutter: ["1L1"], - gigaimpact: ["1L1"], - headbutt: ["1L1"], - heatwave: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - honeclaws: ["1L1"], - hurricane: ["1L1"], - hydropump: ["1L1"], - hyperbeam: ["1L1"], - hypervoice: ["1L1"], - incinerate: ["1L1"], - irondefense: ["1L1"], - ironhead: ["1L1"], - irontail: ["1L1"], - laserfocus: ["1L1"], - leer: ["1L1"], - mimic: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - ominouswind: ["1L1"], - outrage: ["1L1"], - protect: ["1L1"], - psychicfangs: ["1L1"], - rage: ["1L1"], - raindance: ["1L1"], - refresh: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roar: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - rollout: ["1L1"], - roost: ["1L1"], - round: ["1L1"], - scaryface: ["1L1"], - secretpower: ["1L1"], - shadowclaw: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - steelwing: ["1L1"], - stoneedge: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - tailwind: ["1L1"], - takedown: ["1L1"], - temperflare: ["1L1"], - terablast: ["1L1"], - thunderfang: ["1L1"], - toxic: ["1L1"], - twister: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 3, level: 50, moves: ["1L1"], pokeball: "pokeball"}, - {generation: 3, level: 50, moves: ["1L1"]}, - {generation: 4, level: 50, gender: "M", nature: "Naughty", moves: ["1L1"], pokeball: "cherishball"}, - {generation: 5, level: 50, shiny: 1, moves: ["1L1"], pokeball: "cherishball"}, - ], - encounters: [ - {generation: 7, level: 9}, - ], - }, - beldum: { - learnset: { - headbutt: ["1L1"], - holdback: ["1L1"], - irondefense: ["1L1"], - ironhead: ["1L1"], - steelbeam: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 6, level: 5, shiny: true, moves: ["1L1"], pokeball: "cherishball"}, - ], - }, - metang: { - learnset: { - aerialace: ["1L1"], - agility: ["1L1"], - allyswitch: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - bulldoze: ["1L1"], - bulletpunch: ["1L1"], - confide: ["1L1"], - confusion: ["1L1"], - cosmicpower: ["1L1"], - cut: ["1L1"], - defensecurl: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dynamicpunch: ["1L1"], - earthquake: ["1L1"], - endure: ["1L1"], - expandingforce: ["1L1"], - explosion: ["1L1"], - facade: ["1L1"], - flash: ["1L1"], - flashcannon: ["1L1"], - focuspunch: ["1L1"], - frustration: ["1L1"], - furycutter: ["1L1"], - futuresight: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - gravity: ["1L1"], - gyroball: ["1L1"], - hardpress: ["1L1"], - headbutt: ["1L1"], - heavyslam: ["1L1"], - hiddenpower: ["1L1"], - honeclaws: ["1L1"], - hyperbeam: ["1L1"], - icepunch: ["1L1"], - icywind: ["1L1"], - irondefense: ["1L1"], - ironhead: ["1L1"], - lightscreen: ["1L1"], - magnetrise: ["1L1"], - metalclaw: ["1L1"], - meteorbeam: ["1L1"], - meteormash: ["1L1"], - mimic: ["1L1"], - miracleeye: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - psychic: ["1L1"], - psychicnoise: ["1L1"], - psychocut: ["1L1"], - psychup: ["1L1"], - psyshock: ["1L1"], - pursuit: ["1L1"], - raindance: ["1L1"], - reflect: ["1L1"], - refresh: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rockpolish: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - sandstorm: ["1L1"], - scaryface: ["1L1"], - secretpower: ["1L1"], - selfdestruct: ["1L1"], - shadowball: ["1L1"], - signalbeam: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - snore: ["1L1"], - stealthrock: ["1L1"], - steelbeam: ["1L1"], - steelroller: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - telekinesis: ["1L1"], - terablast: ["1L1"], - thunderpunch: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - trick: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 3, level: 30, moves: ["1L1"], pokeball: "pokeball"}, - ], - }, - metagross: { - learnset: { - aerialace: ["1L1"], - agility: ["1L1"], - allyswitch: ["1L1"], - block: ["1L1"], - bodypress: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - brutalswing: ["1L1"], - bulldoze: ["1L1"], - bulletpunch: ["1L1"], - confide: ["1L1"], - confusion: ["1L1"], - cosmicpower: ["1L1"], - cut: ["1L1"], - defensecurl: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dynamicpunch: ["1L1"], - earthquake: ["1L1"], - endure: ["1L1"], - expandingforce: ["1L1"], - explosion: ["1L1"], - facade: ["1L1"], - flash: ["1L1"], - flashcannon: ["1L1"], - focuspunch: ["1L1"], - frustration: ["1L1"], - furycutter: ["1L1"], - futuresight: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - gravity: ["1L1"], - gyroball: ["1L1"], - hammerarm: ["1L1"], - hardpress: ["1L1"], - headbutt: ["1L1"], - heavyslam: ["1L1"], - hiddenpower: ["1L1"], - honeclaws: ["1L1"], - hyperbeam: ["1L1"], - icepunch: ["1L1"], - icywind: ["1L1"], - irondefense: ["1L1"], - ironhead: ["1L1"], - knockoff: ["1L1"], - laserfocus: ["1L1"], - lightscreen: ["1L1"], - magnetrise: ["1L1"], - metalclaw: ["1L1"], - meteorbeam: ["1L1"], - meteormash: ["1L1"], - mimic: ["1L1"], - miracleeye: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - psychic: ["1L1"], - psychicfangs: ["1L1"], - psychicnoise: ["1L1"], - psychocut: ["1L1"], - psychup: ["1L1"], - psyshock: ["1L1"], - pursuit: ["1L1"], - raindance: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rockpolish: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - sandstorm: ["1L1"], - scaryface: ["1L1"], - secretpower: ["1L1"], - selfdestruct: ["1L1"], - shadowball: ["1L1"], - shadowclaw: ["1L1"], - signalbeam: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - snore: ["1L1"], - stealthrock: ["1L1"], - steelbeam: ["1L1"], - steelroller: ["1L1"], - stompingtantrum: ["1L1"], - stoneedge: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - telekinesis: ["1L1"], - terablast: ["1L1"], - thunderpunch: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - trick: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 4, level: 62, nature: "Brave", moves: ["1L1"], pokeball: "cherishball"}, - {generation: 5, level: 50, shiny: 1, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 5, level: 100, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 5, level: 45, shiny: true, moves: ["1L1"], pokeball: "pokeball"}, - {generation: 5, level: 45, isHidden: true, moves: ["1L1"]}, - {generation: 5, level: 45, isHidden: true, moves: ["1L1"]}, - {generation: 5, level: 58, nature: "Serious", ivs: {hp: 30, atk: 30, def: 30, spa: 30, spd: 30, spe: 30}, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 7, level: 50, nature: "Jolly", ivs: {hp: 31, atk: 31, def: 31, spa: 31, spd: 31, spe: 31}, moves: ["1L1"], pokeball: "cherishball"}, - ], - }, - regirock: { - learnset: { - ancientpower: ["1L1"], - block: ["1L1"], - bodypress: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - bulldoze: ["1L1"], - chargebeam: ["1L1"], - confide: ["1L1"], - counter: ["1L1"], - curse: ["1L1"], - defensecurl: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - drainpunch: ["1L1"], - dynamicpunch: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - endure: ["1L1"], - explosion: ["1L1"], - facade: ["1L1"], - firepunch: ["1L1"], - flashcannon: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - focuspunch: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - gravity: ["1L1"], - hammerarm: ["1L1"], - hardpress: ["1L1"], - headbutt: ["1L1"], - heavyslam: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - icepunch: ["1L1"], - irondefense: ["1L1"], - ironhead: ["1L1"], - lockon: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - meteorbeam: ["1L1"], - mimic: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - powergem: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - psychup: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rockblast: ["1L1"], - rockclimb: ["1L1"], - rockpolish: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rockthrow: ["1L1"], - rocktomb: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - sandstorm: ["1L1"], - sandtomb: ["1L1"], - secretpower: ["1L1"], - seismictoss: ["1L1"], - selfdestruct: ["1L1"], - shockwave: ["1L1"], - sleeptalk: ["1L1"], - smackdown: ["1L1"], - snore: ["1L1"], - stealthrock: ["1L1"], - stomp: ["1L1"], - stompingtantrum: ["1L1"], - stoneedge: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - superpower: ["1L1"], - swagger: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderpunch: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - zapcannon: ["1L1"], - }, - eventData: [ - {generation: 3, level: 40, shiny: 1, moves: ["1L1"]}, - {generation: 3, level: 40, moves: ["1L1"], pokeball: "pokeball"}, - {generation: 4, level: 30, shiny: 1, moves: ["1L1"]}, - {generation: 5, level: 65, shiny: 1, moves: ["1L1"]}, - {generation: 6, level: 40, shiny: 1, moves: ["1L1"]}, - {generation: 6, level: 50, isHidden: true, moves: ["1L1"], pokeball: "pokeball"}, - {generation: 7, level: 60, shiny: 1, moves: ["1L1"]}, - {generation: 8, level: 70, shiny: 1, moves: ["1L1"]}, - ], - eventOnly: false, - }, - regice: { - learnset: { - amnesia: ["1L1"], - ancientpower: ["1L1"], - auroraveil: ["1L1"], - avalanche: ["1L1"], - blizzard: ["1L1"], - block: ["1L1"], - bodypress: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - bulldoze: ["1L1"], - chargebeam: ["1L1"], - confide: ["1L1"], - counter: ["1L1"], - curse: ["1L1"], - defensecurl: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dynamicpunch: ["1L1"], - earthquake: ["1L1"], - endure: ["1L1"], - explosion: ["1L1"], - facade: ["1L1"], - flashcannon: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - focuspunch: ["1L1"], - frostbreath: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - gravity: ["1L1"], - hail: ["1L1"], - hammerarm: ["1L1"], - headbutt: ["1L1"], - heavyslam: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - icebeam: ["1L1"], - icepunch: ["1L1"], - icespinner: ["1L1"], - iciclespear: ["1L1"], - icywind: ["1L1"], - ironhead: ["1L1"], - lockon: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - mimic: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - psychup: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rockclimb: ["1L1"], - rockpolish: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - secretpower: ["1L1"], - seismictoss: ["1L1"], - selfdestruct: ["1L1"], - shockwave: ["1L1"], - signalbeam: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - snowscape: ["1L1"], - stomp: ["1L1"], - stompingtantrum: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - superpower: ["1L1"], - swagger: ["1L1"], - terablast: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderpunch: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - zapcannon: ["1L1"], - }, - eventData: [ - {generation: 3, level: 40, shiny: 1, moves: ["1L1"]}, - {generation: 3, level: 40, moves: ["1L1"], pokeball: "pokeball"}, - {generation: 4, level: 30, shiny: 1, moves: ["1L1"]}, - {generation: 5, level: 65, shiny: 1, moves: ["1L1"]}, - {generation: 6, level: 40, shiny: 1, moves: ["1L1"]}, - {generation: 6, level: 50, isHidden: true, moves: ["1L1"], pokeball: "pokeball"}, - {generation: 7, level: 60, shiny: 1, moves: ["1L1"]}, - {generation: 8, level: 70, shiny: 1, moves: ["1L1"]}, - ], - eventOnly: false, - }, - registeel: { - learnset: { - aerialace: ["1L1"], - amnesia: ["1L1"], - ancientpower: ["1L1"], - block: ["1L1"], - bodypress: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - bulldoze: ["1L1"], - chargebeam: ["1L1"], - confide: ["1L1"], - counter: ["1L1"], - curse: ["1L1"], - defensecurl: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dynamicpunch: ["1L1"], - earthquake: ["1L1"], - endure: ["1L1"], - explosion: ["1L1"], - facade: ["1L1"], - flashcannon: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - focuspunch: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - gravity: ["1L1"], - hammerarm: ["1L1"], - hardpress: ["1L1"], - headbutt: ["1L1"], - heavyslam: ["1L1"], - hiddenpower: ["1L1"], - honeclaws: ["1L1"], - hyperbeam: ["1L1"], - icepunch: ["1L1"], - icespinner: ["1L1"], - irondefense: ["1L1"], - ironhead: ["1L1"], - lockon: ["1L1"], - magnetrise: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - metalclaw: ["1L1"], - metalsound: ["1L1"], - meteorbeam: ["1L1"], - mimic: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - psychup: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rockclimb: ["1L1"], - rockpolish: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - sandstorm: ["1L1"], - sandtomb: ["1L1"], - secretpower: ["1L1"], - seismictoss: ["1L1"], - selfdestruct: ["1L1"], - shadowclaw: ["1L1"], - shockwave: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - stealthrock: ["1L1"], - steelbeam: ["1L1"], - steelroller: ["1L1"], - stomp: ["1L1"], - stompingtantrum: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - superpower: ["1L1"], - swagger: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderpunch: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - zapcannon: ["1L1"], - }, - eventData: [ - {generation: 3, level: 40, shiny: 1, moves: ["1L1"]}, - {generation: 3, level: 40, moves: ["1L1"], pokeball: "pokeball"}, - {generation: 4, level: 30, shiny: 1, moves: ["1L1"]}, - {generation: 5, level: 65, shiny: 1, moves: ["1L1"]}, - {generation: 6, level: 40, shiny: 1, moves: ["1L1"]}, - {generation: 6, level: 50, isHidden: true, moves: ["1L1"], pokeball: "pokeball"}, - {generation: 7, level: 60, shiny: 1, moves: ["1L1"]}, - {generation: 8, level: 70, shiny: 1, moves: ["1L1"]}, - ], - eventOnly: false, - }, - latias: { - learnset: { - aerialace: ["1L1"], - agility: ["1L1"], - aircutter: ["1L1"], - airslash: ["1L1"], - alluringvoice: ["1L1"], - allyswitch: ["1L1"], - attract: ["1L1"], - aurasphere: ["1L1"], - batonpass: ["1L1"], - bodyslam: ["1L1"], - breakingswipe: ["1L1"], - bulldoze: ["1L1"], - calmmind: ["1L1"], - captivate: ["1L1"], - chargebeam: ["1L1"], - charm: ["1L1"], - chillingwater: ["1L1"], - confide: ["1L1"], - confusion: ["1L1"], - covet: ["1L1"], - cut: ["1L1"], - defog: ["1L1"], - disarmingvoice: ["1L1"], - dive: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dracometeor: ["1L1"], - dragonbreath: ["1L1"], - dragoncheer: ["1L1"], - dragonclaw: ["1L1"], - dragondance: ["1L1"], - dragonpulse: ["1L1"], - drainingkiss: ["1L1"], - dreameater: ["1L1"], - dualwingbeat: ["1L1"], - earthquake: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - flash: ["1L1"], - fly: ["1L1"], - frustration: ["1L1"], - furycutter: ["1L1"], - futuresight: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - guardsplit: ["1L1"], - healingwish: ["1L1"], - healpulse: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - honeclaws: ["1L1"], - hyperbeam: ["1L1"], - icebeam: ["1L1"], - icywind: ["1L1"], - laserfocus: ["1L1"], - lastresort: ["1L1"], - lightscreen: ["1L1"], - liquidation: ["1L1"], - magiccoat: ["1L1"], - magicroom: ["1L1"], - mimic: ["1L1"], - mistball: ["1L1"], - mudslap: ["1L1"], - mysticalfire: ["1L1"], - naturalgift: ["1L1"], - outrage: ["1L1"], - protect: ["1L1"], - psychic: ["1L1"], - psychocut: ["1L1"], - psychoshift: ["1L1"], - psychup: ["1L1"], - psyshock: ["1L1"], - psywave: ["1L1"], - raindance: ["1L1"], - recover: ["1L1"], - reflect: ["1L1"], - reflecttype: ["1L1"], - refresh: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - roar: ["1L1"], - roleplay: ["1L1"], - roost: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - sandstorm: ["1L1"], - scaleshot: ["1L1"], - secretpower: ["1L1"], - shadowball: ["1L1"], - shadowclaw: ["1L1"], - shockwave: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - steelwing: ["1L1"], - storedpower: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - sunnyday: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - sweetkiss: ["1L1"], - swift: ["1L1"], - tailwind: ["1L1"], - takedown: ["1L1"], - telekinesis: ["1L1"], - terablast: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - triattack: ["1L1"], - trick: ["1L1"], - twister: ["1L1"], - waterfall: ["1L1"], - waterpulse: ["1L1"], - watersport: ["1L1"], - weatherball: ["1L1"], - whirlpool: ["1L1"], - wish: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 3, level: 40, shiny: 1, moves: ["1L1"]}, - {generation: 3, level: 50, shiny: 1, moves: ["1L1"]}, - {generation: 3, level: 70, moves: ["1L1"], pokeball: "pokeball"}, - {generation: 4, level: 35, shiny: 1, moves: ["1L1"]}, - {generation: 4, level: 40, shiny: 1, moves: ["1L1"]}, - {generation: 5, level: 68, shiny: 1, moves: ["1L1"]}, - {generation: 6, level: 30, shiny: 1, moves: ["1L1"]}, - {generation: 7, level: 60, shiny: 1, moves: ["1L1"]}, - {generation: 7, level: 60, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 7, level: 100, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 8, level: 70, shiny: 1, moves: ["1L1"]}, - {generation: 8, level: 70, nature: "Bashful", moves: ["1L1"], pokeball: "cherishball"}, - ], - eventOnly: false, - }, - latios: { - learnset: { - aerialace: ["1L1"], - agility: ["1L1"], - aircutter: ["1L1"], - airslash: ["1L1"], - allyswitch: ["1L1"], - attract: ["1L1"], - aurasphere: ["1L1"], - batonpass: ["1L1"], - bodyslam: ["1L1"], - breakingswipe: ["1L1"], - bulldoze: ["1L1"], - calmmind: ["1L1"], - captivate: ["1L1"], - chargebeam: ["1L1"], - chillingwater: ["1L1"], - confide: ["1L1"], - confusion: ["1L1"], - cut: ["1L1"], - defog: ["1L1"], - dive: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dracometeor: ["1L1"], - dragonbreath: ["1L1"], - dragoncheer: ["1L1"], - dragonclaw: ["1L1"], - dragondance: ["1L1"], - dragonpulse: ["1L1"], - dreameater: ["1L1"], - dualwingbeat: ["1L1"], - earthquake: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - flash: ["1L1"], - flipturn: ["1L1"], - fly: ["1L1"], - frustration: ["1L1"], - furycutter: ["1L1"], - futuresight: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - healblock: ["1L1"], - healpulse: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - honeclaws: ["1L1"], - hyperbeam: ["1L1"], - icebeam: ["1L1"], - icywind: ["1L1"], - laserfocus: ["1L1"], - lastresort: ["1L1"], - lightscreen: ["1L1"], - liquidation: ["1L1"], - lusterpurge: ["1L1"], - magiccoat: ["1L1"], - memento: ["1L1"], - mimic: ["1L1"], - mudslap: ["1L1"], - mysticalfire: ["1L1"], - naturalgift: ["1L1"], - outrage: ["1L1"], - powersplit: ["1L1"], - protect: ["1L1"], - psychic: ["1L1"], - psychicnoise: ["1L1"], - psychocut: ["1L1"], - psychoshift: ["1L1"], - psychup: ["1L1"], - psyshock: ["1L1"], - psywave: ["1L1"], - raindance: ["1L1"], - recover: ["1L1"], - reflect: ["1L1"], - refresh: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - roar: ["1L1"], - roost: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - sandstorm: ["1L1"], - scaleshot: ["1L1"], - secretpower: ["1L1"], - shadowball: ["1L1"], - shadowclaw: ["1L1"], - shockwave: ["1L1"], - simplebeam: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - steelwing: ["1L1"], - storedpower: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - tailwind: ["1L1"], - takedown: ["1L1"], - telekinesis: ["1L1"], - terablast: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - triattack: ["1L1"], - trick: ["1L1"], - twister: ["1L1"], - waterfall: ["1L1"], - waterpulse: ["1L1"], - weatherball: ["1L1"], - whirlpool: ["1L1"], - wonderroom: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 3, level: 40, shiny: 1, moves: ["1L1"]}, - {generation: 3, level: 50, shiny: 1, moves: ["1L1"]}, - {generation: 3, level: 70, moves: ["1L1"], pokeball: "pokeball"}, - {generation: 4, level: 35, shiny: 1, moves: ["1L1"]}, - {generation: 4, level: 40, shiny: 1, moves: ["1L1"]}, - {generation: 5, level: 68, shiny: 1, moves: ["1L1"]}, - {generation: 6, level: 30, shiny: 1, moves: ["1L1"]}, - {generation: 6, level: 50, nature: "Modest", moves: ["1L1"], pokeball: "cherishball"}, - {generation: 7, level: 60, shiny: 1, moves: ["1L1"]}, - {generation: 7, level: 60, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 7, level: 100, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 8, level: 70, shiny: 1, moves: ["1L1"]}, - ], - eventOnly: false, - }, - kyogre: { - learnset: { - ancientpower: ["1L1"], - aquaring: ["1L1"], - aquatail: ["1L1"], - avalanche: ["1L1"], - blizzard: ["1L1"], - block: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - brine: ["1L1"], - bulldoze: ["1L1"], - calmmind: ["1L1"], - chillingwater: ["1L1"], - confide: ["1L1"], - defensecurl: ["1L1"], - dive: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - earthquake: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - hail: ["1L1"], - headbutt: ["1L1"], - heavyslam: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hydropump: ["1L1"], - hyperbeam: ["1L1"], - icebeam: ["1L1"], - icywind: ["1L1"], - ironhead: ["1L1"], - liquidation: ["1L1"], - mimic: ["1L1"], - muddywater: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - originpulse: ["1L1"], - protect: ["1L1"], - psychup: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roar: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - scald: ["1L1"], - scaryface: ["1L1"], - secretpower: ["1L1"], - sheercold: ["1L1"], - shockwave: ["1L1"], - signalbeam: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - uproar: ["1L1"], - waterfall: ["1L1"], - waterpulse: ["1L1"], - waterspout: ["1L1"], - whirlpool: ["1L1"], - }, - eventData: [ - {generation: 3, level: 45, shiny: 1, moves: ["1L1"]}, - {generation: 3, level: 70, shiny: 1, moves: ["1L1"]}, - {generation: 4, level: 50, shiny: 1, moves: ["1L1"]}, - {generation: 5, level: 80, shiny: 1, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 5, level: 100, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 6, level: 45, moves: ["1L1"]}, - {generation: 6, level: 100, nature: "Timid", moves: ["1L1"], pokeball: "cherishball"}, - {generation: 7, level: 60, shiny: 1, moves: ["1L1"]}, - {generation: 7, level: 60, shiny: true, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 7, level: 60, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 7, level: 100, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 8, level: 70, shiny: 1, moves: ["1L1"]}, - ], - eventOnly: false, - }, - groudon: { - learnset: { - aerialace: ["1L1"], - ancientpower: ["1L1"], - block: ["1L1"], - bodypress: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - brutalswing: ["1L1"], - bulkup: ["1L1"], - bulldoze: ["1L1"], - confide: ["1L1"], - counter: ["1L1"], - crunch: ["1L1"], - cut: ["1L1"], - defensecurl: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dragonclaw: ["1L1"], - dragonpulse: ["1L1"], - dragontail: ["1L1"], - dynamicpunch: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - endure: ["1L1"], - eruption: ["1L1"], - facade: ["1L1"], - fireblast: ["1L1"], - firefang: ["1L1"], - firepunch: ["1L1"], - fissure: ["1L1"], - flamethrower: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - focuspunch: ["1L1"], - frustration: ["1L1"], - furycutter: ["1L1"], - gigaimpact: ["1L1"], - hammerarm: ["1L1"], - headbutt: ["1L1"], - heatcrash: ["1L1"], - heatwave: ["1L1"], - heavyslam: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - highhorsepower: ["1L1"], - honeclaws: ["1L1"], - hyperbeam: ["1L1"], - incinerate: ["1L1"], - ironhead: ["1L1"], - irontail: ["1L1"], - lavaplume: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - metalclaw: ["1L1"], - mimic: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - overheat: ["1L1"], - poweruppunch: ["1L1"], - precipiceblades: ["1L1"], - protect: ["1L1"], - psychup: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roar: ["1L1"], - rockblast: ["1L1"], - rockclimb: ["1L1"], - rockpolish: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - sandstorm: ["1L1"], - sandtomb: ["1L1"], - scaryface: ["1L1"], - scorchingsands: ["1L1"], - secretpower: ["1L1"], - seismictoss: ["1L1"], - shadowclaw: ["1L1"], - shockwave: ["1L1"], - slash: ["1L1"], - sleeptalk: ["1L1"], - smackdown: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - spikes: ["1L1"], - stealthrock: ["1L1"], - stompingtantrum: ["1L1"], - stoneedge: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - swordsdance: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderpunch: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - uproar: ["1L1"], - willowisp: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 3, level: 45, shiny: 1, moves: ["1L1"]}, - {generation: 3, level: 70, shiny: 1, moves: ["1L1"]}, - {generation: 4, level: 50, shiny: 1, moves: ["1L1"]}, - {generation: 5, level: 80, shiny: 1, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 5, level: 100, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 6, level: 45, moves: ["1L1"]}, - {generation: 6, level: 100, nature: "Adamant", moves: ["1L1"], pokeball: "cherishball"}, - {generation: 7, level: 60, shiny: 1, moves: ["1L1"]}, - {generation: 7, level: 60, shiny: true, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 7, level: 60, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 7, level: 100, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 8, level: 70, shiny: 1, moves: ["1L1"]}, - ], - eventOnly: false, - }, - rayquaza: { - learnset: { - aerialace: ["1L1"], - airslash: ["1L1"], - ancientpower: ["1L1"], - aquatail: ["1L1"], - avalanche: ["1L1"], - bind: ["1L1"], - blizzard: ["1L1"], - bodyslam: ["1L1"], - breakingswipe: ["1L1"], - brickbreak: ["1L1"], - brutalswing: ["1L1"], - bulkup: ["1L1"], - bulldoze: ["1L1"], - celebrate: ["1L1"], - confide: ["1L1"], - cosmicpower: ["1L1"], - crunch: ["1L1"], - defog: ["1L1"], - dive: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dracometeor: ["1L1"], - dragonascent: ["1L1"], - dragoncheer: ["1L1"], - dragonclaw: ["1L1"], - dragondance: ["1L1"], - dragonpulse: ["1L1"], - dragontail: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - echoedvoice: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - extremespeed: ["1L1"], - facade: ["1L1"], - fireblast: ["1L1"], - flamethrower: ["1L1"], - fling: ["1L1"], - fly: ["1L1"], - focusblast: ["1L1"], - frustration: ["1L1"], - furycutter: ["1L1"], - gigaimpact: ["1L1"], - gyroball: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - honeclaws: ["1L1"], - hurricane: ["1L1"], - hydropump: ["1L1"], - hyperbeam: ["1L1"], - hypervoice: ["1L1"], - icebeam: ["1L1"], - icywind: ["1L1"], - incinerate: ["1L1"], - ironhead: ["1L1"], - irontail: ["1L1"], - meteorbeam: ["1L1"], - mimic: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - outrage: ["1L1"], - overheat: ["1L1"], - protect: ["1L1"], - psychup: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roar: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - sandstorm: ["1L1"], - scaleshot: ["1L1"], - scaryface: ["1L1"], - secretpower: ["1L1"], - shadowclaw: ["1L1"], - shockwave: ["1L1"], - skydrop: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - stealthrock: ["1L1"], - stoneedge: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - swordsdance: ["1L1"], - tailwind: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - twister: ["1L1"], - uproar: ["1L1"], - uturn: ["1L1"], - vcreate: ["1L1"], - waterfall: ["1L1"], - waterpulse: ["1L1"], - whirlpool: ["1L1"], - wildcharge: ["1L1"], - }, - eventData: [ - {generation: 3, level: 70, shiny: 1, moves: ["1L1"]}, - {generation: 4, level: 50, shiny: 1, moves: ["1L1"]}, - {generation: 5, level: 70, shiny: true, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 5, level: 100, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 6, level: 70, moves: ["1L1"]}, - {generation: 6, level: 70, shiny: true, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 6, level: 70, shiny: true, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 6, level: 100, shiny: true, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 7, level: 60, shiny: 1, moves: ["1L1"]}, - {generation: 8, level: 70, shiny: 1, moves: ["1L1"]}, - ], - eventOnly: false, - }, - jirachi: { - learnset: { - aerialace: ["1L1"], - allyswitch: ["1L1"], - amnesia: ["1L1"], - ancientpower: ["1L1"], - aurasphere: ["1L1"], - batonpass: ["1L1"], - bodyslam: ["1L1"], - calmmind: ["1L1"], - chargebeam: ["1L1"], - charm: ["1L1"], - confide: ["1L1"], - confuseray: ["1L1"], - confusion: ["1L1"], - cosmicpower: ["1L1"], - dazzlinggleam: ["1L1"], - defensecurl: ["1L1"], - doomdesire: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dracometeor: ["1L1"], - drainpunch: ["1L1"], - dreameater: ["1L1"], - dynamicpunch: ["1L1"], - encore: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - expandingforce: ["1L1"], - facade: ["1L1"], - faketears: ["1L1"], - firepunch: ["1L1"], - flash: ["1L1"], - flashcannon: ["1L1"], - fling: ["1L1"], - followme: ["1L1"], - frustration: ["1L1"], - futuresight: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - gravity: ["1L1"], - happyhour: ["1L1"], - headbutt: ["1L1"], - healingwish: ["1L1"], - heartstamp: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - icepunch: ["1L1"], - icywind: ["1L1"], - imprison: ["1L1"], - irondefense: ["1L1"], - ironhead: ["1L1"], - lastresort: ["1L1"], - lifedew: ["1L1"], - lightscreen: ["1L1"], - luckychant: ["1L1"], - magiccoat: ["1L1"], - magicroom: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - metalsound: ["1L1"], - meteorbeam: ["1L1"], - meteormash: ["1L1"], - metronome: ["1L1"], - mimic: ["1L1"], - moonblast: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - nightmare: ["1L1"], - playrough: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - psybeam: ["1L1"], - psychic: ["1L1"], - psychicnoise: ["1L1"], - psychup: ["1L1"], - psyshock: ["1L1"], - raindance: ["1L1"], - recycle: ["1L1"], - reflect: ["1L1"], - refresh: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - sandstorm: ["1L1"], - secretpower: ["1L1"], - shadowball: ["1L1"], - shockwave: ["1L1"], - signalbeam: ["1L1"], - skillswap: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - stealthrock: ["1L1"], - steelbeam: ["1L1"], - storedpower: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - telekinesis: ["1L1"], - terablast: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderpunch: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - trick: ["1L1"], - trickroom: ["1L1"], - uproar: ["1L1"], - uturn: ["1L1"], - waterpulse: ["1L1"], - wish: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 3, level: 5, moves: ["1L1"], pokeball: "pokeball"}, - {generation: 3, level: 5, shiny: true, nature: "Bashful", ivs: {hp: 24, atk: 3, def: 30, spa: 12, spd: 16, spe: 11}, moves: ["1L1"], pokeball: "pokeball"}, - {generation: 3, level: 5, shiny: true, nature: "Careful", ivs: {hp: 10, atk: 0, def: 10, spa: 10, spd: 26, spe: 12}, moves: ["1L1"], pokeball: "pokeball"}, - {generation: 3, level: 5, shiny: true, nature: "Docile", ivs: {hp: 19, atk: 7, def: 10, spa: 19, spd: 10, spe: 16}, moves: ["1L1"], pokeball: "pokeball"}, - {generation: 3, level: 5, shiny: true, nature: "Hasty", ivs: {hp: 3, atk: 12, def: 12, spa: 7, spd: 11, spe: 9}, moves: ["1L1"], pokeball: "pokeball"}, - {generation: 3, level: 5, shiny: true, nature: "Jolly", ivs: {hp: 11, atk: 8, def: 6, spa: 14, spd: 5, spe: 20}, moves: ["1L1"], pokeball: "pokeball"}, - {generation: 3, level: 5, shiny: true, nature: "Lonely", ivs: {hp: 31, atk: 23, def: 26, spa: 29, spd: 18, spe: 5}, moves: ["1L1"], pokeball: "pokeball"}, - {generation: 3, level: 5, shiny: true, nature: "Naughty", ivs: {hp: 21, atk: 31, def: 31, spa: 18, spd: 24, spe: 19}, moves: ["1L1"], pokeball: "pokeball"}, - {generation: 3, level: 5, shiny: true, nature: "Serious", ivs: {hp: 29, atk: 10, def: 31, spa: 25, spd: 23, spe: 21}, moves: ["1L1"], pokeball: "pokeball"}, - {generation: 3, level: 5, shiny: true, nature: "Timid", ivs: {hp: 15, atk: 28, def: 29, spa: 3, spd: 0, spe: 7}, moves: ["1L1"], pokeball: "pokeball"}, - {generation: 3, level: 30, moves: ["1L1"], pokeball: "pokeball"}, - {generation: 4, level: 5, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 4, level: 5, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 5, level: 50, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 5, level: 50, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 5, level: 50, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 5, level: 50, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 6, level: 10, shiny: true, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 6, level: 15, shiny: true, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 6, level: 100, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 6, level: 25, shiny: true, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 6, level: 100, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 7, level: 15, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 8, level: 70, nature: "Timid", moves: ["1L1"], pokeball: "cherishball"}, - ], - eventOnly: false, - }, - deoxys: { - learnset: { - aerialace: ["1L1"], - agility: ["1L1"], - allyswitch: ["1L1"], - amnesia: ["1L1"], - avalanche: ["1L1"], - bind: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - brutalswing: ["1L1"], - calmmind: ["1L1"], - chargebeam: ["1L1"], - confide: ["1L1"], - cosmicpower: ["1L1"], - counter: ["1L1"], - cut: ["1L1"], - darkpulse: ["1L1"], - detect: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - drainpunch: ["1L1"], - dreameater: ["1L1"], - dynamicpunch: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - expandingforce: ["1L1"], - extremespeed: ["1L1"], - facade: ["1L1"], - firepunch: ["1L1"], - flash: ["1L1"], - flashcannon: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - focuspunch: ["1L1"], - frustration: ["1L1"], - futuresight: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - gravity: ["1L1"], - headbutt: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - icebeam: ["1L1"], - icepunch: ["1L1"], - icywind: ["1L1"], - imprison: ["1L1"], - irondefense: ["1L1"], - knockoff: ["1L1"], - laserfocus: ["1L1"], - leer: ["1L1"], - lightscreen: ["1L1"], - lowkick: ["1L1"], - lowsweep: ["1L1"], - magiccoat: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - meteorbeam: ["1L1"], - meteormash: ["1L1"], - mimic: ["1L1"], - mirrorcoat: ["1L1"], - mudslap: ["1L1"], - nastyplot: ["1L1"], - naturalgift: ["1L1"], - nightmare: ["1L1"], - nightshade: ["1L1"], - painsplit: ["1L1"], - poisonjab: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - psybeam: ["1L1"], - psychic: ["1L1"], - psychicnoise: ["1L1"], - psychicterrain: ["1L1"], - psychoboost: ["1L1"], - psychoshift: ["1L1"], - psychup: ["1L1"], - psyshock: ["1L1"], - pursuit: ["1L1"], - raindance: ["1L1"], - recover: ["1L1"], - recycle: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - roleplay: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - scaryface: ["1L1"], - secretpower: ["1L1"], - seismictoss: ["1L1"], - shadowball: ["1L1"], - shockwave: ["1L1"], - signalbeam: ["1L1"], - skillswap: ["1L1"], - sleeptalk: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - spikes: ["1L1"], - stealthrock: ["1L1"], - stompingtantrum: ["1L1"], - storedpower: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - superpower: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - telekinesis: ["1L1"], - teleport: ["1L1"], - terablast: ["1L1"], - throatchop: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderpunch: ["1L1"], - thunderwave: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - trick: ["1L1"], - trickroom: ["1L1"], - waterpulse: ["1L1"], - wonderroom: ["1L1"], - wrap: ["1L1"], - zapcannon: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 3, level: 30, shiny: 1, moves: ["1L1"]}, - {generation: 3, level: 30, shiny: 1, moves: ["1L1"]}, - {generation: 3, level: 30, shiny: 1, moves: ["1L1"]}, - {generation: 3, level: 70, moves: ["1L1"], pokeball: "pokeball"}, - {generation: 4, level: 50, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 4, level: 50, moves: ["1L1"], pokeball: "pokeball"}, - {generation: 4, level: 50, moves: ["1L1"], pokeball: "pokeball"}, - {generation: 4, level: 50, moves: ["1L1"], pokeball: "pokeball"}, - {generation: 4, level: 50, moves: ["1L1"], pokeball: "pokeball"}, - {generation: 5, level: 100, moves: ["1L1"], pokeball: "duskball"}, - {generation: 6, level: 80, moves: ["1L1"]}, - ], - eventOnly: false, - }, - deoxysattack: { - eventOnly: false, - }, - deoxysdefense: { - eventOnly: false, - }, - deoxysspeed: { - eventOnly: false, - }, - turtwig: { - learnset: { - absorb: ["1L1"], - amnesia: ["1L1"], - attract: ["1L1"], - bite: ["1L1"], - bodyslam: ["1L1"], - bulldoze: ["1L1"], - bulletseed: ["1L1"], - captivate: ["1L1"], - confide: ["1L1"], - crunch: ["1L1"], - curse: ["1L1"], - cut: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - earthpower: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - flash: ["1L1"], - frustration: ["1L1"], - gigadrain: ["1L1"], - grassknot: ["1L1"], - grasspledge: ["1L1"], - grassyglide: ["1L1"], - grassyterrain: ["1L1"], - growth: ["1L1"], - headbutt: ["1L1"], - heavyslam: ["1L1"], - hiddenpower: ["1L1"], - ironhead: ["1L1"], - irontail: ["1L1"], - leafstorm: ["1L1"], - leechseed: ["1L1"], - lightscreen: ["1L1"], - magicalleaf: ["1L1"], - megadrain: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - naturepower: ["1L1"], - protect: ["1L1"], - razorleaf: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roar: ["1L1"], - rockclimb: ["1L1"], - rocksmash: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - sandtomb: ["1L1"], - secretpower: ["1L1"], - seedbomb: ["1L1"], - shellsmash: ["1L1"], - sleeptalk: ["1L1"], - smackdown: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - spitup: ["1L1"], - stealthrock: ["1L1"], - stockpile: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - superpower: ["1L1"], - swagger: ["1L1"], - swallow: ["1L1"], - swordsdance: ["1L1"], - synthesis: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thrash: ["1L1"], - tickle: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - wideguard: ["1L1"], - withdraw: ["1L1"], - workup: ["1L1"], - worryseed: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 5, level: 10, gender: "M", isHidden: true, moves: ["1L1"]}, - {generation: 5, level: 10, gender: "M", isHidden: true, moves: ["1L1"]}, - {generation: 9, level: 1, moves: ["1L1"], pokeball: "pokeball"}, - ], - }, - grotle: { - learnset: { - absorb: ["1L1"], - amnesia: ["1L1"], - attract: ["1L1"], - bite: ["1L1"], - bodyslam: ["1L1"], - bulldoze: ["1L1"], - bulletseed: ["1L1"], - captivate: ["1L1"], - confide: ["1L1"], - crunch: ["1L1"], - curse: ["1L1"], - cut: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - earthpower: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - flash: ["1L1"], - frustration: ["1L1"], - gigadrain: ["1L1"], - grassknot: ["1L1"], - grasspledge: ["1L1"], - grassyglide: ["1L1"], - grassyterrain: ["1L1"], - headbutt: ["1L1"], - heavyslam: ["1L1"], - hiddenpower: ["1L1"], - ironhead: ["1L1"], - irontail: ["1L1"], - leafstorm: ["1L1"], - leechseed: ["1L1"], - lightscreen: ["1L1"], - magicalleaf: ["1L1"], - megadrain: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - naturepower: ["1L1"], - protect: ["1L1"], - razorleaf: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roar: ["1L1"], - rockclimb: ["1L1"], - rocksmash: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - sandtomb: ["1L1"], - secretpower: ["1L1"], - seedbomb: ["1L1"], - sleeptalk: ["1L1"], - smackdown: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - stealthrock: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - superpower: ["1L1"], - swagger: ["1L1"], - swordsdance: ["1L1"], - synthesis: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - withdraw: ["1L1"], - workup: ["1L1"], - worryseed: ["1L1"], - zenheadbutt: ["1L1"], - }, - }, - torterra: { - learnset: { - absorb: ["1L1"], - amnesia: ["1L1"], - attract: ["1L1"], - bite: ["1L1"], - block: ["1L1"], - bodypress: ["1L1"], - bodyslam: ["1L1"], - bulldoze: ["1L1"], - bulletseed: ["1L1"], - captivate: ["1L1"], - confide: ["1L1"], - crunch: ["1L1"], - curse: ["1L1"], - cut: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - flash: ["1L1"], - frenzyplant: ["1L1"], - frustration: ["1L1"], - gigadrain: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - grasspledge: ["1L1"], - grassyglide: ["1L1"], - grassyterrain: ["1L1"], - hardpress: ["1L1"], - headbutt: ["1L1"], - headlongrush: ["1L1"], - heavyslam: ["1L1"], - hiddenpower: ["1L1"], - highhorsepower: ["1L1"], - hyperbeam: ["1L1"], - hypervoice: ["1L1"], - irondefense: ["1L1"], - ironhead: ["1L1"], - irontail: ["1L1"], - leafstorm: ["1L1"], - leechseed: ["1L1"], - lightscreen: ["1L1"], - magicalleaf: ["1L1"], - megadrain: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - naturepower: ["1L1"], - outrage: ["1L1"], - protect: ["1L1"], - razorleaf: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roar: ["1L1"], - rockblast: ["1L1"], - rockclimb: ["1L1"], - rockpolish: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - sandstorm: ["1L1"], - sandtomb: ["1L1"], - scaryface: ["1L1"], - scorchingsands: ["1L1"], - secretpower: ["1L1"], - seedbomb: ["1L1"], - sleeptalk: ["1L1"], - smackdown: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - stealthrock: ["1L1"], - stompingtantrum: ["1L1"], - stoneedge: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - superpower: ["1L1"], - swagger: ["1L1"], - swordsdance: ["1L1"], - synthesis: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - withdraw: ["1L1"], - woodhammer: ["1L1"], - workup: ["1L1"], - worryseed: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 5, level: 100, gender: "M", moves: ["1L1"], pokeball: "cherishball"}, - ], - }, - chimchar: { - learnset: { - acrobatics: ["1L1"], - aerialace: ["1L1"], - agility: ["1L1"], - assist: ["1L1"], - attract: ["1L1"], - blazekick: ["1L1"], - brickbreak: ["1L1"], - bulkup: ["1L1"], - burningjealousy: ["1L1"], - captivate: ["1L1"], - confide: ["1L1"], - counter: ["1L1"], - covet: ["1L1"], - cut: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doublekick: ["1L1"], - doubleteam: ["1L1"], - ember: ["1L1"], - encore: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fakeout: ["1L1"], - faketears: ["1L1"], - fireblast: ["1L1"], - firepledge: ["1L1"], - firepunch: ["1L1"], - firespin: ["1L1"], - flamecharge: ["1L1"], - flamethrower: ["1L1"], - flamewheel: ["1L1"], - flareblitz: ["1L1"], - fling: ["1L1"], - focusenergy: ["1L1"], - focuspunch: ["1L1"], - frustration: ["1L1"], - furyswipes: ["1L1"], - grassknot: ["1L1"], - gunkshot: ["1L1"], - headbutt: ["1L1"], - heatwave: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - honeclaws: ["1L1"], - incinerate: ["1L1"], - irontail: ["1L1"], - knockoff: ["1L1"], - leer: ["1L1"], - lowkick: ["1L1"], - lowsweep: ["1L1"], - metronome: ["1L1"], - mudslap: ["1L1"], - nastyplot: ["1L1"], - naturalgift: ["1L1"], - overheat: ["1L1"], - poisonjab: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - psychup: ["1L1"], - quickguard: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rockclimb: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - roleplay: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - scratch: ["1L1"], - secretpower: ["1L1"], - shadowclaw: ["1L1"], - slackoff: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - stealthrock: ["1L1"], - strength: ["1L1"], - submission: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - switcheroo: ["1L1"], - swordsdance: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - temperflare: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thunderpunch: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - uproar: ["1L1"], - uturn: ["1L1"], - vacuumwave: ["1L1"], - willowisp: ["1L1"], - workup: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 4, level: 40, gender: "M", nature: "Mild", moves: ["1L1"], pokeball: "cherishball"}, - {generation: 5, level: 10, gender: "M", isHidden: true, moves: ["1L1"]}, - {generation: 4, level: 40, gender: "M", nature: "Hardy", moves: ["1L1"], pokeball: "cherishball"}, - {generation: 5, level: 10, gender: "M", isHidden: true, moves: ["1L1"]}, - {generation: 9, level: 1, moves: ["1L1"], pokeball: "pokeball"}, - ], - }, - monferno: { - learnset: { - acrobatics: ["1L1"], - aerialace: ["1L1"], - agility: ["1L1"], - attract: ["1L1"], - brickbreak: ["1L1"], - bulkup: ["1L1"], - burningjealousy: ["1L1"], - captivate: ["1L1"], - closecombat: ["1L1"], - confide: ["1L1"], - covet: ["1L1"], - cut: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - drainpunch: ["1L1"], - dualchop: ["1L1"], - ember: ["1L1"], - encore: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - faketears: ["1L1"], - feint: ["1L1"], - fireblast: ["1L1"], - firepledge: ["1L1"], - firepunch: ["1L1"], - firespin: ["1L1"], - flamecharge: ["1L1"], - flamethrower: ["1L1"], - flamewheel: ["1L1"], - flareblitz: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - focuspunch: ["1L1"], - frustration: ["1L1"], - furyswipes: ["1L1"], - grassknot: ["1L1"], - gunkshot: ["1L1"], - headbutt: ["1L1"], - heatwave: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - honeclaws: ["1L1"], - incinerate: ["1L1"], - irontail: ["1L1"], - knockoff: ["1L1"], - lashout: ["1L1"], - leer: ["1L1"], - lowkick: ["1L1"], - lowsweep: ["1L1"], - machpunch: ["1L1"], - metronome: ["1L1"], - mudslap: ["1L1"], - nastyplot: ["1L1"], - naturalgift: ["1L1"], - overheat: ["1L1"], - poisonjab: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - psychup: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - reversal: ["1L1"], - rockclimb: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - roleplay: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - scratch: ["1L1"], - secretpower: ["1L1"], - shadowclaw: ["1L1"], - slackoff: ["1L1"], - sleeptalk: ["1L1"], - smackdown: ["1L1"], - snore: ["1L1"], - stealthrock: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - swordsdance: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - temperflare: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thunderpunch: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - upperhand: ["1L1"], - uproar: ["1L1"], - uturn: ["1L1"], - vacuumwave: ["1L1"], - willowisp: ["1L1"], - workup: ["1L1"], - zenheadbutt: ["1L1"], - }, - }, - infernape: { - learnset: { - acrobatics: ["1L1"], - aerialace: ["1L1"], - agility: ["1L1"], - attract: ["1L1"], - aurasphere: ["1L1"], - blastburn: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - bulkup: ["1L1"], - bulldoze: ["1L1"], - burningjealousy: ["1L1"], - calmmind: ["1L1"], - captivate: ["1L1"], - closecombat: ["1L1"], - coaching: ["1L1"], - confide: ["1L1"], - covet: ["1L1"], - cut: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - drainpunch: ["1L1"], - dualchop: ["1L1"], - earthquake: ["1L1"], - ember: ["1L1"], - encore: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - faketears: ["1L1"], - feint: ["1L1"], - fireblast: ["1L1"], - firepledge: ["1L1"], - firepunch: ["1L1"], - firespin: ["1L1"], - flamecharge: ["1L1"], - flamethrower: ["1L1"], - flamewheel: ["1L1"], - flareblitz: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - focuspunch: ["1L1"], - frustration: ["1L1"], - furyswipes: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - gunkshot: ["1L1"], - headbutt: ["1L1"], - heatwave: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - honeclaws: ["1L1"], - hyperbeam: ["1L1"], - incinerate: ["1L1"], - irontail: ["1L1"], - knockoff: ["1L1"], - laserfocus: ["1L1"], - lashout: ["1L1"], - leer: ["1L1"], - lowkick: ["1L1"], - lowsweep: ["1L1"], - machpunch: ["1L1"], - metronome: ["1L1"], - mudslap: ["1L1"], - nastyplot: ["1L1"], - naturalgift: ["1L1"], - overheat: ["1L1"], - poisonjab: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - psychup: ["1L1"], - punishment: ["1L1"], - ragingfury: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - reversal: ["1L1"], - roar: ["1L1"], - rockclimb: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - roleplay: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - scaryface: ["1L1"], - scorchingsands: ["1L1"], - scratch: ["1L1"], - secretpower: ["1L1"], - shadowclaw: ["1L1"], - slackoff: ["1L1"], - sleeptalk: ["1L1"], - smackdown: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - stealthrock: ["1L1"], - stoneedge: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - swordsdance: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - temperflare: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - throatchop: ["1L1"], - thunderpunch: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - upperhand: ["1L1"], - uproar: ["1L1"], - uturn: ["1L1"], - vacuumwave: ["1L1"], - willowisp: ["1L1"], - workup: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 5, level: 100, gender: "M", moves: ["1L1"], pokeball: "cherishball"}, - {generation: 6, level: 88, isHidden: true, moves: ["1L1"], pokeball: "cherishball"}, - ], - }, - piplup: { - learnset: { - aerialace: ["1L1"], - agility: ["1L1"], - aquaring: ["1L1"], - attract: ["1L1"], - bide: ["1L1"], - blizzard: ["1L1"], - brickbreak: ["1L1"], - brine: ["1L1"], - bubble: ["1L1"], - bubblebeam: ["1L1"], - captivate: ["1L1"], - charm: ["1L1"], - chillingwater: ["1L1"], - confide: ["1L1"], - covet: ["1L1"], - cut: ["1L1"], - defog: ["1L1"], - dig: ["1L1"], - disarmingvoice: ["1L1"], - dive: ["1L1"], - doublehit: ["1L1"], - doubleteam: ["1L1"], - drillpeck: ["1L1"], - echoedvoice: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - featherdance: ["1L1"], - flail: ["1L1"], - fling: ["1L1"], - flipturn: ["1L1"], - frustration: ["1L1"], - furyattack: ["1L1"], - grassknot: ["1L1"], - growl: ["1L1"], - hail: ["1L1"], - haze: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hydropump: ["1L1"], - icebeam: ["1L1"], - icespinner: ["1L1"], - icywind: ["1L1"], - liquidation: ["1L1"], - mist: ["1L1"], - mudslap: ["1L1"], - mudsport: ["1L1"], - naturalgift: ["1L1"], - peck: ["1L1"], - pluck: ["1L1"], - pound: ["1L1"], - powertrip: ["1L1"], - protect: ["1L1"], - psychup: ["1L1"], - quash: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rocktomb: ["1L1"], - roost: ["1L1"], - round: ["1L1"], - scald: ["1L1"], - secretpower: ["1L1"], - signalbeam: ["1L1"], - sing: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - snowscape: ["1L1"], - stealthrock: ["1L1"], - substitute: ["1L1"], - supersonic: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - terablast: ["1L1"], - toxic: ["1L1"], - tripleaxel: ["1L1"], - waterfall: ["1L1"], - watergun: ["1L1"], - waterpledge: ["1L1"], - waterpulse: ["1L1"], - watersport: ["1L1"], - weatherball: ["1L1"], - whirlpool: ["1L1"], - workup: ["1L1"], - yawn: ["1L1"], - }, - eventData: [ - {generation: 5, level: 10, gender: "M", isHidden: true, moves: ["1L1"]}, - {generation: 5, level: 15, shiny: 1, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 5, level: 15, gender: "M", moves: ["1L1"], pokeball: "cherishball"}, - {generation: 5, level: 10, gender: "M", isHidden: true, moves: ["1L1"]}, - {generation: 6, level: 7, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 7, level: 30, gender: "M", nature: "Hardy", moves: ["1L1"], pokeball: "pokeball"}, - {generation: 9, level: 1, moves: ["1L1"], pokeball: "pokeball"}, - ], - }, - prinplup: { - learnset: { - aerialace: ["1L1"], - agility: ["1L1"], - attract: ["1L1"], - bide: ["1L1"], - blizzard: ["1L1"], - brickbreak: ["1L1"], - brine: ["1L1"], - bubble: ["1L1"], - bubblebeam: ["1L1"], - captivate: ["1L1"], - charm: ["1L1"], - chillingwater: ["1L1"], - confide: ["1L1"], - covet: ["1L1"], - cut: ["1L1"], - defog: ["1L1"], - dig: ["1L1"], - disarmingvoice: ["1L1"], - dive: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - drillpeck: ["1L1"], - echoedvoice: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - featherdance: ["1L1"], - fling: ["1L1"], - flipturn: ["1L1"], - frustration: ["1L1"], - furyattack: ["1L1"], - grassknot: ["1L1"], - growl: ["1L1"], - hail: ["1L1"], - haze: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - honeclaws: ["1L1"], - hydropump: ["1L1"], - icebeam: ["1L1"], - icespinner: ["1L1"], - icywind: ["1L1"], - liquidation: ["1L1"], - metalclaw: ["1L1"], - mist: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - peck: ["1L1"], - pluck: ["1L1"], - protect: ["1L1"], - psychup: ["1L1"], - quash: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - scald: ["1L1"], - secretpower: ["1L1"], - shadowclaw: ["1L1"], - signalbeam: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - snowscape: ["1L1"], - stealthrock: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - toxic: ["1L1"], - tripleaxel: ["1L1"], - waterfall: ["1L1"], - watergun: ["1L1"], - waterpledge: ["1L1"], - waterpulse: ["1L1"], - watersport: ["1L1"], - weatherball: ["1L1"], - whirlpool: ["1L1"], - workup: ["1L1"], - }, - }, - empoleon: { - learnset: { - aerialace: ["1L1"], - agility: ["1L1"], - aircutter: ["1L1"], - airslash: ["1L1"], - aquajet: ["1L1"], - attract: ["1L1"], - avalanche: ["1L1"], - blizzard: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - brine: ["1L1"], - bubble: ["1L1"], - bubblebeam: ["1L1"], - bulldoze: ["1L1"], - captivate: ["1L1"], - charm: ["1L1"], - chillingwater: ["1L1"], - confide: ["1L1"], - covet: ["1L1"], - cut: ["1L1"], - defog: ["1L1"], - dig: ["1L1"], - disarmingvoice: ["1L1"], - dive: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - drillpeck: ["1L1"], - dualwingbeat: ["1L1"], - earthquake: ["1L1"], - echoedvoice: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - falseswipe: ["1L1"], - featherdance: ["1L1"], - flashcannon: ["1L1"], - fling: ["1L1"], - flipturn: ["1L1"], - frustration: ["1L1"], - furyattack: ["1L1"], - furycutter: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - growl: ["1L1"], - hail: ["1L1"], - haze: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - honeclaws: ["1L1"], - hydrocannon: ["1L1"], - hydropump: ["1L1"], - hyperbeam: ["1L1"], - icebeam: ["1L1"], - icespinner: ["1L1"], - icywind: ["1L1"], - irondefense: ["1L1"], - knockoff: ["1L1"], - laserfocus: ["1L1"], - lashout: ["1L1"], - liquidation: ["1L1"], - metalclaw: ["1L1"], - metalsound: ["1L1"], - mist: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - peck: ["1L1"], - pluck: ["1L1"], - protect: ["1L1"], - psychup: ["1L1"], - quash: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roar: ["1L1"], - rockclimb: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - scald: ["1L1"], - scaryface: ["1L1"], - secretpower: ["1L1"], - shadowclaw: ["1L1"], - signalbeam: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - snowscape: ["1L1"], - stealthrock: ["1L1"], - steelbeam: ["1L1"], - steelwing: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - swordsdance: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - throatchop: ["1L1"], - toxic: ["1L1"], - tripleaxel: ["1L1"], - uproar: ["1L1"], - vacuumwave: ["1L1"], - waterfall: ["1L1"], - watergun: ["1L1"], - waterpledge: ["1L1"], - waterpulse: ["1L1"], - wavecrash: ["1L1"], - weatherball: ["1L1"], - whirlpool: ["1L1"], - workup: ["1L1"], - }, - eventData: [ - {generation: 5, level: 100, gender: "M", moves: ["1L1"], pokeball: "cherishball"}, - ], - }, - starly: { - learnset: { - acrobatics: ["1L1"], - aerialace: ["1L1"], - agility: ["1L1"], - aircutter: ["1L1"], - airslash: ["1L1"], - astonish: ["1L1"], - attract: ["1L1"], - bravebird: ["1L1"], - captivate: ["1L1"], - confide: ["1L1"], - defog: ["1L1"], - detect: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dualwingbeat: ["1L1"], - echoedvoice: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - featherdance: ["1L1"], - finalgambit: ["1L1"], - fly: ["1L1"], - foresight: ["1L1"], - frustration: ["1L1"], - furyattack: ["1L1"], - growl: ["1L1"], - heatwave: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hurricane: ["1L1"], - mirrormove: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - ominouswind: ["1L1"], - pluck: ["1L1"], - protect: ["1L1"], - pursuit: ["1L1"], - quickattack: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - revenge: ["1L1"], - roost: ["1L1"], - round: ["1L1"], - sandattack: ["1L1"], - secretpower: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - steelwing: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - tackle: ["1L1"], - tailwind: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - toxic: ["1L1"], - twister: ["1L1"], - uproar: ["1L1"], - uturn: ["1L1"], - whirlwind: ["1L1"], - wingattack: ["1L1"], - workup: ["1L1"], - }, - eventData: [ - {generation: 4, level: 1, gender: "M", nature: "Mild", moves: ["1L1"], pokeball: "pokeball"}, - ], - }, - staravia: { - learnset: { - acrobatics: ["1L1"], - aerialace: ["1L1"], - agility: ["1L1"], - aircutter: ["1L1"], - airslash: ["1L1"], - attract: ["1L1"], - bravebird: ["1L1"], - captivate: ["1L1"], - confide: ["1L1"], - defog: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dualwingbeat: ["1L1"], - echoedvoice: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - featherdance: ["1L1"], - finalgambit: ["1L1"], - fly: ["1L1"], - frustration: ["1L1"], - growl: ["1L1"], - heatwave: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hurricane: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - ominouswind: ["1L1"], - pluck: ["1L1"], - protect: ["1L1"], - quickattack: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - roost: ["1L1"], - round: ["1L1"], - secretpower: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - steelwing: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - tackle: ["1L1"], - tailwind: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - toxic: ["1L1"], - twister: ["1L1"], - uproar: ["1L1"], - uturn: ["1L1"], - whirlwind: ["1L1"], - wingattack: ["1L1"], - workup: ["1L1"], - }, - encounters: [ - {generation: 4, level: 4}, - ], - }, - staraptor: { - learnset: { - acrobatics: ["1L1"], - aerialace: ["1L1"], - agility: ["1L1"], - aircutter: ["1L1"], - airslash: ["1L1"], - attract: ["1L1"], - bravebird: ["1L1"], - captivate: ["1L1"], - closecombat: ["1L1"], - confide: ["1L1"], - defog: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dualwingbeat: ["1L1"], - echoedvoice: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - featherdance: ["1L1"], - finalgambit: ["1L1"], - fly: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - growl: ["1L1"], - heatwave: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hurricane: ["1L1"], - hyperbeam: ["1L1"], - laserfocus: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - ominouswind: ["1L1"], - pluck: ["1L1"], - protect: ["1L1"], - quickattack: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - roost: ["1L1"], - round: ["1L1"], - secretpower: ["1L1"], - skyattack: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - steelwing: ["1L1"], - strugglebug: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - tackle: ["1L1"], - tailwind: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - toxic: ["1L1"], - twister: ["1L1"], - uproar: ["1L1"], - uturn: ["1L1"], - whirlwind: ["1L1"], - wingattack: ["1L1"], - workup: ["1L1"], - }, - }, - bidoof: { - learnset: { - amnesia: ["1L1"], - aquatail: ["1L1"], - attract: ["1L1"], - blizzard: ["1L1"], - captivate: ["1L1"], - chargebeam: ["1L1"], - confide: ["1L1"], - covet: ["1L1"], - crunch: ["1L1"], - curse: ["1L1"], - cut: ["1L1"], - defensecurl: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - echoedvoice: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - frustration: ["1L1"], - furycutter: ["1L1"], - furyswipes: ["1L1"], - grassknot: ["1L1"], - growl: ["1L1"], - headbutt: ["1L1"], - hiddenpower: ["1L1"], - hyperfang: ["1L1"], - icebeam: ["1L1"], - icywind: ["1L1"], - irontail: ["1L1"], - lastresort: ["1L1"], - mudslap: ["1L1"], - mudsport: ["1L1"], - naturalgift: ["1L1"], - odorsleuth: ["1L1"], - pluck: ["1L1"], - protect: ["1L1"], - quickattack: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - rockclimb: ["1L1"], - rocksmash: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - secretpower: ["1L1"], - shadowball: ["1L1"], - shockwave: ["1L1"], - skullbash: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - stealthrock: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - superfang: ["1L1"], - superpower: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - swordsdance: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - thief: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - watersport: ["1L1"], - workup: ["1L1"], - yawn: ["1L1"], - }, - eventData: [ - {generation: 4, level: 1, gender: "M", nature: "Lonely", abilities: ["1L1"], moves: ["1L1"], pokeball: "pokeball"}, - ], - }, - bibarel: { - learnset: { - amnesia: ["1L1"], - aquajet: ["1L1"], - aquatail: ["1L1"], - attract: ["1L1"], - blizzard: ["1L1"], - bulldoze: ["1L1"], - captivate: ["1L1"], - chargebeam: ["1L1"], - confide: ["1L1"], - covet: ["1L1"], - crunch: ["1L1"], - curse: ["1L1"], - cut: ["1L1"], - defensecurl: ["1L1"], - dig: ["1L1"], - dive: ["1L1"], - doubleteam: ["1L1"], - echoedvoice: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fling: ["1L1"], - focuspunch: ["1L1"], - frustration: ["1L1"], - furycutter: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - growl: ["1L1"], - headbutt: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - hyperfang: ["1L1"], - icebeam: ["1L1"], - icywind: ["1L1"], - irontail: ["1L1"], - lastresort: ["1L1"], - liquidation: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - pluck: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - rockclimb: ["1L1"], - rocksmash: ["1L1"], - rollout: ["1L1"], - rototiller: ["1L1"], - round: ["1L1"], - scald: ["1L1"], - secretpower: ["1L1"], - shadowball: ["1L1"], - shockwave: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - stealthrock: ["1L1"], - stompingtantrum: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - superfang: ["1L1"], - superpower: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - swordsdance: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - thief: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - waterfall: ["1L1"], - watergun: ["1L1"], - waterpulse: ["1L1"], - whirlpool: ["1L1"], - workup: ["1L1"], - yawn: ["1L1"], - }, - encounters: [ - {generation: 4, level: 4}, - ], - }, - kricketot: { - learnset: { - bide: ["1L1"], - bugbite: ["1L1"], - endeavor: ["1L1"], - growl: ["1L1"], - lunge: ["1L1"], - mudslap: ["1L1"], - skittersmack: ["1L1"], - snore: ["1L1"], - stringshot: ["1L1"], - strugglebug: ["1L1"], - tackle: ["1L1"], - terablast: ["1L1"], - uproar: ["1L1"], - }, - }, - kricketune: { - learnset: { - absorb: ["1L1"], - aerialace: ["1L1"], - attract: ["1L1"], - batonpass: ["1L1"], - bide: ["1L1"], - brickbreak: ["1L1"], - bugbite: ["1L1"], - bugbuzz: ["1L1"], - captivate: ["1L1"], - confide: ["1L1"], - cut: ["1L1"], - doubleteam: ["1L1"], - echoedvoice: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - falseswipe: ["1L1"], - fellstinger: ["1L1"], - flash: ["1L1"], - focusenergy: ["1L1"], - frustration: ["1L1"], - furycutter: ["1L1"], - gigadrain: ["1L1"], - gigaimpact: ["1L1"], - growl: ["1L1"], - healbell: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - honeclaws: ["1L1"], - hyperbeam: ["1L1"], - hypervoice: ["1L1"], - infestation: ["1L1"], - knockoff: ["1L1"], - laserfocus: ["1L1"], - leechlife: ["1L1"], - lunge: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - nightslash: ["1L1"], - perishsong: ["1L1"], - pounce: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rocksmash: ["1L1"], - round: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - silverwind: ["1L1"], - sing: ["1L1"], - skittersmack: ["1L1"], - slash: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - stickyweb: ["1L1"], - strength: ["1L1"], - stringshot: ["1L1"], - strugglebug: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swordsdance: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - throatchop: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - uproar: ["1L1"], - xscissor: ["1L1"], - }, - }, - shinx: { - learnset: { - attract: ["1L1"], - babydolleyes: ["1L1"], - bite: ["1L1"], - captivate: ["1L1"], - charge: ["1L1"], - chargebeam: ["1L1"], - confide: ["1L1"], - confuseray: ["1L1"], - crunch: ["1L1"], - discharge: ["1L1"], - doubleedge: ["1L1"], - doublekick: ["1L1"], - doubleteam: ["1L1"], - eerieimpulse: ["1L1"], - electricterrain: ["1L1"], - electroball: ["1L1"], - electroweb: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - faketears: ["1L1"], - firefang: ["1L1"], - flash: ["1L1"], - frustration: ["1L1"], - furycutter: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - howl: ["1L1"], - icefang: ["1L1"], - irontail: ["1L1"], - leer: ["1L1"], - lightscreen: ["1L1"], - magnetrise: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - nightslash: ["1L1"], - playrough: ["1L1"], - protect: ["1L1"], - psychicfangs: ["1L1"], - quickattack: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - risingvoltage: ["1L1"], - roar: ["1L1"], - round: ["1L1"], - scaryface: ["1L1"], - secretpower: ["1L1"], - shockwave: ["1L1"], - signalbeam: ["1L1"], - sleeptalk: ["1L1"], - snarl: ["1L1"], - snore: ["1L1"], - spark: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderfang: ["1L1"], - thundershock: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - voltswitch: ["1L1"], - wildcharge: ["1L1"], - }, - }, - luxio: { - learnset: { - attract: ["1L1"], - bite: ["1L1"], - captivate: ["1L1"], - charge: ["1L1"], - chargebeam: ["1L1"], - confide: ["1L1"], - confuseray: ["1L1"], - crunch: ["1L1"], - discharge: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - eerieimpulse: ["1L1"], - electricterrain: ["1L1"], - electroball: ["1L1"], - electroweb: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - faketears: ["1L1"], - firefang: ["1L1"], - flash: ["1L1"], - frustration: ["1L1"], - furycutter: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - icefang: ["1L1"], - irontail: ["1L1"], - leer: ["1L1"], - lightscreen: ["1L1"], - magnetrise: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - playrough: ["1L1"], - protect: ["1L1"], - psychicfangs: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - risingvoltage: ["1L1"], - roar: ["1L1"], - round: ["1L1"], - scaryface: ["1L1"], - secretpower: ["1L1"], - shockwave: ["1L1"], - signalbeam: ["1L1"], - sleeptalk: ["1L1"], - snarl: ["1L1"], - snore: ["1L1"], - spark: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderfang: ["1L1"], - thundershock: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - voltswitch: ["1L1"], - wildcharge: ["1L1"], - }, - }, - luxray: { - learnset: { - agility: ["1L1"], - attract: ["1L1"], - bite: ["1L1"], - bodyslam: ["1L1"], - captivate: ["1L1"], - charge: ["1L1"], - chargebeam: ["1L1"], - confide: ["1L1"], - confuseray: ["1L1"], - crunch: ["1L1"], - discharge: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - eerieimpulse: ["1L1"], - electricterrain: ["1L1"], - electroball: ["1L1"], - electroweb: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - faketears: ["1L1"], - firefang: ["1L1"], - flash: ["1L1"], - frustration: ["1L1"], - furycutter: ["1L1"], - gigaimpact: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - icefang: ["1L1"], - irontail: ["1L1"], - laserfocus: ["1L1"], - leer: ["1L1"], - lightscreen: ["1L1"], - magnetrise: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - playrough: ["1L1"], - protect: ["1L1"], - psychicfangs: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - risingvoltage: ["1L1"], - roar: ["1L1"], - round: ["1L1"], - scaryface: ["1L1"], - secretpower: ["1L1"], - shockwave: ["1L1"], - signalbeam: ["1L1"], - sleeptalk: ["1L1"], - snarl: ["1L1"], - snore: ["1L1"], - spark: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - supercellslam: ["1L1"], - superpower: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - throatchop: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderfang: ["1L1"], - thundershock: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - voltswitch: ["1L1"], - wildcharge: ["1L1"], - }, - }, - cranidos: { - learnset: { - ancientpower: ["1L1"], - assurance: ["1L1"], - attract: ["1L1"], - blizzard: ["1L1"], - bodyslam: ["1L1"], - bulldoze: ["1L1"], - captivate: ["1L1"], - chipaway: ["1L1"], - confide: ["1L1"], - crunch: ["1L1"], - curse: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dragoncheer: ["1L1"], - dragonpulse: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fireblast: ["1L1"], - firepunch: ["1L1"], - flamethrower: ["1L1"], - fling: ["1L1"], - focusenergy: ["1L1"], - frustration: ["1L1"], - hammerarm: ["1L1"], - headbutt: ["1L1"], - headsmash: ["1L1"], - hiddenpower: ["1L1"], - icebeam: ["1L1"], - incinerate: ["1L1"], - ironhead: ["1L1"], - irontail: ["1L1"], - leer: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - payback: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - pursuit: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roar: ["1L1"], - rockblast: ["1L1"], - rockclimb: ["1L1"], - rockpolish: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - sandstorm: ["1L1"], - scaryface: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - shockwave: ["1L1"], - slam: ["1L1"], - sleeptalk: ["1L1"], - smackdown: ["1L1"], - snore: ["1L1"], - spite: ["1L1"], - stealthrock: ["1L1"], - stomp: ["1L1"], - stompingtantrum: ["1L1"], - stoneedge: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - superpower: ["1L1"], - swagger: ["1L1"], - swordsdance: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thrash: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderpunch: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - uproar: ["1L1"], - whirlwind: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 5, level: 15, gender: "M", moves: ["1L1"], pokeball: "cherishball"}, - ], - }, - rampardos: { - learnset: { - ancientpower: ["1L1"], - assurance: ["1L1"], - attract: ["1L1"], - avalanche: ["1L1"], - blizzard: ["1L1"], - bodypress: ["1L1"], - bodyslam: ["1L1"], - breakingswipe: ["1L1"], - brickbreak: ["1L1"], - bulldoze: ["1L1"], - captivate: ["1L1"], - chipaway: ["1L1"], - confide: ["1L1"], - crunch: ["1L1"], - curse: ["1L1"], - cut: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dragoncheer: ["1L1"], - dragonclaw: ["1L1"], - dragonpulse: ["1L1"], - dragontail: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fireblast: ["1L1"], - firepunch: ["1L1"], - flamethrower: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - focusenergy: ["1L1"], - focuspunch: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - headbutt: ["1L1"], - headsmash: ["1L1"], - heavyslam: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - icebeam: ["1L1"], - incinerate: ["1L1"], - ironhead: ["1L1"], - irontail: ["1L1"], - laserfocus: ["1L1"], - leer: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - outrage: ["1L1"], - painsplit: ["1L1"], - payback: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - pursuit: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roar: ["1L1"], - rockblast: ["1L1"], - rockclimb: ["1L1"], - rockpolish: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - sandstorm: ["1L1"], - scaryface: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - shockwave: ["1L1"], - slam: ["1L1"], - sleeptalk: ["1L1"], - smackdown: ["1L1"], - snore: ["1L1"], - spite: ["1L1"], - stealthrock: ["1L1"], - stompingtantrum: ["1L1"], - stoneedge: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - supercellslam: ["1L1"], - superpower: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - swordsdance: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderpunch: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - uproar: ["1L1"], - whirlpool: ["1L1"], - zenheadbutt: ["1L1"], - }, - }, - shieldon: { - learnset: { - ancientpower: ["1L1"], - attract: ["1L1"], - blizzard: ["1L1"], - bodyslam: ["1L1"], - bulldoze: ["1L1"], - captivate: ["1L1"], - confide: ["1L1"], - counter: ["1L1"], - curse: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fireblast: ["1L1"], - fissure: ["1L1"], - flamethrower: ["1L1"], - flashcannon: ["1L1"], - focusenergy: ["1L1"], - frustration: ["1L1"], - guardsplit: ["1L1"], - hardpress: ["1L1"], - headbutt: ["1L1"], - heavyslam: ["1L1"], - hiddenpower: ["1L1"], - icebeam: ["1L1"], - incinerate: ["1L1"], - irondefense: ["1L1"], - ironhead: ["1L1"], - irontail: ["1L1"], - magnetrise: ["1L1"], - metalburst: ["1L1"], - metalsound: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - powergem: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roar: ["1L1"], - rockblast: ["1L1"], - rockpolish: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - sandstorm: ["1L1"], - sandtomb: ["1L1"], - scaryface: ["1L1"], - scorchingsands: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - shockwave: ["1L1"], - sleeptalk: ["1L1"], - smackdown: ["1L1"], - snore: ["1L1"], - stealthrock: ["1L1"], - steelbeam: ["1L1"], - stompingtantrum: ["1L1"], - stoneedge: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - wideguard: ["1L1"], - }, - eventData: [ - {generation: 5, level: 15, gender: "M", moves: ["1L1"], pokeball: "cherishball"}, - ], - }, - bastiodon: { - learnset: { - ancientpower: ["1L1"], - attract: ["1L1"], - avalanche: ["1L1"], - blizzard: ["1L1"], - block: ["1L1"], - bodypress: ["1L1"], - bodyslam: ["1L1"], - bulldoze: ["1L1"], - captivate: ["1L1"], - confide: ["1L1"], - curse: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fireblast: ["1L1"], - flamethrower: ["1L1"], - flashcannon: ["1L1"], - foulplay: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - hardpress: ["1L1"], - headbutt: ["1L1"], - heavyslam: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - icebeam: ["1L1"], - incinerate: ["1L1"], - irondefense: ["1L1"], - ironhead: ["1L1"], - irontail: ["1L1"], - magiccoat: ["1L1"], - magnetrise: ["1L1"], - metalburst: ["1L1"], - metalsound: ["1L1"], - meteorbeam: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - outrage: ["1L1"], - powergem: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - reversal: ["1L1"], - roar: ["1L1"], - rockblast: ["1L1"], - rockpolish: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - sandstorm: ["1L1"], - sandtomb: ["1L1"], - scaryface: ["1L1"], - scorchingsands: ["1L1"], - secretpower: ["1L1"], - shockwave: ["1L1"], - sleeptalk: ["1L1"], - smackdown: ["1L1"], - snore: ["1L1"], - stealthrock: ["1L1"], - steelbeam: ["1L1"], - stompingtantrum: ["1L1"], - stoneedge: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - wideguard: ["1L1"], - }, - }, - burmy: { - learnset: { - bugbite: ["1L1"], - electroweb: ["1L1"], - hiddenpower: ["1L1"], - protect: ["1L1"], - snore: ["1L1"], - stringshot: ["1L1"], - tackle: ["1L1"], - }, - }, - wormadam: { - learnset: { - allyswitch: ["1L1"], - attract: ["1L1"], - bugbite: ["1L1"], - bugbuzz: ["1L1"], - bulletseed: ["1L1"], - captivate: ["1L1"], - confide: ["1L1"], - confusion: ["1L1"], - doubleteam: ["1L1"], - dreameater: ["1L1"], - electroweb: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - flail: ["1L1"], - flash: ["1L1"], - frustration: ["1L1"], - gigadrain: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - growth: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - infestation: ["1L1"], - leafstorm: ["1L1"], - naturalgift: ["1L1"], - protect: ["1L1"], - psybeam: ["1L1"], - psychic: ["1L1"], - psychup: ["1L1"], - quiverdance: ["1L1"], - raindance: ["1L1"], - razorleaf: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - secretpower: ["1L1"], - seedbomb: ["1L1"], - shadowball: ["1L1"], - signalbeam: ["1L1"], - skillswap: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - stringshot: ["1L1"], - strugglebug: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - synthesis: ["1L1"], - tackle: ["1L1"], - telekinesis: ["1L1"], - thief: ["1L1"], - toxic: ["1L1"], - uproar: ["1L1"], - venoshock: ["1L1"], - worryseed: ["1L1"], - }, - }, - wormadamsandy: { - learnset: { - allyswitch: ["1L1"], - attract: ["1L1"], - bugbite: ["1L1"], - bugbuzz: ["1L1"], - bulldoze: ["1L1"], - captivate: ["1L1"], - confide: ["1L1"], - confusion: ["1L1"], - dig: ["1L1"], - doubleteam: ["1L1"], - dreameater: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - electroweb: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fissure: ["1L1"], - flail: ["1L1"], - flash: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - harden: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - infestation: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - protect: ["1L1"], - psybeam: ["1L1"], - psychic: ["1L1"], - psychup: ["1L1"], - quiverdance: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rockblast: ["1L1"], - rocktomb: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - sandstorm: ["1L1"], - secretpower: ["1L1"], - shadowball: ["1L1"], - signalbeam: ["1L1"], - skillswap: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - stealthrock: ["1L1"], - stringshot: ["1L1"], - strugglebug: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - tackle: ["1L1"], - telekinesis: ["1L1"], - thief: ["1L1"], - toxic: ["1L1"], - uproar: ["1L1"], - venoshock: ["1L1"], - }, - }, - wormadamtrash: { - learnset: { - allyswitch: ["1L1"], - attract: ["1L1"], - bugbite: ["1L1"], - bugbuzz: ["1L1"], - captivate: ["1L1"], - confide: ["1L1"], - confusion: ["1L1"], - doubleteam: ["1L1"], - dreameater: ["1L1"], - electroweb: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - flail: ["1L1"], - flash: ["1L1"], - flashcannon: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - gunkshot: ["1L1"], - gyroball: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - infestation: ["1L1"], - irondefense: ["1L1"], - ironhead: ["1L1"], - magnetrise: ["1L1"], - metalburst: ["1L1"], - metalsound: ["1L1"], - mirrorshot: ["1L1"], - naturalgift: ["1L1"], - protect: ["1L1"], - psybeam: ["1L1"], - psychic: ["1L1"], - psychup: ["1L1"], - quiverdance: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - secretpower: ["1L1"], - shadowball: ["1L1"], - signalbeam: ["1L1"], - skillswap: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - stealthrock: ["1L1"], - stringshot: ["1L1"], - strugglebug: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - tackle: ["1L1"], - telekinesis: ["1L1"], - thief: ["1L1"], - toxic: ["1L1"], - uproar: ["1L1"], - venoshock: ["1L1"], - }, - }, - mothim: { - learnset: { - acrobatics: ["1L1"], - aerialace: ["1L1"], - aircutter: ["1L1"], - airslash: ["1L1"], - attract: ["1L1"], - bugbite: ["1L1"], - bugbuzz: ["1L1"], - camouflage: ["1L1"], - captivate: ["1L1"], - confide: ["1L1"], - confusion: ["1L1"], - defog: ["1L1"], - doubleteam: ["1L1"], - dreameater: ["1L1"], - electroweb: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - flash: ["1L1"], - frustration: ["1L1"], - gigadrain: ["1L1"], - gigaimpact: ["1L1"], - gust: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - infestation: ["1L1"], - lunge: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - ominouswind: ["1L1"], - poisonpowder: ["1L1"], - protect: ["1L1"], - psybeam: ["1L1"], - psychic: ["1L1"], - psychup: ["1L1"], - quiverdance: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roost: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - secretpower: ["1L1"], - shadowball: ["1L1"], - signalbeam: ["1L1"], - silverwind: ["1L1"], - skillswap: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - stringshot: ["1L1"], - strugglebug: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - tackle: ["1L1"], - tailwind: ["1L1"], - thief: ["1L1"], - toxic: ["1L1"], - twister: ["1L1"], - uturn: ["1L1"], - venoshock: ["1L1"], - }, - }, - combee: { - learnset: { - aircutter: ["1L1"], - bugbite: ["1L1"], - bugbuzz: ["1L1"], - dualwingbeat: ["1L1"], - endeavor: ["1L1"], - gust: ["1L1"], - lunge: ["1L1"], - mudslap: ["1L1"], - ominouswind: ["1L1"], - skittersmack: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - stringshot: ["1L1"], - strugglebug: ["1L1"], - sweetscent: ["1L1"], - swift: ["1L1"], - tailwind: ["1L1"], - terablast: ["1L1"], - }, - }, - vespiquen: { - learnset: { - acrobatics: ["1L1"], - aerialace: ["1L1"], - agility: ["1L1"], - aircutter: ["1L1"], - airslash: ["1L1"], - aromatherapy: ["1L1"], - aromaticmist: ["1L1"], - assurance: ["1L1"], - attackorder: ["1L1"], - attract: ["1L1"], - beatup: ["1L1"], - bugbite: ["1L1"], - bugbuzz: ["1L1"], - captivate: ["1L1"], - confide: ["1L1"], - confuseray: ["1L1"], - crosspoison: ["1L1"], - cut: ["1L1"], - defendorder: ["1L1"], - defog: ["1L1"], - destinybond: ["1L1"], - doubleteam: ["1L1"], - dualwingbeat: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fellstinger: ["1L1"], - flash: ["1L1"], - fling: ["1L1"], - frustration: ["1L1"], - furycutter: ["1L1"], - furyswipes: ["1L1"], - gigaimpact: ["1L1"], - gust: ["1L1"], - healorder: ["1L1"], - helpinghand: ["1L1"], - hex: ["1L1"], - hiddenpower: ["1L1"], - honeclaws: ["1L1"], - hurricane: ["1L1"], - hyperbeam: ["1L1"], - infestation: ["1L1"], - laserfocus: ["1L1"], - lunge: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - ominouswind: ["1L1"], - pinmissile: ["1L1"], - poisonsting: ["1L1"], - pollenpuff: ["1L1"], - pounce: ["1L1"], - powergem: ["1L1"], - protect: ["1L1"], - psychicnoise: ["1L1"], - pursuit: ["1L1"], - quash: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - revenge: ["1L1"], - reversal: ["1L1"], - roost: ["1L1"], - round: ["1L1"], - scaryface: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - signalbeam: ["1L1"], - silverwind: ["1L1"], - skittersmack: ["1L1"], - slash: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - snore: ["1L1"], - spikes: ["1L1"], - spite: ["1L1"], - stringshot: ["1L1"], - strugglebug: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - sweetscent: ["1L1"], - swift: ["1L1"], - tailwind: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - toxic: ["1L1"], - toxicspikes: ["1L1"], - uproar: ["1L1"], - uturn: ["1L1"], - venoshock: ["1L1"], - xscissor: ["1L1"], - }, - }, - pachirisu: { - learnset: { - aerialace: ["1L1"], - agility: ["1L1"], - alluringvoice: ["1L1"], - attract: ["1L1"], - babydolleyes: ["1L1"], - bestow: ["1L1"], - bide: ["1L1"], - bite: ["1L1"], - captivate: ["1L1"], - charge: ["1L1"], - chargebeam: ["1L1"], - charm: ["1L1"], - confide: ["1L1"], - covet: ["1L1"], - cut: ["1L1"], - defensecurl: ["1L1"], - dig: ["1L1"], - discharge: ["1L1"], - doubleteam: ["1L1"], - echoedvoice: ["1L1"], - eerieimpulse: ["1L1"], - electricterrain: ["1L1"], - electroball: ["1L1"], - electroweb: ["1L1"], - encore: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - faketears: ["1L1"], - flail: ["1L1"], - flash: ["1L1"], - flatter: ["1L1"], - fling: ["1L1"], - followme: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - growl: ["1L1"], - gunkshot: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - hyperfang: ["1L1"], - iondeluge: ["1L1"], - irontail: ["1L1"], - laserfocus: ["1L1"], - lastresort: ["1L1"], - lightscreen: ["1L1"], - magnetrise: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - nuzzle: ["1L1"], - playrough: ["1L1"], - protect: ["1L1"], - quickattack: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - secretpower: ["1L1"], - seedbomb: ["1L1"], - shockwave: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - spark: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - superfang: ["1L1"], - swagger: ["1L1"], - sweetkiss: ["1L1"], - swift: ["1L1"], - tailwhip: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderfang: ["1L1"], - thunderpunch: ["1L1"], - thundershock: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - uproar: ["1L1"], - uturn: ["1L1"], - voltswitch: ["1L1"], - wildcharge: ["1L1"], - }, - eventData: [ - {generation: 6, level: 50, nature: "Impish", ivs: {hp: 31, atk: 31, def: 31, spa: 14, spd: 31, spe: 31}, isHidden: true, moves: ["1L1"], pokeball: "cherishball"}, - ], - }, - buizel: { - learnset: { - agility: ["1L1"], - aquajet: ["1L1"], - aquaring: ["1L1"], - aquatail: ["1L1"], - attract: ["1L1"], - batonpass: ["1L1"], - bite: ["1L1"], - blizzard: ["1L1"], - brickbreak: ["1L1"], - brine: ["1L1"], - bulkup: ["1L1"], - captivate: ["1L1"], - chillingwater: ["1L1"], - confide: ["1L1"], - crunch: ["1L1"], - dig: ["1L1"], - dive: ["1L1"], - doublehit: ["1L1"], - doubleslap: ["1L1"], - doubleteam: ["1L1"], - echoedvoice: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fling: ["1L1"], - flipturn: ["1L1"], - focuspunch: ["1L1"], - frustration: ["1L1"], - furycutter: ["1L1"], - furyswipes: ["1L1"], - growl: ["1L1"], - hail: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hydropump: ["1L1"], - icebeam: ["1L1"], - icefang: ["1L1"], - icepunch: ["1L1"], - icespinner: ["1L1"], - icywind: ["1L1"], - irontail: ["1L1"], - liquidation: ["1L1"], - lowkick: ["1L1"], - lowsweep: ["1L1"], - mefirst: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - odorsleuth: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - pursuit: ["1L1"], - quickattack: ["1L1"], - raindance: ["1L1"], - razorwind: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roar: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - scald: ["1L1"], - secretpower: ["1L1"], - slash: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - soak: ["1L1"], - sonicboom: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - switcheroo: ["1L1"], - tackle: ["1L1"], - tailslap: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - toxic: ["1L1"], - waterfall: ["1L1"], - watergun: ["1L1"], - waterpulse: ["1L1"], - watersport: ["1L1"], - wavecrash: ["1L1"], - whirlpool: ["1L1"], - }, - }, - floatzel: { - learnset: { - agility: ["1L1"], - aquajet: ["1L1"], - aquatail: ["1L1"], - attract: ["1L1"], - batonpass: ["1L1"], - bite: ["1L1"], - blizzard: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - brine: ["1L1"], - bulkup: ["1L1"], - captivate: ["1L1"], - chillingwater: ["1L1"], - confide: ["1L1"], - crunch: ["1L1"], - dig: ["1L1"], - dive: ["1L1"], - doubleedge: ["1L1"], - doublehit: ["1L1"], - doubleteam: ["1L1"], - echoedvoice: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fling: ["1L1"], - flipturn: ["1L1"], - focusblast: ["1L1"], - focuspunch: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - growl: ["1L1"], - hail: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hydropump: ["1L1"], - hyperbeam: ["1L1"], - icebeam: ["1L1"], - icefang: ["1L1"], - icepunch: ["1L1"], - icespinner: ["1L1"], - icywind: ["1L1"], - irontail: ["1L1"], - liquidation: ["1L1"], - lowkick: ["1L1"], - lowsweep: ["1L1"], - metronome: ["1L1"], - muddywater: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - payback: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - pursuit: ["1L1"], - quickattack: ["1L1"], - raindance: ["1L1"], - razorwind: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roar: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - scald: ["1L1"], - scaryface: ["1L1"], - secretpower: ["1L1"], - sleeptalk: ["1L1"], - snarl: ["1L1"], - snore: ["1L1"], - soak: ["1L1"], - sonicboom: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - waterfall: ["1L1"], - watergun: ["1L1"], - waterpulse: ["1L1"], - watersport: ["1L1"], - wavecrash: ["1L1"], - whirlpool: ["1L1"], - }, - encounters: [ - {generation: 4, level: 22}, - {generation: 5, level: 10}, - ], - }, - cherubi: { - learnset: { - aromatherapy: ["1L1"], - attract: ["1L1"], - bulletseed: ["1L1"], - captivate: ["1L1"], - confide: ["1L1"], - dazzlinggleam: ["1L1"], - defensecurl: ["1L1"], - doubleteam: ["1L1"], - drainingkiss: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - flash: ["1L1"], - flowershield: ["1L1"], - frustration: ["1L1"], - gigadrain: ["1L1"], - grassknot: ["1L1"], - grasswhistle: ["1L1"], - grassyglide: ["1L1"], - grassyterrain: ["1L1"], - growth: ["1L1"], - healingwish: ["1L1"], - healpulse: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - leafage: ["1L1"], - leechseed: ["1L1"], - luckychant: ["1L1"], - magicalleaf: ["1L1"], - morningsun: ["1L1"], - naturalgift: ["1L1"], - naturepower: ["1L1"], - petalblizzard: ["1L1"], - pollenpuff: ["1L1"], - protect: ["1L1"], - razorleaf: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - secretpower: ["1L1"], - seedbomb: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - sweetscent: ["1L1"], - swordsdance: ["1L1"], - synthesis: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - tickle: ["1L1"], - toxic: ["1L1"], - weatherball: ["1L1"], - worryseed: ["1L1"], - }, - }, - cherrim: { - learnset: { - attract: ["1L1"], - bulletseed: ["1L1"], - captivate: ["1L1"], - confide: ["1L1"], - dazzlinggleam: ["1L1"], - doubleteam: ["1L1"], - drainingkiss: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - flash: ["1L1"], - flowershield: ["1L1"], - frustration: ["1L1"], - gigadrain: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - grassyglide: ["1L1"], - grassyterrain: ["1L1"], - growth: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - laserfocus: ["1L1"], - leafage: ["1L1"], - leechseed: ["1L1"], - luckychant: ["1L1"], - magicalleaf: ["1L1"], - morningsun: ["1L1"], - naturalgift: ["1L1"], - naturepower: ["1L1"], - petalblizzard: ["1L1"], - petaldance: ["1L1"], - playrough: ["1L1"], - pollenpuff: ["1L1"], - protect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - secretpower: ["1L1"], - seedbomb: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - solarblade: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swordsdance: ["1L1"], - synthesis: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - toxic: ["1L1"], - weatherball: ["1L1"], - worryseed: ["1L1"], - }, - }, - shellos: { - learnset: { - acidarmor: ["1L1"], - amnesia: ["1L1"], - ancientpower: ["1L1"], - attract: ["1L1"], - blizzard: ["1L1"], - bodyslam: ["1L1"], - brine: ["1L1"], - bulldoze: ["1L1"], - captivate: ["1L1"], - chillingwater: ["1L1"], - clearsmog: ["1L1"], - confide: ["1L1"], - counter: ["1L1"], - curse: ["1L1"], - dive: ["1L1"], - doubleteam: ["1L1"], - earthpower: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fissure: ["1L1"], - frustration: ["1L1"], - hail: ["1L1"], - harden: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hydropump: ["1L1"], - icebeam: ["1L1"], - icywind: ["1L1"], - infestation: ["1L1"], - liquidation: ["1L1"], - memento: ["1L1"], - mirrorcoat: ["1L1"], - mist: ["1L1"], - mudbomb: ["1L1"], - muddywater: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - mudsport: ["1L1"], - naturalgift: ["1L1"], - painsplit: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - recover: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rockslide: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - sandstorm: ["1L1"], - scald: ["1L1"], - secretpower: ["1L1"], - skittersmack: ["1L1"], - sleeptalk: ["1L1"], - sludge: ["1L1"], - snore: ["1L1"], - snowscape: ["1L1"], - spitup: ["1L1"], - stealthrock: ["1L1"], - stockpile: ["1L1"], - stoneedge: ["1L1"], - stringshot: ["1L1"], - substitute: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - swallow: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - toxic: ["1L1"], - trumpcard: ["1L1"], - waterfall: ["1L1"], - watergun: ["1L1"], - waterpulse: ["1L1"], - whirlpool: ["1L1"], - yawn: ["1L1"], - }, - }, - gastrodon: { - learnset: { - amnesia: ["1L1"], - ancientpower: ["1L1"], - attract: ["1L1"], - blizzard: ["1L1"], - block: ["1L1"], - bodyslam: ["1L1"], - brine: ["1L1"], - bulldoze: ["1L1"], - captivate: ["1L1"], - chillingwater: ["1L1"], - confide: ["1L1"], - curse: ["1L1"], - dig: ["1L1"], - dive: ["1L1"], - doubleteam: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - flash: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - hail: ["1L1"], - harden: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hydropump: ["1L1"], - hyperbeam: ["1L1"], - icebeam: ["1L1"], - icywind: ["1L1"], - infestation: ["1L1"], - liquidation: ["1L1"], - memento: ["1L1"], - mudbomb: ["1L1"], - muddywater: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - mudsport: ["1L1"], - naturalgift: ["1L1"], - painsplit: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - recover: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rockblast: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - sandstorm: ["1L1"], - sandtomb: ["1L1"], - scald: ["1L1"], - secretpower: ["1L1"], - skittersmack: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - sludgewave: ["1L1"], - snore: ["1L1"], - snowscape: ["1L1"], - spikes: ["1L1"], - stealthrock: ["1L1"], - stompingtantrum: ["1L1"], - stoneedge: ["1L1"], - strength: ["1L1"], - stringshot: ["1L1"], - substitute: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - toxic: ["1L1"], - waterfall: ["1L1"], - watergun: ["1L1"], - waterpulse: ["1L1"], - weatherball: ["1L1"], - whirlpool: ["1L1"], - }, - eventData: [ - {generation: 7, level: 50, gender: "F", nature: "Modest", abilities: ["1L1"], ivs: {hp: 31, atk: 0, def: 31, spa: 31, spd: 31, spe: 31}, moves: ["1L1"], pokeball: "cherishball"}, - ], - encounters: [ - {generation: 4, level: 20}, - ], - }, - gastrodoneast: { - learnset: { - earthpower: ["1L1"], - icebeam: ["1L1"], - icywind: ["1L1"], - protect: ["1L1"], - surf: ["1L1"], - yawn: ["1L1"], - }, - eventData: [ - {generation: 8, level: 50, gender: "F", nature: "Quiet", abilities: ["1L1"], ivs: {hp: 31, atk: 2, def: 31, spa: 31, spd: 31, spe: 0}, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 8, level: 50, gender: "F", nature: "Sassy", abilities: ["1L1"], ivs: {hp: 31, atk: 0, def: 31, spa: 31, spd: 31, spe: 0}, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 9, level: 50, gender: "M", nature: "Bold", abilities: ["1L1"], ivs: {hp: 31, atk: 0, def: 31, spa: 31, spd: 31, spe: 8}, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 9, level: 50, gender: "F", nature: "Calm", abilities: ["1L1"], ivs: {hp: 31, atk: 0, def: 31, spa: 31, spd: 31, spe: 8}, moves: ["1L1"], pokeball: "cherishball"}, - ], - encounters: [ - {generation: 4, level: 20}, - ], - }, - drifloon: { - learnset: { - acrobatics: ["1L1"], - aerialace: ["1L1"], - aircutter: ["1L1"], - allyswitch: ["1L1"], - amnesia: ["1L1"], - astonish: ["1L1"], - attract: ["1L1"], - batonpass: ["1L1"], - bind: ["1L1"], - bodyslam: ["1L1"], - brutalswing: ["1L1"], - calmmind: ["1L1"], - captivate: ["1L1"], - chargebeam: ["1L1"], - clearsmog: ["1L1"], - confide: ["1L1"], - constrict: ["1L1"], - curse: ["1L1"], - cut: ["1L1"], - defog: ["1L1"], - destinybond: ["1L1"], - disable: ["1L1"], - doubleteam: ["1L1"], - dreameater: ["1L1"], - embargo: ["1L1"], - endure: ["1L1"], - explosion: ["1L1"], - facade: ["1L1"], - flash: ["1L1"], - fly: ["1L1"], - focusenergy: ["1L1"], - frustration: ["1L1"], - gust: ["1L1"], - gyroball: ["1L1"], - haze: ["1L1"], - helpinghand: ["1L1"], - hex: ["1L1"], - hiddenpower: ["1L1"], - hypnosis: ["1L1"], - icywind: ["1L1"], - imprison: ["1L1"], - knockoff: ["1L1"], - magiccoat: ["1L1"], - memento: ["1L1"], - minimize: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - nightshade: ["1L1"], - ominouswind: ["1L1"], - painsplit: ["1L1"], - payback: ["1L1"], - phantomforce: ["1L1"], - protect: ["1L1"], - psybeam: ["1L1"], - psychic: ["1L1"], - psychup: ["1L1"], - raindance: ["1L1"], - recycle: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - secretpower: ["1L1"], - selfdestruct: ["1L1"], - shadowball: ["1L1"], - shockwave: ["1L1"], - silverwind: ["1L1"], - skillswap: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - spite: ["1L1"], - spitup: ["1L1"], - stockpile: ["1L1"], - storedpower: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swallow: ["1L1"], - swift: ["1L1"], - tailwind: ["1L1"], - telekinesis: ["1L1"], - temperflare: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - trick: ["1L1"], - trickroom: ["1L1"], - weatherball: ["1L1"], - willowisp: ["1L1"], - }, - }, - drifblim: { - learnset: { - acrobatics: ["1L1"], - aerialace: ["1L1"], - aircutter: ["1L1"], - airslash: ["1L1"], - allyswitch: ["1L1"], - amnesia: ["1L1"], - astonish: ["1L1"], - attract: ["1L1"], - batonpass: ["1L1"], - bind: ["1L1"], - bodyslam: ["1L1"], - brutalswing: ["1L1"], - calmmind: ["1L1"], - captivate: ["1L1"], - chargebeam: ["1L1"], - confide: ["1L1"], - constrict: ["1L1"], - curse: ["1L1"], - cut: ["1L1"], - defog: ["1L1"], - destinybond: ["1L1"], - doubleteam: ["1L1"], - dreameater: ["1L1"], - embargo: ["1L1"], - endure: ["1L1"], - explosion: ["1L1"], - facade: ["1L1"], - flash: ["1L1"], - fling: ["1L1"], - fly: ["1L1"], - focusenergy: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - gust: ["1L1"], - gyroball: ["1L1"], - haze: ["1L1"], - helpinghand: ["1L1"], - hex: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - icywind: ["1L1"], - imprison: ["1L1"], - knockoff: ["1L1"], - magiccoat: ["1L1"], - minimize: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - nightshade: ["1L1"], - ominouswind: ["1L1"], - painsplit: ["1L1"], - payback: ["1L1"], - phantomforce: ["1L1"], - protect: ["1L1"], - psybeam: ["1L1"], - psychic: ["1L1"], - psychup: ["1L1"], - raindance: ["1L1"], - recycle: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - secretpower: ["1L1"], - selfdestruct: ["1L1"], - shadowball: ["1L1"], - shockwave: ["1L1"], - silverwind: ["1L1"], - skillswap: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - spite: ["1L1"], - spitup: ["1L1"], - stockpile: ["1L1"], - storedpower: ["1L1"], - strengthsap: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swallow: ["1L1"], - swift: ["1L1"], - tailwind: ["1L1"], - telekinesis: ["1L1"], - temperflare: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - trick: ["1L1"], - trickroom: ["1L1"], - weatherball: ["1L1"], - willowisp: ["1L1"], - }, - encounters: [ - {generation: 7, level: 11, pokeball: "pokeball"}, - ], - }, - buneary: { - learnset: { - afteryou: ["1L1"], - agility: ["1L1"], - assurance: ["1L1"], - attract: ["1L1"], - babydolleyes: ["1L1"], - batonpass: ["1L1"], - bounce: ["1L1"], - captivate: ["1L1"], - chargebeam: ["1L1"], - charm: ["1L1"], - circlethrow: ["1L1"], - confide: ["1L1"], - copycat: ["1L1"], - cosmicpower: ["1L1"], - covet: ["1L1"], - cut: ["1L1"], - defensecurl: ["1L1"], - dig: ["1L1"], - dizzypunch: ["1L1"], - doublehit: ["1L1"], - doublekick: ["1L1"], - doubleteam: ["1L1"], - drainpunch: ["1L1"], - encore: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - entrainment: ["1L1"], - facade: ["1L1"], - fakeout: ["1L1"], - faketears: ["1L1"], - firepunch: ["1L1"], - flail: ["1L1"], - flatter: ["1L1"], - fling: ["1L1"], - focuspunch: ["1L1"], - foresight: ["1L1"], - frustration: ["1L1"], - grassknot: ["1L1"], - headbutt: ["1L1"], - healbell: ["1L1"], - healingwish: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hypervoice: ["1L1"], - icebeam: ["1L1"], - icepunch: ["1L1"], - irontail: ["1L1"], - jumpkick: ["1L1"], - lastresort: ["1L1"], - lowkick: ["1L1"], - lowsweep: ["1L1"], - magiccoat: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - mudslap: ["1L1"], - mudsport: ["1L1"], - naturalgift: ["1L1"], - payback: ["1L1"], - playrough: ["1L1"], - pound: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - quickattack: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - rocksmash: ["1L1"], - round: ["1L1"], - secretpower: ["1L1"], - shadowball: ["1L1"], - shockwave: ["1L1"], - skyuppercut: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - splash: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - sweetkiss: ["1L1"], - swift: ["1L1"], - switcheroo: ["1L1"], - teeterdance: ["1L1"], - thunderbolt: ["1L1"], - thunderpunch: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - tripleaxel: ["1L1"], - uproar: ["1L1"], - waterpulse: ["1L1"], - workup: ["1L1"], - }, - }, - lopunny: { - learnset: { - acrobatics: ["1L1"], - afteryou: ["1L1"], - agility: ["1L1"], - assurance: ["1L1"], - attract: ["1L1"], - aurasphere: ["1L1"], - babydolleyes: ["1L1"], - batonpass: ["1L1"], - blizzard: ["1L1"], - bounce: ["1L1"], - brutalswing: ["1L1"], - captivate: ["1L1"], - chargebeam: ["1L1"], - charm: ["1L1"], - closecombat: ["1L1"], - confide: ["1L1"], - cosmicpower: ["1L1"], - covet: ["1L1"], - cut: ["1L1"], - defensecurl: ["1L1"], - dig: ["1L1"], - dizzypunch: ["1L1"], - doublekick: ["1L1"], - doubleteam: ["1L1"], - drainpunch: ["1L1"], - encore: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - entrainment: ["1L1"], - facade: ["1L1"], - faketears: ["1L1"], - firepunch: ["1L1"], - flatter: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - focuspunch: ["1L1"], - foresight: ["1L1"], - frustration: ["1L1"], - furycutter: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - headbutt: ["1L1"], - healbell: ["1L1"], - healingwish: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - highjumpkick: ["1L1"], - hyperbeam: ["1L1"], - hypervoice: ["1L1"], - icebeam: ["1L1"], - icepunch: ["1L1"], - irontail: ["1L1"], - jumpkick: ["1L1"], - laserfocus: ["1L1"], - lastresort: ["1L1"], - lowkick: ["1L1"], - lowsweep: ["1L1"], - magiccoat: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - mirrorcoat: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - payback: ["1L1"], - playrough: ["1L1"], - pound: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - quickattack: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - reversal: ["1L1"], - rocksmash: ["1L1"], - rototiller: ["1L1"], - round: ["1L1"], - secretpower: ["1L1"], - shadowball: ["1L1"], - shockwave: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - splash: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderpunch: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - tripleaxel: ["1L1"], - uproar: ["1L1"], - uturn: ["1L1"], - waterpulse: ["1L1"], - workup: ["1L1"], - }, - }, - glameow: { - learnset: { - aerialace: ["1L1"], - assist: ["1L1"], - assurance: ["1L1"], - attract: ["1L1"], - bite: ["1L1"], - captivate: ["1L1"], - charm: ["1L1"], - confide: ["1L1"], - covet: ["1L1"], - cut: ["1L1"], - dig: ["1L1"], - doubleteam: ["1L1"], - dreameater: ["1L1"], - echoedvoice: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fakeout: ["1L1"], - faketears: ["1L1"], - feintattack: ["1L1"], - flail: ["1L1"], - flash: ["1L1"], - foulplay: ["1L1"], - frustration: ["1L1"], - furycutter: ["1L1"], - furyswipes: ["1L1"], - growl: ["1L1"], - headbutt: ["1L1"], - hiddenpower: ["1L1"], - honeclaws: ["1L1"], - hypervoice: ["1L1"], - hypnosis: ["1L1"], - irontail: ["1L1"], - knockoff: ["1L1"], - lastresort: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - payback: ["1L1"], - playrough: ["1L1"], - protect: ["1L1"], - psychup: ["1L1"], - quickattack: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - round: ["1L1"], - sandattack: ["1L1"], - scratch: ["1L1"], - secretpower: ["1L1"], - shadowball: ["1L1"], - shadowclaw: ["1L1"], - shockwave: ["1L1"], - slash: ["1L1"], - sleeptalk: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - sunnyday: ["1L1"], - superfang: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - tailwhip: ["1L1"], - taunt: ["1L1"], - thief: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - uturn: ["1L1"], - wakeupslap: ["1L1"], - waterpulse: ["1L1"], - workup: ["1L1"], - }, - }, - purugly: { - learnset: { - aerialace: ["1L1"], - assist: ["1L1"], - attract: ["1L1"], - bodyslam: ["1L1"], - bulldoze: ["1L1"], - captivate: ["1L1"], - charm: ["1L1"], - confide: ["1L1"], - covet: ["1L1"], - cut: ["1L1"], - dig: ["1L1"], - doubleteam: ["1L1"], - dreameater: ["1L1"], - echoedvoice: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fakeout: ["1L1"], - feintattack: ["1L1"], - flash: ["1L1"], - foulplay: ["1L1"], - frustration: ["1L1"], - furycutter: ["1L1"], - furyswipes: ["1L1"], - gigaimpact: ["1L1"], - growl: ["1L1"], - headbutt: ["1L1"], - hiddenpower: ["1L1"], - honeclaws: ["1L1"], - hyperbeam: ["1L1"], - hypervoice: ["1L1"], - hypnosis: ["1L1"], - irontail: ["1L1"], - knockoff: ["1L1"], - lastresort: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - payback: ["1L1"], - protect: ["1L1"], - psychup: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - roar: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - scratch: ["1L1"], - secretpower: ["1L1"], - shadowball: ["1L1"], - shadowclaw: ["1L1"], - shockwave: ["1L1"], - slash: ["1L1"], - sleeptalk: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - stompingtantrum: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - sunnyday: ["1L1"], - superfang: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - taunt: ["1L1"], - thief: ["1L1"], - throatchop: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - uturn: ["1L1"], - waterpulse: ["1L1"], - workup: ["1L1"], - }, - encounters: [ - {generation: 6, level: 32, maxEggMoves: 1}, - ], - }, - stunky: { - learnset: { - acidspray: ["1L1"], - assurance: ["1L1"], - astonish: ["1L1"], - attract: ["1L1"], - belch: ["1L1"], - bite: ["1L1"], - bodyslam: ["1L1"], - captivate: ["1L1"], - confide: ["1L1"], - corrosivegas: ["1L1"], - crunch: ["1L1"], - cut: ["1L1"], - darkpulse: ["1L1"], - defog: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - endure: ["1L1"], - explosion: ["1L1"], - facade: ["1L1"], - feint: ["1L1"], - fireblast: ["1L1"], - flameburst: ["1L1"], - flamethrower: ["1L1"], - focusenergy: ["1L1"], - foulplay: ["1L1"], - frustration: ["1L1"], - furycutter: ["1L1"], - furyswipes: ["1L1"], - gunkshot: ["1L1"], - haze: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hex: ["1L1"], - hiddenpower: ["1L1"], - honeclaws: ["1L1"], - incinerate: ["1L1"], - irontail: ["1L1"], - knockoff: ["1L1"], - lashout: ["1L1"], - leer: ["1L1"], - memento: ["1L1"], - mudslap: ["1L1"], - nastyplot: ["1L1"], - naturalgift: ["1L1"], - nightslash: ["1L1"], - payback: ["1L1"], - playrough: ["1L1"], - poisongas: ["1L1"], - poisonjab: ["1L1"], - poisontail: ["1L1"], - protect: ["1L1"], - punishment: ["1L1"], - pursuit: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roar: ["1L1"], - rocksmash: ["1L1"], - round: ["1L1"], - scaryface: ["1L1"], - scratch: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - shadowball: ["1L1"], - shadowclaw: ["1L1"], - slash: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - sludgewave: ["1L1"], - smog: ["1L1"], - smokescreen: ["1L1"], - snarl: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - tailslap: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - temperflare: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - throatchop: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - toxicspikes: ["1L1"], - trailblaze: ["1L1"], - venomdrench: ["1L1"], - venoshock: ["1L1"], - }, - }, - skuntank: { - learnset: { - acidspray: ["1L1"], - assurance: ["1L1"], - attract: ["1L1"], - belch: ["1L1"], - bite: ["1L1"], - bodyslam: ["1L1"], - burningjealousy: ["1L1"], - captivate: ["1L1"], - confide: ["1L1"], - corrosivegas: ["1L1"], - crunch: ["1L1"], - cut: ["1L1"], - darkpulse: ["1L1"], - defog: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - explosion: ["1L1"], - facade: ["1L1"], - feint: ["1L1"], - fireblast: ["1L1"], - firespin: ["1L1"], - flamethrower: ["1L1"], - focusenergy: ["1L1"], - foulplay: ["1L1"], - frustration: ["1L1"], - furycutter: ["1L1"], - furyswipes: ["1L1"], - gigaimpact: ["1L1"], - gunkshot: ["1L1"], - haze: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hex: ["1L1"], - hiddenpower: ["1L1"], - honeclaws: ["1L1"], - hyperbeam: ["1L1"], - incinerate: ["1L1"], - irontail: ["1L1"], - knockoff: ["1L1"], - lashout: ["1L1"], - memento: ["1L1"], - mudslap: ["1L1"], - nastyplot: ["1L1"], - naturalgift: ["1L1"], - nightslash: ["1L1"], - payback: ["1L1"], - playrough: ["1L1"], - poisongas: ["1L1"], - poisonjab: ["1L1"], - poisontail: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roar: ["1L1"], - rocksmash: ["1L1"], - round: ["1L1"], - scaryface: ["1L1"], - scratch: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - shadowball: ["1L1"], - shadowclaw: ["1L1"], - slash: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - sludgewave: ["1L1"], - smokescreen: ["1L1"], - snarl: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - sunnyday: ["1L1"], - superfang: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - tailslap: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - temperflare: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - throatchop: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - toxicspikes: ["1L1"], - trailblaze: ["1L1"], - venomdrench: ["1L1"], - venoshock: ["1L1"], - }, - encounters: [ - {generation: 4, level: 29}, - ], - }, - bronzor: { - learnset: { - allyswitch: ["1L1"], - ancientpower: ["1L1"], - bodyslam: ["1L1"], - bulldoze: ["1L1"], - calmmind: ["1L1"], - chargebeam: ["1L1"], - confide: ["1L1"], - confuseray: ["1L1"], - confusion: ["1L1"], - doubleteam: ["1L1"], - dreameater: ["1L1"], - earthquake: ["1L1"], - endure: ["1L1"], - expandingforce: ["1L1"], - extrasensory: ["1L1"], - facade: ["1L1"], - feintattack: ["1L1"], - flash: ["1L1"], - flashcannon: ["1L1"], - frustration: ["1L1"], - futuresight: ["1L1"], - grassknot: ["1L1"], - gravity: ["1L1"], - guardswap: ["1L1"], - gyroball: ["1L1"], - healblock: ["1L1"], - heavyslam: ["1L1"], - helpinghand: ["1L1"], - hex: ["1L1"], - hiddenpower: ["1L1"], - hypnosis: ["1L1"], - icespinner: ["1L1"], - imprison: ["1L1"], - irondefense: ["1L1"], - ironhead: ["1L1"], - lightscreen: ["1L1"], - metalsound: ["1L1"], - naturalgift: ["1L1"], - payback: ["1L1"], - powergem: ["1L1"], - powerswap: ["1L1"], - protect: ["1L1"], - psychic: ["1L1"], - psychicterrain: ["1L1"], - psychup: ["1L1"], - psyshock: ["1L1"], - psywave: ["1L1"], - raindance: ["1L1"], - recycle: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rockblast: ["1L1"], - rockpolish: ["1L1"], - rockslide: ["1L1"], - rocktomb: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - sandstorm: ["1L1"], - secretpower: ["1L1"], - shadowball: ["1L1"], - signalbeam: ["1L1"], - skillswap: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - speedswap: ["1L1"], - stealthrock: ["1L1"], - steelbeam: ["1L1"], - steelroller: ["1L1"], - stompingtantrum: ["1L1"], - storedpower: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - telekinesis: ["1L1"], - terablast: ["1L1"], - toxic: ["1L1"], - trick: ["1L1"], - trickroom: ["1L1"], - wonderroom: ["1L1"], - zenheadbutt: ["1L1"], - }, - }, - bronzong: { - learnset: { - allyswitch: ["1L1"], - ancientpower: ["1L1"], - block: ["1L1"], - bodypress: ["1L1"], - bodyslam: ["1L1"], - bulldoze: ["1L1"], - calmmind: ["1L1"], - chargebeam: ["1L1"], - confide: ["1L1"], - confuseray: ["1L1"], - confusion: ["1L1"], - doubleteam: ["1L1"], - dreameater: ["1L1"], - earthquake: ["1L1"], - endure: ["1L1"], - expandingforce: ["1L1"], - explosion: ["1L1"], - extrasensory: ["1L1"], - facade: ["1L1"], - feintattack: ["1L1"], - flash: ["1L1"], - flashcannon: ["1L1"], - frustration: ["1L1"], - futuresight: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - gravity: ["1L1"], - guardswap: ["1L1"], - gyroball: ["1L1"], - hardpress: ["1L1"], - healblock: ["1L1"], - heavyslam: ["1L1"], - helpinghand: ["1L1"], - hex: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - hypnosis: ["1L1"], - icespinner: ["1L1"], - imprison: ["1L1"], - irondefense: ["1L1"], - ironhead: ["1L1"], - lightscreen: ["1L1"], - metalsound: ["1L1"], - meteorbeam: ["1L1"], - naturalgift: ["1L1"], - nightshade: ["1L1"], - payback: ["1L1"], - powergem: ["1L1"], - powerswap: ["1L1"], - protect: ["1L1"], - psybeam: ["1L1"], - psychic: ["1L1"], - psychicnoise: ["1L1"], - psychicterrain: ["1L1"], - psychup: ["1L1"], - psyshock: ["1L1"], - psywave: ["1L1"], - raindance: ["1L1"], - recycle: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rockblast: ["1L1"], - rockpolish: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - sandstorm: ["1L1"], - secretpower: ["1L1"], - shadowball: ["1L1"], - signalbeam: ["1L1"], - skillswap: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - speedswap: ["1L1"], - stealthrock: ["1L1"], - steelbeam: ["1L1"], - steelroller: ["1L1"], - stompingtantrum: ["1L1"], - storedpower: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - telekinesis: ["1L1"], - terablast: ["1L1"], - toxic: ["1L1"], - trick: ["1L1"], - trickroom: ["1L1"], - weatherball: ["1L1"], - wonderroom: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 9, level: 50, nature: "Relaxed", ivs: {hp: 31, atk: 31, def: 31, spa: 22, spd: 31, spe: 0}, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 9, level: 50, nature: "Modest", moves: ["1L1"], pokeball: "cherishball"}, - ], - encounters: [ - {generation: 6, level: 30}, - ], - }, - chatot: { - learnset: { - aerialace: ["1L1"], - agility: ["1L1"], - aircutter: ["1L1"], - attract: ["1L1"], - boomburst: ["1L1"], - captivate: ["1L1"], - chatter: ["1L1"], - confide: ["1L1"], - defog: ["1L1"], - doubleteam: ["1L1"], - echoedvoice: ["1L1"], - encore: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - featherdance: ["1L1"], - fly: ["1L1"], - frustration: ["1L1"], - furyattack: ["1L1"], - growl: ["1L1"], - heatwave: ["1L1"], - hiddenpower: ["1L1"], - hypervoice: ["1L1"], - mimic: ["1L1"], - mirrormove: ["1L1"], - mudslap: ["1L1"], - nastyplot: ["1L1"], - naturalgift: ["1L1"], - nightshade: ["1L1"], - ominouswind: ["1L1"], - peck: ["1L1"], - pluck: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roleplay: ["1L1"], - roost: ["1L1"], - round: ["1L1"], - secretpower: ["1L1"], - sing: ["1L1"], - skyattack: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - steelwing: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - supersonic: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - synchronoise: ["1L1"], - tailwind: ["1L1"], - taunt: ["1L1"], - thief: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - twister: ["1L1"], - uproar: ["1L1"], - uturn: ["1L1"], - workup: ["1L1"], - }, - eventData: [ - {generation: 4, level: 25, gender: "M", nature: "Jolly", abilities: ["1L1"], moves: ["1L1"]}, - ], - }, - spiritomb: { - learnset: { - allyswitch: ["1L1"], - attract: ["1L1"], - bodyslam: ["1L1"], - burningjealousy: ["1L1"], - calmmind: ["1L1"], - captivate: ["1L1"], - confide: ["1L1"], - confuseray: ["1L1"], - curse: ["1L1"], - darkpulse: ["1L1"], - destinybond: ["1L1"], - disable: ["1L1"], - doubleteam: ["1L1"], - dreameater: ["1L1"], - embargo: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - feintattack: ["1L1"], - flash: ["1L1"], - foulplay: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - grudge: ["1L1"], - helpinghand: ["1L1"], - hex: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - hypnosis: ["1L1"], - icywind: ["1L1"], - imprison: ["1L1"], - infestation: ["1L1"], - lashout: ["1L1"], - memento: ["1L1"], - nastyplot: ["1L1"], - naturalgift: ["1L1"], - nightmare: ["1L1"], - nightshade: ["1L1"], - ominouswind: ["1L1"], - painsplit: ["1L1"], - payback: ["1L1"], - phantomforce: ["1L1"], - poltergeist: ["1L1"], - protect: ["1L1"], - psybeam: ["1L1"], - psychic: ["1L1"], - psychup: ["1L1"], - psyshock: ["1L1"], - pursuit: ["1L1"], - quash: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - scaryface: ["1L1"], - secretpower: ["1L1"], - shadowball: ["1L1"], - shadowsneak: ["1L1"], - shockwave: ["1L1"], - silverwind: ["1L1"], - skillswap: ["1L1"], - sleeptalk: ["1L1"], - smokescreen: ["1L1"], - snarl: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - spite: ["1L1"], - storedpower: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - taunt: ["1L1"], - telekinesis: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - trick: ["1L1"], - trickroom: ["1L1"], - uproar: ["1L1"], - waterpulse: ["1L1"], - willowisp: ["1L1"], - wonderroom: ["1L1"], - }, - eventData: [ - {generation: 5, level: 61, gender: "F", nature: "Quiet", ivs: {hp: 30, atk: 30, def: 30, spa: 30, spd: 30, spe: 30}, moves: ["1L1"], pokeball: "cherishball"}, - ], - }, - gible: { - learnset: { - aerialace: ["1L1"], - attract: ["1L1"], - bite: ["1L1"], - bodyslam: ["1L1"], - bulldoze: ["1L1"], - captivate: ["1L1"], - confide: ["1L1"], - cut: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dracometeor: ["1L1"], - dragonbreath: ["1L1"], - dragoncheer: ["1L1"], - dragonclaw: ["1L1"], - dragonpulse: ["1L1"], - dragonrage: ["1L1"], - dragonrush: ["1L1"], - dragontail: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - falseswipe: ["1L1"], - fireblast: ["1L1"], - firefang: ["1L1"], - flamethrower: ["1L1"], - frustration: ["1L1"], - furycutter: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - honeclaws: ["1L1"], - incinerate: ["1L1"], - ironhead: ["1L1"], - irontail: ["1L1"], - metalclaw: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - outrage: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roar: ["1L1"], - rockclimb: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - sandattack: ["1L1"], - sandstorm: ["1L1"], - sandtomb: ["1L1"], - scaleshot: ["1L1"], - scaryface: ["1L1"], - scorchingsands: ["1L1"], - secretpower: ["1L1"], - shadowclaw: ["1L1"], - slash: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - stealthrock: ["1L1"], - stoneedge: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - swordsdance: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thrash: ["1L1"], - thunderfang: ["1L1"], - toxic: ["1L1"], - twister: ["1L1"], - }, - }, - gabite: { - learnset: { - aerialace: ["1L1"], - attract: ["1L1"], - bite: ["1L1"], - bodyslam: ["1L1"], - breakingswipe: ["1L1"], - bulldoze: ["1L1"], - captivate: ["1L1"], - confide: ["1L1"], - crunch: ["1L1"], - cut: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dracometeor: ["1L1"], - dragonbreath: ["1L1"], - dragoncheer: ["1L1"], - dragonclaw: ["1L1"], - dragonpulse: ["1L1"], - dragonrage: ["1L1"], - dragonrush: ["1L1"], - dragontail: ["1L1"], - dualchop: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - falseswipe: ["1L1"], - fireblast: ["1L1"], - firefang: ["1L1"], - flamethrower: ["1L1"], - frustration: ["1L1"], - furycutter: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - honeclaws: ["1L1"], - incinerate: ["1L1"], - ironhead: ["1L1"], - irontail: ["1L1"], - laserfocus: ["1L1"], - metalclaw: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - outrage: ["1L1"], - powergem: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roar: ["1L1"], - rockclimb: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - sandattack: ["1L1"], - sandstorm: ["1L1"], - sandtomb: ["1L1"], - scaleshot: ["1L1"], - scaryface: ["1L1"], - scorchingsands: ["1L1"], - secretpower: ["1L1"], - shadowclaw: ["1L1"], - slash: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - stealthrock: ["1L1"], - stoneedge: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - swordsdance: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thunderfang: ["1L1"], - toxic: ["1L1"], - twister: ["1L1"], - }, - }, - garchomp: { - learnset: { - aerialace: ["1L1"], - aquatail: ["1L1"], - attract: ["1L1"], - bite: ["1L1"], - bodyslam: ["1L1"], - breakingswipe: ["1L1"], - brickbreak: ["1L1"], - brutalswing: ["1L1"], - bulldoze: ["1L1"], - captivate: ["1L1"], - confide: ["1L1"], - crunch: ["1L1"], - cut: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dracometeor: ["1L1"], - dragonbreath: ["1L1"], - dragoncheer: ["1L1"], - dragonclaw: ["1L1"], - dragonpulse: ["1L1"], - dragonrage: ["1L1"], - dragonrush: ["1L1"], - dragontail: ["1L1"], - dualchop: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - falseswipe: ["1L1"], - fireblast: ["1L1"], - firefang: ["1L1"], - flamethrower: ["1L1"], - fling: ["1L1"], - frustration: ["1L1"], - furycutter: ["1L1"], - gigaimpact: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - honeclaws: ["1L1"], - hyperbeam: ["1L1"], - incinerate: ["1L1"], - ironhead: ["1L1"], - irontail: ["1L1"], - laserfocus: ["1L1"], - liquidation: ["1L1"], - metalclaw: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - outrage: ["1L1"], - poisonjab: ["1L1"], - powergem: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roar: ["1L1"], - rockclimb: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - sandattack: ["1L1"], - sandstorm: ["1L1"], - sandtomb: ["1L1"], - scaleshot: ["1L1"], - scaryface: ["1L1"], - scorchingsands: ["1L1"], - secretpower: ["1L1"], - shadowclaw: ["1L1"], - slash: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - spikes: ["1L1"], - stealthrock: ["1L1"], - stompingtantrum: ["1L1"], - stoneedge: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - swordsdance: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thunderfang: ["1L1"], - toxic: ["1L1"], - twister: ["1L1"], - whirlpool: ["1L1"], - }, - eventData: [ - {generation: 5, level: 100, gender: "M", moves: ["1L1"], pokeball: "cherishball"}, - {generation: 5, level: 48, gender: "M", isHidden: true, moves: ["1L1"]}, - {generation: 6, level: 48, gender: "M", moves: ["1L1"], pokeball: "cherishball"}, - {generation: 6, level: 50, gender: "M", moves: ["1L1"], pokeball: "cherishball"}, - {generation: 6, level: 66, gender: "F", perfectIVs: 3, moves: ["1L1"], pokeball: "cherishball"}, - ], - }, - riolu: { - learnset: { - aerialace: ["1L1"], - agility: ["1L1"], - attract: ["1L1"], - aurasphere: ["1L1"], - bite: ["1L1"], - blazekick: ["1L1"], - brickbreak: ["1L1"], - bulkup: ["1L1"], - bulldoze: ["1L1"], - bulletpunch: ["1L1"], - captivate: ["1L1"], - circlethrow: ["1L1"], - closecombat: ["1L1"], - coaching: ["1L1"], - confide: ["1L1"], - copycat: ["1L1"], - counter: ["1L1"], - crosschop: ["1L1"], - crunch: ["1L1"], - detect: ["1L1"], - dig: ["1L1"], - doubleteam: ["1L1"], - drainpunch: ["1L1"], - dualchop: ["1L1"], - earthquake: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - feint: ["1L1"], - finalgambit: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - focuspunch: ["1L1"], - followme: ["1L1"], - forcepalm: ["1L1"], - foresight: ["1L1"], - frustration: ["1L1"], - furycutter: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - highjumpkick: ["1L1"], - howl: ["1L1"], - icepunch: ["1L1"], - irondefense: ["1L1"], - irontail: ["1L1"], - laserfocus: ["1L1"], - lowkick: ["1L1"], - lowsweep: ["1L1"], - magnetrise: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - metalclaw: ["1L1"], - meteormash: ["1L1"], - mindreader: ["1L1"], - mudslap: ["1L1"], - nastyplot: ["1L1"], - naturalgift: ["1L1"], - payback: ["1L1"], - poisonjab: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - psychup: ["1L1"], - quickattack: ["1L1"], - quickguard: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - revenge: ["1L1"], - reversal: ["1L1"], - roar: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - roleplay: ["1L1"], - round: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - shadowclaw: ["1L1"], - skyuppercut: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - swordsdance: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thunderpunch: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - upperhand: ["1L1"], - vacuumwave: ["1L1"], - workup: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 4, level: 30, gender: "M", nature: "Serious", abilities: ["1L1"], moves: ["1L1"], pokeball: "pokeball"}, - ], - }, - lucario: { - learnset: { - aerialace: ["1L1"], - agility: ["1L1"], - attract: ["1L1"], - aurasphere: ["1L1"], - blazekick: ["1L1"], - bodyslam: ["1L1"], - bonerush: ["1L1"], - brickbreak: ["1L1"], - bulkup: ["1L1"], - bulldoze: ["1L1"], - bulletpunch: ["1L1"], - calmmind: ["1L1"], - captivate: ["1L1"], - closecombat: ["1L1"], - coaching: ["1L1"], - confide: ["1L1"], - copycat: ["1L1"], - counter: ["1L1"], - crunch: ["1L1"], - darkpulse: ["1L1"], - detect: ["1L1"], - dig: ["1L1"], - doubleteam: ["1L1"], - dragonpulse: ["1L1"], - drainpunch: ["1L1"], - dualchop: ["1L1"], - earthquake: ["1L1"], - endure: ["1L1"], - extremespeed: ["1L1"], - facade: ["1L1"], - feint: ["1L1"], - finalgambit: ["1L1"], - flashcannon: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - focusenergy: ["1L1"], - focuspunch: ["1L1"], - forcepalm: ["1L1"], - foresight: ["1L1"], - frustration: ["1L1"], - furycutter: ["1L1"], - gigaimpact: ["1L1"], - headbutt: ["1L1"], - healpulse: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - highjumpkick: ["1L1"], - honeclaws: ["1L1"], - hyperbeam: ["1L1"], - icepunch: ["1L1"], - irondefense: ["1L1"], - irontail: ["1L1"], - laserfocus: ["1L1"], - lifedew: ["1L1"], - lowkick: ["1L1"], - lowsweep: ["1L1"], - magnetrise: ["1L1"], - mefirst: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - metalclaw: ["1L1"], - metalsound: ["1L1"], - meteormash: ["1L1"], - metronome: ["1L1"], - mudslap: ["1L1"], - nastyplot: ["1L1"], - naturalgift: ["1L1"], - payback: ["1L1"], - poisonjab: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - psychic: ["1L1"], - psychup: ["1L1"], - quickattack: ["1L1"], - quickguard: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - revenge: ["1L1"], - reversal: ["1L1"], - roar: ["1L1"], - rockclimb: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - roleplay: ["1L1"], - round: ["1L1"], - scaryface: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - shadowball: ["1L1"], - shadowclaw: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - steelbeam: ["1L1"], - stoneedge: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - swordsdance: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - terrainpulse: ["1L1"], - thunderpunch: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - upperhand: ["1L1"], - vacuumwave: ["1L1"], - waterpulse: ["1L1"], - workup: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 4, level: 50, gender: "M", nature: "Modest", abilities: ["1L1"], moves: ["1L1"], pokeball: "cherishball"}, - {generation: 4, level: 30, gender: "M", nature: "Adamant", abilities: ["1L1"], moves: ["1L1"], pokeball: "cherishball"}, - {generation: 5, level: 10, gender: "M", isHidden: true, moves: ["1L1"]}, - {generation: 5, level: 50, gender: "M", nature: "Naughty", ivs: {atk: 31}, isHidden: true, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 6, level: 100, nature: "Jolly", abilities: ["1L1"], moves: ["1L1"], pokeball: "cherishball"}, - {generation: 7, level: 40, gender: "M", nature: "Serious", abilities: ["1L1"], moves: ["1L1"], pokeball: "pokeball"}, - {generation: 8, level: 80, gender: "M", nature: "Serious", abilities: ["1L1"], ivs: {hp: 31, atk: 30, def: 30, spa: 31, spd: 30, spe: 31}, moves: ["1L1"], pokeball: "pokeball"}, - {generation: 9, level: 75, shiny: true, gender: "M", nature: "Naive", abilities: ["1L1"], ivs: {hp: 31, atk: 31, def: 20, spa: 31, spd: 20, spe: 31}, moves: ["1L1"], pokeball: "cherishball"}, - ], - }, - hippopotas: { - learnset: { - amnesia: ["1L1"], - attract: ["1L1"], - bite: ["1L1"], - bodypress: ["1L1"], - bodyslam: ["1L1"], - bulldoze: ["1L1"], - captivate: ["1L1"], - confide: ["1L1"], - crunch: ["1L1"], - curse: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - firefang: ["1L1"], - fissure: ["1L1"], - frustration: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - highhorsepower: ["1L1"], - icefang: ["1L1"], - irontail: ["1L1"], - muddywater: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - protect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - revenge: ["1L1"], - roar: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - sandattack: ["1L1"], - sandstorm: ["1L1"], - sandtomb: ["1L1"], - scorchingsands: ["1L1"], - secretpower: ["1L1"], - slackoff: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - spitup: ["1L1"], - stealthrock: ["1L1"], - stockpile: ["1L1"], - stompingtantrum: ["1L1"], - stoneedge: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - superpower: ["1L1"], - swagger: ["1L1"], - swallow: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thunderfang: ["1L1"], - toxic: ["1L1"], - waterpulse: ["1L1"], - weatherball: ["1L1"], - whirlwind: ["1L1"], - yawn: ["1L1"], - }, - }, - hippowdon: { - learnset: { - amnesia: ["1L1"], - attract: ["1L1"], - bite: ["1L1"], - bodypress: ["1L1"], - bodyslam: ["1L1"], - bulldoze: ["1L1"], - captivate: ["1L1"], - confide: ["1L1"], - crunch: ["1L1"], - curse: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - firefang: ["1L1"], - fissure: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - hardpress: ["1L1"], - headbutt: ["1L1"], - heavyslam: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - highhorsepower: ["1L1"], - hyperbeam: ["1L1"], - hypervoice: ["1L1"], - icefang: ["1L1"], - ironhead: ["1L1"], - irontail: ["1L1"], - muddywater: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - protect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - revenge: ["1L1"], - roar: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - sandattack: ["1L1"], - sandstorm: ["1L1"], - sandtomb: ["1L1"], - scorchingsands: ["1L1"], - secretpower: ["1L1"], - slackoff: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - stealthrock: ["1L1"], - stompingtantrum: ["1L1"], - stoneedge: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - superpower: ["1L1"], - swagger: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thunderfang: ["1L1"], - toxic: ["1L1"], - waterpulse: ["1L1"], - weatherball: ["1L1"], - yawn: ["1L1"], - }, - }, - skorupi: { - learnset: { - acupressure: ["1L1"], - aerialace: ["1L1"], - agility: ["1L1"], - aquatail: ["1L1"], - assurance: ["1L1"], - attract: ["1L1"], - bite: ["1L1"], - brickbreak: ["1L1"], - bugbite: ["1L1"], - bugbuzz: ["1L1"], - captivate: ["1L1"], - confide: ["1L1"], - confuseray: ["1L1"], - crosspoison: ["1L1"], - crunch: ["1L1"], - cut: ["1L1"], - darkpulse: ["1L1"], - dig: ["1L1"], - doubleteam: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - falseswipe: ["1L1"], - feintattack: ["1L1"], - fellstinger: ["1L1"], - flash: ["1L1"], - fling: ["1L1"], - frustration: ["1L1"], - furycutter: ["1L1"], - headbutt: ["1L1"], - hiddenpower: ["1L1"], - honeclaws: ["1L1"], - infestation: ["1L1"], - irontail: ["1L1"], - knockoff: ["1L1"], - leer: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - nightslash: ["1L1"], - payback: ["1L1"], - pinmissile: ["1L1"], - poisonfang: ["1L1"], - poisonjab: ["1L1"], - poisonsting: ["1L1"], - poisontail: ["1L1"], - protect: ["1L1"], - pursuit: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - sandattack: ["1L1"], - scaryface: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - shadowball: ["1L1"], - skittersmack: ["1L1"], - slash: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - snore: ["1L1"], - strength: ["1L1"], - strugglebug: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swordsdance: ["1L1"], - taunt: ["1L1"], - thief: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - toxicspikes: ["1L1"], - twineedle: ["1L1"], - venoshock: ["1L1"], - whirlwind: ["1L1"], - xscissor: ["1L1"], - }, - }, - drapion: { - learnset: { - acupressure: ["1L1"], - aerialace: ["1L1"], - agility: ["1L1"], - aquatail: ["1L1"], - assurance: ["1L1"], - attract: ["1L1"], - bite: ["1L1"], - brickbreak: ["1L1"], - brutalswing: ["1L1"], - bugbite: ["1L1"], - bugbuzz: ["1L1"], - bulldoze: ["1L1"], - captivate: ["1L1"], - confide: ["1L1"], - crosspoison: ["1L1"], - crunch: ["1L1"], - cut: ["1L1"], - darkpulse: ["1L1"], - dig: ["1L1"], - doubleteam: ["1L1"], - earthquake: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - falseswipe: ["1L1"], - fellstinger: ["1L1"], - firefang: ["1L1"], - flash: ["1L1"], - fling: ["1L1"], - frustration: ["1L1"], - furycutter: ["1L1"], - gigaimpact: ["1L1"], - headbutt: ["1L1"], - hiddenpower: ["1L1"], - honeclaws: ["1L1"], - hyperbeam: ["1L1"], - icefang: ["1L1"], - infestation: ["1L1"], - irondefense: ["1L1"], - irontail: ["1L1"], - knockoff: ["1L1"], - lashout: ["1L1"], - leechlife: ["1L1"], - leer: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - nightslash: ["1L1"], - payback: ["1L1"], - pinmissile: ["1L1"], - poisonfang: ["1L1"], - poisonjab: ["1L1"], - poisonsting: ["1L1"], - protect: ["1L1"], - pursuit: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - roar: ["1L1"], - rockclimb: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - sandtomb: ["1L1"], - scaryface: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - shadowball: ["1L1"], - skittersmack: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - snarl: ["1L1"], - snore: ["1L1"], - stompingtantrum: ["1L1"], - strength: ["1L1"], - strugglebug: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swordsdance: ["1L1"], - taunt: ["1L1"], - thief: ["1L1"], - throatchop: ["1L1"], - thunderfang: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - toxicspikes: ["1L1"], - venomdrench: ["1L1"], - venoshock: ["1L1"], - xscissor: ["1L1"], - }, - encounters: [ - {generation: 4, level: 22, pokeball: "safariball"}, - {generation: 6, level: 30}, - ], - }, - croagunk: { - learnset: { - acidspray: ["1L1"], - acupressure: ["1L1"], - aerialace: ["1L1"], - assurance: ["1L1"], - astonish: ["1L1"], - attract: ["1L1"], - batonpass: ["1L1"], - belch: ["1L1"], - bounce: ["1L1"], - brickbreak: ["1L1"], - bulkup: ["1L1"], - bulldoze: ["1L1"], - bulletpunch: ["1L1"], - captivate: ["1L1"], - chillingwater: ["1L1"], - coaching: ["1L1"], - confide: ["1L1"], - counter: ["1L1"], - crosschop: ["1L1"], - darkpulse: ["1L1"], - dig: ["1L1"], - doubleteam: ["1L1"], - drainpunch: ["1L1"], - dualchop: ["1L1"], - dynamicpunch: ["1L1"], - earthquake: ["1L1"], - embargo: ["1L1"], - encore: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fakeout: ["1L1"], - feint: ["1L1"], - feintattack: ["1L1"], - flatter: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - focuspunch: ["1L1"], - foulplay: ["1L1"], - frustration: ["1L1"], - furycutter: ["1L1"], - gunkshot: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - icepunch: ["1L1"], - icywind: ["1L1"], - knockoff: ["1L1"], - lashout: ["1L1"], - lowkick: ["1L1"], - lowsweep: ["1L1"], - meditate: ["1L1"], - mefirst: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - mudbomb: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - nastyplot: ["1L1"], - naturalgift: ["1L1"], - payback: ["1L1"], - poisonjab: ["1L1"], - poisonsting: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - pursuit: ["1L1"], - quickguard: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - revenge: ["1L1"], - reversal: ["1L1"], - rockclimb: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - roleplay: ["1L1"], - round: ["1L1"], - scaryface: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - shadowball: ["1L1"], - shadowclaw: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - sludgewave: ["1L1"], - smellingsalts: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - spite: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - sunnyday: ["1L1"], - superfang: ["1L1"], - swagger: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thunderpunch: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - upperhand: ["1L1"], - vacuumwave: ["1L1"], - venomdrench: ["1L1"], - venoshock: ["1L1"], - wakeupslap: ["1L1"], - workup: ["1L1"], - xscissor: ["1L1"], - }, - eventData: [ - {generation: 5, level: 10, gender: "M", isHidden: true, moves: ["1L1"]}, - {generation: 5, level: 10, gender: "M", isHidden: true, moves: ["1L1"]}, - ], - }, - toxicroak: { - learnset: { - acidspray: ["1L1"], - aerialace: ["1L1"], - assurance: ["1L1"], - astonish: ["1L1"], - attract: ["1L1"], - batonpass: ["1L1"], - belch: ["1L1"], - bounce: ["1L1"], - brickbreak: ["1L1"], - bulkup: ["1L1"], - bulldoze: ["1L1"], - captivate: ["1L1"], - chillingwater: ["1L1"], - closecombat: ["1L1"], - coaching: ["1L1"], - confide: ["1L1"], - corrosivegas: ["1L1"], - crosspoison: ["1L1"], - cut: ["1L1"], - darkpulse: ["1L1"], - dig: ["1L1"], - doubleteam: ["1L1"], - drainpunch: ["1L1"], - dualchop: ["1L1"], - earthquake: ["1L1"], - embargo: ["1L1"], - encore: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - feintattack: ["1L1"], - flatter: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - focuspunch: ["1L1"], - foulplay: ["1L1"], - frustration: ["1L1"], - furycutter: ["1L1"], - gigaimpact: ["1L1"], - gunkshot: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - icepunch: ["1L1"], - icywind: ["1L1"], - knockoff: ["1L1"], - lashout: ["1L1"], - lowkick: ["1L1"], - lowsweep: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - mudbomb: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - nastyplot: ["1L1"], - naturalgift: ["1L1"], - payback: ["1L1"], - poisonjab: ["1L1"], - poisonsting: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - pursuit: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - revenge: ["1L1"], - reversal: ["1L1"], - rockclimb: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - roleplay: ["1L1"], - round: ["1L1"], - scaryface: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - shadowball: ["1L1"], - shadowclaw: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - sludgewave: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - spite: ["1L1"], - stoneedge: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - sunnyday: ["1L1"], - superfang: ["1L1"], - swagger: ["1L1"], - swordsdance: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - throatchop: ["1L1"], - thunderpunch: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - upperhand: ["1L1"], - vacuumwave: ["1L1"], - venomdrench: ["1L1"], - venoshock: ["1L1"], - workup: ["1L1"], - xscissor: ["1L1"], - }, - encounters: [ - {generation: 4, level: 22, pokeball: "safariball"}, - {generation: 6, level: 30}, - ], - }, - carnivine: { - learnset: { - acidspray: ["1L1"], - attract: ["1L1"], - bind: ["1L1"], - bite: ["1L1"], - bugbite: ["1L1"], - bulletseed: ["1L1"], - captivate: ["1L1"], - confide: ["1L1"], - crunch: ["1L1"], - cut: ["1L1"], - defog: ["1L1"], - doubleteam: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - feintattack: ["1L1"], - flash: ["1L1"], - fling: ["1L1"], - frustration: ["1L1"], - furycutter: ["1L1"], - gastroacid: ["1L1"], - gigadrain: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - grasswhistle: ["1L1"], - growth: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - infestation: ["1L1"], - ingrain: ["1L1"], - knockoff: ["1L1"], - leaftornado: ["1L1"], - leechseed: ["1L1"], - magicalleaf: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - naturepower: ["1L1"], - payback: ["1L1"], - powerwhip: ["1L1"], - protect: ["1L1"], - ragepowder: ["1L1"], - razorleaf: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - round: ["1L1"], - secretpower: ["1L1"], - seedbomb: ["1L1"], - slam: ["1L1"], - sleeppowder: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - spitup: ["1L1"], - stockpile: ["1L1"], - stunspore: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swallow: ["1L1"], - sweetscent: ["1L1"], - swordsdance: ["1L1"], - synthesis: ["1L1"], - thief: ["1L1"], - throatchop: ["1L1"], - toxic: ["1L1"], - vinewhip: ["1L1"], - worryseed: ["1L1"], - wringout: ["1L1"], - }, - }, - finneon: { - learnset: { - acrobatics: ["1L1"], - agility: ["1L1"], - aircutter: ["1L1"], - alluringvoice: ["1L1"], - aquaring: ["1L1"], - aquatail: ["1L1"], - attract: ["1L1"], - aurorabeam: ["1L1"], - blizzard: ["1L1"], - bounce: ["1L1"], - brine: ["1L1"], - captivate: ["1L1"], - charm: ["1L1"], - chillingwater: ["1L1"], - confide: ["1L1"], - confuseray: ["1L1"], - dazzlinggleam: ["1L1"], - defog: ["1L1"], - dive: ["1L1"], - doubleteam: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - flail: ["1L1"], - flash: ["1L1"], - flipturn: ["1L1"], - frustration: ["1L1"], - gust: ["1L1"], - hail: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hydropump: ["1L1"], - icebeam: ["1L1"], - icywind: ["1L1"], - naturalgift: ["1L1"], - naturepower: ["1L1"], - ominouswind: ["1L1"], - payback: ["1L1"], - pound: ["1L1"], - protect: ["1L1"], - psybeam: ["1L1"], - psychup: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - scald: ["1L1"], - secretpower: ["1L1"], - signalbeam: ["1L1"], - silverwind: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - soak: ["1L1"], - splash: ["1L1"], - substitute: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - sweetkiss: ["1L1"], - swift: ["1L1"], - tailwind: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - tickle: ["1L1"], - toxic: ["1L1"], - twister: ["1L1"], - uturn: ["1L1"], - waterfall: ["1L1"], - watergun: ["1L1"], - waterpulse: ["1L1"], - whirlpool: ["1L1"], - }, - }, - lumineon: { - learnset: { - acrobatics: ["1L1"], - agility: ["1L1"], - aircutter: ["1L1"], - airslash: ["1L1"], - alluringvoice: ["1L1"], - aquaring: ["1L1"], - aquatail: ["1L1"], - attract: ["1L1"], - blizzard: ["1L1"], - bounce: ["1L1"], - brine: ["1L1"], - captivate: ["1L1"], - charm: ["1L1"], - chillingwater: ["1L1"], - confide: ["1L1"], - confuseray: ["1L1"], - dazzlinggleam: ["1L1"], - defog: ["1L1"], - dive: ["1L1"], - doubleteam: ["1L1"], - encore: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - flash: ["1L1"], - flipturn: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - gust: ["1L1"], - hail: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hydropump: ["1L1"], - hyperbeam: ["1L1"], - icebeam: ["1L1"], - icywind: ["1L1"], - naturalgift: ["1L1"], - ominouswind: ["1L1"], - payback: ["1L1"], - pound: ["1L1"], - protect: ["1L1"], - psybeam: ["1L1"], - psychup: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - scald: ["1L1"], - secretpower: ["1L1"], - signalbeam: ["1L1"], - silverwind: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - soak: ["1L1"], - substitute: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - tailwind: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - toxic: ["1L1"], - twister: ["1L1"], - uturn: ["1L1"], - waterfall: ["1L1"], - watergun: ["1L1"], - waterpulse: ["1L1"], - whirlpool: ["1L1"], - }, - encounters: [ - {generation: 4, level: 20}, - ], - }, - snover: { - learnset: { - attract: ["1L1"], - avalanche: ["1L1"], - blizzard: ["1L1"], - bodyslam: ["1L1"], - bulletseed: ["1L1"], - captivate: ["1L1"], - chillingwater: ["1L1"], - confide: ["1L1"], - curse: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - flash: ["1L1"], - frostbreath: ["1L1"], - frustration: ["1L1"], - gigadrain: ["1L1"], - grassknot: ["1L1"], - grasswhistle: ["1L1"], - grassyglide: ["1L1"], - growth: ["1L1"], - hail: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - icebeam: ["1L1"], - icepunch: ["1L1"], - iceshard: ["1L1"], - icespinner: ["1L1"], - iciclespear: ["1L1"], - icywind: ["1L1"], - ingrain: ["1L1"], - irontail: ["1L1"], - leafage: ["1L1"], - leafstorm: ["1L1"], - leechseed: ["1L1"], - leer: ["1L1"], - lightscreen: ["1L1"], - magicalleaf: ["1L1"], - megapunch: ["1L1"], - mist: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - powdersnow: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - razorleaf: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roleplay: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - secretpower: ["1L1"], - seedbomb: ["1L1"], - shadowball: ["1L1"], - sheercold: ["1L1"], - skullbash: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - snowscape: ["1L1"], - solarbeam: ["1L1"], - stomp: ["1L1"], - substitute: ["1L1"], - swagger: ["1L1"], - swordsdance: ["1L1"], - synthesis: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - waterpulse: ["1L1"], - weatherball: ["1L1"], - woodhammer: ["1L1"], - worryseed: ["1L1"], - }, - }, - abomasnow: { - learnset: { - attract: ["1L1"], - auroraveil: ["1L1"], - avalanche: ["1L1"], - blizzard: ["1L1"], - block: ["1L1"], - bodypress: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - bulldoze: ["1L1"], - bulletseed: ["1L1"], - captivate: ["1L1"], - chillingwater: ["1L1"], - confide: ["1L1"], - curse: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - flash: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - focuspunch: ["1L1"], - frostbreath: ["1L1"], - frustration: ["1L1"], - gigadrain: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - grasswhistle: ["1L1"], - grassyglide: ["1L1"], - hail: ["1L1"], - hardpress: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - icebeam: ["1L1"], - icepunch: ["1L1"], - iceshard: ["1L1"], - icespinner: ["1L1"], - iciclespear: ["1L1"], - icywind: ["1L1"], - ingrain: ["1L1"], - irontail: ["1L1"], - leafage: ["1L1"], - leafstorm: ["1L1"], - leer: ["1L1"], - lightscreen: ["1L1"], - lowkick: ["1L1"], - magicalleaf: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - mist: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - outrage: ["1L1"], - powdersnow: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - razorleaf: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rockclimb: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - roleplay: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - scaryface: ["1L1"], - secretpower: ["1L1"], - seedbomb: ["1L1"], - shadowball: ["1L1"], - sheercold: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - snowscape: ["1L1"], - solarbeam: ["1L1"], - stompingtantrum: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - swagger: ["1L1"], - swordsdance: ["1L1"], - synthesis: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - waterpulse: ["1L1"], - weatherball: ["1L1"], - woodhammer: ["1L1"], - worryseed: ["1L1"], - }, - encounters: [ - {generation: 4, level: 38}, - ], - }, - rotom: { - learnset: { - allyswitch: ["1L1"], - astonish: ["1L1"], - charge: ["1L1"], - chargebeam: ["1L1"], - confide: ["1L1"], - confuseray: ["1L1"], - darkpulse: ["1L1"], - defog: ["1L1"], - disarmingvoice: ["1L1"], - discharge: ["1L1"], - doubleteam: ["1L1"], - dreameater: ["1L1"], - eerieimpulse: ["1L1"], - electricterrain: ["1L1"], - electroball: ["1L1"], - electroweb: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - flash: ["1L1"], - foulplay: ["1L1"], - frustration: ["1L1"], - helpinghand: ["1L1"], - hex: ["1L1"], - hiddenpower: ["1L1"], - hypervoice: ["1L1"], - lightscreen: ["1L1"], - mudslap: ["1L1"], - nastyplot: ["1L1"], - naturalgift: ["1L1"], - nightshade: ["1L1"], - ominouswind: ["1L1"], - painsplit: ["1L1"], - poltergeist: ["1L1"], - protect: ["1L1"], - psychup: ["1L1"], - raindance: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - risingvoltage: ["1L1"], - round: ["1L1"], - secretpower: ["1L1"], - shadowball: ["1L1"], - shockwave: ["1L1"], - signalbeam: ["1L1"], - sleeptalk: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - spite: ["1L1"], - storedpower: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - telekinesis: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thundershock: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - trick: ["1L1"], - uproar: ["1L1"], - voltswitch: ["1L1"], - willowisp: ["1L1"], - }, - eventData: [ - {generation: 5, level: 10, nature: "Naughty", moves: ["1L1"], pokeball: "cherishball"}, - {generation: 6, level: 10, nature: "Quirky", moves: ["1L1"], pokeball: "cherishball"}, - {generation: 7, level: 10, moves: ["1L1"], pokeball: "cherishball"}, - ], - }, - rotomheat: { - learnset: { - overheat: ["1L1"], - }, - }, - rotomwash: { - learnset: { - hydropump: ["1L1"], - }, - }, - rotomfrost: { - learnset: { - blizzard: ["1L1"], - }, - }, - rotomfan: { - learnset: { - airslash: ["1L1"], - }, - }, - rotommow: { - learnset: { - leafstorm: ["1L1"], - }, - }, - uxie: { - learnset: { - acrobatics: ["1L1"], - allyswitch: ["1L1"], - amnesia: ["1L1"], - batonpass: ["1L1"], - calmmind: ["1L1"], - chargebeam: ["1L1"], - confide: ["1L1"], - confuseray: ["1L1"], - confusion: ["1L1"], - dazzlinggleam: ["1L1"], - doubleteam: ["1L1"], - drainingkiss: ["1L1"], - drainpunch: ["1L1"], - dreameater: ["1L1"], - encore: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - expandingforce: ["1L1"], - extrasensory: ["1L1"], - facade: ["1L1"], - firepunch: ["1L1"], - flail: ["1L1"], - flash: ["1L1"], - fling: ["1L1"], - foulplay: ["1L1"], - frustration: ["1L1"], - futuresight: ["1L1"], - gigadrain: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - headbutt: ["1L1"], - healbell: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - icepunch: ["1L1"], - imprison: ["1L1"], - irontail: ["1L1"], - knockoff: ["1L1"], - laserfocus: ["1L1"], - lightscreen: ["1L1"], - magiccoat: ["1L1"], - magicroom: ["1L1"], - memento: ["1L1"], - metronome: ["1L1"], - mudslap: ["1L1"], - mysticalpower: ["1L1"], - nastyplot: ["1L1"], - naturalgift: ["1L1"], - painsplit: ["1L1"], - playrough: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - psybeam: ["1L1"], - psychic: ["1L1"], - psychicnoise: ["1L1"], - psychocut: ["1L1"], - psychup: ["1L1"], - psyshock: ["1L1"], - raindance: ["1L1"], - recycle: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roleplay: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - sandstorm: ["1L1"], - secretpower: ["1L1"], - shadowball: ["1L1"], - shockwave: ["1L1"], - signalbeam: ["1L1"], - skillswap: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - stealthrock: ["1L1"], - storedpower: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - telekinesis: ["1L1"], - terablast: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderpunch: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - triattack: ["1L1"], - trick: ["1L1"], - trickroom: ["1L1"], - uturn: ["1L1"], - waterpulse: ["1L1"], - wonderroom: ["1L1"], - yawn: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 4, level: 50, shiny: 1, moves: ["1L1"]}, - {generation: 4, level: 50, shiny: 1, moves: ["1L1"]}, - {generation: 5, level: 65, shiny: 1, moves: ["1L1"]}, - {generation: 6, level: 50, shiny: 1, moves: ["1L1"]}, - {generation: 7, level: 60, shiny: 1, moves: ["1L1"]}, - {generation: 8, level: 70, shiny: 1, moves: ["1L1"]}, - ], - eventOnly: false, - }, - mesprit: { - learnset: { - acrobatics: ["1L1"], - allyswitch: ["1L1"], - batonpass: ["1L1"], - blizzard: ["1L1"], - calmmind: ["1L1"], - chargebeam: ["1L1"], - charm: ["1L1"], - confide: ["1L1"], - confuseray: ["1L1"], - confusion: ["1L1"], - copycat: ["1L1"], - dazzlinggleam: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - drainingkiss: ["1L1"], - drainpunch: ["1L1"], - dreameater: ["1L1"], - encore: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - expandingforce: ["1L1"], - extrasensory: ["1L1"], - facade: ["1L1"], - firepunch: ["1L1"], - flash: ["1L1"], - flatter: ["1L1"], - fling: ["1L1"], - frustration: ["1L1"], - futuresight: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - headbutt: ["1L1"], - healingwish: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - icebeam: ["1L1"], - icepunch: ["1L1"], - imprison: ["1L1"], - irontail: ["1L1"], - knockoff: ["1L1"], - laserfocus: ["1L1"], - lightscreen: ["1L1"], - luckychant: ["1L1"], - magiccoat: ["1L1"], - magicroom: ["1L1"], - metronome: ["1L1"], - mudslap: ["1L1"], - mysticalpower: ["1L1"], - nastyplot: ["1L1"], - naturalgift: ["1L1"], - painsplit: ["1L1"], - playrough: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - psybeam: ["1L1"], - psychic: ["1L1"], - psychicnoise: ["1L1"], - psychocut: ["1L1"], - psychup: ["1L1"], - psyshock: ["1L1"], - raindance: ["1L1"], - recycle: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roleplay: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - sandstorm: ["1L1"], - secretpower: ["1L1"], - shadowball: ["1L1"], - shockwave: ["1L1"], - signalbeam: ["1L1"], - skillswap: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - stealthrock: ["1L1"], - storedpower: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - telekinesis: ["1L1"], - terablast: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderpunch: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - triattack: ["1L1"], - trick: ["1L1"], - trickroom: ["1L1"], - uturn: ["1L1"], - waterpulse: ["1L1"], - wonderroom: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 4, level: 50, shiny: 1, moves: ["1L1"]}, - {generation: 4, level: 50, shiny: 1, moves: ["1L1"]}, - {generation: 5, level: 50, shiny: 1, moves: ["1L1"]}, - {generation: 6, level: 50, shiny: 1, moves: ["1L1"]}, - {generation: 7, level: 60, shiny: 1, moves: ["1L1"]}, - {generation: 8, level: 70, shiny: 1, moves: ["1L1"]}, - ], - eventOnly: false, - }, - azelf: { - learnset: { - acrobatics: ["1L1"], - allyswitch: ["1L1"], - assurance: ["1L1"], - batonpass: ["1L1"], - calmmind: ["1L1"], - chargebeam: ["1L1"], - confide: ["1L1"], - confusion: ["1L1"], - dazzlinggleam: ["1L1"], - detect: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - drainingkiss: ["1L1"], - drainpunch: ["1L1"], - dreameater: ["1L1"], - encore: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - expandingforce: ["1L1"], - explosion: ["1L1"], - extrasensory: ["1L1"], - facade: ["1L1"], - fireblast: ["1L1"], - firepunch: ["1L1"], - flamethrower: ["1L1"], - flash: ["1L1"], - fling: ["1L1"], - frustration: ["1L1"], - futuresight: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - icepunch: ["1L1"], - imprison: ["1L1"], - incinerate: ["1L1"], - irontail: ["1L1"], - knockoff: ["1L1"], - laserfocus: ["1L1"], - lastresort: ["1L1"], - lightscreen: ["1L1"], - magiccoat: ["1L1"], - magicroom: ["1L1"], - metronome: ["1L1"], - mudslap: ["1L1"], - mysticalpower: ["1L1"], - nastyplot: ["1L1"], - naturalgift: ["1L1"], - payback: ["1L1"], - playrough: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - psybeam: ["1L1"], - psychic: ["1L1"], - psychocut: ["1L1"], - psychup: ["1L1"], - psyshock: ["1L1"], - raindance: ["1L1"], - recycle: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roleplay: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - sandstorm: ["1L1"], - secretpower: ["1L1"], - selfdestruct: ["1L1"], - shadowball: ["1L1"], - shockwave: ["1L1"], - signalbeam: ["1L1"], - skillswap: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - stealthrock: ["1L1"], - storedpower: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - taunt: ["1L1"], - telekinesis: ["1L1"], - terablast: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderpunch: ["1L1"], - thunderwave: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - triattack: ["1L1"], - trick: ["1L1"], - trickroom: ["1L1"], - uproar: ["1L1"], - uturn: ["1L1"], - waterpulse: ["1L1"], - wonderroom: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 4, level: 50, shiny: 1, moves: ["1L1"]}, - {generation: 4, level: 50, shiny: 1, moves: ["1L1"]}, - {generation: 5, level: 50, shiny: 1, moves: ["1L1"]}, - {generation: 6, level: 50, shiny: 1, moves: ["1L1"]}, - {generation: 7, level: 60, shiny: 1, moves: ["1L1"]}, - {generation: 8, level: 70, shiny: 1, moves: ["1L1"]}, - ], - eventOnly: false, - }, - dialga: { - learnset: { - aerialace: ["1L1"], - ancientpower: ["1L1"], - aurasphere: ["1L1"], - blizzard: ["1L1"], - bodypress: ["1L1"], - bodyslam: ["1L1"], - breakingswipe: ["1L1"], - brickbreak: ["1L1"], - bulkup: ["1L1"], - bulldoze: ["1L1"], - confide: ["1L1"], - cut: ["1L1"], - doubleteam: ["1L1"], - dracometeor: ["1L1"], - dragonbreath: ["1L1"], - dragonclaw: ["1L1"], - dragonpulse: ["1L1"], - dragontail: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - echoedvoice: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fireblast: ["1L1"], - flamethrower: ["1L1"], - flash: ["1L1"], - flashcannon: ["1L1"], - focusblast: ["1L1"], - frustration: ["1L1"], - furycutter: ["1L1"], - gigaimpact: ["1L1"], - gravity: ["1L1"], - headbutt: ["1L1"], - healblock: ["1L1"], - heavyslam: ["1L1"], - hiddenpower: ["1L1"], - honeclaws: ["1L1"], - hyperbeam: ["1L1"], - hypervoice: ["1L1"], - icebeam: ["1L1"], - incinerate: ["1L1"], - irondefense: ["1L1"], - ironhead: ["1L1"], - irontail: ["1L1"], - magnetrise: ["1L1"], - metalburst: ["1L1"], - metalclaw: ["1L1"], - metalsound: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - outrage: ["1L1"], - overheat: ["1L1"], - powergem: ["1L1"], - protect: ["1L1"], - psychup: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roar: ["1L1"], - roaroftime: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - sandstorm: ["1L1"], - scaleshot: ["1L1"], - scaryface: ["1L1"], - secretpower: ["1L1"], - shadowclaw: ["1L1"], - shockwave: ["1L1"], - slash: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - stealthrock: ["1L1"], - steelbeam: ["1L1"], - stompingtantrum: ["1L1"], - stoneedge: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - trick: ["1L1"], - trickroom: ["1L1"], - twister: ["1L1"], - }, - eventData: [ - {generation: 4, level: 47, shiny: 1, moves: ["1L1"]}, - {generation: 4, level: 70, shiny: 1, moves: ["1L1"]}, - {generation: 4, level: 1, shiny: 1, moves: ["1L1"]}, - {generation: 5, level: 5, isHidden: true, moves: ["1L1"], pokeball: "dreamball"}, - {generation: 5, level: 100, shiny: true, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 6, level: 50, shiny: 1, moves: ["1L1"]}, - {generation: 6, level: 100, nature: "Modest", isHidden: true, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 7, level: 60, shiny: 1, moves: ["1L1"]}, - {generation: 7, level: 60, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 7, level: 100, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 7, level: 50, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 8, level: 70, shiny: 1, moves: ["1L1"]}, - {generation: 8, level: 70, nature: "Bold", isHidden: true, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 9, level: 75, nature: "Quiet", isHidden: true, perfectIVs: 4, moves: ["1L1"]}, - ], - eventOnly: false, - }, - dialgaorigin: { - eventOnly: false, - }, - palkia: { - learnset: { - aerialace: ["1L1"], - ancientpower: ["1L1"], - aquaring: ["1L1"], - aquatail: ["1L1"], - aurasphere: ["1L1"], - avalanche: ["1L1"], - blizzard: ["1L1"], - bodypress: ["1L1"], - bodyslam: ["1L1"], - breakingswipe: ["1L1"], - brickbreak: ["1L1"], - brine: ["1L1"], - bulkup: ["1L1"], - bulldoze: ["1L1"], - chillingwater: ["1L1"], - confide: ["1L1"], - cut: ["1L1"], - dive: ["1L1"], - doubleteam: ["1L1"], - dracometeor: ["1L1"], - dragonbreath: ["1L1"], - dragonclaw: ["1L1"], - dragonpulse: ["1L1"], - dragontail: ["1L1"], - dualwingbeat: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - echoedvoice: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fireblast: ["1L1"], - flamethrower: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - focuspunch: ["1L1"], - frustration: ["1L1"], - furycutter: ["1L1"], - gigaimpact: ["1L1"], - gravity: ["1L1"], - hail: ["1L1"], - headbutt: ["1L1"], - healblock: ["1L1"], - heavyslam: ["1L1"], - hiddenpower: ["1L1"], - honeclaws: ["1L1"], - hydropump: ["1L1"], - hyperbeam: ["1L1"], - hypervoice: ["1L1"], - icebeam: ["1L1"], - icywind: ["1L1"], - incinerate: ["1L1"], - liquidation: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - outrage: ["1L1"], - powergem: ["1L1"], - protect: ["1L1"], - psychup: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roar: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - sandstorm: ["1L1"], - scaleshot: ["1L1"], - scaryface: ["1L1"], - secretpower: ["1L1"], - shadowclaw: ["1L1"], - shockwave: ["1L1"], - slash: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - snowscape: ["1L1"], - spacialrend: ["1L1"], - stompingtantrum: ["1L1"], - stoneedge: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - trick: ["1L1"], - trickroom: ["1L1"], - twister: ["1L1"], - waterfall: ["1L1"], - waterpulse: ["1L1"], - whirlpool: ["1L1"], - }, - eventData: [ - {generation: 4, level: 47, shiny: 1, moves: ["1L1"]}, - {generation: 4, level: 70, shiny: 1, moves: ["1L1"]}, - {generation: 4, level: 1, shiny: 1, moves: ["1L1"]}, - {generation: 5, level: 5, isHidden: true, moves: ["1L1"], pokeball: "dreamball"}, - {generation: 5, level: 100, shiny: true, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 6, level: 50, shiny: 1, moves: ["1L1"]}, - {generation: 6, level: 100, nature: "Timid", isHidden: true, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 7, level: 60, shiny: 1, moves: ["1L1"]}, - {generation: 7, level: 60, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 7, level: 100, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 7, level: 50, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 8, level: 70, shiny: 1, moves: ["1L1"]}, - {generation: 8, level: 70, nature: "Hasty", isHidden: true, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 9, level: 75, nature: "Modest", isHidden: true, perfectIVs: 4, moves: ["1L1"]}, - ], - eventOnly: false, - }, - palkiaorigin: { - eventOnly: false, - }, - heatran: { - learnset: { - ancientpower: ["1L1"], - attract: ["1L1"], - bodypress: ["1L1"], - bodyslam: ["1L1"], - bugbite: ["1L1"], - bulldoze: ["1L1"], - burningjealousy: ["1L1"], - captivate: ["1L1"], - confide: ["1L1"], - crunch: ["1L1"], - darkpulse: ["1L1"], - dig: ["1L1"], - doubleteam: ["1L1"], - dragonpulse: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - endure: ["1L1"], - eruption: ["1L1"], - explosion: ["1L1"], - facade: ["1L1"], - fireblast: ["1L1"], - firefang: ["1L1"], - firespin: ["1L1"], - flamecharge: ["1L1"], - flamethrower: ["1L1"], - flareblitz: ["1L1"], - flashcannon: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - hardpress: ["1L1"], - headbutt: ["1L1"], - heatcrash: ["1L1"], - heatwave: ["1L1"], - heavyslam: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - incinerate: ["1L1"], - irondefense: ["1L1"], - ironhead: ["1L1"], - lavaplume: ["1L1"], - leer: ["1L1"], - lunge: ["1L1"], - magmastorm: ["1L1"], - metalclaw: ["1L1"], - metalsound: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - naturepower: ["1L1"], - overheat: ["1L1"], - payback: ["1L1"], - pounce: ["1L1"], - powergem: ["1L1"], - protect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roar: ["1L1"], - rockblast: ["1L1"], - rockclimb: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - sandstorm: ["1L1"], - scaryface: ["1L1"], - scorchingsands: ["1L1"], - secretpower: ["1L1"], - selfdestruct: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - stealthrock: ["1L1"], - steelbeam: ["1L1"], - steelroller: ["1L1"], - stompingtantrum: ["1L1"], - stoneedge: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - uproar: ["1L1"], - willowisp: ["1L1"], - }, - eventData: [ - {generation: 4, level: 70, shiny: 1, moves: ["1L1"]}, - {generation: 4, level: 50, shiny: 1, moves: ["1L1"]}, - {generation: 4, level: 50, gender: "M", nature: "Quiet", moves: ["1L1"], pokeball: "pokeball"}, - {generation: 5, level: 68, shiny: 1, moves: ["1L1"]}, - {generation: 6, level: 50, shiny: 1, moves: ["1L1"]}, - {generation: 7, level: 60, shiny: 1, moves: ["1L1"]}, - {generation: 7, level: 60, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 7, level: 100, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 8, level: 70, shiny: 1, moves: ["1L1"]}, - ], - eventOnly: false, - }, - regigigas: { - learnset: { - aerialace: ["1L1"], - ancientpower: ["1L1"], - avalanche: ["1L1"], - block: ["1L1"], - bodypress: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - bulldoze: ["1L1"], - confide: ["1L1"], - confuseray: ["1L1"], - crushgrip: ["1L1"], - darkestlariat: ["1L1"], - dizzypunch: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - drainpunch: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - firepunch: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - focuspunch: ["1L1"], - foresight: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - gravity: ["1L1"], - hammerarm: ["1L1"], - hardpress: ["1L1"], - headbutt: ["1L1"], - heatcrash: ["1L1"], - heavyslam: ["1L1"], - hiddenpower: ["1L1"], - highhorsepower: ["1L1"], - hyperbeam: ["1L1"], - icepunch: ["1L1"], - icywind: ["1L1"], - ironhead: ["1L1"], - knockoff: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - naturepower: ["1L1"], - payback: ["1L1"], - pound: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - psychup: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - revenge: ["1L1"], - rockclimb: ["1L1"], - rockpolish: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - secretpower: ["1L1"], - shockwave: ["1L1"], - sleeptalk: ["1L1"], - smackdown: ["1L1"], - snore: ["1L1"], - stomp: ["1L1"], - stompingtantrum: ["1L1"], - stoneedge: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - superpower: ["1L1"], - swagger: ["1L1"], - terablast: ["1L1"], - terrainpulse: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderpunch: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - wideguard: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 4, level: 70, shiny: 1, moves: ["1L1"]}, - {generation: 4, level: 1, shiny: 1, moves: ["1L1"]}, - {generation: 4, level: 100, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 5, level: 68, shiny: 1, moves: ["1L1"]}, - {generation: 6, level: 50, shiny: 1, moves: ["1L1"]}, - {generation: 7, level: 60, shiny: 1, moves: ["1L1"]}, - {generation: 7, level: 60, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 7, level: 100, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 8, level: 100, shiny: 1, moves: ["1L1"]}, - ], - eventOnly: false, - }, - giratina: { - learnset: { - aerialace: ["1L1"], - aircutter: ["1L1"], - ancientpower: ["1L1"], - aquatail: ["1L1"], - aurasphere: ["1L1"], - bodyslam: ["1L1"], - breakingswipe: ["1L1"], - brutalswing: ["1L1"], - bulldoze: ["1L1"], - calmmind: ["1L1"], - chargebeam: ["1L1"], - confide: ["1L1"], - confuseray: ["1L1"], - curse: ["1L1"], - cut: ["1L1"], - darkpulse: ["1L1"], - defog: ["1L1"], - destinybond: ["1L1"], - doubleteam: ["1L1"], - dracometeor: ["1L1"], - dragonbreath: ["1L1"], - dragonclaw: ["1L1"], - dragonpulse: ["1L1"], - dragontail: ["1L1"], - dreameater: ["1L1"], - dualwingbeat: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - echoedvoice: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - fly: ["1L1"], - frustration: ["1L1"], - furycutter: ["1L1"], - gigaimpact: ["1L1"], - gravity: ["1L1"], - headbutt: ["1L1"], - healblock: ["1L1"], - hex: ["1L1"], - hiddenpower: ["1L1"], - honeclaws: ["1L1"], - hyperbeam: ["1L1"], - hypervoice: ["1L1"], - icywind: ["1L1"], - ironhead: ["1L1"], - irontail: ["1L1"], - magiccoat: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - ominouswind: ["1L1"], - outrage: ["1L1"], - painsplit: ["1L1"], - payback: ["1L1"], - phantomforce: ["1L1"], - poltergeist: ["1L1"], - protect: ["1L1"], - psychic: ["1L1"], - psychup: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roar: ["1L1"], - rockclimb: ["1L1"], - rocksmash: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - scaryface: ["1L1"], - secretpower: ["1L1"], - shadowball: ["1L1"], - shadowclaw: ["1L1"], - shadowforce: ["1L1"], - shadowsneak: ["1L1"], - shockwave: ["1L1"], - silverwind: ["1L1"], - skittersmack: ["1L1"], - slash: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - spite: ["1L1"], - steelwing: ["1L1"], - stoneedge: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - tailwind: ["1L1"], - takedown: ["1L1"], - telekinesis: ["1L1"], - terablast: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - twister: ["1L1"], - willowisp: ["1L1"], - }, - eventData: [ - {generation: 4, level: 70, shiny: 1, moves: ["1L1"]}, - {generation: 4, level: 47, shiny: 1, moves: ["1L1"]}, - {generation: 4, level: 1, shiny: 1, moves: ["1L1"]}, - {generation: 5, level: 5, isHidden: true, moves: ["1L1"], pokeball: "dreamball"}, - {generation: 5, level: 100, shiny: true, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 6, level: 50, shiny: 1, moves: ["1L1"]}, - {generation: 6, level: 100, nature: "Brave", isHidden: true, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 7, level: 60, shiny: 1, moves: ["1L1"]}, - {generation: 8, level: 70, shiny: 1, moves: ["1L1"]}, - ], - eventOnly: false, - }, - giratinaorigin: { - eventOnly: false, - }, - cresselia: { - learnset: { - allyswitch: ["1L1"], - attract: ["1L1"], - aurorabeam: ["1L1"], - bodyslam: ["1L1"], - calmmind: ["1L1"], - captivate: ["1L1"], - chargebeam: ["1L1"], - confide: ["1L1"], - confuseray: ["1L1"], - confusion: ["1L1"], - dazzlinggleam: ["1L1"], - doubleteam: ["1L1"], - dreameater: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - expandingforce: ["1L1"], - facade: ["1L1"], - flash: ["1L1"], - frustration: ["1L1"], - furycutter: ["1L1"], - futuresight: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - gravity: ["1L1"], - guardswap: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - icebeam: ["1L1"], - icywind: ["1L1"], - lightscreen: ["1L1"], - lunarblessing: ["1L1"], - lunardance: ["1L1"], - magiccoat: ["1L1"], - magicroom: ["1L1"], - mist: ["1L1"], - moonblast: ["1L1"], - moonlight: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - powergem: ["1L1"], - powerswap: ["1L1"], - protect: ["1L1"], - psybeam: ["1L1"], - psychic: ["1L1"], - psychicterrain: ["1L1"], - psychocut: ["1L1"], - psychoshift: ["1L1"], - psychup: ["1L1"], - psyshock: ["1L1"], - raindance: ["1L1"], - recycle: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - scaryface: ["1L1"], - secretpower: ["1L1"], - shadowball: ["1L1"], - signalbeam: ["1L1"], - skillswap: ["1L1"], - slash: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - storedpower: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - telekinesis: ["1L1"], - terablast: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - trick: ["1L1"], - trickroom: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 4, level: 50, shiny: 1, moves: ["1L1"]}, - {generation: 5, level: 68, shiny: 1, moves: ["1L1"]}, - {generation: 5, level: 68, nature: "Modest", moves: ["1L1"]}, - {generation: 6, level: 50, shiny: 1, moves: ["1L1"]}, - {generation: 7, level: 60, shiny: 1, moves: ["1L1"]}, - {generation: 8, level: 70, shiny: 1, moves: ["1L1"]}, - ], - eventOnly: false, - }, - phione: { - learnset: { - acidarmor: ["1L1"], - alluringvoice: ["1L1"], - ancientpower: ["1L1"], - aquaring: ["1L1"], - batonpass: ["1L1"], - blizzard: ["1L1"], - bounce: ["1L1"], - brine: ["1L1"], - bubble: ["1L1"], - bubblebeam: ["1L1"], - charm: ["1L1"], - chillingwater: ["1L1"], - confide: ["1L1"], - covet: ["1L1"], - dazzlinggleam: ["1L1"], - disarmingvoice: ["1L1"], - dive: ["1L1"], - doubleteam: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fling: ["1L1"], - flipturn: ["1L1"], - frustration: ["1L1"], - grassknot: ["1L1"], - hail: ["1L1"], - haze: ["1L1"], - healbell: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hydropump: ["1L1"], - icebeam: ["1L1"], - icywind: ["1L1"], - knockoff: ["1L1"], - lastresort: ["1L1"], - liquidation: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - protect: ["1L1"], - psychup: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - scald: ["1L1"], - secretpower: ["1L1"], - signalbeam: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - substitute: ["1L1"], - supersonic: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - takeheart: ["1L1"], - terablast: ["1L1"], - toxic: ["1L1"], - uproar: ["1L1"], - uturn: ["1L1"], - waterfall: ["1L1"], - watergun: ["1L1"], - waterpulse: ["1L1"], - watersport: ["1L1"], - weatherball: ["1L1"], - whirlpool: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 4, level: 50, moves: ["1L1"], pokeball: "cherishball"}, - ], - }, - manaphy: { - learnset: { - acidarmor: ["1L1"], - alluringvoice: ["1L1"], - ancientpower: ["1L1"], - aquaring: ["1L1"], - batonpass: ["1L1"], - blizzard: ["1L1"], - bounce: ["1L1"], - brine: ["1L1"], - bubble: ["1L1"], - bubblebeam: ["1L1"], - calmmind: ["1L1"], - charm: ["1L1"], - chillingwater: ["1L1"], - confide: ["1L1"], - covet: ["1L1"], - dazzlinggleam: ["1L1"], - disarmingvoice: ["1L1"], - dive: ["1L1"], - doubleteam: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - faketears: ["1L1"], - flash: ["1L1"], - fling: ["1L1"], - flipturn: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - hail: ["1L1"], - haze: ["1L1"], - healbell: ["1L1"], - heartswap: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hydropump: ["1L1"], - hyperbeam: ["1L1"], - icebeam: ["1L1"], - icywind: ["1L1"], - knockoff: ["1L1"], - lastresort: ["1L1"], - lightscreen: ["1L1"], - liquidation: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - protect: ["1L1"], - psybeam: ["1L1"], - psychic: ["1L1"], - psychup: ["1L1"], - raindance: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - scald: ["1L1"], - secretpower: ["1L1"], - shadowball: ["1L1"], - signalbeam: ["1L1"], - skillswap: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - storedpower: ["1L1"], - substitute: ["1L1"], - supersonic: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - tailglow: ["1L1"], - takeheart: ["1L1"], - terablast: ["1L1"], - toxic: ["1L1"], - uproar: ["1L1"], - uturn: ["1L1"], - waterfall: ["1L1"], - watergun: ["1L1"], - waterpulse: ["1L1"], - watersport: ["1L1"], - weatherball: ["1L1"], - whirlpool: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 4, level: 5, moves: ["1L1"]}, - {generation: 4, level: 1, shiny: 1, moves: ["1L1"], pokeball: "pokeball"}, - {generation: 4, level: 50, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 4, level: 50, nature: "Impish", moves: ["1L1"], pokeball: "cherishball"}, - {generation: 6, level: 1, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 6, level: 100, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 7, level: 15, moves: ["1L1"], pokeball: "cherishball"}, - ], - eventOnly: false, - }, - darkrai: { - learnset: { - aerialace: ["1L1"], - blizzard: ["1L1"], - brickbreak: ["1L1"], - calmmind: ["1L1"], - chargebeam: ["1L1"], - confide: ["1L1"], - confuseray: ["1L1"], - curse: ["1L1"], - cut: ["1L1"], - darkpulse: ["1L1"], - darkvoid: ["1L1"], - disable: ["1L1"], - doubleteam: ["1L1"], - drainpunch: ["1L1"], - dreameater: ["1L1"], - embargo: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - feintattack: ["1L1"], - flash: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - focuspunch: ["1L1"], - foulplay: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - haze: ["1L1"], - headbutt: ["1L1"], - hex: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - hypnosis: ["1L1"], - icebeam: ["1L1"], - icywind: ["1L1"], - incinerate: ["1L1"], - knockoff: ["1L1"], - lashout: ["1L1"], - lastresort: ["1L1"], - mudslap: ["1L1"], - nastyplot: ["1L1"], - naturalgift: ["1L1"], - nightmare: ["1L1"], - nightshade: ["1L1"], - ominouswind: ["1L1"], - payback: ["1L1"], - phantomforce: ["1L1"], - poisonjab: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - psychic: ["1L1"], - psychup: ["1L1"], - psyshock: ["1L1"], - pursuit: ["1L1"], - quickattack: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - roaroftime: ["1L1"], - rockclimb: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - scaryface: ["1L1"], - secretpower: ["1L1"], - shadowball: ["1L1"], - shadowclaw: ["1L1"], - shockwave: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - snarl: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - spacialrend: ["1L1"], - spite: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - swordsdance: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - throatchop: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderwave: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - trick: ["1L1"], - willowisp: ["1L1"], - wonderroom: ["1L1"], - xscissor: ["1L1"], - }, - eventData: [ - {generation: 4, level: 40, shiny: 1, moves: ["1L1"]}, - {generation: 4, level: 50, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 4, level: 50, moves: ["1L1"], pokeball: "pokeball"}, - {generation: 4, level: 50, shiny: 1, moves: ["1L1"]}, - {generation: 5, level: 50, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 6, level: 50, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 6, level: 100, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 7, level: 50, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 9, level: 50, moves: ["1L1"], pokeball: "cherishball"}, - ], - eventOnly: false, - }, - shaymin: { - learnset: { - aircutter: ["1L1"], - airslash: ["1L1"], - aromatherapy: ["1L1"], - batonpass: ["1L1"], - bulletseed: ["1L1"], - celebrate: ["1L1"], - confide: ["1L1"], - covet: ["1L1"], - dazzlinggleam: ["1L1"], - defensecurl: ["1L1"], - disarmingvoice: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - earthpower: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - flash: ["1L1"], - frustration: ["1L1"], - gigadrain: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - grasswhistle: ["1L1"], - grassyglide: ["1L1"], - grassyterrain: ["1L1"], - growth: ["1L1"], - headbutt: ["1L1"], - healingwish: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - laserfocus: ["1L1"], - lastresort: ["1L1"], - leafstorm: ["1L1"], - leechseed: ["1L1"], - luckychant: ["1L1"], - magicalleaf: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - naturepower: ["1L1"], - ominouswind: ["1L1"], - petalblizzard: ["1L1"], - playrough: ["1L1"], - protect: ["1L1"], - psychic: ["1L1"], - psychup: ["1L1"], - quickattack: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - secretpower: ["1L1"], - seedbomb: ["1L1"], - seedflare: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - sweetkiss: ["1L1"], - sweetscent: ["1L1"], - swift: ["1L1"], - swordsdance: ["1L1"], - synthesis: ["1L1"], - tailwind: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - worryseed: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 4, level: 50, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 4, level: 30, shiny: 1, moves: ["1L1"], pokeball: "pokeball"}, - {generation: 5, level: 50, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 6, level: 15, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 6, level: 100, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 7, level: 20, moves: ["1L1"], pokeball: "cherishball"}, - ], - eventOnly: false, - }, - shayminsky: { - eventOnly: false, - }, - arceus: { - learnset: { - acidspray: ["1L1"], - aerialace: ["1L1"], - agility: ["1L1"], - airslash: ["1L1"], - ancientpower: ["1L1"], - aquatail: ["1L1"], - aurasphere: ["1L1"], - avalanche: ["1L1"], - blastburn: ["1L1"], - blizzard: ["1L1"], - bodypress: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - brine: ["1L1"], - bugbuzz: ["1L1"], - bulkup: ["1L1"], - bulldoze: ["1L1"], - bulletseed: ["1L1"], - calmmind: ["1L1"], - chargebeam: ["1L1"], - chillingwater: ["1L1"], - confide: ["1L1"], - confuseray: ["1L1"], - cosmicpower: ["1L1"], - cut: ["1L1"], - darkpulse: ["1L1"], - dazzlinggleam: ["1L1"], - defog: ["1L1"], - dive: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dracometeor: ["1L1"], - dragonclaw: ["1L1"], - dragondance: ["1L1"], - dragonpulse: ["1L1"], - dragontail: ["1L1"], - dreameater: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - echoedvoice: ["1L1"], - electricterrain: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - extremespeed: ["1L1"], - facade: ["1L1"], - fireblast: ["1L1"], - flamethrower: ["1L1"], - flareblitz: ["1L1"], - flash: ["1L1"], - flashcannon: ["1L1"], - fly: ["1L1"], - focusblast: ["1L1"], - foulplay: ["1L1"], - frustration: ["1L1"], - furycutter: ["1L1"], - futuresight: ["1L1"], - gigadrain: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - grassyterrain: ["1L1"], - gravity: ["1L1"], - gunkshot: ["1L1"], - hail: ["1L1"], - headbutt: ["1L1"], - healingwish: ["1L1"], - heatwave: ["1L1"], - heavyslam: ["1L1"], - hex: ["1L1"], - hiddenpower: ["1L1"], - honeclaws: ["1L1"], - hurricane: ["1L1"], - hydrocannon: ["1L1"], - hydropump: ["1L1"], - hyperbeam: ["1L1"], - hypervoice: ["1L1"], - icebeam: ["1L1"], - icywind: ["1L1"], - imprison: ["1L1"], - incinerate: ["1L1"], - irondefense: ["1L1"], - ironhead: ["1L1"], - irontail: ["1L1"], - judgment: ["1L1"], - laserfocus: ["1L1"], - lastresort: ["1L1"], - lightscreen: ["1L1"], - liquidation: ["1L1"], - magicalleaf: ["1L1"], - magiccoat: ["1L1"], - meteorbeam: ["1L1"], - mistyterrain: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - ominouswind: ["1L1"], - outrage: ["1L1"], - overheat: ["1L1"], - payback: ["1L1"], - perishsong: ["1L1"], - phantomforce: ["1L1"], - poisonjab: ["1L1"], - powergem: ["1L1"], - protect: ["1L1"], - psychic: ["1L1"], - psychicterrain: ["1L1"], - psychup: ["1L1"], - psyshock: ["1L1"], - punishment: ["1L1"], - quash: ["1L1"], - raindance: ["1L1"], - recover: ["1L1"], - recycle: ["1L1"], - reflect: ["1L1"], - refresh: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - roar: ["1L1"], - roaroftime: ["1L1"], - rockclimb: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - sandstorm: ["1L1"], - scaryface: ["1L1"], - scorchingsands: ["1L1"], - secretpower: ["1L1"], - seismictoss: ["1L1"], - shadowball: ["1L1"], - shadowclaw: ["1L1"], - shadowforce: ["1L1"], - shockwave: ["1L1"], - signalbeam: ["1L1"], - silverwind: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - snarl: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - spacialrend: ["1L1"], - stealthrock: ["1L1"], - steelbeam: ["1L1"], - stompingtantrum: ["1L1"], - stoneedge: ["1L1"], - storedpower: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - supercellslam: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - swordsdance: ["1L1"], - tailwind: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - telekinesis: ["1L1"], - terablast: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - trick: ["1L1"], - trickroom: ["1L1"], - twister: ["1L1"], - waterfall: ["1L1"], - waterpulse: ["1L1"], - whirlpool: ["1L1"], - wildcharge: ["1L1"], - willowisp: ["1L1"], - workup: ["1L1"], - xscissor: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 4, level: 100, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 5, level: 100, moves: ["1L1"]}, - {generation: 6, level: 100, shiny: 1, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 6, level: 100, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 7, level: 100, moves: ["1L1"], pokeball: "cherishball"}, - ], - eventOnly: false, - }, - arceusbug: { - eventOnly: false, - }, - arceusdark: { - eventOnly: false, - }, - arceusdragon: { - eventOnly: false, - }, - arceuselectric: { - eventOnly: false, - }, - arceusfairy: { - eventOnly: false, - }, - arceusfighting: { - eventOnly: false, - }, - arceusfire: { - eventOnly: false, - }, - arceusflying: { - eventOnly: false, - }, - arceusghost: { - eventOnly: false, - }, - arceusgrass: { - eventOnly: false, - }, - arceusground: { - eventOnly: false, - }, - arceusice: { - eventOnly: false, - }, - arceuspoison: { - eventOnly: false, - }, - arceuspsychic: { - eventOnly: false, - }, - arceusrock: { - eventOnly: false, - }, - arceussteel: { - eventOnly: false, - }, - arceuswater: { - eventOnly: false, - }, - victini: { - learnset: { - batonpass: ["1L1"], - blazekick: ["1L1"], - blueflare: ["1L1"], - boltstrike: ["1L1"], - bounce: ["1L1"], - brickbreak: ["1L1"], - celebrate: ["1L1"], - chargebeam: ["1L1"], - confide: ["1L1"], - confusion: ["1L1"], - dazzlinggleam: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - embargo: ["1L1"], - encore: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - expandingforce: ["1L1"], - facade: ["1L1"], - finalgambit: ["1L1"], - fireblast: ["1L1"], - firepunch: ["1L1"], - firespin: ["1L1"], - flameburst: ["1L1"], - flamecharge: ["1L1"], - flamethrower: ["1L1"], - flareblitz: ["1L1"], - flash: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - focusenergy: ["1L1"], - frustration: ["1L1"], - fusionbolt: ["1L1"], - fusionflare: ["1L1"], - futuresight: ["1L1"], - gigaimpact: ["1L1"], - glaciate: ["1L1"], - grassknot: ["1L1"], - guardswap: ["1L1"], - headbutt: ["1L1"], - heatwave: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - incinerate: ["1L1"], - inferno: ["1L1"], - laserfocus: ["1L1"], - lastresort: ["1L1"], - lightscreen: ["1L1"], - magiccoat: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - mysticalfire: ["1L1"], - overheat: ["1L1"], - powerswap: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - psychic: ["1L1"], - psychup: ["1L1"], - psyshock: ["1L1"], - quickattack: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - reversal: ["1L1"], - rocksmash: ["1L1"], - roleplay: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - scorchingsands: ["1L1"], - searingshot: ["1L1"], - secretpower: ["1L1"], - shadowball: ["1L1"], - shockwave: ["1L1"], - signalbeam: ["1L1"], - skillswap: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - speedswap: ["1L1"], - storedpower: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - taunt: ["1L1"], - telekinesis: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderpunch: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - trick: ["1L1"], - trickroom: ["1L1"], - uproar: ["1L1"], - uturn: ["1L1"], - vcreate: ["1L1"], - wildcharge: ["1L1"], - willowisp: ["1L1"], - workup: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 5, level: 15, moves: ["1L1"]}, - {generation: 5, level: 50, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 5, level: 100, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 6, level: 15, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 6, level: 100, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 6, level: 15, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 7, level: 15, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 8, level: 50, nature: "Brave", perfectIVs: 6, moves: ["1L1"], pokeball: "cherishball"}, - ], - eventOnly: false, - }, - snivy: { - learnset: { - aerialace: ["1L1"], - aquatail: ["1L1"], - aromatherapy: ["1L1"], - attract: ["1L1"], - bind: ["1L1"], - bulletseed: ["1L1"], - calmmind: ["1L1"], - captivate: ["1L1"], - coil: ["1L1"], - confide: ["1L1"], - cut: ["1L1"], - defog: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - flash: ["1L1"], - frustration: ["1L1"], - gastroacid: ["1L1"], - gigadrain: ["1L1"], - glare: ["1L1"], - grassknot: ["1L1"], - grasspledge: ["1L1"], - grassyglide: ["1L1"], - grassyterrain: ["1L1"], - growth: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - irontail: ["1L1"], - knockoff: ["1L1"], - leafblade: ["1L1"], - leafstorm: ["1L1"], - leaftornado: ["1L1"], - leechseed: ["1L1"], - leer: ["1L1"], - lightscreen: ["1L1"], - magicalleaf: ["1L1"], - meanlook: ["1L1"], - megadrain: ["1L1"], - mirrorcoat: ["1L1"], - naturalgift: ["1L1"], - naturepower: ["1L1"], - petalblizzard: ["1L1"], - protect: ["1L1"], - pursuit: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - secretpower: ["1L1"], - seedbomb: ["1L1"], - slam: ["1L1"], - sleeptalk: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - sweetscent: ["1L1"], - swift: ["1L1"], - swordsdance: ["1L1"], - synthesis: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - twister: ["1L1"], - vinewhip: ["1L1"], - workup: ["1L1"], - worryseed: ["1L1"], - wrap: ["1L1"], - wringout: ["1L1"], - }, - eventData: [ - {generation: 5, level: 5, gender: "M", nature: "Hardy", moves: ["1L1"], pokeball: "cherishball"}, - ], - }, - servine: { - learnset: { - aerialace: ["1L1"], - aquatail: ["1L1"], - attract: ["1L1"], - bind: ["1L1"], - bulletseed: ["1L1"], - calmmind: ["1L1"], - coil: ["1L1"], - confide: ["1L1"], - cut: ["1L1"], - defog: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - flash: ["1L1"], - frustration: ["1L1"], - gastroacid: ["1L1"], - gigadrain: ["1L1"], - grassknot: ["1L1"], - grasspledge: ["1L1"], - grassyglide: ["1L1"], - grassyterrain: ["1L1"], - growth: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - irontail: ["1L1"], - knockoff: ["1L1"], - leafblade: ["1L1"], - leafstorm: ["1L1"], - leaftornado: ["1L1"], - leechseed: ["1L1"], - leer: ["1L1"], - lightscreen: ["1L1"], - magicalleaf: ["1L1"], - megadrain: ["1L1"], - naturepower: ["1L1"], - petalblizzard: ["1L1"], - protect: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - secretpower: ["1L1"], - seedbomb: ["1L1"], - slam: ["1L1"], - sleeptalk: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - swordsdance: ["1L1"], - synthesis: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - vinewhip: ["1L1"], - workup: ["1L1"], - worryseed: ["1L1"], - wrap: ["1L1"], - wringout: ["1L1"], - }, - }, - serperior: { - learnset: { - aerialace: ["1L1"], - aquatail: ["1L1"], - attract: ["1L1"], - bind: ["1L1"], - bodyslam: ["1L1"], - breakingswipe: ["1L1"], - brutalswing: ["1L1"], - bulletseed: ["1L1"], - calmmind: ["1L1"], - coil: ["1L1"], - confide: ["1L1"], - cut: ["1L1"], - defog: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dragonpulse: ["1L1"], - dragontail: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - flash: ["1L1"], - frenzyplant: ["1L1"], - frustration: ["1L1"], - gastroacid: ["1L1"], - gigadrain: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - grasspledge: ["1L1"], - grassyglide: ["1L1"], - grassyterrain: ["1L1"], - growth: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - holdback: ["1L1"], - hyperbeam: ["1L1"], - irontail: ["1L1"], - knockoff: ["1L1"], - leafblade: ["1L1"], - leafstorm: ["1L1"], - leaftornado: ["1L1"], - leechseed: ["1L1"], - leer: ["1L1"], - lightscreen: ["1L1"], - magicalleaf: ["1L1"], - megadrain: ["1L1"], - naturepower: ["1L1"], - outrage: ["1L1"], - petalblizzard: ["1L1"], - protect: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rocksmash: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - scaleshot: ["1L1"], - scaryface: ["1L1"], - secretpower: ["1L1"], - seedbomb: ["1L1"], - slam: ["1L1"], - sleeptalk: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - swordsdance: ["1L1"], - synthesis: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - vinewhip: ["1L1"], - workup: ["1L1"], - worryseed: ["1L1"], - wrap: ["1L1"], - wringout: ["1L1"], - }, - eventData: [ - {generation: 5, level: 100, gender: "M", moves: ["1L1"], pokeball: "cherishball"}, - {generation: 6, level: 50, isHidden: true, moves: ["1L1"], pokeball: "cherishball"}, - ], - }, - tepig: { - learnset: { - assurance: ["1L1"], - attract: ["1L1"], - bodyslam: ["1L1"], - burnup: ["1L1"], - confide: ["1L1"], - covet: ["1L1"], - curse: ["1L1"], - defensecurl: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - echoedvoice: ["1L1"], - ember: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fireblast: ["1L1"], - firepledge: ["1L1"], - firepunch: ["1L1"], - firespin: ["1L1"], - flamecharge: ["1L1"], - flamethrower: ["1L1"], - flareblitz: ["1L1"], - frustration: ["1L1"], - grassknot: ["1L1"], - gyroball: ["1L1"], - headsmash: ["1L1"], - heatcrash: ["1L1"], - heatwave: ["1L1"], - heavyslam: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - incinerate: ["1L1"], - irontail: ["1L1"], - magnitude: ["1L1"], - mudslap: ["1L1"], - odorsleuth: ["1L1"], - overheat: ["1L1"], - protect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roar: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - secretpower: ["1L1"], - sleeptalk: ["1L1"], - smog: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - stompingtantrum: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - sunnyday: ["1L1"], - superpower: ["1L1"], - swagger: ["1L1"], - tackle: ["1L1"], - tailwhip: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - temperflare: ["1L1"], - terablast: ["1L1"], - thrash: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - wildcharge: ["1L1"], - willowisp: ["1L1"], - workup: ["1L1"], - yawn: ["1L1"], - zenheadbutt: ["1L1"], - }, - }, - pignite: { - learnset: { - armthrust: ["1L1"], - assurance: ["1L1"], - attract: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - bulkup: ["1L1"], - bulldoze: ["1L1"], - closecombat: ["1L1"], - coaching: ["1L1"], - confide: ["1L1"], - covet: ["1L1"], - curse: ["1L1"], - defensecurl: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - drainpunch: ["1L1"], - echoedvoice: ["1L1"], - ember: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fireblast: ["1L1"], - firepledge: ["1L1"], - firepunch: ["1L1"], - firespin: ["1L1"], - flamecharge: ["1L1"], - flamethrower: ["1L1"], - flareblitz: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - focuspunch: ["1L1"], - frustration: ["1L1"], - grassknot: ["1L1"], - gyroball: ["1L1"], - headsmash: ["1L1"], - heatcrash: ["1L1"], - heatwave: ["1L1"], - heavyslam: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - highhorsepower: ["1L1"], - incinerate: ["1L1"], - irontail: ["1L1"], - knockoff: ["1L1"], - lowkick: ["1L1"], - lowsweep: ["1L1"], - mudslap: ["1L1"], - odorsleuth: ["1L1"], - overheat: ["1L1"], - poisonjab: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - reversal: ["1L1"], - roar: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - scaryface: ["1L1"], - secretpower: ["1L1"], - sleeptalk: ["1L1"], - smog: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - stompingtantrum: ["1L1"], - stoneedge: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - superpower: ["1L1"], - swagger: ["1L1"], - tackle: ["1L1"], - tailwhip: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - temperflare: ["1L1"], - terablast: ["1L1"], - thunderpunch: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - wildcharge: ["1L1"], - willowisp: ["1L1"], - workup: ["1L1"], - zenheadbutt: ["1L1"], - }, - }, - emboar: { - learnset: { - armthrust: ["1L1"], - assurance: ["1L1"], - attract: ["1L1"], - blastburn: ["1L1"], - block: ["1L1"], - bodypress: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - bulkup: ["1L1"], - bulldoze: ["1L1"], - closecombat: ["1L1"], - coaching: ["1L1"], - confide: ["1L1"], - covet: ["1L1"], - curse: ["1L1"], - defensecurl: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - drainpunch: ["1L1"], - earthquake: ["1L1"], - echoedvoice: ["1L1"], - ember: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fireblast: ["1L1"], - firepledge: ["1L1"], - firepunch: ["1L1"], - firespin: ["1L1"], - flamecharge: ["1L1"], - flamethrower: ["1L1"], - flareblitz: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - focuspunch: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - gyroball: ["1L1"], - hammerarm: ["1L1"], - hardpress: ["1L1"], - headsmash: ["1L1"], - heatcrash: ["1L1"], - heatwave: ["1L1"], - heavyslam: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - highhorsepower: ["1L1"], - holdback: ["1L1"], - hyperbeam: ["1L1"], - incinerate: ["1L1"], - ironhead: ["1L1"], - irontail: ["1L1"], - knockoff: ["1L1"], - lowkick: ["1L1"], - lowsweep: ["1L1"], - mudslap: ["1L1"], - odorsleuth: ["1L1"], - overheat: ["1L1"], - poisonjab: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - reversal: ["1L1"], - roar: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - scald: ["1L1"], - scaryface: ["1L1"], - secretpower: ["1L1"], - sleeptalk: ["1L1"], - smackdown: ["1L1"], - smog: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - stompingtantrum: ["1L1"], - stoneedge: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - superpower: ["1L1"], - swagger: ["1L1"], - tackle: ["1L1"], - tailwhip: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - temperflare: ["1L1"], - terablast: ["1L1"], - thunderpunch: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - wildcharge: ["1L1"], - willowisp: ["1L1"], - workup: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 5, level: 100, gender: "M", moves: ["1L1"], pokeball: "cherishball"}, - {generation: 6, level: 50, isHidden: true, moves: ["1L1"], pokeball: "cherishball"}, - ], - }, - oshawott: { - learnset: { - aerialace: ["1L1"], - airslash: ["1L1"], - aquacutter: ["1L1"], - aquajet: ["1L1"], - aquatail: ["1L1"], - assurance: ["1L1"], - attract: ["1L1"], - avalanche: ["1L1"], - blizzard: ["1L1"], - brine: ["1L1"], - chillingwater: ["1L1"], - confide: ["1L1"], - copycat: ["1L1"], - covet: ["1L1"], - cut: ["1L1"], - detect: ["1L1"], - dig: ["1L1"], - dive: ["1L1"], - doubleteam: ["1L1"], - encore: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - falseswipe: ["1L1"], - fling: ["1L1"], - flipturn: ["1L1"], - focusenergy: ["1L1"], - frustration: ["1L1"], - furycutter: ["1L1"], - grassknot: ["1L1"], - hail: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hydropump: ["1L1"], - icebeam: ["1L1"], - icywind: ["1L1"], - irontail: ["1L1"], - knockoff: ["1L1"], - liquidation: ["1L1"], - nightslash: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - razorshell: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - revenge: ["1L1"], - rocksmash: ["1L1"], - round: ["1L1"], - sacredsword: ["1L1"], - scald: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - snowscape: ["1L1"], - soak: ["1L1"], - substitute: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - swordsdance: ["1L1"], - tackle: ["1L1"], - tailwhip: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - toxic: ["1L1"], - trumpcard: ["1L1"], - waterfall: ["1L1"], - watergun: ["1L1"], - waterpledge: ["1L1"], - waterpulse: ["1L1"], - watersport: ["1L1"], - whirlpool: ["1L1"], - workup: ["1L1"], - xscissor: ["1L1"], - }, - }, - dewott: { - learnset: { - aerialace: ["1L1"], - airslash: ["1L1"], - aquajet: ["1L1"], - aquatail: ["1L1"], - attract: ["1L1"], - avalanche: ["1L1"], - blizzard: ["1L1"], - brickbreak: ["1L1"], - chillingwater: ["1L1"], - confide: ["1L1"], - covet: ["1L1"], - cut: ["1L1"], - dig: ["1L1"], - dive: ["1L1"], - doubleteam: ["1L1"], - encore: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - falseswipe: ["1L1"], - fling: ["1L1"], - flipturn: ["1L1"], - focusenergy: ["1L1"], - frustration: ["1L1"], - furycutter: ["1L1"], - grassknot: ["1L1"], - hail: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hydropump: ["1L1"], - icebeam: ["1L1"], - icywind: ["1L1"], - irontail: ["1L1"], - knockoff: ["1L1"], - liquidation: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - razorshell: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - revenge: ["1L1"], - rocksmash: ["1L1"], - round: ["1L1"], - scald: ["1L1"], - secretpower: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - snowscape: ["1L1"], - soak: ["1L1"], - substitute: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - swordsdance: ["1L1"], - tackle: ["1L1"], - tailwhip: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - toxic: ["1L1"], - vacuumwave: ["1L1"], - waterfall: ["1L1"], - watergun: ["1L1"], - waterpledge: ["1L1"], - waterpulse: ["1L1"], - watersport: ["1L1"], - whirlpool: ["1L1"], - workup: ["1L1"], - xscissor: ["1L1"], - }, - }, - samurott: { - learnset: { - aerialace: ["1L1"], - airslash: ["1L1"], - aquajet: ["1L1"], - aquatail: ["1L1"], - attract: ["1L1"], - avalanche: ["1L1"], - blizzard: ["1L1"], - block: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - bulldoze: ["1L1"], - chillingwater: ["1L1"], - confide: ["1L1"], - covet: ["1L1"], - cut: ["1L1"], - dig: ["1L1"], - dive: ["1L1"], - doubleteam: ["1L1"], - dragontail: ["1L1"], - drillrun: ["1L1"], - encore: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - falseswipe: ["1L1"], - fling: ["1L1"], - flipturn: ["1L1"], - focusenergy: ["1L1"], - frustration: ["1L1"], - furycutter: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - hail: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - holdback: ["1L1"], - hydrocannon: ["1L1"], - hydropump: ["1L1"], - hyperbeam: ["1L1"], - icebeam: ["1L1"], - icywind: ["1L1"], - irontail: ["1L1"], - knockoff: ["1L1"], - liquidation: ["1L1"], - megahorn: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - razorshell: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - revenge: ["1L1"], - rocksmash: ["1L1"], - round: ["1L1"], - scald: ["1L1"], - scaryface: ["1L1"], - secretpower: ["1L1"], - slash: ["1L1"], - sleeptalk: ["1L1"], - smartstrike: ["1L1"], - snore: ["1L1"], - snowscape: ["1L1"], - soak: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - superpower: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - swordsdance: ["1L1"], - tackle: ["1L1"], - tailwhip: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - toxic: ["1L1"], - upperhand: ["1L1"], - vacuumwave: ["1L1"], - waterfall: ["1L1"], - watergun: ["1L1"], - waterpledge: ["1L1"], - waterpulse: ["1L1"], - watersport: ["1L1"], - whirlpool: ["1L1"], - workup: ["1L1"], - xscissor: ["1L1"], - }, - eventData: [ - {generation: 5, level: 100, gender: "M", moves: ["1L1"], pokeball: "cherishball"}, - {generation: 6, level: 50, isHidden: true, moves: ["1L1"], pokeball: "cherishball"}, - ], - }, - samurotthisui: { - learnset: { - aerialace: ["1L1"], - airslash: ["1L1"], - aquajet: ["1L1"], - aquatail: ["1L1"], - avalanche: ["1L1"], - blizzard: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - bulldoze: ["1L1"], - ceaselessedge: ["1L1"], - chillingwater: ["1L1"], - darkpulse: ["1L1"], - dig: ["1L1"], - drillrun: ["1L1"], - encore: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - falseswipe: ["1L1"], - fling: ["1L1"], - flipturn: ["1L1"], - focusenergy: ["1L1"], - furycutter: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - helpinghand: ["1L1"], - hydrocannon: ["1L1"], - hydropump: ["1L1"], - hyperbeam: ["1L1"], - icebeam: ["1L1"], - icywind: ["1L1"], - knockoff: ["1L1"], - lashout: ["1L1"], - liquidation: ["1L1"], - megahorn: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - razorshell: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - scaryface: ["1L1"], - slash: ["1L1"], - sleeptalk: ["1L1"], - smartstrike: ["1L1"], - snarl: ["1L1"], - snowscape: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - surf: ["1L1"], - swift: ["1L1"], - swordsdance: ["1L1"], - tackle: ["1L1"], - tailwhip: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - throatchop: ["1L1"], - upperhand: ["1L1"], - vacuumwave: ["1L1"], - waterfall: ["1L1"], - watergun: ["1L1"], - waterpledge: ["1L1"], - waterpulse: ["1L1"], - whirlpool: ["1L1"], - xscissor: ["1L1"], - }, - }, - patrat: { - learnset: { - afteryou: ["1L1"], - aquatail: ["1L1"], - assurance: ["1L1"], - attract: ["1L1"], - batonpass: ["1L1"], - bide: ["1L1"], - bite: ["1L1"], - bulletseed: ["1L1"], - confide: ["1L1"], - covet: ["1L1"], - crunch: ["1L1"], - cut: ["1L1"], - detect: ["1L1"], - dig: ["1L1"], - doubleteam: ["1L1"], - endeavor: ["1L1"], - facade: ["1L1"], - flail: ["1L1"], - fling: ["1L1"], - focusenergy: ["1L1"], - foresight: ["1L1"], - frustration: ["1L1"], - grassknot: ["1L1"], - gunkshot: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hyperfang: ["1L1"], - hypnosis: ["1L1"], - irontail: ["1L1"], - laserfocus: ["1L1"], - lastresort: ["1L1"], - leer: ["1L1"], - lowkick: ["1L1"], - meanlook: ["1L1"], - nastyplot: ["1L1"], - protect: ["1L1"], - pursuit: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - revenge: ["1L1"], - round: ["1L1"], - sandattack: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - seedbomb: ["1L1"], - shadowball: ["1L1"], - shockwave: ["1L1"], - slam: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - superfang: ["1L1"], - swagger: ["1L1"], - swordsdance: ["1L1"], - tackle: ["1L1"], - tearfullook: ["1L1"], - thunderbolt: ["1L1"], - toxic: ["1L1"], - workup: ["1L1"], - zenheadbutt: ["1L1"], - }, - }, - watchog: { - learnset: { - afteryou: ["1L1"], - aquatail: ["1L1"], - attract: ["1L1"], - batonpass: ["1L1"], - bide: ["1L1"], - bite: ["1L1"], - confide: ["1L1"], - confuseray: ["1L1"], - covet: ["1L1"], - crunch: ["1L1"], - cut: ["1L1"], - detect: ["1L1"], - dig: ["1L1"], - doubleteam: ["1L1"], - dreameater: ["1L1"], - endeavor: ["1L1"], - facade: ["1L1"], - firepunch: ["1L1"], - flamethrower: ["1L1"], - flash: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - focusenergy: ["1L1"], - focuspunch: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - gunkshot: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - hyperfang: ["1L1"], - hypnosis: ["1L1"], - icepunch: ["1L1"], - irontail: ["1L1"], - knockoff: ["1L1"], - laserfocus: ["1L1"], - lastresort: ["1L1"], - leer: ["1L1"], - lightscreen: ["1L1"], - lowkick: ["1L1"], - meanlook: ["1L1"], - nastyplot: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - psychup: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - rocksmash: ["1L1"], - rototiller: ["1L1"], - round: ["1L1"], - sandattack: ["1L1"], - secretpower: ["1L1"], - seedbomb: ["1L1"], - shadowball: ["1L1"], - shockwave: ["1L1"], - signalbeam: ["1L1"], - slam: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - stompingtantrum: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - superfang: ["1L1"], - swagger: ["1L1"], - swordsdance: ["1L1"], - tackle: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderpunch: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - workup: ["1L1"], - zenheadbutt: ["1L1"], - }, - }, - lillipup: { - learnset: { - aerialace: ["1L1"], - afteryou: ["1L1"], - attract: ["1L1"], - babydolleyes: ["1L1"], - bite: ["1L1"], - charm: ["1L1"], - confide: ["1L1"], - covet: ["1L1"], - crunch: ["1L1"], - dig: ["1L1"], - doubleteam: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - firefang: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - howl: ["1L1"], - hypervoice: ["1L1"], - icefang: ["1L1"], - lastresort: ["1L1"], - leer: ["1L1"], - lick: ["1L1"], - mudslap: ["1L1"], - odorsleuth: ["1L1"], - payback: ["1L1"], - playrough: ["1L1"], - protect: ["1L1"], - psychicfangs: ["1L1"], - pursuit: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - reversal: ["1L1"], - roar: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - sandattack: ["1L1"], - secretpower: ["1L1"], - shadowball: ["1L1"], - shockwave: ["1L1"], - sleeptalk: ["1L1"], - snarl: ["1L1"], - snore: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - thunderbolt: ["1L1"], - thunderfang: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - uproar: ["1L1"], - wildcharge: ["1L1"], - workup: ["1L1"], - yawn: ["1L1"], - }, - }, - herdier: { - learnset: { - aerialace: ["1L1"], - afteryou: ["1L1"], - attract: ["1L1"], - babydolleyes: ["1L1"], - bite: ["1L1"], - charm: ["1L1"], - confide: ["1L1"], - covet: ["1L1"], - crunch: ["1L1"], - dig: ["1L1"], - doubleteam: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - firefang: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hypervoice: ["1L1"], - icefang: ["1L1"], - lastresort: ["1L1"], - leer: ["1L1"], - odorsleuth: ["1L1"], - payback: ["1L1"], - playrough: ["1L1"], - protect: ["1L1"], - psychicfangs: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - reversal: ["1L1"], - roar: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - secretpower: ["1L1"], - shadowball: ["1L1"], - shockwave: ["1L1"], - sleeptalk: ["1L1"], - snarl: ["1L1"], - snore: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - thunderbolt: ["1L1"], - thunderfang: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - uproar: ["1L1"], - wildcharge: ["1L1"], - workup: ["1L1"], - }, - encounters: [ - {generation: 5, level: 20, isHidden: true}, - ], - }, - stoutland: { - learnset: { - aerialace: ["1L1"], - afteryou: ["1L1"], - attract: ["1L1"], - babydolleyes: ["1L1"], - bite: ["1L1"], - charm: ["1L1"], - confide: ["1L1"], - covet: ["1L1"], - crunch: ["1L1"], - dig: ["1L1"], - doubleteam: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - firefang: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - hypervoice: ["1L1"], - icefang: ["1L1"], - ironhead: ["1L1"], - lastresort: ["1L1"], - leer: ["1L1"], - odorsleuth: ["1L1"], - payback: ["1L1"], - playrough: ["1L1"], - protect: ["1L1"], - psychicfangs: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - reversal: ["1L1"], - roar: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - secretpower: ["1L1"], - shadowball: ["1L1"], - shockwave: ["1L1"], - sleeptalk: ["1L1"], - snarl: ["1L1"], - snore: ["1L1"], - stompingtantrum: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - superpower: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderfang: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - uproar: ["1L1"], - wildcharge: ["1L1"], - workup: ["1L1"], - }, - encounters: [ - {generation: 5, level: 23}, - ], - }, - purrloin: { - learnset: { - aerialace: ["1L1"], - assist: ["1L1"], - assurance: ["1L1"], - attract: ["1L1"], - batonpass: ["1L1"], - captivate: ["1L1"], - charm: ["1L1"], - confide: ["1L1"], - copycat: ["1L1"], - covet: ["1L1"], - cut: ["1L1"], - darkpulse: ["1L1"], - doubleteam: ["1L1"], - dreameater: ["1L1"], - echoedvoice: ["1L1"], - embargo: ["1L1"], - encore: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fakeout: ["1L1"], - faketears: ["1L1"], - feintattack: ["1L1"], - foulplay: ["1L1"], - frustration: ["1L1"], - furyswipes: ["1L1"], - grassknot: ["1L1"], - growl: ["1L1"], - gunkshot: ["1L1"], - hiddenpower: ["1L1"], - honeclaws: ["1L1"], - hypervoice: ["1L1"], - irontail: ["1L1"], - knockoff: ["1L1"], - lashout: ["1L1"], - nastyplot: ["1L1"], - nightslash: ["1L1"], - payback: ["1L1"], - payday: ["1L1"], - playrough: ["1L1"], - protect: ["1L1"], - psychup: ["1L1"], - pursuit: ["1L1"], - quickattack: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roleplay: ["1L1"], - round: ["1L1"], - sandattack: ["1L1"], - scratch: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - seedbomb: ["1L1"], - shadowball: ["1L1"], - shadowclaw: ["1L1"], - slash: ["1L1"], - sleeptalk: ["1L1"], - snarl: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - spite: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - taunt: ["1L1"], - thief: ["1L1"], - thunderwave: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - trick: ["1L1"], - uturn: ["1L1"], - yawn: ["1L1"], - }, - }, - liepard: { - learnset: { - aerialace: ["1L1"], - assist: ["1L1"], - assurance: ["1L1"], - attract: ["1L1"], - batonpass: ["1L1"], - burningjealousy: ["1L1"], - charm: ["1L1"], - confide: ["1L1"], - covet: ["1L1"], - cut: ["1L1"], - darkpulse: ["1L1"], - doubleteam: ["1L1"], - dreameater: ["1L1"], - echoedvoice: ["1L1"], - embargo: ["1L1"], - encore: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fakeout: ["1L1"], - faketears: ["1L1"], - foulplay: ["1L1"], - frustration: ["1L1"], - furyswipes: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - growl: ["1L1"], - gunkshot: ["1L1"], - hiddenpower: ["1L1"], - honeclaws: ["1L1"], - hyperbeam: ["1L1"], - hypervoice: ["1L1"], - irontail: ["1L1"], - knockoff: ["1L1"], - laserfocus: ["1L1"], - lashout: ["1L1"], - nastyplot: ["1L1"], - nightslash: ["1L1"], - payback: ["1L1"], - payday: ["1L1"], - playrough: ["1L1"], - protect: ["1L1"], - psychocut: ["1L1"], - psychup: ["1L1"], - pursuit: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rocksmash: ["1L1"], - roleplay: ["1L1"], - round: ["1L1"], - sandattack: ["1L1"], - scratch: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - seedbomb: ["1L1"], - shadowball: ["1L1"], - shadowclaw: ["1L1"], - skittersmack: ["1L1"], - slash: ["1L1"], - sleeptalk: ["1L1"], - snarl: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - spite: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - taunt: ["1L1"], - thief: ["1L1"], - throatchop: ["1L1"], - thunderwave: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - trick: ["1L1"], - uturn: ["1L1"], - }, - eventData: [ - {generation: 5, level: 20, gender: "F", nature: "Jolly", isHidden: true, moves: ["1L1"]}, - ], - }, - pansage: { - learnset: { - acrobatics: ["1L1"], - astonish: ["1L1"], - attract: ["1L1"], - bite: ["1L1"], - bulletseed: ["1L1"], - confide: ["1L1"], - covet: ["1L1"], - crunch: ["1L1"], - cut: ["1L1"], - dig: ["1L1"], - disarmingvoice: ["1L1"], - doubleteam: ["1L1"], - endeavor: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - flash: ["1L1"], - fling: ["1L1"], - focuspunch: ["1L1"], - frustration: ["1L1"], - furyswipes: ["1L1"], - gastroacid: ["1L1"], - gigadrain: ["1L1"], - grassknot: ["1L1"], - grasspledge: ["1L1"], - grasswhistle: ["1L1"], - gunkshot: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - honeclaws: ["1L1"], - irontail: ["1L1"], - knockoff: ["1L1"], - leafstorm: ["1L1"], - leechseed: ["1L1"], - leer: ["1L1"], - lick: ["1L1"], - lowkick: ["1L1"], - lowsweep: ["1L1"], - magicalleaf: ["1L1"], - nastyplot: ["1L1"], - naturalgift: ["1L1"], - naturepower: ["1L1"], - payback: ["1L1"], - playnice: ["1L1"], - protect: ["1L1"], - recycle: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - roleplay: ["1L1"], - round: ["1L1"], - scratch: ["1L1"], - secretpower: ["1L1"], - seedbomb: ["1L1"], - shadowclaw: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - spikyshield: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - synthesis: ["1L1"], - taunt: ["1L1"], - thief: ["1L1"], - tickle: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - uproar: ["1L1"], - vinewhip: ["1L1"], - workup: ["1L1"], - worryseed: ["1L1"], - }, - eventData: [ - {generation: 5, level: 1, shiny: 1, gender: "M", nature: "Brave", ivs: {spa: 31}, moves: ["1L1"], pokeball: "pokeball"}, - {generation: 5, level: 10, gender: "M", isHidden: true, moves: ["1L1"]}, - {generation: 5, level: 30, gender: "M", nature: "Serious", moves: ["1L1"], pokeball: "cherishball"}, - ], - }, - simisage: { - learnset: { - acrobatics: ["1L1"], - attract: ["1L1"], - brickbreak: ["1L1"], - confide: ["1L1"], - covet: ["1L1"], - cut: ["1L1"], - dig: ["1L1"], - doubleteam: ["1L1"], - endeavor: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - flash: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - focuspunch: ["1L1"], - frustration: ["1L1"], - furyswipes: ["1L1"], - gastroacid: ["1L1"], - gigadrain: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - grasspledge: ["1L1"], - gunkshot: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - honeclaws: ["1L1"], - hyperbeam: ["1L1"], - irontail: ["1L1"], - knockoff: ["1L1"], - leer: ["1L1"], - lick: ["1L1"], - lowkick: ["1L1"], - lowsweep: ["1L1"], - naturepower: ["1L1"], - payback: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - recycle: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - roleplay: ["1L1"], - round: ["1L1"], - secretpower: ["1L1"], - seedbomb: ["1L1"], - shadowclaw: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - superpower: ["1L1"], - swagger: ["1L1"], - synthesis: ["1L1"], - taunt: ["1L1"], - thief: ["1L1"], - throatchop: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - uproar: ["1L1"], - workup: ["1L1"], - worryseed: ["1L1"], - }, - }, - pansear: { - learnset: { - acrobatics: ["1L1"], - amnesia: ["1L1"], - astonish: ["1L1"], - attract: ["1L1"], - belch: ["1L1"], - bite: ["1L1"], - confide: ["1L1"], - covet: ["1L1"], - crunch: ["1L1"], - cut: ["1L1"], - dig: ["1L1"], - disarmingvoice: ["1L1"], - doubleteam: ["1L1"], - endeavor: ["1L1"], - facade: ["1L1"], - fireblast: ["1L1"], - firepledge: ["1L1"], - firepunch: ["1L1"], - firespin: ["1L1"], - flameburst: ["1L1"], - flamecharge: ["1L1"], - flamethrower: ["1L1"], - flareblitz: ["1L1"], - fling: ["1L1"], - focuspunch: ["1L1"], - frustration: ["1L1"], - furyswipes: ["1L1"], - gastroacid: ["1L1"], - grassknot: ["1L1"], - gunkshot: ["1L1"], - heatwave: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - honeclaws: ["1L1"], - incinerate: ["1L1"], - irontail: ["1L1"], - knockoff: ["1L1"], - leer: ["1L1"], - lick: ["1L1"], - lowkick: ["1L1"], - lowsweep: ["1L1"], - nastyplot: ["1L1"], - naturalgift: ["1L1"], - overheat: ["1L1"], - payback: ["1L1"], - playnice: ["1L1"], - protect: ["1L1"], - recycle: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - roleplay: ["1L1"], - round: ["1L1"], - scratch: ["1L1"], - secretpower: ["1L1"], - shadowclaw: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - taunt: ["1L1"], - thief: ["1L1"], - tickle: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - uproar: ["1L1"], - willowisp: ["1L1"], - workup: ["1L1"], - yawn: ["1L1"], - }, - eventData: [ - {generation: 5, level: 10, gender: "M", isHidden: true, moves: ["1L1"]}, - ], - }, - simisear: { - learnset: { - acrobatics: ["1L1"], - attract: ["1L1"], - brickbreak: ["1L1"], - confide: ["1L1"], - covet: ["1L1"], - cut: ["1L1"], - dig: ["1L1"], - doubleteam: ["1L1"], - endeavor: ["1L1"], - facade: ["1L1"], - fireblast: ["1L1"], - firepledge: ["1L1"], - firepunch: ["1L1"], - flameburst: ["1L1"], - flamecharge: ["1L1"], - flamethrower: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - focuspunch: ["1L1"], - frustration: ["1L1"], - furyswipes: ["1L1"], - gastroacid: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - gunkshot: ["1L1"], - heatwave: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - honeclaws: ["1L1"], - hyperbeam: ["1L1"], - incinerate: ["1L1"], - irontail: ["1L1"], - knockoff: ["1L1"], - leer: ["1L1"], - lick: ["1L1"], - lowkick: ["1L1"], - lowsweep: ["1L1"], - overheat: ["1L1"], - payback: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - recycle: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - roleplay: ["1L1"], - round: ["1L1"], - secretpower: ["1L1"], - shadowclaw: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - superpower: ["1L1"], - swagger: ["1L1"], - taunt: ["1L1"], - thief: ["1L1"], - throatchop: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - uproar: ["1L1"], - willowisp: ["1L1"], - workup: ["1L1"], - }, - eventData: [ - {generation: 6, level: 5, perfectIVs: 2, moves: ["1L1"], pokeball: "cherishball"}, - ], - }, - panpour: { - learnset: { - acrobatics: ["1L1"], - aquaring: ["1L1"], - aquatail: ["1L1"], - astonish: ["1L1"], - attract: ["1L1"], - bite: ["1L1"], - blizzard: ["1L1"], - brine: ["1L1"], - confide: ["1L1"], - covet: ["1L1"], - crunch: ["1L1"], - cut: ["1L1"], - dig: ["1L1"], - disarmingvoice: ["1L1"], - dive: ["1L1"], - doubleteam: ["1L1"], - endeavor: ["1L1"], - facade: ["1L1"], - fling: ["1L1"], - focuspunch: ["1L1"], - frustration: ["1L1"], - furyswipes: ["1L1"], - gastroacid: ["1L1"], - grassknot: ["1L1"], - gunkshot: ["1L1"], - hail: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - honeclaws: ["1L1"], - hydropump: ["1L1"], - icebeam: ["1L1"], - icepunch: ["1L1"], - icywind: ["1L1"], - irontail: ["1L1"], - knockoff: ["1L1"], - leer: ["1L1"], - lick: ["1L1"], - lowkick: ["1L1"], - lowsweep: ["1L1"], - mudsport: ["1L1"], - nastyplot: ["1L1"], - naturalgift: ["1L1"], - payback: ["1L1"], - playnice: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - recycle: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - roleplay: ["1L1"], - round: ["1L1"], - scald: ["1L1"], - scratch: ["1L1"], - secretpower: ["1L1"], - shadowclaw: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - substitute: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - taunt: ["1L1"], - thief: ["1L1"], - tickle: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - uproar: ["1L1"], - waterfall: ["1L1"], - watergun: ["1L1"], - waterpledge: ["1L1"], - waterpulse: ["1L1"], - watersport: ["1L1"], - workup: ["1L1"], - }, - eventData: [ - {generation: 5, level: 10, gender: "M", isHidden: true, moves: ["1L1"]}, - ], - }, - simipour: { - learnset: { - acrobatics: ["1L1"], - aquatail: ["1L1"], - attract: ["1L1"], - blizzard: ["1L1"], - brickbreak: ["1L1"], - confide: ["1L1"], - covet: ["1L1"], - cut: ["1L1"], - dig: ["1L1"], - dive: ["1L1"], - doubleteam: ["1L1"], - endeavor: ["1L1"], - facade: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - focuspunch: ["1L1"], - frustration: ["1L1"], - furyswipes: ["1L1"], - gastroacid: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - gunkshot: ["1L1"], - hail: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - honeclaws: ["1L1"], - hyperbeam: ["1L1"], - icebeam: ["1L1"], - icepunch: ["1L1"], - icywind: ["1L1"], - irontail: ["1L1"], - knockoff: ["1L1"], - leer: ["1L1"], - lick: ["1L1"], - lowkick: ["1L1"], - lowsweep: ["1L1"], - payback: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - recycle: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - roleplay: ["1L1"], - round: ["1L1"], - scald: ["1L1"], - secretpower: ["1L1"], - shadowclaw: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - substitute: ["1L1"], - superpower: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - taunt: ["1L1"], - thief: ["1L1"], - throatchop: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - uproar: ["1L1"], - waterfall: ["1L1"], - waterpledge: ["1L1"], - waterpulse: ["1L1"], - workup: ["1L1"], - }, - }, - munna: { - learnset: { - afteryou: ["1L1"], - allyswitch: ["1L1"], - amnesia: ["1L1"], - attract: ["1L1"], - barrier: ["1L1"], - batonpass: ["1L1"], - calmmind: ["1L1"], - chargebeam: ["1L1"], - confide: ["1L1"], - curse: ["1L1"], - dazzlinggleam: ["1L1"], - defensecurl: ["1L1"], - doubleteam: ["1L1"], - dreameater: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - expandingforce: ["1L1"], - facade: ["1L1"], - flash: ["1L1"], - frustration: ["1L1"], - futuresight: ["1L1"], - gravity: ["1L1"], - guardswap: ["1L1"], - gyroball: ["1L1"], - healbell: ["1L1"], - healingwish: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hypnosis: ["1L1"], - imprison: ["1L1"], - lightscreen: ["1L1"], - luckychant: ["1L1"], - magiccoat: ["1L1"], - moonblast: ["1L1"], - moonlight: ["1L1"], - nightmare: ["1L1"], - painsplit: ["1L1"], - powerswap: ["1L1"], - protect: ["1L1"], - psybeam: ["1L1"], - psychic: ["1L1"], - psychup: ["1L1"], - psyshock: ["1L1"], - psywave: ["1L1"], - raindance: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rockslide: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - secretpower: ["1L1"], - shadowball: ["1L1"], - shockwave: ["1L1"], - signalbeam: ["1L1"], - skillswap: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - sonicboom: ["1L1"], - storedpower: ["1L1"], - substitute: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - synchronoise: ["1L1"], - telekinesis: ["1L1"], - thunderwave: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - trick: ["1L1"], - trickroom: ["1L1"], - wonderroom: ["1L1"], - worryseed: ["1L1"], - yawn: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 7, level: 39, nature: "Mild", isHidden: true, moves: ["1L1"], pokeball: "dreamball"}, - ], - }, - musharna: { - learnset: { - afteryou: ["1L1"], - allyswitch: ["1L1"], - amnesia: ["1L1"], - attract: ["1L1"], - calmmind: ["1L1"], - chargebeam: ["1L1"], - confide: ["1L1"], - dazzlinggleam: ["1L1"], - defensecurl: ["1L1"], - doubleteam: ["1L1"], - dreameater: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - expandingforce: ["1L1"], - facade: ["1L1"], - flash: ["1L1"], - frustration: ["1L1"], - futuresight: ["1L1"], - gigaimpact: ["1L1"], - gravity: ["1L1"], - guardswap: ["1L1"], - gyroball: ["1L1"], - healbell: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - hypnosis: ["1L1"], - imprison: ["1L1"], - lightscreen: ["1L1"], - luckychant: ["1L1"], - magiccoat: ["1L1"], - mistyexplosion: ["1L1"], - moonblast: ["1L1"], - moonlight: ["1L1"], - painsplit: ["1L1"], - powerswap: ["1L1"], - protect: ["1L1"], - psybeam: ["1L1"], - psychic: ["1L1"], - psychicterrain: ["1L1"], - psychup: ["1L1"], - psyshock: ["1L1"], - raindance: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rockslide: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - secretpower: ["1L1"], - shadowball: ["1L1"], - shockwave: ["1L1"], - signalbeam: ["1L1"], - skillswap: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - storedpower: ["1L1"], - substitute: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - telekinesis: ["1L1"], - thunderwave: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - trick: ["1L1"], - trickroom: ["1L1"], - wonderroom: ["1L1"], - worryseed: ["1L1"], - yawn: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 5, level: 50, isHidden: true, moves: ["1L1"]}, - ], - }, - pidove: { - learnset: { - aerialace: ["1L1"], - agility: ["1L1"], - aircutter: ["1L1"], - airslash: ["1L1"], - attract: ["1L1"], - bestow: ["1L1"], - confide: ["1L1"], - defog: ["1L1"], - detect: ["1L1"], - doubleteam: ["1L1"], - dualwingbeat: ["1L1"], - echoedvoice: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - featherdance: ["1L1"], - fly: ["1L1"], - focusenergy: ["1L1"], - frustration: ["1L1"], - growl: ["1L1"], - gust: ["1L1"], - heatwave: ["1L1"], - hiddenpower: ["1L1"], - hypnosis: ["1L1"], - leer: ["1L1"], - luckychant: ["1L1"], - morningsun: ["1L1"], - nightslash: ["1L1"], - pluck: ["1L1"], - protect: ["1L1"], - quickattack: ["1L1"], - raindance: ["1L1"], - razorwind: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roost: ["1L1"], - round: ["1L1"], - secretpower: ["1L1"], - skyattack: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - steelwing: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - tailwind: ["1L1"], - taunt: ["1L1"], - toxic: ["1L1"], - uproar: ["1L1"], - uturn: ["1L1"], - wish: ["1L1"], - workup: ["1L1"], - }, - eventData: [ - {generation: 5, level: 1, shiny: 1, gender: "F", nature: "Hardy", ivs: {atk: 31}, abilities: ["1L1"], moves: ["1L1"], pokeball: "pokeball"}, - ], - }, - tranquill: { - learnset: { - aerialace: ["1L1"], - agility: ["1L1"], - aircutter: ["1L1"], - airslash: ["1L1"], - attract: ["1L1"], - confide: ["1L1"], - defog: ["1L1"], - detect: ["1L1"], - doubleteam: ["1L1"], - dualwingbeat: ["1L1"], - echoedvoice: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - featherdance: ["1L1"], - fly: ["1L1"], - focusenergy: ["1L1"], - frustration: ["1L1"], - growl: ["1L1"], - gust: ["1L1"], - heatwave: ["1L1"], - hiddenpower: ["1L1"], - leer: ["1L1"], - pluck: ["1L1"], - protect: ["1L1"], - quickattack: ["1L1"], - raindance: ["1L1"], - razorwind: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roost: ["1L1"], - round: ["1L1"], - secretpower: ["1L1"], - skyattack: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - steelwing: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - tailwind: ["1L1"], - taunt: ["1L1"], - toxic: ["1L1"], - uproar: ["1L1"], - uturn: ["1L1"], - workup: ["1L1"], - }, - }, - unfezant: { - learnset: { - aerialace: ["1L1"], - agility: ["1L1"], - aircutter: ["1L1"], - airslash: ["1L1"], - attract: ["1L1"], - bravebird: ["1L1"], - confide: ["1L1"], - defog: ["1L1"], - detect: ["1L1"], - doubleteam: ["1L1"], - dualwingbeat: ["1L1"], - echoedvoice: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - featherdance: ["1L1"], - fly: ["1L1"], - focusenergy: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - growl: ["1L1"], - gust: ["1L1"], - heatwave: ["1L1"], - hiddenpower: ["1L1"], - hurricane: ["1L1"], - hyperbeam: ["1L1"], - leer: ["1L1"], - pluck: ["1L1"], - protect: ["1L1"], - psychup: ["1L1"], - quickattack: ["1L1"], - raindance: ["1L1"], - razorwind: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roost: ["1L1"], - round: ["1L1"], - secretpower: ["1L1"], - skyattack: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - steelwing: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - tailwind: ["1L1"], - taunt: ["1L1"], - toxic: ["1L1"], - uproar: ["1L1"], - uturn: ["1L1"], - workup: ["1L1"], - }, - encounters: [ - {generation: 5, level: 22}, - ], - }, - blitzle: { - learnset: { - agility: ["1L1"], - attract: ["1L1"], - batonpass: ["1L1"], - bodyslam: ["1L1"], - bounce: ["1L1"], - charge: ["1L1"], - chargebeam: ["1L1"], - confide: ["1L1"], - discharge: ["1L1"], - doubleedge: ["1L1"], - doublekick: ["1L1"], - doubleteam: ["1L1"], - eerieimpulse: ["1L1"], - electricterrain: ["1L1"], - electroball: ["1L1"], - electroweb: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - feint: ["1L1"], - flamecharge: ["1L1"], - flash: ["1L1"], - frustration: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - lightscreen: ["1L1"], - lowkick: ["1L1"], - magnetrise: ["1L1"], - mefirst: ["1L1"], - protect: ["1L1"], - pursuit: ["1L1"], - quickattack: ["1L1"], - rage: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - round: ["1L1"], - sandattack: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - shockwave: ["1L1"], - signalbeam: ["1L1"], - sleeptalk: ["1L1"], - smartstrike: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - spark: ["1L1"], - stomp: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - supercellslam: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - tailwhip: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thrash: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - uproar: ["1L1"], - voltswitch: ["1L1"], - wildcharge: ["1L1"], - }, - }, - zebstrika: { - learnset: { - agility: ["1L1"], - allyswitch: ["1L1"], - attract: ["1L1"], - batonpass: ["1L1"], - bodyslam: ["1L1"], - bounce: ["1L1"], - bulldoze: ["1L1"], - charge: ["1L1"], - chargebeam: ["1L1"], - confide: ["1L1"], - discharge: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - eerieimpulse: ["1L1"], - electricterrain: ["1L1"], - electroball: ["1L1"], - electroweb: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - flamecharge: ["1L1"], - flash: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - highhorsepower: ["1L1"], - hyperbeam: ["1L1"], - iondeluge: ["1L1"], - laserfocus: ["1L1"], - lightscreen: ["1L1"], - lowkick: ["1L1"], - magnetrise: ["1L1"], - overheat: ["1L1"], - protect: ["1L1"], - pursuit: ["1L1"], - quickattack: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roar: ["1L1"], - rocksmash: ["1L1"], - round: ["1L1"], - secretpower: ["1L1"], - shockwave: ["1L1"], - signalbeam: ["1L1"], - sleeptalk: ["1L1"], - smartstrike: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - spark: ["1L1"], - stomp: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - supercellslam: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - tailwhip: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thrash: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - uproar: ["1L1"], - voltswitch: ["1L1"], - wildcharge: ["1L1"], - }, - }, - roggenrola: { - learnset: { - attract: ["1L1"], - autotomize: ["1L1"], - block: ["1L1"], - bodypress: ["1L1"], - bulldoze: ["1L1"], - confide: ["1L1"], - curse: ["1L1"], - doubleteam: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - endure: ["1L1"], - explosion: ["1L1"], - facade: ["1L1"], - flashcannon: ["1L1"], - frustration: ["1L1"], - gravity: ["1L1"], - harden: ["1L1"], - headbutt: ["1L1"], - heavyslam: ["1L1"], - hiddenpower: ["1L1"], - irondefense: ["1L1"], - lockon: ["1L1"], - magnitude: ["1L1"], - meteorbeam: ["1L1"], - mudslap: ["1L1"], - naturepower: ["1L1"], - protect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rockblast: ["1L1"], - rockpolish: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - sandattack: ["1L1"], - sandstorm: ["1L1"], - sandtomb: ["1L1"], - secretpower: ["1L1"], - sleeptalk: ["1L1"], - smackdown: ["1L1"], - snore: ["1L1"], - stealthrock: ["1L1"], - stoneedge: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - swagger: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - toxic: ["1L1"], - wideguard: ["1L1"], - }, - }, - boldore: { - learnset: { - attract: ["1L1"], - block: ["1L1"], - bodypress: ["1L1"], - bulldoze: ["1L1"], - confide: ["1L1"], - curse: ["1L1"], - doubleteam: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - endure: ["1L1"], - explosion: ["1L1"], - facade: ["1L1"], - flashcannon: ["1L1"], - frustration: ["1L1"], - gravity: ["1L1"], - harden: ["1L1"], - headbutt: ["1L1"], - heavyslam: ["1L1"], - hiddenpower: ["1L1"], - irondefense: ["1L1"], - meteorbeam: ["1L1"], - mudslap: ["1L1"], - naturepower: ["1L1"], - powergem: ["1L1"], - protect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rockblast: ["1L1"], - rockpolish: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - sandattack: ["1L1"], - sandstorm: ["1L1"], - sandtomb: ["1L1"], - secretpower: ["1L1"], - sleeptalk: ["1L1"], - smackdown: ["1L1"], - snore: ["1L1"], - stealthrock: ["1L1"], - stompingtantrum: ["1L1"], - stoneedge: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - swagger: ["1L1"], - tackle: ["1L1"], - toxic: ["1L1"], - }, - encounters: [ - {generation: 5, level: 24}, - ], - }, - gigalith: { - learnset: { - attract: ["1L1"], - block: ["1L1"], - bodypress: ["1L1"], - bulldoze: ["1L1"], - confide: ["1L1"], - doubleteam: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - endure: ["1L1"], - explosion: ["1L1"], - facade: ["1L1"], - flashcannon: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - gravity: ["1L1"], - harden: ["1L1"], - headbutt: ["1L1"], - heavyslam: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - irondefense: ["1L1"], - ironhead: ["1L1"], - laserfocus: ["1L1"], - meteorbeam: ["1L1"], - mudslap: ["1L1"], - naturepower: ["1L1"], - powergem: ["1L1"], - protect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rockblast: ["1L1"], - rockpolish: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - sandattack: ["1L1"], - sandstorm: ["1L1"], - sandtomb: ["1L1"], - secretpower: ["1L1"], - selfdestruct: ["1L1"], - sleeptalk: ["1L1"], - smackdown: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - stealthrock: ["1L1"], - stompingtantrum: ["1L1"], - stoneedge: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - superpower: ["1L1"], - swagger: ["1L1"], - tackle: ["1L1"], - throatchop: ["1L1"], - toxic: ["1L1"], - weatherball: ["1L1"], - }, - }, - woobat: { - learnset: { - acrobatics: ["1L1"], - aerialace: ["1L1"], - afteryou: ["1L1"], - aircutter: ["1L1"], - airslash: ["1L1"], - allyswitch: ["1L1"], - amnesia: ["1L1"], - assurance: ["1L1"], - attract: ["1L1"], - batonpass: ["1L1"], - calmmind: ["1L1"], - captivate: ["1L1"], - chargebeam: ["1L1"], - charm: ["1L1"], - confide: ["1L1"], - confusion: ["1L1"], - defog: ["1L1"], - doubleteam: ["1L1"], - dreameater: ["1L1"], - dualwingbeat: ["1L1"], - embargo: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - expandingforce: ["1L1"], - facade: ["1L1"], - faketears: ["1L1"], - flash: ["1L1"], - flatter: ["1L1"], - fly: ["1L1"], - frustration: ["1L1"], - futuresight: ["1L1"], - gigadrain: ["1L1"], - gust: ["1L1"], - gyroball: ["1L1"], - heartstamp: ["1L1"], - heatwave: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - imprison: ["1L1"], - knockoff: ["1L1"], - lightscreen: ["1L1"], - magiccoat: ["1L1"], - nastyplot: ["1L1"], - odorsleuth: ["1L1"], - pluck: ["1L1"], - protect: ["1L1"], - psychic: ["1L1"], - psychocut: ["1L1"], - psychoshift: ["1L1"], - psychup: ["1L1"], - psyshock: ["1L1"], - raindance: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roost: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - secretpower: ["1L1"], - shadowball: ["1L1"], - shockwave: ["1L1"], - signalbeam: ["1L1"], - simplebeam: ["1L1"], - skillswap: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - speedswap: ["1L1"], - steelwing: ["1L1"], - storedpower: ["1L1"], - substitute: ["1L1"], - superfang: ["1L1"], - supersonic: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - synchronoise: ["1L1"], - tailwind: ["1L1"], - taunt: ["1L1"], - telekinesis: ["1L1"], - thief: ["1L1"], - thunderwave: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - trick: ["1L1"], - trickroom: ["1L1"], - uproar: ["1L1"], - uturn: ["1L1"], - venomdrench: ["1L1"], - zenheadbutt: ["1L1"], - }, - }, - swoobat: { - learnset: { - acrobatics: ["1L1"], - aerialace: ["1L1"], - afteryou: ["1L1"], - aircutter: ["1L1"], - airslash: ["1L1"], - allyswitch: ["1L1"], - amnesia: ["1L1"], - assurance: ["1L1"], - attract: ["1L1"], - batonpass: ["1L1"], - calmmind: ["1L1"], - chargebeam: ["1L1"], - charm: ["1L1"], - confide: ["1L1"], - confusion: ["1L1"], - defog: ["1L1"], - doubleteam: ["1L1"], - dreameater: ["1L1"], - dualwingbeat: ["1L1"], - embargo: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - expandingforce: ["1L1"], - facade: ["1L1"], - faketears: ["1L1"], - flash: ["1L1"], - fly: ["1L1"], - frustration: ["1L1"], - futuresight: ["1L1"], - gigadrain: ["1L1"], - gigaimpact: ["1L1"], - gust: ["1L1"], - gyroball: ["1L1"], - heartstamp: ["1L1"], - heatwave: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - imprison: ["1L1"], - knockoff: ["1L1"], - laserfocus: ["1L1"], - lightscreen: ["1L1"], - magiccoat: ["1L1"], - nastyplot: ["1L1"], - odorsleuth: ["1L1"], - pluck: ["1L1"], - protect: ["1L1"], - psychic: ["1L1"], - psychicfangs: ["1L1"], - psychocut: ["1L1"], - psychup: ["1L1"], - psyshock: ["1L1"], - raindance: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roost: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - secretpower: ["1L1"], - shadowball: ["1L1"], - shockwave: ["1L1"], - signalbeam: ["1L1"], - simplebeam: ["1L1"], - skillswap: ["1L1"], - skyattack: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - speedswap: ["1L1"], - steelwing: ["1L1"], - storedpower: ["1L1"], - substitute: ["1L1"], - superfang: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - tailwind: ["1L1"], - taunt: ["1L1"], - telekinesis: ["1L1"], - thief: ["1L1"], - thunderwave: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - trick: ["1L1"], - trickroom: ["1L1"], - uproar: ["1L1"], - uturn: ["1L1"], - venomdrench: ["1L1"], - zenheadbutt: ["1L1"], - }, - }, - drilbur: { - learnset: { - aerialace: ["1L1"], - attract: ["1L1"], - brickbreak: ["1L1"], - bulldoze: ["1L1"], - confide: ["1L1"], - crushclaw: ["1L1"], - curse: ["1L1"], - cut: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - drillrun: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fissure: ["1L1"], - fling: ["1L1"], - frustration: ["1L1"], - furyswipes: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - highhorsepower: ["1L1"], - honeclaws: ["1L1"], - irondefense: ["1L1"], - metalclaw: ["1L1"], - metalsound: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - mudsport: ["1L1"], - poisonjab: ["1L1"], - protect: ["1L1"], - rapidspin: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rockclimb: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - sandstorm: ["1L1"], - sandtomb: ["1L1"], - scorchingsands: ["1L1"], - scratch: ["1L1"], - secretpower: ["1L1"], - shadowclaw: ["1L1"], - skullbash: ["1L1"], - slash: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - snore: ["1L1"], - stealthrock: ["1L1"], - stompingtantrum: ["1L1"], - strength: ["1L1"], - submission: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swordsdance: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - toxic: ["1L1"], - xscissor: ["1L1"], - }, - }, - excadrill: { - learnset: { - aerialace: ["1L1"], - attract: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - brutalswing: ["1L1"], - bulldoze: ["1L1"], - confide: ["1L1"], - crushclaw: ["1L1"], - curse: ["1L1"], - cut: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - drillrun: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fissure: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - frustration: ["1L1"], - furyswipes: ["1L1"], - gigaimpact: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - highhorsepower: ["1L1"], - honeclaws: ["1L1"], - horndrill: ["1L1"], - hyperbeam: ["1L1"], - irondefense: ["1L1"], - ironhead: ["1L1"], - magnetrise: ["1L1"], - metalclaw: ["1L1"], - metalsound: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - mudsport: ["1L1"], - poisonjab: ["1L1"], - protect: ["1L1"], - rapidspin: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rockblast: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - rototiller: ["1L1"], - round: ["1L1"], - sandstorm: ["1L1"], - sandtomb: ["1L1"], - scaryface: ["1L1"], - scorchingsands: ["1L1"], - scratch: ["1L1"], - secretpower: ["1L1"], - shadowclaw: ["1L1"], - slash: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - smartstrike: ["1L1"], - snore: ["1L1"], - stealthrock: ["1L1"], - steelbeam: ["1L1"], - stompingtantrum: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swordsdance: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - throatchop: ["1L1"], - toxic: ["1L1"], - xscissor: ["1L1"], - }, - encounters: [ - {generation: 6, level: 30}, - ], - }, - audino: { - learnset: { - afteryou: ["1L1"], - allyswitch: ["1L1"], - amnesia: ["1L1"], - attract: ["1L1"], - babydolleyes: ["1L1"], - bestow: ["1L1"], - blizzard: ["1L1"], - bodyslam: ["1L1"], - calmmind: ["1L1"], - chargebeam: ["1L1"], - confide: ["1L1"], - covet: ["1L1"], - dazzlinggleam: ["1L1"], - dig: ["1L1"], - disarmingvoice: ["1L1"], - doubleedge: ["1L1"], - doubleslap: ["1L1"], - doubleteam: ["1L1"], - drainingkiss: ["1L1"], - drainpunch: ["1L1"], - dreameater: ["1L1"], - echoedvoice: ["1L1"], - encore: ["1L1"], - endure: ["1L1"], - entrainment: ["1L1"], - facade: ["1L1"], - fireblast: ["1L1"], - firepunch: ["1L1"], - flamethrower: ["1L1"], - flash: ["1L1"], - fling: ["1L1"], - focuspunch: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - gravity: ["1L1"], - growl: ["1L1"], - healbell: ["1L1"], - healingwish: ["1L1"], - healpulse: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - hypervoice: ["1L1"], - icebeam: ["1L1"], - icepunch: ["1L1"], - icywind: ["1L1"], - incinerate: ["1L1"], - irontail: ["1L1"], - knockoff: ["1L1"], - laserfocus: ["1L1"], - lastresort: ["1L1"], - lifedew: ["1L1"], - lightscreen: ["1L1"], - lowkick: ["1L1"], - luckychant: ["1L1"], - magiccoat: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - mistyterrain: ["1L1"], - painsplit: ["1L1"], - playnice: ["1L1"], - pound: ["1L1"], - poweruppunch: ["1L1"], - present: ["1L1"], - protect: ["1L1"], - psychic: ["1L1"], - psychup: ["1L1"], - psyshock: ["1L1"], - raindance: ["1L1"], - reflect: ["1L1"], - refresh: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - roleplay: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - secretpower: ["1L1"], - shadowball: ["1L1"], - signalbeam: ["1L1"], - simplebeam: ["1L1"], - skillswap: ["1L1"], - sleeptalk: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - stompingtantrum: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - sweetkiss: ["1L1"], - takedown: ["1L1"], - telekinesis: ["1L1"], - throatchop: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderpunch: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - trickroom: ["1L1"], - uproar: ["1L1"], - wildcharge: ["1L1"], - wish: ["1L1"], - workup: ["1L1"], - yawn: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 5, level: 30, gender: "F", nature: "Calm", abilities: ["1L1"], moves: ["1L1"], pokeball: "cherishball"}, - {generation: 5, level: 30, gender: "F", nature: "Serious", abilities: ["1L1"], moves: ["1L1"], pokeball: "cherishball"}, - {generation: 5, level: 30, gender: "F", nature: "Jolly", abilities: ["1L1"], moves: ["1L1"], pokeball: "cherishball"}, - {generation: 6, level: 100, nature: "Relaxed", abilities: ["1L1"], moves: ["1L1"], pokeball: "cherishball"}, - ], - }, - timburr: { - learnset: { - attract: ["1L1"], - bide: ["1L1"], - block: ["1L1"], - brickbreak: ["1L1"], - brutalswing: ["1L1"], - bulkup: ["1L1"], - chipaway: ["1L1"], - closecombat: ["1L1"], - coaching: ["1L1"], - cometpunch: ["1L1"], - confide: ["1L1"], - counter: ["1L1"], - curse: ["1L1"], - defog: ["1L1"], - detect: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - drainpunch: ["1L1"], - dynamicpunch: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - firepunch: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - focusenergy: ["1L1"], - focuspunch: ["1L1"], - forcepalm: ["1L1"], - foresight: ["1L1"], - frustration: ["1L1"], - grassknot: ["1L1"], - hammerarm: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - icepunch: ["1L1"], - knockoff: ["1L1"], - leer: ["1L1"], - lowkick: ["1L1"], - lowsweep: ["1L1"], - machpunch: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - payback: ["1L1"], - poisonjab: ["1L1"], - pound: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - revenge: ["1L1"], - reversal: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rockthrow: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - scaryface: ["1L1"], - secretpower: ["1L1"], - slam: ["1L1"], - sleeptalk: ["1L1"], - smackdown: ["1L1"], - smellingsalts: ["1L1"], - snore: ["1L1"], - stoneedge: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - superpower: ["1L1"], - swagger: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thunderpunch: ["1L1"], - toxic: ["1L1"], - wakeupslap: ["1L1"], - wideguard: ["1L1"], - workup: ["1L1"], - }, - }, - gurdurr: { - learnset: { - attract: ["1L1"], - bide: ["1L1"], - block: ["1L1"], - brickbreak: ["1L1"], - brutalswing: ["1L1"], - bulkup: ["1L1"], - chipaway: ["1L1"], - closecombat: ["1L1"], - coaching: ["1L1"], - confide: ["1L1"], - curse: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - drainpunch: ["1L1"], - dynamicpunch: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - firepunch: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - focusenergy: ["1L1"], - focuspunch: ["1L1"], - frustration: ["1L1"], - grassknot: ["1L1"], - hammerarm: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - highhorsepower: ["1L1"], - icepunch: ["1L1"], - knockoff: ["1L1"], - leer: ["1L1"], - lowkick: ["1L1"], - lowsweep: ["1L1"], - machpunch: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - payback: ["1L1"], - poisonjab: ["1L1"], - pound: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - revenge: ["1L1"], - reversal: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rockthrow: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - scaryface: ["1L1"], - secretpower: ["1L1"], - slam: ["1L1"], - sleeptalk: ["1L1"], - smackdown: ["1L1"], - snore: ["1L1"], - stoneedge: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - superpower: ["1L1"], - swagger: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thunderpunch: ["1L1"], - toxic: ["1L1"], - wakeupslap: ["1L1"], - workup: ["1L1"], - }, - }, - conkeldurr: { - learnset: { - attract: ["1L1"], - bide: ["1L1"], - block: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - brutalswing: ["1L1"], - bulkup: ["1L1"], - bulldoze: ["1L1"], - chipaway: ["1L1"], - closecombat: ["1L1"], - coaching: ["1L1"], - confide: ["1L1"], - curse: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - drainpunch: ["1L1"], - dynamicpunch: ["1L1"], - earthquake: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - firepunch: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - focusenergy: ["1L1"], - focuspunch: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - hammerarm: ["1L1"], - hardpress: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - highhorsepower: ["1L1"], - hyperbeam: ["1L1"], - icepunch: ["1L1"], - knockoff: ["1L1"], - leer: ["1L1"], - lowkick: ["1L1"], - lowsweep: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - payback: ["1L1"], - poisonjab: ["1L1"], - pound: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - revenge: ["1L1"], - reversal: ["1L1"], - rockblast: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rockthrow: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - scaryface: ["1L1"], - secretpower: ["1L1"], - slam: ["1L1"], - sleeptalk: ["1L1"], - smackdown: ["1L1"], - snore: ["1L1"], - stompingtantrum: ["1L1"], - stoneedge: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - superpower: ["1L1"], - swagger: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thunderpunch: ["1L1"], - toxic: ["1L1"], - upperhand: ["1L1"], - wakeupslap: ["1L1"], - workup: ["1L1"], - }, - }, - tympole: { - learnset: { - acid: ["1L1"], - afteryou: ["1L1"], - aquaring: ["1L1"], - attract: ["1L1"], - bounce: ["1L1"], - bubble: ["1L1"], - bubblebeam: ["1L1"], - confide: ["1L1"], - doubleteam: ["1L1"], - earthpower: ["1L1"], - echoedvoice: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - flail: ["1L1"], - frustration: ["1L1"], - growl: ["1L1"], - hail: ["1L1"], - hiddenpower: ["1L1"], - hydropump: ["1L1"], - hypervoice: ["1L1"], - icywind: ["1L1"], - infestation: ["1L1"], - mist: ["1L1"], - mudbomb: ["1L1"], - muddywater: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - mudsport: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - refresh: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - round: ["1L1"], - scald: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - sludgewave: ["1L1"], - snore: ["1L1"], - substitute: ["1L1"], - supersonic: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - toxic: ["1L1"], - uproar: ["1L1"], - venomdrench: ["1L1"], - waterpulse: ["1L1"], - weatherball: ["1L1"], - }, - }, - palpitoad: { - learnset: { - acid: ["1L1"], - afteryou: ["1L1"], - aquaring: ["1L1"], - attract: ["1L1"], - bounce: ["1L1"], - bubble: ["1L1"], - bubblebeam: ["1L1"], - bulldoze: ["1L1"], - confide: ["1L1"], - doubleteam: ["1L1"], - earthpower: ["1L1"], - echoedvoice: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - flail: ["1L1"], - focuspunch: ["1L1"], - frustration: ["1L1"], - gastroacid: ["1L1"], - growl: ["1L1"], - hail: ["1L1"], - hiddenpower: ["1L1"], - hydropump: ["1L1"], - hypervoice: ["1L1"], - icywind: ["1L1"], - infestation: ["1L1"], - muddywater: ["1L1"], - mudshot: ["1L1"], - powerwhip: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rocksmash: ["1L1"], - round: ["1L1"], - scald: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - sludgewave: ["1L1"], - snore: ["1L1"], - stealthrock: ["1L1"], - substitute: ["1L1"], - supersonic: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - toxic: ["1L1"], - uproar: ["1L1"], - venomdrench: ["1L1"], - waterpulse: ["1L1"], - weatherball: ["1L1"], - }, - }, - seismitoad: { - learnset: { - acid: ["1L1"], - afteryou: ["1L1"], - aquaring: ["1L1"], - attract: ["1L1"], - bounce: ["1L1"], - brickbreak: ["1L1"], - bubble: ["1L1"], - bubblebeam: ["1L1"], - bulldoze: ["1L1"], - confide: ["1L1"], - dig: ["1L1"], - dive: ["1L1"], - doubleteam: ["1L1"], - drainpunch: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - echoedvoice: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - flail: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - focuspunch: ["1L1"], - frustration: ["1L1"], - gastroacid: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - growl: ["1L1"], - hail: ["1L1"], - hiddenpower: ["1L1"], - hydropump: ["1L1"], - hyperbeam: ["1L1"], - hypervoice: ["1L1"], - icepunch: ["1L1"], - icywind: ["1L1"], - infestation: ["1L1"], - knockoff: ["1L1"], - liquidation: ["1L1"], - lowkick: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - muddywater: ["1L1"], - mudshot: ["1L1"], - payback: ["1L1"], - poisonjab: ["1L1"], - poweruppunch: ["1L1"], - powerwhip: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - scald: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - sludgewave: ["1L1"], - snore: ["1L1"], - stealthrock: ["1L1"], - stompingtantrum: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - supersonic: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - toxic: ["1L1"], - uproar: ["1L1"], - venomdrench: ["1L1"], - venoshock: ["1L1"], - waterpulse: ["1L1"], - weatherball: ["1L1"], - }, - encounters: [ - {generation: 5, level: 15}, - ], - }, - throh: { - learnset: { - attract: ["1L1"], - bide: ["1L1"], - bind: ["1L1"], - block: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - bulkup: ["1L1"], - bulldoze: ["1L1"], - circlethrow: ["1L1"], - coaching: ["1L1"], - confide: ["1L1"], - dig: ["1L1"], - doubleteam: ["1L1"], - earthquake: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - firepunch: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - focusenergy: ["1L1"], - focuspunch: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - icepunch: ["1L1"], - knockoff: ["1L1"], - laserfocus: ["1L1"], - leer: ["1L1"], - lowkick: ["1L1"], - lowsweep: ["1L1"], - matblock: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - painsplit: ["1L1"], - payback: ["1L1"], - poisonjab: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - revenge: ["1L1"], - reversal: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - scaryface: ["1L1"], - secretpower: ["1L1"], - seismictoss: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - stompingtantrum: ["1L1"], - stoneedge: ["1L1"], - stormthrow: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - superpower: ["1L1"], - swagger: ["1L1"], - taunt: ["1L1"], - thunderpunch: ["1L1"], - toxic: ["1L1"], - vitalthrow: ["1L1"], - wideguard: ["1L1"], - workup: ["1L1"], - zenheadbutt: ["1L1"], - }, - }, - sawk: { - learnset: { - attract: ["1L1"], - bide: ["1L1"], - block: ["1L1"], - brickbreak: ["1L1"], - bulkup: ["1L1"], - bulldoze: ["1L1"], - closecombat: ["1L1"], - coaching: ["1L1"], - confide: ["1L1"], - counter: ["1L1"], - dig: ["1L1"], - doublekick: ["1L1"], - doubleteam: ["1L1"], - dualchop: ["1L1"], - earthquake: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - firepunch: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - focusenergy: ["1L1"], - focuspunch: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - icepunch: ["1L1"], - karatechop: ["1L1"], - knockoff: ["1L1"], - laserfocus: ["1L1"], - leer: ["1L1"], - lowkick: ["1L1"], - lowsweep: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - painsplit: ["1L1"], - payback: ["1L1"], - poisonjab: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - quickguard: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - revenge: ["1L1"], - reversal: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - scaryface: ["1L1"], - secretpower: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - stoneedge: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - superpower: ["1L1"], - swagger: ["1L1"], - taunt: ["1L1"], - throatchop: ["1L1"], - thunderpunch: ["1L1"], - toxic: ["1L1"], - workup: ["1L1"], - zenheadbutt: ["1L1"], - }, - }, - sewaddle: { - learnset: { - agility: ["1L1"], - airslash: ["1L1"], - attract: ["1L1"], - batonpass: ["1L1"], - bugbite: ["1L1"], - bugbuzz: ["1L1"], - calmmind: ["1L1"], - camouflage: ["1L1"], - charm: ["1L1"], - confide: ["1L1"], - cut: ["1L1"], - doubleteam: ["1L1"], - dreameater: ["1L1"], - electroweb: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - flail: ["1L1"], - flash: ["1L1"], - frustration: ["1L1"], - gigadrain: ["1L1"], - grassknot: ["1L1"], - grassyglide: ["1L1"], - grassyterrain: ["1L1"], - hiddenpower: ["1L1"], - irondefense: ["1L1"], - lightscreen: ["1L1"], - lunge: ["1L1"], - magicalleaf: ["1L1"], - magiccoat: ["1L1"], - mefirst: ["1L1"], - mindreader: ["1L1"], - naturepower: ["1L1"], - payback: ["1L1"], - pounce: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - razorleaf: ["1L1"], - razorwind: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - seedbomb: ["1L1"], - signalbeam: ["1L1"], - silverwind: ["1L1"], - skittersmack: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - stickyweb: ["1L1"], - stringshot: ["1L1"], - strugglebug: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - switcheroo: ["1L1"], - synthesis: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - worryseed: ["1L1"], - }, - }, - swadloon: { - learnset: { - attract: ["1L1"], - batonpass: ["1L1"], - bugbite: ["1L1"], - bugbuzz: ["1L1"], - calmmind: ["1L1"], - charm: ["1L1"], - confide: ["1L1"], - cut: ["1L1"], - doubleteam: ["1L1"], - dreameater: ["1L1"], - electroweb: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - flail: ["1L1"], - flash: ["1L1"], - frustration: ["1L1"], - gigadrain: ["1L1"], - grassknot: ["1L1"], - grasswhistle: ["1L1"], - grassyglide: ["1L1"], - grassyterrain: ["1L1"], - hiddenpower: ["1L1"], - irondefense: ["1L1"], - lightscreen: ["1L1"], - lunge: ["1L1"], - magicalleaf: ["1L1"], - magiccoat: ["1L1"], - naturepower: ["1L1"], - payback: ["1L1"], - pounce: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - razorleaf: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - secretpower: ["1L1"], - seedbomb: ["1L1"], - signalbeam: ["1L1"], - skittersmack: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - stickyweb: ["1L1"], - stringshot: ["1L1"], - strugglebug: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - synthesis: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - worryseed: ["1L1"], - }, - encounters: [ - {generation: 5, level: 19}, - ], - }, - leavanny: { - learnset: { - aerialace: ["1L1"], - agility: ["1L1"], - airslash: ["1L1"], - attract: ["1L1"], - batonpass: ["1L1"], - bugbite: ["1L1"], - bugbuzz: ["1L1"], - bulletseed: ["1L1"], - calmmind: ["1L1"], - charm: ["1L1"], - confide: ["1L1"], - cut: ["1L1"], - doubleteam: ["1L1"], - dreameater: ["1L1"], - electroweb: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - entrainment: ["1L1"], - facade: ["1L1"], - falseswipe: ["1L1"], - fellstinger: ["1L1"], - flash: ["1L1"], - frustration: ["1L1"], - gigadrain: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - grassyglide: ["1L1"], - grassyterrain: ["1L1"], - healbell: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - honeclaws: ["1L1"], - hyperbeam: ["1L1"], - irondefense: ["1L1"], - knockoff: ["1L1"], - laserfocus: ["1L1"], - leafblade: ["1L1"], - leafstorm: ["1L1"], - lightscreen: ["1L1"], - lowkick: ["1L1"], - lunge: ["1L1"], - magicalleaf: ["1L1"], - magiccoat: ["1L1"], - naturepower: ["1L1"], - payback: ["1L1"], - poisonjab: ["1L1"], - pollenpuff: ["1L1"], - pounce: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - razorleaf: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - secretpower: ["1L1"], - seedbomb: ["1L1"], - shadowclaw: ["1L1"], - signalbeam: ["1L1"], - skittersmack: ["1L1"], - slash: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - steelwing: ["1L1"], - stringshot: ["1L1"], - strugglebug: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swordsdance: ["1L1"], - synthesis: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - throatchop: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - tripleaxel: ["1L1"], - worryseed: ["1L1"], - xscissor: ["1L1"], - }, - encounters: [ - {generation: 5, level: 20, isHidden: true}, - ], - }, - venipede: { - learnset: { - agility: ["1L1"], - attract: ["1L1"], - bite: ["1L1"], - bugbite: ["1L1"], - confide: ["1L1"], - defensecurl: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - frustration: ["1L1"], - furycutter: ["1L1"], - gyroball: ["1L1"], - hex: ["1L1"], - hiddenpower: ["1L1"], - infestation: ["1L1"], - irondefense: ["1L1"], - payback: ["1L1"], - pinmissile: ["1L1"], - poisonjab: ["1L1"], - poisonsting: ["1L1"], - poisontail: ["1L1"], - protect: ["1L1"], - pursuit: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rockclimb: ["1L1"], - rocksmash: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - signalbeam: ["1L1"], - skittersmack: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - spikes: ["1L1"], - steamroller: ["1L1"], - steelroller: ["1L1"], - strugglebug: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - takedown: ["1L1"], - toxic: ["1L1"], - toxicspikes: ["1L1"], - twineedle: ["1L1"], - venomdrench: ["1L1"], - venoshock: ["1L1"], - }, - }, - whirlipede: { - learnset: { - agility: ["1L1"], - attract: ["1L1"], - bugbite: ["1L1"], - confide: ["1L1"], - defensecurl: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - frustration: ["1L1"], - gyroball: ["1L1"], - hex: ["1L1"], - hiddenpower: ["1L1"], - infestation: ["1L1"], - irondefense: ["1L1"], - payback: ["1L1"], - pinmissile: ["1L1"], - poisonjab: ["1L1"], - poisonsting: ["1L1"], - poisontail: ["1L1"], - protect: ["1L1"], - pursuit: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rockclimb: ["1L1"], - rocksmash: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - signalbeam: ["1L1"], - skittersmack: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - spikes: ["1L1"], - steamroller: ["1L1"], - steelroller: ["1L1"], - strugglebug: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - takedown: ["1L1"], - toxic: ["1L1"], - toxicspikes: ["1L1"], - venomdrench: ["1L1"], - venoshock: ["1L1"], - }, - }, - scolipede: { - learnset: { - agility: ["1L1"], - aquatail: ["1L1"], - assurance: ["1L1"], - attract: ["1L1"], - batonpass: ["1L1"], - bugbite: ["1L1"], - bulldoze: ["1L1"], - confide: ["1L1"], - crosspoison: ["1L1"], - cut: ["1L1"], - defensecurl: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - earthquake: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - gyroball: ["1L1"], - hex: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - infestation: ["1L1"], - irondefense: ["1L1"], - irontail: ["1L1"], - megahorn: ["1L1"], - payback: ["1L1"], - pinmissile: ["1L1"], - poisonjab: ["1L1"], - poisonsting: ["1L1"], - poisontail: ["1L1"], - protect: ["1L1"], - pursuit: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rockclimb: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - signalbeam: ["1L1"], - skittersmack: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - smartstrike: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - spikes: ["1L1"], - steamroller: ["1L1"], - steelroller: ["1L1"], - stompingtantrum: ["1L1"], - strength: ["1L1"], - strugglebug: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - superpower: ["1L1"], - swagger: ["1L1"], - swordsdance: ["1L1"], - takedown: ["1L1"], - throatchop: ["1L1"], - toxic: ["1L1"], - toxicspikes: ["1L1"], - venomdrench: ["1L1"], - venoshock: ["1L1"], - xscissor: ["1L1"], - }, - }, - cottonee: { - learnset: { - absorb: ["1L1"], - attract: ["1L1"], - beatup: ["1L1"], - captivate: ["1L1"], - charm: ["1L1"], - confide: ["1L1"], - cottonguard: ["1L1"], - cottonspore: ["1L1"], - covet: ["1L1"], - dazzlinggleam: ["1L1"], - defog: ["1L1"], - doubleteam: ["1L1"], - dreameater: ["1L1"], - encore: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - fairywind: ["1L1"], - faketears: ["1L1"], - flash: ["1L1"], - frustration: ["1L1"], - gigadrain: ["1L1"], - grassknot: ["1L1"], - grasswhistle: ["1L1"], - grassyglide: ["1L1"], - grassyterrain: ["1L1"], - growth: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - knockoff: ["1L1"], - leechseed: ["1L1"], - megadrain: ["1L1"], - memento: ["1L1"], - mistyterrain: ["1L1"], - naturalgift: ["1L1"], - naturepower: ["1L1"], - poisonpowder: ["1L1"], - protect: ["1L1"], - razorleaf: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - secretpower: ["1L1"], - seedbomb: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - stunspore: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - switcheroo: ["1L1"], - tailwind: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - tickle: ["1L1"], - toxic: ["1L1"], - worryseed: ["1L1"], - }, - }, - whimsicott: { - learnset: { - absorb: ["1L1"], - attract: ["1L1"], - beatup: ["1L1"], - charm: ["1L1"], - confide: ["1L1"], - cottonguard: ["1L1"], - cottonspore: ["1L1"], - covet: ["1L1"], - dazzlinggleam: ["1L1"], - defog: ["1L1"], - doubleteam: ["1L1"], - dreameater: ["1L1"], - encore: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - fairywind: ["1L1"], - faketears: ["1L1"], - flash: ["1L1"], - fling: ["1L1"], - frustration: ["1L1"], - gigadrain: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - grassyglide: ["1L1"], - grassyterrain: ["1L1"], - growth: ["1L1"], - gust: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hurricane: ["1L1"], - hyperbeam: ["1L1"], - knockoff: ["1L1"], - leechseed: ["1L1"], - lightscreen: ["1L1"], - megadrain: ["1L1"], - memento: ["1L1"], - mistyterrain: ["1L1"], - moonblast: ["1L1"], - naturepower: ["1L1"], - playrough: ["1L1"], - poisonpowder: ["1L1"], - protect: ["1L1"], - psychic: ["1L1"], - razorleaf: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - secretpower: ["1L1"], - seedbomb: ["1L1"], - shadowball: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - stunspore: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - tailwind: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - toxic: ["1L1"], - trickroom: ["1L1"], - uturn: ["1L1"], - worryseed: ["1L1"], - }, - eventData: [ - {generation: 5, level: 50, gender: "F", nature: "Timid", ivs: {spe: 31}, abilities: ["1L1"], moves: ["1L1"], pokeball: "cherishball"}, - ], - }, - petilil: { - learnset: { - absorb: ["1L1"], - afteryou: ["1L1"], - aromatherapy: ["1L1"], - attract: ["1L1"], - bide: ["1L1"], - bulletseed: ["1L1"], - charm: ["1L1"], - confide: ["1L1"], - covet: ["1L1"], - cut: ["1L1"], - doubleteam: ["1L1"], - dreameater: ["1L1"], - encore: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - entrainment: ["1L1"], - facade: ["1L1"], - flash: ["1L1"], - frustration: ["1L1"], - gigadrain: ["1L1"], - grassknot: ["1L1"], - grasswhistle: ["1L1"], - grassyglide: ["1L1"], - growth: ["1L1"], - healbell: ["1L1"], - healingwish: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - ingrain: ["1L1"], - laserfocus: ["1L1"], - leafstorm: ["1L1"], - leechseed: ["1L1"], - magicalleaf: ["1L1"], - megadrain: ["1L1"], - naturalgift: ["1L1"], - naturepower: ["1L1"], - pollenpuff: ["1L1"], - protect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - secretpower: ["1L1"], - seedbomb: ["1L1"], - sleeppowder: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - stunspore: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - sweetscent: ["1L1"], - synthesis: ["1L1"], - terablast: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - worryseed: ["1L1"], - }, - }, - lilligant: { - learnset: { - absorb: ["1L1"], - afteryou: ["1L1"], - alluringvoice: ["1L1"], - aromatherapy: ["1L1"], - attract: ["1L1"], - bulletseed: ["1L1"], - charm: ["1L1"], - confide: ["1L1"], - covet: ["1L1"], - cut: ["1L1"], - doubleteam: ["1L1"], - dreameater: ["1L1"], - encore: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - entrainment: ["1L1"], - facade: ["1L1"], - flash: ["1L1"], - frustration: ["1L1"], - gigadrain: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - grassyglide: ["1L1"], - grassyterrain: ["1L1"], - growth: ["1L1"], - healbell: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - laserfocus: ["1L1"], - leafblade: ["1L1"], - leafstorm: ["1L1"], - leechseed: ["1L1"], - lightscreen: ["1L1"], - magicalleaf: ["1L1"], - megadrain: ["1L1"], - naturepower: ["1L1"], - petalblizzard: ["1L1"], - petaldance: ["1L1"], - pollenpuff: ["1L1"], - protect: ["1L1"], - psychup: ["1L1"], - quiverdance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roleplay: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - secretpower: ["1L1"], - seedbomb: ["1L1"], - sleeppowder: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - solarblade: ["1L1"], - stunspore: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swordsdance: ["1L1"], - synthesis: ["1L1"], - teeterdance: ["1L1"], - terablast: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - weatherball: ["1L1"], - worryseed: ["1L1"], - }, - }, - lilliganthisui: { - learnset: { - absorb: ["1L1"], - acrobatics: ["1L1"], - aerialace: ["1L1"], - afteryou: ["1L1"], - airslash: ["1L1"], - axekick: ["1L1"], - brickbreak: ["1L1"], - bulletseed: ["1L1"], - charm: ["1L1"], - closecombat: ["1L1"], - coaching: ["1L1"], - defog: ["1L1"], - encore: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - entrainment: ["1L1"], - facade: ["1L1"], - gigadrain: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - grassyglide: ["1L1"], - grassyterrain: ["1L1"], - growth: ["1L1"], - helpinghand: ["1L1"], - hurricane: ["1L1"], - hyperbeam: ["1L1"], - icespinner: ["1L1"], - leafblade: ["1L1"], - leafstorm: ["1L1"], - leechseed: ["1L1"], - lowkick: ["1L1"], - lowsweep: ["1L1"], - magicalleaf: ["1L1"], - megadrain: ["1L1"], - megakick: ["1L1"], - metronome: ["1L1"], - petalblizzard: ["1L1"], - poisonjab: ["1L1"], - pollenpuff: ["1L1"], - protect: ["1L1"], - psychup: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - seedbomb: ["1L1"], - sleeppowder: ["1L1"], - sleeptalk: ["1L1"], - solarbeam: ["1L1"], - solarblade: ["1L1"], - stunspore: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swordsdance: ["1L1"], - synthesis: ["1L1"], - takedown: ["1L1"], - teeterdance: ["1L1"], - terablast: ["1L1"], - trailblaze: ["1L1"], - tripleaxel: ["1L1"], - upperhand: ["1L1"], - vacuumwave: ["1L1"], - victorydance: ["1L1"], - weatherball: ["1L1"], - }, - }, - basculin: { - learnset: { - agility: ["1L1"], - aquajet: ["1L1"], - aquatail: ["1L1"], - assurance: ["1L1"], - attract: ["1L1"], - bite: ["1L1"], - blizzard: ["1L1"], - bounce: ["1L1"], - brine: ["1L1"], - bubblebeam: ["1L1"], - chillingwater: ["1L1"], - chipaway: ["1L1"], - confide: ["1L1"], - crunch: ["1L1"], - cut: ["1L1"], - dive: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - finalgambit: ["1L1"], - flail: ["1L1"], - flipturn: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - hail: ["1L1"], - headbutt: ["1L1"], - headsmash: ["1L1"], - hiddenpower: ["1L1"], - hydropump: ["1L1"], - hyperbeam: ["1L1"], - icebeam: ["1L1"], - icefang: ["1L1"], - icywind: ["1L1"], - liquidation: ["1L1"], - muddywater: ["1L1"], - mudshot: ["1L1"], - protect: ["1L1"], - psychicfangs: ["1L1"], - rage: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - revenge: ["1L1"], - reversal: ["1L1"], - round: ["1L1"], - scald: ["1L1"], - scaleshot: ["1L1"], - scaryface: ["1L1"], - secretpower: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - snowscape: ["1L1"], - soak: ["1L1"], - substitute: ["1L1"], - superpower: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - tackle: ["1L1"], - tailwhip: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thrash: ["1L1"], - toxic: ["1L1"], - uproar: ["1L1"], - waterfall: ["1L1"], - watergun: ["1L1"], - waterpulse: ["1L1"], - wavecrash: ["1L1"], - whirlpool: ["1L1"], - zenheadbutt: ["1L1"], - }, - }, - basculinwhitestriped: { - learnset: { - agility: ["1L1"], - aquajet: ["1L1"], - bite: ["1L1"], - blizzard: ["1L1"], - chillingwater: ["1L1"], - crunch: ["1L1"], - doubleedge: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - flail: ["1L1"], - flipturn: ["1L1"], - headbutt: ["1L1"], - headsmash: ["1L1"], - hydropump: ["1L1"], - icebeam: ["1L1"], - icefang: ["1L1"], - icywind: ["1L1"], - lastrespects: ["1L1"], - liquidation: ["1L1"], - muddywater: ["1L1"], - mudshot: ["1L1"], - protect: ["1L1"], - psychicfangs: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - scaleshot: ["1L1"], - scaryface: ["1L1"], - sleeptalk: ["1L1"], - snowscape: ["1L1"], - soak: ["1L1"], - substitute: ["1L1"], - surf: ["1L1"], - swift: ["1L1"], - tackle: ["1L1"], - tailwhip: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thrash: ["1L1"], - uproar: ["1L1"], - waterfall: ["1L1"], - watergun: ["1L1"], - waterpulse: ["1L1"], - wavecrash: ["1L1"], - whirlpool: ["1L1"], - zenheadbutt: ["1L1"], - }, - }, - basculegion: { - learnset: { - agility: ["1L1"], - aquajet: ["1L1"], - bite: ["1L1"], - blizzard: ["1L1"], - chillingwater: ["1L1"], - confuseray: ["1L1"], - crunch: ["1L1"], - doubleedge: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - flail: ["1L1"], - flipturn: ["1L1"], - gigaimpact: ["1L1"], - headbutt: ["1L1"], - headsmash: ["1L1"], - hex: ["1L1"], - hydropump: ["1L1"], - hyperbeam: ["1L1"], - icebeam: ["1L1"], - icefang: ["1L1"], - icywind: ["1L1"], - lastrespects: ["1L1"], - liquidation: ["1L1"], - muddywater: ["1L1"], - mudshot: ["1L1"], - nightshade: ["1L1"], - outrage: ["1L1"], - painsplit: ["1L1"], - phantomforce: ["1L1"], - protect: ["1L1"], - psychicfangs: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - scaleshot: ["1L1"], - scaryface: ["1L1"], - shadowball: ["1L1"], - sleeptalk: ["1L1"], - snowscape: ["1L1"], - soak: ["1L1"], - spite: ["1L1"], - substitute: ["1L1"], - surf: ["1L1"], - swift: ["1L1"], - tackle: ["1L1"], - tailwhip: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thrash: ["1L1"], - uproar: ["1L1"], - waterfall: ["1L1"], - watergun: ["1L1"], - waterpulse: ["1L1"], - wavecrash: ["1L1"], - whirlpool: ["1L1"], - zenheadbutt: ["1L1"], - }, - }, - basculegionf: { - learnset: { - agility: ["1L1"], - aquajet: ["1L1"], - bite: ["1L1"], - blizzard: ["1L1"], - chillingwater: ["1L1"], - confuseray: ["1L1"], - crunch: ["1L1"], - doubleedge: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - flail: ["1L1"], - flipturn: ["1L1"], - gigaimpact: ["1L1"], - headbutt: ["1L1"], - headsmash: ["1L1"], - hex: ["1L1"], - hydropump: ["1L1"], - hyperbeam: ["1L1"], - icebeam: ["1L1"], - icefang: ["1L1"], - icywind: ["1L1"], - lastrespects: ["1L1"], - liquidation: ["1L1"], - muddywater: ["1L1"], - mudshot: ["1L1"], - nightshade: ["1L1"], - outrage: ["1L1"], - painsplit: ["1L1"], - phantomforce: ["1L1"], - protect: ["1L1"], - psychicfangs: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - scaleshot: ["1L1"], - scaryface: ["1L1"], - shadowball: ["1L1"], - sleeptalk: ["1L1"], - snowscape: ["1L1"], - soak: ["1L1"], - spite: ["1L1"], - substitute: ["1L1"], - surf: ["1L1"], - swift: ["1L1"], - tackle: ["1L1"], - tailwhip: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thrash: ["1L1"], - uproar: ["1L1"], - waterfall: ["1L1"], - watergun: ["1L1"], - waterpulse: ["1L1"], - wavecrash: ["1L1"], - whirlpool: ["1L1"], - zenheadbutt: ["1L1"], - }, - }, - sandile: { - learnset: { - aquatail: ["1L1"], - assurance: ["1L1"], - attract: ["1L1"], - beatup: ["1L1"], - bite: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - bulldoze: ["1L1"], - confide: ["1L1"], - counter: ["1L1"], - crunch: ["1L1"], - curse: ["1L1"], - cut: ["1L1"], - darkpulse: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - embargo: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - firefang: ["1L1"], - fling: ["1L1"], - focusenergy: ["1L1"], - foulplay: ["1L1"], - frustration: ["1L1"], - grassknot: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - honeclaws: ["1L1"], - incinerate: ["1L1"], - irontail: ["1L1"], - lashout: ["1L1"], - leer: ["1L1"], - meanlook: ["1L1"], - mefirst: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - payback: ["1L1"], - powertrip: ["1L1"], - protect: ["1L1"], - pursuit: ["1L1"], - rage: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - roar: ["1L1"], - rockclimb: ["1L1"], - rockslide: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - sandattack: ["1L1"], - sandstorm: ["1L1"], - sandtomb: ["1L1"], - scaryface: ["1L1"], - scorchingsands: ["1L1"], - secretpower: ["1L1"], - shadowclaw: ["1L1"], - skittersmack: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - snarl: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - spite: ["1L1"], - stealthrock: ["1L1"], - stompingtantrum: ["1L1"], - stoneedge: ["1L1"], - substitute: ["1L1"], - swagger: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thrash: ["1L1"], - thunderfang: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - uproar: ["1L1"], - }, - }, - krokorok: { - learnset: { - aerialace: ["1L1"], - aquatail: ["1L1"], - assurance: ["1L1"], - attract: ["1L1"], - beatup: ["1L1"], - bite: ["1L1"], - bodyslam: ["1L1"], - breakingswipe: ["1L1"], - brickbreak: ["1L1"], - brutalswing: ["1L1"], - bulldoze: ["1L1"], - confide: ["1L1"], - crunch: ["1L1"], - curse: ["1L1"], - cut: ["1L1"], - darkpulse: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dragonclaw: ["1L1"], - dragontail: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - embargo: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - firefang: ["1L1"], - fling: ["1L1"], - focusenergy: ["1L1"], - focuspunch: ["1L1"], - foulplay: ["1L1"], - frustration: ["1L1"], - grassknot: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - honeclaws: ["1L1"], - incinerate: ["1L1"], - irontail: ["1L1"], - knockoff: ["1L1"], - lashout: ["1L1"], - leer: ["1L1"], - lowkick: ["1L1"], - lowsweep: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - payback: ["1L1"], - powertrip: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - rage: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - revenge: ["1L1"], - roar: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - sandattack: ["1L1"], - sandstorm: ["1L1"], - sandtomb: ["1L1"], - scaleshot: ["1L1"], - scaryface: ["1L1"], - scorchingsands: ["1L1"], - secretpower: ["1L1"], - shadowclaw: ["1L1"], - skittersmack: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - snarl: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - spite: ["1L1"], - stealthrock: ["1L1"], - stompingtantrum: ["1L1"], - stoneedge: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - swagger: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thrash: ["1L1"], - thunderfang: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - uproar: ["1L1"], - }, - }, - krookodile: { - learnset: { - aerialace: ["1L1"], - aquatail: ["1L1"], - assurance: ["1L1"], - attract: ["1L1"], - beatup: ["1L1"], - bite: ["1L1"], - block: ["1L1"], - bodyslam: ["1L1"], - breakingswipe: ["1L1"], - brickbreak: ["1L1"], - brutalswing: ["1L1"], - bulkup: ["1L1"], - bulldoze: ["1L1"], - closecombat: ["1L1"], - confide: ["1L1"], - counter: ["1L1"], - crunch: ["1L1"], - curse: ["1L1"], - cut: ["1L1"], - darkestlariat: ["1L1"], - darkpulse: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dragonclaw: ["1L1"], - dragonpulse: ["1L1"], - dragontail: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - embargo: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - firefang: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - focusenergy: ["1L1"], - focuspunch: ["1L1"], - foulplay: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - gunkshot: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - highhorsepower: ["1L1"], - honeclaws: ["1L1"], - hyperbeam: ["1L1"], - incinerate: ["1L1"], - irontail: ["1L1"], - knockoff: ["1L1"], - lashout: ["1L1"], - leer: ["1L1"], - lowkick: ["1L1"], - lowsweep: ["1L1"], - meanlook: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - outrage: ["1L1"], - payback: ["1L1"], - powertrip: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - rage: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - revenge: ["1L1"], - roar: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - sandattack: ["1L1"], - sandstorm: ["1L1"], - sandtomb: ["1L1"], - scaleshot: ["1L1"], - scaryface: ["1L1"], - scorchingsands: ["1L1"], - secretpower: ["1L1"], - shadowclaw: ["1L1"], - skittersmack: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - smackdown: ["1L1"], - snarl: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - spite: ["1L1"], - stealthrock: ["1L1"], - stompingtantrum: ["1L1"], - stoneedge: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - superpower: ["1L1"], - swagger: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thrash: ["1L1"], - throatchop: ["1L1"], - thunderfang: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - uproar: ["1L1"], - }, - }, - darumaka: { - learnset: { - attract: ["1L1"], - bellydrum: ["1L1"], - bite: ["1L1"], - brickbreak: ["1L1"], - confide: ["1L1"], - dig: ["1L1"], - doubleteam: ["1L1"], - ember: ["1L1"], - encore: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - extrasensory: ["1L1"], - facade: ["1L1"], - fireblast: ["1L1"], - firefang: ["1L1"], - firepunch: ["1L1"], - firespin: ["1L1"], - flamecharge: ["1L1"], - flamethrower: ["1L1"], - flamewheel: ["1L1"], - flareblitz: ["1L1"], - fling: ["1L1"], - focusenergy: ["1L1"], - focuspunch: ["1L1"], - frustration: ["1L1"], - grassknot: ["1L1"], - gyroball: ["1L1"], - hammerarm: ["1L1"], - headbutt: ["1L1"], - heatwave: ["1L1"], - hiddenpower: ["1L1"], - incinerate: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - overheat: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - rage: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roar: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - secretpower: ["1L1"], - sleeptalk: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - superpower: ["1L1"], - swagger: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - thief: ["1L1"], - thrash: ["1L1"], - toxic: ["1L1"], - uproar: ["1L1"], - uturn: ["1L1"], - willowisp: ["1L1"], - workup: ["1L1"], - yawn: ["1L1"], - zenheadbutt: ["1L1"], - }, - }, - darumakagalar: { - learnset: { - attract: ["1L1"], - avalanche: ["1L1"], - bellydrum: ["1L1"], - bite: ["1L1"], - blizzard: ["1L1"], - brickbreak: ["1L1"], - dig: ["1L1"], - encore: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fireblast: ["1L1"], - firefang: ["1L1"], - firepunch: ["1L1"], - firespin: ["1L1"], - flamethrower: ["1L1"], - flamewheel: ["1L1"], - flareblitz: ["1L1"], - fling: ["1L1"], - focusenergy: ["1L1"], - focuspunch: ["1L1"], - freezedry: ["1L1"], - grassknot: ["1L1"], - gyroball: ["1L1"], - hammerarm: ["1L1"], - headbutt: ["1L1"], - heatwave: ["1L1"], - icebeam: ["1L1"], - icefang: ["1L1"], - icepunch: ["1L1"], - incinerate: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - overheat: ["1L1"], - powdersnow: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - rest: ["1L1"], - rockslide: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - superpower: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - thief: ["1L1"], - thrash: ["1L1"], - uproar: ["1L1"], - uturn: ["1L1"], - willowisp: ["1L1"], - workup: ["1L1"], - yawn: ["1L1"], - zenheadbutt: ["1L1"], - }, - }, - darmanitan: { - learnset: { - attract: ["1L1"], - bellydrum: ["1L1"], - bite: ["1L1"], - bodypress: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - bulkup: ["1L1"], - bulldoze: ["1L1"], - burningjealousy: ["1L1"], - confide: ["1L1"], - dig: ["1L1"], - doubleteam: ["1L1"], - earthquake: ["1L1"], - ember: ["1L1"], - encore: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - expandingforce: ["1L1"], - facade: ["1L1"], - fireblast: ["1L1"], - firefang: ["1L1"], - firepunch: ["1L1"], - firespin: ["1L1"], - flamecharge: ["1L1"], - flamethrower: ["1L1"], - flareblitz: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - focusenergy: ["1L1"], - focuspunch: ["1L1"], - frustration: ["1L1"], - futuresight: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - guardswap: ["1L1"], - gyroball: ["1L1"], - hammerarm: ["1L1"], - headbutt: ["1L1"], - heatwave: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - incinerate: ["1L1"], - irondefense: ["1L1"], - ironhead: ["1L1"], - laserfocus: ["1L1"], - lashout: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - mysticalfire: ["1L1"], - overheat: ["1L1"], - payback: ["1L1"], - powerswap: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - psychic: ["1L1"], - rage: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - reversal: ["1L1"], - roar: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - secretpower: ["1L1"], - sleeptalk: ["1L1"], - smackdown: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - stoneedge: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - superpower: ["1L1"], - swagger: ["1L1"], - tackle: ["1L1"], - taunt: ["1L1"], - thief: ["1L1"], - thrash: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - trick: ["1L1"], - uproar: ["1L1"], - uturn: ["1L1"], - willowisp: ["1L1"], - workup: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 5, level: 35, isHidden: true, moves: ["1L1"]}, - {generation: 6, level: 35, gender: "M", nature: "Calm", ivs: {hp: 30, atk: 30, def: 30, spa: 30, spd: 30, spe: 30}, isHidden: true, moves: ["1L1"], pokeball: "cherishball"}, - ], - encounters: [ - {generation: 6, level: 32, maxEggMoves: 1}, - ], - }, - darmanitangalar: { - learnset: { - attract: ["1L1"], - avalanche: ["1L1"], - bellydrum: ["1L1"], - bite: ["1L1"], - blizzard: ["1L1"], - bodypress: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - bulkup: ["1L1"], - bulldoze: ["1L1"], - burningjealousy: ["1L1"], - dig: ["1L1"], - earthquake: ["1L1"], - encore: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fireblast: ["1L1"], - firefang: ["1L1"], - firepunch: ["1L1"], - firespin: ["1L1"], - flamethrower: ["1L1"], - flareblitz: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - focusenergy: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - gyroball: ["1L1"], - headbutt: ["1L1"], - heatwave: ["1L1"], - hyperbeam: ["1L1"], - icebeam: ["1L1"], - icefang: ["1L1"], - icepunch: ["1L1"], - iciclecrash: ["1L1"], - irondefense: ["1L1"], - ironhead: ["1L1"], - lashout: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - overheat: ["1L1"], - payback: ["1L1"], - powdersnow: ["1L1"], - protect: ["1L1"], - psychic: ["1L1"], - rest: ["1L1"], - reversal: ["1L1"], - rockslide: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - stoneedge: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - superpower: ["1L1"], - tackle: ["1L1"], - taunt: ["1L1"], - thief: ["1L1"], - thrash: ["1L1"], - uproar: ["1L1"], - uturn: ["1L1"], - willowisp: ["1L1"], - workup: ["1L1"], - zenheadbutt: ["1L1"], - }, - }, - maractus: { - learnset: { - absorb: ["1L1"], - acupressure: ["1L1"], - aerialace: ["1L1"], - afteryou: ["1L1"], - assurance: ["1L1"], - attract: ["1L1"], - bounce: ["1L1"], - bulletseed: ["1L1"], - confide: ["1L1"], - cottonguard: ["1L1"], - cottonspore: ["1L1"], - doubleteam: ["1L1"], - drainpunch: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - frustration: ["1L1"], - gigadrain: ["1L1"], - grassknot: ["1L1"], - grasswhistle: ["1L1"], - grassyglide: ["1L1"], - grassyterrain: ["1L1"], - growth: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hypervoice: ["1L1"], - ingrain: ["1L1"], - knockoff: ["1L1"], - leafstorm: ["1L1"], - leechseed: ["1L1"], - megadrain: ["1L1"], - naturepower: ["1L1"], - needlearm: ["1L1"], - peck: ["1L1"], - petalblizzard: ["1L1"], - petaldance: ["1L1"], - pinmissile: ["1L1"], - poisonjab: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - seedbomb: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - spikes: ["1L1"], - spikyshield: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - sweetscent: ["1L1"], - synthesis: ["1L1"], - throatchop: ["1L1"], - toxic: ["1L1"], - uproar: ["1L1"], - weatherball: ["1L1"], - woodhammer: ["1L1"], - worryseed: ["1L1"], - }, - }, - dwebble: { - learnset: { - aerialace: ["1L1"], - attract: ["1L1"], - block: ["1L1"], - bugbite: ["1L1"], - bulldoze: ["1L1"], - confide: ["1L1"], - counter: ["1L1"], - curse: ["1L1"], - cut: ["1L1"], - dig: ["1L1"], - doubleteam: ["1L1"], - earthquake: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - feintattack: ["1L1"], - flail: ["1L1"], - frustration: ["1L1"], - furycutter: ["1L1"], - hiddenpower: ["1L1"], - honeclaws: ["1L1"], - irondefense: ["1L1"], - knockoff: ["1L1"], - naturepower: ["1L1"], - nightslash: ["1L1"], - poisonjab: ["1L1"], - protect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rockblast: ["1L1"], - rockpolish: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - rockwrecker: ["1L1"], - rototiller: ["1L1"], - round: ["1L1"], - sandattack: ["1L1"], - sandstorm: ["1L1"], - sandtomb: ["1L1"], - secretpower: ["1L1"], - shadowclaw: ["1L1"], - shellsmash: ["1L1"], - skittersmack: ["1L1"], - slash: ["1L1"], - sleeptalk: ["1L1"], - smackdown: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - spikes: ["1L1"], - stealthrock: ["1L1"], - stoneedge: ["1L1"], - strength: ["1L1"], - strugglebug: ["1L1"], - substitute: ["1L1"], - swagger: ["1L1"], - swordsdance: ["1L1"], - toxic: ["1L1"], - wideguard: ["1L1"], - withdraw: ["1L1"], - xscissor: ["1L1"], - }, - }, - crustle: { - learnset: { - aerialace: ["1L1"], - attract: ["1L1"], - block: ["1L1"], - bodypress: ["1L1"], - bugbite: ["1L1"], - bulldoze: ["1L1"], - confide: ["1L1"], - counter: ["1L1"], - cut: ["1L1"], - dig: ["1L1"], - doubleteam: ["1L1"], - earthquake: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - feintattack: ["1L1"], - flail: ["1L1"], - frustration: ["1L1"], - furycutter: ["1L1"], - gigaimpact: ["1L1"], - heavyslam: ["1L1"], - hiddenpower: ["1L1"], - honeclaws: ["1L1"], - hyperbeam: ["1L1"], - irondefense: ["1L1"], - knockoff: ["1L1"], - meteorbeam: ["1L1"], - naturepower: ["1L1"], - nightslash: ["1L1"], - poisonjab: ["1L1"], - protect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rockblast: ["1L1"], - rockpolish: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - rockwrecker: ["1L1"], - round: ["1L1"], - sandattack: ["1L1"], - sandstorm: ["1L1"], - sandtomb: ["1L1"], - secretpower: ["1L1"], - shadowclaw: ["1L1"], - shellsmash: ["1L1"], - skittersmack: ["1L1"], - slash: ["1L1"], - sleeptalk: ["1L1"], - smackdown: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - solarblade: ["1L1"], - spikes: ["1L1"], - stealthrock: ["1L1"], - stompingtantrum: ["1L1"], - stoneedge: ["1L1"], - strength: ["1L1"], - strugglebug: ["1L1"], - substitute: ["1L1"], - swagger: ["1L1"], - swordsdance: ["1L1"], - toxic: ["1L1"], - withdraw: ["1L1"], - xscissor: ["1L1"], - }, - encounters: [ - {generation: 6, level: 33, maxEggMoves: 1}, - ], - }, - scraggy: { - learnset: { - acidspray: ["1L1"], - amnesia: ["1L1"], - assurance: ["1L1"], - attract: ["1L1"], - beatup: ["1L1"], - brickbreak: ["1L1"], - bulkup: ["1L1"], - chipaway: ["1L1"], - closecombat: ["1L1"], - coaching: ["1L1"], - confide: ["1L1"], - counter: ["1L1"], - crunch: ["1L1"], - curse: ["1L1"], - darkpulse: ["1L1"], - detect: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dragonclaw: ["1L1"], - dragondance: ["1L1"], - dragonpulse: ["1L1"], - dragontail: ["1L1"], - drainpunch: ["1L1"], - dualchop: ["1L1"], - encore: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fakeout: ["1L1"], - faketears: ["1L1"], - feintattack: ["1L1"], - firepunch: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - focuspunch: ["1L1"], - foulplay: ["1L1"], - frustration: ["1L1"], - grassknot: ["1L1"], - headbutt: ["1L1"], - headsmash: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - highjumpkick: ["1L1"], - icepunch: ["1L1"], - incinerate: ["1L1"], - irondefense: ["1L1"], - ironhead: ["1L1"], - irontail: ["1L1"], - knockoff: ["1L1"], - lashout: ["1L1"], - leer: ["1L1"], - lowkick: ["1L1"], - lowsweep: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - payback: ["1L1"], - poisonjab: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - quickguard: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - revenge: ["1L1"], - roar: ["1L1"], - rockclimb: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - sandattack: ["1L1"], - scaryface: ["1L1"], - secretpower: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - smackdown: ["1L1"], - snarl: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - spite: ["1L1"], - stoneedge: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - superfang: ["1L1"], - swagger: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - throatchop: ["1L1"], - thunderpunch: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - upperhand: ["1L1"], - uproar: ["1L1"], - workup: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 5, level: 1, gender: "M", nature: "Adamant", abilities: ["1L1"], moves: ["1L1"], pokeball: "cherishball"}, - ], - }, - scrafty: { - learnset: { - acidspray: ["1L1"], - amnesia: ["1L1"], - assurance: ["1L1"], - attract: ["1L1"], - beatup: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - bulkup: ["1L1"], - chipaway: ["1L1"], - closecombat: ["1L1"], - coaching: ["1L1"], - confide: ["1L1"], - crunch: ["1L1"], - curse: ["1L1"], - darkpulse: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dragonclaw: ["1L1"], - dragondance: ["1L1"], - dragonpulse: ["1L1"], - dragontail: ["1L1"], - drainpunch: ["1L1"], - dualchop: ["1L1"], - encore: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - faketears: ["1L1"], - feintattack: ["1L1"], - firepunch: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - focuspunch: ["1L1"], - foulplay: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - headbutt: ["1L1"], - headsmash: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - highjumpkick: ["1L1"], - hyperbeam: ["1L1"], - icepunch: ["1L1"], - incinerate: ["1L1"], - irondefense: ["1L1"], - ironhead: ["1L1"], - irontail: ["1L1"], - knockoff: ["1L1"], - lashout: ["1L1"], - leer: ["1L1"], - lowkick: ["1L1"], - lowsweep: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - metronome: ["1L1"], - outrage: ["1L1"], - payback: ["1L1"], - poisonjab: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - revenge: ["1L1"], - reversal: ["1L1"], - roar: ["1L1"], - rockclimb: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - sandattack: ["1L1"], - scaryface: ["1L1"], - secretpower: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - smackdown: ["1L1"], - snarl: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - spite: ["1L1"], - stoneedge: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - superfang: ["1L1"], - swagger: ["1L1"], - swordsdance: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - throatchop: ["1L1"], - thunderpunch: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - upperhand: ["1L1"], - uproar: ["1L1"], - workup: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 5, level: 50, gender: "M", nature: "Brave", abilities: ["1L1"], moves: ["1L1"], pokeball: "cherishball"}, - ], - }, - sigilyph: { - learnset: { - aerialace: ["1L1"], - aircutter: ["1L1"], - airslash: ["1L1"], - ancientpower: ["1L1"], - attract: ["1L1"], - calmmind: ["1L1"], - chargebeam: ["1L1"], - confide: ["1L1"], - confusion: ["1L1"], - cosmicpower: ["1L1"], - darkpulse: ["1L1"], - dazzlinggleam: ["1L1"], - defog: ["1L1"], - doubleteam: ["1L1"], - dreameater: ["1L1"], - dualwingbeat: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - expandingforce: ["1L1"], - facade: ["1L1"], - flash: ["1L1"], - flashcannon: ["1L1"], - fly: ["1L1"], - frustration: ["1L1"], - futuresight: ["1L1"], - gigaimpact: ["1L1"], - gravity: ["1L1"], - gust: ["1L1"], - heatwave: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - hypnosis: ["1L1"], - icebeam: ["1L1"], - icywind: ["1L1"], - imprison: ["1L1"], - lightscreen: ["1L1"], - magiccoat: ["1L1"], - magicroom: ["1L1"], - miracleeye: ["1L1"], - mirrormove: ["1L1"], - pluck: ["1L1"], - powerswap: ["1L1"], - protect: ["1L1"], - psybeam: ["1L1"], - psychic: ["1L1"], - psychocut: ["1L1"], - psychoshift: ["1L1"], - psychup: ["1L1"], - psyshock: ["1L1"], - psywave: ["1L1"], - raindance: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roost: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - secretpower: ["1L1"], - shadowball: ["1L1"], - shockwave: ["1L1"], - signalbeam: ["1L1"], - skillswap: ["1L1"], - skyattack: ["1L1"], - sleeptalk: ["1L1"], - smackdown: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - speedswap: ["1L1"], - steelwing: ["1L1"], - storedpower: ["1L1"], - substitute: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - synchronoise: ["1L1"], - tailwind: ["1L1"], - telekinesis: ["1L1"], - thief: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - trick: ["1L1"], - trickroom: ["1L1"], - whirlwind: ["1L1"], - zenheadbutt: ["1L1"], - }, - }, - yamask: { - learnset: { - afteryou: ["1L1"], - allyswitch: ["1L1"], - astonish: ["1L1"], - attract: ["1L1"], - block: ["1L1"], - calmmind: ["1L1"], - confide: ["1L1"], - craftyshield: ["1L1"], - curse: ["1L1"], - darkpulse: ["1L1"], - destinybond: ["1L1"], - disable: ["1L1"], - doubleteam: ["1L1"], - dreameater: ["1L1"], - embargo: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - faketears: ["1L1"], - flash: ["1L1"], - frustration: ["1L1"], - grudge: ["1L1"], - guardsplit: ["1L1"], - haze: ["1L1"], - healblock: ["1L1"], - hex: ["1L1"], - hiddenpower: ["1L1"], - imprison: ["1L1"], - infestation: ["1L1"], - irondefense: ["1L1"], - knockoff: ["1L1"], - magiccoat: ["1L1"], - meanlook: ["1L1"], - memento: ["1L1"], - nastyplot: ["1L1"], - nightmare: ["1L1"], - nightshade: ["1L1"], - ominouswind: ["1L1"], - painsplit: ["1L1"], - payback: ["1L1"], - poltergeist: ["1L1"], - powersplit: ["1L1"], - protect: ["1L1"], - psychic: ["1L1"], - psychup: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roleplay: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - secretpower: ["1L1"], - shadowball: ["1L1"], - shockwave: ["1L1"], - skillswap: ["1L1"], - sleeptalk: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - spite: ["1L1"], - substitute: ["1L1"], - swagger: ["1L1"], - telekinesis: ["1L1"], - thief: ["1L1"], - toxic: ["1L1"], - toxicspikes: ["1L1"], - trick: ["1L1"], - trickroom: ["1L1"], - willowisp: ["1L1"], - wonderroom: ["1L1"], - zenheadbutt: ["1L1"], - }, - }, - yamaskgalar: { - learnset: { - allyswitch: ["1L1"], - astonish: ["1L1"], - attract: ["1L1"], - brutalswing: ["1L1"], - calmmind: ["1L1"], - craftyshield: ["1L1"], - curse: ["1L1"], - darkpulse: ["1L1"], - destinybond: ["1L1"], - disable: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - faketears: ["1L1"], - guardsplit: ["1L1"], - haze: ["1L1"], - hex: ["1L1"], - imprison: ["1L1"], - irondefense: ["1L1"], - meanlook: ["1L1"], - memento: ["1L1"], - nastyplot: ["1L1"], - nightshade: ["1L1"], - payback: ["1L1"], - poltergeist: ["1L1"], - powersplit: ["1L1"], - protect: ["1L1"], - psychic: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - rockslide: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - sandstorm: ["1L1"], - shadowball: ["1L1"], - skillswap: ["1L1"], - slam: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - substitute: ["1L1"], - thief: ["1L1"], - toxicspikes: ["1L1"], - trick: ["1L1"], - trickroom: ["1L1"], - willowisp: ["1L1"], - wonderroom: ["1L1"], - zenheadbutt: ["1L1"], - }, - }, - cofagrigus: { - learnset: { - afteryou: ["1L1"], - allyswitch: ["1L1"], - astonish: ["1L1"], - attract: ["1L1"], - block: ["1L1"], - bodypress: ["1L1"], - calmmind: ["1L1"], - confide: ["1L1"], - craftyshield: ["1L1"], - curse: ["1L1"], - darkpulse: ["1L1"], - destinybond: ["1L1"], - disable: ["1L1"], - doubleteam: ["1L1"], - dreameater: ["1L1"], - embargo: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - faketears: ["1L1"], - flash: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - grudge: ["1L1"], - guardsplit: ["1L1"], - guardswap: ["1L1"], - haze: ["1L1"], - hex: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - imprison: ["1L1"], - infestation: ["1L1"], - irondefense: ["1L1"], - knockoff: ["1L1"], - magiccoat: ["1L1"], - meanlook: ["1L1"], - nastyplot: ["1L1"], - nightshade: ["1L1"], - ominouswind: ["1L1"], - painsplit: ["1L1"], - payback: ["1L1"], - phantomforce: ["1L1"], - poltergeist: ["1L1"], - powersplit: ["1L1"], - powerswap: ["1L1"], - protect: ["1L1"], - psychic: ["1L1"], - psychup: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - revenge: ["1L1"], - roleplay: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - scaryface: ["1L1"], - secretpower: ["1L1"], - shadowball: ["1L1"], - shadowclaw: ["1L1"], - shockwave: ["1L1"], - skillswap: ["1L1"], - sleeptalk: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - spite: ["1L1"], - substitute: ["1L1"], - swagger: ["1L1"], - telekinesis: ["1L1"], - thief: ["1L1"], - toxic: ["1L1"], - toxicspikes: ["1L1"], - trick: ["1L1"], - trickroom: ["1L1"], - willowisp: ["1L1"], - wonderroom: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 7, level: 66, gender: "M", moves: ["1L1"], pokeball: "cherishball"}, - ], - encounters: [ - {generation: 6, level: 32, maxEggMoves: 1}, - ], - }, - runerigus: { - learnset: { - allyswitch: ["1L1"], - amnesia: ["1L1"], - astonish: ["1L1"], - attract: ["1L1"], - bodypress: ["1L1"], - brutalswing: ["1L1"], - bulldoze: ["1L1"], - calmmind: ["1L1"], - craftyshield: ["1L1"], - curse: ["1L1"], - darkpulse: ["1L1"], - destinybond: ["1L1"], - disable: ["1L1"], - dragonpulse: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - faketears: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - guardsplit: ["1L1"], - guardswap: ["1L1"], - haze: ["1L1"], - hex: ["1L1"], - hyperbeam: ["1L1"], - imprison: ["1L1"], - irondefense: ["1L1"], - meanlook: ["1L1"], - nastyplot: ["1L1"], - nightshade: ["1L1"], - payback: ["1L1"], - phantomforce: ["1L1"], - poltergeist: ["1L1"], - powersplit: ["1L1"], - powerswap: ["1L1"], - protect: ["1L1"], - psychic: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - revenge: ["1L1"], - rockblast: ["1L1"], - rockslide: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - sandstorm: ["1L1"], - sandtomb: ["1L1"], - scaryface: ["1L1"], - shadowball: ["1L1"], - shadowclaw: ["1L1"], - skillswap: ["1L1"], - slam: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - stealthrock: ["1L1"], - stoneedge: ["1L1"], - substitute: ["1L1"], - taunt: ["1L1"], - thief: ["1L1"], - toxicspikes: ["1L1"], - trick: ["1L1"], - trickroom: ["1L1"], - willowisp: ["1L1"], - wonderroom: ["1L1"], - zenheadbutt: ["1L1"], - }, - }, - tirtouga: { - learnset: { - ancientpower: ["1L1"], - aquajet: ["1L1"], - aquatail: ["1L1"], - attract: ["1L1"], - bide: ["1L1"], - bite: ["1L1"], - blizzard: ["1L1"], - block: ["1L1"], - bodyslam: ["1L1"], - brine: ["1L1"], - bulldoze: ["1L1"], - confide: ["1L1"], - crunch: ["1L1"], - curse: ["1L1"], - dig: ["1L1"], - dive: ["1L1"], - doubleteam: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - flail: ["1L1"], - frustration: ["1L1"], - guardswap: ["1L1"], - hiddenpower: ["1L1"], - hydropump: ["1L1"], - icebeam: ["1L1"], - icywind: ["1L1"], - irondefense: ["1L1"], - irontail: ["1L1"], - knockoff: ["1L1"], - liquidation: ["1L1"], - meteorbeam: ["1L1"], - muddywater: ["1L1"], - mudshot: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rockblast: ["1L1"], - rockpolish: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rockthrow: ["1L1"], - rocktomb: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - sandstorm: ["1L1"], - scald: ["1L1"], - secretpower: ["1L1"], - shellsmash: ["1L1"], - slam: ["1L1"], - sleeptalk: ["1L1"], - smackdown: ["1L1"], - snore: ["1L1"], - stealthrock: ["1L1"], - stoneedge: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - toxic: ["1L1"], - waterfall: ["1L1"], - watergun: ["1L1"], - waterpulse: ["1L1"], - whirlpool: ["1L1"], - wideguard: ["1L1"], - withdraw: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 5, level: 15, gender: "M", abilities: ["1L1"], moves: ["1L1"], pokeball: "cherishball"}, - ], - }, - carracosta: { - learnset: { - ancientpower: ["1L1"], - aquajet: ["1L1"], - aquatail: ["1L1"], - attract: ["1L1"], - bide: ["1L1"], - bite: ["1L1"], - blizzard: ["1L1"], - block: ["1L1"], - bodyslam: ["1L1"], - brine: ["1L1"], - bulldoze: ["1L1"], - confide: ["1L1"], - crunch: ["1L1"], - curse: ["1L1"], - dig: ["1L1"], - dive: ["1L1"], - doubleteam: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - focusblast: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - guardswap: ["1L1"], - hiddenpower: ["1L1"], - hydropump: ["1L1"], - hyperbeam: ["1L1"], - icebeam: ["1L1"], - icywind: ["1L1"], - irondefense: ["1L1"], - ironhead: ["1L1"], - irontail: ["1L1"], - knockoff: ["1L1"], - liquidation: ["1L1"], - lowkick: ["1L1"], - meteorbeam: ["1L1"], - muddywater: ["1L1"], - mudshot: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - razorshell: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rockblast: ["1L1"], - rockpolish: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - sandstorm: ["1L1"], - scald: ["1L1"], - secretpower: ["1L1"], - shellsmash: ["1L1"], - sleeptalk: ["1L1"], - smackdown: ["1L1"], - snore: ["1L1"], - stealthrock: ["1L1"], - stoneedge: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - superpower: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - toxic: ["1L1"], - waterfall: ["1L1"], - watergun: ["1L1"], - waterpulse: ["1L1"], - whirlpool: ["1L1"], - wideguard: ["1L1"], - withdraw: ["1L1"], - zenheadbutt: ["1L1"], - }, - }, - archen: { - learnset: { - acrobatics: ["1L1"], - aerialace: ["1L1"], - agility: ["1L1"], - allyswitch: ["1L1"], - ancientpower: ["1L1"], - aquatail: ["1L1"], - assurance: ["1L1"], - attract: ["1L1"], - bite: ["1L1"], - bounce: ["1L1"], - bulldoze: ["1L1"], - confide: ["1L1"], - crunch: ["1L1"], - cut: ["1L1"], - defog: ["1L1"], - dig: ["1L1"], - doubleteam: ["1L1"], - dragonbreath: ["1L1"], - dragonclaw: ["1L1"], - dragonpulse: ["1L1"], - dualwingbeat: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - frustration: ["1L1"], - headsmash: ["1L1"], - heatwave: ["1L1"], - hiddenpower: ["1L1"], - honeclaws: ["1L1"], - irondefense: ["1L1"], - irontail: ["1L1"], - knockoff: ["1L1"], - lashout: ["1L1"], - leer: ["1L1"], - meteorbeam: ["1L1"], - pluck: ["1L1"], - protect: ["1L1"], - quickattack: ["1L1"], - quickguard: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roar: ["1L1"], - rockblast: ["1L1"], - rockpolish: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rockthrow: ["1L1"], - rocktomb: ["1L1"], - roost: ["1L1"], - round: ["1L1"], - sandstorm: ["1L1"], - scaryface: ["1L1"], - secretpower: ["1L1"], - shadowclaw: ["1L1"], - sleeptalk: ["1L1"], - smackdown: ["1L1"], - snore: ["1L1"], - stealthrock: ["1L1"], - steelwing: ["1L1"], - stoneedge: ["1L1"], - substitute: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - switcheroo: ["1L1"], - tailwind: ["1L1"], - taunt: ["1L1"], - thrash: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - uproar: ["1L1"], - uturn: ["1L1"], - wingattack: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 5, level: 15, gender: "M", moves: ["1L1"], pokeball: "cherishball"}, - ], - }, - archeops: { - learnset: { - acrobatics: ["1L1"], - aerialace: ["1L1"], - agility: ["1L1"], - airslash: ["1L1"], - allyswitch: ["1L1"], - ancientpower: ["1L1"], - aquatail: ["1L1"], - assurance: ["1L1"], - attract: ["1L1"], - bounce: ["1L1"], - bulldoze: ["1L1"], - confide: ["1L1"], - crunch: ["1L1"], - cut: ["1L1"], - defog: ["1L1"], - dig: ["1L1"], - doubleteam: ["1L1"], - dragonbreath: ["1L1"], - dragonclaw: ["1L1"], - dragonpulse: ["1L1"], - dragontail: ["1L1"], - dualwingbeat: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fly: ["1L1"], - focusblast: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - heatwave: ["1L1"], - hiddenpower: ["1L1"], - honeclaws: ["1L1"], - hyperbeam: ["1L1"], - irondefense: ["1L1"], - irontail: ["1L1"], - knockoff: ["1L1"], - lashout: ["1L1"], - leer: ["1L1"], - meteorbeam: ["1L1"], - outrage: ["1L1"], - pluck: ["1L1"], - protect: ["1L1"], - quickattack: ["1L1"], - quickguard: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roar: ["1L1"], - rockblast: ["1L1"], - rockpolish: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rockthrow: ["1L1"], - rocktomb: ["1L1"], - roost: ["1L1"], - round: ["1L1"], - sandstorm: ["1L1"], - scaryface: ["1L1"], - secretpower: ["1L1"], - shadowclaw: ["1L1"], - skyattack: ["1L1"], - sleeptalk: ["1L1"], - smackdown: ["1L1"], - snore: ["1L1"], - stealthrock: ["1L1"], - steelwing: ["1L1"], - stoneedge: ["1L1"], - substitute: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - tailwind: ["1L1"], - taunt: ["1L1"], - thrash: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - uproar: ["1L1"], - uturn: ["1L1"], - wingattack: ["1L1"], - zenheadbutt: ["1L1"], - }, - }, - trubbish: { - learnset: { - acidspray: ["1L1"], - amnesia: ["1L1"], - attract: ["1L1"], - autotomize: ["1L1"], - belch: ["1L1"], - clearsmog: ["1L1"], - confide: ["1L1"], - corrosivegas: ["1L1"], - curse: ["1L1"], - darkpulse: ["1L1"], - doubleslap: ["1L1"], - doubleteam: ["1L1"], - drainpunch: ["1L1"], - endure: ["1L1"], - explosion: ["1L1"], - facade: ["1L1"], - frustration: ["1L1"], - gigadrain: ["1L1"], - gunkshot: ["1L1"], - haze: ["1L1"], - hiddenpower: ["1L1"], - infestation: ["1L1"], - mudsport: ["1L1"], - painsplit: ["1L1"], - payback: ["1L1"], - poisongas: ["1L1"], - pound: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - recycle: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rockblast: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - sandattack: ["1L1"], - secretpower: ["1L1"], - seedbomb: ["1L1"], - selfdestruct: ["1L1"], - sleeptalk: ["1L1"], - sludge: ["1L1"], - sludgebomb: ["1L1"], - sludgewave: ["1L1"], - snore: ["1L1"], - spikes: ["1L1"], - spite: ["1L1"], - stockpile: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swallow: ["1L1"], - takedown: ["1L1"], - thief: ["1L1"], - toxic: ["1L1"], - toxicspikes: ["1L1"], - venomdrench: ["1L1"], - venoshock: ["1L1"], - }, - }, - garbodor: { - learnset: { - acidspray: ["1L1"], - amnesia: ["1L1"], - attract: ["1L1"], - belch: ["1L1"], - bodypress: ["1L1"], - bodyslam: ["1L1"], - clearsmog: ["1L1"], - confide: ["1L1"], - corrosivegas: ["1L1"], - crosspoison: ["1L1"], - darkpulse: ["1L1"], - doubleslap: ["1L1"], - doubleteam: ["1L1"], - drainpunch: ["1L1"], - endure: ["1L1"], - explosion: ["1L1"], - facade: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - frustration: ["1L1"], - gigadrain: ["1L1"], - gigaimpact: ["1L1"], - gunkshot: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - infestation: ["1L1"], - metalclaw: ["1L1"], - painsplit: ["1L1"], - payback: ["1L1"], - poisongas: ["1L1"], - pound: ["1L1"], - protect: ["1L1"], - psychic: ["1L1"], - raindance: ["1L1"], - recycle: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rockblast: ["1L1"], - rockpolish: ["1L1"], - round: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - seedbomb: ["1L1"], - selfdestruct: ["1L1"], - sleeptalk: ["1L1"], - sludge: ["1L1"], - sludgebomb: ["1L1"], - sludgewave: ["1L1"], - smackdown: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - spikes: ["1L1"], - spite: ["1L1"], - stockpile: ["1L1"], - stompingtantrum: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swallow: ["1L1"], - takedown: ["1L1"], - thief: ["1L1"], - thunderbolt: ["1L1"], - toxic: ["1L1"], - toxicspikes: ["1L1"], - venomdrench: ["1L1"], - venoshock: ["1L1"], - }, - encounters: [ - {generation: 5, level: 31}, - {generation: 6, level: 30}, - {generation: 7, level: 24}, - ], - }, - zorua: { - learnset: { - aerialace: ["1L1"], - agility: ["1L1"], - assurance: ["1L1"], - attract: ["1L1"], - bounce: ["1L1"], - burningjealousy: ["1L1"], - calmmind: ["1L1"], - captivate: ["1L1"], - confide: ["1L1"], - confuseray: ["1L1"], - copycat: ["1L1"], - counter: ["1L1"], - covet: ["1L1"], - cut: ["1L1"], - darkpulse: ["1L1"], - detect: ["1L1"], - dig: ["1L1"], - doubleteam: ["1L1"], - embargo: ["1L1"], - encore: ["1L1"], - endure: ["1L1"], - extrasensory: ["1L1"], - facade: ["1L1"], - faketears: ["1L1"], - feintattack: ["1L1"], - fling: ["1L1"], - foulplay: ["1L1"], - frustration: ["1L1"], - furyswipes: ["1L1"], - grassknot: ["1L1"], - helpinghand: ["1L1"], - hex: ["1L1"], - hiddenpower: ["1L1"], - honeclaws: ["1L1"], - hypervoice: ["1L1"], - imprison: ["1L1"], - incinerate: ["1L1"], - knockoff: ["1L1"], - lashout: ["1L1"], - leer: ["1L1"], - memento: ["1L1"], - nastyplot: ["1L1"], - nightdaze: ["1L1"], - nightshade: ["1L1"], - painsplit: ["1L1"], - payback: ["1L1"], - protect: ["1L1"], - psychup: ["1L1"], - punishment: ["1L1"], - pursuit: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - revenge: ["1L1"], - roar: ["1L1"], - round: ["1L1"], - scaryface: ["1L1"], - scratch: ["1L1"], - secretpower: ["1L1"], - shadowball: ["1L1"], - shadowclaw: ["1L1"], - skittersmack: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - snarl: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - spite: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - swordsdance: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - trick: ["1L1"], - uproar: ["1L1"], - uturn: ["1L1"], - }, - }, - zoruahisui: { - learnset: { - agility: ["1L1"], - bittermalice: ["1L1"], - burningjealousy: ["1L1"], - calmmind: ["1L1"], - comeuppance: ["1L1"], - confuseray: ["1L1"], - curse: ["1L1"], - darkpulse: ["1L1"], - detect: ["1L1"], - dig: ["1L1"], - endure: ["1L1"], - extrasensory: ["1L1"], - facade: ["1L1"], - faketears: ["1L1"], - fling: ["1L1"], - focuspunch: ["1L1"], - foulplay: ["1L1"], - gigaimpact: ["1L1"], - hex: ["1L1"], - honeclaws: ["1L1"], - hyperbeam: ["1L1"], - icywind: ["1L1"], - imprison: ["1L1"], - knockoff: ["1L1"], - lashout: ["1L1"], - leer: ["1L1"], - memento: ["1L1"], - nastyplot: ["1L1"], - nightshade: ["1L1"], - painsplit: ["1L1"], - phantomforce: ["1L1"], - protect: ["1L1"], - psychup: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - roar: ["1L1"], - scratch: ["1L1"], - shadowball: ["1L1"], - shadowclaw: ["1L1"], - shadowsneak: ["1L1"], - skittersmack: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - snarl: ["1L1"], - snowscape: ["1L1"], - spite: ["1L1"], - substitute: ["1L1"], - swift: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - torment: ["1L1"], - trick: ["1L1"], - uturn: ["1L1"], - willowisp: ["1L1"], - }, - }, - zoroark: { - learnset: { - aerialace: ["1L1"], - agility: ["1L1"], - assurance: ["1L1"], - attract: ["1L1"], - bodyslam: ["1L1"], - bounce: ["1L1"], - brickbreak: ["1L1"], - burningjealousy: ["1L1"], - calmmind: ["1L1"], - confide: ["1L1"], - confuseray: ["1L1"], - covet: ["1L1"], - crunch: ["1L1"], - cut: ["1L1"], - darkpulse: ["1L1"], - dig: ["1L1"], - doubleteam: ["1L1"], - embargo: ["1L1"], - encore: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - faketears: ["1L1"], - feintattack: ["1L1"], - flamethrower: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - foulplay: ["1L1"], - frustration: ["1L1"], - furyswipes: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - helpinghand: ["1L1"], - hex: ["1L1"], - hiddenpower: ["1L1"], - honeclaws: ["1L1"], - hyperbeam: ["1L1"], - hypervoice: ["1L1"], - imprison: ["1L1"], - incinerate: ["1L1"], - knockoff: ["1L1"], - laserfocus: ["1L1"], - lashout: ["1L1"], - leer: ["1L1"], - lowkick: ["1L1"], - lowsweep: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - nastyplot: ["1L1"], - nightdaze: ["1L1"], - nightshade: ["1L1"], - nightslash: ["1L1"], - painsplit: ["1L1"], - payback: ["1L1"], - protect: ["1L1"], - psychic: ["1L1"], - psychup: ["1L1"], - punishment: ["1L1"], - pursuit: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - revenge: ["1L1"], - roar: ["1L1"], - rocksmash: ["1L1"], - round: ["1L1"], - scaryface: ["1L1"], - scratch: ["1L1"], - secretpower: ["1L1"], - shadowball: ["1L1"], - shadowclaw: ["1L1"], - skittersmack: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - snarl: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - spite: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - swordsdance: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - throatchop: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - trick: ["1L1"], - uproar: ["1L1"], - uturn: ["1L1"], - }, - eventData: [ - {generation: 5, level: 50, gender: "M", nature: "Quirky", moves: ["1L1"], pokeball: "cherishball"}, - {generation: 6, level: 50, moves: ["1L1"], pokeball: "ultraball"}, - {generation: 6, level: 45, gender: "M", nature: "Naughty", moves: ["1L1"], pokeball: "cherishball"}, - ], - encounters: [ - {generation: 5, level: 25}, - ], - }, - zoroarkhisui: { - learnset: { - aerialace: ["1L1"], - agility: ["1L1"], - bittermalice: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - burningjealousy: ["1L1"], - calmmind: ["1L1"], - confuseray: ["1L1"], - crunch: ["1L1"], - curse: ["1L1"], - darkpulse: ["1L1"], - dig: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - faketears: ["1L1"], - flamethrower: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - focuspunch: ["1L1"], - foulplay: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - happyhour: ["1L1"], - helpinghand: ["1L1"], - hex: ["1L1"], - honeclaws: ["1L1"], - hyperbeam: ["1L1"], - hypervoice: ["1L1"], - icywind: ["1L1"], - imprison: ["1L1"], - knockoff: ["1L1"], - lashout: ["1L1"], - leer: ["1L1"], - lowkick: ["1L1"], - lowsweep: ["1L1"], - nastyplot: ["1L1"], - nightshade: ["1L1"], - painsplit: ["1L1"], - phantomforce: ["1L1"], - poltergeist: ["1L1"], - protect: ["1L1"], - psychic: ["1L1"], - psychup: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - roar: ["1L1"], - scaryface: ["1L1"], - scratch: ["1L1"], - shadowball: ["1L1"], - shadowclaw: ["1L1"], - shadowsneak: ["1L1"], - skittersmack: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - snarl: ["1L1"], - snowscape: ["1L1"], - spite: ["1L1"], - substitute: ["1L1"], - swift: ["1L1"], - swordsdance: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - throatchop: ["1L1"], - torment: ["1L1"], - trick: ["1L1"], - uturn: ["1L1"], - willowisp: ["1L1"], - }, - eventData: [ - {generation: 9, level: 50, perfectIVs: 3, moves: ["1L1"], pokeball: "cherishball"}, - ], - }, - minccino: { - learnset: { - afteryou: ["1L1"], - alluringvoice: ["1L1"], - aquatail: ["1L1"], - attract: ["1L1"], - babydolleyes: ["1L1"], - batonpass: ["1L1"], - bulletseed: ["1L1"], - calmmind: ["1L1"], - captivate: ["1L1"], - charm: ["1L1"], - chillingwater: ["1L1"], - confide: ["1L1"], - covet: ["1L1"], - dazzlinggleam: ["1L1"], - dig: ["1L1"], - doubleslap: ["1L1"], - doubleteam: ["1L1"], - echoedvoice: ["1L1"], - encore: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - faketears: ["1L1"], - flail: ["1L1"], - fling: ["1L1"], - frustration: ["1L1"], - grassknot: ["1L1"], - growl: ["1L1"], - gunkshot: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hypervoice: ["1L1"], - irontail: ["1L1"], - knockoff: ["1L1"], - lastresort: ["1L1"], - mudslap: ["1L1"], - playrough: ["1L1"], - pound: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - secretpower: ["1L1"], - seedbomb: ["1L1"], - shockwave: ["1L1"], - sing: ["1L1"], - slam: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - superfang: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - tailslap: ["1L1"], - tailwhip: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thunderbolt: ["1L1"], - thunderwave: ["1L1"], - tickle: ["1L1"], - tidyup: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - tripleaxel: ["1L1"], - uproar: ["1L1"], - uturn: ["1L1"], - wakeupslap: ["1L1"], - workup: ["1L1"], - }, - }, - cinccino: { - learnset: { - afteryou: ["1L1"], - alluringvoice: ["1L1"], - aquatail: ["1L1"], - attract: ["1L1"], - babydolleyes: ["1L1"], - batonpass: ["1L1"], - bulletseed: ["1L1"], - calmmind: ["1L1"], - charm: ["1L1"], - chillingwater: ["1L1"], - confide: ["1L1"], - covet: ["1L1"], - dazzlinggleam: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - echoedvoice: ["1L1"], - encore: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - faketears: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - gunkshot: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - hypervoice: ["1L1"], - icespinner: ["1L1"], - irontail: ["1L1"], - knockoff: ["1L1"], - laserfocus: ["1L1"], - lastresort: ["1L1"], - lightscreen: ["1L1"], - mudslap: ["1L1"], - playrough: ["1L1"], - pound: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - rockblast: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - secretpower: ["1L1"], - seedbomb: ["1L1"], - shockwave: ["1L1"], - sing: ["1L1"], - slam: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - superfang: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - tailslap: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderwave: ["1L1"], - tickle: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - tripleaxel: ["1L1"], - uproar: ["1L1"], - uturn: ["1L1"], - workup: ["1L1"], - }, - }, - gothita: { - learnset: { - allyswitch: ["1L1"], - attract: ["1L1"], - calmmind: ["1L1"], - captivate: ["1L1"], - chargebeam: ["1L1"], - charm: ["1L1"], - confide: ["1L1"], - confusion: ["1L1"], - covet: ["1L1"], - darkpulse: ["1L1"], - doubleslap: ["1L1"], - doubleteam: ["1L1"], - dreameater: ["1L1"], - embargo: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - expandingforce: ["1L1"], - facade: ["1L1"], - fakeout: ["1L1"], - faketears: ["1L1"], - feintattack: ["1L1"], - flash: ["1L1"], - flatter: ["1L1"], - fling: ["1L1"], - foulplay: ["1L1"], - frustration: ["1L1"], - futuresight: ["1L1"], - grassknot: ["1L1"], - gravity: ["1L1"], - guardswap: ["1L1"], - healbell: ["1L1"], - healblock: ["1L1"], - healpulse: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hypnosis: ["1L1"], - imprison: ["1L1"], - lightscreen: ["1L1"], - magiccoat: ["1L1"], - magicroom: ["1L1"], - meanlook: ["1L1"], - miracleeye: ["1L1"], - mirrorcoat: ["1L1"], - nastyplot: ["1L1"], - payback: ["1L1"], - playnice: ["1L1"], - pound: ["1L1"], - protect: ["1L1"], - psybeam: ["1L1"], - psychic: ["1L1"], - psychicnoise: ["1L1"], - psychicterrain: ["1L1"], - psychup: ["1L1"], - psyshock: ["1L1"], - raindance: ["1L1"], - recycle: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rockslide: ["1L1"], - rocktomb: ["1L1"], - roleplay: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - secretpower: ["1L1"], - shadowball: ["1L1"], - shockwave: ["1L1"], - signalbeam: ["1L1"], - skillswap: ["1L1"], - sleeptalk: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - storedpower: ["1L1"], - substitute: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - taunt: ["1L1"], - telekinesis: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thunderbolt: ["1L1"], - thunderwave: ["1L1"], - tickle: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - trick: ["1L1"], - trickroom: ["1L1"], - uproar: ["1L1"], - zenheadbutt: ["1L1"], - }, - }, - gothorita: { - learnset: { - allyswitch: ["1L1"], - attract: ["1L1"], - calmmind: ["1L1"], - chargebeam: ["1L1"], - charm: ["1L1"], - confide: ["1L1"], - confusion: ["1L1"], - covet: ["1L1"], - darkpulse: ["1L1"], - doubleslap: ["1L1"], - doubleteam: ["1L1"], - dreameater: ["1L1"], - embargo: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - expandingforce: ["1L1"], - facade: ["1L1"], - faketears: ["1L1"], - feintattack: ["1L1"], - flash: ["1L1"], - flatter: ["1L1"], - fling: ["1L1"], - foulplay: ["1L1"], - frustration: ["1L1"], - futuresight: ["1L1"], - grassknot: ["1L1"], - gravity: ["1L1"], - guardswap: ["1L1"], - healbell: ["1L1"], - healblock: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hypnosis: ["1L1"], - imprison: ["1L1"], - lightscreen: ["1L1"], - magiccoat: ["1L1"], - magicroom: ["1L1"], - metronome: ["1L1"], - mirrorcoat: ["1L1"], - nastyplot: ["1L1"], - payback: ["1L1"], - playnice: ["1L1"], - pound: ["1L1"], - protect: ["1L1"], - psybeam: ["1L1"], - psychic: ["1L1"], - psychicnoise: ["1L1"], - psychicterrain: ["1L1"], - psychup: ["1L1"], - psyshock: ["1L1"], - raindance: ["1L1"], - recycle: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rockslide: ["1L1"], - rocktomb: ["1L1"], - roleplay: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - secretpower: ["1L1"], - shadowball: ["1L1"], - shockwave: ["1L1"], - signalbeam: ["1L1"], - skillswap: ["1L1"], - sleeptalk: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - storedpower: ["1L1"], - substitute: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - taunt: ["1L1"], - telekinesis: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thunderbolt: ["1L1"], - thunderwave: ["1L1"], - tickle: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - trick: ["1L1"], - trickroom: ["1L1"], - uproar: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 5, level: 32, gender: "M", isHidden: true, moves: ["1L1"]}, - {generation: 5, level: 32, gender: "M", isHidden: true, moves: ["1L1"]}, - ], - encounters: [ - {generation: 5, level: 31}, - ], - }, - gothitelle: { - learnset: { - allyswitch: ["1L1"], - attract: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - calmmind: ["1L1"], - chargebeam: ["1L1"], - charm: ["1L1"], - confide: ["1L1"], - confusion: ["1L1"], - cosmicpower: ["1L1"], - covet: ["1L1"], - darkpulse: ["1L1"], - doubleslap: ["1L1"], - doubleteam: ["1L1"], - dreameater: ["1L1"], - embargo: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - expandingforce: ["1L1"], - facade: ["1L1"], - faketears: ["1L1"], - feintattack: ["1L1"], - flash: ["1L1"], - flatter: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - foulplay: ["1L1"], - frustration: ["1L1"], - futuresight: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - gravity: ["1L1"], - guardswap: ["1L1"], - healbell: ["1L1"], - healblock: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - hypnosis: ["1L1"], - imprison: ["1L1"], - laserfocus: ["1L1"], - lightscreen: ["1L1"], - lowsweep: ["1L1"], - magiccoat: ["1L1"], - magicroom: ["1L1"], - metronome: ["1L1"], - nastyplot: ["1L1"], - payback: ["1L1"], - playnice: ["1L1"], - pound: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - psybeam: ["1L1"], - psychic: ["1L1"], - psychicnoise: ["1L1"], - psychicterrain: ["1L1"], - psychup: ["1L1"], - psyshock: ["1L1"], - raindance: ["1L1"], - recycle: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rockslide: ["1L1"], - rocktomb: ["1L1"], - roleplay: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - secretpower: ["1L1"], - shadowball: ["1L1"], - shockwave: ["1L1"], - signalbeam: ["1L1"], - skillswap: ["1L1"], - sleeptalk: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - storedpower: ["1L1"], - substitute: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - taunt: ["1L1"], - telekinesis: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thunderbolt: ["1L1"], - thunderwave: ["1L1"], - tickle: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - trick: ["1L1"], - trickroom: ["1L1"], - uproar: ["1L1"], - zenheadbutt: ["1L1"], - }, - encounters: [ - {generation: 5, level: 34}, - ], - }, - solosis: { - learnset: { - acidarmor: ["1L1"], - afteryou: ["1L1"], - allyswitch: ["1L1"], - astonish: ["1L1"], - attract: ["1L1"], - calmmind: ["1L1"], - charm: ["1L1"], - confide: ["1L1"], - confuseray: ["1L1"], - confusion: ["1L1"], - doubleteam: ["1L1"], - dreameater: ["1L1"], - embargo: ["1L1"], - encore: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - expandingforce: ["1L1"], - explosion: ["1L1"], - facade: ["1L1"], - flash: ["1L1"], - flashcannon: ["1L1"], - frustration: ["1L1"], - futuresight: ["1L1"], - gravity: ["1L1"], - guardswap: ["1L1"], - gyroball: ["1L1"], - healblock: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - imprison: ["1L1"], - infestation: ["1L1"], - irondefense: ["1L1"], - lightscreen: ["1L1"], - magiccoat: ["1L1"], - nightshade: ["1L1"], - painsplit: ["1L1"], - powerswap: ["1L1"], - protect: ["1L1"], - psybeam: ["1L1"], - psychic: ["1L1"], - psychicterrain: ["1L1"], - psychup: ["1L1"], - psyshock: ["1L1"], - psywave: ["1L1"], - raindance: ["1L1"], - recover: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rockslide: ["1L1"], - rocktomb: ["1L1"], - roleplay: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - secretpower: ["1L1"], - shadowball: ["1L1"], - shockwave: ["1L1"], - signalbeam: ["1L1"], - skillswap: ["1L1"], - sleeptalk: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - steelroller: ["1L1"], - storedpower: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - telekinesis: ["1L1"], - terablast: ["1L1"], - thunder: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - trick: ["1L1"], - trickroom: ["1L1"], - wonderroom: ["1L1"], - zenheadbutt: ["1L1"], - }, - }, - duosion: { - learnset: { - afteryou: ["1L1"], - allyswitch: ["1L1"], - attract: ["1L1"], - calmmind: ["1L1"], - charm: ["1L1"], - confide: ["1L1"], - confuseray: ["1L1"], - confusion: ["1L1"], - doubleteam: ["1L1"], - dreameater: ["1L1"], - embargo: ["1L1"], - encore: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - expandingforce: ["1L1"], - explosion: ["1L1"], - facade: ["1L1"], - flash: ["1L1"], - flashcannon: ["1L1"], - frustration: ["1L1"], - futuresight: ["1L1"], - gravity: ["1L1"], - guardswap: ["1L1"], - gyroball: ["1L1"], - healblock: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - imprison: ["1L1"], - infestation: ["1L1"], - irondefense: ["1L1"], - lightscreen: ["1L1"], - magiccoat: ["1L1"], - nightshade: ["1L1"], - painsplit: ["1L1"], - powerswap: ["1L1"], - protect: ["1L1"], - psybeam: ["1L1"], - psychic: ["1L1"], - psychicterrain: ["1L1"], - psychup: ["1L1"], - psyshock: ["1L1"], - psywave: ["1L1"], - raindance: ["1L1"], - recover: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rockslide: ["1L1"], - rocktomb: ["1L1"], - roleplay: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - secretpower: ["1L1"], - shadowball: ["1L1"], - shockwave: ["1L1"], - signalbeam: ["1L1"], - skillswap: ["1L1"], - sleeptalk: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - steelroller: ["1L1"], - storedpower: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - telekinesis: ["1L1"], - terablast: ["1L1"], - thunder: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - trick: ["1L1"], - trickroom: ["1L1"], - wonderroom: ["1L1"], - zenheadbutt: ["1L1"], - }, - encounters: [ - {generation: 5, level: 31}, - ], - }, - reuniclus: { - learnset: { - afteryou: ["1L1"], - allyswitch: ["1L1"], - attract: ["1L1"], - bodyslam: ["1L1"], - calmmind: ["1L1"], - charm: ["1L1"], - confide: ["1L1"], - confuseray: ["1L1"], - confusion: ["1L1"], - dizzypunch: ["1L1"], - doubleteam: ["1L1"], - drainpunch: ["1L1"], - dreameater: ["1L1"], - embargo: ["1L1"], - encore: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - expandingforce: ["1L1"], - explosion: ["1L1"], - facade: ["1L1"], - firepunch: ["1L1"], - flash: ["1L1"], - flashcannon: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - focuspunch: ["1L1"], - frustration: ["1L1"], - futuresight: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - gravity: ["1L1"], - guardswap: ["1L1"], - gyroball: ["1L1"], - hammerarm: ["1L1"], - healblock: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - icepunch: ["1L1"], - imprison: ["1L1"], - infestation: ["1L1"], - irondefense: ["1L1"], - knockoff: ["1L1"], - laserfocus: ["1L1"], - lightscreen: ["1L1"], - magiccoat: ["1L1"], - megapunch: ["1L1"], - nightshade: ["1L1"], - painsplit: ["1L1"], - powerswap: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - psybeam: ["1L1"], - psychic: ["1L1"], - psychicnoise: ["1L1"], - psychicterrain: ["1L1"], - psychup: ["1L1"], - psyshock: ["1L1"], - psywave: ["1L1"], - raindance: ["1L1"], - recover: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - roleplay: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - secretpower: ["1L1"], - shadowball: ["1L1"], - shockwave: ["1L1"], - signalbeam: ["1L1"], - skillswap: ["1L1"], - sleeptalk: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - steelroller: ["1L1"], - storedpower: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - superpower: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - telekinesis: ["1L1"], - terablast: ["1L1"], - thunder: ["1L1"], - thunderpunch: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - trick: ["1L1"], - trickroom: ["1L1"], - wonderroom: ["1L1"], - zenheadbutt: ["1L1"], - }, - encounters: [ - {generation: 5, level: 34}, - ], - }, - ducklett: { - learnset: { - aerialace: ["1L1"], - aircutter: ["1L1"], - airslash: ["1L1"], - aquajet: ["1L1"], - aquaring: ["1L1"], - attract: ["1L1"], - bravebird: ["1L1"], - brine: ["1L1"], - bubblebeam: ["1L1"], - chillingwater: ["1L1"], - confide: ["1L1"], - defog: ["1L1"], - disarmingvoice: ["1L1"], - dive: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - featherdance: ["1L1"], - fly: ["1L1"], - frustration: ["1L1"], - gust: ["1L1"], - hail: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hurricane: ["1L1"], - icebeam: ["1L1"], - icywind: ["1L1"], - liquidation: ["1L1"], - luckychant: ["1L1"], - mefirst: ["1L1"], - mirrormove: ["1L1"], - mudsport: ["1L1"], - pluck: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roost: ["1L1"], - round: ["1L1"], - scald: ["1L1"], - secretpower: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - steelwing: ["1L1"], - substitute: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - tailwind: ["1L1"], - terablast: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - uproar: ["1L1"], - watergun: ["1L1"], - waterpulse: ["1L1"], - watersport: ["1L1"], - whirlpool: ["1L1"], - wingattack: ["1L1"], - }, - }, - swanna: { - learnset: { - acrobatics: ["1L1"], - aerialace: ["1L1"], - aircutter: ["1L1"], - airslash: ["1L1"], - alluringvoice: ["1L1"], - aquaring: ["1L1"], - attract: ["1L1"], - bravebird: ["1L1"], - bubblebeam: ["1L1"], - chillingwater: ["1L1"], - confide: ["1L1"], - defog: ["1L1"], - disarmingvoice: ["1L1"], - dive: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - featherdance: ["1L1"], - flipturn: ["1L1"], - fly: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - hail: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hurricane: ["1L1"], - hydropump: ["1L1"], - hyperbeam: ["1L1"], - icebeam: ["1L1"], - icywind: ["1L1"], - knockoff: ["1L1"], - liquidation: ["1L1"], - pluck: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roost: ["1L1"], - round: ["1L1"], - scald: ["1L1"], - secretpower: ["1L1"], - skyattack: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - steelwing: ["1L1"], - substitute: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - tailwind: ["1L1"], - terablast: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - uproar: ["1L1"], - watergun: ["1L1"], - waterpulse: ["1L1"], - watersport: ["1L1"], - weatherball: ["1L1"], - whirlpool: ["1L1"], - wingattack: ["1L1"], - }, - encounters: [ - {generation: 6, level: 30}, - ], - }, - vanillite: { - learnset: { - acidarmor: ["1L1"], - allyswitch: ["1L1"], - astonish: ["1L1"], - attract: ["1L1"], - auroraveil: ["1L1"], - autotomize: ["1L1"], - avalanche: ["1L1"], - blizzard: ["1L1"], - confide: ["1L1"], - doubleteam: ["1L1"], - endure: ["1L1"], - explosion: ["1L1"], - facade: ["1L1"], - flashcannon: ["1L1"], - frostbreath: ["1L1"], - frustration: ["1L1"], - hail: ["1L1"], - harden: ["1L1"], - hiddenpower: ["1L1"], - hypervoice: ["1L1"], - icebeam: ["1L1"], - iceshard: ["1L1"], - iciclecrash: ["1L1"], - iciclespear: ["1L1"], - icywind: ["1L1"], - imprison: ["1L1"], - irondefense: ["1L1"], - lightscreen: ["1L1"], - magiccoat: ["1L1"], - magnetrise: ["1L1"], - mirrorcoat: ["1L1"], - mirrorshot: ["1L1"], - mist: ["1L1"], - naturalgift: ["1L1"], - powdersnow: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - round: ["1L1"], - secretpower: ["1L1"], - selfdestruct: ["1L1"], - sheercold: ["1L1"], - signalbeam: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - substitute: ["1L1"], - swagger: ["1L1"], - taunt: ["1L1"], - toxic: ["1L1"], - uproar: ["1L1"], - waterpulse: ["1L1"], - }, - }, - vanillish: { - learnset: { - acidarmor: ["1L1"], - allyswitch: ["1L1"], - astonish: ["1L1"], - attract: ["1L1"], - avalanche: ["1L1"], - blizzard: ["1L1"], - confide: ["1L1"], - doubleteam: ["1L1"], - endure: ["1L1"], - explosion: ["1L1"], - facade: ["1L1"], - flashcannon: ["1L1"], - frostbreath: ["1L1"], - frustration: ["1L1"], - hail: ["1L1"], - harden: ["1L1"], - hiddenpower: ["1L1"], - hypervoice: ["1L1"], - icebeam: ["1L1"], - iceshard: ["1L1"], - iciclespear: ["1L1"], - icywind: ["1L1"], - imprison: ["1L1"], - irondefense: ["1L1"], - lightscreen: ["1L1"], - magiccoat: ["1L1"], - magnetrise: ["1L1"], - mirrorcoat: ["1L1"], - mirrorshot: ["1L1"], - mist: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - round: ["1L1"], - secretpower: ["1L1"], - selfdestruct: ["1L1"], - sheercold: ["1L1"], - signalbeam: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - substitute: ["1L1"], - swagger: ["1L1"], - taunt: ["1L1"], - toxic: ["1L1"], - uproar: ["1L1"], - waterpulse: ["1L1"], - }, - }, - vanilluxe: { - learnset: { - acidarmor: ["1L1"], - allyswitch: ["1L1"], - astonish: ["1L1"], - attract: ["1L1"], - avalanche: ["1L1"], - beatup: ["1L1"], - blizzard: ["1L1"], - confide: ["1L1"], - doubleteam: ["1L1"], - endure: ["1L1"], - explosion: ["1L1"], - facade: ["1L1"], - flashcannon: ["1L1"], - freezedry: ["1L1"], - frostbreath: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - hail: ["1L1"], - harden: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - hypervoice: ["1L1"], - icebeam: ["1L1"], - iciclecrash: ["1L1"], - iciclespear: ["1L1"], - icywind: ["1L1"], - imprison: ["1L1"], - irondefense: ["1L1"], - lightscreen: ["1L1"], - magiccoat: ["1L1"], - magnetrise: ["1L1"], - mirrorcoat: ["1L1"], - mirrorshot: ["1L1"], - mist: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - round: ["1L1"], - secretpower: ["1L1"], - selfdestruct: ["1L1"], - sheercold: ["1L1"], - signalbeam: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - substitute: ["1L1"], - swagger: ["1L1"], - taunt: ["1L1"], - toxic: ["1L1"], - uproar: ["1L1"], - waterpulse: ["1L1"], - weatherball: ["1L1"], - }, - }, - deerling: { - learnset: { - agility: ["1L1"], - aromatherapy: ["1L1"], - attract: ["1L1"], - batonpass: ["1L1"], - bodyslam: ["1L1"], - bounce: ["1L1"], - bulldoze: ["1L1"], - bulletseed: ["1L1"], - camouflage: ["1L1"], - charm: ["1L1"], - confide: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doublekick: ["1L1"], - doubleteam: ["1L1"], - echoedvoice: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - faketears: ["1L1"], - feintattack: ["1L1"], - flash: ["1L1"], - frustration: ["1L1"], - gigadrain: ["1L1"], - grassknot: ["1L1"], - grasswhistle: ["1L1"], - grassyglide: ["1L1"], - grassyterrain: ["1L1"], - growl: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - jumpkick: ["1L1"], - lastresort: ["1L1"], - leafstorm: ["1L1"], - leechseed: ["1L1"], - lightscreen: ["1L1"], - magicalleaf: ["1L1"], - naturalgift: ["1L1"], - naturepower: ["1L1"], - odorsleuth: ["1L1"], - playrough: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - sandattack: ["1L1"], - secretpower: ["1L1"], - seedbomb: ["1L1"], - shadowball: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - synthesis: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - wildcharge: ["1L1"], - workup: ["1L1"], - worryseed: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 5, level: 30, gender: "F", isHidden: true, moves: ["1L1"]}, - ], - }, - sawsbuck: { - learnset: { - agility: ["1L1"], - aromatherapy: ["1L1"], - attract: ["1L1"], - batonpass: ["1L1"], - bodyslam: ["1L1"], - bounce: ["1L1"], - bulldoze: ["1L1"], - bulletseed: ["1L1"], - camouflage: ["1L1"], - charm: ["1L1"], - confide: ["1L1"], - curse: ["1L1"], - cut: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doublekick: ["1L1"], - doubleteam: ["1L1"], - echoedvoice: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - faketears: ["1L1"], - feintattack: ["1L1"], - flash: ["1L1"], - frustration: ["1L1"], - gigadrain: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - grassyglide: ["1L1"], - grassyterrain: ["1L1"], - growl: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - highhorsepower: ["1L1"], - hornleech: ["1L1"], - hyperbeam: ["1L1"], - jumpkick: ["1L1"], - lastresort: ["1L1"], - leafstorm: ["1L1"], - leechseed: ["1L1"], - lightscreen: ["1L1"], - magicalleaf: ["1L1"], - megahorn: ["1L1"], - naturepower: ["1L1"], - petalblizzard: ["1L1"], - playrough: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - rocksmash: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - sandattack: ["1L1"], - secretpower: ["1L1"], - seedbomb: ["1L1"], - shadowball: ["1L1"], - sleeptalk: ["1L1"], - smartstrike: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - stompingtantrum: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swordsdance: ["1L1"], - synthesis: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - throatchop: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - wildcharge: ["1L1"], - workup: ["1L1"], - worryseed: ["1L1"], - zenheadbutt: ["1L1"], - }, - encounters: [ - {generation: 6, level: 30}, - ], - }, - emolga: { - learnset: { - acrobatics: ["1L1"], - aerialace: ["1L1"], - agility: ["1L1"], - airslash: ["1L1"], - astonish: ["1L1"], - attract: ["1L1"], - batonpass: ["1L1"], - charge: ["1L1"], - chargebeam: ["1L1"], - charm: ["1L1"], - confide: ["1L1"], - covet: ["1L1"], - cut: ["1L1"], - defog: ["1L1"], - discharge: ["1L1"], - doubleteam: ["1L1"], - dualwingbeat: ["1L1"], - eerieimpulse: ["1L1"], - electroball: ["1L1"], - electroweb: ["1L1"], - encore: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - flash: ["1L1"], - fling: ["1L1"], - frustration: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - iondeluge: ["1L1"], - irontail: ["1L1"], - knockoff: ["1L1"], - lastresort: ["1L1"], - lightscreen: ["1L1"], - nuzzle: ["1L1"], - protect: ["1L1"], - pursuit: ["1L1"], - quickattack: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - risingvoltage: ["1L1"], - roost: ["1L1"], - round: ["1L1"], - secretpower: ["1L1"], - shockwave: ["1L1"], - signalbeam: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - spark: ["1L1"], - speedswap: ["1L1"], - substitute: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - tailwhip: ["1L1"], - tailwind: ["1L1"], - taunt: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thundershock: ["1L1"], - thunderwave: ["1L1"], - tickle: ["1L1"], - toxic: ["1L1"], - uturn: ["1L1"], - voltswitch: ["1L1"], - wildcharge: ["1L1"], - }, - }, - karrablast: { - learnset: { - acidspray: ["1L1"], - aerialace: ["1L1"], - attract: ["1L1"], - bugbite: ["1L1"], - bugbuzz: ["1L1"], - confide: ["1L1"], - counter: ["1L1"], - cut: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - drillrun: ["1L1"], - encore: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - falseswipe: ["1L1"], - feintattack: ["1L1"], - flail: ["1L1"], - frustration: ["1L1"], - furyattack: ["1L1"], - furycutter: ["1L1"], - gigadrain: ["1L1"], - headbutt: ["1L1"], - hiddenpower: ["1L1"], - hornattack: ["1L1"], - infestation: ["1L1"], - irondefense: ["1L1"], - knockoff: ["1L1"], - leer: ["1L1"], - megahorn: ["1L1"], - nightslash: ["1L1"], - peck: ["1L1"], - poisonjab: ["1L1"], - protect: ["1L1"], - pursuit: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - round: ["1L1"], - scaryface: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - signalbeam: ["1L1"], - slash: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - strugglebug: ["1L1"], - substitute: ["1L1"], - swagger: ["1L1"], - swordsdance: ["1L1"], - takedown: ["1L1"], - toxic: ["1L1"], - xscissor: ["1L1"], - }, - eventData: [ - {generation: 5, level: 30, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 5, level: 50, moves: ["1L1"], pokeball: "cherishball"}, - ], - }, - escavalier: { - learnset: { - acidspray: ["1L1"], - aerialace: ["1L1"], - agility: ["1L1"], - attract: ["1L1"], - brutalswing: ["1L1"], - bugbite: ["1L1"], - bugbuzz: ["1L1"], - closecombat: ["1L1"], - confide: ["1L1"], - cut: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - drillrun: ["1L1"], - encore: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - falseswipe: ["1L1"], - fellstinger: ["1L1"], - flail: ["1L1"], - focusblast: ["1L1"], - frustration: ["1L1"], - furyattack: ["1L1"], - furycutter: ["1L1"], - gigadrain: ["1L1"], - gigaimpact: ["1L1"], - headbutt: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - infestation: ["1L1"], - irondefense: ["1L1"], - ironhead: ["1L1"], - knockoff: ["1L1"], - laserfocus: ["1L1"], - leer: ["1L1"], - megahorn: ["1L1"], - metalburst: ["1L1"], - peck: ["1L1"], - poisonjab: ["1L1"], - protect: ["1L1"], - quickguard: ["1L1"], - raindance: ["1L1"], - razorshell: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - revenge: ["1L1"], - reversal: ["1L1"], - rocksmash: ["1L1"], - round: ["1L1"], - scaryface: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - signalbeam: ["1L1"], - slash: ["1L1"], - sleeptalk: ["1L1"], - smartstrike: ["1L1"], - snore: ["1L1"], - steelbeam: ["1L1"], - strugglebug: ["1L1"], - substitute: ["1L1"], - swagger: ["1L1"], - swordsdance: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - toxic: ["1L1"], - twineedle: ["1L1"], - xscissor: ["1L1"], - }, - }, - foongus: { - learnset: { - absorb: ["1L1"], - afteryou: ["1L1"], - astonish: ["1L1"], - attract: ["1L1"], - bide: ["1L1"], - bodyslam: ["1L1"], - bulletseed: ["1L1"], - clearsmog: ["1L1"], - confide: ["1L1"], - defensecurl: ["1L1"], - doubleteam: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - feintattack: ["1L1"], - flash: ["1L1"], - foulplay: ["1L1"], - frustration: ["1L1"], - gastroacid: ["1L1"], - gigadrain: ["1L1"], - grassknot: ["1L1"], - grassyterrain: ["1L1"], - growth: ["1L1"], - hiddenpower: ["1L1"], - ingrain: ["1L1"], - leafstorm: ["1L1"], - magicalleaf: ["1L1"], - megadrain: ["1L1"], - naturepower: ["1L1"], - payback: ["1L1"], - poisonpowder: ["1L1"], - pollenpuff: ["1L1"], - protect: ["1L1"], - ragepowder: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - secretpower: ["1L1"], - seedbomb: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - spore: ["1L1"], - stunspore: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - sweetscent: ["1L1"], - synthesis: ["1L1"], - terablast: ["1L1"], - toxic: ["1L1"], - venoshock: ["1L1"], - worryseed: ["1L1"], - }, - }, - amoonguss: { - learnset: { - absorb: ["1L1"], - afteryou: ["1L1"], - astonish: ["1L1"], - attract: ["1L1"], - bide: ["1L1"], - bodyslam: ["1L1"], - bulletseed: ["1L1"], - clearsmog: ["1L1"], - confide: ["1L1"], - doubleteam: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - feintattack: ["1L1"], - flash: ["1L1"], - foulplay: ["1L1"], - frustration: ["1L1"], - gastroacid: ["1L1"], - gigadrain: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - grassyterrain: ["1L1"], - growth: ["1L1"], - hex: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - ingrain: ["1L1"], - leafstorm: ["1L1"], - magicalleaf: ["1L1"], - megadrain: ["1L1"], - naturepower: ["1L1"], - payback: ["1L1"], - pollenpuff: ["1L1"], - protect: ["1L1"], - ragepowder: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - round: ["1L1"], - scaryface: ["1L1"], - secretpower: ["1L1"], - seedbomb: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - spore: ["1L1"], - stompingtantrum: ["1L1"], - stunspore: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - sweetscent: ["1L1"], - synthesis: ["1L1"], - terablast: ["1L1"], - toxic: ["1L1"], - venoshock: ["1L1"], - worryseed: ["1L1"], - }, - eventData: [ - {generation: 8, level: 50, shiny: true, gender: "F", nature: "Sassy", ivs: {hp: 31, atk: 0, def: 31, spa: 31, spd: 31, spe: 0}, isHidden: true, moves: ["1L1"], pokeball: "cherishball"}, - ], - encounters: [ - {generation: 5, level: 37}, - {generation: 5, level: 35, isHidden: true}, - ], - }, - frillish: { - learnset: { - absorb: ["1L1"], - acidarmor: ["1L1"], - attract: ["1L1"], - bind: ["1L1"], - blizzard: ["1L1"], - brine: ["1L1"], - bubble: ["1L1"], - bubblebeam: ["1L1"], - confide: ["1L1"], - confuseray: ["1L1"], - constrict: ["1L1"], - darkpulse: ["1L1"], - dazzlinggleam: ["1L1"], - destinybond: ["1L1"], - dive: ["1L1"], - doubleteam: ["1L1"], - dreameater: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - flash: ["1L1"], - frustration: ["1L1"], - gigadrain: ["1L1"], - hail: ["1L1"], - hex: ["1L1"], - hiddenpower: ["1L1"], - hydropump: ["1L1"], - icebeam: ["1L1"], - icywind: ["1L1"], - imprison: ["1L1"], - magiccoat: ["1L1"], - mist: ["1L1"], - nightshade: ["1L1"], - ominouswind: ["1L1"], - painsplit: ["1L1"], - poisonsting: ["1L1"], - poltergeist: ["1L1"], - protect: ["1L1"], - psychic: ["1L1"], - psychup: ["1L1"], - raindance: ["1L1"], - recover: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - scald: ["1L1"], - secretpower: ["1L1"], - shadowball: ["1L1"], - shockwave: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - sludgewave: ["1L1"], - snore: ["1L1"], - spite: ["1L1"], - strengthsap: ["1L1"], - substitute: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - taunt: ["1L1"], - toxic: ["1L1"], - trick: ["1L1"], - trickroom: ["1L1"], - waterfall: ["1L1"], - watergun: ["1L1"], - waterpulse: ["1L1"], - watersport: ["1L1"], - waterspout: ["1L1"], - whirlpool: ["1L1"], - willowisp: ["1L1"], - wringout: ["1L1"], - }, - }, - jellicent: { - learnset: { - absorb: ["1L1"], - acidarmor: ["1L1"], - attract: ["1L1"], - bind: ["1L1"], - blizzard: ["1L1"], - brine: ["1L1"], - bubble: ["1L1"], - bubblebeam: ["1L1"], - confide: ["1L1"], - darkpulse: ["1L1"], - dazzlinggleam: ["1L1"], - destinybond: ["1L1"], - dive: ["1L1"], - doubleteam: ["1L1"], - dreameater: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - flash: ["1L1"], - frustration: ["1L1"], - gigadrain: ["1L1"], - gigaimpact: ["1L1"], - hail: ["1L1"], - hex: ["1L1"], - hiddenpower: ["1L1"], - hydropump: ["1L1"], - hyperbeam: ["1L1"], - icebeam: ["1L1"], - icywind: ["1L1"], - imprison: ["1L1"], - magiccoat: ["1L1"], - muddywater: ["1L1"], - nightshade: ["1L1"], - ominouswind: ["1L1"], - painsplit: ["1L1"], - poisonsting: ["1L1"], - poltergeist: ["1L1"], - protect: ["1L1"], - psychic: ["1L1"], - psychup: ["1L1"], - raindance: ["1L1"], - recover: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - scald: ["1L1"], - secretpower: ["1L1"], - shadowball: ["1L1"], - shockwave: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - sludgewave: ["1L1"], - snore: ["1L1"], - spite: ["1L1"], - substitute: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - taunt: ["1L1"], - toxic: ["1L1"], - trick: ["1L1"], - trickroom: ["1L1"], - waterfall: ["1L1"], - watergun: ["1L1"], - waterpulse: ["1L1"], - watersport: ["1L1"], - waterspout: ["1L1"], - whirlpool: ["1L1"], - willowisp: ["1L1"], - wringout: ["1L1"], - }, - eventData: [ - {generation: 5, level: 40, isHidden: true, moves: ["1L1"]}, - ], - encounters: [ - {generation: 5, level: 5}, - ], - }, - alomomola: { - learnset: { - acrobatics: ["1L1"], - alluringvoice: ["1L1"], - aquajet: ["1L1"], - aquaring: ["1L1"], - attract: ["1L1"], - batonpass: ["1L1"], - blizzard: ["1L1"], - bodyslam: ["1L1"], - bounce: ["1L1"], - brine: ["1L1"], - calmmind: ["1L1"], - chillingwater: ["1L1"], - confide: ["1L1"], - dive: ["1L1"], - doubleslap: ["1L1"], - doubleteam: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - flipturn: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - hail: ["1L1"], - healingwish: ["1L1"], - healpulse: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hydropump: ["1L1"], - hyperbeam: ["1L1"], - icebeam: ["1L1"], - icywind: ["1L1"], - knockoff: ["1L1"], - lightscreen: ["1L1"], - liquidation: ["1L1"], - magiccoat: ["1L1"], - mirrorcoat: ["1L1"], - mist: ["1L1"], - mistyterrain: ["1L1"], - painsplit: ["1L1"], - playnice: ["1L1"], - playrough: ["1L1"], - pound: ["1L1"], - protect: ["1L1"], - psychic: ["1L1"], - psychup: ["1L1"], - raindance: ["1L1"], - refresh: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - scald: ["1L1"], - scaleshot: ["1L1"], - secretpower: ["1L1"], - shadowball: ["1L1"], - skillswap: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - snowscape: ["1L1"], - soak: ["1L1"], - substitute: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - tickle: ["1L1"], - toxic: ["1L1"], - wakeupslap: ["1L1"], - waterfall: ["1L1"], - waterpulse: ["1L1"], - watersport: ["1L1"], - whirlpool: ["1L1"], - wideguard: ["1L1"], - wish: ["1L1"], - zenheadbutt: ["1L1"], - }, - }, - joltik: { - learnset: { - absorb: ["1L1"], - agility: ["1L1"], - attract: ["1L1"], - bounce: ["1L1"], - bugbite: ["1L1"], - bugbuzz: ["1L1"], - camouflage: ["1L1"], - chargebeam: ["1L1"], - confide: ["1L1"], - crosspoison: ["1L1"], - cut: ["1L1"], - disable: ["1L1"], - discharge: ["1L1"], - doubleteam: ["1L1"], - electroball: ["1L1"], - electroweb: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - feintattack: ["1L1"], - flash: ["1L1"], - frustration: ["1L1"], - furycutter: ["1L1"], - gastroacid: ["1L1"], - gigadrain: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - infestation: ["1L1"], - leechlife: ["1L1"], - lightscreen: ["1L1"], - lunge: ["1L1"], - magnetrise: ["1L1"], - pinmissile: ["1L1"], - poisonjab: ["1L1"], - poisonsting: ["1L1"], - pounce: ["1L1"], - protect: ["1L1"], - pursuit: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - risingvoltage: ["1L1"], - rockclimb: ["1L1"], - round: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - shockwave: ["1L1"], - signalbeam: ["1L1"], - skittersmack: ["1L1"], - slash: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - speedswap: ["1L1"], - spiderweb: ["1L1"], - stringshot: ["1L1"], - strugglebug: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - voltswitch: ["1L1"], - wildcharge: ["1L1"], - xscissor: ["1L1"], - }, - }, - galvantula: { - learnset: { - absorb: ["1L1"], - agility: ["1L1"], - attract: ["1L1"], - bounce: ["1L1"], - bugbite: ["1L1"], - bugbuzz: ["1L1"], - charge: ["1L1"], - chargebeam: ["1L1"], - confide: ["1L1"], - crosspoison: ["1L1"], - cut: ["1L1"], - disable: ["1L1"], - discharge: ["1L1"], - doubleteam: ["1L1"], - electroball: ["1L1"], - electroweb: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - flash: ["1L1"], - frustration: ["1L1"], - furycutter: ["1L1"], - gastroacid: ["1L1"], - gigadrain: ["1L1"], - gigaimpact: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - infestation: ["1L1"], - leechlife: ["1L1"], - lightscreen: ["1L1"], - lunge: ["1L1"], - magnetrise: ["1L1"], - pinmissile: ["1L1"], - poisonjab: ["1L1"], - pounce: ["1L1"], - protect: ["1L1"], - pursuit: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - risingvoltage: ["1L1"], - round: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - shockwave: ["1L1"], - signalbeam: ["1L1"], - skittersmack: ["1L1"], - slash: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - speedswap: ["1L1"], - spiderweb: ["1L1"], - stickyweb: ["1L1"], - stringshot: ["1L1"], - strugglebug: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - throatchop: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - voltswitch: ["1L1"], - wildcharge: ["1L1"], - xscissor: ["1L1"], - }, - encounters: [ - {generation: 6, level: 30}, - ], - }, - ferroseed: { - learnset: { - acidspray: ["1L1"], - assurance: ["1L1"], - attract: ["1L1"], - bulletseed: ["1L1"], - confide: ["1L1"], - curse: ["1L1"], - doubleteam: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - explosion: ["1L1"], - facade: ["1L1"], - flash: ["1L1"], - flashcannon: ["1L1"], - frustration: ["1L1"], - gigadrain: ["1L1"], - gravity: ["1L1"], - gyroball: ["1L1"], - harden: ["1L1"], - hiddenpower: ["1L1"], - honeclaws: ["1L1"], - ingrain: ["1L1"], - irondefense: ["1L1"], - ironhead: ["1L1"], - knockoff: ["1L1"], - leechseed: ["1L1"], - magnetrise: ["1L1"], - metalclaw: ["1L1"], - mirrorshot: ["1L1"], - naturepower: ["1L1"], - payback: ["1L1"], - pinmissile: ["1L1"], - poisonjab: ["1L1"], - protect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - revenge: ["1L1"], - rockclimb: ["1L1"], - rockpolish: ["1L1"], - rocksmash: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - secretpower: ["1L1"], - seedbomb: ["1L1"], - selfdestruct: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - spikes: ["1L1"], - stealthrock: ["1L1"], - steelbeam: ["1L1"], - steelroller: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - tackle: ["1L1"], - thunderbolt: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - worryseed: ["1L1"], - }, - }, - ferrothorn: { - learnset: { - aerialace: ["1L1"], - assurance: ["1L1"], - attract: ["1L1"], - block: ["1L1"], - bodypress: ["1L1"], - brutalswing: ["1L1"], - bulldoze: ["1L1"], - bulletseed: ["1L1"], - confide: ["1L1"], - curse: ["1L1"], - cut: ["1L1"], - doubleteam: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - explosion: ["1L1"], - facade: ["1L1"], - flash: ["1L1"], - flashcannon: ["1L1"], - frustration: ["1L1"], - gigadrain: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - gravity: ["1L1"], - gyroball: ["1L1"], - harden: ["1L1"], - heavyslam: ["1L1"], - hiddenpower: ["1L1"], - honeclaws: ["1L1"], - hyperbeam: ["1L1"], - ingrain: ["1L1"], - irondefense: ["1L1"], - ironhead: ["1L1"], - knockoff: ["1L1"], - magnetrise: ["1L1"], - metalclaw: ["1L1"], - mirrorshot: ["1L1"], - naturepower: ["1L1"], - payback: ["1L1"], - pinmissile: ["1L1"], - poisonjab: ["1L1"], - powerwhip: ["1L1"], - protect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - revenge: ["1L1"], - rockclimb: ["1L1"], - rockpolish: ["1L1"], - rocksmash: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - sandstorm: ["1L1"], - secretpower: ["1L1"], - seedbomb: ["1L1"], - selfdestruct: ["1L1"], - shadowclaw: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - spikes: ["1L1"], - stealthrock: ["1L1"], - steelbeam: ["1L1"], - steelroller: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swordsdance: ["1L1"], - tackle: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - worryseed: ["1L1"], - }, - }, - klink: { - learnset: { - assurance: ["1L1"], - autotomize: ["1L1"], - bind: ["1L1"], - charge: ["1L1"], - chargebeam: ["1L1"], - confide: ["1L1"], - discharge: ["1L1"], - doubleteam: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - flashcannon: ["1L1"], - frustration: ["1L1"], - geargrind: ["1L1"], - gravity: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - irondefense: ["1L1"], - lockon: ["1L1"], - magiccoat: ["1L1"], - magnetrise: ["1L1"], - metalsound: ["1L1"], - mirrorshot: ["1L1"], - powergem: ["1L1"], - protect: ["1L1"], - recycle: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - risingvoltage: ["1L1"], - rockpolish: ["1L1"], - rocksmash: ["1L1"], - round: ["1L1"], - sandstorm: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - shiftgear: ["1L1"], - shockwave: ["1L1"], - signalbeam: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - steelbeam: ["1L1"], - steelroller: ["1L1"], - substitute: ["1L1"], - swagger: ["1L1"], - telekinesis: ["1L1"], - thunderbolt: ["1L1"], - thundershock: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - uproar: ["1L1"], - visegrip: ["1L1"], - voltswitch: ["1L1"], - wildcharge: ["1L1"], - zapcannon: ["1L1"], - }, - }, - klang: { - learnset: { - allyswitch: ["1L1"], - assurance: ["1L1"], - autotomize: ["1L1"], - bind: ["1L1"], - charge: ["1L1"], - chargebeam: ["1L1"], - confide: ["1L1"], - discharge: ["1L1"], - doubleteam: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - flashcannon: ["1L1"], - frustration: ["1L1"], - geargrind: ["1L1"], - gravity: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - irondefense: ["1L1"], - lockon: ["1L1"], - magiccoat: ["1L1"], - magnetrise: ["1L1"], - metalsound: ["1L1"], - mirrorshot: ["1L1"], - powergem: ["1L1"], - protect: ["1L1"], - recycle: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - risingvoltage: ["1L1"], - rockpolish: ["1L1"], - rocksmash: ["1L1"], - round: ["1L1"], - sandstorm: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - shiftgear: ["1L1"], - shockwave: ["1L1"], - signalbeam: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - steelbeam: ["1L1"], - steelroller: ["1L1"], - substitute: ["1L1"], - swagger: ["1L1"], - telekinesis: ["1L1"], - thunderbolt: ["1L1"], - thundershock: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - uproar: ["1L1"], - visegrip: ["1L1"], - voltswitch: ["1L1"], - wildcharge: ["1L1"], - zapcannon: ["1L1"], - }, - encounters: [ - {generation: 6, level: 30}, - ], - }, - klinklang: { - learnset: { - allyswitch: ["1L1"], - assurance: ["1L1"], - autotomize: ["1L1"], - bind: ["1L1"], - charge: ["1L1"], - chargebeam: ["1L1"], - confide: ["1L1"], - discharge: ["1L1"], - doubleteam: ["1L1"], - electricterrain: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - flashcannon: ["1L1"], - frustration: ["1L1"], - geargrind: ["1L1"], - gearup: ["1L1"], - gigaimpact: ["1L1"], - gravity: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - irondefense: ["1L1"], - lockon: ["1L1"], - magiccoat: ["1L1"], - magneticflux: ["1L1"], - magnetrise: ["1L1"], - metalsound: ["1L1"], - mirrorshot: ["1L1"], - powergem: ["1L1"], - protect: ["1L1"], - recycle: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - risingvoltage: ["1L1"], - rockpolish: ["1L1"], - rocksmash: ["1L1"], - round: ["1L1"], - sandstorm: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - shiftgear: ["1L1"], - shockwave: ["1L1"], - signalbeam: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - steelbeam: ["1L1"], - steelroller: ["1L1"], - substitute: ["1L1"], - swagger: ["1L1"], - telekinesis: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thundershock: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - trickroom: ["1L1"], - uproar: ["1L1"], - visegrip: ["1L1"], - voltswitch: ["1L1"], - wildcharge: ["1L1"], - zapcannon: ["1L1"], - }, - }, - tynamo: { - learnset: { - charge: ["1L1"], - chargebeam: ["1L1"], - knockoff: ["1L1"], - magnetrise: ["1L1"], - spark: ["1L1"], - tackle: ["1L1"], - terablast: ["1L1"], - thunderwave: ["1L1"], - }, - }, - eelektrik: { - learnset: { - acid: ["1L1"], - acidspray: ["1L1"], - acrobatics: ["1L1"], - aquatail: ["1L1"], - attract: ["1L1"], - bind: ["1L1"], - bodyslam: ["1L1"], - bounce: ["1L1"], - charge: ["1L1"], - chargebeam: ["1L1"], - coil: ["1L1"], - confide: ["1L1"], - crunch: ["1L1"], - discharge: ["1L1"], - doubleteam: ["1L1"], - eerieimpulse: ["1L1"], - electricterrain: ["1L1"], - electroball: ["1L1"], - electroweb: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - flash: ["1L1"], - flashcannon: ["1L1"], - frustration: ["1L1"], - gastroacid: ["1L1"], - gigadrain: ["1L1"], - headbutt: ["1L1"], - hiddenpower: ["1L1"], - irontail: ["1L1"], - knockoff: ["1L1"], - lightscreen: ["1L1"], - lunge: ["1L1"], - magnetrise: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - round: ["1L1"], - scaryface: ["1L1"], - secretpower: ["1L1"], - shockwave: ["1L1"], - signalbeam: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - spark: ["1L1"], - substitute: ["1L1"], - superfang: ["1L1"], - swagger: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thrash: ["1L1"], - throatchop: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderfang: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - uturn: ["1L1"], - voltswitch: ["1L1"], - wildcharge: ["1L1"], - zapcannon: ["1L1"], - }, - }, - eelektross: { - learnset: { - acid: ["1L1"], - acidspray: ["1L1"], - acrobatics: ["1L1"], - aquatail: ["1L1"], - attract: ["1L1"], - bind: ["1L1"], - bodypress: ["1L1"], - bodyslam: ["1L1"], - bounce: ["1L1"], - brickbreak: ["1L1"], - bulkup: ["1L1"], - bulldoze: ["1L1"], - charge: ["1L1"], - chargebeam: ["1L1"], - closecombat: ["1L1"], - coil: ["1L1"], - confide: ["1L1"], - confuseray: ["1L1"], - crunch: ["1L1"], - crushclaw: ["1L1"], - cut: ["1L1"], - discharge: ["1L1"], - doubleteam: ["1L1"], - dragonclaw: ["1L1"], - dragonpulse: ["1L1"], - dragontail: ["1L1"], - drainpunch: ["1L1"], - eerieimpulse: ["1L1"], - electricterrain: ["1L1"], - electroball: ["1L1"], - electroweb: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - firepunch: ["1L1"], - flamethrower: ["1L1"], - flash: ["1L1"], - flashcannon: ["1L1"], - focuspunch: ["1L1"], - frustration: ["1L1"], - gastroacid: ["1L1"], - gigadrain: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - headbutt: ["1L1"], - heavyslam: ["1L1"], - hex: ["1L1"], - hiddenpower: ["1L1"], - honeclaws: ["1L1"], - hyperbeam: ["1L1"], - iondeluge: ["1L1"], - irontail: ["1L1"], - knockoff: ["1L1"], - lightscreen: ["1L1"], - liquidation: ["1L1"], - lunge: ["1L1"], - magnetrise: ["1L1"], - outrage: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roar: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - scaryface: ["1L1"], - secretpower: ["1L1"], - shockwave: ["1L1"], - signalbeam: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - stompingtantrum: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - supercellslam: ["1L1"], - superfang: ["1L1"], - superpower: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thrash: ["1L1"], - throatchop: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderfang: ["1L1"], - thunderpunch: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - uturn: ["1L1"], - voltswitch: ["1L1"], - wildcharge: ["1L1"], - zapcannon: ["1L1"], - zenheadbutt: ["1L1"], - }, - }, - elgyem: { - learnset: { - afteryou: ["1L1"], - agility: ["1L1"], - allyswitch: ["1L1"], - astonish: ["1L1"], - attract: ["1L1"], - barrier: ["1L1"], - calmmind: ["1L1"], - chargebeam: ["1L1"], - confide: ["1L1"], - confusion: ["1L1"], - cosmicpower: ["1L1"], - darkpulse: ["1L1"], - destinybond: ["1L1"], - disable: ["1L1"], - doubleteam: ["1L1"], - dreameater: ["1L1"], - echoedvoice: ["1L1"], - embargo: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - expandingforce: ["1L1"], - facade: ["1L1"], - flash: ["1L1"], - frustration: ["1L1"], - gravity: ["1L1"], - growl: ["1L1"], - guardsplit: ["1L1"], - guardswap: ["1L1"], - headbutt: ["1L1"], - healblock: ["1L1"], - hiddenpower: ["1L1"], - imprison: ["1L1"], - lightscreen: ["1L1"], - magiccoat: ["1L1"], - meteorbeam: ["1L1"], - miracleeye: ["1L1"], - nastyplot: ["1L1"], - painsplit: ["1L1"], - powersplit: ["1L1"], - powerswap: ["1L1"], - protect: ["1L1"], - psybeam: ["1L1"], - psychic: ["1L1"], - psychup: ["1L1"], - psyshock: ["1L1"], - raindance: ["1L1"], - recover: ["1L1"], - recycle: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rockslide: ["1L1"], - rocktomb: ["1L1"], - roleplay: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - shadowball: ["1L1"], - shockwave: ["1L1"], - signalbeam: ["1L1"], - simplebeam: ["1L1"], - skillswap: ["1L1"], - sleeptalk: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - steelwing: ["1L1"], - storedpower: ["1L1"], - substitute: ["1L1"], - swagger: ["1L1"], - synchronoise: ["1L1"], - telekinesis: ["1L1"], - teleport: ["1L1"], - thief: ["1L1"], - thunderbolt: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - trick: ["1L1"], - trickroom: ["1L1"], - uproar: ["1L1"], - wonderroom: ["1L1"], - zenheadbutt: ["1L1"], - }, - }, - beheeyem: { - learnset: { - afteryou: ["1L1"], - agility: ["1L1"], - allyswitch: ["1L1"], - attract: ["1L1"], - calmmind: ["1L1"], - chargebeam: ["1L1"], - confide: ["1L1"], - confusion: ["1L1"], - cosmicpower: ["1L1"], - darkpulse: ["1L1"], - doubleteam: ["1L1"], - dreameater: ["1L1"], - echoedvoice: ["1L1"], - embargo: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - expandingforce: ["1L1"], - facade: ["1L1"], - flash: ["1L1"], - flashcannon: ["1L1"], - frustration: ["1L1"], - futuresight: ["1L1"], - gigaimpact: ["1L1"], - gravity: ["1L1"], - growl: ["1L1"], - guardsplit: ["1L1"], - guardswap: ["1L1"], - headbutt: ["1L1"], - healblock: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - imprison: ["1L1"], - lightscreen: ["1L1"], - magiccoat: ["1L1"], - meteorbeam: ["1L1"], - miracleeye: ["1L1"], - nastyplot: ["1L1"], - painsplit: ["1L1"], - powersplit: ["1L1"], - powerswap: ["1L1"], - protect: ["1L1"], - psybeam: ["1L1"], - psychic: ["1L1"], - psychicterrain: ["1L1"], - psychup: ["1L1"], - psyshock: ["1L1"], - raindance: ["1L1"], - recover: ["1L1"], - recycle: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rockslide: ["1L1"], - rocktomb: ["1L1"], - roleplay: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - shadowball: ["1L1"], - shockwave: ["1L1"], - signalbeam: ["1L1"], - simplebeam: ["1L1"], - skillswap: ["1L1"], - sleeptalk: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - steelwing: ["1L1"], - storedpower: ["1L1"], - substitute: ["1L1"], - swagger: ["1L1"], - synchronoise: ["1L1"], - telekinesis: ["1L1"], - teleport: ["1L1"], - thief: ["1L1"], - thunderbolt: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - triattack: ["1L1"], - trick: ["1L1"], - trickroom: ["1L1"], - uproar: ["1L1"], - wonderroom: ["1L1"], - zenheadbutt: ["1L1"], - }, - }, - litwick: { - learnset: { - acid: ["1L1"], - acidarmor: ["1L1"], - allyswitch: ["1L1"], - astonish: ["1L1"], - attract: ["1L1"], - burningjealousy: ["1L1"], - calmmind: ["1L1"], - captivate: ["1L1"], - clearsmog: ["1L1"], - confide: ["1L1"], - confuseray: ["1L1"], - curse: ["1L1"], - darkpulse: ["1L1"], - doubleteam: ["1L1"], - dreameater: ["1L1"], - embargo: ["1L1"], - ember: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - fireblast: ["1L1"], - firespin: ["1L1"], - flameburst: ["1L1"], - flamecharge: ["1L1"], - flamethrower: ["1L1"], - flareblitz: ["1L1"], - flash: ["1L1"], - frustration: ["1L1"], - haze: ["1L1"], - heatwave: ["1L1"], - hex: ["1L1"], - hiddenpower: ["1L1"], - imprison: ["1L1"], - incinerate: ["1L1"], - inferno: ["1L1"], - memento: ["1L1"], - minimize: ["1L1"], - mysticalfire: ["1L1"], - nightshade: ["1L1"], - overheat: ["1L1"], - painsplit: ["1L1"], - payback: ["1L1"], - poltergeist: ["1L1"], - powersplit: ["1L1"], - protect: ["1L1"], - psychic: ["1L1"], - psychup: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - secretpower: ["1L1"], - shadowball: ["1L1"], - shockwave: ["1L1"], - skittersmack: ["1L1"], - sleeptalk: ["1L1"], - smog: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - spite: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - taunt: ["1L1"], - telekinesis: ["1L1"], - temperflare: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - toxic: ["1L1"], - trick: ["1L1"], - trickroom: ["1L1"], - willowisp: ["1L1"], - }, - }, - lampent: { - learnset: { - allyswitch: ["1L1"], - astonish: ["1L1"], - attract: ["1L1"], - burningjealousy: ["1L1"], - calmmind: ["1L1"], - confide: ["1L1"], - confuseray: ["1L1"], - curse: ["1L1"], - darkpulse: ["1L1"], - doubleteam: ["1L1"], - dreameater: ["1L1"], - embargo: ["1L1"], - ember: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - fireblast: ["1L1"], - firespin: ["1L1"], - flameburst: ["1L1"], - flamecharge: ["1L1"], - flamethrower: ["1L1"], - flareblitz: ["1L1"], - flash: ["1L1"], - frustration: ["1L1"], - haze: ["1L1"], - heatwave: ["1L1"], - hex: ["1L1"], - hiddenpower: ["1L1"], - imprison: ["1L1"], - incinerate: ["1L1"], - inferno: ["1L1"], - lashout: ["1L1"], - memento: ["1L1"], - minimize: ["1L1"], - mysticalfire: ["1L1"], - nightshade: ["1L1"], - overheat: ["1L1"], - painsplit: ["1L1"], - payback: ["1L1"], - poltergeist: ["1L1"], - protect: ["1L1"], - psychic: ["1L1"], - psychup: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - secretpower: ["1L1"], - shadowball: ["1L1"], - shockwave: ["1L1"], - skittersmack: ["1L1"], - sleeptalk: ["1L1"], - smog: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - spite: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - taunt: ["1L1"], - telekinesis: ["1L1"], - temperflare: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - toxic: ["1L1"], - trick: ["1L1"], - trickroom: ["1L1"], - willowisp: ["1L1"], - }, - encounters: [ - {generation: 6, level: 30}, - ], - }, - chandelure: { - learnset: { - allyswitch: ["1L1"], - astonish: ["1L1"], - attract: ["1L1"], - burningjealousy: ["1L1"], - calmmind: ["1L1"], - confide: ["1L1"], - confuseray: ["1L1"], - curse: ["1L1"], - darkpulse: ["1L1"], - doubleteam: ["1L1"], - dreameater: ["1L1"], - embargo: ["1L1"], - ember: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - fireblast: ["1L1"], - firespin: ["1L1"], - flameburst: ["1L1"], - flamecharge: ["1L1"], - flamethrower: ["1L1"], - flareblitz: ["1L1"], - flash: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - haze: ["1L1"], - heatwave: ["1L1"], - hex: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - imprison: ["1L1"], - incinerate: ["1L1"], - inferno: ["1L1"], - laserfocus: ["1L1"], - lashout: ["1L1"], - memento: ["1L1"], - minimize: ["1L1"], - mysticalfire: ["1L1"], - nightshade: ["1L1"], - overheat: ["1L1"], - painsplit: ["1L1"], - payback: ["1L1"], - poltergeist: ["1L1"], - protect: ["1L1"], - psychic: ["1L1"], - psychup: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - secretpower: ["1L1"], - shadowball: ["1L1"], - shockwave: ["1L1"], - skittersmack: ["1L1"], - sleeptalk: ["1L1"], - smog: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - spite: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - taunt: ["1L1"], - telekinesis: ["1L1"], - temperflare: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - trick: ["1L1"], - trickroom: ["1L1"], - willowisp: ["1L1"], - }, - eventData: [ - {generation: 5, level: 50, gender: "F", nature: "Modest", ivs: {spa: 31}, abilities: ["1L1"], moves: ["1L1"], pokeball: "cherishball"}, - ], - }, - axew: { - learnset: { - aerialace: ["1L1"], - aquatail: ["1L1"], - assurance: ["1L1"], - attract: ["1L1"], - bite: ["1L1"], - breakingswipe: ["1L1"], - brickbreak: ["1L1"], - bulldoze: ["1L1"], - confide: ["1L1"], - counter: ["1L1"], - crunch: ["1L1"], - cut: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dracometeor: ["1L1"], - dragoncheer: ["1L1"], - dragonclaw: ["1L1"], - dragondance: ["1L1"], - dragonpulse: ["1L1"], - dragonrage: ["1L1"], - dragontail: ["1L1"], - dualchop: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - falseswipe: ["1L1"], - firstimpression: ["1L1"], - fling: ["1L1"], - focusenergy: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - guillotine: ["1L1"], - harden: ["1L1"], - hiddenpower: ["1L1"], - honeclaws: ["1L1"], - incinerate: ["1L1"], - ironhead: ["1L1"], - irontail: ["1L1"], - laserfocus: ["1L1"], - leer: ["1L1"], - nightslash: ["1L1"], - outrage: ["1L1"], - payback: ["1L1"], - poisonjab: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - razorwind: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - reversal: ["1L1"], - roar: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - scaleshot: ["1L1"], - scaryface: ["1L1"], - scratch: ["1L1"], - secretpower: ["1L1"], - shadowclaw: ["1L1"], - shockwave: ["1L1"], - slash: ["1L1"], - sleeptalk: ["1L1"], - snarl: ["1L1"], - snore: ["1L1"], - stompingtantrum: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - superpower: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - swordsdance: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - xscissor: ["1L1"], - }, - eventData: [ - {generation: 5, level: 1, shiny: 1, gender: "M", nature: "Naive", ivs: {spe: 31}, abilities: ["1L1"], moves: ["1L1"], pokeball: "pokeball"}, - {generation: 5, level: 10, gender: "F", abilities: ["1L1"], moves: ["1L1"], pokeball: "cherishball"}, - {generation: 5, level: 30, gender: "M", nature: "Naive", abilities: ["1L1"], moves: ["1L1"], pokeball: "cherishball"}, - ], - }, - fraxure: { - learnset: { - aerialace: ["1L1"], - aquatail: ["1L1"], - assurance: ["1L1"], - attract: ["1L1"], - bite: ["1L1"], - breakingswipe: ["1L1"], - brickbreak: ["1L1"], - bulldoze: ["1L1"], - confide: ["1L1"], - crunch: ["1L1"], - cut: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dracometeor: ["1L1"], - dragoncheer: ["1L1"], - dragonclaw: ["1L1"], - dragondance: ["1L1"], - dragonpulse: ["1L1"], - dragonrage: ["1L1"], - dragontail: ["1L1"], - dualchop: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - falseswipe: ["1L1"], - fling: ["1L1"], - focusenergy: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - guillotine: ["1L1"], - hiddenpower: ["1L1"], - honeclaws: ["1L1"], - incinerate: ["1L1"], - ironhead: ["1L1"], - irontail: ["1L1"], - laserfocus: ["1L1"], - leer: ["1L1"], - lowkick: ["1L1"], - outrage: ["1L1"], - payback: ["1L1"], - poisonjab: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - reversal: ["1L1"], - roar: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - scaleshot: ["1L1"], - scaryface: ["1L1"], - scratch: ["1L1"], - secretpower: ["1L1"], - shadowclaw: ["1L1"], - shockwave: ["1L1"], - slash: ["1L1"], - sleeptalk: ["1L1"], - snarl: ["1L1"], - snore: ["1L1"], - stompingtantrum: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - superpower: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - swordsdance: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - xscissor: ["1L1"], - }, - encounters: [ - {generation: 6, level: 30}, - ], - }, - haxorus: { - learnset: { - aerialace: ["1L1"], - aquatail: ["1L1"], - assurance: ["1L1"], - attract: ["1L1"], - bite: ["1L1"], - bodyslam: ["1L1"], - breakingswipe: ["1L1"], - brickbreak: ["1L1"], - brutalswing: ["1L1"], - bulldoze: ["1L1"], - closecombat: ["1L1"], - confide: ["1L1"], - crunch: ["1L1"], - cut: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dracometeor: ["1L1"], - dragoncheer: ["1L1"], - dragonclaw: ["1L1"], - dragondance: ["1L1"], - dragonpulse: ["1L1"], - dragonrage: ["1L1"], - dragontail: ["1L1"], - dualchop: ["1L1"], - earthquake: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - falseswipe: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - focusenergy: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - guillotine: ["1L1"], - hiddenpower: ["1L1"], - honeclaws: ["1L1"], - hyperbeam: ["1L1"], - incinerate: ["1L1"], - ironhead: ["1L1"], - irontail: ["1L1"], - laserfocus: ["1L1"], - leer: ["1L1"], - lowkick: ["1L1"], - lowsweep: ["1L1"], - outrage: ["1L1"], - payback: ["1L1"], - poisonjab: ["1L1"], - protect: ["1L1"], - psychocut: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - reversal: ["1L1"], - roar: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - scaleshot: ["1L1"], - scaryface: ["1L1"], - scratch: ["1L1"], - secretpower: ["1L1"], - shadowclaw: ["1L1"], - shockwave: ["1L1"], - slash: ["1L1"], - sleeptalk: ["1L1"], - snarl: ["1L1"], - snore: ["1L1"], - stompingtantrum: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - superpower: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - swordsdance: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - xscissor: ["1L1"], - }, - eventData: [ - {generation: 5, level: 59, gender: "F", nature: "Naive", ivs: {hp: 30, atk: 30, def: 30, spa: 30, spd: 30, spe: 30}, abilities: ["1L1"], moves: ["1L1"], pokeball: "cherishball"}, - ], - }, - cubchoo: { - learnset: { - aerialace: ["1L1"], - assurance: ["1L1"], - attract: ["1L1"], - avalanche: ["1L1"], - bide: ["1L1"], - blizzard: ["1L1"], - bodypress: ["1L1"], - bodyslam: ["1L1"], - brine: ["1L1"], - bulldoze: ["1L1"], - charm: ["1L1"], - chillingwater: ["1L1"], - confide: ["1L1"], - covet: ["1L1"], - crunch: ["1L1"], - cut: ["1L1"], - dig: ["1L1"], - doubleteam: ["1L1"], - echoedvoice: ["1L1"], - encore: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - flail: ["1L1"], - fling: ["1L1"], - focuspunch: ["1L1"], - frostbreath: ["1L1"], - frustration: ["1L1"], - furyswipes: ["1L1"], - grassknot: ["1L1"], - growl: ["1L1"], - hail: ["1L1"], - heavyslam: ["1L1"], - hiddenpower: ["1L1"], - honeclaws: ["1L1"], - icebeam: ["1L1"], - icefang: ["1L1"], - icepunch: ["1L1"], - iciclespear: ["1L1"], - icywind: ["1L1"], - liquidation: ["1L1"], - lowkick: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - metalclaw: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - nightslash: ["1L1"], - playnice: ["1L1"], - playrough: ["1L1"], - powdersnow: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - secretpower: ["1L1"], - shadowclaw: ["1L1"], - sheercold: ["1L1"], - slash: ["1L1"], - sleeptalk: ["1L1"], - snarl: ["1L1"], - snore: ["1L1"], - snowscape: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - superpower: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thrash: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - waterpulse: ["1L1"], - xscissor: ["1L1"], - yawn: ["1L1"], - }, - eventData: [ - {generation: 5, level: 15, moves: ["1L1"], pokeball: "cherishball"}, - ], - }, - beartic: { - learnset: { - aerialace: ["1L1"], - aquajet: ["1L1"], - assurance: ["1L1"], - attract: ["1L1"], - avalanche: ["1L1"], - bide: ["1L1"], - blizzard: ["1L1"], - bodypress: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - brine: ["1L1"], - bulkup: ["1L1"], - bulldoze: ["1L1"], - charm: ["1L1"], - chillingwater: ["1L1"], - closecombat: ["1L1"], - confide: ["1L1"], - covet: ["1L1"], - crunch: ["1L1"], - curse: ["1L1"], - cut: ["1L1"], - dig: ["1L1"], - dive: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - earthquake: ["1L1"], - echoedvoice: ["1L1"], - encore: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - flail: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - focuspunch: ["1L1"], - frostbreath: ["1L1"], - frustration: ["1L1"], - furyswipes: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - growl: ["1L1"], - hail: ["1L1"], - hardpress: ["1L1"], - heavyslam: ["1L1"], - hiddenpower: ["1L1"], - honeclaws: ["1L1"], - hyperbeam: ["1L1"], - icebeam: ["1L1"], - icefang: ["1L1"], - icepunch: ["1L1"], - iciclecrash: ["1L1"], - iciclespear: ["1L1"], - icywind: ["1L1"], - liquidation: ["1L1"], - lowkick: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - metalclaw: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - playnice: ["1L1"], - playrough: ["1L1"], - powdersnow: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - reversal: ["1L1"], - roar: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - scaryface: ["1L1"], - secretpower: ["1L1"], - shadowclaw: ["1L1"], - sheercold: ["1L1"], - slash: ["1L1"], - sleeptalk: ["1L1"], - snarl: ["1L1"], - snore: ["1L1"], - snowscape: ["1L1"], - stoneedge: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - superpower: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - swordsdance: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thrash: ["1L1"], - throatchop: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - waterpulse: ["1L1"], - xscissor: ["1L1"], - }, - encounters: [ - {generation: 6, level: 30}, - ], - }, - cryogonal: { - learnset: { - acidarmor: ["1L1"], - acrobatics: ["1L1"], - ancientpower: ["1L1"], - attract: ["1L1"], - aurorabeam: ["1L1"], - auroraveil: ["1L1"], - avalanche: ["1L1"], - bind: ["1L1"], - blizzard: ["1L1"], - bodyslam: ["1L1"], - chillingwater: ["1L1"], - confide: ["1L1"], - confuseray: ["1L1"], - defog: ["1L1"], - doubleteam: ["1L1"], - endure: ["1L1"], - explosion: ["1L1"], - facade: ["1L1"], - flashcannon: ["1L1"], - freezedry: ["1L1"], - frostbreath: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - hail: ["1L1"], - haze: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - icebeam: ["1L1"], - iceshard: ["1L1"], - icespinner: ["1L1"], - iciclespear: ["1L1"], - icywind: ["1L1"], - irondefense: ["1L1"], - knockoff: ["1L1"], - laserfocus: ["1L1"], - lightscreen: ["1L1"], - magiccoat: ["1L1"], - mist: ["1L1"], - nightslash: ["1L1"], - poisonjab: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - rapidspin: ["1L1"], - recover: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - round: ["1L1"], - scaryface: ["1L1"], - secretpower: ["1L1"], - selfdestruct: ["1L1"], - sharpen: ["1L1"], - sheercold: ["1L1"], - signalbeam: ["1L1"], - slash: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - snowscape: ["1L1"], - solarbeam: ["1L1"], - substitute: ["1L1"], - swagger: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - toxic: ["1L1"], - tripleaxel: ["1L1"], - waterpulse: ["1L1"], - }, - }, - shelmet: { - learnset: { - absorb: ["1L1"], - acid: ["1L1"], - acidarmor: ["1L1"], - attract: ["1L1"], - batonpass: ["1L1"], - bide: ["1L1"], - bodyslam: ["1L1"], - bugbite: ["1L1"], - bugbuzz: ["1L1"], - confide: ["1L1"], - curse: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - encore: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - feint: ["1L1"], - finalgambit: ["1L1"], - frustration: ["1L1"], - gastroacid: ["1L1"], - gigadrain: ["1L1"], - guardsplit: ["1L1"], - guardswap: ["1L1"], - hiddenpower: ["1L1"], - infestation: ["1L1"], - leechlife: ["1L1"], - megadrain: ["1L1"], - mindreader: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - protect: ["1L1"], - pursuit: ["1L1"], - raindance: ["1L1"], - recover: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - round: ["1L1"], - secretpower: ["1L1"], - signalbeam: ["1L1"], - skittersmack: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - snore: ["1L1"], - spikes: ["1L1"], - strugglebug: ["1L1"], - substitute: ["1L1"], - swagger: ["1L1"], - toxic: ["1L1"], - toxicspikes: ["1L1"], - venoshock: ["1L1"], - yawn: ["1L1"], - }, - eventData: [ - {generation: 5, level: 30, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 5, level: 50, moves: ["1L1"], pokeball: "cherishball"}, - ], - }, - accelgor: { - learnset: { - absorb: ["1L1"], - acid: ["1L1"], - acidarmor: ["1L1"], - acidspray: ["1L1"], - agility: ["1L1"], - attract: ["1L1"], - batonpass: ["1L1"], - bodyslam: ["1L1"], - bugbite: ["1L1"], - bugbuzz: ["1L1"], - confide: ["1L1"], - curse: ["1L1"], - doubleteam: ["1L1"], - drainpunch: ["1L1"], - encore: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - finalgambit: ["1L1"], - focusblast: ["1L1"], - frustration: ["1L1"], - gastroacid: ["1L1"], - gigadrain: ["1L1"], - gigaimpact: ["1L1"], - guardswap: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - infestation: ["1L1"], - knockoff: ["1L1"], - laserfocus: ["1L1"], - leechlife: ["1L1"], - mefirst: ["1L1"], - megadrain: ["1L1"], - mudshot: ["1L1"], - powerswap: ["1L1"], - protect: ["1L1"], - quickattack: ["1L1"], - raindance: ["1L1"], - recover: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - reversal: ["1L1"], - round: ["1L1"], - sandstorm: ["1L1"], - secretpower: ["1L1"], - signalbeam: ["1L1"], - skittersmack: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - snore: ["1L1"], - spikes: ["1L1"], - strugglebug: ["1L1"], - substitute: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - toxic: ["1L1"], - toxicspikes: ["1L1"], - uturn: ["1L1"], - venomdrench: ["1L1"], - venoshock: ["1L1"], - watershuriken: ["1L1"], - yawn: ["1L1"], - }, - }, - stunfisk: { - learnset: { - aquatail: ["1L1"], - astonish: ["1L1"], - attract: ["1L1"], - bide: ["1L1"], - bounce: ["1L1"], - bulldoze: ["1L1"], - camouflage: ["1L1"], - charge: ["1L1"], - confide: ["1L1"], - curse: ["1L1"], - dig: ["1L1"], - discharge: ["1L1"], - doubleteam: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - eerieimpulse: ["1L1"], - electricterrain: ["1L1"], - electroweb: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fissure: ["1L1"], - flail: ["1L1"], - flash: ["1L1"], - foulplay: ["1L1"], - frustration: ["1L1"], - hiddenpower: ["1L1"], - infestation: ["1L1"], - lashout: ["1L1"], - magnetrise: ["1L1"], - mefirst: ["1L1"], - mudbomb: ["1L1"], - muddywater: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - mudsport: ["1L1"], - painsplit: ["1L1"], - payback: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - reflecttype: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - revenge: ["1L1"], - rockslide: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - sandstorm: ["1L1"], - scald: ["1L1"], - secretpower: ["1L1"], - shockwave: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - sludgewave: ["1L1"], - snore: ["1L1"], - spark: ["1L1"], - spite: ["1L1"], - stealthrock: ["1L1"], - stompingtantrum: ["1L1"], - stoneedge: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - tackle: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thundershock: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - uproar: ["1L1"], - watergun: ["1L1"], - waterpulse: ["1L1"], - yawn: ["1L1"], - }, - }, - stunfiskgalar: { - learnset: { - astonish: ["1L1"], - attract: ["1L1"], - bind: ["1L1"], - bounce: ["1L1"], - bulldoze: ["1L1"], - counter: ["1L1"], - crunch: ["1L1"], - curse: ["1L1"], - dig: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fissure: ["1L1"], - flail: ["1L1"], - flashcannon: ["1L1"], - foulplay: ["1L1"], - icefang: ["1L1"], - irondefense: ["1L1"], - lashout: ["1L1"], - metalclaw: ["1L1"], - metalsound: ["1L1"], - muddywater: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - painsplit: ["1L1"], - payback: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - reflecttype: ["1L1"], - rest: ["1L1"], - revenge: ["1L1"], - rockslide: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - sandstorm: ["1L1"], - scald: ["1L1"], - screech: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - sludgewave: ["1L1"], - snaptrap: ["1L1"], - snore: ["1L1"], - spite: ["1L1"], - stealthrock: ["1L1"], - steelbeam: ["1L1"], - stompingtantrum: ["1L1"], - stoneedge: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - surf: ["1L1"], - tackle: ["1L1"], - terrainpulse: ["1L1"], - thunderwave: ["1L1"], - uproar: ["1L1"], - watergun: ["1L1"], - yawn: ["1L1"], - }, - }, - mienfoo: { - learnset: { - acrobatics: ["1L1"], - aerialace: ["1L1"], - agility: ["1L1"], - allyswitch: ["1L1"], - attract: ["1L1"], - aurasphere: ["1L1"], - batonpass: ["1L1"], - bounce: ["1L1"], - brickbreak: ["1L1"], - bulkup: ["1L1"], - calmmind: ["1L1"], - closecombat: ["1L1"], - coaching: ["1L1"], - confide: ["1L1"], - detect: ["1L1"], - dig: ["1L1"], - doubleslap: ["1L1"], - doubleteam: ["1L1"], - drainpunch: ["1L1"], - dualchop: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fakeout: ["1L1"], - feint: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - focusenergy: ["1L1"], - focuspunch: ["1L1"], - forcepalm: ["1L1"], - frustration: ["1L1"], - furyswipes: ["1L1"], - grassknot: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - highjumpkick: ["1L1"], - honeclaws: ["1L1"], - jumpkick: ["1L1"], - knockoff: ["1L1"], - lowkick: ["1L1"], - lowsweep: ["1L1"], - meditate: ["1L1"], - mefirst: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - payback: ["1L1"], - poisonjab: ["1L1"], - pound: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - psychup: ["1L1"], - quickguard: ["1L1"], - raindance: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - revenge: ["1L1"], - reversal: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - roleplay: ["1L1"], - round: ["1L1"], - secretpower: ["1L1"], - sleeptalk: ["1L1"], - smellingsalts: ["1L1"], - snore: ["1L1"], - stoneedge: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - swordsdance: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - upperhand: ["1L1"], - uturn: ["1L1"], - vitalthrow: ["1L1"], - workup: ["1L1"], - }, - }, - mienshao: { - learnset: { - acrobatics: ["1L1"], - aerialace: ["1L1"], - agility: ["1L1"], - allyswitch: ["1L1"], - assurance: ["1L1"], - attract: ["1L1"], - aurasphere: ["1L1"], - batonpass: ["1L1"], - blazekick: ["1L1"], - bounce: ["1L1"], - brickbreak: ["1L1"], - brutalswing: ["1L1"], - bulkup: ["1L1"], - calmmind: ["1L1"], - closecombat: ["1L1"], - coaching: ["1L1"], - confide: ["1L1"], - detect: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doubleslap: ["1L1"], - doubleteam: ["1L1"], - drainpunch: ["1L1"], - dualchop: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fakeout: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - focusenergy: ["1L1"], - focuspunch: ["1L1"], - forcepalm: ["1L1"], - frustration: ["1L1"], - furyswipes: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - highjumpkick: ["1L1"], - honeclaws: ["1L1"], - hyperbeam: ["1L1"], - icespinner: ["1L1"], - jumpkick: ["1L1"], - knockoff: ["1L1"], - laserfocus: ["1L1"], - lowkick: ["1L1"], - lowsweep: ["1L1"], - meditate: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - payback: ["1L1"], - poisonjab: ["1L1"], - pound: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - psychup: ["1L1"], - quickguard: ["1L1"], - raindance: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - revenge: ["1L1"], - reversal: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - roleplay: ["1L1"], - round: ["1L1"], - secretpower: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - stoneedge: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - swordsdance: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - tripleaxel: ["1L1"], - upperhand: ["1L1"], - uturn: ["1L1"], - vacuumwave: ["1L1"], - wideguard: ["1L1"], - workup: ["1L1"], - }, - eventData: [ - {generation: 7, level: 65, gender: "M", abilities: ["1L1"], moves: ["1L1"], pokeball: "cherishball"}, - ], - }, - druddigon: { - learnset: { - aerialace: ["1L1"], - aquatail: ["1L1"], - attract: ["1L1"], - bite: ["1L1"], - bodyslam: ["1L1"], - bulldoze: ["1L1"], - chargebeam: ["1L1"], - chipaway: ["1L1"], - confide: ["1L1"], - crunch: ["1L1"], - crushclaw: ["1L1"], - cut: ["1L1"], - darkpulse: ["1L1"], - dig: ["1L1"], - doubleteam: ["1L1"], - dracometeor: ["1L1"], - dragonclaw: ["1L1"], - dragonpulse: ["1L1"], - dragonrage: ["1L1"], - dragontail: ["1L1"], - dualwingbeat: ["1L1"], - earthquake: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - feintattack: ["1L1"], - firefang: ["1L1"], - firepunch: ["1L1"], - flamethrower: ["1L1"], - flashcannon: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - glare: ["1L1"], - gunkshot: ["1L1"], - heatwave: ["1L1"], - hiddenpower: ["1L1"], - honeclaws: ["1L1"], - hyperbeam: ["1L1"], - incinerate: ["1L1"], - ironhead: ["1L1"], - irontail: ["1L1"], - lashout: ["1L1"], - leer: ["1L1"], - megapunch: ["1L1"], - metalclaw: ["1L1"], - nightslash: ["1L1"], - outrage: ["1L1"], - payback: ["1L1"], - poisontail: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - pursuit: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - revenge: ["1L1"], - roar: ["1L1"], - rockclimb: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - scaleshot: ["1L1"], - scaryface: ["1L1"], - scratch: ["1L1"], - secretpower: ["1L1"], - shadowclaw: ["1L1"], - shockwave: ["1L1"], - slash: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - smackdown: ["1L1"], - snarl: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - stealthrock: ["1L1"], - stompingtantrum: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - sunnyday: ["1L1"], - superpower: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - taunt: ["1L1"], - thunderfang: ["1L1"], - thunderpunch: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - }, - eventData: [ - {generation: 5, level: 1, shiny: true, moves: ["1L1"], pokeball: "pokeball"}, - ], - }, - golett: { - learnset: { - allyswitch: ["1L1"], - astonish: ["1L1"], - block: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - bulldoze: ["1L1"], - confide: ["1L1"], - confuseray: ["1L1"], - curse: ["1L1"], - defensecurl: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - drainpunch: ["1L1"], - dynamicpunch: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - firepunch: ["1L1"], - flash: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - focuspunch: ["1L1"], - frustration: ["1L1"], - grassknot: ["1L1"], - gravity: ["1L1"], - gyroball: ["1L1"], - hammerarm: ["1L1"], - heavyslam: ["1L1"], - helpinghand: ["1L1"], - hex: ["1L1"], - hiddenpower: ["1L1"], - icebeam: ["1L1"], - icepunch: ["1L1"], - icywind: ["1L1"], - imprison: ["1L1"], - irondefense: ["1L1"], - knockoff: ["1L1"], - lowkick: ["1L1"], - lowsweep: ["1L1"], - magiccoat: ["1L1"], - magnitude: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - mudslap: ["1L1"], - nightshade: ["1L1"], - phantomforce: ["1L1"], - poltergeist: ["1L1"], - pound: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - psychic: ["1L1"], - psychup: ["1L1"], - raindance: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rockpolish: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - sandstorm: ["1L1"], - scorchingsands: ["1L1"], - secretpower: ["1L1"], - selfdestruct: ["1L1"], - shadowball: ["1L1"], - shadowpunch: ["1L1"], - shockwave: ["1L1"], - signalbeam: ["1L1"], - sleeptalk: ["1L1"], - smackdown: ["1L1"], - snore: ["1L1"], - stealthrock: ["1L1"], - stompingtantrum: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - superpower: ["1L1"], - swagger: ["1L1"], - takedown: ["1L1"], - telekinesis: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thunderpunch: ["1L1"], - toxic: ["1L1"], - }, - }, - golurk: { - learnset: { - allyswitch: ["1L1"], - astonish: ["1L1"], - block: ["1L1"], - bodypress: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - bulldoze: ["1L1"], - chargebeam: ["1L1"], - closecombat: ["1L1"], - confide: ["1L1"], - confuseray: ["1L1"], - curse: ["1L1"], - darkestlariat: ["1L1"], - defensecurl: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - drainpunch: ["1L1"], - dynamicpunch: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - firepunch: ["1L1"], - flash: ["1L1"], - flashcannon: ["1L1"], - fling: ["1L1"], - fly: ["1L1"], - focusblast: ["1L1"], - focuspunch: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - gravity: ["1L1"], - gyroball: ["1L1"], - hammerarm: ["1L1"], - hardpress: ["1L1"], - heatcrash: ["1L1"], - heavyslam: ["1L1"], - helpinghand: ["1L1"], - hex: ["1L1"], - hiddenpower: ["1L1"], - highhorsepower: ["1L1"], - hyperbeam: ["1L1"], - icebeam: ["1L1"], - icepunch: ["1L1"], - icywind: ["1L1"], - imprison: ["1L1"], - irondefense: ["1L1"], - knockoff: ["1L1"], - lowkick: ["1L1"], - lowsweep: ["1L1"], - magiccoat: ["1L1"], - magnitude: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - mudslap: ["1L1"], - nightshade: ["1L1"], - phantomforce: ["1L1"], - poltergeist: ["1L1"], - pound: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - psychic: ["1L1"], - psychup: ["1L1"], - raindance: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rockpolish: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - sandstorm: ["1L1"], - scorchingsands: ["1L1"], - secretpower: ["1L1"], - selfdestruct: ["1L1"], - shadowball: ["1L1"], - shadowpunch: ["1L1"], - shockwave: ["1L1"], - signalbeam: ["1L1"], - sleeptalk: ["1L1"], - smackdown: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - stealthrock: ["1L1"], - stompingtantrum: ["1L1"], - stoneedge: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - superpower: ["1L1"], - swagger: ["1L1"], - takedown: ["1L1"], - telekinesis: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thunderbolt: ["1L1"], - thunderpunch: ["1L1"], - toxic: ["1L1"], - trick: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 5, level: 70, shiny: true, abilities: ["1L1"], moves: ["1L1"], pokeball: "cherishball"}, - ], - encounters: [ - {generation: 6, level: 30}, - ], - }, - pawniard: { - learnset: { - aerialace: ["1L1"], - airslash: ["1L1"], - assurance: ["1L1"], - attract: ["1L1"], - beatup: ["1L1"], - brickbreak: ["1L1"], - confide: ["1L1"], - cut: ["1L1"], - darkpulse: ["1L1"], - dig: ["1L1"], - doubleteam: ["1L1"], - dualchop: ["1L1"], - embargo: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - falseswipe: ["1L1"], - feintattack: ["1L1"], - flashcannon: ["1L1"], - fling: ["1L1"], - foulplay: ["1L1"], - frustration: ["1L1"], - furycutter: ["1L1"], - grassknot: ["1L1"], - guillotine: ["1L1"], - headbutt: ["1L1"], - hiddenpower: ["1L1"], - honeclaws: ["1L1"], - irondefense: ["1L1"], - ironhead: ["1L1"], - knockoff: ["1L1"], - laserfocus: ["1L1"], - lashout: ["1L1"], - leer: ["1L1"], - lowkick: ["1L1"], - lowsweep: ["1L1"], - magnetrise: ["1L1"], - meanlook: ["1L1"], - metalclaw: ["1L1"], - metalsound: ["1L1"], - nightslash: ["1L1"], - payback: ["1L1"], - poisonjab: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - psychocut: ["1L1"], - pursuit: ["1L1"], - quickguard: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - revenge: ["1L1"], - rockpolish: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - roleplay: ["1L1"], - round: ["1L1"], - sandstorm: ["1L1"], - scaryface: ["1L1"], - scratch: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - shadowclaw: ["1L1"], - slash: ["1L1"], - sleeptalk: ["1L1"], - snarl: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - spite: ["1L1"], - stealthrock: ["1L1"], - steelbeam: ["1L1"], - stoneedge: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - swagger: ["1L1"], - swordsdance: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thunderwave: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - xscissor: ["1L1"], - }, - }, - bisharp: { - learnset: { - aerialace: ["1L1"], - airslash: ["1L1"], - assurance: ["1L1"], - attract: ["1L1"], - beatup: ["1L1"], - brickbreak: ["1L1"], - confide: ["1L1"], - cut: ["1L1"], - darkpulse: ["1L1"], - dig: ["1L1"], - doubleteam: ["1L1"], - dualchop: ["1L1"], - embargo: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - falseswipe: ["1L1"], - feintattack: ["1L1"], - flashcannon: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - foulplay: ["1L1"], - frustration: ["1L1"], - furycutter: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - guillotine: ["1L1"], - hiddenpower: ["1L1"], - honeclaws: ["1L1"], - hyperbeam: ["1L1"], - irondefense: ["1L1"], - ironhead: ["1L1"], - knockoff: ["1L1"], - laserfocus: ["1L1"], - lashout: ["1L1"], - leer: ["1L1"], - lowkick: ["1L1"], - lowsweep: ["1L1"], - magnetrise: ["1L1"], - metalburst: ["1L1"], - metalclaw: ["1L1"], - metalsound: ["1L1"], - nightslash: ["1L1"], - payback: ["1L1"], - poisonjab: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - psychocut: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - revenge: ["1L1"], - reversal: ["1L1"], - rockpolish: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - roleplay: ["1L1"], - round: ["1L1"], - sandstorm: ["1L1"], - scaryface: ["1L1"], - scratch: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - shadowclaw: ["1L1"], - slash: ["1L1"], - sleeptalk: ["1L1"], - snarl: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - spite: ["1L1"], - stealthrock: ["1L1"], - steelbeam: ["1L1"], - stoneedge: ["1L1"], - substitute: ["1L1"], - swagger: ["1L1"], - swordsdance: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - throatchop: ["1L1"], - thunderwave: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - xscissor: ["1L1"], - }, - encounters: [ - {generation: 7, level: 33}, - ], - }, - kingambit: { - learnset: { - aerialace: ["1L1"], - airslash: ["1L1"], - assurance: ["1L1"], - brickbreak: ["1L1"], - darkpulse: ["1L1"], - dig: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - falseswipe: ["1L1"], - flashcannon: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - foulplay: ["1L1"], - furycutter: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - guillotine: ["1L1"], - hyperbeam: ["1L1"], - irondefense: ["1L1"], - ironhead: ["1L1"], - kowtowcleave: ["1L1"], - lashout: ["1L1"], - leer: ["1L1"], - lowkick: ["1L1"], - lowsweep: ["1L1"], - metalburst: ["1L1"], - metalclaw: ["1L1"], - metalsound: ["1L1"], - nightslash: ["1L1"], - poisonjab: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - reversal: ["1L1"], - rocktomb: ["1L1"], - sandstorm: ["1L1"], - scaryface: ["1L1"], - scratch: ["1L1"], - shadowclaw: ["1L1"], - slash: ["1L1"], - sleeptalk: ["1L1"], - snarl: ["1L1"], - spite: ["1L1"], - stealthrock: ["1L1"], - steelbeam: ["1L1"], - stoneedge: ["1L1"], - substitute: ["1L1"], - swordsdance: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - throatchop: ["1L1"], - thunderwave: ["1L1"], - torment: ["1L1"], - xscissor: ["1L1"], - zenheadbutt: ["1L1"], - }, - }, - bouffalant: { - learnset: { - aerialace: ["1L1"], - amnesia: ["1L1"], - assurance: ["1L1"], - attract: ["1L1"], - belch: ["1L1"], - bodyslam: ["1L1"], - bulldoze: ["1L1"], - closecombat: ["1L1"], - confide: ["1L1"], - cottonguard: ["1L1"], - cut: ["1L1"], - doubleteam: ["1L1"], - earthquake: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - focusenergy: ["1L1"], - frustration: ["1L1"], - furyattack: ["1L1"], - gigaimpact: ["1L1"], - headbutt: ["1L1"], - headcharge: ["1L1"], - hiddenpower: ["1L1"], - highhorsepower: ["1L1"], - hornattack: ["1L1"], - ironhead: ["1L1"], - lashout: ["1L1"], - leer: ["1L1"], - megahorn: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - outrage: ["1L1"], - payback: ["1L1"], - poisonjab: ["1L1"], - protect: ["1L1"], - pursuit: ["1L1"], - rage: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - revenge: ["1L1"], - reversal: ["1L1"], - rockclimb: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - scaryface: ["1L1"], - secretpower: ["1L1"], - skullbash: ["1L1"], - sleeptalk: ["1L1"], - smartstrike: ["1L1"], - snore: ["1L1"], - stomp: ["1L1"], - stompingtantrum: ["1L1"], - stoneedge: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - superpower: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - swordsdance: ["1L1"], - tackle: ["1L1"], - taunt: ["1L1"], - thrash: ["1L1"], - throatchop: ["1L1"], - toxic: ["1L1"], - uproar: ["1L1"], - wildcharge: ["1L1"], - workup: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 6, level: 50, nature: "Adamant", ivs: {hp: 31, atk: 31}, isHidden: true, moves: ["1L1"], pokeball: "cherishball"}, - ], - }, - rufflet: { - learnset: { - acrobatics: ["1L1"], - aerialace: ["1L1"], - agility: ["1L1"], - aircutter: ["1L1"], - airslash: ["1L1"], - assurance: ["1L1"], - attract: ["1L1"], - bodyslam: ["1L1"], - bravebird: ["1L1"], - bulkup: ["1L1"], - closecombat: ["1L1"], - confide: ["1L1"], - crushclaw: ["1L1"], - cut: ["1L1"], - defog: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dualwingbeat: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - featherdance: ["1L1"], - fly: ["1L1"], - frustration: ["1L1"], - furyattack: ["1L1"], - heatwave: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - honeclaws: ["1L1"], - hurricane: ["1L1"], - leer: ["1L1"], - peck: ["1L1"], - pluck: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - roost: ["1L1"], - round: ["1L1"], - scaryface: ["1L1"], - secretpower: ["1L1"], - shadowclaw: ["1L1"], - skydrop: ["1L1"], - slash: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - steelwing: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - superpower: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - tailwind: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thrash: ["1L1"], - toxic: ["1L1"], - uturn: ["1L1"], - whirlwind: ["1L1"], - wingattack: ["1L1"], - workup: ["1L1"], - zenheadbutt: ["1L1"], - }, - }, - braviary: { - learnset: { - acrobatics: ["1L1"], - aerialace: ["1L1"], - agility: ["1L1"], - aircutter: ["1L1"], - airslash: ["1L1"], - assurance: ["1L1"], - attract: ["1L1"], - bodyslam: ["1L1"], - bravebird: ["1L1"], - bulkup: ["1L1"], - closecombat: ["1L1"], - confide: ["1L1"], - crushclaw: ["1L1"], - cut: ["1L1"], - defog: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dualwingbeat: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - featherdance: ["1L1"], - fly: ["1L1"], - frustration: ["1L1"], - furyattack: ["1L1"], - gigaimpact: ["1L1"], - heatwave: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - honeclaws: ["1L1"], - hurricane: ["1L1"], - hyperbeam: ["1L1"], - ironhead: ["1L1"], - laserfocus: ["1L1"], - leer: ["1L1"], - metalclaw: ["1L1"], - peck: ["1L1"], - pluck: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - reversal: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - roost: ["1L1"], - round: ["1L1"], - scaryface: ["1L1"], - secretpower: ["1L1"], - shadowclaw: ["1L1"], - skyattack: ["1L1"], - skydrop: ["1L1"], - slash: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - steelwing: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - superpower: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - tailwind: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thrash: ["1L1"], - toxic: ["1L1"], - uturn: ["1L1"], - whirlwind: ["1L1"], - wingattack: ["1L1"], - workup: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 5, level: 25, gender: "M", isHidden: true, moves: ["1L1"]}, - ], - encounters: [ - {generation: 6, level: 45}, - ], - }, - braviaryhisui: { - learnset: { - acrobatics: ["1L1"], - aerialace: ["1L1"], - agility: ["1L1"], - aircutter: ["1L1"], - airslash: ["1L1"], - bodyslam: ["1L1"], - bravebird: ["1L1"], - bulkup: ["1L1"], - calmmind: ["1L1"], - closecombat: ["1L1"], - confuseray: ["1L1"], - crushclaw: ["1L1"], - dazzlinggleam: ["1L1"], - defog: ["1L1"], - doubleedge: ["1L1"], - dualwingbeat: ["1L1"], - endure: ["1L1"], - esperwing: ["1L1"], - expandingforce: ["1L1"], - facade: ["1L1"], - featherdance: ["1L1"], - fly: ["1L1"], - futuresight: ["1L1"], - gigaimpact: ["1L1"], - heatwave: ["1L1"], - helpinghand: ["1L1"], - honeclaws: ["1L1"], - hurricane: ["1L1"], - hyperbeam: ["1L1"], - hypervoice: ["1L1"], - icywind: ["1L1"], - leer: ["1L1"], - metalclaw: ["1L1"], - nightshade: ["1L1"], - peck: ["1L1"], - protect: ["1L1"], - psybeam: ["1L1"], - psychic: ["1L1"], - psychicnoise: ["1L1"], - psychicterrain: ["1L1"], - psychup: ["1L1"], - psyshock: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - reversal: ["1L1"], - rockslide: ["1L1"], - rocktomb: ["1L1"], - scaryface: ["1L1"], - shadowball: ["1L1"], - shadowclaw: ["1L1"], - skyattack: ["1L1"], - slash: ["1L1"], - sleeptalk: ["1L1"], - snarl: ["1L1"], - storedpower: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - superpower: ["1L1"], - swift: ["1L1"], - tailwind: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thrash: ["1L1"], - uturn: ["1L1"], - vacuumwave: ["1L1"], - whirlwind: ["1L1"], - wingattack: ["1L1"], - zenheadbutt: ["1L1"], - }, - }, - vullaby: { - learnset: { - aerialace: ["1L1"], - aircutter: ["1L1"], - airslash: ["1L1"], - assurance: ["1L1"], - attract: ["1L1"], - block: ["1L1"], - bravebird: ["1L1"], - confide: ["1L1"], - cut: ["1L1"], - darkpulse: ["1L1"], - defog: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dualwingbeat: ["1L1"], - embargo: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - faketears: ["1L1"], - featherdance: ["1L1"], - feintattack: ["1L1"], - flatter: ["1L1"], - fly: ["1L1"], - foulplay: ["1L1"], - frustration: ["1L1"], - furyattack: ["1L1"], - gust: ["1L1"], - heatwave: ["1L1"], - hiddenpower: ["1L1"], - incinerate: ["1L1"], - irondefense: ["1L1"], - knockoff: ["1L1"], - lashout: ["1L1"], - leer: ["1L1"], - meanlook: ["1L1"], - mirrormove: ["1L1"], - nastyplot: ["1L1"], - payback: ["1L1"], - pluck: ["1L1"], - protect: ["1L1"], - psychup: ["1L1"], - punishment: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - roost: ["1L1"], - round: ["1L1"], - scaryface: ["1L1"], - secretpower: ["1L1"], - shadowball: ["1L1"], - sleeptalk: ["1L1"], - snarl: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - spite: ["1L1"], - steelwing: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - tailwind: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - throatchop: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - uproar: ["1L1"], - uturn: ["1L1"], - whirlwind: ["1L1"], - }, - }, - mandibuzz: { - learnset: { - acrobatics: ["1L1"], - aerialace: ["1L1"], - aircutter: ["1L1"], - airslash: ["1L1"], - assurance: ["1L1"], - attract: ["1L1"], - block: ["1L1"], - bonerush: ["1L1"], - bravebird: ["1L1"], - confide: ["1L1"], - cut: ["1L1"], - darkpulse: ["1L1"], - defog: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dualwingbeat: ["1L1"], - embargo: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - faketears: ["1L1"], - featherdance: ["1L1"], - feintattack: ["1L1"], - flatter: ["1L1"], - fly: ["1L1"], - foulplay: ["1L1"], - frustration: ["1L1"], - furyattack: ["1L1"], - gigaimpact: ["1L1"], - gust: ["1L1"], - heatwave: ["1L1"], - hiddenpower: ["1L1"], - hurricane: ["1L1"], - hyperbeam: ["1L1"], - incinerate: ["1L1"], - irondefense: ["1L1"], - knockoff: ["1L1"], - lashout: ["1L1"], - leer: ["1L1"], - mirrormove: ["1L1"], - nastyplot: ["1L1"], - payback: ["1L1"], - pluck: ["1L1"], - protect: ["1L1"], - psychup: ["1L1"], - punishment: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - roost: ["1L1"], - round: ["1L1"], - sandstorm: ["1L1"], - scaryface: ["1L1"], - secretpower: ["1L1"], - shadowball: ["1L1"], - skyattack: ["1L1"], - sleeptalk: ["1L1"], - snarl: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - spite: ["1L1"], - steelwing: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - tailwind: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - throatchop: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - uproar: ["1L1"], - uturn: ["1L1"], - whirlwind: ["1L1"], - }, - eventData: [ - {generation: 5, level: 25, gender: "F", isHidden: true, moves: ["1L1"]}, - ], - }, - heatmor: { - learnset: { - aerialace: ["1L1"], - amnesia: ["1L1"], - attract: ["1L1"], - belch: ["1L1"], - bind: ["1L1"], - bodyslam: ["1L1"], - brutalswing: ["1L1"], - bugbite: ["1L1"], - burningjealousy: ["1L1"], - confide: ["1L1"], - curse: ["1L1"], - cut: ["1L1"], - dig: ["1L1"], - doubleteam: ["1L1"], - drainpunch: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - feintattack: ["1L1"], - fireblast: ["1L1"], - firelash: ["1L1"], - firepunch: ["1L1"], - firespin: ["1L1"], - flameburst: ["1L1"], - flamethrower: ["1L1"], - flareblitz: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - focuspunch: ["1L1"], - frustration: ["1L1"], - furyswipes: ["1L1"], - gastroacid: ["1L1"], - gigadrain: ["1L1"], - gigaimpact: ["1L1"], - heatwave: ["1L1"], - hiddenpower: ["1L1"], - honeclaws: ["1L1"], - incinerate: ["1L1"], - inferno: ["1L1"], - knockoff: ["1L1"], - lick: ["1L1"], - lowkick: ["1L1"], - nightslash: ["1L1"], - odorsleuth: ["1L1"], - overheat: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - pursuit: ["1L1"], - raindance: ["1L1"], - recycle: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - scorchingsands: ["1L1"], - secretpower: ["1L1"], - shadowclaw: ["1L1"], - slash: ["1L1"], - sleeptalk: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - spitup: ["1L1"], - stockpile: ["1L1"], - stompingtantrum: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - sunnyday: ["1L1"], - superpower: ["1L1"], - swagger: ["1L1"], - swallow: ["1L1"], - tackle: ["1L1"], - taunt: ["1L1"], - thief: ["1L1"], - throatchop: ["1L1"], - thunderpunch: ["1L1"], - tickle: ["1L1"], - toxic: ["1L1"], - willowisp: ["1L1"], - wrap: ["1L1"], - }, - }, - durant: { - learnset: { - aerialace: ["1L1"], - agility: ["1L1"], - attract: ["1L1"], - batonpass: ["1L1"], - beatup: ["1L1"], - bite: ["1L1"], - bugbite: ["1L1"], - confide: ["1L1"], - crunch: ["1L1"], - cut: ["1L1"], - dig: ["1L1"], - doubleteam: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - entrainment: ["1L1"], - facade: ["1L1"], - feintattack: ["1L1"], - firstimpression: ["1L1"], - flail: ["1L1"], - flashcannon: ["1L1"], - frustration: ["1L1"], - furycutter: ["1L1"], - gigaimpact: ["1L1"], - guillotine: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - honeclaws: ["1L1"], - infestation: ["1L1"], - irondefense: ["1L1"], - ironhead: ["1L1"], - metalburst: ["1L1"], - metalclaw: ["1L1"], - metalsound: ["1L1"], - protect: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - rockclimb: ["1L1"], - rockpolish: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - sandattack: ["1L1"], - sandstorm: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - shadowclaw: ["1L1"], - skittersmack: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - steelbeam: ["1L1"], - stompingtantrum: ["1L1"], - stoneedge: ["1L1"], - strength: ["1L1"], - strugglebug: ["1L1"], - substitute: ["1L1"], - superpower: ["1L1"], - swagger: ["1L1"], - thunderfang: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - visegrip: ["1L1"], - xscissor: ["1L1"], - }, - }, - deino: { - learnset: { - aquatail: ["1L1"], - assurance: ["1L1"], - astonish: ["1L1"], - attract: ["1L1"], - belch: ["1L1"], - bite: ["1L1"], - bodyslam: ["1L1"], - confide: ["1L1"], - crunch: ["1L1"], - darkpulse: ["1L1"], - doublehit: ["1L1"], - doubleteam: ["1L1"], - dracometeor: ["1L1"], - dragonbreath: ["1L1"], - dragoncheer: ["1L1"], - dragonpulse: ["1L1"], - dragonrage: ["1L1"], - dragonrush: ["1L1"], - dragontail: ["1L1"], - earthpower: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - firefang: ["1L1"], - focusenergy: ["1L1"], - frustration: ["1L1"], - headbutt: ["1L1"], - headsmash: ["1L1"], - hiddenpower: ["1L1"], - hypervoice: ["1L1"], - icefang: ["1L1"], - incinerate: ["1L1"], - nastyplot: ["1L1"], - outrage: ["1L1"], - protect: ["1L1"], - psychup: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roar: ["1L1"], - rocksmash: ["1L1"], - round: ["1L1"], - scaryface: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - shockwave: ["1L1"], - slam: ["1L1"], - sleeptalk: ["1L1"], - snarl: ["1L1"], - snore: ["1L1"], - spite: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - superpower: ["1L1"], - swagger: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thunderfang: ["1L1"], - thunderwave: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - uproar: ["1L1"], - workup: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 5, level: 1, shiny: true, moves: ["1L1"], pokeball: "pokeball"}, - ], - }, - zweilous: { - learnset: { - aquatail: ["1L1"], - assurance: ["1L1"], - attract: ["1L1"], - beatup: ["1L1"], - bite: ["1L1"], - bodyslam: ["1L1"], - confide: ["1L1"], - crunch: ["1L1"], - darkpulse: ["1L1"], - doublehit: ["1L1"], - doubleteam: ["1L1"], - dracometeor: ["1L1"], - dragonbreath: ["1L1"], - dragoncheer: ["1L1"], - dragonpulse: ["1L1"], - dragonrage: ["1L1"], - dragonrush: ["1L1"], - dragontail: ["1L1"], - earthpower: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - firefang: ["1L1"], - focusenergy: ["1L1"], - frustration: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hypervoice: ["1L1"], - icefang: ["1L1"], - incinerate: ["1L1"], - lashout: ["1L1"], - nastyplot: ["1L1"], - outrage: ["1L1"], - protect: ["1L1"], - psychup: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roar: ["1L1"], - rocksmash: ["1L1"], - round: ["1L1"], - scaryface: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - shockwave: ["1L1"], - slam: ["1L1"], - sleeptalk: ["1L1"], - snarl: ["1L1"], - snore: ["1L1"], - spite: ["1L1"], - stompingtantrum: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - superpower: ["1L1"], - swagger: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thunderfang: ["1L1"], - thunderwave: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - uproar: ["1L1"], - workup: ["1L1"], - zenheadbutt: ["1L1"], - }, - encounters: [ - {generation: 5, level: 49}, - ], - }, - hydreigon: { - learnset: { - acrobatics: ["1L1"], - aquatail: ["1L1"], - assurance: ["1L1"], - attract: ["1L1"], - beatup: ["1L1"], - bite: ["1L1"], - bodyslam: ["1L1"], - breakingswipe: ["1L1"], - brutalswing: ["1L1"], - bulldoze: ["1L1"], - chargebeam: ["1L1"], - confide: ["1L1"], - crunch: ["1L1"], - darkpulse: ["1L1"], - defog: ["1L1"], - doublehit: ["1L1"], - doubleteam: ["1L1"], - dracometeor: ["1L1"], - dragonbreath: ["1L1"], - dragoncheer: ["1L1"], - dragondance: ["1L1"], - dragonpulse: ["1L1"], - dragonrage: ["1L1"], - dragonrush: ["1L1"], - dragontail: ["1L1"], - dualwingbeat: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - echoedvoice: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fireblast: ["1L1"], - firefang: ["1L1"], - firespin: ["1L1"], - flamethrower: ["1L1"], - flashcannon: ["1L1"], - fly: ["1L1"], - focusblast: ["1L1"], - focusenergy: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - headbutt: ["1L1"], - heatwave: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hydropump: ["1L1"], - hyperbeam: ["1L1"], - hypervoice: ["1L1"], - icefang: ["1L1"], - incinerate: ["1L1"], - irontail: ["1L1"], - lashout: ["1L1"], - nastyplot: ["1L1"], - outrage: ["1L1"], - payback: ["1L1"], - protect: ["1L1"], - psychup: ["1L1"], - raindance: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roar: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - roost: ["1L1"], - round: ["1L1"], - scaleshot: ["1L1"], - scaryface: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - shockwave: ["1L1"], - signalbeam: ["1L1"], - slam: ["1L1"], - sleeptalk: ["1L1"], - snarl: ["1L1"], - snore: ["1L1"], - spite: ["1L1"], - stealthrock: ["1L1"], - steelwing: ["1L1"], - stompingtantrum: ["1L1"], - stoneedge: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - superpower: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - tackle: ["1L1"], - tailwind: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - throatchop: ["1L1"], - thunderfang: ["1L1"], - thunderwave: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - triattack: ["1L1"], - uproar: ["1L1"], - uturn: ["1L1"], - workup: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 5, level: 70, shiny: true, gender: "M", moves: ["1L1"], pokeball: "cherishball"}, - {generation: 6, level: 52, gender: "M", perfectIVs: 2, moves: ["1L1"], pokeball: "cherishball"}, - ], - encounters: [ - {generation: 6, level: 59}, - ], - }, - larvesta: { - learnset: { - absorb: ["1L1"], - acrobatics: ["1L1"], - amnesia: ["1L1"], - attract: ["1L1"], - bodyslam: ["1L1"], - bugbite: ["1L1"], - bugbuzz: ["1L1"], - calmmind: ["1L1"], - confide: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - ember: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fireblast: ["1L1"], - firespin: ["1L1"], - flamecharge: ["1L1"], - flamethrower: ["1L1"], - flamewheel: ["1L1"], - flareblitz: ["1L1"], - foresight: ["1L1"], - frustration: ["1L1"], - gigadrain: ["1L1"], - harden: ["1L1"], - heatwave: ["1L1"], - hiddenpower: ["1L1"], - incinerate: ["1L1"], - leechlife: ["1L1"], - lightscreen: ["1L1"], - lunge: ["1L1"], - magnetrise: ["1L1"], - morningsun: ["1L1"], - overheat: ["1L1"], - pounce: ["1L1"], - protect: ["1L1"], - psychic: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - signalbeam: ["1L1"], - skittersmack: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - stringshot: ["1L1"], - strugglebug: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thrash: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - uturn: ["1L1"], - wildcharge: ["1L1"], - willowisp: ["1L1"], - zenheadbutt: ["1L1"], - }, - }, - volcarona: { - learnset: { - absorb: ["1L1"], - acrobatics: ["1L1"], - aerialace: ["1L1"], - aircutter: ["1L1"], - airslash: ["1L1"], - amnesia: ["1L1"], - attract: ["1L1"], - bodyslam: ["1L1"], - bugbite: ["1L1"], - bugbuzz: ["1L1"], - calmmind: ["1L1"], - confide: ["1L1"], - defog: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dualwingbeat: ["1L1"], - ember: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fierydance: ["1L1"], - fireblast: ["1L1"], - firespin: ["1L1"], - flamecharge: ["1L1"], - flamethrower: ["1L1"], - flamewheel: ["1L1"], - flareblitz: ["1L1"], - fly: ["1L1"], - frustration: ["1L1"], - gigadrain: ["1L1"], - gigaimpact: ["1L1"], - gust: ["1L1"], - heatwave: ["1L1"], - hiddenpower: ["1L1"], - hurricane: ["1L1"], - hyperbeam: ["1L1"], - incinerate: ["1L1"], - leechlife: ["1L1"], - lightscreen: ["1L1"], - lunge: ["1L1"], - magnetrise: ["1L1"], - mysticalfire: ["1L1"], - overheat: ["1L1"], - poisonjab: ["1L1"], - pounce: ["1L1"], - protect: ["1L1"], - psychic: ["1L1"], - quiverdance: ["1L1"], - ragepowder: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roost: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - signalbeam: ["1L1"], - silverwind: ["1L1"], - skittersmack: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - stringshot: ["1L1"], - strugglebug: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - tailwind: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thrash: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - uturn: ["1L1"], - whirlwind: ["1L1"], - wildcharge: ["1L1"], - willowisp: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 5, level: 35, moves: ["1L1"]}, - {generation: 5, level: 77, gender: "M", nature: "Calm", ivs: {hp: 30, atk: 30, def: 30, spa: 30, spd: 30, spe: 30}, moves: ["1L1"], pokeball: "cherishball"}, - ], - encounters: [ - {generation: 7, level: 41}, - ], - }, - cobalion: { - learnset: { - aerialace: ["1L1"], - airslash: ["1L1"], - aurasphere: ["1L1"], - block: ["1L1"], - bodypress: ["1L1"], - bodyslam: ["1L1"], - bounce: ["1L1"], - brickbreak: ["1L1"], - calmmind: ["1L1"], - closecombat: ["1L1"], - coaching: ["1L1"], - confide: ["1L1"], - cut: ["1L1"], - doubleedge: ["1L1"], - doublekick: ["1L1"], - doubleteam: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - falseswipe: ["1L1"], - flashcannon: ["1L1"], - focusblast: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - heavyslam: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - honeclaws: ["1L1"], - hyperbeam: ["1L1"], - irondefense: ["1L1"], - ironhead: ["1L1"], - laserfocus: ["1L1"], - leer: ["1L1"], - magnetrise: ["1L1"], - megahorn: ["1L1"], - metalburst: ["1L1"], - metalclaw: ["1L1"], - metalsound: ["1L1"], - poisonjab: ["1L1"], - protect: ["1L1"], - psychup: ["1L1"], - quickattack: ["1L1"], - quickguard: ["1L1"], - raindance: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - revenge: ["1L1"], - reversal: ["1L1"], - roar: ["1L1"], - rockpolish: ["1L1"], - rocksmash: ["1L1"], - round: ["1L1"], - sacredsword: ["1L1"], - safeguard: ["1L1"], - sandstorm: ["1L1"], - scaryface: ["1L1"], - secretpower: ["1L1"], - sleeptalk: ["1L1"], - smartstrike: ["1L1"], - snore: ["1L1"], - stealthrock: ["1L1"], - steelbeam: ["1L1"], - stoneedge: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - superpower: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - swordsdance: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - upperhand: ["1L1"], - vacuumwave: ["1L1"], - voltswitch: ["1L1"], - workup: ["1L1"], - xscissor: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 5, level: 42, shiny: 1, moves: ["1L1"]}, - {generation: 5, level: 45, shiny: 1, moves: ["1L1"]}, - {generation: 5, level: 65, shiny: 1, moves: ["1L1"]}, - {generation: 6, level: 50, shiny: 1, moves: ["1L1"]}, - {generation: 7, level: 60, shiny: 1, moves: ["1L1"]}, - {generation: 8, level: 70, shiny: 1, moves: ["1L1"]}, - ], - eventOnly: false, - }, - terrakion: { - learnset: { - aerialace: ["1L1"], - airslash: ["1L1"], - aurasphere: ["1L1"], - block: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - bulldoze: ["1L1"], - calmmind: ["1L1"], - closecombat: ["1L1"], - coaching: ["1L1"], - confide: ["1L1"], - cut: ["1L1"], - doubleedge: ["1L1"], - doublekick: ["1L1"], - doubleteam: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - falseswipe: ["1L1"], - focusblast: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - highhorsepower: ["1L1"], - hyperbeam: ["1L1"], - ironhead: ["1L1"], - laserfocus: ["1L1"], - leer: ["1L1"], - megahorn: ["1L1"], - poisonjab: ["1L1"], - protect: ["1L1"], - psychup: ["1L1"], - quickattack: ["1L1"], - quickguard: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - revenge: ["1L1"], - reversal: ["1L1"], - roar: ["1L1"], - rockblast: ["1L1"], - rockpolish: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - sacredsword: ["1L1"], - safeguard: ["1L1"], - sandstorm: ["1L1"], - scaryface: ["1L1"], - secretpower: ["1L1"], - sleeptalk: ["1L1"], - smackdown: ["1L1"], - smartstrike: ["1L1"], - snore: ["1L1"], - stealthrock: ["1L1"], - stompingtantrum: ["1L1"], - stoneedge: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - superpower: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - swordsdance: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - toxic: ["1L1"], - upperhand: ["1L1"], - workup: ["1L1"], - xscissor: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 5, level: 42, shiny: 1, moves: ["1L1"]}, - {generation: 5, level: 45, shiny: 1, moves: ["1L1"]}, - {generation: 5, level: 65, shiny: 1, moves: ["1L1"]}, - {generation: 6, level: 50, shiny: 1, moves: ["1L1"]}, - {generation: 7, level: 60, shiny: 1, moves: ["1L1"]}, - {generation: 8, level: 70, shiny: 1, moves: ["1L1"]}, - ], - eventOnly: false, - }, - virizion: { - learnset: { - aerialace: ["1L1"], - airslash: ["1L1"], - aurasphere: ["1L1"], - block: ["1L1"], - bodyslam: ["1L1"], - bounce: ["1L1"], - brickbreak: ["1L1"], - bulletseed: ["1L1"], - calmmind: ["1L1"], - closecombat: ["1L1"], - coaching: ["1L1"], - confide: ["1L1"], - cut: ["1L1"], - doubleedge: ["1L1"], - doublekick: ["1L1"], - doubleteam: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - falseswipe: ["1L1"], - flash: ["1L1"], - focusblast: ["1L1"], - frustration: ["1L1"], - gigadrain: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - grassyglide: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - laserfocus: ["1L1"], - leafblade: ["1L1"], - leafstorm: ["1L1"], - leer: ["1L1"], - lightscreen: ["1L1"], - magicalleaf: ["1L1"], - megahorn: ["1L1"], - naturepower: ["1L1"], - protect: ["1L1"], - psychup: ["1L1"], - quickattack: ["1L1"], - quickguard: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - revenge: ["1L1"], - reversal: ["1L1"], - roar: ["1L1"], - rocksmash: ["1L1"], - round: ["1L1"], - sacredsword: ["1L1"], - safeguard: ["1L1"], - scaryface: ["1L1"], - secretpower: ["1L1"], - seedbomb: ["1L1"], - sleeptalk: ["1L1"], - smartstrike: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - solarblade: ["1L1"], - stoneedge: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - superpower: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - swordsdance: ["1L1"], - synthesis: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - upperhand: ["1L1"], - vacuumwave: ["1L1"], - workup: ["1L1"], - worryseed: ["1L1"], - xscissor: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 5, level: 42, shiny: 1, moves: ["1L1"]}, - {generation: 5, level: 45, shiny: 1, moves: ["1L1"]}, - {generation: 5, level: 65, shiny: 1, moves: ["1L1"]}, - {generation: 6, level: 50, shiny: 1, moves: ["1L1"]}, - {generation: 7, level: 60, shiny: 1, moves: ["1L1"]}, - {generation: 8, level: 70, shiny: 1, moves: ["1L1"]}, - ], - eventOnly: false, - }, - tornadus: { - learnset: { - acrobatics: ["1L1"], - aerialace: ["1L1"], - agility: ["1L1"], - aircutter: ["1L1"], - airslash: ["1L1"], - assurance: ["1L1"], - astonish: ["1L1"], - attract: ["1L1"], - bite: ["1L1"], - bleakwindstorm: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - brutalswing: ["1L1"], - bulkup: ["1L1"], - chillingwater: ["1L1"], - confide: ["1L1"], - crunch: ["1L1"], - darkpulse: ["1L1"], - defog: ["1L1"], - doubleteam: ["1L1"], - embargo: ["1L1"], - endure: ["1L1"], - extrasensory: ["1L1"], - facade: ["1L1"], - fling: ["1L1"], - fly: ["1L1"], - focusblast: ["1L1"], - foulplay: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - gust: ["1L1"], - hammerarm: ["1L1"], - heatwave: ["1L1"], - hiddenpower: ["1L1"], - hurricane: ["1L1"], - hyperbeam: ["1L1"], - icywind: ["1L1"], - incinerate: ["1L1"], - irontail: ["1L1"], - knockoff: ["1L1"], - lashout: ["1L1"], - leer: ["1L1"], - metronome: ["1L1"], - nastyplot: ["1L1"], - payback: ["1L1"], - protect: ["1L1"], - psychic: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - revenge: ["1L1"], - reversal: ["1L1"], - rocksmash: ["1L1"], - roleplay: ["1L1"], - round: ["1L1"], - sandstorm: ["1L1"], - scaryface: ["1L1"], - secretpower: ["1L1"], - skydrop: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - sludgewave: ["1L1"], - smackdown: ["1L1"], - snore: ["1L1"], - snowscape: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - superpower: ["1L1"], - swagger: ["1L1"], - tailwind: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thrash: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - uproar: ["1L1"], - uturn: ["1L1"], - weatherball: ["1L1"], - }, - eventData: [ - {generation: 5, level: 40, shiny: 1, moves: ["1L1"]}, - {generation: 5, level: 5, isHidden: true, moves: ["1L1"], pokeball: "dreamball"}, - {generation: 5, level: 70, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 6, level: 50, shiny: 1, moves: ["1L1"]}, - {generation: 7, level: 60, shiny: 1, moves: ["1L1"]}, - {generation: 7, level: 60, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 7, level: 100, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 8, level: 70, shiny: 1, moves: ["1L1"]}, - ], - eventOnly: false, - }, - tornadustherian: { - eventOnly: false, - }, - thundurus: { - learnset: { - acrobatics: ["1L1"], - agility: ["1L1"], - assurance: ["1L1"], - astonish: ["1L1"], - attract: ["1L1"], - bite: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - brutalswing: ["1L1"], - bulkup: ["1L1"], - charge: ["1L1"], - chargebeam: ["1L1"], - confide: ["1L1"], - crunch: ["1L1"], - darkpulse: ["1L1"], - defog: ["1L1"], - discharge: ["1L1"], - doubleteam: ["1L1"], - eerieimpulse: ["1L1"], - electricterrain: ["1L1"], - electroball: ["1L1"], - electroweb: ["1L1"], - embargo: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - flashcannon: ["1L1"], - fling: ["1L1"], - fly: ["1L1"], - focusblast: ["1L1"], - foulplay: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - hammerarm: ["1L1"], - healblock: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - incinerate: ["1L1"], - irontail: ["1L1"], - knockoff: ["1L1"], - lashout: ["1L1"], - leer: ["1L1"], - nastyplot: ["1L1"], - payback: ["1L1"], - protect: ["1L1"], - psychic: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - revenge: ["1L1"], - risingvoltage: ["1L1"], - rocksmash: ["1L1"], - roleplay: ["1L1"], - round: ["1L1"], - scaryface: ["1L1"], - secretpower: ["1L1"], - shockwave: ["1L1"], - skydrop: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - sludgewave: ["1L1"], - smackdown: ["1L1"], - smartstrike: ["1L1"], - snarl: ["1L1"], - snore: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - supercellslam: ["1L1"], - superpower: ["1L1"], - swagger: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thrash: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderpunch: ["1L1"], - thundershock: ["1L1"], - thunderwave: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - uproar: ["1L1"], - uturn: ["1L1"], - voltswitch: ["1L1"], - weatherball: ["1L1"], - wildboltstorm: ["1L1"], - wildcharge: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 5, level: 40, shiny: 1, moves: ["1L1"]}, - {generation: 5, level: 5, isHidden: true, moves: ["1L1"], pokeball: "dreamball"}, - {generation: 5, level: 70, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 6, level: 50, shiny: 1, moves: ["1L1"]}, - {generation: 7, level: 60, shiny: 1, moves: ["1L1"]}, - {generation: 7, level: 60, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 7, level: 100, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 8, level: 70, shiny: 1, moves: ["1L1"]}, - ], - eventOnly: false, - }, - thundurustherian: { - eventOnly: false, - }, - reshiram: { - learnset: { - ancientpower: ["1L1"], - blueflare: ["1L1"], - bodypress: ["1L1"], - bodyslam: ["1L1"], - breakingswipe: ["1L1"], - brutalswing: ["1L1"], - confide: ["1L1"], - crunch: ["1L1"], - cut: ["1L1"], - defog: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dracometeor: ["1L1"], - dragonbreath: ["1L1"], - dragoncheer: ["1L1"], - dragonclaw: ["1L1"], - dragondance: ["1L1"], - dragonpulse: ["1L1"], - dragonrage: ["1L1"], - dragontail: ["1L1"], - dualwingbeat: ["1L1"], - earthpower: ["1L1"], - echoedvoice: ["1L1"], - endure: ["1L1"], - extrasensory: ["1L1"], - facade: ["1L1"], - fireblast: ["1L1"], - firefang: ["1L1"], - firespin: ["1L1"], - flamecharge: ["1L1"], - flamethrower: ["1L1"], - flareblitz: ["1L1"], - fling: ["1L1"], - fly: ["1L1"], - focusblast: ["1L1"], - frustration: ["1L1"], - fusionflare: ["1L1"], - gigaimpact: ["1L1"], - heatcrash: ["1L1"], - heatwave: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - honeclaws: ["1L1"], - hyperbeam: ["1L1"], - hypervoice: ["1L1"], - imprison: ["1L1"], - incinerate: ["1L1"], - laserfocus: ["1L1"], - lightscreen: ["1L1"], - mist: ["1L1"], - mysticalfire: ["1L1"], - nobleroar: ["1L1"], - outrage: ["1L1"], - overheat: ["1L1"], - payback: ["1L1"], - protect: ["1L1"], - psychic: ["1L1"], - raindance: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roar: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - roost: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - scaleshot: ["1L1"], - scaryface: ["1L1"], - scorchingsands: ["1L1"], - secretpower: ["1L1"], - shadowball: ["1L1"], - shadowclaw: ["1L1"], - slash: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - steelwing: ["1L1"], - stoneedge: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - tailwind: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - toxic: ["1L1"], - weatherball: ["1L1"], - willowisp: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 5, level: 50, moves: ["1L1"]}, - {generation: 5, level: 70, moves: ["1L1"]}, - {generation: 5, level: 100, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 6, level: 50, shiny: 1, moves: ["1L1"]}, - {generation: 7, level: 60, shiny: 1, moves: ["1L1"]}, - {generation: 7, level: 60, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 7, level: 100, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 8, level: 70, shiny: 1, moves: ["1L1"]}, - ], - eventOnly: false, - }, - zekrom: { - learnset: { - ancientpower: ["1L1"], - bodypress: ["1L1"], - bodyslam: ["1L1"], - boltstrike: ["1L1"], - breakingswipe: ["1L1"], - brickbreak: ["1L1"], - brutalswing: ["1L1"], - charge: ["1L1"], - chargebeam: ["1L1"], - confide: ["1L1"], - crunch: ["1L1"], - cut: ["1L1"], - defog: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dracometeor: ["1L1"], - dragonbreath: ["1L1"], - dragoncheer: ["1L1"], - dragonclaw: ["1L1"], - dragondance: ["1L1"], - dragonpulse: ["1L1"], - dragonrage: ["1L1"], - dragontail: ["1L1"], - dualwingbeat: ["1L1"], - earthpower: ["1L1"], - echoedvoice: ["1L1"], - electricterrain: ["1L1"], - electroball: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - flash: ["1L1"], - flashcannon: ["1L1"], - fling: ["1L1"], - fly: ["1L1"], - focusblast: ["1L1"], - focuspunch: ["1L1"], - frustration: ["1L1"], - fusionbolt: ["1L1"], - gigaimpact: ["1L1"], - haze: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - honeclaws: ["1L1"], - hyperbeam: ["1L1"], - hypervoice: ["1L1"], - imprison: ["1L1"], - laserfocus: ["1L1"], - lightscreen: ["1L1"], - magnetrise: ["1L1"], - nobleroar: ["1L1"], - outrage: ["1L1"], - payback: ["1L1"], - protect: ["1L1"], - psychic: ["1L1"], - raindance: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - risingvoltage: ["1L1"], - roar: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - roost: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - scaleshot: ["1L1"], - scaryface: ["1L1"], - secretpower: ["1L1"], - shadowball: ["1L1"], - shadowclaw: ["1L1"], - shockwave: ["1L1"], - signalbeam: ["1L1"], - slash: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - stealthrock: ["1L1"], - steelwing: ["1L1"], - stoneedge: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - supercellslam: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - tailwind: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderfang: ["1L1"], - thunderpunch: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - voltswitch: ["1L1"], - weatherball: ["1L1"], - wildcharge: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 5, level: 50, moves: ["1L1"]}, - {generation: 5, level: 70, moves: ["1L1"]}, - {generation: 5, level: 100, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 6, level: 50, shiny: 1, moves: ["1L1"]}, - {generation: 7, level: 60, shiny: 1, moves: ["1L1"]}, - {generation: 7, level: 60, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 7, level: 100, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 8, level: 70, shiny: 1, moves: ["1L1"]}, - ], - eventOnly: false, - }, - landorus: { - learnset: { - attract: ["1L1"], - block: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - brutalswing: ["1L1"], - bulkup: ["1L1"], - bulldoze: ["1L1"], - calmmind: ["1L1"], - confide: ["1L1"], - crunch: ["1L1"], - defog: ["1L1"], - dig: ["1L1"], - doubleteam: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - endure: ["1L1"], - explosion: ["1L1"], - extrasensory: ["1L1"], - facade: ["1L1"], - fissure: ["1L1"], - fling: ["1L1"], - fly: ["1L1"], - focusblast: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - gravity: ["1L1"], - hammerarm: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - imprison: ["1L1"], - irontail: ["1L1"], - knockoff: ["1L1"], - leer: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - nastyplot: ["1L1"], - outrage: ["1L1"], - payback: ["1L1"], - protect: ["1L1"], - psychic: ["1L1"], - punishment: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rockpolish: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rockthrow: ["1L1"], - rocktomb: ["1L1"], - roleplay: ["1L1"], - round: ["1L1"], - sandsearstorm: ["1L1"], - sandstorm: ["1L1"], - sandtomb: ["1L1"], - scaryface: ["1L1"], - scorchingsands: ["1L1"], - secretpower: ["1L1"], - selfdestruct: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - sludgewave: ["1L1"], - smackdown: ["1L1"], - snore: ["1L1"], - stealthrock: ["1L1"], - stompingtantrum: ["1L1"], - stoneedge: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - superpower: ["1L1"], - swagger: ["1L1"], - swordsdance: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - toxic: ["1L1"], - uturn: ["1L1"], - weatherball: ["1L1"], - }, - eventData: [ - {generation: 5, level: 70, shiny: 1, moves: ["1L1"]}, - {generation: 5, level: 5, isHidden: true, moves: ["1L1"], pokeball: "dreamball"}, - {generation: 6, level: 65, shiny: 1, moves: ["1L1"]}, - {generation: 6, level: 50, nature: "Adamant", ivs: {hp: 31, atk: 31, def: 31, spa: 1, spd: 31, spe: 24}, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 7, level: 60, shiny: 1, moves: ["1L1"]}, - {generation: 8, level: 70, shiny: 1, moves: ["1L1"]}, - ], - eventOnly: false, - }, - landorustherian: { - eventOnly: false, - }, - kyurem: { - learnset: { - aerialace: ["1L1"], - ancientpower: ["1L1"], - avalanche: ["1L1"], - blizzard: ["1L1"], - bodypress: ["1L1"], - bodyslam: ["1L1"], - breakingswipe: ["1L1"], - brutalswing: ["1L1"], - confide: ["1L1"], - cut: ["1L1"], - doubleteam: ["1L1"], - dracometeor: ["1L1"], - dragonbreath: ["1L1"], - dragoncheer: ["1L1"], - dragonclaw: ["1L1"], - dragondance: ["1L1"], - dragonpulse: ["1L1"], - dragonrage: ["1L1"], - dragontail: ["1L1"], - dualwingbeat: ["1L1"], - earthpower: ["1L1"], - echoedvoice: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - flashcannon: ["1L1"], - fling: ["1L1"], - fly: ["1L1"], - focusblast: ["1L1"], - freezedry: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - glaciate: ["1L1"], - hail: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - honeclaws: ["1L1"], - hyperbeam: ["1L1"], - hypervoice: ["1L1"], - icebeam: ["1L1"], - icefang: ["1L1"], - iciclespear: ["1L1"], - icywind: ["1L1"], - imprison: ["1L1"], - ironhead: ["1L1"], - laserfocus: ["1L1"], - lightscreen: ["1L1"], - nobleroar: ["1L1"], - outrage: ["1L1"], - payback: ["1L1"], - protect: ["1L1"], - psychic: ["1L1"], - raindance: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roar: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - roost: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - scaleshot: ["1L1"], - scaryface: ["1L1"], - secretpower: ["1L1"], - shadowball: ["1L1"], - shadowclaw: ["1L1"], - sheercold: ["1L1"], - signalbeam: ["1L1"], - slash: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - snowscape: ["1L1"], - steelwing: ["1L1"], - stoneedge: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - toxic: ["1L1"], - weatherball: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 5, level: 75, shiny: 1, moves: ["1L1"]}, - {generation: 5, level: 70, shiny: 1, moves: ["1L1"]}, - {generation: 6, level: 50, shiny: 1, moves: ["1L1"]}, - {generation: 6, level: 100, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 7, level: 60, shiny: 1, moves: ["1L1"]}, - {generation: 8, level: 70, shiny: 1, moves: ["1L1"]}, - ], - eventOnly: false, - }, - kyuremblack: { - learnset: { - aerialace: ["1L1"], - ancientpower: ["1L1"], - avalanche: ["1L1"], - blizzard: ["1L1"], - bodypress: ["1L1"], - bodyslam: ["1L1"], - breakingswipe: ["1L1"], - brutalswing: ["1L1"], - confide: ["1L1"], - cut: ["1L1"], - doubleteam: ["1L1"], - dracometeor: ["1L1"], - dragonbreath: ["1L1"], - dragoncheer: ["1L1"], - dragonclaw: ["1L1"], - dragondance: ["1L1"], - dragonpulse: ["1L1"], - dragonrage: ["1L1"], - dragontail: ["1L1"], - dualwingbeat: ["1L1"], - earthpower: ["1L1"], - echoedvoice: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - flashcannon: ["1L1"], - fling: ["1L1"], - fly: ["1L1"], - focusblast: ["1L1"], - freezedry: ["1L1"], - freezeshock: ["1L1"], - frustration: ["1L1"], - fusionbolt: ["1L1"], - gigaimpact: ["1L1"], - hail: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - honeclaws: ["1L1"], - hyperbeam: ["1L1"], - hypervoice: ["1L1"], - icebeam: ["1L1"], - icefang: ["1L1"], - iciclespear: ["1L1"], - icywind: ["1L1"], - imprison: ["1L1"], - ironhead: ["1L1"], - laserfocus: ["1L1"], - lightscreen: ["1L1"], - nobleroar: ["1L1"], - outrage: ["1L1"], - payback: ["1L1"], - protect: ["1L1"], - psychic: ["1L1"], - raindance: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roar: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - roost: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - scaleshot: ["1L1"], - scaryface: ["1L1"], - secretpower: ["1L1"], - shadowball: ["1L1"], - shadowclaw: ["1L1"], - sheercold: ["1L1"], - signalbeam: ["1L1"], - slash: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - snowscape: ["1L1"], - steelwing: ["1L1"], - stoneedge: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - toxic: ["1L1"], - weatherball: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 5, level: 75, shiny: 1, moves: ["1L1"]}, - {generation: 5, level: 70, shiny: 1, moves: ["1L1"]}, - {generation: 6, level: 50, shiny: 1, moves: ["1L1"]}, - {generation: 6, level: 100, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 7, level: 60, shiny: 1, moves: ["1L1"]}, - {generation: 8, level: 70, shiny: 1, moves: ["1L1"]}, - ], - eventOnly: false, - }, - kyuremwhite: { - learnset: { - aerialace: ["1L1"], - ancientpower: ["1L1"], - avalanche: ["1L1"], - blizzard: ["1L1"], - bodypress: ["1L1"], - bodyslam: ["1L1"], - breakingswipe: ["1L1"], - brutalswing: ["1L1"], - confide: ["1L1"], - cut: ["1L1"], - doubleteam: ["1L1"], - dracometeor: ["1L1"], - dragonbreath: ["1L1"], - dragoncheer: ["1L1"], - dragonclaw: ["1L1"], - dragondance: ["1L1"], - dragonpulse: ["1L1"], - dragonrage: ["1L1"], - dragontail: ["1L1"], - dualwingbeat: ["1L1"], - earthpower: ["1L1"], - echoedvoice: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - flashcannon: ["1L1"], - fling: ["1L1"], - fly: ["1L1"], - focusblast: ["1L1"], - freezedry: ["1L1"], - frustration: ["1L1"], - fusionflare: ["1L1"], - gigaimpact: ["1L1"], - hail: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - honeclaws: ["1L1"], - hyperbeam: ["1L1"], - hypervoice: ["1L1"], - icebeam: ["1L1"], - iceburn: ["1L1"], - icefang: ["1L1"], - iciclespear: ["1L1"], - icywind: ["1L1"], - imprison: ["1L1"], - ironhead: ["1L1"], - laserfocus: ["1L1"], - lightscreen: ["1L1"], - nobleroar: ["1L1"], - outrage: ["1L1"], - payback: ["1L1"], - protect: ["1L1"], - psychic: ["1L1"], - raindance: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roar: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - roost: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - scaleshot: ["1L1"], - scaryface: ["1L1"], - secretpower: ["1L1"], - shadowball: ["1L1"], - shadowclaw: ["1L1"], - sheercold: ["1L1"], - signalbeam: ["1L1"], - slash: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - snowscape: ["1L1"], - steelwing: ["1L1"], - stoneedge: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - toxic: ["1L1"], - weatherball: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 5, level: 75, shiny: 1, moves: ["1L1"]}, - {generation: 5, level: 70, shiny: 1, moves: ["1L1"]}, - {generation: 6, level: 50, shiny: 1, moves: ["1L1"]}, - {generation: 6, level: 100, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 7, level: 60, shiny: 1, moves: ["1L1"]}, - {generation: 8, level: 70, shiny: 1, moves: ["1L1"]}, - ], - eventOnly: false, - }, - keldeo: { - learnset: { - aerialace: ["1L1"], - airslash: ["1L1"], - aquajet: ["1L1"], - aquatail: ["1L1"], - aurasphere: ["1L1"], - batonpass: ["1L1"], - bounce: ["1L1"], - brickbreak: ["1L1"], - bubblebeam: ["1L1"], - calmmind: ["1L1"], - chillingwater: ["1L1"], - closecombat: ["1L1"], - coaching: ["1L1"], - confide: ["1L1"], - covet: ["1L1"], - cut: ["1L1"], - doubleedge: ["1L1"], - doublekick: ["1L1"], - doubleteam: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - falseswipe: ["1L1"], - flipturn: ["1L1"], - focusblast: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - hail: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hydropump: ["1L1"], - hyperbeam: ["1L1"], - icywind: ["1L1"], - lastresort: ["1L1"], - leer: ["1L1"], - liquidation: ["1L1"], - lowkick: ["1L1"], - megahorn: ["1L1"], - muddywater: ["1L1"], - painsplit: ["1L1"], - poisonjab: ["1L1"], - protect: ["1L1"], - psychup: ["1L1"], - quickguard: ["1L1"], - raindance: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - revenge: ["1L1"], - reversal: ["1L1"], - roar: ["1L1"], - rocksmash: ["1L1"], - round: ["1L1"], - sacredsword: ["1L1"], - safeguard: ["1L1"], - scald: ["1L1"], - secretpower: ["1L1"], - secretsword: ["1L1"], - sleeptalk: ["1L1"], - smartstrike: ["1L1"], - snore: ["1L1"], - stoneedge: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - superpower: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - swordsdance: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - upperhand: ["1L1"], - vacuumwave: ["1L1"], - waterpulse: ["1L1"], - workup: ["1L1"], - xscissor: ["1L1"], - }, - eventData: [ - {generation: 5, level: 15, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 5, level: 50, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 6, level: 15, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 6, level: 100, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 8, level: 65, moves: ["1L1"]}, - ], - eventOnly: false, - }, - keldeoresolute: { - eventOnly: false, - }, - meloetta: { - learnset: { - acrobatics: ["1L1"], - alluringvoice: ["1L1"], - allyswitch: ["1L1"], - batonpass: ["1L1"], - brickbreak: ["1L1"], - calmmind: ["1L1"], - celebrate: ["1L1"], - chargebeam: ["1L1"], - charm: ["1L1"], - closecombat: ["1L1"], - coaching: ["1L1"], - confide: ["1L1"], - confusion: ["1L1"], - covet: ["1L1"], - dazzlinggleam: ["1L1"], - disarmingvoice: ["1L1"], - doubleteam: ["1L1"], - drainpunch: ["1L1"], - dreameater: ["1L1"], - dualchop: ["1L1"], - echoedvoice: ["1L1"], - embargo: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - faketears: ["1L1"], - firepunch: ["1L1"], - flash: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - focuspunch: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - gravity: ["1L1"], - healbell: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - honeclaws: ["1L1"], - hyperbeam: ["1L1"], - hypervoice: ["1L1"], - icepunch: ["1L1"], - knockoff: ["1L1"], - laserfocus: ["1L1"], - lastresort: ["1L1"], - lightscreen: ["1L1"], - lowkick: ["1L1"], - lowsweep: ["1L1"], - magiccoat: ["1L1"], - magicroom: ["1L1"], - metronome: ["1L1"], - payback: ["1L1"], - perishsong: ["1L1"], - playrough: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - psybeam: ["1L1"], - psychic: ["1L1"], - psychup: ["1L1"], - psyshock: ["1L1"], - quickattack: ["1L1"], - raindance: ["1L1"], - recycle: ["1L1"], - relicsong: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - reversal: ["1L1"], - rocksmash: ["1L1"], - roleplay: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - secretpower: ["1L1"], - shadowball: ["1L1"], - shadowclaw: ["1L1"], - shockwave: ["1L1"], - signalbeam: ["1L1"], - sing: ["1L1"], - skillswap: ["1L1"], - sleeptalk: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - stoneedge: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - swordsdance: ["1L1"], - teeterdance: ["1L1"], - telekinesis: ["1L1"], - terablast: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderpunch: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - trick: ["1L1"], - trickroom: ["1L1"], - tripleaxel: ["1L1"], - uproar: ["1L1"], - uturn: ["1L1"], - wakeupslap: ["1L1"], - wonderroom: ["1L1"], - workup: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 5, level: 15, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 5, level: 50, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 7, level: 15, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 7, level: 50, moves: ["1L1"], pokeball: "cherishball"}, - ], - eventOnly: false, - }, - genesect: { - learnset: { - aerialace: ["1L1"], - allyswitch: ["1L1"], - assurance: ["1L1"], - blazekick: ["1L1"], - blizzard: ["1L1"], - bugbite: ["1L1"], - bugbuzz: ["1L1"], - chargebeam: ["1L1"], - confide: ["1L1"], - darkpulse: ["1L1"], - doubleteam: ["1L1"], - electroweb: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - explosion: ["1L1"], - extremespeed: ["1L1"], - facade: ["1L1"], - fellstinger: ["1L1"], - flamecharge: ["1L1"], - flamethrower: ["1L1"], - flash: ["1L1"], - flashcannon: ["1L1"], - fly: ["1L1"], - frustration: ["1L1"], - furycutter: ["1L1"], - gigadrain: ["1L1"], - gigaimpact: ["1L1"], - gravity: ["1L1"], - gunkshot: ["1L1"], - hiddenpower: ["1L1"], - honeclaws: ["1L1"], - hyperbeam: ["1L1"], - icebeam: ["1L1"], - infestation: ["1L1"], - irondefense: ["1L1"], - ironhead: ["1L1"], - lastresort: ["1L1"], - leechlife: ["1L1"], - lightscreen: ["1L1"], - lockon: ["1L1"], - magiccoat: ["1L1"], - magnetbomb: ["1L1"], - magnetrise: ["1L1"], - metalclaw: ["1L1"], - metalsound: ["1L1"], - protect: ["1L1"], - psychic: ["1L1"], - quickattack: ["1L1"], - recycle: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rockpolish: ["1L1"], - round: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - selfdestruct: ["1L1"], - shadowclaw: ["1L1"], - shiftgear: ["1L1"], - shockwave: ["1L1"], - signalbeam: ["1L1"], - simplebeam: ["1L1"], - slash: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - steelbeam: ["1L1"], - strugglebug: ["1L1"], - substitute: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - technoblast: ["1L1"], - telekinesis: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - triattack: ["1L1"], - uturn: ["1L1"], - xscissor: ["1L1"], - zapcannon: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 5, level: 50, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 5, level: 15, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 5, level: 100, shiny: true, nature: "Hasty", ivs: {atk: 31, spe: 31}, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 6, level: 100, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 8, level: 60, moves: ["1L1"], pokeball: "cherishball"}, - ], - eventOnly: false, - }, - genesectburn: { - eventOnly: false, - }, - genesectchill: { - eventOnly: false, - }, - genesectdouse: { - eventOnly: false, - }, - genesectshock: { - eventOnly: false, - }, - chespin: { - learnset: { - aerialace: ["1L1"], - attract: ["1L1"], - bellydrum: ["1L1"], - bite: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - bulkup: ["1L1"], - bulldoze: ["1L1"], - bulletseed: ["1L1"], - confide: ["1L1"], - curse: ["1L1"], - cut: ["1L1"], - defensecurl: ["1L1"], - dig: ["1L1"], - doubleteam: ["1L1"], - drainpunch: ["1L1"], - dualchop: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - flash: ["1L1"], - fling: ["1L1"], - focuspunch: ["1L1"], - frustration: ["1L1"], - gigadrain: ["1L1"], - grassknot: ["1L1"], - grasspledge: ["1L1"], - grassyglide: ["1L1"], - grassyterrain: ["1L1"], - growl: ["1L1"], - gyroball: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - irondefense: ["1L1"], - ironhead: ["1L1"], - irontail: ["1L1"], - leafstorm: ["1L1"], - leechseed: ["1L1"], - lowkick: ["1L1"], - lowsweep: ["1L1"], - magicalleaf: ["1L1"], - metalclaw: ["1L1"], - mudshot: ["1L1"], - naturepower: ["1L1"], - painsplit: ["1L1"], - payback: ["1L1"], - pinmissile: ["1L1"], - poisonjab: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - quickguard: ["1L1"], - raindance: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - roar: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - secretpower: ["1L1"], - seedbomb: ["1L1"], - shadowclaw: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - smackdown: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - spikes: ["1L1"], - stompingtantrum: ["1L1"], - stoneedge: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - superfang: ["1L1"], - superpower: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - swordsdance: ["1L1"], - synthesis: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thunderpunch: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - vinewhip: ["1L1"], - wideguard: ["1L1"], - woodhammer: ["1L1"], - workup: ["1L1"], - worryseed: ["1L1"], - zenheadbutt: ["1L1"], - }, - }, - quilladin: { - learnset: { - aerialace: ["1L1"], - attract: ["1L1"], - bite: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - bulkup: ["1L1"], - bulldoze: ["1L1"], - bulletseed: ["1L1"], - confide: ["1L1"], - curse: ["1L1"], - cut: ["1L1"], - dig: ["1L1"], - doubleteam: ["1L1"], - drainpunch: ["1L1"], - dualchop: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - flash: ["1L1"], - fling: ["1L1"], - focuspunch: ["1L1"], - frustration: ["1L1"], - gigadrain: ["1L1"], - grassknot: ["1L1"], - grasspledge: ["1L1"], - grassyglide: ["1L1"], - grassyterrain: ["1L1"], - growl: ["1L1"], - gyroball: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - honeclaws: ["1L1"], - irondefense: ["1L1"], - ironhead: ["1L1"], - irontail: ["1L1"], - leafstorm: ["1L1"], - leechseed: ["1L1"], - lowkick: ["1L1"], - lowsweep: ["1L1"], - magicalleaf: ["1L1"], - metalclaw: ["1L1"], - mudshot: ["1L1"], - naturepower: ["1L1"], - needlearm: ["1L1"], - painsplit: ["1L1"], - payback: ["1L1"], - pinmissile: ["1L1"], - poisonjab: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - roar: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - secretpower: ["1L1"], - seedbomb: ["1L1"], - shadowclaw: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - smackdown: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - spikes: ["1L1"], - stompingtantrum: ["1L1"], - stoneedge: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - superfang: ["1L1"], - superpower: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - swordsdance: ["1L1"], - synthesis: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thunderpunch: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - vinewhip: ["1L1"], - woodhammer: ["1L1"], - workup: ["1L1"], - worryseed: ["1L1"], - zenheadbutt: ["1L1"], - }, - }, - chesnaught: { - learnset: { - aerialace: ["1L1"], - attract: ["1L1"], - bellydrum: ["1L1"], - bite: ["1L1"], - block: ["1L1"], - bodypress: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - bulkup: ["1L1"], - bulldoze: ["1L1"], - bulletseed: ["1L1"], - closecombat: ["1L1"], - coaching: ["1L1"], - confide: ["1L1"], - crunch: ["1L1"], - curse: ["1L1"], - cut: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dragonclaw: ["1L1"], - drainpunch: ["1L1"], - dualchop: ["1L1"], - earthquake: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - feint: ["1L1"], - flash: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - focuspunch: ["1L1"], - frenzyplant: ["1L1"], - frustration: ["1L1"], - gigadrain: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - grasspledge: ["1L1"], - grassyglide: ["1L1"], - grassyterrain: ["1L1"], - growl: ["1L1"], - gyroball: ["1L1"], - hammerarm: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - highhorsepower: ["1L1"], - honeclaws: ["1L1"], - hyperbeam: ["1L1"], - irondefense: ["1L1"], - ironhead: ["1L1"], - irontail: ["1L1"], - knockoff: ["1L1"], - leafstorm: ["1L1"], - leechseed: ["1L1"], - lowkick: ["1L1"], - lowsweep: ["1L1"], - magicalleaf: ["1L1"], - metalclaw: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - naturepower: ["1L1"], - needlearm: ["1L1"], - painsplit: ["1L1"], - payback: ["1L1"], - pinmissile: ["1L1"], - poisonjab: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - reversal: ["1L1"], - roar: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - scaryface: ["1L1"], - secretpower: ["1L1"], - seedbomb: ["1L1"], - shadowclaw: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - smackdown: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - spikes: ["1L1"], - spikyshield: ["1L1"], - stompingtantrum: ["1L1"], - stoneedge: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - superfang: ["1L1"], - superpower: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - swordsdance: ["1L1"], - synthesis: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thunderpunch: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - vinewhip: ["1L1"], - woodhammer: ["1L1"], - workup: ["1L1"], - worryseed: ["1L1"], - zenheadbutt: ["1L1"], - }, - }, - fennekin: { - learnset: { - agility: ["1L1"], - attract: ["1L1"], - burningjealousy: ["1L1"], - calmmind: ["1L1"], - charm: ["1L1"], - confide: ["1L1"], - copycat: ["1L1"], - covet: ["1L1"], - cut: ["1L1"], - doubleteam: ["1L1"], - dreameater: ["1L1"], - echoedvoice: ["1L1"], - embargo: ["1L1"], - ember: ["1L1"], - encore: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fireblast: ["1L1"], - firepledge: ["1L1"], - firespin: ["1L1"], - flamecharge: ["1L1"], - flamethrower: ["1L1"], - flareblitz: ["1L1"], - foulplay: ["1L1"], - frustration: ["1L1"], - grassknot: ["1L1"], - heatwave: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - howl: ["1L1"], - hypnosis: ["1L1"], - imprison: ["1L1"], - incinerate: ["1L1"], - irontail: ["1L1"], - lightscreen: ["1L1"], - luckychant: ["1L1"], - magiccoat: ["1L1"], - magicroom: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - overheat: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - psybeam: ["1L1"], - psychic: ["1L1"], - psychicterrain: ["1L1"], - psychup: ["1L1"], - psyshock: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - scratch: ["1L1"], - secretpower: ["1L1"], - skillswap: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - storedpower: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - tailwhip: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - toxic: ["1L1"], - trick: ["1L1"], - trickroom: ["1L1"], - willowisp: ["1L1"], - wish: ["1L1"], - workup: ["1L1"], - }, - eventData: [ - {generation: 6, level: 15, gender: "F", nature: "Hardy", moves: ["1L1"], pokeball: "cherishball"}, - ], - }, - braixen: { - learnset: { - agility: ["1L1"], - allyswitch: ["1L1"], - attract: ["1L1"], - burningjealousy: ["1L1"], - calmmind: ["1L1"], - charm: ["1L1"], - confide: ["1L1"], - covet: ["1L1"], - cut: ["1L1"], - doubleteam: ["1L1"], - dreameater: ["1L1"], - echoedvoice: ["1L1"], - embargo: ["1L1"], - ember: ["1L1"], - encore: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fireblast: ["1L1"], - firepledge: ["1L1"], - firepunch: ["1L1"], - firespin: ["1L1"], - flamecharge: ["1L1"], - flamethrower: ["1L1"], - flareblitz: ["1L1"], - foulplay: ["1L1"], - frustration: ["1L1"], - grassknot: ["1L1"], - heatwave: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - howl: ["1L1"], - imprison: ["1L1"], - incinerate: ["1L1"], - irontail: ["1L1"], - laserfocus: ["1L1"], - lightscreen: ["1L1"], - lowkick: ["1L1"], - luckychant: ["1L1"], - magiccoat: ["1L1"], - magicroom: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - overheat: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - psybeam: ["1L1"], - psychic: ["1L1"], - psychicterrain: ["1L1"], - psychup: ["1L1"], - psyshock: ["1L1"], - raindance: ["1L1"], - recycle: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - scratch: ["1L1"], - secretpower: ["1L1"], - shockwave: ["1L1"], - skillswap: ["1L1"], - sleeptalk: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - storedpower: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - tailwhip: ["1L1"], - takedown: ["1L1"], - telekinesis: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thunderpunch: ["1L1"], - toxic: ["1L1"], - trick: ["1L1"], - trickroom: ["1L1"], - willowisp: ["1L1"], - wonderroom: ["1L1"], - workup: ["1L1"], - zenheadbutt: ["1L1"], - }, - }, - delphox: { - learnset: { - agility: ["1L1"], - allyswitch: ["1L1"], - attract: ["1L1"], - blastburn: ["1L1"], - burningjealousy: ["1L1"], - calmmind: ["1L1"], - charm: ["1L1"], - confide: ["1L1"], - confuseray: ["1L1"], - covet: ["1L1"], - cut: ["1L1"], - dazzlinggleam: ["1L1"], - doubleteam: ["1L1"], - dreameater: ["1L1"], - echoedvoice: ["1L1"], - embargo: ["1L1"], - ember: ["1L1"], - encore: ["1L1"], - endure: ["1L1"], - expandingforce: ["1L1"], - facade: ["1L1"], - fireblast: ["1L1"], - firepledge: ["1L1"], - firepunch: ["1L1"], - firespin: ["1L1"], - flamecharge: ["1L1"], - flamethrower: ["1L1"], - flareblitz: ["1L1"], - focusblast: ["1L1"], - foulplay: ["1L1"], - frustration: ["1L1"], - futuresight: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - heatwave: ["1L1"], - helpinghand: ["1L1"], - hex: ["1L1"], - hiddenpower: ["1L1"], - howl: ["1L1"], - hyperbeam: ["1L1"], - hypervoice: ["1L1"], - imprison: ["1L1"], - incinerate: ["1L1"], - irontail: ["1L1"], - laserfocus: ["1L1"], - lightscreen: ["1L1"], - lowkick: ["1L1"], - luckychant: ["1L1"], - magiccoat: ["1L1"], - magicroom: ["1L1"], - metronome: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - mysticalfire: ["1L1"], - nastyplot: ["1L1"], - nightshade: ["1L1"], - overheat: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - psybeam: ["1L1"], - psychic: ["1L1"], - psychicnoise: ["1L1"], - psychicterrain: ["1L1"], - psychup: ["1L1"], - psyshock: ["1L1"], - raindance: ["1L1"], - recycle: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roleplay: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - scorchingsands: ["1L1"], - scratch: ["1L1"], - secretpower: ["1L1"], - shadowball: ["1L1"], - shockwave: ["1L1"], - signalbeam: ["1L1"], - skillswap: ["1L1"], - sleeptalk: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - storedpower: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - switcheroo: ["1L1"], - tailwhip: ["1L1"], - takedown: ["1L1"], - telekinesis: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thunderpunch: ["1L1"], - toxic: ["1L1"], - trick: ["1L1"], - trickroom: ["1L1"], - willowisp: ["1L1"], - wonderroom: ["1L1"], - workup: ["1L1"], - zenheadbutt: ["1L1"], - }, - }, - froakie: { - learnset: { - acrobatics: ["1L1"], - aerialace: ["1L1"], - attract: ["1L1"], - bestow: ["1L1"], - blizzard: ["1L1"], - bounce: ["1L1"], - bubble: ["1L1"], - camouflage: ["1L1"], - chillingwater: ["1L1"], - confide: ["1L1"], - counter: ["1L1"], - cut: ["1L1"], - dig: ["1L1"], - dive: ["1L1"], - doubleteam: ["1L1"], - echoedvoice: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - falseswipe: ["1L1"], - fling: ["1L1"], - frustration: ["1L1"], - grassknot: ["1L1"], - growl: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hydropump: ["1L1"], - icebeam: ["1L1"], - icywind: ["1L1"], - lick: ["1L1"], - liquidation: ["1L1"], - mindreader: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - mudsport: ["1L1"], - pound: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - quickattack: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - roleplay: ["1L1"], - round: ["1L1"], - scald: ["1L1"], - secretpower: ["1L1"], - sleeptalk: ["1L1"], - smackdown: ["1L1"], - smokescreen: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - snowscape: ["1L1"], - spikes: ["1L1"], - spite: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - switcheroo: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - toxic: ["1L1"], - toxicspikes: ["1L1"], - trailblaze: ["1L1"], - uturn: ["1L1"], - waterfall: ["1L1"], - watergun: ["1L1"], - waterpledge: ["1L1"], - waterpulse: ["1L1"], - watersport: ["1L1"], - workup: ["1L1"], - }, - eventData: [ - {generation: 6, level: 7, moves: ["1L1"], pokeball: "cherishball"}, - ], - }, - frogadier: { - learnset: { - acrobatics: ["1L1"], - aerialace: ["1L1"], - attract: ["1L1"], - blizzard: ["1L1"], - bounce: ["1L1"], - bubble: ["1L1"], - chillingwater: ["1L1"], - confide: ["1L1"], - cut: ["1L1"], - darkpulse: ["1L1"], - dig: ["1L1"], - dive: ["1L1"], - doubleteam: ["1L1"], - echoedvoice: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - falseswipe: ["1L1"], - fling: ["1L1"], - frustration: ["1L1"], - grassknot: ["1L1"], - growl: ["1L1"], - gunkshot: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hydropump: ["1L1"], - icebeam: ["1L1"], - icepunch: ["1L1"], - icywind: ["1L1"], - lick: ["1L1"], - liquidation: ["1L1"], - lowkick: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - pound: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - quickattack: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - roleplay: ["1L1"], - round: ["1L1"], - scald: ["1L1"], - secretpower: ["1L1"], - sleeptalk: ["1L1"], - smackdown: ["1L1"], - smokescreen: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - snowscape: ["1L1"], - spikes: ["1L1"], - spite: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - swordsdance: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - toxic: ["1L1"], - toxicspikes: ["1L1"], - trailblaze: ["1L1"], - uturn: ["1L1"], - waterfall: ["1L1"], - watergun: ["1L1"], - waterpledge: ["1L1"], - waterpulse: ["1L1"], - workup: ["1L1"], - }, - }, - greninja: { - learnset: { - acrobatics: ["1L1"], - aerialace: ["1L1"], - attract: ["1L1"], - blizzard: ["1L1"], - bounce: ["1L1"], - brickbreak: ["1L1"], - brutalswing: ["1L1"], - bubble: ["1L1"], - chillingwater: ["1L1"], - confide: ["1L1"], - cut: ["1L1"], - darkpulse: ["1L1"], - dig: ["1L1"], - dive: ["1L1"], - doubleteam: ["1L1"], - echoedvoice: ["1L1"], - endure: ["1L1"], - extrasensory: ["1L1"], - facade: ["1L1"], - falseswipe: ["1L1"], - feintattack: ["1L1"], - fling: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - growl: ["1L1"], - gunkshot: ["1L1"], - happyhour: ["1L1"], - haze: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hydrocannon: ["1L1"], - hydropump: ["1L1"], - hyperbeam: ["1L1"], - icebeam: ["1L1"], - icepunch: ["1L1"], - icywind: ["1L1"], - lick: ["1L1"], - liquidation: ["1L1"], - lowkick: ["1L1"], - lowsweep: ["1L1"], - matblock: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - nightslash: ["1L1"], - pound: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - quickattack: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - roleplay: ["1L1"], - round: ["1L1"], - scald: ["1L1"], - secretpower: ["1L1"], - shadowsneak: ["1L1"], - sleeptalk: ["1L1"], - sludgewave: ["1L1"], - smackdown: ["1L1"], - smokescreen: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - snowscape: ["1L1"], - spikes: ["1L1"], - spite: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - swordsdance: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - toxic: ["1L1"], - toxicspikes: ["1L1"], - trailblaze: ["1L1"], - upperhand: ["1L1"], - uturn: ["1L1"], - waterfall: ["1L1"], - watergun: ["1L1"], - waterpledge: ["1L1"], - waterpulse: ["1L1"], - watershuriken: ["1L1"], - weatherball: ["1L1"], - workup: ["1L1"], - }, - eventData: [ - {generation: 6, level: 36, ivs: {spe: 31}, isHidden: true, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 6, level: 100, isHidden: true, moves: ["1L1"], pokeball: "cherishball"}, - ], - }, - greninjabond: { - learnset: { - acrobatics: ["1L1"], - aerialace: ["1L1"], - attract: ["1L1"], - blizzard: ["1L1"], - bounce: ["1L1"], - brickbreak: ["1L1"], - brutalswing: ["1L1"], - bubble: ["1L1"], - chillingwater: ["1L1"], - confide: ["1L1"], - counter: ["1L1"], - darkpulse: ["1L1"], - dig: ["1L1"], - doubleteam: ["1L1"], - echoedvoice: ["1L1"], - endure: ["1L1"], - extrasensory: ["1L1"], - facade: ["1L1"], - falseswipe: ["1L1"], - feintattack: ["1L1"], - fling: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - growl: ["1L1"], - gunkshot: ["1L1"], - haze: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hydrocannon: ["1L1"], - hydropump: ["1L1"], - hyperbeam: ["1L1"], - icebeam: ["1L1"], - icepunch: ["1L1"], - icywind: ["1L1"], - lick: ["1L1"], - liquidation: ["1L1"], - lowkick: ["1L1"], - lowsweep: ["1L1"], - matblock: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - nightslash: ["1L1"], - pound: ["1L1"], - protect: ["1L1"], - quickattack: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - rockslide: ["1L1"], - rocktomb: ["1L1"], - roleplay: ["1L1"], - round: ["1L1"], - scald: ["1L1"], - shadowsneak: ["1L1"], - sleeptalk: ["1L1"], - sludgewave: ["1L1"], - smackdown: ["1L1"], - smokescreen: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - snowscape: ["1L1"], - spikes: ["1L1"], - spite: ["1L1"], - substitute: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - switcheroo: ["1L1"], - swordsdance: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - toxic: ["1L1"], - toxicspikes: ["1L1"], - trailblaze: ["1L1"], - upperhand: ["1L1"], - uturn: ["1L1"], - waterfall: ["1L1"], - watergun: ["1L1"], - waterpledge: ["1L1"], - waterpulse: ["1L1"], - watershuriken: ["1L1"], - weatherball: ["1L1"], - workup: ["1L1"], - }, - eventData: [ - {generation: 7, level: 36, ivs: {hp: 20, atk: 31, def: 20, spa: 31, spd: 20, spe: 31}, moves: ["1L1"], pokeball: "pokeball"}, - ], - eventOnly: false, - }, - bunnelby: { - learnset: { - agility: ["1L1"], - attract: ["1L1"], - bounce: ["1L1"], - brickbreak: ["1L1"], - bulkup: ["1L1"], - bulldoze: ["1L1"], - confide: ["1L1"], - cut: ["1L1"], - defensecurl: ["1L1"], - dig: ["1L1"], - doublekick: ["1L1"], - doubleslap: ["1L1"], - doubleteam: ["1L1"], - earthquake: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - flail: ["1L1"], - fling: ["1L1"], - frustration: ["1L1"], - grassknot: ["1L1"], - hiddenpower: ["1L1"], - ironhead: ["1L1"], - irontail: ["1L1"], - laserfocus: ["1L1"], - lastresort: ["1L1"], - leer: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - naturepower: ["1L1"], - odorsleuth: ["1L1"], - payback: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - quickattack: ["1L1"], - recycle: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - sandstorm: ["1L1"], - secretpower: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - smackdown: ["1L1"], - snore: ["1L1"], - spikes: ["1L1"], - stoneedge: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - superfang: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - swordsdance: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - thief: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - uturn: ["1L1"], - wildcharge: ["1L1"], - workup: ["1L1"], - }, - }, - diggersby: { - learnset: { - agility: ["1L1"], - attract: ["1L1"], - bodyslam: ["1L1"], - bounce: ["1L1"], - brickbreak: ["1L1"], - brutalswing: ["1L1"], - bulkup: ["1L1"], - bulldoze: ["1L1"], - confide: ["1L1"], - cut: ["1L1"], - dig: ["1L1"], - doublekick: ["1L1"], - doubleslap: ["1L1"], - doubleteam: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - firepunch: ["1L1"], - flail: ["1L1"], - fling: ["1L1"], - focuspunch: ["1L1"], - foulplay: ["1L1"], - frustration: ["1L1"], - gastroacid: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - gunkshot: ["1L1"], - hammerarm: ["1L1"], - hiddenpower: ["1L1"], - highhorsepower: ["1L1"], - hyperbeam: ["1L1"], - icepunch: ["1L1"], - ironhead: ["1L1"], - irontail: ["1L1"], - knockoff: ["1L1"], - laserfocus: ["1L1"], - lastresort: ["1L1"], - leer: ["1L1"], - lowkick: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - naturepower: ["1L1"], - odorsleuth: ["1L1"], - payback: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - quickattack: ["1L1"], - recycle: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - rototiller: ["1L1"], - round: ["1L1"], - sandstorm: ["1L1"], - sandtomb: ["1L1"], - scorchingsands: ["1L1"], - secretpower: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - smackdown: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - spikes: ["1L1"], - stompingtantrum: ["1L1"], - stoneedge: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - superfang: ["1L1"], - superpower: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - swordsdance: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - thief: ["1L1"], - thunderpunch: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - uproar: ["1L1"], - uturn: ["1L1"], - wildcharge: ["1L1"], - workup: ["1L1"], - }, - }, - fletchling: { - learnset: { - acrobatics: ["1L1"], - aerialace: ["1L1"], - agility: ["1L1"], - aircutter: ["1L1"], - airslash: ["1L1"], - attract: ["1L1"], - bravebird: ["1L1"], - confide: ["1L1"], - defog: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dualwingbeat: ["1L1"], - ember: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - featherdance: ["1L1"], - flail: ["1L1"], - flamecharge: ["1L1"], - flareblitz: ["1L1"], - fly: ["1L1"], - frustration: ["1L1"], - growl: ["1L1"], - heatwave: ["1L1"], - hiddenpower: ["1L1"], - hurricane: ["1L1"], - mefirst: ["1L1"], - naturalgift: ["1L1"], - overheat: ["1L1"], - peck: ["1L1"], - protect: ["1L1"], - quickattack: ["1L1"], - quickguard: ["1L1"], - raindance: ["1L1"], - razorwind: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roost: ["1L1"], - round: ["1L1"], - secretpower: ["1L1"], - sleeptalk: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - steelwing: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - swordsdance: ["1L1"], - tackle: ["1L1"], - tailwind: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - toxic: ["1L1"], - uturn: ["1L1"], - willowisp: ["1L1"], - workup: ["1L1"], - }, - }, - fletchinder: { - learnset: { - acrobatics: ["1L1"], - aerialace: ["1L1"], - agility: ["1L1"], - aircutter: ["1L1"], - airslash: ["1L1"], - attract: ["1L1"], - bravebird: ["1L1"], - confide: ["1L1"], - defog: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dualwingbeat: ["1L1"], - ember: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - featherdance: ["1L1"], - feint: ["1L1"], - fireblast: ["1L1"], - firespin: ["1L1"], - flail: ["1L1"], - flamecharge: ["1L1"], - flamethrower: ["1L1"], - flareblitz: ["1L1"], - fly: ["1L1"], - frustration: ["1L1"], - growl: ["1L1"], - heatwave: ["1L1"], - hiddenpower: ["1L1"], - hurricane: ["1L1"], - incinerate: ["1L1"], - mefirst: ["1L1"], - naturalgift: ["1L1"], - overheat: ["1L1"], - peck: ["1L1"], - protect: ["1L1"], - quickattack: ["1L1"], - raindance: ["1L1"], - razorwind: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roost: ["1L1"], - round: ["1L1"], - secretpower: ["1L1"], - sleeptalk: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - steelwing: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - swordsdance: ["1L1"], - tackle: ["1L1"], - tailwind: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - temperflare: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - toxic: ["1L1"], - uturn: ["1L1"], - willowisp: ["1L1"], - workup: ["1L1"], - }, - encounters: [ - {generation: 7, level: 16}, - ], - }, - talonflame: { - learnset: { - acrobatics: ["1L1"], - aerialace: ["1L1"], - agility: ["1L1"], - aircutter: ["1L1"], - airslash: ["1L1"], - attract: ["1L1"], - bravebird: ["1L1"], - bulkup: ["1L1"], - confide: ["1L1"], - defog: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dualwingbeat: ["1L1"], - ember: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - featherdance: ["1L1"], - feint: ["1L1"], - fireblast: ["1L1"], - firespin: ["1L1"], - flail: ["1L1"], - flamecharge: ["1L1"], - flamethrower: ["1L1"], - flareblitz: ["1L1"], - fly: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - growl: ["1L1"], - heatwave: ["1L1"], - hiddenpower: ["1L1"], - honeclaws: ["1L1"], - hurricane: ["1L1"], - hyperbeam: ["1L1"], - incinerate: ["1L1"], - mefirst: ["1L1"], - naturalgift: ["1L1"], - overheat: ["1L1"], - peck: ["1L1"], - protect: ["1L1"], - quickattack: ["1L1"], - raindance: ["1L1"], - razorwind: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roost: ["1L1"], - round: ["1L1"], - secretpower: ["1L1"], - sleeptalk: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - steelwing: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - swordsdance: ["1L1"], - tackle: ["1L1"], - tailwind: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - temperflare: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - toxic: ["1L1"], - upperhand: ["1L1"], - uturn: ["1L1"], - willowisp: ["1L1"], - workup: ["1L1"], - }, - }, - scatterbug: { - learnset: { - bugbite: ["1L1"], - poisonpowder: ["1L1"], - pounce: ["1L1"], - ragepowder: ["1L1"], - stringshot: ["1L1"], - strugglebug: ["1L1"], - stunspore: ["1L1"], - tackle: ["1L1"], - terablast: ["1L1"], - }, - }, - spewpa: { - learnset: { - bugbite: ["1L1"], - electroweb: ["1L1"], - harden: ["1L1"], - irondefense: ["1L1"], - pounce: ["1L1"], - protect: ["1L1"], - strugglebug: ["1L1"], - terablast: ["1L1"], - }, - }, - vivillon: { - learnset: { - acrobatics: ["1L1"], - aerialace: ["1L1"], - aircutter: ["1L1"], - airslash: ["1L1"], - aromatherapy: ["1L1"], - attract: ["1L1"], - bugbite: ["1L1"], - bugbuzz: ["1L1"], - calmmind: ["1L1"], - confide: ["1L1"], - confuseray: ["1L1"], - defog: ["1L1"], - doubleteam: ["1L1"], - drainingkiss: ["1L1"], - dreameater: ["1L1"], - electroweb: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - flash: ["1L1"], - frustration: ["1L1"], - gigadrain: ["1L1"], - gigaimpact: ["1L1"], - gust: ["1L1"], - hiddenpower: ["1L1"], - hurricane: ["1L1"], - hyperbeam: ["1L1"], - infestation: ["1L1"], - irondefense: ["1L1"], - laserfocus: ["1L1"], - lightscreen: ["1L1"], - poisonpowder: ["1L1"], - pollenpuff: ["1L1"], - pounce: ["1L1"], - powder: ["1L1"], - protect: ["1L1"], - psybeam: ["1L1"], - psychic: ["1L1"], - psychup: ["1L1"], - quiverdance: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roost: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - secretpower: ["1L1"], - signalbeam: ["1L1"], - skittersmack: ["1L1"], - sleeppowder: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - strugglebug: ["1L1"], - stunspore: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - supersonic: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - tailwind: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - toxic: ["1L1"], - uturn: ["1L1"], - weatherball: ["1L1"], - }, - }, - vivillonfancy: { - learnset: { - acrobatics: ["1L1"], - aerialace: ["1L1"], - aircutter: ["1L1"], - airslash: ["1L1"], - aromatherapy: ["1L1"], - attract: ["1L1"], - bugbite: ["1L1"], - bugbuzz: ["1L1"], - calmmind: ["1L1"], - confide: ["1L1"], - confuseray: ["1L1"], - defog: ["1L1"], - doubleteam: ["1L1"], - drainingkiss: ["1L1"], - dreameater: ["1L1"], - electroweb: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - flash: ["1L1"], - frustration: ["1L1"], - gigadrain: ["1L1"], - gigaimpact: ["1L1"], - gust: ["1L1"], - hiddenpower: ["1L1"], - holdhands: ["1L1"], - hurricane: ["1L1"], - hyperbeam: ["1L1"], - infestation: ["1L1"], - irondefense: ["1L1"], - laserfocus: ["1L1"], - lightscreen: ["1L1"], - poisonpowder: ["1L1"], - pollenpuff: ["1L1"], - pounce: ["1L1"], - powder: ["1L1"], - protect: ["1L1"], - psybeam: ["1L1"], - psychic: ["1L1"], - psychup: ["1L1"], - quiverdance: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roost: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - secretpower: ["1L1"], - signalbeam: ["1L1"], - sleeppowder: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - strugglebug: ["1L1"], - stunspore: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - supersonic: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - tailwind: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - toxic: ["1L1"], - uturn: ["1L1"], - }, - eventData: [ - {generation: 6, level: 12, moves: ["1L1"], pokeball: "cherishball"}, - ], - }, - vivillonpokeball: { - learnset: { - acrobatics: ["1L1"], - aerialace: ["1L1"], - aircutter: ["1L1"], - airslash: ["1L1"], - aromatherapy: ["1L1"], - attract: ["1L1"], - bugbite: ["1L1"], - bugbuzz: ["1L1"], - calmmind: ["1L1"], - confide: ["1L1"], - confuseray: ["1L1"], - defog: ["1L1"], - doubleteam: ["1L1"], - drainingkiss: ["1L1"], - dreameater: ["1L1"], - electroweb: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - flash: ["1L1"], - frustration: ["1L1"], - gigadrain: ["1L1"], - gigaimpact: ["1L1"], - gust: ["1L1"], - hiddenpower: ["1L1"], - hurricane: ["1L1"], - hyperbeam: ["1L1"], - infestation: ["1L1"], - irondefense: ["1L1"], - laserfocus: ["1L1"], - lightscreen: ["1L1"], - poisonpowder: ["1L1"], - pollenpuff: ["1L1"], - pounce: ["1L1"], - powder: ["1L1"], - protect: ["1L1"], - psybeam: ["1L1"], - psychic: ["1L1"], - psychup: ["1L1"], - quiverdance: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roost: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - secretpower: ["1L1"], - signalbeam: ["1L1"], - sleeppowder: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - strugglebug: ["1L1"], - stunspore: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - supersonic: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - tailwind: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - toxic: ["1L1"], - uturn: ["1L1"], - }, - eventData: [ - {generation: 6, level: 12, moves: ["1L1"], pokeball: "pokeball"}, - ], - eventOnly: false, - }, - litleo: { - learnset: { - acrobatics: ["1L1"], - attract: ["1L1"], - bodyslam: ["1L1"], - bulldoze: ["1L1"], - confide: ["1L1"], - crunch: ["1L1"], - darkpulse: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - echoedvoice: ["1L1"], - ember: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - entrainment: ["1L1"], - facade: ["1L1"], - fireblast: ["1L1"], - firefang: ["1L1"], - firespin: ["1L1"], - flamecharge: ["1L1"], - flamethrower: ["1L1"], - flareblitz: ["1L1"], - frustration: ["1L1"], - headbutt: ["1L1"], - heatwave: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hypervoice: ["1L1"], - incinerate: ["1L1"], - irontail: ["1L1"], - leer: ["1L1"], - mudslap: ["1L1"], - nobleroar: ["1L1"], - overheat: ["1L1"], - payback: ["1L1"], - protect: ["1L1"], - psychicfangs: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - roar: ["1L1"], - rocksmash: ["1L1"], - round: ["1L1"], - secretpower: ["1L1"], - sleeptalk: ["1L1"], - snarl: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thunderfang: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - wildcharge: ["1L1"], - willowisp: ["1L1"], - workup: ["1L1"], - yawn: ["1L1"], - }, - }, - pyroar: { - learnset: { - acrobatics: ["1L1"], - attract: ["1L1"], - bodyslam: ["1L1"], - bounce: ["1L1"], - bulldoze: ["1L1"], - burningjealousy: ["1L1"], - confide: ["1L1"], - crunch: ["1L1"], - darkpulse: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - echoedvoice: ["1L1"], - ember: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fireblast: ["1L1"], - firefang: ["1L1"], - firespin: ["1L1"], - flamecharge: ["1L1"], - flamethrower: ["1L1"], - flareblitz: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - headbutt: ["1L1"], - heatwave: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - hypervoice: ["1L1"], - incinerate: ["1L1"], - irontail: ["1L1"], - leer: ["1L1"], - mudslap: ["1L1"], - nobleroar: ["1L1"], - overheat: ["1L1"], - payback: ["1L1"], - protect: ["1L1"], - psychicfangs: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - roar: ["1L1"], - rocksmash: ["1L1"], - round: ["1L1"], - secretpower: ["1L1"], - sleeptalk: ["1L1"], - snarl: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - temperflare: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thunderfang: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - wildcharge: ["1L1"], - willowisp: ["1L1"], - workup: ["1L1"], - }, - eventData: [ - {generation: 6, level: 49, gender: "M", perfectIVs: 2, abilities: ["1L1"], moves: ["1L1"], pokeball: "cherishball"}, - ], - encounters: [ - {generation: 6, level: 30}, - ], - }, - flabebe: { - learnset: { - afteryou: ["1L1"], - alluringvoice: ["1L1"], - allyswitch: ["1L1"], - aromatherapy: ["1L1"], - attract: ["1L1"], - batonpass: ["1L1"], - calmmind: ["1L1"], - camouflage: ["1L1"], - captivate: ["1L1"], - charm: ["1L1"], - chillingwater: ["1L1"], - confide: ["1L1"], - copycat: ["1L1"], - covet: ["1L1"], - dazzlinggleam: ["1L1"], - disarmingvoice: ["1L1"], - doubleteam: ["1L1"], - drainingkiss: ["1L1"], - echoedvoice: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - fairywind: ["1L1"], - flash: ["1L1"], - frustration: ["1L1"], - gigadrain: ["1L1"], - grassknot: ["1L1"], - grassyterrain: ["1L1"], - healbell: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - lightscreen: ["1L1"], - luckychant: ["1L1"], - magicalleaf: ["1L1"], - magiccoat: ["1L1"], - mistyterrain: ["1L1"], - moonblast: ["1L1"], - naturepower: ["1L1"], - petalblizzard: ["1L1"], - petaldance: ["1L1"], - pollenpuff: ["1L1"], - protect: ["1L1"], - psychic: ["1L1"], - raindance: ["1L1"], - razorleaf: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - secretpower: ["1L1"], - seedbomb: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - storedpower: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - synthesis: ["1L1"], - tackle: ["1L1"], - tearfullook: ["1L1"], - terablast: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - vinewhip: ["1L1"], - wish: ["1L1"], - worryseed: ["1L1"], - }, - }, - floette: { - learnset: { - afteryou: ["1L1"], - alluringvoice: ["1L1"], - allyswitch: ["1L1"], - aromatherapy: ["1L1"], - attract: ["1L1"], - batonpass: ["1L1"], - calmmind: ["1L1"], - charm: ["1L1"], - chillingwater: ["1L1"], - confide: ["1L1"], - covet: ["1L1"], - dazzlinggleam: ["1L1"], - disarmingvoice: ["1L1"], - doubleteam: ["1L1"], - drainingkiss: ["1L1"], - echoedvoice: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - fairywind: ["1L1"], - flash: ["1L1"], - frustration: ["1L1"], - gigadrain: ["1L1"], - grassknot: ["1L1"], - grassyterrain: ["1L1"], - healbell: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - lightscreen: ["1L1"], - luckychant: ["1L1"], - magicalleaf: ["1L1"], - magiccoat: ["1L1"], - metronome: ["1L1"], - mistyterrain: ["1L1"], - moonblast: ["1L1"], - naturepower: ["1L1"], - petalblizzard: ["1L1"], - petaldance: ["1L1"], - pollenpuff: ["1L1"], - protect: ["1L1"], - psychic: ["1L1"], - raindance: ["1L1"], - razorleaf: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - secretpower: ["1L1"], - seedbomb: ["1L1"], - skillswap: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - storedpower: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - synthesis: ["1L1"], - tackle: ["1L1"], - terablast: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - trick: ["1L1"], - vinewhip: ["1L1"], - wish: ["1L1"], - worryseed: ["1L1"], - }, - }, - floetteeternal: { - learnset: { - afteryou: ["1L1"], - allyswitch: ["1L1"], - aromatherapy: ["1L1"], - attract: ["1L1"], - calmmind: ["1L1"], - confide: ["1L1"], - covet: ["1L1"], - dazzlinggleam: ["1L1"], - doubleteam: ["1L1"], - echoedvoice: ["1L1"], - endeavor: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - fairywind: ["1L1"], - flash: ["1L1"], - frustration: ["1L1"], - gigadrain: ["1L1"], - grassknot: ["1L1"], - grassyterrain: ["1L1"], - healbell: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - lightofruin: ["1L1"], - luckychant: ["1L1"], - magicalleaf: ["1L1"], - magiccoat: ["1L1"], - mistyterrain: ["1L1"], - moonblast: ["1L1"], - naturepower: ["1L1"], - petalblizzard: ["1L1"], - petaldance: ["1L1"], - protect: ["1L1"], - psychic: ["1L1"], - raindance: ["1L1"], - razorleaf: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - secretpower: ["1L1"], - seedbomb: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - synthesis: ["1L1"], - tackle: ["1L1"], - toxic: ["1L1"], - vinewhip: ["1L1"], - wish: ["1L1"], - worryseed: ["1L1"], - }, - eventOnly: true, - }, - florges: { - learnset: { - afteryou: ["1L1"], - alluringvoice: ["1L1"], - allyswitch: ["1L1"], - aromatherapy: ["1L1"], - attract: ["1L1"], - batonpass: ["1L1"], - calmmind: ["1L1"], - charm: ["1L1"], - chillingwater: ["1L1"], - confide: ["1L1"], - covet: ["1L1"], - dazzlinggleam: ["1L1"], - defog: ["1L1"], - disarmingvoice: ["1L1"], - doubleteam: ["1L1"], - drainingkiss: ["1L1"], - echoedvoice: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - flash: ["1L1"], - flowershield: ["1L1"], - frustration: ["1L1"], - gigadrain: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - grassyterrain: ["1L1"], - healbell: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - lightscreen: ["1L1"], - luckychant: ["1L1"], - magicalleaf: ["1L1"], - magiccoat: ["1L1"], - metronome: ["1L1"], - mistyexplosion: ["1L1"], - mistyterrain: ["1L1"], - moonblast: ["1L1"], - naturepower: ["1L1"], - petalblizzard: ["1L1"], - petaldance: ["1L1"], - pollenpuff: ["1L1"], - protect: ["1L1"], - psychic: ["1L1"], - psychicnoise: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - secretpower: ["1L1"], - seedbomb: ["1L1"], - skillswap: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - storedpower: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - synthesis: ["1L1"], - terablast: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - trick: ["1L1"], - wish: ["1L1"], - worryseed: ["1L1"], - }, - }, - skiddo: { - learnset: { - attract: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - bulkup: ["1L1"], - bulldoze: ["1L1"], - bulletseed: ["1L1"], - confide: ["1L1"], - defensecurl: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - frustration: ["1L1"], - gigadrain: ["1L1"], - grassknot: ["1L1"], - grassyglide: ["1L1"], - grassyterrain: ["1L1"], - growth: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hornleech: ["1L1"], - irontail: ["1L1"], - leafblade: ["1L1"], - leafstorm: ["1L1"], - leechseed: ["1L1"], - magicalleaf: ["1L1"], - milkdrink: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - naturepower: ["1L1"], - payback: ["1L1"], - playrough: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - razorleaf: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - roar: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - secretpower: ["1L1"], - seedbomb: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - stompingtantrum: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - synthesis: ["1L1"], - tackle: ["1L1"], - tailwhip: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - vinewhip: ["1L1"], - wildcharge: ["1L1"], - workup: ["1L1"], - worryseed: ["1L1"], - zenheadbutt: ["1L1"], - }, - }, - gogoat: { - learnset: { - aerialace: ["1L1"], - attract: ["1L1"], - bodyslam: ["1L1"], - bounce: ["1L1"], - brickbreak: ["1L1"], - bulkup: ["1L1"], - bulldoze: ["1L1"], - bulletseed: ["1L1"], - confide: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - earthquake: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - frustration: ["1L1"], - gigadrain: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - grassyglide: ["1L1"], - grassyterrain: ["1L1"], - growth: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - highhorsepower: ["1L1"], - hornleech: ["1L1"], - hyperbeam: ["1L1"], - irontail: ["1L1"], - leafblade: ["1L1"], - leafstorm: ["1L1"], - leechseed: ["1L1"], - magicalleaf: ["1L1"], - milkdrink: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - naturepower: ["1L1"], - payback: ["1L1"], - playrough: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - razorleaf: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - roar: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - round: ["1L1"], - secretpower: ["1L1"], - seedbomb: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - stompingtantrum: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - superpower: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - synthesis: ["1L1"], - tackle: ["1L1"], - tailwhip: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - throatchop: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - vinewhip: ["1L1"], - wildcharge: ["1L1"], - workup: ["1L1"], - worryseed: ["1L1"], - zenheadbutt: ["1L1"], - }, - encounters: [ - {generation: 6, level: 30}, - ], - }, - pancham: { - learnset: { - aerialace: ["1L1"], - armthrust: ["1L1"], - attract: ["1L1"], - block: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - bulkup: ["1L1"], - bulldoze: ["1L1"], - circlethrow: ["1L1"], - coaching: ["1L1"], - cometpunch: ["1L1"], - confide: ["1L1"], - covet: ["1L1"], - crunch: ["1L1"], - cut: ["1L1"], - darkpulse: ["1L1"], - dig: ["1L1"], - doubleteam: ["1L1"], - drainpunch: ["1L1"], - dualchop: ["1L1"], - echoedvoice: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - entrainment: ["1L1"], - facade: ["1L1"], - falseswipe: ["1L1"], - firepunch: ["1L1"], - fling: ["1L1"], - focuspunch: ["1L1"], - foulplay: ["1L1"], - frustration: ["1L1"], - grassknot: ["1L1"], - gunkshot: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hypervoice: ["1L1"], - icepunch: ["1L1"], - ironhead: ["1L1"], - karatechop: ["1L1"], - knockoff: ["1L1"], - lashout: ["1L1"], - leer: ["1L1"], - lowkick: ["1L1"], - lowsweep: ["1L1"], - mefirst: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - partingshot: ["1L1"], - payback: ["1L1"], - powertrip: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - quash: ["1L1"], - quickguard: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - roar: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - secretpower: ["1L1"], - seismictoss: ["1L1"], - shadowclaw: ["1L1"], - skyuppercut: ["1L1"], - slash: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - spite: ["1L1"], - stoneedge: ["1L1"], - stormthrow: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - superpower: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - swordsdance: ["1L1"], - tackle: ["1L1"], - taunt: ["1L1"], - thunderpunch: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - uproar: ["1L1"], - vitalthrow: ["1L1"], - workup: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 6, level: 30, gender: "M", nature: "Adamant", abilities: ["1L1"], moves: ["1L1"], pokeball: "cherishball"}, - ], - }, - pangoro: { - learnset: { - aerialace: ["1L1"], - armthrust: ["1L1"], - attract: ["1L1"], - beatup: ["1L1"], - block: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - bulkup: ["1L1"], - bulldoze: ["1L1"], - bulletpunch: ["1L1"], - circlethrow: ["1L1"], - closecombat: ["1L1"], - coaching: ["1L1"], - cometpunch: ["1L1"], - confide: ["1L1"], - covet: ["1L1"], - crunch: ["1L1"], - cut: ["1L1"], - darkestlariat: ["1L1"], - darkpulse: ["1L1"], - dig: ["1L1"], - doubleteam: ["1L1"], - dragonclaw: ["1L1"], - drainpunch: ["1L1"], - dualchop: ["1L1"], - earthquake: ["1L1"], - echoedvoice: ["1L1"], - embargo: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - entrainment: ["1L1"], - facade: ["1L1"], - falseswipe: ["1L1"], - firepunch: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - focusenergy: ["1L1"], - focuspunch: ["1L1"], - foulplay: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - gunkshot: ["1L1"], - hammerarm: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - honeclaws: ["1L1"], - hyperbeam: ["1L1"], - hypervoice: ["1L1"], - icepunch: ["1L1"], - infestation: ["1L1"], - ironhead: ["1L1"], - karatechop: ["1L1"], - knockoff: ["1L1"], - laserfocus: ["1L1"], - lashout: ["1L1"], - leer: ["1L1"], - lowkick: ["1L1"], - lowsweep: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - nightslash: ["1L1"], - outrage: ["1L1"], - partingshot: ["1L1"], - payback: ["1L1"], - poisonjab: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - quash: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - revenge: ["1L1"], - reversal: ["1L1"], - roar: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - scaryface: ["1L1"], - secretpower: ["1L1"], - shadowclaw: ["1L1"], - skyuppercut: ["1L1"], - slash: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - snarl: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - spite: ["1L1"], - stompingtantrum: ["1L1"], - stoneedge: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - superpower: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - swordsdance: ["1L1"], - tackle: ["1L1"], - taunt: ["1L1"], - thief: ["1L1"], - throatchop: ["1L1"], - thunderpunch: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - uproar: ["1L1"], - vitalthrow: ["1L1"], - workup: ["1L1"], - xscissor: ["1L1"], - zenheadbutt: ["1L1"], - }, - encounters: [ - {generation: 7, level: 24}, - ], - }, - furfrou: { - learnset: { - attract: ["1L1"], - babydolleyes: ["1L1"], - bite: ["1L1"], - captivate: ["1L1"], - chargebeam: ["1L1"], - charm: ["1L1"], - confide: ["1L1"], - cottonguard: ["1L1"], - darkpulse: ["1L1"], - dig: ["1L1"], - doubleteam: ["1L1"], - echoedvoice: ["1L1"], - endeavor: ["1L1"], - facade: ["1L1"], - flash: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - growl: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hypervoice: ["1L1"], - irontail: ["1L1"], - lastresort: ["1L1"], - mimic: ["1L1"], - odorsleuth: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - refresh: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - roar: ["1L1"], - rocksmash: ["1L1"], - roleplay: ["1L1"], - round: ["1L1"], - sandattack: ["1L1"], - secretpower: ["1L1"], - sleeptalk: ["1L1"], - snarl: ["1L1"], - snore: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - sunnyday: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - tackle: ["1L1"], - tailwhip: ["1L1"], - takedown: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - uproar: ["1L1"], - uturn: ["1L1"], - wildcharge: ["1L1"], - workup: ["1L1"], - zenheadbutt: ["1L1"], - }, - }, - espurr: { - learnset: { - allyswitch: ["1L1"], - assist: ["1L1"], - attract: ["1L1"], - barrier: ["1L1"], - calmmind: ["1L1"], - chargebeam: ["1L1"], - charm: ["1L1"], - confide: ["1L1"], - confusion: ["1L1"], - covet: ["1L1"], - cut: ["1L1"], - darkpulse: ["1L1"], - disarmingvoice: ["1L1"], - doubleteam: ["1L1"], - dreameater: ["1L1"], - echoedvoice: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - expandingforce: ["1L1"], - facade: ["1L1"], - fakeout: ["1L1"], - faketears: ["1L1"], - flash: ["1L1"], - frustration: ["1L1"], - gravity: ["1L1"], - healbell: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - irontail: ["1L1"], - leer: ["1L1"], - lightscreen: ["1L1"], - magiccoat: ["1L1"], - magicroom: ["1L1"], - nastyplot: ["1L1"], - payback: ["1L1"], - payday: ["1L1"], - playrough: ["1L1"], - protect: ["1L1"], - psybeam: ["1L1"], - psychic: ["1L1"], - psychicnoise: ["1L1"], - psychup: ["1L1"], - psyshock: ["1L1"], - raindance: ["1L1"], - recycle: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roleplay: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - scratch: ["1L1"], - secretpower: ["1L1"], - shadowball: ["1L1"], - shockwave: ["1L1"], - signalbeam: ["1L1"], - skillswap: ["1L1"], - sleeptalk: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - telekinesis: ["1L1"], - terablast: ["1L1"], - thunderbolt: ["1L1"], - thunderwave: ["1L1"], - tickle: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - trick: ["1L1"], - trickroom: ["1L1"], - wonderroom: ["1L1"], - workup: ["1L1"], - yawn: ["1L1"], - zenheadbutt: ["1L1"], - }, - }, - meowstic: { - learnset: { - alluringvoice: ["1L1"], - allyswitch: ["1L1"], - attract: ["1L1"], - batonpass: ["1L1"], - calmmind: ["1L1"], - chargebeam: ["1L1"], - charm: ["1L1"], - confide: ["1L1"], - confusion: ["1L1"], - covet: ["1L1"], - cut: ["1L1"], - darkpulse: ["1L1"], - dig: ["1L1"], - disarmingvoice: ["1L1"], - doubleteam: ["1L1"], - dreameater: ["1L1"], - echoedvoice: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - expandingforce: ["1L1"], - extrasensory: ["1L1"], - facade: ["1L1"], - fakeout: ["1L1"], - faketears: ["1L1"], - flash: ["1L1"], - frustration: ["1L1"], - futuresight: ["1L1"], - gigaimpact: ["1L1"], - gravity: ["1L1"], - healbell: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - imprison: ["1L1"], - irontail: ["1L1"], - leer: ["1L1"], - lightscreen: ["1L1"], - magicalleaf: ["1L1"], - magiccoat: ["1L1"], - magicroom: ["1L1"], - meanlook: ["1L1"], - miracleeye: ["1L1"], - mistyterrain: ["1L1"], - nastyplot: ["1L1"], - payback: ["1L1"], - payday: ["1L1"], - playrough: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - psybeam: ["1L1"], - psychic: ["1L1"], - psychicnoise: ["1L1"], - psychicterrain: ["1L1"], - psychup: ["1L1"], - psyshock: ["1L1"], - quickguard: ["1L1"], - raindance: ["1L1"], - recycle: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roleplay: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - scratch: ["1L1"], - secretpower: ["1L1"], - shadowball: ["1L1"], - shockwave: ["1L1"], - signalbeam: ["1L1"], - skillswap: ["1L1"], - sleeptalk: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - storedpower: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - tailslap: ["1L1"], - telekinesis: ["1L1"], - terablast: ["1L1"], - thunderbolt: ["1L1"], - thunderwave: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - trick: ["1L1"], - trickroom: ["1L1"], - wonderroom: ["1L1"], - workup: ["1L1"], - zenheadbutt: ["1L1"], - }, - }, - meowsticf: { - learnset: { - alluringvoice: ["1L1"], - allyswitch: ["1L1"], - attract: ["1L1"], - batonpass: ["1L1"], - calmmind: ["1L1"], - chargebeam: ["1L1"], - charm: ["1L1"], - confide: ["1L1"], - confusion: ["1L1"], - covet: ["1L1"], - cut: ["1L1"], - darkpulse: ["1L1"], - dig: ["1L1"], - disarmingvoice: ["1L1"], - doubleteam: ["1L1"], - dreameater: ["1L1"], - echoedvoice: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - expandingforce: ["1L1"], - extrasensory: ["1L1"], - facade: ["1L1"], - fakeout: ["1L1"], - faketears: ["1L1"], - flash: ["1L1"], - frustration: ["1L1"], - futuresight: ["1L1"], - gigaimpact: ["1L1"], - gravity: ["1L1"], - healbell: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - irontail: ["1L1"], - leer: ["1L1"], - lightscreen: ["1L1"], - magicalleaf: ["1L1"], - magiccoat: ["1L1"], - magicroom: ["1L1"], - mefirst: ["1L1"], - nastyplot: ["1L1"], - payback: ["1L1"], - payday: ["1L1"], - playrough: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - psybeam: ["1L1"], - psychic: ["1L1"], - psychicnoise: ["1L1"], - psychicterrain: ["1L1"], - psychup: ["1L1"], - psyshock: ["1L1"], - raindance: ["1L1"], - recycle: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roleplay: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - scratch: ["1L1"], - secretpower: ["1L1"], - shadowball: ["1L1"], - shockwave: ["1L1"], - signalbeam: ["1L1"], - skillswap: ["1L1"], - sleeptalk: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - storedpower: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - tailslap: ["1L1"], - telekinesis: ["1L1"], - terablast: ["1L1"], - thunderbolt: ["1L1"], - thunderwave: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - trick: ["1L1"], - trickroom: ["1L1"], - wonderroom: ["1L1"], - workup: ["1L1"], - zenheadbutt: ["1L1"], - }, - }, - honedge: { - learnset: { - aerialace: ["1L1"], - afteryou: ["1L1"], - attract: ["1L1"], - autotomize: ["1L1"], - block: ["1L1"], - brickbreak: ["1L1"], - brutalswing: ["1L1"], - closecombat: ["1L1"], - confide: ["1L1"], - cut: ["1L1"], - destinybond: ["1L1"], - doubleteam: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - falseswipe: ["1L1"], - flashcannon: ["1L1"], - frustration: ["1L1"], - furycutter: ["1L1"], - gyroball: ["1L1"], - hiddenpower: ["1L1"], - irondefense: ["1L1"], - ironhead: ["1L1"], - laserfocus: ["1L1"], - magnetrise: ["1L1"], - metalsound: ["1L1"], - nightslash: ["1L1"], - powertrick: ["1L1"], - protect: ["1L1"], - psychocut: ["1L1"], - pursuit: ["1L1"], - raindance: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - reversal: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - round: ["1L1"], - sacredsword: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - shadowclaw: ["1L1"], - shadowsneak: ["1L1"], - shockwave: ["1L1"], - slash: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - solarblade: ["1L1"], - spite: ["1L1"], - steelbeam: ["1L1"], - substitute: ["1L1"], - swagger: ["1L1"], - swordsdance: ["1L1"], - tackle: ["1L1"], - toxic: ["1L1"], - wideguard: ["1L1"], - }, - }, - doublade: { - learnset: { - aerialace: ["1L1"], - afteryou: ["1L1"], - attract: ["1L1"], - autotomize: ["1L1"], - brickbreak: ["1L1"], - brutalswing: ["1L1"], - closecombat: ["1L1"], - confide: ["1L1"], - cut: ["1L1"], - doubleteam: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - falseswipe: ["1L1"], - flashcannon: ["1L1"], - frustration: ["1L1"], - furycutter: ["1L1"], - gyroball: ["1L1"], - hiddenpower: ["1L1"], - irondefense: ["1L1"], - ironhead: ["1L1"], - laserfocus: ["1L1"], - magnetrise: ["1L1"], - metalsound: ["1L1"], - nightslash: ["1L1"], - powertrick: ["1L1"], - protect: ["1L1"], - psychocut: ["1L1"], - pursuit: ["1L1"], - raindance: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - reversal: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - round: ["1L1"], - sacredsword: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - shadowclaw: ["1L1"], - shadowsneak: ["1L1"], - shockwave: ["1L1"], - slash: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - solarblade: ["1L1"], - spite: ["1L1"], - steelbeam: ["1L1"], - substitute: ["1L1"], - swagger: ["1L1"], - swordsdance: ["1L1"], - tackle: ["1L1"], - toxic: ["1L1"], - }, - }, - aegislash: { - learnset: { - aerialace: ["1L1"], - afteryou: ["1L1"], - airslash: ["1L1"], - attract: ["1L1"], - autotomize: ["1L1"], - block: ["1L1"], - brickbreak: ["1L1"], - brutalswing: ["1L1"], - closecombat: ["1L1"], - confide: ["1L1"], - cut: ["1L1"], - doubleteam: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - falseswipe: ["1L1"], - flashcannon: ["1L1"], - frustration: ["1L1"], - furycutter: ["1L1"], - gigaimpact: ["1L1"], - gyroball: ["1L1"], - headsmash: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - irondefense: ["1L1"], - ironhead: ["1L1"], - kingsshield: ["1L1"], - laserfocus: ["1L1"], - magnetrise: ["1L1"], - metalsound: ["1L1"], - nightslash: ["1L1"], - powertrick: ["1L1"], - protect: ["1L1"], - psychocut: ["1L1"], - pursuit: ["1L1"], - raindance: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - reversal: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - round: ["1L1"], - sacredsword: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - shadowball: ["1L1"], - shadowclaw: ["1L1"], - shadowsneak: ["1L1"], - shockwave: ["1L1"], - slash: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - solarblade: ["1L1"], - spite: ["1L1"], - steelbeam: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swordsdance: ["1L1"], - tackle: ["1L1"], - toxic: ["1L1"], - wideguard: ["1L1"], - }, - eventData: [ - {generation: 6, level: 50, gender: "F", nature: "Quiet", moves: ["1L1"], pokeball: "cherishball"}, - ], - }, - spritzee: { - learnset: { - afteryou: ["1L1"], - allyswitch: ["1L1"], - aromatherapy: ["1L1"], - attract: ["1L1"], - calmmind: ["1L1"], - captivate: ["1L1"], - chargebeam: ["1L1"], - charm: ["1L1"], - confide: ["1L1"], - covet: ["1L1"], - dazzlinggleam: ["1L1"], - disable: ["1L1"], - disarmingvoice: ["1L1"], - doubleteam: ["1L1"], - drainingkiss: ["1L1"], - dreameater: ["1L1"], - echoedvoice: ["1L1"], - encore: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - fairywind: ["1L1"], - faketears: ["1L1"], - flail: ["1L1"], - flash: ["1L1"], - flashcannon: ["1L1"], - frustration: ["1L1"], - gyroball: ["1L1"], - healbell: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - lightscreen: ["1L1"], - magiccoat: ["1L1"], - mistyexplosion: ["1L1"], - mistyterrain: ["1L1"], - moonblast: ["1L1"], - nastyplot: ["1L1"], - odorsleuth: ["1L1"], - protect: ["1L1"], - psychic: ["1L1"], - psychup: ["1L1"], - raindance: ["1L1"], - reflect: ["1L1"], - refresh: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - round: ["1L1"], - secretpower: ["1L1"], - skillswap: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - sweetkiss: ["1L1"], - sweetscent: ["1L1"], - telekinesis: ["1L1"], - thunderbolt: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - trickroom: ["1L1"], - wish: ["1L1"], - }, - }, - aromatisse: { - learnset: { - afteryou: ["1L1"], - allyswitch: ["1L1"], - aromatherapy: ["1L1"], - aromaticmist: ["1L1"], - attract: ["1L1"], - calmmind: ["1L1"], - chargebeam: ["1L1"], - charm: ["1L1"], - confide: ["1L1"], - covet: ["1L1"], - dazzlinggleam: ["1L1"], - disable: ["1L1"], - disarmingvoice: ["1L1"], - doubleteam: ["1L1"], - drainingkiss: ["1L1"], - drainpunch: ["1L1"], - dreameater: ["1L1"], - echoedvoice: ["1L1"], - encore: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - fairywind: ["1L1"], - faketears: ["1L1"], - flail: ["1L1"], - flash: ["1L1"], - flashcannon: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - gyroball: ["1L1"], - healbell: ["1L1"], - healpulse: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - lightscreen: ["1L1"], - magiccoat: ["1L1"], - metronome: ["1L1"], - mistyexplosion: ["1L1"], - mistyterrain: ["1L1"], - moonblast: ["1L1"], - nastyplot: ["1L1"], - odorsleuth: ["1L1"], - protect: ["1L1"], - psychic: ["1L1"], - psychup: ["1L1"], - psyshock: ["1L1"], - raindance: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - round: ["1L1"], - secretpower: ["1L1"], - skillswap: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - sweetkiss: ["1L1"], - sweetscent: ["1L1"], - telekinesis: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - trickroom: ["1L1"], - }, - eventData: [ - {generation: 6, level: 50, nature: "Relaxed", isHidden: true, moves: ["1L1"], pokeball: "cherishball"}, - ], - }, - swirlix: { - learnset: { - afteryou: ["1L1"], - amnesia: ["1L1"], - aromatherapy: ["1L1"], - attract: ["1L1"], - bellydrum: ["1L1"], - calmmind: ["1L1"], - charm: ["1L1"], - confide: ["1L1"], - copycat: ["1L1"], - cottonguard: ["1L1"], - cottonspore: ["1L1"], - covet: ["1L1"], - dazzlinggleam: ["1L1"], - doubleteam: ["1L1"], - drainingkiss: ["1L1"], - dreameater: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - fairywind: ["1L1"], - faketears: ["1L1"], - flamethrower: ["1L1"], - flash: ["1L1"], - frustration: ["1L1"], - gastroacid: ["1L1"], - healbell: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - lightscreen: ["1L1"], - magiccoat: ["1L1"], - mistyexplosion: ["1L1"], - playnice: ["1L1"], - playrough: ["1L1"], - protect: ["1L1"], - psychic: ["1L1"], - psychup: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - secretpower: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - stickyweb: ["1L1"], - stringshot: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - sweetscent: ["1L1"], - tackle: ["1L1"], - thief: ["1L1"], - thunderbolt: ["1L1"], - toxic: ["1L1"], - wish: ["1L1"], - yawn: ["1L1"], - }, - }, - slurpuff: { - learnset: { - afteryou: ["1L1"], - amnesia: ["1L1"], - aromatherapy: ["1L1"], - attract: ["1L1"], - calmmind: ["1L1"], - charm: ["1L1"], - confide: ["1L1"], - cottonguard: ["1L1"], - cottonspore: ["1L1"], - covet: ["1L1"], - dazzlinggleam: ["1L1"], - doubleteam: ["1L1"], - drainingkiss: ["1L1"], - drainpunch: ["1L1"], - dreameater: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - fairywind: ["1L1"], - faketears: ["1L1"], - flamethrower: ["1L1"], - flash: ["1L1"], - frustration: ["1L1"], - gastroacid: ["1L1"], - gigaimpact: ["1L1"], - healbell: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - lightscreen: ["1L1"], - magiccoat: ["1L1"], - metronome: ["1L1"], - mistyexplosion: ["1L1"], - playnice: ["1L1"], - playrough: ["1L1"], - protect: ["1L1"], - psychic: ["1L1"], - psychup: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - secretpower: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - stickyweb: ["1L1"], - stringshot: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - sweetscent: ["1L1"], - tackle: ["1L1"], - thief: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - toxic: ["1L1"], - wish: ["1L1"], - }, - }, - inkay: { - learnset: { - acupressure: ["1L1"], - aerialace: ["1L1"], - allyswitch: ["1L1"], - attract: ["1L1"], - batonpass: ["1L1"], - bind: ["1L1"], - calmmind: ["1L1"], - camouflage: ["1L1"], - confide: ["1L1"], - constrict: ["1L1"], - cut: ["1L1"], - darkpulse: ["1L1"], - destinybond: ["1L1"], - disable: ["1L1"], - doubleteam: ["1L1"], - embargo: ["1L1"], - endure: ["1L1"], - expandingforce: ["1L1"], - facade: ["1L1"], - faketears: ["1L1"], - flamethrower: ["1L1"], - flash: ["1L1"], - flatter: ["1L1"], - fling: ["1L1"], - foulplay: ["1L1"], - frustration: ["1L1"], - futuresight: ["1L1"], - gravity: ["1L1"], - guardswap: ["1L1"], - happyhour: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hypnosis: ["1L1"], - knockoff: ["1L1"], - lashout: ["1L1"], - lightscreen: ["1L1"], - liquidation: ["1L1"], - lunge: ["1L1"], - nastyplot: ["1L1"], - nightslash: ["1L1"], - payback: ["1L1"], - peck: ["1L1"], - pluck: ["1L1"], - powersplit: ["1L1"], - protect: ["1L1"], - psybeam: ["1L1"], - psychic: ["1L1"], - psychocut: ["1L1"], - psychup: ["1L1"], - psyshock: ["1L1"], - psywave: ["1L1"], - raindance: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - rockslide: ["1L1"], - roleplay: ["1L1"], - round: ["1L1"], - secretpower: ["1L1"], - simplebeam: ["1L1"], - skillswap: ["1L1"], - slash: ["1L1"], - sleeptalk: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - spite: ["1L1"], - storedpower: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - superpower: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - switcheroo: ["1L1"], - tackle: ["1L1"], - taunt: ["1L1"], - telekinesis: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thunderbolt: ["1L1"], - topsyturvy: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - trick: ["1L1"], - trickroom: ["1L1"], - wrap: ["1L1"], - }, - eventData: [ - {generation: 6, level: 10, moves: ["1L1"], pokeball: "cherishball"}, - ], - }, - malamar: { - learnset: { - aerialace: ["1L1"], - allyswitch: ["1L1"], - attract: ["1L1"], - batonpass: ["1L1"], - bind: ["1L1"], - block: ["1L1"], - brutalswing: ["1L1"], - calmmind: ["1L1"], - confide: ["1L1"], - constrict: ["1L1"], - cut: ["1L1"], - darkpulse: ["1L1"], - doubleteam: ["1L1"], - embargo: ["1L1"], - endure: ["1L1"], - expandingforce: ["1L1"], - facade: ["1L1"], - faketears: ["1L1"], - flamethrower: ["1L1"], - flash: ["1L1"], - fling: ["1L1"], - foulplay: ["1L1"], - frustration: ["1L1"], - futuresight: ["1L1"], - gigaimpact: ["1L1"], - gravity: ["1L1"], - guardswap: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - hypnosis: ["1L1"], - knockoff: ["1L1"], - lashout: ["1L1"], - lightscreen: ["1L1"], - liquidation: ["1L1"], - lunge: ["1L1"], - nastyplot: ["1L1"], - nightslash: ["1L1"], - payback: ["1L1"], - peck: ["1L1"], - pluck: ["1L1"], - protect: ["1L1"], - psybeam: ["1L1"], - psychic: ["1L1"], - psychicnoise: ["1L1"], - psychocut: ["1L1"], - psychup: ["1L1"], - psyshock: ["1L1"], - psywave: ["1L1"], - raindance: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - reversal: ["1L1"], - rockslide: ["1L1"], - roleplay: ["1L1"], - round: ["1L1"], - scaryface: ["1L1"], - secretpower: ["1L1"], - signalbeam: ["1L1"], - skillswap: ["1L1"], - slash: ["1L1"], - sleeptalk: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - spite: ["1L1"], - storedpower: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - superpower: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - switcheroo: ["1L1"], - tackle: ["1L1"], - taunt: ["1L1"], - telekinesis: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - throatchop: ["1L1"], - thunderbolt: ["1L1"], - topsyturvy: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - trick: ["1L1"], - trickroom: ["1L1"], - wrap: ["1L1"], - }, - eventData: [ - {generation: 6, level: 50, nature: "Adamant", ivs: {hp: 31, atk: 31}, abilities: ["1L1"], moves: ["1L1"], pokeball: "cherishball"}, - ], - }, - binacle: { - learnset: { - aerialace: ["1L1"], - ancientpower: ["1L1"], - assurance: ["1L1"], - attract: ["1L1"], - beatup: ["1L1"], - blizzard: ["1L1"], - brickbreak: ["1L1"], - bulldoze: ["1L1"], - clamp: ["1L1"], - confide: ["1L1"], - crosschop: ["1L1"], - cut: ["1L1"], - dig: ["1L1"], - doubleteam: ["1L1"], - dualchop: ["1L1"], - earthquake: ["1L1"], - embargo: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - falseswipe: ["1L1"], - fling: ["1L1"], - frustration: ["1L1"], - furycutter: ["1L1"], - furyswipes: ["1L1"], - grassknot: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - honeclaws: ["1L1"], - icebeam: ["1L1"], - icywind: ["1L1"], - infestation: ["1L1"], - irondefense: ["1L1"], - liquidation: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - naturepower: ["1L1"], - nightslash: ["1L1"], - payback: ["1L1"], - poisonjab: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - razorshell: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rockblast: ["1L1"], - rockpolish: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - sandattack: ["1L1"], - sandstorm: ["1L1"], - scald: ["1L1"], - scratch: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - shadowclaw: ["1L1"], - shellsmash: ["1L1"], - slash: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - sludgewave: ["1L1"], - smackdown: ["1L1"], - snore: ["1L1"], - stealthrock: ["1L1"], - stoneedge: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - switcheroo: ["1L1"], - swordsdance: ["1L1"], - taunt: ["1L1"], - thief: ["1L1"], - tickle: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - uproar: ["1L1"], - watergun: ["1L1"], - waterpulse: ["1L1"], - watersport: ["1L1"], - withdraw: ["1L1"], - xscissor: ["1L1"], - }, - }, - barbaracle: { - learnset: { - aerialace: ["1L1"], - ancientpower: ["1L1"], - assurance: ["1L1"], - attract: ["1L1"], - beatup: ["1L1"], - blizzard: ["1L1"], - brickbreak: ["1L1"], - brutalswing: ["1L1"], - bulkup: ["1L1"], - bulldoze: ["1L1"], - clamp: ["1L1"], - confide: ["1L1"], - crosschop: ["1L1"], - cut: ["1L1"], - dig: ["1L1"], - dive: ["1L1"], - doubleteam: ["1L1"], - dragonclaw: ["1L1"], - dualchop: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - embargo: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - falseswipe: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - frustration: ["1L1"], - furycutter: ["1L1"], - furyswipes: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - honeclaws: ["1L1"], - hyperbeam: ["1L1"], - icebeam: ["1L1"], - icywind: ["1L1"], - infestation: ["1L1"], - irondefense: ["1L1"], - laserfocus: ["1L1"], - liquidation: ["1L1"], - lowkick: ["1L1"], - meteorbeam: ["1L1"], - muddywater: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - naturepower: ["1L1"], - nightslash: ["1L1"], - payback: ["1L1"], - poisonjab: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - razorshell: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rockblast: ["1L1"], - rockpolish: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - sandattack: ["1L1"], - sandstorm: ["1L1"], - scald: ["1L1"], - scratch: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - shadowclaw: ["1L1"], - shellsmash: ["1L1"], - skullbash: ["1L1"], - slash: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - sludgewave: ["1L1"], - smackdown: ["1L1"], - snore: ["1L1"], - stealthrock: ["1L1"], - stoneedge: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - superpower: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - swordsdance: ["1L1"], - taunt: ["1L1"], - thief: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - uproar: ["1L1"], - watergun: ["1L1"], - waterpulse: ["1L1"], - whirlpool: ["1L1"], - withdraw: ["1L1"], - xscissor: ["1L1"], - }, - encounters: [ - {generation: 6, level: 30}, - ], - }, - skrelp: { - learnset: { - acid: ["1L1"], - acidarmor: ["1L1"], - acidspray: ["1L1"], - aquatail: ["1L1"], - attract: ["1L1"], - bounce: ["1L1"], - bubble: ["1L1"], - camouflage: ["1L1"], - chillingwater: ["1L1"], - confide: ["1L1"], - dive: ["1L1"], - doubleteam: ["1L1"], - dragonpulse: ["1L1"], - dragontail: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - feintattack: ["1L1"], - flipturn: ["1L1"], - frustration: ["1L1"], - gunkshot: ["1L1"], - hail: ["1L1"], - haze: ["1L1"], - hiddenpower: ["1L1"], - hydropump: ["1L1"], - icywind: ["1L1"], - irontail: ["1L1"], - liquidation: ["1L1"], - muddywater: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - outrage: ["1L1"], - playrough: ["1L1"], - poisontail: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - round: ["1L1"], - scald: ["1L1"], - scaleshot: ["1L1"], - scaryface: ["1L1"], - secretpower: ["1L1"], - shadowball: ["1L1"], - shockwave: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - sludgewave: ["1L1"], - smokescreen: ["1L1"], - snore: ["1L1"], - snowscape: ["1L1"], - spite: ["1L1"], - substitute: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - tackle: ["1L1"], - tailwhip: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thunderbolt: ["1L1"], - toxic: ["1L1"], - toxicspikes: ["1L1"], - twister: ["1L1"], - venomdrench: ["1L1"], - venoshock: ["1L1"], - waterfall: ["1L1"], - watergun: ["1L1"], - waterpulse: ["1L1"], - whirlpool: ["1L1"], - }, - }, - dragalge: { - learnset: { - acid: ["1L1"], - acidspray: ["1L1"], - aquatail: ["1L1"], - attract: ["1L1"], - bounce: ["1L1"], - bubble: ["1L1"], - camouflage: ["1L1"], - chillingwater: ["1L1"], - confide: ["1L1"], - dive: ["1L1"], - doubleteam: ["1L1"], - dracometeor: ["1L1"], - dragonpulse: ["1L1"], - dragontail: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - feintattack: ["1L1"], - flipturn: ["1L1"], - focusblast: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - gunkshot: ["1L1"], - hail: ["1L1"], - haze: ["1L1"], - hiddenpower: ["1L1"], - hydropump: ["1L1"], - hyperbeam: ["1L1"], - icywind: ["1L1"], - irontail: ["1L1"], - liquidation: ["1L1"], - muddywater: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - outrage: ["1L1"], - playrough: ["1L1"], - poisontail: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - round: ["1L1"], - scald: ["1L1"], - scaleshot: ["1L1"], - scaryface: ["1L1"], - secretpower: ["1L1"], - shadowball: ["1L1"], - shockwave: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - sludgewave: ["1L1"], - smokescreen: ["1L1"], - snore: ["1L1"], - snowscape: ["1L1"], - spite: ["1L1"], - substitute: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - tackle: ["1L1"], - tailwhip: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - toxic: ["1L1"], - toxicspikes: ["1L1"], - twister: ["1L1"], - venomdrench: ["1L1"], - venoshock: ["1L1"], - waterfall: ["1L1"], - watergun: ["1L1"], - waterpulse: ["1L1"], - whirlpool: ["1L1"], - }, - encounters: [ - {generation: 6, level: 35}, - ], - }, - clauncher: { - learnset: { - aquajet: ["1L1"], - aquatail: ["1L1"], - attract: ["1L1"], - aurasphere: ["1L1"], - blizzard: ["1L1"], - bounce: ["1L1"], - bubble: ["1L1"], - bubblebeam: ["1L1"], - chillingwater: ["1L1"], - confide: ["1L1"], - crabhammer: ["1L1"], - cut: ["1L1"], - darkpulse: ["1L1"], - dive: ["1L1"], - doubleteam: ["1L1"], - dragonpulse: ["1L1"], - endure: ["1L1"], - entrainment: ["1L1"], - facade: ["1L1"], - flail: ["1L1"], - flashcannon: ["1L1"], - flipturn: ["1L1"], - frustration: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - honeclaws: ["1L1"], - hydropump: ["1L1"], - icebeam: ["1L1"], - icywind: ["1L1"], - irontail: ["1L1"], - liquidation: ["1L1"], - muddywater: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - pounce: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rockslide: ["1L1"], - round: ["1L1"], - scald: ["1L1"], - secretpower: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - sludgewave: ["1L1"], - smackdown: ["1L1"], - snore: ["1L1"], - splash: ["1L1"], - substitute: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - swordsdance: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - terrainpulse: ["1L1"], - thief: ["1L1"], - toxic: ["1L1"], - uturn: ["1L1"], - venoshock: ["1L1"], - visegrip: ["1L1"], - waterfall: ["1L1"], - watergun: ["1L1"], - waterpulse: ["1L1"], - watersport: ["1L1"], - weatherball: ["1L1"], - }, - }, - clawitzer: { - learnset: { - aquajet: ["1L1"], - aquatail: ["1L1"], - attract: ["1L1"], - aurasphere: ["1L1"], - blizzard: ["1L1"], - bodyslam: ["1L1"], - bounce: ["1L1"], - bubble: ["1L1"], - bubblebeam: ["1L1"], - chillingwater: ["1L1"], - confide: ["1L1"], - crabhammer: ["1L1"], - cut: ["1L1"], - darkpulse: ["1L1"], - dive: ["1L1"], - doubleteam: ["1L1"], - dragonpulse: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - flail: ["1L1"], - flashcannon: ["1L1"], - flipturn: ["1L1"], - focusblast: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - healpulse: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - honeclaws: ["1L1"], - hydropump: ["1L1"], - hyperbeam: ["1L1"], - icebeam: ["1L1"], - icywind: ["1L1"], - irontail: ["1L1"], - laserfocus: ["1L1"], - liquidation: ["1L1"], - muddywater: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - pounce: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rockslide: ["1L1"], - round: ["1L1"], - scald: ["1L1"], - scaryface: ["1L1"], - secretpower: ["1L1"], - shadowball: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - sludgewave: ["1L1"], - smackdown: ["1L1"], - snore: ["1L1"], - splash: ["1L1"], - substitute: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - swordsdance: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - terrainpulse: ["1L1"], - thief: ["1L1"], - toxic: ["1L1"], - uturn: ["1L1"], - venoshock: ["1L1"], - visegrip: ["1L1"], - waterfall: ["1L1"], - watergun: ["1L1"], - waterpulse: ["1L1"], - watersport: ["1L1"], - weatherball: ["1L1"], - }, - encounters: [ - {generation: 6, level: 35}, - ], - }, - helioptile: { - learnset: { - agility: ["1L1"], - allyswitch: ["1L1"], - attract: ["1L1"], - bulldoze: ["1L1"], - camouflage: ["1L1"], - charge: ["1L1"], - chargebeam: ["1L1"], - confide: ["1L1"], - cut: ["1L1"], - darkpulse: ["1L1"], - dig: ["1L1"], - doubleteam: ["1L1"], - dragonrush: ["1L1"], - dragontail: ["1L1"], - electricterrain: ["1L1"], - electrify: ["1L1"], - electroball: ["1L1"], - electroweb: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - flash: ["1L1"], - frustration: ["1L1"], - glare: ["1L1"], - grassknot: ["1L1"], - hiddenpower: ["1L1"], - irontail: ["1L1"], - lightscreen: ["1L1"], - lowsweep: ["1L1"], - magnetrise: ["1L1"], - mudslap: ["1L1"], - paraboliccharge: ["1L1"], - pound: ["1L1"], - protect: ["1L1"], - psychup: ["1L1"], - quickattack: ["1L1"], - raindance: ["1L1"], - razorwind: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - risingvoltage: ["1L1"], - rockslide: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - sandstorm: ["1L1"], - scaleshot: ["1L1"], - secretpower: ["1L1"], - shockwave: ["1L1"], - signalbeam: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - substitute: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - tailwhip: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thundershock: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - uturn: ["1L1"], - voltswitch: ["1L1"], - wildcharge: ["1L1"], - }, - }, - heliolisk: { - learnset: { - agility: ["1L1"], - allyswitch: ["1L1"], - attract: ["1L1"], - breakingswipe: ["1L1"], - brutalswing: ["1L1"], - bulldoze: ["1L1"], - charge: ["1L1"], - chargebeam: ["1L1"], - confide: ["1L1"], - cut: ["1L1"], - darkpulse: ["1L1"], - dig: ["1L1"], - discharge: ["1L1"], - doubleteam: ["1L1"], - dragonpulse: ["1L1"], - dragontail: ["1L1"], - eerieimpulse: ["1L1"], - electricterrain: ["1L1"], - electrify: ["1L1"], - electroball: ["1L1"], - electroweb: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - firepunch: ["1L1"], - flash: ["1L1"], - focusblast: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - hypervoice: ["1L1"], - irontail: ["1L1"], - lightscreen: ["1L1"], - lowkick: ["1L1"], - lowsweep: ["1L1"], - magnetrise: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - mudslap: ["1L1"], - paraboliccharge: ["1L1"], - pound: ["1L1"], - protect: ["1L1"], - psychup: ["1L1"], - quickattack: ["1L1"], - raindance: ["1L1"], - razorwind: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - risingvoltage: ["1L1"], - rockslide: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - sandstorm: ["1L1"], - scaleshot: ["1L1"], - secretpower: ["1L1"], - shockwave: ["1L1"], - signalbeam: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - tailwhip: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderpunch: ["1L1"], - thundershock: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - uturn: ["1L1"], - voltswitch: ["1L1"], - weatherball: ["1L1"], - wildcharge: ["1L1"], - }, - }, - tyrunt: { - learnset: { - aerialace: ["1L1"], - ancientpower: ["1L1"], - assurance: ["1L1"], - attract: ["1L1"], - bide: ["1L1"], - bite: ["1L1"], - block: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - bulldoze: ["1L1"], - charm: ["1L1"], - closecombat: ["1L1"], - confide: ["1L1"], - crunch: ["1L1"], - curse: ["1L1"], - darkpulse: ["1L1"], - dig: ["1L1"], - doubleteam: ["1L1"], - dracometeor: ["1L1"], - dragonclaw: ["1L1"], - dragondance: ["1L1"], - dragonpulse: ["1L1"], - dragontail: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - firefang: ["1L1"], - frustration: ["1L1"], - hiddenpower: ["1L1"], - honeclaws: ["1L1"], - horndrill: ["1L1"], - hypervoice: ["1L1"], - icefang: ["1L1"], - irondefense: ["1L1"], - ironhead: ["1L1"], - irontail: ["1L1"], - lashout: ["1L1"], - meteorbeam: ["1L1"], - outrage: ["1L1"], - playrough: ["1L1"], - poisonfang: ["1L1"], - protect: ["1L1"], - psychicfangs: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roar: ["1L1"], - rockblast: ["1L1"], - rockpolish: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rockthrow: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - sandstorm: ["1L1"], - scaleshot: ["1L1"], - scaryface: ["1L1"], - secretpower: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - stealthrock: ["1L1"], - stomp: ["1L1"], - stompingtantrum: ["1L1"], - stoneedge: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - superpower: ["1L1"], - swagger: ["1L1"], - tackle: ["1L1"], - tailwhip: ["1L1"], - thrash: ["1L1"], - thunderfang: ["1L1"], - toxic: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 6, level: 10, isHidden: true, moves: ["1L1"], pokeball: "cherishball"}, - ], - }, - tyrantrum: { - learnset: { - aerialace: ["1L1"], - ancientpower: ["1L1"], - assurance: ["1L1"], - attract: ["1L1"], - bide: ["1L1"], - bite: ["1L1"], - block: ["1L1"], - bodyslam: ["1L1"], - breakingswipe: ["1L1"], - brickbreak: ["1L1"], - brutalswing: ["1L1"], - bulldoze: ["1L1"], - charm: ["1L1"], - closecombat: ["1L1"], - confide: ["1L1"], - crunch: ["1L1"], - darkpulse: ["1L1"], - dig: ["1L1"], - doubleteam: ["1L1"], - dracometeor: ["1L1"], - dragonclaw: ["1L1"], - dragondance: ["1L1"], - dragonpulse: ["1L1"], - dragontail: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - firefang: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - headsmash: ["1L1"], - hiddenpower: ["1L1"], - highhorsepower: ["1L1"], - honeclaws: ["1L1"], - horndrill: ["1L1"], - hyperbeam: ["1L1"], - hypervoice: ["1L1"], - icefang: ["1L1"], - irondefense: ["1L1"], - ironhead: ["1L1"], - irontail: ["1L1"], - lashout: ["1L1"], - meteorbeam: ["1L1"], - outrage: ["1L1"], - playrough: ["1L1"], - protect: ["1L1"], - psychicfangs: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roar: ["1L1"], - rockblast: ["1L1"], - rockpolish: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - sandstorm: ["1L1"], - scaleshot: ["1L1"], - scaryface: ["1L1"], - secretpower: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - stealthrock: ["1L1"], - stomp: ["1L1"], - stompingtantrum: ["1L1"], - stoneedge: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - superpower: ["1L1"], - swagger: ["1L1"], - tackle: ["1L1"], - tailwhip: ["1L1"], - thrash: ["1L1"], - thunderfang: ["1L1"], - toxic: ["1L1"], - zenheadbutt: ["1L1"], - }, - }, - amaura: { - learnset: { - ancientpower: ["1L1"], - aquatail: ["1L1"], - attract: ["1L1"], - aurorabeam: ["1L1"], - auroraveil: ["1L1"], - avalanche: ["1L1"], - barrier: ["1L1"], - blizzard: ["1L1"], - bodyslam: ["1L1"], - bulldoze: ["1L1"], - calmmind: ["1L1"], - chargebeam: ["1L1"], - confide: ["1L1"], - darkpulse: ["1L1"], - discharge: ["1L1"], - doubleteam: ["1L1"], - dragontail: ["1L1"], - dreameater: ["1L1"], - earthpower: ["1L1"], - echoedvoice: ["1L1"], - encore: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - flash: ["1L1"], - flashcannon: ["1L1"], - freezedry: ["1L1"], - frostbreath: ["1L1"], - frustration: ["1L1"], - growl: ["1L1"], - hail: ["1L1"], - haze: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - hypervoice: ["1L1"], - icebeam: ["1L1"], - icywind: ["1L1"], - irondefense: ["1L1"], - ironhead: ["1L1"], - irontail: ["1L1"], - lightscreen: ["1L1"], - magnetrise: ["1L1"], - meteorbeam: ["1L1"], - mirrorcoat: ["1L1"], - mist: ["1L1"], - mudshot: ["1L1"], - naturepower: ["1L1"], - outrage: ["1L1"], - powdersnow: ["1L1"], - protect: ["1L1"], - psychup: ["1L1"], - raindance: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roar: ["1L1"], - rockblast: ["1L1"], - rockpolish: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rockthrow: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - sandstorm: ["1L1"], - secretpower: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - stealthrock: ["1L1"], - stoneedge: ["1L1"], - substitute: ["1L1"], - swagger: ["1L1"], - takedown: ["1L1"], - thunderbolt: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - waterpulse: ["1L1"], - weatherball: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 6, level: 10, isHidden: true, moves: ["1L1"], pokeball: "cherishball"}, - ], - }, - aurorus: { - learnset: { - ancientpower: ["1L1"], - aquatail: ["1L1"], - attract: ["1L1"], - aurorabeam: ["1L1"], - avalanche: ["1L1"], - blizzard: ["1L1"], - bodyslam: ["1L1"], - bulldoze: ["1L1"], - calmmind: ["1L1"], - chargebeam: ["1L1"], - confide: ["1L1"], - darkpulse: ["1L1"], - doubleteam: ["1L1"], - dragontail: ["1L1"], - dreameater: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - echoedvoice: ["1L1"], - encore: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - flash: ["1L1"], - flashcannon: ["1L1"], - freezedry: ["1L1"], - frostbreath: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - growl: ["1L1"], - hail: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - hypervoice: ["1L1"], - icebeam: ["1L1"], - iciclespear: ["1L1"], - icywind: ["1L1"], - irondefense: ["1L1"], - ironhead: ["1L1"], - irontail: ["1L1"], - lightscreen: ["1L1"], - magnetrise: ["1L1"], - meteorbeam: ["1L1"], - mist: ["1L1"], - mudshot: ["1L1"], - naturepower: ["1L1"], - outrage: ["1L1"], - powdersnow: ["1L1"], - protect: ["1L1"], - psychic: ["1L1"], - psychup: ["1L1"], - raindance: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roar: ["1L1"], - rockblast: ["1L1"], - rockpolish: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rockthrow: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - sandstorm: ["1L1"], - secretpower: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - stealthrock: ["1L1"], - stoneedge: ["1L1"], - substitute: ["1L1"], - swagger: ["1L1"], - takedown: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - waterpulse: ["1L1"], - weatherball: ["1L1"], - zenheadbutt: ["1L1"], - }, - }, - sylveon: { - learnset: { - alluringvoice: ["1L1"], - attract: ["1L1"], - babydolleyes: ["1L1"], - batonpass: ["1L1"], - bite: ["1L1"], - bodyslam: ["1L1"], - calmmind: ["1L1"], - celebrate: ["1L1"], - charm: ["1L1"], - confide: ["1L1"], - copycat: ["1L1"], - covet: ["1L1"], - curse: ["1L1"], - cut: ["1L1"], - dazzlinggleam: ["1L1"], - dig: ["1L1"], - disarmingvoice: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - drainingkiss: ["1L1"], - echoedvoice: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fairywind: ["1L1"], - faketears: ["1L1"], - flash: ["1L1"], - focusenergy: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - growl: ["1L1"], - healbell: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - hypervoice: ["1L1"], - irontail: ["1L1"], - laserfocus: ["1L1"], - lastresort: ["1L1"], - lightscreen: ["1L1"], - magicalleaf: ["1L1"], - magiccoat: ["1L1"], - mistyexplosion: ["1L1"], - mistyterrain: ["1L1"], - moonblast: ["1L1"], - mudslap: ["1L1"], - mysticalfire: ["1L1"], - payday: ["1L1"], - playrough: ["1L1"], - protect: ["1L1"], - psychic: ["1L1"], - psychup: ["1L1"], - psyshock: ["1L1"], - quickattack: ["1L1"], - raindance: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - roar: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - sandattack: ["1L1"], - secretpower: ["1L1"], - shadowball: ["1L1"], - skillswap: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - storedpower: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - tackle: ["1L1"], - tailwhip: ["1L1"], - takedown: ["1L1"], - telekinesis: ["1L1"], - terablast: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - weatherball: ["1L1"], - workup: ["1L1"], - }, - eventData: [ - {generation: 6, level: 10, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 6, level: 10, gender: "F", moves: ["1L1"], pokeball: "cherishball"}, - {generation: 7, level: 50, gender: "F", isHidden: true, moves: ["1L1"], pokeball: "cherishball"}, - ], - }, - hawlucha: { - learnset: { - acrobatics: ["1L1"], - aerialace: ["1L1"], - agility: ["1L1"], - allyswitch: ["1L1"], - assurance: ["1L1"], - attract: ["1L1"], - batonpass: ["1L1"], - bodypress: ["1L1"], - bodyslam: ["1L1"], - bounce: ["1L1"], - bravebird: ["1L1"], - brickbreak: ["1L1"], - bulkup: ["1L1"], - closecombat: ["1L1"], - coaching: ["1L1"], - confide: ["1L1"], - crosschop: ["1L1"], - cut: ["1L1"], - defog: ["1L1"], - detect: ["1L1"], - dig: ["1L1"], - doubleteam: ["1L1"], - drainpunch: ["1L1"], - dualchop: ["1L1"], - dualwingbeat: ["1L1"], - encore: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - entrainment: ["1L1"], - facade: ["1L1"], - falseswipe: ["1L1"], - featherdance: ["1L1"], - feint: ["1L1"], - firepunch: ["1L1"], - fling: ["1L1"], - fly: ["1L1"], - flyingpress: ["1L1"], - focusblast: ["1L1"], - focuspunch: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - highjumpkick: ["1L1"], - honeclaws: ["1L1"], - hyperbeam: ["1L1"], - ironhead: ["1L1"], - karatechop: ["1L1"], - laserfocus: ["1L1"], - lastresort: ["1L1"], - lowkick: ["1L1"], - lowsweep: ["1L1"], - lunge: ["1L1"], - meanlook: ["1L1"], - mefirst: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - mudsport: ["1L1"], - payback: ["1L1"], - poisonjab: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - quickguard: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - revenge: ["1L1"], - reversal: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - roost: ["1L1"], - round: ["1L1"], - secretpower: ["1L1"], - skyattack: ["1L1"], - skydrop: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - steelwing: ["1L1"], - stoneedge: ["1L1"], - strength: ["1L1"], - submission: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - superpower: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - swordsdance: ["1L1"], - tackle: ["1L1"], - tailwind: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - throatchop: ["1L1"], - thunderpunch: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - upperhand: ["1L1"], - uproar: ["1L1"], - uturn: ["1L1"], - wingattack: ["1L1"], - workup: ["1L1"], - xscissor: ["1L1"], - zenheadbutt: ["1L1"], - }, - }, - dedenne: { - learnset: { - aerialace: ["1L1"], - agility: ["1L1"], - allyswitch: ["1L1"], - attract: ["1L1"], - charge: ["1L1"], - chargebeam: ["1L1"], - charm: ["1L1"], - confide: ["1L1"], - covet: ["1L1"], - cut: ["1L1"], - dazzlinggleam: ["1L1"], - dig: ["1L1"], - discharge: ["1L1"], - doubleteam: ["1L1"], - drainingkiss: ["1L1"], - eerieimpulse: ["1L1"], - electricterrain: ["1L1"], - electroball: ["1L1"], - electroweb: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - entrainment: ["1L1"], - facade: ["1L1"], - flash: ["1L1"], - fling: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - irontail: ["1L1"], - lastresort: ["1L1"], - lightscreen: ["1L1"], - magnetrise: ["1L1"], - mistyterrain: ["1L1"], - naturalgift: ["1L1"], - nuzzle: ["1L1"], - paraboliccharge: ["1L1"], - playrough: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - recycle: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - risingvoltage: ["1L1"], - round: ["1L1"], - secretpower: ["1L1"], - seedbomb: ["1L1"], - shockwave: ["1L1"], - signalbeam: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - superfang: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - tackle: ["1L1"], - tailwhip: ["1L1"], - takedown: ["1L1"], - tearfullook: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderpunch: ["1L1"], - thundershock: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - uturn: ["1L1"], - voltswitch: ["1L1"], - wildcharge: ["1L1"], - }, - }, - carbink: { - learnset: { - afteryou: ["1L1"], - allyswitch: ["1L1"], - ancientpower: ["1L1"], - bodypress: ["1L1"], - bodyslam: ["1L1"], - calmmind: ["1L1"], - charm: ["1L1"], - confide: ["1L1"], - covet: ["1L1"], - dazzlinggleam: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - earthpower: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - explosion: ["1L1"], - facade: ["1L1"], - flail: ["1L1"], - flash: ["1L1"], - flashcannon: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - gravity: ["1L1"], - guardsplit: ["1L1"], - guardswap: ["1L1"], - gyroball: ["1L1"], - hail: ["1L1"], - harden: ["1L1"], - heavyslam: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - irondefense: ["1L1"], - ironhead: ["1L1"], - lightscreen: ["1L1"], - magiccoat: ["1L1"], - magnetrise: ["1L1"], - meteorbeam: ["1L1"], - mistyexplosion: ["1L1"], - mistyterrain: ["1L1"], - moonblast: ["1L1"], - naturepower: ["1L1"], - powergem: ["1L1"], - protect: ["1L1"], - psychic: ["1L1"], - psychup: ["1L1"], - raindance: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rockblast: ["1L1"], - rockpolish: ["1L1"], - rockslide: ["1L1"], - rockthrow: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - sandstorm: ["1L1"], - sandtomb: ["1L1"], - secretpower: ["1L1"], - sharpen: ["1L1"], - skillswap: ["1L1"], - sleeptalk: ["1L1"], - smackdown: ["1L1"], - snore: ["1L1"], - spikes: ["1L1"], - stealthrock: ["1L1"], - stompingtantrum: ["1L1"], - stoneedge: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - telekinesis: ["1L1"], - terablast: ["1L1"], - terrainpulse: ["1L1"], - toxic: ["1L1"], - trickroom: ["1L1"], - wonderroom: ["1L1"], - }, - }, - goomy: { - learnset: { - absorb: ["1L1"], - acidarmor: ["1L1"], - attract: ["1L1"], - bide: ["1L1"], - bodyslam: ["1L1"], - bubble: ["1L1"], - charm: ["1L1"], - chillingwater: ["1L1"], - confide: ["1L1"], - counter: ["1L1"], - curse: ["1L1"], - doubleteam: ["1L1"], - dracometeor: ["1L1"], - dragonbreath: ["1L1"], - dragonpulse: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - flail: ["1L1"], - frustration: ["1L1"], - hiddenpower: ["1L1"], - infestation: ["1L1"], - irontail: ["1L1"], - lifedew: ["1L1"], - muddywater: ["1L1"], - mudshot: ["1L1"], - outrage: ["1L1"], - poisontail: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rockslide: ["1L1"], - round: ["1L1"], - secretpower: ["1L1"], - shockwave: ["1L1"], - skittersmack: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - sludgewave: ["1L1"], - snore: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thunderbolt: ["1L1"], - toxic: ["1L1"], - watergun: ["1L1"], - waterpulse: ["1L1"], - }, - eventData: [ - {generation: 7, level: 1, shiny: 1, isHidden: true, moves: ["1L1"], pokeball: "cherishball"}, - ], - }, - sliggoo: { - learnset: { - absorb: ["1L1"], - acidarmor: ["1L1"], - acidspray: ["1L1"], - attract: ["1L1"], - bide: ["1L1"], - blizzard: ["1L1"], - bodyslam: ["1L1"], - bubble: ["1L1"], - charm: ["1L1"], - chillingwater: ["1L1"], - confide: ["1L1"], - curse: ["1L1"], - doubleteam: ["1L1"], - dracometeor: ["1L1"], - dragonbreath: ["1L1"], - dragonpulse: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - flail: ["1L1"], - frustration: ["1L1"], - hiddenpower: ["1L1"], - icebeam: ["1L1"], - infestation: ["1L1"], - irontail: ["1L1"], - muddywater: ["1L1"], - mudshot: ["1L1"], - outrage: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rockslide: ["1L1"], - round: ["1L1"], - secretpower: ["1L1"], - shockwave: ["1L1"], - skittersmack: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - sludgewave: ["1L1"], - snore: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - toxic: ["1L1"], - watergun: ["1L1"], - waterpulse: ["1L1"], - }, - encounters: [ - {generation: 6, level: 30}, - ], - }, - sliggoohisui: { - learnset: { - absorb: ["1L1"], - acidarmor: ["1L1"], - acidspray: ["1L1"], - blizzard: ["1L1"], - bodyslam: ["1L1"], - charm: ["1L1"], - chillingwater: ["1L1"], - curse: ["1L1"], - dracometeor: ["1L1"], - dragonbreath: ["1L1"], - dragonpulse: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - flail: ["1L1"], - flashcannon: ["1L1"], - gyroball: ["1L1"], - heavyslam: ["1L1"], - icebeam: ["1L1"], - icespinner: ["1L1"], - ironhead: ["1L1"], - muddywater: ["1L1"], - mudshot: ["1L1"], - outrage: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - rockslide: ["1L1"], - rocktomb: ["1L1"], - sandstorm: ["1L1"], - shelter: ["1L1"], - skittersmack: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - sludgewave: ["1L1"], - steelbeam: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - watergun: ["1L1"], - waterpulse: ["1L1"], - }, - }, - goodra: { - learnset: { - absorb: ["1L1"], - acidspray: ["1L1"], - aquatail: ["1L1"], - assurance: ["1L1"], - attract: ["1L1"], - bide: ["1L1"], - blizzard: ["1L1"], - bodypress: ["1L1"], - bodyslam: ["1L1"], - breakingswipe: ["1L1"], - brutalswing: ["1L1"], - bubble: ["1L1"], - bulldoze: ["1L1"], - charm: ["1L1"], - chillingwater: ["1L1"], - confide: ["1L1"], - curse: ["1L1"], - doubleteam: ["1L1"], - dracometeor: ["1L1"], - dragonbreath: ["1L1"], - dragoncheer: ["1L1"], - dragonclaw: ["1L1"], - dragonpulse: ["1L1"], - dragontail: ["1L1"], - earthquake: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - feint: ["1L1"], - fireblast: ["1L1"], - firepunch: ["1L1"], - flail: ["1L1"], - flamethrower: ["1L1"], - focusblast: ["1L1"], - focuspunch: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - hail: ["1L1"], - hiddenpower: ["1L1"], - hydropump: ["1L1"], - hyperbeam: ["1L1"], - icebeam: ["1L1"], - incinerate: ["1L1"], - infestation: ["1L1"], - irontail: ["1L1"], - knockoff: ["1L1"], - laserfocus: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - muddywater: ["1L1"], - mudshot: ["1L1"], - outrage: ["1L1"], - poisontail: ["1L1"], - powerwhip: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - round: ["1L1"], - scald: ["1L1"], - secretpower: ["1L1"], - shockwave: ["1L1"], - skittersmack: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - sludgewave: ["1L1"], - snore: ["1L1"], - stompingtantrum: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - superpower: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - tearfullook: ["1L1"], - terablast: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderpunch: ["1L1"], - toxic: ["1L1"], - watergun: ["1L1"], - waterpulse: ["1L1"], - weatherball: ["1L1"], - }, - }, - goodrahisui: { - learnset: { - absorb: ["1L1"], - acidspray: ["1L1"], - blizzard: ["1L1"], - bodypress: ["1L1"], - bodyslam: ["1L1"], - breakingswipe: ["1L1"], - bulldoze: ["1L1"], - charm: ["1L1"], - chillingwater: ["1L1"], - curse: ["1L1"], - dracometeor: ["1L1"], - dragonbreath: ["1L1"], - dragoncheer: ["1L1"], - dragonclaw: ["1L1"], - dragonpulse: ["1L1"], - dragontail: ["1L1"], - earthquake: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - feint: ["1L1"], - fireblast: ["1L1"], - firepunch: ["1L1"], - flail: ["1L1"], - flamethrower: ["1L1"], - flashcannon: ["1L1"], - gigaimpact: ["1L1"], - gyroball: ["1L1"], - heavyslam: ["1L1"], - hydropump: ["1L1"], - hyperbeam: ["1L1"], - icebeam: ["1L1"], - icespinner: ["1L1"], - ironhead: ["1L1"], - irontail: ["1L1"], - knockoff: ["1L1"], - lashout: ["1L1"], - muddywater: ["1L1"], - mudshot: ["1L1"], - outrage: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - rockslide: ["1L1"], - rocktomb: ["1L1"], - sandstorm: ["1L1"], - scaryface: ["1L1"], - shelter: ["1L1"], - skittersmack: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - sludgewave: ["1L1"], - steelbeam: ["1L1"], - stompingtantrum: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - surf: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - tearfullook: ["1L1"], - terablast: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderpunch: ["1L1"], - watergun: ["1L1"], - waterpulse: ["1L1"], - weatherball: ["1L1"], - }, - }, - klefki: { - learnset: { - astonish: ["1L1"], - attract: ["1L1"], - calmmind: ["1L1"], - confide: ["1L1"], - covet: ["1L1"], - craftyshield: ["1L1"], - cut: ["1L1"], - dazzlinggleam: ["1L1"], - defog: ["1L1"], - doubleteam: ["1L1"], - drainingkiss: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fairylock: ["1L1"], - fairywind: ["1L1"], - flashcannon: ["1L1"], - foulplay: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - healblock: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - imprison: ["1L1"], - irondefense: ["1L1"], - lastresort: ["1L1"], - lightscreen: ["1L1"], - lockon: ["1L1"], - magiccoat: ["1L1"], - magicroom: ["1L1"], - magnetrise: ["1L1"], - metalsound: ["1L1"], - mirrorshot: ["1L1"], - mistyterrain: ["1L1"], - playrough: ["1L1"], - protect: ["1L1"], - psychic: ["1L1"], - psychup: ["1L1"], - psyshock: ["1L1"], - raindance: ["1L1"], - recycle: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - sandstorm: ["1L1"], - secretpower: ["1L1"], - skittersmack: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - spikes: ["1L1"], - steelbeam: ["1L1"], - storedpower: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - switcheroo: ["1L1"], - tackle: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thunderwave: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - trickroom: ["1L1"], - }, - }, - phantump: { - learnset: { - allyswitch: ["1L1"], - astonish: ["1L1"], - attract: ["1L1"], - bestow: ["1L1"], - branchpoke: ["1L1"], - bulldoze: ["1L1"], - confide: ["1L1"], - confuseray: ["1L1"], - curse: ["1L1"], - cut: ["1L1"], - darkpulse: ["1L1"], - destinybond: ["1L1"], - dig: ["1L1"], - disable: ["1L1"], - doubleteam: ["1L1"], - dreameater: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - feintattack: ["1L1"], - forestscurse: ["1L1"], - foulplay: ["1L1"], - frustration: ["1L1"], - gigadrain: ["1L1"], - grassknot: ["1L1"], - grassyglide: ["1L1"], - grassyterrain: ["1L1"], - growth: ["1L1"], - grudge: ["1L1"], - hex: ["1L1"], - hiddenpower: ["1L1"], - hornleech: ["1L1"], - imprison: ["1L1"], - ingrain: ["1L1"], - lashout: ["1L1"], - leechseed: ["1L1"], - magicalleaf: ["1L1"], - magiccoat: ["1L1"], - naturepower: ["1L1"], - nightshade: ["1L1"], - painsplit: ["1L1"], - phantomforce: ["1L1"], - poisonjab: ["1L1"], - poltergeist: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - psychic: ["1L1"], - psychup: ["1L1"], - raindance: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - roleplay: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - secretpower: ["1L1"], - seedbomb: ["1L1"], - shadowball: ["1L1"], - shadowclaw: ["1L1"], - skillswap: ["1L1"], - skittersmack: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - spite: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - tackle: ["1L1"], - telekinesis: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - trick: ["1L1"], - trickroom: ["1L1"], - venomdrench: ["1L1"], - willowisp: ["1L1"], - woodhammer: ["1L1"], - worryseed: ["1L1"], - }, - }, - trevenant: { - learnset: { - allyswitch: ["1L1"], - astonish: ["1L1"], - attract: ["1L1"], - block: ["1L1"], - branchpoke: ["1L1"], - brutalswing: ["1L1"], - bulldoze: ["1L1"], - burningjealousy: ["1L1"], - calmmind: ["1L1"], - confide: ["1L1"], - confuseray: ["1L1"], - curse: ["1L1"], - cut: ["1L1"], - darkpulse: ["1L1"], - destinybond: ["1L1"], - dig: ["1L1"], - doubleteam: ["1L1"], - drainpunch: ["1L1"], - dreameater: ["1L1"], - earthquake: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - feintattack: ["1L1"], - focusblast: ["1L1"], - forestscurse: ["1L1"], - foulplay: ["1L1"], - frustration: ["1L1"], - gigadrain: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - grassyglide: ["1L1"], - grassyterrain: ["1L1"], - growth: ["1L1"], - haze: ["1L1"], - hex: ["1L1"], - hiddenpower: ["1L1"], - honeclaws: ["1L1"], - hornleech: ["1L1"], - hyperbeam: ["1L1"], - imprison: ["1L1"], - ingrain: ["1L1"], - knockoff: ["1L1"], - lashout: ["1L1"], - leafstorm: ["1L1"], - leechseed: ["1L1"], - magicalleaf: ["1L1"], - magiccoat: ["1L1"], - naturepower: ["1L1"], - nightshade: ["1L1"], - painsplit: ["1L1"], - phantomforce: ["1L1"], - poisonjab: ["1L1"], - poltergeist: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - psychic: ["1L1"], - psychicnoise: ["1L1"], - psychup: ["1L1"], - raindance: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - roleplay: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - scaryface: ["1L1"], - secretpower: ["1L1"], - seedbomb: ["1L1"], - shadowball: ["1L1"], - shadowclaw: ["1L1"], - skillswap: ["1L1"], - skittersmack: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - spite: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - telekinesis: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - trick: ["1L1"], - trickroom: ["1L1"], - venomdrench: ["1L1"], - willowisp: ["1L1"], - woodhammer: ["1L1"], - worryseed: ["1L1"], - xscissor: ["1L1"], - }, - }, - pumpkaboo: { - learnset: { - allyswitch: ["1L1"], - astonish: ["1L1"], - attract: ["1L1"], - bestow: ["1L1"], - bulletseed: ["1L1"], - chargebeam: ["1L1"], - confide: ["1L1"], - confuseray: ["1L1"], - curse: ["1L1"], - darkpulse: ["1L1"], - destinybond: ["1L1"], - disable: ["1L1"], - doubleteam: ["1L1"], - dreameater: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - explosion: ["1L1"], - facade: ["1L1"], - fireblast: ["1L1"], - flamecharge: ["1L1"], - flamethrower: ["1L1"], - flash: ["1L1"], - foulplay: ["1L1"], - frustration: ["1L1"], - gigadrain: ["1L1"], - grassknot: ["1L1"], - grassyglide: ["1L1"], - gyroball: ["1L1"], - hex: ["1L1"], - hiddenpower: ["1L1"], - imprison: ["1L1"], - incinerate: ["1L1"], - leechseed: ["1L1"], - lightscreen: ["1L1"], - magiccoat: ["1L1"], - mysticalfire: ["1L1"], - naturepower: ["1L1"], - painsplit: ["1L1"], - poltergeist: ["1L1"], - protect: ["1L1"], - psychic: ["1L1"], - razorleaf: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - roleplay: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - scaryface: ["1L1"], - secretpower: ["1L1"], - seedbomb: ["1L1"], - shadowball: ["1L1"], - shadowsneak: ["1L1"], - skillswap: ["1L1"], - skittersmack: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - spite: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - synthesis: ["1L1"], - telekinesis: ["1L1"], - thief: ["1L1"], - toxic: ["1L1"], - trick: ["1L1"], - trickortreat: ["1L1"], - trickroom: ["1L1"], - willowisp: ["1L1"], - worryseed: ["1L1"], - }, - }, - pumpkaboosuper: { - learnset: { - astonish: ["1L1"], - scaryface: ["1L1"], - shadowsneak: ["1L1"], - trickortreat: ["1L1"], - }, - eventData: [ - {generation: 6, level: 50, moves: ["1L1"], pokeball: "cherishball"}, - ], - }, - gourgeist: { - learnset: { - allyswitch: ["1L1"], - astonish: ["1L1"], - attract: ["1L1"], - brutalswing: ["1L1"], - bulletseed: ["1L1"], - chargebeam: ["1L1"], - confide: ["1L1"], - confuseray: ["1L1"], - darkpulse: ["1L1"], - doubleteam: ["1L1"], - dreameater: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - explosion: ["1L1"], - facade: ["1L1"], - fireblast: ["1L1"], - flamecharge: ["1L1"], - flamethrower: ["1L1"], - flash: ["1L1"], - focusblast: ["1L1"], - foulplay: ["1L1"], - frustration: ["1L1"], - gigadrain: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - grassyglide: ["1L1"], - gyroball: ["1L1"], - hex: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - imprison: ["1L1"], - incinerate: ["1L1"], - leechseed: ["1L1"], - lightscreen: ["1L1"], - magiccoat: ["1L1"], - moonblast: ["1L1"], - mysticalfire: ["1L1"], - nastyplot: ["1L1"], - naturepower: ["1L1"], - painsplit: ["1L1"], - phantomforce: ["1L1"], - poltergeist: ["1L1"], - powerwhip: ["1L1"], - protect: ["1L1"], - psychic: ["1L1"], - razorleaf: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - roleplay: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - scaryface: ["1L1"], - secretpower: ["1L1"], - seedbomb: ["1L1"], - shadowball: ["1L1"], - shadowsneak: ["1L1"], - skillswap: ["1L1"], - skittersmack: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - spite: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - synthesis: ["1L1"], - telekinesis: ["1L1"], - thief: ["1L1"], - toxic: ["1L1"], - trick: ["1L1"], - trickortreat: ["1L1"], - trickroom: ["1L1"], - willowisp: ["1L1"], - worryseed: ["1L1"], - }, - }, - bergmite: { - learnset: { - afteryou: ["1L1"], - attract: ["1L1"], - auroraveil: ["1L1"], - avalanche: ["1L1"], - barrier: ["1L1"], - bite: ["1L1"], - blizzard: ["1L1"], - bodyslam: ["1L1"], - bulldoze: ["1L1"], - chillingwater: ["1L1"], - confide: ["1L1"], - crunch: ["1L1"], - curse: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - flash: ["1L1"], - flashcannon: ["1L1"], - frostbreath: ["1L1"], - frustration: ["1L1"], - gyroball: ["1L1"], - hail: ["1L1"], - harden: ["1L1"], - hiddenpower: ["1L1"], - iceball: ["1L1"], - icebeam: ["1L1"], - icefang: ["1L1"], - icespinner: ["1L1"], - iciclespear: ["1L1"], - icywind: ["1L1"], - irondefense: ["1L1"], - mirrorcoat: ["1L1"], - mist: ["1L1"], - powdersnow: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - rapidspin: ["1L1"], - recover: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rockpolish: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - secretpower: ["1L1"], - sharpen: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - snowscape: ["1L1"], - stoneedge: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - toxic: ["1L1"], - waterpulse: ["1L1"], - }, - }, - avalugg: { - learnset: { - afteryou: ["1L1"], - attract: ["1L1"], - avalanche: ["1L1"], - bite: ["1L1"], - blizzard: ["1L1"], - block: ["1L1"], - bodypress: ["1L1"], - bodyslam: ["1L1"], - bulldoze: ["1L1"], - chillingwater: ["1L1"], - confide: ["1L1"], - crunch: ["1L1"], - curse: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - earthquake: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - flash: ["1L1"], - flashcannon: ["1L1"], - frostbreath: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - gyroball: ["1L1"], - hail: ["1L1"], - harden: ["1L1"], - heavyslam: ["1L1"], - hiddenpower: ["1L1"], - highhorsepower: ["1L1"], - hydropump: ["1L1"], - hyperbeam: ["1L1"], - iceball: ["1L1"], - icebeam: ["1L1"], - icefang: ["1L1"], - icespinner: ["1L1"], - iciclecrash: ["1L1"], - iciclespear: ["1L1"], - icywind: ["1L1"], - irondefense: ["1L1"], - ironhead: ["1L1"], - powdersnow: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - rapidspin: ["1L1"], - recover: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roar: ["1L1"], - rockpolish: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - scaryface: ["1L1"], - secretpower: ["1L1"], - sharpen: ["1L1"], - skullbash: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - snowscape: ["1L1"], - stompingtantrum: ["1L1"], - stoneedge: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - superpower: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - toxic: ["1L1"], - waterpulse: ["1L1"], - wideguard: ["1L1"], - }, - }, - avalugghisui: { - learnset: { - avalanche: ["1L1"], - bite: ["1L1"], - blizzard: ["1L1"], - bodypress: ["1L1"], - bodyslam: ["1L1"], - bulldoze: ["1L1"], - chillingwater: ["1L1"], - crunch: ["1L1"], - curse: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - earthquake: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - gigaimpact: ["1L1"], - gyroball: ["1L1"], - harden: ["1L1"], - hardpress: ["1L1"], - heavyslam: ["1L1"], - highhorsepower: ["1L1"], - hyperbeam: ["1L1"], - icebeam: ["1L1"], - icefang: ["1L1"], - icespinner: ["1L1"], - iciclespear: ["1L1"], - icywind: ["1L1"], - irondefense: ["1L1"], - ironhead: ["1L1"], - meteorbeam: ["1L1"], - mountaingale: ["1L1"], - powdersnow: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - rapidspin: ["1L1"], - recover: ["1L1"], - rest: ["1L1"], - rockblast: ["1L1"], - rockslide: ["1L1"], - rocktomb: ["1L1"], - sandstorm: ["1L1"], - scaryface: ["1L1"], - sleeptalk: ["1L1"], - snowscape: ["1L1"], - stealthrock: ["1L1"], - stompingtantrum: ["1L1"], - stoneedge: ["1L1"], - substitute: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - wideguard: ["1L1"], - }, - }, - noibat: { - learnset: { - absorb: ["1L1"], - acrobatics: ["1L1"], - aerialace: ["1L1"], - agility: ["1L1"], - aircutter: ["1L1"], - airslash: ["1L1"], - attract: ["1L1"], - bite: ["1L1"], - brickbreak: ["1L1"], - confide: ["1L1"], - cut: ["1L1"], - darkpulse: ["1L1"], - defog: ["1L1"], - doubleteam: ["1L1"], - dracometeor: ["1L1"], - dragonclaw: ["1L1"], - dragonpulse: ["1L1"], - dragonrush: ["1L1"], - dreameater: ["1L1"], - dualwingbeat: ["1L1"], - echoedvoice: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fly: ["1L1"], - frustration: ["1L1"], - gust: ["1L1"], - heatwave: ["1L1"], - hiddenpower: ["1L1"], - hurricane: ["1L1"], - hypervoice: ["1L1"], - irontail: ["1L1"], - leechlife: ["1L1"], - outrage: ["1L1"], - protect: ["1L1"], - psychic: ["1L1"], - razorwind: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roost: ["1L1"], - round: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - shadowball: ["1L1"], - shadowclaw: ["1L1"], - skyattack: ["1L1"], - sleeptalk: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - steelwing: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - superfang: ["1L1"], - supersonic: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - switcheroo: ["1L1"], - tackle: ["1L1"], - tailwind: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - uproar: ["1L1"], - uturn: ["1L1"], - waterpulse: ["1L1"], - whirlwind: ["1L1"], - wildcharge: ["1L1"], - wingattack: ["1L1"], - xscissor: ["1L1"], - }, - }, - noivern: { - learnset: { - absorb: ["1L1"], - acrobatics: ["1L1"], - aerialace: ["1L1"], - agility: ["1L1"], - aircutter: ["1L1"], - airslash: ["1L1"], - attract: ["1L1"], - bite: ["1L1"], - bodyslam: ["1L1"], - boomburst: ["1L1"], - breakingswipe: ["1L1"], - brickbreak: ["1L1"], - confide: ["1L1"], - cut: ["1L1"], - darkpulse: ["1L1"], - defog: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dracometeor: ["1L1"], - dragoncheer: ["1L1"], - dragonclaw: ["1L1"], - dragondance: ["1L1"], - dragonpulse: ["1L1"], - dragontail: ["1L1"], - dreameater: ["1L1"], - dualwingbeat: ["1L1"], - echoedvoice: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - flamethrower: ["1L1"], - fly: ["1L1"], - focusblast: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - gust: ["1L1"], - heatwave: ["1L1"], - hiddenpower: ["1L1"], - honeclaws: ["1L1"], - hurricane: ["1L1"], - hyperbeam: ["1L1"], - hypervoice: ["1L1"], - irontail: ["1L1"], - laserfocus: ["1L1"], - leechlife: ["1L1"], - moonlight: ["1L1"], - outrage: ["1L1"], - protect: ["1L1"], - psychic: ["1L1"], - psychicnoise: ["1L1"], - razorwind: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roost: ["1L1"], - round: ["1L1"], - scaryface: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - shadowball: ["1L1"], - shadowclaw: ["1L1"], - skyattack: ["1L1"], - sleeptalk: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - steelwing: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - superfang: ["1L1"], - supersonic: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - tackle: ["1L1"], - tailwind: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - uproar: ["1L1"], - uturn: ["1L1"], - waterpulse: ["1L1"], - whirlwind: ["1L1"], - wildcharge: ["1L1"], - wingattack: ["1L1"], - xscissor: ["1L1"], - }, - }, - xerneas: { - learnset: { - aromatherapy: ["1L1"], - aurorabeam: ["1L1"], - block: ["1L1"], - bodyslam: ["1L1"], - calmmind: ["1L1"], - closecombat: ["1L1"], - confide: ["1L1"], - cut: ["1L1"], - dazzlinggleam: ["1L1"], - defog: ["1L1"], - doubleteam: ["1L1"], - drainingkiss: ["1L1"], - echoedvoice: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - flash: ["1L1"], - flashcannon: ["1L1"], - focusblast: ["1L1"], - frustration: ["1L1"], - geomancy: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - gravity: ["1L1"], - hail: ["1L1"], - healpulse: ["1L1"], - hiddenpower: ["1L1"], - hornleech: ["1L1"], - hyperbeam: ["1L1"], - hypervoice: ["1L1"], - ingrain: ["1L1"], - laserfocus: ["1L1"], - lightscreen: ["1L1"], - megahorn: ["1L1"], - mistyexplosion: ["1L1"], - mistyterrain: ["1L1"], - moonblast: ["1L1"], - naturepower: ["1L1"], - nightslash: ["1L1"], - outrage: ["1L1"], - playrough: ["1L1"], - protect: ["1L1"], - psychic: ["1L1"], - psychup: ["1L1"], - psyshock: ["1L1"], - raindance: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roar: ["1L1"], - rockslide: ["1L1"], - round: ["1L1"], - secretpower: ["1L1"], - sleeptalk: ["1L1"], - smartstrike: ["1L1"], - snore: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - terrainpulse: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - wonderroom: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 6, level: 50, moves: ["1L1"]}, - {generation: 6, level: 100, shiny: true, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 7, level: 60, shiny: 1, moves: ["1L1"]}, - {generation: 7, level: 60, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 7, level: 100, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 8, level: 70, shiny: 1, moves: ["1L1"]}, - ], - eventOnly: false, - }, - yveltal: { - learnset: { - acrobatics: ["1L1"], - aerialace: ["1L1"], - airslash: ["1L1"], - block: ["1L1"], - bodyslam: ["1L1"], - confide: ["1L1"], - cut: ["1L1"], - darkpulse: ["1L1"], - defog: ["1L1"], - disable: ["1L1"], - doubleteam: ["1L1"], - dragonclaw: ["1L1"], - dragonrush: ["1L1"], - dreameater: ["1L1"], - dualwingbeat: ["1L1"], - embargo: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fly: ["1L1"], - focusblast: ["1L1"], - foulplay: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - gust: ["1L1"], - heatwave: ["1L1"], - hiddenpower: ["1L1"], - honeclaws: ["1L1"], - hurricane: ["1L1"], - hyperbeam: ["1L1"], - hypervoice: ["1L1"], - knockoff: ["1L1"], - laserfocus: ["1L1"], - lashout: ["1L1"], - oblivionwing: ["1L1"], - payback: ["1L1"], - phantomforce: ["1L1"], - protect: ["1L1"], - psychic: ["1L1"], - raindance: ["1L1"], - razorwind: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rockslide: ["1L1"], - roost: ["1L1"], - round: ["1L1"], - secretpower: ["1L1"], - shadowball: ["1L1"], - shadowclaw: ["1L1"], - skyattack: ["1L1"], - skydrop: ["1L1"], - sleeptalk: ["1L1"], - snarl: ["1L1"], - snore: ["1L1"], - steelwing: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - tailwind: ["1L1"], - taunt: ["1L1"], - thief: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - uturn: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 6, level: 50, moves: ["1L1"]}, - {generation: 6, level: 100, shiny: true, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 7, level: 60, shiny: 1, moves: ["1L1"]}, - {generation: 7, level: 60, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 7, level: 100, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 8, level: 70, shiny: 1, moves: ["1L1"]}, - ], - eventOnly: false, - }, - zygarde: { - learnset: { - bind: ["1L1"], - bite: ["1L1"], - block: ["1L1"], - bodyslam: ["1L1"], - breakingswipe: ["1L1"], - brickbreak: ["1L1"], - bulldoze: ["1L1"], - camouflage: ["1L1"], - coil: ["1L1"], - confide: ["1L1"], - coreenforcer: ["1L1"], - crunch: ["1L1"], - dig: ["1L1"], - doubleteam: ["1L1"], - dracometeor: ["1L1"], - dragonbreath: ["1L1"], - dragondance: ["1L1"], - dragonpulse: ["1L1"], - dragontail: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - endure: ["1L1"], - extremespeed: ["1L1"], - facade: ["1L1"], - focusblast: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - glare: ["1L1"], - grassknot: ["1L1"], - haze: ["1L1"], - hiddenpower: ["1L1"], - highhorsepower: ["1L1"], - hyperbeam: ["1L1"], - hypervoice: ["1L1"], - irontail: ["1L1"], - landswrath: ["1L1"], - outrage: ["1L1"], - painsplit: ["1L1"], - payback: ["1L1"], - protect: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - reversal: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - sandstorm: ["1L1"], - scaleshot: ["1L1"], - scorchingsands: ["1L1"], - secretpower: ["1L1"], - shockwave: ["1L1"], - skittersmack: ["1L1"], - sleeptalk: ["1L1"], - sludgewave: ["1L1"], - snore: ["1L1"], - spite: ["1L1"], - stompingtantrum: ["1L1"], - stoneedge: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - superpower: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - thousandarrows: ["1L1"], - thousandwaves: ["1L1"], - toxic: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 6, level: 70, moves: ["1L1"]}, - {generation: 6, level: 100, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 7, level: 30, moves: ["1L1"]}, - {generation: 7, level: 50, moves: ["1L1"]}, - {generation: 7, level: 50, isHidden: true, moves: ["1L1"]}, - {generation: 7, level: 60, shiny: true, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 7, level: 60, shiny: true, isHidden: true, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 7, level: 100, shiny: true, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 7, level: 100, shiny: true, isHidden: true, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 8, level: 70, shiny: 1, isHidden: true, moves: ["1L1"]}, - ], - eventOnly: false, - }, - zygarde10: { - learnset: { - bind: ["1L1"], - dig: ["1L1"], - dragonbreath: ["1L1"], - dragondance: ["1L1"], - dragonpulse: ["1L1"], - extremespeed: ["1L1"], - glare: ["1L1"], - haze: ["1L1"], - landswrath: ["1L1"], - outrage: ["1L1"], - safeguard: ["1L1"], - sandstorm: ["1L1"], - thousandarrows: ["1L1"], - }, - eventData: [ - {generation: 7, level: 30, moves: ["1L1"]}, - {generation: 7, level: 50, isHidden: true, moves: ["1L1"]}, - {generation: 7, level: 50, isHidden: true, moves: ["1L1"]}, - {generation: 7, level: 60, shiny: true, isHidden: true, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 7, level: 100, shiny: true, isHidden: true, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 8, level: 70, shiny: 1, isHidden: true, moves: ["1L1"]}, - ], - eventOnly: false, - }, - diancie: { - learnset: { - afteryou: ["1L1"], - allyswitch: ["1L1"], - amnesia: ["1L1"], - ancientpower: ["1L1"], - batonpass: ["1L1"], - bodypress: ["1L1"], - bodyslam: ["1L1"], - bulldoze: ["1L1"], - calmmind: ["1L1"], - charm: ["1L1"], - confide: ["1L1"], - covet: ["1L1"], - dazzlinggleam: ["1L1"], - diamondstorm: ["1L1"], - doubleteam: ["1L1"], - drainingkiss: ["1L1"], - earthpower: ["1L1"], - encore: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - explosion: ["1L1"], - facade: ["1L1"], - faketears: ["1L1"], - flail: ["1L1"], - flash: ["1L1"], - flashcannon: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - gravity: ["1L1"], - guardsplit: ["1L1"], - guardswap: ["1L1"], - gyroball: ["1L1"], - hail: ["1L1"], - harden: ["1L1"], - healbell: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - irondefense: ["1L1"], - lastresort: ["1L1"], - lightscreen: ["1L1"], - magnetrise: ["1L1"], - meteorbeam: ["1L1"], - metronome: ["1L1"], - mistyexplosion: ["1L1"], - moonblast: ["1L1"], - mysticalfire: ["1L1"], - naturepower: ["1L1"], - playrough: ["1L1"], - powergem: ["1L1"], - protect: ["1L1"], - psychic: ["1L1"], - psychup: ["1L1"], - psyshock: ["1L1"], - raindance: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rockpolish: ["1L1"], - rockslide: ["1L1"], - rockthrow: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - sandstorm: ["1L1"], - sandtomb: ["1L1"], - scorchingsands: ["1L1"], - secretpower: ["1L1"], - sharpen: ["1L1"], - skillswap: ["1L1"], - sleeptalk: ["1L1"], - smackdown: ["1L1"], - snore: ["1L1"], - snowscape: ["1L1"], - spikes: ["1L1"], - stealthrock: ["1L1"], - stoneedge: ["1L1"], - storedpower: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - telekinesis: ["1L1"], - terablast: ["1L1"], - terrainpulse: ["1L1"], - toxic: ["1L1"], - trickroom: ["1L1"], - wonderroom: ["1L1"], - }, - eventData: [ - {generation: 6, level: 50, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 6, level: 50, shiny: true, moves: ["1L1"], pokeball: "cherishball"}, - ], - eventOnly: false, - }, - hoopa: { - learnset: { - allyswitch: ["1L1"], - astonish: ["1L1"], - block: ["1L1"], - brickbreak: ["1L1"], - calmmind: ["1L1"], - chargebeam: ["1L1"], - confide: ["1L1"], - confusion: ["1L1"], - covet: ["1L1"], - darkpulse: ["1L1"], - destinybond: ["1L1"], - doubleteam: ["1L1"], - drainpunch: ["1L1"], - dreameater: ["1L1"], - dualchop: ["1L1"], - embargo: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - expandingforce: ["1L1"], - facade: ["1L1"], - firepunch: ["1L1"], - flash: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - focuspunch: ["1L1"], - foulplay: ["1L1"], - frustration: ["1L1"], - futuresight: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - gravity: ["1L1"], - guardsplit: ["1L1"], - gunkshot: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - hyperspacefury: ["1L1"], - hyperspacehole: ["1L1"], - icepunch: ["1L1"], - knockoff: ["1L1"], - laserfocus: ["1L1"], - lashout: ["1L1"], - lastresort: ["1L1"], - lightscreen: ["1L1"], - magiccoat: ["1L1"], - magicroom: ["1L1"], - nastyplot: ["1L1"], - phantomforce: ["1L1"], - powersplit: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - psybeam: ["1L1"], - psychic: ["1L1"], - psychicnoise: ["1L1"], - psychicterrain: ["1L1"], - psychup: ["1L1"], - psyshock: ["1L1"], - quash: ["1L1"], - raindance: ["1L1"], - recycle: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rocktomb: ["1L1"], - roleplay: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - sandstorm: ["1L1"], - scaryface: ["1L1"], - secretpower: ["1L1"], - shadowball: ["1L1"], - shockwave: ["1L1"], - signalbeam: ["1L1"], - skillswap: ["1L1"], - skittersmack: ["1L1"], - sleeptalk: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - telekinesis: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - throatchop: ["1L1"], - thunderbolt: ["1L1"], - thunderpunch: ["1L1"], - thunderwave: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - trick: ["1L1"], - trickroom: ["1L1"], - uproar: ["1L1"], - wonderroom: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 6, level: 50, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 7, level: 15, moves: ["1L1"], pokeball: "cherishball"}, - ], - eventOnly: false, - }, - hoopaunbound: { - eventOnly: false, - }, - volcanion: { - learnset: { - bodypress: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - bulldoze: ["1L1"], - confide: ["1L1"], - cut: ["1L1"], - defog: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - endure: ["1L1"], - explosion: ["1L1"], - facade: ["1L1"], - fireblast: ["1L1"], - firefang: ["1L1"], - firespin: ["1L1"], - flamecharge: ["1L1"], - flamethrower: ["1L1"], - flareblitz: ["1L1"], - flashcannon: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - focusenergy: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - gyroball: ["1L1"], - haze: ["1L1"], - heatcrash: ["1L1"], - heatwave: ["1L1"], - heavyslam: ["1L1"], - hiddenpower: ["1L1"], - hydropump: ["1L1"], - hyperbeam: ["1L1"], - incinerate: ["1L1"], - leer: ["1L1"], - liquidation: ["1L1"], - mist: ["1L1"], - mistyterrain: ["1L1"], - mudshot: ["1L1"], - overheat: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roar: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - sandstorm: ["1L1"], - scald: ["1L1"], - scaryface: ["1L1"], - scorchingsands: ["1L1"], - secretpower: ["1L1"], - selfdestruct: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - sludgewave: ["1L1"], - smackdown: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - steameruption: ["1L1"], - stomp: ["1L1"], - stompingtantrum: ["1L1"], - stoneedge: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - superpower: ["1L1"], - swagger: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thunderfang: ["1L1"], - toxic: ["1L1"], - watergun: ["1L1"], - waterpulse: ["1L1"], - weatherball: ["1L1"], - wildcharge: ["1L1"], - willowisp: ["1L1"], - }, - eventData: [ - {generation: 6, level: 70, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 6, level: 70, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 8, level: 60, moves: ["1L1"], pokeball: "cherishball"}, - ], - eventOnly: false, - }, - rowlet: { - learnset: { - aerialace: ["1L1"], - aircutter: ["1L1"], - airslash: ["1L1"], - astonish: ["1L1"], - attract: ["1L1"], - batonpass: ["1L1"], - bravebird: ["1L1"], - bulletseed: ["1L1"], - confide: ["1L1"], - confuseray: ["1L1"], - covet: ["1L1"], - curse: ["1L1"], - defog: ["1L1"], - doubleteam: ["1L1"], - dualwingbeat: ["1L1"], - echoedvoice: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - falseswipe: ["1L1"], - featherdance: ["1L1"], - foresight: ["1L1"], - frustration: ["1L1"], - furyattack: ["1L1"], - gigadrain: ["1L1"], - grassknot: ["1L1"], - grasspledge: ["1L1"], - grassyglide: ["1L1"], - grassyterrain: ["1L1"], - growl: ["1L1"], - haze: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - knockoff: ["1L1"], - leafage: ["1L1"], - leafblade: ["1L1"], - leafstorm: ["1L1"], - lightscreen: ["1L1"], - magicalleaf: ["1L1"], - nastyplot: ["1L1"], - naturepower: ["1L1"], - nightshade: ["1L1"], - ominouswind: ["1L1"], - peck: ["1L1"], - pluck: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - razorleaf: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roost: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - seedbomb: ["1L1"], - shadowclaw: ["1L1"], - shadowsneak: ["1L1"], - skyattack: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - steelwing: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - swordsdance: ["1L1"], - synthesis: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - workup: ["1L1"], - worryseed: ["1L1"], - }, - }, - dartrix: { - learnset: { - aerialace: ["1L1"], - aircutter: ["1L1"], - airslash: ["1L1"], - astonish: ["1L1"], - attract: ["1L1"], - batonpass: ["1L1"], - bravebird: ["1L1"], - bulletseed: ["1L1"], - confide: ["1L1"], - confuseray: ["1L1"], - covet: ["1L1"], - defog: ["1L1"], - doubleteam: ["1L1"], - dualwingbeat: ["1L1"], - echoedvoice: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - falseswipe: ["1L1"], - featherdance: ["1L1"], - foresight: ["1L1"], - frustration: ["1L1"], - furyattack: ["1L1"], - gigadrain: ["1L1"], - grassknot: ["1L1"], - grasspledge: ["1L1"], - grassyglide: ["1L1"], - grassyterrain: ["1L1"], - growl: ["1L1"], - haze: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - knockoff: ["1L1"], - leafage: ["1L1"], - leafblade: ["1L1"], - leafstorm: ["1L1"], - lightscreen: ["1L1"], - magicalleaf: ["1L1"], - nastyplot: ["1L1"], - naturepower: ["1L1"], - nightshade: ["1L1"], - ominouswind: ["1L1"], - peck: ["1L1"], - pluck: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - razorleaf: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roost: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - seedbomb: ["1L1"], - shadowclaw: ["1L1"], - shadowsneak: ["1L1"], - skyattack: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - steelwing: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - swordsdance: ["1L1"], - synthesis: ["1L1"], - tackle: ["1L1"], - tailwind: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - workup: ["1L1"], - worryseed: ["1L1"], - }, - }, - decidueye: { - learnset: { - acrobatics: ["1L1"], - aerialace: ["1L1"], - aircutter: ["1L1"], - airslash: ["1L1"], - astonish: ["1L1"], - attract: ["1L1"], - batonpass: ["1L1"], - bravebird: ["1L1"], - bulletseed: ["1L1"], - confide: ["1L1"], - confuseray: ["1L1"], - covet: ["1L1"], - curse: ["1L1"], - defog: ["1L1"], - doubleteam: ["1L1"], - dualwingbeat: ["1L1"], - echoedvoice: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - falseswipe: ["1L1"], - featherdance: ["1L1"], - foresight: ["1L1"], - frenzyplant: ["1L1"], - frustration: ["1L1"], - furyattack: ["1L1"], - gigadrain: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - grasspledge: ["1L1"], - grassyglide: ["1L1"], - grassyterrain: ["1L1"], - growl: ["1L1"], - haze: ["1L1"], - helpinghand: ["1L1"], - hex: ["1L1"], - hiddenpower: ["1L1"], - hurricane: ["1L1"], - hyperbeam: ["1L1"], - imprison: ["1L1"], - knockoff: ["1L1"], - laserfocus: ["1L1"], - leafage: ["1L1"], - leafblade: ["1L1"], - leafstorm: ["1L1"], - lightscreen: ["1L1"], - lowkick: ["1L1"], - lowsweep: ["1L1"], - magicalleaf: ["1L1"], - nastyplot: ["1L1"], - naturepower: ["1L1"], - nightshade: ["1L1"], - ominouswind: ["1L1"], - peck: ["1L1"], - phantomforce: ["1L1"], - pluck: ["1L1"], - poltergeist: ["1L1"], - protect: ["1L1"], - psychocut: ["1L1"], - raindance: ["1L1"], - razorleaf: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roost: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - seedbomb: ["1L1"], - shadowball: ["1L1"], - shadowclaw: ["1L1"], - shadowsneak: ["1L1"], - skittersmack: ["1L1"], - skyattack: ["1L1"], - sleeptalk: ["1L1"], - smackdown: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - solarblade: ["1L1"], - spiritshackle: ["1L1"], - spite: ["1L1"], - steelwing: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - swordsdance: ["1L1"], - synthesis: ["1L1"], - tackle: ["1L1"], - tailwind: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - uturn: ["1L1"], - workup: ["1L1"], - worryseed: ["1L1"], - }, - eventData: [ - {generation: 7, level: 50, isHidden: true, moves: ["1L1"], pokeball: "pokeball"}, - ], - }, - decidueyehisui: { - learnset: { - aerialace: ["1L1"], - aircutter: ["1L1"], - airslash: ["1L1"], - aurasphere: ["1L1"], - batonpass: ["1L1"], - bravebird: ["1L1"], - brickbreak: ["1L1"], - bulkup: ["1L1"], - bulletseed: ["1L1"], - closecombat: ["1L1"], - coaching: ["1L1"], - confuseray: ["1L1"], - dualwingbeat: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - falseswipe: ["1L1"], - featherdance: ["1L1"], - focusblast: ["1L1"], - focuspunch: ["1L1"], - frenzyplant: ["1L1"], - gigadrain: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - grasspledge: ["1L1"], - grassyglide: ["1L1"], - grassyterrain: ["1L1"], - growl: ["1L1"], - haze: ["1L1"], - helpinghand: ["1L1"], - hyperbeam: ["1L1"], - knockoff: ["1L1"], - leafage: ["1L1"], - leafblade: ["1L1"], - leafstorm: ["1L1"], - lightscreen: ["1L1"], - lowkick: ["1L1"], - lowsweep: ["1L1"], - magicalleaf: ["1L1"], - nastyplot: ["1L1"], - nightshade: ["1L1"], - peck: ["1L1"], - pluck: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - razorleaf: ["1L1"], - rest: ["1L1"], - reversal: ["1L1"], - rocktomb: ["1L1"], - scaryface: ["1L1"], - seedbomb: ["1L1"], - shadowclaw: ["1L1"], - shadowsneak: ["1L1"], - sleeptalk: ["1L1"], - smackdown: ["1L1"], - solarbeam: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - sunnyday: ["1L1"], - swift: ["1L1"], - swordsdance: ["1L1"], - synthesis: ["1L1"], - tackle: ["1L1"], - tailwind: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - trailblaze: ["1L1"], - triplearrows: ["1L1"], - upperhand: ["1L1"], - uturn: ["1L1"], - }, - }, - litten: { - learnset: { - acrobatics: ["1L1"], - attract: ["1L1"], - bite: ["1L1"], - bodyslam: ["1L1"], - bulkup: ["1L1"], - confide: ["1L1"], - covet: ["1L1"], - crunch: ["1L1"], - doubleedge: ["1L1"], - doublekick: ["1L1"], - doubleteam: ["1L1"], - ember: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fakeout: ["1L1"], - fireblast: ["1L1"], - firefang: ["1L1"], - firepledge: ["1L1"], - firespin: ["1L1"], - flamecharge: ["1L1"], - flamethrower: ["1L1"], - flareblitz: ["1L1"], - frustration: ["1L1"], - furyswipes: ["1L1"], - growl: ["1L1"], - heatwave: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - leechlife: ["1L1"], - leer: ["1L1"], - lick: ["1L1"], - nastyplot: ["1L1"], - outrage: ["1L1"], - overheat: ["1L1"], - partingshot: ["1L1"], - payday: ["1L1"], - powertrip: ["1L1"], - protect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - revenge: ["1L1"], - roar: ["1L1"], - round: ["1L1"], - scaryface: ["1L1"], - scratch: ["1L1"], - shadowclaw: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swordsdance: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - temperflare: ["1L1"], - terablast: ["1L1"], - thrash: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - uturn: ["1L1"], - willowisp: ["1L1"], - workup: ["1L1"], - }, - }, - torracat: { - learnset: { - acrobatics: ["1L1"], - attract: ["1L1"], - bite: ["1L1"], - bodyslam: ["1L1"], - bulkup: ["1L1"], - confide: ["1L1"], - covet: ["1L1"], - crunch: ["1L1"], - doubleedge: ["1L1"], - doublekick: ["1L1"], - doubleteam: ["1L1"], - dualchop: ["1L1"], - ember: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fireblast: ["1L1"], - firefang: ["1L1"], - firepledge: ["1L1"], - firespin: ["1L1"], - flamecharge: ["1L1"], - flamethrower: ["1L1"], - flareblitz: ["1L1"], - frustration: ["1L1"], - furyswipes: ["1L1"], - growl: ["1L1"], - heatwave: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - leechlife: ["1L1"], - leer: ["1L1"], - lick: ["1L1"], - nastyplot: ["1L1"], - outrage: ["1L1"], - overheat: ["1L1"], - payday: ["1L1"], - protect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - revenge: ["1L1"], - roar: ["1L1"], - round: ["1L1"], - scaryface: ["1L1"], - scratch: ["1L1"], - shadowclaw: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swordsdance: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - temperflare: ["1L1"], - terablast: ["1L1"], - thrash: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - uturn: ["1L1"], - willowisp: ["1L1"], - workup: ["1L1"], - }, - }, - incineroar: { - learnset: { - acrobatics: ["1L1"], - aerialace: ["1L1"], - assurance: ["1L1"], - attract: ["1L1"], - batonpass: ["1L1"], - bind: ["1L1"], - bite: ["1L1"], - blastburn: ["1L1"], - blazekick: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - brutalswing: ["1L1"], - bulkup: ["1L1"], - bulldoze: ["1L1"], - burningjealousy: ["1L1"], - closecombat: ["1L1"], - confide: ["1L1"], - covet: ["1L1"], - crosschop: ["1L1"], - crunch: ["1L1"], - darkestlariat: ["1L1"], - darkpulse: ["1L1"], - doubleedge: ["1L1"], - doublekick: ["1L1"], - doubleteam: ["1L1"], - drainpunch: ["1L1"], - dualchop: ["1L1"], - earthquake: ["1L1"], - embargo: ["1L1"], - ember: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fakeout: ["1L1"], - fireblast: ["1L1"], - firefang: ["1L1"], - firepledge: ["1L1"], - firepunch: ["1L1"], - firespin: ["1L1"], - flamecharge: ["1L1"], - flamethrower: ["1L1"], - flareblitz: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - focuspunch: ["1L1"], - frustration: ["1L1"], - furyswipes: ["1L1"], - gigaimpact: ["1L1"], - growl: ["1L1"], - heatcrash: ["1L1"], - heatwave: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - ironhead: ["1L1"], - knockoff: ["1L1"], - lashout: ["1L1"], - leechlife: ["1L1"], - leer: ["1L1"], - lick: ["1L1"], - lowkick: ["1L1"], - lowsweep: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - nastyplot: ["1L1"], - outrage: ["1L1"], - overheat: ["1L1"], - payday: ["1L1"], - protect: ["1L1"], - quash: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - revenge: ["1L1"], - reversal: ["1L1"], - roar: ["1L1"], - round: ["1L1"], - scaryface: ["1L1"], - scorchingsands: ["1L1"], - scratch: ["1L1"], - shadowclaw: ["1L1"], - sleeptalk: ["1L1"], - snarl: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - stompingtantrum: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - superpower: ["1L1"], - swagger: ["1L1"], - swordsdance: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - temperflare: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thrash: ["1L1"], - throatchop: ["1L1"], - thunderpunch: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - uturn: ["1L1"], - willowisp: ["1L1"], - workup: ["1L1"], - }, - eventData: [ - {generation: 7, level: 50, isHidden: true, moves: ["1L1"], pokeball: "pokeball"}, - ], - }, - popplio: { - learnset: { - acrobatics: ["1L1"], - amnesia: ["1L1"], - aquajet: ["1L1"], - aquaring: ["1L1"], - aquatail: ["1L1"], - aromaticmist: ["1L1"], - attract: ["1L1"], - babydolleyes: ["1L1"], - blizzard: ["1L1"], - brine: ["1L1"], - bubblebeam: ["1L1"], - captivate: ["1L1"], - charm: ["1L1"], - chillingwater: ["1L1"], - confide: ["1L1"], - covet: ["1L1"], - disarmingvoice: ["1L1"], - dive: ["1L1"], - doubleslap: ["1L1"], - doubleteam: ["1L1"], - drainingkiss: ["1L1"], - echoedvoice: ["1L1"], - encore: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - flipturn: ["1L1"], - frustration: ["1L1"], - growl: ["1L1"], - hail: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hydropump: ["1L1"], - hypervoice: ["1L1"], - icebeam: ["1L1"], - icespinner: ["1L1"], - icywind: ["1L1"], - irontail: ["1L1"], - lifedew: ["1L1"], - mistyterrain: ["1L1"], - moonblast: ["1L1"], - perishsong: ["1L1"], - playrough: ["1L1"], - pound: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - round: ["1L1"], - scald: ["1L1"], - sing: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - substitute: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - terablast: ["1L1"], - toxic: ["1L1"], - tripleaxel: ["1L1"], - uproar: ["1L1"], - waterfall: ["1L1"], - watergun: ["1L1"], - waterpledge: ["1L1"], - waterpulse: ["1L1"], - whirlpool: ["1L1"], - wonderroom: ["1L1"], - workup: ["1L1"], - }, - }, - brionne: { - learnset: { - acrobatics: ["1L1"], - amnesia: ["1L1"], - aquajet: ["1L1"], - aquatail: ["1L1"], - attract: ["1L1"], - babydolleyes: ["1L1"], - blizzard: ["1L1"], - bodyslam: ["1L1"], - brine: ["1L1"], - bubblebeam: ["1L1"], - captivate: ["1L1"], - charm: ["1L1"], - chillingwater: ["1L1"], - confide: ["1L1"], - covet: ["1L1"], - disarmingvoice: ["1L1"], - dive: ["1L1"], - doubleslap: ["1L1"], - doubleteam: ["1L1"], - drainingkiss: ["1L1"], - echoedvoice: ["1L1"], - encore: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - flipturn: ["1L1"], - frustration: ["1L1"], - growl: ["1L1"], - hail: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hydropump: ["1L1"], - hypervoice: ["1L1"], - icebeam: ["1L1"], - icespinner: ["1L1"], - icywind: ["1L1"], - irontail: ["1L1"], - mistyterrain: ["1L1"], - moonblast: ["1L1"], - playrough: ["1L1"], - pound: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - round: ["1L1"], - scald: ["1L1"], - sing: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - substitute: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - terablast: ["1L1"], - toxic: ["1L1"], - tripleaxel: ["1L1"], - uproar: ["1L1"], - waterfall: ["1L1"], - watergun: ["1L1"], - waterpledge: ["1L1"], - waterpulse: ["1L1"], - whirlpool: ["1L1"], - wonderroom: ["1L1"], - workup: ["1L1"], - }, - }, - primarina: { - learnset: { - acrobatics: ["1L1"], - alluringvoice: ["1L1"], - amnesia: ["1L1"], - aquajet: ["1L1"], - aquatail: ["1L1"], - attract: ["1L1"], - babydolleyes: ["1L1"], - blizzard: ["1L1"], - bodyslam: ["1L1"], - brine: ["1L1"], - bubblebeam: ["1L1"], - calmmind: ["1L1"], - captivate: ["1L1"], - charm: ["1L1"], - chillingwater: ["1L1"], - confide: ["1L1"], - covet: ["1L1"], - dazzlinggleam: ["1L1"], - disarmingvoice: ["1L1"], - dive: ["1L1"], - doubleslap: ["1L1"], - doubleteam: ["1L1"], - drainingkiss: ["1L1"], - echoedvoice: ["1L1"], - encore: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - flipturn: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - growl: ["1L1"], - hail: ["1L1"], - haze: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hydrocannon: ["1L1"], - hydropump: ["1L1"], - hyperbeam: ["1L1"], - hypervoice: ["1L1"], - icebeam: ["1L1"], - icespinner: ["1L1"], - icywind: ["1L1"], - irontail: ["1L1"], - lightscreen: ["1L1"], - liquidation: ["1L1"], - magiccoat: ["1L1"], - mistyexplosion: ["1L1"], - mistyterrain: ["1L1"], - moonblast: ["1L1"], - perishsong: ["1L1"], - playrough: ["1L1"], - pound: ["1L1"], - protect: ["1L1"], - psychic: ["1L1"], - psychicnoise: ["1L1"], - psychup: ["1L1"], - raindance: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - round: ["1L1"], - scald: ["1L1"], - shadowball: ["1L1"], - sing: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - snowscape: ["1L1"], - sparklingaria: ["1L1"], - storedpower: ["1L1"], - substitute: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - terablast: ["1L1"], - toxic: ["1L1"], - tripleaxel: ["1L1"], - uproar: ["1L1"], - waterfall: ["1L1"], - watergun: ["1L1"], - waterpledge: ["1L1"], - waterpulse: ["1L1"], - weatherball: ["1L1"], - whirlpool: ["1L1"], - wonderroom: ["1L1"], - workup: ["1L1"], - }, - eventData: [ - {generation: 7, level: 50, isHidden: true, moves: ["1L1"], pokeball: "pokeball"}, - ], - }, - pikipek: { - learnset: { - acrobatics: ["1L1"], - aerialace: ["1L1"], - aircutter: ["1L1"], - airslash: ["1L1"], - attract: ["1L1"], - boomburst: ["1L1"], - bravebird: ["1L1"], - brickbreak: ["1L1"], - bulletseed: ["1L1"], - confide: ["1L1"], - defog: ["1L1"], - doubleteam: ["1L1"], - drillpeck: ["1L1"], - dualwingbeat: ["1L1"], - echoedvoice: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - featherdance: ["1L1"], - flamecharge: ["1L1"], - fly: ["1L1"], - frustration: ["1L1"], - furyattack: ["1L1"], - growl: ["1L1"], - gunkshot: ["1L1"], - heatwave: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hypervoice: ["1L1"], - knockoff: ["1L1"], - mirrormove: ["1L1"], - peck: ["1L1"], - pluck: ["1L1"], - protect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rocksmash: ["1L1"], - roost: ["1L1"], - round: ["1L1"], - screech: ["1L1"], - skyattack: ["1L1"], - sleeptalk: ["1L1"], - smackdown: ["1L1"], - snore: ["1L1"], - steelwing: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - supersonic: ["1L1"], - swagger: ["1L1"], - swordsdance: ["1L1"], - tailwind: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - toxic: ["1L1"], - uproar: ["1L1"], - uturn: ["1L1"], - workup: ["1L1"], - }, - }, - trumbeak: { - learnset: { - acrobatics: ["1L1"], - aerialace: ["1L1"], - aircutter: ["1L1"], - airslash: ["1L1"], - attract: ["1L1"], - bravebird: ["1L1"], - brickbreak: ["1L1"], - bulletseed: ["1L1"], - confide: ["1L1"], - defog: ["1L1"], - doubleteam: ["1L1"], - drillpeck: ["1L1"], - dualwingbeat: ["1L1"], - echoedvoice: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - featherdance: ["1L1"], - flamecharge: ["1L1"], - fly: ["1L1"], - frustration: ["1L1"], - furyattack: ["1L1"], - growl: ["1L1"], - gunkshot: ["1L1"], - heatwave: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hypervoice: ["1L1"], - knockoff: ["1L1"], - peck: ["1L1"], - pluck: ["1L1"], - protect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rockblast: ["1L1"], - rocksmash: ["1L1"], - roost: ["1L1"], - round: ["1L1"], - screech: ["1L1"], - skyattack: ["1L1"], - sleeptalk: ["1L1"], - smackdown: ["1L1"], - snore: ["1L1"], - steelwing: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - supersonic: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - swordsdance: ["1L1"], - tailwind: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - toxic: ["1L1"], - uproar: ["1L1"], - uturn: ["1L1"], - workup: ["1L1"], - }, - }, - toucannon: { - learnset: { - acrobatics: ["1L1"], - aerialace: ["1L1"], - aircutter: ["1L1"], - airslash: ["1L1"], - attract: ["1L1"], - beakblast: ["1L1"], - bravebird: ["1L1"], - brickbreak: ["1L1"], - bulletseed: ["1L1"], - confide: ["1L1"], - defog: ["1L1"], - doubleteam: ["1L1"], - drillpeck: ["1L1"], - dualwingbeat: ["1L1"], - echoedvoice: ["1L1"], - encore: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - featherdance: ["1L1"], - flamecharge: ["1L1"], - flashcannon: ["1L1"], - fly: ["1L1"], - frustration: ["1L1"], - furyattack: ["1L1"], - gigaimpact: ["1L1"], - growl: ["1L1"], - gunkshot: ["1L1"], - heatwave: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hurricane: ["1L1"], - hyperbeam: ["1L1"], - hypervoice: ["1L1"], - knockoff: ["1L1"], - overheat: ["1L1"], - peck: ["1L1"], - pluck: ["1L1"], - protect: ["1L1"], - psychup: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rockblast: ["1L1"], - rocksmash: ["1L1"], - roost: ["1L1"], - round: ["1L1"], - scaryface: ["1L1"], - screech: ["1L1"], - seedbomb: ["1L1"], - skyattack: ["1L1"], - sleeptalk: ["1L1"], - smackdown: ["1L1"], - snore: ["1L1"], - steelwing: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - supersonic: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - swordsdance: ["1L1"], - tailwind: ["1L1"], - takedown: ["1L1"], - temperflare: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - throatchop: ["1L1"], - toxic: ["1L1"], - uproar: ["1L1"], - uturn: ["1L1"], - workup: ["1L1"], - }, - encounters: [ - {generation: 7, level: 26}, - ], - }, - yungoos: { - learnset: { - attract: ["1L1"], - bide: ["1L1"], - bite: ["1L1"], - bulldoze: ["1L1"], - chillingwater: ["1L1"], - confide: ["1L1"], - crunch: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - earthquake: ["1L1"], - echoedvoice: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - firefang: ["1L1"], - frustration: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hyperfang: ["1L1"], - icefang: ["1L1"], - irontail: ["1L1"], - lastresort: ["1L1"], - leer: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - odorsleuth: ["1L1"], - payback: ["1L1"], - protect: ["1L1"], - psychicfangs: ["1L1"], - pursuit: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - revenge: ["1L1"], - reversal: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - sandattack: ["1L1"], - sandstorm: ["1L1"], - scaryface: ["1L1"], - seedbomb: ["1L1"], - shockwave: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - stompingtantrum: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - superfang: ["1L1"], - swagger: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thrash: ["1L1"], - thunderfang: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - uproar: ["1L1"], - uturn: ["1L1"], - wildcharge: ["1L1"], - workup: ["1L1"], - yawn: ["1L1"], - zenheadbutt: ["1L1"], - }, - }, - gumshoos: { - learnset: { - attract: ["1L1"], - bide: ["1L1"], - bite: ["1L1"], - block: ["1L1"], - bodyslam: ["1L1"], - bulldoze: ["1L1"], - chillingwater: ["1L1"], - confide: ["1L1"], - crunch: ["1L1"], - curse: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dualchop: ["1L1"], - earthquake: ["1L1"], - echoedvoice: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - firefang: ["1L1"], - firepunch: ["1L1"], - fling: ["1L1"], - focuspunch: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - hyperfang: ["1L1"], - icefang: ["1L1"], - icepunch: ["1L1"], - ironhead: ["1L1"], - irontail: ["1L1"], - knockoff: ["1L1"], - lastresort: ["1L1"], - leer: ["1L1"], - lowsweep: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - odorsleuth: ["1L1"], - payback: ["1L1"], - protect: ["1L1"], - psychicfangs: ["1L1"], - pursuit: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - reversal: ["1L1"], - roar: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - sandattack: ["1L1"], - sandstorm: ["1L1"], - scaryface: ["1L1"], - seedbomb: ["1L1"], - shockwave: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - stompingtantrum: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - superfang: ["1L1"], - swagger: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thrash: ["1L1"], - thunderfang: ["1L1"], - thunderpunch: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - uproar: ["1L1"], - uturn: ["1L1"], - wildcharge: ["1L1"], - workup: ["1L1"], - yawn: ["1L1"], - zenheadbutt: ["1L1"], - }, - encounters: [ - {generation: 7, level: 17}, - ], - }, - gumshoostotem: { - learnset: { - attract: ["1L1"], - bide: ["1L1"], - bite: ["1L1"], - block: ["1L1"], - bulldoze: ["1L1"], - confide: ["1L1"], - crunch: ["1L1"], - doubleteam: ["1L1"], - dualchop: ["1L1"], - earthquake: ["1L1"], - echoedvoice: ["1L1"], - endeavor: ["1L1"], - facade: ["1L1"], - firepunch: ["1L1"], - fling: ["1L1"], - frustration: ["1L1"], - hiddenpower: ["1L1"], - hyperfang: ["1L1"], - icepunch: ["1L1"], - ironhead: ["1L1"], - irontail: ["1L1"], - lastresort: ["1L1"], - leer: ["1L1"], - mudslap: ["1L1"], - odorsleuth: ["1L1"], - payback: ["1L1"], - protect: ["1L1"], - pursuit: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roar: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - sandattack: ["1L1"], - sandstorm: ["1L1"], - scaryface: ["1L1"], - shockwave: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - stompingtantrum: ["1L1"], - substitute: ["1L1"], - superfang: ["1L1"], - swagger: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - thief: ["1L1"], - thrash: ["1L1"], - thunderpunch: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - uproar: ["1L1"], - uturn: ["1L1"], - workup: ["1L1"], - yawn: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 7, level: 20, perfectIVs: 3, moves: ["1L1"], pokeball: "pokeball"}, - ], - eventOnly: false, - }, - grubbin: { - learnset: { - acrobatics: ["1L1"], - attract: ["1L1"], - batonpass: ["1L1"], - bite: ["1L1"], - bugbite: ["1L1"], - charge: ["1L1"], - chargebeam: ["1L1"], - confide: ["1L1"], - crunch: ["1L1"], - dig: ["1L1"], - discharge: ["1L1"], - doubleteam: ["1L1"], - electricterrain: ["1L1"], - electroweb: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - frustration: ["1L1"], - harden: ["1L1"], - hiddenpower: ["1L1"], - lightscreen: ["1L1"], - lunge: ["1L1"], - magnetrise: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - poisonjab: ["1L1"], - pounce: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - risingvoltage: ["1L1"], - round: ["1L1"], - screech: ["1L1"], - shockwave: ["1L1"], - skittersmack: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - spark: ["1L1"], - stickyweb: ["1L1"], - stringshot: ["1L1"], - strugglebug: ["1L1"], - substitute: ["1L1"], - swagger: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thunderbolt: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - visegrip: ["1L1"], - voltswitch: ["1L1"], - wildcharge: ["1L1"], - xscissor: ["1L1"], - }, - }, - charjabug: { - learnset: { - acrobatics: ["1L1"], - attract: ["1L1"], - batonpass: ["1L1"], - bite: ["1L1"], - bugbite: ["1L1"], - charge: ["1L1"], - chargebeam: ["1L1"], - confide: ["1L1"], - crunch: ["1L1"], - dig: ["1L1"], - discharge: ["1L1"], - doubleteam: ["1L1"], - eerieimpulse: ["1L1"], - electricterrain: ["1L1"], - electroball: ["1L1"], - electroweb: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - frustration: ["1L1"], - hiddenpower: ["1L1"], - irondefense: ["1L1"], - lightscreen: ["1L1"], - lunge: ["1L1"], - magnetrise: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - poisonjab: ["1L1"], - pounce: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - risingvoltage: ["1L1"], - round: ["1L1"], - screech: ["1L1"], - shockwave: ["1L1"], - skittersmack: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - spark: ["1L1"], - stickyweb: ["1L1"], - stringshot: ["1L1"], - strugglebug: ["1L1"], - substitute: ["1L1"], - swagger: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - visegrip: ["1L1"], - voltswitch: ["1L1"], - wildcharge: ["1L1"], - xscissor: ["1L1"], - }, - }, - vikavolt: { - learnset: { - acrobatics: ["1L1"], - agility: ["1L1"], - airslash: ["1L1"], - attract: ["1L1"], - batonpass: ["1L1"], - bite: ["1L1"], - bugbite: ["1L1"], - bugbuzz: ["1L1"], - bulldoze: ["1L1"], - charge: ["1L1"], - chargebeam: ["1L1"], - confide: ["1L1"], - crunch: ["1L1"], - dig: ["1L1"], - discharge: ["1L1"], - doubleteam: ["1L1"], - dualwingbeat: ["1L1"], - eerieimpulse: ["1L1"], - electricterrain: ["1L1"], - electroball: ["1L1"], - electroweb: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - flashcannon: ["1L1"], - fly: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - guillotine: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - irondefense: ["1L1"], - laserfocus: ["1L1"], - lightscreen: ["1L1"], - lunge: ["1L1"], - magnetrise: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - poisonjab: ["1L1"], - pounce: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - risingvoltage: ["1L1"], - roost: ["1L1"], - round: ["1L1"], - screech: ["1L1"], - shockwave: ["1L1"], - signalbeam: ["1L1"], - skittersmack: ["1L1"], - skydrop: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - spark: ["1L1"], - stickyweb: ["1L1"], - stringshot: ["1L1"], - strugglebug: ["1L1"], - substitute: ["1L1"], - supercellslam: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - visegrip: ["1L1"], - voltswitch: ["1L1"], - wildcharge: ["1L1"], - xscissor: ["1L1"], - zapcannon: ["1L1"], - }, - }, - vikavolttotem: { - learnset: { - acrobatics: ["1L1"], - agility: ["1L1"], - airslash: ["1L1"], - attract: ["1L1"], - bite: ["1L1"], - bugbite: ["1L1"], - bugbuzz: ["1L1"], - charge: ["1L1"], - chargebeam: ["1L1"], - confide: ["1L1"], - dig: ["1L1"], - doubleteam: ["1L1"], - electroweb: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - flashcannon: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - guillotine: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - irondefense: ["1L1"], - laserfocus: ["1L1"], - lightscreen: ["1L1"], - magnetrise: ["1L1"], - mudslap: ["1L1"], - poisonjab: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roost: ["1L1"], - round: ["1L1"], - shockwave: ["1L1"], - signalbeam: ["1L1"], - skydrop: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - spark: ["1L1"], - stringshot: ["1L1"], - substitute: ["1L1"], - swagger: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - visegrip: ["1L1"], - voltswitch: ["1L1"], - wildcharge: ["1L1"], - xscissor: ["1L1"], - zapcannon: ["1L1"], - }, - eventData: [ - {generation: 7, level: 35, perfectIVs: 3, moves: ["1L1"], pokeball: "pokeball"}, - ], - eventOnly: false, - }, - crabrawler: { - learnset: { - amnesia: ["1L1"], - attract: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - brutalswing: ["1L1"], - bubble: ["1L1"], - bubblebeam: ["1L1"], - bulkup: ["1L1"], - bulldoze: ["1L1"], - chillingwater: ["1L1"], - closecombat: ["1L1"], - coaching: ["1L1"], - confide: ["1L1"], - crabhammer: ["1L1"], - dig: ["1L1"], - dizzypunch: ["1L1"], - doubleteam: ["1L1"], - drainpunch: ["1L1"], - dualchop: ["1L1"], - dynamicpunch: ["1L1"], - earthquake: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - focuspunch: ["1L1"], - frostbreath: ["1L1"], - frustration: ["1L1"], - gunkshot: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - icepunch: ["1L1"], - irondefense: ["1L1"], - ironhead: ["1L1"], - knockoff: ["1L1"], - leer: ["1L1"], - liquidation: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - payback: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - pursuit: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - reversal: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - scald: ["1L1"], - slam: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - stompingtantrum: ["1L1"], - stoneedge: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - superpower: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thunderpunch: ["1L1"], - toxic: ["1L1"], - upperhand: ["1L1"], - visegrip: ["1L1"], - wideguard: ["1L1"], - workup: ["1L1"], - zenheadbutt: ["1L1"], - }, - }, - crabominable: { - learnset: { - amnesia: ["1L1"], - attract: ["1L1"], - avalanche: ["1L1"], - blizzard: ["1L1"], - block: ["1L1"], - bodypress: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - brutalswing: ["1L1"], - bubble: ["1L1"], - bubblebeam: ["1L1"], - bulkup: ["1L1"], - bulldoze: ["1L1"], - chillingwater: ["1L1"], - closecombat: ["1L1"], - coaching: ["1L1"], - confide: ["1L1"], - dig: ["1L1"], - dizzypunch: ["1L1"], - doubleteam: ["1L1"], - drainpunch: ["1L1"], - dualchop: ["1L1"], - dynamicpunch: ["1L1"], - earthquake: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - focuspunch: ["1L1"], - frostbreath: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - gunkshot: ["1L1"], - hail: ["1L1"], - hardpress: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - icebeam: ["1L1"], - icehammer: ["1L1"], - icepunch: ["1L1"], - icespinner: ["1L1"], - icywind: ["1L1"], - irondefense: ["1L1"], - ironhead: ["1L1"], - knockoff: ["1L1"], - leer: ["1L1"], - liquidation: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - payback: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - pursuit: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - reversal: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - scald: ["1L1"], - scaryface: ["1L1"], - slam: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - snowscape: ["1L1"], - stompingtantrum: ["1L1"], - stoneedge: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - superpower: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thunderpunch: ["1L1"], - toxic: ["1L1"], - upperhand: ["1L1"], - workup: ["1L1"], - zenheadbutt: ["1L1"], - }, - }, - oricorio: { - learnset: { - acrobatics: ["1L1"], - aerialace: ["1L1"], - agility: ["1L1"], - aircutter: ["1L1"], - airslash: ["1L1"], - alluringvoice: ["1L1"], - attract: ["1L1"], - batonpass: ["1L1"], - calmmind: ["1L1"], - captivate: ["1L1"], - charm: ["1L1"], - confide: ["1L1"], - covet: ["1L1"], - defog: ["1L1"], - doubleslap: ["1L1"], - doubleteam: ["1L1"], - dualwingbeat: ["1L1"], - embargo: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - featherdance: ["1L1"], - flatter: ["1L1"], - fly: ["1L1"], - frustration: ["1L1"], - growl: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hurricane: ["1L1"], - icywind: ["1L1"], - mirrormove: ["1L1"], - peck: ["1L1"], - pluck: ["1L1"], - pound: ["1L1"], - protect: ["1L1"], - psychup: ["1L1"], - quash: ["1L1"], - quiverdance: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - revelationdance: ["1L1"], - reversal: ["1L1"], - roleplay: ["1L1"], - roost: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - sandstorm: ["1L1"], - skyattack: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - steelwing: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - swordsdance: ["1L1"], - tailwind: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - teeterdance: ["1L1"], - terablast: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - uturn: ["1L1"], - workup: ["1L1"], - }, - }, - cutiefly: { - learnset: { - absorb: ["1L1"], - acrobatics: ["1L1"], - aerialace: ["1L1"], - afteryou: ["1L1"], - allyswitch: ["1L1"], - aromatherapy: ["1L1"], - aromaticmist: ["1L1"], - attract: ["1L1"], - batonpass: ["1L1"], - bestow: ["1L1"], - bugbite: ["1L1"], - bugbuzz: ["1L1"], - calmmind: ["1L1"], - charm: ["1L1"], - confide: ["1L1"], - covet: ["1L1"], - dazzlinggleam: ["1L1"], - defog: ["1L1"], - doubleteam: ["1L1"], - drainingkiss: ["1L1"], - dreameater: ["1L1"], - dualwingbeat: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - fairywind: ["1L1"], - faketears: ["1L1"], - frustration: ["1L1"], - grassknot: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - imprison: ["1L1"], - infestation: ["1L1"], - lastresort: ["1L1"], - leechlife: ["1L1"], - lightscreen: ["1L1"], - magicalleaf: ["1L1"], - magicroom: ["1L1"], - moonblast: ["1L1"], - playrough: ["1L1"], - pollenpuff: ["1L1"], - pounce: ["1L1"], - powder: ["1L1"], - protect: ["1L1"], - psychic: ["1L1"], - psychup: ["1L1"], - quiverdance: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roost: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - signalbeam: ["1L1"], - silverwind: ["1L1"], - skillswap: ["1L1"], - skittersmack: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - speedswap: ["1L1"], - stickyweb: ["1L1"], - strugglebug: ["1L1"], - stunspore: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - sweetscent: ["1L1"], - swift: ["1L1"], - switcheroo: ["1L1"], - tailwind: ["1L1"], - telekinesis: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - trick: ["1L1"], - uturn: ["1L1"], - wonderroom: ["1L1"], - }, - }, - ribombee: { - learnset: { - absorb: ["1L1"], - acrobatics: ["1L1"], - aerialace: ["1L1"], - afteryou: ["1L1"], - agility: ["1L1"], - alluringvoice: ["1L1"], - allyswitch: ["1L1"], - aromatherapy: ["1L1"], - attract: ["1L1"], - batonpass: ["1L1"], - bugbite: ["1L1"], - bugbuzz: ["1L1"], - calmmind: ["1L1"], - charm: ["1L1"], - confide: ["1L1"], - covet: ["1L1"], - dazzlinggleam: ["1L1"], - defog: ["1L1"], - doubleteam: ["1L1"], - drainingkiss: ["1L1"], - dreameater: ["1L1"], - dualwingbeat: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - fairywind: ["1L1"], - faketears: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - imprison: ["1L1"], - infestation: ["1L1"], - lastresort: ["1L1"], - leechlife: ["1L1"], - lightscreen: ["1L1"], - lunge: ["1L1"], - magicalleaf: ["1L1"], - magicroom: ["1L1"], - naturepower: ["1L1"], - playrough: ["1L1"], - pollenpuff: ["1L1"], - pounce: ["1L1"], - protect: ["1L1"], - psychic: ["1L1"], - psychicnoise: ["1L1"], - psychup: ["1L1"], - quiverdance: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roost: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - signalbeam: ["1L1"], - silverwind: ["1L1"], - skillswap: ["1L1"], - skittersmack: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - speedswap: ["1L1"], - storedpower: ["1L1"], - strugglebug: ["1L1"], - stunspore: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - sweetscent: ["1L1"], - swift: ["1L1"], - switcheroo: ["1L1"], - tailwind: ["1L1"], - takedown: ["1L1"], - telekinesis: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - trick: ["1L1"], - uturn: ["1L1"], - wonderroom: ["1L1"], - }, - }, - ribombeetotem: { - learnset: { - absorb: ["1L1"], - acrobatics: ["1L1"], - aerialace: ["1L1"], - afteryou: ["1L1"], - allyswitch: ["1L1"], - aromatherapy: ["1L1"], - attract: ["1L1"], - bugbite: ["1L1"], - bugbuzz: ["1L1"], - calmmind: ["1L1"], - confide: ["1L1"], - covet: ["1L1"], - dazzlinggleam: ["1L1"], - defog: ["1L1"], - doubleteam: ["1L1"], - drainingkiss: ["1L1"], - dreameater: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - fairywind: ["1L1"], - frustration: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - infestation: ["1L1"], - lastresort: ["1L1"], - leechlife: ["1L1"], - lightscreen: ["1L1"], - magicroom: ["1L1"], - naturepower: ["1L1"], - pollenpuff: ["1L1"], - protect: ["1L1"], - psychic: ["1L1"], - psychup: ["1L1"], - quiverdance: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roost: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - signalbeam: ["1L1"], - silverwind: ["1L1"], - skillswap: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - strugglebug: ["1L1"], - stunspore: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - sweetscent: ["1L1"], - tailwind: ["1L1"], - telekinesis: ["1L1"], - thief: ["1L1"], - toxic: ["1L1"], - trick: ["1L1"], - uturn: ["1L1"], - wonderroom: ["1L1"], - }, - eventData: [ - {generation: 7, level: 50, perfectIVs: 3, moves: ["1L1"], pokeball: "pokeball"}, - ], - eventOnly: false, - }, - rockruff: { - learnset: { - attract: ["1L1"], - bite: ["1L1"], - bodyslam: ["1L1"], - bulldoze: ["1L1"], - charm: ["1L1"], - confide: ["1L1"], - covet: ["1L1"], - crunch: ["1L1"], - crushclaw: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - earthpower: ["1L1"], - echoedvoice: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - firefang: ["1L1"], - frustration: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - howl: ["1L1"], - hypervoice: ["1L1"], - irondefense: ["1L1"], - ironhead: ["1L1"], - irontail: ["1L1"], - lastresort: ["1L1"], - leer: ["1L1"], - mudslap: ["1L1"], - odorsleuth: ["1L1"], - playrough: ["1L1"], - protect: ["1L1"], - psychicfangs: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roar: ["1L1"], - rockclimb: ["1L1"], - rockpolish: ["1L1"], - rockslide: ["1L1"], - rockthrow: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - sandattack: ["1L1"], - sandstorm: ["1L1"], - scaryface: ["1L1"], - sleeptalk: ["1L1"], - snarl: ["1L1"], - snore: ["1L1"], - stealthrock: ["1L1"], - stompingtantrum: ["1L1"], - stoneedge: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - swagger: ["1L1"], - swordsdance: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thrash: ["1L1"], - thunderfang: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - zenheadbutt: ["1L1"], - }, - }, - rockruffdusk: { - learnset: { - attract: ["1L1"], - bite: ["1L1"], - bodyslam: ["1L1"], - bulldoze: ["1L1"], - charm: ["1L1"], - confide: ["1L1"], - covet: ["1L1"], - crunch: ["1L1"], - crushclaw: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - earthpower: ["1L1"], - echoedvoice: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - firefang: ["1L1"], - frustration: ["1L1"], - happyhour: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - howl: ["1L1"], - hypervoice: ["1L1"], - irondefense: ["1L1"], - ironhead: ["1L1"], - irontail: ["1L1"], - lastresort: ["1L1"], - leer: ["1L1"], - mudslap: ["1L1"], - odorsleuth: ["1L1"], - playrough: ["1L1"], - protect: ["1L1"], - psychicfangs: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roar: ["1L1"], - rockclimb: ["1L1"], - rockpolish: ["1L1"], - rockslide: ["1L1"], - rockthrow: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - sandattack: ["1L1"], - sandstorm: ["1L1"], - scaryface: ["1L1"], - sleeptalk: ["1L1"], - snarl: ["1L1"], - snore: ["1L1"], - stealthrock: ["1L1"], - stompingtantrum: ["1L1"], - stoneedge: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - swagger: ["1L1"], - swordsdance: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thrash: ["1L1"], - thunderfang: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 7, level: 10, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 7, level: 10, moves: ["1L1"], pokeball: "cherishball"}, - ], - }, - lycanroc: { - learnset: { - accelerock: ["1L1"], - agility: ["1L1"], - assurance: ["1L1"], - attract: ["1L1"], - bite: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - bulkup: ["1L1"], - bulldoze: ["1L1"], - charm: ["1L1"], - closecombat: ["1L1"], - confide: ["1L1"], - covet: ["1L1"], - crunch: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - drillrun: ["1L1"], - earthpower: ["1L1"], - echoedvoice: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - firefang: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - howl: ["1L1"], - hypervoice: ["1L1"], - irondefense: ["1L1"], - ironhead: ["1L1"], - irontail: ["1L1"], - lastresort: ["1L1"], - leer: ["1L1"], - mudslap: ["1L1"], - odorsleuth: ["1L1"], - playrough: ["1L1"], - protect: ["1L1"], - psychicfangs: ["1L1"], - quickattack: ["1L1"], - quickguard: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roar: ["1L1"], - rockblast: ["1L1"], - rockclimb: ["1L1"], - rockpolish: ["1L1"], - rockslide: ["1L1"], - rockthrow: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - sandattack: ["1L1"], - sandstorm: ["1L1"], - scaryface: ["1L1"], - sleeptalk: ["1L1"], - snarl: ["1L1"], - snore: ["1L1"], - stealthrock: ["1L1"], - stompingtantrum: ["1L1"], - stoneedge: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - swordsdance: ["1L1"], - tackle: ["1L1"], - tailslap: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thunderfang: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - zenheadbutt: ["1L1"], - }, - }, - lycanrocmidnight: { - learnset: { - attract: ["1L1"], - bite: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - bulkup: ["1L1"], - bulldoze: ["1L1"], - charm: ["1L1"], - closecombat: ["1L1"], - confide: ["1L1"], - counter: ["1L1"], - covet: ["1L1"], - crunch: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dualchop: ["1L1"], - earthpower: ["1L1"], - echoedvoice: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - firefang: ["1L1"], - firepunch: ["1L1"], - fling: ["1L1"], - focuspunch: ["1L1"], - foulplay: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - howl: ["1L1"], - hypervoice: ["1L1"], - irondefense: ["1L1"], - ironhead: ["1L1"], - irontail: ["1L1"], - knockoff: ["1L1"], - laserfocus: ["1L1"], - lashout: ["1L1"], - lastresort: ["1L1"], - leer: ["1L1"], - lowsweep: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - mudslap: ["1L1"], - odorsleuth: ["1L1"], - outrage: ["1L1"], - payback: ["1L1"], - playrough: ["1L1"], - protect: ["1L1"], - psychicfangs: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - revenge: ["1L1"], - reversal: ["1L1"], - roar: ["1L1"], - rockblast: ["1L1"], - rockclimb: ["1L1"], - rockpolish: ["1L1"], - rockslide: ["1L1"], - rockthrow: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - sandattack: ["1L1"], - sandstorm: ["1L1"], - scaryface: ["1L1"], - shadowclaw: ["1L1"], - sleeptalk: ["1L1"], - snarl: ["1L1"], - snore: ["1L1"], - stealthrock: ["1L1"], - stompingtantrum: ["1L1"], - stoneedge: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swordsdance: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - throatchop: ["1L1"], - thunderfang: ["1L1"], - thunderpunch: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - upperhand: ["1L1"], - uproar: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 7, level: 50, isHidden: true, moves: ["1L1"], pokeball: "cherishball"}, - ], - }, - lycanrocdusk: { - learnset: { - accelerock: ["1L1"], - attract: ["1L1"], - bite: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - bulkup: ["1L1"], - bulldoze: ["1L1"], - charm: ["1L1"], - closecombat: ["1L1"], - confide: ["1L1"], - counter: ["1L1"], - covet: ["1L1"], - crunch: ["1L1"], - crushclaw: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - drillrun: ["1L1"], - earthpower: ["1L1"], - echoedvoice: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - firefang: ["1L1"], - focusenergy: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - howl: ["1L1"], - hypervoice: ["1L1"], - irondefense: ["1L1"], - ironhead: ["1L1"], - irontail: ["1L1"], - lastresort: ["1L1"], - leer: ["1L1"], - mudslap: ["1L1"], - odorsleuth: ["1L1"], - outrage: ["1L1"], - playrough: ["1L1"], - protect: ["1L1"], - psychicfangs: ["1L1"], - quickattack: ["1L1"], - quickguard: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - reversal: ["1L1"], - roar: ["1L1"], - rockblast: ["1L1"], - rockclimb: ["1L1"], - rockpolish: ["1L1"], - rockslide: ["1L1"], - rockthrow: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - sandattack: ["1L1"], - sandstorm: ["1L1"], - scaryface: ["1L1"], - sleeptalk: ["1L1"], - snarl: ["1L1"], - snore: ["1L1"], - stealthrock: ["1L1"], - stompingtantrum: ["1L1"], - stoneedge: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - swagger: ["1L1"], - swordsdance: ["1L1"], - tackle: ["1L1"], - tailslap: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thrash: ["1L1"], - throatchop: ["1L1"], - thunderfang: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - workup: ["1L1"], - zenheadbutt: ["1L1"], - }, - }, - wishiwashi: { - learnset: { - aquaring: ["1L1"], - aquatail: ["1L1"], - attract: ["1L1"], - beatup: ["1L1"], - brine: ["1L1"], - bulldoze: ["1L1"], - confide: ["1L1"], - covet: ["1L1"], - dive: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - earthquake: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - feintattack: ["1L1"], - flipturn: ["1L1"], - frustration: ["1L1"], - growl: ["1L1"], - hail: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hydropump: ["1L1"], - icebeam: ["1L1"], - irontail: ["1L1"], - liquidation: ["1L1"], - mist: ["1L1"], - muddywater: ["1L1"], - mudshot: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - round: ["1L1"], - scald: ["1L1"], - scaleshot: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - soak: ["1L1"], - substitute: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - takedown: ["1L1"], - tearfullook: ["1L1"], - toxic: ["1L1"], - uproar: ["1L1"], - uturn: ["1L1"], - waterfall: ["1L1"], - watergun: ["1L1"], - waterpulse: ["1L1"], - watersport: ["1L1"], - whirlpool: ["1L1"], - }, - }, - mareanie: { - learnset: { - acidspray: ["1L1"], - afteryou: ["1L1"], - attract: ["1L1"], - bite: ["1L1"], - blizzard: ["1L1"], - brine: ["1L1"], - chillingwater: ["1L1"], - confide: ["1L1"], - covet: ["1L1"], - doubleteam: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - frostbreath: ["1L1"], - frustration: ["1L1"], - gastroacid: ["1L1"], - gunkshot: ["1L1"], - hail: ["1L1"], - haze: ["1L1"], - hiddenpower: ["1L1"], - hydropump: ["1L1"], - icebeam: ["1L1"], - icespinner: ["1L1"], - icywind: ["1L1"], - infestation: ["1L1"], - irondefense: ["1L1"], - knockoff: ["1L1"], - liquidation: ["1L1"], - lunge: ["1L1"], - magiccoat: ["1L1"], - muddywater: ["1L1"], - mudshot: ["1L1"], - painsplit: ["1L1"], - payback: ["1L1"], - peck: ["1L1"], - pinmissile: ["1L1"], - poisonjab: ["1L1"], - poisonsting: ["1L1"], - pounce: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - recover: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - scald: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - sludgewave: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - spikecannon: ["1L1"], - spite: ["1L1"], - spitup: ["1L1"], - stockpile: ["1L1"], - substitute: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - swallow: ["1L1"], - terablast: ["1L1"], - toxic: ["1L1"], - toxicspikes: ["1L1"], - venomdrench: ["1L1"], - venoshock: ["1L1"], - waterpulse: ["1L1"], - wideguard: ["1L1"], - }, - eventData: [ - {generation: 7, level: 1, shiny: 1, isHidden: true, moves: ["1L1"], pokeball: "cherishball"}, - ], - }, - toxapex: { - learnset: { - acidspray: ["1L1"], - afteryou: ["1L1"], - attract: ["1L1"], - banefulbunker: ["1L1"], - bite: ["1L1"], - blizzard: ["1L1"], - block: ["1L1"], - bodyslam: ["1L1"], - brine: ["1L1"], - chillingwater: ["1L1"], - confide: ["1L1"], - covet: ["1L1"], - crosspoison: ["1L1"], - doubleteam: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - frostbreath: ["1L1"], - frustration: ["1L1"], - gastroacid: ["1L1"], - gigaimpact: ["1L1"], - gunkshot: ["1L1"], - hail: ["1L1"], - haze: ["1L1"], - hex: ["1L1"], - hiddenpower: ["1L1"], - hydropump: ["1L1"], - hyperbeam: ["1L1"], - icebeam: ["1L1"], - icespinner: ["1L1"], - icywind: ["1L1"], - infestation: ["1L1"], - irondefense: ["1L1"], - knockoff: ["1L1"], - lightscreen: ["1L1"], - liquidation: ["1L1"], - lunge: ["1L1"], - magiccoat: ["1L1"], - muddywater: ["1L1"], - mudshot: ["1L1"], - painsplit: ["1L1"], - payback: ["1L1"], - peck: ["1L1"], - pinmissile: ["1L1"], - poisonjab: ["1L1"], - poisonsting: ["1L1"], - pounce: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - recover: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - scald: ["1L1"], - scaryface: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - sludgewave: ["1L1"], - smackdown: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - spikecannon: ["1L1"], - spite: ["1L1"], - substitute: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - terablast: ["1L1"], - toxic: ["1L1"], - toxicspikes: ["1L1"], - venomdrench: ["1L1"], - venoshock: ["1L1"], - waterpulse: ["1L1"], - wideguard: ["1L1"], - }, - }, - mudbray: { - learnset: { - attract: ["1L1"], - bide: ["1L1"], - bodyslam: ["1L1"], - bulldoze: ["1L1"], - closecombat: ["1L1"], - confide: ["1L1"], - counter: ["1L1"], - curse: ["1L1"], - doubleedge: ["1L1"], - doublekick: ["1L1"], - doubleteam: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fissure: ["1L1"], - frustration: ["1L1"], - heavyslam: ["1L1"], - hiddenpower: ["1L1"], - highhorsepower: ["1L1"], - irondefense: ["1L1"], - ironhead: ["1L1"], - lowkick: ["1L1"], - lowsweep: ["1L1"], - magnitude: ["1L1"], - megakick: ["1L1"], - mudbomb: ["1L1"], - mudslap: ["1L1"], - mudsport: ["1L1"], - payback: ["1L1"], - protect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roar: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - rototiller: ["1L1"], - round: ["1L1"], - sandstorm: ["1L1"], - sandtomb: ["1L1"], - sleeptalk: ["1L1"], - smackdown: ["1L1"], - snore: ["1L1"], - stealthrock: ["1L1"], - stomp: ["1L1"], - stompingtantrum: ["1L1"], - stoneedge: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - superpower: ["1L1"], - swagger: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - toxic: ["1L1"], - }, - }, - mudsdale: { - learnset: { - attract: ["1L1"], - bide: ["1L1"], - bodypress: ["1L1"], - bodyslam: ["1L1"], - bulldoze: ["1L1"], - closecombat: ["1L1"], - confide: ["1L1"], - counter: ["1L1"], - curse: ["1L1"], - doubleedge: ["1L1"], - doublekick: ["1L1"], - doubleteam: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - focusblast: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - heavyslam: ["1L1"], - hiddenpower: ["1L1"], - highhorsepower: ["1L1"], - hyperbeam: ["1L1"], - irondefense: ["1L1"], - ironhead: ["1L1"], - lashout: ["1L1"], - lowkick: ["1L1"], - lowsweep: ["1L1"], - megakick: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - mudsport: ["1L1"], - payback: ["1L1"], - protect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - revenge: ["1L1"], - roar: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - rototiller: ["1L1"], - round: ["1L1"], - sandstorm: ["1L1"], - sandtomb: ["1L1"], - scaryface: ["1L1"], - sleeptalk: ["1L1"], - smackdown: ["1L1"], - snore: ["1L1"], - stealthrock: ["1L1"], - stomp: ["1L1"], - stompingtantrum: ["1L1"], - stoneedge: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - superpower: ["1L1"], - swagger: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - toxic: ["1L1"], - }, - encounters: [ - {generation: 7, level: 29}, - ], - }, - dewpider: { - learnset: { - aquaring: ["1L1"], - attract: ["1L1"], - aurorabeam: ["1L1"], - bite: ["1L1"], - blizzard: ["1L1"], - bubble: ["1L1"], - bubblebeam: ["1L1"], - bugbite: ["1L1"], - bugbuzz: ["1L1"], - chillingwater: ["1L1"], - confide: ["1L1"], - crunch: ["1L1"], - doubleteam: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - entrainment: ["1L1"], - facade: ["1L1"], - frostbreath: ["1L1"], - frustration: ["1L1"], - gigadrain: ["1L1"], - headbutt: ["1L1"], - hiddenpower: ["1L1"], - hydropump: ["1L1"], - icebeam: ["1L1"], - icywind: ["1L1"], - infestation: ["1L1"], - irondefense: ["1L1"], - leechlife: ["1L1"], - liquidation: ["1L1"], - lunge: ["1L1"], - magiccoat: ["1L1"], - magicroom: ["1L1"], - mirrorcoat: ["1L1"], - poisonjab: ["1L1"], - pounce: ["1L1"], - powersplit: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - round: ["1L1"], - scald: ["1L1"], - signalbeam: ["1L1"], - skittersmack: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - soak: ["1L1"], - spiderweb: ["1L1"], - spitup: ["1L1"], - stickyweb: ["1L1"], - stockpile: ["1L1"], - substitute: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - terablast: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - waterfall: ["1L1"], - watergun: ["1L1"], - waterpulse: ["1L1"], - watersport: ["1L1"], - wonderroom: ["1L1"], - xscissor: ["1L1"], - }, - }, - araquanid: { - learnset: { - aquaring: ["1L1"], - attract: ["1L1"], - bite: ["1L1"], - blizzard: ["1L1"], - bodyslam: ["1L1"], - bubble: ["1L1"], - bubblebeam: ["1L1"], - bugbite: ["1L1"], - bugbuzz: ["1L1"], - chillingwater: ["1L1"], - confide: ["1L1"], - crunch: ["1L1"], - dive: ["1L1"], - doubleteam: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - entrainment: ["1L1"], - facade: ["1L1"], - frostbreath: ["1L1"], - frustration: ["1L1"], - gigadrain: ["1L1"], - gigaimpact: ["1L1"], - headbutt: ["1L1"], - hiddenpower: ["1L1"], - hydropump: ["1L1"], - hyperbeam: ["1L1"], - icebeam: ["1L1"], - icywind: ["1L1"], - infestation: ["1L1"], - irondefense: ["1L1"], - laserfocus: ["1L1"], - leechlife: ["1L1"], - liquidation: ["1L1"], - lunge: ["1L1"], - magiccoat: ["1L1"], - magicroom: ["1L1"], - mirrorcoat: ["1L1"], - poisonjab: ["1L1"], - pounce: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - scald: ["1L1"], - scaryface: ["1L1"], - signalbeam: ["1L1"], - skittersmack: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - soak: ["1L1"], - spiderweb: ["1L1"], - substitute: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - terablast: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - waterfall: ["1L1"], - watergun: ["1L1"], - waterpulse: ["1L1"], - wideguard: ["1L1"], - wonderroom: ["1L1"], - xscissor: ["1L1"], - }, - }, - araquanidtotem: { - learnset: { - aquaring: ["1L1"], - attract: ["1L1"], - bite: ["1L1"], - blizzard: ["1L1"], - bubble: ["1L1"], - bubblebeam: ["1L1"], - bugbite: ["1L1"], - confide: ["1L1"], - crunch: ["1L1"], - doubleteam: ["1L1"], - entrainment: ["1L1"], - facade: ["1L1"], - frostbreath: ["1L1"], - frustration: ["1L1"], - gigadrain: ["1L1"], - hiddenpower: ["1L1"], - icebeam: ["1L1"], - icywind: ["1L1"], - infestation: ["1L1"], - irondefense: ["1L1"], - laserfocus: ["1L1"], - leechlife: ["1L1"], - liquidation: ["1L1"], - lunge: ["1L1"], - magiccoat: ["1L1"], - magicroom: ["1L1"], - mirrorcoat: ["1L1"], - poisonjab: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - scald: ["1L1"], - signalbeam: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - soak: ["1L1"], - spiderweb: ["1L1"], - substitute: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - toxic: ["1L1"], - waterfall: ["1L1"], - waterpulse: ["1L1"], - wideguard: ["1L1"], - wonderroom: ["1L1"], - xscissor: ["1L1"], - }, - eventData: [ - {generation: 7, level: 25, perfectIVs: 3, moves: ["1L1"], pokeball: "pokeball"}, - ], - eventOnly: false, - }, - fomantis: { - learnset: { - aromatherapy: ["1L1"], - attract: ["1L1"], - bugbite: ["1L1"], - bulletseed: ["1L1"], - confide: ["1L1"], - defog: ["1L1"], - doubleteam: ["1L1"], - dualchop: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - falseswipe: ["1L1"], - fling: ["1L1"], - frustration: ["1L1"], - furycutter: ["1L1"], - gigadrain: ["1L1"], - grassknot: ["1L1"], - grassyglide: ["1L1"], - grassyterrain: ["1L1"], - growth: ["1L1"], - hiddenpower: ["1L1"], - ingrain: ["1L1"], - leafage: ["1L1"], - leafblade: ["1L1"], - leafstorm: ["1L1"], - leechlife: ["1L1"], - magicalleaf: ["1L1"], - naturepower: ["1L1"], - payback: ["1L1"], - petalblizzard: ["1L1"], - poisonjab: ["1L1"], - protect: ["1L1"], - razorleaf: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - seedbomb: ["1L1"], - signalbeam: ["1L1"], - skittersmack: ["1L1"], - slash: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - superpower: ["1L1"], - swagger: ["1L1"], - sweetscent: ["1L1"], - swordsdance: ["1L1"], - synthesis: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - weatherball: ["1L1"], - worryseed: ["1L1"], - xscissor: ["1L1"], - }, - }, - lurantis: { - learnset: { - aerialace: ["1L1"], - attract: ["1L1"], - brickbreak: ["1L1"], - bugbite: ["1L1"], - bulletseed: ["1L1"], - confide: ["1L1"], - crosspoison: ["1L1"], - defog: ["1L1"], - doubleteam: ["1L1"], - dualchop: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - falseswipe: ["1L1"], - fling: ["1L1"], - frustration: ["1L1"], - furycutter: ["1L1"], - gigadrain: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - grassyglide: ["1L1"], - grassyterrain: ["1L1"], - growth: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - ingrain: ["1L1"], - knockoff: ["1L1"], - laserfocus: ["1L1"], - leafage: ["1L1"], - leafblade: ["1L1"], - leafstorm: ["1L1"], - leechlife: ["1L1"], - lowsweep: ["1L1"], - magicalleaf: ["1L1"], - naturepower: ["1L1"], - nightslash: ["1L1"], - payback: ["1L1"], - petalblizzard: ["1L1"], - poisonjab: ["1L1"], - pollenpuff: ["1L1"], - protect: ["1L1"], - psychocut: ["1L1"], - raindance: ["1L1"], - razorleaf: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - scaryface: ["1L1"], - seedbomb: ["1L1"], - signalbeam: ["1L1"], - skittersmack: ["1L1"], - slash: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - solarblade: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - superpower: ["1L1"], - swagger: ["1L1"], - sweetscent: ["1L1"], - swordsdance: ["1L1"], - synthesis: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - weatherball: ["1L1"], - worryseed: ["1L1"], - xscissor: ["1L1"], - }, - }, - lurantistotem: { - learnset: { - aerialace: ["1L1"], - attract: ["1L1"], - brickbreak: ["1L1"], - bugbite: ["1L1"], - confide: ["1L1"], - defog: ["1L1"], - doubleteam: ["1L1"], - dualchop: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - falseswipe: ["1L1"], - fling: ["1L1"], - frustration: ["1L1"], - furycutter: ["1L1"], - gigadrain: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - growth: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - ingrain: ["1L1"], - knockoff: ["1L1"], - laserfocus: ["1L1"], - leafage: ["1L1"], - leafblade: ["1L1"], - leechlife: ["1L1"], - lowsweep: ["1L1"], - naturepower: ["1L1"], - nightslash: ["1L1"], - payback: ["1L1"], - petalblizzard: ["1L1"], - poisonjab: ["1L1"], - protect: ["1L1"], - razorleaf: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - seedbomb: ["1L1"], - signalbeam: ["1L1"], - slash: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - solarblade: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - superpower: ["1L1"], - swagger: ["1L1"], - sweetscent: ["1L1"], - swordsdance: ["1L1"], - synthesis: ["1L1"], - toxic: ["1L1"], - worryseed: ["1L1"], - xscissor: ["1L1"], - }, - eventData: [ - {generation: 7, level: 30, perfectIVs: 3, moves: ["1L1"], pokeball: "pokeball"}, - ], - eventOnly: false, - }, - morelull: { - learnset: { - absorb: ["1L1"], - afteryou: ["1L1"], - amnesia: ["1L1"], - astonish: ["1L1"], - attract: ["1L1"], - confide: ["1L1"], - confuseray: ["1L1"], - dazzlinggleam: ["1L1"], - doubleteam: ["1L1"], - drainingkiss: ["1L1"], - dreameater: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - flash: ["1L1"], - frustration: ["1L1"], - gigadrain: ["1L1"], - grassknot: ["1L1"], - growth: ["1L1"], - hiddenpower: ["1L1"], - ingrain: ["1L1"], - leechseed: ["1L1"], - lightscreen: ["1L1"], - magiccoat: ["1L1"], - magicroom: ["1L1"], - megadrain: ["1L1"], - moonblast: ["1L1"], - moonlight: ["1L1"], - naturepower: ["1L1"], - poisonpowder: ["1L1"], - pollenpuff: ["1L1"], - protect: ["1L1"], - recycle: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - seedbomb: ["1L1"], - signalbeam: ["1L1"], - sleeppowder: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - spore: ["1L1"], - spotlight: ["1L1"], - strengthsap: ["1L1"], - stunspore: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - synthesis: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - wonderroom: ["1L1"], - worryseed: ["1L1"], - }, - }, - shiinotic: { - learnset: { - absorb: ["1L1"], - afteryou: ["1L1"], - amnesia: ["1L1"], - astonish: ["1L1"], - attract: ["1L1"], - chargebeam: ["1L1"], - confide: ["1L1"], - confuseray: ["1L1"], - dazzlinggleam: ["1L1"], - doubleteam: ["1L1"], - drainingkiss: ["1L1"], - drainpunch: ["1L1"], - dreameater: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - flash: ["1L1"], - frustration: ["1L1"], - gigadrain: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - ingrain: ["1L1"], - lightscreen: ["1L1"], - magiccoat: ["1L1"], - magicroom: ["1L1"], - megadrain: ["1L1"], - moonblast: ["1L1"], - moonlight: ["1L1"], - naturepower: ["1L1"], - pollenpuff: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - recycle: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - seedbomb: ["1L1"], - signalbeam: ["1L1"], - sleeppowder: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - spore: ["1L1"], - spotlight: ["1L1"], - strengthsap: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - synthesis: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - weatherball: ["1L1"], - wonderroom: ["1L1"], - worryseed: ["1L1"], - }, - }, - salandit: { - learnset: { - acidspray: ["1L1"], - agility: ["1L1"], - attract: ["1L1"], - beatup: ["1L1"], - belch: ["1L1"], - burningjealousy: ["1L1"], - confide: ["1L1"], - covet: ["1L1"], - doubleslap: ["1L1"], - doubleteam: ["1L1"], - dragonclaw: ["1L1"], - dragonpulse: ["1L1"], - dragonrage: ["1L1"], - ember: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fakeout: ["1L1"], - fireblast: ["1L1"], - firefang: ["1L1"], - flameburst: ["1L1"], - flamecharge: ["1L1"], - flamethrower: ["1L1"], - flareblitz: ["1L1"], - fling: ["1L1"], - foulplay: ["1L1"], - frustration: ["1L1"], - gunkshot: ["1L1"], - heatwave: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - incinerate: ["1L1"], - irontail: ["1L1"], - knockoff: ["1L1"], - leechlife: ["1L1"], - mudslap: ["1L1"], - nastyplot: ["1L1"], - overheat: ["1L1"], - payback: ["1L1"], - poisonfang: ["1L1"], - poisongas: ["1L1"], - poisonjab: ["1L1"], - poisontail: ["1L1"], - protect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - round: ["1L1"], - sandattack: ["1L1"], - scaleshot: ["1L1"], - scaryface: ["1L1"], - scratch: ["1L1"], - shadowclaw: ["1L1"], - skittersmack: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - sludgewave: ["1L1"], - smog: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - sweetscent: ["1L1"], - swift: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - temperflare: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thunderwave: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - toxicspikes: ["1L1"], - trailblaze: ["1L1"], - venomdrench: ["1L1"], - venoshock: ["1L1"], - willowisp: ["1L1"], - }, - }, - salazzle: { - learnset: { - acidspray: ["1L1"], - acrobatics: ["1L1"], - agility: ["1L1"], - attract: ["1L1"], - beatup: ["1L1"], - bodyslam: ["1L1"], - breakingswipe: ["1L1"], - burningjealousy: ["1L1"], - captivate: ["1L1"], - confide: ["1L1"], - corrosivegas: ["1L1"], - covet: ["1L1"], - crosspoison: ["1L1"], - disable: ["1L1"], - doubleslap: ["1L1"], - doubleteam: ["1L1"], - dragoncheer: ["1L1"], - dragonclaw: ["1L1"], - dragondance: ["1L1"], - dragonpulse: ["1L1"], - dragonrage: ["1L1"], - dragontail: ["1L1"], - ember: ["1L1"], - encore: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fakeout: ["1L1"], - faketears: ["1L1"], - fireblast: ["1L1"], - firefang: ["1L1"], - firelash: ["1L1"], - flameburst: ["1L1"], - flamecharge: ["1L1"], - flamethrower: ["1L1"], - flareblitz: ["1L1"], - fling: ["1L1"], - foulplay: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - gunkshot: ["1L1"], - heatwave: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - hypervoice: ["1L1"], - incinerate: ["1L1"], - irontail: ["1L1"], - knockoff: ["1L1"], - laserfocus: ["1L1"], - leechlife: ["1L1"], - mudslap: ["1L1"], - nastyplot: ["1L1"], - overheat: ["1L1"], - payback: ["1L1"], - poisonfang: ["1L1"], - poisongas: ["1L1"], - poisonjab: ["1L1"], - poisontail: ["1L1"], - pound: ["1L1"], - protect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - round: ["1L1"], - scaleshot: ["1L1"], - scaryface: ["1L1"], - scratch: ["1L1"], - shadowclaw: ["1L1"], - skittersmack: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - sludgewave: ["1L1"], - smog: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - sweetscent: ["1L1"], - swift: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - temperflare: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thunderwave: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - toxicspikes: ["1L1"], - trailblaze: ["1L1"], - venomdrench: ["1L1"], - venoshock: ["1L1"], - willowisp: ["1L1"], - }, - eventData: [ - {generation: 7, level: 50, moves: ["1L1"], pokeball: "cherishball"}, - ], - encounters: [ - {generation: 7, level: 16}, - ], - }, - salazzletotem: { - learnset: { - acrobatics: ["1L1"], - attract: ["1L1"], - captivate: ["1L1"], - confide: ["1L1"], - covet: ["1L1"], - disable: ["1L1"], - doubleslap: ["1L1"], - doubleteam: ["1L1"], - dragonclaw: ["1L1"], - dragonpulse: ["1L1"], - dragonrage: ["1L1"], - dragontail: ["1L1"], - ember: ["1L1"], - encore: ["1L1"], - facade: ["1L1"], - fireblast: ["1L1"], - flameburst: ["1L1"], - flamecharge: ["1L1"], - flamethrower: ["1L1"], - fling: ["1L1"], - foulplay: ["1L1"], - frustration: ["1L1"], - gunkshot: ["1L1"], - heatwave: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - irontail: ["1L1"], - knockoff: ["1L1"], - laserfocus: ["1L1"], - leechlife: ["1L1"], - nastyplot: ["1L1"], - overheat: ["1L1"], - payback: ["1L1"], - poisongas: ["1L1"], - poisonjab: ["1L1"], - pound: ["1L1"], - protect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - round: ["1L1"], - shadowclaw: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - sludgewave: ["1L1"], - smog: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - substitute: ["1L1"], - swagger: ["1L1"], - sweetscent: ["1L1"], - taunt: ["1L1"], - thief: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - venomdrench: ["1L1"], - venoshock: ["1L1"], - willowisp: ["1L1"], - }, - eventData: [ - {generation: 7, level: 30, perfectIVs: 3, moves: ["1L1"], pokeball: "pokeball"}, - ], - eventOnly: false, - }, - stufful: { - learnset: { - aerialace: ["1L1"], - attract: ["1L1"], - babydolleyes: ["1L1"], - bide: ["1L1"], - bind: ["1L1"], - brickbreak: ["1L1"], - brutalswing: ["1L1"], - bulkup: ["1L1"], - bulldoze: ["1L1"], - charm: ["1L1"], - coaching: ["1L1"], - confide: ["1L1"], - defensecurl: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dualchop: ["1L1"], - earthquake: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - flail: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - focuspunch: ["1L1"], - forcepalm: ["1L1"], - frustration: ["1L1"], - hammerarm: ["1L1"], - hiddenpower: ["1L1"], - icepunch: ["1L1"], - ironhead: ["1L1"], - leer: ["1L1"], - lowsweep: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - painsplit: ["1L1"], - payback: ["1L1"], - protect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roar: ["1L1"], - rockslide: ["1L1"], - rocktomb: ["1L1"], - roleplay: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - stomp: ["1L1"], - stompingtantrum: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - superpower: ["1L1"], - swagger: ["1L1"], - swordsdance: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - thrash: ["1L1"], - thunderpunch: ["1L1"], - toxic: ["1L1"], - wideguard: ["1L1"], - workup: ["1L1"], - zenheadbutt: ["1L1"], - }, - }, - bewear: { - learnset: { - aerialace: ["1L1"], - attract: ["1L1"], - babydolleyes: ["1L1"], - bide: ["1L1"], - bind: ["1L1"], - bodypress: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - brutalswing: ["1L1"], - bulkup: ["1L1"], - bulldoze: ["1L1"], - charm: ["1L1"], - closecombat: ["1L1"], - coaching: ["1L1"], - confide: ["1L1"], - darkestlariat: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dragonclaw: ["1L1"], - drainpunch: ["1L1"], - dualchop: ["1L1"], - earthquake: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - flail: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - focuspunch: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - hammerarm: ["1L1"], - hiddenpower: ["1L1"], - highhorsepower: ["1L1"], - hyperbeam: ["1L1"], - icepunch: ["1L1"], - ironhead: ["1L1"], - leer: ["1L1"], - lowkick: ["1L1"], - lowsweep: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - painsplit: ["1L1"], - payback: ["1L1"], - protect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - revenge: ["1L1"], - reversal: ["1L1"], - roar: ["1L1"], - rockslide: ["1L1"], - rocktomb: ["1L1"], - roleplay: ["1L1"], - round: ["1L1"], - shadowclaw: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - stompingtantrum: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - superpower: ["1L1"], - swagger: ["1L1"], - swordsdance: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - thrash: ["1L1"], - thunderpunch: ["1L1"], - toxic: ["1L1"], - workup: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 7, level: 50, gender: "F", isHidden: true, moves: ["1L1"], pokeball: "cherishball"}, - ], - }, - bounsweet: { - learnset: { - acupressure: ["1L1"], - aromatherapy: ["1L1"], - aromaticmist: ["1L1"], - attract: ["1L1"], - bounce: ["1L1"], - bulletseed: ["1L1"], - charm: ["1L1"], - confide: ["1L1"], - covet: ["1L1"], - dazzlinggleam: ["1L1"], - doubleteam: ["1L1"], - drainingkiss: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - feint: ["1L1"], - flail: ["1L1"], - frustration: ["1L1"], - gigadrain: ["1L1"], - grassknot: ["1L1"], - grasswhistle: ["1L1"], - grassyglide: ["1L1"], - grassyterrain: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - leafstorm: ["1L1"], - lightscreen: ["1L1"], - magicalleaf: ["1L1"], - naturepower: ["1L1"], - playnice: ["1L1"], - playrough: ["1L1"], - protect: ["1L1"], - rapidspin: ["1L1"], - razorleaf: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - seedbomb: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - splash: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - sweetscent: ["1L1"], - swift: ["1L1"], - synthesis: ["1L1"], - takedown: ["1L1"], - teeterdance: ["1L1"], - terablast: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - worryseed: ["1L1"], - zenheadbutt: ["1L1"], - }, - }, - steenee: { - learnset: { - aromatherapy: ["1L1"], - aromaticmist: ["1L1"], - attract: ["1L1"], - bounce: ["1L1"], - bulletseed: ["1L1"], - captivate: ["1L1"], - charm: ["1L1"], - confide: ["1L1"], - covet: ["1L1"], - dazzlinggleam: ["1L1"], - doubleslap: ["1L1"], - doubleteam: ["1L1"], - drainingkiss: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - flail: ["1L1"], - fling: ["1L1"], - frustration: ["1L1"], - gigadrain: ["1L1"], - grassknot: ["1L1"], - grassyglide: ["1L1"], - grassyterrain: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - knockoff: ["1L1"], - leafstorm: ["1L1"], - lightscreen: ["1L1"], - lowsweep: ["1L1"], - magicalleaf: ["1L1"], - naturepower: ["1L1"], - payback: ["1L1"], - petalblizzard: ["1L1"], - playnice: ["1L1"], - playrough: ["1L1"], - protect: ["1L1"], - rapidspin: ["1L1"], - razorleaf: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - seedbomb: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - splash: ["1L1"], - stomp: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - sweetscent: ["1L1"], - swift: ["1L1"], - synthesis: ["1L1"], - takedown: ["1L1"], - teeterdance: ["1L1"], - terablast: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - tripleaxel: ["1L1"], - worryseed: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 7, level: 20, nature: "Naive", abilities: ["1L1"], moves: ["1L1"], pokeball: "cherishball"}, - ], - }, - tsareena: { - learnset: { - acrobatics: ["1L1"], - aromatherapy: ["1L1"], - aromaticmist: ["1L1"], - attract: ["1L1"], - bounce: ["1L1"], - bulletseed: ["1L1"], - captivate: ["1L1"], - charm: ["1L1"], - confide: ["1L1"], - covet: ["1L1"], - dazzlinggleam: ["1L1"], - doubleslap: ["1L1"], - doubleteam: ["1L1"], - drainingkiss: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - flail: ["1L1"], - fling: ["1L1"], - frustration: ["1L1"], - gigadrain: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - grassyglide: ["1L1"], - grassyterrain: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - highjumpkick: ["1L1"], - hyperbeam: ["1L1"], - knockoff: ["1L1"], - laserfocus: ["1L1"], - leafstorm: ["1L1"], - lightscreen: ["1L1"], - lowkick: ["1L1"], - lowsweep: ["1L1"], - magicalleaf: ["1L1"], - megakick: ["1L1"], - naturepower: ["1L1"], - payback: ["1L1"], - petalblizzard: ["1L1"], - playnice: ["1L1"], - playrough: ["1L1"], - powerwhip: ["1L1"], - protect: ["1L1"], - punishment: ["1L1"], - rapidspin: ["1L1"], - razorleaf: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - seedbomb: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - solarblade: ["1L1"], - splash: ["1L1"], - stomp: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - sweetscent: ["1L1"], - swift: ["1L1"], - synthesis: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - teeterdance: ["1L1"], - terablast: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - tripleaxel: ["1L1"], - tropkick: ["1L1"], - uturn: ["1L1"], - worryseed: ["1L1"], - zenheadbutt: ["1L1"], - }, - }, - comfey: { - learnset: { - acrobatics: ["1L1"], - afteryou: ["1L1"], - alluringvoice: ["1L1"], - allyswitch: ["1L1"], - amnesia: ["1L1"], - aromatherapy: ["1L1"], - attract: ["1L1"], - bind: ["1L1"], - bulletseed: ["1L1"], - calmmind: ["1L1"], - celebrate: ["1L1"], - charm: ["1L1"], - confide: ["1L1"], - covet: ["1L1"], - dazzlinggleam: ["1L1"], - defog: ["1L1"], - disarmingvoice: ["1L1"], - doubleteam: ["1L1"], - drainingkiss: ["1L1"], - echoedvoice: ["1L1"], - encore: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - fling: ["1L1"], - floralhealing: ["1L1"], - flowershield: ["1L1"], - frustration: ["1L1"], - gigadrain: ["1L1"], - grassknot: ["1L1"], - grassyglide: ["1L1"], - grassyterrain: ["1L1"], - growth: ["1L1"], - healbell: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - knockoff: ["1L1"], - leaftornado: ["1L1"], - leechseed: ["1L1"], - lightscreen: ["1L1"], - luckychant: ["1L1"], - magicalleaf: ["1L1"], - magiccoat: ["1L1"], - naturalgift: ["1L1"], - naturepower: ["1L1"], - painsplit: ["1L1"], - petalblizzard: ["1L1"], - petaldance: ["1L1"], - playrough: ["1L1"], - pollenpuff: ["1L1"], - protect: ["1L1"], - psychup: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roleplay: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - seedbomb: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - storedpower: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - sweetkiss: ["1L1"], - sweetscent: ["1L1"], - swift: ["1L1"], - synthesis: ["1L1"], - tailwind: ["1L1"], - taunt: ["1L1"], - telekinesis: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - trick: ["1L1"], - trickroom: ["1L1"], - uturn: ["1L1"], - vinewhip: ["1L1"], - worryseed: ["1L1"], - wrap: ["1L1"], - }, - eventData: [ - {generation: 7, level: 10, nature: "Jolly", moves: ["1L1"], pokeball: "cherishball"}, - ], - }, - oranguru: { - learnset: { - afteryou: ["1L1"], - allyswitch: ["1L1"], - attract: ["1L1"], - block: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - brutalswing: ["1L1"], - bulldoze: ["1L1"], - calmmind: ["1L1"], - chargebeam: ["1L1"], - chillingwater: ["1L1"], - confide: ["1L1"], - confusion: ["1L1"], - covet: ["1L1"], - doubleteam: ["1L1"], - dreameater: ["1L1"], - earthquake: ["1L1"], - embargo: ["1L1"], - encore: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - expandingforce: ["1L1"], - extrasensory: ["1L1"], - facade: ["1L1"], - feintattack: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - foulplay: ["1L1"], - frustration: ["1L1"], - futuresight: ["1L1"], - gigaimpact: ["1L1"], - gravity: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - hypervoice: ["1L1"], - imprison: ["1L1"], - instruct: ["1L1"], - knockoff: ["1L1"], - lastresort: ["1L1"], - lightscreen: ["1L1"], - magiccoat: ["1L1"], - magicroom: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - nastyplot: ["1L1"], - naturepower: ["1L1"], - painsplit: ["1L1"], - payback: ["1L1"], - protect: ["1L1"], - psybeam: ["1L1"], - psychic: ["1L1"], - psychicnoise: ["1L1"], - psychicterrain: ["1L1"], - psychup: ["1L1"], - psyshock: ["1L1"], - quash: ["1L1"], - raindance: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rockslide: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - scaryface: ["1L1"], - shadowball: ["1L1"], - skillswap: ["1L1"], - sleeptalk: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - spite: ["1L1"], - storedpower: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - telekinesis: ["1L1"], - terablast: ["1L1"], - terrainpulse: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - trick: ["1L1"], - trickroom: ["1L1"], - wonderroom: ["1L1"], - workup: ["1L1"], - yawn: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 7, level: 1, shiny: 1, abilities: ["1L1"], moves: ["1L1"], pokeball: "cherishball"}, - {generation: 7, level: 50, isHidden: true, moves: ["1L1"], pokeball: "pokeball"}, - ], - }, - passimian: { - learnset: { - acrobatics: ["1L1"], - aerialace: ["1L1"], - assurance: ["1L1"], - attract: ["1L1"], - batonpass: ["1L1"], - beatup: ["1L1"], - bestow: ["1L1"], - block: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - brutalswing: ["1L1"], - bulkup: ["1L1"], - bulldoze: ["1L1"], - chillingwater: ["1L1"], - closecombat: ["1L1"], - coaching: ["1L1"], - confide: ["1L1"], - counter: ["1L1"], - curse: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - drainpunch: ["1L1"], - earthquake: ["1L1"], - electroweb: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - feint: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - focusenergy: ["1L1"], - focuspunch: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - gunkshot: ["1L1"], - gyroball: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - ironhead: ["1L1"], - irontail: ["1L1"], - knockoff: ["1L1"], - laserfocus: ["1L1"], - leer: ["1L1"], - lowkick: ["1L1"], - lowsweep: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - painsplit: ["1L1"], - payback: ["1L1"], - protect: ["1L1"], - quickattack: ["1L1"], - quickguard: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - revenge: ["1L1"], - reversal: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - scaryface: ["1L1"], - seedbomb: ["1L1"], - seismictoss: ["1L1"], - shadowball: ["1L1"], - shockwave: ["1L1"], - sleeptalk: ["1L1"], - smackdown: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - superpower: ["1L1"], - swagger: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thrash: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - upperhand: ["1L1"], - uproar: ["1L1"], - uturn: ["1L1"], - vacuumwave: ["1L1"], - vitalthrow: ["1L1"], - workup: ["1L1"], - }, - eventData: [ - {generation: 7, level: 1, shiny: 1, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 7, level: 50, isHidden: true, moves: ["1L1"], pokeball: "pokeball"}, - ], - }, - wimpod: { - learnset: { - aquajet: ["1L1"], - assurance: ["1L1"], - attract: ["1L1"], - bugbuzz: ["1L1"], - confide: ["1L1"], - defensecurl: ["1L1"], - doubleteam: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - frustration: ["1L1"], - hail: ["1L1"], - harden: ["1L1"], - hiddenpower: ["1L1"], - leechlife: ["1L1"], - metalclaw: ["1L1"], - mudshot: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - sandattack: ["1L1"], - scald: ["1L1"], - screech: ["1L1"], - skittersmack: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - spikes: ["1L1"], - strugglebug: ["1L1"], - substitute: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - taunt: ["1L1"], - toxic: ["1L1"], - waterfall: ["1L1"], - wideguard: ["1L1"], - }, - }, - golisopod: { - learnset: { - aerialace: ["1L1"], - assurance: ["1L1"], - attract: ["1L1"], - blizzard: ["1L1"], - brickbreak: ["1L1"], - bugbite: ["1L1"], - bugbuzz: ["1L1"], - bulkup: ["1L1"], - closecombat: ["1L1"], - confide: ["1L1"], - darkpulse: ["1L1"], - defensecurl: ["1L1"], - dive: ["1L1"], - doubleteam: ["1L1"], - drillrun: ["1L1"], - dualchop: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - falseswipe: ["1L1"], - firstimpression: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - frostbreath: ["1L1"], - frustration: ["1L1"], - furycutter: ["1L1"], - gigaimpact: ["1L1"], - hail: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - icebeam: ["1L1"], - icywind: ["1L1"], - irondefense: ["1L1"], - ironhead: ["1L1"], - knockoff: ["1L1"], - laserfocus: ["1L1"], - leechlife: ["1L1"], - liquidation: ["1L1"], - muddywater: ["1L1"], - mudshot: ["1L1"], - painsplit: ["1L1"], - payback: ["1L1"], - pinmissile: ["1L1"], - poisonjab: ["1L1"], - protect: ["1L1"], - psychup: ["1L1"], - raindance: ["1L1"], - razorshell: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - sandattack: ["1L1"], - scald: ["1L1"], - screech: ["1L1"], - shadowclaw: ["1L1"], - skittersmack: ["1L1"], - slash: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - sludgewave: ["1L1"], - snarl: ["1L1"], - snore: ["1L1"], - spikes: ["1L1"], - spite: ["1L1"], - strugglebug: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - swordsdance: ["1L1"], - taunt: ["1L1"], - throatchop: ["1L1"], - toxic: ["1L1"], - venoshock: ["1L1"], - waterfall: ["1L1"], - waterpulse: ["1L1"], - xscissor: ["1L1"], - }, - }, - sandygast: { - learnset: { - absorb: ["1L1"], - afteryou: ["1L1"], - amnesia: ["1L1"], - ancientpower: ["1L1"], - astonish: ["1L1"], - attract: ["1L1"], - block: ["1L1"], - brine: ["1L1"], - bulldoze: ["1L1"], - chillingwater: ["1L1"], - confide: ["1L1"], - confuseray: ["1L1"], - curse: ["1L1"], - destinybond: ["1L1"], - doubleteam: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - flashcannon: ["1L1"], - fling: ["1L1"], - frustration: ["1L1"], - gigadrain: ["1L1"], - gravity: ["1L1"], - harden: ["1L1"], - hex: ["1L1"], - hiddenpower: ["1L1"], - hypnosis: ["1L1"], - imprison: ["1L1"], - infestation: ["1L1"], - irondefense: ["1L1"], - megadrain: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - nightshade: ["1L1"], - painsplit: ["1L1"], - poltergeist: ["1L1"], - protect: ["1L1"], - psychic: ["1L1"], - raindance: ["1L1"], - recycle: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rockpolish: ["1L1"], - rockslide: ["1L1"], - rocktomb: ["1L1"], - roleplay: ["1L1"], - round: ["1L1"], - sandattack: ["1L1"], - sandstorm: ["1L1"], - sandtomb: ["1L1"], - scaryface: ["1L1"], - scorchingsands: ["1L1"], - shadowball: ["1L1"], - shoreup: ["1L1"], - skillswap: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - snore: ["1L1"], - spite: ["1L1"], - spitup: ["1L1"], - stealthrock: ["1L1"], - stockpile: ["1L1"], - stoneedge: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swallow: ["1L1"], - terablast: ["1L1"], - toxic: ["1L1"], - trick: ["1L1"], - }, - }, - palossand: { - learnset: { - absorb: ["1L1"], - afteryou: ["1L1"], - amnesia: ["1L1"], - astonish: ["1L1"], - attract: ["1L1"], - block: ["1L1"], - bodyslam: ["1L1"], - brine: ["1L1"], - bulldoze: ["1L1"], - chillingwater: ["1L1"], - confide: ["1L1"], - confuseray: ["1L1"], - curse: ["1L1"], - doubleteam: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - embargo: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - flashcannon: ["1L1"], - fling: ["1L1"], - frustration: ["1L1"], - gigadrain: ["1L1"], - gigaimpact: ["1L1"], - gravity: ["1L1"], - harden: ["1L1"], - hex: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - hypnosis: ["1L1"], - imprison: ["1L1"], - infestation: ["1L1"], - irondefense: ["1L1"], - megadrain: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - nightshade: ["1L1"], - painsplit: ["1L1"], - poltergeist: ["1L1"], - protect: ["1L1"], - psychic: ["1L1"], - quash: ["1L1"], - raindance: ["1L1"], - recycle: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rockpolish: ["1L1"], - rockslide: ["1L1"], - rocktomb: ["1L1"], - roleplay: ["1L1"], - round: ["1L1"], - sandattack: ["1L1"], - sandstorm: ["1L1"], - sandtomb: ["1L1"], - scaryface: ["1L1"], - scorchingsands: ["1L1"], - shadowball: ["1L1"], - shoreup: ["1L1"], - skillswap: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - snore: ["1L1"], - spite: ["1L1"], - stealthrock: ["1L1"], - stoneedge: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - terablast: ["1L1"], - terrainpulse: ["1L1"], - toxic: ["1L1"], - trick: ["1L1"], - }, - }, - pyukumuku: { - learnset: { - attract: ["1L1"], - batonpass: ["1L1"], - bestow: ["1L1"], - bide: ["1L1"], - block: ["1L1"], - confide: ["1L1"], - counter: ["1L1"], - curse: ["1L1"], - doubleteam: ["1L1"], - endure: ["1L1"], - gastroacid: ["1L1"], - hail: ["1L1"], - harden: ["1L1"], - helpinghand: ["1L1"], - lightscreen: ["1L1"], - memento: ["1L1"], - mirrorcoat: ["1L1"], - mudsport: ["1L1"], - painsplit: ["1L1"], - protect: ["1L1"], - psychup: ["1L1"], - purify: ["1L1"], - quash: ["1L1"], - raindance: ["1L1"], - recover: ["1L1"], - recycle: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - safeguard: ["1L1"], - screech: ["1L1"], - sleeptalk: ["1L1"], - soak: ["1L1"], - spite: ["1L1"], - substitute: ["1L1"], - swagger: ["1L1"], - taunt: ["1L1"], - tickle: ["1L1"], - toxic: ["1L1"], - venomdrench: ["1L1"], - watersport: ["1L1"], - }, - }, - typenull: { - learnset: { - aerialace: ["1L1"], - airslash: ["1L1"], - confide: ["1L1"], - crushclaw: ["1L1"], - doubleedge: ["1L1"], - doublehit: ["1L1"], - doubleteam: ["1L1"], - dragonclaw: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - flamecharge: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - hail: ["1L1"], - healblock: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - icywind: ["1L1"], - imprison: ["1L1"], - irondefense: ["1L1"], - ironhead: ["1L1"], - lastresort: ["1L1"], - magiccoat: ["1L1"], - metalsound: ["1L1"], - payback: ["1L1"], - protect: ["1L1"], - punishment: ["1L1"], - pursuit: ["1L1"], - rage: ["1L1"], - raindance: ["1L1"], - razorwind: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roar: ["1L1"], - rockslide: ["1L1"], - round: ["1L1"], - sandstorm: ["1L1"], - scaryface: ["1L1"], - shadowclaw: ["1L1"], - signalbeam: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - swordsdance: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - terrainpulse: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - triattack: ["1L1"], - uturn: ["1L1"], - workup: ["1L1"], - xscissor: ["1L1"], - }, - eventData: [ - {generation: 7, level: 40, shiny: 1, perfectIVs: 3, moves: ["1L1"], pokeball: "pokeball"}, - {generation: 7, level: 60, shiny: 1, perfectIVs: 3, moves: ["1L1"], pokeball: "pokeball"}, - {generation: 8, level: 50, shiny: 1, perfectIVs: 3, moves: ["1L1"], pokeball: "pokeball"}, - ], - eventOnly: false, - }, - silvally: { - learnset: { - aerialace: ["1L1"], - airslash: ["1L1"], - bite: ["1L1"], - confide: ["1L1"], - crunch: ["1L1"], - crushclaw: ["1L1"], - defog: ["1L1"], - doubleedge: ["1L1"], - doublehit: ["1L1"], - doubleteam: ["1L1"], - dracometeor: ["1L1"], - dragonclaw: ["1L1"], - endure: ["1L1"], - explosion: ["1L1"], - facade: ["1L1"], - firefang: ["1L1"], - flamecharge: ["1L1"], - flamethrower: ["1L1"], - flashcannon: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - grasspledge: ["1L1"], - hail: ["1L1"], - healblock: ["1L1"], - heatwave: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - hypervoice: ["1L1"], - icebeam: ["1L1"], - icefang: ["1L1"], - icywind: ["1L1"], - imprison: ["1L1"], - irondefense: ["1L1"], - ironhead: ["1L1"], - laserfocus: ["1L1"], - lastresort: ["1L1"], - magiccoat: ["1L1"], - metalsound: ["1L1"], - multiattack: ["1L1"], - outrage: ["1L1"], - partingshot: ["1L1"], - payback: ["1L1"], - poisonfang: ["1L1"], - protect: ["1L1"], - psychicfangs: ["1L1"], - punishment: ["1L1"], - pursuit: ["1L1"], - rage: ["1L1"], - raindance: ["1L1"], - razorwind: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - reversal: ["1L1"], - roar: ["1L1"], - rockslide: ["1L1"], - round: ["1L1"], - sandstorm: ["1L1"], - scaryface: ["1L1"], - selfdestruct: ["1L1"], - shadowball: ["1L1"], - shadowclaw: ["1L1"], - signalbeam: ["1L1"], - sleeptalk: ["1L1"], - snarl: ["1L1"], - snore: ["1L1"], - steelbeam: ["1L1"], - steelwing: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - swordsdance: ["1L1"], - tackle: ["1L1"], - tailwind: ["1L1"], - takedown: ["1L1"], - terrainpulse: ["1L1"], - thunderbolt: ["1L1"], - thunderfang: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - triattack: ["1L1"], - uturn: ["1L1"], - workup: ["1L1"], - xscissor: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 7, level: 100, shiny: true, moves: ["1L1"], pokeball: "cherishball"}, - ], - }, - minior: { - learnset: { - acrobatics: ["1L1"], - ancientpower: ["1L1"], - attract: ["1L1"], - autotomize: ["1L1"], - bulldoze: ["1L1"], - calmmind: ["1L1"], - chargebeam: ["1L1"], - confide: ["1L1"], - confuseray: ["1L1"], - cosmicpower: ["1L1"], - dazzlinggleam: ["1L1"], - defensecurl: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - explosion: ["1L1"], - facade: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - gravity: ["1L1"], - gyroball: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - ironhead: ["1L1"], - lastresort: ["1L1"], - lightscreen: ["1L1"], - magnetrise: ["1L1"], - meteorbeam: ["1L1"], - powergem: ["1L1"], - protect: ["1L1"], - psychic: ["1L1"], - psychup: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rockblast: ["1L1"], - rockpolish: ["1L1"], - rockslide: ["1L1"], - rocktomb: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - sandstorm: ["1L1"], - scorchingsands: ["1L1"], - selfdestruct: ["1L1"], - shellsmash: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - stealthrock: ["1L1"], - stoneedge: ["1L1"], - substitute: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - telekinesis: ["1L1"], - terablast: ["1L1"], - toxic: ["1L1"], - uturn: ["1L1"], - zenheadbutt: ["1L1"], - }, - }, - komala: { - learnset: { - acrobatics: ["1L1"], - attract: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - bulkup: ["1L1"], - bulldoze: ["1L1"], - calmmind: ["1L1"], - charm: ["1L1"], - confide: ["1L1"], - curse: ["1L1"], - defensecurl: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - earthquake: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - flail: ["1L1"], - fling: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - gunkshot: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - icespinner: ["1L1"], - ironhead: ["1L1"], - knockoff: ["1L1"], - lastresort: ["1L1"], - lowkick: ["1L1"], - lowsweep: ["1L1"], - metalclaw: ["1L1"], - payback: ["1L1"], - playrough: ["1L1"], - protect: ["1L1"], - psychup: ["1L1"], - quash: ["1L1"], - raindance: ["1L1"], - rapidspin: ["1L1"], - return: ["1L1"], - reversal: ["1L1"], - rockslide: ["1L1"], - rocktomb: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - seedbomb: ["1L1"], - shadowclaw: ["1L1"], - sing: ["1L1"], - slam: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - spitup: ["1L1"], - stockpile: ["1L1"], - stompingtantrum: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - sunnyday: ["1L1"], - superfang: ["1L1"], - superpower: ["1L1"], - swagger: ["1L1"], - swallow: ["1L1"], - swordsdance: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thrash: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - uturn: ["1L1"], - wish: ["1L1"], - woodhammer: ["1L1"], - workup: ["1L1"], - yawn: ["1L1"], - zenheadbutt: ["1L1"], - }, - }, - turtonator: { - learnset: { - attract: ["1L1"], - block: ["1L1"], - bodypress: ["1L1"], - bodyslam: ["1L1"], - brutalswing: ["1L1"], - bulkup: ["1L1"], - bulldoze: ["1L1"], - burningjealousy: ["1L1"], - chargebeam: ["1L1"], - confide: ["1L1"], - curse: ["1L1"], - doubleteam: ["1L1"], - dracometeor: ["1L1"], - dragonclaw: ["1L1"], - dragonpulse: ["1L1"], - dragontail: ["1L1"], - earthquake: ["1L1"], - ember: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - explosion: ["1L1"], - facade: ["1L1"], - fireblast: ["1L1"], - firespin: ["1L1"], - flail: ["1L1"], - flamecharge: ["1L1"], - flamethrower: ["1L1"], - flashcannon: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - headsmash: ["1L1"], - heatcrash: ["1L1"], - heatwave: ["1L1"], - heavyslam: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - hypervoice: ["1L1"], - incinerate: ["1L1"], - irondefense: ["1L1"], - ironhead: ["1L1"], - irontail: ["1L1"], - lashout: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - outrage: ["1L1"], - overheat: ["1L1"], - payback: ["1L1"], - protect: ["1L1"], - rapidspin: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - revenge: ["1L1"], - roar: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - scaleshot: ["1L1"], - scorchingsands: ["1L1"], - shellsmash: ["1L1"], - shelltrap: ["1L1"], - shockwave: ["1L1"], - sleeptalk: ["1L1"], - smackdown: ["1L1"], - smog: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - stompingtantrum: ["1L1"], - stoneedge: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - tackle: ["1L1"], - taunt: ["1L1"], - toxic: ["1L1"], - uproar: ["1L1"], - venoshock: ["1L1"], - wideguard: ["1L1"], - willowisp: ["1L1"], - workup: ["1L1"], - }, - eventData: [ - {generation: 7, level: 1, shiny: 1, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 7, level: 30, gender: "M", nature: "Brave", moves: ["1L1"], pokeball: "cherishball"}, - ], - }, - togedemaru: { - learnset: { - afteryou: ["1L1"], - agility: ["1L1"], - assurance: ["1L1"], - attract: ["1L1"], - bounce: ["1L1"], - charge: ["1L1"], - chargebeam: ["1L1"], - confide: ["1L1"], - covet: ["1L1"], - defensecurl: ["1L1"], - disarmingvoice: ["1L1"], - discharge: ["1L1"], - doubleteam: ["1L1"], - eerieimpulse: ["1L1"], - electricterrain: ["1L1"], - electroball: ["1L1"], - electroweb: ["1L1"], - encore: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fakeout: ["1L1"], - fellstinger: ["1L1"], - flail: ["1L1"], - fling: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - gravity: ["1L1"], - gyroball: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - ironhead: ["1L1"], - irontail: ["1L1"], - lastresort: ["1L1"], - magnetrise: ["1L1"], - nuzzle: ["1L1"], - payback: ["1L1"], - pinmissile: ["1L1"], - poisonjab: ["1L1"], - present: ["1L1"], - protect: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - reversal: ["1L1"], - risingvoltage: ["1L1"], - roleplay: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - shockwave: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - spark: ["1L1"], - spikyshield: ["1L1"], - steelbeam: ["1L1"], - steelroller: ["1L1"], - substitute: ["1L1"], - superfang: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - tackle: ["1L1"], - thief: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thundershock: ["1L1"], - thunderwave: ["1L1"], - tickle: ["1L1"], - toxic: ["1L1"], - twineedle: ["1L1"], - uturn: ["1L1"], - voltswitch: ["1L1"], - wildcharge: ["1L1"], - wish: ["1L1"], - workup: ["1L1"], - zenheadbutt: ["1L1"], - zingzap: ["1L1"], - }, - }, - togedemarutotem: { - learnset: { - afteryou: ["1L1"], - attract: ["1L1"], - bounce: ["1L1"], - charge: ["1L1"], - chargebeam: ["1L1"], - confide: ["1L1"], - covet: ["1L1"], - defensecurl: ["1L1"], - discharge: ["1L1"], - doubleteam: ["1L1"], - electricterrain: ["1L1"], - electroweb: ["1L1"], - endeavor: ["1L1"], - facade: ["1L1"], - fellstinger: ["1L1"], - fling: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - gravity: ["1L1"], - gyroball: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - ironhead: ["1L1"], - irontail: ["1L1"], - lastresort: ["1L1"], - magnetrise: ["1L1"], - nuzzle: ["1L1"], - payback: ["1L1"], - pinmissile: ["1L1"], - poisonjab: ["1L1"], - protect: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roleplay: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - shockwave: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - spark: ["1L1"], - spikyshield: ["1L1"], - substitute: ["1L1"], - superfang: ["1L1"], - swagger: ["1L1"], - tackle: ["1L1"], - thief: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thundershock: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - uturn: ["1L1"], - voltswitch: ["1L1"], - wildcharge: ["1L1"], - workup: ["1L1"], - zenheadbutt: ["1L1"], - zingzap: ["1L1"], - }, - eventData: [ - {generation: 7, level: 30, perfectIVs: 3, moves: ["1L1"], pokeball: "pokeball"}, - ], - eventOnly: false, - }, - mimikyu: { - learnset: { - afteryou: ["1L1"], - astonish: ["1L1"], - attract: ["1L1"], - babydolleyes: ["1L1"], - beatup: ["1L1"], - bulkup: ["1L1"], - burningjealousy: ["1L1"], - chargebeam: ["1L1"], - charm: ["1L1"], - confide: ["1L1"], - confuseray: ["1L1"], - copycat: ["1L1"], - covet: ["1L1"], - curse: ["1L1"], - darkpulse: ["1L1"], - dazzlinggleam: ["1L1"], - destinybond: ["1L1"], - doubleteam: ["1L1"], - drainingkiss: ["1L1"], - drainpunch: ["1L1"], - dreameater: ["1L1"], - embargo: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - feintattack: ["1L1"], - fling: ["1L1"], - frustration: ["1L1"], - gigadrain: ["1L1"], - gigaimpact: ["1L1"], - grudge: ["1L1"], - hex: ["1L1"], - hiddenpower: ["1L1"], - honeclaws: ["1L1"], - hyperbeam: ["1L1"], - infestation: ["1L1"], - lastresort: ["1L1"], - leechlife: ["1L1"], - lightscreen: ["1L1"], - magicroom: ["1L1"], - mimic: ["1L1"], - mistyterrain: ["1L1"], - nightmare: ["1L1"], - nightshade: ["1L1"], - painsplit: ["1L1"], - payback: ["1L1"], - phantomforce: ["1L1"], - playrough: ["1L1"], - pounce: ["1L1"], - protect: ["1L1"], - psychic: ["1L1"], - psychup: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - scratch: ["1L1"], - screech: ["1L1"], - shadowball: ["1L1"], - shadowclaw: ["1L1"], - shadowsneak: ["1L1"], - slash: ["1L1"], - sleeptalk: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - spite: ["1L1"], - splash: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swordsdance: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - telekinesis: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - trick: ["1L1"], - trickroom: ["1L1"], - willowisp: ["1L1"], - woodhammer: ["1L1"], - workup: ["1L1"], - xscissor: ["1L1"], - }, - eventData: [ - {generation: 7, level: 10, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 7, level: 10, shiny: true, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 7, level: 50, shiny: true, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 9, level: 25, moves: ["1L1"], pokeball: "cherishball"}, - ], - }, - mimikyutotem: { - learnset: { - afteryou: ["1L1"], - astonish: ["1L1"], - attract: ["1L1"], - babydolleyes: ["1L1"], - bulkup: ["1L1"], - chargebeam: ["1L1"], - charm: ["1L1"], - confide: ["1L1"], - copycat: ["1L1"], - covet: ["1L1"], - darkpulse: ["1L1"], - dazzlinggleam: ["1L1"], - doubleteam: ["1L1"], - drainpunch: ["1L1"], - dreameater: ["1L1"], - embargo: ["1L1"], - facade: ["1L1"], - feintattack: ["1L1"], - fling: ["1L1"], - frustration: ["1L1"], - gigadrain: ["1L1"], - hiddenpower: ["1L1"], - honeclaws: ["1L1"], - hyperbeam: ["1L1"], - infestation: ["1L1"], - lastresort: ["1L1"], - leechlife: ["1L1"], - lightscreen: ["1L1"], - magicroom: ["1L1"], - mimic: ["1L1"], - painsplit: ["1L1"], - payback: ["1L1"], - playrough: ["1L1"], - protect: ["1L1"], - psychic: ["1L1"], - psychup: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - scratch: ["1L1"], - shadowball: ["1L1"], - shadowclaw: ["1L1"], - shadowsneak: ["1L1"], - slash: ["1L1"], - sleeptalk: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - spite: ["1L1"], - splash: ["1L1"], - substitute: ["1L1"], - swagger: ["1L1"], - swordsdance: ["1L1"], - taunt: ["1L1"], - telekinesis: ["1L1"], - thief: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - trick: ["1L1"], - trickroom: ["1L1"], - willowisp: ["1L1"], - woodhammer: ["1L1"], - workup: ["1L1"], - xscissor: ["1L1"], - }, - eventData: [ - {generation: 7, level: 40, perfectIVs: 3, moves: ["1L1"], pokeball: "pokeball"}, - ], - eventOnly: false, - }, - bruxish: { - learnset: { - aerialace: ["1L1"], - afteryou: ["1L1"], - agility: ["1L1"], - allyswitch: ["1L1"], - aquajet: ["1L1"], - aquatail: ["1L1"], - astonish: ["1L1"], - attract: ["1L1"], - bite: ["1L1"], - blizzard: ["1L1"], - bulkup: ["1L1"], - calmmind: ["1L1"], - chillingwater: ["1L1"], - confide: ["1L1"], - confusion: ["1L1"], - crunch: ["1L1"], - disable: ["1L1"], - doubleteam: ["1L1"], - dreameater: ["1L1"], - embargo: ["1L1"], - endure: ["1L1"], - expandingforce: ["1L1"], - facade: ["1L1"], - fling: ["1L1"], - flipturn: ["1L1"], - frostbreath: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - hiddenpower: ["1L1"], - hydropump: ["1L1"], - hyperbeam: ["1L1"], - icebeam: ["1L1"], - icefang: ["1L1"], - icywind: ["1L1"], - irontail: ["1L1"], - lightscreen: ["1L1"], - liquidation: ["1L1"], - magiccoat: ["1L1"], - magicroom: ["1L1"], - painsplit: ["1L1"], - payback: ["1L1"], - poisonfang: ["1L1"], - protect: ["1L1"], - psychic: ["1L1"], - psychicfangs: ["1L1"], - psychicnoise: ["1L1"], - psychicterrain: ["1L1"], - psyshock: ["1L1"], - psywave: ["1L1"], - rage: ["1L1"], - raindance: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - scald: ["1L1"], - scaryface: ["1L1"], - screech: ["1L1"], - signalbeam: ["1L1"], - sleeptalk: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - substitute: ["1L1"], - superfang: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - swordsdance: ["1L1"], - synchronoise: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - telekinesis: ["1L1"], - terablast: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - trickroom: ["1L1"], - uproar: ["1L1"], - venoshock: ["1L1"], - waterfall: ["1L1"], - watergun: ["1L1"], - waterpulse: ["1L1"], - wavecrash: ["1L1"], - whirlpool: ["1L1"], - wonderroom: ["1L1"], - }, - }, - drampa: { - learnset: { - amnesia: ["1L1"], - attract: ["1L1"], - blizzard: ["1L1"], - block: ["1L1"], - breakingswipe: ["1L1"], - bulldoze: ["1L1"], - calmmind: ["1L1"], - confide: ["1L1"], - defog: ["1L1"], - doubleteam: ["1L1"], - dracometeor: ["1L1"], - dragonbreath: ["1L1"], - dragonclaw: ["1L1"], - dragondance: ["1L1"], - dragonpulse: ["1L1"], - dragonrage: ["1L1"], - dragonrush: ["1L1"], - dragontail: ["1L1"], - earthquake: ["1L1"], - echoedvoice: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - extrasensory: ["1L1"], - facade: ["1L1"], - fireblast: ["1L1"], - flamethrower: ["1L1"], - fling: ["1L1"], - fly: ["1L1"], - focusblast: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - glare: ["1L1"], - grassknot: ["1L1"], - heatwave: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hurricane: ["1L1"], - hydropump: ["1L1"], - hyperbeam: ["1L1"], - hypervoice: ["1L1"], - icebeam: ["1L1"], - icywind: ["1L1"], - lashout: ["1L1"], - lightscreen: ["1L1"], - mist: ["1L1"], - naturalgift: ["1L1"], - naturepower: ["1L1"], - outrage: ["1L1"], - playnice: ["1L1"], - playrough: ["1L1"], - protect: ["1L1"], - psychup: ["1L1"], - raindance: ["1L1"], - razorwind: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roar: ["1L1"], - rockslide: ["1L1"], - roost: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - scaleshot: ["1L1"], - shadowball: ["1L1"], - shadowclaw: ["1L1"], - shockwave: ["1L1"], - signalbeam: ["1L1"], - sleeptalk: ["1L1"], - snarl: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - steelwing: ["1L1"], - stompingtantrum: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - superpower: ["1L1"], - surf: ["1L1"], - swift: ["1L1"], - tailwind: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderwave: ["1L1"], - tickle: ["1L1"], - toxic: ["1L1"], - twister: ["1L1"], - uproar: ["1L1"], - waterpulse: ["1L1"], - workup: ["1L1"], - }, - eventData: [ - {generation: 7, level: 1, shiny: 1, isHidden: true, moves: ["1L1"], pokeball: "cherishball"}, - ], - }, - dhelmise: { - learnset: { - absorb: ["1L1"], - aerialace: ["1L1"], - allyswitch: ["1L1"], - anchorshot: ["1L1"], - assurance: ["1L1"], - astonish: ["1L1"], - attract: ["1L1"], - block: ["1L1"], - bodypress: ["1L1"], - brickbreak: ["1L1"], - brine: ["1L1"], - brutalswing: ["1L1"], - bulldoze: ["1L1"], - confide: ["1L1"], - doubleteam: ["1L1"], - earthquake: ["1L1"], - embargo: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - flashcannon: ["1L1"], - frustration: ["1L1"], - gigadrain: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - grassyglide: ["1L1"], - growth: ["1L1"], - gyroball: ["1L1"], - heavyslam: ["1L1"], - helpinghand: ["1L1"], - hex: ["1L1"], - hiddenpower: ["1L1"], - hydropump: ["1L1"], - hyperbeam: ["1L1"], - irondefense: ["1L1"], - ironhead: ["1L1"], - knockoff: ["1L1"], - liquidation: ["1L1"], - megadrain: ["1L1"], - metalsound: ["1L1"], - muddywater: ["1L1"], - painsplit: ["1L1"], - payback: ["1L1"], - phantomforce: ["1L1"], - poltergeist: ["1L1"], - powerwhip: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - rapidspin: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rockslide: ["1L1"], - roleplay: ["1L1"], - round: ["1L1"], - shadowball: ["1L1"], - shadowclaw: ["1L1"], - slam: ["1L1"], - sleeptalk: ["1L1"], - sludgewave: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - solarblade: ["1L1"], - spite: ["1L1"], - steelroller: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - switcheroo: ["1L1"], - swordsdance: ["1L1"], - synthesis: ["1L1"], - telekinesis: ["1L1"], - thief: ["1L1"], - toxic: ["1L1"], - whirlpool: ["1L1"], - wrap: ["1L1"], - }, - }, - jangmoo: { - learnset: { - aerialace: ["1L1"], - aquatail: ["1L1"], - attract: ["1L1"], - bide: ["1L1"], - bodyslam: ["1L1"], - breakingswipe: ["1L1"], - brickbreak: ["1L1"], - bulkup: ["1L1"], - bulldoze: ["1L1"], - confide: ["1L1"], - counter: ["1L1"], - doubleteam: ["1L1"], - dracometeor: ["1L1"], - dragonbreath: ["1L1"], - dragoncheer: ["1L1"], - dragonclaw: ["1L1"], - dragondance: ["1L1"], - dragonpulse: ["1L1"], - dragontail: ["1L1"], - dualchop: ["1L1"], - earthquake: ["1L1"], - echoedvoice: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - falseswipe: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - focuspunch: ["1L1"], - frustration: ["1L1"], - headbutt: ["1L1"], - hiddenpower: ["1L1"], - irondefense: ["1L1"], - ironhead: ["1L1"], - irontail: ["1L1"], - leer: ["1L1"], - lowkick: ["1L1"], - nobleroar: ["1L1"], - outrage: ["1L1"], - payback: ["1L1"], - protect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - reversal: ["1L1"], - roar: ["1L1"], - rockslide: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - sandstorm: ["1L1"], - scaleshot: ["1L1"], - scaryface: ["1L1"], - screech: ["1L1"], - shadowclaw: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - substitute: ["1L1"], - swagger: ["1L1"], - swordsdance: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - toxic: ["1L1"], - uproar: ["1L1"], - workup: ["1L1"], - xscissor: ["1L1"], - }, - }, - hakamoo: { - learnset: { - aerialace: ["1L1"], - aquatail: ["1L1"], - attract: ["1L1"], - autotomize: ["1L1"], - bide: ["1L1"], - bodyslam: ["1L1"], - breakingswipe: ["1L1"], - brickbreak: ["1L1"], - brutalswing: ["1L1"], - bulkup: ["1L1"], - bulldoze: ["1L1"], - closecombat: ["1L1"], - coaching: ["1L1"], - confide: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dracometeor: ["1L1"], - dragoncheer: ["1L1"], - dragonclaw: ["1L1"], - dragondance: ["1L1"], - dragonpulse: ["1L1"], - dragontail: ["1L1"], - drainpunch: ["1L1"], - dualchop: ["1L1"], - earthquake: ["1L1"], - echoedvoice: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - falseswipe: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - focuspunch: ["1L1"], - frustration: ["1L1"], - headbutt: ["1L1"], - hiddenpower: ["1L1"], - irondefense: ["1L1"], - ironhead: ["1L1"], - irontail: ["1L1"], - leer: ["1L1"], - lowkick: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - metalclaw: ["1L1"], - nobleroar: ["1L1"], - outrage: ["1L1"], - payback: ["1L1"], - protect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - reversal: ["1L1"], - roar: ["1L1"], - rockslide: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - sandstorm: ["1L1"], - scaleshot: ["1L1"], - scaryface: ["1L1"], - screech: ["1L1"], - shadowclaw: ["1L1"], - skyuppercut: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swordsdance: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - throatchop: ["1L1"], - toxic: ["1L1"], - upperhand: ["1L1"], - uproar: ["1L1"], - vacuumwave: ["1L1"], - workup: ["1L1"], - xscissor: ["1L1"], - }, - }, - kommoo: { - learnset: { - aerialace: ["1L1"], - aquatail: ["1L1"], - attract: ["1L1"], - aurasphere: ["1L1"], - autotomize: ["1L1"], - bellydrum: ["1L1"], - bide: ["1L1"], - bodypress: ["1L1"], - bodyslam: ["1L1"], - boomburst: ["1L1"], - breakingswipe: ["1L1"], - brickbreak: ["1L1"], - brutalswing: ["1L1"], - bulkup: ["1L1"], - bulldoze: ["1L1"], - clangingscales: ["1L1"], - clangoroussoul: ["1L1"], - closecombat: ["1L1"], - coaching: ["1L1"], - confide: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dracometeor: ["1L1"], - dragoncheer: ["1L1"], - dragonclaw: ["1L1"], - dragondance: ["1L1"], - dragonpulse: ["1L1"], - dragontail: ["1L1"], - drainpunch: ["1L1"], - dualchop: ["1L1"], - earthquake: ["1L1"], - echoedvoice: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - falseswipe: ["1L1"], - firepunch: ["1L1"], - flamethrower: ["1L1"], - flashcannon: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - focuspunch: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - hypervoice: ["1L1"], - icepunch: ["1L1"], - irondefense: ["1L1"], - ironhead: ["1L1"], - irontail: ["1L1"], - laserfocus: ["1L1"], - leer: ["1L1"], - lowkick: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - metalclaw: ["1L1"], - metalsound: ["1L1"], - nobleroar: ["1L1"], - outrage: ["1L1"], - payback: ["1L1"], - poisonjab: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - revenge: ["1L1"], - reversal: ["1L1"], - roar: ["1L1"], - rockpolish: ["1L1"], - rockslide: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - sandstorm: ["1L1"], - scaleshot: ["1L1"], - scaryface: ["1L1"], - screech: ["1L1"], - shadowclaw: ["1L1"], - shockwave: ["1L1"], - skyuppercut: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - stealthrock: ["1L1"], - stompingtantrum: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - superpower: ["1L1"], - swagger: ["1L1"], - swordsdance: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - throatchop: ["1L1"], - thunderpunch: ["1L1"], - toxic: ["1L1"], - upperhand: ["1L1"], - uproar: ["1L1"], - vacuumwave: ["1L1"], - waterpulse: ["1L1"], - workup: ["1L1"], - xscissor: ["1L1"], - }, - encounters: [ - {generation: 7, level: 41}, - ], - }, - kommoototem: { - learnset: { - aerialace: ["1L1"], - aquatail: ["1L1"], - attract: ["1L1"], - autotomize: ["1L1"], - bellydrum: ["1L1"], - bide: ["1L1"], - brickbreak: ["1L1"], - brutalswing: ["1L1"], - bulkup: ["1L1"], - bulldoze: ["1L1"], - clangingscales: ["1L1"], - closecombat: ["1L1"], - confide: ["1L1"], - doubleteam: ["1L1"], - dracometeor: ["1L1"], - dragonclaw: ["1L1"], - dragondance: ["1L1"], - dragonpulse: ["1L1"], - dragontail: ["1L1"], - drainpunch: ["1L1"], - dualchop: ["1L1"], - earthquake: ["1L1"], - echoedvoice: ["1L1"], - endeavor: ["1L1"], - facade: ["1L1"], - falseswipe: ["1L1"], - firepunch: ["1L1"], - flamethrower: ["1L1"], - flashcannon: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - focuspunch: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - headbutt: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - hypervoice: ["1L1"], - icepunch: ["1L1"], - irondefense: ["1L1"], - ironhead: ["1L1"], - irontail: ["1L1"], - laserfocus: ["1L1"], - leer: ["1L1"], - lowkick: ["1L1"], - nobleroar: ["1L1"], - outrage: ["1L1"], - payback: ["1L1"], - poisonjab: ["1L1"], - protect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roar: ["1L1"], - rockpolish: ["1L1"], - rockslide: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - sandstorm: ["1L1"], - scaryface: ["1L1"], - screech: ["1L1"], - shadowclaw: ["1L1"], - shockwave: ["1L1"], - skyuppercut: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - stealthrock: ["1L1"], - stompingtantrum: ["1L1"], - substitute: ["1L1"], - superpower: ["1L1"], - swagger: ["1L1"], - swordsdance: ["1L1"], - tackle: ["1L1"], - taunt: ["1L1"], - thunderpunch: ["1L1"], - toxic: ["1L1"], - uproar: ["1L1"], - waterpulse: ["1L1"], - workup: ["1L1"], - xscissor: ["1L1"], - }, - eventData: [ - {generation: 7, level: 50, perfectIVs: 3, moves: ["1L1"], pokeball: "pokeball"}, - ], - eventOnly: false, - }, - tapukoko: { - learnset: { - acrobatics: ["1L1"], - aerialace: ["1L1"], - agility: ["1L1"], - assurance: ["1L1"], - bravebird: ["1L1"], - calmmind: ["1L1"], - charge: ["1L1"], - confide: ["1L1"], - dazzlinggleam: ["1L1"], - defog: ["1L1"], - discharge: ["1L1"], - doubleteam: ["1L1"], - echoedvoice: ["1L1"], - eerieimpulse: ["1L1"], - electricterrain: ["1L1"], - electroball: ["1L1"], - electroweb: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fairywind: ["1L1"], - falseswipe: ["1L1"], - fly: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - hypervoice: ["1L1"], - irondefense: ["1L1"], - ironhead: ["1L1"], - lightscreen: ["1L1"], - meanlook: ["1L1"], - mirrormove: ["1L1"], - naturepower: ["1L1"], - naturesmadness: ["1L1"], - powerswap: ["1L1"], - protect: ["1L1"], - psychup: ["1L1"], - quickattack: ["1L1"], - raindance: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roar: ["1L1"], - roost: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - screech: ["1L1"], - shockwave: ["1L1"], - skyattack: ["1L1"], - skydrop: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - spark: ["1L1"], - steelwing: ["1L1"], - storedpower: ["1L1"], - substitute: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - taunt: ["1L1"], - telekinesis: ["1L1"], - thief: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderpunch: ["1L1"], - thundershock: ["1L1"], - thunderwave: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - uturn: ["1L1"], - voltswitch: ["1L1"], - wildcharge: ["1L1"], - withdraw: ["1L1"], - workup: ["1L1"], - }, - eventData: [ - {generation: 7, level: 60, moves: ["1L1"]}, - {generation: 7, level: 60, shiny: true, nature: "Timid", moves: ["1L1"], pokeball: "cherishball"}, - {generation: 7, level: 60, shiny: true, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 8, level: 70, shiny: 1, moves: ["1L1"]}, - ], - eventOnly: false, - }, - tapulele: { - learnset: { - allyswitch: ["1L1"], - aromatherapy: ["1L1"], - aromaticmist: ["1L1"], - astonish: ["1L1"], - calmmind: ["1L1"], - chargebeam: ["1L1"], - charm: ["1L1"], - confide: ["1L1"], - confusion: ["1L1"], - dazzlinggleam: ["1L1"], - doubleteam: ["1L1"], - drainingkiss: ["1L1"], - echoedvoice: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - extrasensory: ["1L1"], - facade: ["1L1"], - flatter: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - frustration: ["1L1"], - futuresight: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - gravity: ["1L1"], - guardswap: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - irondefense: ["1L1"], - lightscreen: ["1L1"], - magiccoat: ["1L1"], - magicroom: ["1L1"], - meanlook: ["1L1"], - moonblast: ["1L1"], - naturepower: ["1L1"], - naturesmadness: ["1L1"], - playrough: ["1L1"], - powerswap: ["1L1"], - protect: ["1L1"], - psybeam: ["1L1"], - psychic: ["1L1"], - psychicterrain: ["1L1"], - psychocut: ["1L1"], - psychup: ["1L1"], - psyshock: ["1L1"], - psywave: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - shadowball: ["1L1"], - skillswap: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - speedswap: ["1L1"], - storedpower: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - sweetscent: ["1L1"], - taunt: ["1L1"], - telekinesis: ["1L1"], - thief: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - tickle: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - withdraw: ["1L1"], - wonderroom: ["1L1"], - }, - eventData: [ - {generation: 7, level: 60, moves: ["1L1"]}, - {generation: 7, level: 60, shiny: true, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 8, level: 70, shiny: 1, moves: ["1L1"]}, - ], - eventOnly: false, - }, - tapubulu: { - learnset: { - brickbreak: ["1L1"], - brutalswing: ["1L1"], - bulkup: ["1L1"], - bulletseed: ["1L1"], - calmmind: ["1L1"], - closecombat: ["1L1"], - confide: ["1L1"], - darkestlariat: ["1L1"], - dazzlinggleam: ["1L1"], - disable: ["1L1"], - dualchop: ["1L1"], - echoedvoice: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - falseswipe: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - focuspunch: ["1L1"], - frustration: ["1L1"], - gigadrain: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - grassyterrain: ["1L1"], - guardswap: ["1L1"], - hiddenpower: ["1L1"], - highhorsepower: ["1L1"], - hornattack: ["1L1"], - hornleech: ["1L1"], - hyperbeam: ["1L1"], - irondefense: ["1L1"], - leafage: ["1L1"], - leechseed: ["1L1"], - lightscreen: ["1L1"], - meanlook: ["1L1"], - megadrain: ["1L1"], - megahorn: ["1L1"], - megapunch: ["1L1"], - naturepower: ["1L1"], - naturesmadness: ["1L1"], - payback: ["1L1"], - powerswap: ["1L1"], - protect: ["1L1"], - psychup: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - revenge: ["1L1"], - roar: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - rototiller: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - scaryface: ["1L1"], - seedbomb: ["1L1"], - skullbash: ["1L1"], - sleeptalk: ["1L1"], - smartstrike: ["1L1"], - snarl: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - stoneedge: ["1L1"], - storedpower: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - superpower: ["1L1"], - swagger: ["1L1"], - swordsdance: ["1L1"], - synthesis: ["1L1"], - taunt: ["1L1"], - telekinesis: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - whirlwind: ["1L1"], - withdraw: ["1L1"], - woodhammer: ["1L1"], - workup: ["1L1"], - worryseed: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 7, level: 60, moves: ["1L1"]}, - {generation: 7, level: 60, shiny: true, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 8, level: 70, shiny: 1, moves: ["1L1"]}, - ], - eventOnly: false, - }, - tapufini: { - learnset: { - aquaring: ["1L1"], - blizzard: ["1L1"], - brine: ["1L1"], - calmmind: ["1L1"], - confide: ["1L1"], - dazzlinggleam: ["1L1"], - defog: ["1L1"], - disarmingvoice: ["1L1"], - dive: ["1L1"], - doubleteam: ["1L1"], - drainingkiss: ["1L1"], - echoedvoice: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fling: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - gravity: ["1L1"], - guardswap: ["1L1"], - haze: ["1L1"], - healpulse: ["1L1"], - hiddenpower: ["1L1"], - hydropump: ["1L1"], - hyperbeam: ["1L1"], - icebeam: ["1L1"], - icepunch: ["1L1"], - icywind: ["1L1"], - irondefense: ["1L1"], - knockoff: ["1L1"], - lightscreen: ["1L1"], - magiccoat: ["1L1"], - magicroom: ["1L1"], - meanlook: ["1L1"], - mist: ["1L1"], - mistyterrain: ["1L1"], - moonblast: ["1L1"], - muddywater: ["1L1"], - naturepower: ["1L1"], - naturesmadness: ["1L1"], - playrough: ["1L1"], - protect: ["1L1"], - psychup: ["1L1"], - raindance: ["1L1"], - reflect: ["1L1"], - refresh: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - scald: ["1L1"], - shadowball: ["1L1"], - sleeptalk: ["1L1"], - smartstrike: ["1L1"], - snore: ["1L1"], - soak: ["1L1"], - storedpower: ["1L1"], - substitute: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - taunt: ["1L1"], - telekinesis: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - trick: ["1L1"], - waterfall: ["1L1"], - watergun: ["1L1"], - waterpulse: ["1L1"], - whirlpool: ["1L1"], - withdraw: ["1L1"], - wonderroom: ["1L1"], - }, - eventData: [ - {generation: 7, level: 60, moves: ["1L1"]}, - {generation: 7, level: 60, shiny: true, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 8, level: 70, shiny: 1, moves: ["1L1"]}, - ], - eventOnly: false, - }, - cosmog: { - learnset: { - splash: ["1L1"], - teleport: ["1L1"], - }, - eventData: [ - {generation: 7, level: 5, moves: ["1L1"]}, - {generation: 8, level: 5, moves: ["1L1"], pokeball: "pokeball"}, - ], - eventOnly: false, - }, - cosmoem: { - learnset: { - cosmicpower: ["1L1"], - teleport: ["1L1"], - }, - }, - solgaleo: { - learnset: { - agility: ["1L1"], - bodyslam: ["1L1"], - bulldoze: ["1L1"], - calmmind: ["1L1"], - closecombat: ["1L1"], - confide: ["1L1"], - cosmicpower: ["1L1"], - crunch: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - earthquake: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - expandingforce: ["1L1"], - facade: ["1L1"], - fireblast: ["1L1"], - firespin: ["1L1"], - flamecharge: ["1L1"], - flamethrower: ["1L1"], - flareblitz: ["1L1"], - flashcannon: ["1L1"], - focusblast: ["1L1"], - frustration: ["1L1"], - futuresight: ["1L1"], - gigaimpact: ["1L1"], - gyroball: ["1L1"], - heatcrash: ["1L1"], - heavyslam: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - hypervoice: ["1L1"], - irondefense: ["1L1"], - ironhead: ["1L1"], - irontail: ["1L1"], - knockoff: ["1L1"], - lastresort: ["1L1"], - lightscreen: ["1L1"], - metalburst: ["1L1"], - metalclaw: ["1L1"], - metalsound: ["1L1"], - meteorbeam: ["1L1"], - morningsun: ["1L1"], - mysticalfire: ["1L1"], - nobleroar: ["1L1"], - outrage: ["1L1"], - protect: ["1L1"], - psychic: ["1L1"], - psychicfangs: ["1L1"], - psychup: ["1L1"], - psyshock: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roar: ["1L1"], - rockslide: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - scaryface: ["1L1"], - shockwave: ["1L1"], - sleeptalk: ["1L1"], - snarl: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - steelbeam: ["1L1"], - steelroller: ["1L1"], - stoneedge: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - sunsteelstrike: ["1L1"], - superpower: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - takedown: ["1L1"], - teleport: ["1L1"], - terablast: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - trickroom: ["1L1"], - wakeupslap: ["1L1"], - wideguard: ["1L1"], - wildcharge: ["1L1"], - workup: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 7, level: 55, moves: ["1L1"]}, - {generation: 7, level: 60, moves: ["1L1"]}, - {generation: 7, level: 60, shiny: true, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 8, level: 70, shiny: 1, moves: ["1L1"]}, - ], - }, - lunala: { - learnset: { - acrobatics: ["1L1"], - aerialace: ["1L1"], - agility: ["1L1"], - airslash: ["1L1"], - blizzard: ["1L1"], - calmmind: ["1L1"], - chargebeam: ["1L1"], - confide: ["1L1"], - confuseray: ["1L1"], - confusion: ["1L1"], - cosmicpower: ["1L1"], - dazzlinggleam: ["1L1"], - defog: ["1L1"], - doubleteam: ["1L1"], - dreameater: ["1L1"], - dualwingbeat: ["1L1"], - endure: ["1L1"], - expandingforce: ["1L1"], - facade: ["1L1"], - fly: ["1L1"], - focusblast: ["1L1"], - frustration: ["1L1"], - futuresight: ["1L1"], - gigaimpact: ["1L1"], - heatwave: ["1L1"], - helpinghand: ["1L1"], - hex: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - hypnosis: ["1L1"], - icebeam: ["1L1"], - icywind: ["1L1"], - lightscreen: ["1L1"], - magiccoat: ["1L1"], - magicroom: ["1L1"], - meteorbeam: ["1L1"], - moonblast: ["1L1"], - moongeistbeam: ["1L1"], - moonlight: ["1L1"], - nightdaze: ["1L1"], - nightshade: ["1L1"], - phantomforce: ["1L1"], - poltergeist: ["1L1"], - protect: ["1L1"], - psychic: ["1L1"], - psychocut: ["1L1"], - psychup: ["1L1"], - psyshock: ["1L1"], - raindance: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roar: ["1L1"], - roost: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - scaryface: ["1L1"], - shadowball: ["1L1"], - shadowclaw: ["1L1"], - shockwave: ["1L1"], - signalbeam: ["1L1"], - skyattack: ["1L1"], - skydrop: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - spite: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - tailwind: ["1L1"], - telekinesis: ["1L1"], - teleport: ["1L1"], - terablast: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - trick: ["1L1"], - trickroom: ["1L1"], - wideguard: ["1L1"], - willowisp: ["1L1"], - wonderroom: ["1L1"], - workup: ["1L1"], - }, - eventData: [ - {generation: 7, level: 55, moves: ["1L1"]}, - {generation: 7, level: 60, moves: ["1L1"]}, - {generation: 7, level: 60, shiny: true, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 8, level: 70, shiny: 1, moves: ["1L1"]}, - ], - }, - nihilego: { - learnset: { - acid: ["1L1"], - acidspray: ["1L1"], - allyswitch: ["1L1"], - bind: ["1L1"], - bodyslam: ["1L1"], - brutalswing: ["1L1"], - chargebeam: ["1L1"], - clearsmog: ["1L1"], - confide: ["1L1"], - constrict: ["1L1"], - corrosivegas: ["1L1"], - crosspoison: ["1L1"], - dazzlinggleam: ["1L1"], - doubleteam: ["1L1"], - echoedvoice: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - foulplay: ["1L1"], - frustration: ["1L1"], - grassknot: ["1L1"], - guardsplit: ["1L1"], - gunkshot: ["1L1"], - headbutt: ["1L1"], - headsmash: ["1L1"], - hex: ["1L1"], - hiddenpower: ["1L1"], - ironhead: ["1L1"], - knockoff: ["1L1"], - lightscreen: ["1L1"], - magiccoat: ["1L1"], - meteorbeam: ["1L1"], - mirrorcoat: ["1L1"], - painsplit: ["1L1"], - poisonjab: ["1L1"], - pound: ["1L1"], - powergem: ["1L1"], - powersplit: ["1L1"], - protect: ["1L1"], - psychic: ["1L1"], - psyshock: ["1L1"], - psywave: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rockslide: ["1L1"], - rocktomb: ["1L1"], - roleplay: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - sandstorm: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - sludgewave: ["1L1"], - snore: ["1L1"], - spite: ["1L1"], - stealthrock: ["1L1"], - substitute: ["1L1"], - swagger: ["1L1"], - telekinesis: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderwave: ["1L1"], - tickle: ["1L1"], - toxic: ["1L1"], - toxicspikes: ["1L1"], - trickroom: ["1L1"], - venomdrench: ["1L1"], - venoshock: ["1L1"], - wonderroom: ["1L1"], - worryseed: ["1L1"], - wrap: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 7, level: 55, moves: ["1L1"]}, - {generation: 7, level: 60, shiny: 1, moves: ["1L1"]}, - {generation: 8, level: 70, shiny: 1, moves: ["1L1"]}, - ], - eventOnly: false, - }, - buzzwole: { - learnset: { - bodyslam: ["1L1"], - bounce: ["1L1"], - brickbreak: ["1L1"], - bugbite: ["1L1"], - bulkup: ["1L1"], - bulldoze: ["1L1"], - closecombat: ["1L1"], - coaching: ["1L1"], - cometpunch: ["1L1"], - confide: ["1L1"], - counter: ["1L1"], - darkestlariat: ["1L1"], - doubleteam: ["1L1"], - drainpunch: ["1L1"], - dualchop: ["1L1"], - dualwingbeat: ["1L1"], - dynamicpunch: ["1L1"], - earthquake: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - falseswipe: ["1L1"], - fellstinger: ["1L1"], - fling: ["1L1"], - focusenergy: ["1L1"], - focuspunch: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - gyroball: ["1L1"], - hammerarm: ["1L1"], - harden: ["1L1"], - hiddenpower: ["1L1"], - highhorsepower: ["1L1"], - icepunch: ["1L1"], - ironhead: ["1L1"], - leechlife: ["1L1"], - lowsweep: ["1L1"], - lunge: ["1L1"], - megapunch: ["1L1"], - outrage: ["1L1"], - payback: ["1L1"], - poisonjab: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - revenge: ["1L1"], - reversal: ["1L1"], - rockslide: ["1L1"], - rocktomb: ["1L1"], - roost: ["1L1"], - round: ["1L1"], - sleeptalk: ["1L1"], - smackdown: ["1L1"], - snore: ["1L1"], - stompingtantrum: ["1L1"], - stoneedge: ["1L1"], - substitute: ["1L1"], - superpower: ["1L1"], - swagger: ["1L1"], - taunt: ["1L1"], - thunderpunch: ["1L1"], - toxic: ["1L1"], - vitalthrow: ["1L1"], - workup: ["1L1"], - }, - eventData: [ - {generation: 7, level: 65, moves: ["1L1"]}, - {generation: 7, level: 60, shiny: 1, moves: ["1L1"]}, - {generation: 8, level: 70, shiny: 1, moves: ["1L1"]}, - ], - eventOnly: false, - }, - pheromosa: { - learnset: { - agility: ["1L1"], - assurance: ["1L1"], - blizzard: ["1L1"], - block: ["1L1"], - bounce: ["1L1"], - brickbreak: ["1L1"], - bugbite: ["1L1"], - bugbuzz: ["1L1"], - closecombat: ["1L1"], - coaching: ["1L1"], - confide: ["1L1"], - doublekick: ["1L1"], - doubleteam: ["1L1"], - drillrun: ["1L1"], - echoedvoice: ["1L1"], - electroweb: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - falseswipe: ["1L1"], - feint: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - foulplay: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - hiddenpower: ["1L1"], - highjumpkick: ["1L1"], - hyperbeam: ["1L1"], - icebeam: ["1L1"], - icywind: ["1L1"], - jumpkick: ["1L1"], - laserfocus: ["1L1"], - leer: ["1L1"], - lowkick: ["1L1"], - lowsweep: ["1L1"], - lunge: ["1L1"], - mefirst: ["1L1"], - outrage: ["1L1"], - poisonjab: ["1L1"], - protect: ["1L1"], - quickguard: ["1L1"], - quiverdance: ["1L1"], - rapidspin: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roost: ["1L1"], - round: ["1L1"], - shockwave: ["1L1"], - signalbeam: ["1L1"], - silverwind: ["1L1"], - skittersmack: ["1L1"], - sleeptalk: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - speedswap: ["1L1"], - stomp: ["1L1"], - substitute: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - taunt: ["1L1"], - throatchop: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - tripleaxel: ["1L1"], - triplekick: ["1L1"], - uturn: ["1L1"], - }, - eventData: [ - {generation: 7, level: 60, moves: ["1L1"]}, - {generation: 7, level: 60, shiny: 1, moves: ["1L1"]}, - {generation: 8, level: 70, shiny: 1, moves: ["1L1"]}, - ], - eventOnly: false, - }, - xurkitree: { - learnset: { - bind: ["1L1"], - brutalswing: ["1L1"], - calmmind: ["1L1"], - charge: ["1L1"], - chargebeam: ["1L1"], - confide: ["1L1"], - dazzlinggleam: ["1L1"], - discharge: ["1L1"], - doubleteam: ["1L1"], - eerieimpulse: ["1L1"], - electricterrain: ["1L1"], - electroball: ["1L1"], - electroweb: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - fling: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - gravity: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - hypnosis: ["1L1"], - ingrain: ["1L1"], - iondeluge: ["1L1"], - lightscreen: ["1L1"], - magiccoat: ["1L1"], - magnetrise: ["1L1"], - naturepower: ["1L1"], - powerwhip: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - risingvoltage: ["1L1"], - round: ["1L1"], - shockwave: ["1L1"], - signalbeam: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - spark: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - tailglow: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderpunch: ["1L1"], - thundershock: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - voltswitch: ["1L1"], - wildcharge: ["1L1"], - wrap: ["1L1"], - zapcannon: ["1L1"], - }, - eventData: [ - {generation: 7, level: 65, moves: ["1L1"]}, - {generation: 7, level: 60, shiny: 1, moves: ["1L1"]}, - {generation: 8, level: 70, shiny: 1, moves: ["1L1"]}, - ], - eventOnly: false, - }, - celesteela: { - learnset: { - absorb: ["1L1"], - acrobatics: ["1L1"], - airslash: ["1L1"], - autotomize: ["1L1"], - block: ["1L1"], - bodyslam: ["1L1"], - brutalswing: ["1L1"], - bulldoze: ["1L1"], - confide: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - earthquake: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - explosion: ["1L1"], - facade: ["1L1"], - fireblast: ["1L1"], - flamecharge: ["1L1"], - flamethrower: ["1L1"], - flashcannon: ["1L1"], - fly: ["1L1"], - frustration: ["1L1"], - gigadrain: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - gravity: ["1L1"], - gyroball: ["1L1"], - harden: ["1L1"], - heavyslam: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - ingrain: ["1L1"], - irondefense: ["1L1"], - ironhead: ["1L1"], - leechseed: ["1L1"], - magnetrise: ["1L1"], - megadrain: ["1L1"], - megahorn: ["1L1"], - metalsound: ["1L1"], - meteorbeam: ["1L1"], - protect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rockslide: ["1L1"], - round: ["1L1"], - seedbomb: ["1L1"], - selfdestruct: ["1L1"], - shockwave: ["1L1"], - skullbash: ["1L1"], - sleeptalk: ["1L1"], - smackdown: ["1L1"], - smartstrike: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - steelbeam: ["1L1"], - steelroller: ["1L1"], - stompingtantrum: ["1L1"], - stoneedge: ["1L1"], - substitute: ["1L1"], - superpower: ["1L1"], - swagger: ["1L1"], - tackle: ["1L1"], - toxic: ["1L1"], - wideguard: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 7, level: 65, moves: ["1L1"]}, - {generation: 7, level: 60, shiny: 1, moves: ["1L1"]}, - {generation: 8, level: 70, shiny: 1, moves: ["1L1"]}, - ], - eventOnly: false, - }, - kartana: { - learnset: { - aerialace: ["1L1"], - aircutter: ["1L1"], - airslash: ["1L1"], - brickbreak: ["1L1"], - calmmind: ["1L1"], - confide: ["1L1"], - cut: ["1L1"], - defog: ["1L1"], - detect: ["1L1"], - doubleteam: ["1L1"], - endure: ["1L1"], - falseswipe: ["1L1"], - frustration: ["1L1"], - furycutter: ["1L1"], - gigadrain: ["1L1"], - gigaimpact: ["1L1"], - guillotine: ["1L1"], - hiddenpower: ["1L1"], - irondefense: ["1L1"], - knockoff: ["1L1"], - laserfocus: ["1L1"], - lastresort: ["1L1"], - leafblade: ["1L1"], - nightslash: ["1L1"], - protect: ["1L1"], - psychocut: ["1L1"], - razorleaf: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - round: ["1L1"], - sacredsword: ["1L1"], - screech: ["1L1"], - sleeptalk: ["1L1"], - smartstrike: ["1L1"], - snore: ["1L1"], - solarblade: ["1L1"], - steelbeam: ["1L1"], - substitute: ["1L1"], - swagger: ["1L1"], - swordsdance: ["1L1"], - synthesis: ["1L1"], - tailwind: ["1L1"], - toxic: ["1L1"], - vacuumwave: ["1L1"], - xscissor: ["1L1"], - }, - eventData: [ - {generation: 7, level: 60, moves: ["1L1"]}, - {generation: 7, level: 60, shiny: 1, moves: ["1L1"]}, - {generation: 8, level: 70, shiny: 1, moves: ["1L1"]}, - ], - eventOnly: false, - }, - guzzlord: { - learnset: { - amnesia: ["1L1"], - belch: ["1L1"], - bite: ["1L1"], - bodypress: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - brutalswing: ["1L1"], - bulldoze: ["1L1"], - corrosivegas: ["1L1"], - crunch: ["1L1"], - darkpulse: ["1L1"], - doubleteam: ["1L1"], - dracometeor: ["1L1"], - dragonclaw: ["1L1"], - dragonpulse: ["1L1"], - dragonrage: ["1L1"], - dragonrush: ["1L1"], - dragontail: ["1L1"], - drainpunch: ["1L1"], - dualchop: ["1L1"], - earthquake: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fireblast: ["1L1"], - flamethrower: ["1L1"], - fling: ["1L1"], - frustration: ["1L1"], - gastroacid: ["1L1"], - gigaimpact: ["1L1"], - gyroball: ["1L1"], - hammerarm: ["1L1"], - heatcrash: ["1L1"], - heatwave: ["1L1"], - heavyslam: ["1L1"], - hiddenpower: ["1L1"], - highhorsepower: ["1L1"], - hyperbeam: ["1L1"], - irondefense: ["1L1"], - ironhead: ["1L1"], - irontail: ["1L1"], - knockoff: ["1L1"], - lashout: ["1L1"], - lastresort: ["1L1"], - magnetrise: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - outrage: ["1L1"], - payback: ["1L1"], - poisonjab: ["1L1"], - protect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rockslide: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - shadowclaw: ["1L1"], - shockwave: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - sludgewave: ["1L1"], - smackdown: ["1L1"], - snarl: ["1L1"], - snore: ["1L1"], - steamroller: ["1L1"], - steelroller: ["1L1"], - stockpile: ["1L1"], - stomp: ["1L1"], - stompingtantrum: ["1L1"], - stoneedge: ["1L1"], - substitute: ["1L1"], - swallow: ["1L1"], - thief: ["1L1"], - thrash: ["1L1"], - toxic: ["1L1"], - wideguard: ["1L1"], - wringout: ["1L1"], - }, - eventData: [ - {generation: 7, level: 70, moves: ["1L1"]}, - {generation: 7, level: 60, shiny: 1, moves: ["1L1"]}, - {generation: 8, level: 70, shiny: 1, moves: ["1L1"]}, - ], - eventOnly: false, - }, - necrozma: { - learnset: { - aerialace: ["1L1"], - allyswitch: ["1L1"], - autotomize: ["1L1"], - bodyslam: ["1L1"], - breakingswipe: ["1L1"], - brickbreak: ["1L1"], - brutalswing: ["1L1"], - bulldoze: ["1L1"], - calmmind: ["1L1"], - chargebeam: ["1L1"], - confide: ["1L1"], - confusion: ["1L1"], - cosmicpower: ["1L1"], - darkpulse: ["1L1"], - doubleteam: ["1L1"], - dragondance: ["1L1"], - dragonpulse: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - embargo: ["1L1"], - endure: ["1L1"], - expandingforce: ["1L1"], - facade: ["1L1"], - flashcannon: ["1L1"], - fling: ["1L1"], - frustration: ["1L1"], - futuresight: ["1L1"], - gigaimpact: ["1L1"], - gravity: ["1L1"], - gyroball: ["1L1"], - heatwave: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - hypervoice: ["1L1"], - imprison: ["1L1"], - irondefense: ["1L1"], - ironhead: ["1L1"], - knockoff: ["1L1"], - lightscreen: ["1L1"], - magnetrise: ["1L1"], - metalclaw: ["1L1"], - meteorbeam: ["1L1"], - mirrorshot: ["1L1"], - moonlight: ["1L1"], - morningsun: ["1L1"], - nightslash: ["1L1"], - outrage: ["1L1"], - photongeyser: ["1L1"], - powergem: ["1L1"], - prismaticlaser: ["1L1"], - protect: ["1L1"], - psychic: ["1L1"], - psychicfangs: ["1L1"], - psychocut: ["1L1"], - psyshock: ["1L1"], - recycle: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rockblast: ["1L1"], - rockpolish: ["1L1"], - rockslide: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - sandstorm: ["1L1"], - scaryface: ["1L1"], - shadowclaw: ["1L1"], - shockwave: ["1L1"], - signalbeam: ["1L1"], - slash: ["1L1"], - sleeptalk: ["1L1"], - smartstrike: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - stealthrock: ["1L1"], - stoneedge: ["1L1"], - storedpower: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - swordsdance: ["1L1"], - telekinesis: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - trickroom: ["1L1"], - wringout: ["1L1"], - xscissor: ["1L1"], - }, - eventData: [ - {generation: 7, level: 75, moves: ["1L1"]}, - {generation: 7, level: 65, moves: ["1L1"]}, - {generation: 7, level: 75, shiny: true, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 8, level: 70, shiny: 1, moves: ["1L1"]}, - ], - eventOnly: false, - }, - necrozmaduskmane: { - learnset: { - sunsteelstrike: ["1L1"], - }, - eventOnly: false, - }, - necrozmadawnwings: { - learnset: { - moongeistbeam: ["1L1"], - }, - eventOnly: false, - }, - necrozmaultra: { - learnset: { - moongeistbeam: ["1L1"], - sunsteelstrike: ["1L1"], - }, - }, - magearna: { - learnset: { - afteryou: ["1L1"], - agility: ["1L1"], - aurasphere: ["1L1"], - aurorabeam: ["1L1"], - batonpass: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - calmmind: ["1L1"], - chargebeam: ["1L1"], - confide: ["1L1"], - confuseray: ["1L1"], - craftyshield: ["1L1"], - dazzlinggleam: ["1L1"], - defensecurl: ["1L1"], - disarmingvoice: ["1L1"], - doubleteam: ["1L1"], - drainingkiss: ["1L1"], - echoedvoice: ["1L1"], - eerieimpulse: ["1L1"], - electroball: ["1L1"], - electroweb: ["1L1"], - embargo: ["1L1"], - encore: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - explosion: ["1L1"], - facade: ["1L1"], - falseswipe: ["1L1"], - flashcannon: ["1L1"], - fleurcannon: ["1L1"], - focusblast: ["1L1"], - frustration: ["1L1"], - gearup: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - gravity: ["1L1"], - guardswap: ["1L1"], - gyroball: ["1L1"], - healbell: ["1L1"], - heartswap: ["1L1"], - heavyslam: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - icebeam: ["1L1"], - icespinner: ["1L1"], - imprison: ["1L1"], - irondefense: ["1L1"], - ironhead: ["1L1"], - lastresort: ["1L1"], - lightscreen: ["1L1"], - lockon: ["1L1"], - luckychant: ["1L1"], - magneticflux: ["1L1"], - magnetrise: ["1L1"], - metalsound: ["1L1"], - mindreader: ["1L1"], - mirrorshot: ["1L1"], - mistyexplosion: ["1L1"], - mistyterrain: ["1L1"], - painsplit: ["1L1"], - playrough: ["1L1"], - powerswap: ["1L1"], - protect: ["1L1"], - psybeam: ["1L1"], - psychic: ["1L1"], - psyshock: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - selfdestruct: ["1L1"], - shadowball: ["1L1"], - shiftgear: ["1L1"], - shockwave: ["1L1"], - signalbeam: ["1L1"], - skillswap: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - snowscape: ["1L1"], - solarbeam: ["1L1"], - sonicboom: ["1L1"], - speedswap: ["1L1"], - spikes: ["1L1"], - steelbeam: ["1L1"], - steelroller: ["1L1"], - storedpower: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - synchronoise: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thunderbolt: ["1L1"], - thunderwave: ["1L1"], - triattack: ["1L1"], - trick: ["1L1"], - trickroom: ["1L1"], - trumpcard: ["1L1"], - voltswitch: ["1L1"], - zapcannon: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 7, level: 50, moves: ["1L1"], pokeball: "cherishball"}, - ], - eventOnly: false, - }, - magearnaoriginal: { - learnset: { - agility: ["1L1"], - aurasphere: ["1L1"], - aurorabeam: ["1L1"], - batonpass: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - calmmind: ["1L1"], - chargebeam: ["1L1"], - confuseray: ["1L1"], - craftyshield: ["1L1"], - dazzlinggleam: ["1L1"], - defensecurl: ["1L1"], - disarmingvoice: ["1L1"], - drainingkiss: ["1L1"], - eerieimpulse: ["1L1"], - electroball: ["1L1"], - electroweb: ["1L1"], - encore: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - falseswipe: ["1L1"], - flashcannon: ["1L1"], - fleurcannon: ["1L1"], - focusblast: ["1L1"], - gearup: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - gravity: ["1L1"], - guardswap: ["1L1"], - gyroball: ["1L1"], - heavyslam: ["1L1"], - helpinghand: ["1L1"], - hyperbeam: ["1L1"], - icebeam: ["1L1"], - icespinner: ["1L1"], - imprison: ["1L1"], - irondefense: ["1L1"], - ironhead: ["1L1"], - lightscreen: ["1L1"], - lockon: ["1L1"], - magneticflux: ["1L1"], - metalsound: ["1L1"], - mindreader: ["1L1"], - mistyexplosion: ["1L1"], - mistyterrain: ["1L1"], - painsplit: ["1L1"], - playrough: ["1L1"], - powerswap: ["1L1"], - protect: ["1L1"], - psybeam: ["1L1"], - psychic: ["1L1"], - psyshock: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - selfdestruct: ["1L1"], - shadowball: ["1L1"], - shiftgear: ["1L1"], - skillswap: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - snowscape: ["1L1"], - solarbeam: ["1L1"], - speedswap: ["1L1"], - spikes: ["1L1"], - steelbeam: ["1L1"], - steelroller: ["1L1"], - storedpower: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swift: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thunderbolt: ["1L1"], - thunderwave: ["1L1"], - triattack: ["1L1"], - trick: ["1L1"], - trickroom: ["1L1"], - voltswitch: ["1L1"], - zapcannon: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 8, level: 50, nature: "Mild", ivs: {hp: 31, atk: 30, def: 30, spa: 31, spd: 31, spe: 0}, moves: ["1L1"], pokeball: "cherishball"}, - ], - eventOnly: false, - }, - marshadow: { - learnset: { - acrobatics: ["1L1"], - agility: ["1L1"], - assurance: ["1L1"], - aurasphere: ["1L1"], - blazekick: ["1L1"], - bounce: ["1L1"], - brickbreak: ["1L1"], - bulkup: ["1L1"], - calmmind: ["1L1"], - closecombat: ["1L1"], - coaching: ["1L1"], - confide: ["1L1"], - copycat: ["1L1"], - counter: ["1L1"], - doubleteam: ["1L1"], - drainpunch: ["1L1"], - echoedvoice: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - falseswipe: ["1L1"], - feint: ["1L1"], - firepunch: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - focuspunch: ["1L1"], - forcepalm: ["1L1"], - foulplay: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - hex: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - icepunch: ["1L1"], - ironhead: ["1L1"], - jumpkick: ["1L1"], - knockoff: ["1L1"], - laserfocus: ["1L1"], - lastresort: ["1L1"], - lowkick: ["1L1"], - lowsweep: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - outrage: ["1L1"], - payback: ["1L1"], - phantomforce: ["1L1"], - poisonjab: ["1L1"], - poltergeist: ["1L1"], - protect: ["1L1"], - psychup: ["1L1"], - pursuit: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - revenge: ["1L1"], - reversal: ["1L1"], - rockslide: ["1L1"], - rocktomb: ["1L1"], - roleplay: ["1L1"], - rollingkick: ["1L1"], - round: ["1L1"], - shadowball: ["1L1"], - shadowclaw: ["1L1"], - shadowpunch: ["1L1"], - shadowsneak: ["1L1"], - skittersmack: ["1L1"], - sleeptalk: ["1L1"], - smackdown: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - spectralthief: ["1L1"], - stoneedge: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - superpower: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - thief: ["1L1"], - throatchop: ["1L1"], - thunderpunch: ["1L1"], - toxic: ["1L1"], - willowisp: ["1L1"], - workup: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 7, level: 50, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 8, level: 60, moves: ["1L1"], pokeball: "cherishball"}, - ], - eventOnly: false, - }, - poipole: { - learnset: { - acid: ["1L1"], - charm: ["1L1"], - confide: ["1L1"], - covet: ["1L1"], - dragonpulse: ["1L1"], - echoedvoice: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fellstinger: ["1L1"], - frustration: ["1L1"], - furyattack: ["1L1"], - gastroacid: ["1L1"], - growl: ["1L1"], - gunkshot: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - irontail: ["1L1"], - nastyplot: ["1L1"], - peck: ["1L1"], - pinmissile: ["1L1"], - poisonjab: ["1L1"], - protect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - round: ["1L1"], - signalbeam: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - sludgewave: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - substitute: ["1L1"], - toxic: ["1L1"], - toxicspikes: ["1L1"], - uproar: ["1L1"], - venomdrench: ["1L1"], - venoshock: ["1L1"], - }, - eventData: [ - {generation: 7, level: 40, shiny: 1, perfectIVs: 3, moves: ["1L1"], pokeball: "pokeball"}, - {generation: 7, level: 40, shiny: true, nature: "Modest", perfectIVs: 3, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 8, level: 20, moves: ["1L1"], pokeball: "beastball"}, - ], - eventOnly: false, - }, - naganadel: { - learnset: { - acid: ["1L1"], - acrobatics: ["1L1"], - aerialace: ["1L1"], - aircutter: ["1L1"], - airslash: ["1L1"], - allyswitch: ["1L1"], - assurance: ["1L1"], - breakingswipe: ["1L1"], - charm: ["1L1"], - confide: ["1L1"], - crosspoison: ["1L1"], - darkpulse: ["1L1"], - doubleteam: ["1L1"], - dracometeor: ["1L1"], - dragonclaw: ["1L1"], - dragondance: ["1L1"], - dragonpulse: ["1L1"], - dragonrush: ["1L1"], - dragontail: ["1L1"], - dualwingbeat: ["1L1"], - echoedvoice: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fellstinger: ["1L1"], - fireblast: ["1L1"], - flamethrower: ["1L1"], - fly: ["1L1"], - frustration: ["1L1"], - furyattack: ["1L1"], - gastroacid: ["1L1"], - gigaimpact: ["1L1"], - growl: ["1L1"], - gunkshot: ["1L1"], - heatwave: ["1L1"], - helpinghand: ["1L1"], - hex: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - irontail: ["1L1"], - laserfocus: ["1L1"], - leechlife: ["1L1"], - nastyplot: ["1L1"], - outrage: ["1L1"], - peck: ["1L1"], - pinmissile: ["1L1"], - poisonjab: ["1L1"], - protect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - round: ["1L1"], - scaleshot: ["1L1"], - shadowclaw: ["1L1"], - shockwave: ["1L1"], - signalbeam: ["1L1"], - skyattack: ["1L1"], - skydrop: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - sludgewave: ["1L1"], - smartstrike: ["1L1"], - snarl: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - spikes: ["1L1"], - substitute: ["1L1"], - swift: ["1L1"], - tailwind: ["1L1"], - thief: ["1L1"], - throatchop: ["1L1"], - thunderbolt: ["1L1"], - toxic: ["1L1"], - toxicspikes: ["1L1"], - uproar: ["1L1"], - uturn: ["1L1"], - venomdrench: ["1L1"], - venoshock: ["1L1"], - xscissor: ["1L1"], - }, - }, - stakataka: { - learnset: { - allyswitch: ["1L1"], - autotomize: ["1L1"], - bide: ["1L1"], - bind: ["1L1"], - block: ["1L1"], - bodypress: ["1L1"], - bodyslam: ["1L1"], - brutalswing: ["1L1"], - bulldoze: ["1L1"], - doubleedge: ["1L1"], - earthquake: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - flashcannon: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - gravity: ["1L1"], - gyroball: ["1L1"], - harden: ["1L1"], - heatcrash: ["1L1"], - heavyslam: ["1L1"], - hiddenpower: ["1L1"], - highhorsepower: ["1L1"], - infestation: ["1L1"], - irondefense: ["1L1"], - ironhead: ["1L1"], - lightscreen: ["1L1"], - magiccoat: ["1L1"], - magicroom: ["1L1"], - magnetrise: ["1L1"], - megakick: ["1L1"], - meteorbeam: ["1L1"], - protect: ["1L1"], - recycle: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rockblast: ["1L1"], - rockpolish: ["1L1"], - rockslide: ["1L1"], - rockthrow: ["1L1"], - rocktomb: ["1L1"], - roleplay: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - sandstorm: ["1L1"], - skillswap: ["1L1"], - sleeptalk: ["1L1"], - smackdown: ["1L1"], - snore: ["1L1"], - stealthrock: ["1L1"], - steelbeam: ["1L1"], - steelroller: ["1L1"], - stomp: ["1L1"], - stompingtantrum: ["1L1"], - stoneedge: ["1L1"], - substitute: ["1L1"], - superpower: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - telekinesis: ["1L1"], - toxic: ["1L1"], - trickroom: ["1L1"], - wideguard: ["1L1"], - wonderroom: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 7, level: 60, shiny: 1, moves: ["1L1"]}, - {generation: 8, level: 70, shiny: 1, moves: ["1L1"]}, - ], - eventOnly: false, - }, - blacephalon: { - learnset: { - afteryou: ["1L1"], - astonish: ["1L1"], - calmmind: ["1L1"], - confide: ["1L1"], - confuseray: ["1L1"], - darkpulse: ["1L1"], - doubleteam: ["1L1"], - ember: ["1L1"], - encore: ["1L1"], - endure: ["1L1"], - expandingforce: ["1L1"], - explosion: ["1L1"], - facade: ["1L1"], - fireblast: ["1L1"], - firepunch: ["1L1"], - firespin: ["1L1"], - flameburst: ["1L1"], - flamecharge: ["1L1"], - flamethrower: ["1L1"], - fling: ["1L1"], - foulplay: ["1L1"], - frustration: ["1L1"], - heatwave: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - hypnosis: ["1L1"], - incinerate: ["1L1"], - knockoff: ["1L1"], - lastresort: ["1L1"], - lightscreen: ["1L1"], - magiccoat: ["1L1"], - mindblown: ["1L1"], - mysticalfire: ["1L1"], - nightshade: ["1L1"], - overheat: ["1L1"], - painsplit: ["1L1"], - payback: ["1L1"], - protect: ["1L1"], - psychic: ["1L1"], - psyshock: ["1L1"], - quash: ["1L1"], - recycle: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rockblast: ["1L1"], - round: ["1L1"], - selfdestruct: ["1L1"], - shadowball: ["1L1"], - shadowclaw: ["1L1"], - sleeptalk: ["1L1"], - smackdown: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - spite: ["1L1"], - storedpower: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - taunt: ["1L1"], - thief: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - trick: ["1L1"], - uproar: ["1L1"], - willowisp: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 7, level: 60, shiny: 1, moves: ["1L1"]}, - {generation: 8, level: 70, shiny: 1, moves: ["1L1"]}, - ], - eventOnly: false, - }, - zeraora: { - learnset: { - acrobatics: ["1L1"], - aerialace: ["1L1"], - agility: ["1L1"], - assurance: ["1L1"], - aurasphere: ["1L1"], - blazekick: ["1L1"], - bounce: ["1L1"], - brickbreak: ["1L1"], - brutalswing: ["1L1"], - bulkup: ["1L1"], - calmmind: ["1L1"], - charge: ["1L1"], - closecombat: ["1L1"], - coaching: ["1L1"], - confide: ["1L1"], - discharge: ["1L1"], - doubleteam: ["1L1"], - drainpunch: ["1L1"], - dualchop: ["1L1"], - echoedvoice: ["1L1"], - electricterrain: ["1L1"], - electroball: ["1L1"], - electroweb: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fakeout: ["1L1"], - falseswipe: ["1L1"], - firepunch: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - focuspunch: ["1L1"], - frustration: ["1L1"], - furyswipes: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - honeclaws: ["1L1"], - hyperbeam: ["1L1"], - irontail: ["1L1"], - knockoff: ["1L1"], - laserfocus: ["1L1"], - lowkick: ["1L1"], - lowsweep: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - outrage: ["1L1"], - payday: ["1L1"], - plasmafists: ["1L1"], - playrough: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - quickattack: ["1L1"], - quickguard: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - revenge: ["1L1"], - reversal: ["1L1"], - risingvoltage: ["1L1"], - round: ["1L1"], - scaryface: ["1L1"], - scratch: ["1L1"], - shockwave: ["1L1"], - slash: ["1L1"], - sleeptalk: ["1L1"], - snarl: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - spark: ["1L1"], - substitute: ["1L1"], - superpower: ["1L1"], - swift: ["1L1"], - taunt: ["1L1"], - throatchop: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderpunch: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - voltswitch: ["1L1"], - wildcharge: ["1L1"], - workup: ["1L1"], - }, - eventData: [ - {generation: 7, level: 50, moves: ["1L1"], pokeball: "cherishball"}, - {generation: 8, level: 100, shiny: true, nature: "Hasty", ivs: {hp: 31, atk: 31, def: 30, spa: 31, spd: 31, spe: 31}, moves: ["1L1"], pokeball: "cherishball"}, - ], - eventOnly: false, - }, - meltan: { - learnset: { - acidarmor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - flashcannon: ["1L1"], - gyroball: ["1L1"], - harden: ["1L1"], - headbutt: ["1L1"], - irondefense: ["1L1"], - protect: ["1L1"], - rest: ["1L1"], - round: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - steelbeam: ["1L1"], - substitute: ["1L1"], - tailwhip: ["1L1"], - thunderbolt: ["1L1"], - thundershock: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - }, - }, - melmetal: { - learnset: { - acidarmor: ["1L1"], - bodypress: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - brutalswing: ["1L1"], - darkestlariat: ["1L1"], - discharge: ["1L1"], - doubleironbash: ["1L1"], - dynamicpunch: ["1L1"], - earthquake: ["1L1"], - electricterrain: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - flashcannon: ["1L1"], - gigaimpact: ["1L1"], - gyroball: ["1L1"], - harden: ["1L1"], - headbutt: ["1L1"], - heavyslam: ["1L1"], - highhorsepower: ["1L1"], - hyperbeam: ["1L1"], - icebeam: ["1L1"], - icepunch: ["1L1"], - irondefense: ["1L1"], - ironhead: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - protect: ["1L1"], - rest: ["1L1"], - rockslide: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - selfdestruct: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - steelbeam: ["1L1"], - steelroller: ["1L1"], - substitute: ["1L1"], - superpower: ["1L1"], - tailwhip: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderpunch: ["1L1"], - thundershock: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - }, - eventData: [ - {generation: 8, level: 100, nature: "Brave", ivs: {hp: 31, atk: 31, def: 31, spa: 31, spd: 31, spe: 0}, moves: ["1L1"], pokeball: "cherishball"}, - ], - }, - grookey: { - learnset: { - acrobatics: ["1L1"], - assurance: ["1L1"], - attract: ["1L1"], - bodyslam: ["1L1"], - branchpoke: ["1L1"], - bulletseed: ["1L1"], - drainpunch: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - fakeout: ["1L1"], - falseswipe: ["1L1"], - fling: ["1L1"], - focusenergy: ["1L1"], - gigadrain: ["1L1"], - grassknot: ["1L1"], - grasspledge: ["1L1"], - grassyglide: ["1L1"], - grassyterrain: ["1L1"], - growl: ["1L1"], - growth: ["1L1"], - hammerarm: ["1L1"], - knockoff: ["1L1"], - leafstorm: ["1L1"], - leechseed: ["1L1"], - lowkick: ["1L1"], - magicalleaf: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - naturepower: ["1L1"], - protect: ["1L1"], - razorleaf: ["1L1"], - rest: ["1L1"], - round: ["1L1"], - scratch: ["1L1"], - screech: ["1L1"], - seedbomb: ["1L1"], - slam: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - solarblade: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swift: ["1L1"], - swordsdance: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - trailblaze: ["1L1"], - uproar: ["1L1"], - uturn: ["1L1"], - woodhammer: ["1L1"], - workup: ["1L1"], - worryseed: ["1L1"], - }, - }, - thwackey: { - learnset: { - acrobatics: ["1L1"], - assurance: ["1L1"], - attract: ["1L1"], - bodyslam: ["1L1"], - branchpoke: ["1L1"], - bulletseed: ["1L1"], - doubleedge: ["1L1"], - doublehit: ["1L1"], - drainpunch: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - falseswipe: ["1L1"], - fling: ["1L1"], - focusenergy: ["1L1"], - gigadrain: ["1L1"], - grassknot: ["1L1"], - grasspledge: ["1L1"], - grassyglide: ["1L1"], - grassyterrain: ["1L1"], - growl: ["1L1"], - knockoff: ["1L1"], - leafstorm: ["1L1"], - lowkick: ["1L1"], - magicalleaf: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - protect: ["1L1"], - razorleaf: ["1L1"], - rest: ["1L1"], - round: ["1L1"], - scaryface: ["1L1"], - scratch: ["1L1"], - screech: ["1L1"], - seedbomb: ["1L1"], - slam: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - solarblade: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swift: ["1L1"], - swordsdance: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - trailblaze: ["1L1"], - uproar: ["1L1"], - uturn: ["1L1"], - woodhammer: ["1L1"], - workup: ["1L1"], - }, - }, - rillaboom: { - learnset: { - acrobatics: ["1L1"], - assurance: ["1L1"], - attract: ["1L1"], - bodypress: ["1L1"], - bodyslam: ["1L1"], - boomburst: ["1L1"], - branchpoke: ["1L1"], - brickbreak: ["1L1"], - brutalswing: ["1L1"], - bulkup: ["1L1"], - bulldoze: ["1L1"], - bulletseed: ["1L1"], - darkestlariat: ["1L1"], - doubleedge: ["1L1"], - doublehit: ["1L1"], - drainpunch: ["1L1"], - drumbeating: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - falseswipe: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - focusenergy: ["1L1"], - focuspunch: ["1L1"], - frenzyplant: ["1L1"], - gigadrain: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - grasspledge: ["1L1"], - grassyglide: ["1L1"], - grassyterrain: ["1L1"], - growl: ["1L1"], - highhorsepower: ["1L1"], - hyperbeam: ["1L1"], - hypervoice: ["1L1"], - knockoff: ["1L1"], - leafstorm: ["1L1"], - lowkick: ["1L1"], - lowsweep: ["1L1"], - magicalleaf: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - mudshot: ["1L1"], - nobleroar: ["1L1"], - protect: ["1L1"], - razorleaf: ["1L1"], - rest: ["1L1"], - round: ["1L1"], - scaryface: ["1L1"], - scratch: ["1L1"], - screech: ["1L1"], - seedbomb: ["1L1"], - slam: ["1L1"], - sleeptalk: ["1L1"], - snarl: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - solarblade: ["1L1"], - stompingtantrum: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - superpower: ["1L1"], - swift: ["1L1"], - swordsdance: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - trailblaze: ["1L1"], - uproar: ["1L1"], - uturn: ["1L1"], - woodhammer: ["1L1"], - workup: ["1L1"], - }, - }, - scorbunny: { - learnset: { - acrobatics: ["1L1"], - agility: ["1L1"], - allyswitch: ["1L1"], - assurance: ["1L1"], - attract: ["1L1"], - batonpass: ["1L1"], - blazekick: ["1L1"], - bounce: ["1L1"], - burningjealousy: ["1L1"], - counter: ["1L1"], - doubleedge: ["1L1"], - doublekick: ["1L1"], - electroball: ["1L1"], - ember: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fireblast: ["1L1"], - firefang: ["1L1"], - firepledge: ["1L1"], - firespin: ["1L1"], - flamecharge: ["1L1"], - flamethrower: ["1L1"], - flareblitz: ["1L1"], - focusenergy: ["1L1"], - growl: ["1L1"], - gunkshot: ["1L1"], - headbutt: ["1L1"], - heatwave: ["1L1"], - helpinghand: ["1L1"], - highjumpkick: ["1L1"], - lowkick: ["1L1"], - lowsweep: ["1L1"], - megakick: ["1L1"], - mudshot: ["1L1"], - overheat: ["1L1"], - protect: ["1L1"], - quickattack: ["1L1"], - rest: ["1L1"], - reversal: ["1L1"], - round: ["1L1"], - sandattack: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - sunnyday: ["1L1"], - superfang: ["1L1"], - swift: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - temperflare: ["1L1"], - terablast: ["1L1"], - trailblaze: ["1L1"], - uturn: ["1L1"], - workup: ["1L1"], - }, - }, - raboot: { - learnset: { - acrobatics: ["1L1"], - agility: ["1L1"], - allyswitch: ["1L1"], - assurance: ["1L1"], - attract: ["1L1"], - batonpass: ["1L1"], - blazekick: ["1L1"], - bounce: ["1L1"], - bulkup: ["1L1"], - burningjealousy: ["1L1"], - counter: ["1L1"], - doubleedge: ["1L1"], - doublekick: ["1L1"], - electroball: ["1L1"], - ember: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fireblast: ["1L1"], - firefang: ["1L1"], - firepledge: ["1L1"], - firespin: ["1L1"], - flamecharge: ["1L1"], - flamethrower: ["1L1"], - flareblitz: ["1L1"], - focusenergy: ["1L1"], - growl: ["1L1"], - gunkshot: ["1L1"], - headbutt: ["1L1"], - heatwave: ["1L1"], - helpinghand: ["1L1"], - lowkick: ["1L1"], - lowsweep: ["1L1"], - megakick: ["1L1"], - mudshot: ["1L1"], - overheat: ["1L1"], - protect: ["1L1"], - quickattack: ["1L1"], - rest: ["1L1"], - reversal: ["1L1"], - round: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - superfang: ["1L1"], - swift: ["1L1"], - swordsdance: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - temperflare: ["1L1"], - terablast: ["1L1"], - trailblaze: ["1L1"], - uturn: ["1L1"], - weatherball: ["1L1"], - workup: ["1L1"], - }, - }, - cinderace: { - learnset: { - acrobatics: ["1L1"], - agility: ["1L1"], - allyswitch: ["1L1"], - assurance: ["1L1"], - attract: ["1L1"], - batonpass: ["1L1"], - blastburn: ["1L1"], - blazekick: ["1L1"], - bounce: ["1L1"], - bulkup: ["1L1"], - burningjealousy: ["1L1"], - coaching: ["1L1"], - counter: ["1L1"], - courtchange: ["1L1"], - doubleedge: ["1L1"], - doublekick: ["1L1"], - electroball: ["1L1"], - ember: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - feint: ["1L1"], - fireblast: ["1L1"], - firefang: ["1L1"], - firepledge: ["1L1"], - firepunch: ["1L1"], - firespin: ["1L1"], - flamecharge: ["1L1"], - flamethrower: ["1L1"], - flareblitz: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - focusenergy: ["1L1"], - gigaimpact: ["1L1"], - growl: ["1L1"], - gunkshot: ["1L1"], - headbutt: ["1L1"], - heatwave: ["1L1"], - helpinghand: ["1L1"], - hyperbeam: ["1L1"], - ironhead: ["1L1"], - lowkick: ["1L1"], - lowsweep: ["1L1"], - megakick: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - overheat: ["1L1"], - protect: ["1L1"], - pyroball: ["1L1"], - quickattack: ["1L1"], - rest: ["1L1"], - revenge: ["1L1"], - reversal: ["1L1"], - round: ["1L1"], - scorchingsands: ["1L1"], - shadowball: ["1L1"], - sleeptalk: ["1L1"], - smackdown: ["1L1"], - snarl: ["1L1"], - snore: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - superfang: ["1L1"], - swift: ["1L1"], - swordsdance: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - temperflare: ["1L1"], - terablast: ["1L1"], - trailblaze: ["1L1"], - uturn: ["1L1"], - weatherball: ["1L1"], - willowisp: ["1L1"], - workup: ["1L1"], - zenheadbutt: ["1L1"], - }, - }, - sobble: { - learnset: { - aquajet: ["1L1"], - aquaring: ["1L1"], - attract: ["1L1"], - batonpass: ["1L1"], - bind: ["1L1"], - bounce: ["1L1"], - chillingwater: ["1L1"], - dive: ["1L1"], - doubleteam: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fellstinger: ["1L1"], - growl: ["1L1"], - haze: ["1L1"], - hydropump: ["1L1"], - iceshard: ["1L1"], - lightscreen: ["1L1"], - liquidation: ["1L1"], - mist: ["1L1"], - muddywater: ["1L1"], - mudshot: ["1L1"], - pound: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - soak: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - surf: ["1L1"], - swift: ["1L1"], - takedown: ["1L1"], - tearfullook: ["1L1"], - terablast: ["1L1"], - uturn: ["1L1"], - waterfall: ["1L1"], - watergun: ["1L1"], - waterpledge: ["1L1"], - waterpulse: ["1L1"], - weatherball: ["1L1"], - whirlpool: ["1L1"], - workup: ["1L1"], - }, - }, - drizzile: { - learnset: { - attract: ["1L1"], - batonpass: ["1L1"], - bind: ["1L1"], - bounce: ["1L1"], - chillingwater: ["1L1"], - dive: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fling: ["1L1"], - growl: ["1L1"], - haze: ["1L1"], - hydropump: ["1L1"], - lightscreen: ["1L1"], - liquidation: ["1L1"], - muddywater: ["1L1"], - mudshot: ["1L1"], - pound: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - soak: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - surf: ["1L1"], - swift: ["1L1"], - takedown: ["1L1"], - tearfullook: ["1L1"], - terablast: ["1L1"], - uturn: ["1L1"], - waterfall: ["1L1"], - watergun: ["1L1"], - waterpledge: ["1L1"], - waterpulse: ["1L1"], - weatherball: ["1L1"], - whirlpool: ["1L1"], - workup: ["1L1"], - }, - }, - inteleon: { - learnset: { - acrobatics: ["1L1"], - agility: ["1L1"], - aircutter: ["1L1"], - airslash: ["1L1"], - attract: ["1L1"], - batonpass: ["1L1"], - bind: ["1L1"], - blizzard: ["1L1"], - bounce: ["1L1"], - breakingswipe: ["1L1"], - chillingwater: ["1L1"], - darkpulse: ["1L1"], - dive: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fling: ["1L1"], - flipturn: ["1L1"], - focusenergy: ["1L1"], - gigaimpact: ["1L1"], - growl: ["1L1"], - haze: ["1L1"], - hydrocannon: ["1L1"], - hydropump: ["1L1"], - hyperbeam: ["1L1"], - icebeam: ["1L1"], - iciclespear: ["1L1"], - icywind: ["1L1"], - lightscreen: ["1L1"], - liquidation: ["1L1"], - metronome: ["1L1"], - muddywater: ["1L1"], - mudshot: ["1L1"], - pound: ["1L1"], - protect: ["1L1"], - psychup: ["1L1"], - raindance: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - scald: ["1L1"], - scaleshot: ["1L1"], - shadowball: ["1L1"], - skittersmack: ["1L1"], - sleeptalk: ["1L1"], - smackdown: ["1L1"], - snipeshot: ["1L1"], - snore: ["1L1"], - snowscape: ["1L1"], - soak: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - surf: ["1L1"], - swift: ["1L1"], - swordsdance: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - tearfullook: ["1L1"], - terablast: ["1L1"], - uturn: ["1L1"], - vacuumwave: ["1L1"], - waterfall: ["1L1"], - watergun: ["1L1"], - waterpledge: ["1L1"], - waterpulse: ["1L1"], - weatherball: ["1L1"], - whirlpool: ["1L1"], - workup: ["1L1"], - }, - }, - skwovet: { - learnset: { - amnesia: ["1L1"], - assurance: ["1L1"], - attract: ["1L1"], - belch: ["1L1"], - bellydrum: ["1L1"], - bite: ["1L1"], - bodyslam: ["1L1"], - brutalswing: ["1L1"], - bulletseed: ["1L1"], - counter: ["1L1"], - crunch: ["1L1"], - curse: ["1L1"], - defensecurl: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fling: ["1L1"], - gyroball: ["1L1"], - hypervoice: ["1L1"], - irontail: ["1L1"], - lastresort: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - payback: ["1L1"], - protect: ["1L1"], - rest: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - seedbomb: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - spitup: ["1L1"], - stockpile: ["1L1"], - stuffcheeks: ["1L1"], - substitute: ["1L1"], - superfang: ["1L1"], - swallow: ["1L1"], - tackle: ["1L1"], - tailslap: ["1L1"], - tailwhip: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - trailblaze: ["1L1"], - uproar: ["1L1"], - }, - }, - greedent: { - learnset: { - amnesia: ["1L1"], - assurance: ["1L1"], - attract: ["1L1"], - belch: ["1L1"], - bite: ["1L1"], - bodypress: ["1L1"], - bodyslam: ["1L1"], - brutalswing: ["1L1"], - bulldoze: ["1L1"], - bulletseed: ["1L1"], - counter: ["1L1"], - covet: ["1L1"], - crunch: ["1L1"], - curse: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - earthquake: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - firefang: ["1L1"], - fling: ["1L1"], - gigaimpact: ["1L1"], - gyroball: ["1L1"], - highhorsepower: ["1L1"], - hyperbeam: ["1L1"], - hypervoice: ["1L1"], - icefang: ["1L1"], - irontail: ["1L1"], - knockoff: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - payback: ["1L1"], - protect: ["1L1"], - psychicfangs: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - round: ["1L1"], - seedbomb: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - spitup: ["1L1"], - stockpile: ["1L1"], - stompingtantrum: ["1L1"], - stuffcheeks: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - superfang: ["1L1"], - superpower: ["1L1"], - swallow: ["1L1"], - swordsdance: ["1L1"], - tackle: ["1L1"], - tailslap: ["1L1"], - tailwhip: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thunderfang: ["1L1"], - trailblaze: ["1L1"], - uproar: ["1L1"], - wildcharge: ["1L1"], - }, - }, - rookidee: { - learnset: { - aerialace: ["1L1"], - agility: ["1L1"], - aircutter: ["1L1"], - airslash: ["1L1"], - assurance: ["1L1"], - attract: ["1L1"], - bravebird: ["1L1"], - defog: ["1L1"], - drillpeck: ["1L1"], - dualwingbeat: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - faketears: ["1L1"], - fly: ["1L1"], - focusenergy: ["1L1"], - furyattack: ["1L1"], - honeclaws: ["1L1"], - leer: ["1L1"], - nastyplot: ["1L1"], - payback: ["1L1"], - peck: ["1L1"], - pluck: ["1L1"], - powertrip: ["1L1"], - protect: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - revenge: ["1L1"], - reversal: ["1L1"], - rocksmash: ["1L1"], - roost: ["1L1"], - round: ["1L1"], - sandattack: ["1L1"], - scaryface: ["1L1"], - skyattack: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - spite: ["1L1"], - substitute: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - tailwind: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - uturn: ["1L1"], - workup: ["1L1"], - }, - }, - corvisquire: { - learnset: { - aerialace: ["1L1"], - agility: ["1L1"], - aircutter: ["1L1"], - airslash: ["1L1"], - assurance: ["1L1"], - attract: ["1L1"], - bravebird: ["1L1"], - drillpeck: ["1L1"], - dualwingbeat: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - faketears: ["1L1"], - fly: ["1L1"], - focusenergy: ["1L1"], - furyattack: ["1L1"], - honeclaws: ["1L1"], - hurricane: ["1L1"], - leer: ["1L1"], - nastyplot: ["1L1"], - payback: ["1L1"], - peck: ["1L1"], - pluck: ["1L1"], - powertrip: ["1L1"], - protect: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - revenge: ["1L1"], - reversal: ["1L1"], - round: ["1L1"], - scaryface: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - spite: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - tailwind: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - uturn: ["1L1"], - workup: ["1L1"], - }, - }, - corviknight: { - learnset: { - aerialace: ["1L1"], - agility: ["1L1"], - aircutter: ["1L1"], - airslash: ["1L1"], - assurance: ["1L1"], - attract: ["1L1"], - bodypress: ["1L1"], - bodyslam: ["1L1"], - bravebird: ["1L1"], - bulkup: ["1L1"], - curse: ["1L1"], - doubleedge: ["1L1"], - drillpeck: ["1L1"], - dualwingbeat: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - faketears: ["1L1"], - flashcannon: ["1L1"], - fly: ["1L1"], - focusenergy: ["1L1"], - furyattack: ["1L1"], - gigaimpact: ["1L1"], - heavyslam: ["1L1"], - honeclaws: ["1L1"], - hurricane: ["1L1"], - hyperbeam: ["1L1"], - irondefense: ["1L1"], - ironhead: ["1L1"], - leer: ["1L1"], - lightscreen: ["1L1"], - metalclaw: ["1L1"], - metalsound: ["1L1"], - nastyplot: ["1L1"], - payback: ["1L1"], - peck: ["1L1"], - pluck: ["1L1"], - powertrip: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - revenge: ["1L1"], - reversal: ["1L1"], - round: ["1L1"], - scaryface: ["1L1"], - screech: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - spite: ["1L1"], - steelbeam: ["1L1"], - steelwing: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - tailwind: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - uturn: ["1L1"], - workup: ["1L1"], - }, - }, - blipbug: { - learnset: { - infestation: ["1L1"], - recover: ["1L1"], - stickyweb: ["1L1"], - strugglebug: ["1L1"], - supersonic: ["1L1"], - }, - }, - dottler: { - learnset: { - allyswitch: ["1L1"], - attract: ["1L1"], - bodypress: ["1L1"], - bugbuzz: ["1L1"], - calmmind: ["1L1"], - confusion: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - expandingforce: ["1L1"], - facade: ["1L1"], - futuresight: ["1L1"], - guardswap: ["1L1"], - helpinghand: ["1L1"], - imprison: ["1L1"], - irondefense: ["1L1"], - leechlife: ["1L1"], - lightscreen: ["1L1"], - magicroom: ["1L1"], - payback: ["1L1"], - powerswap: ["1L1"], - protect: ["1L1"], - psychic: ["1L1"], - psychicterrain: ["1L1"], - psyshock: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - shadowball: ["1L1"], - skillswap: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - storedpower: ["1L1"], - strugglebug: ["1L1"], - substitute: ["1L1"], - trick: ["1L1"], - trickroom: ["1L1"], - wonderroom: ["1L1"], - zenheadbutt: ["1L1"], - }, - }, - orbeetle: { - learnset: { - afteryou: ["1L1"], - agility: ["1L1"], - allyswitch: ["1L1"], - attract: ["1L1"], - batonpass: ["1L1"], - bodypress: ["1L1"], - bugbuzz: ["1L1"], - calmmind: ["1L1"], - confuseray: ["1L1"], - confusion: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - expandingforce: ["1L1"], - facade: ["1L1"], - futuresight: ["1L1"], - gigadrain: ["1L1"], - gigaimpact: ["1L1"], - guardswap: ["1L1"], - helpinghand: ["1L1"], - hyperbeam: ["1L1"], - hypnosis: ["1L1"], - imprison: ["1L1"], - irondefense: ["1L1"], - leechlife: ["1L1"], - lightscreen: ["1L1"], - magiccoat: ["1L1"], - magicroom: ["1L1"], - mirrorcoat: ["1L1"], - payback: ["1L1"], - powerswap: ["1L1"], - protect: ["1L1"], - psybeam: ["1L1"], - psychic: ["1L1"], - psychicterrain: ["1L1"], - psychocut: ["1L1"], - psyshock: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - shadowball: ["1L1"], - skillswap: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - storedpower: ["1L1"], - strugglebug: ["1L1"], - substitute: ["1L1"], - trick: ["1L1"], - trickroom: ["1L1"], - uturn: ["1L1"], - wonderroom: ["1L1"], - zenheadbutt: ["1L1"], - }, - }, - nickit: { - learnset: { - agility: ["1L1"], - assurance: ["1L1"], - attract: ["1L1"], - batonpass: ["1L1"], - beatup: ["1L1"], - dig: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - faketears: ["1L1"], - foulplay: ["1L1"], - honeclaws: ["1L1"], - howl: ["1L1"], - knockoff: ["1L1"], - lashout: ["1L1"], - mudshot: ["1L1"], - nastyplot: ["1L1"], - nightslash: ["1L1"], - playrough: ["1L1"], - protect: ["1L1"], - quickattack: ["1L1"], - quickguard: ["1L1"], - rest: ["1L1"], - round: ["1L1"], - screech: ["1L1"], - sleeptalk: ["1L1"], - snarl: ["1L1"], - snore: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - swift: ["1L1"], - tailslap: ["1L1"], - tailwhip: ["1L1"], - taunt: ["1L1"], - thief: ["1L1"], - torment: ["1L1"], - }, - }, - thievul: { - learnset: { - acrobatics: ["1L1"], - agility: ["1L1"], - assurance: ["1L1"], - attract: ["1L1"], - batonpass: ["1L1"], - beatup: ["1L1"], - burningjealousy: ["1L1"], - crunch: ["1L1"], - darkpulse: ["1L1"], - dig: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - faketears: ["1L1"], - firefang: ["1L1"], - foulplay: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - honeclaws: ["1L1"], - hyperbeam: ["1L1"], - icefang: ["1L1"], - lashout: ["1L1"], - mudshot: ["1L1"], - nastyplot: ["1L1"], - nightslash: ["1L1"], - partingshot: ["1L1"], - playrough: ["1L1"], - protect: ["1L1"], - psychic: ["1L1"], - quickattack: ["1L1"], - rest: ["1L1"], - round: ["1L1"], - screech: ["1L1"], - shadowball: ["1L1"], - shadowclaw: ["1L1"], - sleeptalk: ["1L1"], - snarl: ["1L1"], - snore: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - swift: ["1L1"], - tailslap: ["1L1"], - tailwhip: ["1L1"], - taunt: ["1L1"], - thief: ["1L1"], - thunderfang: ["1L1"], - uturn: ["1L1"], - }, - }, - gossifleur: { - learnset: { - aromatherapy: ["1L1"], - attract: ["1L1"], - bulletseed: ["1L1"], - charm: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - gigadrain: ["1L1"], - grassknot: ["1L1"], - grassyglide: ["1L1"], - grassyterrain: ["1L1"], - growth: ["1L1"], - helpinghand: ["1L1"], - hypervoice: ["1L1"], - leafage: ["1L1"], - leafstorm: ["1L1"], - leaftornado: ["1L1"], - leechseed: ["1L1"], - lightscreen: ["1L1"], - magicalleaf: ["1L1"], - poisonpowder: ["1L1"], - pollenpuff: ["1L1"], - protect: ["1L1"], - rapidspin: ["1L1"], - razorleaf: ["1L1"], - rest: ["1L1"], - round: ["1L1"], - sing: ["1L1"], - sleeppowder: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - stunspore: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - sweetscent: ["1L1"], - synthesis: ["1L1"], - worryseed: ["1L1"], - }, - }, - eldegoss: { - learnset: { - aromatherapy: ["1L1"], - attract: ["1L1"], - bulletseed: ["1L1"], - charm: ["1L1"], - cottonguard: ["1L1"], - cottonspore: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - gigadrain: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - grassyglide: ["1L1"], - grassyterrain: ["1L1"], - helpinghand: ["1L1"], - hyperbeam: ["1L1"], - hypervoice: ["1L1"], - leafage: ["1L1"], - leafstorm: ["1L1"], - leaftornado: ["1L1"], - lightscreen: ["1L1"], - magicalleaf: ["1L1"], - pollenpuff: ["1L1"], - protect: ["1L1"], - rapidspin: ["1L1"], - razorleaf: ["1L1"], - rest: ["1L1"], - round: ["1L1"], - seedbomb: ["1L1"], - sing: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - sweetscent: ["1L1"], - synthesis: ["1L1"], - weatherball: ["1L1"], - }, - }, - wooloo: { - learnset: { - agility: ["1L1"], - attract: ["1L1"], - copycat: ["1L1"], - cottonguard: ["1L1"], - counter: ["1L1"], - defensecurl: ["1L1"], - doubleedge: ["1L1"], - doublekick: ["1L1"], - electroball: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - grassyglide: ["1L1"], - growl: ["1L1"], - guardsplit: ["1L1"], - guardswap: ["1L1"], - headbutt: ["1L1"], - payback: ["1L1"], - protect: ["1L1"], - rest: ["1L1"], - reversal: ["1L1"], - round: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - stomp: ["1L1"], - substitute: ["1L1"], - swagger: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - thunderwave: ["1L1"], - wildcharge: ["1L1"], - }, - }, - dubwool: { - learnset: { - agility: ["1L1"], - attract: ["1L1"], - batonpass: ["1L1"], - bodypress: ["1L1"], - bodyslam: ["1L1"], - bounce: ["1L1"], - copycat: ["1L1"], - cottonguard: ["1L1"], - defensecurl: ["1L1"], - doubleedge: ["1L1"], - doublekick: ["1L1"], - electroball: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - gigaimpact: ["1L1"], - grassyglide: ["1L1"], - growl: ["1L1"], - guardsplit: ["1L1"], - guardswap: ["1L1"], - headbutt: ["1L1"], - hyperbeam: ["1L1"], - lastresort: ["1L1"], - megakick: ["1L1"], - payback: ["1L1"], - protect: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - reversal: ["1L1"], - round: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - substitute: ["1L1"], - swordsdance: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - thunderwave: ["1L1"], - wildcharge: ["1L1"], - zenheadbutt: ["1L1"], - }, - }, - chewtle: { - learnset: { - assurance: ["1L1"], - attract: ["1L1"], - bite: ["1L1"], - bodyslam: ["1L1"], - chillingwater: ["1L1"], - counter: ["1L1"], - crunch: ["1L1"], - dive: ["1L1"], - dragontail: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - falseswipe: ["1L1"], - gastroacid: ["1L1"], - headbutt: ["1L1"], - hydropump: ["1L1"], - icefang: ["1L1"], - jawlock: ["1L1"], - liquidation: ["1L1"], - mudshot: ["1L1"], - payback: ["1L1"], - poisonjab: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - revenge: ["1L1"], - round: ["1L1"], - scaleshot: ["1L1"], - scaryface: ["1L1"], - shellsmash: ["1L1"], - skittersmack: ["1L1"], - skullbash: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - stompingtantrum: ["1L1"], - substitute: ["1L1"], - surf: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - waterfall: ["1L1"], - watergun: ["1L1"], - waterpulse: ["1L1"], - whirlpool: ["1L1"], - }, - }, - drednaw: { - learnset: { - assurance: ["1L1"], - attract: ["1L1"], - bite: ["1L1"], - blizzard: ["1L1"], - bodypress: ["1L1"], - bodyslam: ["1L1"], - bulldoze: ["1L1"], - chillingwater: ["1L1"], - counter: ["1L1"], - crunch: ["1L1"], - dig: ["1L1"], - dive: ["1L1"], - doubleedge: ["1L1"], - dragontail: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - falseswipe: ["1L1"], - gigaimpact: ["1L1"], - headbutt: ["1L1"], - headsmash: ["1L1"], - highhorsepower: ["1L1"], - hydropump: ["1L1"], - hyperbeam: ["1L1"], - icebeam: ["1L1"], - icefang: ["1L1"], - icespinner: ["1L1"], - irondefense: ["1L1"], - irontail: ["1L1"], - jawlock: ["1L1"], - liquidation: ["1L1"], - megahorn: ["1L1"], - meteorbeam: ["1L1"], - muddywater: ["1L1"], - mudshot: ["1L1"], - payback: ["1L1"], - poisonjab: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - razorshell: ["1L1"], - rest: ["1L1"], - revenge: ["1L1"], - rockblast: ["1L1"], - rockpolish: ["1L1"], - rockslide: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - sandstorm: ["1L1"], - sandtomb: ["1L1"], - scald: ["1L1"], - scaleshot: ["1L1"], - scaryface: ["1L1"], - skittersmack: ["1L1"], - sleeptalk: ["1L1"], - smartstrike: ["1L1"], - snore: ["1L1"], - stealthrock: ["1L1"], - stompingtantrum: ["1L1"], - stoneedge: ["1L1"], - substitute: ["1L1"], - superfang: ["1L1"], - superpower: ["1L1"], - surf: ["1L1"], - swordsdance: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - throatchop: ["1L1"], - waterfall: ["1L1"], - watergun: ["1L1"], - waterpulse: ["1L1"], - whirlpool: ["1L1"], - }, - }, - yamper: { - learnset: { - attract: ["1L1"], - bite: ["1L1"], - charge: ["1L1"], - charm: ["1L1"], - crunch: ["1L1"], - dig: ["1L1"], - discharge: ["1L1"], - doubleedge: ["1L1"], - electroball: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - firefang: ["1L1"], - flamecharge: ["1L1"], - helpinghand: ["1L1"], - howl: ["1L1"], - nuzzle: ["1L1"], - playrough: ["1L1"], - protect: ["1L1"], - rest: ["1L1"], - risingvoltage: ["1L1"], - roar: ["1L1"], - round: ["1L1"], - sandattack: ["1L1"], - sleeptalk: ["1L1"], - snarl: ["1L1"], - snore: ["1L1"], - spark: ["1L1"], - substitute: ["1L1"], - swift: ["1L1"], - tackle: ["1L1"], - tailwhip: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderfang: ["1L1"], - thunderwave: ["1L1"], - uproar: ["1L1"], - voltswitch: ["1L1"], - wildcharge: ["1L1"], - }, - }, - boltund: { - learnset: { - agility: ["1L1"], - attract: ["1L1"], - bite: ["1L1"], - bulkup: ["1L1"], - charge: ["1L1"], - charm: ["1L1"], - crunch: ["1L1"], - dig: ["1L1"], - eerieimpulse: ["1L1"], - electricterrain: ["1L1"], - electrify: ["1L1"], - electroball: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - firefang: ["1L1"], - focusenergy: ["1L1"], - gigaimpact: ["1L1"], - helpinghand: ["1L1"], - hyperbeam: ["1L1"], - hypervoice: ["1L1"], - nuzzle: ["1L1"], - playrough: ["1L1"], - protect: ["1L1"], - psychicfangs: ["1L1"], - rest: ["1L1"], - risingvoltage: ["1L1"], - roar: ["1L1"], - round: ["1L1"], - sleeptalk: ["1L1"], - snarl: ["1L1"], - snore: ["1L1"], - spark: ["1L1"], - substitute: ["1L1"], - swift: ["1L1"], - tackle: ["1L1"], - tailwhip: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderfang: ["1L1"], - thunderwave: ["1L1"], - uproar: ["1L1"], - voltswitch: ["1L1"], - wildcharge: ["1L1"], - }, - }, - rolycoly: { - learnset: { - ancientpower: ["1L1"], - attract: ["1L1"], - block: ["1L1"], - bodyslam: ["1L1"], - bulldoze: ["1L1"], - curse: ["1L1"], - dig: ["1L1"], - endure: ["1L1"], - explosion: ["1L1"], - facade: ["1L1"], - gyroball: ["1L1"], - heatcrash: ["1L1"], - incinerate: ["1L1"], - irondefense: ["1L1"], - ironhead: ["1L1"], - meteorbeam: ["1L1"], - mudslap: ["1L1"], - powergem: ["1L1"], - protect: ["1L1"], - rapidspin: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - rockblast: ["1L1"], - rockpolish: ["1L1"], - rockslide: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - sandstorm: ["1L1"], - sandtomb: ["1L1"], - selfdestruct: ["1L1"], - sleeptalk: ["1L1"], - smackdown: ["1L1"], - smokescreen: ["1L1"], - snore: ["1L1"], - spikes: ["1L1"], - stealthrock: ["1L1"], - stoneedge: ["1L1"], - substitute: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - temperflare: ["1L1"], - terablast: ["1L1"], - willowisp: ["1L1"], - }, - }, - carkol: { - learnset: { - ancientpower: ["1L1"], - attract: ["1L1"], - bodypress: ["1L1"], - bodyslam: ["1L1"], - bulldoze: ["1L1"], - burnup: ["1L1"], - curse: ["1L1"], - dig: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fireblast: ["1L1"], - firespin: ["1L1"], - flamecharge: ["1L1"], - flamethrower: ["1L1"], - flareblitz: ["1L1"], - gyroball: ["1L1"], - heatcrash: ["1L1"], - heatwave: ["1L1"], - heavyslam: ["1L1"], - highhorsepower: ["1L1"], - incinerate: ["1L1"], - irondefense: ["1L1"], - ironhead: ["1L1"], - meteorbeam: ["1L1"], - mudslap: ["1L1"], - overheat: ["1L1"], - powergem: ["1L1"], - protect: ["1L1"], - rapidspin: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - rockblast: ["1L1"], - rockpolish: ["1L1"], - rockslide: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - sandstorm: ["1L1"], - sandtomb: ["1L1"], - scald: ["1L1"], - scorchingsands: ["1L1"], - selfdestruct: ["1L1"], - sleeptalk: ["1L1"], - smackdown: ["1L1"], - smokescreen: ["1L1"], - snore: ["1L1"], - spikes: ["1L1"], - stealthrock: ["1L1"], - stoneedge: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - temperflare: ["1L1"], - terablast: ["1L1"], - willowisp: ["1L1"], - }, - }, - coalossal: { - learnset: { - ancientpower: ["1L1"], - attract: ["1L1"], - bodypress: ["1L1"], - bodyslam: ["1L1"], - bulldoze: ["1L1"], - burnup: ["1L1"], - curse: ["1L1"], - dig: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fireblast: ["1L1"], - firepunch: ["1L1"], - firespin: ["1L1"], - flamecharge: ["1L1"], - flamethrower: ["1L1"], - flareblitz: ["1L1"], - gigaimpact: ["1L1"], - gyroball: ["1L1"], - heatcrash: ["1L1"], - heatwave: ["1L1"], - heavyslam: ["1L1"], - highhorsepower: ["1L1"], - hyperbeam: ["1L1"], - incinerate: ["1L1"], - irondefense: ["1L1"], - ironhead: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - meteorbeam: ["1L1"], - mudslap: ["1L1"], - overheat: ["1L1"], - powergem: ["1L1"], - protect: ["1L1"], - rapidspin: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - rockblast: ["1L1"], - rockpolish: ["1L1"], - rockslide: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - sandstorm: ["1L1"], - sandtomb: ["1L1"], - scald: ["1L1"], - scorchingsands: ["1L1"], - selfdestruct: ["1L1"], - sleeptalk: ["1L1"], - smackdown: ["1L1"], - smokescreen: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - spikes: ["1L1"], - stealthrock: ["1L1"], - stoneedge: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - tarshot: ["1L1"], - temperflare: ["1L1"], - terablast: ["1L1"], - willowisp: ["1L1"], - }, - }, - applin: { - learnset: { - astonish: ["1L1"], - attract: ["1L1"], - defensecurl: ["1L1"], - dracometeor: ["1L1"], - grassyglide: ["1L1"], - pounce: ["1L1"], - recycle: ["1L1"], - rollout: ["1L1"], - suckerpunch: ["1L1"], - terablast: ["1L1"], - withdraw: ["1L1"], - }, - }, - flapple: { - learnset: { - acidspray: ["1L1"], - acrobatics: ["1L1"], - aerialace: ["1L1"], - airslash: ["1L1"], - astonish: ["1L1"], - attract: ["1L1"], - bulletseed: ["1L1"], - dracometeor: ["1L1"], - dragonbreath: ["1L1"], - dragondance: ["1L1"], - dragonpulse: ["1L1"], - dragonrush: ["1L1"], - dualwingbeat: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - fly: ["1L1"], - focusenergy: ["1L1"], - gigadrain: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - grassyglide: ["1L1"], - grassyterrain: ["1L1"], - gravapple: ["1L1"], - growth: ["1L1"], - heavyslam: ["1L1"], - hyperbeam: ["1L1"], - irondefense: ["1L1"], - leafstorm: ["1L1"], - leechseed: ["1L1"], - magicalleaf: ["1L1"], - outrage: ["1L1"], - pounce: ["1L1"], - protect: ["1L1"], - recycle: ["1L1"], - rest: ["1L1"], - round: ["1L1"], - scaryface: ["1L1"], - seedbomb: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - trailblaze: ["1L1"], - twister: ["1L1"], - uturn: ["1L1"], - wingattack: ["1L1"], - withdraw: ["1L1"], - }, - }, - appletun: { - learnset: { - amnesia: ["1L1"], - appleacid: ["1L1"], - astonish: ["1L1"], - attract: ["1L1"], - bodypress: ["1L1"], - bodyslam: ["1L1"], - bulldoze: ["1L1"], - bulletseed: ["1L1"], - curse: ["1L1"], - dracometeor: ["1L1"], - dragonpulse: ["1L1"], - dragontail: ["1L1"], - earthquake: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - gigadrain: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - grassyglide: ["1L1"], - grassyterrain: ["1L1"], - growth: ["1L1"], - gyroball: ["1L1"], - headbutt: ["1L1"], - heavyslam: ["1L1"], - helpinghand: ["1L1"], - highhorsepower: ["1L1"], - hyperbeam: ["1L1"], - irondefense: ["1L1"], - ironhead: ["1L1"], - leafstorm: ["1L1"], - leechseed: ["1L1"], - lightscreen: ["1L1"], - magicalleaf: ["1L1"], - outrage: ["1L1"], - payback: ["1L1"], - pounce: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - recover: ["1L1"], - recycle: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - seedbomb: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - stomp: ["1L1"], - stompingtantrum: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - superpower: ["1L1"], - sweetscent: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - trailblaze: ["1L1"], - withdraw: ["1L1"], - zenheadbutt: ["1L1"], - }, - }, - silicobra: { - learnset: { - attract: ["1L1"], - belch: ["1L1"], - bodyslam: ["1L1"], - brutalswing: ["1L1"], - bulldoze: ["1L1"], - coil: ["1L1"], - dig: ["1L1"], - dragonrush: ["1L1"], - drillrun: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - glare: ["1L1"], - headbutt: ["1L1"], - lastresort: ["1L1"], - minimize: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - poisontail: ["1L1"], - protect: ["1L1"], - rest: ["1L1"], - rockblast: ["1L1"], - rockslide: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - sandattack: ["1L1"], - sandstorm: ["1L1"], - sandtomb: ["1L1"], - scaleshot: ["1L1"], - scaryface: ["1L1"], - scorchingsands: ["1L1"], - screech: ["1L1"], - skittersmack: ["1L1"], - slam: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - stealthrock: ["1L1"], - stoneedge: ["1L1"], - substitute: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - wrap: ["1L1"], - }, - }, - sandaconda: { - learnset: { - attract: ["1L1"], - bodypress: ["1L1"], - bodyslam: ["1L1"], - brutalswing: ["1L1"], - bulldoze: ["1L1"], - coil: ["1L1"], - dig: ["1L1"], - drillrun: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - firefang: ["1L1"], - gigaimpact: ["1L1"], - glare: ["1L1"], - headbutt: ["1L1"], - highhorsepower: ["1L1"], - hurricane: ["1L1"], - hyperbeam: ["1L1"], - irondefense: ["1L1"], - ironhead: ["1L1"], - minimize: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - outrage: ["1L1"], - poisontail: ["1L1"], - protect: ["1L1"], - rest: ["1L1"], - rockblast: ["1L1"], - rockslide: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - sandattack: ["1L1"], - sandstorm: ["1L1"], - sandtomb: ["1L1"], - scaleshot: ["1L1"], - scaryface: ["1L1"], - scorchingsands: ["1L1"], - screech: ["1L1"], - skittersmack: ["1L1"], - skullbash: ["1L1"], - slam: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - stealthrock: ["1L1"], - stoneedge: ["1L1"], - substitute: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thunderfang: ["1L1"], - wrap: ["1L1"], - zenheadbutt: ["1L1"], - }, - }, - cramorant: { - learnset: { - acrobatics: ["1L1"], - aerialace: ["1L1"], - agility: ["1L1"], - aircutter: ["1L1"], - airslash: ["1L1"], - amnesia: ["1L1"], - aquacutter: ["1L1"], - aquaring: ["1L1"], - assurance: ["1L1"], - attract: ["1L1"], - belch: ["1L1"], - blizzard: ["1L1"], - bravebird: ["1L1"], - chillingwater: ["1L1"], - defog: ["1L1"], - dive: ["1L1"], - drillpeck: ["1L1"], - dualwingbeat: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - featherdance: ["1L1"], - fly: ["1L1"], - furyattack: ["1L1"], - gigaimpact: ["1L1"], - hurricane: ["1L1"], - hydropump: ["1L1"], - hyperbeam: ["1L1"], - icebeam: ["1L1"], - icywind: ["1L1"], - liquidation: ["1L1"], - peck: ["1L1"], - pluck: ["1L1"], - pounce: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - reversal: ["1L1"], - roost: ["1L1"], - round: ["1L1"], - scald: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - spitup: ["1L1"], - steelwing: ["1L1"], - stockpile: ["1L1"], - substitute: ["1L1"], - superpower: ["1L1"], - surf: ["1L1"], - swallow: ["1L1"], - tailwind: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thrash: ["1L1"], - throatchop: ["1L1"], - uproar: ["1L1"], - watergun: ["1L1"], - waterpulse: ["1L1"], - weatherball: ["1L1"], - whirlpool: ["1L1"], - }, - }, - arrokuda: { - learnset: { - acupressure: ["1L1"], - agility: ["1L1"], - aquajet: ["1L1"], - assurance: ["1L1"], - attract: ["1L1"], - bite: ["1L1"], - bounce: ["1L1"], - brickbreak: ["1L1"], - chillingwater: ["1L1"], - closecombat: ["1L1"], - crunch: ["1L1"], - dive: ["1L1"], - doubleedge: ["1L1"], - drillrun: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - flipturn: ["1L1"], - focusenergy: ["1L1"], - furyattack: ["1L1"], - hydropump: ["1L1"], - icefang: ["1L1"], - laserfocus: ["1L1"], - liquidation: ["1L1"], - nightslash: ["1L1"], - peck: ["1L1"], - poisonjab: ["1L1"], - protect: ["1L1"], - psychicfangs: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - round: ["1L1"], - scald: ["1L1"], - scaleshot: ["1L1"], - slash: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - substitute: ["1L1"], - surf: ["1L1"], - swift: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thrash: ["1L1"], - throatchop: ["1L1"], - waterfall: ["1L1"], - waterpulse: ["1L1"], - whirlpool: ["1L1"], - }, - }, - barraskewda: { - learnset: { - agility: ["1L1"], - aquajet: ["1L1"], - assurance: ["1L1"], - attract: ["1L1"], - bite: ["1L1"], - blizzard: ["1L1"], - bounce: ["1L1"], - brickbreak: ["1L1"], - chillingwater: ["1L1"], - closecombat: ["1L1"], - crunch: ["1L1"], - dive: ["1L1"], - doubleedge: ["1L1"], - drillrun: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - flipturn: ["1L1"], - focusenergy: ["1L1"], - furyattack: ["1L1"], - gigaimpact: ["1L1"], - hydropump: ["1L1"], - hyperbeam: ["1L1"], - icebeam: ["1L1"], - icefang: ["1L1"], - laserfocus: ["1L1"], - liquidation: ["1L1"], - peck: ["1L1"], - poisonjab: ["1L1"], - protect: ["1L1"], - psychicfangs: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - round: ["1L1"], - scald: ["1L1"], - scaleshot: ["1L1"], - scaryface: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - substitute: ["1L1"], - surf: ["1L1"], - swift: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - throatchop: ["1L1"], - waterfall: ["1L1"], - waterpulse: ["1L1"], - whirlpool: ["1L1"], - }, - }, - toxel: { - learnset: { - acid: ["1L1"], - attract: ["1L1"], - belch: ["1L1"], - charm: ["1L1"], - encore: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - flail: ["1L1"], - growl: ["1L1"], - metalsound: ["1L1"], - nuzzle: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - rest: ["1L1"], - round: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - substitute: ["1L1"], - tearfullook: ["1L1"], - terablast: ["1L1"], - }, - eventData: [ - {generation: 8, level: 1, isHidden: true, moves: ["1L1"], pokeball: "luxuryball"}, - ], - }, - toxtricity: { - learnset: { - acid: ["1L1"], - acidspray: ["1L1"], - attract: ["1L1"], - belch: ["1L1"], - boomburst: ["1L1"], - brickbreak: ["1L1"], - charge: ["1L1"], - chargebeam: ["1L1"], - charm: ["1L1"], - discharge: ["1L1"], - drainpunch: ["1L1"], - eerieimpulse: ["1L1"], - electricterrain: ["1L1"], - electroball: ["1L1"], - electroweb: ["1L1"], - encore: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - firepunch: ["1L1"], - flail: ["1L1"], - fling: ["1L1"], - gigaimpact: ["1L1"], - growl: ["1L1"], - gunkshot: ["1L1"], - helpinghand: ["1L1"], - hex: ["1L1"], - hyperbeam: ["1L1"], - hypervoice: ["1L1"], - leer: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - metalsound: ["1L1"], - metronome: ["1L1"], - nobleroar: ["1L1"], - nuzzle: ["1L1"], - overdrive: ["1L1"], - payback: ["1L1"], - poisonjab: ["1L1"], - poisontail: ["1L1"], - protect: ["1L1"], - psychicnoise: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - risingvoltage: ["1L1"], - round: ["1L1"], - scaryface: ["1L1"], - screech: ["1L1"], - shiftgear: ["1L1"], - shockwave: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - sludgewave: ["1L1"], - snarl: ["1L1"], - snore: ["1L1"], - spark: ["1L1"], - storedpower: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - tearfullook: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - throatchop: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderfang: ["1L1"], - thunderpunch: ["1L1"], - thundershock: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - toxicspikes: ["1L1"], - trailblaze: ["1L1"], - uproar: ["1L1"], - venoshock: ["1L1"], - voltswitch: ["1L1"], - wildcharge: ["1L1"], - }, - eventData: [ - {generation: 8, level: 50, shiny: true, nature: "Rash", abilities: ["1L1"], moves: ["1L1"], pokeball: "cherishball"}, - ], - }, - toxtricitylowkey: { - learnset: { - acid: ["1L1"], - acidspray: ["1L1"], - attract: ["1L1"], - belch: ["1L1"], - boomburst: ["1L1"], - brickbreak: ["1L1"], - charge: ["1L1"], - chargebeam: ["1L1"], - charm: ["1L1"], - discharge: ["1L1"], - drainpunch: ["1L1"], - eerieimpulse: ["1L1"], - electricterrain: ["1L1"], - electroball: ["1L1"], - electroweb: ["1L1"], - encore: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - firepunch: ["1L1"], - flail: ["1L1"], - fling: ["1L1"], - gigaimpact: ["1L1"], - growl: ["1L1"], - gunkshot: ["1L1"], - helpinghand: ["1L1"], - hex: ["1L1"], - hyperbeam: ["1L1"], - hypervoice: ["1L1"], - leer: ["1L1"], - magneticflux: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - metalsound: ["1L1"], - metronome: ["1L1"], - nobleroar: ["1L1"], - nuzzle: ["1L1"], - overdrive: ["1L1"], - payback: ["1L1"], - poisonjab: ["1L1"], - poisontail: ["1L1"], - protect: ["1L1"], - psychicnoise: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - risingvoltage: ["1L1"], - round: ["1L1"], - scaryface: ["1L1"], - screech: ["1L1"], - shockwave: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - sludgewave: ["1L1"], - snarl: ["1L1"], - snore: ["1L1"], - spark: ["1L1"], - storedpower: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - tearfullook: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - throatchop: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderfang: ["1L1"], - thunderpunch: ["1L1"], - thundershock: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - toxicspikes: ["1L1"], - trailblaze: ["1L1"], - uproar: ["1L1"], - venomdrench: ["1L1"], - venoshock: ["1L1"], - voltswitch: ["1L1"], - wildcharge: ["1L1"], - }, - }, - sizzlipede: { - learnset: { - attract: ["1L1"], - bite: ["1L1"], - brutalswing: ["1L1"], - bugbite: ["1L1"], - bugbuzz: ["1L1"], - burnup: ["1L1"], - coil: ["1L1"], - crunch: ["1L1"], - defensecurl: ["1L1"], - ember: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - firelash: ["1L1"], - firespin: ["1L1"], - flamewheel: ["1L1"], - heatcrash: ["1L1"], - heatwave: ["1L1"], - knockoff: ["1L1"], - leechlife: ["1L1"], - lunge: ["1L1"], - powerwhip: ["1L1"], - protect: ["1L1"], - rest: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - scald: ["1L1"], - scorchingsands: ["1L1"], - skittersmack: ["1L1"], - slam: ["1L1"], - sleeptalk: ["1L1"], - smokescreen: ["1L1"], - snore: ["1L1"], - strugglebug: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - venoshock: ["1L1"], - wrap: ["1L1"], - }, - }, - centiskorch: { - learnset: { - attract: ["1L1"], - bite: ["1L1"], - brutalswing: ["1L1"], - bugbite: ["1L1"], - bugbuzz: ["1L1"], - burnup: ["1L1"], - coil: ["1L1"], - crunch: ["1L1"], - ember: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fireblast: ["1L1"], - firefang: ["1L1"], - firelash: ["1L1"], - firespin: ["1L1"], - flamethrower: ["1L1"], - flamewheel: ["1L1"], - flareblitz: ["1L1"], - gigaimpact: ["1L1"], - heatcrash: ["1L1"], - heatwave: ["1L1"], - hyperbeam: ["1L1"], - inferno: ["1L1"], - leechlife: ["1L1"], - lunge: ["1L1"], - mysticalfire: ["1L1"], - overheat: ["1L1"], - powerwhip: ["1L1"], - protect: ["1L1"], - rest: ["1L1"], - round: ["1L1"], - scald: ["1L1"], - scorchingsands: ["1L1"], - skittersmack: ["1L1"], - slam: ["1L1"], - sleeptalk: ["1L1"], - smokescreen: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - thunderfang: ["1L1"], - venoshock: ["1L1"], - willowisp: ["1L1"], - wrap: ["1L1"], - xscissor: ["1L1"], - }, - }, - clobbopus: { - learnset: { - attract: ["1L1"], - bind: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - brine: ["1L1"], - bulkup: ["1L1"], - circlethrow: ["1L1"], - closecombat: ["1L1"], - coaching: ["1L1"], - detect: ["1L1"], - dive: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - feint: ["1L1"], - focusblast: ["1L1"], - icepunch: ["1L1"], - leer: ["1L1"], - liquidation: ["1L1"], - megapunch: ["1L1"], - muddywater: ["1L1"], - mudshot: ["1L1"], - painsplit: ["1L1"], - payback: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - revenge: ["1L1"], - reversal: ["1L1"], - rocksmash: ["1L1"], - round: ["1L1"], - seismictoss: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - soak: ["1L1"], - submission: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - superpower: ["1L1"], - taunt: ["1L1"], - waterfall: ["1L1"], - workup: ["1L1"], - }, - }, - grapploct: { - learnset: { - attract: ["1L1"], - bind: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - brine: ["1L1"], - brutalswing: ["1L1"], - bulkup: ["1L1"], - closecombat: ["1L1"], - coaching: ["1L1"], - detect: ["1L1"], - dig: ["1L1"], - dive: ["1L1"], - drainpunch: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - feint: ["1L1"], - focusblast: ["1L1"], - gigaimpact: ["1L1"], - hydropump: ["1L1"], - hyperbeam: ["1L1"], - icepunch: ["1L1"], - leer: ["1L1"], - liquidation: ["1L1"], - megapunch: ["1L1"], - muddywater: ["1L1"], - mudshot: ["1L1"], - octazooka: ["1L1"], - octolock: ["1L1"], - payback: ["1L1"], - protect: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - revenge: ["1L1"], - reversal: ["1L1"], - rocksmash: ["1L1"], - round: ["1L1"], - scaryface: ["1L1"], - skittersmack: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - stompingtantrum: ["1L1"], - submission: ["1L1"], - substitute: ["1L1"], - superpower: ["1L1"], - surf: ["1L1"], - taunt: ["1L1"], - topsyturvy: ["1L1"], - waterfall: ["1L1"], - whirlpool: ["1L1"], - workup: ["1L1"], - }, - }, - sinistea: { - learnset: { - allyswitch: ["1L1"], - aromatherapy: ["1L1"], - aromaticmist: ["1L1"], - astonish: ["1L1"], - batonpass: ["1L1"], - calmmind: ["1L1"], - confuseray: ["1L1"], - curse: ["1L1"], - darkpulse: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - foulplay: ["1L1"], - gigadrain: ["1L1"], - hex: ["1L1"], - imprison: ["1L1"], - magicalleaf: ["1L1"], - megadrain: ["1L1"], - memento: ["1L1"], - metronome: ["1L1"], - nastyplot: ["1L1"], - nightshade: ["1L1"], - payback: ["1L1"], - phantomforce: ["1L1"], - poltergeist: ["1L1"], - protect: ["1L1"], - psybeam: ["1L1"], - psychic: ["1L1"], - psyshock: ["1L1"], - rest: ["1L1"], - round: ["1L1"], - shadowball: ["1L1"], - shellsmash: ["1L1"], - skillswap: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - spite: ["1L1"], - storedpower: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - sweetscent: ["1L1"], - terablast: ["1L1"], - trick: ["1L1"], - trickroom: ["1L1"], - willowisp: ["1L1"], - withdraw: ["1L1"], - wonderroom: ["1L1"], - }, - }, - sinisteaantique: { - learnset: { - allyswitch: ["1L1"], - aromatherapy: ["1L1"], - aromaticmist: ["1L1"], - astonish: ["1L1"], - batonpass: ["1L1"], - calmmind: ["1L1"], - celebrate: ["1L1"], - confuseray: ["1L1"], - curse: ["1L1"], - darkpulse: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - foulplay: ["1L1"], - gigadrain: ["1L1"], - hex: ["1L1"], - imprison: ["1L1"], - magicalleaf: ["1L1"], - megadrain: ["1L1"], - memento: ["1L1"], - metronome: ["1L1"], - nastyplot: ["1L1"], - nightshade: ["1L1"], - phantomforce: ["1L1"], - poltergeist: ["1L1"], - protect: ["1L1"], - psybeam: ["1L1"], - psychic: ["1L1"], - psyshock: ["1L1"], - rest: ["1L1"], - shadowball: ["1L1"], - shellsmash: ["1L1"], - skillswap: ["1L1"], - sleeptalk: ["1L1"], - spite: ["1L1"], - storedpower: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - sweetscent: ["1L1"], - terablast: ["1L1"], - trick: ["1L1"], - trickroom: ["1L1"], - willowisp: ["1L1"], - withdraw: ["1L1"], - }, - eventData: [ - {generation: 8, level: 50, isHidden: true, moves: ["1L1"], pokeball: "cherishball"}, - ], - }, - polteageist: { - learnset: { - allyswitch: ["1L1"], - aromatherapy: ["1L1"], - aromaticmist: ["1L1"], - astonish: ["1L1"], - batonpass: ["1L1"], - calmmind: ["1L1"], - confuseray: ["1L1"], - curse: ["1L1"], - darkpulse: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - foulplay: ["1L1"], - gigadrain: ["1L1"], - gigaimpact: ["1L1"], - hex: ["1L1"], - hyperbeam: ["1L1"], - imprison: ["1L1"], - lightscreen: ["1L1"], - magicalleaf: ["1L1"], - megadrain: ["1L1"], - memento: ["1L1"], - metronome: ["1L1"], - nastyplot: ["1L1"], - nightshade: ["1L1"], - painsplit: ["1L1"], - payback: ["1L1"], - phantomforce: ["1L1"], - poltergeist: ["1L1"], - protect: ["1L1"], - psybeam: ["1L1"], - psychic: ["1L1"], - psyshock: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - round: ["1L1"], - selfdestruct: ["1L1"], - shadowball: ["1L1"], - shellsmash: ["1L1"], - skillswap: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - spite: ["1L1"], - storedpower: ["1L1"], - strengthsap: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - sweetscent: ["1L1"], - teatime: ["1L1"], - terablast: ["1L1"], - trick: ["1L1"], - trickroom: ["1L1"], - willowisp: ["1L1"], - withdraw: ["1L1"], - wonderroom: ["1L1"], - }, - }, - hatenna: { - learnset: { - afteryou: ["1L1"], - aromatherapy: ["1L1"], - aromaticmist: ["1L1"], - attract: ["1L1"], - batonpass: ["1L1"], - calmmind: ["1L1"], - charm: ["1L1"], - confusion: ["1L1"], - darkpulse: ["1L1"], - dazzlinggleam: ["1L1"], - disarmingvoice: ["1L1"], - drainingkiss: ["1L1"], - endure: ["1L1"], - expandingforce: ["1L1"], - facade: ["1L1"], - futuresight: ["1L1"], - gigadrain: ["1L1"], - healingwish: ["1L1"], - healpulse: ["1L1"], - helpinghand: ["1L1"], - imprison: ["1L1"], - lifedew: ["1L1"], - lightscreen: ["1L1"], - magicalleaf: ["1L1"], - metronome: ["1L1"], - mistyterrain: ["1L1"], - mysticalfire: ["1L1"], - nuzzle: ["1L1"], - playnice: ["1L1"], - playrough: ["1L1"], - protect: ["1L1"], - psybeam: ["1L1"], - psychic: ["1L1"], - psychicterrain: ["1L1"], - psychup: ["1L1"], - psyshock: ["1L1"], - quash: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - skillswap: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - storedpower: ["1L1"], - substitute: ["1L1"], - swift: ["1L1"], - terablast: ["1L1"], - thunderwave: ["1L1"], - trick: ["1L1"], - trickroom: ["1L1"], - }, - }, - hattrem: { - learnset: { - aromatherapy: ["1L1"], - aromaticmist: ["1L1"], - attract: ["1L1"], - batonpass: ["1L1"], - brutalswing: ["1L1"], - calmmind: ["1L1"], - charm: ["1L1"], - confusion: ["1L1"], - darkpulse: ["1L1"], - dazzlinggleam: ["1L1"], - disarmingvoice: ["1L1"], - drainingkiss: ["1L1"], - endure: ["1L1"], - expandingforce: ["1L1"], - facade: ["1L1"], - futuresight: ["1L1"], - gigadrain: ["1L1"], - healingwish: ["1L1"], - healpulse: ["1L1"], - helpinghand: ["1L1"], - imprison: ["1L1"], - lifedew: ["1L1"], - lightscreen: ["1L1"], - magicalleaf: ["1L1"], - metronome: ["1L1"], - mistyterrain: ["1L1"], - mysticalfire: ["1L1"], - playnice: ["1L1"], - playrough: ["1L1"], - protect: ["1L1"], - psybeam: ["1L1"], - psychic: ["1L1"], - psychicterrain: ["1L1"], - psychup: ["1L1"], - psyshock: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - skillswap: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - storedpower: ["1L1"], - substitute: ["1L1"], - swift: ["1L1"], - terablast: ["1L1"], - thunderwave: ["1L1"], - trick: ["1L1"], - trickroom: ["1L1"], - }, - }, - hatterene: { - learnset: { - agility: ["1L1"], - aromatherapy: ["1L1"], - aromaticmist: ["1L1"], - attract: ["1L1"], - batonpass: ["1L1"], - brutalswing: ["1L1"], - calmmind: ["1L1"], - charm: ["1L1"], - confusion: ["1L1"], - darkpulse: ["1L1"], - dazzlinggleam: ["1L1"], - disarmingvoice: ["1L1"], - drainingkiss: ["1L1"], - endure: ["1L1"], - expandingforce: ["1L1"], - facade: ["1L1"], - futuresight: ["1L1"], - gigadrain: ["1L1"], - gigaimpact: ["1L1"], - gravity: ["1L1"], - guardswap: ["1L1"], - healingwish: ["1L1"], - healpulse: ["1L1"], - helpinghand: ["1L1"], - hyperbeam: ["1L1"], - imprison: ["1L1"], - lifedew: ["1L1"], - lightscreen: ["1L1"], - magicalleaf: ["1L1"], - magicpowder: ["1L1"], - magicroom: ["1L1"], - metronome: ["1L1"], - mistyexplosion: ["1L1"], - mistyterrain: ["1L1"], - mysticalfire: ["1L1"], - painsplit: ["1L1"], - playnice: ["1L1"], - playrough: ["1L1"], - powerswap: ["1L1"], - powerwhip: ["1L1"], - protect: ["1L1"], - psybeam: ["1L1"], - psychic: ["1L1"], - psychicnoise: ["1L1"], - psychicterrain: ["1L1"], - psychocut: ["1L1"], - psychup: ["1L1"], - psyshock: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - shadowball: ["1L1"], - shadowclaw: ["1L1"], - skillswap: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - storedpower: ["1L1"], - substitute: ["1L1"], - swift: ["1L1"], - swordsdance: ["1L1"], - terablast: ["1L1"], - thunderwave: ["1L1"], - trick: ["1L1"], - trickroom: ["1L1"], - wonderroom: ["1L1"], - }, - }, - impidimp: { - learnset: { - assurance: ["1L1"], - attract: ["1L1"], - bite: ["1L1"], - burningjealousy: ["1L1"], - chillingwater: ["1L1"], - confide: ["1L1"], - darkpulse: ["1L1"], - dazzlinggleam: ["1L1"], - drainingkiss: ["1L1"], - drainpunch: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fakeout: ["1L1"], - faketears: ["1L1"], - flatter: ["1L1"], - fling: ["1L1"], - foulplay: ["1L1"], - lashout: ["1L1"], - leechlife: ["1L1"], - lightscreen: ["1L1"], - lowkick: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - metronome: ["1L1"], - mistyterrain: ["1L1"], - nastyplot: ["1L1"], - partingshot: ["1L1"], - playrough: ["1L1"], - protect: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - revenge: ["1L1"], - round: ["1L1"], - scaryface: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - swagger: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - throatchop: ["1L1"], - thunderwave: ["1L1"], - torment: ["1L1"], - trailblaze: ["1L1"], - trick: ["1L1"], - uproar: ["1L1"], - }, - }, - morgrem: { - learnset: { - assurance: ["1L1"], - attract: ["1L1"], - bite: ["1L1"], - burningjealousy: ["1L1"], - chillingwater: ["1L1"], - confide: ["1L1"], - darkpulse: ["1L1"], - dazzlinggleam: ["1L1"], - drainingkiss: ["1L1"], - drainpunch: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fakeout: ["1L1"], - faketears: ["1L1"], - falsesurrender: ["1L1"], - flatter: ["1L1"], - fling: ["1L1"], - foulplay: ["1L1"], - imprison: ["1L1"], - lashout: ["1L1"], - leechlife: ["1L1"], - lightscreen: ["1L1"], - lowkick: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - metronome: ["1L1"], - mistyterrain: ["1L1"], - nastyplot: ["1L1"], - playrough: ["1L1"], - protect: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - revenge: ["1L1"], - round: ["1L1"], - scaryface: ["1L1"], - shadowclaw: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - swagger: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - throatchop: ["1L1"], - thunderwave: ["1L1"], - torment: ["1L1"], - trailblaze: ["1L1"], - trick: ["1L1"], - uproar: ["1L1"], - }, - }, - grimmsnarl: { - learnset: { - assurance: ["1L1"], - attract: ["1L1"], - bite: ["1L1"], - bodypress: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - bulkup: ["1L1"], - burningjealousy: ["1L1"], - chillingwater: ["1L1"], - confide: ["1L1"], - crunch: ["1L1"], - darkestlariat: ["1L1"], - darkpulse: ["1L1"], - dazzlinggleam: ["1L1"], - drainingkiss: ["1L1"], - drainpunch: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fakeout: ["1L1"], - faketears: ["1L1"], - falsesurrender: ["1L1"], - firepunch: ["1L1"], - flatter: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - focusenergy: ["1L1"], - focuspunch: ["1L1"], - foulplay: ["1L1"], - gigaimpact: ["1L1"], - hammerarm: ["1L1"], - hyperbeam: ["1L1"], - icepunch: ["1L1"], - imprison: ["1L1"], - lashout: ["1L1"], - leechlife: ["1L1"], - lightscreen: ["1L1"], - lowkick: ["1L1"], - lowsweep: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - metronome: ["1L1"], - mistyterrain: ["1L1"], - nastyplot: ["1L1"], - playrough: ["1L1"], - powerswap: ["1L1"], - poweruppunch: ["1L1"], - powerwhip: ["1L1"], - protect: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - revenge: ["1L1"], - round: ["1L1"], - scaryface: ["1L1"], - shadowclaw: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - spiritbreak: ["1L1"], - stompingtantrum: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - superpower: ["1L1"], - swagger: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - throatchop: ["1L1"], - thunderpunch: ["1L1"], - thunderwave: ["1L1"], - torment: ["1L1"], - trailblaze: ["1L1"], - trick: ["1L1"], - uproar: ["1L1"], - wonderroom: ["1L1"], - }, - eventData: [ - {generation: 9, level: 50, nature: "Calm", shiny: true, abilities: ["1L1"], ivs: {hp: 31, atk: 0, def: 31, spa: 31, spd: 31, spe: 31}, moves: ["1L1"], pokeball: "cherishball"}, - ], - }, - milcery: { - learnset: { - acidarmor: ["1L1"], - aromatherapy: ["1L1"], - aromaticmist: ["1L1"], - attract: ["1L1"], - babydolleyes: ["1L1"], - celebrate: ["1L1"], - charm: ["1L1"], - dazzlinggleam: ["1L1"], - drainingkiss: ["1L1"], - endure: ["1L1"], - entrainment: ["1L1"], - facade: ["1L1"], - fling: ["1L1"], - helpinghand: ["1L1"], - lastresort: ["1L1"], - mistyterrain: ["1L1"], - protect: ["1L1"], - recover: ["1L1"], - rest: ["1L1"], - round: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - storedpower: ["1L1"], - substitute: ["1L1"], - sweetkiss: ["1L1"], - sweetscent: ["1L1"], - tackle: ["1L1"], - terablast: ["1L1"], - }, - eventData: [ - {generation: 8, level: 5, nature: "Hardy", isHidden: true, moves: ["1L1"], pokeball: "cherishball"}, - ], - }, - alcremie: { - learnset: { - acidarmor: ["1L1"], - alluringvoice: ["1L1"], - aromatherapy: ["1L1"], - aromaticmist: ["1L1"], - attract: ["1L1"], - calmmind: ["1L1"], - charm: ["1L1"], - dazzlinggleam: ["1L1"], - decorate: ["1L1"], - disarmingvoice: ["1L1"], - drainingkiss: ["1L1"], - drainpunch: ["1L1"], - encore: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - entrainment: ["1L1"], - facade: ["1L1"], - faketears: ["1L1"], - fling: ["1L1"], - gigadrain: ["1L1"], - gigaimpact: ["1L1"], - helpinghand: ["1L1"], - hyperbeam: ["1L1"], - imprison: ["1L1"], - lightscreen: ["1L1"], - magicalleaf: ["1L1"], - magicroom: ["1L1"], - metronome: ["1L1"], - mistyexplosion: ["1L1"], - mistyterrain: ["1L1"], - mysticalfire: ["1L1"], - painsplit: ["1L1"], - playrough: ["1L1"], - protect: ["1L1"], - psychic: ["1L1"], - psychup: ["1L1"], - psyshock: ["1L1"], - recover: ["1L1"], - rest: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - storedpower: ["1L1"], - substitute: ["1L1"], - sweetkiss: ["1L1"], - sweetscent: ["1L1"], - tackle: ["1L1"], - terablast: ["1L1"], - triattack: ["1L1"], - wonderroom: ["1L1"], - }, - }, - falinks: { - learnset: { - agility: ["1L1"], - assurance: ["1L1"], - beatup: ["1L1"], - bodypress: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - bulkup: ["1L1"], - closecombat: ["1L1"], - coaching: ["1L1"], - counter: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - falseswipe: ["1L1"], - firstimpression: ["1L1"], - focusblast: ["1L1"], - focusenergy: ["1L1"], - gigaimpact: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - highhorsepower: ["1L1"], - hyperbeam: ["1L1"], - irondefense: ["1L1"], - ironhead: ["1L1"], - knockoff: ["1L1"], - lunge: ["1L1"], - megahorn: ["1L1"], - noretreat: ["1L1"], - payback: ["1L1"], - poisonjab: ["1L1"], - protect: ["1L1"], - psychup: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - revenge: ["1L1"], - reversal: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - screech: ["1L1"], - sleeptalk: ["1L1"], - smartstrike: ["1L1"], - snore: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - superpower: ["1L1"], - swordsdance: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - throatchop: ["1L1"], - trailblaze: ["1L1"], - upperhand: ["1L1"], - uproar: ["1L1"], - zenheadbutt: ["1L1"], - }, - }, - pincurchin: { - learnset: { - acupressure: ["1L1"], - assurance: ["1L1"], - attract: ["1L1"], - bodyslam: ["1L1"], - brine: ["1L1"], - bubblebeam: ["1L1"], - charge: ["1L1"], - chargebeam: ["1L1"], - chillingwater: ["1L1"], - curse: ["1L1"], - discharge: ["1L1"], - electricterrain: ["1L1"], - electroball: ["1L1"], - electroweb: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - furyattack: ["1L1"], - gigaimpact: ["1L1"], - hex: ["1L1"], - hydropump: ["1L1"], - hyperbeam: ["1L1"], - liquidation: ["1L1"], - memento: ["1L1"], - muddywater: ["1L1"], - painsplit: ["1L1"], - payback: ["1L1"], - peck: ["1L1"], - pinmissile: ["1L1"], - poisonjab: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - recover: ["1L1"], - rest: ["1L1"], - reversal: ["1L1"], - risingvoltage: ["1L1"], - round: ["1L1"], - scald: ["1L1"], - selfdestruct: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - spark: ["1L1"], - spikes: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - supercellslam: ["1L1"], - surf: ["1L1"], - swift: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - throatchop: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thundershock: ["1L1"], - thunderwave: ["1L1"], - toxicspikes: ["1L1"], - venomdrench: ["1L1"], - venoshock: ["1L1"], - watergun: ["1L1"], - wildcharge: ["1L1"], - zingzap: ["1L1"], - }, - }, - snom: { - learnset: { - attract: ["1L1"], - bugbite: ["1L1"], - bugbuzz: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fairywind: ["1L1"], - iciclespear: ["1L1"], - icywind: ["1L1"], - lunge: ["1L1"], - mirrorcoat: ["1L1"], - pounce: ["1L1"], - powdersnow: ["1L1"], - protect: ["1L1"], - rest: ["1L1"], - round: ["1L1"], - skittersmack: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - strugglebug: ["1L1"], - substitute: ["1L1"], - terablast: ["1L1"], - }, - }, - frosmoth: { - learnset: { - acrobatics: ["1L1"], - airslash: ["1L1"], - attract: ["1L1"], - aurorabeam: ["1L1"], - auroraveil: ["1L1"], - avalanche: ["1L1"], - blizzard: ["1L1"], - bugbite: ["1L1"], - bugbuzz: ["1L1"], - calmmind: ["1L1"], - dazzlinggleam: ["1L1"], - defog: ["1L1"], - dualwingbeat: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - featherdance: ["1L1"], - gigadrain: ["1L1"], - gigaimpact: ["1L1"], - hail: ["1L1"], - helpinghand: ["1L1"], - hurricane: ["1L1"], - hyperbeam: ["1L1"], - icebeam: ["1L1"], - icespinner: ["1L1"], - iciclespear: ["1L1"], - icywind: ["1L1"], - imprison: ["1L1"], - infestation: ["1L1"], - leechlife: ["1L1"], - lightscreen: ["1L1"], - lunge: ["1L1"], - mist: ["1L1"], - playrough: ["1L1"], - pounce: ["1L1"], - powdersnow: ["1L1"], - protect: ["1L1"], - quiverdance: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - skittersmack: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - snowscape: ["1L1"], - strugglebug: ["1L1"], - stunspore: ["1L1"], - substitute: ["1L1"], - swift: ["1L1"], - tailwind: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - tripleaxel: ["1L1"], - uturn: ["1L1"], - weatherball: ["1L1"], - wideguard: ["1L1"], - }, - }, - stonjourner: { - learnset: { - ancientpower: ["1L1"], - assurance: ["1L1"], - attract: ["1L1"], - block: ["1L1"], - bodypress: ["1L1"], - bodyslam: ["1L1"], - brutalswing: ["1L1"], - bulldoze: ["1L1"], - curse: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - gigaimpact: ["1L1"], - gravity: ["1L1"], - hardpress: ["1L1"], - heatcrash: ["1L1"], - heavyslam: ["1L1"], - highhorsepower: ["1L1"], - hyperbeam: ["1L1"], - imprison: ["1L1"], - irondefense: ["1L1"], - lowkick: ["1L1"], - lowsweep: ["1L1"], - megakick: ["1L1"], - meteorbeam: ["1L1"], - powergem: ["1L1"], - protect: ["1L1"], - psychup: ["1L1"], - rest: ["1L1"], - rockblast: ["1L1"], - rockpolish: ["1L1"], - rockslide: ["1L1"], - rockthrow: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - sandstorm: ["1L1"], - sandtomb: ["1L1"], - selfdestruct: ["1L1"], - sleeptalk: ["1L1"], - smackdown: ["1L1"], - snore: ["1L1"], - stealthrock: ["1L1"], - stomp: ["1L1"], - stompingtantrum: ["1L1"], - stoneedge: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - superpower: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - wideguard: ["1L1"], - wonderroom: ["1L1"], - }, - }, - eiscue: { - learnset: { - agility: ["1L1"], - amnesia: ["1L1"], - aquaring: ["1L1"], - attract: ["1L1"], - auroraveil: ["1L1"], - avalanche: ["1L1"], - bellydrum: ["1L1"], - blizzard: ["1L1"], - bodyslam: ["1L1"], - brine: ["1L1"], - chillingwater: ["1L1"], - dive: ["1L1"], - doubleedge: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - featherdance: ["1L1"], - flipturn: ["1L1"], - freezedry: ["1L1"], - gigaimpact: ["1L1"], - hail: ["1L1"], - headbutt: ["1L1"], - headsmash: ["1L1"], - hydropump: ["1L1"], - hyperbeam: ["1L1"], - icebeam: ["1L1"], - icepunch: ["1L1"], - icespinner: ["1L1"], - iciclecrash: ["1L1"], - iciclespear: ["1L1"], - icywind: ["1L1"], - irondefense: ["1L1"], - ironhead: ["1L1"], - liquidation: ["1L1"], - mist: ["1L1"], - powdersnow: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - reversal: ["1L1"], - round: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - snowscape: ["1L1"], - soak: ["1L1"], - substitute: ["1L1"], - surf: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - waterfall: ["1L1"], - waterpulse: ["1L1"], - weatherball: ["1L1"], - whirlpool: ["1L1"], - zenheadbutt: ["1L1"], - }, - }, - indeedee: { - learnset: { - afteryou: ["1L1"], - allyswitch: ["1L1"], - aromatherapy: ["1L1"], - attract: ["1L1"], - bodyslam: ["1L1"], - calmmind: ["1L1"], - dazzlinggleam: ["1L1"], - disarmingvoice: ["1L1"], - drainingkiss: ["1L1"], - drainpunch: ["1L1"], - encore: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - expandingforce: ["1L1"], - extrasensory: ["1L1"], - facade: ["1L1"], - fakeout: ["1L1"], - futuresight: ["1L1"], - gravity: ["1L1"], - healingwish: ["1L1"], - helpinghand: ["1L1"], - hypervoice: ["1L1"], - imprison: ["1L1"], - lastresort: ["1L1"], - magicalleaf: ["1L1"], - magicroom: ["1L1"], - metronome: ["1L1"], - mysticalfire: ["1L1"], - payday: ["1L1"], - playnice: ["1L1"], - playrough: ["1L1"], - powersplit: ["1L1"], - powerswap: ["1L1"], - protect: ["1L1"], - psybeam: ["1L1"], - psychic: ["1L1"], - psychicnoise: ["1L1"], - psychicterrain: ["1L1"], - psychup: ["1L1"], - psyshock: ["1L1"], - rest: ["1L1"], - round: ["1L1"], - shadowball: ["1L1"], - skillswap: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - storedpower: ["1L1"], - substitute: ["1L1"], - swift: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - terrainpulse: ["1L1"], - triattack: ["1L1"], - trick: ["1L1"], - trickroom: ["1L1"], - wonderroom: ["1L1"], - zenheadbutt: ["1L1"], - }, - }, - indeedeef: { - learnset: { - alluringvoice: ["1L1"], - allyswitch: ["1L1"], - aromatherapy: ["1L1"], - attract: ["1L1"], - batonpass: ["1L1"], - bodyslam: ["1L1"], - calmmind: ["1L1"], - charm: ["1L1"], - dazzlinggleam: ["1L1"], - disarmingvoice: ["1L1"], - drainingkiss: ["1L1"], - drainpunch: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - expandingforce: ["1L1"], - facade: ["1L1"], - fakeout: ["1L1"], - followme: ["1L1"], - futuresight: ["1L1"], - guardsplit: ["1L1"], - guardswap: ["1L1"], - healingwish: ["1L1"], - healpulse: ["1L1"], - helpinghand: ["1L1"], - hypervoice: ["1L1"], - imprison: ["1L1"], - lightscreen: ["1L1"], - magicalleaf: ["1L1"], - metronome: ["1L1"], - mysticalfire: ["1L1"], - payday: ["1L1"], - playnice: ["1L1"], - playrough: ["1L1"], - protect: ["1L1"], - psybeam: ["1L1"], - psychic: ["1L1"], - psychicterrain: ["1L1"], - psychoshift: ["1L1"], - psychup: ["1L1"], - psyshock: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - shadowball: ["1L1"], - skillswap: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - storedpower: ["1L1"], - substitute: ["1L1"], - swift: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - terrainpulse: ["1L1"], - trick: ["1L1"], - trickroom: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 9, level: 75, shiny: 1, perfectIVs: 4, moves: ["1L1"]}, - ], - }, - morpeko: { - learnset: { - agility: ["1L1"], - assurance: ["1L1"], - attract: ["1L1"], - aurawheel: ["1L1"], - batonpass: ["1L1"], - bite: ["1L1"], - brickbreak: ["1L1"], - bulletseed: ["1L1"], - charge: ["1L1"], - chargebeam: ["1L1"], - crunch: ["1L1"], - darkpulse: ["1L1"], - doubleedge: ["1L1"], - eerieimpulse: ["1L1"], - electricterrain: ["1L1"], - electroball: ["1L1"], - electroweb: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fakeout: ["1L1"], - faketears: ["1L1"], - firefang: ["1L1"], - flatter: ["1L1"], - fling: ["1L1"], - foulplay: ["1L1"], - icefang: ["1L1"], - knockoff: ["1L1"], - lashout: ["1L1"], - leer: ["1L1"], - nastyplot: ["1L1"], - outrage: ["1L1"], - partingshot: ["1L1"], - payback: ["1L1"], - powertrip: ["1L1"], - protect: ["1L1"], - psychicfangs: ["1L1"], - quash: ["1L1"], - quickattack: ["1L1"], - rapidspin: ["1L1"], - rest: ["1L1"], - revenge: ["1L1"], - reversal: ["1L1"], - risingvoltage: ["1L1"], - round: ["1L1"], - scaryface: ["1L1"], - seedbomb: ["1L1"], - sleeptalk: ["1L1"], - snarl: ["1L1"], - snore: ["1L1"], - spark: ["1L1"], - spite: ["1L1"], - stompingtantrum: ["1L1"], - substitute: ["1L1"], - superfang: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - tailwhip: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thrash: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderfang: ["1L1"], - thunderpunch: ["1L1"], - thundershock: ["1L1"], - thunderwave: ["1L1"], - tickle: ["1L1"], - torment: ["1L1"], - uproar: ["1L1"], - voltswitch: ["1L1"], - wildcharge: ["1L1"], - }, - }, - cufant: { - learnset: { - attract: ["1L1"], - belch: ["1L1"], - bodypress: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - brutalswing: ["1L1"], - bulldoze: ["1L1"], - curse: ["1L1"], - defensecurl: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fissure: ["1L1"], - flashcannon: ["1L1"], - fling: ["1L1"], - growl: ["1L1"], - heavyslam: ["1L1"], - highhorsepower: ["1L1"], - irondefense: ["1L1"], - ironhead: ["1L1"], - megakick: ["1L1"], - mudshot: ["1L1"], - playrough: ["1L1"], - powerwhip: ["1L1"], - protect: ["1L1"], - rest: ["1L1"], - rockblast: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - sandstorm: ["1L1"], - screech: ["1L1"], - slam: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - stealthrock: ["1L1"], - steelbeam: ["1L1"], - steelroller: ["1L1"], - stomp: ["1L1"], - stompingtantrum: ["1L1"], - stoneedge: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - superpower: ["1L1"], - swagger: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - whirlwind: ["1L1"], - workup: ["1L1"], - zenheadbutt: ["1L1"], - }, - }, - copperajah: { - learnset: { - attract: ["1L1"], - bodypress: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - brutalswing: ["1L1"], - bulldoze: ["1L1"], - curse: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - flashcannon: ["1L1"], - fling: ["1L1"], - gigaimpact: ["1L1"], - growl: ["1L1"], - hardpress: ["1L1"], - heatcrash: ["1L1"], - heavyslam: ["1L1"], - highhorsepower: ["1L1"], - hyperbeam: ["1L1"], - irondefense: ["1L1"], - ironhead: ["1L1"], - knockoff: ["1L1"], - megakick: ["1L1"], - mudshot: ["1L1"], - outrage: ["1L1"], - payback: ["1L1"], - playrough: ["1L1"], - powerwhip: ["1L1"], - protect: ["1L1"], - rest: ["1L1"], - revenge: ["1L1"], - rockblast: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - sandstorm: ["1L1"], - scaryface: ["1L1"], - screech: ["1L1"], - sleeptalk: ["1L1"], - smackdown: ["1L1"], - snarl: ["1L1"], - snore: ["1L1"], - stealthrock: ["1L1"], - steelbeam: ["1L1"], - steelroller: ["1L1"], - stomp: ["1L1"], - stompingtantrum: ["1L1"], - stoneedge: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - supercellslam: ["1L1"], - superpower: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - workup: ["1L1"], - zenheadbutt: ["1L1"], - }, - }, - dracozolt: { - learnset: { - aerialace: ["1L1"], - ancientpower: ["1L1"], - bodyslam: ["1L1"], - boltbeak: ["1L1"], - breakingswipe: ["1L1"], - brutalswing: ["1L1"], - bulldoze: ["1L1"], - charge: ["1L1"], - discharge: ["1L1"], - dracometeor: ["1L1"], - dragonclaw: ["1L1"], - dragonpulse: ["1L1"], - dragonrush: ["1L1"], - dragontail: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - electroball: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fireblast: ["1L1"], - firefang: ["1L1"], - firespin: ["1L1"], - flamethrower: ["1L1"], - gigaimpact: ["1L1"], - highhorsepower: ["1L1"], - hyperbeam: ["1L1"], - irontail: ["1L1"], - lowkick: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - meteorbeam: ["1L1"], - outrage: ["1L1"], - pluck: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - risingvoltage: ["1L1"], - rockblast: ["1L1"], - rockslide: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - slam: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - stomp: ["1L1"], - stompingtantrum: ["1L1"], - stoneedge: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - tackle: ["1L1"], - taunt: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderfang: ["1L1"], - thunderpunch: ["1L1"], - thundershock: ["1L1"], - thunderwave: ["1L1"], - wildcharge: ["1L1"], - }, - eventData: [ - {generation: 8, level: 10, shiny: 1, perfectIVs: 3, moves: ["1L1"], pokeball: "pokeball"}, - ], - eventOnly: false, - }, - arctozolt: { - learnset: { - ancientpower: ["1L1"], - avalanche: ["1L1"], - blizzard: ["1L1"], - bodyslam: ["1L1"], - boltbeak: ["1L1"], - bulldoze: ["1L1"], - charge: ["1L1"], - discharge: ["1L1"], - echoedvoice: ["1L1"], - electroball: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - freezedry: ["1L1"], - gigaimpact: ["1L1"], - hail: ["1L1"], - hydropump: ["1L1"], - hyperbeam: ["1L1"], - hypervoice: ["1L1"], - icebeam: ["1L1"], - icefang: ["1L1"], - iciclecrash: ["1L1"], - iciclespear: ["1L1"], - icywind: ["1L1"], - irontail: ["1L1"], - lowkick: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - meteorbeam: ["1L1"], - payback: ["1L1"], - pluck: ["1L1"], - powdersnow: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - risingvoltage: ["1L1"], - rockblast: ["1L1"], - rockslide: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - slam: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - stompingtantrum: ["1L1"], - stoneedge: ["1L1"], - substitute: ["1L1"], - surf: ["1L1"], - taunt: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderfang: ["1L1"], - thunderpunch: ["1L1"], - thundershock: ["1L1"], - thunderwave: ["1L1"], - wildcharge: ["1L1"], - }, - eventData: [ - {generation: 8, level: 10, shiny: 1, perfectIVs: 3, moves: ["1L1"], pokeball: "pokeball"}, - ], - eventOnly: false, - }, - dracovish: { - learnset: { - ancientpower: ["1L1"], - bite: ["1L1"], - bodyslam: ["1L1"], - brine: ["1L1"], - brutalswing: ["1L1"], - bulldoze: ["1L1"], - crunch: ["1L1"], - dive: ["1L1"], - dracometeor: ["1L1"], - dragonbreath: ["1L1"], - dragonpulse: ["1L1"], - dragonrush: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fishiousrend: ["1L1"], - gigaimpact: ["1L1"], - hydropump: ["1L1"], - hyperbeam: ["1L1"], - icefang: ["1L1"], - ironhead: ["1L1"], - leechlife: ["1L1"], - liquidation: ["1L1"], - lowkick: ["1L1"], - megakick: ["1L1"], - meteorbeam: ["1L1"], - outrage: ["1L1"], - protect: ["1L1"], - psychicfangs: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - rockblast: ["1L1"], - rockslide: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - scald: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - stomp: ["1L1"], - stompingtantrum: ["1L1"], - stoneedge: ["1L1"], - substitute: ["1L1"], - superfang: ["1L1"], - surf: ["1L1"], - tackle: ["1L1"], - waterfall: ["1L1"], - watergun: ["1L1"], - whirlpool: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 8, level: 10, shiny: 1, perfectIVs: 3, moves: ["1L1"], pokeball: "pokeball"}, - {generation: 8, level: 80, nature: "Naive", abilities: ["1L1"], ivs: {hp: 30, atk: 31, def: 31, spa: 30, spd: 30, spe: 31}, moves: ["1L1"], pokeball: "pokeball"}, - ], - eventOnly: false, - }, - arctovish: { - learnset: { - ancientpower: ["1L1"], - auroraveil: ["1L1"], - avalanche: ["1L1"], - bite: ["1L1"], - blizzard: ["1L1"], - bodyslam: ["1L1"], - brine: ["1L1"], - crunch: ["1L1"], - dive: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fishiousrend: ["1L1"], - freezedry: ["1L1"], - gigaimpact: ["1L1"], - hail: ["1L1"], - hydropump: ["1L1"], - hyperbeam: ["1L1"], - icebeam: ["1L1"], - icefang: ["1L1"], - iciclecrash: ["1L1"], - iciclespear: ["1L1"], - icywind: ["1L1"], - irondefense: ["1L1"], - ironhead: ["1L1"], - liquidation: ["1L1"], - meteorbeam: ["1L1"], - powdersnow: ["1L1"], - protect: ["1L1"], - psychicfangs: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - rockblast: ["1L1"], - rockslide: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - stoneedge: ["1L1"], - substitute: ["1L1"], - superfang: ["1L1"], - surf: ["1L1"], - waterfall: ["1L1"], - watergun: ["1L1"], - whirlpool: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 8, level: 10, shiny: 1, perfectIVs: 3, moves: ["1L1"], pokeball: "pokeball"}, - ], - eventOnly: false, - }, - duraludon: { - learnset: { - attract: ["1L1"], - bodypress: ["1L1"], - bodyslam: ["1L1"], - breakingswipe: ["1L1"], - brickbreak: ["1L1"], - darkpulse: ["1L1"], - doubleedge: ["1L1"], - dracometeor: ["1L1"], - dragoncheer: ["1L1"], - dragonclaw: ["1L1"], - dragonpulse: ["1L1"], - dragontail: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - flashcannon: ["1L1"], - focusenergy: ["1L1"], - foulplay: ["1L1"], - gigaimpact: ["1L1"], - gyroball: ["1L1"], - heavyslam: ["1L1"], - honeclaws: ["1L1"], - hyperbeam: ["1L1"], - irondefense: ["1L1"], - ironhead: ["1L1"], - laserfocus: ["1L1"], - leer: ["1L1"], - lightscreen: ["1L1"], - metalburst: ["1L1"], - metalclaw: ["1L1"], - metalsound: ["1L1"], - mirrorcoat: ["1L1"], - nightslash: ["1L1"], - outrage: ["1L1"], - protect: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - roar: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - scaryface: ["1L1"], - screech: ["1L1"], - slash: ["1L1"], - sleeptalk: ["1L1"], - snarl: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - stealthrock: ["1L1"], - steelbeam: ["1L1"], - steelroller: ["1L1"], - stompingtantrum: ["1L1"], - stoneedge: ["1L1"], - substitute: ["1L1"], - swordsdance: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderwave: ["1L1"], - }, - }, - dreepy: { - learnset: { - astonish: ["1L1"], - attract: ["1L1"], - batonpass: ["1L1"], - bite: ["1L1"], - confuseray: ["1L1"], - curse: ["1L1"], - disable: ["1L1"], - doubleteam: ["1L1"], - dracometeor: ["1L1"], - dragontail: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - grudge: ["1L1"], - helpinghand: ["1L1"], - infestation: ["1L1"], - protect: ["1L1"], - quickattack: ["1L1"], - rest: ["1L1"], - round: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - swift: ["1L1"], - terablast: ["1L1"], - thunderwave: ["1L1"], - }, - }, - drakloak: { - learnset: { - acrobatics: ["1L1"], - agility: ["1L1"], - allyswitch: ["1L1"], - assurance: ["1L1"], - astonish: ["1L1"], - attract: ["1L1"], - batonpass: ["1L1"], - beatup: ["1L1"], - bite: ["1L1"], - breakingswipe: ["1L1"], - brine: ["1L1"], - confuseray: ["1L1"], - curse: ["1L1"], - dive: ["1L1"], - doubleedge: ["1L1"], - doublehit: ["1L1"], - dracometeor: ["1L1"], - dragoncheer: ["1L1"], - dragondance: ["1L1"], - dragonpulse: ["1L1"], - dragonrush: ["1L1"], - dragontail: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fireblast: ["1L1"], - flamethrower: ["1L1"], - helpinghand: ["1L1"], - hex: ["1L1"], - hydropump: ["1L1"], - infestation: ["1L1"], - lastresort: ["1L1"], - lightscreen: ["1L1"], - lockon: ["1L1"], - nightshade: ["1L1"], - outrage: ["1L1"], - phantomforce: ["1L1"], - pounce: ["1L1"], - protect: ["1L1"], - psychicfangs: ["1L1"], - quickattack: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - round: ["1L1"], - scald: ["1L1"], - shadowball: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - steelwing: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - surf: ["1L1"], - swift: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderwave: ["1L1"], - uturn: ["1L1"], - willowisp: ["1L1"], - }, - }, - dragapult: { - learnset: { - acrobatics: ["1L1"], - agility: ["1L1"], - allyswitch: ["1L1"], - assurance: ["1L1"], - astonish: ["1L1"], - attract: ["1L1"], - batonpass: ["1L1"], - beatup: ["1L1"], - bite: ["1L1"], - bodyslam: ["1L1"], - breakingswipe: ["1L1"], - brine: ["1L1"], - confuseray: ["1L1"], - curse: ["1L1"], - dive: ["1L1"], - doubleedge: ["1L1"], - doublehit: ["1L1"], - dracometeor: ["1L1"], - dragonbreath: ["1L1"], - dragoncheer: ["1L1"], - dragonclaw: ["1L1"], - dragondance: ["1L1"], - dragondarts: ["1L1"], - dragonpulse: ["1L1"], - dragonrush: ["1L1"], - dragontail: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fireblast: ["1L1"], - flamethrower: ["1L1"], - fly: ["1L1"], - gigaimpact: ["1L1"], - helpinghand: ["1L1"], - hex: ["1L1"], - hydropump: ["1L1"], - hyperbeam: ["1L1"], - infestation: ["1L1"], - lastresort: ["1L1"], - lightscreen: ["1L1"], - lockon: ["1L1"], - nightshade: ["1L1"], - outrage: ["1L1"], - phantomforce: ["1L1"], - pounce: ["1L1"], - protect: ["1L1"], - psychicfangs: ["1L1"], - quickattack: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - round: ["1L1"], - scald: ["1L1"], - shadowball: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - steelwing: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - sunnyday: ["1L1"], - surf: ["1L1"], - swift: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderwave: ["1L1"], - triattack: ["1L1"], - uturn: ["1L1"], - willowisp: ["1L1"], - }, - eventData: [ - {generation: 9, level: 50, gender: "M", nature: "Jolly", perfectIVs: 6, abilities: ["1L1"], moves: ["1L1"], pokeball: "cherishball"}, - ], - }, - zacian: { - learnset: { - agility: ["1L1"], - airslash: ["1L1"], - assurance: ["1L1"], - bite: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - brutalswing: ["1L1"], - closecombat: ["1L1"], - crunch: ["1L1"], - dazzlinggleam: ["1L1"], - dig: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - falseswipe: ["1L1"], - firefang: ["1L1"], - flashcannon: ["1L1"], - focusblast: ["1L1"], - focusenergy: ["1L1"], - gigaimpact: ["1L1"], - helpinghand: ["1L1"], - howl: ["1L1"], - hyperbeam: ["1L1"], - hypervoice: ["1L1"], - icefang: ["1L1"], - imprison: ["1L1"], - irondefense: ["1L1"], - ironhead: ["1L1"], - irontail: ["1L1"], - laserfocus: ["1L1"], - metalclaw: ["1L1"], - mistyterrain: ["1L1"], - moonblast: ["1L1"], - nobleroar: ["1L1"], - playrough: ["1L1"], - poisonjab: ["1L1"], - protect: ["1L1"], - psychicfangs: ["1L1"], - psychocut: ["1L1"], - quickattack: ["1L1"], - quickguard: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - revenge: ["1L1"], - reversal: ["1L1"], - round: ["1L1"], - sacredsword: ["1L1"], - scaryface: ["1L1"], - slash: ["1L1"], - sleeptalk: ["1L1"], - snarl: ["1L1"], - snore: ["1L1"], - solarblade: ["1L1"], - steelbeam: ["1L1"], - substitute: ["1L1"], - swift: ["1L1"], - swordsdance: ["1L1"], - tailslap: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thunderfang: ["1L1"], - trailblaze: ["1L1"], - wildcharge: ["1L1"], - workup: ["1L1"], - }, - eventData: [ - {generation: 8, level: 70, perfectIVs: 3, moves: ["1L1"]}, - {generation: 8, level: 100, shiny: true, nature: "Adamant", ivs: {hp: 31, atk: 31, def: 31, spa: 30, spd: 31, spe: 31}, moves: ["1L1"], pokeball: "cherishball"}, - ], - eventOnly: false, - }, - zaciancrowned: { - learnset: { - behemothblade: ["1L1"], - }, - eventOnly: false, - }, - zamazenta: { - learnset: { - agility: ["1L1"], - bite: ["1L1"], - bodypress: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - closecombat: ["1L1"], - coaching: ["1L1"], - crunch: ["1L1"], - dazzlinggleam: ["1L1"], - dig: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - firefang: ["1L1"], - flashcannon: ["1L1"], - focusblast: ["1L1"], - focusenergy: ["1L1"], - gigaimpact: ["1L1"], - guardswap: ["1L1"], - heavyslam: ["1L1"], - helpinghand: ["1L1"], - howl: ["1L1"], - hyperbeam: ["1L1"], - hypervoice: ["1L1"], - icefang: ["1L1"], - imprison: ["1L1"], - irondefense: ["1L1"], - ironhead: ["1L1"], - irontail: ["1L1"], - laserfocus: ["1L1"], - lightscreen: ["1L1"], - metalburst: ["1L1"], - metalclaw: ["1L1"], - moonblast: ["1L1"], - payback: ["1L1"], - playrough: ["1L1"], - powerswap: ["1L1"], - protect: ["1L1"], - psychicfangs: ["1L1"], - quickattack: ["1L1"], - raindance: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - revenge: ["1L1"], - reversal: ["1L1"], - roar: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - sandstorm: ["1L1"], - scaryface: ["1L1"], - slash: ["1L1"], - sleeptalk: ["1L1"], - snarl: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - steelbeam: ["1L1"], - stoneedge: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swift: ["1L1"], - tailslap: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thunderfang: ["1L1"], - trailblaze: ["1L1"], - wideguard: ["1L1"], - wildcharge: ["1L1"], - workup: ["1L1"], - }, - eventData: [ - {generation: 8, level: 70, perfectIVs: 3, moves: ["1L1"]}, - {generation: 8, level: 100, shiny: true, nature: "Adamant", ivs: {hp: 31, atk: 31, def: 31, spa: 30, spd: 31, spe: 31}, moves: ["1L1"], pokeball: "cherishball"}, - ], - eventOnly: false, - }, - zamazentacrowned: { - learnset: { - behemothbash: ["1L1"], - }, - eventOnly: false, - }, - eternatus: { - learnset: { - agility: ["1L1"], - assurance: ["1L1"], - bodyslam: ["1L1"], - brutalswing: ["1L1"], - confuseray: ["1L1"], - cosmicpower: ["1L1"], - crosspoison: ["1L1"], - dracometeor: ["1L1"], - dragondance: ["1L1"], - dragonpulse: ["1L1"], - dragontail: ["1L1"], - dynamaxcannon: ["1L1"], - endure: ["1L1"], - eternabeam: ["1L1"], - facade: ["1L1"], - fireblast: ["1L1"], - firespin: ["1L1"], - flamethrower: ["1L1"], - flashcannon: ["1L1"], - fly: ["1L1"], - gigaimpact: ["1L1"], - gravity: ["1L1"], - gunkshot: ["1L1"], - hyperbeam: ["1L1"], - lightscreen: ["1L1"], - meteorbeam: ["1L1"], - mysticalfire: ["1L1"], - outrage: ["1L1"], - payback: ["1L1"], - poisonjab: ["1L1"], - poisontail: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - recover: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - round: ["1L1"], - scaryface: ["1L1"], - screech: ["1L1"], - shadowball: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - sludgewave: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - toxic: ["1L1"], - toxicspikes: ["1L1"], - venomdrench: ["1L1"], - venoshock: ["1L1"], - }, - eventData: [ - {generation: 8, level: 60, perfectIVs: 3, moves: ["1L1"]}, - {generation: 8, level: 100, shiny: true, nature: "Timid", perfectIVs: 6, moves: ["1L1"], pokeball: "cherishball"}, - ], - eventOnly: false, - }, - kubfu: { - learnset: { - acrobatics: ["1L1"], - aerialace: ["1L1"], - attract: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - bulkup: ["1L1"], - closecombat: ["1L1"], - coaching: ["1L1"], - counter: ["1L1"], - detect: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - dynamicpunch: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - firepunch: ["1L1"], - fling: ["1L1"], - focusenergy: ["1L1"], - focuspunch: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - icepunch: ["1L1"], - ironhead: ["1L1"], - leer: ["1L1"], - lowkick: ["1L1"], - lowsweep: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - metalclaw: ["1L1"], - protect: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - revenge: ["1L1"], - reversal: ["1L1"], - rocksmash: ["1L1"], - round: ["1L1"], - scaryface: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - substitute: ["1L1"], - superpower: ["1L1"], - swordsdance: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thunderpunch: ["1L1"], - uturn: ["1L1"], - workup: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 8, level: 10, perfectIVs: 3, moves: ["1L1"]}, - ], - eventOnly: false, - }, - urshifu: { - learnset: { - acrobatics: ["1L1"], - aerialace: ["1L1"], - assurance: ["1L1"], - attract: ["1L1"], - aurasphere: ["1L1"], - beatup: ["1L1"], - bodypress: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - bulkup: ["1L1"], - closecombat: ["1L1"], - coaching: ["1L1"], - counter: ["1L1"], - crunch: ["1L1"], - darkestlariat: ["1L1"], - darkpulse: ["1L1"], - detect: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - drainpunch: ["1L1"], - dynamicpunch: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - falseswipe: ["1L1"], - firepunch: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - focusenergy: ["1L1"], - focuspunch: ["1L1"], - foulplay: ["1L1"], - gigaimpact: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - icepunch: ["1L1"], - irondefense: ["1L1"], - ironhead: ["1L1"], - lashout: ["1L1"], - leer: ["1L1"], - lowkick: ["1L1"], - lowsweep: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - metalclaw: ["1L1"], - payback: ["1L1"], - poisonjab: ["1L1"], - protect: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - revenge: ["1L1"], - reversal: ["1L1"], - roar: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - scaryface: ["1L1"], - sleeptalk: ["1L1"], - snarl: ["1L1"], - snore: ["1L1"], - stoneedge: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - superpower: ["1L1"], - swift: ["1L1"], - swordsdance: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - throatchop: ["1L1"], - thunderpunch: ["1L1"], - trailblaze: ["1L1"], - uturn: ["1L1"], - wickedblow: ["1L1"], - workup: ["1L1"], - zenheadbutt: ["1L1"], - }, - }, - urshifurapidstrike: { - learnset: { - acrobatics: ["1L1"], - aerialace: ["1L1"], - aquajet: ["1L1"], - attract: ["1L1"], - aurasphere: ["1L1"], - bodypress: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - brine: ["1L1"], - bulkup: ["1L1"], - chillingwater: ["1L1"], - closecombat: ["1L1"], - coaching: ["1L1"], - counter: ["1L1"], - detect: ["1L1"], - dig: ["1L1"], - dive: ["1L1"], - doubleedge: ["1L1"], - drainpunch: ["1L1"], - dynamicpunch: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - falseswipe: ["1L1"], - firepunch: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - focusenergy: ["1L1"], - focuspunch: ["1L1"], - gigaimpact: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - icepunch: ["1L1"], - icespinner: ["1L1"], - irondefense: ["1L1"], - ironhead: ["1L1"], - leer: ["1L1"], - liquidation: ["1L1"], - lowkick: ["1L1"], - lowsweep: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - poisonjab: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - revenge: ["1L1"], - reversal: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - scald: ["1L1"], - scaryface: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - stoneedge: ["1L1"], - substitute: ["1L1"], - superpower: ["1L1"], - surgingstrikes: ["1L1"], - swift: ["1L1"], - swordsdance: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thunderpunch: ["1L1"], - trailblaze: ["1L1"], - uturn: ["1L1"], - waterfall: ["1L1"], - whirlpool: ["1L1"], - workup: ["1L1"], - zenheadbutt: ["1L1"], - }, - }, - zarude: { - learnset: { - acrobatics: ["1L1"], - aerialace: ["1L1"], - assurance: ["1L1"], - bind: ["1L1"], - bite: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - brutalswing: ["1L1"], - bulkup: ["1L1"], - bulletseed: ["1L1"], - closecombat: ["1L1"], - crunch: ["1L1"], - darkestlariat: ["1L1"], - darkpulse: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - drainpunch: ["1L1"], - encore: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - fling: ["1L1"], - focuspunch: ["1L1"], - furyswipes: ["1L1"], - gigadrain: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - grassyglide: ["1L1"], - grassyterrain: ["1L1"], - growth: ["1L1"], - hammerarm: ["1L1"], - helpinghand: ["1L1"], - hyperbeam: ["1L1"], - hypervoice: ["1L1"], - irontail: ["1L1"], - junglehealing: ["1L1"], - knockoff: ["1L1"], - lashout: ["1L1"], - leafstorm: ["1L1"], - leer: ["1L1"], - lowkick: ["1L1"], - lowsweep: ["1L1"], - magicalleaf: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - mudshot: ["1L1"], - nastyplot: ["1L1"], - payback: ["1L1"], - petalblizzard: ["1L1"], - powerwhip: ["1L1"], - protect: ["1L1"], - rest: ["1L1"], - revenge: ["1L1"], - roar: ["1L1"], - rockslide: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - scaryface: ["1L1"], - scratch: ["1L1"], - seedbomb: ["1L1"], - sleeptalk: ["1L1"], - snarl: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - solarblade: ["1L1"], - stompingtantrum: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - superpower: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - swordsdance: ["1L1"], - synthesis: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thrash: ["1L1"], - throatchop: ["1L1"], - trailblaze: ["1L1"], - uturn: ["1L1"], - vinewhip: ["1L1"], - }, - eventData: [ - {generation: 8, level: 60, nature: "Sassy", moves: ["1L1"], pokeball: "cherishball"}, - ], - eventOnly: false, - }, - zarudedada: { - learnset: { - acrobatics: ["1L1"], - aerialace: ["1L1"], - assurance: ["1L1"], - bind: ["1L1"], - bite: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - brutalswing: ["1L1"], - bulkup: ["1L1"], - bulletseed: ["1L1"], - closecombat: ["1L1"], - crunch: ["1L1"], - darkestlariat: ["1L1"], - darkpulse: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - drainpunch: ["1L1"], - encore: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - fling: ["1L1"], - focuspunch: ["1L1"], - furyswipes: ["1L1"], - gigadrain: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - grassyglide: ["1L1"], - grassyterrain: ["1L1"], - growth: ["1L1"], - hammerarm: ["1L1"], - helpinghand: ["1L1"], - hyperbeam: ["1L1"], - hypervoice: ["1L1"], - irontail: ["1L1"], - junglehealing: ["1L1"], - knockoff: ["1L1"], - lashout: ["1L1"], - leafstorm: ["1L1"], - leer: ["1L1"], - lowkick: ["1L1"], - lowsweep: ["1L1"], - magicalleaf: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - mudshot: ["1L1"], - nastyplot: ["1L1"], - payback: ["1L1"], - petalblizzard: ["1L1"], - powerwhip: ["1L1"], - protect: ["1L1"], - rest: ["1L1"], - revenge: ["1L1"], - roar: ["1L1"], - rockslide: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - scaryface: ["1L1"], - scratch: ["1L1"], - seedbomb: ["1L1"], - sleeptalk: ["1L1"], - snarl: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - solarblade: ["1L1"], - stompingtantrum: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - superpower: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - swordsdance: ["1L1"], - synthesis: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thrash: ["1L1"], - throatchop: ["1L1"], - trailblaze: ["1L1"], - uturn: ["1L1"], - vinewhip: ["1L1"], - }, - eventData: [ - {generation: 8, level: 70, nature: "Adamant", moves: ["1L1"], pokeball: "cherishball"}, - ], - eventOnly: false, - }, - regieleki: { - learnset: { - acrobatics: ["1L1"], - agility: ["1L1"], - ancientpower: ["1L1"], - assurance: ["1L1"], - bodyslam: ["1L1"], - bounce: ["1L1"], - charge: ["1L1"], - chargebeam: ["1L1"], - eerieimpulse: ["1L1"], - electricterrain: ["1L1"], - electroball: ["1L1"], - electroweb: ["1L1"], - endure: ["1L1"], - explosion: ["1L1"], - extremespeed: ["1L1"], - facade: ["1L1"], - gigaimpact: ["1L1"], - hyperbeam: ["1L1"], - lightscreen: ["1L1"], - lockon: ["1L1"], - magnetrise: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - rapidspin: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - risingvoltage: ["1L1"], - round: ["1L1"], - screech: ["1L1"], - selfdestruct: ["1L1"], - shockwave: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - substitute: ["1L1"], - supercellslam: ["1L1"], - swift: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thrash: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thundercage: ["1L1"], - thundershock: ["1L1"], - thunderwave: ["1L1"], - voltswitch: ["1L1"], - wildcharge: ["1L1"], - zapcannon: ["1L1"], - }, - eventData: [ - {generation: 8, level: 70, shiny: 1, moves: ["1L1"]}, - ], - eventOnly: false, - }, - regidrago: { - learnset: { - ancientpower: ["1L1"], - bite: ["1L1"], - bodyslam: ["1L1"], - breakingswipe: ["1L1"], - crunch: ["1L1"], - dracometeor: ["1L1"], - dragonbreath: ["1L1"], - dragoncheer: ["1L1"], - dragonclaw: ["1L1"], - dragondance: ["1L1"], - dragonenergy: ["1L1"], - dragonpulse: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - endure: ["1L1"], - explosion: ["1L1"], - facade: ["1L1"], - firefang: ["1L1"], - focusenergy: ["1L1"], - gigaimpact: ["1L1"], - hammerarm: ["1L1"], - hyperbeam: ["1L1"], - icefang: ["1L1"], - laserfocus: ["1L1"], - lightscreen: ["1L1"], - outrage: ["1L1"], - protect: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - reversal: ["1L1"], - round: ["1L1"], - scaleshot: ["1L1"], - selfdestruct: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - substitute: ["1L1"], - swift: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thrash: ["1L1"], - thunderfang: ["1L1"], - twister: ["1L1"], - visegrip: ["1L1"], - }, - eventData: [ - {generation: 8, level: 70, shiny: 1, moves: ["1L1"]}, - ], - eventOnly: false, - }, - glastrier: { - learnset: { - assurance: ["1L1"], - avalanche: ["1L1"], - blizzard: ["1L1"], - bodypress: ["1L1"], - bodyslam: ["1L1"], - bulldoze: ["1L1"], - closecombat: ["1L1"], - crunch: ["1L1"], - curse: ["1L1"], - doubleedge: ["1L1"], - doublekick: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - gigaimpact: ["1L1"], - hail: ["1L1"], - heavyslam: ["1L1"], - highhorsepower: ["1L1"], - hyperbeam: ["1L1"], - icebeam: ["1L1"], - iciclecrash: ["1L1"], - iciclespear: ["1L1"], - icywind: ["1L1"], - irondefense: ["1L1"], - lashout: ["1L1"], - megahorn: ["1L1"], - mist: ["1L1"], - mudshot: ["1L1"], - outrage: ["1L1"], - payback: ["1L1"], - protect: ["1L1"], - rest: ["1L1"], - roar: ["1L1"], - round: ["1L1"], - scaryface: ["1L1"], - sleeptalk: ["1L1"], - smartstrike: ["1L1"], - snarl: ["1L1"], - snore: ["1L1"], - snowscape: ["1L1"], - stomp: ["1L1"], - stompingtantrum: ["1L1"], - substitute: ["1L1"], - superpower: ["1L1"], - swordsdance: ["1L1"], - tackle: ["1L1"], - tailwhip: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thrash: ["1L1"], - throatchop: ["1L1"], - torment: ["1L1"], - trailblaze: ["1L1"], - uproar: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 8, level: 75, moves: ["1L1"]}, - ], - eventOnly: false, - }, - spectrier: { - learnset: { - agility: ["1L1"], - assurance: ["1L1"], - bodyslam: ["1L1"], - bulldoze: ["1L1"], - calmmind: ["1L1"], - confuseray: ["1L1"], - crunch: ["1L1"], - curse: ["1L1"], - darkpulse: ["1L1"], - disable: ["1L1"], - doubleedge: ["1L1"], - doublekick: ["1L1"], - drainingkiss: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - foulplay: ["1L1"], - gigaimpact: ["1L1"], - haze: ["1L1"], - hex: ["1L1"], - hyperbeam: ["1L1"], - lashout: ["1L1"], - mudshot: ["1L1"], - nastyplot: ["1L1"], - nightshade: ["1L1"], - painsplit: ["1L1"], - payback: ["1L1"], - phantomforce: ["1L1"], - poltergeist: ["1L1"], - protect: ["1L1"], - psychic: ["1L1"], - psychocut: ["1L1"], - rest: ["1L1"], - round: ["1L1"], - scaryface: ["1L1"], - shadowball: ["1L1"], - sleeptalk: ["1L1"], - snarl: ["1L1"], - snore: ["1L1"], - stomp: ["1L1"], - stompingtantrum: ["1L1"], - substitute: ["1L1"], - swift: ["1L1"], - tackle: ["1L1"], - tailwhip: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thrash: ["1L1"], - uproar: ["1L1"], - willowisp: ["1L1"], - }, - eventData: [ - {generation: 8, level: 75, moves: ["1L1"]}, - ], - eventOnly: false, - }, - calyrex: { - learnset: { - agility: ["1L1"], - allyswitch: ["1L1"], - aromatherapy: ["1L1"], - batonpass: ["1L1"], - bodypress: ["1L1"], - bulletseed: ["1L1"], - calmmind: ["1L1"], - confusion: ["1L1"], - drainingkiss: ["1L1"], - encore: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - expandingforce: ["1L1"], - facade: ["1L1"], - futuresight: ["1L1"], - gigadrain: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - grassyterrain: ["1L1"], - gravity: ["1L1"], - growth: ["1L1"], - guardswap: ["1L1"], - healpulse: ["1L1"], - helpinghand: ["1L1"], - hyperbeam: ["1L1"], - imprison: ["1L1"], - leafstorm: ["1L1"], - leechseed: ["1L1"], - lifedew: ["1L1"], - lightscreen: ["1L1"], - magicalleaf: ["1L1"], - magicroom: ["1L1"], - megadrain: ["1L1"], - metronome: ["1L1"], - mudshot: ["1L1"], - payday: ["1L1"], - pollenpuff: ["1L1"], - pound: ["1L1"], - powerswap: ["1L1"], - protect: ["1L1"], - psybeam: ["1L1"], - psychic: ["1L1"], - psychicterrain: ["1L1"], - psychup: ["1L1"], - psyshock: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - scaryface: ["1L1"], - seedbomb: ["1L1"], - skillswap: ["1L1"], - sleeptalk: ["1L1"], - snarl: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - solarblade: ["1L1"], - speedswap: ["1L1"], - storedpower: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swift: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - triattack: ["1L1"], - trick: ["1L1"], - trickroom: ["1L1"], - wonderroom: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 8, level: 80, moves: ["1L1"]}, - ], - eventOnly: false, - }, - calyrexice: { - learnset: { - agility: ["1L1"], - allyswitch: ["1L1"], - aromatherapy: ["1L1"], - assurance: ["1L1"], - avalanche: ["1L1"], - batonpass: ["1L1"], - blizzard: ["1L1"], - bodypress: ["1L1"], - bodyslam: ["1L1"], - bulldoze: ["1L1"], - bulletseed: ["1L1"], - calmmind: ["1L1"], - closecombat: ["1L1"], - confusion: ["1L1"], - crunch: ["1L1"], - curse: ["1L1"], - doubleedge: ["1L1"], - doublekick: ["1L1"], - drainingkiss: ["1L1"], - encore: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - expandingforce: ["1L1"], - facade: ["1L1"], - futuresight: ["1L1"], - gigadrain: ["1L1"], - gigaimpact: ["1L1"], - glaciallance: ["1L1"], - grassknot: ["1L1"], - grassyterrain: ["1L1"], - gravity: ["1L1"], - growth: ["1L1"], - guardswap: ["1L1"], - hail: ["1L1"], - healpulse: ["1L1"], - heavyslam: ["1L1"], - helpinghand: ["1L1"], - highhorsepower: ["1L1"], - hyperbeam: ["1L1"], - icebeam: ["1L1"], - iciclecrash: ["1L1"], - iciclespear: ["1L1"], - icywind: ["1L1"], - imprison: ["1L1"], - irondefense: ["1L1"], - lashout: ["1L1"], - leafstorm: ["1L1"], - leechseed: ["1L1"], - lifedew: ["1L1"], - lightscreen: ["1L1"], - magicalleaf: ["1L1"], - magicroom: ["1L1"], - megadrain: ["1L1"], - megahorn: ["1L1"], - metronome: ["1L1"], - mist: ["1L1"], - mudshot: ["1L1"], - outrage: ["1L1"], - payback: ["1L1"], - payday: ["1L1"], - pollenpuff: ["1L1"], - pound: ["1L1"], - powerswap: ["1L1"], - protect: ["1L1"], - psybeam: ["1L1"], - psychic: ["1L1"], - psychicterrain: ["1L1"], - psychup: ["1L1"], - psyshock: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - roar: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - scaryface: ["1L1"], - seedbomb: ["1L1"], - skillswap: ["1L1"], - sleeptalk: ["1L1"], - smartstrike: ["1L1"], - snarl: ["1L1"], - snore: ["1L1"], - snowscape: ["1L1"], - solarbeam: ["1L1"], - solarblade: ["1L1"], - speedswap: ["1L1"], - stomp: ["1L1"], - stompingtantrum: ["1L1"], - storedpower: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - superpower: ["1L1"], - swift: ["1L1"], - swordsdance: ["1L1"], - tackle: ["1L1"], - tailwhip: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thrash: ["1L1"], - throatchop: ["1L1"], - torment: ["1L1"], - trailblaze: ["1L1"], - triattack: ["1L1"], - trick: ["1L1"], - trickroom: ["1L1"], - uproar: ["1L1"], - wonderroom: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 8, level: 80, moves: ["1L1"]}, - ], - eventOnly: false, - }, - calyrexshadow: { - learnset: { - agility: ["1L1"], - allyswitch: ["1L1"], - aromatherapy: ["1L1"], - assurance: ["1L1"], - astralbarrage: ["1L1"], - batonpass: ["1L1"], - bodyslam: ["1L1"], - bulldoze: ["1L1"], - bulletseed: ["1L1"], - calmmind: ["1L1"], - confuseray: ["1L1"], - confusion: ["1L1"], - crunch: ["1L1"], - curse: ["1L1"], - darkpulse: ["1L1"], - disable: ["1L1"], - doubleedge: ["1L1"], - doublekick: ["1L1"], - drainingkiss: ["1L1"], - encore: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - expandingforce: ["1L1"], - facade: ["1L1"], - foulplay: ["1L1"], - futuresight: ["1L1"], - gigadrain: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - grassyterrain: ["1L1"], - gravity: ["1L1"], - growth: ["1L1"], - guardswap: ["1L1"], - haze: ["1L1"], - healpulse: ["1L1"], - helpinghand: ["1L1"], - hex: ["1L1"], - hyperbeam: ["1L1"], - imprison: ["1L1"], - lashout: ["1L1"], - leafstorm: ["1L1"], - leechseed: ["1L1"], - lifedew: ["1L1"], - lightscreen: ["1L1"], - magicalleaf: ["1L1"], - magicroom: ["1L1"], - megadrain: ["1L1"], - metronome: ["1L1"], - mudshot: ["1L1"], - nastyplot: ["1L1"], - nightshade: ["1L1"], - painsplit: ["1L1"], - payback: ["1L1"], - payday: ["1L1"], - phantomforce: ["1L1"], - pollenpuff: ["1L1"], - pound: ["1L1"], - powerswap: ["1L1"], - protect: ["1L1"], - psybeam: ["1L1"], - psychic: ["1L1"], - psychicterrain: ["1L1"], - psychocut: ["1L1"], - psychup: ["1L1"], - psyshock: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - scaryface: ["1L1"], - seedbomb: ["1L1"], - shadowball: ["1L1"], - skillswap: ["1L1"], - sleeptalk: ["1L1"], - snarl: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - solarblade: ["1L1"], - speedswap: ["1L1"], - stomp: ["1L1"], - stompingtantrum: ["1L1"], - storedpower: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swift: ["1L1"], - tackle: ["1L1"], - tailwhip: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thrash: ["1L1"], - triattack: ["1L1"], - trick: ["1L1"], - trickroom: ["1L1"], - uproar: ["1L1"], - willowisp: ["1L1"], - wonderroom: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 8, level: 80, moves: ["1L1"]}, - ], - eventOnly: false, - }, - enamorus: { - learnset: { - agility: ["1L1"], - alluringvoice: ["1L1"], - astonish: ["1L1"], - bodyslam: ["1L1"], - calmmind: ["1L1"], - dazzlinggleam: ["1L1"], - disarmingvoice: ["1L1"], - drainingkiss: ["1L1"], - earthpower: ["1L1"], - endure: ["1L1"], - extrasensory: ["1L1"], - facade: ["1L1"], - fairywind: ["1L1"], - flatter: ["1L1"], - fly: ["1L1"], - focusblast: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - grassyterrain: ["1L1"], - healingwish: ["1L1"], - hyperbeam: ["1L1"], - imprison: ["1L1"], - irondefense: ["1L1"], - ironhead: ["1L1"], - mistyexplosion: ["1L1"], - mistyterrain: ["1L1"], - moonblast: ["1L1"], - mysticalfire: ["1L1"], - outrage: ["1L1"], - playrough: ["1L1"], - protect: ["1L1"], - psychic: ["1L1"], - psychup: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - scaryface: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - springtidestorm: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - superpower: ["1L1"], - tailwind: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - torment: ["1L1"], - twister: ["1L1"], - uproar: ["1L1"], - weatherball: ["1L1"], - zenheadbutt: ["1L1"], - }, - }, - enamorustherian: { - learnset: { - agility: ["1L1"], - alluringvoice: ["1L1"], - astonish: ["1L1"], - bodyslam: ["1L1"], - calmmind: ["1L1"], - dazzlinggleam: ["1L1"], - disarmingvoice: ["1L1"], - drainingkiss: ["1L1"], - earthpower: ["1L1"], - endure: ["1L1"], - extrasensory: ["1L1"], - facade: ["1L1"], - fairywind: ["1L1"], - flatter: ["1L1"], - fly: ["1L1"], - focusblast: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - grassyterrain: ["1L1"], - healingwish: ["1L1"], - hyperbeam: ["1L1"], - imprison: ["1L1"], - irondefense: ["1L1"], - ironhead: ["1L1"], - mistyexplosion: ["1L1"], - mistyterrain: ["1L1"], - moonblast: ["1L1"], - mysticalfire: ["1L1"], - outrage: ["1L1"], - playrough: ["1L1"], - protect: ["1L1"], - psychic: ["1L1"], - psychup: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - scaryface: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - springtidestorm: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - superpower: ["1L1"], - tailwind: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - torment: ["1L1"], - twister: ["1L1"], - uproar: ["1L1"], - weatherball: ["1L1"], - zenheadbutt: ["1L1"], - }, - }, - sprigatito: { - learnset: { - acrobatics: ["1L1"], - agility: ["1L1"], - allyswitch: ["1L1"], - bite: ["1L1"], - bulletseed: ["1L1"], - charm: ["1L1"], - copycat: ["1L1"], - disarmingvoice: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - faketears: ["1L1"], - gigadrain: ["1L1"], - grassknot: ["1L1"], - grasspledge: ["1L1"], - grassyglide: ["1L1"], - grassyterrain: ["1L1"], - helpinghand: ["1L1"], - honeclaws: ["1L1"], - leafage: ["1L1"], - leafstorm: ["1L1"], - leechseed: ["1L1"], - magicalleaf: ["1L1"], - mudslap: ["1L1"], - nastyplot: ["1L1"], - petalblizzard: ["1L1"], - playrough: ["1L1"], - protect: ["1L1"], - quickattack: ["1L1"], - rest: ["1L1"], - scratch: ["1L1"], - seedbomb: ["1L1"], - shadowclaw: ["1L1"], - slash: ["1L1"], - sleeptalk: ["1L1"], - solarbeam: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - swift: ["1L1"], - tailwhip: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - trailblaze: ["1L1"], - uturn: ["1L1"], - worryseed: ["1L1"], - }, - }, - floragato: { - learnset: { - acrobatics: ["1L1"], - aerialace: ["1L1"], - agility: ["1L1"], - bite: ["1L1"], - bulletseed: ["1L1"], - charm: ["1L1"], - disarmingvoice: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - faketears: ["1L1"], - fling: ["1L1"], - gigadrain: ["1L1"], - grassknot: ["1L1"], - grasspledge: ["1L1"], - grassyglide: ["1L1"], - grassyterrain: ["1L1"], - helpinghand: ["1L1"], - honeclaws: ["1L1"], - leafage: ["1L1"], - leafstorm: ["1L1"], - lowkick: ["1L1"], - lowsweep: ["1L1"], - magicalleaf: ["1L1"], - mudslap: ["1L1"], - nastyplot: ["1L1"], - petalblizzard: ["1L1"], - playrough: ["1L1"], - protect: ["1L1"], - quickattack: ["1L1"], - rest: ["1L1"], - scratch: ["1L1"], - seedbomb: ["1L1"], - shadowclaw: ["1L1"], - slash: ["1L1"], - sleeptalk: ["1L1"], - solarbeam: ["1L1"], - substitute: ["1L1"], - swift: ["1L1"], - tailwhip: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thunderpunch: ["1L1"], - trailblaze: ["1L1"], - uturn: ["1L1"], - worryseed: ["1L1"], - }, - }, - meowscarada: { - learnset: { - acrobatics: ["1L1"], - aerialace: ["1L1"], - agility: ["1L1"], - aurasphere: ["1L1"], - bite: ["1L1"], - brickbreak: ["1L1"], - bulletseed: ["1L1"], - charm: ["1L1"], - chillingwater: ["1L1"], - darkpulse: ["1L1"], - disarmingvoice: ["1L1"], - doubleteam: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - faketears: ["1L1"], - fling: ["1L1"], - flowertrick: ["1L1"], - foulplay: ["1L1"], - frenzyplant: ["1L1"], - gigadrain: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - grasspledge: ["1L1"], - grassyglide: ["1L1"], - grassyterrain: ["1L1"], - helpinghand: ["1L1"], - honeclaws: ["1L1"], - hyperbeam: ["1L1"], - knockoff: ["1L1"], - lashout: ["1L1"], - leafage: ["1L1"], - leafstorm: ["1L1"], - lowkick: ["1L1"], - lowsweep: ["1L1"], - magicalleaf: ["1L1"], - mudslap: ["1L1"], - nastyplot: ["1L1"], - nightslash: ["1L1"], - petalblizzard: ["1L1"], - playrough: ["1L1"], - pollenpuff: ["1L1"], - powergem: ["1L1"], - protect: ["1L1"], - psychup: ["1L1"], - quickattack: ["1L1"], - rest: ["1L1"], - scratch: ["1L1"], - seedbomb: ["1L1"], - shadowball: ["1L1"], - shadowclaw: ["1L1"], - skillswap: ["1L1"], - slash: ["1L1"], - sleeptalk: ["1L1"], - solarbeam: ["1L1"], - spikes: ["1L1"], - substitute: ["1L1"], - swift: ["1L1"], - tailwhip: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - throatchop: ["1L1"], - thunderpunch: ["1L1"], - toxicspikes: ["1L1"], - trailblaze: ["1L1"], - trick: ["1L1"], - trickroom: ["1L1"], - tripleaxel: ["1L1"], - uturn: ["1L1"], - worryseed: ["1L1"], - }, - }, - fuecoco: { - learnset: { - belch: ["1L1"], - bite: ["1L1"], - bodyslam: ["1L1"], - crunch: ["1L1"], - curse: ["1L1"], - dig: ["1L1"], - disarmingvoice: ["1L1"], - ember: ["1L1"], - encore: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fireblast: ["1L1"], - firefang: ["1L1"], - firepledge: ["1L1"], - firespin: ["1L1"], - flamecharge: ["1L1"], - flamethrower: ["1L1"], - flareblitz: ["1L1"], - heatwave: ["1L1"], - helpinghand: ["1L1"], - hypervoice: ["1L1"], - incinerate: ["1L1"], - leer: ["1L1"], - mudslap: ["1L1"], - outrage: ["1L1"], - overheat: ["1L1"], - protect: ["1L1"], - rest: ["1L1"], - roar: ["1L1"], - round: ["1L1"], - seedbomb: ["1L1"], - slackoff: ["1L1"], - sleeptalk: ["1L1"], - snarl: ["1L1"], - stompingtantrum: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - temperflare: ["1L1"], - terablast: ["1L1"], - thunderfang: ["1L1"], - willowisp: ["1L1"], - yawn: ["1L1"], - zenheadbutt: ["1L1"], - }, - }, - crocalor: { - learnset: { - bite: ["1L1"], - bodyslam: ["1L1"], - crunch: ["1L1"], - curse: ["1L1"], - dig: ["1L1"], - disarmingvoice: ["1L1"], - ember: ["1L1"], - encore: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fireblast: ["1L1"], - firefang: ["1L1"], - firepledge: ["1L1"], - firespin: ["1L1"], - flamecharge: ["1L1"], - flamethrower: ["1L1"], - flareblitz: ["1L1"], - heatwave: ["1L1"], - helpinghand: ["1L1"], - hypervoice: ["1L1"], - incinerate: ["1L1"], - leer: ["1L1"], - lick: ["1L1"], - mudslap: ["1L1"], - outrage: ["1L1"], - overheat: ["1L1"], - protect: ["1L1"], - rest: ["1L1"], - roar: ["1L1"], - round: ["1L1"], - seedbomb: ["1L1"], - sleeptalk: ["1L1"], - snarl: ["1L1"], - stompingtantrum: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - temperflare: ["1L1"], - terablast: ["1L1"], - thunderfang: ["1L1"], - willowisp: ["1L1"], - yawn: ["1L1"], - zenheadbutt: ["1L1"], - }, - }, - skeledirge: { - learnset: { - alluringvoice: ["1L1"], - bite: ["1L1"], - blastburn: ["1L1"], - bodyslam: ["1L1"], - crunch: ["1L1"], - curse: ["1L1"], - dig: ["1L1"], - disarmingvoice: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - ember: ["1L1"], - encore: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fireblast: ["1L1"], - firefang: ["1L1"], - firepledge: ["1L1"], - firespin: ["1L1"], - flamecharge: ["1L1"], - flamethrower: ["1L1"], - flareblitz: ["1L1"], - gigaimpact: ["1L1"], - heatcrash: ["1L1"], - heatwave: ["1L1"], - helpinghand: ["1L1"], - hex: ["1L1"], - hyperbeam: ["1L1"], - hypervoice: ["1L1"], - imprison: ["1L1"], - incinerate: ["1L1"], - leer: ["1L1"], - lick: ["1L1"], - mudslap: ["1L1"], - nightshade: ["1L1"], - outrage: ["1L1"], - overheat: ["1L1"], - poltergeist: ["1L1"], - protect: ["1L1"], - rest: ["1L1"], - roar: ["1L1"], - round: ["1L1"], - scaryface: ["1L1"], - scorchingsands: ["1L1"], - seedbomb: ["1L1"], - shadowball: ["1L1"], - shadowclaw: ["1L1"], - sing: ["1L1"], - sleeptalk: ["1L1"], - snarl: ["1L1"], - solarbeam: ["1L1"], - stompingtantrum: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - temperflare: ["1L1"], - terablast: ["1L1"], - thunderfang: ["1L1"], - torchsong: ["1L1"], - willowisp: ["1L1"], - yawn: ["1L1"], - zenheadbutt: ["1L1"], - }, - }, - quaxly: { - learnset: { - acrobatics: ["1L1"], - aerialace: ["1L1"], - aircutter: ["1L1"], - airslash: ["1L1"], - aquacutter: ["1L1"], - aquajet: ["1L1"], - batonpass: ["1L1"], - bravebird: ["1L1"], - chillingwater: ["1L1"], - detect: ["1L1"], - disarmingvoice: ["1L1"], - doublehit: ["1L1"], - encore: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - focusenergy: ["1L1"], - growl: ["1L1"], - helpinghand: ["1L1"], - hydropump: ["1L1"], - lastresort: ["1L1"], - liquidation: ["1L1"], - lowkick: ["1L1"], - mistyterrain: ["1L1"], - pound: ["1L1"], - protect: ["1L1"], - psychup: ["1L1"], - raindance: ["1L1"], - rapidspin: ["1L1"], - rest: ["1L1"], - roost: ["1L1"], - sleeptalk: ["1L1"], - substitute: ["1L1"], - surf: ["1L1"], - swift: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - watergun: ["1L1"], - waterpledge: ["1L1"], - whirlpool: ["1L1"], - wingattack: ["1L1"], - workup: ["1L1"], - }, - }, - quaxwell: { - learnset: { - acrobatics: ["1L1"], - aerialace: ["1L1"], - aircutter: ["1L1"], - airslash: ["1L1"], - aquacutter: ["1L1"], - aquajet: ["1L1"], - batonpass: ["1L1"], - bravebird: ["1L1"], - chillingwater: ["1L1"], - disarmingvoice: ["1L1"], - doublehit: ["1L1"], - encore: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - featherdance: ["1L1"], - flipturn: ["1L1"], - focusenergy: ["1L1"], - growl: ["1L1"], - helpinghand: ["1L1"], - hydropump: ["1L1"], - liquidation: ["1L1"], - lowkick: ["1L1"], - lowsweep: ["1L1"], - mistyterrain: ["1L1"], - pound: ["1L1"], - protect: ["1L1"], - psychup: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - sleeptalk: ["1L1"], - substitute: ["1L1"], - surf: ["1L1"], - swift: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - tripleaxel: ["1L1"], - watergun: ["1L1"], - waterpledge: ["1L1"], - waterpulse: ["1L1"], - whirlpool: ["1L1"], - wingattack: ["1L1"], - workup: ["1L1"], - }, - }, - quaquaval: { - learnset: { - acrobatics: ["1L1"], - aerialace: ["1L1"], - agility: ["1L1"], - aircutter: ["1L1"], - airslash: ["1L1"], - aquacutter: ["1L1"], - aquajet: ["1L1"], - aquastep: ["1L1"], - batonpass: ["1L1"], - bravebird: ["1L1"], - brickbreak: ["1L1"], - bulkup: ["1L1"], - chillingwater: ["1L1"], - closecombat: ["1L1"], - coaching: ["1L1"], - counter: ["1L1"], - disarmingvoice: ["1L1"], - doublehit: ["1L1"], - encore: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - featherdance: ["1L1"], - fling: ["1L1"], - flipturn: ["1L1"], - focusenergy: ["1L1"], - gigaimpact: ["1L1"], - growl: ["1L1"], - helpinghand: ["1L1"], - hurricane: ["1L1"], - hydrocannon: ["1L1"], - hydropump: ["1L1"], - hyperbeam: ["1L1"], - icespinner: ["1L1"], - icywind: ["1L1"], - knockoff: ["1L1"], - liquidation: ["1L1"], - lowkick: ["1L1"], - lowsweep: ["1L1"], - megakick: ["1L1"], - mistyterrain: ["1L1"], - pound: ["1L1"], - protect: ["1L1"], - psychup: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - reversal: ["1L1"], - sleeptalk: ["1L1"], - substitute: ["1L1"], - surf: ["1L1"], - swift: ["1L1"], - swordsdance: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - tripleaxel: ["1L1"], - upperhand: ["1L1"], - uturn: ["1L1"], - watergun: ["1L1"], - waterpledge: ["1L1"], - waterpulse: ["1L1"], - wavecrash: ["1L1"], - whirlpool: ["1L1"], - wingattack: ["1L1"], - workup: ["1L1"], - }, - }, - lechonk: { - learnset: { - bodyslam: ["1L1"], - bulldoze: ["1L1"], - bulletseed: ["1L1"], - chillingwater: ["1L1"], - covet: ["1L1"], - curse: ["1L1"], - dig: ["1L1"], - disarmingvoice: ["1L1"], - doubleedge: ["1L1"], - echoedvoice: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hypervoice: ["1L1"], - ironhead: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - playrough: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - seedbomb: ["1L1"], - sleeptalk: ["1L1"], - spitup: ["1L1"], - stockpile: ["1L1"], - stuffcheeks: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - superfang: ["1L1"], - swallow: ["1L1"], - tackle: ["1L1"], - tailwhip: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - trailblaze: ["1L1"], - uproar: ["1L1"], - workup: ["1L1"], - yawn: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 9, level: 15, gender: "M", isHidden: true, moves: ["1L1"], pokeball: "cherishball"}, - ], - }, - oinkologne: { - learnset: { - belch: ["1L1"], - bodypress: ["1L1"], - bodyslam: ["1L1"], - bulldoze: ["1L1"], - bulletseed: ["1L1"], - chillingwater: ["1L1"], - covet: ["1L1"], - curse: ["1L1"], - dig: ["1L1"], - disarmingvoice: ["1L1"], - doubleedge: ["1L1"], - earthpower: ["1L1"], - echoedvoice: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - gigaimpact: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - highhorsepower: ["1L1"], - hyperbeam: ["1L1"], - hypervoice: ["1L1"], - ironhead: ["1L1"], - lashout: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - playrough: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - seedbomb: ["1L1"], - sleeptalk: ["1L1"], - stompingtantrum: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - superfang: ["1L1"], - tackle: ["1L1"], - tailwhip: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - trailblaze: ["1L1"], - uproar: ["1L1"], - workup: ["1L1"], - yawn: ["1L1"], - zenheadbutt: ["1L1"], - }, - }, - oinkolognef: { - learnset: { - belch: ["1L1"], - bodypress: ["1L1"], - bodyslam: ["1L1"], - bulldoze: ["1L1"], - bulletseed: ["1L1"], - chillingwater: ["1L1"], - covet: ["1L1"], - curse: ["1L1"], - dig: ["1L1"], - disarmingvoice: ["1L1"], - doubleedge: ["1L1"], - earthpower: ["1L1"], - echoedvoice: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - gigaimpact: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - highhorsepower: ["1L1"], - hyperbeam: ["1L1"], - hypervoice: ["1L1"], - ironhead: ["1L1"], - lashout: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - playrough: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - seedbomb: ["1L1"], - sleeptalk: ["1L1"], - stompingtantrum: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - superfang: ["1L1"], - tackle: ["1L1"], - tailwhip: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - trailblaze: ["1L1"], - uproar: ["1L1"], - workup: ["1L1"], - yawn: ["1L1"], - zenheadbutt: ["1L1"], - }, - }, - tarountula: { - learnset: { - assurance: ["1L1"], - block: ["1L1"], - bodyslam: ["1L1"], - bugbite: ["1L1"], - bugbuzz: ["1L1"], - bulletseed: ["1L1"], - circlethrow: ["1L1"], - counter: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - falseswipe: ["1L1"], - feint: ["1L1"], - firstimpression: ["1L1"], - gastroacid: ["1L1"], - gigadrain: ["1L1"], - grassknot: ["1L1"], - headbutt: ["1L1"], - knockoff: ["1L1"], - leechlife: ["1L1"], - lunge: ["1L1"], - memento: ["1L1"], - poisonjab: ["1L1"], - pounce: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - shadowclaw: ["1L1"], - skittersmack: ["1L1"], - sleeptalk: ["1L1"], - spikes: ["1L1"], - stickyweb: ["1L1"], - stringshot: ["1L1"], - strugglebug: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - sunnyday: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - throatchop: ["1L1"], - toxicspikes: ["1L1"], - trailblaze: ["1L1"], - xscissor: ["1L1"], - }, - }, - spidops: { - learnset: { - aerialace: ["1L1"], - assurance: ["1L1"], - block: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - bugbite: ["1L1"], - bugbuzz: ["1L1"], - bulletseed: ["1L1"], - circlethrow: ["1L1"], - counter: ["1L1"], - electroweb: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - falseswipe: ["1L1"], - feint: ["1L1"], - fling: ["1L1"], - gastroacid: ["1L1"], - gigadrain: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - headbutt: ["1L1"], - knockoff: ["1L1"], - leechlife: ["1L1"], - lowkick: ["1L1"], - lunge: ["1L1"], - painsplit: ["1L1"], - poisonjab: ["1L1"], - pounce: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - reversal: ["1L1"], - rocktomb: ["1L1"], - scaryface: ["1L1"], - shadowclaw: ["1L1"], - silktrap: ["1L1"], - skittersmack: ["1L1"], - sleeptalk: ["1L1"], - spikes: ["1L1"], - stickyweb: ["1L1"], - stringshot: ["1L1"], - strugglebug: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - throatchop: ["1L1"], - toxicspikes: ["1L1"], - trailblaze: ["1L1"], - upperhand: ["1L1"], - uturn: ["1L1"], - xscissor: ["1L1"], - }, - }, - nymble: { - learnset: { - agility: ["1L1"], - assurance: ["1L1"], - astonish: ["1L1"], - bugbite: ["1L1"], - bugbuzz: ["1L1"], - counter: ["1L1"], - doublekick: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - feint: ["1L1"], - firstimpression: ["1L1"], - leechlife: ["1L1"], - leer: ["1L1"], - pounce: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - screech: ["1L1"], - skittersmack: ["1L1"], - sleeptalk: ["1L1"], - strugglebug: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - sunnyday: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - trailblaze: ["1L1"], - uturn: ["1L1"], - xscissor: ["1L1"], - }, - }, - lokix: { - learnset: { - aerialace: ["1L1"], - agility: ["1L1"], - assurance: ["1L1"], - astonish: ["1L1"], - axekick: ["1L1"], - bounce: ["1L1"], - brickbreak: ["1L1"], - bugbite: ["1L1"], - bugbuzz: ["1L1"], - darkpulse: ["1L1"], - detect: ["1L1"], - doubleedge: ["1L1"], - doublekick: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - feint: ["1L1"], - firstimpression: ["1L1"], - fling: ["1L1"], - gigaimpact: ["1L1"], - knockoff: ["1L1"], - lashout: ["1L1"], - leechlife: ["1L1"], - leer: ["1L1"], - lowkick: ["1L1"], - lowsweep: ["1L1"], - lunge: ["1L1"], - pounce: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - reversal: ["1L1"], - scaryface: ["1L1"], - screech: ["1L1"], - skittersmack: ["1L1"], - sleeptalk: ["1L1"], - spite: ["1L1"], - strugglebug: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - sunnyday: ["1L1"], - swordsdance: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - throatchop: ["1L1"], - trailblaze: ["1L1"], - uturn: ["1L1"], - xscissor: ["1L1"], - }, - }, - rellor: { - learnset: { - bugbite: ["1L1"], - bugbuzz: ["1L1"], - cosmicpower: ["1L1"], - defensecurl: ["1L1"], - dig: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fling: ["1L1"], - gunkshot: ["1L1"], - irondefense: ["1L1"], - leechlife: ["1L1"], - lunge: ["1L1"], - memento: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - pounce: ["1L1"], - protect: ["1L1"], - recover: ["1L1"], - rest: ["1L1"], - rocktomb: ["1L1"], - rollout: ["1L1"], - sandattack: ["1L1"], - skittersmack: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - strugglebug: ["1L1"], - substitute: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - weatherball: ["1L1"], - xscissor: ["1L1"], - }, - }, - rabsca: { - learnset: { - bugbite: ["1L1"], - bugbuzz: ["1L1"], - calmmind: ["1L1"], - confuseray: ["1L1"], - confusion: ["1L1"], - dazzlinggleam: ["1L1"], - defensecurl: ["1L1"], - dig: ["1L1"], - earthpower: ["1L1"], - electroball: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - expandingforce: ["1L1"], - extrasensory: ["1L1"], - facade: ["1L1"], - fling: ["1L1"], - futuresight: ["1L1"], - gigaimpact: ["1L1"], - gravity: ["1L1"], - guardswap: ["1L1"], - gunkshot: ["1L1"], - hyperbeam: ["1L1"], - imprison: ["1L1"], - irondefense: ["1L1"], - leechlife: ["1L1"], - lightscreen: ["1L1"], - lunge: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - poltergeist: ["1L1"], - pounce: ["1L1"], - powergem: ["1L1"], - powerswap: ["1L1"], - protect: ["1L1"], - psybeam: ["1L1"], - psychic: ["1L1"], - psychicnoise: ["1L1"], - psychicterrain: ["1L1"], - psychup: ["1L1"], - psyshock: ["1L1"], - raindance: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - revivalblessing: ["1L1"], - rocktomb: ["1L1"], - rollout: ["1L1"], - safeguard: ["1L1"], - sandattack: ["1L1"], - sandstorm: ["1L1"], - shadowball: ["1L1"], - skillswap: ["1L1"], - skittersmack: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - speedswap: ["1L1"], - storedpower: ["1L1"], - strugglebug: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - trick: ["1L1"], - trickroom: ["1L1"], - weatherball: ["1L1"], - xscissor: ["1L1"], - zenheadbutt: ["1L1"], - }, - }, - greavard: { - learnset: { - allyswitch: ["1L1"], - bite: ["1L1"], - bulldoze: ["1L1"], - charm: ["1L1"], - confuseray: ["1L1"], - crunch: ["1L1"], - destinybond: ["1L1"], - dig: ["1L1"], - disable: ["1L1"], - doubleedge: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - firefang: ["1L1"], - growl: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hex: ["1L1"], - howl: ["1L1"], - icefang: ["1L1"], - lick: ["1L1"], - memento: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - nightshade: ["1L1"], - painsplit: ["1L1"], - phantomforce: ["1L1"], - playrough: ["1L1"], - poltergeist: ["1L1"], - protect: ["1L1"], - psychicfangs: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - roar: ["1L1"], - sandstorm: ["1L1"], - scaryface: ["1L1"], - shadowball: ["1L1"], - shadowsneak: ["1L1"], - sleeptalk: ["1L1"], - snarl: ["1L1"], - stompingtantrum: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - tackle: ["1L1"], - tailwhip: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thunderfang: ["1L1"], - trick: ["1L1"], - uproar: ["1L1"], - yawn: ["1L1"], - }, - }, - houndstone: { - learnset: { - bite: ["1L1"], - bodypress: ["1L1"], - bulldoze: ["1L1"], - charm: ["1L1"], - confuseray: ["1L1"], - crunch: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - firefang: ["1L1"], - gigaimpact: ["1L1"], - growl: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hex: ["1L1"], - hyperbeam: ["1L1"], - icefang: ["1L1"], - lastrespects: ["1L1"], - lick: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - nightshade: ["1L1"], - painsplit: ["1L1"], - phantomforce: ["1L1"], - playrough: ["1L1"], - poltergeist: ["1L1"], - protect: ["1L1"], - psychicfangs: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - roar: ["1L1"], - sandstorm: ["1L1"], - scaryface: ["1L1"], - shadowball: ["1L1"], - sleeptalk: ["1L1"], - snarl: ["1L1"], - stompingtantrum: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - tackle: ["1L1"], - tailwhip: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thunderfang: ["1L1"], - trick: ["1L1"], - uproar: ["1L1"], - willowisp: ["1L1"], - }, - }, - flittle: { - learnset: { - agility: ["1L1"], - allyswitch: ["1L1"], - babydolleyes: ["1L1"], - batonpass: ["1L1"], - calmmind: ["1L1"], - confuseray: ["1L1"], - confusion: ["1L1"], - disarmingvoice: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - foulplay: ["1L1"], - growl: ["1L1"], - helpinghand: ["1L1"], - hypnosis: ["1L1"], - lightscreen: ["1L1"], - mudslap: ["1L1"], - peck: ["1L1"], - pluck: ["1L1"], - pounce: ["1L1"], - protect: ["1L1"], - psybeam: ["1L1"], - psychic: ["1L1"], - psychicterrain: ["1L1"], - psyshock: ["1L1"], - quickattack: ["1L1"], - raindance: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - roost: ["1L1"], - sandstorm: ["1L1"], - seedbomb: ["1L1"], - skillswap: ["1L1"], - sleeptalk: ["1L1"], - storedpower: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swift: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - trick: ["1L1"], - trickroom: ["1L1"], - uproar: ["1L1"], - uturn: ["1L1"], - zenheadbutt: ["1L1"], - }, - }, - espathra: { - learnset: { - aerialace: ["1L1"], - agility: ["1L1"], - babydolleyes: ["1L1"], - batonpass: ["1L1"], - bodyslam: ["1L1"], - bravebird: ["1L1"], - calmmind: ["1L1"], - confuseray: ["1L1"], - confusion: ["1L1"], - dazzlinggleam: ["1L1"], - disarmingvoice: ["1L1"], - doubleedge: ["1L1"], - drillpeck: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - expandingforce: ["1L1"], - facade: ["1L1"], - featherdance: ["1L1"], - flashcannon: ["1L1"], - foulplay: ["1L1"], - gigaimpact: ["1L1"], - growl: ["1L1"], - helpinghand: ["1L1"], - hex: ["1L1"], - hyperbeam: ["1L1"], - hypervoice: ["1L1"], - lastresort: ["1L1"], - lightscreen: ["1L1"], - lowkick: ["1L1"], - luminacrash: ["1L1"], - mudslap: ["1L1"], - nightshade: ["1L1"], - peck: ["1L1"], - pluck: ["1L1"], - pounce: ["1L1"], - protect: ["1L1"], - psybeam: ["1L1"], - psychic: ["1L1"], - psychicterrain: ["1L1"], - psychup: ["1L1"], - psyshock: ["1L1"], - quickattack: ["1L1"], - raindance: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - sandstorm: ["1L1"], - seedbomb: ["1L1"], - shadowball: ["1L1"], - skillswap: ["1L1"], - sleeptalk: ["1L1"], - storedpower: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swift: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - trick: ["1L1"], - trickroom: ["1L1"], - uproar: ["1L1"], - uturn: ["1L1"], - zenheadbutt: ["1L1"], - }, - }, - farigiraf: { - learnset: { - agility: ["1L1"], - amnesia: ["1L1"], - assurance: ["1L1"], - astonish: ["1L1"], - batonpass: ["1L1"], - bodyslam: ["1L1"], - bulldoze: ["1L1"], - calmmind: ["1L1"], - chargebeam: ["1L1"], - confuseray: ["1L1"], - confusion: ["1L1"], - crunch: ["1L1"], - curse: ["1L1"], - dazzlinggleam: ["1L1"], - doubleedge: ["1L1"], - doublehit: ["1L1"], - earthquake: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - expandingforce: ["1L1"], - facade: ["1L1"], - foulplay: ["1L1"], - futuresight: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - gravity: ["1L1"], - growl: ["1L1"], - guardswap: ["1L1"], - helpinghand: ["1L1"], - highhorsepower: ["1L1"], - hyperbeam: ["1L1"], - hypervoice: ["1L1"], - imprison: ["1L1"], - ironhead: ["1L1"], - lightscreen: ["1L1"], - lowkick: ["1L1"], - nastyplot: ["1L1"], - nightshade: ["1L1"], - powerswap: ["1L1"], - protect: ["1L1"], - psybeam: ["1L1"], - psychic: ["1L1"], - psychicfangs: ["1L1"], - psychicnoise: ["1L1"], - psychicterrain: ["1L1"], - psychup: ["1L1"], - psyshock: ["1L1"], - raindance: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - roar: ["1L1"], - shadowball: ["1L1"], - skillswap: ["1L1"], - sleeptalk: ["1L1"], - stomp: ["1L1"], - stompingtantrum: ["1L1"], - storedpower: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swift: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderwave: ["1L1"], - trailblaze: ["1L1"], - trick: ["1L1"], - trickroom: ["1L1"], - twinbeam: ["1L1"], - uproar: ["1L1"], - zenheadbutt: ["1L1"], - }, - }, - wiglett: { - learnset: { - agility: ["1L1"], - aquajet: ["1L1"], - blizzard: ["1L1"], - bulldoze: ["1L1"], - chillingwater: ["1L1"], - dig: ["1L1"], - earthpower: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - finalgambit: ["1L1"], - foulplay: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hydropump: ["1L1"], - icebeam: ["1L1"], - liquidation: ["1L1"], - memento: ["1L1"], - muddywater: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - sandattack: ["1L1"], - sandstorm: ["1L1"], - slam: ["1L1"], - sleeptalk: ["1L1"], - stompingtantrum: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - surf: ["1L1"], - swift: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - throatchop: ["1L1"], - watergun: ["1L1"], - waterpulse: ["1L1"], - whirlpool: ["1L1"], - wrap: ["1L1"], - }, - }, - wugtrio: { - learnset: { - agility: ["1L1"], - aquajet: ["1L1"], - blizzard: ["1L1"], - bulldoze: ["1L1"], - chillingwater: ["1L1"], - dig: ["1L1"], - earthpower: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - foulplay: ["1L1"], - gigaimpact: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hydropump: ["1L1"], - hyperbeam: ["1L1"], - icebeam: ["1L1"], - liquidation: ["1L1"], - muddywater: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - painsplit: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - sandattack: ["1L1"], - sandstorm: ["1L1"], - slam: ["1L1"], - sleeptalk: ["1L1"], - stompingtantrum: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - surf: ["1L1"], - swift: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - throatchop: ["1L1"], - tripledive: ["1L1"], - watergun: ["1L1"], - waterpulse: ["1L1"], - whirlpool: ["1L1"], - wrap: ["1L1"], - }, - }, - dondozo: { - learnset: { - aquatail: ["1L1"], - avalanche: ["1L1"], - bodypress: ["1L1"], - bodyslam: ["1L1"], - bulldoze: ["1L1"], - chillingwater: ["1L1"], - crunch: ["1L1"], - curse: ["1L1"], - dive: ["1L1"], - doubleedge: ["1L1"], - earthquake: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fissure: ["1L1"], - flail: ["1L1"], - gigaimpact: ["1L1"], - heavyslam: ["1L1"], - hydropump: ["1L1"], - hyperbeam: ["1L1"], - icefang: ["1L1"], - liquidation: ["1L1"], - nobleroar: ["1L1"], - orderup: ["1L1"], - outrage: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - rockslide: ["1L1"], - scaryface: ["1L1"], - sleeptalk: ["1L1"], - soak: ["1L1"], - stompingtantrum: ["1L1"], - substitute: ["1L1"], - supersonic: ["1L1"], - surf: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thrash: ["1L1"], - tickle: ["1L1"], - waterfall: ["1L1"], - watergun: ["1L1"], - waterpulse: ["1L1"], - wavecrash: ["1L1"], - yawn: ["1L1"], - zenheadbutt: ["1L1"], - }, - }, - veluza: { - learnset: { - agility: ["1L1"], - aquacutter: ["1L1"], - aquajet: ["1L1"], - blizzard: ["1L1"], - bodyslam: ["1L1"], - chillingwater: ["1L1"], - crunch: ["1L1"], - doubleedge: ["1L1"], - drillrun: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - expandingforce: ["1L1"], - filletaway: ["1L1"], - finalgambit: ["1L1"], - flipturn: ["1L1"], - focusenergy: ["1L1"], - gigaimpact: ["1L1"], - hydropump: ["1L1"], - hyperbeam: ["1L1"], - icebeam: ["1L1"], - icefang: ["1L1"], - icywind: ["1L1"], - liquidation: ["1L1"], - nightslash: ["1L1"], - painsplit: ["1L1"], - pluck: ["1L1"], - protect: ["1L1"], - psychic: ["1L1"], - psychicfangs: ["1L1"], - psychicterrain: ["1L1"], - psychocut: ["1L1"], - raindance: ["1L1"], - recover: ["1L1"], - rest: ["1L1"], - scaleshot: ["1L1"], - slash: ["1L1"], - sleeptalk: ["1L1"], - snowscape: ["1L1"], - storedpower: ["1L1"], - substitute: ["1L1"], - surf: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thrash: ["1L1"], - waterfall: ["1L1"], - waterpulse: ["1L1"], - zenheadbutt: ["1L1"], - }, - }, - finizen: { - learnset: { - acrobatics: ["1L1"], - agility: ["1L1"], - aquajet: ["1L1"], - aquatail: ["1L1"], - astonish: ["1L1"], - blizzard: ["1L1"], - bodyslam: ["1L1"], - boomburst: ["1L1"], - bounce: ["1L1"], - charm: ["1L1"], - chillingwater: ["1L1"], - counter: ["1L1"], - disarmingvoice: ["1L1"], - dive: ["1L1"], - doublehit: ["1L1"], - drainingkiss: ["1L1"], - encore: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fling: ["1L1"], - focusenergy: ["1L1"], - haze: ["1L1"], - helpinghand: ["1L1"], - hydropump: ["1L1"], - icebeam: ["1L1"], - icywind: ["1L1"], - liquidation: ["1L1"], - mist: ["1L1"], - protect: ["1L1"], - psychup: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - sleeptalk: ["1L1"], - substitute: ["1L1"], - supersonic: ["1L1"], - surf: ["1L1"], - swift: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - tickle: ["1L1"], - waterfall: ["1L1"], - watergun: ["1L1"], - waterpulse: ["1L1"], - zenheadbutt: ["1L1"], - }, - }, - palafin: { - learnset: { - acrobatics: ["1L1"], - agility: ["1L1"], - aquajet: ["1L1"], - aquatail: ["1L1"], - astonish: ["1L1"], - aurasphere: ["1L1"], - blizzard: ["1L1"], - bodyslam: ["1L1"], - bulkup: ["1L1"], - charm: ["1L1"], - chillingwater: ["1L1"], - closecombat: ["1L1"], - disarmingvoice: ["1L1"], - dive: ["1L1"], - doublehit: ["1L1"], - drainingkiss: ["1L1"], - drainpunch: ["1L1"], - encore: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fling: ["1L1"], - flipturn: ["1L1"], - focusblast: ["1L1"], - focusenergy: ["1L1"], - focuspunch: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - hardpress: ["1L1"], - haze: ["1L1"], - helpinghand: ["1L1"], - hydropump: ["1L1"], - hyperbeam: ["1L1"], - hypervoice: ["1L1"], - icebeam: ["1L1"], - icepunch: ["1L1"], - icywind: ["1L1"], - ironhead: ["1L1"], - jetpunch: ["1L1"], - liquidation: ["1L1"], - mist: ["1L1"], - outrage: ["1L1"], - protect: ["1L1"], - psychup: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - reversal: ["1L1"], - sleeptalk: ["1L1"], - substitute: ["1L1"], - supersonic: ["1L1"], - surf: ["1L1"], - swift: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - throatchop: ["1L1"], - waterfall: ["1L1"], - watergun: ["1L1"], - waterpulse: ["1L1"], - wavecrash: ["1L1"], - whirlpool: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 9, level: 50, gender: "F", nature: "Adamant", ivs: {hp: 31, atk: 31, def: 31, spa: 17, spd: 31, spe: 31}, moves: ["1L1"], pokeball: "cherishball"}, - ], - }, - smoliv: { - learnset: { - absorb: ["1L1"], - bulletseed: ["1L1"], - charm: ["1L1"], - earthpower: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - flail: ["1L1"], - gigadrain: ["1L1"], - grassknot: ["1L1"], - grassyterrain: ["1L1"], - growth: ["1L1"], - helpinghand: ["1L1"], - leafstorm: ["1L1"], - leechseed: ["1L1"], - magicalleaf: ["1L1"], - megadrain: ["1L1"], - memento: ["1L1"], - protect: ["1L1"], - razorleaf: ["1L1"], - rest: ["1L1"], - seedbomb: ["1L1"], - sleeptalk: ["1L1"], - solarbeam: ["1L1"], - solarblade: ["1L1"], - strengthsap: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - sweetscent: ["1L1"], - swift: ["1L1"], - synthesis: ["1L1"], - tackle: ["1L1"], - terablast: ["1L1"], - terrainpulse: ["1L1"], - trailblaze: ["1L1"], - weatherball: ["1L1"], - }, - }, - dolliv: { - learnset: { - absorb: ["1L1"], - bulletseed: ["1L1"], - charm: ["1L1"], - earthpower: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - flail: ["1L1"], - gigadrain: ["1L1"], - grassknot: ["1L1"], - grassyterrain: ["1L1"], - growth: ["1L1"], - helpinghand: ["1L1"], - leafstorm: ["1L1"], - leechseed: ["1L1"], - magicalleaf: ["1L1"], - megadrain: ["1L1"], - protect: ["1L1"], - razorleaf: ["1L1"], - rest: ["1L1"], - seedbomb: ["1L1"], - sleeptalk: ["1L1"], - solarbeam: ["1L1"], - solarblade: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - sweetscent: ["1L1"], - swift: ["1L1"], - tackle: ["1L1"], - terablast: ["1L1"], - terrainpulse: ["1L1"], - trailblaze: ["1L1"], - weatherball: ["1L1"], - }, - }, - arboliva: { - learnset: { - absorb: ["1L1"], - alluringvoice: ["1L1"], - bulletseed: ["1L1"], - charm: ["1L1"], - dazzlinggleam: ["1L1"], - earthpower: ["1L1"], - encore: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - flail: ["1L1"], - fling: ["1L1"], - gigadrain: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - grassyterrain: ["1L1"], - growth: ["1L1"], - helpinghand: ["1L1"], - hyperbeam: ["1L1"], - hypervoice: ["1L1"], - leafstorm: ["1L1"], - leechseed: ["1L1"], - lightscreen: ["1L1"], - magicalleaf: ["1L1"], - megadrain: ["1L1"], - metronome: ["1L1"], - mirrorcoat: ["1L1"], - petalblizzard: ["1L1"], - petaldance: ["1L1"], - pollenpuff: ["1L1"], - protect: ["1L1"], - psychup: ["1L1"], - razorleaf: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - safeguard: ["1L1"], - seedbomb: ["1L1"], - sleeptalk: ["1L1"], - solarbeam: ["1L1"], - solarblade: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - sweetscent: ["1L1"], - swift: ["1L1"], - tackle: ["1L1"], - terablast: ["1L1"], - terrainpulse: ["1L1"], - trailblaze: ["1L1"], - weatherball: ["1L1"], - }, - }, - capsakid: { - learnset: { - bite: ["1L1"], - bulletseed: ["1L1"], - crunch: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - gigadrain: ["1L1"], - grassknot: ["1L1"], - grassyglide: ["1L1"], - grassyterrain: ["1L1"], - growth: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - ingrain: ["1L1"], - leafage: ["1L1"], - leafstorm: ["1L1"], - leechseed: ["1L1"], - leer: ["1L1"], - magicalleaf: ["1L1"], - protect: ["1L1"], - ragepowder: ["1L1"], - razorleaf: ["1L1"], - rest: ["1L1"], - rollout: ["1L1"], - sandstorm: ["1L1"], - seedbomb: ["1L1"], - sleeptalk: ["1L1"], - solarbeam: ["1L1"], - stompingtantrum: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - superfang: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - trailblaze: ["1L1"], - worryseed: ["1L1"], - zenheadbutt: ["1L1"], - }, - }, - scovillain: { - learnset: { - bite: ["1L1"], - bulletseed: ["1L1"], - burningjealousy: ["1L1"], - crunch: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - fireblast: ["1L1"], - firefang: ["1L1"], - flamethrower: ["1L1"], - gigadrain: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - grassyglide: ["1L1"], - grassyterrain: ["1L1"], - growth: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - hyperbeam: ["1L1"], - lashout: ["1L1"], - leafage: ["1L1"], - leafstorm: ["1L1"], - leer: ["1L1"], - magicalleaf: ["1L1"], - overheat: ["1L1"], - protect: ["1L1"], - razorleaf: ["1L1"], - rest: ["1L1"], - sandstorm: ["1L1"], - scaryface: ["1L1"], - seedbomb: ["1L1"], - sleeptalk: ["1L1"], - solarbeam: ["1L1"], - spicyextract: ["1L1"], - stompingtantrum: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - superfang: ["1L1"], - takedown: ["1L1"], - temperflare: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - trailblaze: ["1L1"], - willowisp: ["1L1"], - worryseed: ["1L1"], - zenheadbutt: ["1L1"], - }, - }, - tadbulb: { - learnset: { - acidspray: ["1L1"], - charge: ["1L1"], - chargebeam: ["1L1"], - chillingwater: ["1L1"], - confuseray: ["1L1"], - discharge: ["1L1"], - eerieimpulse: ["1L1"], - electricterrain: ["1L1"], - electroball: ["1L1"], - electroweb: ["1L1"], - endure: ["1L1"], - flail: ["1L1"], - hypervoice: ["1L1"], - lightscreen: ["1L1"], - muddywater: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - paraboliccharge: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - sleeptalk: ["1L1"], - soak: ["1L1"], - spark: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - swift: ["1L1"], - tackle: ["1L1"], - terablast: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thundershock: ["1L1"], - thunderwave: ["1L1"], - voltswitch: ["1L1"], - watergun: ["1L1"], - waterpulse: ["1L1"], - weatherball: ["1L1"], - wildcharge: ["1L1"], - zapcannon: ["1L1"], - }, - }, - bellibolt: { - learnset: { - acidspray: ["1L1"], - charge: ["1L1"], - chargebeam: ["1L1"], - chillingwater: ["1L1"], - confuseray: ["1L1"], - discharge: ["1L1"], - eerieimpulse: ["1L1"], - electricterrain: ["1L1"], - electroball: ["1L1"], - electroweb: ["1L1"], - endure: ["1L1"], - flail: ["1L1"], - gigaimpact: ["1L1"], - hyperbeam: ["1L1"], - hypervoice: ["1L1"], - lightscreen: ["1L1"], - muddywater: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - slackoff: ["1L1"], - sleeptalk: ["1L1"], - spark: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - supercellslam: ["1L1"], - swift: ["1L1"], - tackle: ["1L1"], - terablast: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thundershock: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - voltswitch: ["1L1"], - watergun: ["1L1"], - waterpulse: ["1L1"], - weatherball: ["1L1"], - wildcharge: ["1L1"], - zapcannon: ["1L1"], - }, - }, - varoom: { - learnset: { - acidspray: ["1L1"], - assurance: ["1L1"], - bodyslam: ["1L1"], - bulldoze: ["1L1"], - curse: ["1L1"], - doubleedge: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - flashcannon: ["1L1"], - gunkshot: ["1L1"], - gyroball: ["1L1"], - haze: ["1L1"], - headbutt: ["1L1"], - irondefense: ["1L1"], - ironhead: ["1L1"], - lick: ["1L1"], - metalsound: ["1L1"], - partingshot: ["1L1"], - poisongas: ["1L1"], - poisonjab: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - sandstorm: ["1L1"], - scaryface: ["1L1"], - screech: ["1L1"], - selfdestruct: ["1L1"], - sleeptalk: ["1L1"], - sludge: ["1L1"], - sludgebomb: ["1L1"], - sludgewave: ["1L1"], - smog: ["1L1"], - spinout: ["1L1"], - steelbeam: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - toxicspikes: ["1L1"], - uproar: ["1L1"], - venoshock: ["1L1"], - zenheadbutt: ["1L1"], - }, - }, - revavroom: { - learnset: { - acidspray: ["1L1"], - assurance: ["1L1"], - bodyslam: ["1L1"], - bulldoze: ["1L1"], - curse: ["1L1"], - doubleedge: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - flashcannon: ["1L1"], - gigaimpact: ["1L1"], - gunkshot: ["1L1"], - gyroball: ["1L1"], - hardpress: ["1L1"], - haze: ["1L1"], - headbutt: ["1L1"], - heavyslam: ["1L1"], - highhorsepower: ["1L1"], - hyperbeam: ["1L1"], - irondefense: ["1L1"], - ironhead: ["1L1"], - lashout: ["1L1"], - lick: ["1L1"], - magnetrise: ["1L1"], - metalsound: ["1L1"], - overheat: ["1L1"], - poisongas: ["1L1"], - poisonjab: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - sandstorm: ["1L1"], - scaryface: ["1L1"], - screech: ["1L1"], - shiftgear: ["1L1"], - sleeptalk: ["1L1"], - sludge: ["1L1"], - sludgebomb: ["1L1"], - sludgewave: ["1L1"], - smog: ["1L1"], - spinout: ["1L1"], - steelbeam: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - temperflare: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - toxic: ["1L1"], - toxicspikes: ["1L1"], - uproar: ["1L1"], - venoshock: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 9, level: 50, gender: "F", nature: "Naughty", abilities: ["1L1"], ivs: {hp: 20, atk: 31, def: 20, spa: 20, spd: 20, spe: 20}, moves: ["1L1"], pokeball: "healball"}, - ], - }, - orthworm: { - learnset: { - bodypress: ["1L1"], - bodyslam: ["1L1"], - bulldoze: ["1L1"], - coil: ["1L1"], - curse: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - flashcannon: ["1L1"], - gigaimpact: ["1L1"], - harden: ["1L1"], - headbutt: ["1L1"], - heavyslam: ["1L1"], - helpinghand: ["1L1"], - highhorsepower: ["1L1"], - hyperbeam: ["1L1"], - irondefense: ["1L1"], - ironhead: ["1L1"], - irontail: ["1L1"], - metalburst: ["1L1"], - metalsound: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - protect: ["1L1"], - rest: ["1L1"], - rockblast: ["1L1"], - rockslide: ["1L1"], - rocktomb: ["1L1"], - sandstorm: ["1L1"], - sandtomb: ["1L1"], - shedtail: ["1L1"], - sleeptalk: ["1L1"], - smackdown: ["1L1"], - spikes: ["1L1"], - stealthrock: ["1L1"], - steelbeam: ["1L1"], - stompingtantrum: ["1L1"], - substitute: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - wrap: ["1L1"], - }, - eventData: [ - {generation: 9, level: 29, gender: "M", nature: "Quirky", ivs: {hp: 30, atk: 30, def: 30, spa: 30, spd: 30, spe: 30}, moves: ["1L1"]}, - ], - }, - tandemaus: { - learnset: { - aerialace: ["1L1"], - afteryou: ["1L1"], - agility: ["1L1"], - babydolleyes: ["1L1"], - batonpass: ["1L1"], - beatup: ["1L1"], - bite: ["1L1"], - bulletseed: ["1L1"], - charm: ["1L1"], - copycat: ["1L1"], - crunch: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doublehit: ["1L1"], - echoedvoice: ["1L1"], - encore: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - faketears: ["1L1"], - feint: ["1L1"], - grassknot: ["1L1"], - helpinghand: ["1L1"], - hypervoice: ["1L1"], - lowkick: ["1L1"], - lowsweep: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - playrough: ["1L1"], - populationbomb: ["1L1"], - pound: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - seedbomb: ["1L1"], - shadowclaw: ["1L1"], - sleeptalk: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - superfang: ["1L1"], - swift: ["1L1"], - switcheroo: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thunderwave: ["1L1"], - tickle: ["1L1"], - uturn: ["1L1"], - waterpulse: ["1L1"], - }, - }, - maushold: { - learnset: { - aerialace: ["1L1"], - agility: ["1L1"], - babydolleyes: ["1L1"], - batonpass: ["1L1"], - beatup: ["1L1"], - bulletseed: ["1L1"], - charm: ["1L1"], - chillingwater: ["1L1"], - copycat: ["1L1"], - crunch: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doublehit: ["1L1"], - echoedvoice: ["1L1"], - encore: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - faketears: ["1L1"], - followme: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - helpinghand: ["1L1"], - hyperbeam: ["1L1"], - hypervoice: ["1L1"], - lowkick: ["1L1"], - lowsweep: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - playrough: ["1L1"], - populationbomb: ["1L1"], - pound: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - seedbomb: ["1L1"], - shadowclaw: ["1L1"], - sleeptalk: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - superfang: ["1L1"], - swift: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thunderwave: ["1L1"], - tidyup: ["1L1"], - trailblaze: ["1L1"], - uturn: ["1L1"], - waterpulse: ["1L1"], - }, - }, - cetoddle: { - learnset: { - amnesia: ["1L1"], - avalanche: ["1L1"], - bellydrum: ["1L1"], - blizzard: ["1L1"], - bodypress: ["1L1"], - bodyslam: ["1L1"], - bounce: ["1L1"], - bulldoze: ["1L1"], - charm: ["1L1"], - chillingwater: ["1L1"], - curse: ["1L1"], - doubleedge: ["1L1"], - earthquake: ["1L1"], - echoedvoice: ["1L1"], - endure: ["1L1"], - entrainment: ["1L1"], - facade: ["1L1"], - flail: ["1L1"], - growl: ["1L1"], - heavyslam: ["1L1"], - helpinghand: ["1L1"], - highhorsepower: ["1L1"], - hyperbeam: ["1L1"], - hypervoice: ["1L1"], - icebeam: ["1L1"], - icefang: ["1L1"], - iceshard: ["1L1"], - icespinner: ["1L1"], - iciclecrash: ["1L1"], - iciclespear: ["1L1"], - icywind: ["1L1"], - knockoff: ["1L1"], - liquidation: ["1L1"], - playrough: ["1L1"], - powdersnow: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - sleeptalk: ["1L1"], - snowscape: ["1L1"], - stompingtantrum: ["1L1"], - substitute: ["1L1"], - superpower: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - waterpulse: ["1L1"], - yawn: ["1L1"], - }, - }, - cetitan: { - learnset: { - amnesia: ["1L1"], - avalanche: ["1L1"], - blizzard: ["1L1"], - bodypress: ["1L1"], - bodyslam: ["1L1"], - bounce: ["1L1"], - bulldoze: ["1L1"], - charm: ["1L1"], - chillingwater: ["1L1"], - curse: ["1L1"], - doubleedge: ["1L1"], - earthquake: ["1L1"], - echoedvoice: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - flail: ["1L1"], - gigaimpact: ["1L1"], - growl: ["1L1"], - hardpress: ["1L1"], - heavyslam: ["1L1"], - helpinghand: ["1L1"], - highhorsepower: ["1L1"], - hyperbeam: ["1L1"], - hypervoice: ["1L1"], - icebeam: ["1L1"], - icefang: ["1L1"], - icepunch: ["1L1"], - iceshard: ["1L1"], - icespinner: ["1L1"], - iciclespear: ["1L1"], - icywind: ["1L1"], - knockoff: ["1L1"], - liquidation: ["1L1"], - playrough: ["1L1"], - powdersnow: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - sleeptalk: ["1L1"], - snowscape: ["1L1"], - stompingtantrum: ["1L1"], - substitute: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - waterpulse: ["1L1"], - }, - eventData: [ - {generation: 9, moves: ["1L1"]}, - ], - }, - frigibax: { - learnset: { - aquatail: ["1L1"], - avalanche: ["1L1"], - bite: ["1L1"], - blizzard: ["1L1"], - bodyslam: ["1L1"], - crunch: ["1L1"], - dig: ["1L1"], - dracometeor: ["1L1"], - dragonbreath: ["1L1"], - dragonclaw: ["1L1"], - dragonpulse: ["1L1"], - dragonrush: ["1L1"], - dragontail: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - focusenergy: ["1L1"], - freezedry: ["1L1"], - helpinghand: ["1L1"], - icebeam: ["1L1"], - icefang: ["1L1"], - iciclecrash: ["1L1"], - iciclespear: ["1L1"], - icywind: ["1L1"], - leer: ["1L1"], - outrage: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - sleeptalk: ["1L1"], - snowscape: ["1L1"], - substitute: ["1L1"], - swordsdance: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - }, - }, - arctibax: { - learnset: { - aerialace: ["1L1"], - avalanche: ["1L1"], - bite: ["1L1"], - blizzard: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - crunch: ["1L1"], - dig: ["1L1"], - dracometeor: ["1L1"], - dragonbreath: ["1L1"], - dragonclaw: ["1L1"], - dragonpulse: ["1L1"], - dragontail: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - focusenergy: ["1L1"], - helpinghand: ["1L1"], - icebeam: ["1L1"], - icefang: ["1L1"], - iciclecrash: ["1L1"], - iciclespear: ["1L1"], - icywind: ["1L1"], - ironhead: ["1L1"], - leer: ["1L1"], - outrage: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - scaryface: ["1L1"], - sleeptalk: ["1L1"], - snowscape: ["1L1"], - substitute: ["1L1"], - swordsdance: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - }, - }, - baxcalibur: { - learnset: { - aerialace: ["1L1"], - avalanche: ["1L1"], - bite: ["1L1"], - blizzard: ["1L1"], - bodypress: ["1L1"], - bodyslam: ["1L1"], - breakingswipe: ["1L1"], - brickbreak: ["1L1"], - bulldoze: ["1L1"], - crunch: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - dracometeor: ["1L1"], - dragonbreath: ["1L1"], - dragoncheer: ["1L1"], - dragonclaw: ["1L1"], - dragondance: ["1L1"], - dragonpulse: ["1L1"], - dragontail: ["1L1"], - earthquake: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - falseswipe: ["1L1"], - focusenergy: ["1L1"], - gigaimpact: ["1L1"], - glaiverush: ["1L1"], - helpinghand: ["1L1"], - highhorsepower: ["1L1"], - hyperbeam: ["1L1"], - icebeam: ["1L1"], - icefang: ["1L1"], - iceshard: ["1L1"], - iciclecrash: ["1L1"], - iciclespear: ["1L1"], - icywind: ["1L1"], - ironhead: ["1L1"], - leer: ["1L1"], - outrage: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - scaleshot: ["1L1"], - scaryface: ["1L1"], - sleeptalk: ["1L1"], - snowscape: ["1L1"], - stompingtantrum: ["1L1"], - substitute: ["1L1"], - swordsdance: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thunderfang: ["1L1"], - zenheadbutt: ["1L1"], - }, - }, - tatsugiri: { - learnset: { - batonpass: ["1L1"], - chillingwater: ["1L1"], - counter: ["1L1"], - dracometeor: ["1L1"], - dragoncheer: ["1L1"], - dragondance: ["1L1"], - dragonpulse: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - gigaimpact: ["1L1"], - harden: ["1L1"], - helpinghand: ["1L1"], - hydropump: ["1L1"], - hyperbeam: ["1L1"], - icywind: ["1L1"], - lunge: ["1L1"], - memento: ["1L1"], - mirrorcoat: ["1L1"], - muddywater: ["1L1"], - nastyplot: ["1L1"], - outrage: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - rapidspin: ["1L1"], - rest: ["1L1"], - sleeptalk: ["1L1"], - soak: ["1L1"], - splash: ["1L1"], - substitute: ["1L1"], - surf: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - watergun: ["1L1"], - waterpulse: ["1L1"], - whirlpool: ["1L1"], - }, - eventData: [ - {generation: 9, level: 57, gender: "M", nature: "Quiet", ivs: {hp: 30, atk: 30, def: 30, spa: 30, spd: 30, spe: 30}, moves: ["1L1"]}, - ], - }, - tatsugiristretchy: { - learnset: { - celebrate: ["1L1"], - dracometeor: ["1L1"], - helpinghand: ["1L1"], - muddywater: ["1L1"], - }, - eventData: [ - {generation: 9, level: 50, moves: ["1L1"], pokeball: "cherishball"}, - ], - }, - cyclizar: { - learnset: { - acrobatics: ["1L1"], - aerialace: ["1L1"], - agility: ["1L1"], - aquatail: ["1L1"], - bite: ["1L1"], - bodyslam: ["1L1"], - breakingswipe: ["1L1"], - crunch: ["1L1"], - doubleedge: ["1L1"], - dracometeor: ["1L1"], - dragoncheer: ["1L1"], - dragonclaw: ["1L1"], - dragonpulse: ["1L1"], - dragonrush: ["1L1"], - dragontail: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - firefang: ["1L1"], - gigaimpact: ["1L1"], - growl: ["1L1"], - hyperbeam: ["1L1"], - hypervoice: ["1L1"], - icespinner: ["1L1"], - ironhead: ["1L1"], - irontail: ["1L1"], - knockoff: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - outrage: ["1L1"], - overheat: ["1L1"], - powerwhip: ["1L1"], - protect: ["1L1"], - quickattack: ["1L1"], - raindance: ["1L1"], - rapidspin: ["1L1"], - rest: ["1L1"], - scaleshot: ["1L1"], - shedtail: ["1L1"], - shiftgear: ["1L1"], - sleeptalk: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - supercellslam: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - temperflare: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thunderbolt: ["1L1"], - thunderfang: ["1L1"], - trailblaze: ["1L1"], - uproar: ["1L1"], - uturn: ["1L1"], - wildcharge: ["1L1"], - }, - }, - pawmi: { - learnset: { - agility: ["1L1"], - batonpass: ["1L1"], - bite: ["1L1"], - celebrate: ["1L1"], - charge: ["1L1"], - chargebeam: ["1L1"], - charm: ["1L1"], - crunch: ["1L1"], - dig: ["1L1"], - discharge: ["1L1"], - eerieimpulse: ["1L1"], - electricterrain: ["1L1"], - electroball: ["1L1"], - electroweb: ["1L1"], - encore: ["1L1"], - endure: ["1L1"], - entrainment: ["1L1"], - facade: ["1L1"], - fakeout: ["1L1"], - fling: ["1L1"], - growl: ["1L1"], - helpinghand: ["1L1"], - machpunch: ["1L1"], - metalclaw: ["1L1"], - nuzzle: ["1L1"], - playrough: ["1L1"], - protect: ["1L1"], - quickattack: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - scratch: ["1L1"], - slam: ["1L1"], - sleeptalk: ["1L1"], - spark: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - superfang: ["1L1"], - sweetkiss: ["1L1"], - swift: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderfang: ["1L1"], - thundershock: ["1L1"], - thunderwave: ["1L1"], - voltswitch: ["1L1"], - wildcharge: ["1L1"], - wish: ["1L1"], - }, - eventData: [ - {generation: 9, level: 5, moves: ["1L1"], pokeball: "cherishball"}, - ], - }, - pawmo: { - learnset: { - agility: ["1L1"], - armthrust: ["1L1"], - batonpass: ["1L1"], - bite: ["1L1"], - charge: ["1L1"], - chargebeam: ["1L1"], - charm: ["1L1"], - coaching: ["1L1"], - crunch: ["1L1"], - dig: ["1L1"], - discharge: ["1L1"], - eerieimpulse: ["1L1"], - electricterrain: ["1L1"], - electroball: ["1L1"], - electroweb: ["1L1"], - encore: ["1L1"], - endure: ["1L1"], - entrainment: ["1L1"], - facade: ["1L1"], - fling: ["1L1"], - focuspunch: ["1L1"], - growl: ["1L1"], - helpinghand: ["1L1"], - knockoff: ["1L1"], - lowkick: ["1L1"], - lowsweep: ["1L1"], - metalclaw: ["1L1"], - nuzzle: ["1L1"], - playrough: ["1L1"], - protect: ["1L1"], - quickattack: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - scratch: ["1L1"], - slam: ["1L1"], - sleeptalk: ["1L1"], - spark: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - superfang: ["1L1"], - swift: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderfang: ["1L1"], - thunderpunch: ["1L1"], - thundershock: ["1L1"], - thunderwave: ["1L1"], - upperhand: ["1L1"], - voltswitch: ["1L1"], - wildcharge: ["1L1"], - }, - }, - pawmot: { - learnset: { - agility: ["1L1"], - armthrust: ["1L1"], - batonpass: ["1L1"], - bite: ["1L1"], - bodypress: ["1L1"], - brickbreak: ["1L1"], - bulkup: ["1L1"], - charge: ["1L1"], - chargebeam: ["1L1"], - charm: ["1L1"], - closecombat: ["1L1"], - coaching: ["1L1"], - crunch: ["1L1"], - dig: ["1L1"], - discharge: ["1L1"], - doubleedge: ["1L1"], - doubleshock: ["1L1"], - eerieimpulse: ["1L1"], - electricterrain: ["1L1"], - electroball: ["1L1"], - electroweb: ["1L1"], - encore: ["1L1"], - endure: ["1L1"], - entrainment: ["1L1"], - facade: ["1L1"], - firepunch: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - focuspunch: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - growl: ["1L1"], - helpinghand: ["1L1"], - hyperbeam: ["1L1"], - icepunch: ["1L1"], - knockoff: ["1L1"], - lowkick: ["1L1"], - lowsweep: ["1L1"], - metalclaw: ["1L1"], - metronome: ["1L1"], - nuzzle: ["1L1"], - playrough: ["1L1"], - protect: ["1L1"], - quickattack: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - revivalblessing: ["1L1"], - rocktomb: ["1L1"], - scratch: ["1L1"], - seedbomb: ["1L1"], - slam: ["1L1"], - sleeptalk: ["1L1"], - spark: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - supercellslam: ["1L1"], - superfang: ["1L1"], - swift: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - throatchop: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderfang: ["1L1"], - thunderpunch: ["1L1"], - thundershock: ["1L1"], - thunderwave: ["1L1"], - upperhand: ["1L1"], - voltswitch: ["1L1"], - wildcharge: ["1L1"], - }, - }, - wattrel: { - learnset: { - acrobatics: ["1L1"], - aerialace: ["1L1"], - agility: ["1L1"], - aircutter: ["1L1"], - airslash: ["1L1"], - bravebird: ["1L1"], - charge: ["1L1"], - chargebeam: ["1L1"], - discharge: ["1L1"], - dualwingbeat: ["1L1"], - eerieimpulse: ["1L1"], - electricterrain: ["1L1"], - electroball: ["1L1"], - electroweb: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - featherdance: ["1L1"], - fly: ["1L1"], - growl: ["1L1"], - hurricane: ["1L1"], - peck: ["1L1"], - pluck: ["1L1"], - protect: ["1L1"], - quickattack: ["1L1"], - rest: ["1L1"], - roost: ["1L1"], - sleeptalk: ["1L1"], - spark: ["1L1"], - spitup: ["1L1"], - stockpile: ["1L1"], - substitute: ["1L1"], - swallow: ["1L1"], - swift: ["1L1"], - tailwind: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thundershock: ["1L1"], - thunderwave: ["1L1"], - uproar: ["1L1"], - uturn: ["1L1"], - voltswitch: ["1L1"], - weatherball: ["1L1"], - wildcharge: ["1L1"], - }, - }, - kilowattrel: { - learnset: { - acrobatics: ["1L1"], - aerialace: ["1L1"], - agility: ["1L1"], - aircutter: ["1L1"], - airslash: ["1L1"], - bravebird: ["1L1"], - charge: ["1L1"], - chargebeam: ["1L1"], - discharge: ["1L1"], - dualwingbeat: ["1L1"], - eerieimpulse: ["1L1"], - electricterrain: ["1L1"], - electroball: ["1L1"], - electroweb: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - featherdance: ["1L1"], - fly: ["1L1"], - gigaimpact: ["1L1"], - growl: ["1L1"], - hurricane: ["1L1"], - hyperbeam: ["1L1"], - peck: ["1L1"], - pluck: ["1L1"], - protect: ["1L1"], - quickattack: ["1L1"], - rest: ["1L1"], - roost: ["1L1"], - scaryface: ["1L1"], - sleeptalk: ["1L1"], - spark: ["1L1"], - substitute: ["1L1"], - supercellslam: ["1L1"], - swift: ["1L1"], - tailwind: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thundershock: ["1L1"], - thunderwave: ["1L1"], - uproar: ["1L1"], - uturn: ["1L1"], - voltswitch: ["1L1"], - weatherball: ["1L1"], - wildcharge: ["1L1"], - }, - }, - bombirdier: { - learnset: { - acrobatics: ["1L1"], - aerialace: ["1L1"], - aircutter: ["1L1"], - airslash: ["1L1"], - bravebird: ["1L1"], - curse: ["1L1"], - darkpulse: ["1L1"], - drillrun: ["1L1"], - dualwingbeat: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - featherdance: ["1L1"], - fly: ["1L1"], - foulplay: ["1L1"], - gigaimpact: ["1L1"], - heatwave: ["1L1"], - honeclaws: ["1L1"], - hurricane: ["1L1"], - hyperbeam: ["1L1"], - hypervoice: ["1L1"], - icywind: ["1L1"], - knockoff: ["1L1"], - lashout: ["1L1"], - leer: ["1L1"], - memento: ["1L1"], - nastyplot: ["1L1"], - partingshot: ["1L1"], - payback: ["1L1"], - peck: ["1L1"], - pluck: ["1L1"], - powergem: ["1L1"], - powertrip: ["1L1"], - protect: ["1L1"], - psychup: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - rockblast: ["1L1"], - rockslide: ["1L1"], - rockthrow: ["1L1"], - rocktomb: ["1L1"], - roost: ["1L1"], - sandstorm: ["1L1"], - scaryface: ["1L1"], - skyattack: ["1L1"], - sleeptalk: ["1L1"], - snarl: ["1L1"], - stealthrock: ["1L1"], - stoneedge: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - sunnyday: ["1L1"], - tailwind: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - torment: ["1L1"], - uturn: ["1L1"], - whirlwind: ["1L1"], - wingattack: ["1L1"], - }, - eventData: [ - {generation: 9, level: 20, gender: "F", nature: "Jolly", ivs: {hp: 30, atk: 30, def: 30, spa: 30, spd: 30, spe: 30}, isHidden: true, moves: ["1L1"]}, - ], - }, - squawkabilly: { - learnset: { - aerialace: ["1L1"], - aircutter: ["1L1"], - airslash: ["1L1"], - bravebird: ["1L1"], - copycat: ["1L1"], - doubleedge: ["1L1"], - dualwingbeat: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - faketears: ["1L1"], - featherdance: ["1L1"], - finalgambit: ["1L1"], - flatter: ["1L1"], - fly: ["1L1"], - foulplay: ["1L1"], - furyattack: ["1L1"], - gigaimpact: ["1L1"], - growl: ["1L1"], - heatwave: ["1L1"], - helpinghand: ["1L1"], - hurricane: ["1L1"], - hyperbeam: ["1L1"], - hypervoice: ["1L1"], - lashout: ["1L1"], - mimic: ["1L1"], - partingshot: ["1L1"], - peck: ["1L1"], - pounce: ["1L1"], - protect: ["1L1"], - quickattack: ["1L1"], - rest: ["1L1"], - reversal: ["1L1"], - roost: ["1L1"], - scaryface: ["1L1"], - sleeptalk: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - tailwind: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - torment: ["1L1"], - uproar: ["1L1"], - uturn: ["1L1"], - }, - }, - flamigo: { - learnset: { - acrobatics: ["1L1"], - aerialace: ["1L1"], - agility: ["1L1"], - aircutter: ["1L1"], - airslash: ["1L1"], - bravebird: ["1L1"], - bulkup: ["1L1"], - chillingwater: ["1L1"], - closecombat: ["1L1"], - copycat: ["1L1"], - detect: ["1L1"], - doublekick: ["1L1"], - doubleteam: ["1L1"], - dualwingbeat: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - featherdance: ["1L1"], - feint: ["1L1"], - fling: ["1L1"], - fly: ["1L1"], - focusenergy: ["1L1"], - gigaimpact: ["1L1"], - hurricane: ["1L1"], - hyperbeam: ["1L1"], - liquidation: ["1L1"], - lowkick: ["1L1"], - lowsweep: ["1L1"], - lunge: ["1L1"], - megakick: ["1L1"], - payback: ["1L1"], - peck: ["1L1"], - pounce: ["1L1"], - protect: ["1L1"], - psychup: ["1L1"], - quickguard: ["1L1"], - rest: ["1L1"], - reversal: ["1L1"], - roost: ["1L1"], - skyattack: ["1L1"], - sleeptalk: ["1L1"], - substitute: ["1L1"], - swordsdance: ["1L1"], - tailwind: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - throatchop: ["1L1"], - upperhand: ["1L1"], - uturn: ["1L1"], - waterpulse: ["1L1"], - wideguard: ["1L1"], - wingattack: ["1L1"], - }, - }, - klawf: { - learnset: { - ancientpower: ["1L1"], - block: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - bulldoze: ["1L1"], - crabhammer: ["1L1"], - dig: ["1L1"], - earthpower: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - flail: ["1L1"], - fling: ["1L1"], - gigaimpact: ["1L1"], - guillotine: ["1L1"], - harden: ["1L1"], - helpinghand: ["1L1"], - highhorsepower: ["1L1"], - hyperbeam: ["1L1"], - irondefense: ["1L1"], - knockoff: ["1L1"], - metalclaw: ["1L1"], - meteorbeam: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - powergem: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - reversal: ["1L1"], - rockblast: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rockthrow: ["1L1"], - rocktomb: ["1L1"], - sandstorm: ["1L1"], - scaryface: ["1L1"], - shadowclaw: ["1L1"], - skittersmack: ["1L1"], - sleeptalk: ["1L1"], - smackdown: ["1L1"], - stealthrock: ["1L1"], - stompingtantrum: ["1L1"], - stoneedge: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swordsdance: ["1L1"], - takedown: ["1L1"], - temperflare: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - throatchop: ["1L1"], - trailblaze: ["1L1"], - visegrip: ["1L1"], - xscissor: ["1L1"], - }, - eventData: [ - {generation: 9, level: 16, gender: "F", nature: "Gentle", ivs: {hp: 30, atk: 30, def: 30, spa: 30, spd: 30, spe: 30}, abilities: ["1L1"], moves: ["1L1"]}, - ], - }, - nacli: { - learnset: { - ancientpower: ["1L1"], - bodyslam: ["1L1"], - bulldoze: ["1L1"], - curse: ["1L1"], - dig: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fissure: ["1L1"], - flashcannon: ["1L1"], - harden: ["1L1"], - headbutt: ["1L1"], - heavyslam: ["1L1"], - helpinghand: ["1L1"], - irondefense: ["1L1"], - ironhead: ["1L1"], - meteorbeam: ["1L1"], - mudshot: ["1L1"], - powergem: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - recover: ["1L1"], - rest: ["1L1"], - rockpolish: ["1L1"], - rockslide: ["1L1"], - rockthrow: ["1L1"], - sandstorm: ["1L1"], - sleeptalk: ["1L1"], - smackdown: ["1L1"], - stealthrock: ["1L1"], - stompingtantrum: ["1L1"], - stoneedge: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - zenheadbutt: ["1L1"], - }, - }, - naclstack: { - learnset: { - bodypress: ["1L1"], - bodyslam: ["1L1"], - bulldoze: ["1L1"], - curse: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - flashcannon: ["1L1"], - gigaimpact: ["1L1"], - harden: ["1L1"], - headbutt: ["1L1"], - heavyslam: ["1L1"], - helpinghand: ["1L1"], - hyperbeam: ["1L1"], - irondefense: ["1L1"], - ironhead: ["1L1"], - meteorbeam: ["1L1"], - mudshot: ["1L1"], - powergem: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - recover: ["1L1"], - rest: ["1L1"], - rockpolish: ["1L1"], - rockslide: ["1L1"], - rockthrow: ["1L1"], - saltcure: ["1L1"], - sandstorm: ["1L1"], - sleeptalk: ["1L1"], - smackdown: ["1L1"], - stealthrock: ["1L1"], - stompingtantrum: ["1L1"], - stoneedge: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - zenheadbutt: ["1L1"], - }, - }, - garganacl: { - learnset: { - avalanche: ["1L1"], - block: ["1L1"], - bodypress: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - bulldoze: ["1L1"], - curse: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - endure: ["1L1"], - explosion: ["1L1"], - facade: ["1L1"], - firepunch: ["1L1"], - flashcannon: ["1L1"], - fling: ["1L1"], - focuspunch: ["1L1"], - gigaimpact: ["1L1"], - gravity: ["1L1"], - hammerarm: ["1L1"], - harden: ["1L1"], - hardpress: ["1L1"], - headbutt: ["1L1"], - heavyslam: ["1L1"], - helpinghand: ["1L1"], - hyperbeam: ["1L1"], - icepunch: ["1L1"], - irondefense: ["1L1"], - ironhead: ["1L1"], - meteorbeam: ["1L1"], - mudshot: ["1L1"], - powergem: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - recover: ["1L1"], - rest: ["1L1"], - rockblast: ["1L1"], - rockpolish: ["1L1"], - rockslide: ["1L1"], - rockthrow: ["1L1"], - rocktomb: ["1L1"], - saltcure: ["1L1"], - sandstorm: ["1L1"], - sleeptalk: ["1L1"], - smackdown: ["1L1"], - stealthrock: ["1L1"], - stompingtantrum: ["1L1"], - stoneedge: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thunderpunch: ["1L1"], - wideguard: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 9, level: 50, gender: "M", nature: "Careful", ivs: {hp: 31, atk: 31, def: 31, spa: 22, spd: 31, spe: 31}, moves: ["1L1"], pokeball: "cherishball"}, - ], - }, - glimmet: { - learnset: { - acidarmor: ["1L1"], - acidspray: ["1L1"], - ancientpower: ["1L1"], - confuseray: ["1L1"], - dazzlinggleam: ["1L1"], - endure: ["1L1"], - explosion: ["1L1"], - facade: ["1L1"], - gunkshot: ["1L1"], - harden: ["1L1"], - irondefense: ["1L1"], - lightscreen: ["1L1"], - memento: ["1L1"], - meteorbeam: ["1L1"], - mudshot: ["1L1"], - powergem: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - rockblast: ["1L1"], - rockpolish: ["1L1"], - rockslide: ["1L1"], - rockthrow: ["1L1"], - rocktomb: ["1L1"], - sandstorm: ["1L1"], - sandtomb: ["1L1"], - selfdestruct: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - sludgewave: ["1L1"], - smackdown: ["1L1"], - spikes: ["1L1"], - stealthrock: ["1L1"], - stoneedge: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - terablast: ["1L1"], - toxic: ["1L1"], - toxicspikes: ["1L1"], - venoshock: ["1L1"], - }, - }, - glimmora: { - learnset: { - acidarmor: ["1L1"], - acidspray: ["1L1"], - ancientpower: ["1L1"], - confuseray: ["1L1"], - dazzlinggleam: ["1L1"], - earthpower: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - flashcannon: ["1L1"], - gigaimpact: ["1L1"], - gunkshot: ["1L1"], - harden: ["1L1"], - hyperbeam: ["1L1"], - irondefense: ["1L1"], - lightscreen: ["1L1"], - meteorbeam: ["1L1"], - mortalspin: ["1L1"], - mudshot: ["1L1"], - powergem: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - rockblast: ["1L1"], - rockpolish: ["1L1"], - rockslide: ["1L1"], - rockthrow: ["1L1"], - rocktomb: ["1L1"], - sandstorm: ["1L1"], - sandtomb: ["1L1"], - selfdestruct: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - sludgewave: ["1L1"], - smackdown: ["1L1"], - solarbeam: ["1L1"], - spikes: ["1L1"], - spikyshield: ["1L1"], - stealthrock: ["1L1"], - stoneedge: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - terablast: ["1L1"], - toxic: ["1L1"], - toxicspikes: ["1L1"], - venoshock: ["1L1"], - }, - }, - shroodle: { - learnset: { - acidspray: ["1L1"], - acrobatics: ["1L1"], - batonpass: ["1L1"], - bite: ["1L1"], - copycat: ["1L1"], - crosspoison: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - encore: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - flatter: ["1L1"], - fling: ["1L1"], - foulplay: ["1L1"], - furyswipes: ["1L1"], - gunkshot: ["1L1"], - helpinghand: ["1L1"], - knockoff: ["1L1"], - leer: ["1L1"], - metronome: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - nastyplot: ["1L1"], - partingshot: ["1L1"], - poisonfang: ["1L1"], - poisonjab: ["1L1"], - pounce: ["1L1"], - protect: ["1L1"], - psychup: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - scratch: ["1L1"], - skittersmack: ["1L1"], - slash: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - sludgewave: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - superfang: ["1L1"], - swagger: ["1L1"], - switcheroo: ["1L1"], - swordsdance: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - throatchop: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - uturn: ["1L1"], - venoshock: ["1L1"], - }, - }, - grafaiai: { - learnset: { - acidspray: ["1L1"], - acrobatics: ["1L1"], - batonpass: ["1L1"], - dig: ["1L1"], - doodle: ["1L1"], - doubleedge: ["1L1"], - encore: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - flatter: ["1L1"], - fling: ["1L1"], - foulplay: ["1L1"], - furyswipes: ["1L1"], - gigaimpact: ["1L1"], - gunkshot: ["1L1"], - helpinghand: ["1L1"], - knockoff: ["1L1"], - leer: ["1L1"], - lowkick: ["1L1"], - lowsweep: ["1L1"], - metronome: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - nastyplot: ["1L1"], - poisonfang: ["1L1"], - poisonjab: ["1L1"], - poisontail: ["1L1"], - pounce: ["1L1"], - protect: ["1L1"], - psychup: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - scaryface: ["1L1"], - scratch: ["1L1"], - shadowclaw: ["1L1"], - skittersmack: ["1L1"], - slash: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - sludgewave: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - superfang: ["1L1"], - switcheroo: ["1L1"], - swordsdance: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - throatchop: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - uturn: ["1L1"], - venoshock: ["1L1"], - xscissor: ["1L1"], - }, - }, - fidough: { - learnset: { - agility: ["1L1"], - alluringvoice: ["1L1"], - babydolleyes: ["1L1"], - batonpass: ["1L1"], - bite: ["1L1"], - bodyslam: ["1L1"], - charm: ["1L1"], - copycat: ["1L1"], - covet: ["1L1"], - crunch: ["1L1"], - dazzlinggleam: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - firefang: ["1L1"], - growl: ["1L1"], - helpinghand: ["1L1"], - howl: ["1L1"], - icefang: ["1L1"], - lastresort: ["1L1"], - lick: ["1L1"], - mistyterrain: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - playrough: ["1L1"], - protect: ["1L1"], - psychicfangs: ["1L1"], - psychup: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - roar: ["1L1"], - sleeptalk: ["1L1"], - snarl: ["1L1"], - stompingtantrum: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - sweetscent: ["1L1"], - tackle: ["1L1"], - tailwhip: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thunderfang: ["1L1"], - trailblaze: ["1L1"], - wish: ["1L1"], - workup: ["1L1"], - yawn: ["1L1"], - }, - eventData: [ - {generation: 9, level: 5, moves: ["1L1"], pokeball: "cherishball"}, - ], - }, - dachsbun: { - learnset: { - agility: ["1L1"], - alluringvoice: ["1L1"], - babydolleyes: ["1L1"], - batonpass: ["1L1"], - bite: ["1L1"], - bodypress: ["1L1"], - bodyslam: ["1L1"], - charm: ["1L1"], - covet: ["1L1"], - crunch: ["1L1"], - dazzlinggleam: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - drainingkiss: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - firefang: ["1L1"], - gigaimpact: ["1L1"], - growl: ["1L1"], - helpinghand: ["1L1"], - hyperbeam: ["1L1"], - icefang: ["1L1"], - lastresort: ["1L1"], - lick: ["1L1"], - mistyterrain: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - playrough: ["1L1"], - protect: ["1L1"], - psychicfangs: ["1L1"], - psychup: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - roar: ["1L1"], - scaryface: ["1L1"], - sleeptalk: ["1L1"], - snarl: ["1L1"], - stompingtantrum: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - tackle: ["1L1"], - tailwhip: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thunderfang: ["1L1"], - trailblaze: ["1L1"], - workup: ["1L1"], - }, - }, - maschiff: { - learnset: { - bite: ["1L1"], - bodyslam: ["1L1"], - charm: ["1L1"], - crunch: ["1L1"], - darkpulse: ["1L1"], - destinybond: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - faketears: ["1L1"], - firefang: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - honeclaws: ["1L1"], - icefang: ["1L1"], - jawlock: ["1L1"], - lashout: ["1L1"], - leer: ["1L1"], - lick: ["1L1"], - payback: ["1L1"], - playrough: ["1L1"], - protect: ["1L1"], - psychicfangs: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - reversal: ["1L1"], - roar: ["1L1"], - scaryface: ["1L1"], - sleeptalk: ["1L1"], - snarl: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thunderfang: ["1L1"], - trailblaze: ["1L1"], - }, - }, - mabosstiff: { - learnset: { - bite: ["1L1"], - bodyslam: ["1L1"], - charm: ["1L1"], - comeuppance: ["1L1"], - crunch: ["1L1"], - curse: ["1L1"], - darkpulse: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - faketears: ["1L1"], - firefang: ["1L1"], - gigaimpact: ["1L1"], - headbutt: ["1L1"], - helpinghand: ["1L1"], - honeclaws: ["1L1"], - hyperbeam: ["1L1"], - hypervoice: ["1L1"], - icefang: ["1L1"], - jawlock: ["1L1"], - lashout: ["1L1"], - leer: ["1L1"], - lick: ["1L1"], - outrage: ["1L1"], - painsplit: ["1L1"], - payback: ["1L1"], - playrough: ["1L1"], - protect: ["1L1"], - psychicfangs: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - reversal: ["1L1"], - roar: ["1L1"], - scaryface: ["1L1"], - sleeptalk: ["1L1"], - snarl: ["1L1"], - spite: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thunderfang: ["1L1"], - trailblaze: ["1L1"], - wildcharge: ["1L1"], - }, - }, - bramblin: { - learnset: { - absorb: ["1L1"], - astonish: ["1L1"], - beatup: ["1L1"], - block: ["1L1"], - bulletseed: ["1L1"], - confuseray: ["1L1"], - curse: ["1L1"], - defensecurl: ["1L1"], - disable: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - gigadrain: ["1L1"], - grassknot: ["1L1"], - grassyglide: ["1L1"], - grassyterrain: ["1L1"], - hex: ["1L1"], - infestation: ["1L1"], - leafstorm: ["1L1"], - leechseed: ["1L1"], - megadrain: ["1L1"], - nightshade: ["1L1"], - painsplit: ["1L1"], - phantomforce: ["1L1"], - poltergeist: ["1L1"], - pounce: ["1L1"], - powerwhip: ["1L1"], - protect: ["1L1"], - rapidspin: ["1L1"], - rest: ["1L1"], - rollout: ["1L1"], - scaryface: ["1L1"], - seedbomb: ["1L1"], - shadowball: ["1L1"], - shadowsneak: ["1L1"], - sleeptalk: ["1L1"], - solarbeam: ["1L1"], - spikes: ["1L1"], - spite: ["1L1"], - strengthsap: ["1L1"], - substitute: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - trailblaze: ["1L1"], - }, - }, - brambleghast: { - learnset: { - absorb: ["1L1"], - astonish: ["1L1"], - bulletseed: ["1L1"], - confuseray: ["1L1"], - curse: ["1L1"], - defensecurl: ["1L1"], - disable: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - gigadrain: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - grassyglide: ["1L1"], - grassyterrain: ["1L1"], - hex: ["1L1"], - hyperbeam: ["1L1"], - infestation: ["1L1"], - leafstorm: ["1L1"], - megadrain: ["1L1"], - nightshade: ["1L1"], - painsplit: ["1L1"], - phantomforce: ["1L1"], - poltergeist: ["1L1"], - pounce: ["1L1"], - powerwhip: ["1L1"], - protect: ["1L1"], - rapidspin: ["1L1"], - rest: ["1L1"], - rollout: ["1L1"], - scaryface: ["1L1"], - seedbomb: ["1L1"], - shadowball: ["1L1"], - skittersmack: ["1L1"], - sleeptalk: ["1L1"], - solarbeam: ["1L1"], - spikes: ["1L1"], - spite: ["1L1"], - substitute: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - trailblaze: ["1L1"], - }, - }, - gimmighoul: { - learnset: { - astonish: ["1L1"], - confuseray: ["1L1"], - endure: ["1L1"], - hex: ["1L1"], - lightscreen: ["1L1"], - nastyplot: ["1L1"], - nightshade: ["1L1"], - powergem: ["1L1"], - protect: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - shadowball: ["1L1"], - sleeptalk: ["1L1"], - substitute: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - }, - eventData: [ - {generation: 9, level: 5, moves: ["1L1"]}, - {generation: 9, level: 75, shiny: 1, perfectIVs: 4, moves: ["1L1"]}, - {generation: 9, level: 5, nature: "Timid", ivs: {hp: 0, atk: 0, def: 0, spa: 0, spd: 0, spe: 31}, moves: ["1L1"]}, - ], - eventOnly: false, - }, - gholdengo: { - learnset: { - astonish: ["1L1"], - chargebeam: ["1L1"], - confuseray: ["1L1"], - dazzlinggleam: ["1L1"], - electroball: ["1L1"], - endure: ["1L1"], - flashcannon: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - focuspunch: ["1L1"], - gigaimpact: ["1L1"], - heavyslam: ["1L1"], - hex: ["1L1"], - hyperbeam: ["1L1"], - ironhead: ["1L1"], - lightscreen: ["1L1"], - lowkick: ["1L1"], - lowsweep: ["1L1"], - makeitrain: ["1L1"], - memento: ["1L1"], - metalsound: ["1L1"], - nastyplot: ["1L1"], - nightshade: ["1L1"], - poltergeist: ["1L1"], - powergem: ["1L1"], - protect: ["1L1"], - psychic: ["1L1"], - psyshock: ["1L1"], - recover: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - sandstorm: ["1L1"], - shadowball: ["1L1"], - sleeptalk: ["1L1"], - steelbeam: ["1L1"], - substitute: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderpunch: ["1L1"], - thunderwave: ["1L1"], - trick: ["1L1"], - }, - }, - greattusk: { - learnset: { - bodypress: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - bulkup: ["1L1"], - bulldoze: ["1L1"], - closecombat: ["1L1"], - defensecurl: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - firefang: ["1L1"], - flashcannon: ["1L1"], - gigaimpact: ["1L1"], - headlongrush: ["1L1"], - headsmash: ["1L1"], - heavyslam: ["1L1"], - highhorsepower: ["1L1"], - hornattack: ["1L1"], - hyperbeam: ["1L1"], - icefang: ["1L1"], - icespinner: ["1L1"], - ironhead: ["1L1"], - knockoff: ["1L1"], - megahorn: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - playrough: ["1L1"], - protect: ["1L1"], - psyshock: ["1L1"], - rapidspin: ["1L1"], - rest: ["1L1"], - reversal: ["1L1"], - roar: ["1L1"], - rockslide: ["1L1"], - rocktomb: ["1L1"], - rollout: ["1L1"], - sandstorm: ["1L1"], - scaryface: ["1L1"], - sleeptalk: ["1L1"], - smackdown: ["1L1"], - smartstrike: ["1L1"], - stealthrock: ["1L1"], - stompingtantrum: ["1L1"], - stoneedge: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - supercellslam: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - temperflare: ["1L1"], - terablast: ["1L1"], - throatchop: ["1L1"], - thunderfang: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 9, level: 45, nature: "Naughty", ivs: {hp: 30, atk: 30, def: 30, spa: 30, spd: 30, spe: 30}, moves: ["1L1"]}, - {generation: 9, level: 57, shiny: 1, moves: ["1L1"]}, - ], - eventOnly: false, - }, - brutebonnet: { - learnset: { - absorb: ["1L1"], - astonish: ["1L1"], - bodypress: ["1L1"], - bodyslam: ["1L1"], - bulletseed: ["1L1"], - clearsmog: ["1L1"], - closecombat: ["1L1"], - confuseray: ["1L1"], - crunch: ["1L1"], - darkpulse: ["1L1"], - doubleedge: ["1L1"], - earthpower: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - gigadrain: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - grassyterrain: ["1L1"], - growth: ["1L1"], - hex: ["1L1"], - hyperbeam: ["1L1"], - ingrain: ["1L1"], - lashout: ["1L1"], - leafstorm: ["1L1"], - magicalleaf: ["1L1"], - megadrain: ["1L1"], - outrage: ["1L1"], - payback: ["1L1"], - pollenpuff: ["1L1"], - protect: ["1L1"], - ragepowder: ["1L1"], - rest: ["1L1"], - scaryface: ["1L1"], - seedbomb: ["1L1"], - sleeptalk: ["1L1"], - solarbeam: ["1L1"], - spore: ["1L1"], - stompingtantrum: ["1L1"], - stunspore: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - sunnyday: ["1L1"], - synthesis: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thrash: ["1L1"], - trailblaze: ["1L1"], - venoshock: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 9, level: 52, shiny: 1, moves: ["1L1"]}, - ], - eventOnly: false, - }, - sandyshocks: { - learnset: { - bodypress: ["1L1"], - bodyslam: ["1L1"], - bulldoze: ["1L1"], - charge: ["1L1"], - chargebeam: ["1L1"], - discharge: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - eerieimpulse: ["1L1"], - electricterrain: ["1L1"], - electroball: ["1L1"], - electroweb: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - flashcannon: ["1L1"], - gigaimpact: ["1L1"], - gravity: ["1L1"], - heavyslam: ["1L1"], - highhorsepower: ["1L1"], - hyperbeam: ["1L1"], - irondefense: ["1L1"], - lightscreen: ["1L1"], - magneticflux: ["1L1"], - metalsound: ["1L1"], - mirrorcoat: ["1L1"], - mudshot: ["1L1"], - powergem: ["1L1"], - protect: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - sandstorm: ["1L1"], - sandtomb: ["1L1"], - scorchingsands: ["1L1"], - screech: ["1L1"], - sleeptalk: ["1L1"], - spark: ["1L1"], - spikes: ["1L1"], - stealthrock: ["1L1"], - stompingtantrum: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - supercellslam: ["1L1"], - supersonic: ["1L1"], - swift: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thundershock: ["1L1"], - thunderwave: ["1L1"], - triattack: ["1L1"], - voltswitch: ["1L1"], - wildcharge: ["1L1"], - zapcannon: ["1L1"], - }, - eventData: [ - {generation: 9, level: 52, shiny: 1, moves: ["1L1"]}, - ], - eventOnly: false, - }, - screamtail: { - learnset: { - amnesia: ["1L1"], - batonpass: ["1L1"], - bite: ["1L1"], - blizzard: ["1L1"], - bodyslam: ["1L1"], - boomburst: ["1L1"], - bulkup: ["1L1"], - calmmind: ["1L1"], - crunch: ["1L1"], - dazzlinggleam: ["1L1"], - dig: ["1L1"], - disable: ["1L1"], - doubleedge: ["1L1"], - drainpunch: ["1L1"], - encore: ["1L1"], - endure: ["1L1"], - expandingforce: ["1L1"], - facade: ["1L1"], - faketears: ["1L1"], - fireblast: ["1L1"], - firefang: ["1L1"], - firepunch: ["1L1"], - flamethrower: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - gyroball: ["1L1"], - helpinghand: ["1L1"], - howl: ["1L1"], - hyperbeam: ["1L1"], - hypervoice: ["1L1"], - icebeam: ["1L1"], - icefang: ["1L1"], - icepunch: ["1L1"], - imprison: ["1L1"], - lightscreen: ["1L1"], - metronome: ["1L1"], - mistyexplosion: ["1L1"], - mistyterrain: ["1L1"], - nobleroar: ["1L1"], - perishsong: ["1L1"], - playrough: ["1L1"], - pound: ["1L1"], - protect: ["1L1"], - psybeam: ["1L1"], - psychic: ["1L1"], - psychicfangs: ["1L1"], - psychicnoise: ["1L1"], - psychicterrain: ["1L1"], - psychup: ["1L1"], - psyshock: ["1L1"], - raindance: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - roar: ["1L1"], - rocktomb: ["1L1"], - sandstorm: ["1L1"], - scaryface: ["1L1"], - sing: ["1L1"], - sleeptalk: ["1L1"], - snowscape: ["1L1"], - stealthrock: ["1L1"], - stompingtantrum: ["1L1"], - storedpower: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderfang: ["1L1"], - thunderpunch: ["1L1"], - thunderwave: ["1L1"], - trick: ["1L1"], - trickroom: ["1L1"], - uproar: ["1L1"], - waterpulse: ["1L1"], - wish: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 9, level: 52, shiny: 1, moves: ["1L1"]}, - ], - eventOnly: false, - }, - fluttermane: { - learnset: { - astonish: ["1L1"], - calmmind: ["1L1"], - chargebeam: ["1L1"], - charm: ["1L1"], - confuseray: ["1L1"], - darkpulse: ["1L1"], - dazzlinggleam: ["1L1"], - disarmingvoice: ["1L1"], - drainingkiss: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - faketears: ["1L1"], - gigaimpact: ["1L1"], - helpinghand: ["1L1"], - hex: ["1L1"], - hyperbeam: ["1L1"], - hypervoice: ["1L1"], - icywind: ["1L1"], - imprison: ["1L1"], - magicalleaf: ["1L1"], - meanlook: ["1L1"], - memento: ["1L1"], - mistyterrain: ["1L1"], - moonblast: ["1L1"], - mysticalfire: ["1L1"], - nightshade: ["1L1"], - painsplit: ["1L1"], - perishsong: ["1L1"], - phantomforce: ["1L1"], - poltergeist: ["1L1"], - powergem: ["1L1"], - protect: ["1L1"], - psybeam: ["1L1"], - psyshock: ["1L1"], - rest: ["1L1"], - shadowball: ["1L1"], - sleeptalk: ["1L1"], - spite: ["1L1"], - storedpower: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swift: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderwave: ["1L1"], - trickroom: ["1L1"], - wish: ["1L1"], - }, - eventData: [ - {generation: 9, level: 52, shiny: 1, moves: ["1L1"]}, - ], - eventOnly: false, - }, - slitherwing: { - learnset: { - acrobatics: ["1L1"], - aerialace: ["1L1"], - bodypress: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - bugbite: ["1L1"], - bugbuzz: ["1L1"], - bulkup: ["1L1"], - closecombat: ["1L1"], - curse: ["1L1"], - doubleedge: ["1L1"], - dualwingbeat: ["1L1"], - earthquake: ["1L1"], - ember: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - firstimpression: ["1L1"], - flamecharge: ["1L1"], - flareblitz: ["1L1"], - gigadrain: ["1L1"], - gigaimpact: ["1L1"], - gust: ["1L1"], - heatcrash: ["1L1"], - heatwave: ["1L1"], - heavyslam: ["1L1"], - highhorsepower: ["1L1"], - hurricane: ["1L1"], - hyperbeam: ["1L1"], - leechlife: ["1L1"], - lowkick: ["1L1"], - lowsweep: ["1L1"], - lunge: ["1L1"], - morningsun: ["1L1"], - poisonpowder: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - reversal: ["1L1"], - sandstorm: ["1L1"], - skittersmack: ["1L1"], - sleeptalk: ["1L1"], - stomp: ["1L1"], - stompingtantrum: ["1L1"], - stunspore: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - superpower: ["1L1"], - takedown: ["1L1"], - temperflare: ["1L1"], - terablast: ["1L1"], - thrash: ["1L1"], - trailblaze: ["1L1"], - uturn: ["1L1"], - whirlwind: ["1L1"], - wildcharge: ["1L1"], - willowisp: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 9, level: 52, shiny: 1, moves: ["1L1"]}, - ], - eventOnly: false, - }, - roaringmoon: { - learnset: { - acrobatics: ["1L1"], - aerialace: ["1L1"], - airslash: ["1L1"], - bite: ["1L1"], - bodypress: ["1L1"], - bodyslam: ["1L1"], - breakingswipe: ["1L1"], - brickbreak: ["1L1"], - crunch: ["1L1"], - darkpulse: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - dracometeor: ["1L1"], - dragonbreath: ["1L1"], - dragoncheer: ["1L1"], - dragonclaw: ["1L1"], - dragondance: ["1L1"], - dragonpulse: ["1L1"], - dragonrush: ["1L1"], - dragontail: ["1L1"], - earthquake: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fireblast: ["1L1"], - firefang: ["1L1"], - firespin: ["1L1"], - flamethrower: ["1L1"], - fly: ["1L1"], - focusenergy: ["1L1"], - gigaimpact: ["1L1"], - headbutt: ["1L1"], - heatwave: ["1L1"], - hurricane: ["1L1"], - hydropump: ["1L1"], - hyperbeam: ["1L1"], - hypervoice: ["1L1"], - incinerate: ["1L1"], - ironhead: ["1L1"], - jawlock: ["1L1"], - knockoff: ["1L1"], - lashout: ["1L1"], - leer: ["1L1"], - metalclaw: ["1L1"], - nightslash: ["1L1"], - outrage: ["1L1"], - protect: ["1L1"], - rest: ["1L1"], - roar: ["1L1"], - rockslide: ["1L1"], - roost: ["1L1"], - scaleshot: ["1L1"], - scaryface: ["1L1"], - shadowclaw: ["1L1"], - sleeptalk: ["1L1"], - snarl: ["1L1"], - stompingtantrum: ["1L1"], - stoneedge: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - tailwind: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - throatchop: ["1L1"], - thunderfang: ["1L1"], - uturn: ["1L1"], - xscissor: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 9, level: 52, shiny: 1, moves: ["1L1"]}, - ], - eventOnly: false, - }, - irontreads: { - learnset: { - bodypress: ["1L1"], - bodyslam: ["1L1"], - bulldoze: ["1L1"], - defensecurl: ["1L1"], - doubleedge: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - electricterrain: ["1L1"], - electroball: ["1L1"], - endeavor: ["1L1"], - facade: ["1L1"], - flashcannon: ["1L1"], - gigaimpact: ["1L1"], - gyroball: ["1L1"], - hardpress: ["1L1"], - heavyslam: ["1L1"], - highhorsepower: ["1L1"], - hornattack: ["1L1"], - hyperbeam: ["1L1"], - icefang: ["1L1"], - icespinner: ["1L1"], - irondefense: ["1L1"], - ironhead: ["1L1"], - knockoff: ["1L1"], - megahorn: ["1L1"], - metalsound: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - protect: ["1L1"], - rapidspin: ["1L1"], - rest: ["1L1"], - rockslide: ["1L1"], - rocktomb: ["1L1"], - rollout: ["1L1"], - sandstorm: ["1L1"], - scaryface: ["1L1"], - sleeptalk: ["1L1"], - smartstrike: ["1L1"], - stealthrock: ["1L1"], - steelbeam: ["1L1"], - steelroller: ["1L1"], - stompingtantrum: ["1L1"], - stoneedge: ["1L1"], - substitute: ["1L1"], - supercellslam: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thunder: ["1L1"], - thunderfang: ["1L1"], - voltswitch: ["1L1"], - wildcharge: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 9, level: 45, nature: "Naughty", ivs: {hp: 30, atk: 30, def: 30, spa: 30, spd: 30, spe: 30}, moves: ["1L1"]}, - {generation: 9, level: 57, shiny: 1, moves: ["1L1"]}, - ], - }, - ironmoth: { - learnset: { - acidspray: ["1L1"], - acrobatics: ["1L1"], - agility: ["1L1"], - airslash: ["1L1"], - bugbuzz: ["1L1"], - chargebeam: ["1L1"], - confuseray: ["1L1"], - dazzlinggleam: ["1L1"], - discharge: ["1L1"], - electricterrain: ["1L1"], - ember: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - fierydance: ["1L1"], - fireblast: ["1L1"], - firespin: ["1L1"], - flamecharge: ["1L1"], - flamethrower: ["1L1"], - flareblitz: ["1L1"], - flashcannon: ["1L1"], - gigaimpact: ["1L1"], - gust: ["1L1"], - heatwave: ["1L1"], - helpinghand: ["1L1"], - hurricane: ["1L1"], - hyperbeam: ["1L1"], - lightscreen: ["1L1"], - lunge: ["1L1"], - metalsound: ["1L1"], - meteorbeam: ["1L1"], - morningsun: ["1L1"], - overheat: ["1L1"], - pounce: ["1L1"], - protect: ["1L1"], - psychic: ["1L1"], - rest: ["1L1"], - screech: ["1L1"], - sleeptalk: ["1L1"], - sludgewave: ["1L1"], - solarbeam: ["1L1"], - strugglebug: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swift: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - toxic: ["1L1"], - toxicspikes: ["1L1"], - uturn: ["1L1"], - venoshock: ["1L1"], - whirlwind: ["1L1"], - }, - eventData: [ - {generation: 9, level: 52, shiny: 1, moves: ["1L1"]}, - ], - eventOnly: false, - }, - ironhands: { - learnset: { - armthrust: ["1L1"], - bellydrum: ["1L1"], - bodypress: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - bulldoze: ["1L1"], - charge: ["1L1"], - closecombat: ["1L1"], - detect: ["1L1"], - doubleedge: ["1L1"], - drainpunch: ["1L1"], - earthquake: ["1L1"], - electricterrain: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fakeout: ["1L1"], - firepunch: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - focusenergy: ["1L1"], - focuspunch: ["1L1"], - forcepalm: ["1L1"], - gigaimpact: ["1L1"], - hardpress: ["1L1"], - heavyslam: ["1L1"], - hyperbeam: ["1L1"], - icepunch: ["1L1"], - irondefense: ["1L1"], - ironhead: ["1L1"], - lowkick: ["1L1"], - lowsweep: ["1L1"], - metronome: ["1L1"], - playrough: ["1L1"], - protect: ["1L1"], - rest: ["1L1"], - reversal: ["1L1"], - rockslide: ["1L1"], - rocktomb: ["1L1"], - sandattack: ["1L1"], - scaryface: ["1L1"], - seismictoss: ["1L1"], - slam: ["1L1"], - sleeptalk: ["1L1"], - stompingtantrum: ["1L1"], - substitute: ["1L1"], - supercellslam: ["1L1"], - swordsdance: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderpunch: ["1L1"], - voltswitch: ["1L1"], - whirlwind: ["1L1"], - wildcharge: ["1L1"], - }, - eventData: [ - {generation: 9, level: 52, shiny: 1, moves: ["1L1"]}, - ], - eventOnly: false, - }, - ironjugulis: { - learnset: { - acrobatics: ["1L1"], - aircutter: ["1L1"], - airslash: ["1L1"], - assurance: ["1L1"], - bodyslam: ["1L1"], - chargebeam: ["1L1"], - crunch: ["1L1"], - darkpulse: ["1L1"], - doubleedge: ["1L1"], - dragonbreath: ["1L1"], - dragoncheer: ["1L1"], - dragonpulse: ["1L1"], - dragontail: ["1L1"], - dualwingbeat: ["1L1"], - earthpower: ["1L1"], - electricterrain: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fireblast: ["1L1"], - firefang: ["1L1"], - flamethrower: ["1L1"], - flashcannon: ["1L1"], - fly: ["1L1"], - focusblast: ["1L1"], - focusenergy: ["1L1"], - gigaimpact: ["1L1"], - heatwave: ["1L1"], - hurricane: ["1L1"], - hydropump: ["1L1"], - hyperbeam: ["1L1"], - hypervoice: ["1L1"], - ironhead: ["1L1"], - knockoff: ["1L1"], - lashout: ["1L1"], - metalsound: ["1L1"], - meteorbeam: ["1L1"], - outrage: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - roar: ["1L1"], - rocktomb: ["1L1"], - scaryface: ["1L1"], - sleeptalk: ["1L1"], - snarl: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - tailwind: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - throatchop: ["1L1"], - triattack: ["1L1"], - uturn: ["1L1"], - workup: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 9, level: 52, shiny: 1, moves: ["1L1"]}, - ], - eventOnly: false, - }, - ironthorns: { - learnset: { - bite: ["1L1"], - blizzard: ["1L1"], - bodypress: ["1L1"], - bodyslam: ["1L1"], - breakingswipe: ["1L1"], - brickbreak: ["1L1"], - bulldoze: ["1L1"], - charge: ["1L1"], - chargebeam: ["1L1"], - crunch: ["1L1"], - curse: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - dragonclaw: ["1L1"], - dragondance: ["1L1"], - dragontail: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - eerieimpulse: ["1L1"], - electricterrain: ["1L1"], - electroball: ["1L1"], - electroweb: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fireblast: ["1L1"], - firefang: ["1L1"], - firepunch: ["1L1"], - flamethrower: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - gigaimpact: ["1L1"], - heavyslam: ["1L1"], - highhorsepower: ["1L1"], - hyperbeam: ["1L1"], - icebeam: ["1L1"], - icefang: ["1L1"], - icepunch: ["1L1"], - irondefense: ["1L1"], - ironhead: ["1L1"], - lowkick: ["1L1"], - metalclaw: ["1L1"], - meteorbeam: ["1L1"], - pinmissile: ["1L1"], - powergem: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - rockblast: ["1L1"], - rockslide: ["1L1"], - rockthrow: ["1L1"], - rocktomb: ["1L1"], - sandstorm: ["1L1"], - sandtomb: ["1L1"], - scaryface: ["1L1"], - screech: ["1L1"], - sleeptalk: ["1L1"], - smackdown: ["1L1"], - snarl: ["1L1"], - spikes: ["1L1"], - stealthrock: ["1L1"], - stompingtantrum: ["1L1"], - stoneedge: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - supercellslam: ["1L1"], - swordsdance: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderfang: ["1L1"], - thunderpunch: ["1L1"], - thunderwave: ["1L1"], - voltswitch: ["1L1"], - wildcharge: ["1L1"], - }, - eventData: [ - {generation: 9, level: 52, shiny: 1, moves: ["1L1"]}, - ], - eventOnly: false, - }, - ironbundle: { - learnset: { - acrobatics: ["1L1"], - agility: ["1L1"], - aircutter: ["1L1"], - auroraveil: ["1L1"], - avalanche: ["1L1"], - blizzard: ["1L1"], - bodyslam: ["1L1"], - chillingwater: ["1L1"], - drillpeck: ["1L1"], - electricterrain: ["1L1"], - encore: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fling: ["1L1"], - flipturn: ["1L1"], - freezedry: ["1L1"], - gigaimpact: ["1L1"], - helpinghand: ["1L1"], - hydropump: ["1L1"], - hyperbeam: ["1L1"], - icebeam: ["1L1"], - icepunch: ["1L1"], - icespinner: ["1L1"], - icywind: ["1L1"], - playrough: ["1L1"], - powdersnow: ["1L1"], - present: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - sleeptalk: ["1L1"], - snowscape: ["1L1"], - substitute: ["1L1"], - swift: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - uturn: ["1L1"], - waterpulse: ["1L1"], - whirlpool: ["1L1"], - }, - eventData: [ - {generation: 9, level: 52, shiny: 1, moves: ["1L1"]}, - ], - eventOnly: false, - }, - ironvaliant: { - learnset: { - aerialace: ["1L1"], - agility: ["1L1"], - aurasphere: ["1L1"], - brickbreak: ["1L1"], - calmmind: ["1L1"], - chargebeam: ["1L1"], - closecombat: ["1L1"], - coaching: ["1L1"], - confuseray: ["1L1"], - dazzlinggleam: ["1L1"], - destinybond: ["1L1"], - disable: ["1L1"], - doubleteam: ["1L1"], - drainpunch: ["1L1"], - electricterrain: ["1L1"], - encore: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - expandingforce: ["1L1"], - falseswipe: ["1L1"], - feint: ["1L1"], - firepunch: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - furycutter: ["1L1"], - futuresight: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - helpinghand: ["1L1"], - hex: ["1L1"], - hyperbeam: ["1L1"], - hypervoice: ["1L1"], - hypnosis: ["1L1"], - icepunch: ["1L1"], - icywind: ["1L1"], - imprison: ["1L1"], - knockoff: ["1L1"], - leafblade: ["1L1"], - lightscreen: ["1L1"], - liquidation: ["1L1"], - lowkick: ["1L1"], - magicalleaf: ["1L1"], - metronome: ["1L1"], - mistyterrain: ["1L1"], - moonblast: ["1L1"], - nightslash: ["1L1"], - poisonjab: ["1L1"], - protect: ["1L1"], - psybeam: ["1L1"], - psychic: ["1L1"], - psychicterrain: ["1L1"], - psychocut: ["1L1"], - psychup: ["1L1"], - psyshock: ["1L1"], - quickguard: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - reversal: ["1L1"], - shadowball: ["1L1"], - shadowclaw: ["1L1"], - shadowsneak: ["1L1"], - skillswap: ["1L1"], - sleeptalk: ["1L1"], - spiritbreak: ["1L1"], - storedpower: ["1L1"], - substitute: ["1L1"], - swift: ["1L1"], - swordsdance: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - throatchop: ["1L1"], - thunderbolt: ["1L1"], - thunderpunch: ["1L1"], - thunderwave: ["1L1"], - trick: ["1L1"], - trickroom: ["1L1"], - vacuumwave: ["1L1"], - wideguard: ["1L1"], - xscissor: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 9, level: 52, shiny: 1, moves: ["1L1"]}, - ], - eventOnly: false, - }, - tinglu: { - learnset: { - bodypress: ["1L1"], - bodyslam: ["1L1"], - bulldoze: ["1L1"], - darkpulse: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fissure: ["1L1"], - gigaimpact: ["1L1"], - heavyslam: ["1L1"], - hex: ["1L1"], - hyperbeam: ["1L1"], - lashout: ["1L1"], - meanlook: ["1L1"], - memento: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - payback: ["1L1"], - protect: ["1L1"], - rest: ["1L1"], - rockslide: ["1L1"], - rocktomb: ["1L1"], - ruination: ["1L1"], - sandstorm: ["1L1"], - sandtomb: ["1L1"], - scaryface: ["1L1"], - sleeptalk: ["1L1"], - snarl: ["1L1"], - spikes: ["1L1"], - spite: ["1L1"], - stealthrock: ["1L1"], - stomp: ["1L1"], - stompingtantrum: ["1L1"], - stoneedge: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thrash: ["1L1"], - throatchop: ["1L1"], - whirlwind: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 9, level: 60, moves: ["1L1"]}, - ], - eventOnly: false, - }, - chienpao: { - learnset: { - acrobatics: ["1L1"], - aerialace: ["1L1"], - avalanche: ["1L1"], - blizzard: ["1L1"], - brickbreak: ["1L1"], - crunch: ["1L1"], - darkpulse: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - falseswipe: ["1L1"], - gigaimpact: ["1L1"], - haze: ["1L1"], - hex: ["1L1"], - hyperbeam: ["1L1"], - icefang: ["1L1"], - iceshard: ["1L1"], - icespinner: ["1L1"], - iciclecrash: ["1L1"], - icywind: ["1L1"], - lashout: ["1L1"], - meanlook: ["1L1"], - mist: ["1L1"], - nightslash: ["1L1"], - payback: ["1L1"], - powdersnow: ["1L1"], - protect: ["1L1"], - psychicfangs: ["1L1"], - raindance: ["1L1"], - recover: ["1L1"], - rest: ["1L1"], - ruination: ["1L1"], - sacredsword: ["1L1"], - scaryface: ["1L1"], - sheercold: ["1L1"], - sleeptalk: ["1L1"], - snarl: ["1L1"], - snowscape: ["1L1"], - spite: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - swordsdance: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - throatchop: ["1L1"], - }, - eventData: [ - {generation: 9, level: 60, moves: ["1L1"]}, - ], - eventOnly: false, - }, - wochien: { - learnset: { - absorb: ["1L1"], - bodypress: ["1L1"], - bodyslam: ["1L1"], - bulletseed: ["1L1"], - darkpulse: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - foulplay: ["1L1"], - gigadrain: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - grassyterrain: ["1L1"], - growth: ["1L1"], - hex: ["1L1"], - hyperbeam: ["1L1"], - ingrain: ["1L1"], - knockoff: ["1L1"], - lashout: ["1L1"], - leafstorm: ["1L1"], - leechseed: ["1L1"], - lightscreen: ["1L1"], - magicalleaf: ["1L1"], - meanlook: ["1L1"], - megadrain: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - payback: ["1L1"], - poisonpowder: ["1L1"], - pollenpuff: ["1L1"], - powerwhip: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - ruination: ["1L1"], - scaryface: ["1L1"], - seedbomb: ["1L1"], - sleeptalk: ["1L1"], - snarl: ["1L1"], - solarbeam: ["1L1"], - solarblade: ["1L1"], - spite: ["1L1"], - stunspore: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - tickle: ["1L1"], - trailblaze: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 9, level: 60, moves: ["1L1"]}, - ], - eventOnly: false, - }, - chiyu: { - learnset: { - bounce: ["1L1"], - burningjealousy: ["1L1"], - confuseray: ["1L1"], - crunch: ["1L1"], - darkpulse: ["1L1"], - ember: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fireblast: ["1L1"], - firespin: ["1L1"], - flamecharge: ["1L1"], - flamethrower: ["1L1"], - flamewheel: ["1L1"], - flareblitz: ["1L1"], - gigaimpact: ["1L1"], - heatwave: ["1L1"], - hex: ["1L1"], - hyperbeam: ["1L1"], - incinerate: ["1L1"], - inferno: ["1L1"], - lashout: ["1L1"], - lavaplume: ["1L1"], - lightscreen: ["1L1"], - meanlook: ["1L1"], - memento: ["1L1"], - nastyplot: ["1L1"], - overheat: ["1L1"], - payback: ["1L1"], - protect: ["1L1"], - psychic: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - ruination: ["1L1"], - scaryface: ["1L1"], - sleeptalk: ["1L1"], - snarl: ["1L1"], - spite: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - temperflare: ["1L1"], - terablast: ["1L1"], - willowisp: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 9, level: 60, moves: ["1L1"]}, - ], - eventOnly: false, - }, - koraidon: { - learnset: { - acrobatics: ["1L1"], - agility: ["1L1"], - ancientpower: ["1L1"], - bodypress: ["1L1"], - bodyslam: ["1L1"], - breakingswipe: ["1L1"], - brickbreak: ["1L1"], - bulkup: ["1L1"], - bulldoze: ["1L1"], - closecombat: ["1L1"], - collisioncourse: ["1L1"], - counter: ["1L1"], - crunch: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - dracometeor: ["1L1"], - dragoncheer: ["1L1"], - dragonclaw: ["1L1"], - dragonpulse: ["1L1"], - dragontail: ["1L1"], - drainpunch: ["1L1"], - dualwingbeat: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fireblast: ["1L1"], - firefang: ["1L1"], - firespin: ["1L1"], - flamecharge: ["1L1"], - flamethrower: ["1L1"], - flareblitz: ["1L1"], - focusblast: ["1L1"], - focuspunch: ["1L1"], - gigaimpact: ["1L1"], - heatcrash: ["1L1"], - heatwave: ["1L1"], - heavyslam: ["1L1"], - helpinghand: ["1L1"], - hyperbeam: ["1L1"], - icefang: ["1L1"], - ironhead: ["1L1"], - lowkick: ["1L1"], - lowsweep: ["1L1"], - meteorbeam: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - outrage: ["1L1"], - overheat: ["1L1"], - protect: ["1L1"], - rest: ["1L1"], - reversal: ["1L1"], - roar: ["1L1"], - rocksmash: ["1L1"], - scaleshot: ["1L1"], - scaryface: ["1L1"], - screech: ["1L1"], - shadowclaw: ["1L1"], - sleeptalk: ["1L1"], - snarl: ["1L1"], - solarbeam: ["1L1"], - stompingtantrum: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swordsdance: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - temperflare: ["1L1"], - terablast: ["1L1"], - thunderfang: ["1L1"], - uproar: ["1L1"], - uturn: ["1L1"], - wildcharge: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 9, level: 68, nature: "Quirky", ivs: {hp: 31, atk: 31, def: 28, spa: 31, spd: 28, spe: 31}, moves: ["1L1"], pokeball: "pokeball"}, - {generation: 9, level: 72, nature: "Adamant", ivs: {hp: 25, atk: 31, def: 25, spa: 31, spd: 25, spe: 31}, moves: ["1L1"]}, - ], - eventOnly: false, - }, - miraidon: { - learnset: { - acrobatics: ["1L1"], - agility: ["1L1"], - bodyslam: ["1L1"], - calmmind: ["1L1"], - charge: ["1L1"], - chargebeam: ["1L1"], - confuseray: ["1L1"], - crunch: ["1L1"], - dazzlinggleam: ["1L1"], - discharge: ["1L1"], - dracometeor: ["1L1"], - dragonbreath: ["1L1"], - dragoncheer: ["1L1"], - dragonclaw: ["1L1"], - dragonpulse: ["1L1"], - dragontail: ["1L1"], - eerieimpulse: ["1L1"], - electricterrain: ["1L1"], - electroball: ["1L1"], - electrodrift: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - flashcannon: ["1L1"], - gigaimpact: ["1L1"], - heavyslam: ["1L1"], - helpinghand: ["1L1"], - hyperbeam: ["1L1"], - lightscreen: ["1L1"], - metalsound: ["1L1"], - mirrorcoat: ["1L1"], - outrage: ["1L1"], - overheat: ["1L1"], - paraboliccharge: ["1L1"], - powergem: ["1L1"], - protect: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - scaryface: ["1L1"], - shockwave: ["1L1"], - sleeptalk: ["1L1"], - snarl: ["1L1"], - solarbeam: ["1L1"], - substitute: ["1L1"], - supercellslam: ["1L1"], - swordsdance: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thundershock: ["1L1"], - thunderwave: ["1L1"], - uturn: ["1L1"], - voltswitch: ["1L1"], - wildcharge: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 9, level: 68, nature: "Quirky", ivs: {hp: 31, atk: 31, def: 28, spa: 31, spd: 28, spe: 31}, moves: ["1L1"], pokeball: "pokeball"}, - {generation: 9, level: 72, nature: "Modest", ivs: {hp: 25, atk: 31, def: 25, spa: 31, spd: 25, spe: 31}, moves: ["1L1"]}, - ], - eventOnly: false, - }, - tinkatink: { - learnset: { - astonish: ["1L1"], - babydolleyes: ["1L1"], - brutalswing: ["1L1"], - covet: ["1L1"], - drainingkiss: ["1L1"], - encore: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fairywind: ["1L1"], - fakeout: ["1L1"], - faketears: ["1L1"], - feint: ["1L1"], - flashcannon: ["1L1"], - flatter: ["1L1"], - fling: ["1L1"], - foulplay: ["1L1"], - helpinghand: ["1L1"], - icehammer: ["1L1"], - knockoff: ["1L1"], - lightscreen: ["1L1"], - metalclaw: ["1L1"], - metalsound: ["1L1"], - metronome: ["1L1"], - playrough: ["1L1"], - pounce: ["1L1"], - protect: ["1L1"], - quash: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - skillswap: ["1L1"], - skittersmack: ["1L1"], - slam: ["1L1"], - sleeptalk: ["1L1"], - stealthrock: ["1L1"], - steelbeam: ["1L1"], - stoneedge: ["1L1"], - substitute: ["1L1"], - sweetkiss: ["1L1"], - swordsdance: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thunderwave: ["1L1"], - }, - }, - tinkatuff: { - learnset: { - astonish: ["1L1"], - babydolleyes: ["1L1"], - brickbreak: ["1L1"], - brutalswing: ["1L1"], - covet: ["1L1"], - drainingkiss: ["1L1"], - encore: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fairywind: ["1L1"], - fakeout: ["1L1"], - faketears: ["1L1"], - flashcannon: ["1L1"], - flatter: ["1L1"], - fling: ["1L1"], - foulplay: ["1L1"], - helpinghand: ["1L1"], - knockoff: ["1L1"], - lightscreen: ["1L1"], - metalclaw: ["1L1"], - metalsound: ["1L1"], - metronome: ["1L1"], - playrough: ["1L1"], - pounce: ["1L1"], - protect: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - skillswap: ["1L1"], - skittersmack: ["1L1"], - slam: ["1L1"], - sleeptalk: ["1L1"], - stealthrock: ["1L1"], - steelbeam: ["1L1"], - stoneedge: ["1L1"], - substitute: ["1L1"], - sweetkiss: ["1L1"], - swordsdance: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thunderwave: ["1L1"], - }, - }, - tinkaton: { - learnset: { - astonish: ["1L1"], - babydolleyes: ["1L1"], - brickbreak: ["1L1"], - brutalswing: ["1L1"], - bulldoze: ["1L1"], - covet: ["1L1"], - drainingkiss: ["1L1"], - encore: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fairywind: ["1L1"], - fakeout: ["1L1"], - faketears: ["1L1"], - flashcannon: ["1L1"], - flatter: ["1L1"], - fling: ["1L1"], - foulplay: ["1L1"], - gigatonhammer: ["1L1"], - hardpress: ["1L1"], - heavyslam: ["1L1"], - helpinghand: ["1L1"], - knockoff: ["1L1"], - lightscreen: ["1L1"], - metalclaw: ["1L1"], - metalsound: ["1L1"], - metronome: ["1L1"], - playrough: ["1L1"], - pounce: ["1L1"], - protect: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - skillswap: ["1L1"], - skittersmack: ["1L1"], - slam: ["1L1"], - sleeptalk: ["1L1"], - smackdown: ["1L1"], - stealthrock: ["1L1"], - steelbeam: ["1L1"], - stoneedge: ["1L1"], - substitute: ["1L1"], - sweetkiss: ["1L1"], - swordsdance: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thunderwave: ["1L1"], - }, - }, - charcadet: { - learnset: { - astonish: ["1L1"], - celebrate: ["1L1"], - clearsmog: ["1L1"], - confuseray: ["1L1"], - destinybond: ["1L1"], - disable: ["1L1"], - ember: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fireblast: ["1L1"], - firespin: ["1L1"], - flamecharge: ["1L1"], - flamethrower: ["1L1"], - flareblitz: ["1L1"], - heatwave: ["1L1"], - helpinghand: ["1L1"], - incinerate: ["1L1"], - lavaplume: ["1L1"], - leer: ["1L1"], - nightshade: ["1L1"], - overheat: ["1L1"], - protect: ["1L1"], - rest: ["1L1"], - sleeptalk: ["1L1"], - spite: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - willowisp: ["1L1"], - }, - eventData: [ - {generation: 9, level: 5, moves: ["1L1"], pokeball: "cherishball"}, - ], - }, - armarouge: { - learnset: { - acidspray: ["1L1"], - allyswitch: ["1L1"], - armorcannon: ["1L1"], - astonish: ["1L1"], - aurasphere: ["1L1"], - calmmind: ["1L1"], - clearsmog: ["1L1"], - confuseray: ["1L1"], - darkpulse: ["1L1"], - dragonpulse: ["1L1"], - ember: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - expandingforce: ["1L1"], - facade: ["1L1"], - fireblast: ["1L1"], - firespin: ["1L1"], - flamecharge: ["1L1"], - flamethrower: ["1L1"], - flareblitz: ["1L1"], - flashcannon: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - heatwave: ["1L1"], - helpinghand: ["1L1"], - incinerate: ["1L1"], - irondefense: ["1L1"], - lavaplume: ["1L1"], - leer: ["1L1"], - lightscreen: ["1L1"], - meteorbeam: ["1L1"], - mysticalfire: ["1L1"], - nightshade: ["1L1"], - overheat: ["1L1"], - protect: ["1L1"], - psybeam: ["1L1"], - psychic: ["1L1"], - psychicterrain: ["1L1"], - psychup: ["1L1"], - psyshock: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - scorchingsands: ["1L1"], - shadowball: ["1L1"], - sleeptalk: ["1L1"], - solarbeam: ["1L1"], - spite: ["1L1"], - storedpower: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - trick: ["1L1"], - trickroom: ["1L1"], - weatherball: ["1L1"], - wideguard: ["1L1"], - willowisp: ["1L1"], - }, - }, - ceruledge: { - learnset: { - allyswitch: ["1L1"], - astonish: ["1L1"], - bitterblade: ["1L1"], - brickbreak: ["1L1"], - bulkup: ["1L1"], - clearsmog: ["1L1"], - closecombat: ["1L1"], - confuseray: ["1L1"], - curse: ["1L1"], - dragonclaw: ["1L1"], - ember: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - falseswipe: ["1L1"], - fireblast: ["1L1"], - firespin: ["1L1"], - flamecharge: ["1L1"], - flamethrower: ["1L1"], - flareblitz: ["1L1"], - fling: ["1L1"], - heatwave: ["1L1"], - helpinghand: ["1L1"], - hex: ["1L1"], - incinerate: ["1L1"], - irondefense: ["1L1"], - ironhead: ["1L1"], - lavaplume: ["1L1"], - leer: ["1L1"], - lightscreen: ["1L1"], - nightshade: ["1L1"], - nightslash: ["1L1"], - overheat: ["1L1"], - phantomforce: ["1L1"], - poisonjab: ["1L1"], - poltergeist: ["1L1"], - protect: ["1L1"], - psychocut: ["1L1"], - psychup: ["1L1"], - quickguard: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - shadowball: ["1L1"], - shadowclaw: ["1L1"], - shadowsneak: ["1L1"], - sleeptalk: ["1L1"], - solarblade: ["1L1"], - spite: ["1L1"], - storedpower: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swordsdance: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - throatchop: ["1L1"], - vacuumwave: ["1L1"], - willowisp: ["1L1"], - xscissor: ["1L1"], - }, - }, - toedscool: { - learnset: { - absorb: ["1L1"], - acidspray: ["1L1"], - acupressure: ["1L1"], - bulletseed: ["1L1"], - confuseray: ["1L1"], - dazzlinggleam: ["1L1"], - earthpower: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - flashcannon: ["1L1"], - foulplay: ["1L1"], - gigadrain: ["1L1"], - grassknot: ["1L1"], - grassyglide: ["1L1"], - grassyterrain: ["1L1"], - growth: ["1L1"], - hex: ["1L1"], - knockoff: ["1L1"], - leafstorm: ["1L1"], - leechseed: ["1L1"], - lightscreen: ["1L1"], - lunge: ["1L1"], - magicalleaf: ["1L1"], - megadrain: ["1L1"], - mirrorcoat: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - painsplit: ["1L1"], - poisonpowder: ["1L1"], - powerwhip: ["1L1"], - protect: ["1L1"], - ragepowder: ["1L1"], - raindance: ["1L1"], - rapidspin: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - scaryface: ["1L1"], - screech: ["1L1"], - seedbomb: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - solarbeam: ["1L1"], - spikes: ["1L1"], - spore: ["1L1"], - stunspore: ["1L1"], - substitute: ["1L1"], - supersonic: ["1L1"], - swift: ["1L1"], - tackle: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - tickle: ["1L1"], - toxic: ["1L1"], - toxicspikes: ["1L1"], - trailblaze: ["1L1"], - trickroom: ["1L1"], - venoshock: ["1L1"], - wrap: ["1L1"], - }, - }, - toedscruel: { - learnset: { - absorb: ["1L1"], - acidspray: ["1L1"], - bulletseed: ["1L1"], - confuseray: ["1L1"], - dazzlinggleam: ["1L1"], - earthpower: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - flashcannon: ["1L1"], - foulplay: ["1L1"], - gigadrain: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - grassyglide: ["1L1"], - grassyterrain: ["1L1"], - growth: ["1L1"], - hex: ["1L1"], - hyperbeam: ["1L1"], - knockoff: ["1L1"], - leafstorm: ["1L1"], - lightscreen: ["1L1"], - lunge: ["1L1"], - magicalleaf: ["1L1"], - megadrain: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - painsplit: ["1L1"], - poisonpowder: ["1L1"], - powerwhip: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - reflect: ["1L1"], - reflecttype: ["1L1"], - rest: ["1L1"], - scaryface: ["1L1"], - screech: ["1L1"], - seedbomb: ["1L1"], - skittersmack: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - solarbeam: ["1L1"], - spikes: ["1L1"], - spore: ["1L1"], - stunspore: ["1L1"], - substitute: ["1L1"], - supersonic: ["1L1"], - swift: ["1L1"], - tackle: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - toxic: ["1L1"], - toxicspikes: ["1L1"], - trailblaze: ["1L1"], - trickroom: ["1L1"], - venoshock: ["1L1"], - wrap: ["1L1"], - }, - }, - walkingwake: { - learnset: { - agility: ["1L1"], - aquajet: ["1L1"], - bite: ["1L1"], - bodyslam: ["1L1"], - breakingswipe: ["1L1"], - chillingwater: ["1L1"], - crunch: ["1L1"], - doubleedge: ["1L1"], - dracometeor: ["1L1"], - dragonbreath: ["1L1"], - dragoncheer: ["1L1"], - dragonclaw: ["1L1"], - dragondance: ["1L1"], - dragonpulse: ["1L1"], - dragonrush: ["1L1"], - dragontail: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - firefang: ["1L1"], - flamethrower: ["1L1"], - flipturn: ["1L1"], - gigaimpact: ["1L1"], - honeclaws: ["1L1"], - hurricane: ["1L1"], - hydropump: ["1L1"], - hydrosteam: ["1L1"], - hyperbeam: ["1L1"], - knockoff: ["1L1"], - leer: ["1L1"], - liquidation: ["1L1"], - lowkick: ["1L1"], - mudshot: ["1L1"], - nobleroar: ["1L1"], - outrage: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - roar: ["1L1"], - scald: ["1L1"], - scaryface: ["1L1"], - sleeptalk: ["1L1"], - snarl: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - surf: ["1L1"], - swift: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - twister: ["1L1"], - waterfall: ["1L1"], - waterpulse: ["1L1"], - weatherball: ["1L1"], - whirlpool: ["1L1"], - }, - eventData: [ - {generation: 9, level: 75, perfectIVs: 3, moves: ["1L1"]}, - ], - eventOnly: false, - }, - ironleaves: { - learnset: { - aerialace: ["1L1"], - agility: ["1L1"], - airslash: ["1L1"], - allyswitch: ["1L1"], - brickbreak: ["1L1"], - calmmind: ["1L1"], - closecombat: ["1L1"], - coaching: ["1L1"], - doubleedge: ["1L1"], - electricterrain: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - falseswipe: ["1L1"], - focusblast: ["1L1"], - gigadrain: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - grassyterrain: ["1L1"], - gravity: ["1L1"], - helpinghand: ["1L1"], - hyperbeam: ["1L1"], - imprison: ["1L1"], - irondefense: ["1L1"], - leafblade: ["1L1"], - leafstorm: ["1L1"], - leer: ["1L1"], - magicalleaf: ["1L1"], - megahorn: ["1L1"], - metalsound: ["1L1"], - nightslash: ["1L1"], - protect: ["1L1"], - psyblade: ["1L1"], - psychicterrain: ["1L1"], - quash: ["1L1"], - quickattack: ["1L1"], - quickguard: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - reversal: ["1L1"], - sacredsword: ["1L1"], - scaryface: ["1L1"], - sleeptalk: ["1L1"], - smartstrike: ["1L1"], - solarbeam: ["1L1"], - solarblade: ["1L1"], - substitute: ["1L1"], - swift: ["1L1"], - swordsdance: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - throatchop: ["1L1"], - trailblaze: ["1L1"], - wildcharge: ["1L1"], - workup: ["1L1"], - xscissor: ["1L1"], - }, - eventData: [ - {generation: 9, level: 75, perfectIVs: 3, moves: ["1L1"]}, - ], - eventOnly: false, - }, - dipplin: { - learnset: { - astonish: ["1L1"], - bodyslam: ["1L1"], - bugbite: ["1L1"], - bulletseed: ["1L1"], - doublehit: ["1L1"], - dracometeor: ["1L1"], - dragonbreath: ["1L1"], - dragoncheer: ["1L1"], - dragonpulse: ["1L1"], - dragontail: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - gigadrain: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - grassyglide: ["1L1"], - grassyterrain: ["1L1"], - growth: ["1L1"], - gyroball: ["1L1"], - hyperbeam: ["1L1"], - infestation: ["1L1"], - leafstorm: ["1L1"], - outrage: ["1L1"], - pollenpuff: ["1L1"], - pounce: ["1L1"], - protect: ["1L1"], - recover: ["1L1"], - recycle: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - seedbomb: ["1L1"], - sleeptalk: ["1L1"], - solarbeam: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - sweetscent: ["1L1"], - syrupbomb: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - withdraw: ["1L1"], - }, - }, - poltchageist: { - learnset: { - absorb: ["1L1"], - astonish: ["1L1"], - calmmind: ["1L1"], - curse: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - foulplay: ["1L1"], - gigadrain: ["1L1"], - grassyterrain: ["1L1"], - hex: ["1L1"], - imprison: ["1L1"], - irondefense: ["1L1"], - leafstorm: ["1L1"], - lifedew: ["1L1"], - magicalleaf: ["1L1"], - megadrain: ["1L1"], - memento: ["1L1"], - nastyplot: ["1L1"], - nightshade: ["1L1"], - painsplit: ["1L1"], - phantomforce: ["1L1"], - poltergeist: ["1L1"], - protect: ["1L1"], - psychup: ["1L1"], - ragepowder: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - scald: ["1L1"], - shadowball: ["1L1"], - sleeptalk: ["1L1"], - solarbeam: ["1L1"], - spite: ["1L1"], - stunspore: ["1L1"], - substitute: ["1L1"], - terablast: ["1L1"], - trickroom: ["1L1"], - uproar: ["1L1"], - withdraw: ["1L1"], - }, - }, - poltchageistartisan: { - learnset: { - absorb: ["1L1"], - astonish: ["1L1"], - calmmind: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - foulplay: ["1L1"], - gigadrain: ["1L1"], - grassyterrain: ["1L1"], - hex: ["1L1"], - imprison: ["1L1"], - irondefense: ["1L1"], - leafstorm: ["1L1"], - lifedew: ["1L1"], - magicalleaf: ["1L1"], - megadrain: ["1L1"], - memento: ["1L1"], - nastyplot: ["1L1"], - nightshade: ["1L1"], - phantomforce: ["1L1"], - poltergeist: ["1L1"], - protect: ["1L1"], - ragepowder: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - scald: ["1L1"], - shadowball: ["1L1"], - sleeptalk: ["1L1"], - solarbeam: ["1L1"], - spite: ["1L1"], - stunspore: ["1L1"], - substitute: ["1L1"], - terablast: ["1L1"], - trickroom: ["1L1"], - uproar: ["1L1"], - withdraw: ["1L1"], - }, - }, - sinistcha: { - learnset: { - absorb: ["1L1"], - astonish: ["1L1"], - calmmind: ["1L1"], - curse: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - foulplay: ["1L1"], - gigadrain: ["1L1"], - grassyterrain: ["1L1"], - hex: ["1L1"], - hyperbeam: ["1L1"], - imprison: ["1L1"], - irondefense: ["1L1"], - leafstorm: ["1L1"], - lifedew: ["1L1"], - magicalleaf: ["1L1"], - matchagotcha: ["1L1"], - megadrain: ["1L1"], - memento: ["1L1"], - nastyplot: ["1L1"], - nightshade: ["1L1"], - painsplit: ["1L1"], - phantomforce: ["1L1"], - poltergeist: ["1L1"], - protect: ["1L1"], - psychup: ["1L1"], - ragepowder: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - scald: ["1L1"], - shadowball: ["1L1"], - sleeptalk: ["1L1"], - solarbeam: ["1L1"], - spite: ["1L1"], - strengthsap: ["1L1"], - stunspore: ["1L1"], - substitute: ["1L1"], - terablast: ["1L1"], - trickroom: ["1L1"], - uproar: ["1L1"], - withdraw: ["1L1"], - }, - }, - sinistchamasterpiece: { - learnset: { - absorb: ["1L1"], - astonish: ["1L1"], - calmmind: ["1L1"], - curse: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - foulplay: ["1L1"], - gigadrain: ["1L1"], - grassyterrain: ["1L1"], - hex: ["1L1"], - hyperbeam: ["1L1"], - imprison: ["1L1"], - irondefense: ["1L1"], - leafstorm: ["1L1"], - lifedew: ["1L1"], - magicalleaf: ["1L1"], - matchagotcha: ["1L1"], - megadrain: ["1L1"], - memento: ["1L1"], - nastyplot: ["1L1"], - nightshade: ["1L1"], - painsplit: ["1L1"], - phantomforce: ["1L1"], - poltergeist: ["1L1"], - protect: ["1L1"], - psychup: ["1L1"], - ragepowder: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - scald: ["1L1"], - shadowball: ["1L1"], - sleeptalk: ["1L1"], - solarbeam: ["1L1"], - spite: ["1L1"], - strengthsap: ["1L1"], - stunspore: ["1L1"], - substitute: ["1L1"], - terablast: ["1L1"], - trickroom: ["1L1"], - uproar: ["1L1"], - withdraw: ["1L1"], - }, - }, - okidogi: { - learnset: { - bite: ["1L1"], - bodypress: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - brutalswing: ["1L1"], - bulkup: ["1L1"], - closecombat: ["1L1"], - counter: ["1L1"], - crunch: ["1L1"], - curse: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - drainpunch: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - firefang: ["1L1"], - firepunch: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - focuspunch: ["1L1"], - forcepalm: ["1L1"], - gigaimpact: ["1L1"], - gunkshot: ["1L1"], - hardpress: ["1L1"], - highhorsepower: ["1L1"], - howl: ["1L1"], - hyperbeam: ["1L1"], - icefang: ["1L1"], - icepunch: ["1L1"], - ironhead: ["1L1"], - knockoff: ["1L1"], - lashout: ["1L1"], - lowkick: ["1L1"], - lowsweep: ["1L1"], - metalclaw: ["1L1"], - outrage: ["1L1"], - poisonfang: ["1L1"], - poisonjab: ["1L1"], - poisontail: ["1L1"], - protect: ["1L1"], - psychicfangs: ["1L1"], - rest: ["1L1"], - reversal: ["1L1"], - roar: ["1L1"], - rocktomb: ["1L1"], - scaryface: ["1L1"], - shadowclaw: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - sludgewave: ["1L1"], - snarl: ["1L1"], - spite: ["1L1"], - stompingtantrum: ["1L1"], - substitute: ["1L1"], - superpower: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - throatchop: ["1L1"], - thunderfang: ["1L1"], - thunderpunch: ["1L1"], - toxic: ["1L1"], - upperhand: ["1L1"], - uproar: ["1L1"], - }, - eventData: [ - {generation: 9, level: 70, moves: ["1L1"]}, - ], - eventOnly: false, - }, - munkidori: { - learnset: { - acidspray: ["1L1"], - batonpass: ["1L1"], - calmmind: ["1L1"], - clearsmog: ["1L1"], - confuseray: ["1L1"], - confusion: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fakeout: ["1L1"], - flatter: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - futuresight: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - gunkshot: ["1L1"], - helpinghand: ["1L1"], - hex: ["1L1"], - hyperbeam: ["1L1"], - imprison: ["1L1"], - lashout: ["1L1"], - lightscreen: ["1L1"], - metronome: ["1L1"], - mudslap: ["1L1"], - nastyplot: ["1L1"], - nightshade: ["1L1"], - partingshot: ["1L1"], - poisonjab: ["1L1"], - poltergeist: ["1L1"], - protect: ["1L1"], - psybeam: ["1L1"], - psychic: ["1L1"], - psychicnoise: ["1L1"], - psychicterrain: ["1L1"], - psychup: ["1L1"], - psyshock: ["1L1"], - rest: ["1L1"], - scratch: ["1L1"], - shadowball: ["1L1"], - shadowclaw: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - sludgewave: ["1L1"], - spite: ["1L1"], - storedpower: ["1L1"], - substitute: ["1L1"], - swift: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - trick: ["1L1"], - uproar: ["1L1"], - uturn: ["1L1"], - venoshock: ["1L1"], - }, - eventData: [ - {generation: 9, level: 70, moves: ["1L1"]}, - ], - eventOnly: false, - }, - fezandipiti: { - learnset: { - acidspray: ["1L1"], - acrobatics: ["1L1"], - aerialace: ["1L1"], - agility: ["1L1"], - aircutter: ["1L1"], - airslash: ["1L1"], - alluringvoice: ["1L1"], - attract: ["1L1"], - beatup: ["1L1"], - bravebird: ["1L1"], - calmmind: ["1L1"], - charm: ["1L1"], - crosspoison: ["1L1"], - darkpulse: ["1L1"], - dazzlinggleam: ["1L1"], - disarmingvoice: ["1L1"], - doublekick: ["1L1"], - dualwingbeat: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - flatter: ["1L1"], - fly: ["1L1"], - gigaimpact: ["1L1"], - gunkshot: ["1L1"], - heatwave: ["1L1"], - hex: ["1L1"], - hurricane: ["1L1"], - hyperbeam: ["1L1"], - icywind: ["1L1"], - lashout: ["1L1"], - lightscreen: ["1L1"], - moonblast: ["1L1"], - nastyplot: ["1L1"], - peck: ["1L1"], - playrough: ["1L1"], - poisongas: ["1L1"], - poisonjab: ["1L1"], - poisontail: ["1L1"], - protect: ["1L1"], - psychup: ["1L1"], - quickattack: ["1L1"], - rest: ["1L1"], - roost: ["1L1"], - shadowball: ["1L1"], - shadowclaw: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - spite: ["1L1"], - substitute: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - swordsdance: ["1L1"], - tailslap: ["1L1"], - tailwind: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - toxic: ["1L1"], - uproar: ["1L1"], - uturn: ["1L1"], - venoshock: ["1L1"], - wingattack: ["1L1"], - }, - eventData: [ - {generation: 9, level: 70, moves: ["1L1"]}, - ], - eventOnly: false, - }, - ogerpon: { - learnset: { - brickbreak: ["1L1"], - bulletseed: ["1L1"], - charm: ["1L1"], - counter: ["1L1"], - doublekick: ["1L1"], - encore: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - falseswipe: ["1L1"], - fling: ["1L1"], - focusenergy: ["1L1"], - followme: ["1L1"], - gigadrain: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - grassyglide: ["1L1"], - grassyterrain: ["1L1"], - growth: ["1L1"], - helpinghand: ["1L1"], - hornleech: ["1L1"], - ivycudgel: ["1L1"], - knockoff: ["1L1"], - lashout: ["1L1"], - leafstorm: ["1L1"], - leechseed: ["1L1"], - lowkick: ["1L1"], - lowsweep: ["1L1"], - magicalleaf: ["1L1"], - playrough: ["1L1"], - powerwhip: ["1L1"], - protect: ["1L1"], - quickattack: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - reversal: ["1L1"], - rocktomb: ["1L1"], - sandstorm: ["1L1"], - scaryface: ["1L1"], - seedbomb: ["1L1"], - slam: ["1L1"], - sleeptalk: ["1L1"], - solarbeam: ["1L1"], - solarblade: ["1L1"], - spikes: ["1L1"], - spikyshield: ["1L1"], - stompingtantrum: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - superpower: ["1L1"], - swordsdance: ["1L1"], - synthesis: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - throatchop: ["1L1"], - trailblaze: ["1L1"], - uturn: ["1L1"], - vinewhip: ["1L1"], - woodhammer: ["1L1"], - zenheadbutt: ["1L1"], - }, - eventData: [ - {generation: 9, level: 20, nature: "Lonely", ivs: {hp: 31, atk: 31, def: 20, spa: 20, spd: 20, spe: 31}, moves: ["1L1"]}, - {generation: 9, level: 70, nature: "Lonely", ivs: {hp: 31, atk: 31, def: 20, spa: 20, spd: 20, spe: 31}, moves: ["1L1"]}, - ], - eventOnly: false, - }, - ogerponhearthflame: { - eventOnly: false, - }, - ogerponwellspring: { - eventOnly: false, - }, - ogerponcornerstone: { - eventOnly: false, - }, - archaludon: { - learnset: { - aurasphere: ["1L1"], - bodypress: ["1L1"], - bodyslam: ["1L1"], - breakingswipe: ["1L1"], - brickbreak: ["1L1"], - darkpulse: ["1L1"], - doubleedge: ["1L1"], - dracometeor: ["1L1"], - dragoncheer: ["1L1"], - dragonclaw: ["1L1"], - dragonpulse: ["1L1"], - dragontail: ["1L1"], - earthquake: ["1L1"], - electroshot: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - flashcannon: ["1L1"], - focusenergy: ["1L1"], - foulplay: ["1L1"], - gigaimpact: ["1L1"], - gyroball: ["1L1"], - hardpress: ["1L1"], - heavyslam: ["1L1"], - honeclaws: ["1L1"], - hyperbeam: ["1L1"], - irondefense: ["1L1"], - ironhead: ["1L1"], - leer: ["1L1"], - lightscreen: ["1L1"], - metalburst: ["1L1"], - metalclaw: ["1L1"], - metalsound: ["1L1"], - meteorbeam: ["1L1"], - outrage: ["1L1"], - protect: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - roar: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - scaryface: ["1L1"], - sleeptalk: ["1L1"], - smackdown: ["1L1"], - snarl: ["1L1"], - solarbeam: ["1L1"], - stealthrock: ["1L1"], - steelbeam: ["1L1"], - stoneedge: ["1L1"], - substitute: ["1L1"], - swordsdance: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderwave: ["1L1"], - }, - }, - hydrapple: { - learnset: { - astonish: ["1L1"], - bodypress: ["1L1"], - bodyslam: ["1L1"], - breakingswipe: ["1L1"], - bugbite: ["1L1"], - bulletseed: ["1L1"], - curse: ["1L1"], - doubleedge: ["1L1"], - doublehit: ["1L1"], - dracometeor: ["1L1"], - dragonbreath: ["1L1"], - dragoncheer: ["1L1"], - dragonpulse: ["1L1"], - dragontail: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - ficklebeam: ["1L1"], - gigadrain: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - grassyglide: ["1L1"], - grassyterrain: ["1L1"], - growth: ["1L1"], - gyroball: ["1L1"], - heavyslam: ["1L1"], - hydropump: ["1L1"], - hyperbeam: ["1L1"], - infestation: ["1L1"], - leafstorm: ["1L1"], - magicalleaf: ["1L1"], - nastyplot: ["1L1"], - outrage: ["1L1"], - pollenpuff: ["1L1"], - pounce: ["1L1"], - powerwhip: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - recover: ["1L1"], - recycle: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - seedbomb: ["1L1"], - sleeptalk: ["1L1"], - solarbeam: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - sweetscent: ["1L1"], - syrupbomb: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - uproar: ["1L1"], - withdraw: ["1L1"], - yawn: ["1L1"], - }, - }, - gougingfire: { - learnset: { - ancientpower: ["1L1"], - bite: ["1L1"], - bodyslam: ["1L1"], - breakingswipe: ["1L1"], - bulldoze: ["1L1"], - burningbulwark: ["1L1"], - crunch: ["1L1"], - crushclaw: ["1L1"], - doubleedge: ["1L1"], - doublekick: ["1L1"], - dracometeor: ["1L1"], - dragoncheer: ["1L1"], - dragonclaw: ["1L1"], - dragondance: ["1L1"], - dragonpulse: ["1L1"], - dragonrush: ["1L1"], - dragontail: ["1L1"], - earthquake: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fireblast: ["1L1"], - firefang: ["1L1"], - firespin: ["1L1"], - flamecharge: ["1L1"], - flamethrower: ["1L1"], - flareblitz: ["1L1"], - gigaimpact: ["1L1"], - heatcrash: ["1L1"], - heatwave: ["1L1"], - howl: ["1L1"], - hyperbeam: ["1L1"], - incinerate: ["1L1"], - ironhead: ["1L1"], - lavaplume: ["1L1"], - leer: ["1L1"], - morningsun: ["1L1"], - nobleroar: ["1L1"], - outrage: ["1L1"], - overheat: ["1L1"], - protect: ["1L1"], - psychicfangs: ["1L1"], - ragingfury: ["1L1"], - rest: ["1L1"], - reversal: ["1L1"], - roar: ["1L1"], - scaleshot: ["1L1"], - scaryface: ["1L1"], - scorchingsands: ["1L1"], - sleeptalk: ["1L1"], - smartstrike: ["1L1"], - snarl: ["1L1"], - stomp: ["1L1"], - stompingtantrum: ["1L1"], - stoneedge: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - takedown: ["1L1"], - temperflare: ["1L1"], - terablast: ["1L1"], - thunderfang: ["1L1"], - weatherball: ["1L1"], - }, - }, - ragingbolt: { - learnset: { - ancientpower: ["1L1"], - bodypress: ["1L1"], - bodyslam: ["1L1"], - breakingswipe: ["1L1"], - calmmind: ["1L1"], - charge: ["1L1"], - chargebeam: ["1L1"], - crunch: ["1L1"], - discharge: ["1L1"], - doubleedge: ["1L1"], - dracometeor: ["1L1"], - dragonbreath: ["1L1"], - dragoncheer: ["1L1"], - dragonhammer: ["1L1"], - dragonpulse: ["1L1"], - dragontail: ["1L1"], - earthquake: ["1L1"], - eerieimpulse: ["1L1"], - electricterrain: ["1L1"], - electroball: ["1L1"], - electroweb: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - gigaimpact: ["1L1"], - heavyslam: ["1L1"], - hyperbeam: ["1L1"], - hypervoice: ["1L1"], - outrage: ["1L1"], - protect: ["1L1"], - rest: ["1L1"], - risingvoltage: ["1L1"], - roar: ["1L1"], - scaryface: ["1L1"], - shockwave: ["1L1"], - sleeptalk: ["1L1"], - snarl: ["1L1"], - solarbeam: ["1L1"], - stomp: ["1L1"], - stompingtantrum: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - supercellslam: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderclap: ["1L1"], - thunderfang: ["1L1"], - thunderwave: ["1L1"], - twister: ["1L1"], - voltswitch: ["1L1"], - weatherball: ["1L1"], - wildcharge: ["1L1"], - zapcannon: ["1L1"], - }, - }, - ironboulder: { - learnset: { - aerialace: ["1L1"], - agility: ["1L1"], - airslash: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - bulldoze: ["1L1"], - closecombat: ["1L1"], - counter: ["1L1"], - doubleedge: ["1L1"], - earthquake: ["1L1"], - electricterrain: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - gigaimpact: ["1L1"], - hornattack: ["1L1"], - hyperbeam: ["1L1"], - irondefense: ["1L1"], - ironhead: ["1L1"], - leer: ["1L1"], - megahorn: ["1L1"], - meteorbeam: ["1L1"], - mightycleave: ["1L1"], - poisonjab: ["1L1"], - protect: ["1L1"], - psychic: ["1L1"], - psychocut: ["1L1"], - psyshock: ["1L1"], - quickattack: ["1L1"], - quickguard: ["1L1"], - rest: ["1L1"], - rockblast: ["1L1"], - rockthrow: ["1L1"], - rocktomb: ["1L1"], - sacredsword: ["1L1"], - sandstorm: ["1L1"], - scaryface: ["1L1"], - slash: ["1L1"], - sleeptalk: ["1L1"], - solarblade: ["1L1"], - stoneedge: ["1L1"], - substitute: ["1L1"], - swordsdance: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - throatchop: ["1L1"], - wildcharge: ["1L1"], - xscissor: ["1L1"], - zenheadbutt: ["1L1"], - }, - }, - ironcrown: { - learnset: { - agility: ["1L1"], - airslash: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - bulldoze: ["1L1"], - calmmind: ["1L1"], - confusion: ["1L1"], - doubleedge: ["1L1"], - electricterrain: ["1L1"], - endure: ["1L1"], - expandingforce: ["1L1"], - facade: ["1L1"], - flashcannon: ["1L1"], - focusblast: ["1L1"], - futuresight: ["1L1"], - gigaimpact: ["1L1"], - gravity: ["1L1"], - heavyslam: ["1L1"], - hyperbeam: ["1L1"], - irondefense: ["1L1"], - ironhead: ["1L1"], - leer: ["1L1"], - metalburst: ["1L1"], - metalclaw: ["1L1"], - metalsound: ["1L1"], - protect: ["1L1"], - psychic: ["1L1"], - psychicnoise: ["1L1"], - psychocut: ["1L1"], - psyshock: ["1L1"], - quickguard: ["1L1"], - rest: ["1L1"], - sacredsword: ["1L1"], - scaryface: ["1L1"], - slash: ["1L1"], - sleeptalk: ["1L1"], - smartstrike: ["1L1"], - solarblade: ["1L1"], - steelbeam: ["1L1"], - storedpower: ["1L1"], - substitute: ["1L1"], - supercellslam: ["1L1"], - swordsdance: ["1L1"], - tachyoncutter: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - voltswitch: ["1L1"], - xscissor: ["1L1"], - zenheadbutt: ["1L1"], - }, - }, - terapagos: { - learnset: { - ancientpower: ["1L1"], - aurasphere: ["1L1"], - bodypress: ["1L1"], - bodyslam: ["1L1"], - bugbuzz: ["1L1"], - calmmind: ["1L1"], - crunch: ["1L1"], - darkpulse: ["1L1"], - dazzlinggleam: ["1L1"], - doubleedge: ["1L1"], - dragonpulse: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - flamethrower: ["1L1"], - flareblitz: ["1L1"], - flashcannon: ["1L1"], - gigaimpact: ["1L1"], - gravity: ["1L1"], - gyroball: ["1L1"], - headbutt: ["1L1"], - heatcrash: ["1L1"], - heavyslam: ["1L1"], - hyperbeam: ["1L1"], - icebeam: ["1L1"], - icespinner: ["1L1"], - ironhead: ["1L1"], - meteorbeam: ["1L1"], - powergem: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - rapidspin: ["1L1"], - rest: ["1L1"], - roar: ["1L1"], - rockpolish: ["1L1"], - rockslide: ["1L1"], - scorchingsands: ["1L1"], - sleeptalk: ["1L1"], - solarbeam: ["1L1"], - stealthrock: ["1L1"], - stoneedge: ["1L1"], - storedpower: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - supercellslam: ["1L1"], - surf: ["1L1"], - takedown: ["1L1"], - terastarstorm: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - toxic: ["1L1"], - triattack: ["1L1"], - waterpulse: ["1L1"], - weatherball: ["1L1"], - wildcharge: ["1L1"], - withdraw: ["1L1"], - zenheadbutt: ["1L1"], - }, - }, - pecharunt: { - learnset: { - acidspray: ["1L1"], - astonish: ["1L1"], - curse: ["1L1"], - defensecurl: ["1L1"], - destinybond: ["1L1"], - endure: ["1L1"], - faketears: ["1L1"], - foulplay: ["1L1"], - gunkshot: ["1L1"], - hex: ["1L1"], - imprison: ["1L1"], - malignantchain: ["1L1"], - meanlook: ["1L1"], - memento: ["1L1"], - nastyplot: ["1L1"], - nightshade: ["1L1"], - partingshot: ["1L1"], - phantomforce: ["1L1"], - poisongas: ["1L1"], - poltergeist: ["1L1"], - protect: ["1L1"], - recover: ["1L1"], - rest: ["1L1"], - rollout: ["1L1"], - shadowball: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - sludgewave: ["1L1"], - smog: ["1L1"], - spite: ["1L1"], - substitute: ["1L1"], - terablast: ["1L1"], - toxic: ["1L1"], - venoshock: ["1L1"], - withdraw: ["1L1"], - }, - }, - syclar: { - learnset: { - absorb: ["1L1"], - attract: ["1L1"], - avalanche: ["1L1"], - blizzard: ["1L1"], - bugbite: ["1L1"], - bugbuzz: ["1L1"], - captivate: ["1L1"], - confide: ["1L1"], - counter: ["1L1"], - cut: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - earthpower: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - falseswipe: ["1L1"], - fellstinger: ["1L1"], - fling: ["1L1"], - focusenergy: ["1L1"], - focuspunch: ["1L1"], - frostbreath: ["1L1"], - frustration: ["1L1"], - furyattack: ["1L1"], - furycutter: ["1L1"], - hail: ["1L1"], - hiddenpower: ["1L1"], - honeclaws: ["1L1"], - icebeam: ["1L1"], - icefang: ["1L1"], - icepunch: ["1L1"], - iceshard: ["1L1"], - icespinner: ["1L1"], - iciclecrash: ["1L1"], - icywind: ["1L1"], - leechlife: ["1L1"], - leer: ["1L1"], - naturalgift: ["1L1"], - pinmissile: ["1L1"], - pounce: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rocksmash: ["1L1"], - round: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - sheercold: ["1L1"], - signalbeam: ["1L1"], - silverwind: ["1L1"], - skittersmack: ["1L1"], - slash: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - snowscape: ["1L1"], - spikes: ["1L1"], - strength: ["1L1"], - stringshot: ["1L1"], - strugglebug: ["1L1"], - substitute: ["1L1"], - superpower: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - swordsdance: ["1L1"], - tailglow: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - uturn: ["1L1"], - waterpulse: ["1L1"], - xscissor: ["1L1"], - }, - }, - syclant: { - learnset: { - absorb: ["1L1"], - attract: ["1L1"], - avalanche: ["1L1"], - blizzard: ["1L1"], - brickbreak: ["1L1"], - brutalswing: ["1L1"], - bugbite: ["1L1"], - bugbuzz: ["1L1"], - bulldoze: ["1L1"], - captivate: ["1L1"], - closecombat: ["1L1"], - confide: ["1L1"], - counter: ["1L1"], - cut: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dualwingbeat: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - falseswipe: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - focusenergy: ["1L1"], - focuspunch: ["1L1"], - frostbreath: ["1L1"], - frustration: ["1L1"], - furyattack: ["1L1"], - furycutter: ["1L1"], - gigaimpact: ["1L1"], - hail: ["1L1"], - hiddenpower: ["1L1"], - honeclaws: ["1L1"], - hyperbeam: ["1L1"], - icebeam: ["1L1"], - icefang: ["1L1"], - icepunch: ["1L1"], - iceshard: ["1L1"], - icespinner: ["1L1"], - iciclecrash: ["1L1"], - iciclespear: ["1L1"], - icywind: ["1L1"], - leechlife: ["1L1"], - leer: ["1L1"], - megapunch: ["1L1"], - metronome: ["1L1"], - nastyplot: ["1L1"], - naturalgift: ["1L1"], - pinmissile: ["1L1"], - pounce: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - round: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - sheercold: ["1L1"], - signalbeam: ["1L1"], - silverwind: ["1L1"], - skittersmack: ["1L1"], - slash: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - snowscape: ["1L1"], - spikes: ["1L1"], - stoneedge: ["1L1"], - strength: ["1L1"], - stringshot: ["1L1"], - strugglebug: ["1L1"], - substitute: ["1L1"], - superpower: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - swordsdance: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - tripleaxel: ["1L1"], - uturn: ["1L1"], - waterpulse: ["1L1"], - xscissor: ["1L1"], - }, - }, - revenankh: { - learnset: { - ancientpower: ["1L1"], - armthrust: ["1L1"], - attract: ["1L1"], - bind: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - bulkup: ["1L1"], - captivate: ["1L1"], - closecombat: ["1L1"], - coaching: ["1L1"], - confide: ["1L1"], - confuseray: ["1L1"], - counter: ["1L1"], - curse: ["1L1"], - darkestlariat: ["1L1"], - darkpulse: ["1L1"], - destinybond: ["1L1"], - detect: ["1L1"], - dig: ["1L1"], - doubleteam: ["1L1"], - drainpunch: ["1L1"], - dreameater: ["1L1"], - dualchop: ["1L1"], - earthquake: ["1L1"], - embargo: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - focuspunch: ["1L1"], - forcepalm: ["1L1"], - foulplay: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - glare: ["1L1"], - grudge: ["1L1"], - hammerarm: ["1L1"], - helpinghand: ["1L1"], - hex: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - icepunch: ["1L1"], - knockoff: ["1L1"], - laserfocus: ["1L1"], - lashout: ["1L1"], - leer: ["1L1"], - machpunch: ["1L1"], - meanlook: ["1L1"], - megapunch: ["1L1"], - memento: ["1L1"], - metronome: ["1L1"], - moonlight: ["1L1"], - mudslap: ["1L1"], - nastyplot: ["1L1"], - naturalgift: ["1L1"], - nightshade: ["1L1"], - ominouswind: ["1L1"], - painsplit: ["1L1"], - payback: ["1L1"], - phantomforce: ["1L1"], - poisonjab: ["1L1"], - poltergeist: ["1L1"], - poweruppunch: ["1L1"], - powerwhip: ["1L1"], - protect: ["1L1"], - psychup: ["1L1"], - punishment: ["1L1"], - quickguard: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - revenge: ["1L1"], - reversal: ["1L1"], - rockclimb: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - roleplay: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - sandstorm: ["1L1"], - sandtomb: ["1L1"], - scaryface: ["1L1"], - secretpower: ["1L1"], - shadowball: ["1L1"], - shadowclaw: ["1L1"], - shadowpunch: ["1L1"], - shadowsneak: ["1L1"], - sleeptalk: ["1L1"], - smackdown: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - spite: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - sunnyday: ["1L1"], - superpower: ["1L1"], - swagger: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - telekinesis: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - throatchop: ["1L1"], - thunderpunch: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - trick: ["1L1"], - trickroom: ["1L1"], - vacuumwave: ["1L1"], - willowisp: ["1L1"], - wonderroom: ["1L1"], - workup: ["1L1"], - wrap: ["1L1"], - }, - }, - embirch: { - learnset: { - amnesia: ["1L1"], - aromatherapy: ["1L1"], - attract: ["1L1"], - block: ["1L1"], - bulldoze: ["1L1"], - bulletseed: ["1L1"], - confide: ["1L1"], - counter: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dragonbreath: ["1L1"], - dragondance: ["1L1"], - earthpower: ["1L1"], - ember: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - fireblast: ["1L1"], - firespin: ["1L1"], - flamecharge: ["1L1"], - flamethrower: ["1L1"], - flamewheel: ["1L1"], - flareblitz: ["1L1"], - flash: ["1L1"], - frustration: ["1L1"], - gigadrain: ["1L1"], - grassknot: ["1L1"], - grasswhistle: ["1L1"], - grassyglide: ["1L1"], - grassyterrain: ["1L1"], - growth: ["1L1"], - headbutt: ["1L1"], - heatcrash: ["1L1"], - heatwave: ["1L1"], - hiddenpower: ["1L1"], - incinerate: ["1L1"], - irondefense: ["1L1"], - ironhead: ["1L1"], - irontail: ["1L1"], - lavaplume: ["1L1"], - leechseed: ["1L1"], - lightscreen: ["1L1"], - magicalleaf: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - naturepower: ["1L1"], - overheat: ["1L1"], - petaldance: ["1L1"], - protect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - revenge: ["1L1"], - roar: ["1L1"], - rockclimb: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - sandtomb: ["1L1"], - secretpower: ["1L1"], - seedbomb: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - stealthrock: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - sweetscent: ["1L1"], - swift: ["1L1"], - swordsdance: ["1L1"], - synthesis: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - terrainpulse: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - watersport: ["1L1"], - wildcharge: ["1L1"], - willowisp: ["1L1"], - worryseed: ["1L1"], - zenheadbutt: ["1L1"], - }, - }, - flarelm: { - learnset: { - amnesia: ["1L1"], - ancientpower: ["1L1"], - attract: ["1L1"], - block: ["1L1"], - bulldoze: ["1L1"], - bulletseed: ["1L1"], - burningjealousy: ["1L1"], - confide: ["1L1"], - counter: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dragondance: ["1L1"], - dragonpulse: ["1L1"], - dragontail: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - ember: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - fireblast: ["1L1"], - firespin: ["1L1"], - flameburst: ["1L1"], - flamecharge: ["1L1"], - flamethrower: ["1L1"], - flamewheel: ["1L1"], - flareblitz: ["1L1"], - flash: ["1L1"], - flashcannon: ["1L1"], - frustration: ["1L1"], - gigadrain: ["1L1"], - grassknot: ["1L1"], - grassyglide: ["1L1"], - grassyterrain: ["1L1"], - growth: ["1L1"], - headbutt: ["1L1"], - heatcrash: ["1L1"], - heatwave: ["1L1"], - hiddenpower: ["1L1"], - incinerate: ["1L1"], - irondefense: ["1L1"], - ironhead: ["1L1"], - irontail: ["1L1"], - lavaplume: ["1L1"], - leechseed: ["1L1"], - lightscreen: ["1L1"], - lowkick: ["1L1"], - magicalleaf: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - naturepower: ["1L1"], - overheat: ["1L1"], - petaldance: ["1L1"], - protect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - revenge: ["1L1"], - roar: ["1L1"], - rockclimb: ["1L1"], - rockpolish: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - sandtomb: ["1L1"], - secretpower: ["1L1"], - seedbomb: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - stealthrock: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - sweetscent: ["1L1"], - swift: ["1L1"], - swordsdance: ["1L1"], - synthesis: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - terrainpulse: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - wildcharge: ["1L1"], - willowisp: ["1L1"], - worryseed: ["1L1"], - zenheadbutt: ["1L1"], - }, - }, - pyroak: { - learnset: { - amnesia: ["1L1"], - ancientpower: ["1L1"], - aromaticmist: ["1L1"], - attract: ["1L1"], - block: ["1L1"], - bulldoze: ["1L1"], - bulletseed: ["1L1"], - burningjealousy: ["1L1"], - burnup: ["1L1"], - confide: ["1L1"], - counter: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - dragondance: ["1L1"], - dragonpulse: ["1L1"], - dragontail: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - ember: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - fireblast: ["1L1"], - firespin: ["1L1"], - flameburst: ["1L1"], - flamecharge: ["1L1"], - flamethrower: ["1L1"], - flamewheel: ["1L1"], - flareblitz: ["1L1"], - flash: ["1L1"], - flashcannon: ["1L1"], - frustration: ["1L1"], - gigadrain: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - grassyglide: ["1L1"], - grassyterrain: ["1L1"], - growth: ["1L1"], - headbutt: ["1L1"], - heatcrash: ["1L1"], - heatwave: ["1L1"], - heavyslam: ["1L1"], - hiddenpower: ["1L1"], - highhorsepower: ["1L1"], - hyperbeam: ["1L1"], - incinerate: ["1L1"], - irondefense: ["1L1"], - ironhead: ["1L1"], - irontail: ["1L1"], - lavaplume: ["1L1"], - leechseed: ["1L1"], - lightscreen: ["1L1"], - lowkick: ["1L1"], - magicalleaf: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - naturepower: ["1L1"], - overheat: ["1L1"], - petalblizzard: ["1L1"], - petaldance: ["1L1"], - protect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - revenge: ["1L1"], - roar: ["1L1"], - rockclimb: ["1L1"], - rockpolish: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - sandtomb: ["1L1"], - scorchingsands: ["1L1"], - secretpower: ["1L1"], - seedbomb: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - solarblade: ["1L1"], - stealthrock: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - sweetscent: ["1L1"], - swift: ["1L1"], - swordsdance: ["1L1"], - synthesis: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - terrainpulse: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - wildcharge: ["1L1"], - willowisp: ["1L1"], - woodhammer: ["1L1"], - worryseed: ["1L1"], - zapcannon: ["1L1"], - zenheadbutt: ["1L1"], - }, - }, - breezi: { - learnset: { - acrobatics: ["1L1"], - aerialace: ["1L1"], - afteryou: ["1L1"], - attract: ["1L1"], - block: ["1L1"], - bodyslam: ["1L1"], - bounce: ["1L1"], - captivate: ["1L1"], - confide: ["1L1"], - copycat: ["1L1"], - disable: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - encore: ["1L1"], - endure: ["1L1"], - entrainment: ["1L1"], - facade: ["1L1"], - fling: ["1L1"], - followme: ["1L1"], - frustration: ["1L1"], - gastroacid: ["1L1"], - gunkshot: ["1L1"], - gust: ["1L1"], - healblock: ["1L1"], - healingwish: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - icespinner: ["1L1"], - icywind: ["1L1"], - knockoff: ["1L1"], - lightscreen: ["1L1"], - luckychant: ["1L1"], - magicroom: ["1L1"], - mefirst: ["1L1"], - metronome: ["1L1"], - mimic: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - ominouswind: ["1L1"], - poisonjab: ["1L1"], - pounce: ["1L1"], - protect: ["1L1"], - psychup: ["1L1"], - raindance: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roleplay: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - sandstorm: ["1L1"], - sandtomb: ["1L1"], - secretpower: ["1L1"], - selfdestruct: ["1L1"], - shadowball: ["1L1"], - skillswap: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - sludgewave: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - speedswap: ["1L1"], - spikes: ["1L1"], - stealthrock: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - tailwind: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - toxic: ["1L1"], - toxicspikes: ["1L1"], - trickroom: ["1L1"], - twister: ["1L1"], - uturn: ["1L1"], - venoshock: ["1L1"], - whirlwind: ["1L1"], - wish: ["1L1"], - wonderroom: ["1L1"], - }, - }, - fidgit: { - learnset: { - acrobatics: ["1L1"], - aerialace: ["1L1"], - afteryou: ["1L1"], - attract: ["1L1"], - block: ["1L1"], - bodyslam: ["1L1"], - bounce: ["1L1"], - brutalswing: ["1L1"], - bulldoze: ["1L1"], - captivate: ["1L1"], - cometpunch: ["1L1"], - confide: ["1L1"], - copycat: ["1L1"], - dig: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - drillrun: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - encore: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fling: ["1L1"], - followme: ["1L1"], - frustration: ["1L1"], - gastroacid: ["1L1"], - gigaimpact: ["1L1"], - gravity: ["1L1"], - gunkshot: ["1L1"], - gust: ["1L1"], - healblock: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - icespinner: ["1L1"], - icywind: ["1L1"], - knockoff: ["1L1"], - lightscreen: ["1L1"], - luckychant: ["1L1"], - magicroom: ["1L1"], - megapunch: ["1L1"], - metronome: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - ominouswind: ["1L1"], - poisonjab: ["1L1"], - pounce: ["1L1"], - protect: ["1L1"], - psychup: ["1L1"], - raindance: ["1L1"], - rapidspin: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rockclimb: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - roleplay: ["1L1"], - rototiller: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - sandstorm: ["1L1"], - sandtomb: ["1L1"], - scorchingsands: ["1L1"], - secretpower: ["1L1"], - selfdestruct: ["1L1"], - shadowball: ["1L1"], - skillswap: ["1L1"], - skittersmack: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - sludgewave: ["1L1"], - smartstrike: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - speedswap: ["1L1"], - spikes: ["1L1"], - stealthrock: ["1L1"], - stompingtantrum: ["1L1"], - stoneedge: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - tailwind: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - toxicspikes: ["1L1"], - trickroom: ["1L1"], - twister: ["1L1"], - uturn: ["1L1"], - venoshock: ["1L1"], - whirlwind: ["1L1"], - wideguard: ["1L1"], - wonderroom: ["1L1"], - }, - }, - rebble: { - learnset: { - accelerock: ["1L1"], - acupressure: ["1L1"], - aerialace: ["1L1"], - ancientpower: ["1L1"], - bulldoze: ["1L1"], - calmmind: ["1L1"], - confide: ["1L1"], - cut: ["1L1"], - dazzlinggleam: ["1L1"], - defensecurl: ["1L1"], - disable: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - embargo: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - explosion: ["1L1"], - facade: ["1L1"], - falseswipe: ["1L1"], - fireblast: ["1L1"], - flamethrower: ["1L1"], - flash: ["1L1"], - frustration: ["1L1"], - gigadrain: ["1L1"], - headbutt: ["1L1"], - headsmash: ["1L1"], - heatwave: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - incinerate: ["1L1"], - lockon: ["1L1"], - metalsound: ["1L1"], - meteorbeam: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - ominouswind: ["1L1"], - powergem: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - rockblast: ["1L1"], - rockpolish: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - sandstorm: ["1L1"], - secretpower: ["1L1"], - shadowball: ["1L1"], - sleeptalk: ["1L1"], - smackdown: ["1L1"], - snore: ["1L1"], - speedswap: ["1L1"], - stealthrock: ["1L1"], - stoneedge: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - tackle: ["1L1"], - terablast: ["1L1"], - toxic: ["1L1"], - trick: ["1L1"], - vacuumwave: ["1L1"], - zenheadbutt: ["1L1"], - }, - }, - tactite: { - learnset: { - accelerock: ["1L1"], - acupressure: ["1L1"], - aerialace: ["1L1"], - ancientpower: ["1L1"], - bulldoze: ["1L1"], - calmmind: ["1L1"], - confide: ["1L1"], - cut: ["1L1"], - dazzlinggleam: ["1L1"], - defensecurl: ["1L1"], - disable: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - embargo: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - explosion: ["1L1"], - facade: ["1L1"], - falseswipe: ["1L1"], - fireblast: ["1L1"], - flamethrower: ["1L1"], - flash: ["1L1"], - frustration: ["1L1"], - gigadrain: ["1L1"], - headbutt: ["1L1"], - headsmash: ["1L1"], - heatwave: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - incinerate: ["1L1"], - lockon: ["1L1"], - metalsound: ["1L1"], - meteorbeam: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - ominouswind: ["1L1"], - powergem: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - rockblast: ["1L1"], - rockpolish: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - sandstorm: ["1L1"], - secretpower: ["1L1"], - shadowball: ["1L1"], - sleeptalk: ["1L1"], - smackdown: ["1L1"], - smartstrike: ["1L1"], - snore: ["1L1"], - speedswap: ["1L1"], - stealthrock: ["1L1"], - stoneedge: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - tackle: ["1L1"], - terablast: ["1L1"], - toxic: ["1L1"], - trick: ["1L1"], - vacuumwave: ["1L1"], - zenheadbutt: ["1L1"], - }, - }, - stratagem: { - learnset: { - accelerock: ["1L1"], - acupressure: ["1L1"], - aerialace: ["1L1"], - ancientpower: ["1L1"], - bulldoze: ["1L1"], - calmmind: ["1L1"], - confide: ["1L1"], - cut: ["1L1"], - dazzlinggleam: ["1L1"], - defensecurl: ["1L1"], - disable: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - embargo: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - explosion: ["1L1"], - facade: ["1L1"], - falseswipe: ["1L1"], - fireblast: ["1L1"], - flamethrower: ["1L1"], - flash: ["1L1"], - frustration: ["1L1"], - gigadrain: ["1L1"], - gigaimpact: ["1L1"], - headbutt: ["1L1"], - headsmash: ["1L1"], - heatwave: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - incinerate: ["1L1"], - laserfocus: ["1L1"], - lockon: ["1L1"], - metalsound: ["1L1"], - meteorbeam: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - ominouswind: ["1L1"], - paleowave: ["1L1"], - powergem: ["1L1"], - protect: ["1L1"], - quickguard: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rockblast: ["1L1"], - rockclimb: ["1L1"], - rockpolish: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - sandstorm: ["1L1"], - secretpower: ["1L1"], - shadowball: ["1L1"], - sleeptalk: ["1L1"], - smackdown: ["1L1"], - smartstrike: ["1L1"], - snore: ["1L1"], - speedswap: ["1L1"], - stealthrock: ["1L1"], - stoneedge: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - tackle: ["1L1"], - terablast: ["1L1"], - toxic: ["1L1"], - trick: ["1L1"], - vacuumwave: ["1L1"], - weatherball: ["1L1"], - zenheadbutt: ["1L1"], - }, - }, - privatyke: { - learnset: { - aquacutter: ["1L1"], - aquajet: ["1L1"], - armthrust: ["1L1"], - attract: ["1L1"], - blizzard: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - brine: ["1L1"], - bubble: ["1L1"], - bulkup: ["1L1"], - bulldoze: ["1L1"], - captivate: ["1L1"], - chillingwater: ["1L1"], - chipaway: ["1L1"], - closecombat: ["1L1"], - coaching: ["1L1"], - confide: ["1L1"], - crosschop: ["1L1"], - cut: ["1L1"], - dive: ["1L1"], - doubleteam: ["1L1"], - drainpunch: ["1L1"], - earthquake: ["1L1"], - embargo: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - falseswipe: ["1L1"], - fling: ["1L1"], - focuspunch: ["1L1"], - foulplay: ["1L1"], - frustration: ["1L1"], - hail: ["1L1"], - headbutt: ["1L1"], - hiddenpower: ["1L1"], - icebeam: ["1L1"], - icepunch: ["1L1"], - icywind: ["1L1"], - knockoff: ["1L1"], - lashout: ["1L1"], - liquidation: ["1L1"], - lowkick: ["1L1"], - lowsweep: ["1L1"], - machpunch: ["1L1"], - megapunch: ["1L1"], - muddywater: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - octazooka: ["1L1"], - poisonjab: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - psychup: ["1L1"], - punishment: ["1L1"], - raindance: ["1L1"], - recover: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - revenge: ["1L1"], - roar: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - scald: ["1L1"], - scaryface: ["1L1"], - secretpower: ["1L1"], - skittersmack: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - smokescreen: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - snowscape: ["1L1"], - spikes: ["1L1"], - strength: ["1L1"], - submission: ["1L1"], - substitute: ["1L1"], - superpower: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - throatchop: ["1L1"], - thunderpunch: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - vacuumwave: ["1L1"], - waterfall: ["1L1"], - watergun: ["1L1"], - waterpulse: ["1L1"], - whirlpool: ["1L1"], - wideguard: ["1L1"], - workup: ["1L1"], - wrap: ["1L1"], - yawn: ["1L1"], - }, - }, - arghonaut: { - learnset: { - aquacutter: ["1L1"], - aquajet: ["1L1"], - armthrust: ["1L1"], - attract: ["1L1"], - blizzard: ["1L1"], - bodypress: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - brine: ["1L1"], - bubble: ["1L1"], - bulkup: ["1L1"], - bulldoze: ["1L1"], - captivate: ["1L1"], - chillingwater: ["1L1"], - chipaway: ["1L1"], - circlethrow: ["1L1"], - closecombat: ["1L1"], - coaching: ["1L1"], - confide: ["1L1"], - crosschop: ["1L1"], - crosspoison: ["1L1"], - cut: ["1L1"], - dive: ["1L1"], - doubleteam: ["1L1"], - drainpunch: ["1L1"], - earthquake: ["1L1"], - embargo: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - falseswipe: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - focuspunch: ["1L1"], - foulplay: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - gunkshot: ["1L1"], - hail: ["1L1"], - headbutt: ["1L1"], - hiddenpower: ["1L1"], - hydropump: ["1L1"], - hyperbeam: ["1L1"], - icebeam: ["1L1"], - icepunch: ["1L1"], - icywind: ["1L1"], - knockoff: ["1L1"], - lashout: ["1L1"], - liquidation: ["1L1"], - lowkick: ["1L1"], - lowsweep: ["1L1"], - machpunch: ["1L1"], - megapunch: ["1L1"], - muddywater: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - poisonjab: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - psychup: ["1L1"], - punishment: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - revenge: ["1L1"], - roar: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - scald: ["1L1"], - scaryface: ["1L1"], - secretpower: ["1L1"], - skittersmack: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - smokescreen: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - snowscape: ["1L1"], - spikes: ["1L1"], - stoneedge: ["1L1"], - strength: ["1L1"], - submission: ["1L1"], - substitute: ["1L1"], - superpower: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - throatchop: ["1L1"], - thunderpunch: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - vacuumwave: ["1L1"], - waterfall: ["1L1"], - watergun: ["1L1"], - waterpulse: ["1L1"], - whirlpool: ["1L1"], - wideguard: ["1L1"], - workup: ["1L1"], - wrap: ["1L1"], - yawn: ["1L1"], - }, - }, - nohface: { - learnset: { - assurance: ["1L1"], - attract: ["1L1"], - captivate: ["1L1"], - closecombat: ["1L1"], - confide: ["1L1"], - confuseray: ["1L1"], - copycat: ["1L1"], - curse: ["1L1"], - cut: ["1L1"], - darkpulse: ["1L1"], - defog: ["1L1"], - dig: ["1L1"], - doubleteam: ["1L1"], - dreameater: ["1L1"], - embargo: ["1L1"], - endeavor: ["1L1"], - facade: ["1L1"], - fakeout: ["1L1"], - falseswipe: ["1L1"], - featherdance: ["1L1"], - feintattack: ["1L1"], - flail: ["1L1"], - flash: ["1L1"], - fling: ["1L1"], - foulplay: ["1L1"], - frustration: ["1L1"], - furycutter: ["1L1"], - headbutt: ["1L1"], - hex: ["1L1"], - hiddenpower: ["1L1"], - honeclaws: ["1L1"], - icepunch: ["1L1"], - icywind: ["1L1"], - irontail: ["1L1"], - knockoff: ["1L1"], - lastresort: ["1L1"], - lick: ["1L1"], - magiccoat: ["1L1"], - memento: ["1L1"], - metalsound: ["1L1"], - meteormash: ["1L1"], - metronome: ["1L1"], - naturalgift: ["1L1"], - nightshade: ["1L1"], - odorsleuth: ["1L1"], - ominouswind: ["1L1"], - painsplit: ["1L1"], - payback: ["1L1"], - perishsong: ["1L1"], - playrough: ["1L1"], - poltergeist: ["1L1"], - protect: ["1L1"], - psychoshift: ["1L1"], - psychup: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - revenge: ["1L1"], - roar: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - scratch: ["1L1"], - secretpower: ["1L1"], - shadowball: ["1L1"], - shadowclaw: ["1L1"], - shadowsneak: ["1L1"], - skittersmack: ["1L1"], - sleeptalk: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - spite: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - tailwhip: ["1L1"], - taunt: ["1L1"], - telekinesis: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thunderpunch: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - trick: ["1L1"], - trickroom: ["1L1"], - uturn: ["1L1"], - willowisp: ["1L1"], - wish: ["1L1"], - yawn: ["1L1"], - }, - }, - kitsunoh: { - learnset: { - assurance: ["1L1"], - attract: ["1L1"], - bulldoze: ["1L1"], - bulletpunch: ["1L1"], - captivate: ["1L1"], - closecombat: ["1L1"], - confide: ["1L1"], - confuseray: ["1L1"], - copycat: ["1L1"], - cut: ["1L1"], - darkpulse: ["1L1"], - defog: ["1L1"], - dig: ["1L1"], - doubleteam: ["1L1"], - dreameater: ["1L1"], - earthquake: ["1L1"], - embargo: ["1L1"], - endeavor: ["1L1"], - facade: ["1L1"], - fakeout: ["1L1"], - falseswipe: ["1L1"], - feintattack: ["1L1"], - flash: ["1L1"], - flashcannon: ["1L1"], - fling: ["1L1"], - foulplay: ["1L1"], - frustration: ["1L1"], - furycutter: ["1L1"], - gigaimpact: ["1L1"], - headbutt: ["1L1"], - hex: ["1L1"], - hiddenpower: ["1L1"], - honeclaws: ["1L1"], - hyperbeam: ["1L1"], - icepunch: ["1L1"], - icywind: ["1L1"], - irondefense: ["1L1"], - ironhead: ["1L1"], - irontail: ["1L1"], - knockoff: ["1L1"], - lastresort: ["1L1"], - lick: ["1L1"], - lowkick: ["1L1"], - magiccoat: ["1L1"], - memento: ["1L1"], - metalclaw: ["1L1"], - metronome: ["1L1"], - naturalgift: ["1L1"], - nightshade: ["1L1"], - odorsleuth: ["1L1"], - ominouswind: ["1L1"], - painsplit: ["1L1"], - payback: ["1L1"], - perishsong: ["1L1"], - playrough: ["1L1"], - poltergeist: ["1L1"], - protect: ["1L1"], - psychup: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - revenge: ["1L1"], - roar: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - scratch: ["1L1"], - secretpower: ["1L1"], - shadowball: ["1L1"], - shadowclaw: ["1L1"], - shadowsneak: ["1L1"], - shadowstrike: ["1L1"], - skittersmack: ["1L1"], - sleeptalk: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - spite: ["1L1"], - steelbeam: ["1L1"], - strengthsap: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - sunnyday: ["1L1"], - superfang: ["1L1"], - superpower: ["1L1"], - swagger: ["1L1"], - tailwhip: ["1L1"], - taunt: ["1L1"], - telekinesis: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thunderpunch: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - trick: ["1L1"], - trickroom: ["1L1"], - uturn: ["1L1"], - willowisp: ["1L1"], - }, - }, - monohm: { - learnset: { - aerialace: ["1L1"], - aquatail: ["1L1"], - attract: ["1L1"], - bide: ["1L1"], - blizzard: ["1L1"], - captivate: ["1L1"], - charge: ["1L1"], - chargebeam: ["1L1"], - chillingwater: ["1L1"], - confide: ["1L1"], - defog: ["1L1"], - discharge: ["1L1"], - doubleteam: ["1L1"], - dragonbreath: ["1L1"], - dragonpulse: ["1L1"], - dragonrage: ["1L1"], - dragontail: ["1L1"], - eerieimpulse: ["1L1"], - electricterrain: ["1L1"], - electroball: ["1L1"], - electroweb: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - flash: ["1L1"], - focusenergy: ["1L1"], - frustration: ["1L1"], - growl: ["1L1"], - hail: ["1L1"], - headbutt: ["1L1"], - healbell: ["1L1"], - hiddenpower: ["1L1"], - hydropump: ["1L1"], - icebeam: ["1L1"], - icywind: ["1L1"], - irontail: ["1L1"], - lightscreen: ["1L1"], - lockon: ["1L1"], - muddywater: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - naturepower: ["1L1"], - outrage: ["1L1"], - powdersnow: ["1L1"], - powergem: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - risingvoltage: ["1L1"], - roar: ["1L1"], - round: ["1L1"], - sandstorm: ["1L1"], - secretpower: ["1L1"], - shockwave: ["1L1"], - signalbeam: ["1L1"], - slackoff: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - snowscape: ["1L1"], - sonicboom: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thrash: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderfang: ["1L1"], - thundershock: ["1L1"], - thunderwave: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - trickroom: ["1L1"], - twister: ["1L1"], - voltswitch: ["1L1"], - waterfall: ["1L1"], - waterpulse: ["1L1"], - weatherball: ["1L1"], - whirlwind: ["1L1"], - wildcharge: ["1L1"], - zapcannon: ["1L1"], - }, - }, - duohm: { - learnset: { - aerialace: ["1L1"], - aquatail: ["1L1"], - attract: ["1L1"], - bide: ["1L1"], - blizzard: ["1L1"], - captivate: ["1L1"], - charge: ["1L1"], - chargebeam: ["1L1"], - chillingwater: ["1L1"], - confide: ["1L1"], - discharge: ["1L1"], - doublehit: ["1L1"], - doubleteam: ["1L1"], - dracometeor: ["1L1"], - dragonbreath: ["1L1"], - dragonclaw: ["1L1"], - dragonpulse: ["1L1"], - dragonrage: ["1L1"], - dragontail: ["1L1"], - eerieimpulse: ["1L1"], - electricterrain: ["1L1"], - electroball: ["1L1"], - electroweb: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fireblast: ["1L1"], - firefang: ["1L1"], - flamethrower: ["1L1"], - flash: ["1L1"], - focusenergy: ["1L1"], - frustration: ["1L1"], - growl: ["1L1"], - hail: ["1L1"], - headbutt: ["1L1"], - healbell: ["1L1"], - hiddenpower: ["1L1"], - honeclaws: ["1L1"], - hydropump: ["1L1"], - icebeam: ["1L1"], - icefang: ["1L1"], - icywind: ["1L1"], - incinerate: ["1L1"], - irontail: ["1L1"], - lightscreen: ["1L1"], - lockon: ["1L1"], - muddywater: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - naturepower: ["1L1"], - outrage: ["1L1"], - powergem: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - risingvoltage: ["1L1"], - roar: ["1L1"], - round: ["1L1"], - sandstorm: ["1L1"], - secretpower: ["1L1"], - shockwave: ["1L1"], - signalbeam: ["1L1"], - slackoff: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - snowscape: ["1L1"], - sonicboom: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thrash: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderfang: ["1L1"], - thundershock: ["1L1"], - thunderwave: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - trickroom: ["1L1"], - twister: ["1L1"], - voltswitch: ["1L1"], - waterfall: ["1L1"], - waterpulse: ["1L1"], - weatherball: ["1L1"], - whirlwind: ["1L1"], - wildcharge: ["1L1"], - zapcannon: ["1L1"], - }, - }, - cyclohm: { - learnset: { - aerialace: ["1L1"], - aquatail: ["1L1"], - attract: ["1L1"], - bide: ["1L1"], - blizzard: ["1L1"], - breakingswipe: ["1L1"], - bulldoze: ["1L1"], - captivate: ["1L1"], - charge: ["1L1"], - chargebeam: ["1L1"], - chillingwater: ["1L1"], - confide: ["1L1"], - discharge: ["1L1"], - doublehit: ["1L1"], - doubleteam: ["1L1"], - dracometeor: ["1L1"], - dragonbreath: ["1L1"], - dragonclaw: ["1L1"], - dragonpulse: ["1L1"], - dragonrage: ["1L1"], - dragontail: ["1L1"], - earthquake: ["1L1"], - eerieimpulse: ["1L1"], - electricterrain: ["1L1"], - electroball: ["1L1"], - electroweb: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fireblast: ["1L1"], - firefang: ["1L1"], - flamethrower: ["1L1"], - flash: ["1L1"], - focusenergy: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - growl: ["1L1"], - hail: ["1L1"], - headbutt: ["1L1"], - healbell: ["1L1"], - hiddenpower: ["1L1"], - honeclaws: ["1L1"], - hydropump: ["1L1"], - hyperbeam: ["1L1"], - icebeam: ["1L1"], - icefang: ["1L1"], - icywind: ["1L1"], - incinerate: ["1L1"], - irontail: ["1L1"], - lightscreen: ["1L1"], - lockon: ["1L1"], - muddywater: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - naturepower: ["1L1"], - outrage: ["1L1"], - powergem: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - risingvoltage: ["1L1"], - roar: ["1L1"], - round: ["1L1"], - sandstorm: ["1L1"], - secretpower: ["1L1"], - shockwave: ["1L1"], - signalbeam: ["1L1"], - slackoff: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - snowscape: ["1L1"], - sonicboom: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thrash: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderfang: ["1L1"], - thundershock: ["1L1"], - thunderwave: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - triattack: ["1L1"], - trickroom: ["1L1"], - twister: ["1L1"], - voltswitch: ["1L1"], - waterfall: ["1L1"], - waterpulse: ["1L1"], - weatherball: ["1L1"], - whirlwind: ["1L1"], - wildcharge: ["1L1"], - zapcannon: ["1L1"], - }, - }, - dorsoil: { - learnset: { - ancientpower: ["1L1"], - aquatail: ["1L1"], - attract: ["1L1"], - bite: ["1L1"], - block: ["1L1"], - bodypress: ["1L1"], - bodyslam: ["1L1"], - bounce: ["1L1"], - brickbreak: ["1L1"], - brutalswing: ["1L1"], - bulldoze: ["1L1"], - captivate: ["1L1"], - chipaway: ["1L1"], - confide: ["1L1"], - crunch: ["1L1"], - darkpulse: ["1L1"], - dig: ["1L1"], - dive: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - drillrun: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - embargo: ["1L1"], - encore: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fakeout: ["1L1"], - firefang: ["1L1"], - fissure: ["1L1"], - flail: ["1L1"], - foulplay: ["1L1"], - frustration: ["1L1"], - hiddenpower: ["1L1"], - highhorsepower: ["1L1"], - icespinner: ["1L1"], - irontail: ["1L1"], - knockoff: ["1L1"], - leer: ["1L1"], - magnitude: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - payback: ["1L1"], - peck: ["1L1"], - protect: ["1L1"], - pursuit: ["1L1"], - raindance: ["1L1"], - rapidspin: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - roar: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - sandstorm: ["1L1"], - sandtomb: ["1L1"], - scorchingsands: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - sleeptalk: ["1L1"], - snarl: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - spitup: ["1L1"], - stealthrock: ["1L1"], - stockpile: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - sunnyday: ["1L1"], - superpower: ["1L1"], - swagger: ["1L1"], - swallow: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thunderfang: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - uturn: ["1L1"], - wideguard: ["1L1"], - }, - }, - colossoil: { - learnset: { - ancientpower: ["1L1"], - aquatail: ["1L1"], - attract: ["1L1"], - bite: ["1L1"], - block: ["1L1"], - bodypress: ["1L1"], - bodyslam: ["1L1"], - bounce: ["1L1"], - brickbreak: ["1L1"], - brutalswing: ["1L1"], - bulldoze: ["1L1"], - captivate: ["1L1"], - confide: ["1L1"], - crunch: ["1L1"], - darkpulse: ["1L1"], - dig: ["1L1"], - dive: ["1L1"], - doubleedge: ["1L1"], - doubleteam: ["1L1"], - drillrun: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - embargo: ["1L1"], - encore: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - firefang: ["1L1"], - foulplay: ["1L1"], - frustration: ["1L1"], - furyattack: ["1L1"], - gigaimpact: ["1L1"], - headlongrush: ["1L1"], - hiddenpower: ["1L1"], - highhorsepower: ["1L1"], - hornattack: ["1L1"], - horndrill: ["1L1"], - hyperbeam: ["1L1"], - icespinner: ["1L1"], - irontail: ["1L1"], - knockoff: ["1L1"], - lashout: ["1L1"], - leer: ["1L1"], - magnitude: ["1L1"], - megahorn: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - naturalgift: ["1L1"], - payback: ["1L1"], - peck: ["1L1"], - protect: ["1L1"], - pursuit: ["1L1"], - raindance: ["1L1"], - rapidspin: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - roar: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - sandstorm: ["1L1"], - sandtomb: ["1L1"], - scorchingsands: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - sleeptalk: ["1L1"], - smartstrike: ["1L1"], - snarl: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - spitup: ["1L1"], - stealthrock: ["1L1"], - stockpile: ["1L1"], - stoneedge: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - sunnyday: ["1L1"], - superpower: ["1L1"], - swagger: ["1L1"], - swallow: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thunderfang: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - uturn: ["1L1"], - }, - }, - protowatt: { - learnset: { - bubble: ["1L1"], - charge: ["1L1"], - confuseray: ["1L1"], - counter: ["1L1"], - entrainment: ["1L1"], - followme: ["1L1"], - mefirst: ["1L1"], - metronome: ["1L1"], - mindreader: ["1L1"], - mirrorcoat: ["1L1"], - sheercold: ["1L1"], - speedswap: ["1L1"], - terablast: ["1L1"], - thundershock: ["1L1"], - watergun: ["1L1"], - }, - }, - krilowatt: { - learnset: { - aquatail: ["1L1"], - attract: ["1L1"], - blizzard: ["1L1"], - bubble: ["1L1"], - bubblebeam: ["1L1"], - bulldoze: ["1L1"], - captivate: ["1L1"], - charge: ["1L1"], - chillingwater: ["1L1"], - confide: ["1L1"], - confuseray: ["1L1"], - copycat: ["1L1"], - counter: ["1L1"], - cut: ["1L1"], - discharge: ["1L1"], - dive: ["1L1"], - doubleteam: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - eerieimpulse: ["1L1"], - electricterrain: ["1L1"], - electroball: ["1L1"], - electroweb: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - flash: ["1L1"], - fling: ["1L1"], - flipturn: ["1L1"], - frustration: ["1L1"], - furycutter: ["1L1"], - gigaimpact: ["1L1"], - guillotine: ["1L1"], - hail: ["1L1"], - heartswap: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - icebeam: ["1L1"], - icepunch: ["1L1"], - iceshard: ["1L1"], - icywind: ["1L1"], - imprison: ["1L1"], - irontail: ["1L1"], - liquidation: ["1L1"], - lowkick: ["1L1"], - lowsweep: ["1L1"], - magneticflux: ["1L1"], - metronome: ["1L1"], - mindreader: ["1L1"], - mirrorcoat: ["1L1"], - muddywater: ["1L1"], - naturalgift: ["1L1"], - payback: ["1L1"], - pounce: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - recycle: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - risingvoltage: ["1L1"], - round: ["1L1"], - scald: ["1L1"], - secretpower: ["1L1"], - shockwave: ["1L1"], - signalbeam: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - snowscape: ["1L1"], - speedswap: ["1L1"], - substitute: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - terablast: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderpunch: ["1L1"], - thundershock: ["1L1"], - thunderwave: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - voltswitch: ["1L1"], - waterfall: ["1L1"], - watergun: ["1L1"], - waterpulse: ["1L1"], - whirlpool: ["1L1"], - wildcharge: ["1L1"], - }, - eventData: [ - {generation: 9, level: 50, moves: ["1L1"], pokeball: "pokeball"}, - ], - }, - voodoll: { - learnset: { - acupressure: ["1L1"], - afteryou: ["1L1"], - assurance: ["1L1"], - astonish: ["1L1"], - attract: ["1L1"], - aurasphere: ["1L1"], - batonpass: ["1L1"], - burningjealousy: ["1L1"], - captivate: ["1L1"], - charge: ["1L1"], - confide: ["1L1"], - copycat: ["1L1"], - counter: ["1L1"], - darkpulse: ["1L1"], - doubleteam: ["1L1"], - dreameater: ["1L1"], - echoedvoice: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - feintattack: ["1L1"], - fling: ["1L1"], - followme: ["1L1"], - foulplay: ["1L1"], - frustration: ["1L1"], - grudge: ["1L1"], - hex: ["1L1"], - hiddenpower: ["1L1"], - hypervoice: ["1L1"], - imprison: ["1L1"], - knockoff: ["1L1"], - lashout: ["1L1"], - machpunch: ["1L1"], - magiccoat: ["1L1"], - magicroom: ["1L1"], - memento: ["1L1"], - metronome: ["1L1"], - mimic: ["1L1"], - mudslap: ["1L1"], - nastyplot: ["1L1"], - naturalgift: ["1L1"], - nightmare: ["1L1"], - painsplit: ["1L1"], - payback: ["1L1"], - perishsong: ["1L1"], - pinmissile: ["1L1"], - powertrip: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - psychic: ["1L1"], - pursuit: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - risingvoltage: ["1L1"], - rocksmash: ["1L1"], - round: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - shockwave: ["1L1"], - sleeptalk: ["1L1"], - smellingsalts: ["1L1"], - snarl: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - spite: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - tearfullook: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thunderbolt: ["1L1"], - thunderwave: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - uproar: ["1L1"], - vacuumwave: ["1L1"], - voltswitch: ["1L1"], - workup: ["1L1"], - wrap: ["1L1"], - }, - }, - voodoom: { - learnset: { - acupressure: ["1L1"], - afteryou: ["1L1"], - assurance: ["1L1"], - astonish: ["1L1"], - attract: ["1L1"], - aurasphere: ["1L1"], - batonpass: ["1L1"], - beatup: ["1L1"], - brickbreak: ["1L1"], - brutalswing: ["1L1"], - bulkup: ["1L1"], - bulldoze: ["1L1"], - burningjealousy: ["1L1"], - captivate: ["1L1"], - charge: ["1L1"], - closecombat: ["1L1"], - coaching: ["1L1"], - confide: ["1L1"], - copycat: ["1L1"], - counter: ["1L1"], - darkestlariat: ["1L1"], - darkpulse: ["1L1"], - doubleteam: ["1L1"], - drainpunch: ["1L1"], - dreameater: ["1L1"], - earthquake: ["1L1"], - echoedvoice: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - feintattack: ["1L1"], - flashcannon: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - focuspunch: ["1L1"], - followme: ["1L1"], - foulplay: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - grudge: ["1L1"], - hex: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - hypervoice: ["1L1"], - icepunch: ["1L1"], - imprison: ["1L1"], - knockoff: ["1L1"], - lashout: ["1L1"], - lowkick: ["1L1"], - lowsweep: ["1L1"], - magiccoat: ["1L1"], - magicroom: ["1L1"], - metronome: ["1L1"], - mudslap: ["1L1"], - nastyplot: ["1L1"], - naturalgift: ["1L1"], - nightmare: ["1L1"], - nightslash: ["1L1"], - painsplit: ["1L1"], - payback: ["1L1"], - pinmissile: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - psychic: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - revenge: ["1L1"], - risingvoltage: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - round: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - shockwave: ["1L1"], - sleeptalk: ["1L1"], - smartstrike: ["1L1"], - snarl: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - spite: ["1L1"], - stoneedge: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - taunt: ["1L1"], - tearfullook: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - throatchop: ["1L1"], - thunderbolt: ["1L1"], - thunderpunch: ["1L1"], - thunderwave: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - uproar: ["1L1"], - vacuumwave: ["1L1"], - voltswitch: ["1L1"], - workup: ["1L1"], - wrap: ["1L1"], - }, - }, - scratchet: { - learnset: { - aerialace: ["1L1"], - attract: ["1L1"], - batonpass: ["1L1"], - bodypress: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - bulkup: ["1L1"], - bulldoze: ["1L1"], - closecombat: ["1L1"], - coaching: ["1L1"], - confide: ["1L1"], - confuseray: ["1L1"], - doubleteam: ["1L1"], - echoedvoice: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - falseswipe: ["1L1"], - flash: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - focusenergy: ["1L1"], - frustration: ["1L1"], - furyswipes: ["1L1"], - grassknot: ["1L1"], - harden: ["1L1"], - haze: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hypervoice: ["1L1"], - irontail: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - memento: ["1L1"], - mudslap: ["1L1"], - naturepower: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - quash: ["1L1"], - raindance: ["1L1"], - rapidspin: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - revenge: ["1L1"], - reversal: ["1L1"], - roar: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - roost: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - scratch: ["1L1"], - secretpower: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - stealthrock: ["1L1"], - strength: ["1L1"], - submission: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - superpower: ["1L1"], - swagger: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - throatchop: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - workup: ["1L1"], - yawn: ["1L1"], - }, - }, - tomohawk: { - learnset: { - acrobatics: ["1L1"], - aerialace: ["1L1"], - aircutter: ["1L1"], - airslash: ["1L1"], - aquatail: ["1L1"], - attract: ["1L1"], - aurasphere: ["1L1"], - batonpass: ["1L1"], - bodypress: ["1L1"], - bodyslam: ["1L1"], - bravebird: ["1L1"], - brickbreak: ["1L1"], - bulkup: ["1L1"], - bulldoze: ["1L1"], - closecombat: ["1L1"], - coaching: ["1L1"], - confide: ["1L1"], - confuseray: ["1L1"], - doubleteam: ["1L1"], - dualwingbeat: ["1L1"], - earthquake: ["1L1"], - echoedvoice: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - falseswipe: ["1L1"], - flash: ["1L1"], - fling: ["1L1"], - fly: ["1L1"], - focusblast: ["1L1"], - focusenergy: ["1L1"], - frustration: ["1L1"], - furyswipes: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - harden: ["1L1"], - haze: ["1L1"], - healingwish: ["1L1"], - heatwave: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hurricane: ["1L1"], - hyperbeam: ["1L1"], - hypervoice: ["1L1"], - incinerate: ["1L1"], - irontail: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - morningsun: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - quash: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - revenge: ["1L1"], - reversal: ["1L1"], - roar: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rocktomb: ["1L1"], - roost: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - scratch: ["1L1"], - secretpower: ["1L1"], - skyattack: ["1L1"], - skydrop: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - stealthrock: ["1L1"], - steelwing: ["1L1"], - stoneedge: ["1L1"], - strength: ["1L1"], - submission: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - superpower: ["1L1"], - swagger: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - throatchop: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - whirlwind: ["1L1"], - workup: ["1L1"], - }, - }, - necturine: { - learnset: { - attract: ["1L1"], - calmmind: ["1L1"], - confide: ["1L1"], - confuseray: ["1L1"], - curse: ["1L1"], - cut: ["1L1"], - darkpulse: ["1L1"], - doubleteam: ["1L1"], - dreameater: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - flash: ["1L1"], - frustration: ["1L1"], - futuresight: ["1L1"], - gigadrain: ["1L1"], - grassknot: ["1L1"], - grassyglide: ["1L1"], - grassyterrain: ["1L1"], - gravity: ["1L1"], - hex: ["1L1"], - hiddenpower: ["1L1"], - ingrain: ["1L1"], - leafblade: ["1L1"], - leafstorm: ["1L1"], - leechlife: ["1L1"], - leechseed: ["1L1"], - leer: ["1L1"], - magicalleaf: ["1L1"], - naturalgift: ["1L1"], - naturepower: ["1L1"], - nightmare: ["1L1"], - nightshade: ["1L1"], - ominouswind: ["1L1"], - painsplit: ["1L1"], - payback: ["1L1"], - powerwhip: ["1L1"], - protect: ["1L1"], - psychic: ["1L1"], - psychup: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - round: ["1L1"], - secretpower: ["1L1"], - seedbomb: ["1L1"], - shadowball: ["1L1"], - shadowsneak: ["1L1"], - shellsmash: ["1L1"], - sketch: ["1L1"], - skittersmack: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - spite: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - telekinesis: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - toxicspikes: ["1L1"], - trailblaze: ["1L1"], - vinewhip: ["1L1"], - willowisp: ["1L1"], - worryseed: ["1L1"], - }, - }, - necturna: { - learnset: { - attract: ["1L1"], - calmmind: ["1L1"], - confide: ["1L1"], - confuseray: ["1L1"], - crunch: ["1L1"], - cut: ["1L1"], - darkpulse: ["1L1"], - doubleteam: ["1L1"], - dreameater: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - flash: ["1L1"], - frustration: ["1L1"], - futuresight: ["1L1"], - gigadrain: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - grassyglide: ["1L1"], - grassyterrain: ["1L1"], - gravity: ["1L1"], - hex: ["1L1"], - hiddenpower: ["1L1"], - hornleech: ["1L1"], - hyperbeam: ["1L1"], - leafblade: ["1L1"], - leafstorm: ["1L1"], - leechlife: ["1L1"], - leechseed: ["1L1"], - leer: ["1L1"], - magicalleaf: ["1L1"], - naturepower: ["1L1"], - nightshade: ["1L1"], - ominouswind: ["1L1"], - painsplit: ["1L1"], - payback: ["1L1"], - poisonfang: ["1L1"], - powerwhip: ["1L1"], - protect: ["1L1"], - psychic: ["1L1"], - psychup: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - round: ["1L1"], - secretpower: ["1L1"], - seedbomb: ["1L1"], - shadowball: ["1L1"], - shadowclaw: ["1L1"], - shadowsneak: ["1L1"], - skittersmack: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - solarblade: ["1L1"], - spite: ["1L1"], - stoneedge: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - superfang: ["1L1"], - swagger: ["1L1"], - telekinesis: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thunderfang: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - toxicspikes: ["1L1"], - trailblaze: ["1L1"], - vinewhip: ["1L1"], - willowisp: ["1L1"], - worryseed: ["1L1"], - }, - }, - mollux: { - learnset: { - acid: ["1L1"], - acidarmor: ["1L1"], - acidspray: ["1L1"], - aquaring: ["1L1"], - attract: ["1L1"], - bide: ["1L1"], - bind: ["1L1"], - calmmind: ["1L1"], - charm: ["1L1"], - clearsmog: ["1L1"], - confide: ["1L1"], - confuseray: ["1L1"], - corrosivegas: ["1L1"], - doubleteam: ["1L1"], - drainingkiss: ["1L1"], - ember: ["1L1"], - endure: ["1L1"], - eruption: ["1L1"], - explosion: ["1L1"], - facade: ["1L1"], - finalgambit: ["1L1"], - fireblast: ["1L1"], - firespin: ["1L1"], - flamecharge: ["1L1"], - flamethrower: ["1L1"], - flash: ["1L1"], - frustration: ["1L1"], - gastroacid: ["1L1"], - gigaimpact: ["1L1"], - gunkshot: ["1L1"], - healbell: ["1L1"], - healpulse: ["1L1"], - heatwave: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hydropump: ["1L1"], - hyperbeam: ["1L1"], - inferno: ["1L1"], - lavaplume: ["1L1"], - leechlife: ["1L1"], - lifedew: ["1L1"], - lightscreen: ["1L1"], - moonlight: ["1L1"], - overheat: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - rapidspin: ["1L1"], - recover: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - round: ["1L1"], - secretpower: ["1L1"], - selfdestruct: ["1L1"], - shockwave: ["1L1"], - skittersmack: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - sludgewave: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - spotlight: ["1L1"], - stealthrock: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - toxicspikes: ["1L1"], - trick: ["1L1"], - venomdrench: ["1L1"], - venoshock: ["1L1"], - willowisp: ["1L1"], - withdraw: ["1L1"], - }, - }, - cupra: { - learnset: { - allyswitch: ["1L1"], - ancientpower: ["1L1"], - attract: ["1L1"], - bugbite: ["1L1"], - bugbuzz: ["1L1"], - calmmind: ["1L1"], - closecombat: ["1L1"], - confide: ["1L1"], - counter: ["1L1"], - cut: ["1L1"], - disable: ["1L1"], - doubleteam: ["1L1"], - dreameater: ["1L1"], - echoedvoice: ["1L1"], - electroweb: ["1L1"], - expandingforce: ["1L1"], - facade: ["1L1"], - feint: ["1L1"], - finalgambit: ["1L1"], - flash: ["1L1"], - fling: ["1L1"], - frustration: ["1L1"], - hail: ["1L1"], - healpulse: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hydropump: ["1L1"], - icywind: ["1L1"], - imprison: ["1L1"], - infestation: ["1L1"], - lightscreen: ["1L1"], - magiccoat: ["1L1"], - magicroom: ["1L1"], - megahorn: ["1L1"], - nastyplot: ["1L1"], - pounce: ["1L1"], - protect: ["1L1"], - psychic: ["1L1"], - psychicterrain: ["1L1"], - psychup: ["1L1"], - psyshock: ["1L1"], - raindance: ["1L1"], - recycle: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - roleplay: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - secretpower: ["1L1"], - shadowball: ["1L1"], - shockwave: ["1L1"], - signalbeam: ["1L1"], - skillswap: ["1L1"], - skittersmack: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - snowscape: ["1L1"], - steelwing: ["1L1"], - stringshot: ["1L1"], - strugglebug: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - tackle: ["1L1"], - tailglow: ["1L1"], - telekinesis: ["1L1"], - terablast: ["1L1"], - toxic: ["1L1"], - trick: ["1L1"], - waterpulse: ["1L1"], - willowisp: ["1L1"], - wingattack: ["1L1"], - wish: ["1L1"], - wonderroom: ["1L1"], - xscissor: ["1L1"], - zenheadbutt: ["1L1"], - }, - }, - argalis: { - learnset: { - allyswitch: ["1L1"], - ancientpower: ["1L1"], - attract: ["1L1"], - bugbite: ["1L1"], - bugbuzz: ["1L1"], - calmmind: ["1L1"], - closecombat: ["1L1"], - confide: ["1L1"], - cut: ["1L1"], - doubleteam: ["1L1"], - dreameater: ["1L1"], - echoedvoice: ["1L1"], - electroweb: ["1L1"], - expandingforce: ["1L1"], - facade: ["1L1"], - finalgambit: ["1L1"], - flash: ["1L1"], - fling: ["1L1"], - frustration: ["1L1"], - hail: ["1L1"], - healpulse: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hydropump: ["1L1"], - icywind: ["1L1"], - imprison: ["1L1"], - infestation: ["1L1"], - lightscreen: ["1L1"], - magiccoat: ["1L1"], - magicroom: ["1L1"], - megahorn: ["1L1"], - nastyplot: ["1L1"], - ominouswind: ["1L1"], - pounce: ["1L1"], - protect: ["1L1"], - psychic: ["1L1"], - psychicterrain: ["1L1"], - psychup: ["1L1"], - psyshock: ["1L1"], - raindance: ["1L1"], - recycle: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - roleplay: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - secretpower: ["1L1"], - shadowball: ["1L1"], - shockwave: ["1L1"], - signalbeam: ["1L1"], - skillswap: ["1L1"], - skittersmack: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - snowscape: ["1L1"], - spotlight: ["1L1"], - steelwing: ["1L1"], - stringshot: ["1L1"], - strugglebug: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - tackle: ["1L1"], - tailglow: ["1L1"], - telekinesis: ["1L1"], - terablast: ["1L1"], - toxic: ["1L1"], - trick: ["1L1"], - waterpulse: ["1L1"], - willowisp: ["1L1"], - wish: ["1L1"], - wonderroom: ["1L1"], - xscissor: ["1L1"], - zenheadbutt: ["1L1"], - }, - }, - aurumoth: { - learnset: { - allyswitch: ["1L1"], - ancientpower: ["1L1"], - attract: ["1L1"], - blizzard: ["1L1"], - bugbite: ["1L1"], - bugbuzz: ["1L1"], - calmmind: ["1L1"], - closecombat: ["1L1"], - confide: ["1L1"], - cut: ["1L1"], - doubleteam: ["1L1"], - dragondance: ["1L1"], - dreameater: ["1L1"], - dualwingbeat: ["1L1"], - echoedvoice: ["1L1"], - electroweb: ["1L1"], - expandingforce: ["1L1"], - facade: ["1L1"], - finalgambit: ["1L1"], - flash: ["1L1"], - fling: ["1L1"], - focusblast: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - hail: ["1L1"], - healingwish: ["1L1"], - healpulse: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hydropump: ["1L1"], - hyperbeam: ["1L1"], - icebeam: ["1L1"], - icywind: ["1L1"], - imprison: ["1L1"], - infestation: ["1L1"], - lightscreen: ["1L1"], - magiccoat: ["1L1"], - magicroom: ["1L1"], - megahorn: ["1L1"], - nastyplot: ["1L1"], - ominouswind: ["1L1"], - overheat: ["1L1"], - pounce: ["1L1"], - protect: ["1L1"], - psychic: ["1L1"], - psychicterrain: ["1L1"], - psychup: ["1L1"], - psyshock: ["1L1"], - raindance: ["1L1"], - recycle: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - roleplay: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - secretpower: ["1L1"], - shadowball: ["1L1"], - shockwave: ["1L1"], - signalbeam: ["1L1"], - silverwind: ["1L1"], - skillswap: ["1L1"], - skittersmack: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - snowscape: ["1L1"], - solarbeam: ["1L1"], - spotlight: ["1L1"], - steelwing: ["1L1"], - stringshot: ["1L1"], - strugglebug: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - tackle: ["1L1"], - tailglow: ["1L1"], - telekinesis: ["1L1"], - terablast: ["1L1"], - terrainpulse: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - toxic: ["1L1"], - trick: ["1L1"], - waterpulse: ["1L1"], - willowisp: ["1L1"], - wish: ["1L1"], - wonderroom: ["1L1"], - xscissor: ["1L1"], - zenheadbutt: ["1L1"], - }, - }, - brattler: { - learnset: { - aromatherapy: ["1L1"], - attract: ["1L1"], - beatup: ["1L1"], - belch: ["1L1"], - bind: ["1L1"], - brutalswing: ["1L1"], - confide: ["1L1"], - crunch: ["1L1"], - cut: ["1L1"], - darkpulse: ["1L1"], - doubleteam: ["1L1"], - dragontail: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - feint: ["1L1"], - foulplay: ["1L1"], - frustration: ["1L1"], - gigadrain: ["1L1"], - glare: ["1L1"], - grassknot: ["1L1"], - grassyglide: ["1L1"], - haze: ["1L1"], - healbell: ["1L1"], - hiddenpower: ["1L1"], - icefang: ["1L1"], - irontail: ["1L1"], - knockoff: ["1L1"], - lashout: ["1L1"], - leafblade: ["1L1"], - leer: ["1L1"], - nastyplot: ["1L1"], - naturepower: ["1L1"], - nightslash: ["1L1"], - partingshot: ["1L1"], - payback: ["1L1"], - poisonpowder: ["1L1"], - poisontail: ["1L1"], - powerwhip: ["1L1"], - protect: ["1L1"], - punishment: ["1L1"], - pursuit: ["1L1"], - recycle: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - roar: ["1L1"], - round: ["1L1"], - scaleshot: ["1L1"], - scaryface: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - seedbomb: ["1L1"], - skittersmack: ["1L1"], - slam: ["1L1"], - sleeptalk: ["1L1"], - snarl: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - spikyshield: ["1L1"], - spite: ["1L1"], - strength: ["1L1"], - stunspore: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - sweetscent: ["1L1"], - synthesis: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thunderfang: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - uturn: ["1L1"], - vinewhip: ["1L1"], - weatherball: ["1L1"], - wildcharge: ["1L1"], - worryseed: ["1L1"], - wrap: ["1L1"], - wringout: ["1L1"], - }, - }, - malaconda: { - learnset: { - attract: ["1L1"], - beatup: ["1L1"], - bind: ["1L1"], - breakingswipe: ["1L1"], - brutalswing: ["1L1"], - confide: ["1L1"], - crunch: ["1L1"], - cut: ["1L1"], - darkpulse: ["1L1"], - doubleteam: ["1L1"], - dragontail: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - followme: ["1L1"], - foulplay: ["1L1"], - frustration: ["1L1"], - gigadrain: ["1L1"], - gigaimpact: ["1L1"], - glare: ["1L1"], - grassknot: ["1L1"], - grassyglide: ["1L1"], - gravapple: ["1L1"], - haze: ["1L1"], - healbell: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - icefang: ["1L1"], - irontail: ["1L1"], - knockoff: ["1L1"], - lashout: ["1L1"], - leafblade: ["1L1"], - leer: ["1L1"], - nastyplot: ["1L1"], - naturepower: ["1L1"], - partingshot: ["1L1"], - payback: ["1L1"], - poisontail: ["1L1"], - powerwhip: ["1L1"], - protect: ["1L1"], - punishment: ["1L1"], - pursuit: ["1L1"], - rapidspin: ["1L1"], - recycle: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - roar: ["1L1"], - round: ["1L1"], - scaleshot: ["1L1"], - scaryface: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - seedbomb: ["1L1"], - skittersmack: ["1L1"], - slam: ["1L1"], - sleeptalk: ["1L1"], - snarl: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - solarblade: ["1L1"], - spikyshield: ["1L1"], - spite: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - suckerpunch: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - synthesis: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - throatchop: ["1L1"], - thunderfang: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - uturn: ["1L1"], - vinewhip: ["1L1"], - weatherball: ["1L1"], - wildcharge: ["1L1"], - worryseed: ["1L1"], - wrap: ["1L1"], - wringout: ["1L1"], - }, - }, - cawdet: { - learnset: { - acrobatics: ["1L1"], - aerialace: ["1L1"], - aircutter: ["1L1"], - airslash: ["1L1"], - assurance: ["1L1"], - attract: ["1L1"], - beatup: ["1L1"], - block: ["1L1"], - brickbreak: ["1L1"], - brine: ["1L1"], - bulletpunch: ["1L1"], - chillingwater: ["1L1"], - confide: ["1L1"], - detect: ["1L1"], - doubleteam: ["1L1"], - drainpunch: ["1L1"], - drillpeck: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - flashcannon: ["1L1"], - fly: ["1L1"], - frustration: ["1L1"], - growl: ["1L1"], - hiddenpower: ["1L1"], - hurricane: ["1L1"], - irondefense: ["1L1"], - ironhead: ["1L1"], - knockoff: ["1L1"], - leer: ["1L1"], - metalclaw: ["1L1"], - metalsound: ["1L1"], - metronome: ["1L1"], - mirrormove: ["1L1"], - peck: ["1L1"], - pluck: ["1L1"], - protect: ["1L1"], - psychup: ["1L1"], - pursuit: ["1L1"], - quickattack: ["1L1"], - quickguard: ["1L1"], - raindance: ["1L1"], - razorwind: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - rocksmash: ["1L1"], - round: ["1L1"], - screech: ["1L1"], - shockwave: ["1L1"], - skyattack: ["1L1"], - skydrop: ["1L1"], - sleeptalk: ["1L1"], - smackdown: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - steelbeam: ["1L1"], - steelwing: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - tailwind: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - toxic: ["1L1"], - waterpulse: ["1L1"], - watersport: ["1L1"], - whirlpool: ["1L1"], - wingattack: ["1L1"], - }, - }, - cawmodore: { - learnset: { - acrobatics: ["1L1"], - aerialace: ["1L1"], - agility: ["1L1"], - aircutter: ["1L1"], - airslash: ["1L1"], - assurance: ["1L1"], - attract: ["1L1"], - beatup: ["1L1"], - belch: ["1L1"], - bellydrum: ["1L1"], - block: ["1L1"], - brickbreak: ["1L1"], - brine: ["1L1"], - bulletpunch: ["1L1"], - chillingwater: ["1L1"], - confide: ["1L1"], - detect: ["1L1"], - doubleteam: ["1L1"], - drainpunch: ["1L1"], - dualwingbeat: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - flashcannon: ["1L1"], - fly: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - growl: ["1L1"], - hiddenpower: ["1L1"], - hurricane: ["1L1"], - hyperbeam: ["1L1"], - irondefense: ["1L1"], - ironhead: ["1L1"], - knockoff: ["1L1"], - leer: ["1L1"], - megapunch: ["1L1"], - metalclaw: ["1L1"], - metronome: ["1L1"], - peck: ["1L1"], - pluck: ["1L1"], - protect: ["1L1"], - psychup: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - revenge: ["1L1"], - rocksmash: ["1L1"], - round: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - shockwave: ["1L1"], - skyattack: ["1L1"], - skydrop: ["1L1"], - sleeptalk: ["1L1"], - smackdown: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - steelbeam: ["1L1"], - steelwing: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - tailwind: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - throatchop: ["1L1"], - toxic: ["1L1"], - waterpulse: ["1L1"], - whirlpool: ["1L1"], - wingattack: ["1L1"], - }, - }, - volkritter: { - learnset: { - absorb: ["1L1"], - aquajet: ["1L1"], - aquaring: ["1L1"], - assurance: ["1L1"], - attract: ["1L1"], - bind: ["1L1"], - bite: ["1L1"], - bounce: ["1L1"], - captivate: ["1L1"], - confide: ["1L1"], - constrict: ["1L1"], - covet: ["1L1"], - destinybond: ["1L1"], - dive: ["1L1"], - doubleteam: ["1L1"], - extrasensory: ["1L1"], - facade: ["1L1"], - falseswipe: ["1L1"], - fireblast: ["1L1"], - firespin: ["1L1"], - flameburst: ["1L1"], - flamethrower: ["1L1"], - flareblitz: ["1L1"], - flash: ["1L1"], - flashcannon: ["1L1"], - fling: ["1L1"], - flipturn: ["1L1"], - frustration: ["1L1"], - heatwave: ["1L1"], - hiddenpower: ["1L1"], - hydropump: ["1L1"], - incinerate: ["1L1"], - infestation: ["1L1"], - leechlife: ["1L1"], - memento: ["1L1"], - muddywater: ["1L1"], - overheat: ["1L1"], - payback: ["1L1"], - pounce: ["1L1"], - powergem: ["1L1"], - protect: ["1L1"], - quash: ["1L1"], - raindance: ["1L1"], - reflect: ["1L1"], - reflecttype: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - round: ["1L1"], - scald: ["1L1"], - scaryface: ["1L1"], - scorchingsands: ["1L1"], - skittersmack: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - tickle: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - uturn: ["1L1"], - waterfall: ["1L1"], - watergun: ["1L1"], - waterpulse: ["1L1"], - whirlpool: ["1L1"], - willowisp: ["1L1"], - }, - }, - volkraken: { - learnset: { - absorb: ["1L1"], - aquaring: ["1L1"], - assurance: ["1L1"], - attract: ["1L1"], - bind: ["1L1"], - bite: ["1L1"], - bounce: ["1L1"], - burningjealousy: ["1L1"], - confide: ["1L1"], - constrict: ["1L1"], - covet: ["1L1"], - destinybond: ["1L1"], - dive: ["1L1"], - doubleteam: ["1L1"], - extrasensory: ["1L1"], - facade: ["1L1"], - falseswipe: ["1L1"], - fireblast: ["1L1"], - firelash: ["1L1"], - firespin: ["1L1"], - flameburst: ["1L1"], - flamethrower: ["1L1"], - flareblitz: ["1L1"], - flash: ["1L1"], - flashcannon: ["1L1"], - fling: ["1L1"], - flipturn: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - heatwave: ["1L1"], - hiddenpower: ["1L1"], - hydropump: ["1L1"], - hyperbeam: ["1L1"], - incinerate: ["1L1"], - infestation: ["1L1"], - leechlife: ["1L1"], - liquidation: ["1L1"], - memento: ["1L1"], - muddywater: ["1L1"], - overheat: ["1L1"], - payback: ["1L1"], - pounce: ["1L1"], - powergem: ["1L1"], - protect: ["1L1"], - quash: ["1L1"], - raindance: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - round: ["1L1"], - scald: ["1L1"], - scaryface: ["1L1"], - scorchingsands: ["1L1"], - secretpower: ["1L1"], - skittersmack: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - uturn: ["1L1"], - waterfall: ["1L1"], - watergun: ["1L1"], - waterpulse: ["1L1"], - whirlpool: ["1L1"], - willowisp: ["1L1"], - wringout: ["1L1"], - }, - }, - snugglow: { - learnset: { - acid: ["1L1"], - acidspray: ["1L1"], - aquatail: ["1L1"], - attract: ["1L1"], - aurasphere: ["1L1"], - block: ["1L1"], - chargebeam: ["1L1"], - chillingwater: ["1L1"], - clearsmog: ["1L1"], - confide: ["1L1"], - crosspoison: ["1L1"], - cut: ["1L1"], - dazzlinggleam: ["1L1"], - discharge: ["1L1"], - doubleteam: ["1L1"], - eerieimpulse: ["1L1"], - electrify: ["1L1"], - electroball: ["1L1"], - electroweb: ["1L1"], - encore: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - flashcannon: ["1L1"], - frustration: ["1L1"], - haze: ["1L1"], - hiddenpower: ["1L1"], - iondeluge: ["1L1"], - irontail: ["1L1"], - paraboliccharge: ["1L1"], - poisonjab: ["1L1"], - poisonsting: ["1L1"], - poisontail: ["1L1"], - protect: ["1L1"], - psybeam: ["1L1"], - psychic: ["1L1"], - psyshock: ["1L1"], - psywave: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - risingvoltage: ["1L1"], - round: ["1L1"], - shockwave: ["1L1"], - signalbeam: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - sludgewave: ["1L1"], - snore: ["1L1"], - splash: ["1L1"], - substitute: ["1L1"], - supersonic: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thundershock: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - venomdrench: ["1L1"], - venoshock: ["1L1"], - waterpulse: ["1L1"], - wideguard: ["1L1"], - wildcharge: ["1L1"], - zenheadbutt: ["1L1"], - }, - }, - plasmanta: { - learnset: { - acid: ["1L1"], - acidspray: ["1L1"], - aquatail: ["1L1"], - attract: ["1L1"], - aurasphere: ["1L1"], - block: ["1L1"], - bodypress: ["1L1"], - bodyslam: ["1L1"], - chargebeam: ["1L1"], - chillingwater: ["1L1"], - clearsmog: ["1L1"], - confide: ["1L1"], - corrosivegas: ["1L1"], - crosspoison: ["1L1"], - cut: ["1L1"], - dazzlinggleam: ["1L1"], - discharge: ["1L1"], - doubleteam: ["1L1"], - eerieimpulse: ["1L1"], - electricterrain: ["1L1"], - electrify: ["1L1"], - electroball: ["1L1"], - electroweb: ["1L1"], - encore: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - flashcannon: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - haze: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - iondeluge: ["1L1"], - irontail: ["1L1"], - liquidation: ["1L1"], - magnetrise: ["1L1"], - paraboliccharge: ["1L1"], - poisonjab: ["1L1"], - poisonsting: ["1L1"], - poisontail: ["1L1"], - protect: ["1L1"], - psybeam: ["1L1"], - psychic: ["1L1"], - psyshock: ["1L1"], - psywave: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - risingvoltage: ["1L1"], - round: ["1L1"], - signalbeam: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - sludgewave: ["1L1"], - snore: ["1L1"], - substitute: ["1L1"], - supersonic: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thundershock: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - venomdrench: ["1L1"], - venoshock: ["1L1"], - waterpulse: ["1L1"], - wildcharge: ["1L1"], - zenheadbutt: ["1L1"], - }, - }, - floatoy: { - learnset: { - attract: ["1L1"], - bite: ["1L1"], - blizzard: ["1L1"], - bodyslam: ["1L1"], - brine: ["1L1"], - brutalswing: ["1L1"], - bubblebeam: ["1L1"], - calmmind: ["1L1"], - chillingwater: ["1L1"], - confide: ["1L1"], - crunch: ["1L1"], - dive: ["1L1"], - doubleteam: ["1L1"], - dragonbreath: ["1L1"], - dragonclaw: ["1L1"], - dragondance: ["1L1"], - dragonpulse: ["1L1"], - drillpeck: ["1L1"], - echoedvoice: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - featherdance: ["1L1"], - feint: ["1L1"], - focusenergy: ["1L1"], - frustration: ["1L1"], - gust: ["1L1"], - hail: ["1L1"], - haze: ["1L1"], - hiddenpower: ["1L1"], - hurricane: ["1L1"], - hydropump: ["1L1"], - icebeam: ["1L1"], - icefang: ["1L1"], - icepunch: ["1L1"], - iciclecrash: ["1L1"], - iciclespear: ["1L1"], - icywind: ["1L1"], - ironhead: ["1L1"], - irontail: ["1L1"], - metalclaw: ["1L1"], - metronome: ["1L1"], - muddywater: ["1L1"], - peck: ["1L1"], - protect: ["1L1"], - psychicfangs: ["1L1"], - raindance: ["1L1"], - refresh: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rocksmash: ["1L1"], - round: ["1L1"], - scald: ["1L1"], - scaryface: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - slackoff: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - snowscape: ["1L1"], - splash: ["1L1"], - substitute: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thunderfang: ["1L1"], - toxic: ["1L1"], - waterfall: ["1L1"], - watergun: ["1L1"], - waterpulse: ["1L1"], - whirlpool: ["1L1"], - }, - }, - caimanoe: { - learnset: { - attract: ["1L1"], - blizzard: ["1L1"], - bodypress: ["1L1"], - bodyslam: ["1L1"], - brine: ["1L1"], - brutalswing: ["1L1"], - bubblebeam: ["1L1"], - calmmind: ["1L1"], - chillingwater: ["1L1"], - confide: ["1L1"], - crunch: ["1L1"], - dive: ["1L1"], - doubleteam: ["1L1"], - dragonbreath: ["1L1"], - dragonclaw: ["1L1"], - dragondance: ["1L1"], - dragonpulse: ["1L1"], - drillpeck: ["1L1"], - echoedvoice: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - flashcannon: ["1L1"], - focusenergy: ["1L1"], - frustration: ["1L1"], - gust: ["1L1"], - hail: ["1L1"], - haze: ["1L1"], - heavyslam: ["1L1"], - hiddenpower: ["1L1"], - hurricane: ["1L1"], - hydropump: ["1L1"], - icebeam: ["1L1"], - icefang: ["1L1"], - icepunch: ["1L1"], - iciclecrash: ["1L1"], - iciclespear: ["1L1"], - icywind: ["1L1"], - irondefense: ["1L1"], - ironhead: ["1L1"], - irontail: ["1L1"], - metalclaw: ["1L1"], - metalsound: ["1L1"], - metronome: ["1L1"], - muddywater: ["1L1"], - peck: ["1L1"], - protect: ["1L1"], - psychicfangs: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - rocksmash: ["1L1"], - round: ["1L1"], - scald: ["1L1"], - scaleshot: ["1L1"], - scaryface: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - selfdestruct: ["1L1"], - slackoff: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - snowscape: ["1L1"], - splash: ["1L1"], - steelbeam: ["1L1"], - steelroller: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thunderfang: ["1L1"], - thunderpunch: ["1L1"], - toxic: ["1L1"], - waterfall: ["1L1"], - watergun: ["1L1"], - waterpulse: ["1L1"], - whirlpool: ["1L1"], - }, - }, - naviathan: { - learnset: { - attract: ["1L1"], - blizzard: ["1L1"], - bodypress: ["1L1"], - bodyslam: ["1L1"], - breakingswipe: ["1L1"], - brine: ["1L1"], - brutalswing: ["1L1"], - bubblebeam: ["1L1"], - calmmind: ["1L1"], - chillingwater: ["1L1"], - confide: ["1L1"], - crunch: ["1L1"], - dive: ["1L1"], - doubleteam: ["1L1"], - dragonbreath: ["1L1"], - dragonclaw: ["1L1"], - dragondance: ["1L1"], - dragonpulse: ["1L1"], - drillpeck: ["1L1"], - echoedvoice: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - flashcannon: ["1L1"], - focusenergy: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - gust: ["1L1"], - hail: ["1L1"], - haze: ["1L1"], - heavyslam: ["1L1"], - hiddenpower: ["1L1"], - hurricane: ["1L1"], - hydropump: ["1L1"], - hyperbeam: ["1L1"], - icebeam: ["1L1"], - icefang: ["1L1"], - icepunch: ["1L1"], - iciclecrash: ["1L1"], - iciclespear: ["1L1"], - icywind: ["1L1"], - irondefense: ["1L1"], - ironhead: ["1L1"], - irontail: ["1L1"], - metalclaw: ["1L1"], - metalsound: ["1L1"], - metronome: ["1L1"], - muddywater: ["1L1"], - peck: ["1L1"], - protect: ["1L1"], - psychicfangs: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - rocksmash: ["1L1"], - round: ["1L1"], - scald: ["1L1"], - scaleshot: ["1L1"], - scaryface: ["1L1"], - screech: ["1L1"], - secretpower: ["1L1"], - selfdestruct: ["1L1"], - slackoff: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - snowscape: ["1L1"], - splash: ["1L1"], - steelbeam: ["1L1"], - steelroller: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thunderfang: ["1L1"], - thunderpunch: ["1L1"], - toxic: ["1L1"], - waterfall: ["1L1"], - watergun: ["1L1"], - waterpulse: ["1L1"], - wavecrash: ["1L1"], - whirlpool: ["1L1"], - wideguard: ["1L1"], - wildcharge: ["1L1"], - }, - }, - crucibelle: { - learnset: { - acidarmor: ["1L1"], - acidspray: ["1L1"], - assurance: ["1L1"], - astonish: ["1L1"], - attract: ["1L1"], - block: ["1L1"], - coil: ["1L1"], - confide: ["1L1"], - confuseray: ["1L1"], - confusion: ["1L1"], - crosspoison: ["1L1"], - defensecurl: ["1L1"], - doubleteam: ["1L1"], - drainingkiss: ["1L1"], - embargo: ["1L1"], - endure: ["1L1"], - explosion: ["1L1"], - facade: ["1L1"], - faketears: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - gravity: ["1L1"], - gunkshot: ["1L1"], - helpinghand: ["1L1"], - hex: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - infestation: ["1L1"], - irondefense: ["1L1"], - ironhead: ["1L1"], - knockoff: ["1L1"], - lightscreen: ["1L1"], - magicroom: ["1L1"], - meteorbeam: ["1L1"], - metronome: ["1L1"], - payback: ["1L1"], - pinmissile: ["1L1"], - poisonjab: ["1L1"], - powergem: ["1L1"], - protect: ["1L1"], - psybeam: ["1L1"], - psychic: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rockblast: ["1L1"], - rockpolish: ["1L1"], - rockslide: ["1L1"], - rocksmash: ["1L1"], - rockthrow: ["1L1"], - rocktomb: ["1L1"], - rollout: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - sandstorm: ["1L1"], - secretpower: ["1L1"], - selfdestruct: ["1L1"], - shadowball: ["1L1"], - skillswap: ["1L1"], - sleeptalk: ["1L1"], - sludge: ["1L1"], - sludgebomb: ["1L1"], - sludgewave: ["1L1"], - smackdown: ["1L1"], - snatch: ["1L1"], - snore: ["1L1"], - stealthrock: ["1L1"], - steelroller: ["1L1"], - stoneedge: ["1L1"], - substitute: ["1L1"], - swagger: ["1L1"], - terablast: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - toxicspikes: ["1L1"], - trick: ["1L1"], - uturn: ["1L1"], - venomdrench: ["1L1"], - venoshock: ["1L1"], - withdraw: ["1L1"], - wonderroom: ["1L1"], - woodhammer: ["1L1"], - zenheadbutt: ["1L1"], - }, - }, - pluffle: { - learnset: { - allyswitch: ["1L1"], - attract: ["1L1"], - beatup: ["1L1"], - bodyslam: ["1L1"], - charm: ["1L1"], - confide: ["1L1"], - dazzlinggleam: ["1L1"], - doubleteam: ["1L1"], - drainingkiss: ["1L1"], - dreameater: ["1L1"], - encore: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - fairywind: ["1L1"], - featherdance: ["1L1"], - flashcannon: ["1L1"], - frustration: ["1L1"], - gigadrain: ["1L1"], - grassknot: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - magicroom: ["1L1"], - metronome: ["1L1"], - mistyexplosion: ["1L1"], - mistyterrain: ["1L1"], - moonblast: ["1L1"], - nightmare: ["1L1"], - partingshot: ["1L1"], - playrough: ["1L1"], - protect: ["1L1"], - psychic: ["1L1"], - psychup: ["1L1"], - quickguard: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - round: ["1L1"], - scaryface: ["1L1"], - scratch: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - sludgewave: ["1L1"], - snarl: ["1L1"], - snore: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - uproar: ["1L1"], - vacuumwave: ["1L1"], - wakeupslap: ["1L1"], - wideguard: ["1L1"], - wish: ["1L1"], - workup: ["1L1"], - yawn: ["1L1"], - }, - }, - kerfluffle: { - learnset: { - allyswitch: ["1L1"], - attract: ["1L1"], - aurasphere: ["1L1"], - beatup: ["1L1"], - bodypress: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - bulkup: ["1L1"], - celebrate: ["1L1"], - charm: ["1L1"], - closecombat: ["1L1"], - coaching: ["1L1"], - confide: ["1L1"], - crushclaw: ["1L1"], - dazzlinggleam: ["1L1"], - doubleteam: ["1L1"], - drainingkiss: ["1L1"], - drainpunch: ["1L1"], - dreameater: ["1L1"], - encore: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - fairywind: ["1L1"], - featherdance: ["1L1"], - flashcannon: ["1L1"], - fly: ["1L1"], - focusblast: ["1L1"], - focusenergy: ["1L1"], - frustration: ["1L1"], - gigadrain: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - holdhands: ["1L1"], - hyperbeam: ["1L1"], - lowkick: ["1L1"], - lowsweep: ["1L1"], - magicroom: ["1L1"], - megakick: ["1L1"], - megapunch: ["1L1"], - metronome: ["1L1"], - mistyexplosion: ["1L1"], - mistyterrain: ["1L1"], - moonblast: ["1L1"], - nightmare: ["1L1"], - partingshot: ["1L1"], - playrough: ["1L1"], - poweruppunch: ["1L1"], - protect: ["1L1"], - psychic: ["1L1"], - psychup: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - return: ["1L1"], - revenge: ["1L1"], - reversal: ["1L1"], - round: ["1L1"], - scaryface: ["1L1"], - scratch: ["1L1"], - secretpower: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - sludgewave: ["1L1"], - snarl: ["1L1"], - snore: ["1L1"], - speedswap: ["1L1"], - strength: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - superpower: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - torment: ["1L1"], - toxic: ["1L1"], - uproar: ["1L1"], - vacuumwave: ["1L1"], - wakeupslap: ["1L1"], - workup: ["1L1"], - yawn: ["1L1"], - }, - eventData: [ - {generation: 6, level: 16, abilities: ["1L1"], moves: ["1L1"], pokeball: "cherishball"}, - ], - }, - pajantom: { - learnset: { - aerialace: ["1L1"], - astonish: ["1L1"], - attract: ["1L1"], - bind: ["1L1"], - block: ["1L1"], - bravebird: ["1L1"], - breakingswipe: ["1L1"], - brutalswing: ["1L1"], - bulldoze: ["1L1"], - confide: ["1L1"], - confuseray: ["1L1"], - crunch: ["1L1"], - doubleteam: ["1L1"], - dracometeor: ["1L1"], - dragonbreath: ["1L1"], - dragonclaw: ["1L1"], - dragonpulse: ["1L1"], - dragonrage: ["1L1"], - dragonrush: ["1L1"], - dreameater: ["1L1"], - drillrun: ["1L1"], - dualchop: ["1L1"], - earthquake: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fairylock: ["1L1"], - fly: ["1L1"], - focusenergy: ["1L1"], - frustration: ["1L1"], - gastroacid: ["1L1"], - gigaimpact: ["1L1"], - gravity: ["1L1"], - growl: ["1L1"], - haze: ["1L1"], - healblock: ["1L1"], - helpinghand: ["1L1"], - hex: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - icefang: ["1L1"], - icepunch: ["1L1"], - icywind: ["1L1"], - imprison: ["1L1"], - infestation: ["1L1"], - irontail: ["1L1"], - laserfocus: ["1L1"], - leechlife: ["1L1"], - nastyplot: ["1L1"], - outrage: ["1L1"], - phantomforce: ["1L1"], - poisonfang: ["1L1"], - poisongas: ["1L1"], - protect: ["1L1"], - psychic: ["1L1"], - psychicfangs: ["1L1"], - psychup: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rockslide: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - sandtomb: ["1L1"], - shadowball: ["1L1"], - shadowclaw: ["1L1"], - sleeptalk: ["1L1"], - smartstrike: ["1L1"], - snore: ["1L1"], - spiritshackle: ["1L1"], - spite: ["1L1"], - stoneedge: ["1L1"], - substitute: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - telekinesis: ["1L1"], - terablast: ["1L1"], - throatchop: ["1L1"], - toxic: ["1L1"], - toxicspikes: ["1L1"], - trickroom: ["1L1"], - venoshock: ["1L1"], - whirlpool: ["1L1"], - wrap: ["1L1"], - zenheadbutt: ["1L1"], - }, - }, - mumbao: { - learnset: { - attract: ["1L1"], - bodyslam: ["1L1"], - bulletseed: ["1L1"], - confide: ["1L1"], - dazzlinggleam: ["1L1"], - doubleteam: ["1L1"], - drainingkiss: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - explosion: ["1L1"], - facade: ["1L1"], - flowershield: ["1L1"], - focusblast: ["1L1"], - focusenergy: ["1L1"], - frustration: ["1L1"], - gigadrain: ["1L1"], - grassknot: ["1L1"], - grassyglide: ["1L1"], - grassyterrain: ["1L1"], - gravity: ["1L1"], - gyroball: ["1L1"], - harden: ["1L1"], - healingwish: ["1L1"], - heavyslam: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - ingrain: ["1L1"], - leafage: ["1L1"], - leafstorm: ["1L1"], - lightscreen: ["1L1"], - luckychant: ["1L1"], - magicalleaf: ["1L1"], - magiccoat: ["1L1"], - mistyexplosion: ["1L1"], - mistyterrain: ["1L1"], - moonblast: ["1L1"], - naturalgift: ["1L1"], - playrough: ["1L1"], - protect: ["1L1"], - psychup: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rototiller: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - sandstorm: ["1L1"], - seedbomb: ["1L1"], - selfdestruct: ["1L1"], - shadowball: ["1L1"], - sleeptalk: ["1L1"], - smellingsalts: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - superpower: ["1L1"], - swagger: ["1L1"], - synthesis: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - wish: ["1L1"], - woodhammer: ["1L1"], - worryseed: ["1L1"], - }, - }, - jumbao: { - learnset: { - armthrust: ["1L1"], - attract: ["1L1"], - block: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - bulkup: ["1L1"], - bulldoze: ["1L1"], - bulletseed: ["1L1"], - confide: ["1L1"], - dazzlinggleam: ["1L1"], - detect: ["1L1"], - doubleteam: ["1L1"], - drainingkiss: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - explosion: ["1L1"], - facade: ["1L1"], - fakeout: ["1L1"], - flameburst: ["1L1"], - flowershield: ["1L1"], - focusblast: ["1L1"], - focusenergy: ["1L1"], - frustration: ["1L1"], - gigadrain: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - grassyglide: ["1L1"], - grassyterrain: ["1L1"], - gravity: ["1L1"], - gyroball: ["1L1"], - harden: ["1L1"], - heavyslam: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - ingrain: ["1L1"], - leafage: ["1L1"], - leafstorm: ["1L1"], - lifedew: ["1L1"], - lightscreen: ["1L1"], - luckychant: ["1L1"], - magicalleaf: ["1L1"], - magiccoat: ["1L1"], - magicroom: ["1L1"], - metronome: ["1L1"], - mistyexplosion: ["1L1"], - mistyterrain: ["1L1"], - moonblast: ["1L1"], - naturalgift: ["1L1"], - playrough: ["1L1"], - protect: ["1L1"], - psychup: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rototiller: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - sandstorm: ["1L1"], - seedbomb: ["1L1"], - selfdestruct: ["1L1"], - shadowball: ["1L1"], - shoreup: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - solarblade: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - superpower: ["1L1"], - swagger: ["1L1"], - synthesis: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - wish: ["1L1"], - wonderroom: ["1L1"], - worryseed: ["1L1"], - }, - }, - fawnifer: { - learnset: { - attract: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - bulkup: ["1L1"], - bulletseed: ["1L1"], - chargebeam: ["1L1"], - charm: ["1L1"], - confide: ["1L1"], - confuseray: ["1L1"], - doubleedge: ["1L1"], - doublekick: ["1L1"], - doubleteam: ["1L1"], - echoedvoice: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - flash: ["1L1"], - frustration: ["1L1"], - gigadrain: ["1L1"], - grassknot: ["1L1"], - grasspledge: ["1L1"], - grassyglide: ["1L1"], - grassyterrain: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hypervoice: ["1L1"], - knockoff: ["1L1"], - leafage: ["1L1"], - leafstorm: ["1L1"], - leechseed: ["1L1"], - leer: ["1L1"], - naturalgift: ["1L1"], - naturepower: ["1L1"], - powerwhip: ["1L1"], - present: ["1L1"], - protect: ["1L1"], - quickattack: ["1L1"], - rapidspin: ["1L1"], - razorleaf: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - round: ["1L1"], - seedbomb: ["1L1"], - signalbeam: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - spark: ["1L1"], - spotlight: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - swordsdance: ["1L1"], - synthesis: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thundershock: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - uproar: ["1L1"], - voltswitch: ["1L1"], - wildcharge: ["1L1"], - workup: ["1L1"], - worryseed: ["1L1"], - }, - }, - electrelk: { - learnset: { - attract: ["1L1"], - bodyslam: ["1L1"], - brickbreak: ["1L1"], - bulkup: ["1L1"], - bulletseed: ["1L1"], - chargebeam: ["1L1"], - charm: ["1L1"], - confide: ["1L1"], - confuseray: ["1L1"], - doubleteam: ["1L1"], - echoedvoice: ["1L1"], - eerieimpulse: ["1L1"], - electroweb: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - flash: ["1L1"], - flashcannon: ["1L1"], - frustration: ["1L1"], - gigadrain: ["1L1"], - grassknot: ["1L1"], - grasspledge: ["1L1"], - grassyglide: ["1L1"], - grassyterrain: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hypervoice: ["1L1"], - knockoff: ["1L1"], - leafage: ["1L1"], - leafstorm: ["1L1"], - leechseed: ["1L1"], - leer: ["1L1"], - magnetrise: ["1L1"], - naturepower: ["1L1"], - powerwhip: ["1L1"], - protect: ["1L1"], - quickattack: ["1L1"], - razorleaf: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - risingvoltage: ["1L1"], - round: ["1L1"], - seedbomb: ["1L1"], - shockwave: ["1L1"], - signalbeam: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - solarblade: ["1L1"], - spark: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - swordsdance: ["1L1"], - synthesis: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - throatchop: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thundershock: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - uproar: ["1L1"], - voltswitch: ["1L1"], - wildcharge: ["1L1"], - workup: ["1L1"], - worryseed: ["1L1"], - zapcannon: ["1L1"], - }, - }, - caribolt: { - learnset: { - attract: ["1L1"], - bodyslam: ["1L1"], - boomburst: ["1L1"], - brickbreak: ["1L1"], - bulkup: ["1L1"], - bulletseed: ["1L1"], - celebrate: ["1L1"], - chargebeam: ["1L1"], - charm: ["1L1"], - confide: ["1L1"], - confuseray: ["1L1"], - doubleteam: ["1L1"], - echoedvoice: ["1L1"], - eerieimpulse: ["1L1"], - electricterrain: ["1L1"], - electroweb: ["1L1"], - endeavor: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - flash: ["1L1"], - flashcannon: ["1L1"], - frenzyplant: ["1L1"], - frustration: ["1L1"], - gigadrain: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - grasspledge: ["1L1"], - grassyglide: ["1L1"], - grassyterrain: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hornleech: ["1L1"], - hyperbeam: ["1L1"], - hyperdrill: ["1L1"], - hypervoice: ["1L1"], - knockoff: ["1L1"], - leafage: ["1L1"], - leafstorm: ["1L1"], - leechseed: ["1L1"], - leer: ["1L1"], - magnetrise: ["1L1"], - metronome: ["1L1"], - naturepower: ["1L1"], - powerwhip: ["1L1"], - protect: ["1L1"], - quickattack: ["1L1"], - razorleaf: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - risingvoltage: ["1L1"], - round: ["1L1"], - seedbomb: ["1L1"], - shockwave: ["1L1"], - signalbeam: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - solarblade: ["1L1"], - spark: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - swordsdance: ["1L1"], - synthesis: ["1L1"], - tackle: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - terrainpulse: ["1L1"], - throatchop: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thundershock: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - uproar: ["1L1"], - voltswitch: ["1L1"], - wildcharge: ["1L1"], - workup: ["1L1"], - worryseed: ["1L1"], - zapcannon: ["1L1"], - }, - eventData: [ - {generation: 7, level: 50, moves: ["1L1"], pokeball: "cherishball"}, - ], - }, - smogecko: { - learnset: { - acidspray: ["1L1"], - aerialace: ["1L1"], - attract: ["1L1"], - bonerush: ["1L1"], - brickbreak: ["1L1"], - bulkup: ["1L1"], - bulldoze: ["1L1"], - bulletpunch: ["1L1"], - camouflage: ["1L1"], - confide: ["1L1"], - defog: ["1L1"], - dig: ["1L1"], - doubleteam: ["1L1"], - earthpower: ["1L1"], - ember: ["1L1"], - endeavor: ["1L1"], - facade: ["1L1"], - fireblast: ["1L1"], - firefang: ["1L1"], - firepledge: ["1L1"], - firepunch: ["1L1"], - firespin: ["1L1"], - flameburst: ["1L1"], - flamecharge: ["1L1"], - flamethrower: ["1L1"], - flamewheel: ["1L1"], - flareblitz: ["1L1"], - forcepalm: ["1L1"], - frustration: ["1L1"], - gunkshot: ["1L1"], - heatwave: ["1L1"], - hiddenpower: ["1L1"], - incinerate: ["1L1"], - irontail: ["1L1"], - lavaplume: ["1L1"], - lick: ["1L1"], - lowkick: ["1L1"], - mudshot: ["1L1"], - overheat: ["1L1"], - poisonfang: ["1L1"], - poisonjab: ["1L1"], - protect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roar: ["1L1"], - round: ["1L1"], - sandtomb: ["1L1"], - scaleshot: ["1L1"], - scorchingsands: ["1L1"], - scratch: ["1L1"], - screech: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - smog: ["1L1"], - smokescreen: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - stealthrock: ["1L1"], - stompingtantrum: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swagger: ["1L1"], - tailwhip: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - venomdrench: ["1L1"], - willowisp: ["1L1"], - workup: ["1L1"], - }, - }, - smoguana: { - learnset: { - acidspray: ["1L1"], - aerialace: ["1L1"], - attract: ["1L1"], - brickbreak: ["1L1"], - bulkup: ["1L1"], - bulldoze: ["1L1"], - burningjealousy: ["1L1"], - camouflage: ["1L1"], - clearsmog: ["1L1"], - confide: ["1L1"], - corrosivegas: ["1L1"], - crosspoison: ["1L1"], - defog: ["1L1"], - dig: ["1L1"], - doubleteam: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - ember: ["1L1"], - endeavor: ["1L1"], - facade: ["1L1"], - fireblast: ["1L1"], - firefang: ["1L1"], - firepledge: ["1L1"], - firepunch: ["1L1"], - flameburst: ["1L1"], - flamecharge: ["1L1"], - flamethrower: ["1L1"], - flamewheel: ["1L1"], - flareblitz: ["1L1"], - frustration: ["1L1"], - gunkshot: ["1L1"], - heatwave: ["1L1"], - hiddenpower: ["1L1"], - incinerate: ["1L1"], - irontail: ["1L1"], - lavaplume: ["1L1"], - lick: ["1L1"], - lowkick: ["1L1"], - mudshot: ["1L1"], - overheat: ["1L1"], - poisonjab: ["1L1"], - protect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roar: ["1L1"], - round: ["1L1"], - sandtomb: ["1L1"], - scaleshot: ["1L1"], - scorchingsands: ["1L1"], - scratch: ["1L1"], - screech: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - smog: ["1L1"], - smokescreen: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - stealthrock: ["1L1"], - stompingtantrum: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - superpower: ["1L1"], - swagger: ["1L1"], - tailwhip: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - venomdrench: ["1L1"], - willowisp: ["1L1"], - workup: ["1L1"], - }, - }, - smokomodo: { - learnset: { - acidspray: ["1L1"], - aerialace: ["1L1"], - attract: ["1L1"], - blastburn: ["1L1"], - brickbreak: ["1L1"], - bulkup: ["1L1"], - bulldoze: ["1L1"], - burningjealousy: ["1L1"], - camouflage: ["1L1"], - celebrate: ["1L1"], - circlethrow: ["1L1"], - clearsmog: ["1L1"], - confide: ["1L1"], - corrosivegas: ["1L1"], - crosspoison: ["1L1"], - defog: ["1L1"], - dig: ["1L1"], - doubleteam: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - ember: ["1L1"], - endeavor: ["1L1"], - eruption: ["1L1"], - facade: ["1L1"], - fireblast: ["1L1"], - firefang: ["1L1"], - firepledge: ["1L1"], - firepunch: ["1L1"], - firespin: ["1L1"], - fissure: ["1L1"], - flameburst: ["1L1"], - flamecharge: ["1L1"], - flamethrower: ["1L1"], - flamewheel: ["1L1"], - flareblitz: ["1L1"], - focusblast: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - gunkshot: ["1L1"], - heatcrash: ["1L1"], - heatwave: ["1L1"], - hiddenpower: ["1L1"], - highhorsepower: ["1L1"], - hyperbeam: ["1L1"], - incinerate: ["1L1"], - irontail: ["1L1"], - lavaplume: ["1L1"], - lick: ["1L1"], - lowkick: ["1L1"], - machpunch: ["1L1"], - magnitude: ["1L1"], - metalclaw: ["1L1"], - morningsun: ["1L1"], - mudshot: ["1L1"], - mysticalfire: ["1L1"], - overheat: ["1L1"], - poisonjab: ["1L1"], - protect: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - roar: ["1L1"], - round: ["1L1"], - sandtomb: ["1L1"], - scaleshot: ["1L1"], - scorchingsands: ["1L1"], - scratch: ["1L1"], - screech: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - smog: ["1L1"], - smokescreen: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - stealthrock: ["1L1"], - stompingtantrum: ["1L1"], - stormthrow: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - superpower: ["1L1"], - swagger: ["1L1"], - tailwhip: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - toxic: ["1L1"], - trailblaze: ["1L1"], - venomdrench: ["1L1"], - willowisp: ["1L1"], - workup: ["1L1"], - }, - eventData: [ - {generation: 7, level: 50, moves: ["1L1"], pokeball: "cherishball"}, - ], - }, - swirlpool: { - learnset: { - acidarmor: ["1L1"], - allyswitch: ["1L1"], - aquajet: ["1L1"], - attract: ["1L1"], - blizzard: ["1L1"], - bodyslam: ["1L1"], - brine: ["1L1"], - bugbite: ["1L1"], - bugbuzz: ["1L1"], - captivate: ["1L1"], - charm: ["1L1"], - chillingwater: ["1L1"], - confide: ["1L1"], - confusion: ["1L1"], - dazzlinggleam: ["1L1"], - dive: ["1L1"], - doubleteam: ["1L1"], - drainingkiss: ["1L1"], - echoedvoice: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - frustration: ["1L1"], - futuresight: ["1L1"], - growl: ["1L1"], - guardswap: ["1L1"], - hail: ["1L1"], - healpulse: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hydropump: ["1L1"], - hypervoice: ["1L1"], - icebeam: ["1L1"], - icywind: ["1L1"], - infestation: ["1L1"], - leechlife: ["1L1"], - lifedew: ["1L1"], - magiccoat: ["1L1"], - metronome: ["1L1"], - muddywater: ["1L1"], - pinmissile: ["1L1"], - pounce: ["1L1"], - pound: ["1L1"], - powder: ["1L1"], - protect: ["1L1"], - psychic: ["1L1"], - psychoshift: ["1L1"], - raindance: ["1L1"], - recover: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - scald: ["1L1"], - signalbeam: ["1L1"], - skillswap: ["1L1"], - skittersmack: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - snowscape: ["1L1"], - spikyshield: ["1L1"], - spotlight: ["1L1"], - stealthrock: ["1L1"], - stickyweb: ["1L1"], - strugglebug: ["1L1"], - substitute: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - swordsdance: ["1L1"], - terablast: ["1L1"], - toxic: ["1L1"], - trick: ["1L1"], - uproar: ["1L1"], - uturn: ["1L1"], - venomdrench: ["1L1"], - venoshock: ["1L1"], - waterfall: ["1L1"], - watergun: ["1L1"], - waterpledge: ["1L1"], - waterpulse: ["1L1"], - whirlpool: ["1L1"], - workup: ["1L1"], - }, - }, - coribalis: { - learnset: { - allyswitch: ["1L1"], - aquajet: ["1L1"], - attract: ["1L1"], - blizzard: ["1L1"], - block: ["1L1"], - bodyslam: ["1L1"], - brine: ["1L1"], - bugbite: ["1L1"], - bugbuzz: ["1L1"], - captivate: ["1L1"], - charm: ["1L1"], - chillingwater: ["1L1"], - confide: ["1L1"], - confusion: ["1L1"], - dazzlinggleam: ["1L1"], - dive: ["1L1"], - doubleteam: ["1L1"], - drainingkiss: ["1L1"], - dualwingbeat: ["1L1"], - echoedvoice: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - frustration: ["1L1"], - futuresight: ["1L1"], - growl: ["1L1"], - guardswap: ["1L1"], - hail: ["1L1"], - healpulse: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hydropump: ["1L1"], - hypervoice: ["1L1"], - icebeam: ["1L1"], - icywind: ["1L1"], - infestation: ["1L1"], - leechlife: ["1L1"], - magiccoat: ["1L1"], - magicroom: ["1L1"], - metronome: ["1L1"], - muddywater: ["1L1"], - pinmissile: ["1L1"], - pounce: ["1L1"], - pound: ["1L1"], - protect: ["1L1"], - psychic: ["1L1"], - raindance: ["1L1"], - razorshell: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - scald: ["1L1"], - signalbeam: ["1L1"], - skillswap: ["1L1"], - skittersmack: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - snowscape: ["1L1"], - stealthrock: ["1L1"], - strugglebug: ["1L1"], - substitute: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - swordsdance: ["1L1"], - terablast: ["1L1"], - toxic: ["1L1"], - trick: ["1L1"], - trickroom: ["1L1"], - uproar: ["1L1"], - uturn: ["1L1"], - venomdrench: ["1L1"], - venoshock: ["1L1"], - waterfall: ["1L1"], - watergun: ["1L1"], - waterpledge: ["1L1"], - waterpulse: ["1L1"], - whirlpool: ["1L1"], - wonderroom: ["1L1"], - workup: ["1L1"], - xscissor: ["1L1"], - }, - }, - snaelstrom: { - learnset: { - allyswitch: ["1L1"], - aquajet: ["1L1"], - aquaring: ["1L1"], - attract: ["1L1"], - blizzard: ["1L1"], - block: ["1L1"], - bodyslam: ["1L1"], - brine: ["1L1"], - bugbite: ["1L1"], - bugbuzz: ["1L1"], - captivate: ["1L1"], - celebrate: ["1L1"], - charm: ["1L1"], - chillingwater: ["1L1"], - confide: ["1L1"], - confusion: ["1L1"], - dazzlinggleam: ["1L1"], - dive: ["1L1"], - doubleteam: ["1L1"], - drainingkiss: ["1L1"], - dualwingbeat: ["1L1"], - echoedvoice: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - frustration: ["1L1"], - futuresight: ["1L1"], - gigaimpact: ["1L1"], - growl: ["1L1"], - guardswap: ["1L1"], - hail: ["1L1"], - healpulse: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hydrocannon: ["1L1"], - hydropump: ["1L1"], - hyperbeam: ["1L1"], - hypervoice: ["1L1"], - icebeam: ["1L1"], - iciclespear: ["1L1"], - icywind: ["1L1"], - infestation: ["1L1"], - leechlife: ["1L1"], - liquidation: ["1L1"], - magiccoat: ["1L1"], - magicroom: ["1L1"], - metronome: ["1L1"], - muddywater: ["1L1"], - pinmissile: ["1L1"], - pounce: ["1L1"], - pound: ["1L1"], - protect: ["1L1"], - psychic: ["1L1"], - raindance: ["1L1"], - rapidspin: ["1L1"], - razorshell: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - scald: ["1L1"], - signalbeam: ["1L1"], - skillswap: ["1L1"], - skittersmack: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - snowscape: ["1L1"], - stealthrock: ["1L1"], - strugglebug: ["1L1"], - substitute: ["1L1"], - surf: ["1L1"], - swagger: ["1L1"], - swift: ["1L1"], - swordsdance: ["1L1"], - terablast: ["1L1"], - toxic: ["1L1"], - trick: ["1L1"], - trickroom: ["1L1"], - uproar: ["1L1"], - uturn: ["1L1"], - venomdrench: ["1L1"], - venoshock: ["1L1"], - waterfall: ["1L1"], - watergun: ["1L1"], - waterpledge: ["1L1"], - waterpulse: ["1L1"], - whirlpool: ["1L1"], - wonderroom: ["1L1"], - workup: ["1L1"], - xscissor: ["1L1"], - }, - eventData: [ - {generation: 7, level: 50, moves: ["1L1"], pokeball: "cherishball"}, - ], - }, - justyke: { - learnset: { - allyswitch: ["1L1"], - aurasphere: ["1L1"], - bodyslam: ["1L1"], - bulldoze: ["1L1"], - confide: ["1L1"], - destinybond: ["1L1"], - doubleteam: ["1L1"], - drillrun: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - embargo: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - flashcannon: ["1L1"], - frustration: ["1L1"], - gravity: ["1L1"], - guardsplit: ["1L1"], - gyroball: ["1L1"], - healingwish: ["1L1"], - heavyslam: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - icespinner: ["1L1"], - imprison: ["1L1"], - irondefense: ["1L1"], - ironhead: ["1L1"], - irontail: ["1L1"], - magicroom: ["1L1"], - magnetrise: ["1L1"], - memento: ["1L1"], - mindreader: ["1L1"], - mirrorshot: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - mudsport: ["1L1"], - painsplit: ["1L1"], - pound: ["1L1"], - powersplit: ["1L1"], - protect: ["1L1"], - psychup: ["1L1"], - quash: ["1L1"], - recycle: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rockpolish: ["1L1"], - rockslide: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - sandstorm: ["1L1"], - sleeptalk: ["1L1"], - smartstrike: ["1L1"], - snore: ["1L1"], - steelbeam: ["1L1"], - steelroller: ["1L1"], - substitute: ["1L1"], - swagger: ["1L1"], - terablast: ["1L1"], - trickroom: ["1L1"], - wonderroom: ["1L1"], - workup: ["1L1"], - }, - }, - equilibra: { - learnset: { - allyswitch: ["1L1"], - aurasphere: ["1L1"], - bodyslam: ["1L1"], - bulldoze: ["1L1"], - confide: ["1L1"], - destinybond: ["1L1"], - doomdesire: ["1L1"], - doubleteam: ["1L1"], - drillrun: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - embargo: ["1L1"], - endure: ["1L1"], - explosion: ["1L1"], - facade: ["1L1"], - flashcannon: ["1L1"], - frustration: ["1L1"], - gigaimpact: ["1L1"], - gravity: ["1L1"], - guardsplit: ["1L1"], - gyroball: ["1L1"], - healingwish: ["1L1"], - heavyslam: ["1L1"], - helpinghand: ["1L1"], - hiddenpower: ["1L1"], - hyperbeam: ["1L1"], - imprison: ["1L1"], - irondefense: ["1L1"], - ironhead: ["1L1"], - irontail: ["1L1"], - magicroom: ["1L1"], - magnetrise: ["1L1"], - memento: ["1L1"], - mindreader: ["1L1"], - mirrorshot: ["1L1"], - mudshot: ["1L1"], - mudslap: ["1L1"], - mudsport: ["1L1"], - painsplit: ["1L1"], - perishsong: ["1L1"], - pound: ["1L1"], - powersplit: ["1L1"], - protect: ["1L1"], - psychup: ["1L1"], - quash: ["1L1"], - rapidspin: ["1L1"], - recycle: ["1L1"], - rest: ["1L1"], - return: ["1L1"], - rockpolish: ["1L1"], - rockslide: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - sandstorm: ["1L1"], - sleeptalk: ["1L1"], - smartstrike: ["1L1"], - snore: ["1L1"], - steelbeam: ["1L1"], - steelroller: ["1L1"], - substitute: ["1L1"], - swagger: ["1L1"], - terablast: ["1L1"], - trickroom: ["1L1"], - wonderroom: ["1L1"], - workup: ["1L1"], - }, - eventData: [ - {generation: 9, level: 50, moves: ["1L1"], pokeball: "pokeball"}, - ], - }, - solotl: { - learnset: { - acrobatics: ["1L1"], - agility: ["1L1"], - allyswitch: ["1L1"], - attract: ["1L1"], - batonpass: ["1L1"], - breakingswipe: ["1L1"], - charm: ["1L1"], - cosmicpower: ["1L1"], - dazzlinggleam: ["1L1"], - defog: ["1L1"], - dracometeor: ["1L1"], - dragonbreath: ["1L1"], - dragonpulse: ["1L1"], - dragonrush: ["1L1"], - dragontail: ["1L1"], - ember: ["1L1"], - encore: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fireblast: ["1L1"], - firelash: ["1L1"], - firespin: ["1L1"], - flamecharge: ["1L1"], - flamethrower: ["1L1"], - flamewheel: ["1L1"], - flareblitz: ["1L1"], - healbell: ["1L1"], - healingwish: ["1L1"], - heatwave: ["1L1"], - helpinghand: ["1L1"], - imprison: ["1L1"], - lifedew: ["1L1"], - lightscreen: ["1L1"], - magicalleaf: ["1L1"], - meteorbeam: ["1L1"], - metronome: ["1L1"], - mysticalfire: ["1L1"], - outrage: ["1L1"], - overheat: ["1L1"], - pound: ["1L1"], - protect: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - spikes: ["1L1"], - storedpower: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swift: ["1L1"], - tailwhip: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thunderwave: ["1L1"], - twister: ["1L1"], - willowisp: ["1L1"], - workup: ["1L1"], - yawn: ["1L1"], - }, - }, - astrolotl: { - learnset: { - acrobatics: ["1L1"], - agility: ["1L1"], - allyswitch: ["1L1"], - attract: ["1L1"], - batonpass: ["1L1"], - breakingswipe: ["1L1"], - bulldoze: ["1L1"], - charm: ["1L1"], - cosmicpower: ["1L1"], - dazzlinggleam: ["1L1"], - dracometeor: ["1L1"], - dragonbreath: ["1L1"], - dragonclaw: ["1L1"], - dragonpulse: ["1L1"], - dragonrush: ["1L1"], - dragontail: ["1L1"], - ember: ["1L1"], - encore: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fireblast: ["1L1"], - firefang: ["1L1"], - firelash: ["1L1"], - firepunch: ["1L1"], - firespin: ["1L1"], - flamecharge: ["1L1"], - flamethrower: ["1L1"], - flamewheel: ["1L1"], - flareblitz: ["1L1"], - healbell: ["1L1"], - healingwish: ["1L1"], - heatwave: ["1L1"], - helpinghand: ["1L1"], - hyperbeam: ["1L1"], - imprison: ["1L1"], - lightscreen: ["1L1"], - magicalleaf: ["1L1"], - magiccoat: ["1L1"], - meteorbeam: ["1L1"], - metronome: ["1L1"], - mysticalfire: ["1L1"], - outrage: ["1L1"], - overheat: ["1L1"], - pound: ["1L1"], - protect: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - scorchingsands: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - solarbeam: ["1L1"], - spikes: ["1L1"], - stompingtantrum: ["1L1"], - storedpower: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - swift: ["1L1"], - tailwhip: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thunderwave: ["1L1"], - willowisp: ["1L1"], - workup: ["1L1"], - }, - }, - miasmite: { - learnset: { - agility: ["1L1"], - aromatherapy: ["1L1"], - attract: ["1L1"], - bite: ["1L1"], - bodyslam: ["1L1"], - breakingswipe: ["1L1"], - bugbite: ["1L1"], - bugbuzz: ["1L1"], - corrosivegas: ["1L1"], - crunch: ["1L1"], - darkpulse: ["1L1"], - dracometeor: ["1L1"], - dragonbreath: ["1L1"], - dragonclaw: ["1L1"], - dragonpulse: ["1L1"], - dragonrush: ["1L1"], - dragontail: ["1L1"], - earthpower: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - firefang: ["1L1"], - firstimpression: ["1L1"], - flashcannon: ["1L1"], - haze: ["1L1"], - icefang: ["1L1"], - ironhead: ["1L1"], - irontail: ["1L1"], - leechlife: ["1L1"], - lunge: ["1L1"], - megahorn: ["1L1"], - outrage: ["1L1"], - pinmissile: ["1L1"], - poisonfang: ["1L1"], - poisongas: ["1L1"], - poisonjab: ["1L1"], - pounce: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - recover: ["1L1"], - rest: ["1L1"], - round: ["1L1"], - scaryface: ["1L1"], - screech: ["1L1"], - skittersmack: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - smog: ["1L1"], - smokescreen: ["1L1"], - snore: ["1L1"], - strugglebug: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - superfang: ["1L1"], - superpower: ["1L1"], - swordsdance: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thunderfang: ["1L1"], - uproar: ["1L1"], - workup: ["1L1"], - xscissor: ["1L1"], - }, - }, - miasmaw: { - learnset: { - agility: ["1L1"], - attract: ["1L1"], - bite: ["1L1"], - bodyslam: ["1L1"], - breakingswipe: ["1L1"], - brutalswing: ["1L1"], - bugbite: ["1L1"], - bugbuzz: ["1L1"], - bulldoze: ["1L1"], - closecombat: ["1L1"], - corrosivegas: ["1L1"], - crunch: ["1L1"], - darkpulse: ["1L1"], - dracometeor: ["1L1"], - dragonbreath: ["1L1"], - dragonclaw: ["1L1"], - dragonhammer: ["1L1"], - dragonpulse: ["1L1"], - dragontail: ["1L1"], - dualwingbeat: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - firefang: ["1L1"], - flashcannon: ["1L1"], - focusblast: ["1L1"], - gigaimpact: ["1L1"], - gunkshot: ["1L1"], - haze: ["1L1"], - highhorsepower: ["1L1"], - hyperbeam: ["1L1"], - icefang: ["1L1"], - ironhead: ["1L1"], - irontail: ["1L1"], - leechlife: ["1L1"], - lunge: ["1L1"], - megahorn: ["1L1"], - nastyplot: ["1L1"], - outrage: ["1L1"], - pinmissile: ["1L1"], - poisongas: ["1L1"], - poisonjab: ["1L1"], - pounce: ["1L1"], - protect: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - round: ["1L1"], - scaleshot: ["1L1"], - scaryface: ["1L1"], - screech: ["1L1"], - skittersmack: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - smog: ["1L1"], - smokescreen: ["1L1"], - snore: ["1L1"], - strugglebug: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - superfang: ["1L1"], - superpower: ["1L1"], - swordsdance: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderfang: ["1L1"], - uproar: ["1L1"], - uturn: ["1L1"], - wildcharge: ["1L1"], - workup: ["1L1"], - xscissor: ["1L1"], - }, - }, - chromera: { - learnset: { - acidspray: ["1L1"], - aerialace: ["1L1"], - aromatherapy: ["1L1"], - assurance: ["1L1"], - attract: ["1L1"], - beatup: ["1L1"], - belch: ["1L1"], - blizzard: ["1L1"], - bodyslam: ["1L1"], - boomburst: ["1L1"], - calmmind: ["1L1"], - charm: ["1L1"], - chillingwater: ["1L1"], - crunch: ["1L1"], - darkpulse: ["1L1"], - decorate: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - faketears: ["1L1"], - finalgambit: ["1L1"], - firefang: ["1L1"], - firstimpression: ["1L1"], - foulplay: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - gunkshot: ["1L1"], - hex: ["1L1"], - hyperbeam: ["1L1"], - hypervoice: ["1L1"], - icefang: ["1L1"], - imprison: ["1L1"], - knockoff: ["1L1"], - lashout: ["1L1"], - lifedew: ["1L1"], - lightscreen: ["1L1"], - metalclaw: ["1L1"], - mudslap: ["1L1"], - nobleroar: ["1L1"], - outrage: ["1L1"], - payback: ["1L1"], - payday: ["1L1"], - playrough: ["1L1"], - protect: ["1L1"], - recover: ["1L1"], - reflect: ["1L1"], - rest: ["1L1"], - revenge: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - scald: ["1L1"], - scaryface: ["1L1"], - shadowball: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - sludgewave: ["1L1"], - snarl: ["1L1"], - snore: ["1L1"], - spite: ["1L1"], - stompingtantrum: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - switcheroo: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - thunderfang: ["1L1"], - toxic: ["1L1"], - toxicspikes: ["1L1"], - trailblaze: ["1L1"], - uproar: ["1L1"], - venomdrench: ["1L1"], - wideguard: ["1L1"], - }, - eventData: [ - {generation: 8, level: 50, moves: ["1L1"], pokeball: "cherishball"}, - ], - }, - venomicon: { - learnset: { - acidspray: ["1L1"], - aircutter: ["1L1"], - airslash: ["1L1"], - assurance: ["1L1"], - attract: ["1L1"], - bodypress: ["1L1"], - bodyslam: ["1L1"], - bravebird: ["1L1"], - clearsmog: ["1L1"], - coil: ["1L1"], - confuseray: ["1L1"], - darkpulse: ["1L1"], - drillpeck: ["1L1"], - dualwingbeat: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fly: ["1L1"], - focusenergy: ["1L1"], - foulplay: ["1L1"], - gigaimpact: ["1L1"], - guardswap: ["1L1"], - gunkshot: ["1L1"], - hex: ["1L1"], - hurricane: ["1L1"], - hyperbeam: ["1L1"], - imprison: ["1L1"], - irondefense: ["1L1"], - knockoff: ["1L1"], - lashout: ["1L1"], - magicalleaf: ["1L1"], - magicroom: ["1L1"], - meanlook: ["1L1"], - memento: ["1L1"], - nastyplot: ["1L1"], - payback: ["1L1"], - peck: ["1L1"], - phantomforce: ["1L1"], - poisonjab: ["1L1"], - poisonsting: ["1L1"], - powerswap: ["1L1"], - protect: ["1L1"], - psychic: ["1L1"], - psyshock: ["1L1"], - rest: ["1L1"], - retaliate: ["1L1"], - roost: ["1L1"], - round: ["1L1"], - safeguard: ["1L1"], - scaryface: ["1L1"], - shadowball: ["1L1"], - skillswap: ["1L1"], - sleeptalk: ["1L1"], - sludgebomb: ["1L1"], - sludgewave: ["1L1"], - snore: ["1L1"], - stealthrock: ["1L1"], - steelwing: ["1L1"], - substitute: ["1L1"], - swift: ["1L1"], - tailwind: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - thunderwave: ["1L1"], - toxic: ["1L1"], - toxicspikes: ["1L1"], - trick: ["1L1"], - uturn: ["1L1"], - venomdrench: ["1L1"], - venoshock: ["1L1"], - withdraw: ["1L1"], - }, - }, - saharascal: { - learnset: { - ancientpower: ["1L1"], - attract: ["1L1"], - bodypress: ["1L1"], - bodyslam: ["1L1"], - bulldoze: ["1L1"], - doubleedge: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fissure: ["1L1"], - heavyslam: ["1L1"], - highhorsepower: ["1L1"], - megakick: ["1L1"], - mudshot: ["1L1"], - painsplit: ["1L1"], - payback: ["1L1"], - payday: ["1L1"], - protect: ["1L1"], - rapidspin: ["1L1"], - rest: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - sandattack: ["1L1"], - sandstorm: ["1L1"], - sandtomb: ["1L1"], - scorchingsands: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - spitup: ["1L1"], - stealthrock: ["1L1"], - stockpile: ["1L1"], - stomp: ["1L1"], - stompingtantrum: ["1L1"], - substitute: ["1L1"], - swallow: ["1L1"], - swordsdance: ["1L1"], - tackle: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - watergun: ["1L1"], - waterpulse: ["1L1"], - }, - }, - saharaja: { - learnset: { - attract: ["1L1"], - bodypress: ["1L1"], - bodyslam: ["1L1"], - bulldoze: ["1L1"], - dazzlinggleam: ["1L1"], - diamondstorm: ["1L1"], - doubleedge: ["1L1"], - earthpower: ["1L1"], - earthquake: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - fissure: ["1L1"], - flashcannon: ["1L1"], - gigaimpact: ["1L1"], - healbell: ["1L1"], - heavyslam: ["1L1"], - highhorsepower: ["1L1"], - hornleech: ["1L1"], - hyperbeam: ["1L1"], - lashout: ["1L1"], - megakick: ["1L1"], - mudshot: ["1L1"], - outrage: ["1L1"], - payback: ["1L1"], - payday: ["1L1"], - powergem: ["1L1"], - protect: ["1L1"], - rest: ["1L1"], - rocktomb: ["1L1"], - round: ["1L1"], - sandattack: ["1L1"], - sandstorm: ["1L1"], - sandtomb: ["1L1"], - scorchingsands: ["1L1"], - sleeptalk: ["1L1"], - snore: ["1L1"], - spitup: ["1L1"], - stealthrock: ["1L1"], - stockpile: ["1L1"], - stomp: ["1L1"], - stompingtantrum: ["1L1"], - stoneedge: ["1L1"], - substitute: ["1L1"], - swallow: ["1L1"], - swordsdance: ["1L1"], - tackle: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thief: ["1L1"], - watergun: ["1L1"], - waterpulse: ["1L1"], - }, - }, - ababo: { - learnset: { - bodyslam: ["1L1"], - bulkup: ["1L1"], - charm: ["1L1"], - copycat: ["1L1"], - dazzlinggleam: ["1L1"], - defensecurl: ["1L1"], - disable: ["1L1"], - disarmingvoice: ["1L1"], - drainingkiss: ["1L1"], - endure: ["1L1"], - explosion: ["1L1"], - extremespeed: ["1L1"], - facade: ["1L1"], - flamethrower: ["1L1"], - fling: ["1L1"], - grassknot: ["1L1"], - helpinghand: ["1L1"], - hypervoice: ["1L1"], - lashout: ["1L1"], - lightscreen: ["1L1"], - metronome: ["1L1"], - mistyexplosion: ["1L1"], - mistyterrain: ["1L1"], - playrough: ["1L1"], - pound: ["1L1"], - protect: ["1L1"], - psychic: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - seismictoss: ["1L1"], - shadowball: ["1L1"], - sleeptalk: ["1L1"], - solarbeam: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - sweetkiss: ["1L1"], - takedown: ["1L1"], - terablast: ["1L1"], - trailblaze: ["1L1"], - trick: ["1L1"], - wildcharge: ["1L1"], - wish: ["1L1"], - }, - }, - scattervein: { - learnset: { - batonpass: ["1L1"], - bodyslam: ["1L1"], - brutalswing: ["1L1"], - bulkup: ["1L1"], - charm: ["1L1"], - copycat: ["1L1"], - dazzlinggleam: ["1L1"], - defensecurl: ["1L1"], - disable: ["1L1"], - disarmingvoice: ["1L1"], - doubleedge: ["1L1"], - drainingkiss: ["1L1"], - echoedvoice: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - explosion: ["1L1"], - extremespeed: ["1L1"], - facade: ["1L1"], - fireblast: ["1L1"], - flamethrower: ["1L1"], - fling: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - heatwave: ["1L1"], - helpinghand: ["1L1"], - hyperbeam: ["1L1"], - hypervoice: ["1L1"], - imprison: ["1L1"], - lashout: ["1L1"], - lifedew: ["1L1"], - lightscreen: ["1L1"], - magicalleaf: ["1L1"], - metronome: ["1L1"], - mistyexplosion: ["1L1"], - mistyterrain: ["1L1"], - moonblast: ["1L1"], - moonlight: ["1L1"], - playrough: ["1L1"], - pound: ["1L1"], - protect: ["1L1"], - psychic: ["1L1"], - psyshock: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - safeguard: ["1L1"], - screech: ["1L1"], - seismictoss: ["1L1"], - shadowball: ["1L1"], - slam: ["1L1"], - sleeptalk: ["1L1"], - solarbeam: ["1L1"], - spikes: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - sweetkiss: ["1L1"], - tailwhip: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - tickle: ["1L1"], - trailblaze: ["1L1"], - trick: ["1L1"], - wildcharge: ["1L1"], - willowisp: ["1L1"], - wish: ["1L1"], - wrap: ["1L1"], - zenheadbutt: ["1L1"], - }, - }, - hemogoblin: { - learnset: { - batonpass: ["1L1"], - bitterblade: ["1L1"], - bodyslam: ["1L1"], - brutalswing: ["1L1"], - bulkup: ["1L1"], - burningjealousy: ["1L1"], - charm: ["1L1"], - copycat: ["1L1"], - dazzlinggleam: ["1L1"], - defensecurl: ["1L1"], - disable: ["1L1"], - disarmingvoice: ["1L1"], - doubleedge: ["1L1"], - drainingkiss: ["1L1"], - echoedvoice: ["1L1"], - endure: ["1L1"], - energyball: ["1L1"], - facade: ["1L1"], - fireblast: ["1L1"], - firelash: ["1L1"], - flamethrower: ["1L1"], - flareblitz: ["1L1"], - fling: ["1L1"], - gigaimpact: ["1L1"], - grassknot: ["1L1"], - heatwave: ["1L1"], - helpinghand: ["1L1"], - hyperbeam: ["1L1"], - hypervoice: ["1L1"], - imprison: ["1L1"], - lashout: ["1L1"], - lifedew: ["1L1"], - lightscreen: ["1L1"], - magicalleaf: ["1L1"], - metronome: ["1L1"], - mistyexplosion: ["1L1"], - mistyterrain: ["1L1"], - moonblast: ["1L1"], - moonlight: ["1L1"], - overheat: ["1L1"], - playrough: ["1L1"], - pound: ["1L1"], - protect: ["1L1"], - psychic: ["1L1"], - psyshock: ["1L1"], - raindance: ["1L1"], - rest: ["1L1"], - safeguard: ["1L1"], - screech: ["1L1"], - shadowball: ["1L1"], - slam: ["1L1"], - sleeptalk: ["1L1"], - solarbeam: ["1L1"], - spikes: ["1L1"], - substitute: ["1L1"], - sunnyday: ["1L1"], - sweetkiss: ["1L1"], - tailwhip: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thunder: ["1L1"], - thunderbolt: ["1L1"], - tickle: ["1L1"], - trailblaze: ["1L1"], - trick: ["1L1"], - wildcharge: ["1L1"], - willowisp: ["1L1"], - wrap: ["1L1"], - zenheadbutt: ["1L1"], - }, - }, - cresceidon: { - learnset: { - earthpower: ["1L1"], - encore: ["1L1"], - endure: ["1L1"], - facade: ["1L1"], - haze: ["1L1"], - healingwish: ["1L1"], - helpinghand: ["1L1"], - hydropump: ["1L1"], - moonblast: ["1L1"], - protect: ["1L1"], - recover: ["1L1"], - rest: ["1L1"], - scald: ["1L1"], - sleeptalk: ["1L1"], - substitute: ["1L1"], - surf: ["1L1"], - takedown: ["1L1"], - taunt: ["1L1"], - terablast: ["1L1"], - thunderwave: ["1L1"], - whirlpool: ["1L1"], - wish: ["1L1"], - }, - }, -}; \ No newline at end of file diff --git a/data/mods/moderngen1/moves.ts b/data/mods/moderngen1/moves.ts deleted file mode 100644 index 57883e028960..000000000000 --- a/data/mods/moderngen1/moves.ts +++ /dev/null @@ -1,7 +0,0 @@ -export const Moves: {[k: string]: ModdedMoveData} = { - doubleironbash: { - inherit: true, - isNonstandard: null, - gen: 1, - }, -}; diff --git a/data/mods/moderngen1/rulesets.ts b/data/mods/moderngen1/rulesets.ts deleted file mode 100644 index 35ae54cd3ca4..000000000000 --- a/data/mods/moderngen1/rulesets.ts +++ /dev/null @@ -1,53 +0,0 @@ -export const Rulesets: {[k: string]: ModdedFormatData} = { - partialtrappingclause: { - effectType: 'ValidatorRule', - name: 'Partial Trapping Clause', - desc: "Bans moves that partially trap the opponent", - banlist: ['Infestation', 'Magma Storm', 'Sand Tomb', 'Snap Trap', 'Thunder Cage', 'Whirlpool', 'Wrap', 'Bind', 'Fire Spin', 'Clamp'], - onBegin() { - this.add('rule', 'Partial Trapping Clause: Partial Trapping moves are banned'); - }, - }, - protectclause: { - effectType: 'ValidatorRule', - name: 'Protect Clause', - desc: "Bans Protect and Detect", - banlist: ['Protect', 'Detect'], - onBegin() { - this.add('rule', 'Protect Clause: Widely-distributed protecting moves are banned'); - }, - }, - fieldeffectclause: { - effectType: 'ValidatorRule', - name: 'Field Effect Clause', - desc: "Bans moves that set a field effect", - banlist: ['Spikes', 'Toxic Spikes', 'Stealth Rock', 'Sticky Web', 'Stone Axe', 'Ceaseless Edge', 'Wonder Room', 'Trick Room', 'Magic Room', 'Lucky Chant', 'Tailwind', 'Safeguard', 'Gravity'], - onBegin() { - this.add('rule', 'Field Effect Clause: Field Effects are banned'); - }, - }, - mg1mod: { - effectType: 'Rule', - name: 'MG1 Mod', - desc: 'At the start of a battle, gives each player a link to the Modern Gen 1 thread so they can use it to get information about new additions to the metagame.', - onBegin() { - this.add('-message', `Welcome to Modern Gen 1!`); - this.add('-message', `This is essentially Gen 9 National Dex OU but played with Gen 1 mechanics!`); - this.add('-message', `You can find our thread and metagame resources here:`); - this.add('-message', `https://www.smogon.com/forums/threads/gen-9-modern-gen-1.3711533/`); - }, - }, - uselessmovesclause: { - effectType: 'ValidatorRule', - name: 'Useless Moves Clause', - desc: "Bans moves that have no effect (to aid in teambuilding).", - banlist: [ - 'Conversion 2', 'Electric Terrain', 'Electrify', 'Encore', 'Flower Shield', 'Grassy Terrain', 'Hail', 'Healing Wish', 'Heart Swap', - 'Ion Deluge', 'Laser Focus', 'Lunar Dance', 'Misty Terrain', 'Perish Song', 'Psych Up', 'Psychic Terrain', 'Rain Dance', 'Revival Blessing', - 'Sandstorm', 'Sleep Talk', 'Snowscape', 'Speed Swap', 'Sunny Day', 'Wish', 'Jungle Healing', 'Lunar Blessing', 'Life Dew', - ], - onBegin() { - this.add('rule', 'Useless Moves Clause: Prevents trainers from bringing moves with no effect'); - }, - }, -}; diff --git a/data/mods/moderngen1/scripts.ts b/data/mods/moderngen1/scripts.ts deleted file mode 100644 index b8e1fb1f8de2..000000000000 --- a/data/mods/moderngen1/scripts.ts +++ /dev/null @@ -1,20 +0,0 @@ -export const Scripts: ModdedBattleScriptsData = { - inherit: 'gen1', - gen: 1, - init() { - for (const i in this.data.Pokedex) { - this.modData('Pokedex', i).gen = 1; - this.modData('Pokedex', i).gender = 'N'; - this.modData('Pokedex', i).eggGroups = null; - } - const specialTypes = ['Fire', 'Water', 'Grass', 'Ice', 'Electric', 'Dark', 'Psychic', 'Dragon']; - for (const i in this.data.Moves) { - this.modData('Moves', i).gen = 1; - if (this.data.Moves[i].category === 'Status') continue; - const newCategory = specialTypes.includes(this.data.Moves[i].type) ? 'Special' : 'Physical'; - if (newCategory !== this.data.Moves[i].category) { - this.modData('Moves', i).category = newCategory; - } - } - }, -}; diff --git a/data/mods/partnersincrime/abilities.ts b/data/mods/partnersincrime/abilities.ts index 129619d44905..72b17c7736e2 100644 --- a/data/mods/partnersincrime/abilities.ts +++ b/data/mods/partnersincrime/abilities.ts @@ -1,4 +1,4 @@ -export const Abilities: {[k: string]: ModdedAbilityData} = { +export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTable = { neutralizinggas: { inherit: true, // Ability suppression implemented in sim/pokemon.ts:Pokemon#ignoringAbility @@ -19,7 +19,7 @@ export const Abilities: {[k: string]: ModdedAbilityData} = { this.add('-end', target, 'Slow Start', '[silent]'); } if (target.m.innate) { - if (!this.dex.abilities.get(target.m.innate.slice(8)).isPermanent) { + if (!this.dex.abilities.get(target.m.innate.slice(8)).flags['cantsuppress']) { target.removeVolatile(target.m.innate); } } @@ -55,13 +55,9 @@ export const Abilities: {[k: string]: ModdedAbilityData} = { if (!pokemon.isStarted || this.effectState.gaveUp) return; const isAbility = pokemon.ability === 'trace'; - const additionalBannedAbilities = [ - // Zen Mode included here for compatability with Gen 5-6 - 'noability', 'flowergift', 'forecast', 'hungerswitch', 'illusion', 'imposter', 'neutralizinggas', 'powerofalchemy', 'receiver', 'trace', 'zenmode', - ]; - const possibleTargets = pokemon.adjacentFoes().filter(target => ( - !target.getAbility().isPermanent && !additionalBannedAbilities.includes(target.ability) - )); + const possibleTargets = pokemon.adjacentFoes().filter( + target => !target.getAbility().flags['notrace'] && target.ability !== 'noability' + ); if (!possibleTargets.length) return; const target = this.sample(possibleTargets); diff --git a/data/mods/partnersincrime/items.ts b/data/mods/partnersincrime/items.ts index eead07f923aa..f82827da2ea2 100644 --- a/data/mods/partnersincrime/items.ts +++ b/data/mods/partnersincrime/items.ts @@ -1,4 +1,4 @@ -export const Items: {[k: string]: ModdedItemData} = { +export const Items: import('../../../sim/dex-items').ModdedItemDataTable = { leppaberry: { inherit: true, onEat(pokemon) { diff --git a/data/mods/partnersincrime/moves.ts b/data/mods/partnersincrime/moves.ts index ae6687f0633d..aef86678d043 100644 --- a/data/mods/partnersincrime/moves.ts +++ b/data/mods/partnersincrime/moves.ts @@ -1,4 +1,4 @@ -export const Moves: {[k: string]: ModdedMoveData} = { +export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = { gastroacid: { inherit: true, condition: { diff --git a/data/mods/partnersincrime/random-teams.ts b/data/mods/partnersincrime/random-teams.ts deleted file mode 100644 index 600818a738ea..000000000000 --- a/data/mods/partnersincrime/random-teams.ts +++ /dev/null @@ -1,5 +0,0 @@ -import RandomTeams from '../../random-teams'; - -export class RandomPartnersInCrimeTeams extends RandomTeams {} - -export default RandomPartnersInCrimeTeams; diff --git a/data/mods/partnersincrime/scripts.ts b/data/mods/partnersincrime/scripts.ts index 308f84c9ba9c..68f391110d89 100644 --- a/data/mods/partnersincrime/scripts.ts +++ b/data/mods/partnersincrime/scripts.ts @@ -1,7 +1,9 @@ +import {Utils} from '../../../lib'; + export const Scripts: ModdedBattleScriptsData = { gen: 9, inherit: 'gen9', - nextTurn() { + endTurn() { this.turn++; this.lastSuccessfulMoveThisTurn = null; @@ -201,7 +203,7 @@ export const Scripts: ModdedBattleScriptsData = { // Please remove me once there is client support. if (this.ruleTable.has('crazyhouserule')) { for (const side of this.sides) { - let buf = `raw|${side.name}'s team:
`; + let buf = `raw|${Utils.escapeHTML(side.name)}'s team:
`; for (const pokemon of side.pokemon) { if (!buf.endsWith('
')) buf += '/​'; if (pokemon.fainted) { @@ -270,7 +272,7 @@ export const Scripts: ModdedBattleScriptsData = { if (typeof ability === 'string') ability = this.battle.dex.abilities.get(ability); const oldAbility = this.ability; if (!isFromFormeChange) { - if (ability.isPermanent || this.getAbility().isPermanent) return false; + if (ability.flags['cantsuppress'] || this.getAbility().flags['cantsuppress']) return false; } if (!this.battle.runEvent('SetAbility', this, source, this.battle.effect, ability)) return false; this.battle.singleEvent('End', this.battle.dex.abilities.get(oldAbility), this.abilityState, this, source); @@ -380,12 +382,12 @@ export const Scripts: ModdedBattleScriptsData = { } if (this.battle.gen >= 6) { const volatilesToCopy = ['dragoncheer', 'focusenergy', 'gmaxchistrike', 'laserfocus']; + for (const volatile of volatilesToCopy) this.removeVolatile(volatile); for (const volatile of volatilesToCopy) { if (pokemon.volatiles[volatile]) { this.addVolatile(volatile); if (volatile === 'gmaxchistrike') this.volatiles[volatile].layers = pokemon.volatiles[volatile].layers; - } else { - this.removeVolatile(volatile); + if (volatile === 'dragoncheer') this.volatiles[volatile].hasDragonType = pokemon.volatiles[volatile].hasDragonType; } } } diff --git a/data/mods/passiveaggressive/abilities.ts b/data/mods/passiveaggressive/abilities.ts new file mode 100644 index 000000000000..bf5437a18f9f --- /dev/null +++ b/data/mods/passiveaggressive/abilities.ts @@ -0,0 +1,65 @@ +export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTable = { + aftermath: { + inherit: true, + onDamagingHit(damage, target, source, move) { + if (!target.hp && this.checkMoveMakesContact(move, source, target, true)) { + const calc = calculate(this, target, source); + this.damage(calc * source.baseMaxhp / 4, source, target); + } + }, + }, + baddreams: { + inherit: true, + onResidual(pokemon) { + if (!pokemon.hp) return; + for (const target of pokemon.foes()) { + if (target.status === 'slp' || target.hasAbility('comatose')) { + const calc = calculate(this, pokemon, target); + this.damage(calc * target.baseMaxhp / 8, target, pokemon); + } + } + }, + }, + gulpmissile: { + inherit: true, + onDamagingHit(damage, target, source, move) { + if (!source.hp || !source.isActive || target.isSemiInvulnerable()) return; + if (['cramorantgulping', 'cramorantgorging'].includes(target.species.id)) { + const calc = calculate(this, target, source); + if (calc) this.damage(calc * source.baseMaxhp / 4, source, target); + if (target.species.id === 'cramorantgulping') { + this.boost({def: -1}, source, target, null, true); + } else { + source.trySetStatus('par', target, move); + } + target.formeChange('cramorant', move); + } + }, + }, + ironbarbs: { + inherit: true, + onDamagingHit(damage, target, source, move) { + if (this.checkMoveMakesContact(move, source, target, true)) { + const calc = calculate(this, target, source); + this.damage(calc * source.baseMaxhp / 8, source, target); + } + }, + }, + roughskin: { + inherit: true, + onDamagingHit(damage, target, source, move) { + if (this.checkMoveMakesContact(move, source, target, true)) { + const calc = calculate(this, target, source); + this.damage(calc * source.baseMaxhp / 8, source, target); + } + }, + }, +}; + +function calculate(battle: Battle, source: Pokemon, pokemon: Pokemon) { + const move = battle.dex.getActiveMove('tackle'); + move.type = source.getTypes()[0]; + const typeMod = Math.pow(2, battle.clampIntRange(pokemon.runEffectiveness(move), -6, 6)); + if (!pokemon.runImmunity(move.type)) return 0; + return typeMod; +} diff --git a/data/mods/passiveaggressive/conditions.ts b/data/mods/passiveaggressive/conditions.ts new file mode 100644 index 000000000000..a6ee835c6b28 --- /dev/null +++ b/data/mods/passiveaggressive/conditions.ts @@ -0,0 +1,56 @@ +export const Conditions: import('../../../sim/dex-conditions').ModdedConditionDataTable = { + tox: { + inherit: true, + onResidual(pokemon) { + if (this.effectState.stage < 15) { + this.effectState.stage++; + } + const calc = calculate(this, this.effectState.source, pokemon); + this.damage(calc * this.clampIntRange(pokemon.baseMaxhp / 16, 1) * this.effectState.stage); + }, + }, + brn: { + inherit: true, + onResidual(pokemon) { + const calc = calculate(this, this.effectState.source, pokemon); + this.damage(calc * pokemon.baseMaxhp / 16); + }, + }, + psn: { + inherit: true, + onResidual(pokemon) { + const calc = calculate(this, this.effectState.source, pokemon); + this.damage(calc * pokemon.baseMaxhp / 8); + }, + }, + partiallytrapped: { + inherit: true, + onResidual(pokemon) { + const source = this.effectState.source; + // G-Max Centiferno and G-Max Sandblast continue even after the user leaves the field + const gmaxEffect = ['gmaxcentiferno', 'gmaxsandblast'].includes(this.effectState.sourceEffect.id); + if (source && (!source.isActive || source.hp <= 0 || !source.activeTurns) && !gmaxEffect) { + delete pokemon.volatiles['partiallytrapped']; + this.add('-end', pokemon, this.effectState.sourceEffect, '[partiallytrapped]', '[silent]'); + return; + } + const calc = calculate(this, source, pokemon); + this.damage(calc * pokemon.baseMaxhp / this.effectState.boundDivisor); + }, + }, + sandstorm: { + inherit: true, + onWeather(target) { + const calc = calculate(this, this.effectState.source, target); + this.damage(calc * target.baseMaxhp / 16); + }, + }, +}; + +function calculate(battle: Battle, source: Pokemon, pokemon: Pokemon) { + const move = battle.dex.getActiveMove('tackle'); + move.type = source.getTypes()[0]; + const typeMod = Math.pow(2, battle.clampIntRange(pokemon.runEffectiveness(move), -6, 6)); + if (!pokemon.runImmunity(move.type)) return 0; + return typeMod; +} diff --git a/data/mods/passiveaggressive/items.ts b/data/mods/passiveaggressive/items.ts new file mode 100644 index 000000000000..22f829fecdc0 --- /dev/null +++ b/data/mods/passiveaggressive/items.ts @@ -0,0 +1,68 @@ +export const Items: import('../../../sim/dex-items').ModdedItemDataTable = { + blacksludge: { + inherit: true, + onResidual(pokemon) { + if (pokemon.hasType('Poison')) { + this.heal(pokemon.baseMaxhp / 16); + } else { + const calc = calculate(this, pokemon, pokemon); + if (calc) this.damage(calc * pokemon.baseMaxhp / 8); + } + }, + }, + jabocaberry: { + inherit: true, + onDamagingHit(damage, target, source, move) { + if (move.category === 'Physical' && source.hp && source.isActive && !source.hasAbility('magicguard')) { + if (target.eatItem()) { + const calc = calculate(this, target, source); + if (calc) this.damage(calc * source.baseMaxhp / (target.hasAbility('ripen') ? 4 : 8), source, target); + } + } + }, + }, + lifeorb: { + inherit: true, + onAfterMoveSecondarySelf(source, target, move) { + if (source && source !== target && move && move.category !== 'Status' && !source.forceSwitchFlag) { + const calc = calculate(this, source, source); + if (calc) this.damage(calc * source.baseMaxhp / 10, source, source, this.dex.items.get('lifeorb')); + } + }, + }, + rockyhelmet: { + inherit: true, + onDamagingHit(damage, target, source, move) { + if (this.checkMoveMakesContact(move, source, target)) { + const calc = calculate(this, target, source); + if (calc) this.damage(calc * source.baseMaxhp / 6, source, target); + } + }, + }, + rowapberry: { + inherit: true, + onDamagingHit(damage, target, source, move) { + if (move.category === 'Special' && source.hp && source.isActive && !source.hasAbility('magicguard')) { + if (target.eatItem()) { + const calc = calculate(this, target, source); + if (calc) this.damage(calc * source.baseMaxhp / (target.hasAbility('ripen') ? 4 : 8), source, target); + } + } + }, + }, + stickybarb: { + inherit: true, + onResidual(pokemon) { + const calc = calculate(this, pokemon, pokemon); + if (calc) this.damage(calc * pokemon.baseMaxhp / 8); + }, + }, +}; + +function calculate(battle: Battle, source: Pokemon, pokemon: Pokemon) { + const move = battle.dex.getActiveMove('tackle'); + move.type = source.getTypes()[0]; + const typeMod = Math.pow(2, battle.clampIntRange(pokemon.runEffectiveness(move), -6, 6)); + if (!pokemon.runImmunity(move.type)) return 0; + return typeMod; +} diff --git a/data/mods/passiveaggressive/moves.ts b/data/mods/passiveaggressive/moves.ts new file mode 100644 index 000000000000..c7dcea0b7589 --- /dev/null +++ b/data/mods/passiveaggressive/moves.ts @@ -0,0 +1,305 @@ +export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = { + stealthrock: { + inherit: true, + condition: { + // this is a side condition + onSideStart(side, source) { + this.add('-sidestart', side, 'move: Stealth Rock'); + }, + onEntryHazard(pokemon) { + const calc = calculate(this, this.effectState.source, pokemon, 'stealthrock'); + if (pokemon.hasItem('heavydutyboots') || !calc) return; + this.damage(calc * pokemon.maxhp / 8); + }, + }, + }, + gmaxsteelsurge: { + inherit: true, + condition: { + // this is a side condition + onSideStart(side, source) { + this.add('-sidestart', side, 'move: G-Max Steelsurge'); + }, + onEntryHazard(pokemon) { + const calc = calculate(this, this.effectState.source, pokemon, 'stealthrock'); + if (pokemon.hasItem('heavydutyboots') || !calc) return; + this.damage(calc * pokemon.maxhp / 8); + }, + }, + }, + spikes: { + inherit: true, + condition: { + // this is a side condition + onSideStart(side, source) { + this.add('-sidestart', side, 'Spikes'); + this.effectState.layers = 1; + }, + onSideRestart(side, source) { + if (this.effectState.layers >= 3) return false; + this.add('-sidestart', side, 'Spikes'); + this.effectState.layers++; + }, + onEntryHazard(pokemon) { + const calc = calculate(this, this.effectState.source, pokemon, 'spikes'); + if (!calc || !pokemon.isGrounded() || pokemon.hasItem('heavydutyboots')) return; + const damageAmounts = [0, 3, 4, 6]; // 1/8, 1/6, 1/4 + this.damage(calc * damageAmounts[this.effectState.layers] * pokemon.maxhp / 24); + }, + }, + }, + axekick: { + inherit: true, + onMoveFail(target, source, move) { + const calc = calculate(this, source, source, 'axekick'); + if (calc) this.damage(calc * source.baseMaxhp / 2, source, source, this.dex.conditions.get('High Jump Kick')); + }, + }, + curse: { + inherit: true, + condition: { + onStart(pokemon, source) { + this.add('-start', pokemon, 'Curse', '[of] ' + source); + }, + onResidualOrder: 12, + onResidual(pokemon) { + const calc = calculate(this, this.effectState.source, pokemon, 'curse'); + if (calc) this.damage(calc * pokemon.baseMaxhp / 4); + }, + }, + }, + firepledge: { + inherit: true, + condition: { + duration: 4, + onSideStart(targetSide, source) { + this.add('-sidestart', targetSide, 'Fire Pledge'); + }, + onResidualOrder: 5, + onResidualSubOrder: 1, + onResidual(pokemon) { + const calc = calculate(this, this.effectState.source, pokemon, 'firepledge'); + if (!pokemon.hasType('Fire') && calc) this.damage(calc * pokemon.baseMaxhp / 8, pokemon); + }, + onSideResidualOrder: 26, + onSideResidualSubOrder: 8, + onSideEnd(targetSide) { + this.add('-sideend', targetSide, 'Fire Pledge'); + }, + }, + }, + flameburst: { + inherit: true, + onHit(target, source, move) { + for (const ally of target.adjacentAllies()) { + const calc = calculate(this, source, ally, 'flameburst'); + if (calc) this.damage(calc * ally.baseMaxhp / 16, ally, source, this.dex.conditions.get('Flame Burst')); + } + }, + onAfterSubDamage(damage, target, source, move) { + for (const ally of target.adjacentAllies()) { + const calc = calculate(this, source, ally, 'flameburst'); + if (calc) this.damage(calc * ally.baseMaxhp / 16, ally, source, this.dex.conditions.get('Flame Burst')); + } + }, + }, + highjumpkick: { + inherit: true, + onMoveFail(target, source, move) { + const calc = calculate(this, source, source, 'highjumpkick'); + if (calc) this.damage(calc * source.baseMaxhp / 2, source, source, this.dex.conditions.get('High Jump Kick')); + }, + }, + jumpkick: { + inherit: true, + onMoveFail(target, source, move) { + const calc = calculate(this, source, source, 'jumpkick'); + if (calc) this.damage(calc * source.baseMaxhp / 2, source, source, this.dex.conditions.get('Jump Kick')); + }, + }, + leechseed: { + inherit: true, + condition: { + onStart(target, source) { + this.add('-start', target, 'move: Leech Seed'); + }, + onResidualOrder: 8, + onResidual(pokemon) { + const target = this.getAtSlot(pokemon.volatiles['leechseed'].sourceSlot); + if (!target || target.fainted || target.hp <= 0) { + this.debug('Nothing to leech into'); + return; + } + const calc = calculate(this, this.effectState.source, pokemon, 'leechseed'); + const damage = this.damage(calc * pokemon.baseMaxhp / 8, pokemon, target); + if (damage) { + this.heal(damage, target, pokemon); + } + }, + }, + }, + mindblown: { + inherit: true, + onAfterMove(pokemon, target, move) { + if (move.mindBlownRecoil && !move.multihit) { + const hpBeforeRecoil = pokemon.hp; + const calc = calculate(this, pokemon, pokemon, 'mindblown'); + this.damage(Math.round(calc * pokemon.maxhp / 2), pokemon, pokemon, this.dex.conditions.get('Mind Blown'), true); + if (pokemon.hp <= pokemon.maxhp / 2 && hpBeforeRecoil > pokemon.maxhp / 2) { + this.runEvent('EmergencyExit', pokemon, pokemon); + } + } + }, + }, + nightmare: { + inherit: true, + condition: { + noCopy: true, + onStart(pokemon, source) { + if (pokemon.status !== 'slp' && !pokemon.hasAbility('comatose')) { + return false; + } + this.add('-start', pokemon, 'Nightmare'); + this.effectState.source = source; + }, + onResidualOrder: 11, + onResidual(pokemon) { + const calc = calculate(this, this.effectState.source, pokemon, 'nightmare'); + if (calc) this.damage(calc * pokemon.baseMaxhp / 4); + }, + }, + }, + powder: { + inherit: true, + condition: { + duration: 1, + onStart(target, source) { + this.add('-singleturn', target, 'Powder'); + }, + onTryMovePriority: -1, + onTryMove(pokemon, target, move) { + if (move.type === 'Fire') { + this.add('-activate', pokemon, 'move: Powder'); + const calc = calculate(this, this.effectState.source, pokemon, 'powder'); + if (calc) this.damage(this.clampIntRange(Math.round(calc * pokemon.maxhp / 4), 1)); + this.attrLastMove('[still]'); + return false; + } + }, + }, + }, + saltcure: { + inherit: true, + condition: { + noCopy: true, + onStart(pokemon, source) { + this.add('-start', pokemon, 'Salt Cure'); + this.effectState.source = source; + }, + onResidualOrder: 13, + onResidual(pokemon) { + const calc = calculate(this, this.effectState.source, pokemon, 'saltcure'); + if (calc) this.damage(calc * pokemon.baseMaxhp / (pokemon.hasType(['Water', 'Steel']) ? 4 : 8)); + }, + onEnd(pokemon) { + this.add('-end', pokemon, 'Salt Cure'); + }, + }, + }, + spikyshield: { + inherit: true, + condition: { + duration: 1, + onStart(target) { + this.add('-singleturn', target, 'move: 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).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']; + } + } + const calc = calculate(this, target, source, 'spikyshield'); + if (this.checkMoveMakesContact(move, source, target) && calc) { + this.damage(calc * source.baseMaxhp / 8, source, target); + } + return this.NOT_FAIL; + }, + onHit(target, source, move) { + const calc = calculate(this, target, source, 'spikyshield'); + if (calc && move.isZOrMaxPowered && this.checkMoveMakesContact(move, source, target)) { + this.damage(calc * source.baseMaxhp / 8, source, target); + } + }, + }, + }, + steelbeam: { + inherit: true, + onAfterMove(pokemon, target, move) { + if (move.mindBlownRecoil && !move.multihit) { + const hpBeforeRecoil = pokemon.hp; + const calc = calculate(this, pokemon, pokemon, 'steelbeam'); + this.damage(Math.round(calc * pokemon.maxhp / 2), pokemon, pokemon, this.dex.conditions.get('Steel Beam'), true); + if (pokemon.hp <= pokemon.maxhp / 2 && hpBeforeRecoil > pokemon.maxhp / 2) { + this.runEvent('EmergencyExit', pokemon, pokemon); + } + } + }, + }, + supercellslam: { + inherit: true, + onMoveFail(target, source, move) { + const calc = calculate(this, source, source, 'supercellslam'); + if (calc) this.damage(calc * source.baseMaxhp / 2, source, source, this.dex.conditions.get('Supercell Slam')); + }, + }, + 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++; + }, + onEntryHazard(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')) { + return; + } else if (this.effectState.layers >= 2) { + pokemon.trySetStatus('tox', this.effectState.source); + } else { + pokemon.trySetStatus('psn', this.effectState.source); + } + }, + }, + }, +}; + +function calculate(battle: Battle, source: Pokemon, pokemon: Pokemon, moveid = 'tackle') { + const move = battle.dex.getActiveMove(moveid); + move.type = source.getTypes()[0]; + const typeMod = Math.pow(2, battle.clampIntRange(pokemon.runEffectiveness(move), -6, 6)); + if (!pokemon.runImmunity(move.type)) return 0; + return typeMod; +} diff --git a/data/mods/passiveaggressive/scripts.ts b/data/mods/passiveaggressive/scripts.ts new file mode 100644 index 000000000000..017908a0409e --- /dev/null +++ b/data/mods/passiveaggressive/scripts.ts @@ -0,0 +1,213 @@ +export const Scripts: ModdedBattleScriptsData = { + gen: 9, + actions: { + hitStepMoveHitLoop(targets, pokemon, move) { // Temporary name + let damage: (number | boolean | undefined)[] = []; + for (const i of targets.keys()) { + damage[i] = 0; + } + move.totalDamage = 0; + pokemon.lastDamage = 0; + let targetHits = move.multihit || 1; + if (Array.isArray(targetHits)) { + // yes, it's hardcoded... meh + if (targetHits[0] === 2 && targetHits[1] === 5) { + if (this.battle.gen >= 5) { + // 35-35-15-15 out of 100 for 2-3-4-5 hits + targetHits = this.battle.sample([2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 5, 5, 5]); + if (targetHits < 4 && pokemon.hasItem('loadeddice')) { + targetHits = 5 - this.battle.random(2); + } + } else { + targetHits = this.battle.sample([2, 2, 2, 3, 3, 3, 4, 5]); + } + } else { + targetHits = this.battle.random(targetHits[0], targetHits[1] + 1); + } + } + if (targetHits === 10 && pokemon.hasItem('loadeddice')) targetHits -= this.battle.random(7); + targetHits = Math.floor(targetHits); + let nullDamage = true; + let moveDamage: (number | boolean | undefined)[] = []; + // There is no need to recursively check the ´sleepUsable´ flag as Sleep Talk can only be used while asleep. + const isSleepUsable = move.sleepUsable || this.dex.moves.get(move.sourceEffect).sleepUsable; + + let targetsCopy: (Pokemon | false | null)[] = targets.slice(0); + let hit: number; + for (hit = 1; hit <= targetHits; hit++) { + if (damage.includes(false)) break; + if (hit > 1 && pokemon.status === 'slp' && (!isSleepUsable || this.battle.gen === 4)) break; + if (targets.every(target => !target?.hp)) break; + move.hit = hit; + if (move.smartTarget && targets.length > 1) { + targetsCopy = [targets[hit - 1]]; + damage = [damage[hit - 1]]; + } else { + targetsCopy = targets.slice(0); + } + const target = targetsCopy[0]; // some relevant-to-single-target-moves-only things are hardcoded + if (target && typeof move.smartTarget === 'boolean') { + if (hit > 1) { + this.battle.addMove('-anim', pokemon, move.name, target); + } else { + this.battle.retargetLastMove(target); + } + } + + // like this (Triple Kick) + if (target && move.multiaccuracy && hit > 1) { + let accuracy = move.accuracy; + const boostTable = [1, 4 / 3, 5 / 3, 2, 7 / 3, 8 / 3, 3]; + if (accuracy !== true) { + if (!move.ignoreAccuracy) { + const boosts = this.battle.runEvent('ModifyBoost', pokemon, null, null, {...pokemon.boosts}); + const boost = this.battle.clampIntRange(boosts['accuracy'], -6, 6); + if (boost > 0) { + accuracy *= boostTable[boost]; + } else { + accuracy /= boostTable[-boost]; + } + } + if (!move.ignoreEvasion) { + const boosts = this.battle.runEvent('ModifyBoost', target, null, null, {...target.boosts}); + const boost = this.battle.clampIntRange(boosts['evasion'], -6, 6); + if (boost > 0) { + accuracy /= boostTable[boost]; + } else if (boost < 0) { + accuracy *= boostTable[-boost]; + } + } + } + accuracy = this.battle.runEvent('ModifyAccuracy', target, pokemon, move, accuracy); + if (!move.alwaysHit) { + accuracy = this.battle.runEvent('Accuracy', target, pokemon, move, accuracy); + if (accuracy !== true && !this.battle.randomChance(accuracy, 100)) break; + } + } + + const moveData = move; + if (!moveData.flags) moveData.flags = {}; + + let moveDamageThisHit; + // Modifies targetsCopy (which is why it's a copy) + [moveDamageThisHit, targetsCopy] = this.spreadMoveHit(targetsCopy, pokemon, move, moveData); + // When Dragon Darts targets two different pokemon, targetsCopy is a length 1 array each hit + // so spreadMoveHit returns a length 1 damage array + if (move.smartTarget) { + moveDamage.push(...moveDamageThisHit); + } else { + moveDamage = moveDamageThisHit; + } + + if (!moveDamage.some(val => val !== false)) break; + nullDamage = false; + + for (const [i, md] of moveDamage.entries()) { + if (move.smartTarget && i !== hit - 1) continue; + // Damage from each hit is individually counted for the + // purposes of Counter, Metal Burst, and Mirror Coat. + damage[i] = md === true || !md ? 0 : md; + // Total damage dealt is accumulated for the purposes of recoil (Parental Bond). + move.totalDamage += damage[i] as number; + } + if (move.mindBlownRecoil) { + const hpBeforeRecoil = pokemon.hp; + const calc = calculate(this.battle, pokemon, pokemon, move.id); + this.battle.damage(Math.round(calc * pokemon.maxhp / 2), pokemon, pokemon, this.dex.conditions.get(move.id), true); + move.mindBlownRecoil = false; + if (pokemon.hp <= pokemon.maxhp / 2 && hpBeforeRecoil > pokemon.maxhp / 2) { + this.battle.runEvent('EmergencyExit', pokemon, pokemon); + } + } + this.battle.eachEvent('Update'); + if (!pokemon.hp && targets.length === 1) { + hit++; // report the correct number of hits for multihit moves + break; + } + } + // hit is 1 higher than the actual hit count + if (hit === 1) return damage.fill(false); + if (nullDamage) damage.fill(false); + this.battle.faintMessages(false, false, !pokemon.hp); + if (move.multihit && typeof move.smartTarget !== 'boolean') { + this.battle.add('-hitcount', targets[0], hit - 1); + } + + if ((move.recoil || move.id === 'chloroblast') && move.totalDamage) { + const hpBeforeRecoil = pokemon.hp; + const recoilDamage = this.calcRecoilDamage(move.totalDamage, move, pokemon); + if (recoilDamage !== 1.1) this.battle.damage(recoilDamage, pokemon, pokemon, 'recoil'); + if (pokemon.hp <= pokemon.maxhp / 2 && hpBeforeRecoil > pokemon.maxhp / 2) { + this.battle.runEvent('EmergencyExit', pokemon, pokemon); + } + } + + if (move.struggleRecoil) { + const hpBeforeRecoil = pokemon.hp; + let recoilDamage; + if (this.dex.gen >= 5) { + recoilDamage = this.battle.clampIntRange(Math.round(pokemon.baseMaxhp / 4), 1); + } else { + recoilDamage = this.battle.clampIntRange(this.battle.trunc(pokemon.maxhp / 4), 1); + } + this.battle.directDamage(recoilDamage, pokemon, pokemon, {id: 'strugglerecoil'} as Condition); + if (pokemon.hp <= pokemon.maxhp / 2 && hpBeforeRecoil > pokemon.maxhp / 2) { + this.battle.runEvent('EmergencyExit', pokemon, pokemon); + } + } + + // smartTarget messes up targetsCopy, but smartTarget should in theory ensure that targets will never fail, anyway + if (move.smartTarget) { + targetsCopy = targets.slice(0); + } + + for (const [i, target] of targetsCopy.entries()) { + if (target && pokemon !== target) { + target.gotAttacked(move, moveDamage[i] as number | false | undefined, pokemon); + if (typeof moveDamage[i] === 'number') { + target.timesAttacked += move.smartTarget ? 1 : hit - 1; + } + } + } + + if (move.ohko && !targets[0].hp) this.battle.add('-ohko'); + + if (!damage.some(val => !!val || val === 0)) return damage; + + this.battle.eachEvent('Update'); + + this.afterMoveSecondaryEvent(targetsCopy.filter(val => !!val) as Pokemon[], pokemon, move); + + if (!move.negateSecondary && !(move.hasSheerForce && pokemon.hasAbility('sheerforce'))) { + for (const [i, d] of damage.entries()) { + // There are no multihit spread moves, so it's safe to use move.totalDamage for multihit moves + // The previous check was for `move.multihit`, but that fails for Dragon Darts + const curDamage = targets.length === 1 ? move.totalDamage : d; + if (typeof curDamage === 'number' && targets[i].hp) { + const targetHPBeforeDamage = (targets[i].hurtThisTurn || 0) + curDamage; + if (targets[i].hp <= targets[i].maxhp / 2 && targetHPBeforeDamage > targets[i].maxhp / 2) { + this.battle.runEvent('EmergencyExit', targets[i], pokemon); + } + } + } + } + + return damage; + }, + calcRecoilDamage(damageDealt, move, pokemon): number { + const calc = calculate(this.battle, pokemon, pokemon, move.id); + if (calc === 0) return 1.1; + if (move.id === 'chloroblast') return Math.round(calc * pokemon.maxhp / 2); + const recoil = Math.round(damageDealt * calc * move.recoil![0] / move.recoil![1]); + return this.battle.clampIntRange(recoil, 1); + }, + }, +}; + +function calculate(battle: Battle, source: Pokemon, pokemon: Pokemon, moveid = 'tackle') { + const move = battle.dex.getActiveMove(moveid); + move.type = source.getTypes()[0]; + const typeMod = Math.pow(2, battle.clampIntRange(pokemon.runEffectiveness(move), -6, 6)); + if (!pokemon.runImmunity(move.type)) return 0; + return typeMod; +} diff --git a/data/mods/pokebilities/abilities.ts b/data/mods/pokebilities/abilities.ts index bda83b850635..de3ba4e4d1eb 100644 --- a/data/mods/pokebilities/abilities.ts +++ b/data/mods/pokebilities/abilities.ts @@ -1,10 +1,10 @@ -export const Abilities: {[k: string]: ModdedAbilityData} = { +export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTable = { mummy: { inherit: true, onDamagingHit(damage, target, source, move) { if (target.ability === 'mummy') { const sourceAbility = source.getAbility(); - if (sourceAbility.isPermanent || sourceAbility.id === 'mummy') { + if (sourceAbility.flags['cantsuppress'] || sourceAbility.id === 'mummy') { return; } if (this.checkMoveMakesContact(move, source, target, !source.isAlly(target))) { @@ -15,7 +15,7 @@ export const Abilities: {[k: string]: ModdedAbilityData} = { } } else { const possibleAbilities = [source.ability, ...(source.m.innates || [])] - .filter(val => !this.dex.abilities.get(val).isPermanent && val !== 'mummy'); + .filter(val => !this.dex.abilities.get(val).flags['cantsuppress'] && val !== 'mummy'); if (!possibleAbilities.length) return; if (this.checkMoveMakesContact(move, source, target, !source.isAlly(target))) { const abil = this.sample(possibleAbilities); @@ -44,7 +44,7 @@ export const Abilities: {[k: string]: ModdedAbilityData} = { // Remove setter's innates before the ability starts if (pokemon.m.innates) { for (const innate of pokemon.m.innates) { - if (this.dex.abilities.get(innate).isPermanent || innate === 'neutralizinggas') continue; + if (this.dex.abilities.get(innate).flags['cantsuppress'] || innate === 'neutralizinggas') continue; pokemon.removeVolatile('ability:' + innate); } } @@ -58,7 +58,7 @@ export const Abilities: {[k: string]: ModdedAbilityData} = { } if (target.m.innates) { for (const innate of target.m.innates) { - if (this.dex.abilities.get(innate).isPermanent) continue; + if (this.dex.abilities.get(innate).flags['cantsuppress']) continue; target.removeVolatile('ability:' + innate); } } @@ -100,11 +100,9 @@ export const Abilities: {[k: string]: ModdedAbilityData} = { const isAbility = pokemon.ability === 'powerofalchemy'; let possibleAbilities = [ally.ability]; if (ally.m.innates) possibleAbilities.push(...ally.m.innates); - const additionalBannedAbilities = [ - 'noability', 'flowergift', 'forecast', 'hungerswitch', 'illusion', 'imposter', 'neutralizinggas', 'powerofalchemy', 'receiver', 'trace', 'wonderguard', pokemon.ability, ...(pokemon.m.innates || []), - ]; + const additionalBannedAbilities = [pokemon.ability, ...(pokemon.m.innates || [])]; possibleAbilities = possibleAbilities - .filter(val => !this.dex.abilities.get(val).isPermanent && !additionalBannedAbilities.includes(val)); + .filter(val => !this.dex.abilities.get(val).flags['noreceiver'] && !additionalBannedAbilities.includes(val)); if (!possibleAbilities.length) return; const ability = this.dex.abilities.get(possibleAbilities[this.random(possibleAbilities.length)]); this.add('-ability', pokemon, ability, '[from] ability: Power of Alchemy', '[of] ' + ally); @@ -124,11 +122,9 @@ export const Abilities: {[k: string]: ModdedAbilityData} = { const isAbility = pokemon.ability === 'receiver'; let possibleAbilities = [ally.ability]; if (ally.m.innates) possibleAbilities.push(...ally.m.innates); - const additionalBannedAbilities = [ - 'noability', 'flowergift', 'forecast', 'hungerswitch', 'illusion', 'imposter', 'neutralizinggas', 'powerofalchemy', 'receiver', 'trace', 'wonderguard', pokemon.ability, ...(pokemon.m.innates || []), - ]; + const additionalBannedAbilities = [pokemon.ability, ...(pokemon.m.innates || [])]; possibleAbilities = possibleAbilities - .filter(val => !this.dex.abilities.get(val).isPermanent && !additionalBannedAbilities.includes(val)); + .filter(val => !this.dex.abilities.get(val).flags['noreceiver'] && !additionalBannedAbilities.includes(val)); if (!possibleAbilities.length) return; const ability = this.dex.abilities.get(possibleAbilities[this.random(possibleAbilities.length)]); this.add('-ability', pokemon, ability, '[from] ability: Receiver', '[of] ' + ally); @@ -156,12 +152,9 @@ export const Abilities: {[k: string]: ModdedAbilityData} = { const target = possibleTargets[rand]; let possibleAbilities = [target.ability]; if (target.m.innates) possibleAbilities.push(...target.m.innates); - const additionalBannedAbilities = [ - // Zen Mode included here for compatability with Gen 5-6 - 'noability', 'flowergift', 'forecast', 'hungerswitch', 'illusion', 'imposter', 'neutralizinggas', 'powerofalchemy', 'receiver', 'trace', 'zenmode', pokemon.ability, ...(pokemon.m.innates || []), - ]; + const additionalBannedAbilities = [pokemon.ability, ...(pokemon.m.innates || [])]; possibleAbilities = possibleAbilities - .filter(val => !this.dex.abilities.get(val).isPermanent && !additionalBannedAbilities.includes(val)); + .filter(val => !this.dex.abilities.get(val).flags['notrace'] && !additionalBannedAbilities.includes(val)); if (!possibleAbilities.length) { possibleTargets.splice(rand, 1); continue; @@ -182,13 +175,8 @@ export const Abilities: {[k: string]: ModdedAbilityData} = { inherit: true, onDamagingHit(damage, target, source, move) { const isAbility = target.ability === 'wanderingspirit'; - const additionalBannedAbilities = ['hungerswitch', 'illusion', 'neutralizinggas', 'wonderguard']; if (isAbility) { - if (source.getAbility().isPermanent || additionalBannedAbilities.includes(source.ability) || - target.volatiles['dynamax'] - ) { - return; - } + if (source.getAbility().flags['failskillswap'] || target.volatiles['dynamax']) return; if (this.checkMoveMakesContact(move, source, target)) { const sourceAbility = source.setAbility('wanderingspirit', target); @@ -203,7 +191,7 @@ export const Abilities: {[k: string]: ModdedAbilityData} = { } else { // Make Wandering Spirit replace a random ability const possibleAbilities = [source.ability, ...(source.m.innates || [])] - .filter(val => !this.dex.abilities.get(val).isPermanent && !additionalBannedAbilities.includes(val)); + .filter(val => !this.dex.abilities.get(val).flags['failskillswap']); if (!possibleAbilities.length || target.volatiles['dynamax']) return; if (move.flags['contact']) { const sourceAbility = this.sample(possibleAbilities); diff --git a/data/mods/pokebilities/moves.ts b/data/mods/pokebilities/moves.ts index 8fd18a791128..c473cb8bba8d 100644 --- a/data/mods/pokebilities/moves.ts +++ b/data/mods/pokebilities/moves.ts @@ -1,4 +1,4 @@ -export const Moves: {[k: string]: ModdedMoveData} = { +export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = { gastroacid: { inherit: true, condition: { diff --git a/data/mods/pokebilities/scripts.ts b/data/mods/pokebilities/scripts.ts index 42241f509f8c..e9564991a2ac 100644 --- a/data/mods/pokebilities/scripts.ts +++ b/data/mods/pokebilities/scripts.ts @@ -32,7 +32,7 @@ export const Scripts: ModdedBattleScriptsData = { ((this.volatiles['gastroacid'] || (neutralizinggas && (this.ability !== ('neutralizinggas' as ID) || this.m.innates?.some((k: string) => k === 'neutralizinggas')) - )) && !this.getAbility().isPermanent + )) && !this.getAbility().flags['cantsuppress'] ) ); }, @@ -92,13 +92,14 @@ export const Scripts: ModdedBattleScriptsData = { this.boosts[boostName] = pokemon.boosts[boostName]; } if (this.battle.gen >= 6) { - const volatilesToCopy = ['focusenergy', 'gmaxchistrike', 'laserfocus']; + // we need to remove all crit volatiles before adding any crit volatiles + const volatilesToCopy = ['dragoncheer', 'focusenergy', 'gmaxchistrike', 'laserfocus']; + for (const volatile of volatilesToCopy) this.removeVolatile(volatile); for (const volatile of volatilesToCopy) { if (pokemon.volatiles[volatile]) { this.addVolatile(volatile); if (volatile === 'gmaxchistrike') this.volatiles[volatile].layers = pokemon.volatiles[volatile].layers; - } else { - this.removeVolatile(volatile); + if (volatile === 'dragoncheer') this.volatiles[volatile].hasDragonType = pokemon.volatiles[volatile].hasDragonType; } } } diff --git a/data/mods/pokemoves/abilities.ts b/data/mods/pokemoves/abilities.ts new file mode 100644 index 000000000000..e448152e0e93 --- /dev/null +++ b/data/mods/pokemoves/abilities.ts @@ -0,0 +1,71 @@ +export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTable = { + trace: { + inherit: true, + onUpdate(pokemon) { + if (!pokemon.isStarted || this.effectState.gaveUp) return; + const isAbility = pokemon.ability === 'trace'; + + const possibleTargets = pokemon.adjacentFoes().filter( + target => !target.getAbility().flags['notrace'] && target.ability !== 'noability' + ); + if (!possibleTargets.length) return; + + const target = this.sample(possibleTargets); + const ability = target.getAbility(); + + if (isAbility) { + if (pokemon.setAbility(ability)) { + this.add('-ability', pokemon, ability, '[from] ability: Trace', '[of] ' + target); + } + } else { + pokemon.removeVolatile('ability:trace'); + pokemon.addVolatile('ability:' + ability.id, pokemon); + this.add('-ability', pokemon, ability, '[from] ability: Trace', '[of] ' + target); + } + }, + }, + neutralizinggas: { + inherit: true, + // Ability suppression implemented in sim/pokemon.ts:Pokemon#ignoringAbility + onPreStart(pokemon) { + this.add('-ability', pokemon, 'Neutralizing Gas'); + pokemon.abilityState.ending = false; + // Remove setter's innates before the ability starts + for (const target of this.getAllActive()) { + if (target.illusion) { + this.singleEvent('End', this.dex.abilities.get('Illusion'), target.abilityState, target, pokemon, 'neutralizinggas'); + } + if (target.volatiles['slowstart']) { + delete target.volatiles['slowstart']; + this.add('-end', target, 'Slow Start', '[silent]'); + } + if (target.m.pokemove && !this.dex.abilities.get(target.m.pokemove.abilities['0']).flags['cantsuppress']) { + target.removeVolatile('ability:' + this.toID(target.m.pokemove.abilities['0'])); + } + } + }, + onEnd(source) { + this.add('-end', source, 'ability: Neutralizing Gas'); + + // FIXME this happens before the pokemon switches out, should be the opposite order. + // Not an easy fix since we cant use a supported event. Would need some kind of special event that + // gathers events to run after the switch and then runs them when the ability is no longer accessible. + // (If you're tackling this, do note extreme weathers have the same issue) + + // Mark this pokemon's ability as ending so Pokemon#ignoringAbility skips it + if (source.abilityState.ending) return; + source.abilityState.ending = true; + const sortedActive = this.getAllActive(); + this.speedSort(sortedActive); + for (const pokemon of sortedActive) { + if (pokemon !== source) { + // Will be suppressed by Pokemon#ignoringAbility if needed + this.singleEvent('Start', pokemon.getAbility(), pokemon.abilityState, pokemon); + } + if (pokemon.m.pokemove && !pokemon.volatiles['ability:' + this.toID(pokemon.m.pokemove.abilities['0'])]) { + pokemon.addVolatile('ability:' + this.toID(pokemon.m.pokemove.abilities['0']), pokemon); + } + } + }, + }, +}; diff --git a/data/mods/pokemoves/moves.ts b/data/mods/pokemoves/moves.ts new file mode 100644 index 000000000000..6423c3a8b43b --- /dev/null +++ b/data/mods/pokemoves/moves.ts @@ -0,0 +1,30 @@ +export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = { + conversion: { + inherit: true, + onHit(target) { + const moveSlotID = target.moveSlots[0].id; + let type = this.dex.moves.get(moveSlotID).type; + if (this.dex.species.get(moveSlotID).exists) { + type = this.dex.species.get(moveSlotID).types[0]; + } + if (target.hasType(type) || !target.setType(type)) return false; + this.add('-start', target, 'typechange', type); + }, + }, + gastroacid: { + inherit: true, + condition: { + // Ability suppression implemented in Pokemon.ignoringAbility() within sim/pokemon.js + onStart(pokemon) { + this.add('-endability', pokemon); + this.singleEvent('End', pokemon.getAbility(), pokemon.abilityState, pokemon, pokemon, 'gastroacid'); + const keys = Object.keys(pokemon.volatiles).filter(x => x.startsWith("ability:")); + if (keys.length) { + for (const abil of keys) { + pokemon.removeVolatile(abil); + } + } + }, + }, + }, +}; diff --git a/data/mods/pokemoves/scripts.ts b/data/mods/pokemoves/scripts.ts new file mode 100644 index 000000000000..20bc864dbb1f --- /dev/null +++ b/data/mods/pokemoves/scripts.ts @@ -0,0 +1,48 @@ +export const Scripts: ModdedBattleScriptsData = { + gen: 9, + field: { + suppressingWeather() { + for (const pokemon of this.battle.getAllActive()) { + const pokemove = pokemon.m.pokemove; + if (pokemon && !pokemon.ignoringAbility() && + (pokemon.getAbility().suppressWeather || + (pokemove && pokemon.volatiles['ability:' + this.battle.toID(pokemove.abilities['0'])] && + this.battle.dex.abilities.get(pokemove.abilities['0']).suppressWeather))) { + return true; + } + } + return false; + }, + }, + pokemon: { + hasAbility(ability) { + if (this.ignoringAbility()) return false; + if (Array.isArray(ability)) return ability.some(abil => this.hasAbility(abil)); + const abilityid = this.battle.toID(ability); + return this.ability === abilityid || !!this.volatiles['ability:' + abilityid]; + }, + ignoringAbility() { + // Check if any active pokemon have the ability Neutralizing Gas + let neutralizinggas = false; + for (const pokemon of this.battle.getAllActive()) { + // can't use hasAbility because it would lead to infinite recursion + if ( + (pokemon.ability === ('neutralizinggas' as ID) || pokemon.volatiles['ability:neutralizinggas']) && + !pokemon.volatiles['gastroacid'] && !pokemon.abilityState.ending + ) { + neutralizinggas = true; + break; + } + } + + return !!( + (this.battle.gen >= 5 && !this.isActive) || + ((this.volatiles['gastroacid'] || + (neutralizinggas && (this.ability !== ('neutralizinggas' as ID) || + this.volatiles['ability:neutralizinggas']) + )) && !this.getAbility().flags['cantsuppress'] + ) + ); + }, + }, +}; diff --git a/data/mods/potd/random-teams.ts b/data/mods/potd/random-teams.ts deleted file mode 100644 index 727ba926a3ec..000000000000 --- a/data/mods/potd/random-teams.ts +++ /dev/null @@ -1,214 +0,0 @@ -import {RandomTeams} from './../../random-teams'; - -const potdPokemon = [ - "hoopa", "groudon", "dachsbun", "squawkabilly", "cacturne", "typhlosion", "jolteon", "masquerain", "falinks", - "wyrdeer", "gardevoir", "decidueye", "hawlucha", "azelf", "gothitelle", "donphan", "pikachu", "zaciancrowned", - "quagsire", "uxie", "dondozo", "orthworm", "klawf", "dunsparce", "avalugg", "pawmot", "qwilfish", "lilliganthisui", -]; - -export class RandomPOTDTeams extends RandomTeams { - randomTeam() { - this.enforceNoDirectCustomBanlistChanges(); - - const seed = this.prng.seed; - 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(); - const type = this.forceMonotype || this.sample(typePool); - - // PotD stuff - const day = new Date().getDate(); - const potd = this.dex.species.get(potdPokemon[day > 28 ? 27 : day - 1]); - - const baseFormes: {[k: string]: number} = {}; - - const tierCount: {[k: string]: number} = {}; - const typeCount: {[k: string]: number} = {}; - const typeComboCount: {[k: string]: number} = {}; - const typeWeaknesses: {[k: string]: number} = {}; - const teamDetails: RandomTeamsTypes.TeamDetails = {}; - - const pokemonList = isDoubles ? Object.keys(this.randomDoublesSets) : Object.keys(this.randomSets); - const [pokemonPool, baseSpeciesPool] = this.getPokemonPool(type, pokemon, isMonotype, pokemonList); - - // Remove PotD from baseSpeciesPool - if (baseSpeciesPool.includes(potd.baseSpecies)) { - this.fastPop(baseSpeciesPool, baseSpeciesPool.indexOf(potd.baseSpecies)); - } - - // Add PotD to type counts - for (const typeName of potd.types) { - typeCount[typeName] = 1; - } - typeComboCount[potd.types.slice().sort().join()] = 1; - - // Increment weakness counter - for (const typeName of this.dex.types.names()) { - // it's weak to the type - if (this.dex.getEffectiveness(typeName, potd) > 0) { - typeWeaknesses[typeName] = 1; - } - } - - while (baseSpeciesPool.length && pokemon.length < this.maxTeamSize) { - const baseSpecies = this.sampleNoReplace(baseSpeciesPool); - const currentSpeciesPool: Species[] = []; - for (const poke of pokemonPool) { - const species = this.dex.species.get(poke); - if (species.baseSpecies === baseSpecies) currentSpeciesPool.push(species); - } - let species = this.sample(currentSpeciesPool); - if (!species.exists) continue; - - // Limit to one of each species (Species Clause) - if (baseFormes[species.baseSpecies]) continue; - - // Illusion shouldn't be on the last slot - if (species.baseSpecies === 'Zoroark' && pokemon.length >= (this.maxTeamSize - 1)) continue; - - // If Zoroark is in the team, the sixth slot should not be a Pokemon with extremely low level - if ( - pokemon.some(pkmn => pkmn.name === 'Zoroark') && - pokemon.length >= (this.maxTeamSize - 1) && - this.getLevel(species, isDoubles) < 72 && - !this.adjustLevel - ) { - continue; - } - - // Pokemon with Last Respects, Intrepid Sword, and Dauntless Shield shouldn't be leading - if (['Basculegion', 'Houndstone', 'Zacian', 'Zamazenta'].includes(species.baseSpecies) && !pokemon.length) continue; - - const tier = species.tier; - const types = species.types; - const typeCombo = types.slice().sort().join(); - // Dynamically scale limits for different team sizes. The default and minimum value is 1. - const limitFactor = Math.round(this.maxTeamSize / 6) || 1; - - // Limit one Pokemon per tier, two for Monotype - // Disable this for now, since it is still a new gen - // Unless you want to have a lot of Ubers! - // if ( - // (tierCount[tier] >= (this.forceMonotype || isMonotype ? 2 : 1) * limitFactor) && - // !this.randomChance(1, Math.pow(5, tierCount[tier])) - // ) { - // continue; - // } - - 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 - 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 (skip) continue; - } - - // Limit one of any type combination, two in Monotype - if (!this.forceMonotype && typeComboCount[typeCombo] >= (isMonotype ? 2 : 1) * limitFactor) continue; - - // The Pokemon of the Day - if (potd?.exists && (pokemon.length === 1 || this.maxTeamSize === 1)) species = potd; - - const set = this.randomSet(species, teamDetails, pokemon.length === 0, isDoubles); - - // Okay, the set passes, add it to our team - pokemon.push(set); - if (pokemon.length === this.maxTeamSize) { - // Set Zoroark's level to be the same as the last Pokemon - const illusion = teamDetails.illusion; - if (illusion) pokemon[illusion - 1].level = pokemon[this.maxTeamSize - 1].level; - - // Don't bother tracking details for the last Pokemon - break; - } - - // Now that our Pokemon has passed all checks, we can increment our counters - baseFormes[species.baseSpecies] = 1; - - // Increment tier counter - if (tierCount[tier]) { - tierCount[tier]++; - } else { - tierCount[tier] = 1; - } - - // Don't increment type/weakness counters for POTD, since they were added at the beginning - if (pokemon.length !== 1 && this.maxTeamSize !== 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]++; - } - } - } - - // Track what the team has - if (set.ability === 'Drizzle' || set.moves.includes('raindance')) teamDetails.rain = 1; - if (set.ability === 'Drought' || 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('spikes')) teamDetails.spikes = (teamDetails.spikes || 0) + 1; - if (set.moves.includes('stealthrock')) teamDetails.stealthRock = 1; - if (set.moves.includes('stickyweb')) teamDetails.stickyWeb = 1; - if (set.moves.includes('stoneaxe')) teamDetails.stealthRock = 1; - if (set.moves.includes('toxicspikes')) teamDetails.toxicSpikes = 1; - if (set.moves.includes('defog')) teamDetails.defog = 1; - if (set.moves.includes('rapidspin')) teamDetails.rapidSpin = 1; - if (set.moves.includes('mortalspin')) teamDetails.rapidSpin = 1; - if (set.moves.includes('tidyup')) 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') teamDetails.teraBlast = 1; - - // For setting Zoroark's level - if (set.ability === 'Illusion') teamDetails.illusion = pokemon.length; - } - 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 RandomPOTDTeams; diff --git a/data/mods/randomroulette/scripts.ts b/data/mods/randomroulette/scripts.ts index cb848cf50982..7832aab0fe22 100644 --- a/data/mods/randomroulette/scripts.ts +++ b/data/mods/randomroulette/scripts.ts @@ -116,6 +116,6 @@ export const Scripts: ModdedBattleScriptsData = { this.queue.addChoice({choice: 'start'}); this.midTurn = true; - if (!this.requestState) this.go(); + if (!this.requestState) this.turnLoop(); }, }; diff --git a/data/mods/sharedpower/abilities.ts b/data/mods/sharedpower/abilities.ts index f715c4e0d4e8..8d815709d741 100644 --- a/data/mods/sharedpower/abilities.ts +++ b/data/mods/sharedpower/abilities.ts @@ -1,4 +1,4 @@ -export const Abilities: {[k: string]: ModdedAbilityData} = { +export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTable = { neutralizinggas: { inherit: true, // Ability suppression implemented in sim/pokemon.ts:Pokemon#ignoringAbility @@ -16,7 +16,7 @@ export const Abilities: {[k: string]: ModdedAbilityData} = { } if (target.m.abils?.length) { for (const key of target.m.abils) { - if (this.dex.abilities.get(key.slice(8)).isPermanent) continue; + if (this.dex.abilities.get(key.slice(8)).flags['cantsuppress']) continue; target.removeVolatile(key); } } @@ -56,13 +56,9 @@ export const Abilities: {[k: string]: ModdedAbilityData} = { if (!pokemon.isStarted || this.effectState.gaveUp) return; const isAbility = pokemon.ability === 'trace'; - const additionalBannedAbilities = [ - // Zen Mode included here for compatability with Gen 5-6 - 'noability', 'flowergift', 'forecast', 'hungerswitch', 'illusion', 'imposter', 'neutralizinggas', 'powerofalchemy', 'receiver', 'trace', 'zenmode', - ]; - const possibleTargets = pokemon.adjacentFoes().filter(target => ( - !target.getAbility().isPermanent && !additionalBannedAbilities.includes(target.ability) - )); + const possibleTargets = pokemon.adjacentFoes().filter( + target => !target.getAbility().flags['notrace'] && target.ability !== 'noability' + ); if (!possibleTargets.length) return; const target = this.sample(possibleTargets); diff --git a/data/mods/sharedpower/moves.ts b/data/mods/sharedpower/moves.ts index b0d980560b5f..a883f0fa81f0 100644 --- a/data/mods/sharedpower/moves.ts +++ b/data/mods/sharedpower/moves.ts @@ -1,4 +1,4 @@ -export const Moves: {[k: string]: ModdedMoveData} = { +export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = { gastroacid: { inherit: true, condition: { diff --git a/data/mods/sharedpower/scripts.ts b/data/mods/sharedpower/scripts.ts index c6260f5e32f0..572e4d265724 100644 --- a/data/mods/sharedpower/scripts.ts +++ b/data/mods/sharedpower/scripts.ts @@ -39,7 +39,7 @@ export const Scripts: ModdedBattleScriptsData = { ((this.volatiles['gastroacid'] || (neutralizinggas && (this.ability !== ('neutralizinggas' as ID) || this.m.abils?.includes('ability:neutralizinggas')) - )) && !this.getAbility().isPermanent + )) && !this.getAbility().flags['cantsuppress'] ) ); }, diff --git a/data/mods/sharingiscaring/conditions.ts b/data/mods/sharingiscaring/conditions.ts index 555778b6ea54..1a5bef5f3c23 100644 --- a/data/mods/sharingiscaring/conditions.ts +++ b/data/mods/sharingiscaring/conditions.ts @@ -1,4 +1,4 @@ -export const Conditions: {[k: string]: ModdedConditionData} = { +export const Conditions: import('../../../sim/dex-conditions').ModdedConditionDataTable = { choicelock: { inherit: true, onBeforeMove(pokemon, target, move) { diff --git a/data/mods/sharingiscaring/items.ts b/data/mods/sharingiscaring/items.ts new file mode 100644 index 000000000000..ebf65b471007 --- /dev/null +++ b/data/mods/sharingiscaring/items.ts @@ -0,0 +1,31 @@ +export const Items: import('../../../sim/dex-items').ModdedItemDataTable = { + airballoon: { + inherit: true, + // airborneness implemented in sim/pokemon.js:Pokemon#isGrounded + onDamagingHit(damage, target, source, move) { + this.add('-enditem', target, 'Air Balloon'); + if (target.item === 'airballoon') { + target.item = ''; + target.itemState = {id: '', target}; + } else { + delete target.volatiles['item:airballoon']; + target.m.sharedItemsUsed.push('airballoon'); + } + this.runEvent('AfterUseItem', target, null, null, this.dex.items.get('airballoon')); + }, + onAfterSubDamage(damage, target, source, effect) { + this.debug('effect: ' + effect.id); + if (effect.effectType === 'Move') { + this.add('-enditem', target, 'Air Balloon'); + if (target.item === 'airballoon') { + target.item = ''; + target.itemState = {id: '', target}; + } else { + delete target.volatiles['item:airballoon']; + target.m.sharedItemsUsed.push('airballoon'); + } + this.runEvent('AfterUseItem', target, null, null, this.dex.items.get('airballoon')); + } + }, + }, +}; diff --git a/data/mods/sharingiscaring/moves.ts b/data/mods/sharingiscaring/moves.ts index 509193c201f9..311112585582 100644 --- a/data/mods/sharingiscaring/moves.ts +++ b/data/mods/sharingiscaring/moves.ts @@ -1,4 +1,4 @@ -export const Moves: {[k: string]: ModdedMoveData} = { +export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = { poltergeist: { inherit: true, onTry(source, target) { diff --git a/data/mods/sharingiscaring/scripts.ts b/data/mods/sharingiscaring/scripts.ts index 7986d2e5b43f..5222a9bc84c2 100644 --- a/data/mods/sharingiscaring/scripts.ts +++ b/data/mods/sharingiscaring/scripts.ts @@ -9,20 +9,22 @@ export const Scripts: ModdedBattleScriptsData = { 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' || this.volatiles['item:ironball']) return true; + if (item === 'ironball' || (this.volatiles['item:ironball'] && !this.ignoringItem())) 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.battle.suppressingAbility(this)) return null; if ('magnetrise' in this.volatiles) return false; if ('telekinesis' in this.volatiles) return false; - if (item === 'airballoon' || this.volatiles['item:airballoon']) return false; + if (item === 'airballoon' || (this.volatiles['item:airballoon'] && !this.ignoringItem())) return false; return true; }, hasItem(item) { - if (this.ignoringItem()) return false; - if (Array.isArray(item)) return item.some(i => this.hasItem(i)); - const itemid = this.battle.toID(item); - return this.item === itemid || !!this.volatiles['item:' + itemid]; + if (Array.isArray(item)) { + return item.some(i => this.hasItem(i)); + } else { + if (this.battle.toID(item) !== this.item && !this.volatiles['item:' + this.battle.toID(item)]) return false; + } + return !this.ignoringItem(); }, useItem(source, sourceEffect) { const hasAnyItem = !!this.item || Object.keys(this.volatiles).some(v => v.startsWith('item:')); diff --git a/data/mods/ssb/abilities.ts b/data/mods/ssb/abilities.ts deleted file mode 100644 index 0a1d97bb874f..000000000000 --- a/data/mods/ssb/abilities.ts +++ /dev/null @@ -1,2241 +0,0 @@ -import {SSBSet, ssbSets} from "./random-teams"; -import {getName} from './conditions'; - -// Used in many abilities, placed here to reduce the number of updates needed and to reduce the chance of errors -const STRONG_WEATHERS = ['desolateland', 'primordialsea', 'deltastream', 'heavyhailstorm', 'winterhail', 'turbulence']; - -/** - * Assigns a new set to a Pokémon - * @param pokemon the Pokemon to assign the set to - * @param newSet the SSBSet to assign - */ -export function changeSet(context: Battle, pokemon: Pokemon, newSet: SSBSet, changeAbility = false) { - if (pokemon.transformed) return; - const evs: StatsTable = { - hp: newSet.evs?.hp || 0, - atk: newSet.evs?.atk || 0, - def: newSet.evs?.def || 0, - spa: newSet.evs?.spa || 0, - spd: newSet.evs?.spd || 0, - spe: newSet.evs?.spe || 0, - }; - const ivs: StatsTable = { - hp: newSet.ivs?.hp || 31, - atk: newSet.ivs?.atk || 31, - def: newSet.ivs?.def || 31, - spa: newSet.ivs?.spa || 31, - spd: newSet.ivs?.spd || 31, - spe: newSet.ivs?.spe || 31, - }; - pokemon.set.evs = evs; - pokemon.set.ivs = ivs; - if (newSet.nature) pokemon.set.nature = Array.isArray(newSet.nature) ? context.sample(newSet.nature) : newSet.nature; - const oldShiny = pokemon.set.shiny; - pokemon.set.shiny = (typeof newSet.shiny === 'number') ? context.randomChance(1, newSet.shiny) : !!newSet.shiny; - let percent = (pokemon.hp / pokemon.baseMaxhp); - if (newSet.species === 'Shedinja') percent = 1; - pokemon.formeChange(newSet.species, context.effect, true); - const details = pokemon.species.name + (pokemon.level === 100 ? '' : ', L' + pokemon.level) + - (pokemon.gender === '' ? '' : ', ' + pokemon.gender) + (pokemon.set.shiny ? ', shiny' : ''); - if (oldShiny !== pokemon.set.shiny) context.add('replace', pokemon, details); - if (changeAbility) pokemon.setAbility(newSet.ability as string); - - pokemon.baseMaxhp = pokemon.species.name === 'Shedinja' ? 1 : Math.floor(Math.floor( - 2 * pokemon.species.baseStats.hp + pokemon.set.ivs.hp + Math.floor(pokemon.set.evs.hp / 4) + 100 - ) * pokemon.level / 100 + 10); - const newMaxHP = pokemon.baseMaxhp; - pokemon.hp = Math.round(newMaxHP * percent); - pokemon.maxhp = newMaxHP; - context.add('-heal', pokemon, pokemon.getHealth, '[silent]'); - if (pokemon.item) { - let item = newSet.item; - if (typeof item !== 'string') item = item[context.random(item.length)]; - if (context.toID(item) !== (pokemon.item || pokemon.lastItem)) pokemon.setItem(item); - } - if (!pokemon.m.datacorrupt) { - const newMoves = changeMoves(context, pokemon, newSet.moves.concat(newSet.signatureMove)); - pokemon.moveSlots = newMoves; - // @ts-ignore Necessary so pokemon doesn't get 8 moves - pokemon.baseMoveSlots = newMoves; - } - context.add('-ability', pokemon, `${pokemon.getAbility().name}`); - context.add('message', `${pokemon.name} changed form!`); -} - -/** - * Assigns new moves to a Pokemon - * @param pokemon The Pokemon whose moveset is to be modified - * @param newSet The set whose moves should be assigned - */ -export function changeMoves(context: Battle, pokemon: Pokemon, newMoves: (string | string[])[]) { - const carryOver = pokemon.moveSlots.slice().map(m => m.pp / m.maxpp); - // In case there are ever less than 4 moves - while (carryOver.length < 4) { - carryOver.push(1); - } - const result = []; - let slot = 0; - for (const newMove of newMoves) { - 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 moveSlot = { - move: move.name, - id: move.id, - // eslint-disable-next-line max-len - pp: ((move.noPPBoosts || move.isZ) ? Math.floor(move.pp * carryOver[slot]) : Math.floor((move.pp * (8 / 5)) * carryOver[slot])), - maxpp: ((move.noPPBoosts || move.isZ) ? move.pp : move.pp * 8 / 5), - target: move.target, - disabled: false, - disabledSource: '', - used: false, - }; - result.push(moveSlot); - slot++; - } - return result; -} - -export const Abilities: {[k: string]: ModdedAbilityData} = { - /* - // Example - "abilityid": { - desc: "", // long description - shortDesc: "", // short description, shows up in /dt - name: "Ability Name", - // The bulk of an ability is not easily shown in an example since it varies - // For more examples, see https://github.com/smogon/pokemon-showdown/blob/master/data/abilities.js - }, - */ - // Please keep abilites organized alphabetically based on staff member name! - // Aelita - scyphozoa: { - desc: "On switch-in, this Pokemon removes all field conditions, entry hazards, and stat boosts on both sides, gaining one random boost for every field condition, entry hazard, or boosted stat that gets cleared. This Pokemon's moves ignore abilities. If this Pokemon is a Zygarde in its 10% or 50% Forme, it changes to Complete Forme when it has 1/2 or less of its maximum HP at the end of the turn.", - shortDesc: "Power Construct + Mold Breaker. On switch-in, clears everything for random boosts.", - name: "Scyphozoa", - onSwitchIn(source) { - let successes = 0; - this.add('-ability', source, 'Scyphozoa'); - this.add('-clearallboost'); - for (const pokemon of this.getAllActive()) { - const boostTotal = Object.values(pokemon.boosts).reduce((num, add) => num + add); - if (boostTotal !== 0 || pokemon.positiveBoosts()) successes++; - pokemon.clearBoosts(); - if (pokemon.removeVolatile('substitute')) successes++; - } - const target = source.side.foe.active[0]; - - const removeAll = [ - 'reflect', 'lightscreen', 'auroraveil', 'safeguard', 'mist', 'gmaxsteelsurge', - 'spikes', 'toxicspikes', 'stealthrock', 'stickyweb', - ]; - const silentRemove = ['reflect', 'lightscreen', 'auroraveil', 'safeguard', 'mist']; - for (const sideCondition of removeAll) { - if (target.side.removeSideCondition(sideCondition)) { - if (!silentRemove.includes(sideCondition)) { - this.add('-sideend', target.side, this.dex.conditions.get(sideCondition).name, '[from] ability: Scyphozoa', '[of] ' + source); - } - successes++; - } - if (source.side.removeSideCondition(sideCondition)) { - if (!silentRemove.includes(sideCondition)) { - this.add('-sideend', source.side, this.dex.conditions.get(sideCondition).name, '[from] ability: Scyphozoa', '[of] ' + source); - } - successes++; - } - } - for (const clear in this.field.pseudoWeather) { - if (clear.endsWith('mod') || clear.endsWith('clause')) continue; - this.field.removePseudoWeather(clear); - successes++; - } - if (this.field.clearWeather()) successes++; - if (this.field.clearTerrain()) successes++; - const stats: BoostID[] = []; - const exclude: string[] = ['accuracy', 'evasion']; - for (let x = 0; x < successes; x++) { - let stat: BoostID; - for (stat in source.boosts) { - if (source.boosts[stat] < 6 && !exclude.includes(stat)) { - stats.push(stat); - } - } - if (stats.length) { - const randomStat = this.sample(stats); - const boost: SparseBoostsTable = {}; - boost[randomStat] = 1; - this.boost(boost, source, source); - } - } - }, - isPermanent: true, - onModifyMove(move) { - move.ignoreAbility = true; - }, - onResidualOrder: 27, - onResidual(pokemon) { - if (pokemon.baseSpecies.baseSpecies !== 'Zygarde' || pokemon.transformed || !pokemon.hp) return; - if (pokemon.species.id === 'zygardecomplete' || pokemon.hp > pokemon.maxhp / 2) return; - this.add('-activate', pokemon, 'ability: Scyphozoa'); - pokemon.formeChange('Zygarde-Complete', this.effect, true); - pokemon.baseMaxhp = Math.floor(Math.floor( - 2 * pokemon.species.baseStats['hp'] + pokemon.set.ivs['hp'] + Math.floor(pokemon.set.evs['hp'] / 4) + 100 - ) * pokemon.level / 100 + 10); - const newMaxHP = pokemon.volatiles['dynamax'] ? (2 * pokemon.baseMaxhp) : pokemon.baseMaxhp; - pokemon.hp = newMaxHP - (pokemon.maxhp - pokemon.hp); - pokemon.maxhp = newMaxHP; - this.add('-heal', pokemon, pokemon.getHealth, '[silent]'); - }, - gen: 8, - }, - - // aegii - setthestage: { - desc: "If this Pokemon is an Aegislash, it changes to Blade Forme before attempting to use an attacking move, and changes to Shield Forme before attempting to use King's Shield. This Pokemon's moves that match one of its types have a same-type attack bonus (STAB) of 2 instead of 1.5. On switch-in, this Pokemon selects a physical or special set.", - shortDesc: "Stance Change + Adaptability; on switch-in, selects physical or special set.", - isPermanent: true, - onSwitchIn(pokemon) { - if (pokemon.species.baseSpecies !== 'Aegislash') return; - const forme = this.randomChance(1, 2) ? 'aegii-Alt' : 'aegii'; - changeSet(this, pokemon, ssbSets[forme]); - const setType = pokemon.moves.includes('shadowball') ? 'specially' : 'physically'; - this.add('-message', `aegii currently has a ${setType} oriented set.`); - }, - onModifyMove(move, attacker, defender) { - move.stab = 2; - if (attacker.species.baseSpecies !== 'Aegislash' || attacker.transformed) return; - if (move.category === 'Status' && move.id !== 'kingsshield' && move.id !== 'reset') return; - const targetForme = (move.id === 'kingsshield' || move.id === 'reset' ? 'Aegislash' : 'Aegislash-Blade'); - if (attacker.species.name !== targetForme) attacker.formeChange(targetForme); - }, - name: "Set the Stage", - gen: 8, - }, - - // Aeonic - arsene: { - desc: "On switch-in, this Pokemon summons Sandstorm. If Sandstorm is active, this Pokemon's Speed is doubled. This Pokemon takes no damage from Sandstorm.", - shortDesc: "Sand Stream + Sand Rush.", - name: "Arsene", - onStart(source) { - this.field.setWeather('sandstorm'); - }, - onModifySpe(spe, pokemon) { - if (this.field.isWeather('sandstorm')) { - return this.chainModify(2); - } - }, - onImmunity(type) { - if (type === 'sandstorm') return false; - }, - gen: 8, - }, - - // Aethernum - rainyseason: { - desc: "On switch-in, this Pokemon summons Rain Dance. If Rain Dance or Heavy Rain is active, this Pokemon has doubled Speed, collects a raindrop, and restores 1/8 of its maximum HP, rounded down, at the end of each turn. If this Pokemon is holding Big Root, it will restore 1/6 of its maximum HP, rounded down, at the end of the turn. If this Pokemon is holding Utility Umbrella, its HP does not get restored and it does not collect raindrops. Each raindrop raises this Pokemon's Defense and Special Defense by 1 stage while it is collected.", - shortDesc: "Drizzle + Swift Swim. Restore HP if raining. Collect raindrops.", - name: "Rainy Season", - isPermanent: true, - onStart(source) { - for (const action of this.queue) { - if (action.choice === 'runPrimal' && action.pokemon === source && source.species.id === 'kyogre') return; - if (action.choice !== 'runSwitch' && action.choice !== 'runPrimal') break; - } - this.field.setWeather('raindance'); - }, - onWeather(target, source, effect) { - if (target.hasItem('utilityumbrella')) return; - if (['raindance', 'primordialsea'].includes(effect.id)) { - this.heal(target.baseMaxhp / (target.hasItem('bigroot') ? 6 : 8)); - target.addVolatile('raindrop'); - } - }, - onModifySpe(spe, pokemon) { - if (['raindance', 'primordialsea'].includes(pokemon.effectiveWeather())) { - return this.chainModify(2); - } - }, - gen: 8, - }, - - // Akir - fortifications: { - desc: "Pokemon making contact with this Pokemon lose 1/8 of their maximum HP, rounded down. At the end of every turn, this Pokemon Restores 1/16 of its max HP.", - shortDesc: "Foe loses 1/8 HP if makes contact; Restores 1/16 of its max HP every turn.", - onDamagingHitOrder: 1, - onDamagingHit(damage, target, source, move) { - if (this.checkMoveMakesContact(move, source, target, true)) { - this.damage(source.baseMaxhp / 8, source, target); - } - }, - onResidual(pokemon) { - this.heal(pokemon.baseMaxhp / 16); - }, - name: "Fortifications", - gen: 8, - }, - - // Alpha - iceage: { - desc: "The weather becomes an extremely heavy hailstorm that prevents damaging Steel-type moves from executing, causes Ice-type moves to be 50% stronger, causes all non-Ice-type Pokemon on the opposing side to take 1/8 damage from hail, and causes all moves to have a 10% chance to freeze. This weather bypasses Magic Guard and Overcoat. This weather remains in effect until the 3 turns are up, or the weather is changed by Delta Stream, Desolate Land, or Primordial Sea.", - shortDesc: "Weather: Steel fail. 1.5x Ice.", - onStart(source) { - this.field.setWeather('heavyhailstorm'); - }, - onAnySetWeather(target, source, weather) { - if (this.field.getWeather().id === 'heavyhailstorm' && !STRONG_WEATHERS.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('iceage')) { - this.field.weatherState.source = target; - return; - } - } - this.field.clearWeather(); - }, - name: "Ice Age", - gen: 8, - }, - - // Annika - overprotective: { - desc: "If this Pokemon is the last unfainted team member, its Speed is raised by 1 stage.", - shortDesc: "+1 Speed on switch-in if all other team members have fainted.", - onSwitchIn(pokemon) { - if (pokemon.side.pokemonLeft === 1) this.boost({spe: 1}); - }, - name: "Overprotective", - gen: 8, - }, - - // A Quag To The Past - carefree: { - desc: "This Pokemon blocks certain status moves and instead uses the move against the original user. This Pokemon ignores other Pokemon's Attack, Special Attack, and accuracy stat stages when taking damage, and ignores other Pokemon's Defense, Special Defense, and evasiveness stat stages when dealing damage.", - shortDesc: "Magic Bounce + Unaware.", - 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['spd'] = 0; - boosts['accuracy'] = 0; - } - }, - onTryHitPriority: 1, - onTryHit(target, source, move) { - if (target === source || move.hasBounced || !move.flags['reflectable']) { - return; - } - const newMove = this.dex.getActiveMove(move.id); - newMove.hasBounced = true; - newMove.pranksterBoosted = false; - this.add('-ability', target, 'Carefree'); - this.actions.useMove(newMove, target, source); - return null; - }, - onAllyTryHitSide(target, source, move) { - if (target.isAlly(source) || move.hasBounced || !move.flags['reflectable']) { - return; - } - const newMove = this.dex.getActiveMove(move.id); - newMove.hasBounced = true; - newMove.pranksterBoosted = false; - this.add('-ability', target, 'Carefree'); - this.actions.useMove(newMove, this.effectState.target, source); - return null; - }, - condition: { - duration: 1, - }, - name: "Carefree", - gen: 8, - }, - - // Arby - wavesurge: { - desc: "On switch-in, this Pokemon summons Wave Terrain for 5 turns. During the effect, the accuracy of Water-type moves is multiplied by 1.2, all current entry hazards are removed, and no entry hazards can be set.", - shortDesc: "On switch-in, 5 turns: no hazards; Water move acc 1.2x.", - onStart(source) { - this.field.setTerrain('waveterrain'); - }, - name: "Wave Surge", - gen: 8, - }, - - // Archas - indomitable: { - desc: "This Pokemon cures itself if it is confused or has a major status condition. Single use.", - onUpdate(pokemon) { - if ((pokemon.status || pokemon.volatiles['confusion']) && !this.effectState.indomitableActivated) { - this.add('-activate', pokemon, 'ability: Indomitable'); - pokemon.cureStatus(); - pokemon.removeVolatile('confusion'); - this.effectState.indomitableActivated = true; - } - }, - name: "Indomitable", - gen: 8, - }, - - // biggie - superarmor: { - desc: "Reduces damage taken from physical moves by 25% if the user has not yet attacked.", - onSourceModifyDamage(damage, source, target, move) { - if (this.queue.willMove(target) && move.category === 'Physical') { - return this.chainModify(0.75); - } - }, - name: "Super Armor", - gen: 8, - }, - - // Billo - proofpolicy: { - desc: "Pokemon making contact with this Pokemon have the effects of Yawn, Taunt, and Torment applied to them.", - shortDesc: "Upon contact, opposing Pokemon is made drowsy and applies Taunt + Torment.", - onDamagingHit(damage, target, source, move) { - if (this.checkMoveMakesContact(move, source, target, true)) { - source.addVolatile('taunt', target); - source.addVolatile('yawn', target); - source.addVolatile('torment', target); - } - }, - name: "Proof Policy", - gen: 8, - }, - - // Brandon - banesurge: { - desc: "On switch-in, this Pokemon summons Bane Terrain for 5 turns. For the duration of the effect, all Pokemon use their weaker offensive stat for all attacks. The move category used does not change.", - shortDesc: "On switch-in, 5 turns: all Pokemon use weaker offensive stat.", - onStart(source) { - this.field.setTerrain('baneterrain'); - }, - name: "Bane Surge", - gen: 8, - }, - - // brouha - turbulence: { - desc: "While this Pokemon is on the field, all entry hazards and terrains are removed at the end of each turn, non-Flying-type Pokemon lose 6% of their HP, rounded down, at the end of each turn.", - shortDesc: "End of each turn: clears terrain/hazards, non-Flying lose 6% HP.", - onStart(source) { - this.field.setWeather('turbulence'); - }, - onAnySetWeather(target, source, weather) { - if (this.field.getWeather().id === 'turbulence' && !STRONG_WEATHERS.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('turbulence')) { - this.field.weatherState.source = target; - return; - } - } - this.field.clearWeather(); - }, - name: "Turbulence", - gen: 8, - }, - - // Buffy - speedcontrol: { - onStart(pokemon) { - this.boost({spe: 1}, pokemon); - }, - desc: "On switch-in, this Pokemon's Speed is raised by 1 stage.", - name: "Speed Control", - gen: 8, - }, - - // cant say - ragequit: { - desc: "If a Pokemon with this ability uses a move that misses or fails, the Pokemon faints and reduces the foe's Attack and Special Attack by 2 stages", - shortDesc: "If move misses or fails, use Memento.", - name: "Rage Quit", - onAfterMove(pokemon, target, move) { - if (pokemon.moveThisTurnResult === false) { - this.add('-ability', pokemon, 'Rage Quit'); - pokemon.faint(); - if (pokemon.side.foe.active[0]) { - this.boost({atk: -2, spa: -2}, pokemon.side.foe.active[0], pokemon, null, true); - } - } - }, - gen: 8, - }, - - // Celine - guardianarmor: { - desc: "On switch-in, this Pokemon's Defense and Special Defense are raised by 2 stages.", - name: "Guardian Armor", - onStart(pokemon) { - this.boost({def: 2, spd: 2}, pokemon); - }, - gen: 8, - }, - - // drampa's grandpa - oldmanpa: { - desc: "This Pokemon's sound-based moves have their power multiplied by 1.3. This Pokemon takes halved damage from sound-based moves. This Pokemon ignores other Pokemon's Attack, Special Attack, and accuracy stat stages when taking damage, and ignores other Pokemon's Defense, Special Defense, and evasiveness stat stages when dealing damage. Upon switching in, this Pokemon's Defense and Special Defense are raised by 1 stage.", - shortDesc: "Effects of Punk Rock + Unaware. On switch-in, boosts Def and Sp. Def by 1.", - name: "Old Manpa", - onBasePowerPriority: 7, - onBasePower(basePower, attacker, defender, move) { - if (move.flags['sound']) { - this.debug('Old Manpa boost'); - return this.chainModify([5325, 4096]); - } - }, - onSourceModifyDamage(damage, source, target, move) { - if (move.flags['sound']) { - this.debug('Old Manpa weaken'); - return this.chainModify(0.5); - } - }, - 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['spd'] = 0; - boosts['accuracy'] = 0; - } - }, - onStart(pokemon) { - this.boost({def: 1, spd: 1}); - }, - gen: 8, - }, - - // dream - greedpunisher: { - desc: "This Pokemon can only be damaged by direct attacks. On switch-in, this Pokemon's stats are boosted based on the number of hazards on the field. 1 random stat is raised if 1-2 hazards are up, and 2 random stats are raised if 3 or more hazards are up.", - shortDesc: "On switch-in, boosts stats based on the number of hazards on this Pokemon's side.", - name: "Greed Punisher", - onSwitchIn(pokemon) { - const side = pokemon.side; - const sideConditions = Object.keys(side.sideConditions); - const activeCount = sideConditions.length; - const stats: BoostID[] = []; - const exclude: string[] = ['accuracy', 'evasion']; - for (let x = 0; x < activeCount; x++) { - let stat: BoostID; - for (stat in pokemon.boosts) { - if (pokemon.boosts[stat] < 6 && !exclude.includes(stat)) { - stats.push(stat); - } - } - if (stats.length) { - const randomStat = this.sample(stats); - const boost: SparseBoostsTable = {}; - boost[randomStat] = 1; - this.boost(boost, pokemon, pokemon); - } - } - }, - onDamage(damage, target, source, effect) { - if (effect.id === 'heavyhailstorm') return; - if (effect.effectType !== 'Move') { - if (effect.effectType === 'Ability') this.add('-activate', source, 'ability: ' + effect.name); - return false; - } - }, - gen: 8, - }, - - // Emeri - drakeskin: { - 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.", - name: "Drake Skin", - 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.type = 'Dragon'; - move.typeChangerBoosted = this.effect; - } - }, - onBasePowerPriority: 23, - onBasePower(basePower, pokemon, target, move) { - if (move.typeChangerBoosted === this.effect) return this.chainModify([4915, 4096]); - }, - gen: 8, - }, - - // EpicNikolai - dragonheart: { - desc: "Once per battle, when this Pokemon's HP is at or below 25% of its max HP, this Pokemon heals 50% of its max HP.", - shortDesc: "Once per battle, heals 50% when 25% or lower.", - name: "Dragon Heart", - onUpdate(pokemon) { - if (pokemon.hp > 0 && pokemon.hp < pokemon.maxhp / 4 && !this.effectState.dragonheart) { - this.effectState.dragonheart = true; - this.heal(pokemon.maxhp / 2); - } - }, - gen: 8, - }, - - // estarossa - sandsoftime: { - desc: "On switch-in, this Pokemon summons Sandstorm. If Sandstorm is active, this Pokemon's Ground-, Rock-, and Steel-type attacks have their power multiplied by 1.3. This Pokemon takes no damage from Sandstorm.", - shortDesc: "Sand Stream + Sand Force.", - name: "Sands of Time", - onStart(source) { - this.field.setWeather('sandstorm'); - }, - onImmunity(type, pokemon) { - if (type === 'sandstorm') return false; - }, - onBasePower(basePower, attacker, defender, move) { - if (this.field.isWeather('sandstorm')) { - if (move.type === 'Rock' || move.type === 'Ground' || move.type === 'Steel') { - this.debug('Sands of Time boost'); - return this.chainModify([5325, 4096]); - } - } - }, - gen: 8, - }, - - // fart - bipolar: { - desc: "If this Pokemon is a Kartana, then when it switches in, it changes to two random types and gets corresponding STAB attacks.", - shortDesc: "Kartana: User gains 2 random types and STAB moves on switch-in.", - name: "Bipolar", - isPermanent: true, - onSwitchIn(pokemon) { - if (pokemon.species.baseSpecies !== 'Kartana') return; - const typeMap: {[key: string]: string} = { - Normal: "Return", - Fighting: "Sacred Sword", - Flying: "Drill Peck", - Poison: "Poison Jab", - Ground: "Earthquake", - Rock: "Stone Edge", - Bug: "Lunge", - Ghost: "Shadow Bone", - Steel: "Iron Head", - Electric: "Zing Zap", - Psychic: "Psychic Fangs", - Ice: "Icicle Crash", - Dragon: "Dual Chop", - Dark: "Jaw Lock", - Fairy: "Play Rough", - }; - const types = Object.keys(typeMap); - this.prng.shuffle(types); - const newTypes = [types[0], types[1]]; - this.add('-start', pokemon, 'typechange', newTypes.join('/')); - pokemon.setType(newTypes); - let move = this.dex.moves.get(typeMap[newTypes[0]]); - pokemon.moveSlots[3] = pokemon.moveSlots[1]; - pokemon.moveSlots[1] = { - move: move.name, - id: move.id, - pp: move.pp, - maxpp: move.pp, - target: move.target, - disabled: false, - used: false, - virtual: true, - }; - move = this.dex.moves.get(typeMap[newTypes[1]]); - pokemon.moveSlots[2] = { - move: move.name, - id: move.id, - pp: move.pp, - maxpp: move.pp, - target: move.target, - disabled: false, - used: false, - virtual: true, - }; - }, - gen: 8, - }, - - // Finland - windingsong: { - desc: "If this Pokemon's species is Alcremie, it alternates one of its moves between two different options at the end of each turn, depending on the forme of Alcremie.", - shortDesc: "Alcremie: alternates between moves each turn.", - name: "Winding Song", - isPermanent: true, - onResidual(pokemon) { - if (pokemon.species.baseSpecies !== 'Alcremie') return; - let coolMoves = []; - if (pokemon.species.forme === 'Lemon-Cream') { - coolMoves = ['Reflect', 'Light Screen']; - } else if (pokemon.species.forme === 'Ruby-Swirl') { - coolMoves = ['Refresh', 'Destiny Bond']; - } else if (pokemon.species.forme === 'Mint-Cream') { - coolMoves = ['Light of Ruin', 'Sparkling Aria']; - } else { - coolMoves = ['Infestation', 'Whirlwind']; - } - let oldMove; - let move; - if (pokemon.moves.includes(this.toID(coolMoves[0]))) { - oldMove = this.toID(coolMoves[0]); - move = this.dex.moves.get(coolMoves[1]); - } else if (pokemon.moves.includes(this.toID(coolMoves[1]))) { - oldMove = this.toID(coolMoves[1]); - move = this.dex.moves.get(coolMoves[0]); - } else { - return; - } - if (!oldMove || !move) return; - const sketchIndex = pokemon.moves.indexOf(oldMove); - if (sketchIndex < 0) return false; - const sketchedMove = { - move: move.name, - id: move.id, - pp: (move.pp * 8 / 5), - maxpp: (move.pp * 8 / 5), - target: move.target, - disabled: false, - used: false, - }; - pokemon.moveSlots[sketchIndex] = sketchedMove; - pokemon.baseMoveSlots[sketchIndex] = sketchedMove; - this.add('-message', `Finland changed its move ${this.dex.moves.get(oldMove).name} to ${move.name}!`); - }, - gen: 8, - }, - - // frostyicelad - iceshield: { - desc: "This Pokemon can only be damaged by direct attacks. This Pokemon cannot lose its held item due to another Pokemon's attack.", - shortDesc: "Can only be damaged by direct attacks. Cannot lose its held item.", - name: "Ice Shield", - onDamage(damage, target, source, effect) { - if (effect.effectType !== 'Move') { - if (effect.effectType === 'Ability') this.add('-activate', source, 'ability: ' + effect.name); - return false; - } - }, - onTakeItem(item, pokemon, source) { - if (this.suppressingAbility(pokemon) || !pokemon.hp || pokemon.item === 'stickybarb') return; - if (!this.activeMove) throw new Error("Battle.activeMove is null"); - if ((source && source !== pokemon) || this.activeMove.id === 'knockoff') { - this.add('-activate', pokemon, 'ability: Ice Shield'); - return false; - } - }, - gen: 8, - }, - - // gallant's pear - armortime: { - name: "Armor Time", - desc: "If this Pokemon uses a status move or King Giri Giri Slash, it changes its typing and boosts one of its stats by 1 stage randomly between four options: Bug/Fire type with a Special Attack boost, Bug/Steel type with a Defense boost, Bug/Rock type with a Special Defense boost, and Bug/Electric type with a Speed boost.", - shortDesc: "On use of status or King Giri Giri Slash, the user changes type and gets a boost.", - isPermanent: true, - onBeforeMove(source, target, move) { - if (move.category !== "Status" && move.id !== "kinggirigirislash") return; - const types = ['Fire', 'Steel', 'Rock', 'Electric']; - const type = ['Bug', this.sample(types)]; - if (!source.setType(type)) return; - this.add('-start', source, 'typechange', type.join('/'), '[from] ability: Armor Time'); - switch (type[1]) { - case 'Fire': - this.add('-message', 'Armor Time: Fire Armor!'); - this.boost({spa: 1}, source); - break; - case 'Steel': - this.add('-message', 'Armor Time: Steel Armor!'); - this.boost({def: 1}, source); - break; - case 'Rock': - this.add('-message', 'Armor Time: Rock Armor!'); - this.boost({spd: 1}, source); - break; - case 'Electric': - this.add('-message', 'Armor Time: Electric Armor!'); - this.boost({spe: 1}, source); - break; - } - }, - gen: 8, - }, - - // Gimmick - ic3peak: { - desc: "This Pokemon's Normal-type moves become Ice-type moves and have their power multiplied by 1.2. This Pokemon's moves, if they are not affected by Refrigerate, have their Base Power multiplied by the number of consecutive turns the move is used by this Pokemon.", - shortDesc: "Refrigerate; Echoed Voice modifier on non-Refrigerate moves.", - name: "IC3PEAK", - 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.type = 'Ice'; - move.typeChangerBoosted = this.effect; - } - }, - onBasePowerPriority: 23, - onBasePower(basePower, pokemon, target, move) { - if (move.typeChangerBoosted === this.effect) return this.chainModify([4915, 4096]); - }, - onModifyMovePriority: -2, - onModifyMove(move, attacker) { - if (move.typeChangerBoosted === this.effect) return; - move.onTry = function () { - this.field.addPseudoWeather('echoedvoiceclone'); - this.field.pseudoWeather.echoedvoiceclone.lastmove = move.name; - }; - // eslint-disable-next-line @typescript-eslint/no-shadow - move.basePowerCallback = function (pokemon, target, move) { - if (this.field.pseudoWeather.echoedvoiceclone) { - if (this.field.pseudoWeather.echoedvoiceclone.lastmove === move.name) { - return move.basePower * this.field.pseudoWeather.echoedvoiceclone.multiplier; - } else { - this.field.removePseudoWeather('echoedvoiceclone'); - } - } - return move.basePower; - }; - }, - gen: 8, - }, - - // GMars - capsulearmor: { - desc: "While in Minior-Meteor forme, this Pokemon cannot be affected by major status conditions and is immune to critical hits. This ability cannot be ignored by Moongeist Beam, Sunsteel Strike, Mold Breaker, Teravolt, or Turboblaze.", - shortDesc: "Minior-Meteor: Immune to crits and status", - name: "Capsule Armor", - isPermanent: true, - isBreakable: false, - onCriticalHit: false, - onSetStatus(status, target, source, effect) { - if (target.species.id !== 'miniormeteor' || target.transformed) return; - if ((effect as Move)?.status) { - this.add('-immune', target, '[from] ability: Capsule Armor'); - } - return false; - }, - onTryAddVolatile(status, target) { - if (target.species.id !== 'miniormeteor' || target.transformed) return; - if (status.id !== 'yawn') return; - this.add('-immune', target, '[from] ability: Capsule Armor'); - return null; - }, - }, - - // grimAuxiliatrix - aluminumalloy: { - desc: "This Pokemon restores 1/3 of its maximum HP, rounded down, when it switches out, and other Pokemon cannot lower this Pokemon's stat stages. -1 Speed, +1 Def/Sp.Def when hit with a Water-type attacking move, switching into rain or starting rain while this Pokemon is on the field.", - shortDesc: "Regenerator+Clear Body.+1 def/spd,-1 spe in rain/hit by water", - name: "Aluminum Alloy", - onSwitchIn(pokemon) { - if (['raindance', 'primordialsea'].includes(pokemon.effectiveWeather())) { - this.boost({def: 1, spd: 1, spe: -1}, pokemon, pokemon); - this.add('-message', `${pokemon.name} is rusting...`); - } - }, - onDamagingHit(damage, target, source, move) { - if (move.type === 'Water') { - this.boost({def: 1, spd: 1, spe: -1}, target, target); - this.add('-message', `${target.name} is rusting...`); - } - }, - onWeatherChange() { - const pokemon = this.effectState.target; - if (this.field.isWeather(['raindance', 'primordialsea'])) { - this.boost({def: 1, spd: 1, spe: -1}, pokemon, pokemon); - this.add('-message', `${pokemon.name} is rusting...`); - } - }, - onSwitchOut(pokemon) { - pokemon.heal(pokemon.baseMaxhp / 3); - }, - onTryBoost(boost, target, source, effect) { - if (source && target === source) 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 && effect.id !== 'octolock') { - this.add("-fail", target, "unboost", "[from] ability: Aluminum Alloy", "[of] " + target); - } - }, - gen: 8, - }, - - // HoeenHero - tropicalcyclone: { - desc: "On switch-in, this Pokemon summons Rain Dance. If Rain Dance or Heavy Rain is active, this Pokemon's Speed is doubled.", - shortDesc: "Summons Rain. 2x Speed while rain is active.", - name: "Tropical Cyclone", - onStart(source) { - this.field.setWeather('raindance'); - }, - onModifySpe(spe, pokemon) { - if (['raindance', 'primordialsea'].includes(pokemon.effectiveWeather())) { - return this.chainModify(2); - } - }, - gen: 8, - }, - - // Hydro - hydrostatic: { - desc: "This Pokemon is immune to Water- and Electric-type moves and raises its Special Attack by 1 stage when hit by a Water- or Electric-type move. If this Pokemon is not the target of a single-target Water- or Electric-type move used by another Pokemon, this Pokemon redirects that move to itself if it is within the range of that move. This Pokemon's Water- and Electric-type moves have their accuracy multiplied by 1.3.", - shortDesc: "Storm Drain + Lightning Rod. This Pokemon's Water/Electric moves have 1.3x acc.", - onSourceModifyAccuracyPriority: 9, - onSourceModifyAccuracy(accuracy, source, target, move) { - if (typeof accuracy !== 'number') return; - if (!['Water', 'Electric'].includes(move.type)) return; - this.debug('hydrostatic - enhancing accuracy'); - return accuracy * 1.3; - }, - onTryHit(target, source, move) { - if (target !== source && ['Water', 'Electric'].includes(move.type)) { - if (!this.boost({spa: 1})) { - this.add('-immune', target, '[from] ability: Hydrostatic'); - } - return null; - } - }, - onAnyRedirectTarget(target, source, source2, move) { - if (!['Water', 'Electric'].includes(move.type) || move.flags['pledgecombo']) return; - const redirectTarget = ['randomNormal', 'adjacentFoe'].includes(move.target) ? 'normal' : move.target; - if (this.validTarget(this.effectState.target, source, redirectTarget)) { - if (move.smartTarget) move.smartTarget = false; - if (this.effectState.target !== target) { - this.add('-activate', this.effectState.target, 'ability: Hydrostatic'); - } - return this.effectState.target; - } - }, - name: "Hydrostatic", - gen: 8, - }, - - // Inactive - dragonsfury: { - desc: "If this Pokemon has a non-volatile status condition, its Defense is multiplied by 1.5x and its HP is restored by 25% of damage it deals.", - shortDesc: "If this Pokemon is statused, its Def is 1.5x and it heals for 25% of dmg dealt.", - onModifyDefPriority: 6, - onModifyDef(def, pokemon) { - if (pokemon.status) { - return this.chainModify(1.5); - } - }, - onModifyMove(move, attacker) { - if (attacker.status) move.drain = [1, 4]; - }, - name: "Dragon's Fury", - gen: 8, - }, - - // Iyarito - pollodiablo: { - desc: "This Pokemon's Special Attack is 1.5x, but it can only select the first move it executes.", - shortDesc: "This Pokemon's Sp. Atk is 1.5x, but it can only select the first move it executes.", - name: "Pollo Diablo", - onStart(pokemon) { - pokemon.abilityState.choiceLock = ""; - }, - onBeforeMove(pokemon, target, move) { - if (move.isZOrMaxPowered || move.id === 'struggle') return; - if (pokemon.abilityState.choiceLock && pokemon.abilityState.choiceLock !== move.id) { - this.addMove('move', pokemon, move.name); - this.attrLastMove('[still]'); - this.debug("Disabled by Pollo Diablo"); - this.add('-fail', pokemon); - return false; - } - }, - onModifyMove(move, pokemon) { - if (pokemon.abilityState.choiceLock || move.isZOrMaxPowered || move.id === 'struggle') return; - pokemon.abilityState.choiceLock = move.id; - }, - onModifySpAPriority: 1, - onModifySpA(spa, pokemon) { - if (pokemon.volatiles['dynamax']) return; - this.debug('Pollo Diablo Spa Boost'); - return this.chainModify(1.5); - }, - onDisableMove(pokemon) { - if (!pokemon.abilityState.choiceLock) return; - if (pokemon.volatiles['dynamax']) return; - for (const moveSlot of pokemon.moveSlots) { - if (moveSlot.id !== pokemon.abilityState.choiceLock) { - pokemon.disableMove(moveSlot.id, false, this.effectState.sourceEffect); - } - } - }, - onEnd(pokemon) { - pokemon.abilityState.choiceLock = ""; - }, - gen: 8, - }, - - // Jett - deceiver: { - desc: "This Pokemon's moves that match one of its types have a same-type attack bonus of 2 instead of 1.5. If this Pokemon is at full HP, it survives one hit with at least 1 HP.", - shortDesc: "Adaptability + Sturdy.", - onModifyMove(move) { - move.stab = 2; - }, - onTryHit(pokemon, target, move) { - if (move.ohko) { - this.add('-immune', pokemon, '[from] ability: Deceiver'); - return null; - } - }, - onDamagePriority: -100, - onDamage(damage, target, source, effect) { - if (target.hp === target.maxhp && damage >= target.hp && effect && effect.effectType === 'Move') { - this.add('-ability', target, 'Deceiver'); - return target.hp - 1; - } - }, - name: "Deceiver", - gen: 8, - }, - - // Jho - venomize: { - desc: "This Pokemon's Normal-type moves become Poison-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 Poison type and have 1.2x power.", - 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.type = 'Poison'; - move.typeChangerBoosted = this.effect; - } - }, - onBasePowerPriority: 23, - onBasePower(basePower, pokemon, target, move) { - if (move.typeChangerBoosted === this.effect) return this.chainModify([4915, 4096]); - }, - name: "Venomize", - gen: 8, - }, - - // Jordy - divinesandstorm: { - desc: "On switch-in, this Pokemon summons Sandstorm. This Pokemon does not take recoil damage besides Struggle/Life Orb/crash damage.", - shortDesc: "Sand Stream + Rock Head.", - name: "Divine Sandstorm", - onDamage(damage, target, source, effect) { - if (effect.id === 'recoil') { - if (!this.activeMove) return; - if (this.activeMove.id !== 'struggle') return null; - } - }, - onStart(pokemon) { - this.field.setWeather('sandstorm'); - }, - gen: 8, - }, - - // Kaiju Bunny - secondwind: { - desc: "Once per battle, when this Pokemon's HP is at or below 25% of its max HP, this Pokemon heals 50% of its max HP.", - shortDesc: "Once per battle, heals 50% when 25% or lower.", - name: "Second Wind", - onUpdate(pokemon) { - if (pokemon.hp > 0 && pokemon.hp < pokemon.maxhp / 4 && !this.effectState.dragonheart) { - this.effectState.dragonheart = true; - this.heal(pokemon.maxhp / 2); - } - }, - gen: 8, - }, - - // Kennedy - falsenine: { - desc: "This Pokemon's type changes to match the type of the move it is about to use. This effect comes after all effects that change a move's type. This Pokemon's critical hit ratio is raised by 1 stage.", - shortDesc: "Protean + Super Luck.", - onPrepareHit(source, target, move) { - if (move.hasBounced) 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: False Nine'); - } - }, - onModifyCritRatio(critRatio) { - return critRatio + 1; - }, - name: "False Nine", - gen: 8, - }, - - // Kev - kingofatlantis: { - desc: "On switch-in, this Pokemon summons Rain Dance for 5 turns, plus 1 additional turn for each Water-type teammate. This Pokemon also has the effects of Dry Skin.", - shortDesc: "Drizzle + Dry Skin; +1 turn of rain for each Water-type teammate.", - onStart(source) { - this.field.setWeather('raindance', source); - // See conditions.ts for weather modifications. - }, - onTryHit(target, source, move) { - if (target !== source && move.type === 'Water') { - if (!this.heal(target.baseMaxhp / 4)) { - this.add('-immune', target, '[from] ability: King of Atlantis'); - } - return null; - } - }, - onFoeBasePowerPriority: 17, - onFoeBasePower(basePower, attacker, defender, move) { - if (this.effectState.target !== defender) return; - if (move.type === 'Fire') { - return this.chainModify(1.25); - } - }, - onWeather(target, source, effect) { - if (target.hasItem('utilityumbrella')) return; - if (effect.id === 'raindance' || effect.id === 'primordialsea') { - this.heal(target.baseMaxhp / 8); - } else if (effect.id === 'sunnyday' || effect.id === 'desolateland') { - this.damage(target.baseMaxhp / 8, target, target); - } - }, - name: "King of Atlantis", - gen: 8, - }, - - // KingSwordYT - bambookingdom: { - desc: "On switch-in, this Pokemon's Defense and Special Defense are raised by 1 stage. Attacking moves used by this Pokemon have their priority set to -7.", - shortDesc: "+1 Def/SpD. -7 priority on attacks.", - name: "Bamboo Kingdom", - onStart(pokemon) { - this.boost({def: 1, spd: 1}, pokemon); - }, - onModifyPriority(priority, pokemon, target, move) { - if (move?.category !== 'Status') return -7; - }, - gen: 8, - }, - - // Kipkluif - degenerator: { - desc: "While this Pokemon is active, foes that switch out lose 1/3 of their maximum HP, rounded down. This damage will never cause a Pokemon to faint, and will instead leave them at 1 HP.", - shortDesc: "While this Pokemon is active, foes that switch out lose 1/3 of their maximum HP.", - onStart(pokemon) { - pokemon.side.foe.addSideCondition('degeneratormod', pokemon); - const data = pokemon.side.foe.getSideConditionData('degeneratormod'); - if (!data.sources) { - data.sources = []; - } - data.sources.push(pokemon); - }, - onEnd(pokemon) { - pokemon.side.foe.removeSideCondition('degeneratormod'); - }, - name: "Degenerator", - gen: 8, - }, - - // Lionyx - tension: { - desc: "On switch-in, the Pokemon builds up tension, making the next attack always hit and always be a critical hit.", - shortDesc: "On switch-in, the Pokemon's next attack will always be a critical hit and will always hit.", - name: "Tension", - onStart(pokemon) { - this.add('-ability', pokemon, 'Tension'); - pokemon.addVolatile('tension'); - }, - condition: { - onStart(pokemon, source, effect) { - if (effect && (['imposter', 'psychup', 'transform'].includes(effect.id))) { - this.add('-start', pokemon, 'move: Tension', '[silent]'); - } else { - this.add('-start', pokemon, 'move: Tension'); - } - this.add("-message", `${pokemon.name} has built up tension!`); - }, - onModifyCritRatio(critRatio) { - return 5; - }, - onAnyInvulnerability(target, source, move) { - if (move && (source === this.effectState.target || target === this.effectState.target)) return 0; - }, - onSourceAccuracy(accuracy) { - return true; - }, - onAfterMove(pokemon, source) { - pokemon.removeVolatile('tension'); - }, - onEnd(pokemon) { - this.add('-end', pokemon, 'move: Tension', '[silent]'); - }, - }, - gen: 8, - }, - - // LittEleven - darkroyalty: { - desc: "While this Pokemon is active, priority moves from opposing Pokemon targeted at allies are prevented from having an effect. Dark-type attacks used by this Pokemon have their power multiplied by 1.2.", - shortDesc: "Immune to priority. Dark-type attacks have 1.2x power.", - 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('-ability', dazzlingHolder, 'Dark Royalty'); - this.add('cant', target, move, '[of] ' + dazzlingHolder); - return false; - } - }, - onAllyBasePower(basePower, attacker, defender, move) { - if (move.type === 'Dark') { - this.debug('Dark Royalty boost'); - return this.chainModify(1.2); - } - }, - name: "Dark Royalty", - }, - - // Lunala - magichat: { - desc: "This Pokemon can only be damaged by direct attacks. This Pokemon blocks certain status moves and instead uses the move against the original user.", - shortDesc: "Magic Guard + Magic Bounce.", - onDamage(damage, target, source, effect) { - if (effect.id === 'heavyhailstorm') return; - if (effect.effectType !== 'Move') { - if (effect.effectType === 'Ability') this.add('-activate', source, 'ability: ' + effect.name); - return false; - } - }, - onTryHitPriority: 1, - onTryHit(target, source, move) { - if (target === source || move.hasBounced || !move.flags['reflectable']) { - return; - } - const newMove = this.dex.getActiveMove(move.id); - newMove.hasBounced = true; - newMove.pranksterBoosted = false; - this.add('-ability', target, 'Magic Hat'); - this.actions.useMove(newMove, target, source); - return null; - }, - onAllyTryHitSide(target, source, move) { - if (target.isAlly(source) || move.hasBounced || !move.flags['reflectable']) { - return; - } - const newMove = this.dex.getActiveMove(move.id); - newMove.hasBounced = true; - newMove.pranksterBoosted = false; - this.add('-ability', target, 'Magic Hat'); - this.actions.useMove(newMove, this.effectState.target, source); - return null; - }, - condition: { - duration: 1, - }, - name: "Magic Hat", - gen: 8, - }, - - // Mad Monty ¾° - petrichor: { - desc: "On switch-in, this Pokemon summons Rain Dance. If Rain Dance or Heavy Rain is active, this Pokemon's Electric-type moves have 1.2x power.", - shortDesc: "Summons rain. Electric-type moves have 1.2x power in rain.", - name: "Petrichor", - onStart(source) { - this.field.setWeather('raindance'); - }, - onBasePowerPriority: 23, - onBasePower(basePower, pokemon, target, move) { - if (move.type === 'Electric' && this.field.getWeather().id === 'raindance') { - return this.chainModify([4915, 4096]); - } - }, - }, - - // Marshmallon - stubbornness: { - desc: "this Pokemon does not take recoil damage. The first time an opposing Pokemon boosts a stat each time this Pokemon is active, this Pokemon's Attack, Defense, and Special Defense are raised by 1 stage; each time the opponent boosts after this, this Pokemon's Attack is boosted by 1 stage. Activation of opposing Stubbornness will not activate Stubbornness.", - shortDesc: "Rock Head + when foe first boosts, Atk/Def/SpD+1. Further foe boosts=+1 Atk.", - name: "Stubbornness", - onDamage(damage, target, source, effect) { - if (effect.id === 'recoil') { - if (!this.activeMove) throw new Error("Battle.activeMove is null"); - if (this.activeMove.id !== 'struggle') return null; - } - }, - onSwitchOut(pokemon) { - if (this.effectState.happened) delete this.effectState.happened; - }, - onFoeAfterBoost(boost, target, source, effect) { - const pokemon = target.side.foe.active[0]; - let success = false; - let i: BoostID; - for (i in boost) { - if (boost[i]! > 0) { - success = true; - } - } - // Infinite Loop preventer - if (effect?.name === 'Stubbornness') return; - if (success) { - if (!this.effectState.happened) { - this.boost({atk: 1, def: 1, spd: 1}, pokemon); - this.effectState.happened = true; - } else { - this.boost({atk: 1}, pokemon); - } - } - }, - gen: 8, - }, - - // Mitsuki - photosynthesis: { - desc: "On switch-in, this Pokemon summons Sunny Day. If Sunny Day is active and this Pokemon is not holding Utility Umbrella, this Pokemon's Speed is doubled.", - shortDesc: "Drought + Chlorophyll", - name: "Photosynthesis", - onStart(source) { - for (const action of this.queue) { - if (action.choice === 'runPrimal' && action.pokemon === source && source.species.id === 'groudon') return; - if (action.choice !== 'runSwitch' && action.choice !== 'runPrimal') break; - } - this.field.setWeather('sunnyday'); - }, - onModifySpe(spe, pokemon) { - if (['sunnyday', 'desolateland'].includes(pokemon.effectiveWeather())) { - return this.chainModify(2); - } - }, - gen: 8, - }, - - // n10siT - greedymagician: { - desc: "This Pokemon steals the item off a Pokemon it hits with an attack. If this Pokemon already has an item, it is replaced with the stolen item. This ability does not affect Doom Desire and Future Sight.", - shortDesc: "Steals item from foe on attack; replace current item with stolen item.", - name: "Greedy Magician", - onSourceHit(target, source, move) { - if (!move || !target) return; - if (target !== source && move.category !== 'Status') { - const yourItem = target.takeItem(source); - if (!yourItem) return; - if (!source.setItem(yourItem)) { - target.item = yourItem.id; - return; - } - this.add('-item', source, yourItem, '[from] ability: Greedy Magician', '[of] ' + source); - } - }, - gen: 8, - }, - - // Theia - burningsoul: { - desc: "On switch-in, this Pokemon summons Sunny Day. If this Pokemon is at full HP, it survives one hit with at least 1 HP. OHKO moves fail when used against this Pokemon.", - shortDesc: "Drought + Sturdy.", - onStart(source) { - this.field.setWeather('sunnyday'); - }, - onTryHit(pokemon, target, move) { - if (move.ohko) { - this.add('-immune', pokemon, '[from] ability: Burning Soul'); - return null; - } - }, - onDamagePriority: -100, - onDamage(damage, target, source, effect) { - if (target.hp === target.maxhp && damage >= target.hp && effect && effect.effectType === 'Move') { - this.add('-ability', target, 'Burning Soul'); - return target.hp - 1; - } - }, - name: "Burning Soul", - gen: 8, - }, - - // Notater517 - lastminutelag: { - desc: "This Pokemon applies the Recharge status to the opposing Pokemon if this Pokemon needs to recharge. If this Pokemon KOs an opposing Pokemon with a recharge move, then the user does not need to recharge.", - shortDesc: "Gives Recharge to the target if this Pokemon has it. KO: No recharge.", - onModifyMove(move, pokemon, target) { - if (move.self?.volatileStatus === 'mustrecharge') { - if (!move.volatileStatus) { - move.volatileStatus = 'mustrecharge'; - } else { - if (!move.secondaries) move.secondaries = []; - move.secondaries.push({chance: 100, volatileStatus: 'mustrecharge'}); - } - } - }, - onAfterMoveSecondarySelf(pokemon, target, move) { - if (!target || target.fainted || target.hp <= 0) { - if (pokemon.volatiles['mustrecharge']) { - this.add('-ability', pokemon, 'Last Minute Lag'); - this.add('-end', pokemon, 'mustrecharge'); - delete pokemon.volatiles['mustrecharge']; - this.hint('It may look like this Pokemon is going to recharge next turn, but it will not recharge.'); - } - } - }, - name: "Last-Minute Lag", - gen: 8, - }, - - // nui - conditionoverride: { - desc: "This Pokemon can attract opponents regardless of gender. Pokemon that are attracted have their Special Defense stat reduced by 25%.", - shortDesc: "Attracts anyone. Attracted Pokemon have SpD reduced by 25%.", - // See conditions.ts for implementation - name: "Condition Override", - gen: 8, - }, - - // pants - ghostspores: { - desc: "This Pokemon ignores the foe's stat boosts. On switch-out, this Pokemon regenerates 1/3 HP, rounded down. If this Pokemon is hit by an attack, Leech Seed is applied to the foe. If this Pokemon is KOed, Curse is applied to the foe.", - shortDesc: "Unaware + Regenerator. If hit, foe is Leech Seeded. If KOed, foe is Cursed.", - name: 'Ghost Spores', - onDamagingHit(damage, target, source, move) { - if (!target.hp) { - source.addVolatile('curse', target); - } else { - source.addVolatile('leechseed', target); - } - }, - 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; - } - }, - onSwitchOut(pokemon) { - pokemon.heal(pokemon.baseMaxhp / 3); - }, - }, - - // PartMan - hecatomb: { - desc: "This Pokemon's Speed is raised by 1 stage if it attacks and knocks out another Pokemon. If the Pokemon is Chandelure and is not shiny, it changes its set.", - shortDesc: "Spe +1 on KOing foe. Chandelure: changes sets.", - name: 'Hecatomb', - onSourceAfterFaint(length, target, source, effect) { - if (effect && effect.effectType === 'Move') { - this.boost({spe: length}, source); - if (source.species.baseSpecies !== 'Chandelure') return; - if (source.set.shiny) return; - source.m.nowShiny = true; - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('PartMan')}|THE LIGHT! IT BURNS!`); - changeSet(this, source, ssbSets['PartMan-Shiny']); - } - }, - gen: 8, - }, - - // peapod - stealthblack: { - desc: "No competitive use.", - name: 'Stealth Black', - gen: 8, - }, - - // Perish Song - soupsipper: { - desc: "This Pokemon is immune to Grass- and Water-type moves, restores 1/4 of its maximum HP, rounded down, when hit by these types, and boosts its Attack by 1 stage when hit by these types.", - shortDesc: "Immune to Water and Grass moves, heals 1/4 HP and gains +1 Atk when hit by them.", - onTryHit(target, source, move) { - if (target !== source && ['Water', 'Grass'].includes(move.type)) { - let success = false; - if (this.heal(target.baseMaxhp / 4)) success = true; - if (this.boost({atk: 1})) success = true; - if (!success) { - this.add('-immune', target, '[from] ability: Soup Sipper'); - } - return null; - } - }, - name: "Soup Sipper", - gen: 8, - }, - - // phiwings99 - plausibledeniability: { - desc: "This Pokemon's Status moves have priority raised by 1, but Dark-types are immune. Additionally, This Pokemon ignores other Pokemon's Attack, Special Attack, and accuracy stat stages when taking damage, and ignores other Pokemon's Defense, Special Defense, and evasiveness stat stages when dealing damage.", - shortDesc: "Unaware + Prankster. Dark-types still immune to Prankster moves.", - name: "Plausible Deniability", - 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['spd'] = 0; - boosts['accuracy'] = 0; - } - }, - onModifyPriority(priority, pokemon, target, move) { - if (move?.category === 'Status') { - move.pranksterBoosted = true; - return priority + 1; - } - }, - gen: 8, - }, - - // piloswine gripado - foreverwinternights: { - desc: "On switch-in, this Pokemon summons Winter Hail. Winter Hail is hail that also lowers the Speed of non-Ice-type Pokemon by 50%. This weather remains in effect until this Ability is no longer active for any Pokemon, or the weather is changed by Delta Stream, Desolate Land, or Primordial Sea.", - shortDesc: "Sets permahail until this Pokemon switches out. Non-Ice: 1/2 Speed", - onStart(source) { - this.field.setWeather('winterhail'); - }, - onAnySetWeather(target, source, weather) { - if (this.field.getWeather().id === 'winterhail' && !STRONG_WEATHERS.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('winterhail')) { - this.field.weatherState.source = target; - return; - } - } - this.field.clearWeather(); - }, - name: "Forever Winter Nights", - gen: 8, - }, - - // PiraTe Princess - wildmagicsurge: { - desc: "Randomly changes this Pokemon's type at the end of every turn to the type of one of its moves; same-type attack bonus (STAB) is 2 instead of 1.5.", - shortDesc: "Adaptability + Randomly changes to the type of one of its moves every turn.", - name: "Wild Magic Surge", - onModifyMove(move) { - move.stab = 2; - }, - onResidual(pokemon) { - if (!pokemon.hp) return; - const types = pokemon.moveSlots.map(slot => this.dex.moves.get(slot.id).type); - const type = types.length ? this.sample(types) : '???'; - if (this.dex.types.isName(type) && pokemon.setType(type)) { - this.add('-ability', pokemon, 'Wild Magic Surge'); - this.add('-start', pokemon, 'typechange', type); - } - }, - gen: 8, - }, - - // Psynergy - supernova: { - desc: "On switch-in, if total positive boosts - total negative boosts ≥ 8, both Pokemon faint.", - onStart(source) { - let result = 0; - const pokemon = this.getAllActive(); - for (const poke of pokemon) { - result += Object.values(poke.boosts).reduce((total, x) => total + x); - } - if (result < 8) return; - this.add('-ability', source, 'Supernova'); - for (const x of pokemon) { - this.add('-anim', x, 'Explosion', x); - x.faint(); - } - }, - name: "Supernova", - gen: 8, - }, - - // ptoad - swampysurge: { - desc: "On switch-in, this Pokemon summons Swampy Terrain. Swampy Terrain halves the power of Electric-, Grass-, and Ice-type moves used by grounded Pokemon and heals grounded Water- and Ground-types by 1/16 of their maximum HP, rounded down, each turn.", - shortDesc: "5 turns: Grounded: 1/2 Elec/Grass/Ice power, +1/16 HP/turn for Water or Ground.", - onStart(source) { - this.field.setTerrain('swampyterrain'); - }, - name: "Swampy Surge", - gen: 8, - }, - - // Rach - burnitdown: { - desc: "On switch-in, this Pokemon lowers the foe's higher offensive stat.", - shortDesc: "Lower the foe's higher offensive stat.", - onStart(pokemon) { - let totalatk = 0; - let totalspa = 0; - for (const target of pokemon.foes()) { - totalatk += target.getStat('atk', false, true); - totalspa += target.getStat('spa', false, true); - } - for (const target of pokemon.foes()) { - this.add('-ability', pokemon, 'BURN IT DOWN!'); - if (totalatk && totalatk >= totalspa) { - this.boost({atk: -1}, target, pokemon, null, true); - } else if (totalspa) { - this.boost({spa: -1}, target, pokemon, null, true); - } - } - }, - name: "BURN IT DOWN!", - gen: 8, - }, - - // Rage - inversionsurge: { - desc: "On switch-in, this Pokemon summons Inversion Terrain. While Inversion Terrain is active, type effectiveness for all Pokemon on the field is inverted, and paralyzed Pokemon have doubled, instead of halved, Speed.", - shortDesc: "Summons Inversion Terrain; 5 turns: Inverse Battle, par: 2x Spe.", - onStart(source) { - this.field.setTerrain('inversionterrain'); - }, - name: "Inversion Surge", - gen: 8, - }, - - // Raihan Kibana - royalcoat: { - desc: "If Sandstorm is active, this Pokemon's Speed is doubled and its Special Defense is multiplied by 1.5. This Pokemon takes no damage from Sandstorm.", - shortDesc: "If Sandstorm, Speed x2 and SpD x1.5; immunity to Sandstorm.", - name: "Royal Coat", - onModifySpe(spe, pokemon) { - if (this.field.isWeather('sandstorm')) { - return this.chainModify(2); - } - }, - onModifySpD(spd, pokemon) { - if (this.field.isWeather('sandstorm')) { - return this.chainModify(1.5); - } - }, - onImmunity(type, pokemon) { - if (type === 'sandstorm') return false; - }, - gen: 8, - }, - - // RavioliQueen - phantomplane: { - desc: "On switch-in, this Pokemon summons Pitch Black Terrain. While Pitch Black Terrain is active, all non-Ghost-type Pokemon take damage equal to 1/16 of their max HP, rounded down, at the end of each turn.", - shortDesc: "Summons Pitch Black Terrain, which damages non-Ghosts by 1/16 per turn.", - onStart(source) { - this.field.setTerrain('pitchblackterrain'); - }, - name: "Phantom Plane", - gen: 8, - }, - - // Robb576 - thenumbersgame: { - desc: "If this Pokemon is a forme of Necrozma, its forme changes on switch-in depending on the number of unfainted Pokemon on the user's team: Necrozma-Dusk-Mane if 3 or fewer Pokemon and Necrozma-Dawn-Wings was sent out already; Necrozma-Ultra if it is the last Pokemon left on the team and Necrozma-Dusk-Mane was sent out already.", - shortDesc: "Changes forme on switch-in depending on # of remaining Pokemon on user's team.", - name: "The Numbers Game", - isPermanent: true, - onStart(target) { - if (target.baseSpecies.baseSpecies !== 'Necrozma' || target.transformed) return; - if (target.side.pokemonLeft <= 3) { - if (target.species.name === 'Necrozma-Dusk-Mane' && target.side.pokemonLeft === 1 && target.m.flag2) { - changeSet(this, target, ssbSets['Robb576-Ultra']); - } else if (target.species.name === "Necrozma-Dawn-Wings" && target.m.flag1) { - changeSet(this, target, ssbSets['Robb576-Dusk-Mane']); - target.m.flag2 = true; - } - } - target.m.flag1 = true; - }, - gen: 8, - }, - - // Sectonia - royalaura: { - desc: "If this Pokemon is the target of an opposing Pokemon's move, that move loses one additional PP. Moves used by this Pokemon only use 0.5 PP.", - shortDesc: "Pressure, and this Pokemon uses 0.5 PP per move.", - name: "Royal Aura", - onStart(pokemon) { - this.add('-ability', pokemon, 'Royal Aura'); - }, - onDeductPP(target, source) { - if (target.isAlly(source)) return; - return 1; - }, - onTryMove(pokemon, target, move) { - const moveData = pokemon.getMoveData(move.id); - if (!moveData || moveData.pp < 0.5) return; - // Lost 1 PP due to move usage, restore 0.5 PP to make it so that only 0.5 PP - // would be used. - moveData.pp += 0.5; - }, - gen: 8, - }, - - // Segmr - skilldrain: { - desc: "While this Pokemon is active, no moves will trigger their secondary effects, and moves that cause the user to switch out will no longer do so.", - shortDesc: "While active: no secondary effects, moves can't switch out.", - name: "Skill Drain", - onAnyModifyMove(move) { - delete move.secondaries; - }, - // afterSecondarySelf and switch nullifying handled in ssb/scripts.ts - gen: 8, - }, - - // sejesensei - trashconsumer: { - desc: "This Pokemon is immune to Poison-type moves and restores 1/4 of its maximum HP, rounded down, when hit by a Poison-type move. Pokemon making contact with this Pokemon lose 1/8 of their maximum HP, rounded down.", - shortDesc: "Poison Absorb + Rough Skin", - name: "Trash Consumer", - onTryHit(target, source, move) { - if (target !== source && move.type === 'Poison') { - if (!this.heal(target.baseMaxhp / 4)) { - this.add('-immune', target, '[from] ability: Trash Consumer'); - } - return null; - } - }, - onDamagingHitOrder: 1, - onDamagingHit(damage, target, source, move) { - if (this.checkMoveMakesContact(move, source, target, true)) { - this.damage(source.baseMaxhp / 8, source, target); - } - }, - gen: 8, - }, - - // Shadecession - shadydeal: { - desc: "On switch-in, this Pokemon boosts a random stat other than Special Attack by 1 stage and gains 2 random type immunities that are displayed to the opponent.", - shortDesc: "On switch-in, gains random +1 to non-SpA, 2 random immunities.", - onStart(pokemon) { - const stats: BoostID[] = []; - let stat: BoostID; - for (stat in pokemon.boosts) { - const noBoost: string[] = ['accuracy', 'evasion', 'spa']; - if (!noBoost.includes(stat) && pokemon.boosts[stat] < 6) { - stats.push(stat); - } - } - if (stats.length) { - const randomStat = this.sample(stats); - const boost: SparseBoostsTable = {}; - boost[randomStat] = 1; - this.boost(boost); - } - if (this.effectState.immunities) return; - const typeList = this.dex.types.names(); - const firstTypeIndex = this.random(typeList.length); - const secondType = this.sample(typeList.slice(0, firstTypeIndex).concat(typeList.slice(firstTypeIndex + 1))); - this.effectState.immunities = [typeList[firstTypeIndex], secondType]; - this.add('-start', pokemon, `${this.effectState.immunities[0]} Immunity`, '[silent]'); - this.add('-start', pokemon, `${this.effectState.immunities[1]} Immunity`, '[silent]'); - this.add("-message", `${pokemon.name} is now immune to ${this.effectState.immunities[0]} and ${this.effectState.immunities[1]} type attacks!`); - }, - onTryHit(target, source, move) { - if (target !== source && this.effectState.immunities?.includes(move.type)) { - this.add('-immune', target, '[from] ability: Shady Deal'); - return null; - } - }, - onEnd(pokemon) { - if (!this.effectState.immunities) return; - this.add('-end', pokemon, `${this.effectState.immunities[0]} Immunity`, '[silent]'); - this.add('-end', pokemon, `${this.effectState.immunities[1]} Immunity`, '[silent]'); - delete this.effectState.immunities; - }, - name: "Shady Deal", - gen: 8, - }, - - // Soft Flex - eyeofthestorm: { - name: "Eye of the Storm", - desc: "On switch-in, this Pokemon summons Rain Dance and Tempest Terrain. While Tempest Terrain is active, Electric-type Pokemon are healed by 1/16 of their maximum HP, rounded down, at the end of each turn, and Flying- and Steel-type Pokemon lose 1/16 of their maximum HP, rounded down, at the end of each turn. If the Flying- or Steel-type Pokemon is also Electric-type, they only receive the healing.", - shortDesc: "5 turns: Rain, +1/16 HP/turn to Elec, -1/16/turn to Fly/Steel.", - onStart(source) { - this.field.setWeather('raindance', source); - this.field.setTerrain('tempestterrain', source); - }, - }, - // Spandan - hackedcorrosion: { - desc: "This Pokemon ignores other Pokemon's stat stages when taking or doing damage. This Pokemon can poison or badly poison Pokemon regardless of their typing.", - shortDesc: "Unaware + Corrosion.", - 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['spd'] = 0; - boosts['accuracy'] = 0; - } - }, - name: "Hacked Corrosion", - }, - - // Struchni - overaskedclause: { - desc: "If this Pokemon is an Aggron and is hit by a move that is not very effective, this Pokemon becomes Aggron-Mega and its Attack is boosted by 1 stage.", - shortDesc: "Aggron: If hit by resisted move, Mega Evolve and gain +1 Atk.", - name: "Overasked Clause", - isPermanent: true, - onHit(target, source, move) { - if (target.getMoveHitData(move).typeMod < 0) { - if (!target.hp) return; - if (target.species.id.includes('aggron') && !target.illusion && !target.transformed) { - this.boost({atk: 1}, target); - if (target.species.name !== 'Aggron') return; - this.actions.runMegaEvo(target); - } - } - }, - gen: 8, - }, - - // Teclis - fieryfur: { - name: "Fiery Fur", - desc: "If this Pokemon is at full HP, damage taken from attacks is halved.", - onSourceModifyDamage(damage, source, target, move) { - if (target.hp >= target.maxhp) { - this.debug('Fiery Fur weaken'); - return this.chainModify(0.5); - } - }, - }, - - // temp - chargedup: { - desc: "If this Pokemon has a negative stat boost at -2 or lower, this Pokemon's negative stat boosts are cleared.", - shortDesc: "Resets negative stat boosts if there is one at -2 or lower.", - name: "Charged Up", - onUpdate(pokemon) { - let activate = false; - const boosts: SparseBoostsTable = {}; - let i: BoostID; - for (i in pokemon.boosts) { - if (pokemon.boosts[i] <= -2) { - activate = true; - boosts[i] = 0; - } - } - if (activate) { - pokemon.setBoost(boosts); - this.add('-activate', pokemon, 'ability: Charged Up'); - this.add('-clearnegativeboost', pokemon); - } - }, - gen: 8, - }, - - // tiki - truegrit: { - desc: "This Pokemon receives 1/2 damage from special attacks. This Pokemon ignores other Pokemon's Attack, Special Attack, and accuracy stat stages when taking damage, and ignores other Pokemon's Defense, Special Defense, and evasiveness stat stages when dealing damage.", - shortDesc: "Takes 1/2 damage from special moves and ignores boosts.", - name: "True Grit", - onSourceModifyDamage(damage, source, target, move) { - if (move.category === 'Special') { - return this.chainModify(0.5); - } - }, - 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['spd'] = 0; - boosts['accuracy'] = 0; - } - }, - gen: 8, - }, - - // Trickster - trillionageroots: { - desc: "This Pokemon applies Leech Seed to the opposing Pokemon when hit with an attacking move. If this Pokemon is at full HP, it survives one hit with at least 1 HP. OHKO moves fail when used against this Pokemon.", - shortDesc: "Sturdy + apply Leech Seed when hit by foe.", - onTryHit(pokemon, target, move) { - if (move.ohko) { - this.add('-immune', pokemon, '[from] ability: Trillionage Roots'); - return null; - } - }, - onDamagePriority: -100, - onDamage(damage, target, source, effect) { - if (target.hp === target.maxhp && damage >= target.hp && effect && effect.effectType === 'Move') { - this.add('-ability', target, 'Trillionage Roots'); - return target.hp - 1; - } - }, - onDamagingHit(damage, target, source, move) { - if (source.volatiles['leechseed']) return; - if (!move.flags['futuremove']) { - source.addVolatile('leechseed', this.effectState.target); - } - }, - name: "Trillionage Roots", - gen: 8, - }, - - // Volco - speedrunning: { - desc: "This Pokemon's Special Attack is raised by 1 stage when another Pokemon faints. Moves used by this Pokemon that are 60 Base Power or lower gain an additional 25 Base Power. No moves can defrost a frozen Pokemon while this Pokemon is active. However, using a move that would defrost will still go through freeze.", - shortDesc: "Soul Heart + Weak moves get +25 BP. Moves can't defrost. Defrost moves go thru frz.", - onAnyFaintPriority: 1, - onAnyFaint() { - this.boost({spa: 1}, this.effectState.target); - }, - onAnyModifyMove(move, pokemon) { - if (move.thawsTarget) { - delete move.thawsTarget; - } - if (move.flags["defrost"]) { - delete move.flags["defrost"]; - } - }, - onBasePowerPriority: 21, - onBasePower(basePower, pokemon, target, move) { - if (move.basePower <= 60) return basePower + 25; - }, - name: "Speedrunning", - gen: 8, - }, - - // Vexen - aquilasblessing: { - desc: "This Pokemon's attacks with secondary effects have their power multiplied by 1.3, but the secondary effects are removed. If this Pokemon gets hit by a damaging Fire type move, its Defense and Special Defense get raised by 1 stage.", - shortDesc: "Sheer Force + when hit with Fire move: +1 Def/SpD.", - onModifyMove(move, pokemon) { - if (move.secondaries) { - delete move.secondaries; - // Technically not a secondary effect, but it is negated - if (move.id === 'clangoroussoulblaze') delete move.selfBoost; - // Actual negation of `AfterMoveSecondary` effects implemented in scripts.js - move.hasSheerForce = true; - } - }, - onBasePowerPriority: 21, - onBasePower(basePower, pokemon, target, move) { - if (move.hasSheerForce) return this.chainModify([5325, 4096]); - }, - onDamagingHit(damage, target, source, move) { - if (move.type === 'Fire') { - this.boost({def: 1, spd: 1}); - } - }, - name: "Aquila's Blessing", - gen: 8, - }, - - // vooper - qigong: { - desc: "This Pokemon's Defense is doubled, and it receives 1/2 damage from special attacks.", - onModifyDefPriority: 6, - onModifyDef(def) { - return this.chainModify(2); - }, - onSourceModifyDamage(damage, source, target, move) { - if (move.category === 'Special') { - return this.chainModify(0.5); - } - }, - name: "Qi-Gong", - gen: 8, - }, - - // yuki - combattraining: { - desc: "If this Pokemon is a Cosplay Pikachu forme, the first hit it takes in battle deals 0 neutral damage. Confusion damage also breaks the immunity.", - shortDesc: "(Pikachu-Cosplay only) First hit deals 0 damage.", - isPermanent: true, - onDamagePriority: 1, - onDamage(damage, target, source, effect) { - const cosplayFormes = [ - 'pikachucosplay', 'pikachuphd', 'pikachulibre', 'pikachupopstar', 'pikachurockstar', 'pikachubelle', - ]; - if ( - effect?.effectType === 'Move' && - cosplayFormes.includes(target.species.id) && !target.transformed && - !this.effectState.busted - ) { - this.add('-activate', target, 'ability: Combat Training'); - this.effectState.busted = true; - return 0; - } - }, - onCriticalHit(target, source, move) { - if (!target) return; - const cosplayFormes = [ - 'pikachucosplay', 'pikachuphd', 'pikachulibre', 'pikachupopstar', 'pikachurockstar', 'pikachubelle', - ]; - if (!cosplayFormes.includes(target.species.id) || target.transformed) { - 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) return; - const cosplayFormes = [ - 'pikachucosplay', 'pikachuphd', 'pikachulibre', 'pikachupopstar', 'pikachurockstar', 'pikachubelle', - ]; - if (!cosplayFormes.includes(target.species.id) || target.transformed) { - 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; - }, - name: "Combat Training", - gen: 8, - }, - // Modified Illusion to support SSB volatiles - illusion: { - inherit: true, - onEnd(pokemon) { - if (pokemon.illusion) { - this.debug('illusion cleared'); - let disguisedAs = this.toID(pokemon.illusion.name); - pokemon.illusion = null; - const details = pokemon.species.name + (pokemon.level === 100 ? '' : ', L' + pokemon.level) + - (pokemon.gender === '' ? '' : ', ' + pokemon.gender) + (pokemon.set.shiny ? ', shiny' : ''); - this.add('replace', pokemon, details); - this.add('-end', pokemon, 'Illusion'); - // Handle users whose names match a species - if (this.dex.species.get(disguisedAs).exists) disguisedAs += 'user'; - if (pokemon.volatiles[disguisedAs]) { - pokemon.removeVolatile(disguisedAs); - } - if (!pokemon.volatiles[this.toID(pokemon.name)]) { - const status = this.dex.conditions.get(this.toID(pokemon.name)); - if (status?.exists) { - pokemon.addVolatile(this.toID(pokemon.name), pokemon); - } - } - } - }, - }, - - // Modified various abilities to support Alpha's move & pilo's abiility - deltastream: { - inherit: true, - onAnySetWeather(target, source, weather) { - if (this.field.getWeather().id === 'deltastream' && !STRONG_WEATHERS.includes(weather.id)) return false; - }, - }, - desolateland: { - inherit: true, - onAnySetWeather(target, source, weather) { - if (this.field.getWeather().id === 'desolateland' && !STRONG_WEATHERS.includes(weather.id)) return false; - }, - }, - primordialsea: { - inherit: true, - onAnySetWeather(target, source, weather) { - if (this.field.getWeather().id === 'primordialsea' && !STRONG_WEATHERS.includes(weather.id)) return false; - }, - }, - forecast: { - inherit: true, - onUpdate(pokemon) { - if (pokemon.baseSpecies.baseSpecies !== 'Castform' || pokemon.transformed) return; - let forme = null; - switch (pokemon.effectiveWeather()) { - case 'sunnyday': - case 'desolateland': - if (pokemon.species.id !== 'castformsunny') forme = 'Castform-Sunny'; - break; - case 'raindance': - case 'primordialsea': - if (pokemon.species.id !== 'castformrainy') forme = 'Castform-Rainy'; - break; - case 'winterhail': - case 'heavyhailstorm': - case 'hail': - if (pokemon.species.id !== 'castformsnowy') forme = 'Castform-Snowy'; - break; - default: - if (pokemon.species.id !== 'castform') forme = 'Castform'; - break; - } - if (pokemon.isActive && forme) { - pokemon.formeChange(forme, this.effect, false, '[msg]'); - } - }, - }, - icebody: { - inherit: true, - desc: "If Hail or Heavy Hailstorm is active, this Pokemon restores 1/16 of its maximum HP, rounded down, at the end of each turn. This Pokemon takes no damage from Hail or Heavy Hailstorm.", - shortDesc: "Hail-like weather active: heals 1/16 max HP each turn; immunity to Hail-like weather.", - onWeather(target, source, effect) { - if (['heavyhailstorm', 'hail', 'winterhail'].includes(effect.id)) { - this.heal(target.baseMaxhp / 16); - } - }, - onImmunity(type, pokemon) { - if (['heavyhailstorm', 'hail', 'winterhail'].includes(type)) return false; - }, - }, - iceface: { - inherit: true, - desc: "If this Pokemon is an Eiscue, the first physical hit it takes in battle deals 0 neutral damage. Its ice face is then broken and it changes forme to Noice Face. Eiscue regains its Ice Face forme when Hail or Heavy Hailstorm begins or when Eiscue switches in while Hail or Heavy Hailstorm is active. Confusion damage also breaks the ice face.", - shortDesc: "If Eiscue, first physical hit taken deals 0 damage. Effect is restored in Hail-like weather.", - onStart(pokemon) { - if (this.field.isWeather(['heavyhailstorm', 'hail', 'winterhail']) && - pokemon.species.id === 'eiscuenoice' && !pokemon.transformed) { - this.add('-activate', pokemon, 'ability: Ice Face'); - this.effectState.busted = false; - pokemon.formeChange('Eiscue', this.effect, true); - } - }, - onWeatherChange() { - const pokemon = this.effectState.target; - if (this.field.isWeather(['heavyhailstorm', 'hail', 'winterhail']) && - pokemon.species.id === 'eiscuenoice' && !pokemon.transformed) { - this.add('-activate', pokemon, 'ability: Ice Face'); - this.effectState.busted = false; - pokemon.formeChange('Eiscue', this.effect, true); - } - }, - }, - slushrush: { - inherit: true, - shortDesc: "If a Hail-like weather is active, this Pokemon's Speed is doubled.", - onModifySpe(spe, pokemon) { - if (this.field.isWeather(['heavyhailstorm', 'hail', 'winterhail'])) { - return this.chainModify(2); - } - }, - }, - snowcloak: { - inherit: true, - desc: "If Heavy Hailstorm, Winter Hail, or Hail is active, this Pokemon's evasiveness is multiplied by 1.25. This Pokemon takes no damage from Heavy Hailstorm or Hail.", - shortDesc: "If a Hail-like weather is active, 1.25x evasion; immunity to Hail-like weathers.", - onImmunity(type, pokemon) { - if (['heavyhailstorm', 'hail', 'winterhail'].includes(type)) return false; - }, - onModifyAccuracy(accuracy) { - if (typeof accuracy !== 'number') return; - if (this.field.isWeather(['heavyhailstorm', 'hail', 'winterhail'])) { - this.debug('Snow Cloak - decreasing accuracy'); - return accuracy * 0.8; - } - }, - }, - // Modified Magic Guard for Alpha - magicguard: { - inherit: true, - shortDesc: "This Pokemon can only be damaged by direct attacks and Heavy Hailstorm.", - onDamage(damage, target, source, effect) { - if (effect.id === 'heavyhailstorm') return; - if (effect.effectType !== 'Move') { - if (effect.effectType === 'Ability') this.add('-activate', source, 'ability: ' + effect.name); - return false; - } - }, - }, - // Modified Unaware for Blaz's move - unaware: { - inherit: true, - 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['spd'] = 0; - boosts['accuracy'] = 0; - } - }, - }, - // Modified Stakeout for Hubriz to have a failsafe - stakeout: { - inherit: true, - onModifyAtkPriority: 5, - onModifyAtk(atk, attacker, defender) { - if (!defender?.activeTurns) { - this.debug('Stakeout boost'); - return this.chainModify(2); - } - }, - onModifySpAPriority: 5, - onModifySpA(atk, attacker, defender) { - if (!defender?.activeTurns) { - this.debug('Stakeout boost'); - return this.chainModify(2); - } - }, - }, -}; diff --git a/data/mods/ssb/conditions.ts b/data/mods/ssb/conditions.ts deleted file mode 100644 index f89d14e6b47f..000000000000 --- a/data/mods/ssb/conditions.ts +++ /dev/null @@ -1,2530 +0,0 @@ -import {FS} from '../../../lib'; -import {toID} from '../../../sim/dex-data'; - -// Similar to User.usergroups. Cannot import here due to users.ts requiring Chat -// This also acts as a cache, meaning ranks will only update when a hotpatch/restart occurs -const usergroups: {[userid: string]: string} = {}; -const usergroupData = FS('config/usergroups.csv').readIfExistsSync().split('\n'); -for (const row of usergroupData) { - if (!toID(row)) continue; - - const cells = row.split(','); - if (cells.length > 3) throw new Error(`Invalid entry when parsing usergroups.csv`); - usergroups[toID(cells[0])] = cells[1].trim() || ' '; -} - -export function getName(name: string): string { - const userid = toID(name); - if (!userid) throw new Error('No/Invalid name passed to getSymbol'); - - const group = usergroups[userid] || ' '; - return group + name; -} - -export const Conditions: {[k: string]: ModdedConditionData & {innateName?: string}} = { - /* - // Example: - userid: { - noCopy: true, - onStart() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Username')}|Switch In Message`); - }, - onSwitchOut() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Username')}|Switch Out Message`); - }, - onFaint() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Username')}|Faint Message`); - }, - // Innate effects go here - }, - IMPORTANT: Obtain the username from getName - */ - // Please keep statuses organized alphabetically based on staff member name! - abdelrahman: { - noCopy: true, - onStart() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Abdelrahman')}|good morning, i'm town`); - }, - onSwitchOut() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Abdelrahman')}|brb gonna go lynch scum`); - }, - onFaint() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Abdelrahman')}|I CC COP TOWN FAILED`); - }, - }, - adri: { - noCopy: true, - onStart() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Adri')}|This time will definitely be the one !`); - }, - onSwitchOut() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Adri')}|//afk`); - }, - onFaint() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Adri')}|Until next time...`); - }, - }, - aelita: { - noCopy: true, - onStart() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Aelita')}|The Scyphozoa's absorbing Aelita's memories!`); - }, - onSwitchOut() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Aelita')}|We scared it away but it will be back. We can't let it get ahold of Aelita's memories.`); - }, - onFaint() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Aelita')}|X.A.N.A. is finally finished for good.`); - }, - }, - aegii: { - noCopy: true, - onStart() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('aegii')}|shoot! take a pano~rama~ https://youtu.be/G8GaQdW2wHc`); - }, - onSwitchOut() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('aegii')}|${this.sample([`brb, buying albums`, `brb, downloading fancams`, `brb, streaming mvs`, `brb, learning choreos`])}`); - }, - onFaint() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('aegii')}|i forgot to stan loona...`); - }, - }, - aeonic: { - noCopy: true, - onStart() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Aeonic')}|What's bonkin?`); - }, - onSwitchOut() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Aeonic')}|I am thou, thou art I`); - }, - onFaint() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Aeonic')}|Guys the emoji movie wasn't __that bad__`); - }, - }, - aethernum: { - noCopy: true, - onStart() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Aethernum')}|Hlelo ^_^ Lotad is so cute, don't you think? But don't underestimate him!`); - }, - onSwitchOut() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Aethernum')}|Sinking in this sea of possibilities for now...but i'll float back once again!`); - }, - onFaint() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Aethernum')}|Ok, ok, i have procrastinated enough here, time to go ^_^' See ya around!`); - }, - }, - akir: { - noCopy: true, - onStart() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Akir')}|hey whats up`); - }, - onSwitchOut() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Akir')}|let me get back to you`); - }, - onFaint() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Akir')}|ah well maybe next time`); - }, - }, - alpha: { - noCopy: true, - onStart() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Alpha')}|eccomi dimmi`); - }, - onSwitchOut() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Alpha')}|FRATM FACI FRIDDU`); - }, - onFaint() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Alpha')}|caio`); - }, - }, - annika: { - noCopy: true, - onStart() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Annika')}|The circumstances of one's birth are irrelevant; it is what you do with the gift of life that determines who you are.`); - }, - onSwitchOut() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Annika')}|I'll be stronger when I'm back ^_^`); - }, - onFaint() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Annika')}|oh, I crashed the server again...`); - }, - }, - aquagtothepast: { - noCopy: true, - onStart() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('A Quag To The Past')}|Whatever happens, happens.`); - }, - onSwitchOut() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('A Quag To The Past')}|See you space cowboy...`); - }, - onFaint() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('A Quag To The Past')}|You're gonna carry that weight.`); - }, - }, - arby: { - noCopy: true, - onStart() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Arby')}|Time to win this :)`); - }, - onSwitchOut() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Arby')}|MSU need a sub`); - }, - onFaint() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Arby')}|Authhate is real.`); - }, - }, - archas: { - noCopy: true, - onStart() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Archas')}|Ready the main batteries, gentlemen! Hit ‘em hard and fast!`); - }, - onSwitchOut() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Archas')}|Helmsman, full reverse at speed!`); - }, - onFaint() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Archas')}|They say the captain always goes down with the ship...`); - }, - }, - arcticblast: { - noCopy: true, - onStart() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Arcticblast')}|words are difficult`); - }, - onSwitchOut() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Arcticblast')}|oh no`); - }, - onFaint() { - if (this.randomChance(1, 100)) { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Arcticblast')}|get **mished** kid`); - } else { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Arcticblast')}|single battles are bad anyway, why am I here?`); - } - }, - }, - awauser: { - noCopy: true, - onStart() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('awa!')}|awa!`); - }, - onSwitchOut() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('awa!')}|well, at least i didn't lose the game`); - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('awa!')}|or did i?`); - }, - onFaint() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('awa!')}|awawa?! awa awawawa awawa >:(`); - }, - }, - beowulf: { - noCopy: true, - onStart() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Beowulf')}|:^)`); - }, - onSwitchOut() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Beowulf')}|/me buzzes`); - }, - onFaint() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Beowulf')}|time for my own isekai`); - }, - onSourceFaint() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Beowulf')}|another one reincarnating into an isekai`); - }, - }, - biggie: { - noCopy: true, - onStart() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('biggie')}|gonna take you for a ride`); - }, - onSwitchOut() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('biggie')}|mahvel baybee!`); - }, - onFaint() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('biggie')}|it was all a dream`); - }, - }, - billo: { - noCopy: true, - onStart(source) { - let activeMon = source.side.foe.active[0].species.name; - if (!activeMon) activeMon = "Pokemon"; - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Billo')}|Your ${activeMon} looks hacked.`); - }, - onSwitchOut() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Billo')}|Let me inspect your Pokemon, brb`); - }, - onFaint() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Billo')}|Yep, definitely hacked.`); - }, - innateName: "Unaware", - shortDesc: "This Pokemon ignores other Pokemon's stat stages when taking or doing damage.", - // Unaware innate - onAnyModifyBoost(boosts, pokemon) { - const unawareUser = this.effectState.target; - if (unawareUser.illusion) return; - 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; - } - }, - }, - blaz: { - noCopy: true, - onStart() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Blaz')}|Give me, give me, give me the truth now oh oh oh oh`); - }, - onSwitchOut() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Blaz')}|Tell me... why? Please tell me why do we worry? Why? Why do we worry at all?`); - }, - onFaint() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Blaz')}|the game (lol u lost)`); - }, - }, - brandon: { - noCopy: true, - onStart() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Brandon')}|I didn't come here to play. I came here to slay!`); - }, - onSwitchOut() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Brandon')}|${this.sample([`I need to catch my breath`, `brb getting a snack`])}`); - }, - onFaint(pokemon) { - const foeName = pokemon.side.foe.active[0].illusion ? - pokemon.side.foe.active[0].illusion.name : pokemon.side.foe.active[0].name; - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Brandon')}|${this.sample([`This battle was rigga morris!`, `At least I'll snag Miss Congeniality...`, `This battle was rigged for ${foeName} anyway >:(`])}`); - }, - }, - brouha: { - noCopy: true, - onStart() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('brouha')}|lmf`); - }, - onSwitchOut() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('brouha')}|....`); - }, - onFaint() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('brouha')}|sobL`); - }, - }, - buffy: { - noCopy: true, - // No quotes requested - }, - cake: { - noCopy: true, - innateName: "h", - shortDesc: "On switch-in and at the end of every turn, this Pokemon changes type randomly.", - onStart(target, pokemon) { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Cake')}|AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA`); - // h innate - if (pokemon.illusion) return; - const typeList = [...this.dex.types.names()]; - this.prng.shuffle(typeList); - const firstType = typeList[0]; - this.prng.shuffle(typeList); - const secondType = typeList[0]; - const newTypes = [firstType]; - if (firstType !== secondType) newTypes.push(secondType); - this.add('html|h'); - this.add('-start', pokemon, 'typechange', newTypes.join('/'), '[silent]'); - pokemon.setType(newTypes); - }, - onSwitchOut(pokemon) { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Cake')}|${pokemon.side.name} is a nerd`); - }, - onFaint() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Cake')}|Chowder was a good show`); - }, - onResidualOrder: 26, - onResidualSubOrder: 1, - onResidual(pokemon) { - if (pokemon.illusion) return; - if (pokemon.activeTurns) { - const typeList = [...this.dex.types.names()]; - this.prng.shuffle(typeList); - const firstType = typeList[0]; - this.prng.shuffle(typeList); - const secondType = typeList[0]; - const newTypes = [firstType]; - if (firstType !== secondType) newTypes.push(secondType); - this.add('html|h'); - this.add('-start', pokemon, 'typechange', newTypes.join('/'), '[silent]'); - pokemon.setType(newTypes); - } - }, - }, - cantsay: { - noCopy: true, - onStart() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('cant say')}|haha volc go brrrr`); - }, - onSwitchOut() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('cant say')}|lol CTed`); - }, - onFaint() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('cant say')}|${this.sample(['imagine taking pokemon seriously when you can just get haxed', '/me plays curb your enthusiasm theme', 'bad players always get lucky'])}`); - }, - innateName: "Magic Guard", - shortDesc: "This Pokemon can only be damaged by direct attacks.", - // Magic Guard Innate - onDamage(damage, target, source, effect) { - if (target.illusion) return; - if (effect.effectType !== 'Move') { - if (effect.effectType === 'Ability') this.add('-activate', source, 'ability: ' + effect.name); - return false; - } - }, - }, - celine: { - noCopy: true, - onStart() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Celine')}|Support has arrived!`); - }, - onSwitchOut() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Celine')}|Brb writing`); - }, - onFaint() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Celine')}|'Tis only a flesh wound!`); - }, - }, - ckilgannon: { - noCopy: true, - onStart() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('c.kilgannon')}|Take a look to the sky just before you die`); - }, - onSwitchOut() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('c.kilgannon')}|Death does wait; there's no debate.`); - }, - onFaint() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('c.kilgannon')}|Memento mori.`); - }, - }, - coconut: { - noCopy: true, - // no quotes - }, - dogknees: { - noCopy: true, - onStart(source) { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('dogknees')}|Your opinion is wrong if you think cats are better than dogs ૮・ﻌ・ა`); - if (source.illusion) return; - this.add('-start', source, 'typechange', source.types.join('/'), '[silent]'); - }, - onSwitchOut() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('dogknees')}|Yes, dogs do have knees. Stop asking me.`); - }, - onFaint() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('dogknees')}|Nap time!`); - }, - }, - dragonwhale: { - noCopy: true, - // No quotes - }, - drampasgrandpa: { - noCopy: true, - onStart() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('drampa\'s grandpa')}|Where are my glasses?`); - }, - onSwitchOut() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('drampa\'s grandpa')}|Darn kids...`); - }, - onFaint() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('drampa\'s grandpa')}|Bah humbug!`); - }, - }, - dream: { - noCopy: true, - onStart() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('dream')}|It's Prime Time`); - }, - onSwitchOut() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('dream')}|oh no please god tell me we're dreaming`); - }, - onFaint() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('dream')}|perdemos`); - }, - }, - elgino: { - noCopy: true, - onStart(target, pokemon) { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Elgino')}|Time to save Hyrule!`); - if (pokemon.illusion) return; - this.add('-start', pokemon, 'typechange', pokemon.types.join('/'), '[silent]'); - }, - onSwitchOut() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Elgino')}|Hold on I need to stock up on ${this.sample(['Bombs', 'Arrows', 'Magic', 'Seeds'])}`); - }, - onFaint() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Elgino')}|I'm out of fairies D:!`); - }, - }, - emeri: { - noCopy: true, - onStart() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Emeri')}|hey !`); - }, - onSwitchOut() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Emeri')}|//busy`); - }, - onFaint() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Emeri')}|don't forget to chall SFG or Agarica in gen8ou`); - }, - }, - epicnikolai: { - noCopy: true, - onStart(source) { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('EpicNikolai')}|I never give up until I get something right, which means destroying you ☜(゚ヮ゚☜)`); - if (source.species.id !== 'garchompmega' || source.illusion) return; - this.add('-start', source, 'typechange', source.types.join('/'), '[silent]'); - }, - onSwitchOut() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('EpicNikolai')}|This wasn't as fun as I thought it would be, I'm out ¯_( ͡~ ͜ʖ ͡°)_/¯`); // eslint-disable-line no-irregular-whitespace - }, - onFaint() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('EpicNikolai')}|I like to keep a positive attitude even though it is hard sometimes <('o'<)~*/`); - }, - }, - estarossa: { - noCopy: true, - onStart() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('estarossa')}|honestly best pairing for hazard coverage wtih molt is like molt + tsareena/dhelmise`); - }, - onSwitchOut() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('estarossa')}|sand balance <333`); - }, - onFaint() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('estarossa')}|*eurgh*`); - }, - }, - explodingdaisies: { - noCopy: true, - onStart() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('explodingdaisies')}|Turn and run now, and I will mercifully pretend this never happened.`); - }, - onSwitchOut() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('explodingdaisies')}|You are beneath me, and it shows.`); - }, - onFaint() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('explodingdaisies')}|Unacceptable!`); - }, - }, - fart: { - noCopy: true, - onStart(source) { - let activeMon; - activeMon = source.side.foe.active[0]; - activeMon = activeMon.illusion ? activeMon.illusion.name : activeMon.name; - const family = ['aethernum', 'trickster', 'celestial', 'gimmick', 'zalm', 'aelita', 'biggie']; - if (this.toID(activeMon) === 'hoeenhero') { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('fart')}|🎵 it's friday, friday, gotta get down on friday 🎵`); - } else if (this.toID(activeMon) === 'grimauxiliatrix') { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('fart')}|howdy ho, neighbor`); - } else if (this.toID(activeMon) === 'fart') { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('fart')}|How Can Mirrors Be Real If Our Eyes Aren't Real`); - } else if (family.includes(this.toID(activeMon))) { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('fart')}|hey, hey, hey. ${activeMon} is OK`); - } else { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('fart')}|rats, rats, we are the rats`); - } - }, - onSwitchOut() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('fart')}|if I can't win this game, then I'll make it boring for everyone.`); - }, - onFaint(pokemon) { - let activeMon; - activeMon = pokemon.side.foe.active[0]; - activeMon = this.toID(activeMon.illusion ? activeMon.illusion.name : activeMon.name); - const family = ['aethernum', 'trickster', 'celestial', 'gimmick', 'zalm', 'aelita', 'biggie']; - if (family.includes(activeMon)) { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('fart')}|at least I wasn't boring, right?`); - } else { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('fart')}|oy, I die`); - } - }, - }, - felucia: { - noCopy: true, - onStart(source) { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Felucia')}|battlesignup! I dropped my dice somewhere and now all I can do is make you play with them (join using %join one)`); - if (source.illusion) return; - this.add('-start', source, 'typechange', source.types.join('/'), '[silent]'); - }, - onSwitchOut() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Felucia')}|battlesignup: I lost connection to a player so I guess I'll get a new one (/me in to sub)`); - }, - onFaint() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Felucia')}|%remp Felucia`); - }, - }, - finland: { - noCopy: true, - onStart(source) { - const roll = this.random(100); - let message: string; - if (roll < 70) { - message = 'pog'; - } else if (roll < 80) { - message = 'very pog'; - } else if (roll < 90) { - message = 'poggaroo'; - } else if (roll < 95) { - message = 'PogU'; - } else { - message = 'poog'; - } - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Finland')}|${message}`); - if (source.illusion) return; - this.boost({spa: 1, spd: 1}, source); - }, - onBeforeMovePriority: 0.5, - onBeforeMove(attacker, defender, move) { - if (attacker.illusion) return; - attacker.clearBoosts(); - this.add('-clearboost', attacker); - if (move.category === 'Status') { - this.boost({def: 1, spd: 1}, attacker); - } else { - this.boost({spa: 1, spe: 1}, attacker); - } - }, - innateName: "Fickle Decorator", - shortDesc: "Calm Mind on switch-in. Changes boosts depending on move used.", - onSwitchOut() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Finland')}|i hope running away is safe on shield?`); - }, - onFaint() { - if (this.randomChance(99, 100)) { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Finland')}|FINLAND!!!`); - } else { - // personally i like young link from oot3d and mm3d - sp - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Finland')}|i hate young link. i hate you i hate you i hate you. i hate you. young link i hate you. i despise you. i loathe you. your existence is an affront to my person. to my own existence. it's an offense. a despicable crime. a wretched abomination. even worse than mega man. a cruel barbarity. an awful curse from capricious, pernicious fate. oh do i hate young link. i scorn you. i cast you away to ignominy and hatred even worse than mega man. you are shameful young link, and you should never show your face again`); - } - }, - }, - frostyicelad: { - noCopy: true, - onStart() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('frostyicelad ❆')}|Oh i guess its my turn now! Time to sweep!`); - }, - onSwitchOut(source) { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('frostyicelad ❆')}|Hey! ${source.side.name} why dont you keep me in and let me sweep? Mean.`); - }, - onFaint() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('frostyicelad ❆')}|So c-c-cold`); - }, - }, - gallantspear: { - noCopy: true, - onStart() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('gallant\'s pear')}|**Rejoice! The one to inherit all Rider powers, the time king who will rule over the past and the future.**`); - }, - onSwitchOut() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('gallant\'s pear')}|My Overlord..`); - }, - onFaint() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('gallant\'s pear')}|Damn you, Decade!!!`); - }, - }, - gimmick: { - noCopy: true, - onStart() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Gimmick')}|Mama, they say I'm a TRRST`); - }, - onSwitchOut() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Gimmick')}|Ic3peak to you later`); - }, - onFaint() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Gimmick')}|I did nothing wrong (but I got on the blacklist)`); - }, - // Unburden Innate - onAfterUseItem(item, pokemon) { - if (pokemon !== this.effectState.target) return; - pokemon.addVolatile('unburden'); - }, - onTakeItem(item, pokemon) { - pokemon.addVolatile('unburden'); - }, - onEnd(pokemon) { - pokemon.removeVolatile('unburden'); - }, - innateName: "Unburden", - desc: "If this Pokemon loses its held item for any reason, its Speed is doubled. This boost is lost if it switches out or gains a new item.", - shortDesc: "Speed is doubled on held item loss; boost is lost if it switches or gets new item.", - }, - gmars: { - noCopy: true, - onStart() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('GMars')}|It's ya boy GEEEEEEEEMARS`); - }, - onSwitchOut() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('GMars')}|Who switches out a Minior in prime position?`); - }, - onFaint() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('GMars')}|Follow me on bandcamp`); - }, - }, - grimauxiliatrix: { - noCopy: true, - onStart() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('grimAuxiliatrix')}|${this.sample(['THE JUICE IS LOOSE', 'TOOTHPASTE\'S OUT OF THE TUBE', 'PREPARE TO DISCORPORATE'])}`); - }, - onFaint() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('grimAuxiliatrix')}|${this.sample(['NOT LIKE THIS', 'HALT - MODULE CORE HEMORRHAGE', 'AAAAAAAAAAAAAAAAAAA', 'Change da world... my final message. Goodb ye.'])}`); - }, - }, - hoeenhero: { - noCopy: true, - onStart() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('HoeenHero')}|A storm is brewing...`); - }, - onSwitchOut() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('HoeenHero')}|The eye of the hurricane provides a brief respite from the storm.`); - }, - onFaint() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('HoeenHero')}|All storms eventually disipate.`); - }, - }, - hubriz: { - noCopy: true, - onStart() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Hubriz')}|Free hugs!`); - }, - onSwitchOut() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Hubriz')}|The soil's pH level is too high. I'm out!`); - }, - onFaint() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Hubriz')}|Delicate Flower Quest failed...`); - }, - }, - hydro: { - noCopy: true, - onStart(pokemon) { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Hydro')}|Person reading this is a qt nerd and there is absolutely NOTHING u can do about it :)`); - if (pokemon.illusion) return; - this.add('-start', pokemon, 'typechange', pokemon.types.join('/'), '[silent]'); - }, - onSwitchOut() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Hydro')}|brb, taking a break from ur nerdiness`); - }, - onFaint() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Hydro')}|RUUUUUDEEE`); - }, - }, - inactive: { - noCopy: true, - onStart() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Inactive')}|Are you my nightmare? Or am I yours?`); - }, - onSwitchOut() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Inactive')}|This is not the end...`); - }, - onFaint() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Inactive')}|/me turns to stone and crumbles`); - }, - }, - instructuser: { - noCopy: true, - onStart() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('instruct')}|lets drink to a great time!`); - }, - onSwitchOut() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Swagn')}|Hey, instruct. Here's those 15,000 walls of text you ordered. :3`); - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('instruct')}|ya know, why __do__ you always flood my dms?`); - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('instruct')}|whatever im just gonna go get some more coke`); - }, - onFaint() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('instruct')}|wait did we run out of coca-cola?`); - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('instruct')}|laaaaaaaaaaame`); - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('instruct')}|yall suck im going home`); - }, - innateName: "Last Laugh", - desc: "Upon fainting to an opponent's direct attack, this Pokemon deals damage to all Pokemon that have made contact with it equal to 50% of their max HP. This damage cannot KO Pokemon.", - shortDesc: "Upon foe KOing user, deal 50% of their max HP to all foes that this Pokemon contacted.", - // Innate - onSourceHit(target, source, move) { - if (source.illusion) return; - if (!move || !target) return; - if (target !== source && move.category !== 'Status') { - if (move.flags['contact']) { - if (!target.m.marked) this.add('-message', `${target.name} was marked by an unknown being...`); - target.m.marked = true; - } - } - }, - onDamagingHit(damage, target, source, move) { - if (target.illusion) return; - if (this.checkMoveMakesContact(move, source, target)) { - if (!source.m.marked) this.add('-message', `${source.name} was marked by an unknown being...`); - source.m.marked = true; - } - if (!target.hp) { - for (const foe of source.side.pokemon) { - if (foe.fainted || !foe.hp) continue; - if (!foe.m.marked) continue; - this.add('-activate', target, 'ability: Last Laugh'); - let collateral = this.clampIntRange(foe.baseMaxhp / 2, 1); - this.add('-message', `${foe.name} became insane and attacked themselves!`); - if (collateral >= foe.hp) collateral = foe.hp - 1; - foe.hp = foe.hp - collateral; - if (foe === source) { - this.add('-damage', foe, foe.getHealth); - } - } - } - }, - }, - iyarito: { - noCopy: true, - onStart() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Iyarito')}|Madre de Dios, ¡es el Pollo Diablo!`); - }, - onSwitchOut() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Iyarito')}|Well, you're not taking me without a fight!`); - }, - onFaint() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Iyarito')}|RIP Patrona`); - }, - }, - jett: { - noCopy: true, - onStart() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Jett')}|It's a good day for a hunt.`); - }, - onSwitchOut() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Jett')}|I'll be back for more.`); - }, - onFaint() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Jett')}|They got lucky.`); - }, - }, - jho: { - noCopy: true, - onStart() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Jho')}|Hey there party people`); - }, - onSwitchOut() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Jho')}|The Terminator(1984), 00:57:10`); - }, - onFaint() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Jho')}|Unfortunately, CAP no longer accepts custom elements`); - }, - }, - jordy: { - noCopy: true, - onStart() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Jordy')}|I heard there's a badge here. Please give it to me immediately.`); - }, - onSwitchOut() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Jordy')}|Au Revoir. Was that right?`); - }, - onFaint() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Jordy')}|hjb`); - }, - }, - kaijubunny: { - noCopy: true, - onStart(source) { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Kaiju Bunny')}|I heard SOMEONE wasn't getting enough affection!  ̄( ÒㅅÓ) ̄`); - if (source.species.id !== 'lopunnymega' || source.illusion) return; - this.add('-start', source, 'typechange', source.types.join('/'), '[silent]'); - }, - onSwitchOut() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Kaiju Bunny')}|Brb, need more coffee  ̄( =ㅅ=) ̄`); - }, - onFaint() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Kaiju Bunny')}|Wow, okay, r00d  ̄(ಥㅅಥ) ̄`); - }, - }, - kalalokki: { - noCopy: true, - onStart() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Kalalokki')}|(•_•)`); - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Kalalokki')}|( •_•)>⌐■-■`); - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Kalalokki')}|(⌐■_■)`); - }, - onFaint() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Kalalokki')}|(⌐■_■)`); - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Kalalokki')}|( •_•)>⌐■-■`); - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Kalalokki')}|(x_x)`); - }, - innateName: "Sturdy", - shortDesc: "If this Pokemon is at full HP, it survives one hit with at least 1 HP. Immune to OHKO.", - // Sturdy Innate - onTryHit(pokemon, target, move) { - if (target.illusion) return; - if (move.ohko) { - this.add('-immune', pokemon, '[from] ability: Sturdy'); - return null; - } - }, - onDamagePriority: -100, - onDamage(damage, target, source, effect) { - if (target.illusion) return; - if (target.hp === target.maxhp && damage >= target.hp && effect && effect.effectType === 'Move') { - this.add('-ability', target, 'Sturdy'); - return target.hp - 1; - } - }, - }, - kennedy: { - noCopy: true, - onStart() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Kennedy')}|up the reds`); - }, - onSwitchOut() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Kennedy')}|brb Jayi is PMing me (again) -_-`); - }, - onFaint() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Kennedy')}|I'm not meant to score goals anyway, I'm a defensive striker.`); - }, - }, - kev: { - noCopy: true, - onStart() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Kev')}|Sorry for raining on your parade`); - }, - onSwitchOut() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Kev')}|Rain, rain, go away, come again another day`); - }, - onFaint() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Kev')}|I guess I'm all washed up...`); - }, - }, - kingbaruk: { - noCopy: true, - onStart() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Kingbaruk')}|:cute:`); - }, - onSwitchOut() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Kingbaruk')}|//none`); - }, - onFaint() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Kingbaruk')}|Fijne avond nog`); - }, - }, - kingswordyt: { - noCopy: true, - onStart() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('KingSwordYT')}|Mucho texto`); - }, - onSwitchOut() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('KingSwordYT')}|Hasta la próximaaaa`); - }, - onFaint() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('KingSwordYT')}|**__Se anula el host__**`); - }, - }, - kipkluif: { - noCopy: true, - onStart() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Kipkluif')}|Please play LCUU, it's fun`); - }, - onSwitchOut() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Kipkluif')}| /teleport`); - }, - onFaint() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Kipkluif')}|I've failed you.. I pray you hurry.. with those reinforcments.. you promised..`); - }, - }, - kris: { - innateName: "phuck", - desc: "If this Pokemon is an Unown forme, it is immune to indirect damage and transforms into a different Unown letter forme, aside from ! and ?, at the end of each turn.", - shortDesc: "Unown: Magic Guard + change letter every turn.", - noCopy: true, - onStart(source) { - const foeName = source.side.foe.active[0].illusion ? - source.side.foe.active[0].illusion.name : source.side.foe.active[0].name; - if (foeName === 'Aeonic' || source.side.foe.name === 'Aeonic') { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Kris')}|HAPPY BIRTHDAY AEONIC!!!!`); - } else { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Kris')}|hi ${foeName}`); - } - }, - onSwitchOut(source) { - const foeName = source.side.foe.active[0].illusion ? - source.side.foe.active[0].illusion.name : source.side.foe.active[0].name; - if (foeName === 'Aeonic' || source.side.foe.name === 'Aeonic') { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Kris')}|HAPPY BIRTHDAY AEONIC!!!!`); - } else { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Kris')}|bye ${foeName}`); - } - }, - onFaint(target) { - const foeName = target.illusion ? - target.illusion.name : target.name; - if (foeName === 'Aeonic' || target.side.name === 'Aeonic') { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Kris')}|HAPPY BIRTHDAY AEONIC!!!!`); - } else { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Kris')}|Fortnite Battle Royale`); - } - }, - // phuck innate - onDamage(damage, target, source, effect) { // Magic Guard - if (effect.id === 'heavyhailstorm') return; - if (target.illusion) return; - if (!target.species.id.includes('unown')) return; - if (effect.effectType !== 'Move') { - if (effect.effectType === 'Ability') this.add('-activate', source, 'ability: ' + effect.name); - return false; - } - }, - onResidual(pokemon) { - if (pokemon.illusion) return; - if (!pokemon.species.id.includes('unown')) return; - // So this doesn't activate upon switching in - if (pokemon.activeTurns < 1) return; - const unownLetters = 'abcdefghijklmnopgrstuvwxyz'.split(''); - const currentFormeID = this.toID(pokemon.set.species); - const currentLetter = currentFormeID.charAt(5) || 'a'; - const chosenLetter = this.sample(unownLetters.filter(letter => letter !== currentLetter)); - // Change is permanent so when you switch out you keep the letter - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Kris')}|watch this`); - if (chosenLetter === 'w') { - this.add('-activate', pokemon, 'ability: phuck'); - pokemon.formeChange(`unownw`, this.effect, true); - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Kris')}|W? More like L`); - this.add('-activate', pokemon, 'ability: phuck'); - pokemon.formeChange(`unownl`, this.effect, true); - this.hint(`There are no W Pokemon that work with Kris's signature move, so we're counting this as a loss`); - } else if (chosenLetter === 'u') { - this.add('-activate', pokemon, 'ability: phuck'); - pokemon.formeChange(`unownu`, this.effect, true); - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Kris')}|U? I'm already an Unown, no`); - this.add('-activate', pokemon, 'ability: phuck'); - const chosenLetter2 = this.sample(unownLetters.filter(letter => letter !== 'u' && letter !== 'w')); - pokemon.formeChange(`unown${chosenLetter2}`, this.effect, true); - this.hint(`There are no U Pokemon that work with Kris's signature move, so we're counting this as a loss`); - } else { - this.add('-activate', pokemon, 'ability: phuck'); - pokemon.formeChange(`unown${chosenLetter === 'a' ? '' : chosenLetter}`, this.effect, true); - } - }, - }, - lamp: { - noCopy: true, - onStart(pokemon) { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Lamp')}|DUDE HI ${pokemon.side.foe.name} (:`); - }, - onSwitchOut(pokemon) { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Lamp')}|bye ${pokemon.side.foe.name} :)`); - }, - onFaint() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Lamp')}|no u`); - }, - }, - lionyx: { - noCopy: true, - onStart() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Lionyx')}|Hi, this is ps-chan, how may I help you, user-kun? (。◕‿‿◕。)`); - }, - onSwitchOut() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Lionyx')}|Teclis au secours`); - }, - onFaint() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Lionyx')}|The cold never bothered me anyway...`); - }, - }, - litteleven: { - noCopy: true, - onStart() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Litt♥Eleven')}|The coin is flipped, what follows is destiny alone.`); - }, - onSwitchOut() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Litt♥Eleven')}|Looks like my business is finished here... for now.`); - }, - onFaint() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Litt♥Eleven')}|Perhaps, coin tossing isn't the optimal way to win a war...`); - }, - }, - lunalauser: { - noCopy: true, - onStart() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Lunala')}|o bella`); - }, - onSwitchOut() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Lunala')}|Condivido schermo cosi' guardiamo i tre porcellini?`); - }, - onFaint() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Lunala')}|BE... Ok mejo chiudere gioco... vedo documentario su Bibbia`); - }, - }, - madmonty: { - noCopy: true, - onStart() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Mad Monty ¾°')}|Ah, the sweet smell of rain... Oh! Hi there!`); - }, - onSwitchOut() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Mad Monty ¾°')}|Hey, I was enjoying the weather! Awww...`); - }, - onFaint() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Mad Monty ¾°')}|Nooo, if I go, who will stop the llamas?`); - }, - }, - majorbowman: { - noCopy: true, - onStart() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('MajorBowman')}|Aaaand Cracktion!`); - }, - onSwitchOut() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('MajorBowman')}|This isn't Maury Povich!`); - }, - onFaint() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('MajorBowman')}|Never loved ya.`); - }, - }, - marshmallon: { - noCopy: true, - onStart() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Marshmallon')}|I'm hungry. Are you edible? c:`); - }, - onSwitchOut() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Marshmallon')}|RAWWWR`); - }, - onFaint() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Marshmallon')}|I'm still hungry. rawr. :c`); - }, - }, - meicoo: { - noCopy: true, - onStart() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Meicoo')}|cool quiz`); - }, - onSwitchOut() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Meicoo')}|/leavehunt`); - }, - onFaint() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Meicoo')}|/endhunt`); - }, - }, - mitsuki: { - noCopy: true, - onStart() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Mitsuki')}|alguem quer batalha?????`); - }, - onSwitchOut(source) { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Mitsuki')}|You're weak, ${source.side.foe.name}. Why? Because you lack... hatred.`); - }, - onFaint() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Mitsuki')}|THIS WORLD SHALL KNOW P A I N`); - }, - }, - n10sit: { - noCopy: true, - onStart() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('n10siT')}|Heheheh... were you surprised?`); - }, - onSwitchOut() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('n10siT')}|Heheheh... did I scare you?`); - }, - onFaint() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('n10siT')}|Hoopa never saw one of those!`); - }, - }, - naziel: { - noCopy: true, - onStart() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Naziel')}|ay ola soy nasieeeeeeel`); - }, - onSwitchOut() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Naziel')}|YAY, I WILL NOT DIE THIS TIME`); - }, - onFaint() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Naziel')}|Toy xikito no puedo ;-;`); - }, - }, - theia: { - noCopy: true, - onStart() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Theia')}|What's up nerds`); - }, - onSwitchOut() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Theia')}|cya nerds later`); - }, - onFaint() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Theia')}|nerd`); - }, - innateName: "RSUA", - shortDesc: "+1 priority to status moves. 1.5x Defense and Special Defense.", - // Innate Prankster and Eviolite - onModifyPriority(priority, pokemon, target, move) { - if (move?.category === 'Status') { - move.pranksterBoosted = true; - return priority + 1; - } - }, - onModifyDefPriority: 2, - onModifyDef(def, pokemon) { - if (pokemon.illusion) return; - return this.chainModify(1.5); - }, - onModifySpDPriority: 2, - onModifySpD(spd, pokemon) { - if (pokemon.illusion) return; - return this.chainModify(1.5); - }, - }, - notater517: { - noCopy: true, - onStart() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Notater517')}|nyaa~... I mean, 'tis a swell day to twirl one's mustache, isn't it?!`); - }, - onSwitchOut() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Notater517')}|/me corrupt trivia noises`); - }, - onFaint() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Notater517')}|This is probably a good time to fix my sleep schedule`); - }, - }, - nui: { - noCopy: true, - onStart() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('nui')}|/html `); - }, - onSwitchOut() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('nui')}|/html `); - }, - onFaint() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('nui')}|/html `); - }, - }, - overneat: { - noCopy: true, - onStart(source) { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Overneat')}|Lets end this ${source.side.foe.name}!!`); - if (source.species.id !== 'absolmega' || source.illusion) return; - this.add('-start', source, 'typechange', source.types.join('/'), '[silent]'); - }, - onSwitchOut() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Overneat')}|I can do better!`); - }, - onFaint() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Overneat')}|I was to cocky...`); - }, - }, - om: { - noCopy: true, - onStart() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('OM~!')}|What's Up Gamers`); - }, - onSwitchOut() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('OM~!')}|Let me just ${this.sample(['host murder for the 100th time', 'clean out scum zzz', 'ladder mnm rq'])}`); - }, - onFaint() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('OM~!')}|ugh, I ${this.sample(['rolled a 1, damnit.', 'got killed night 1, seriously?', 'got v-create\'d by fucking dragapult lmaoo'])}`); - }, - }, - pants: { - noCopy: true, - onStart() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('pants')}|neat`); - }, - onSwitchOut(source) { - if (source.side.sideConditions.givewistfulthinking) { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('pants')}|brb contemplating things`); - } else { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('pants')}|brb dying a little`); - } - }, - onFaint() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('pants')}|how do you even knock out something that's already dead? i call bs`); - }, - }, - paradise: { - noCopy: true, - onStart() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Paradise ╱╲☼')}|You ever notice that the first thing a PS tryhard does is put their PS auth in their smogon signature?`); - }, - onSwitchOut() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Paradise ╱╲☼')}|Pokemon Showdown copypastas have to be among the worst I've seen on any website. People spam garbage over and over until eventually the mods get fed up and clamp down on spam. I don't blame them for it. Have you ever seen a copypasta fail as hard as the dead memes on this website? There are mods on here who still think that "Harambe" and "Damn Daniel" are the peak of comedy. Not to mention that there are rooms on here that don't even talk about pokemon lol. Yeah, I don't see this website lasting more than 2 years, I'd suggest becoming a mod somewhere else.`); - }, - onFaint(pokemon) { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Paradise ╱╲☼')}|Paradise has been kicked, not banned, therefore you could still potentially invite them back. However, do not do this @${pokemon.side.name}, unless of course, you want to be banned too, because if you invite them back you and Paradise will both be banned.`); - }, - }, - partman: { - noCopy: true, - onStart(source) { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('PartMan')}|${this.sample([`OMA HI ${source.side.name.toUpperCase()} BIG FAN`, `HYDRO IS A NERD`, `Greetings, today we are all gathered here to pay respects to - wait, this is only ${source.side.foe.name}'s funeral. Never mind.`, `__I'm on fiiiiiiiiiiire__`, `/me hugs`, `A SACRIFICE FOR SNOM`, `${source.side.name} more like nerd`, `NER`])}`); - }, - onSwitchOut(source) { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('PartMan')}|Hi ${source.side.name}, I'm PartMan!`); - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('PartMan')}|Hi PartMan, I'm PartMan!`); - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('PartMan')}|Hi PartMan, I'm PartMan!`); - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Hydro')}|/log PartMan was muted by Hydro for 7 minutes. (flood)`); - }, - onFaint() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('PartMan')}|${this.sample(['B-booli. >.<', 'Remember to dab on iph', 'Excuse me what', 'RUDE', ':pout:', '/html '])}`); - }, - }, - peapodc: { - noCopy: true, - onStart() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('peapod c')}|/me sprints into the room`); - }, - onSwitchOut() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('peapod c')}|Must maintain m o m e n t u m`); - }, - onFaint() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('peapod c')}|They say sleep is the cousin of death — but even ghosts need to sleep!`); - }, - }, - perishsonguser: { - noCopy: true, - onStart() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Perish Song')}|(╯°□°)╯︵ ┻━┻`); - }, - onSwitchOut() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Perish Song')}|┬──┬◡ノ(° -°ノ)`); - }, - onFaint() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Perish Song')}|Thanks for coming to my TED talk.`); - }, - }, - phiwings99: { - noCopy: true, - onStart() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('phiwings99')}|Pick.`); - }, - onSwitchOut() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('phiwings99')}|I'm boated.`); - }, - onFaint() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('phiwings99')}|God, Nalei is fucking terrible at this game.`); - }, - }, - piloswinegripado: { - noCopy: true, - onStart() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('piloswine gripado')}|Suave?`); - }, - onSwitchOut() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('piloswine gripado')}|cya frend :)`); - }, - onFaint() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('piloswine gripado')}|This was lame :/`); - }, - }, - pirateprincess: { - noCopy: true, - onStart(source) { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('PiraTe Princess')}|Ahoy! o/`); - }, - onSwitchOut() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('PiraTe Princess')}|brb making tea`); - }, - onFaint() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('PiraTe Princess')}|I failed my death save`); - }, - onHit(target, source, move) { - if (move?.effectType === 'Move' && target.getMoveHitData(move).crit) { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('PiraTe Princess')}|NATURAL 20!!!`); - } - }, - }, - psynergy: { - noCopy: true, - onStart() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Psynergy')}|Will you survive?`); - }, - onSwitchOut() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Psynergy')}|yadon moment`); - }, - onFaint() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Psynergy')}|oh`); - }, - }, - ptoad: { - noCopy: true, - onStart() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('ptoad')}|I'm ptoad.`); - }, - onSwitchOut() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('ptoad')}|Bye, ribbitch!`); - }, - onFaint() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('ptoad')}|OKKKK DUUUDE`); - }, - innateName: "Sticky Hold", - shortDesc: "This Pokemon cannot lose its held item due to another Pokemon's attack.", - // Sticky Hold Innate - onTakeItem(item, pokemon, source) { - if (this.suppressingAbility(pokemon) || !pokemon.hp || pokemon.item === 'stickybarb') return; - if (!this.activeMove) throw new Error("Battle.activeMove is null"); - if ((source && source !== pokemon) || this.activeMove.id === 'knockoff') { - this.add('-activate', pokemon, 'ability: Sticky Hold'); - return false; - } - }, - }, - rabia: { - noCopy: true, - onStart() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Rabia')}|eternally`); - }, - onSwitchOut() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Rabia')}|rabia`); - }, - onFaint() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Rabia')}|im top 500 in relevant tiers and lead gp, i have 8 badges, im fine, gg`); - }, - }, - rach: { - noCopy: true, - onStart() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Rach')}|Hel-lo`); - }, - onSwitchOut() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Rach')}|I was doing better alone`); - }, - onFaint() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Rach')}|I'm all good already, so moved on, it's scary`); - }, - }, - rageuser: { - noCopy: true, - onStart() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Rage')}|/html `); - }, - onSwitchOut() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Rage')}|im off, cya lads`); - }, - onFaint() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Rage')}|/me quits`); - }, - }, - raihankibana: { - noCopy: true, - onStart() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Raihan Kibana')}|Hi gm`); - }, - onSwitchOut() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Raihan Kibana')}|Ight Imma head out`); - }, - onFaint() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Raihan Kibana')}|Grr bork bork :(`); - }, - }, - rajshoot: { - noCopy: true, - onStart() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Raj.Shoot')}|Plaza Power!`); - }, - onSwitchOut() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Raj.Shoot')}|We'll be back!`); - }, - onFaint() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Raj.Shoot')}|You'll join me in the shadow realm soon....`); - }, - }, - ransei: { - noCopy: true, - onStart() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Ransei')}|Sup! This is Gen 8 so imma run an Eternamax set. Best of luck. You’ll need it :^)`); - }, - onFaint(pokemon) { - const target = pokemon.side.foe.active[0]; - if (!target || target.fainted || target.hp <= 0) { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Ransei')}|Ahah yes you got rekt! Welcome to Hackmons! gg m8!`); - } else { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Ransei')}|ripsei... Ok look you might’ve won this time but I kid you not you’re losing next game!`); - } - }, - }, - ravioliqueen: { - noCopy: true, - onStart() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('RavioliQueen')}|The Noodle Noble has Arrived!`); - }, - onSwitchOut() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('RavioliQueen')}|Time to spaghett out of here!`); - }, - onFaint() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('RavioliQueen')}|This is impastable!`); - }, - innateName: "Pitch Black Witch", - desc: "When this Pokemon sets or switches into Pitch Black errain, its Special Attack and Special Defense are boosted by 1 stage. If this Pokemon gets hit while Pitch Black Terrain is up, it gets +1 speed", - shortDesc: "Pitch Black Terrain: Calm Mind on switch-in, +1 Spe when attacked.", - // Coded in the terrain itself - }, - robb576: { - noCopy: true, - onStart(target, pokemon) { - if (pokemon.side.pokemonLeft === 1) { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Robb576')}|This is our last stand. Give it everything you got ${pokemon.side.name}!`); - } else { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Robb576')}|1, 2, 3, 4, dunno how to count no more!`); - } - }, - onSwitchOut() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Robb576')}|5, 7, 6, I will be right back into the mix!`); - }, - onFaint(pokemon) { - if (pokemon.species.name === "Necrozma-Ultra") { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Robb576')}|gg better luck next time. Sorry I couldn't handle them all :^(`); - } else { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Robb576')}|8, 9, 10, it has been a pleasure man!`); - } - }, - }, - sectonia: { - noCopy: true, - onStart() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Sectonia')}|I love one (1) queen bee`); - }, - onSwitchOut() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Sectonia')}|My search for my lost queen continues....`); - }, - onFaint() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Sectonia')}|NOOOOOO NOT THE JELLY BABY`); - }, - }, - segmr: { - noCopy: true, - onStart() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Segmr')}|*awakens conquerors haki* Greetings.`); - }, - onSwitchOut() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Segmr')}|Lemme show you this`); - this.add(`l|Segmr`); - }, - onFaint(pokemon) { - const name = pokemon.side.foe.active[0].illusion ? - pokemon.side.foe.active[0].illusion.name : pokemon.side.foe.active[0].name; - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Segmr')}|I'm sorry ${name} but could you please stop talking to me?`); - }, - }, - sejesensei: { - noCopy: true, - onStart() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('sejesensei')}|yoyo, what’ve you been reading lately`); - }, - onSwitchOut() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('sejesensei')}|bbl, gonna go read some manga`); - }, - onFaint() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('sejesensei')}|B-but, this didn’t happen in the manga…`); - }, - }, - seso: { - noCopy: true, - onStart() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Seso')}|I have good spacial awareness, and I'm pretty comfortable with a sword.`); - }, - onSwitchOut() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Seso')}|In the blink of an eye.`); - }, - onFaint() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Seso')}|I feel just, you know, defeated.`); - }, - }, - shadecession: { - noCopy: true, - onStart() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Shadecession')}|Better put on my Shadecessions`); - }, - onSwitchOut() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Shadecession')}|⌐■_■`); - }, - onFaint() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Shadecession')}|ah, gg fam`); - }, - }, - softflex: { - noCopy: true, - onStart() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Soft Flex')}|:]`); - }, - onFaint() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Soft Flex')}|:[`); - }, - }, - spandan: { - noCopy: true, - onStart() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Spandan')}|Mareanie!`); - }, - onSwitchOut() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Spandan')}|You can't end this toxic relationship just like that!`); - }, - onFaint() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Spandan')}|You didnt do shit. I coded myself to faint.`); - }, - }, - struchni: { - noCopy: true, - onStart() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Struchni')}|~tt newgame`); - }, - onSwitchOut(source) { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Struchni')}|~tt endgame`); - }, - onFaint() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Struchni')}|**selfveto**`); - }, - }, - teclis: { - noCopy: true, - onStart() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Teclis')}|Fire at will!`); - }, - onSwitchOut() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Teclis')}|A spark remains...`); - }, - onFaint() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Teclis')}|You set my soul on fire!`); - }, - }, - temp: { - noCopy: true, - onStart() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('temp')}|hi, i'm here to drop dracos`); - }, - onSwitchOut() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('temp')}|how did I not win yet`); - }, - onFaint() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('temp')}|oh I died`); - }, - }, - theimmortal: { - noCopy: true, - onStart(source) { - const foe = source.side.foe.active[0]; - const foeName = foe.illusion ? foe.illusion.name : foe.name; - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('The Immortal')}|${!foe || foe.fainted || foe.hp <= 0 ? 'hi' : foeName}`); - }, - onSwitchOut() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('The Immortal')}|ok`); - }, - onFaint() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('The Immortal')}|ban stall`); - }, - }, - thewaffleman: { - noCopy: true, - onStart() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('thewaffleman')}|Whats Good Youtube its your boy thewaffleman`); - }, - onSwitchOut() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('thewaffleman')}|Never Gonna Give You Up`); - }, - onFaint() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('thewaffleman')}|coyg`); - }, - }, - tiki: { - noCopy: true, - onStart() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('tiki')}|just tiki.`); - }, - onSwitchOut() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('tiki')}|/html `); - }, - onFaint() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('tiki')}|aksfgkjag o k`); - }, - }, - traceuser: { - noCopy: true, - onStart() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('trace')}|Daishouri!`); - }, - onSwitchOut() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('trace')}|¯\\_(ツ)_/¯`); - }, - onFaint() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('trace')}|sucks to sucks`); - }, - }, - trickster: { - noCopy: true, - onStart() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Trickster')}|(¤﹏¤)`); - }, - onSwitchOut() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Trickster')}|(︶︹︺)`); - }, - onFaint() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Trickster')}|(ಥ﹏ಥ)`); - }, - }, - vexen: { - noCopy: true, - onStart() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Vexen')}|Most unlucky for you!`); - }, - onSwitchOut() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Vexen')}|brb reading Bleach`); - }, - onFaint() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Vexen')}|Wait this wasn't supposed to happen`); - }, - }, - vivalospride: { - noCopy: true, - onStart() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('vivalospride')}|hola mi amore`); - }, - onSwitchOut() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('vivalospride')}|no hablo español`); - }, - onFaint() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('vivalospride')}|classic honestly`); - }, - }, - volco: { - noCopy: true, - onStart() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Volco')}|/me loud controller noises`); - }, - onSwitchOut() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Volco')}|/me controller clicking fades`); - }, - onFaint(source, target, effect) { - if (effect?.id === 'glitchexploiting') { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Volco')}|Dammit, time for a reset.`); - return; - } - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Volco')}|Looks like the game fro-`); - this.add(`raw|
This Pokemon Showdown battle has frozen!
Don't worry, we're working on fixing it, so just carry on like you never saw this.
(Do not report this, this is intended.)
`); - }, - }, - vooper: { - noCopy: true, - onStart() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('vooper')}|${this.sample(['Paws out, claws out!', 'Ready for the prowl!'])}`); - }, - onSwitchOut() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('vooper')}|Must... eat... bamboo...`); - }, - onFaint() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('vooper')}|I guess Kung Fu isn't for everyone...`); - }, - }, - yuki: { - noCopy: true, - onStart(target, pokemon) { - let bst = 0; - for (const stat of Object.values(pokemon.species.baseStats)) { - bst += stat; - } - let targetBst = 0; - for (const stat of Object.values(target.species.baseStats)) { - targetBst += stat; - } - let message: string; - if (bst > targetBst) { - message = 'You dare challenge me!?'; - } else { - message = 'Sometimes, you go for it'; - } - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('yuki')}|${message}`); - }, - onSwitchOut() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('yuki')}|Catch me if you can!`); - }, - onFaint() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('yuki')}|You'll never extinguish our hopes!`); - }, - }, - zalm: { - noCopy: true, - onStart() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Zalm')}|<(:O)000>`); - }, - onSwitchOut() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Zalm')}|Run for the hills!`); - }, - onFaint() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Zalm')}|Woah`); - }, - }, - zarel: { - noCopy: true, - onStart() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Zarel')}|the melo-p represents PS's battles, and the melo-a represents PS's chatrooms`); - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Zarel')}|THIS melo-a represents kicking your ass, though`); - }, - }, - zodiax: { - noCopy: true, - onStart(source) { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Zodiax')}|Zodiax is here to Zodihax`); - - // Easter Egg - const activeMon = this.toID( - source.side.foe.active[0].illusion ? source.side.foe.active[0].illusion.name : source.side.foe.active[0].name - ); - if (activeMon === 'aeonic') { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Zodiax')}|Happy Birthday Aeonic`); - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Aeonic')}|THIS JOKE IS AS BORING AS YOU ARE`); - } - }, - onSwitchOut() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Zodiax')}|Don't worry I'll be back again`); - }, - onFaint(pokemon) { - const name = pokemon.side.foe.name; - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Zodiax')}|${name}, Why would you hurt this poor little pompombirb :(`); - }, - }, - zyguser: { - noCopy: true, - onStart() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Zyg')}|Free Swirlyder.`); - }, - onSwitchOut() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Zyg')}|/me sighs... what is there to say?`); - }, - onFaint() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Zyg')}|At least I have a tier.`); - }, - }, - // Heavy Hailstorm status support for Alpha - heavyhailstorm: { - name: 'HeavyHailstorm', - effectType: 'Weather', - duration: 0, - onTryMovePriority: 1, - onTryMove(attacker, defender, move) { - if (move.type === 'Steel' && move.category !== 'Status') { - this.debug('Heavy Hailstorm Steel suppress'); - this.add('-message', 'The hail suppressed the move!'); - this.add('-fail', attacker, move, '[from] Heavy Hailstorm'); - this.attrLastMove('[still]'); - return null; - } - }, - onWeatherModifyDamage(damage, attacker, defender, move) { - if (move.type === 'Ice') { - this.debug('Heavy Hailstorm ice boost'); - return this.chainModify(1.5); - } - }, - onFieldStart(field, source, effect) { - this.add('-weather', 'Hail', '[from] ability: ' + effect, '[of] ' + source); - this.add('-message', 'The hail became extremely chilling!'); - }, - onModifyMove(move, pokemon, target) { - if (!this.field.isWeather('heavyhailstorm')) return; - if (move.category !== "Status") { - this.debug('Adding Heavy Hailstorm freeze'); - if (!move.secondaries) move.secondaries = []; - for (const secondary of move.secondaries) { - if (secondary.status === 'frz') return; - } - move.secondaries.push({ - chance: 10, - status: 'frz', - }); - } - }, - onFieldResidualOrder: 1, - onFieldResidual() { - this.add('-weather', 'Hail', '[upkeep]'); - if (this.field.isWeather('heavyhailstorm')) this.eachEvent('Weather'); - }, - onWeather(target, source, effect) { - if (target.isAlly(this.effectState.source)) return; - // Hail is stronger from Heavy Hailstorm - if (!target.hasType('Ice')) this.damage(target.baseMaxhp / 8); - }, - onFieldEnd() { - this.add('-weather', 'none'); - }, - }, - // Forever Winter Hail support for piloswine gripado - winterhail: { - name: 'Winter Hail', - effectType: 'Weather', - duration: 0, - onFieldStart(field, source, effect) { - this.add('-weather', 'Hail', '[from] ability: ' + effect, '[of] ' + source); - this.add('-message', 'It became winter!'); - }, - onModifySpe(spe, pokemon) { - if (!pokemon.hasType('Ice')) return this.chainModify(0.5); - }, - onFieldResidualOrder: 1, - onFieldResidual() { - this.add('-weather', 'Hail', '[upkeep]'); - if (this.field.isWeather('winterhail')) this.eachEvent('Weather'); - }, - onWeather(target) { - if (target.hasType('Ice')) return; - this.damage(target.baseMaxhp / 8); - }, - onFieldEnd() { - this.add('-weather', 'none'); - }, - }, - raindrop: { - name: 'Raindrop', - noCopy: true, - onStart(target) { - this.effectState.layers = 1; - this.effectState.def = 0; - this.effectState.spd = 0; - this.add('-start', target, 'Raindrop'); - this.add('-message', `${target.name} has ${this.effectState.layers} raindrop(s)!`); - const [curDef, curSpD] = [target.boosts.def, target.boosts.spd]; - this.boost({def: 1, spd: 1}, target, target); - if (curDef !== target.boosts.def) this.effectState.def--; - if (curSpD !== target.boosts.spd) this.effectState.spd--; - }, - onRestart(target) { - this.effectState.layers++; - this.add('-start', target, 'Raindrop'); - this.add('-message', `${target.name} has ${this.effectState.layers} raindrop(s)!`); - const curDef = target.boosts.def; - const curSpD = target.boosts.spd; - this.boost({def: 1, spd: 1}, target, target); - if (curDef !== target.boosts.def) this.effectState.def--; - if (curSpD !== target.boosts.spd) this.effectState.spd--; - }, - onEnd(target) { - if (this.effectState.def || this.effectState.spd) { - const boosts: SparseBoostsTable = {}; - if (this.effectState.def) boosts.def = this.effectState.def; - if (this.effectState.spd) boosts.spd = this.effectState.spd; - this.boost(boosts, target, target); - } - this.add('-end', target, 'Raindrop'); - if (this.effectState.def !== this.effectState.layers * -1 || this.effectState.spd !== this.effectState.layers * -1) { - this.hint("Raindrop keeps track of how many times it successfully altered each stat individually."); - } - }, - }, - // Brilliant Condition for Arcticblast - brilliant: { - name: 'Brilliant', - duration: 5, - onStart(pokemon) { - this.add('-start', pokemon, 'Brilliant'); - }, - onModifyAtk() { - return this.chainModify(1.5); - }, - onModifyDef() { - return this.chainModify(1.5); - }, - onModifySpA() { - return this.chainModify(1.5); - }, - onModifySpD() { - return this.chainModify(1.5); - }, - onModifySpe() { - return this.chainModify(1.5); - }, - onUpdate(pokemon) { - if (pokemon.volatiles['perishsong']) pokemon.removeVolatile('perishsong'); - }, - onTryAddVolatile(status) { - if (status.id === 'perishsong') return null; - }, - onResidualOrder: 7, - onResidual(pokemon) { - this.heal(pokemon.baseMaxhp / 16); - }, - onTrapPokemon(pokemon) { - pokemon.tryTrap(); - }, - onDragOut(pokemon) { - this.add('-activate', pokemon, 'move: Ingrain'); - return null; - }, - onEnd(pokemon) { - this.add('-end', pokemon, 'Brilliant'); - }, - }, - // Custom status for HoeenHero's move - stormsurge: { - name: "Storm Surge", - duration: 2, - durationCallback(target, source, effect) { - const windSpeeds = [65, 85, 95, 115, 140]; - return windSpeeds.indexOf((effect as ActiveMove).basePower) + 2; - }, - onSideStart(targetSide) { - this.add('-sidestart', targetSide, 'Storm Surge'); - this.add('-message', `Storm Surge flooded the afflicted side of the battlefield!`); - }, - onEnd(targetSide) { - this.add('-sideend', targetSide, 'Storm Surge'); - this.add('-message', 'The Storm Surge receded.'); - }, - onModifySpe() { - return this.chainModify(0.75); - }, - }, - // Kipkluif, needs to end in mod to not trigger aelita's effect - degeneratormod: { - onBeforeSwitchOut(pokemon) { - let alreadyAdded = false; - for (const source of this.effectState.sources) { - if (!source.hp || source.volatiles['gastroacid']) continue; - if (!alreadyAdded) { - const foe = pokemon.side.foe.active[0]; - if (foe) this.add('-activate', foe, 'ability: Degenerator'); - alreadyAdded = true; - } - this.damage((pokemon.baseMaxhp * 33) / 100, pokemon); - } - }, - }, - // For ravioliqueen - haunting: { - name: 'Haunting', - onTrapPokemon(pokemon) { - pokemon.tryTrap(); - }, - onStart(target) { - this.add('-start', target, 'Haunting'); - }, - onResidualOrder: 11, - onResidual(pokemon) { - this.damage(pokemon.baseMaxhp / 8); - }, - onEnd(pokemon) { - this.add('-end', pokemon, 'Haunting'); - }, - }, - // for pants' move - givewistfulthinking: { - duration: 1, - onSwitchInPriority: 1, - onSwitchIn(pokemon) { - pokemon.addVolatile('wistfulthinking'); - }, - }, - // focus punch effect for litt's move - nexthuntcheck: { - duration: 1, - onStart(pokemon) { - this.add('-singleturn', pokemon, 'move: /nexthunt'); - }, - onHit(pokemon, source, move) { - if (move.category !== 'Status') { - pokemon.volatiles['nexthuntcheck'].lostFocus = true; - } - }, - }, - // For Gmars' Effects - minior: { - noCopy: true, - name: 'Minior', - // Special Forme Effects - onBeforeMove(pokemon) { - if (pokemon.set.shiny) return; - if (pokemon.species.id === "miniorviolet") { - this.add(`${getName("GMars")} is thinking...`); - if (this.randomChance(1, 3)) { - this.add('cant', pokemon, 'ability: Truant'); - return false; - } - } - }, - onSwitchIn(pokemon) { - if (pokemon.set.shiny) return; - if (pokemon.species.id === 'miniorindigo') { - this.boost({atk: 1, spa: 1}, pokemon.side.foe.active[0]); - } else if (pokemon.species.id === 'miniorgreen') { - this.boost({atk: 1}, pokemon); - } - }, - onTryBoost(boost, target, source, effect) { - if (target.set.shiny) return; - if (source && target === source) return; - if (target.species.id !== 'miniorblue') 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 && effect.id !== 'octolock') { - this.add('message', 'Minior is translucent!'); - } - }, - onFoeTryMove(target, source, move) { - if (move.id === 'haze' && target.species.id === 'miniorblue' && !target.set.shiny) { - move.onHitField = function (this: Battle) { - this.add('-clearallboost'); - for (const pokemon of this.getAllActive()) { - if (pokemon.species.id === 'miniorblue') continue; - pokemon.clearBoosts(); - } - }.bind(this); - return; - } - const dazzlingHolder = this.effectState.target; - if (!dazzlingHolder.set.shiny) return; - if (dazzlingHolder.species.id !== 'minior') return; - const targetAllExceptions = ['perishsong', 'flowershield', 'rototiller']; - if (move.target === 'foeSide' || (move.target === 'all' && !targetAllExceptions.includes(move.id))) { - return; - } - - if ((source.isAlly(dazzlingHolder) || move.target === 'all') && move.priority > 0.1) { - this.attrLastMove('[still]'); - this.add('message', 'Minior dazzles!'); - this.add('cant', target, move, '[of] ' + dazzlingHolder); - return false; - } - }, - }, - // modified paralysis for Inversion Terrain - par: { - name: 'par', - effectType: 'Status', - onStart(target, source, sourceEffect) { - if (sourceEffect && sourceEffect.effectType === 'Ability') { - this.add('-status', target, 'par', '[from] ability: ' + sourceEffect.name, '[of] ' + source); - } else { - this.add('-status', target, 'par'); - } - }, - onModifySpe(spe, pokemon) { - if (pokemon.hasAbility('quickfeet')) return; - if (this.field.isTerrain('inversionterrain') && pokemon.isGrounded()) { - return this.chainModify(2); - } - return this.chainModify(0.5); - }, - onBeforeMovePriority: 1, - onBeforeMove(pokemon) { - if (this.randomChance(1, 4)) { - this.add('cant', pokemon, 'par'); - return false; - } - }, - }, - bigstormcomingmod: { - name: "Big Storm Coming Mod", - duration: 1, - onBasePower() { - return this.chainModify([1229, 4096]); - }, - }, - - // condition used for brouha's ability - turbulence: { - name: 'Turbulence', - effectType: 'Weather', - duration: 0, - onFieldStart(field, source, effect) { - this.add('-weather', 'DeltaStream', '[from] ability: ' + effect, '[of] ' + source); - }, - onFieldResidualOrder: 1, - onFieldResidual() { - this.add('-weather', 'DeltaStream', '[upkeep]'); - this.eachEvent('Weather'); - }, - onWeather(target) { - if (!target.hasType('Flying')) this.damage(target.baseMaxhp * 0.06); - if (this.sides.some(side => Object.keys(side.sideConditions).length)) { - this.add(`-message`, 'The Turbulence blew away the hazards on both sides!'); - } - if (this.field.terrain) { - this.add(`-message`, 'The Turbulence blew away the terrain!'); - } - const silentRemove = ['reflect', 'lightscreen', 'auroraveil', 'safeguard', 'mist']; - for (const side of this.sides) { - const keys = Object.keys(side.sideConditions); - for (const key of keys) { - if (key.endsWith('mod') || key.endsWith('clause')) continue; - side.removeSideCondition(key); - if (!silentRemove.includes(key)) { - this.add('-sideend', side, this.dex.conditions.get(key).name, '[from] ability: Turbulence'); - } - } - } - this.field.clearTerrain(); - }, - onFieldEnd() { - this.add('-weather', 'none'); - }, - }, - // Modded rain dance for Kev's ability - raindance: { - name: 'RainDance', - effectType: 'Weather', - duration: 5, - durationCallback(source) { - let newDuration = 5; - let boostNum = 0; - if (source?.hasItem('damprock')) { - newDuration = 8; - } - if (source?.hasAbility('kingofatlantis')) { - for (const teammate of source.side.pokemon) { - if (teammate.hasType('Water') && teammate !== source) { - boostNum++; - } - } - } - return newDuration + boostNum; - }, - onWeatherModifyDamage(damage, attacker, defender, move) { - if (defender.hasItem('utilityumbrella')) 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); - } - }, - onFieldStart(field, source, effect) { - if (effect?.effectType === 'Ability') { - if (this.gen <= 5) this.effectState.duration = 0; - this.add('-weather', 'RainDance', '[from] ability: ' + effect, '[of] ' + source); - } else { - this.add('-weather', 'RainDance'); - } - }, - onFieldResidualOrder: 1, - onFieldResidual() { - this.add('-weather', 'RainDance', '[upkeep]'); - this.eachEvent('Weather'); - }, - onFieldEnd() { - this.add('-weather', 'none'); - }, - }, - // Modded hazard moves to fail when Wave terrain is active - auroraveil: { - name: "Aurora Veil", - duration: 5, - durationCallback(target, source) { - if (source?.hasItem('lightclay')) { - return 8; - } - return 5; - }, - onAnyModifyDamage(damage, source, target, move) { - if (target !== source && this.effectState.target.hasAlly(target)) { - if ((target.side.getSideCondition('reflect') && this.getCategory(move) === 'Physical') || - (target.side.getSideCondition('lightscreen') && this.getCategory(move) === 'Special')) { - return; - } - if (!target.getMoveHitData(move).crit && !move.infiltrates) { - this.debug('Aurora Veil weaken'); - if (this.activePerHalf > 1) return this.chainModify([2732, 4096]); - return this.chainModify(0.5); - } - } - }, - onSideStart(side) { - if (this.field.isTerrain('waveterrain')) { - this.add('-message', `Wave Terrain prevented Aurora Veil from starting!`); - return null; - } - this.add('-sidestart', side, 'move: Aurora Veil'); - }, - onSideResidualOrder: 21, - onSideResidualSubOrder: 1, - onSideEnd(side) { - this.add('-sideend', side, 'move: Aurora Veil'); - }, - }, - lightscreen: { - name: "Light Screen", - duration: 5, - durationCallback(target, source) { - if (source?.hasItem('lightclay')) { - return 8; - } - return 5; - }, - onAnyModifyDamage(damage, source, target, move) { - if (target !== source && this.effectState.target.hasAlly(target) && this.getCategory(move) === 'Special') { - if (!target.getMoveHitData(move).crit && !move.infiltrates) { - this.debug('Light Screen weaken'); - if (this.activePerHalf > 1) return this.chainModify([2732, 4096]); - return this.chainModify(0.5); - } - } - }, - onSideStart(side) { - if (this.field.isTerrain('waveterrain')) { - this.add('-message', `Wave Terrain prevented Light Screen from starting!`); - return null; - } - this.add('-sidestart', side, 'move: Light Screen'); - }, - onSideResidualOrder: 21, - onSideResidualSubOrder: 1, - onSideEnd(side) { - this.add('-sideend', side, 'move: Light Screen'); - }, - }, - mist: { - name: "Mist", - duration: 5, - onTryBoost(boost, target, source, effect) { - if (effect.effectType === 'Move' && effect.infiltrates && !target.isAlly(source)) return; - if (source && target !== source) { - 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) { - this.add('-activate', target, 'move: Mist'); - } - } - }, - onSideStart(side) { - if (this.field.isTerrain('waveterrain')) { - this.add('-message', `Wave Terrain prevented Mist from starting!`); - return null; - } - this.add('-sidestart', side, 'move: Mist'); - }, - onSideResidualOrder: 21, - onSideResidualSubOrder: 3, - onSideEnd(side) { - this.add('-sideend', side, 'Mist'); - }, - }, - reflect: { - name: "Reflect", - duration: 5, - durationCallback(target, source) { - if (source?.hasItem('lightclay')) { - return 8; - } - return 5; - }, - onAnyModifyDamage(damage, source, target, move) { - if (target !== source && this.effectState.target.hasAlly(target) && this.getCategory(move) === 'Physical') { - if (!target.getMoveHitData(move).crit && !move.infiltrates) { - this.debug('Reflect weaken'); - if (this.activePerHalf > 1) return this.chainModify([2732, 4096]); - return this.chainModify(0.5); - } - } - }, - onSideStart(side) { - if (this.field.isTerrain('waveterrain')) { - this.add('-message', `Wave Terrain prevented Reflect from starting!`); - return null; - } - this.add('-sidestart', side, 'Reflect'); - }, - onSideResidualOrder: 21, - onSideEnd(side) { - this.add('-sideend', side, 'Reflect'); - }, - }, - safeguard: { - name: "Safeguard", - duration: 5, - durationCallback(target, source, effect) { - if (source?.hasAbility('persistent')) { - this.add('-activate', source, 'ability: Persistent', effect); - return 7; - } - return 5; - }, - onSetStatus(status, target, source, effect) { - if (!effect || !source) return; - if (effect.effectType === 'Move' && effect.infiltrates && !target.isAlly(source)) return; - if (target !== source) { - this.debug('interrupting setStatus'); - if (effect.id === 'synchronize' || (effect.effectType === 'Move' && !effect.secondaries)) { - this.add('-activate', target, 'move: Safeguard'); - } - return null; - } - }, - onTryAddVolatile(status, target, source, effect) { - if (!effect || !source) return; - if (effect.effectType === 'Move' && effect.infiltrates && !target.isAlly(source)) return; - if ((status.id === 'confusion' || status.id === 'yawn') && target !== source) { - if (effect.effectType === 'Move' && !effect.secondaries) this.add('-activate', target, 'move: Safeguard'); - return null; - } - }, - onSideStart(side) { - if (this.field.isTerrain('waveterrain')) { - this.add('-message', `Wave Terrain prevented Safeguard from starting!`); - return null; - } - this.add('-sidestart', side, 'move: Safeguard'); - }, - onSideResidualOrder: 21, - onSideResidualSubOrder: 2, - onSideEnd(side) { - this.add('-sideend', side, 'Safeguard'); - }, - }, - gmaxsteelsurge: { - onSideStart(side) { - if (this.field.isTerrain('waveterrain')) { - this.add('-message', `Wave Terrain prevented Steel Spikes from starting!`); - return null; - } - this.add('-sidestart', side, 'move: G-Max Steelsurge'); - }, - onEntryHazard(pokemon) { - if (pokemon.hasItem('heavydutyboots')) 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 * Math.pow(2, typeMod) / 8); - }, - }, - spikes: { - name: "Spikes", - onSideStart(side) { - if (this.field.isTerrain('waveterrain')) { - this.add('-message', `Wave Terrain prevented Spikes from starting!`); - return null; - } - this.effectState.layers = 1; - this.add('-sidestart', side, 'move: Spikes'); - }, - onSideRestart(side) { - if (this.effectState.layers >= 3) return false; - this.add('-sidestart', side, 'Spikes'); - this.effectState.layers++; - }, - onEntryHazard(pokemon) { - 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); - }, - }, - stealthrock: { - name: "Stealth Rock", - onSideStart(side) { - if (this.field.isTerrain('waveterrain')) { - this.add('-message', `Wave Terrain prevented Stealth Rock from starting!`); - return null; - } - this.add('-sidestart', side, 'move: Stealth Rock'); - }, - onEntryHazard(pokemon) { - if (pokemon.hasItem('heavydutyboots')) return; - const typeMod = this.clampIntRange(pokemon.runEffectiveness(this.dex.getActiveMove('stealthrock')), -6, 6); - this.damage(pokemon.maxhp * Math.pow(2, typeMod) / 8); - }, - }, - stickyweb: { - name: "Sticky Web", - onSideStart(side) { - if (this.field.isTerrain('waveterrain')) { - this.add('-message', `Wave Terrain prevented Sticky Web from starting!`); - return null; - } - this.add('-sidestart', side, 'move: Sticky Web'); - }, - onEntryHazard(pokemon) { - if (!pokemon.isGrounded() || pokemon.hasItem('heavydutyboots')) return; - this.add('-activate', pokemon, 'move: Sticky Web'); - this.boost({spe: -1}, pokemon, pokemon.side.foe.active[0], this.dex.getActiveMove('stickyweb')); - }, - }, - toxicspikes: { - name: "Toxic Spikes", - onSideStart(side) { - if (this.field.isTerrain('waveterrain')) { - this.add('-message', `Wave Terrain prevented Toxic Spikes from starting!`); - return null; - } - 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++; - }, - onEntryHazard(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')) { - return; - } else if (this.effectState.layers >= 2) { - pokemon.trySetStatus('tox', pokemon.side.foe.active[0]); - } else { - pokemon.trySetStatus('psn', pokemon.side.foe.active[0]); - } - }, - }, - frz: { - inherit: true, - onHit(target, source, move) { - if (move.thawsTarget || move.type === 'Fire' && move.category !== 'Status') { - target.cureStatus(); - if (move.id === 'randomscreaming') { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Gimmick')}|Give me some more paaain, baaaby`); - } - } - }, - }, - // No, you're not dynamaxing. - dynamax: { - inherit: true, - onStart(pokemon) { - pokemon.removeVolatile('minimize'); - pokemon.removeVolatile('substitute'); - if (pokemon.volatiles['torment']) { - delete pokemon.volatiles['torment']; - this.add('-end', pokemon, 'Torment', '[silent]'); - } - if (['cramorantgulping', 'cramorantgorging'].includes(pokemon.species.id) && !pokemon.transformed) { - pokemon.formeChange('cramorant'); - } - this.add('-start', pokemon, 'Dynamax'); - if (pokemon.gigantamax) this.add('-formechange', pokemon, pokemon.species.name + '-Gmax'); - if (pokemon.baseSpecies.name !== 'Shedinja') { - // Changes based on dynamax level, 2 is max (at LVL 10) - const ratio = this.format.id.startsWith('gen8doublesou') ? 1.5 : 2; - - pokemon.maxhp = Math.floor(pokemon.maxhp * ratio); - pokemon.hp = Math.floor(pokemon.hp * ratio); - - this.add('-heal', pokemon, pokemon.getHealth, '[silent]'); - } - this.add('-message', 'Ok. sure. Dynamax. Just abuse it and win the game already.'); - // This is just for fun, as dynamax cannot be in a rated battle. - this.win(pokemon.side); - }, - }, - echoedvoiceclone: { - duration: 2, - onFieldStart() { - this.effectState.multiplier = 1; - }, - onFieldRestart() { - if (this.effectState.duration !== 2) { - this.effectState.duration = 2; - if (this.effectState.multiplier < 5) { - this.effectState.multiplier++; - } - } - }, - }, -}; diff --git a/data/mods/ssb/items.ts b/data/mods/ssb/items.ts deleted file mode 100644 index 91b86e9baaaa..000000000000 --- a/data/mods/ssb/items.ts +++ /dev/null @@ -1,45 +0,0 @@ -export const Items: {[k: string]: ModdedItemData} = { - // Alpha - caioniumz: { - name: "Caionium Z", - onTakeItem: false, - zMove: "Blistering Ice Age", - zMoveFrom: "Blizzard", - itemUser: ["Aurorus"], - gen: 8, - desc: "If held by an Aurorus with Blizzard, it can use Blistering Ice Age.", - }, - - // A Quag To The Past - quagniumz: { - name: "Quagnium Z", - onTakeItem: false, - zMove: "Bounty Place", - zMoveFrom: "Scorching Sands", - itemUser: ["Quagsire"], - gen: 8, - desc: "If held by a Quagsire with Scorching Sands, it can use Bounty Place.", - }, - - // Kalalokki - kalalokkiumz: { - name: "Kalalokkium Z", - onTakeItem: false, - zMove: "Gaelstrom", - zMoveFrom: "Blackbird", - itemUser: ["Wingull"], - gen: 8, - desc: "If held by a Wingull with Blackbird, it can use Gaelstrom.", - }, - - // Robb576 - modium6z: { - name: "Modium-6 Z", - onTakeItem: false, - zMove: "Integer Overflow", - zMoveFrom: "Photon Geyser", - itemUser: ["Necrozma-Ultra"], - gen: 8, - desc: "If held by a Robb576 with Photon Geyser, it can use Integer Overflow.", - }, -}; diff --git a/data/mods/ssb/moves.ts b/data/mods/ssb/moves.ts deleted file mode 100644 index d74fad078ea5..000000000000 --- a/data/mods/ssb/moves.ts +++ /dev/null @@ -1,5328 +0,0 @@ -import {getName} from './conditions'; -import {changeSet, changeMoves} from "./abilities"; -import {ssbSets} from "./random-teams"; - -export const Moves: {[k: string]: ModdedMoveData} = { - /* - // Example - moveid: { - accuracy: 100, // a number or true for always hits - basePower: 100, // Not used for Status moves, base power of the move, number - category: "Physical", // "Physical", "Special", or "Status" - desc: "", // long description - shortDesc: "", // short description, shows up in /dt - name: "Move Name", - gen: 8, - pp: 10, // unboosted PP count - priority: 0, // move priority, -6 -> 6 - flags: {}, // Move flags https://github.com/smogon/pokemon-showdown/blob/master/data/moves.js#L1-L27 - onTryMove() { - this.attrLastMove('[still]'); // For custom animations - }, - onPrepareHit(target, source) { - this.add('-anim', source, 'Move Name 1', source); - this.add('-anim', source, 'Move Name 2', source); - }, // For custom animations - secondary: { - status: "tox", - chance: 20, - }, // secondary, set to null to not use one. Exact usage varies, check data/moves.js for examples - target: "normal", // What does this move hit? - // normal = the targeted foe, self = the user, allySide = your side (eg light screen), foeSide = the foe's side (eg spikes), all = the field (eg raindance). More can be found in data/moves.js - type: "Water", // The move's type - // Other useful things - noPPBoosts: true, // add this to not boost the PP of a move, not needed for Z moves, dont include it otherwise - isZ: "crystalname", // marks a move as a z move, list the crystal name inside - zMove: {effect: ''}, // for status moves, what happens when this is used as a Z move? check data/moves.js for examples - zMove: {boost: {atk: 2}}, // for status moves, stat boost given when used as a z move - critRatio: 2, // The higher the number (above 1) the higher the ratio, lowering it lowers the crit ratio - drain: [1, 2], // recover first num / second num % of the damage dealt - heal: [1, 2], // recover first num / second num % of the target's HP - }, - */ - // Please keep sets organized alphabetically based on staff member name! - // Abdelrahman - thetownoutplay: { - accuracy: true, - basePower: 0, - category: "Status", - desc: "Sets Trick Room and has 10% chance to burn the opponent.", - shortDesc: "Sets Trick Room. 10% chance to burn.", - name: "The Town Outplay", - gen: 8, - pp: 5, - priority: -5, - flags: {}, - onTryMove() { - this.attrLastMove('[still]'); - }, - onPrepareHit(target, source) { - this.add('-anim', source, 'Trick Room', target); - }, - onHit(target, source, move) { - if (this.randomChance(1, 10)) { - for (const foe of source.foes()) { - foe.trySetStatus('brn', source); - } - } - }, - pseudoWeather: 'trickroom', - secondary: null, - target: "self", - type: "Fire", - }, - - // Adri - skystriker: { - accuracy: 100, - basePower: 50, - category: "Special", - desc: "If this move is successful and the user has not fainted, the effects of Leech Seed and binding moves end for the user, and all hazards are removed from the user's side of the field. Raises the user's Speed by 1 stage.", - shortDesc: "Free user from hazards/bind/Leech Seed; +1 Spe.", - name: "Skystriker", - gen: 8, - pp: 30, - priority: 0, - flags: {protect: 1, mirror: 1}, - onTryMove() { - this.attrLastMove('[still]'); - }, - onPrepareHit(target, source) { - this.add('-anim', source, 'Aerial Ace', target); - }, - onAfterHit(target, pokemon) { - if (pokemon.hp && pokemon.removeVolatile('leechseed')) { - this.add('-end', pokemon, 'Leech Seed', '[from] move: Skystriker', '[of] ' + pokemon); - } - const sideConditions = [ - 'spikes', 'toxicspikes', 'stealthrock', 'stickyweb', 'gmaxsteelsurge', - ]; - 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: Skystriker', '[of] ' + pokemon); - } - } - if (pokemon.hp && pokemon.volatiles['partiallytrapped']) { - pokemon.removeVolatile('partiallytrapped'); - } - }, - onAfterSubDamage(damage, target, pokemon) { - if (pokemon.hp && pokemon.removeVolatile('leechseed')) { - this.add('-end', pokemon, 'Leech Seed', '[from] move: Skystriker', '[of] ' + pokemon); - } - const sideConditions = [ - 'spikes', 'toxicspikes', 'stealthrock', 'stickyweb', 'gmaxsteelsurge', - ]; - 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: Skystriker', '[of] ' + pokemon); - } - } - if (pokemon.hp && pokemon.volatiles['partiallytrapped']) { - pokemon.removeVolatile('partiallytrapped'); - } - }, - self: { - boosts: { - spe: 1, - }, - }, - secondary: null, - target: "normal", - type: "Flying", - }, - - // aegii - reset: { - accuracy: true, - basePower: 0, - category: "Status", - desc: "This move acts as King's Shield for the purpose of Stance Change. The user is protected from most attacks this turn, but not status moves. Reduces the opponent's relevant attacking stat by 1 if they attempt to use a Special or contact move. If the user is Aegislash, changes the user's set from Physical to Special or Special to Physical.", - shortDesc: "King's Shield; -1 offense stat on hit; change set.", - name: "Reset", - gen: 8, - pp: 10, - priority: 4, - flags: {}, - stallingMove: true, - volatileStatus: 'reset', - onTryMove() { - this.attrLastMove('[still]'); - }, - onPrepareHit(target, source) { - this .add('-anim', source, 'Petal Dance', target); - this .add('-anim', source, 'King\'s Shield', source); - }, - onTryHit(pokemon) { - return !!this.queue.willAct() && this.runEvent('StallMove', pokemon); - }, - onHit(pokemon) { - pokemon.addVolatile('stall'); - if (pokemon.species.baseSpecies === 'Aegislash') { - let specialSet = pokemon.moves.includes('shadowball'); - changeSet(this, pokemon, ssbSets[specialSet ? 'aegii' : 'aegii-Alt']); - specialSet = pokemon.moves.includes('shadowball'); - const setType = specialSet ? 'specially' : 'physically'; - this.add('-message', `aegii now has a ${setType} oriented set.`); - } - }, - 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 && !move.breaksProtect)) 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 (move.category === "Special") { - this.boost({spa: -1}, source, target, this.dex.getActiveMove("Reset")); - } else if (move.category === "Physical" && move.flags["contact"]) { - this.boost({atk: -1}, source, target, this.dex.getActiveMove("Reset")); - } - return this.NOT_FAIL; - }, - }, - secondary: null, - target: "self", - type: "Steel", - }, - - // Aelita - xanaskeystolyoko: { - accuracy: 100, - basePower: 20, - basePowerCallback(pokemon, target, move) { - return move.basePower + 20 * pokemon.positiveBoosts(); - }, - category: "Physical", - desc: "Power is equal to 20+(X*20), where X is the user's total stat stage changes that are greater than 0. User raises a random stat if it has less than 5 positive stat changes.", - shortDesc: "+20 power/boost. +1 random stat if < 5 boosts.", - name: "XANA's Keys To Lyoko", - gen: 8, - pp: 40, - priority: 0, - flags: {protect: 1, mirror: 1}, - onTryMove() { - this.attrLastMove('[still]'); - }, - onPrepareHit(target, source) { - this.add('-anim', source, 'Draco Meteor', target); - }, - self: { - onHit(pokemon) { - if (pokemon.positiveBoosts() < 5) { - const stats: BoostID[] = []; - let stat: BoostID; - for (stat in pokemon.boosts) { - if (!['accuracy', 'evasion'].includes(stat) && pokemon.boosts[stat] < 6) { - stats.push(stat); - } - } - if (stats.length) { - const randomStat = this.sample(stats); - const boost: SparseBoostsTable = {}; - boost[randomStat] = 1; - this.boost(boost); - } - } - }, - }, - secondary: null, - target: "normal", - type: "Dragon", - }, - - // Aeonic - lookingcool: { - accuracy: true, - basePower: 0, - category: "Status", - desc: "Sets up Stealth Rock on the opposing side of the field and boosts the user's Attack by 2 stages. Can only be used once per the user's time on the field.", - shortDesc: "1 use per switch-in. +2 Atk + Stealth Rock.", - name: "Looking Cool", - gen: 8, - pp: 5, - priority: 0, - flags: {snatch: 1}, - volatileStatus: 'lookingcool', - onTryMove(target) { - if (target.volatiles['lookingcool']) return false; - this.attrLastMove('[still]'); - }, - onPrepareHit(target, source) { - const foe = source.side.foe.active[0]; - this.add('-anim', source, 'Smokescreen', source); - this.add('-anim', source, 'Stealth Rock', foe); - }, - onHit(target, source, move) { - const foe = source.side.foe; - if (!foe.getSideCondition('stealthrock')) { - foe.addSideCondition('stealthrock'); - } - }, - boosts: { - atk: 2, - }, - secondary: null, - target: "self", - type: "Dark", - }, - - // Aethernum - lilypadoverflow: { - accuracy: 100, - basePower: 62, - basePowerCallback(source, target, move) { - if (!source.volatiles['raindrop']?.layers) return move.basePower; - return move.basePower + (source.volatiles['raindrop'].layers * 20); - }, - category: "Special", - desc: "Power is equal to 62 + (Number of Raindrops collected * 20). Whether or not this move is successful, the user's Defense and Special Defense decrease by as many stages as Raindrop had increased them, and the user's Raindrop count resets to 0.", - shortDesc: "More power per Raindrop. Lose Raindrops.", - name: "Lilypad Overflow", - gen: 8, - pp: 5, - priority: 0, - flags: {protect: 1, mirror: 1}, - onTryMove() { - this.attrLastMove('[still]'); - }, - onPrepareHit(target, source) { - this.add('-anim', source, 'Water Spout', target); - this.add('-anim', source, 'Max Geyser', target); - }, - onAfterMove(pokemon) { - if (pokemon.volatiles['raindrop']) pokemon.removeVolatile('raindrop'); - }, - secondary: null, - target: "normal", - type: "Water", - }, - - // Akir - ravelin: { - accuracy: 100, - basePower: 70, - category: "Physical", - desc: "Heals 50% of the user's max HP; Sets up Light Screen for 5 turns on the user's side.", - shortDesc: "Recover + Light Screen.", - name: "Ravelin", - gen: 8, - pp: 5, - priority: 0, - flags: {contact: 1, protect: 1, mirror: 1, heal: 1}, - onTryMove() { - this.attrLastMove('[still]'); - }, - onPrepareHit(target, source) { - this.add('-anim', source, 'Aura Sphere', target); - this.add('-anim', source, 'Protect', source); - }, - onAfterMoveSecondarySelf(pokemon, target, move) { - this.heal(pokemon.maxhp / 2, pokemon, pokemon, move); - if (pokemon.side.getSideCondition('lightscreen')) return; - pokemon.side.addSideCondition('lightscreen'); - }, - secondary: null, - target: "normal", - type: "Steel", - }, - - // Alpha - blisteringiceage: { - accuracy: true, - basePower: 190, - category: "Special", - desc: "User's ability becomes Ice Age, and the weather becomes an extremely heavy hailstorm that prevents damaging Steel-type moves from executing, causes Ice-type moves to be 50% stronger, causes all non-Ice-type Pokemon on the opposing side to take 1/8 damage from hail, and causes all moves to have a 10% chance to freeze. This weather bypasses Magic Guard and Overcoat. This weather remains in effect until the 3 turns are up, or the weather is changed by Delta Stream, Desolate Land, or Primordial Sea.", - shortDesc: "Weather: Steel fail. 1.5x Ice.", - name: "Blistering Ice Age", - gen: 8, - pp: 1, - noPPBoosts: true, - priority: 0, - flags: {}, - onTryMove() { - this.attrLastMove('[still]'); - }, - onPrepareHit(target, source) { - this.add('-anim', source, 'Hail', target); - this.add('-anim', target, 'Subzero Slammer', target); - this.add('-anim', source, 'Subzero Slammer', source); - }, - onAfterMove(source) { - source.baseAbility = 'iceage' as ID; - source.setAbility('iceage'); - this.add('-ability', source, source.getAbility().name, '[from] move: Blistering Ice Age'); - }, - isZ: "caioniumz", - secondary: null, - target: "normal", - type: "Ice", - }, - - // Annika - datacorruption: { - accuracy: true, - basePower: 0, - category: "Status", - desc: "Replaces the target's moveset with four vaguely competitively viable moves. 100% chance to cause the target to flinch. Fails unless it is the user's first turn on the field.", - shortDesc: "First Turn: Gives foe 4 new moves; flinches.", - name: "Data Corruption", - gen: 8, - pp: 1, - noPPBoosts: true, - flags: {bypasssub: 1, reflectable: 1}, - priority: 3, - onTry(pokemon, target) { - if (pokemon.activeMoveActions > 1) { - this.attrLastMove('[still]'); - this.add('-fail', pokemon); - this.hint("Data Corruption only works on your first turn out."); - return null; - } - }, - onTryMove() { - this.attrLastMove('[still]'); - }, - onPrepareHit(target, source) { - this.add('-anim', target, 'Shift Gear', target); - this.add('-anim', source, 'Plasma Fists', target); - this.add('-anim', target, 'Nasty Plot', target); - }, - onHit(target, source) { - this.add('-message', `${source.name} corrupted the opposing ${target.name}'s data storage!`); - // Ran from a script - const possibleMoves = [ - "agility", "anchorshot", "appleacid", "aquatail", "aromatherapy", "attackorder", "aurasphere", "autotomize", "banefulbunker", - "behemothbash", "behemothblade", "bellydrum", "blazekick", "blizzard", "blueflare", "bodypress", "bodyslam", - "boltbeak", "boltstrike", "boomburst", "bravebird", "bugbuzz", "bulkup", "calmmind", "circlethrow", "clangingscales", - "clangoroussoul", "clearsmog", "closecombat", "coil", "cottonguard", "courtchange", "crabhammer", "crosschop", "crunch", - "curse", "darkestlariat", "darkpulse", "dazzlinggleam", "defog", "destinybond", "disable", "discharge", "doomdesire", - "doubleedge", "doubleironbash", "dracometeor", "dragonclaw", "dragondance", "dragondarts", "dragonhammer", "dragonpulse", - "dragontail", "drainingkiss", "drillpeck", "drillrun", "drumbeating", "dynamaxcannon", "earthpower", "earthquake", - "encore", "energyball", "eruption", "expandingforce", "explosion", "extrasensory", "extremespeed", "facade", - "fierydance", "fireblast", "firelash", "fishiousrend", "flamethrower", "flareblitz", "flashcannon", "fleurcannon", - "flipturn", "focusblast", "foulplay", "freezedry", "fusionbolt", "fusionflare", "futuresight", "geargrind", "glare", - "grassknot", "gravapple", "gunkshot", "gyroball", "haze", "headsmash", "healbell", "healingwish", "heatwave", - "hex", "highhorsepower", "highjumpkick", "honeclaws", "hurricane", "hydropump", "hypervoice", "icebeam", "iciclecrash", - "irondefense", "ironhead", "kingsshield", "knockoff", "lavaplume", "leafblade", "leafstorm", "leechlife", - "leechseed", "lightscreen", "liquidation", "lowkick", "lunge", "magiccoat", "megahorn", "memento", "meteormash", - "milkdrink", "moonblast", "moongeistbeam", "moonlight", "morningsun", "muddywater", "multiattack", "nastyplot", - "nightdaze", "nightshade", "noretreat", "nuzzle", "obstruct", "outrage", "overdrive", "overheat", "painsplit", - "poltergeist", "partingshot", "perishsong", "petalblizzard", "photongeyser", "plasmafists", "playrough", "poisonjab", - "pollenpuff", "powergem", "powerwhip", "protect", "psychic", "psychicfangs", "psyshock", "psystrike", "pursuit", - "pyroball", "quiverdance", "rapidspin", "recover", "reflect", "rest", "return", "roar", "rockpolish", "roost", - "sacredsword", "scald", "scorchingsands", "secretsword", "seedbomb", "seismictoss", "selfdestruct", "shadowball", - "shadowbone", "shadowclaw", "shellsidearm", "shellsmash", "shiftgear", "skullbash", "skyattack", "slackoff", - "slam", "sleeppowder", "sleeptalk", "sludgebomb", "sludgewave", "snipeshot", "softboiled", "sparklingaria", - "spectralthief", "spikes", "spikyshield", "spiritshackle", "spore", "stealthrock", "stickyweb", "stoneedge", "stormthrow", - "strangesteam", "strengthsap", "substitute", "suckerpunch", "sunsteelstrike", "superpower", "surf", "surgingstrikes", - "switcheroo", "swordsdance", "synthesis", "tailwind", "takedown", "taunt", "throatchop", "thunder", "thunderbolt", - "thunderwave", "toxic", "toxicspikes", "transform", "triattack", "trick", "tripleaxel", "uturn", "vcreate", - "voltswitch", "volttackle", "waterfall", "waterspout", "whirlwind", "wickedblow", "wildcharge", "willowisp", - "wish", "woodhammer", "xscissor", "yawn", "zenheadbutt", "zingzap", - ]; - const newMoves = []; - for (let i = 0; i < 4; i++) { - const moveIndex = this.random(possibleMoves.length); - newMoves.push(possibleMoves[moveIndex]); - possibleMoves.splice(moveIndex, 1); - } - const newMoveSlots = changeMoves(this, target, newMoves); - target.m.datacorrupt = true; - target.moveSlots = newMoveSlots; - // @ts-ignore - target.baseMoveSlots = newMoveSlots; - }, - secondary: { - chance: 100, - volatileStatus: 'flinch', - }, - target: "adjacentFoe", - type: "Psychic", - }, - - // A Quag To The Past - bountyplace: { - accuracy: true, - basePower: 0, - category: "Status", - desc: "Puts a bounty on the target. If the target is KOed by a direct attack, the attacker will gain +1 Attack, Defense, Special Attack, Special Defense, and Speed.", - shortDesc: "If target is ever KOed, attacker omniboosts.", - name: "Bounty Place", - gen: 8, - pp: 1, - noPPBoosts: true, - priority: 0, - flags: {bypasssub: 1}, - onTryMove() { - this.attrLastMove('[still]'); - }, - onPrepareHit(target, source) { - this.add('-anim', source, 'Pay Day', target); - this.add('-anim', source, 'Block', target); - }, - onHit(target, source, move) { - // See formats.ts for implementation - target.m.hasBounty = true; - this.add('-start', target, 'bounty', '[silent]'); - this.add('-message', `${source.name} placed a bounty on ${target.name}!`); - }, - isZ: "quagniumz", - secondary: null, - target: "normal", - type: "Ground", - }, - - // Arby - quickhammer: { - accuracy: 100, - basePower: 40, - category: "Special", - desc: "Usually moves first (Priority +1). If this move KOes the opponent, the user gains +2 Special Attack. Otherwise, the user gains -1 Defense and Special Defense.", - shortDesc: "+1 Prio. +2 SpA if KO, -1 Def/SpD if not.", - name: "Quickhammer", - gen: 8, - pp: 10, - priority: 1, - flags: {protect: 1, mirror: 1}, - onTryMove() { - this.attrLastMove('[still]'); - }, - onPrepareHit(target, source) { - this.add('-anim', source, 'Crabhammer', target); - }, - onAfterMoveSecondarySelf(pokemon, target, move) { - if (!target || target.fainted || target.hp <= 0) { - this.boost({spa: 2}, pokemon, pokemon, move); - } else { - this.boost({def: -1, spd: -1}, pokemon, pokemon, move); - } - }, - secondary: null, - target: "normal", - type: "Water", - }, - - // used for Arby's ability - waveterrain: { - accuracy: true, - basePower: 0, - category: "Status", - desc: "For 5 turns, the terrain becomes Wave Terrain. During the effect, the accuracy of Water type moves is multiplied by 1.2, even if the user is not grounded. Hazards and screens are removed and cannot be set while Wave Terrain is active. Fails if the current terrain is Inversion Terrain.", - shortDesc: "5 turns. Removes hazards. Water move acc 1.2x.", - name: "Wave Terrain", - gen: 8, - pp: 10, - priority: 0, - flags: {}, - terrain: 'waveterrain', - condition: { - duration: 5, - durationCallback(source, effect) { - if (source?.hasItem('terrainextender')) { - return 8; - } - return 5; - }, - onModifyAccuracy(accuracy, target, source, move) { - if (move.type === 'Water') { - return this.chainModify(1.2); - } - }, - onFieldStart(field, source, effect) { - if (effect && effect.effectType === 'Ability') { - this.add('-fieldstart', 'move: Wave Terrain', '[from] ability: ' + effect, '[of] ' + source); - } else { - this.add('-fieldstart', 'move: Wave Terrain'); - } - this.add('-message', 'The battlefield suddenly flooded!'); - const removeAll = [ - 'reflect', 'lightscreen', 'auroraveil', 'safeguard', 'mist', 'spikes', - 'toxicspikes', 'stealthrock', 'stickyweb', 'gmaxsteelsurge', - ]; - const silentRemove = ['reflect', 'lightscreen', 'auroraveil', 'safeguard', 'mist']; - for (const sideCondition of removeAll) { - if (source.side.foe.removeSideCondition(sideCondition)) { - if (!silentRemove.includes(sideCondition)) { - this.add('-sideend', source.side.foe, this.dex.conditions.get(sideCondition).name, '[from] move: Wave Terrain', '[of] ' + source); - } - } - if (source.side.removeSideCondition(sideCondition)) { - if (!silentRemove.includes(sideCondition)) { - this.add('-sideend', source.side, this.dex.conditions.get(sideCondition).name, '[from] move: Wave Terrain', '[of] ' + source); - } - } - } - this.add('-message', `Hazards were removed by the terrain!`); - }, - onFieldResidualOrder: 21, - onFieldResidualSubOrder: 3, - onFieldEnd() { - this.add('-fieldend', 'move: Wave Terrain'); - }, - }, - secondary: null, - target: "all", - type: "Water", - }, - - // Archas - broadsidebarrage: { - accuracy: 90, - basePower: 30, - category: "Physical", - desc: "Hits 4 times. If one hit breaks the target's substitute, it will take damage for the remaining hits. This move is super effective against Steel-type Pokemon.", - shortDesc: "Hits 4 times. Super effective on Steel.", - name: "Broadside Barrage", - gen: 8, - pp: 5, - priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, - onTryMove() { - this.attrLastMove('[still]'); - }, - onPrepareHit(target, source) { - this.add('-anim', target, 'Close Combat', target); - this.add('-anim', target, 'Earthquake', target); - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Archas')}|Fire all guns! Fiiiiire!`); - }, - onEffectiveness(typeMod, target, type) { - if (type === 'Steel') return 1; - }, - multihit: 4, - secondary: null, - target: "normal", - type: "Steel", - }, - - // Arcticblast - radiantburst: { - accuracy: 100, - basePower: 180, - category: "Special", - desc: "User gains Brilliant if not Brilliant without attacking. User attacks and loses Brilliant if Brilliant. Being Brilliant multiplies all stats by 1.5 and grants Perish Song immunity and Ingrain. This move loses priority if the user is already brilliant.", - shortDesc: "Gain or lose Brilliant. Attack if Brilliant.", - name: "Radiant Burst", - gen: 8, - pp: 10, - priority: 1, - flags: {protect: 1, snatch: 1}, - onTryMove() { - this.attrLastMove('[still]'); - }, - onTry(source, target) { - if (!source.volatiles['brilliant']) { - this.add('-anim', source, 'Recover', source); - source.addVolatile('brilliant'); - return null; - } - }, - onPrepareHit(target, source) { - this.add('-anim', source, 'Diamond Storm', target); - }, - onModifyPriority(priority, source, target, move) { - if (source.volatiles['brilliant']) return 0; - }, - onModifyMove(move, source) { - if (!source.volatiles['brilliant']) { - move.accuracy = true; - move.target = "self"; - delete move.flags.protect; - move.flags.bypasssub = 1; - } - }, - onHit(target, pokemon) { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Arcticblast')}|YEET`); - if (pokemon.volatiles['brilliant']) pokemon.removeVolatile('brilliant'); - }, - secondary: null, - target: "normal", - type: "Fairy", - }, - - // awa - awa: { - accuracy: 100, - basePower: 90, - category: "Physical", - desc: "Sets up Sandstorm.", - shortDesc: "Sets up Sandstorm.", - name: "awa!", - gen: 8, - pp: 15, - priority: 0, - flags: {protect: 1, mirror: 1}, - onTryMove() { - this.attrLastMove('[still]'); - }, - onPrepareHit(target, source) { - this.add('-anim', source, 'Let\'s Snuggle Forever', target); - }, - weather: 'sandstorm', - secondary: null, - target: "normal", - type: "Rock", - }, - - // Beowulf - buzzinspection: { - accuracy: true, - basePower: 0, - category: "Status", - desc: "The user gains the ability Compound Eyes for the remainder of the battle and then switches out", - shortDesc: "Gains Compound Eyes and switches.", - name: "Buzz Inspection", - gen: 8, - pp: 10, - priority: 0, - flags: {}, - onTryMove() { - this.attrLastMove('[still]'); - }, - onPrepareHit(target, source) { - this.add('-anim', source, 'Night Shade', source); - }, - onHit(pokemon) { - pokemon.baseAbility = 'compoundeyes' as ID; - pokemon.setAbility('compoundeyes'); - this.add('-ability', pokemon, pokemon.getAbility().name, '[from] move: Buzz Inspection'); - }, - selfSwitch: true, - secondary: null, - target: "self", - type: "Bug", - }, - - // biggie - juggernautpunch: { - accuracy: 100, - basePower: 150, - category: "Physical", - desc: "The user loses its focus and does nothing if it is hit by a damaging attack equal to or greater than 20% of the user's maxmimum HP this turn before it can execute the move.", - shortDesc: "Fails if the user takes ≥20% before it hits.", - name: "Juggernaut Punch", - gen: 8, - pp: 20, - priority: -3, - flags: {contact: 1, protect: 1, punch: 1}, - onTryMove() { - this.attrLastMove('[still]'); - }, - onPrepareHit(target, source) { - this.add('-anim', source, 'Focus Punch', target); - }, - beforeTurnCallback(pokemon) { - pokemon.addVolatile('juggernautpunch'); - }, - beforeMoveCallback(pokemon) { - if (pokemon.volatiles['juggernautpunch'] && pokemon.volatiles['juggernautpunch'].lostFocus) { - this.add('cant', pokemon, 'Juggernaut Punch', 'Juggernaut Punch'); - return true; - } - }, - condition: { - duration: 1, - onStart(pokemon) { - this.add('-singleturn', pokemon, 'move: Juggernaut Punch'); - }, - onDamagePriority: -101, - onDamage(damage, target, source, effect) { - if (effect.effectType !== 'Move') return; - if (damage > target.baseMaxhp / 5) { - target.volatiles['juggernautpunch'].lostFocus = true; - } - }, - }, - secondary: null, - target: "normal", - type: "Fighting", - }, - - // Billo - fishingforhacks: { - accuracy: 100, - basePower: 80, - category: "Special", - desc: "Knocks off opponent's item and randomly sets Stealth Rocks, Spikes, or Toxic Spikes.", - shortDesc: "Knock off foe's item. Set random hazard.", - name: "Fishing for Hacks", - gen: 8, - pp: 15, - priority: 0, - flags: {protect: 1, mirror: 1}, - onTryMove() { - this.attrLastMove('[still]'); - }, - onPrepareHit(target, source) { - this.add('-anim', source, 'Mist Ball', target); - }, - onAfterHit(target, source) { - if (source.hp) { - const item = target.takeItem(source); - if (item) { - this.add('-enditem', target, item.name, '[from] move: Fishing for Hacks', '[of] ' + source); - } - } - const hazard = this.sample(['Stealth Rock', 'Spikes', 'Toxic Spikes']); - target.side.addSideCondition(hazard); - }, - secondary: null, - target: "normal", - type: "Fairy", - }, - - // Blaz - bleakdecember: { - accuracy: 100, - basePower: 80, - category: "Special", - desc: "Damage is calculated using the user's Special Defense stat as its Special Attack, including stat stage changes. Other effects that modify the Special Attack stat are used as normal.", - shortDesc: "Uses user's SpD stat as SpA in damage calculation.", - name: "Bleak December", - gen: 8, - pp: 15, - priority: 0, - flags: {protect: 1, mirror: 1}, - onTryMove() { - this.attrLastMove('[still]'); - }, - onPrepareHit(target, source) { - this.add('-anim', source, 'Spirit Break', target); - }, - overrideOffensiveStat: 'spd', - secondary: null, - target: "normal", - type: "Fairy", - }, - - // Brandon - flowershower: { - accuracy: 100, - basePower: 100, - category: "Special", - desc: "This move is physical if the target's Defense is lower than the target's Special Defense.", - shortDesc: "Physical if target Def < Sp. Def.", - name: "Flower Shower", - gen: 8, - pp: 10, - priority: 0, - flags: {protect: 1, mirror: 1}, - onTryMove() { - this.attrLastMove('[still]'); - }, - onPrepareHit(target, source) { - this.add('-anim', source, 'Petal Dance', target); - }, - onModifyMove(move, source, target) { - if (target && target.getStat('def', false, true) < target.getStat('spd', false, true)) { - move.category = "Physical"; - } - }, - secondary: null, - target: "normal", - type: "Grass", - }, - - // Used for Brandon's ability - baneterrain: { - accuracy: true, - basePower: 0, - category: "Status", - desc: "For 5 turns, the terrain becomes Bane Terrain. During the effect, moves hit off of the Pokemon's weaker attacking stat. Fails if the current terrain is Bane Terrain.", - shortDesc: "5 turns. Moves hit off of weaker stat.", - name: "Bane Terrain", - pp: 10, - priority: 0, - flags: {nonsky: 1}, - terrain: 'baneterrain', - condition: { - duration: 5, - durationCallback(source, effect) { - if (source?.hasItem('terrainextender')) { - return 8; - } - return 5; - }, - onModifyMove(move, source, target) { - if (move.overrideOffensiveStat && !['atk', 'spa'].includes(move.overrideOffensiveStat)) return; - const attacker = move.overrideOffensivePokemon === 'target' ? target : source; - if (!attacker) return; - const attackerAtk = attacker.getStat('atk', false, true); - const attackerSpa = attacker.getStat('spa', false, true); - move.overrideOffensiveStat = attackerAtk > attackerSpa ? 'spa' : 'atk'; - }, - // Stat modifying in scripts.ts - onFieldStart(field, source, effect) { - if (effect?.effectType === 'Ability') { - this.add('-fieldstart', 'move: Bane Terrain', '[from] ability: ' + effect, '[of] ' + source); - } else { - this.add('-fieldstart', 'move: Bane Terrain'); - } - this.add('-message', 'The battlefield suddenly became grim!'); - }, - onFieldResidualOrder: 21, - onFieldResidualSubOrder: 3, - onFieldEnd() { - this.add('-fieldend', 'move: Bane Terrain'); - }, - }, - secondary: null, - target: "all", - type: "Grass", - zMove: {boost: {def: 1}}, - contestType: "Beautiful", - }, - - // brouha - kinetosis: { - accuracy: 100, - basePower: 70, - category: "Special", - desc: "Badly poisons the target. If it is the user's first turn out, this move has +3 priority.", - shortDesc: "First turn: +3 priority. Target: TOX.", - name: "Kinetosis", - gen: 8, - pp: 10, - priority: 0, - flags: {protect: 1, mirror: 1}, - onTryMove() { - this.attrLastMove('[still]'); - }, - onPrepareHit(target, source) { - this.add('-anim', source, 'Aeroblast', target); - this.add('-anim', source, 'Haze', target); - }, - onModifyPriority(priority, source) { - if (source.activeMoveActions < 1) return priority + 3; - }, - secondary: { - chance: 100, - status: 'tox', - }, - target: 'normal', - type: 'Flying', - }, - - // Buffy - pandorasbox: { - accuracy: true, - basePower: 0, - category: "Status", - desc: "Gains Protean and replaces Swords Dance and Pandora's Box with two moves from two random types.", - shortDesc: "Gains Protean and some random moves.", - name: "Pandora's Box", - gen: 8, - pp: 5, - priority: 1, - flags: {snatch: 1}, - onTryMove() { - this.attrLastMove('[still]'); - }, - onPrepareHit(target, source) { - this.add('-anim', source, 'Teeter Dance', target); - }, - volatileStatus: 'pandorasbox', - condition: { - onStart(target) { - const typeMovePair: {[key: string]: string} = { - Normal: 'Body Slam', - Fighting: 'Drain Punch', - Flying: 'Floaty Fall', - Poison: 'Baneful Bunker', - Ground: 'Shore Up', - Rock: 'Stealth Rock', - Bug: 'Sticky Web', - Ghost: 'Shadow Sneak', - Steel: 'Iron Defense', - Fire: 'Fire Fang', - Water: 'Life Dew', - Grass: 'Synthesis', - Electric: 'Thunder Fang', - Psychic: 'Psychic Fangs', - Ice: 'Icicle Crash', - Dragon: 'Dragon Darts', - Dark: 'Taunt', - Fairy: 'Play Rough', - }; - const newMoveTypes = Object.keys(typeMovePair); - this.prng.shuffle(newMoveTypes); - const moves = [typeMovePair[newMoveTypes[0]], typeMovePair[newMoveTypes[1]]]; - target.m.replacedMoves = moves; - for (const moveSlot of target.moveSlots) { - if (!(moveSlot.id === 'swordsdance' || moveSlot.id === 'pandorasbox')) continue; - if (!target.m.backupMoves) { - target.m.backupMoves = [this.dex.deepClone(moveSlot)]; - } else { - target.m.backupMoves.push(this.dex.deepClone(moveSlot)); - } - const moveData = this.dex.moves.get(this.toID(moves.pop())); - if (!moveData.id) continue; - target.moveSlots[target.moveSlots.indexOf(moveSlot)] = { - move: moveData.name, - id: moveData.id, - pp: Math.floor(moveData.pp * (moveSlot.pp / moveSlot.maxpp)), - maxpp: ((moveData.noPPBoosts || moveData.isZ) ? moveData.pp : moveData.pp * 8 / 5), - target: moveData.target, - disabled: false, - disabledSource: '', - used: false, - }; - } - target.setAbility('protean'); - this.add('-ability', target, target.getAbility().name, '[from] move: Pandora\'s Box'); - this.add('-message', `${target.name} learned new moves!`); - }, - onEnd(pokemon) { - if (!pokemon.m.backupMoves) return; - for (const [index, moveSlot] of pokemon.moveSlots.entries()) { - if (!(pokemon.m.replacedMoves.includes(moveSlot.move))) continue; - pokemon.moveSlots[index] = pokemon.m.backupMoves.shift(); - pokemon.moveSlots[index].pp = Math.floor(pokemon.moveSlots[index].maxpp * (moveSlot.pp / moveSlot.maxpp)); - } - delete pokemon.m.backupMoves; - delete pokemon.m.replacedMoves; - }, - }, - target: "self", - type: "Dragon", - }, - - // Cake - kevin: { - accuracy: true, - basePower: 100, - category: "Physical", - desc: "This move combines the user's current typing in its type effectiveness against the target. If the target lost HP, the user takes recoil damage equal to 1/8 of the HP lost by the target, rounded half up, but not less than 1 HP.", - shortDesc: "This move is the user's type combo. 1/8 recoil.", - name: "Kevin", - gen: 8, - pp: 10, - flags: {protect: 1, mirror: 1}, - onTryMove() { - this.attrLastMove('[still]'); - }, - onPrepareHit(target, source, move) { - this.add('-anim', source, 'Brave Bird', target); - if (!this.randomChance(255, 256)) { - this.attrLastMove('[miss]'); - this.add('-activate', target, 'move: Celebrate'); - this.add('-miss', source); - this.hint("In Super Staff Bros, this move can still miss 1/256 of the time regardless of accuracy or evasion."); - return null; - } - }, - onModifyType(move, pokemon, target) { - move.type = pokemon.types[0]; - }, - onTryImmunity(target, pokemon) { - if (pokemon.types[1]) { - if (!target.runImmunity(pokemon.types[1])) return false; - } - return true; - }, - onEffectiveness(typeMod, target, type, move) { - if (!target) return; - const pokemon = target.side.foe.active[0]; - if (pokemon.types[1]) { - return typeMod + this.dex.getEffectiveness(pokemon.types[1], type); - } - return typeMod; - }, - priority: 0, - recoil: [1, 8], - secondary: null, - target: "normal", - type: "Bird", - }, - - // cant say - neverlucky: { - accuracy: 85, - basePower: 110, - category: "Special", - desc: "Doubles base power if statused. Has a 10% chance to boost every stat 1 stage. High Crit Ratio.", - shortDesc: "x2 power if statused. 10% omniboost. High crit.", - name: "Never Lucky", - gen: 8, - pp: 10, - priority: 0, - flags: {protect: 1, mirror: 1}, - onTryMove() { - this.attrLastMove('[still]'); - }, - onPrepareHit(target, source) { - this.add('-anim', source, 'Overheat', target); - }, - onBasePower(basePower, pokemon) { - if (pokemon.status && pokemon.status !== 'slp') { - return this.chainModify(2); - } - }, - secondary: { - chance: 10, - self: { - boosts: { - atk: 1, - def: 1, - spa: 1, - spd: 1, - spe: 1, - }, - }, - }, - critRatio: 2, - target: "normal", - type: "Fire", - }, - - // Celine - statusguard: { - accuracy: 100, - basePower: 0, - category: "Status", - desc: "Protects from physical moves. If hit by physical move, opponent is either badly poisoned, burned, or paralyzed at random and is forced out. Special attacks and status moves go through this protect.", - shortDesc: "Protected from physical moves. Gives brn/par/tox.", - name: "Status Guard", - gen: 8, - pp: 10, - priority: 4, - flags: {}, - stallingMove: true, - volatileStatus: 'statusguard', - onTryMove() { - this.attrLastMove('[still]'); - }, - onHit(pokemon) { - pokemon.addVolatile('stall'); - }, - onPrepareHit(target, source) { - this.add('-anim', source, 'Protect', source); - }, - onTryHit(pokemon) { - return !!this.queue.willAct() && this.runEvent('StallMove', pokemon); - }, - condition: { - duration: 1, - onStart(target) { - this.add('-singleturn', target, 'Protect'); - }, - onTryHitPriority: 3, - onTryHit(target, source, move) { - if (!move.flags['protect']) { - if (move.isZ || (move.isMax && !move.breaksProtect)) target.getMoveHitData(move).zBrokeProtect = true; - return; - } - if (move.category === 'Special' || move.category === 'Status') { - return; - } else 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 (move.category === 'Physical') { - const statuses = ['brn', 'par', 'tox']; - source.trySetStatus(this.sample(statuses), target); - source.forceSwitchFlag = true; - } - return this.NOT_FAIL; - }, - onHit(target, source, move) { - if (move.category === 'Physical') { - const statuses = ['brn', 'par', 'tox']; - source.trySetStatus(this.sample(statuses), target); - source.forceSwitchFlag = true; - } - }, - }, - secondary: null, - target: "self", - type: "Normal", - }, - - // c.kilgannon - soulsiphon: { - accuracy: 100, - basePower: 70, - category: "Physical", - desc: "Lowers the target's Attack by 1 stage. The user restores its HP equal to the target's Attack stat calculated with its stat stage before this move was used. If Big Root is held by the user, the HP recovered is 1.3x normal, rounded half down. Fails if the target's Attack stat stage is -6.", - shortDesc: "User heals HP=target's Atk stat. Lowers Atk by 1.", - name: "Soul Siphon", - gen: 8, - pp: 10, - priority: 0, - flags: {contact: 1, mirror: 1, protect: 1, heal: 1}, - onTryMove() { - this.attrLastMove('[still]'); - }, - onPrepareHit(target, source) { - this.add('-anim', source, 'Supersonic Skystrike', target); - }, - onHit(target, source) { - if (target.boosts.atk === -6) return false; - const atk = target.getStat('atk', false, true); - const success = this.boost({atk: -1}, target, source, null, false, true); - return !!(this.heal(atk, source, target) || success); - }, - secondary: null, - target: "normal", - type: "Flying", - }, - - // Coconut - devolutionbeam: { - accuracy: 100, - basePower: 80, - category: "Special", - desc: "If the target Pokemon is evolved, this move will reduce the target to its first-stage form. If the target Pokemon is single-stage or is already in its first-stage form, this move lowers all of the opponent's stats by 1. Hits Ghost types.", - shortDesc: "Devolves evolved mons;-1 all stats to LC.", - name: "Devolution Beam", - gen: 8, - pp: 5, - priority: 0, - flags: {protect: 1}, - ignoreImmunity: {'Normal': true}, - onTryMove() { - this.attrLastMove('[still]'); - }, - onPrepareHit(target, source) { - this.add('-anim', source, 'Psywave', target); - }, - onHit(target, source, move) { - let species = target.species; - if (species.isMega) species = this.dex.species.get(species.baseSpecies); - const ability = target.ability; - const isSingleStage = (species.nfe && !species.prevo) || (!species.nfe && !species.prevo); - if (!isSingleStage) { - let prevo = species.prevo; - if (this.dex.species.get(prevo).prevo) { - prevo = this.dex.species.get(prevo).prevo; - } - target.formeChange(prevo, this.effect); - target.canMegaEvo = null; - target.setAbility(ability); - } else { - this.boost({atk: -1, def: -1, spa: -1, spd: -1, spe: -1}, target, source); - } - }, - secondary: null, - target: "normal", - type: "Normal", - }, - - // dogknees - bellyrubs: { - accuracy: true, - basePower: 0, - category: "Status", - desc: "Heals the user by 25% of their maximum HP. Boosts the user's Attack and Defense by 1 stage.", - shortDesc: "Heals 25% HP. Boosts Atk/Def by 1 stage.", - name: "Belly Rubs", - gen: 8, - pp: 5, - priority: 0, - flags: {heal: 1, snatch: 1}, - onTryMove() { - this.attrLastMove('[still]'); - }, - onPrepareHit(target, source) { - this.add('-anim', source, 'Belly Drum', target); - }, - self: { - boosts: { - atk: 1, - def: 1, - }, - }, - onHit(pokemon, target, move) { - this.heal(pokemon.maxhp / 4, pokemon, pokemon, move); - }, - secondary: null, - zMove: {boost: {spe: 1}}, - target: "self", - type: "Normal", - }, - - // drampa's grandpa - getoffmylawn: { - accuracy: 100, - basePower: 78, - category: "Special", - desc: "The target is forced out after being damaged.", - shortDesc: "Phazes target.", - name: "GET OFF MY LAWN!", - gen: 8, - pp: 10, - priority: -6, - flags: {protect: 1, sound: 1, bypasssub: 1, mirror: 1}, - onTryMove() { - this.attrLastMove('[still]'); - }, - onPrepareHit(target, source) { - this.add('-anim', source, 'Boomburst', target); - }, - onHit() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('drampa\'s grandpa')}|GET OFF MY LAWN!!!`); - }, - secondary: null, - forceSwitch: true, - target: "normal", - type: "Normal", - }, - - // DragonWhale - cloakdance: { - accuracy: true, - basePower: 0, - category: "Status", - desc: "If Mimikyu's Disguise is intact, the user is not Mimikyu, or Mimikyu is the last remaining Pokemon, Attack goes up 2 stages. If Mimikyu's Disguise is busted and there are other Pokemon on Mimikyu's side, the Disguise will be repaired and Mimikyu will switch out.", - shortDesc: "Busted: Repair, switch. Last mon/else: +2 Atk.", - name: "Cloak Dance", - pp: 5, - priority: 0, - flags: {snatch: 1, dance: 1}, - onTryMove() { - this.attrLastMove('[still]'); - }, - onPrepareHit(target, source) { - const moveAnim = (!source.abilityState.busted || source.side.pokemonLeft === 1) ? 'Swords Dance' : 'Teleport'; - this.add('-anim', source, moveAnim, target); - }, - onHit(target, source) { - if (!source.abilityState.busted || source.side.pokemonLeft === 1) { - this.boost({atk: 2}, target); - } else { - delete source.abilityState.busted; - if (source.species.baseSpecies === 'Mimikyu') source.formeChange('Mimikyu', this.effect, true); - source.switchFlag = true; - } - }, - secondary: null, - target: "self", - type: "Fairy", - }, - - // dream - lockandkey: { - accuracy: 100, - basePower: 0, - category: "Status", - desc: "Raises the user's Special Attack and Special Defense stats by 1 stage and prevents the target from switching out.", - shortDesc: "Raises user's SpA and SpD by 1. Traps foe.", - name: "Lock and Key", - gen: 8, - pp: 10, - priority: 0, - flags: {snatch: 1}, - onTryMove() { - this.attrLastMove('[still]'); - }, - onPrepareHit(target, source) { - this.add('-anim', source, 'Calm Mind', source); - this.add('-anim', target, 'Imprison', target); - }, - onHit(target, source, move) { - if (source.isActive) target.addVolatile('trapped', source, move, 'trapper'); - }, - self: { - boosts: { - spa: 1, - spd: 1, - }, - }, - secondary: null, - target: "allAdjacentFoes", - type: "Steel", - }, - - // Elgino - navisgrace: { - accuracy: 100, - basePower: 90, - category: "Special", - desc: "This move is super effective on Steel- and Poison-type Pokemon.", - shortDesc: "Super effective on Steel- and Poison-types.", - name: "Navi's Grace", - gen: 8, - pp: 15, - priority: 0, - flags: {protect: 1}, - secondary: null, - onTryMove() { - this.attrLastMove('[still]'); - }, - onPrepareHit(target, source) { - this.add('-anim', source, 'Dazzling Gleam', target); - this.add('-anim', source, 'Earth Power', target); - }, - onEffectiveness(typeMod, target, type) { - if (type === 'Poison' || type === 'Steel') return 1; - }, - target: 'normal', - type: 'Fairy', - }, - - // Emeri - forcedlanding: { - accuracy: true, - basePower: 0, - category: "Status", - desc: "The user restores 1/2 of its maximum HP, rounded half up. For 5 turns, the evasiveness of all active Pokemon is multiplied by 0.6. At the time of use, Bounce, Fly, Magnet Rise, Sky Drop, and Telekinesis end immediately for all active Pokemon. During the effect, Bounce, Fly, Flying Press, High Jump Kick, Jump Kick, Magnet Rise, Sky Drop, Splash, and Telekinesis are prevented from being used by all active Pokemon. Ground-type attacks, Spikes, Toxic Spikes, Sticky Web, and the Arena Trap Ability can affect Flying types or Pokemon with the Levitate Ability. Fails if this move is already in effect.", - shortDesc: "Restore 50% HP + set Gravity.", - name: "Forced Landing", - gen: 8, - pp: 10, - priority: 0, - flags: {heal: 1}, - onHit(pokemon, target, move) { - this.heal(pokemon.maxhp / 2, pokemon, pokemon, move); - }, - pseudoWeather: 'gravity', - onTryMove() { - this.attrLastMove('[still]'); - }, - onPrepareHit(target, source) { - this.add('-anim', source, 'Roost', source); - this.add('-anim', source, 'Gravity', source); - }, - secondary: null, - target: "self", - type: "Flying", - }, - - // EpicNikolai - epicrage: { - accuracy: 95, - basePower: 120, - category: "Physical", - desc: "Has a 25% chance to paralyze the target, and take 40% recoil. If the user is fire-type, it has a 25% chance to burn the target and take 33% recoil.", - shortDesc: "25% Par + 40% recoil.Fire: 25% burn + 33% recoil.", - name: "Epic Rage", - gen: 8, - pp: 5, - priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, - onTryMove() { - this.attrLastMove('[still]'); - }, - onPrepareHit(target, source) { - this.add('-anim', source, 'Draco Meteor', target); - }, - onModifyMove(move, pokemon) { - if (!pokemon.types.includes('Fire')) return; - move.secondaries = [{ - chance: 25, - status: 'brn', - }]; - move.recoil = [33, 100]; - }, - recoil: [4, 10], - secondary: { - chance: 25, - status: "par", - }, - target: "normal", - type: "Fire", - }, - - // estarossa - sandbalance: { - accuracy: true, - basePower: 0, - category: "Status", - desc: "The user uses Roar, then switches out after forcing out the opposing Pokemon.", - shortDesc: "Uses Roar, switches out after.", - name: "Sand Balance", - gen: 8, - pp: 10, - priority: -6, - flags: {bypasssub: 1, protect: 1, mirror: 1, sound: 1, reflectable: 1}, - onTryMove() { - this.attrLastMove('[still]'); - }, - onPrepareHit(target, source) { - this.add('-anim', source, 'Roar', target); - this.add('-anim', source, 'Parting Shot', target); - }, - forceSwitch: true, - selfSwitch: true, - secondary: null, - target: "normal", - type: "Ground", - }, - - // explodingdaisies - youhavenohope: { - accuracy: 100, - basePower: 0, - damageCallback(pokemon, target) { - return target.getUndynamaxedHP() - pokemon.hp; - }, - onTryImmunity(target, pokemon) { - return pokemon.hp < target.hp; - }, - category: "Physical", - desc: "Lowers the target's HP to the user's HP. This move bypasses the target's substitute.", - shortDesc: "Lowers the target's HP to the user's HP.", - name: "You Have No Hope!", - pp: 1, - noPPBoosts: true, - priority: 0, - flags: {bypasssub: 1, contact: 1, protect: 1, mirror: 1}, - gen: 8, - onTryMove() { - this.attrLastMove('[still]'); - }, - onPrepareHit(target, source) { - this.add('-anim', source, 'Endeavor', target); - }, - onHit(target, source) { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('explodingdaisies')}|You have no hope ${target.name}!`); - }, - secondary: null, - target: "normal", - type: "Normal", - }, - // fart - soupstealing7starstrikeredux: { - accuracy: 100, - basePower: 40, - basePowerCallback() { - if (this.field.pseudoWeather.soupstealing7starstrikeredux) { - return 40 * this.field.pseudoWeather.soupstealing7starstrikeredux.multiplier; - } - return 40; - }, - category: "Physical", - desc: "This move is either a Water, Fire, or Grass type move. The selected type is added to the user of this move. For every consecutive turn that this move is used by at least one Pokemon, this move's power is multiplied by the number of turns to pass, but not more than 5.", - shortDesc: "Change type to F/W/G. Power+ on repeat.", - name: "Soup-Stealing 7-Star Strike: Redux", - gen: 8, - pp: 15, - priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, - onTry() { - this.field.addPseudoWeather('soupstealing7starstrikeredux'); - }, - onTryMove() { - this.attrLastMove('[still]'); - }, - onPrepareHit(target, source) { - this.add('-anim', source, "Conversion", source); - }, - onModifyMove(move, pokemon) { - const types = ['Fire', 'Water', 'Grass']; - const randomType = this.sample(types); - move.type = randomType; - pokemon.addType(randomType); - this.add('-start', pokemon, 'typeadd', randomType); - }, - onHit(target, source) { - this.add('-anim', source, 'Spectral Thief', target); - if (this.randomChance(1, 2)) { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('fart')}|I hl on soup`); - } else { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('fart')}|I walk with purpose. bring me soup.`); - } - }, - condition: { - duration: 2, - onFieldStart() { - this.effectState.multiplier = 1; - }, - onFieldRestart() { - if (this.effectState.duration !== 2) { - this.effectState.duration = 2; - if (this.effectState.multiplier < 5) { - this.effectState.multiplier++; - } - } - }, - }, - secondary: null, - target: "normal", - type: "Normal", - }, - - // Felucia - riggeddice: { - accuracy: true, - basePower: 0, - category: "Status", - desc: "Inverts target's stat boosts if they have any; taunts otherwise. User then switches out.", - shortDesc: "If target has boosts, invert; else, taunt. Switch out.", - name: "Rigged Dice", - gen: 8, - pp: 10, - priority: 0, - flags: {protect: 1, reflectable: 1}, - onTryMove() { - this.attrLastMove('[still]'); - }, - onPrepareHit(target, source) { - this.add('-anim', source, 'Smart Strike', source); - }, - onHit(target, source, move) { - let success = false; - let i: BoostID; - for (i in target.boosts) { - if (target.boosts[i] === 0) continue; - target.boosts[i] = -target.boosts[i]; - success = true; - } - if (success) { - this.add('-invertboost', target, '[from] move: Rigged Dice'); - } else { - target.addVolatile("taunt"); - } - }, - selfSwitch: true, - secondary: null, - target: "normal", - type: "Ice", - }, - - // Finland - cradilychaos: { - accuracy: true, - basePower: 0, - category: "Status", - desc: "All Pokemon on the field get a +1 boost to a random stat. The target is badly poisoned, regardless of typing. If the user is Alcremie, it changes to a non-Vanilla Cream forme.", - shortDesc: "Random boosts to all mons. Tox. Change forme.", - name: "Cradily Chaos", - gen: 8, - pp: 10, - priority: 0, - flags: {protect: 1, reflectable: 1}, - onTryMove() { - this.attrLastMove('[still]'); - }, - onPrepareHit(target, source) { - this.add('-anim', source, 'Psywave', target); - }, - onHit(target, source, move) { - const boosts: BoostID[] = ['atk', 'def', 'spa', 'spd', 'spe']; - const selfBoost: SparseBoostsTable = {}; - selfBoost[boosts[this.random(5)]] = 1; - const oppBoost: SparseBoostsTable = {}; - oppBoost[boosts[this.random(5)]] = 1; - this.boost(selfBoost, source); - this.boost(oppBoost, target); - target.trySetStatus('tox', source); - if (source.species.baseSpecies === 'Alcremie') { - const formes = ['Finland', 'Finland-Tsikhe', 'Finland-Nezavisa', 'Finland-Järvilaulu'] - .filter(forme => ssbSets[forme].species !== source.species.name); - const newSet = this.sample(formes); - changeSet(this, source, ssbSets[newSet]); - } - }, - secondary: null, - target: "normal", - type: "Poison", - }, - - // frostyicelad - frostywave: { - accuracy: 100, - basePower: 95, - category: "Special", - desc: "This move and its effects ignore the Abilities of other Pokemon.", - shortDesc: "Ignores abilities.", - name: "Frosty Wave", - gen: 8, - pp: 10, - priority: 0, - flags: {protect: 1, mirror: 1, sound: 1, bypasssub: 1}, - ignoreAbility: true, - onTryMove() { - this.attrLastMove('[still]'); - }, - onPrepareHit(target, source) { - this.add('-anim', source, 'Boomburst', target); - this.add('-anim', source, 'Frost Breath', target); - }, - secondary: null, - target: "allAdjacentFoes", - type: "Ice", - }, - - // gallant's pear - kinggirigirislash: { - accuracy: 100, - basePower: 100, - category: "Special", - desc: "Removes the opponent's Reflect, Light Screen, Aurora Veil, and Safeguard. Secondary effect depends on the user's secondary typing: Psychic: 100% chance to lower target's Speed by 1; Fire: 10% burn; Steel: 10% flinch; Rock: apply Smack Down; Electric: 10% paralyze; else: no additional effect.", - shortDesc: "Breaks screens. Secondary depends on type.", - name: "King Giri Giri Slash", - gen: 8, - pp: 10, - priority: 0, - flags: {protect: 1, mirror: 1}, - onTryMove() { - this.attrLastMove('[still]'); - }, - onModifyMove(move, pokemon) { - move.type = pokemon.types[1] || "Normal"; - if (!move.secondaries) move.secondaries = []; - if (move.type === 'Rock') { - move.secondaries.push({ - chance: 100, - volatileStatus: 'smackdown', - }); - } else if (move.type === 'Fire') { - move.secondaries.push({ - chance: 10, - status: 'brn', - }); - } else if (move.type === 'Steel') { - move.secondaries.push({ - chance: 10, - volatileStatus: 'flinch', - }); - } else if (move.type === 'Electric') { - move.secondaries.push({ - chance: 10, - status: 'par', - }); - } else if (move.type === 'Psychic') { - move.secondaries.push({ - chance: 100, - boosts: {spe: -1}, - }); - } - }, - onTryHit(pokemon, source, move) { - // will shatter screens through sub, before you hit - if (pokemon.runImmunity(move.type)) { - pokemon.side.removeSideCondition('reflect'); - pokemon.side.removeSideCondition('lightscreen'); - pokemon.side.removeSideCondition('auroraveil'); - } - }, - onPrepareHit(target, source) { - this.add('-anim', source, 'Solar Blade', target); - }, - secondary: null, - target: "normal", - type: "Normal", - }, - - // Gimmick - randomscreaming: { - accuracy: 100, - basePower: 50, - category: "Special", - desc: "Has a 10% chance to freeze the target. If the target is frozen, this move will deal double damage and thaw the target.", - shortDesc: "10% frz. FRZ: 2x damage then thaw.", - name: "Random Screaming", - gen: 8, - pp: 10, - priority: 0, - flags: {protect: 1, mirror: 1, sound: 1, bypasssub: 1}, - onTryMove() { - this.attrLastMove('[still]'); - }, - onPrepareHit(target, source) { - this.add('-anim', source, 'Hyper Voice', target); - this.add('-anim', source, 'Misty Terrain', target); - }, - onBasePower(basePower, source, target, move) { - if (target.status === 'frz') { - return this.chainModify(2); - } - }, - secondary: { - chance: 10, - status: 'frz', - onHit() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Gimmick')}|Show me some more paaain, baaaby`); - }, - }, - thawsTarget: true, - target: "normal", - type: "Fire", - }, - - // GMars - gacha: { - accuracy: true, - basePower: 0, - category: "Status", - desc: "Lowers the user's Defense and Special Defense by 1 stage. Raises the user's Attack, Special Attack, and Speed by 2 stages. If the user is Minior-Meteor, its forme changes, with a different effect for each forme.", - shortDesc: "Shell Smash; Minior: change forme.", - name: "Gacha", - pp: 15, - priority: 0, - flags: {snatch: 1}, - onTryMove() { - this.attrLastMove('[still]'); - }, - onPrepareHit(target, source) { - this.add('-anim', source, 'Brick Break', source); - }, - onHit(target, source, move) { - if (target.species.id !== 'miniormeteor') return; - let forme: string; - let message = ""; - const random = this.random(100); - let shiny = false; - if (random < 3) { - forme = "Minior-Violet"; - message = "Oof, Violet. Tough break. A Violet Minior is sluggish and won't always listen to your commands. Best of luck! Rating: ★ ☆ ☆ ☆ ☆ "; - } else if (random < 13) { - forme = "Minior-Indigo"; - message = "Uh oh, an Indigo Minior. Its inspiring color may have had some unintended effects and boosted your foe's attacking stats. Better hope you can take it down first! Rating: ★ ☆ ☆ ☆ ☆"; - } else if (random < 33) { - forme = "Minior"; - message = "Nice one, a Red Minior is hard for your opponent to ignore. They'll be goaded into attacking the first time they see this! Rating: ★ ★ ★ ☆ ☆ "; - } else if (random < 66) { - forme = "Minior-Orange"; - message = "Solid, you pulled an Orange Minior. Nothing too fancy, but it can definitely get the job done if you use it right. Rating: ★ ★ ☆ ☆ ☆"; - } else if (random < 86) { - forme = "Minior-Yellow"; - message = "Sweet, a Yellow Minior! This thing had a lot of static energy built up that released when you cracked it open, paralyzing the foe. Rating: ★ ★ ★ ☆ ☆ "; - } else if (random < 96) { - forme = "Minior-Blue"; - message = "Woah! You got a Blue Minior. This one's almost translucent; it looks like it'd be hard for an opponent to find a way to reduce its stats. Rating: ★ ★ ★ ★ ☆"; - } else if (random < 99) { - forme = "Minior-Green"; - message = "Nice! You cracked a Green Minior, that's definitely a rare one. This type of Minior packs an extra punch, and it's great for breaking through defensive teams without risking multiple turns of setup. Rating: ★ ★ ★ ★ ★"; - } else { - forme = "Minior"; - shiny = true; - target.set.shiny = true; - target.m.nowShiny = true; - message = "YO!! I can't believe it, you cracked open a Shiny Minior! Its multicolored interior dazzles its opponents and throws off their priority moves. Big grats. Rating: ★ ★ ★ ★ ★ ★"; - } - target.formeChange(forme, move, true); - const details = target.species.name + (target.level === 100 ? '' : ', L' + target.level) + - (target.gender === '' ? '' : ', ' + target.gender) + (target.set.shiny ? ', shiny' : ''); - if (shiny) this.add('replace', target, details); - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('GMars')}|${message}`); - target.setAbility('capsulearmor'); - target.baseAbility = target.ability; - if (target.set.shiny) return; - if (forme === 'Minior-Indigo') { - this.boost({atk: 1, spa: 1}, target.side.foe.active[0]); - } else if (forme === 'Minior') { - target.side.foe.active[0].addVolatile('taunt'); - } else if (forme === 'Minior-Yellow') { - target.side.foe.active[0].trySetStatus('par', target); - } else if (forme === 'Minior-Green') { - this.boost({atk: 1}, target); - } - }, - boosts: { - def: -1, - spd: -1, - atk: 2, - spa: 2, - spe: 2, - }, - secondary: null, - target: "self", - type: "Normal", - }, - - // grimAuxiliatrix - skyscrapersuplex: { - accuracy: 100, - basePower: 75, - onBasePower(basePower, pokemon, target) { - if (target?.statsRaisedThisTurn) { - return this.chainModify(2); - } - }, - category: "Special", - desc: "Power doubles if the target had a stat stage raised this turn.", - shortDesc: "2x power if the target that had a stat rise this turn.", - name: "Skyscraper Suplex", - gen: 8, - pp: 15, - priority: 0, - flags: {protect: 1, mirror: 1}, - onTryMove() { - this.attrLastMove('[still]'); - }, - onPrepareHit(target, source) { - this.add('-anim', source, 'Steel Beam', target); - }, - secondary: null, - target: "normal", - type: "Steel", - }, - - // HoeenHero - landfall: { - accuracy: 100, - category: "Special", - basePower: 0, - basePowerCallback(target, source, move) { - const windSpeeds = [65, 85, 85, 95, 95, 95, 95, 115, 115, 140]; - move.basePower = windSpeeds[this.random(0, 10)]; - return move.basePower; - }, - desc: "The foe is hit with a hurricane with a Base Power that varies based on the strength (category) of the hurricane. Category 1 is 65, category 2 is 85, category 3 is 95, category 4 is 115, and category 5 is 140. In addition, the target's side of the field is covered in a storm surge. Storm surge applies a 75% Speed multiplier to pokemon on that side of the field. Storm surge will last for as many turns as the hurricane's category (not including the turn Landfall was used).", - shortDesc: "Higher category = +dmg, foe side speed 75%.", - name: "Landfall", - gen: 8, - pp: 5, - priority: 0, - flags: {protect: 1, mirror: 1}, - onTryMove() { - this.attrLastMove('[still]'); - }, - onPrepareHit(target, source) { - this.add('-anim', source, 'Hurricane', target); - this.add('-anim', source, 'Surf', target); - }, - onHit(target, source, move) { - const windSpeeds = [65, 85, 95, 115, 140]; - const category = windSpeeds.indexOf(move.basePower) + 1; - this.add('-message', `A category ${category} hurricane made landfall!`); - }, - sideCondition: 'stormsurge', // Programmed in conditions.ts - target: "normal", - type: "Water", - }, - - // Hubriz - steroidanaphylaxia: { - accuracy: true, - basePower: 0, - category: "Status", - desc: "Inverts the target's stat stages.", - name: "Steroid Anaphylaxia", - gen: 8, - pp: 20, - priority: 1, - flags: {protect: 1, reflectable: 1}, - onTryMove() { - this.attrLastMove('[still]'); - }, - onHit(target) { - let success = false; - let i: BoostID; - for (i in target.boosts) { - if (target.boosts[i] === 0) continue; - target.boosts[i] = -target.boosts[i]; - success = true; - } - if (!success) return false; - this.add('-invertboost', target, '[from] move: Steroid Anaphylaxia'); - }, - target: "normal", - type: "Poison", - }, - - // Hydro - hydrostatics: { - accuracy: 100, - basePower: 75, - category: "Special", - desc: "Has a 70% chance to raise the user's Special Attack by 1 stage and a 50% chance to paralyze the target. This move combines Electric in its type effectiveness against the target.", - shortDesc: "70% +1 SpA; 50% par; +Electric in type effect.", - name: "Hydrostatics", - gen: 8, - pp: 10, - priority: 2, - flags: {protect: 1, mirror: 1}, - onTryMove() { - this.attrLastMove('[still]'); - }, - onPrepareHit(target, source) { - this.add('-anim', source, 'Origin Pulse', target); - this.add('-anim', source, 'Charge Beam', target); - }, - secondaries: [{ - chance: 70, - self: { - boosts: { - spa: 1, - }, - }, - }, { - chance: 50, - status: 'par', - }], - onEffectiveness(typeMod, target, type, move) { - return typeMod + this.dex.getEffectiveness('Electric', type); - }, - target: "normal", - type: "Water", - }, - - // Inactive - paranoia: { - accuracy: 90, - basePower: 100, - category: "Physical", - desc: "Has a 15% chance to burn the target.", - name: "Paranoia", - gen: 8, - pp: 10, - priority: 0, - flags: {protect: 1, mirror: 1}, - onTryMove() { - this.attrLastMove('[still]'); - }, - onPrepareHit(target, source) { - this.add('-anim', source, 'Max Flare', target); - }, - secondary: { - chance: 15, - status: 'brn', - }, - target: "normal", - type: "Dark", - }, - - // instruct - sodabreak: { - accuracy: true, - basePower: 10, - category: "Physical", - desc: "Has a 100% chance to make the target flinch. Causes the user to switch out. Fails unless it is the user's first turn on the field.", - shortDesc: "First turn: Flinches the target then switches out.", - name: "Soda Break", - isNonstandard: "Custom", - gen: 8, - pp: 10, - priority: 3, - flags: {contact: 1, protect: 1, mirror: 1}, - onTryMove() { - this.attrLastMove('[still]'); - }, - onPrepareHit(target, source) { - this.add('-anim', source, 'Milk Drink', source); - this.add('-anim', source, 'Fling', target); - this.add('-anim', source, 'U-turn', target); - }, - onTry(pokemon, target) { - if (pokemon.activeMoveActions > 1) { - this.attrLastMove('[still]'); - this.add('-fail', pokemon); - this.hint("Soda Break only works on your first turn out."); - return null; - } - }, - secondary: { - chance: 100, - volatileStatus: 'flinch', - }, - selfSwitch: true, - target: "normal", - type: "???", - }, - - // Iyarito - patronaattack: { - accuracy: 100, - basePower: 50, - category: "Special", - desc: "Usually goes first.", - name: "Patrona Attack", - gen: 8, - pp: 20, - priority: 1, - flags: {protect: 1, mirror: 1}, - onTryMove() { - this.attrLastMove('[still]'); - }, - onPrepareHit(target, source) { - this.add('-anim', source, 'Moongeist Beam', target); - }, - secondary: null, - target: "normal", - type: "Ghost", - }, - - // Jett - thehuntison: { - accuracy: 100, - basePower: 55, - basePowerCallback(pokemon, target, move) { - // You can't get here unless the pursuit effect succeeds - if (target.beingCalledBack) { - this.debug('The Hunt is On! damage boost'); - return move.basePower * 2; - } - return move.basePower; - }, - category: "Physical", - desc: "If an opposing Pokemon switches out this turn, this move hits that Pokemon before it leaves the field, even if it was not the original target. If the user moves after an opponent using Parting Shot, U-turn, or Volt Switch, but not Baton Pass, it will hit that opponent before it leaves the field. Power doubles and no accuracy check is done if the user hits an opponent switching out, and the user's turn is over; if an opponent faints from this, the replacement Pokemon does not become active until the end of the turn.", - shortDesc: "Foe: 2x power when switching.", - name: "The Hunt is On!", - gen: 8, - pp: 15, - priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, - onTryMove() { - this.attrLastMove('[still]'); - }, - onPrepareHit(target, source) { - this.add('-anim', source, 'Sucker Punch', target); - this.add('-anim', source, 'Pursuit', target); - }, - beforeTurnCallback(pokemon) { - for (const side of this.sides) { - if (side === pokemon.side) continue; - side.addSideCondition('thehuntison', pokemon); - const data = side.getSideConditionData('thehuntison'); - if (!data.sources) { - data.sources = []; - } - data.sources.push(pokemon); - } - }, - onModifyMove(move, source, target) { - if (target?.beingCalledBack) move.accuracy = true; - }, - onTryHit(target, pokemon) { - target.side.removeSideCondition('thehuntison'); - }, - onAfterMoveSecondarySelf(pokemon, target, move) { - if (!target || target.fainted || target.hp <= 0) { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Jett')}|Owned!`); - } - }, - condition: { - duration: 1, - onBeforeSwitchOut(pokemon) { - this.debug('Thehuntison start'); - let alreadyAdded = false; - pokemon.removeVolatile('destinybond'); - for (const source of this.effectState.sources) { - if (!this.queue.cancelMove(source) || !source.hp) continue; - if (!alreadyAdded) { - this.add('-activate', pokemon, 'move: The Hunt is On!'); - alreadyAdded = true; - } - this.actions.runMove('thehuntison', source, source.getLocOf(pokemon)); - } - }, - }, - secondary: null, - target: "normal", - type: "Dark", - }, - - // Jho - genrechange: { - accuracy: true, - basePower: 0, - category: "Status", - desc: "If the user is a Toxtricity, it changes into its Low-Key forme and Nasty Plot and Overdrive change to Aura Sphere and Boomburst, respectively. If the user is a Toxtricity in its Low-Key forme, it changes into its Amped forme and Aura Sphere and Boomburst turn into Nasty Plot and Overdrive, respectively. Raises the user's Speed by 1 stage.", - shortDesc: "Toxtricity: +1 Speed. Changes forme.", - name: "Genre Change", - gen: 8, - pp: 5, - priority: 0, - flags: {snatch: 1, sound: 1}, - onTryMove(pokemon, target, move) { - this.attrLastMove('[still]'); - }, - onPrepareHit(target, source) { - this.add('-anim', source, 'Screech', source); - // The transform animation is done via `formeChange` - }, - onHit(pokemon) { - if (pokemon.species.baseSpecies === 'Toxtricity') { - if (pokemon.species.forme === 'Low-Key') { - changeSet(this, pokemon, ssbSets['Jho']); - } else { - changeSet(this, pokemon, ssbSets['Jho-Low-Key']); - } - } - }, - boosts: { - spe: 1, - }, - secondary: null, - target: "self", - type: "Normal", - }, - - // Jordy - archeopssrage: { - accuracy: 85, - basePower: 90, - category: "Physical", - desc: "Upon damaging the target, the user gains +1 Speed.", - shortDesc: "+1 Speed upon hit.", - name: "Archeops's Rage", - gen: 8, - pp: 5, - flags: {contact: 1, protect: 1, mirror: 1}, - priority: 0, - onTryMove() { - this.attrLastMove('[still]'); - }, - onPrepareHit(target, source) { - this.add('-anim', source, 'Sunsteel Strike', target); - }, - self: { - boosts: { - spe: 1, - }, - }, - secondary: null, - target: "normal", - type: "Flying", - }, - - // Kaiju Bunny - cozycuddle: { - accuracy: 95, - basePower: 0, - category: "Status", - desc: "Traps the target and lowers its Attack and Defense by 2 stages.", - shortDesc: "Target: trapped, Atk and Def lowered by 2.", - name: "Cozy Cuddle", - gen: 8, - pp: 20, - priority: 0, - flags: {contact: 1, protect: 1, reflectable: 1}, - volatileStatus: 'cozycuddle', - onTryMove() { - this.attrLastMove('[still]'); - }, - onTryHit(target, source, move) { - if (target.volatiles['cozycuddle']) return false; - if (target.volatiles['trapped']) { - delete move.volatileStatus; - } - }, - onPrepareHit(target, source) { - this.add('-anim', source, 'Flatter', target); - this.add('-anim', source, 'Let\'s Snuggle Forever', target); - }, - onHit(target, source, move) { - this.boost({atk: -2, def: -2}, target, target); - }, - condition: { - onStart(pokemon, source) { - this.add('-start', pokemon, 'Cozy Cuddle'); - }, - onTrapPokemon(pokemon) { - if (this.effectState.source?.isActive) pokemon.tryTrap(); - }, - }, - secondary: null, - target: "normal", - type: "Fairy", - }, - - // Kalalokki - blackbird: { - accuracy: 100, - basePower: 70, - category: "Special", - desc: "If this move is successful and the user has not fainted, the user switches out even if it is trapped and is replaced immediately by a selected party member. The user does not switch out if there are no unfainted party members, or if the target switched out using an Eject Button or through the effect of the Emergency Exit or Wimp Out Abilities.", - shortDesc: "User switches out after damaging the target.", - name: "Blackbird", - gen: 8, - pp: 20, - priority: 0, - flags: {protect: 1, mirror: 1}, - selfSwitch: true, - onTryMove() { - this.attrLastMove('[still]'); - }, - onPrepareHit(target, source) { - this.add('-anim', source, 'Gust', target); - this.add('-anim', source, 'Parting Shot', target); - }, - secondary: null, - target: "normal", - type: "Flying", - }, - gaelstrom: { - accuracy: true, - basePower: 140, - category: "Special", - desc: "Hits foe and phazes them out, phaze the next one out and then another one, set a random entry hazard at the end of the move.", - shortDesc: "Hits foe, phazes 3 times, sets random hazard.", - name: "Gaelstrom", - gen: 8, - pp: 1, - noPPBoosts: true, - priority: 0, - flags: {}, - isZ: "kalalokkiumz", - onTryMove() { - this.attrLastMove('[still]'); - }, - onPrepareHit(target, source) { - this.add('-anim', source, 'Hurricane', target); - }, - sideCondition: 'gaelstrom', - condition: { - duration: 1, - onSwitchIn(pokemon) { - if (!this.effectState.count) this.effectState.count = 1; - if (this.effectState.count < 3) { - pokemon.forceSwitchFlag = true; - this.effectState.count++; - return; - } - pokemon.side.removeSideCondition('gaelstrom'); - }, - onSideStart(side, source) { - side.addSideCondition(['spikes', 'toxicspikes', 'stealthrock', 'stickyweb'][this.random(4)], source); - }, - }, - forceSwitch: true, - target: "normal", - type: "Flying", - }, - - // Kennedy - topbins: { - accuracy: 70, - basePower: 130, - category: "Physical", - desc: "Has a 20% chance to burn the target and a 10% chance to cause the target to flinch.", - shortDesc: "20% chance to burn. 10% chance to flinch.", - name: "Top Bins", - gen: 8, - pp: 10, - priority: 0, - flags: {protect: 1, mirror: 1}, - onTryMove() { - this.attrLastMove('[still]'); - }, - onPrepareHit(target, source) { - this.add('-anim', source, 'Pyro Ball', target); - this.add('-anim', source, 'Blaze Kick', target); - }, - secondaries: [{ - chance: 20, - status: 'brn', - }, { - chance: 10, - volatileStatus: 'flinch', - }], - target: "normal", - type: "Fire", - }, - - // Kev - kingstrident: { - accuracy: true, - basePower: 0, - category: "Status", - desc: "Raises the user's Special Attack by 1 stage and Speed by 2 stages.", - shortDesc: "Gives user +1 SpA and +2 Spe.", - name: "King's Trident", - gen: 8, - pp: 10, - priority: 0, - flags: {snatch: 1}, - onTryMove() { - this.attrLastMove('[still]'); - }, - onPrepareHit(target) { - this.add('-anim', target, 'Dragon Dance', target); - }, - self: { - boosts: { - spa: 1, - spe: 2, - }, - }, - secondary: null, - target: "self", - type: "Water", - }, - - // Kingbaruk - leaveittotheteam: { - accuracy: true, - basePower: 0, - category: "Status", - desc: "The user faints and the Pokemon brought out to replace it gets Healing Wish effects and has its Attack, Defense, Special Attack, and Special Defense boosted by 1 stage.", - shortDesc: "User faints. Next: healed & +1 Atk/Def/SpA/SpD.", - name: "Leave it to the team!", - gen: 8, - pp: 5, - priority: 0, - flags: {snatch: 1}, - onTryMove() { - this.attrLastMove('[still]'); - }, - onTryHit(source) { - if (!this.canSwitch(source.side)) { - this.attrLastMove('[still]'); - this.add('-fail', source); - return this.NOT_FAIL; - } - }, - selfdestruct: "ifHit", - sideCondition: 'leaveittotheteam', - condition: { - duration: 2, - onSideStart(side, source) { - this.debug('Leave it to the team! started on ' + side.name); - this.effectState.positions = []; - for (const i of side.active.keys()) { - this.effectState.positions[i] = false; - } - this.effectState.positions[source.position] = true; - }, - onSideRestart(side, source) { - this.effectState.positions[source.position] = true; - }, - onSwitchInPriority: 1, - onSwitchIn(target) { - const positions: boolean[] = this.effectState.positions; - if (target.getSlot() !== this.effectState.sourceSlot) { - return; - } - if (!target.fainted) { - target.heal(target.maxhp); - this.boost({atk: 1, def: 1, spa: 1, spd: 1}, target); - target.clearStatus(); - for (const moveSlot of target.moveSlots) { - moveSlot.pp = moveSlot.maxpp; - } - this.add('-heal', target, target.getHealth, '[from] move: Leave it to the team!'); - positions[target.position] = false; - } - if (!positions.some(affected => affected === true)) { - target.side.removeSideCondition('leaveittotheteam'); - } - }, - }, - secondary: null, - target: "self", - type: "Fairy", - }, - - // KingSwordYT - clashofpangoros: { - accuracy: 100, - basePower: 90, - category: "Physical", - desc: "Target can't use status moves for its next 3 turns. Lowers the target's Attack by 1 stage. At the end of the move, the user switches out.", - shortDesc: "Taunts, lowers Atk, switches out.", - name: "Clash of Pangoros", - gen: 8, - pp: 10, - priority: 0, - flags: {contact: 1, protect: 1, mirror: 1, heal: 1}, - onTryMove() { - this.attrLastMove('[still]'); - }, - onPrepareHit(target, source) { - this.add('-anim', source, 'Black Hole Eclipse', target); - }, - onHit(target, pokemon, move) { - this.boost({atk: -1}, target, target, move); - target.addVolatile('taunt', pokemon); - }, - selfSwitch: true, - secondary: null, - target: "normal", - type: "Dark", - }, - - // Kipkluif - kipup: { - accuracy: true, - basePower: 0, - category: "Status", - desc: "The user will survive attacks made by other Pokemon during this turn with at least 1 HP. When used, if hit by an attack on the same turn this move was used, this Pokemon boosts its Defense and Special Defense by 2 stages if the relevant stat is at 0 or lower, or 1 stage if the relevant stat is at +1 or higher, and increases priority of the next used move by 1.", - shortDesc: "Endure;If hit, +Def/SpD; next move +1 prio.", - name: "Kip Up", - pp: 10, - priority: 3, - flags: {}, - onTryMove(source) { - this.attrLastMove('[still]'); - }, - onPrepareHit(target, source) { - this.add('-anim', source, 'Focus Energy', source); - }, - onHit(target, pokemon, move) { - if (pokemon.volatiles['kipup']) return false; - pokemon.addVolatile('kipup'); - }, - condition: { - duration: 1, - onStart(pokemon) { - this.add('-message', 'This Pokémon prepares itself to be knocked down!'); - }, - onDamagePriority: -10, - onDamage(damage, target, source, effect) { - if (this.effectState.gotHit) return damage; - if (effect?.effectType === 'Move' && damage >= target.hp) { - this.add('-activate', target, 'move: Kip Up'); - return target.hp - 1; - } - }, - onHit(pokemon, source, move) { - if (!pokemon.hp) return; - if (this.effectState.gotHit) return; - if (!pokemon.isAlly(source) && move.category !== 'Status') { - this.effectState.gotHit = true; - this.add('-message', 'Gossifleur was prepared for the impact!'); - const boosts: {[k: string]: number} = {def: 2, spd: 2}; - if (pokemon.boosts.def >= 1) boosts.def--; - if (pokemon.boosts.spd >= 1) boosts.spd--; - this.boost(boosts, pokemon); - this.add('-message', "Gossifleur did a Kip Up and can jump right back into the action!"); - this.effectState.duration++; - } - }, - onModifyPriority(priority, pokemon, target, move) { - if (!this.effectState.gotHit) return priority; - return priority + 1; - }, - }, - secondary: null, - target: "self", - type: "Fighting", - }, - - // Kris - alphabetsoup: { - accuracy: true, - basePower: 100, - category: "Special", - desc: "The user changes into a random Pokemon with a first name letter that matches the forme Unown is currently in (A -> Alakazam, etc) that has base stats that would benefit from Unown's EV/IV/Nature spread and moves. Using it while in a forme that is not Unown will make it revert back to the Unown forme it transformed in (If an Unown transforms into Alakazam, it'll transform back to Unown-A when used again). Light of Ruin becomes Strange Steam, Psystrike becomes Psyshock, Secret Sword becomes Aura Sphere, Mind Blown becomes Flamethrower, and Seed Flare becomes Apple Acid while in a non-Unown forme. This move's type varies based on the user's primary type.", - shortDesc: "Transform into Unown/mon. Type=user 1st type.", - name: "Alphabet Soup", - gen: 8, - pp: 20, - priority: 0, - flags: {protect: 1}, - onTryMove(source) { - this.attrLastMove('[still]'); - if (source.name !== 'Kris') { - this.add('-fail', source); - this.hint("Only Kris can use Alphabet Soup."); - return null; - } - }, - onPrepareHit(target, source) { - this.add('-anim', source, 'Dark Pulse', target); - this.add('-anim', source, 'Teleport', source); - }, - onModifyType(move, pokemon) { - let type = pokemon.types[0]; - if (type === "Bird") type = "???"; - move.type = type; - }, - onHit(target, source) { - if (!source) return; - if (source.species.id.includes('unown')) { - const monList = Object.keys(this.dex.data.Pokedex).filter(speciesid => { - const species = this.dex.species.get(speciesid); - if (species.id.startsWith('unown')) return false; - if (species.isNonstandard && ['Gigantamax', 'Unobtainable'].includes(species.isNonstandard)) return false; - if (['Arceus', 'Silvally'].includes(species.baseSpecies) && species.types[0] !== 'Normal') return false; - if (species.baseStats.spa < 80) return false; - if (species.baseStats.spe < 80) return false; - const unownLetter = source.species.id.charAt(5) || 'a'; - if (!species.id.startsWith(unownLetter.trim().toLowerCase())) return false; - return true; - }); - source.formeChange(this.sample(monList), this.effect); - source.setAbility('Protean'); - source.moveSlots = source.moveSlots.map(slot => { - const newMoves: {[k: string]: string} = { - lightofruin: 'strangesteam', - psystrike: 'psyshock', - secretsword: 'aurasphere', - mindblown: 'flamethrower', - seedflare: 'appleacid', - }; - if (slot.id in newMoves) { - const newMove = this.dex.moves.get(newMoves[slot.id]); - const newSlot = { - id: newMove.id, - move: newMove.name, - pp: newMove.pp * 8 / 5, - maxpp: newMove.pp * 8 / 5, - disabled: slot.disabled, - used: false, - }; - return newSlot; - } - return slot; - }); - } else { - let transformingLetter = source.species.id[0]; - if (transformingLetter === 'a') transformingLetter = ''; - source.formeChange(`unown${transformingLetter}`, this.effect, true); - source.moveSlots = source.moveSlots.map(slot => { - const newMoves: {[k: string]: string} = { - strangesteam: 'lightofruin', - psyshock: 'psystrike', - aurasphere: 'secretsword', - flamethrower: 'mindblown', - appleacid: 'seedflare', - }; - if (slot.id in newMoves) { - const newMove = this.dex.moves.get(newMoves[slot.id]); - const newSlot = { - id: newMove.id, - move: newMove.name, - pp: newMove.pp * 8 / 5, - maxpp: newMove.pp * 8 / 5, - disabled: slot.disabled, - used: false, - }; - return newSlot; - } - return slot; - }); - } - }, - secondary: null, - target: "normal", - type: "Dark", - }, - - // Lamp - soulswap: { - accuracy: 100, - basePower: 90, - category: "Special", - desc: "The user copies the target's positive stat stage changes and then inverts the target's stats.", - shortDesc: "Copies target's stat boosts then inverts.", - name: "Soul Swap", - gen: 8, - pp: 10, - priority: 0, - flags: {protect: 1, mirror: 1}, - onTryMove() { - this.attrLastMove('[still]'); - }, - onPrepareHit(target, source) { - this.add('-anim', source, 'Spectral Thief', target); - this.add('-anim', source, 'Teleport', source); - this.add('-anim', source, 'Topsy-Turvy', target); - }, - onHit(target, source) { - let i: BoostID; - const boosts: SparseBoostsTable = {}; - for (i in target.boosts) { - const stage = target.boosts[i]; - if (stage > 0) { - boosts[i] = stage; - } - if (target.boosts[i] !== 0) { - target.boosts[i] = -target.boosts[i]; - } - } - this.add('-message', `${source.name} stole ${target.name}'s boosts!`); - this.boost(boosts, source); - this.add('-invertboost', target, '[from] move: Soul Swap'); - }, - secondary: null, - target: "normal", - type: "Ghost", - }, - - // Lionyx - bigbang: { - accuracy: 100, - basePower: 120, - category: "Special", - desc: "The user loses HP equal to 33% of the damage dealt by this attack. Resets the field by clearing all hazards, terrains, screens, and weather.", - shortDesc: "33% recoil; removes field conditions.", - name: "Big Bang", - gen: 8, - pp: 5, - priority: 0, - flags: {protect: 1, mirror: 1}, - onTryMove() { - this.attrLastMove('[still]'); - }, - onPrepareHit(target, source) { - this.add('-anim', source, 'Extreme Evoboost', source); - this.add('-anim', source, 'Light of Ruin', target); - this.add('-anim', source, 'Dark Void', target); - }, - onHit(target, source, move) { - let success = false; - const removeAll = [ - 'reflect', 'lightscreen', 'auroraveil', 'safeguard', 'mist', - 'spikes', 'toxicspikes', 'stealthrock', 'stickyweb', - ]; - const silentRemove = ['reflect', 'lightscreen', 'auroraveil', 'safeguard', 'mist']; - for (const sideCondition of removeAll) { - if (target.side.removeSideCondition(sideCondition)) { - if (!silentRemove.includes(sideCondition)) { - this.add('-sideend', target.side, this.dex.conditions.get(sideCondition).name, '[from] move: Big Bang', '[of] ' + source); - } - success = true; - } - if (source.side.removeSideCondition(sideCondition)) { - if (!silentRemove.includes(sideCondition)) { - this.add('-sideend', source.side, this.dex.conditions.get(sideCondition).name, '[from] move: Big Bang', '[of] ' + source); - } - success = true; - } - } - this.field.clearTerrain(); - this.field.clearWeather(); - return success; - }, - recoil: [33, 100], - secondary: null, - target: "normal", - type: "Fairy", - }, - - // LittEleven - nexthunt: { - accuracy: true, - basePower: 0, - category: "Status", - desc: "If this Pokemon does not take damage this turn, it switches out to another Pokemon in the party and gives it a +2 boost corresponding to its highest stat. Fails otherwise.", - shortDesc: "Focus: switch out, next Pokemon +2 Beast Boost.", - name: "/nexthunt", - pp: 10, - priority: -6, - flags: {snatch: 1}, - beforeTurnCallback(pokemon) { - pokemon.addVolatile('nexthuntcheck'); - }, - onTryMove() { - this.attrLastMove('[still]'); - }, - onPrepareHit(target, source) { - this.add('-anim', source, 'Teleport', source); - }, - beforeMoveCallback(pokemon) { - if (pokemon.volatiles['nexthuntcheck'] && pokemon.volatiles['nexthuntcheck'].lostFocus) { - this.add('cant', pokemon, '/nexthunt', '/nexthunt'); - return true; - } - }, - onHit(target, source, move) { - this.add('-message', 'Time for the next hunt!'); - }, - sideCondition: 'nexthunt', - condition: { - duration: 1, - onSideStart(side, source) { - this.debug('/nexthunt started on ' + side.name); - this.effectState.positions = []; - for (const i of side.active.keys()) { - this.effectState.positions[i] = false; - } - this.effectState.positions[source.position] = true; - }, - onSideRestart(side, source) { - this.effectState.positions[source.position] = true; - }, - onSwitchInPriority: 1, - onSwitchIn(target) { - this.add('-activate', target, 'move: /nexthunt'); - let statName = 'atk'; - let bestStat = 0; - let s: StatIDExceptHP; - for (s in target.storedStats) { - if (target.storedStats[s] > bestStat) { - statName = s; - bestStat = target.storedStats[s]; - } - } - this.boost({[statName]: 2}, target, null, this.dex.getActiveMove('/nexthunt')); - }, - }, - selfSwitch: true, - secondary: null, - target: "self", - type: "Normal", - }, - - // Lunala - hatofwisdom: { - accuracy: 100, - basePower: 110, - category: "Special", - desc: "The user switches out, and this move deals damage one turn after it is used. At the end of that turn, the damage is calculated at that time and dealt to the Pokemon at the position the target had when the move was used. If the user is no longer active at the time, damage is calculated based on the user's natural Special Attack stat, types, and level, with no boosts from its held item or Ability. Fails if this move, Future Sight, or Doom Desire is already in effect for the target's position.", - shortDesc: "Hits 1 turn after being used. User switches.", - name: "Hat of Wisdom", - gen: 8, - pp: 15, - priority: 0, - flags: {futuremove: 1}, - ignoreImmunity: true, - onTry(source, target) { - this.attrLastMove('[still]'); - if (!target.side.addSlotCondition(target, 'futuremove')) return false; - this.add('-anim', source, 'Calm Mind', target); - this.add('-anim', source, 'Teleport', target); - Object.assign(target.side.slotConditions[target.position]['futuremove'], { - duration: 2, - move: 'hatofwisdom', - source: source, - moveData: { - id: 'hatofwisdom', - name: "Hat of Wisdom", - accuracy: 100, - basePower: 110, - category: "Special", - priority: 0, - flags: {futuremove: 1}, - ignoreImmunity: false, - effectType: 'Move', - type: 'Psychic', - }, - }); - this.add('-start', source, 'move: Hat of Wisdom'); - source.switchFlag = 'hatofwisdom' as ID; - return this.NOT_FAIL; - }, - secondary: null, - target: "normal", - type: "Psychic", - }, - - // Mad Monty ¾° - callamaty: { - accuracy: 100, - basePower: 75, - category: "Physical", - desc: "30% chance to paralyze. Starts Rain Dance if not currently active.", - shortDesc: "30% paralyze. Sets Rain Dance.", - name: "Ca-LLAMA-ty", - pp: 10, - priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, - onTryMove() { - this.attrLastMove('[still]'); - }, - onPrepareHit(target, source) { - this.add('-anim', source, 'Dark Void', target); - this.add('-anim', source, 'Plasma Fists', target); - }, - secondary: { - chance: 30, - status: 'par', - }, - self: { - onHit(source) { - this.field.setWeather('raindance'); - }, - }, - target: "normal", - type: "Electric", - }, - - // MajorBowman - corrosivecloud: { - accuracy: true, - basePower: 90, - category: "Special", - desc: "Has a 30% chance to burn the target. This move's type effectiveness against Steel is changed to be super effective no matter what this move's type is.", - shortDesc: "30% chance to burn. Super effective on Steel.", - name: "Corrosive Cloud", - gen: 8, - pp: 10, - priority: 0, - flags: {protect: 1, mirror: 1}, - onTryMove() { - this.attrLastMove('[still]'); - }, - onPrepareHit(target, source) { - this.add('-anim', source, 'Poison Gas', target); - this.add('-anim', source, 'Fire Spin', target); - }, - onEffectiveness(typeMod, target, type) { - if (type === 'Steel') return 1; - }, - ignoreImmunity: {'Poison': true}, - secondary: { - chance: 30, - status: 'brn', - }, - target: "normal", - type: "Poison", - }, - - // Marshmallon - rawwwr: { - accuracy: true, - basePower: 0, - category: "Status", - desc: "Heals the user by 33% of its max HP. Forces the target to switch to a random ally. User switches out after.", - shortDesc: "33% heal. Force out target, then switch.", - name: "RAWWWR", - gen: 8, - pp: 10, - priority: 0, - flags: {reflectable: 1, mirror: 1, sound: 1, bypasssub: 1, heal: 1}, - onTryMove() { - this.attrLastMove('[still]'); - }, - onPrepareHit(target, source) { - this.add('-anim', source, 'Slack Off', source); - this.add('-anim', source, 'Roar of Time', target); - this.add('-anim', source, 'Roar', target); - }, - onAfterMoveSecondarySelf(pokemon, target, move) { - this.heal(pokemon.maxhp / 3, pokemon, pokemon, move); - }, - forceSwitch: true, - selfSwitch: true, - secondary: null, - target: "normal", - type: "Dark", - }, - - // Meicoo - spamguess: { - accuracy: true, - basePower: 0, - category: "Status", - desc: "Calls the following moves in order, each with their normal respective accuracy: Haze -> Worry Seed -> Poison Powder -> Stun Spore -> Leech Seed -> Struggle (150 BP)", - shortDesc: "Does many things then struggles.", - name: "spamguess", - gen: 8, - pp: 10, - priority: 0, - flags: {}, - onTryMove() { - this.attrLastMove('[still]'); - }, - // fruit this move. - onHit(target, source) { - for (const move of ['Haze', 'Worry Seed', 'Poison Powder', 'Stun Spore', 'Leech Seed']) { - this.actions.useMove(move, source); - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Meicoo')}|That is not the answer - try again!`); - } - const strgl = this.dex.getActiveMove('Struggle'); - strgl.basePower = 150; - this.actions.useMove(strgl, source); - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Meicoo')}|That is not the answer - try again!`); - }, - secondary: null, - target: "self", - type: "Fighting", - }, - - - // Mitsuki - terraforming: { - accuracy: 100, - basePower: 70, - category: "Physical", - desc: "Upon use, this move sets up Stealth Rock on the target's side of the field.", - shortDesc: "Sets up Stealth Rock.", - name: "Terraforming", - gen: 8, - pp: 15, - priority: 0, - flags: {protect: 1, mirror: 1}, - onTryMove() { - this.attrLastMove('[still]'); - }, - onPrepareHit(target, source) { - this.add('-anim', source, 'Rock Slide', target); - this.add('-anim', source, 'Ingrain', target); - this.add('-anim', source, 'Stealth Rock', target); - }, - sideCondition: 'stealthrock', - secondary: null, - target: "normal", - type: "Rock", - }, - - // n10siT - "unbind": { - accuracy: 100, - basePower: 60, - category: "Special", - desc: "Has a 100% chance to raise the user's Speed by 1 stage. If the user is a Hoopa in its Confined forme, this move is Psychic type, and Hoopa will change into its Unbound forme. If the user is a Hoopa in its Unbound forme, this move is Dark type, and Hoopa will change into its Confined forme. This move cannot be used successfully unless the user's current form, while considering Transform, is Confined or Unbound Hoopa.", - shortDesc: "Hoopa: Psychic; Unbound: Dark; 100% +1 Spe. Changes form.", - name: "Unbind", - gen: 8, - pp: 15, - priority: 0, - flags: {protect: 1}, - onTryMove(pokemon, target, move) { - this.attrLastMove('[still]'); - if (pokemon.species.baseSpecies === 'Hoopa') { - return; - } - this.add('-fail', pokemon, 'move: Unbind'); - this.hint("Only a Pokemon whose form is Hoopa or Hoopa-Unbound can use this move."); - return null; - }, - onPrepareHit(target, source) { - this.add('-anim', source, 'Hyperspace Hole', target); - this.add('-anim', source, 'Hyperspace Fury', target); - }, - onHit(target, pokemon, move) { - if (pokemon.baseSpecies.baseSpecies === 'Hoopa') { - const forme = pokemon.species.forme === 'Unbound' ? '' : '-Unbound'; - pokemon.formeChange(`Hoopa${forme}`, this.effect, false, '[msg]'); - this.boost({spe: 1}, pokemon, pokemon, move); - } - }, - onModifyType(move, pokemon) { - if (pokemon.baseSpecies.baseSpecies !== 'Hoopa') return; - move.type = pokemon.species.name === 'Hoopa-Unbound' ? 'Dark' : 'Psychic'; - }, - secondary: null, - target: "normal", - type: "Psychic", - }, - - // naziel - notsoworthypirouette: { - accuracy: 100, - basePower: 0, - category: "Status", - desc: "50% chance to OHKO the target; otherwise, it OHKOes itself. On successive uses, this move has a 1/X chance of OHKOing the target, where X starts at 2 and doubles each time this move OHKOes the target. X resets to 2 if this move is not used in a turn.", - shortDesc: "50/50 to KO target/self. Worse used repeatedly.", - name: "Not-so-worthy Pirouette", - pp: 5, - priority: 0, - flags: {protect: 1, mirror: 1}, - onTryMove() { - this.attrLastMove('[still]'); - }, - onPrepareHit(target, source) { - this.add('-anim', source, "High Jump Kick", target); - }, - onHit(target, source) { - source.addVolatile('notsoworthypirouette'); - const chance = source.volatiles['notsoworthypirouette']?.counter ? source.volatiles['notsoworthypirouette'].counter : 2; - if (this.randomChance(1, chance)) { - target.faint(); - } else { - source.faint(); - } - }, - condition: { - duration: 2, - onStart() { - this.effectState.counter = 2; - }, - onRestart() { - this.effectState.counter *= 2; - this.effectState.duration = 2; - }, - }, - secondary: null, - target: "normal", - type: "Fairy", - }, - - // Theia - madhacks: { - accuracy: true, - basePower: 0, - category: "Status", - desc: "Raises the user's Defense, Special Attack, and Special Defense by 1 stage. Sets Trick Room.", - shortDesc: "+1 Def/Spa/Spd. Sets Trick Room.", - name: "Mad Hacks", - gen: 8, - pp: 5, - priority: -7, - flags: {snatch: 1}, - onTryMove() { - this.attrLastMove('[still]'); - }, - onPrepareHit(target, source) { - this.add('-anim', source, 'Acupressure', source); - }, - onHit(target, source) { - this.field.addPseudoWeather('trickroom'); - }, - boosts: { - def: 1, - spa: 1, - spd: 1, - }, - secondary: null, - target: "self", - type: "Ghost", - }, - - // Notater517 - technotubertransmission: { - accuracy: 90, - basePower: 145, - category: "Special", - desc: "If this move is successful, the user must recharge on the following turn and cannot select a move.", - shortDesc: "User cannot move next turn.", - name: "Techno Tuber Transmission", - pp: 5, - priority: 0, - flags: {recharge: 1, protect: 1, mirror: 1}, - onTryMove() { - this.attrLastMove('[still]'); - }, - onPrepareHit(target, source) { - this.add('-anim', source, 'Techno Blast', target); - this.add('-anim', source, 'Never-Ending Nightmare', target); - }, - onHit() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Notater517')}|/html For more phantasmic music, check out this link.`); - }, - self: { - volatileStatus: 'mustrecharge', - }, - secondary: null, - target: "normal", - type: "Ghost", - }, - - // nui - wincondition: { - accuracy: 100, - basePower: 0, - category: "Status", - desc: "Inflicts the opponent with random status of sleep, paralysis, burn, or toxic. Then uses Dream Eater, Iron Head, Fire Blast, or Venoshock, respectively.", - shortDesc: "Chooses one of four move combos at random.", - name: "Win Condition", - pp: 10, - priority: 0, - flags: {protect: 1, reflectable: 1}, - onTryMove() { - this.attrLastMove('[still]'); - }, - onPrepareHit(target, source) { - this.add('-anim', source, "Celebrate", target); - }, - onHit(target, source) { - const hax = this.sample(['slp', 'brn', 'par', 'tox']); - target.trySetStatus(hax, source); - if (hax === 'slp') { - this.actions.useMove('Dream Eater', source); - } else if (hax === 'par') { - this.actions.useMove('Iron Head', source); - } else if (hax === 'brn') { - this.actions.useMove('Fire Blast', source); - } else if (hax === 'tox') { - this.actions.useMove('Venoshock', source); - } - }, - secondary: null, - target: "normal", - type: "Fairy", - }, - - // OM~! - omzoom: { - accuracy: 100, - basePower: 70, - category: "Physical", - desc: "If this move is successful and the user has not fainted, the user switches out even if it is trapped and is replaced immediately by a selected party member. The user does not switch out if there are no unfainted party members, or if the target switched out using an Eject Button or through the effect of the Emergency Exit or Wimp Out Abilities.", - shortDesc: "User switches out after damaging the target.", - name: "OM Zoom", - gen: 8, - pp: 10, - priority: 0, - onTryMove() { - this.attrLastMove('[still]'); - }, - onPrepareHit(target, source) { - this.add('-anim', source, 'Icicle Spear', target); - this.add('-anim', source, 'U-turn', target); - }, - onHit() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('OM~!')}|Bang Bang`); - }, - flags: {protect: 1, mirror: 1}, - selfSwitch: true, - secondary: null, - target: "normal", - type: "Ice", - }, - - // Overneat - healingyou: { - accuracy: 100, - basePower: 115, - category: "Physical", - desc: "Heals the target by 50% of their maximum HP and eliminates any status problem before dealing damage, and lowers the target's Defense and Special Defense stat by 1 stage after dealing damage.", - shortDesc: "Foe: heal 50%HP & status, dmg, then -1 Def/SpD.", - name: "Healing you?", - gen: 8, - pp: 5, - priority: 0, - onTryMove() { - this.attrLastMove('[still]'); - }, - onPrepareHit(target, source) { - this.add('-anim', source, 'Heal Pulse', target); - this.heal(Math.ceil(target.baseMaxhp * 0.5)); - target.cureStatus(); - this.add('-anim', source, 'Close Combat', target); - }, - flags: {contact: 1, mirror: 1, protect: 1}, - secondary: { - chance: 100, - boosts: { - def: -1, - spd: -1, - }, - }, - target: "normal", - type: "Dark", - }, - - // Pants - wistfulthinking: { - accuracy: 100, - basePower: 0, - category: "Status", - desc: "Burns the target and switches out. The next Pokemon on the user's side heals 1/16 of their maximum HP per turn until they switch out.", - shortDesc: "Burn foe; switch out. Heals replacement.", - name: "Wistful Thinking", - pp: 10, - priority: 0, - onTryMove() { - this.attrLastMove('[still]'); - }, - onPrepareHit(target, source) { - this.add('-anim', source, 'Will-O-Wisp', target); - this.add('-anim', source, 'Parting Shot', target); - }, - onHit(target, source) { - target.trySetStatus('brn', source); - }, - self: { - sideCondition: 'givewistfulthinking', - }, - condition: { - onStart(pokemon) { - this.add('-start', pokemon, 'move: Wistful Thinking'); - }, - onResidualOrder: 5, - onResidualSubOrder: 5, - onResidual(pokemon) { - this.heal(pokemon.baseMaxhp / 16); - }, - }, - flags: {protect: 1, reflectable: 1}, - selfSwitch: true, - secondary: null, - target: "normal", - type: "Ghost", - }, - - // Paradise - rapidturn: { - accuracy: 100, - basePower: 50, - category: "Physical", - desc: "Removes entry hazards, then user switches out after dealing damage", - shortDesc: "Removes hazards then switches out", - name: "Rapid Turn", - gen: 8, - pp: 20, - priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, - onTryMove() { - this.attrLastMove('[still]'); - }, - onPrepareHit(target, source) { - this.add('-anim', source, 'Rapid Spin', target); - this.add('-anim', source, 'U-turn', target); - }, - onAfterHit(target, pokemon) { - const sideConditions = [ - 'spikes', 'toxicspikes', 'stealthrock', 'stickyweb', 'gmaxsteelsurge', - ]; - 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 Turn', '[of] ' + pokemon); - } - } - if (pokemon.hp && pokemon.volatiles['partiallytrapped']) { - pokemon.removeVolatile('partiallytrapped'); - } - }, - onAfterSubDamage(damage, target, pokemon) { - const sideConditions = [ - 'spikes', 'toxicspikes', 'stealthrock', 'stickyweb', 'gmaxsteelsurge', - ]; - 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 Turn', '[of] ' + pokemon); - } - } - if (pokemon.hp && pokemon.volatiles['partiallytrapped']) { - pokemon.removeVolatile('partiallytrapped'); - } - }, - selfSwitch: true, - secondary: null, - target: "normal", - type: "Normal", - }, - - // PartMan - balefulblaze: { - accuracy: 100, - basePower: 75, - basePowerCallback(pokemon) { - if (pokemon.set.shiny) { - return 95; - } - return 75; - }, - category: "Special", - desc: "This move combines Ghost in its type effectiveness against the target. Raises the user's Special Attack by 1 stage if this move knocks out the target. If the user is shiny, the move's Base Power becomes 95.", - shortDesc: "+Ghost. +1 SpA if KOes target. Shiny: BP=95.", - name: "Baleful Blaze", - gen: 8, - pp: 10, - priority: 0, - flags: {protect: 1, mirror: 1, defrost: 1}, - onTryMove() { - this.attrLastMove('[still]'); - }, - onPrepareHit(target, source) { - this.add('-anim', source, 'Inferno', target); - this.add('-anim', source, 'Hex', target); - }, - onEffectiveness(typeMod, target, type, move) { - return typeMod + this.dex.getEffectiveness('Ghost', type); - }, - onAfterMoveSecondarySelf(pokemon, target, move) { - if (!target || target.fainted || target.hp <= 0) { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('PartMan')}|FOR SNOM!`); - this.boost({spa: 1}, pokemon, pokemon, move); - } - }, - secondary: null, - target: "normal", - type: "Fire", - }, - - // peapod c - submartingale: { - accuracy: 100, - basePower: 0, - category: "Status", - desc: "Inflicts the target with burn, toxic, or paralysis, then sets up a Substitute.", - shortDesc: "Inflicts burn/toxic/paralysis. Makes Substitute.", - name: "Submartingale", - pp: 10, - priority: 0, - flags: {protect: 1, reflectable: 1}, - onTryMove() { - this.attrLastMove('[still]'); - }, - onPrepareHit(target, source) { - this.add('-anim', source, "Dark Void", target); - this.add('-anim', source, "Celebrate", target); - }, - onTryHit(target, source) { - this.actions.useMove('Substitute', source); - }, - onHit(target, source) { - target.trySetStatus('brn', source); - target.trySetStatus('tox', source); - target.trySetStatus('par', source); - }, - secondary: null, - target: "normal", - type: "Dark", - }, - - // Perish Song - trickery: { - accuracy: 95, - basePower: 100, - category: "Physical", - desc: "Changes the target's item to something random.", - shortDesc: "Changes the target's item to something random.", - name: "Trickery", - pp: 10, - priority: 0, - flags: {protect: 1, mirror: 1}, - onTryMove() { - this.attrLastMove('[still]'); - }, - onPrepareHit(target, source) { - this.add('-anim', source, "Amnesia", source); - this.add('-anim', source, "Trick", target); - }, - onHit(target, source, effect) { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Perish Song')}|/html `); - const item = target.takeItem(source); - if (!target.item) { - if (item) this.add('-enditem', target, item.name, '[from] move: Trickery', '[of] ' + source); - const items = this.dex.items.all().map(i => i.name); - let randomItem = ''; - if (items.length) randomItem = this.sample(items); - if (!randomItem) { - return; - } - if (target.setItem(randomItem)) { - this.add('-item', target, randomItem, '[from] move: Trickery', '[of] ' + source); - } - } - }, - secondary: null, - target: "normal", - type: "Ground", - }, - - // phiwings99 - ghostof1v1past: { - accuracy: true, - basePower: 0, - category: "Status", - desc: "Imprisons and traps the target, and then transforms into them. The user will be trapped after the use of this move. The user faints if the target faints.", - shortDesc: "Trap + ImprisonForm. Faints if the target faints.", - name: "Ghost of 1v1 Past", - gen: 8, - pp: 1, - noPPBoosts: true, - priority: 0, - flags: {protect: 1}, - onTryMove() { - this.attrLastMove('[still]'); - }, - onPrepareHit(target, source) { - this.add('-anim', source, 'Imprison', source); - this.add('-anim', source, 'Mean Look', target); - this.add('-anim', source, 'Transform', target); - }, - onHit(target, pokemon, move) { - target.addVolatile('trapped', pokemon, move, 'trapper'); - pokemon.addVolatile('imprison', pokemon, move); - if (!pokemon.transformInto(target)) { - return false; - } - pokemon.addVolatile('trapped', target, move, 'trapper'); - pokemon.addVolatile('ghostof1v1past', pokemon); - pokemon.volatiles['ghostof1v1past'].targetPokemon = target; - }, - condition: { - onAnyFaint(target) { - if (target === this.effectState.targetPokemon) this.effectState.source.faint(); - }, - }, - secondary: null, - target: "normal", - type: "Ghost", - }, - - // piloswine gripado - iciclespirits: { - accuracy: 100, - basePower: 90, - category: "Physical", - desc: "The user recovers 1/2 the HP lost by the target, rounded half up. If Big Root is held by the user, the HP recovered is 1.3x normal, rounded half down.", - shortDesc: "User recovers 50% of the damage dealt.", - name: "Icicle Spirits", - gen: 8, - pp: 10, - priority: 0, - flags: {contact: 1, protect: 1, mirror: 1, heal: 1}, - onTryMove() { - this.attrLastMove('[still]'); - }, - onPrepareHit(target, source) { - this.add('-anim', source, 'Horn Leech', target); - }, - drain: [1, 2], - secondary: null, - target: "normal", - type: "Ice", - }, - - // PiraTe Princess - dungeonsdragons: { - accuracy: true, - basePower: 0, - category: "Status", - desc: "Prevents the target from switching out and adds Dragon to the target's type. Has a 5% chance to either confuse the user or guarantee that the next attack is a critical hit, 15% chance to raise the user's Attack, Defense, Special Attack, Special Defense, or Speed by 1 stage, and a 15% chance to raise user's Special Attack and Speed by 1 stage.", - shortDesc: "Target: can't switch,+Dragon. Does other things.", - name: "Dungeons & Dragons", - gen: 8, - pp: 10, - priority: 0, - flags: {protect: 1, reflectable: 1}, - onTryMove() { - this.attrLastMove('[still]'); - }, - onPrepareHit(target, source) { - this.add('-anim', source, 'Imprison', target); - this.add('-anim', source, 'Trick-or-Treat', target); - this.add('-anim', source, 'Shell Smash', source); - }, - onHit(target, source, move) { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('PiraTe Princess')}|did someone say d&d?`); - target.addVolatile('trapped', source, move, 'trapper'); - if (!target.hasType('Dragon') && target.addType('Dragon')) { - this.add('-start', target, 'typeadd', 'Dragon', '[from] move: Dungeons & Dragons'); - } - const result = this.random(21); - if (result === 20) { - source.addVolatile('laserfocus'); - } else if (result >= 2 && result <= 16) { - const boost: SparseBoostsTable = {}; - const stats: BoostID[] = ['atk', 'def', 'spa', 'spd', 'spe']; - boost[stats[this.random(5)]] = 1; - this.boost(boost, source); - } else if (result >= 17 && result <= 19) { - this.boost({spa: 1, spe: 1}, source); - } else { - source.addVolatile('confusion'); - } - }, - target: "normal", - type: "Dragon", - }, - - // Psynergy - clearbreath: { - accuracy: 100, - basePower: 0, - basePowerCallback(pokemon, target) { - let power = 60 + 20 * target.positiveBoosts(); - if (power > 200) power = 200; - return power; - }, - category: "Special", - desc: "Power is equal to 60+(X*20), where X is the target's total stat stage changes that are greater than 0, but not more than 200 power.", - shortDesc: "60 power +20 for each of the target's stat boosts.", - gen: 8, - name: "Clear Breath", - pp: 10, - priority: 0, - flags: {protect: 1, mirror: 1}, - onTryMove() { - this.attrLastMove('[still]'); - }, - onPrepareHit(target, source) { - this.add('-anim', source, 'Dragon Breath', target); - this.add('-anim', source, 'Haze', target); - }, - secondary: null, - target: "normal", - type: "Flying", - }, - - // ptoad - croak: { - accuracy: 100, - basePower: 20, - basePowerCallback(pokemon, target, move) { - const bp = move.basePower + 20 * pokemon.positiveBoosts(); - return bp; - }, - category: "Special", - desc: "Power is equal to 20+(X*20), where X is the user's total stat stage changes that are greater than 0. User raises 2 random stats by 1 if it has less than 8 positive stat changes.", - shortDesc: "+20 power/boost. +1 2 random stats < 8 boosts.", - name: "Croak", - gen: 8, - pp: 10, - priority: 0, - flags: {protect: 1, mirror: 1, sound: 1, bypasssub: 1}, - onTryMove() { - this.attrLastMove('[still]'); - }, - onPrepareHit(target, source, move) { - this.add('-anim', source, 'Splash', source); - if (source.positiveBoosts() < 8) { - const stats: BoostID[] = []; - let stat: BoostID; - const exclude: string[] = ['accuracy', 'evasion']; - for (stat in source.boosts) { - if (source.boosts[stat] < 6 && !exclude.includes(stat)) { - stats.push(stat); - } - } - if (stats.length) { - let randomStat = this.sample(stats); - const boost: SparseBoostsTable = {}; - boost[randomStat] = 1; - if (stats.length > 1) { - stats.splice(stats.indexOf(randomStat), 1); - randomStat = this.sample(stats); - boost[randomStat] = 1; - } - this.boost(boost, source, source, move); - } - } - this.add('-anim', source, 'Hyper Voice', source); - }, - secondary: null, - target: "normal", - type: "Water", - }, - - // used for ptoad's ability - swampyterrain: { - accuracy: true, - basePower: 0, - category: "Status", - desc: "For 5 turns, the terrain becomes Swampy Terrain. During the effect, the power of Electric-type, Grass-type, and Ice-type attacks made by grounded Pokemon are halved and Water and Ground types heal 1/16 at the end of each turn if grounded. Fails if the current terrain is Swampy Terrain.", - shortDesc: "5trn. Grounded:-Elec/Grs/Ice pow, Wtr/Grd:Lefts.", - name: "Swampy Terrain", - pp: 10, - priority: 0, - flags: {nonsky: 1}, - terrain: 'swampyterrain', - condition: { - duration: 5, - durationCallback(source, effect) { - if (source?.hasItem('terrainextender')) { - return 8; - } - return 5; - }, - onBasePowerPriority: 6, - onBasePower(basePower, attacker, defender, move) { - if (['Electric', 'Grass', 'Ice'].includes(move.type) && attacker.isGrounded() && !attacker.isSemiInvulnerable()) { - this.debug('swampy terrain weaken'); - return this.chainModify(0.5); - } - }, - onFieldStart(field, source, effect) { - if (effect?.effectType === 'Ability') { - this.add('-fieldstart', 'move: Swampy Terrain', '[from] ability: ' + effect, '[of] ' + source); - } else { - this.add('-fieldstart', 'move: Swampy Terrain'); - } - this.add('-message', 'The battlefield became swamped!'); - }, - onResidualOrder: 5, - onResidual(pokemon) { - if ((pokemon.hasType('Water') || pokemon.hasType('Ground')) && pokemon.isGrounded() && !pokemon.isSemiInvulnerable()) { - this.debug('Pokemon is grounded and a Water or Ground type, healing through Swampy Terrain.'); - if (this.heal(pokemon.baseMaxhp / 16, pokemon, pokemon)) { - this.add('-message', `${pokemon.name} was healed by the terrain!`); - } - } - }, - onFieldResidualOrder: 21, - onFieldResidualSubOrder: 3, - onFieldEnd() { - this.add('-fieldend', 'move: Swampy Terrain'); - }, - }, - secondary: null, - target: "all", - type: "Ground", - }, - - // Rabia - psychodrive: { - accuracy: 100, - basePower: 80, - category: "Special", - desc: "Has a 30% chance to boost the user's Speed by 1 stage.", - shortDesc: "30% chance to boost the user's Spe by 1.", - name: "Psycho Drive", - gen: 8, - pp: 15, - priority: 0, - flags: {protect: 1, mirror: 1}, - onTryMove() { - this.attrLastMove('[still]'); - }, - onPrepareHit(target, source) { - this.add('-anim', source, 'Genesis Supernova', target); - }, - secondary: { - chance: 30, - self: { - boosts: {spe: 1}, - }, - }, - target: "normal", - type: "Psychic", - }, - - // Rach - spindawheel: { - accuracy: true, - basePower: 0, - category: "Status", - desc: "The user uses a random hazard-setting move; burns, badly poisons, or paralyzes the target; and then switches out.", - shortDesc: "Sets random hazard; brn/tox/par; switches.", - name: "Spinda Wheel", - gen: 8, - pp: 20, - priority: 0, - flags: {reflectable: 1, protect: 1}, - onTryMove() { - this.attrLastMove('[still]'); - }, - onPrepareHit(target, source) { - target.m.spindaHazard = this.sample(['Sticky Web', 'Stealth Rock', 'Spikes', 'Toxic Spikes', 'G-Max Steelsurge']); - target.m.spindaStatus = this.sample(['Thunder Wave', 'Toxic', 'Will-O-Wisp']); - if (target.m.spindaHazard) { - this.add('-anim', source, target.m.spindaHazard, target); - } - if (target.m.spindaStatus) { - this.add('-anim', source, target.m.spindaStatus, target); - } - }, - onHit(target, source, move) { - if (target) { - if (target.m.spindaHazard) { - target.side.addSideCondition(target.m.spindaHazard); - } - if (target.m.spindaStatus) { - const s = target.m.spindaStatus; - target.trySetStatus(s === 'Toxic' ? 'tox' : s === 'Thunder Wave' ? 'par' : 'brn'); - } - } - }, - selfSwitch: true, - secondary: null, - target: "normal", - type: "Normal", - }, - - // Rage - shockedlapras: { - accuracy: 100, - basePower: 75, - category: "Special", - desc: "Has a 100% chance to paralyze the user.", - shortDesc: "100% chance to paralyze the user.", - name: ":shockedlapras:", - gen: 8, - pp: 15, - priority: 0, - flags: {protect: 1, mirror: 1}, - onTryMove() { - this.attrLastMove('[still]'); - }, - onPrepareHit(target, source) { - this.add('-anim', source, 'Thunder', target); - if (!source.status) this.add('-anim', source, 'Thunder Wave', source); - }, - onHit() { - this.add(`raw|`); - }, - secondary: { - chance: 100, - self: { - status: 'par', - }, - }, - target: "normal", - type: "Electric", - }, - - // used for Rage's ability - inversionterrain: { - accuracy: true, - basePower: 0, - category: "Status", - desc: "For 5 turns, the terrain becomes Inversion Terrain. During the effect, the the type chart is inverted, and grounded, paralyzed Pokemon have their Speed doubled. Fails if the current terrain is Inversion Terrain.", - shortDesc: "5 turns. Type chart inverted. Par: 2x Spe.", - name: "Inversion Terrain", - gen: 8, - pp: 10, - priority: 0, - flags: {}, - terrain: 'inversionterrain', - condition: { - duration: 5, - durationCallback(source, effect) { - if (source?.hasItem('terrainextender')) { - return 8; - } - return 5; - }, - onNegateImmunity: false, - onEffectivenessPriority: 1, - onEffectiveness(typeMod, target, type, move) { - // The effectiveness of Freeze Dry on Water isn't reverted - if (move && move.id === 'freezedry' && type === 'Water') return; - if (move && !this.dex.getImmunity(move, type)) return 1; - return -typeMod; - }, - onFieldStart(field, source, effect) { - if (effect?.effectType === 'Ability') { - this.add('-fieldstart', 'move: Inversion Terrain', '[from] ability: ' + effect, '[of] ' + source); - } else { - this.add('-fieldstart', 'move: Inversion Terrain'); - } - this.add('-message', 'The battlefield became upside down!'); - }, - onFieldResidualOrder: 21, - onFieldResidualSubOrder: 3, - onFieldEnd() { - this.add('-fieldend', 'move: Inversion Terrain'); - }, - }, - secondary: null, - target: "all", - type: "Psychic", - }, - - // Raihan Kibana - stonykibbles: { - accuracy: 100, - basePower: 90, - category: "Physical", - desc: "For 5 turns, the weather becomes Sandstorm. At the end of each turn except the last, all active Pokemon lose 1/16 of their maximum HP, rounded down, unless they are a Ground, Rock, or Steel type, or have the Magic Guard, Overcoat, Sand Force, Sand Rush, or Sand Veil Abilities. During the effect, the Special Defense of Rock-type Pokemon is multiplied by 1.5 when taking damage from a special attack. Lasts for 8 turns if the user is holding Smooth Rock. Fails if the current weather is Sandstorm.", - shortDesc: "Sets Sandstorm.", - name: "Stony Kibbles", - gen: 8, - pp: 10, - priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, - onTryMove() { - this.attrLastMove('[still]'); - }, - onHit() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Raihan Kibana')}|Let the winds blow! Stream forward, Sandstorm!`); - }, - onPrepareHit(target, source) { - this.add('-anim', source, 'Rock Slide', target); - this.add('-anim', source, 'Crunch', target); - this.add('-anim', source, 'Sandstorm', target); - }, - weather: 'Sandstorm', - target: "normal", - type: "Normal", - }, - - // Raj.Shoot - fanservice: { - accuracy: 100, - basePower: 90, - category: "Physical", - desc: "The user has its Attack and Speed raised by 1 stage after KOing a target. If the user is a Charizard in its base form, it will Mega Evolve into Mega Charizard X.", - shortDesc: "+1 Atk/Spe after KO. Mega evolves user.", - name: "Fan Service", - gen: 8, - pp: 10, - priority: 0, - flags: {contact: 1, protect: 1}, - onTryMove() { - this.attrLastMove('[still]'); - }, - onPrepareHit(target, source, move) { - this.add('-anim', source, 'Sacred Fire', target); - }, - onAfterMoveSecondarySelf(pokemon, target, move) { - if (!target || target.fainted || target.hp <= 0) { - this.boost({atk: 1, spe: 1}, pokemon, pokemon, move); - } - }, - onHit(target, source) { - if (source.species.id === 'charizard') { - this.actions.runMegaEvo(source); - } - }, - secondary: null, - target: "normal", - type: "Grass", - }, - - // Ransei - ripsei: { - accuracy: 100, - basePower: 0, - damageCallback(pokemon) { - const damage = pokemon.hp; - return damage; - }, - category: "Special", - desc: "Deals damage to the target equal to the user's current HP. If this move is successful, the user faints.", - shortDesc: "Does damage equal to the user's HP. User faints.", - name: "ripsei", - gen: 8, - pp: 5, - priority: 1, - flags: {contact: 1, protect: 1}, - onTryMove() { - this.attrLastMove('[still]'); - }, - onPrepareHit(target, source) { - this.add('-anim', source, 'Final Gambit', target); - }, - onAfterMove(pokemon, target, move) { - if (pokemon.moveThisTurnResult === true) { - pokemon.faint(); - } - }, - secondary: null, - target: "normal", - type: "Fighting", - }, - - // RavioliQueen - witchinghour: { - accuracy: 90, - basePower: 60, - category: "Special", - desc: "50% chance to trap the target, dealing 1/8th of their HP, rounded down, in damage each turn it is trapped.", - shortDesc: "50% to trap, dealing 1/8 each turn.", - name: "Witching Hour", - pp: 5, - priority: 0, - flags: {protect: 1, mirror: 1}, - onTryMove() { - this.attrLastMove('[still]'); - }, - onPrepareHit(target, source) { - this.add('-anim', source, 'Spirit Shackle', target); - this.add('-anim', source, 'Curse', target); - }, - secondary: { - chance: 50, - volatileStatus: 'haunting', - }, - target: "normal", - type: "Ghost", - }, - - // for RavioliQueen's ability - pitchblackterrain: { - accuracy: true, - basePower: 0, - category: "Status", - desc: "For 5 turns, Non Ghost types take 1/16th damage; Has boosting effects on Mismagius.", - shortDesc: "5 turns. Non Ghost types take 1/16th damage; Has boosting effects on Mismagius.", - name: "Pitch Black Terrain", - gen: 8, - pp: 10, - priority: 0, - flags: {}, - terrain: 'pitchblackterrain', - condition: { - duration: 5, - durationCallback(source, effect) { - if (source?.hasItem('terrainextender')) { - return 8; - } - return 5; - }, - onHit(target, source, move) { - if (!target.hp || target.species.name !== 'Mismagius') return; - if (move?.effectType === 'Move' && move.category !== 'Status') { - if (this.boost({spe: 1}, target)) { - this.add('-message', `${target.name} got a boost by the terrain!`); - } - } - }, - onSwitchInPriority: -1, - onSwitchIn(target) { - if (target?.species.name !== 'Mismagius') return; - if (this.boost({spa: 1, spd: 1}, target)) { - this.add('-message', `${target.name} got a boost by the terrain!`); - } - }, - onFieldStart(field, source, effect) { - if (effect?.effectType === 'Ability') { - this.add('-fieldstart', 'move: Pitch Black Terrain', '[from] ability: ' + effect, '[of] ' + source); - } else { - this.add('-fieldstart', 'move: Pitch Black Terrain'); - } - this.add('-message', 'The battlefield became dark!'); - if (source?.species.name !== 'Mismagius') return; - if (this.boost({spa: 1, spd: 1}, source)) { - this.add('-message', `${source.name} got a boost by the terrain!`); - } - }, - onResidualOrder: 5, - onResidual(pokemon) { - if (pokemon.isSemiInvulnerable()) return; - if (!pokemon || pokemon.hasType('Ghost')) return; - if (this.damage(pokemon.baseMaxhp / 16, pokemon)) { - this.add('-message', `${pokemon.name} was hurt by the terrain!`); - } - }, - onFieldResidualOrder: 21, - onFieldResidualSubOrder: 3, - onFieldEnd() { - this.add('-fieldend', 'move: Pitch Black Terrain'); - }, - }, - secondary: null, - target: "all", - type: "Ghost", - }, - - // Robb576 - integeroverflow: { - accuracy: true, - basePower: 200, - category: "Special", - desc: "This move becomes a physical attack if the user's Attack is greater than its Special Attack, including stat stage changes. This move and its effects ignore the Abilities of other Pokemon.", - shortDesc: "Physical if user's Atk > Sp. Atk. Ignores Abilities.", - name: "Integer Overflow", - gen: 8, - pp: 1, - noPPBoosts: true, - priority: 0, - flags: {}, - onTryMove() { - this.attrLastMove('[still]'); - }, - onPrepareHit(target, source) { - this.add('-anim', source, 'Light That Burns The Sky', target); - }, - onModifyMove(move, pokemon) { - if (pokemon.getStat('atk', false, true) > pokemon.getStat('spa', false, true)) move.category = 'Physical'; - }, - ignoreAbility: true, - isZ: "modium6z", - secondary: null, - target: "normal", - type: "Psychic", - }, - - mode5offensive: { - accuracy: true, - basePower: 30, - category: "Special", - desc: "This move hits three times. Every hit has a 20% chance to drop the target's SpD by 1 stage.", - shortDesc: "3 hits. Each hit: 20% -1 SpD.", - name: "Mode [5: Offensive]", - gen: 8, - pp: 15, - priority: 0, - flags: {protect: 1, mirror: 1}, - onTryMove() { - this.attrLastMove('[still]'); - }, - onPrepareHit(target, source) { - this.add('-anim', source, 'Focus Blast', target); - this.add('-anim', source, 'Zap Cannon', target); - }, - secondary: { - chance: 20, - boosts: { - spd: -1, - }, - }, - multihit: 3, - target: "normal", - type: "Fighting", - }, - - mode7defensive: { - accuracy: 100, - basePower: 0, - category: "Status", - desc: "This move cures the user's party of all status conditions, and then forces the target to switch to a random ally.", - shortDesc: "Heal Bell + Whirlwind.", - name: "Mode [7: Defensive]", - gen: 8, - pp: 15, - priority: -6, - flags: {reflectable: 1, protect: 1, sound: 1, bypasssub: 1}, - forceSwitch: true, - onTryMove() { - this.attrLastMove('[still]'); - }, - onPrepareHit(target, source) { - this.add('-anim', source, 'Heal Bell', source); - this.add('-anim', source, 'Roar', source); - }, - onHit(pokemon, source) { - this.add('-activate', source, 'move: Mode [7: Defensive]'); - const side = source.side; - let success = false; - for (const ally of side.pokemon) { - if (ally.hasAbility('soundproof')) continue; - if (ally.cureStatus()) success = true; - } - return success; - }, - target: "normal", - type: "Normal", - }, - - // Sectonia - homunculussvanity: { - accuracy: true, - basePower: 0, - category: "Status", - desc: "Raises the Defense and Special Defense by 1 stage. Lowers the foe's higher offensive stat by 1 stage.", - shortDesc: "+1 Def & SpD. -1 to foe's highest offensive stat.", - name: "Homunculus's Vanity", - gen: 8, - pp: 10, - priority: 0, - flags: {snatch: 1}, - onTryMove() { - this.attrLastMove('[still]'); - }, - onPrepareHit(target, source) { - this.add('-anim', source, 'Cosmic Power', source); - this.add('-anim', source, 'Psychic', target); - }, - self: { - onHit(source) { - let totalatk = 0; - let totalspa = 0; - for (const target of source.foes()) { - totalatk += target.getStat('atk', false, true); - totalspa += target.getStat('spa', false, true); - if (totalatk && totalatk >= totalspa) { - this.boost({atk: -1}, target); - } else if (totalspa) { - this.boost({spa: -1}, target); - } - } - this.boost({def: 1, spd: 1}, source); - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Sectonia')}|Jelly baby ;w;`); - }, - }, - secondary: null, - target: "self", - type: "Psychic", - zMove: {boost: {atk: 1}}, - }, - - // Segmr - tsukuyomi: { - accuracy: 100, - basePower: 0, - category: "Status", - desc: "The user loses 1/4 of its maximum HP, rounded down and even if it would cause fainting, in exchange for the target losing 1/4 of its maximum HP, rounded down, at the end of each turn while it is active. If the target uses Baton Pass, the replacement will continue to be affected. Fails if there is no target or if the target is already affected. Prevents the target from switching out. The target can still switch out if it is holding Shed Shell or uses Baton Pass, Parting Shot, Teleport, U-turn, or Volt Switch. If the target leaves the field using Baton Pass, the replacement will remain trapped. The effect ends if the user leaves the field.", - shortDesc: "Curses the target for 1/4 HP and traps it.", - name: "Tsukuyomi", - gen: 8, - pp: 5, - priority: 0, - flags: {bypasssub: 1, protect: 1, reflectable: 1}, - onTryMove() { - this.attrLastMove('[still]'); - }, - onPrepareHit(target, source) { - this.add('-anim', source, 'Dark Void', target); - this.add('-anim', source, 'Curse', target); - }, - onHit(pokemon, source, move) { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Segmr')}|I don't like naruto actually let someone else write this message plz.`); - this.directDamage(source.maxhp / 4, source, source); - pokemon.addVolatile('curse'); - pokemon.addVolatile('trapped', source, move, 'trapper'); - }, - secondary: null, - target: "normal", - type: "Dark", - }, - - // sejesensei - badopinion: { - accuracy: 90, - basePower: 120, - category: "Physical", - desc: "Forces the opponent out. The user's Defense is raised by 1 stage upon hitting.", - shortDesc: "Forces the opponent out. +1 Def.", - name: "Bad Opinion", - gen: 8, - pp: 10, - priority: -6, - flags: {protect: 1, mirror: 1}, - onTryMove() { - this.attrLastMove('[still]'); - }, - onPrepareHit(target, source) { - this.add('-anim', source, 'Hyper Voice', target); - this.add('-anim', source, 'Sludge Bomb', target); - }, - onHit() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('sejesensei')}|Please go read To Love-Ru I swear its really good, wait... don’t leave…`); - }, - self: { - boosts: { - def: 1, - }, - }, - forceSwitch: true, - secondary: null, - target: "normal", - type: "Poison", - }, - - // Seso - legendaryswordsman: { - accuracy: 85, - basePower: 95, - onTry(source, target) { - this.attrLastMove('[still]'); - const action = this.queue.willMove(target); - const move = action?.choice === 'move' ? action.move : null; - if (!move || (move.category === 'Status' && move.id !== 'mefirst') || target.volatiles['mustrecharge']) { - if (move?.category === 'Status') { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Seso')}|Irritating a better swordsman than yourself is always a good way to end up dead.`); - } else { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Seso')}|Scars on the back are a swordsman's shame.`); - } - return false; - } - }, - category: "Physical", - desc: "If the move hits, the user gains +1 Speed. This move deals not very effective damage to Flying-type Pokemon. This move fails if the target does not intend to attack.", - shortDesc: "+1 Spe on hit. Fails if target doesn't attack.", - name: "Legendary Swordsman", - gen: 8, - pp: 10, - priority: 1, - flags: {contact: 1, protect: 1}, - ignoreImmunity: {'Ground': true}, - onEffectiveness(typeMod, target, type) { - if (type === 'Flying') return -1; - }, - onTryMove(source, target, move) { - this.attrLastMove('[still]'); - }, - onPrepareHit(target, source) { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Seso')}|FORWARD!`); - this.add('-anim', source, 'Gear Grind', target); - this.add('-anim', source, 'Thief', target); - }, - secondary: { - chance: 100, - self: { - boosts: { - spe: 1, - }, - }, - }, - target: "normal", - type: "Ground", - }, - - // Shadecession - shadeuppercut: { - accuracy: 100, - basePower: 90, - category: "Physical", - desc: "This move ignores type effectiveness, substitutes, and the opposing side's Reflect, Light Screen, Safeguard, Mist and Aurora Veil.", - shortDesc: "Ignores typing, sub, & screens.", - name: "Shade Uppercut", - gen: 8, - pp: 10, - priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, - onTryMove() { - this.attrLastMove('[still]'); - }, - onPrepareHit(target, source) { - this.add('-anim', source, 'Sky Uppercut', target); - this.add('-anim', source, 'Shadow Sneak', target); - }, - onEffectiveness(typeMod, target, type) { - return 0; - }, - infiltrates: true, - secondary: null, - target: "normal", - type: "Dark", - }, - - // Soft Flex - updraft: { - accuracy: 75, - basePower: 75, - category: "Special", - desc: "Changes target's secondary typing to Flying for 2-5 turns unless the target is Ground-type or affected by Ingrain. This move cannot miss in rain.", - shortDesc: "Target: +Flying type. Rain: never misses.", - name: "Updraft", - gen: 8, - pp: 10, - priority: 0, - flags: {protect: 1}, - onTryMove() { - this.attrLastMove('[still]'); - }, - onPrepareHit(target, source) { - this.add('-anim', source, 'Twister', target); - }, - onModifyMove(move, pokemon, target) { - if (target && ['raindance', 'primordialsea'].includes(target.effectiveWeather())) { - move.accuracy = true; - } - }, - condition: { - noCopy: true, - duration: 5, - durationCallback(target, source) { - return this.random(5, 7); - }, - onStart(target) { - this.effectState.origTypes = target.getTypes(); // store original types - if (target.getTypes().length === 1) { // single type mons - if (!target.addType('Flying')) return false; - this.add('-start', target, 'typeadd', 'Flying', '[from] move: Updraft'); - } else { // dual typed mons - const primary = target.getTypes()[0]; // take the first type - if (!target.setType([primary, 'Flying'])) return false; - this.add('-start', target, 'typechange', primary + '/Flying', '[from] move: Updraft'); - } - }, - onEnd(target) { - if (!target.setType(this.effectState.origTypes)) return false; // reset the types - this.add('-start', target, 'typechange', this.effectState.origTypes.join('/'), '[silent]'); - }, - }, - secondary: { - chance: 100, - onHit(target) { - if (target.hasType(['Flying', 'Ground']) || target.volatiles['ingrain'] || target.volatiles['brilliant']) return false; - target.addVolatile('updraft'); - }, - }, - target: "normal", - type: "Flying", - }, - - // used for Soft Flex's ability - tempestterrain: { - accuracy: true, - basePower: 0, - category: "Status", - desc: "Heals Electric types for 1/16 of their maximum HP, rounded down, at the end of each turn. Causes Flying- and Steel-types and Levitate users to lose 1/16 of their maximum HP, rounded down, at the end of each turn; if the Pokemon is also Electric-type, they only get the healing effect.", - shortDesc: "Heals Electrics. Hurts Flyings and Steels.", - name: "Tempest Terrain", - pp: 10, - priority: 0, - flags: {nonsky: 1}, - terrain: 'tempestterrain', - condition: { - duration: 5, - durationCallback(source, effect) { - if (source?.hasItem('terrainextender')) { - return 8; - } - return 5; - }, - onResidualOrder: 5, - onResidual(pokemon) { - if (pokemon.hasType('Electric')) { - if (this.heal(pokemon.baseMaxhp / 8, pokemon)) { - this.add('-message', `${pokemon.name} was healed by the terrain!`); - } - } else if (!pokemon.hasType('Electric') && (pokemon.hasType(['Flying', 'Steel']) || pokemon.hasAbility('levitate'))) { - if (this.damage(pokemon.baseMaxhp / 8, pokemon)) { - this.add('-message', `${pokemon.name} was hurt by the terrain!`); - } - } - }, - onFieldStart(field, source, effect) { - if (effect?.effectType === 'Ability') { - this.add('-fieldstart', 'move: Tempest Terrain', '[from] ability: ' + effect, '[of] ' + source); - } else { - this.add('-fieldstart', 'move: Tempest Terrain'); - } - this.add('-message', 'The battlefield became stormy!'); - }, - onFieldResidualOrder: 21, - onFieldResidualSubOrder: 3, - onFieldEnd() { - this.add('-fieldend', 'move: Tempest Terrain'); - }, - }, - secondary: null, - target: "all", - type: "Electric", - zMove: {boost: {spe: 1}}, - contestType: "Clever", - }, - - // Spandan - imtoxicyoureslippinunder: { - accuracy: true, - basePower: 110, - category: "Physical", - overrideOffensivePokemon: 'target', - overrideOffensiveStat: 'spd', - desc: "This move uses the target's Special Defense to calculate damage (like Foul Play). This move is neutrally effective against Steel-types.", - shortDesc: "Uses foe's SpD as user's Atk. Hits Steel.", - name: "I'm Toxic You're Slippin' Under", - gen: 8, - pp: 10, - priority: 0, - flags: {protect: 1, mirror: 1}, - onTryMove() { - this.attrLastMove('[still]'); - }, - onPrepareHit(target, source) { - this.add('-anim', source, 'Sludge Bomb', target); - this.add('-anim', source, 'Sludge Wave', target); - }, - ignoreImmunity: {'Poison': true}, - secondary: null, - target: "normal", - type: "Poison", - }, - - // Struchni - veto: { - accuracy: 100, - basePower: 80, - category: "Physical", - desc: "If the user's stats was raised on the previous turn, double power and gain +1 priority.", - shortDesc: "If stat raised last turn: x2 power, +1 prio.", - name: "Veto", - gen: 8, - pp: 5, - priority: 0, - flags: {contact: 1, protect: 1}, - onTryMove(source) { - this.attrLastMove('[still]'); - }, - onPrepareHit(target, source) { - this.add('-anim', source, 'Head Smash', target); - }, - // Veto interactions located in formats.ts - onModifyPriority(priority, source, target, move) { - if (source.m.statsRaisedLastTurn) { - return priority + 1; - } - }, - basePowerCallback(pokemon, target, move) { - if (pokemon.m.statsRaisedLastTurn) { - return move.basePower * 2; - } - return move.basePower; - }, - onHit(target, source) { - if (source.m.statsRaisedLastTurn) { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Struchni')}|**veto**`); - } - }, - target: "normal", - type: "Steel", - }, - - // Teclis - kaboom: { - accuracy: 100, - basePower: 150, - category: "Special", - desc: "This move's Base Power is equal to 70+(80*user's current HP/user's max HP). Sets Sunny Day.", - shortDesc: "Better Eruption. Sets Sun.", - name: "Kaboom", - pp: 5, - priority: 0, - flags: {protect: 1, mirror: 1}, - weather: 'sunnyday', - basePowerCallback(pokemon, target, move) { - return 70 + 80 * Math.floor(pokemon.hp / pokemon.maxhp); - }, - onTryMove() { - this.attrLastMove('[still]'); - }, - onPrepareHit(target, source) { - this.add('-anim', source, 'Eruption', target); - this.add('-anim', source, 'Earthquake', target); - }, - secondary: null, - target: "normal", - type: "Fire", - }, - - // temp - dropadraco: { - accuracy: 90, - basePower: 130, - category: "Special", - desc: "Lowers the user's Special Attack by 2 stages, then raises it by 1 stage.", - shortDesc: "Lowers user's Sp. Atk by 2, then raises by 1.", - name: "DROP A DRACO", - gen: 8, - pp: 10, - priority: 0, - flags: {protect: 1, mirror: 1}, - onTryMove() { - this.attrLastMove('[still]'); - }, - onPrepareHit(target, source) { - this.add('-anim', source, 'Draco Meteor', target); - }, - self: { - boosts: { - spa: -2, - }, - }, - onAfterMoveSecondarySelf(source, target) { - this.boost({spa: 1}, source, source, this.dex.getActiveMove('dropadraco')); - }, - secondary: null, - target: "normal", - type: "Dragon", - }, - - // The Immortal - wattup: { - accuracy: 100, - basePower: 73, - category: "Special", - desc: "Has a 75% chance to raise the user's Speed by 1 stage.", - shortDesc: "75% chance to raise the user's Speed by 1 stage.", - name: "Watt Up", - gen: 8, - pp: 15, - priority: 0, - flags: {protect: 1, mirror: 1}, - onTryMove() { - this.attrLastMove('[still]'); - }, - onPrepareHit(target, source) { - this.add('-anim', source, 'Volt Switch', target); - this.add('-anim', source, 'Nasty Plot', source); - }, - secondary: { - chance: 75, - self: { - boosts: { - spe: 1, - }, - }, - }, - target: "normal", - type: "Electric", - }, - - // thewaffleman - icepress: { - accuracy: 100, - basePower: 80, - category: "Physical", - desc: "Damage is calculated using the user's Defense stat as its Attack, including stat stage changes. Other effects that modify the Attack stat are used as normal. This move has a 10% chance to freeze the target and is super effective against Fire-types.", - shortDesc: "Body Press. 10% Frz. SE vs Fire.", - name: "Ice Press", - gen: 8, - pp: 10, - priority: 0, - flags: {protect: 1, mirror: 1, contact: 1}, - onTryMove() { - this.attrLastMove('[still]'); - }, - onPrepareHit(target, source) { - this.add('-anim', source, 'Body Press', target); - }, - onEffectiveness(typeMod, target, type) { - if (type === 'Fire') return 1; - }, - overrideOffensiveStat: 'def', - secondary: { - chance: 10, - status: "frz", - }, - target: "normal", - type: "Ice", - }, - - // tiki - rightoncue: { - accuracy: true, - basePower: 0, - category: "Status", - desc: "Randomly uses 1-5 different support moves.", - shortDesc: "Uses 1-5 support moves.", - name: "Right. On. Cue!", - gen: 8, - pp: 10, - priority: 0, - flags: {protect: 1, snatch: 1}, - onTryMove() { - this.attrLastMove('[still]'); - }, - onHit(target, source) { - const supportMoves = [ - 'Wish', 'Heal Bell', 'Defog', 'Spikes', 'Taunt', 'Torment', - 'Haze', 'Encore', 'Reflect', 'Light Screen', 'Sticky Web', 'Acupressure', - 'Gastro Acid', 'Hail', 'Heal Block', 'Spite', 'Parting Shot', 'Trick Room', - ]; - const randomTurns = this.random(5) + 1; - let successes = 0; - for (let x = 1; x <= randomTurns; x++) { - const randomMove = this.sample(supportMoves); - supportMoves.splice(supportMoves.indexOf(randomMove), 1); - this.actions.useMove(randomMove, target); - successes++; - } - if (successes === 1) { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('tiki')}|truly a dumpster fire`); - } else if (successes >= 4) { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('tiki')}|whos ${source.side.foe.name}?`); - } - }, - secondary: null, - target: "self", - type: "Normal", - }, - - // trace - herocreation: { - accuracy: true, - basePower: 0, - category: "Status", - desc: "The user switches out and raises the incoming Pokemon's Attack and Special Attack by 1 stage.", - shortDesc: "User switches, +1 Atk/SpA to replacement.", - name: "Hero Creation", - gen: 8, - pp: 10, - priority: -6, - flags: {snatch: 1}, - onTryMove() { - this.attrLastMove('[still]'); - }, - onPrepareHit(target, source) { - this.add('-anim', source, 'Teleport', source); - this.add('-anim', source, 'Work Up', source); - }, - selfSwitch: true, - sideCondition: 'herocreation', - condition: { - duration: 1, - onSideStart(side, source) { - this.debug('Hero Creation started on ' + side.name); - this.effectState.positions = []; - for (const i of side.active.keys()) { - this.effectState.positions[i] = false; - } - this.effectState.positions[source.position] = true; - }, - onSideRestart(side, source) { - this.effectState.positions[source.position] = true; - }, - onSwitchInPriority: 1, - onSwitchIn(target) { - this.add('-activate', target, 'move: Hero Creation'); - this.boost({atk: 1, spa: 1}, target, null, this.dex.getActiveMove('herocreation')); - }, - }, - secondary: null, - target: "self", - type: "Psychic", - }, - - // Trickster - soulshatteringstare: { - accuracy: true, - basePower: 0, - category: "Status", - desc: "The user loses 1/4 of its maximum HP, rounded down and even if it would cause fainting, in exchange for the target losing 1/4 of its maximum HP, rounded down, at the end of each turn while it is active. If the target uses Baton Pass, the replacement will continue to be affected. For 5 turns, the target is prevented from restoring any HP as long as it remains active. During the effect, healing and draining moves are unusable, and Abilities and items that grant healing will not heal the user. If an affected Pokemon uses Baton Pass, the replacement will remain unable to restore its HP. Pain Split and the Regenerator Ability are unaffected.", - shortDesc: "Curses target for 1/4 HP & blocks it from healing.", - name: "Soul-Shattering Stare", - gen: 8, - pp: 10, - priority: -7, - flags: {bypasssub: 1, protect: 1, reflectable: 1}, - onTryMove() { - this.attrLastMove('[still]'); - }, - onPrepareHit(target, source) { - this.add('-anim', source, 'Glare', target); - this.add('-anim', source, 'Trick-or-Treat', source); - }, - onHit(pokemon, source) { - this.directDamage(source.maxhp / 4, source, source); - pokemon.addVolatile('curse'); - pokemon.addVolatile('healblock'); - }, - secondary: null, - target: "normal", - type: "Ghost", - }, - - // Vexen - asteriusstrike: { - accuracy: 85, - basePower: 100, - category: "Physical", - desc: "Has a 25% chance to confuse the target.", - shortDesc: "25% chance to confuse the target.", - name: "Asterius Strike", - gen: 8, - pp: 5, - priority: 0, - flags: {protect: 1, contact: 1, mirror: 1}, - onTryMove() { - this.attrLastMove('[still]'); - }, - onPrepareHit(target, source) { - this.add('-anim', source, 'Giga Impact', target); - }, - secondary: { - chance: 25, - volatileStatus: 'confusion', - }, - target: "normal", - type: "Normal", - }, - - // vivalospride - dripbayless: { - accuracy: true, - basePower: 85, - category: "Special", - 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.", - name: "DRIP BAYLESS", - gen: 8, - pp: 20, - priority: 0, - flags: {protect: 1, mirror: 1}, - onTryMove() { - this.attrLastMove('[still]'); - }, - onPrepareHit(target, source) { - this.add('-anim', source, 'Lava Plume', target); - this.add('-anim', source, 'Sunny Day', target); - }, - onEffectiveness(typeMod, target, type) { - if (type === 'Water') return 1; - }, - secondary: null, - target: "normal", - type: "Fire", - }, - - // Volco - glitchexploiting: { - accuracy: 100, - basePower: 60, - category: "Special", - desc: "1/4096 chance to KO the target and then the user, and a 1/1024 chance to force out the target and then the user; 20% chance to burn the target, and a 5% chance to freeze or paralyze a random Pokemon on the field; 30% chance to confuse the target.", - shortDesc: "Has a chance to do many things.", - name: "Glitch Exploiting", - gen: 8, - pp: 10, - priority: 0, - flags: {protect: 1, mirror: 1}, - onTryMove() { - this.attrLastMove('[still]'); - }, - onPrepareHit(target, source) { - this.add('-anim', source, 'Explosion', target); - this.add('-anim', source, 'Tackle', source); - this.add('-anim', source, 'Blue Flare', target); - }, - onHit(target, source, move) { - const random = this.random(4096); - if (random === 1) { - target.faint(source, move); - source.faint(source, move); - } else if ([1024, 2048, 3072, 4096].includes(random)) { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Volco')}|haha memory corruption go brrr...`); - target.forceSwitchFlag = true; - source.forceSwitchFlag = true; - } else if (random === 69) { - this.add(`raw|
Pokemon Showdown has not crashed!
It just got sick of all the rng in Volco's Glitch Exploiting move and gave up.
(Do not report this, this is intended.)
`); - this.tie(); - } - }, - secondaries: [ - { - chance: 5, - onHit(target, source) { - const status = this.sample(['frz', 'par']); - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Volco')}|Ever just screw up the trick and corrupt the memory and cause the wrong thing to happen possibly ruining a run? No? Just me? okay...`); - if (this.randomChance(1, 2)) { - target.trySetStatus(status); - } else { - source.trySetStatus(status); - } - }, - }, - { - chance: 20, - status: 'brn', - }, - { - chance: 30, - volatileStatus: 'confusion', - }, - ], - target: "normal", - type: "Fire", - }, - - // vooper - pandaexpress: { - accuracy: 100, - basePower: 0, - category: "Status", - desc: "Lowers the target's Attack and Special Attack by 2 stages. If this move is successful, the user switches out even if it is trapped and is replaced immediately by a selected party member. The user does not switch out if the target's Attack and Special Attack stat stages were both unchanged, or if there are no unfainted party members.", - shortDesc: "Double strength Parting Shot.", - name: "Panda Express", - gen: 8, - pp: 20, - priority: 0, - flags: {protect: 1, reflectable: 1, mirror: 1, sound: 1, bypasssub: 1}, - onTryMove() { - this.attrLastMove('[still]'); - }, - onPrepareHit(target, source) { - this.add('-anim', source, 'Parting Shot', target); - }, - onHit(target, source, move) { - const success = this.boost({atk: -2, spa: -2}, target, source); - if (!success && !target.hasAbility('mirrorarmor')) { - delete move.selfSwitch; - } - }, - selfSwitch: true, - secondary: null, - target: "normal", - type: "Dark", - }, - - // yuki - classchange: { - accuracy: true, - basePower: 0, - category: "Status", - desc: "If the user is a cosplay Pikachu forme, it randomly changes forme and has an effect depending on the forme chosen: Cleric uses Strength Sap, Ninja uses Confuse Ray, Dancer uses Feather Dance, Songstress uses Sing, and Jester uses Charm.", - shortDesc: "Pikachu: Random forme and effect.", - name: "Class Change", - gen: 8, - pp: 6, - noPPBoosts: true, - priority: 0, - flags: {}, - onTryMove(source) { - this.attrLastMove('[still]'); - }, - onPrepareHit(foe, source, move) { - const formes = ['Cleric', 'Ninja', 'Dancer', 'Songstress', 'Jester'] - .filter(forme => ssbSets[`yuki-${forme}`].species !== source.species.name); - source.m.yukiCosplayForme = this.sample(formes); - switch (source.m.yukiCosplayForme) { - case 'Cleric': - this.actions.useMove("Strength Sap", source); - break; - case 'Ninja': - this.actions.useMove("Confuse Ray", source); - break; - case 'Dancer': - this.actions.useMove("Feather Dance", source); - break; - case 'Songstress': - this.actions.useMove("Sing", source); - break; - case 'Jester': - this.actions.useMove("Charm", source); - break; - } - }, - onHit(target, source) { - if (source.baseSpecies.baseSpecies !== 'Pikachu') return; - switch (source.m.yukiCosplayForme) { - case 'Cleric': - changeSet(this, source, ssbSets['yuki-Cleric']); - this.add('-message', 'yuki patches up her wounds!'); - return; - case 'Ninja': - changeSet(this, source, ssbSets['yuki-Ninja']); - this.add('-message', `yuki's fast movements confuse ${target.name}!`); - return; - case 'Dancer': - changeSet(this, source, ssbSets['yuki-Dancer']); - this.add('-message', `yuki dazzles ${target.name} with her moves!`); - return; - case 'Songstress': - changeSet(this, source, ssbSets['yuki-Songstress']); - this.add('-message', `yuki sang an entrancing melody!`); - return; - case 'Jester': - changeSet(this, source, ssbSets['yuki-Jester']); - this.add('-message', `yuki tries her best to impress ${target.name}!`); - return; - } - }, - secondary: null, - target: "self", - type: "Normal", - }, - - // Zalm - ingredientforaging: { - accuracy: 100, - basePower: 70, - category: "Special", - desc: "Heals 50% of the user's max HP, rounded down, if the target is holding an item. Removes the target's item and enables Belch on the user.", - shortDesc: "If foe has item: Heal 50% and remove it.", - name: "Ingredient Foraging", - gen: 8, - pp: 10, - priority: 0, - flags: {protect: 1, mirror: 1}, - onTryMove() { - this.attrLastMove('[still]'); - }, - onPrepareHit(target, source) { - this.add('-anim', source, 'Thief', target); - }, - onAfterHit(target, source) { - const item = target.getItem(); - if (source.hp && target.takeItem(source)) { - this.add('-enditem', target, item.name, '[from] stealeat', '[move] Ingredient Foraging', '[of] ' + source); - this.heal(source.maxhp / 2, source); - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Zalm')}|Yum`); - source.ateBerry = true; - } - }, - secondary: null, - target: "normal", - type: "Bug", - }, - - // Zarel - relicdance: { - accuracy: 100, - basePower: 80, - category: "Special", - desc: "+1 Special Attack and, if the user is a Meloetta forme, transforms into the other Meloetta forme with its accompanying moveset, regardless of the outcome of the move. The move becomes fighting if Meloetta-P uses the move. If the user is Meloetta-Pirouette, this move is Fighting-type.", - shortDesc: "+1 SpA. Meloetta transforms. Fighting type if Melo-P.", - name: "Relic Dance", - gen: 8, - pp: 10, - priority: 0, - flags: {protect: 1, mirror: 1, dance: 1}, - secondary: null, - onTryMove(pokemon, target, move) { - this.attrLastMove('[still]'); - }, - onPrepareHit(target, source) { - this.add('-anim', source, 'Relic Song', target); - }, - onAfterMove(source) { - this.boost({spa: 1}, source); - if (source.species.baseSpecies !== 'Meloetta') return; - if (source.species.name === "Meloetta-Pirouette") { - changeSet(this, source, ssbSets['Zarel']); - } else { - changeSet(this, source, ssbSets['Zarel-Pirouette']); - } - }, - onModifyMove(move, pokemon) { - if (pokemon.species.name === "Meloetta-Pirouette") move.type = "Fighting"; - }, - target: "allAdjacentFoes", - type: "Psychic", - }, - - // Zodiax - bigstormcoming: { - accuracy: true, - basePower: 0, - category: "Special", - desc: "Uses Hurricane, Thunder, Blizzard, and then Weather Ball, each at 30% of their normal Base Power.", - shortDesc: "30% power: Hurricane, Thunder, Blizzard, W. Ball.", - name: "Big Storm Coming", - gen: 8, - pp: 10, - priority: 0, - flags: {}, - onTryMove() { - this.attrLastMove('[still]'); - }, - onPrepareHit() { - this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Zodiax')}|There is a hail no storm okayyyyyy`); - }, - onTry(pokemon, target) { - pokemon.addVolatile('bigstormcomingmod'); - this.actions.useMove("Hurricane", pokemon); - this.actions.useMove("Thunder", pokemon); - this.actions.useMove("Blizzard", pokemon); - this.actions.useMove("Weather Ball", pokemon); - }, - secondary: null, - target: "normal", - type: "Flying", - }, - // Zyg - luckofthedraw: { - accuracy: true, - basePower: 0, - category: "Status", - desc: "Raises the user's Attack, Defense, and Speed by 1 stage.", - shortDesc: "Raises the user's Attack, Defense, Speed by 1.", - name: "Luck of the Draw", - gen: 8, - pp: 10, - priority: 0, - flags: {snatch: 1}, - onTryMove() { - this.attrLastMove('[still]'); - }, - onPrepareHit(target, source) { - this.add('-anim', source, 'Quiver Dance', source); - }, - boosts: { - atk: 1, - def: 1, - spe: 1, - }, - secondary: null, - target: "self", - type: "Psychic", - }, - // These moves need modified to support Alpha's move - auroraveil: { - inherit: true, - desc: "For 5 turns, the user and its party members take 0.5x damage from physical and special attacks, or 0.66x damage if in a Double Battle; does not reduce damage further with Reflect or Light Screen. Critical hits ignore this protection. It is removed from the user's side if the user or an ally is successfully hit by Brick Break, Psychic Fangs, or Defog. Brick Break and Psychic Fangs remove the effect before damage is calculated. Lasts for 8 turns if the user is holding Light Clay. Fails unless the weather is Heavy Hailstorm or Hail.", - shortDesc: "For 5 turns, damage to allies is halved. Hail-like weather only.", - onTryHitSide() { - if (!this.field.isWeather(['winterhail', 'heavyhailstorm', 'hail'])) return false; - }, - }, - blizzard: { - inherit: true, - desc: "Has a 10% chance to freeze the target. If the weather is Heavy Hailstorm or Hail, this move does not check accuracy.", - shortDesc: "10% freeze foe(s). Can't miss in Hail-like weather.", - onModifyMove(move) { - if (this.field.isWeather(['winterhail', 'heavyhailstorm', 'hail'])) move.accuracy = true; - }, - }, - dig: { - inherit: true, - condition: { - duration: 2, - onImmunity(type, pokemon) { - if (['sandstorm', 'winterhail', 'heavyhailstorm', 'hail'].includes(type)) return false; - }, - onInvulnerability(target, source, move) { - if (['earthquake', 'magnitude'].includes(move.id)) { - return; - } - return false; - }, - onSourceModifyDamage(damage, source, target, move) { - if (move.id === 'earthquake' || move.id === 'magnitude') { - return this.chainModify(2); - } - }, - }, - }, - dive: { - inherit: true, - condition: { - duration: 2, - onImmunity(type, pokemon) { - if (['sandstorm', 'winterhail', 'heavyhailstorm', 'hail'].includes(type)) return false; - }, - onInvulnerability(target, source, move) { - if (['surf', 'whirlpool'].includes(move.id)) { - return; - } - return false; - }, - onSourceModifyDamage(damage, source, target, move) { - if (move.id === 'surf' || move.id === 'whirlpool') { - return this.chainModify(2); - } - }, - }, - }, - moonlight: { - inherit: true, - desc: "The user restores 1/2 of its maximum HP if Delta Stream or no weather conditions are in effect or if the user is holding Utility Umbrella, 2/3 of its maximum HP if the weather is Desolate Land or Sunny Day, and 1/4 of its maximum HP if the weather is Heavy Hailstorm, Hail, Primordial Sea, Rain Dance, or Sandstorm, all rounded half down.", - onHit(pokemon) { - let factor = 0.5; - switch (pokemon.effectiveWeather()) { - case 'sunnyday': - case 'desolateland': - factor = 0.667; - break; - case 'raindance': - case 'primordialsea': - case 'sandstorm': - case 'heavyhailstorm': - case 'winterhail': - case 'hail': - factor = 0.25; - break; - } - return !!this.heal(this.modify(pokemon.maxhp, factor)); - }, - }, - morningsun: { - inherit: true, - desc: "The user restores 1/2 of its maximum HP if Delta Stream or no weather conditions are in effect or if the user is holding Utility Umbrella, 2/3 of its maximum HP if the weather is Desolate Land or Sunny Day, and 1/4 of its maximum HP if the weather is Heavy Hailstorm, Hail, Primordial Sea, Rain Dance, or Sandstorm, all rounded half down.", - onHit(pokemon) { - let factor = 0.5; - switch (pokemon.effectiveWeather()) { - case 'sunnyday': - case 'desolateland': - factor = 0.667; - break; - case 'raindance': - case 'primordialsea': - case 'sandstorm': - case 'heavyhailstorm': - case 'winterhail': - case 'hail': - factor = 0.25; - break; - } - return !!this.heal(this.modify(pokemon.maxhp, factor)); - }, - }, - solarbeam: { - inherit: true, - desc: "This attack charges on the first turn and executes on the second. Power is halved if the weather is Heavy Hailstorm, Hail, Primordial Sea, Rain Dance, or Sandstorm and the user is not holding Utility Umbrella. If the user is holding a Power Herb or the weather is Desolate Land or Sunny Day, the move completes in one turn. If the user is holding Utility Umbrella and the weather is Desolate Land or Sunny Day, the move still requires a turn to charge.", - onBasePower(basePower, pokemon, target) { - const weathers = ['raindance', 'primordialsea', 'sandstorm', 'winterhail', 'heavyhailstorm', 'hail']; - if (weathers.includes(pokemon.effectiveWeather())) { - this.debug('weakened by weather'); - return this.chainModify(0.5); - } - }, - }, - solarblade: { - inherit: true, - desc: "This attack charges on the first turn and executes on the second. Power is halved if the weather is Heavy Hailstorm, Hail, Primordial Sea, Rain Dance, or Sandstorm and the user is not holding Utility Umbrella. If the user is holding a Power Herb or the weather is Desolate Land or Sunny Day, the move completes in one turn. If the user is holding Utility Umbrella and the weather is Desolate Land or Sunny Day, the move still requires a turn to charge.", - onBasePower(basePower, pokemon, target) { - const weathers = ['raindance', 'primordialsea', 'sandstorm', 'winterhail', 'heavyhailstorm', 'hail']; - if (weathers.includes(pokemon.effectiveWeather())) { - this.debug('weakened by weather'); - return this.chainModify(0.5); - } - }, - }, - synthesis: { - inherit: true, - desc: "The user restores 1/2 of its maximum HP if Delta Stream or no weather conditions are in effect or if the user is holding Utility Umbrella, 2/3 of its maximum HP if the weather is Desolate Land or Sunny Day, and 1/4 of its maximum HP if the weather is Heavy Hailstorm, Hail, Primordial Sea, Rain Dance, or Sandstorm, all rounded half down.", - onHit(pokemon) { - let factor = 0.5; - switch (pokemon.effectiveWeather()) { - case 'sunnyday': - case 'desolateland': - factor = 0.667; - break; - case 'raindance': - case 'primordialsea': - case 'sandstorm': - case 'heavyhailstorm': - case 'winterhail': - case 'hail': - factor = 0.25; - break; - } - return !!this.heal(this.modify(pokemon.maxhp, factor)); - }, - }, - weatherball: { - inherit: true, - desc: "Power doubles if a weather condition other than Delta Stream is active, and this move's type changes to match. Ice type during Heavy Hailstorm or Hail, Water type during Primordial Sea or Rain Dance, Rock type during Sandstorm, and Fire type during Desolate Land or Sunny Day. If the user is holding Utility Umbrella and uses Weather Ball during Primordial Sea, Rain Dance, Desolate Land, or Sunny Day, the move is still Normal-type and does not have a base power boost.", - 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 'heavyhailstorm': - case 'winterhail': - case 'hail': - move.type = 'Ice'; - break; - } - }, - 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 'heavyhailstorm': - case 'winterhail': - case 'hail': - move.basePower *= 2; - break; - } - }, - }, - // Modified move descriptions for support of Segmr's move - doomdesire: { - inherit: true, - desc: "Deals damage two turns after this move is used. At the end of that turn, the damage is calculated at that time and dealt to the Pokemon at the position the target had when the move was used. If the user is no longer active at the time, damage is calculated based on the user's natural Special Attack stat, types, and level, with no boosts from its held item or Ability. Fails if this move, Disconnect, or Future Sight is already in effect for the target's position.", - }, - futuresight: { - inherit: true, - desc: "Deals damage two turns after this move is used. At the end of that turn, the damage is calculated at that time and dealt to the Pokemon at the position the target had when the move was used. If the user is no longer active at the time, damage is calculated based on the user's natural Special Attack stat, types, and level, with no boosts from its held item or Ability. Fails if this move, Doom Desire, or Disconnect is already in effect for the target's position.", - }, - // Terrain Pulse for consistency - terrainpulse: { - inherit: true, - onModifyType(move, pokemon) { - if (!pokemon.isGrounded()) return; - switch (this.field.terrain) { - case 'electricterrain': - move.type = 'Electric'; - break; - case 'grassyterrain': - move.type = 'Grass'; - break; - case 'mistyterrain': - move.type = 'Fairy'; - break; - case 'psychicterrain': - move.type = 'Psychic'; - break; - case 'baneterrain': - move.type = 'Ice'; - break; - case 'swampyterrain': - move.type = 'Ground'; - break; - case 'inversionterrain': - move.type = '???'; - break; - case 'pitchblack': - move.type = 'Ghost'; - break; - case 'waveterrain': - move.type = 'Water'; - break; - case 'tempestterrain': - move.type = 'Flying'; - break; - } - }, - }, - // genderless infatuation for nui's Condition Override - attract: { - inherit: true, - condition: { - noCopy: true, // doesn't get copied by Baton Pass - onStart(pokemon, source, effect) { - if (!source.hasAbility('conditionoverride')) { - if (!(pokemon.gender === 'M' && source.gender === 'F') && !(pokemon.gender === 'F' && source.gender === 'M')) { - this.debug('incompatible gender'); - return false; - } - } - if (!this.runEvent('Attract', pokemon, source)) { - this.debug('Attract event failed'); - return false; - } - - if (effect.id === 'cutecharm') { - this.add('-start', pokemon, 'Attract', '[from] ability: Cute Charm', '[of] ' + source); - } else if (effect.id === 'destinyknot') { - this.add('-start', pokemon, 'Attract', '[from] item: Destiny Knot', '[of] ' + source); - } else { - this.add('-start', pokemon, 'Attract'); - } - }, - onUpdate(pokemon) { - if (this.effectState.source && !this.effectState.source.isActive && pokemon.volatiles['attract']) { - this.debug('Removing Attract volatile on ' + pokemon); - pokemon.removeVolatile('attract'); - } - }, - onModifySpDPriority: 1, - onModifySpD(spd, pokemon) { - for (const target of this.getAllActive()) { - if (target === pokemon) continue; - if (target.hasAbility('conditionoverride')) return this.chainModify(0.75); - } - return; - }, - onBeforeMovePriority: 2, - onBeforeMove(pokemon, target, move) { - this.add('-activate', pokemon, 'move: Attract', '[of] ' + this.effectState.source); - if (this.randomChance(1, 2)) { - this.add('cant', pokemon, 'Attract'); - return false; - } - }, - onEnd(pokemon) { - this.add('-end', pokemon, 'Attract', '[silent]'); - }, - }, - onTryImmunity(target, source) { - if (source.hasAbility('conditionoverride')) return true; - return (target.gender === 'M' && source.gender === 'F') || (target.gender === 'F' && source.gender === 'M'); - }, - }, - - // Try playing Staff Bros without dynamax and see what happens - supermetronome: { - accuracy: true, - basePower: 0, - category: "Status", - desc: "Uses 2-5 random moves. Does not include 1-Base Power Z-Moves, Super Metronome, Metronome, or 10-Base Power Max moves.", - shortDesc: "Uses 2-5 random moves.", - name: "Super Metronome", - isNonstandard: "Custom", - pp: 100, - noPPBoosts: true, - priority: 0, - flags: {}, - onTryMove(pokemon) { - this.attrLastMove('[still]'); - }, - onPrepareHit(target, source) { - this.add('-anim', source, "Metronome", source); - }, - onHit(target, source, effect) { - const moves = []; - for (const id in this.dex.data.Moves) { - const move = this.dex.moves.get(id); - if (move.realMove || move.id.includes('metronome')) continue; - // Calling 1 BP move is somewhat lame and disappointing. However, - // signature Z moves are fine, as they actually have a base power. - if (move.isZ && move.basePower === 1) continue; - if (move.gen > this.gen) continue; - if (move.isMax === true && move.basePower === 10) continue; - moves.push(move.name); - } - let randomMove: string; - if (moves.length) { - randomMove = this.sample(moves); - } else { - return false; - } - this.actions.useMove(randomMove, target); - }, - multihit: [2, 5], - secondary: null, - target: "self", - type: "???", - }, -}; diff --git a/data/mods/ssb/pokedex.ts b/data/mods/ssb/pokedex.ts deleted file mode 100644 index 2376792acefe..000000000000 --- a/data/mods/ssb/pokedex.ts +++ /dev/null @@ -1,265 +0,0 @@ -export const Pokedex: {[k: string]: ModdedSpeciesData} = { - /* - // Example - id: { - inherit: true, // Always use this, makes the pokemon inherit its default values from the parent mod (gen7) - baseStats: {hp: 100, atk: 100, def: 100, spa: 100, spd: 100, spe: 100}, // the base stats for the pokemon - }, - */ - // Abdelrahman - cameruptmega: { - inherit: true, - abilities: {0: "Water Absorb"}, - }, - // Aelita - zygardecomplete: { - inherit: true, - abilities: {0: "Scyphozoa"}, - }, - // aegii - aegislash: { - inherit: true, - abilities: {0: "Set the Stage"}, - }, - aegislashblade: { - inherit: true, - abilities: {0: "Set the Stage"}, - }, - // Aeonic - nosepass: { - inherit: true, - baseStats: {hp: 70, atk: 85, def: 135, spa: 45, spd: 90, spe: 70}, - }, - // Aethernum - lotad: { - inherit: true, - baseStats: {hp: 40, atk: 70, def: 70, spa: 80, spd: 90, spe: 70}, - }, - // Annika - mewtwomegay: { - inherit: true, - baseStats: {hp: 106, atk: 110, def: 90, spa: 154, spd: 90, spe: 130}, - abilities: {0: "Overprotective"}, - }, - // A Quag To The Past - quagsire: { - inherit: true, - baseStats: {hp: 95, atk: 65, def: 85, spa: 65, spd: 85, spe: 35}, - }, - // Billo - cosmog: { - inherit: true, - baseStats: {hp: 86, atk: 58, def: 62, spa: 87, spd: 62, spe: 74}, - }, - // dogknees - furret: { - inherit: true, - types: ["Normal", "Ghost"], - }, - // Elgino - celebi: { - inherit: true, - types: ["Grass", "Fairy"], - }, - // EpicNikolai - garchompmega: { - inherit: true, - abilities: {0: "Dragon Heart"}, - types: ["Dragon", "Fire"], - }, - // Felucia - uxie: { - inherit: true, - types: ["Psychic", "Normal"], - }, - // frostyicelad - laprasgmax: { - inherit: true, - heightm: 2.5, - weightkg: 220, - }, - // GMars - minior: { - inherit: true, - abilities: {0: "Capsule Armor"}, - }, - miniorviolet: { - inherit: true, - abilities: {0: "Capsule Armor"}, - }, - miniorindigo: { - inherit: true, - abilities: {0: "Capsule Armor"}, - }, - miniorblue: { - inherit: true, - abilities: {0: "Capsule Armor"}, - }, - miniorgreen: { - inherit: true, - abilities: {0: "Capsule Armor"}, - }, - minioryellow: { - inherit: true, - abilities: {0: "Capsule Armor"}, - }, - miniororange: { - inherit: true, - abilities: {0: "Capsule Armor"}, - }, - miniormeteor: { - inherit: true, - abilities: {0: "Capsule Armor"}, - }, - // Hydro - pichu: { - inherit: true, - types: ["Electric", "Water"], - baseStats: {hp: 67, atk: 58, def: 57, spa: 81, spd: 67, spe: 101}, - }, - // Inactive - gyaradosmega: { - inherit: true, - abilities: {0: "Dragon's Fury"}, - }, - // Jho - toxtricity: { - inherit: true, - abilities: {0: "Punk Rock"}, - }, - toxtricitylowkey: { - inherit: true, - abilities: {0: "Venomize"}, - }, - // Kaiju Bunny - lopunnymega: { - inherit: true, - abilities: {0: "Second Wind"}, - types: ["Normal", "Fairy"], - }, - // Kris - unown: { - inherit: true, - baseStats: {hp: 100, atk: 100, def: 100, spa: 100, spd: 100, spe: 100}, - // For reverting back to an Unown forme - abilities: {0: "Protean"}, - }, - // Lamp - lampent: { - inherit: true, - baseStats: {hp: 60, atk: 80, def: 100, spa: 135, spd: 100, spe: 95}, - }, - // Meicoo - venusaurmega: { - inherit: true, - abilities: {0: "Unaware"}, - }, - // nui - jigglypuff: { - inherit: true, - baseStats: {hp: 115, atk: 128, def: 62, spa: 128, spd: 78, spe: 62}, - }, - // Overneat - absolmega: { - inherit: true, - abilities: {0: "Fluffy"}, - types: ["Dark", "Fairy"], - }, - // PartMan - chandelure: { - inherit: true, - abilities: {0: "Hecatomb"}, - }, - // Psynergy - rayquaza: { - inherit: true, - abilities: {0: "Supernova"}, - }, - rayquazamega: { - inherit: true, - abilities: {0: "Supernova"}, - requiredMove: "Clear Breath", - }, - // Robb576 - necrozmadawnwings: { - inherit: true, - abilities: {0: "The Numbers Game"}, - }, - necrozmaduskmane: { - inherit: true, - abilities: {0: "The Numbers Game"}, - }, - necrozmaultra: { - inherit: true, - abilities: {0: "The Numbers Game"}, - }, - // Strucni - aggronmega: { - inherit: true, - abilities: {0: "Overasked Clause"}, - }, - // Finland - alcremie: { - inherit: true, - abilities: {0: "Winding Song"}, - }, - // tiki - snom: { - inherit: true, - baseStats: {hp: 70, atk: 65, def: 60, spa: 125, spd: 90, spe: 65}, - }, - // vivalospride's interaction with Coconut's move - darumaka: { - inherit: true, - evos: ["Darmanitan", "Darmanitan-Zen"], - }, - darmanitanzen: { - inherit: true, - prevo: "Darumaka", - }, - // yuki - pikachucosplay: { - inherit: true, - baseStats: {hp: 60, atk: 85, def: 50, spa: 95, spd: 85, spe: 110}, - abilities: {0: "Combat Training"}, - }, - pikachuphd: { - inherit: true, - baseStats: {hp: 60, atk: 85, def: 50, spa: 95, spd: 85, spe: 110}, - abilities: {0: "Triage"}, - }, - pikachulibre: { - inherit: true, - baseStats: {hp: 60, atk: 85, def: 50, spa: 95, spd: 85, spe: 110}, - abilities: {0: "White Smoke"}, - }, - pikachupopstar: { - inherit: true, - baseStats: {hp: 60, atk: 85, def: 50, spa: 95, spd: 85, spe: 110}, - abilities: {0: "Dancer"}, - }, - pikachurockstar: { - inherit: true, - baseStats: {hp: 60, atk: 85, def: 50, spa: 95, spd: 85, spe: 110}, - abilities: {0: "Punk Rock"}, - }, - pikachubelle: { - inherit: true, - baseStats: {hp: 60, atk: 85, def: 50, spa: 95, spd: 85, spe: 110}, - abilities: {0: "Weak Armor"}, - }, - // Zalm - weedle: { - inherit: true, - baseStats: {hp: 100, atk: 35, def: 100, spa: 90, spd: 90, spe: 100}, - }, - // Zarel - meloetta: { - inherit: true, - abilities: {0: "Dancer"}, - }, - meloettapirouette: { - inherit: true, - abilities: {0: "Serene Grace"}, - }, -}; diff --git a/data/mods/ssb/random-teams.ts b/data/mods/ssb/random-teams.ts deleted file mode 100644 index 3a775e794e39..000000000000 --- a/data/mods/ssb/random-teams.ts +++ /dev/null @@ -1,974 +0,0 @@ -import RandomGen8Teams from '../gen8/random-teams'; - -export interface SSBSet { - species: string; - ability: string | string[]; - item: string | string[]; - gender: GenderName; - moves: (string | string[])[]; - signatureMove: string; - evs?: {hp?: number, atk?: number, def?: number, spa?: number, spd?: number, spe?: number}; - ivs?: {hp?: number, atk?: number, def?: number, spa?: number, spd?: number, spe?: number}; - nature?: string | string[]; - shiny?: number | boolean; - level?: number; - happiness?: number; - skip?: string; -} -interface SSBSets {[k: string]: SSBSet} - -export const ssbSets: SSBSets = { - /* - // Example: - Username: { - species: 'Species', ability: 'Ability', item: 'Item', gender: '', - moves: ['Move Name', ['Move Name', 'Move Name']], - signatureMove: 'Move Name', - evs: {stat: number}, ivs: {stat: number}, nature: 'Nature', level: 100, shiny: false, - }, - // Species, ability, and item need to be captialized properly ex: Ludicolo, Swift Swim, Life Orb - // Gender can be M, F, N, or left as an empty string - // each slot in moves needs to be a string (the move name, captialized properly ex: Hydro Pump), or an array of strings (also move names) - // signatureMove also needs to be capitalized properly ex: Scripting - // You can skip Evs (defaults to 82 all) and/or Ivs (defaults to 31 all), or just skip part of the Evs (skipped evs are 0) and/or Ivs (skipped Ivs are 31) - // You can also skip shiny, defaults to false. Level can be skipped (defaults to 100). - // Nature needs to be a valid nature with the first letter capitalized ex: Modest - */ - // Please keep sets organized alphabetically based on staff member name! - Abdelrahman: { - species: 'Camerupt', ability: 'Water Absorb', item: 'Cameruptite', gender: 'M', - moves: ['Eruption', 'Earth Power', 'Fire Blast'], - signatureMove: 'The Town Outplay', - evs: {hp: 252, spd: 172, spe: 84}, nature: 'Calm', - }, - Adri: { - species: 'Latios', ability: 'Psychic Surge', item: 'Leftovers', gender: 'M', - moves: ['Psyshock', 'Calm Mind', 'Aura Sphere'], - signatureMove: 'Skystriker', - evs: {spa: 252, spd: 4, spe: 252}, ivs: {atk: 0}, nature: 'Timid', - }, - Aelita: { - species: 'Zygarde', ability: 'Scyphozoa', item: 'Focus Sash', gender: 'F', - moves: ['Protect', 'Leech Seed', 'Thousand Arrows'], - signatureMove: 'XANA\'s Keys To Lyoko', - evs: {hp: 252, atk: 4, spd: 252}, nature: 'Careful', - }, - aegii: { - species: 'Aegislash', ability: 'Set the Stage', item: 'Life Orb', gender: 'M', - moves: ['Shadow Claw', 'Iron Head', 'Shadow Sneak'], - signatureMove: 'Reset', - evs: {hp: 252, def: 192, spd: 64}, nature: 'Sassy', - }, - 'aegii-Alt': { - species: 'Aegislash', ability: 'Set the Stage', item: 'Life Orb', gender: 'M', - moves: ['Shadow Ball', 'Flash Cannon', 'Shadow Sneak'], - signatureMove: 'Reset', - evs: {hp: 252, def: 192, spd: 64}, nature: 'Sassy', - skip: 'aegii', - }, - Aeonic: { - species: 'Nosepass', ability: 'Arsene', item: 'Stone Plate', gender: 'M', - moves: ['Diamond Storm', 'Earthquake', 'Milk Drink'], - signatureMove: 'Looking Cool', - evs: {atk: 252, def: 4, spd: 252}, nature: 'Impish', - }, - Aethernum: { - species: 'Lotad', ability: 'Rainy Season', item: 'Big Root', gender: 'M', - moves: ['Giga Drain', 'Muddy Water', 'Hurricane'], - signatureMove: 'Lilypad Overflow', - evs: {spa: 252, spd: 4, spe: 252}, nature: 'Modest', - }, - Akir: { - species: 'Forretress', ability: 'Fortifications', item: 'Leftovers', gender: 'M', - moves: ['Rapid Spin', 'Stealth Rock', ['U-turn', 'Toxic']], - signatureMove: 'Ravelin', - evs: {hp: 248, def: 252, spe: 8}, ivs: {spa: 0}, nature: 'Impish', - }, - Alpha: { - species: 'Aurorus', ability: 'Snow Warning', item: 'Caionium Z', gender: 'M', - moves: ['Freeze-Dry', 'Ancient Power', 'Earth Power'], - signatureMove: 'Blizzard', - evs: {spa: 252, spd: 4, spe: 252}, ivs: {atk: 0}, nature: 'Timid', shiny: true, - }, - Annika: { - species: 'Mewtwo', ability: 'Overprotective', item: 'Mewtwonite Y', gender: 'F', - moves: [['Rising Voltage', 'Lava Plume'], ['Hex', 'Aurora Beam'], ['Psychic', 'Psyshock']], - signatureMove: 'Data Corruption', - evs: {spa: 252, spd: 4, spe: 252}, ivs: {atk: 0}, nature: 'Quirky', shiny: true, - }, - 'A Quag To The Past': { - species: 'Quagsire', ability: 'Carefree', item: 'Quagnium Z', gender: 'M', - moves: ['Shore Up', 'Flip Turn', ['Haze', 'Toxic']], - signatureMove: 'Scorching Sands', - evs: {hp: 252, def: 252, spd: 4}, ivs: {spe: 0}, nature: 'Relaxed', - }, - Arby: { - species: 'Keldeo-Resolute', ability: 'Wave Surge', item: 'Expert Belt', gender: '', - moves: ['Hydro Pump', 'Secret Sword', 'Ice Beam'], - signatureMove: 'Quickhammer', - evs: {def: 4, spa: 252, spe: 252}, ivs: {atk: 0}, nature: 'Timid', - }, - Arcticblast: { - species: 'Tapu Fini', ability: 'Misty Surge', item: 'Misty Seed', gender: '', - moves: ['Heal Order', 'Sparkling Aria', ['Clear Smog', 'Moonblast']], - signatureMove: 'Radiant Burst', - evs: {hp: 252, def: 252, spe: 4}, ivs: {atk: 0}, nature: 'Bold', - }, - Archas: { - species: 'Naviathan', ability: 'Indomitable', item: 'Iron Plate', gender: 'F', - moves: ['Waterfall', 'Icicle Crash', 'No Retreat'], - signatureMove: 'Broadside Barrage', - evs: {atk: 252, def: 4, spe: 252}, nature: 'Jolly', - }, - 'awa!': { - species: 'Lycanroc', ability: 'Sand Rush', item: 'Life Orb', gender: 'F', - moves: ['Earthquake', 'Close Combat', 'Swords Dance'], - signatureMove: 'awa!', - evs: {atk: 252, spd: 4, spe: 252}, nature: 'Adamant', - }, - Beowulf: { - species: 'Beedrill', ability: 'Intrepid Sword', item: 'Beedrillite', gender: '', - moves: ['Megahorn', 'Gunk Shot', ['Precipice Blades', 'Head Smash']], - signatureMove: 'Buzz Inspection', - evs: {hp: 4, atk: 252, spe: 252}, nature: 'Jolly', shiny: 2, - }, - biggie: { - species: 'Snorlax', ability: 'Super Armor', item: 'Leftovers', gender: 'M', - moves: ['Body Slam', 'Darkest Lariat', 'Assist'], - signatureMove: 'Juggernaut Punch', - evs: {hp: 4, def: 252, spd: 252}, nature: 'Brave', - }, - Billo: { - species: 'Cosmog', ability: 'Proof Policy', item: 'Eviolite', gender: 'N', - moves: ['Cosmic Power', 'Calm Mind', 'Stored Power'], - signatureMove: 'Fishing for Hacks', - evs: {hp: 252, spa: 252, spd: 4}, ivs: {atk: 0}, nature: 'Modest', shiny: true, - }, - Blaz: { - species: 'Carbink', ability: 'Solid Rock', item: 'Leftovers', gender: 'N', - moves: ['Cosmic Power', 'Body Press', 'Recover'], - signatureMove: 'Bleak December', - evs: {hp: 4, def: 252, spd: 252}, ivs: {atk: 0}, nature: 'Careful', shiny: true, - }, - Brandon: { - species: 'Shaymin', ability: 'Bane Surge', item: ['Leftovers', 'Terrain Extender'], gender: 'M', - moves: [['Ice Beam', 'Paleo Wave'], ['Earthquake', 'Flamethrower'], 'Recover'], - signatureMove: 'Flower Shower', - evs: {hp: 84, atk: 84, def: 84, spa: 84, spd: 84, spe: 84}, nature: 'Quirky', - }, - brouha: { - species: 'Mantine', ability: 'Turbulence', item: 'Leftovers', gender: 'M', - moves: ['Scald', 'Recover', 'Haze'], - signatureMove: 'Kinetosis', - evs: {hp: 248, def: 8, spd: 252}, ivs: {atk: 0}, nature: 'Calm', - }, - Buffy: { - species: 'Dragonite', ability: 'Speed Control', item: 'Metal Coat', gender: '', - moves: ['Swords Dance', 'Thousand Arrows', 'Double Iron Bash'], - signatureMove: 'Pandora\'s Box', - evs: {atk: 252, def: 4, spe: 252}, nature: 'Jolly', shiny: 2, - }, - Cake: { - species: 'Dunsparce', ability: 'Wonder Guard', item: 'Shell Bell', gender: 'M', - moves: ['Haze', 'Jungle Healing', ['Baton Pass', 'Poison Gas', 'Corrosive Gas', 'Magic Powder', 'Speed Swap', 'Spite', 'Screech', 'Trick Room', 'Heal Block', 'Geomancy']], - signatureMove: 'Kevin', - evs: {hp: 252, atk: 252, spd: 4}, nature: 'Adamant', - }, - 'cant say': { - species: 'Volcarona', ability: 'Rage Quit', item: 'Kee Berry', gender: 'M', - moves: ['Quiver Dance', 'Roost', 'Will-O-Wisp'], - signatureMove: 'Never Lucky', - evs: {hp: 248, def: 36, spe: 224}, ivs: {atk: 0}, nature: 'Timid', - }, - Celine: { - species: 'Lucario', ability: 'Guardian Armor', item: 'Leftovers', gender: 'F', - moves: ['Wish', 'Teleport', 'Drain Punch'], - signatureMove: 'Status Guard', - evs: {hp: 248, def: 252, spd: 8}, nature: 'Impish', - }, - 'c.kilgannon': { - species: 'Yveltal', ability: 'Infiltrator', item: 'Choice Scarf', gender: 'N', - moves: ['Knock Off', 'Steel Wing', 'U-turn'], - signatureMove: 'Soul Siphon', - evs: {atk: 252, spd: 4, spe: 252}, nature: 'Adamant', - }, - Coconut: { - species: 'Misdreavus', ability: 'Levitate', item: 'Focus Sash', gender: 'F', - moves: ['Dazzling Gleam', 'Shadow Ball', 'Snatch'], - signatureMove: 'Devolution Beam', - evs: {spa: 252, spd: 4, spe: 252}, nature: 'Timid', - }, - dogknees: { - species: 'Furret', ability: 'Adaptability', item: ['Normalium Z', 'Ghostium Z'], gender: 'M', - moves: ['Extreme Speed', 'Shadow Claw', 'Explosion'], - signatureMove: 'Belly Rubs', - evs: {hp: 4, atk: 252, spe: 252}, nature: 'Jolly', - }, - DragonWhale: { - species: 'Mimikyu', ability: 'Disguise', item: 'Life Orb', gender: 'M', - moves: ['Play Rough', 'Spectral Thief', 'Shadow Sneak'], - signatureMove: 'Cloak Dance', - evs: {hp: 4, atk: 252, spe: 252}, nature: 'Jolly', - }, - 'drampa\'s grandpa': { - species: 'Drampa', ability: 'Old Manpa', item: 'Wise Glasses', gender: 'M', - moves: [ - ['Spikes', 'Stealth Rock', 'Toxic Spikes'], 'Slack Off', ['Core Enforcer', 'Snarl', 'Lava Plume', 'Scorching Sands'], - ], - signatureMove: 'GET OFF MY LAWN!', - evs: {hp: 248, def: 8, spa: 252}, ivs: {atk: 0}, nature: 'Modest', - }, - dream: { - species: 'Klefki', ability: 'Greed Punisher', item: 'Life Orb', gender: 'N', - moves: ['Light of Ruin', 'Steel Beam', 'Mind Blown'], - signatureMove: 'Lock and Key', - evs: {hp: 4, spa: 252, spe: 252}, ivs: {atk: 0}, nature: 'Modest', - }, - Elgino: { - species: 'Celebi', ability: 'Magic Guard', item: 'Life Orb', gender: 'M', - moves: ['Leaf Storm', 'Nasty Plot', 'Power Gem'], - signatureMove: 'Navi\'s Grace', - evs: {hp: 4, spa: 252, spe: 252}, ivs: {atk: 0}, nature: 'Timid', shiny: true, - }, - Emeri: { - species: 'Flygon', ability: 'Drake Skin', item: 'Throat Spray', gender: 'M', - moves: ['Boomburst', 'Earth Power', 'Agility'], - signatureMove: 'Forced Landing', - evs: {spa: 252, spd: 4, spe: 252}, ivs: {atk: 0}, nature: 'Timid', - }, - estarossa: { - species: 'Hippowdon', ability: 'Sands of Time', item: 'Leftovers', gender: 'M', - moves: ['Earthquake', 'Stone Edge', 'Slack Off'], - signatureMove: 'Sand Balance', - evs: {hp: 252, atk: 252, def: 4}, nature: 'Adamant', - }, - EpicNikolai: { - species: 'Garchomp', ability: 'Dragon Heart', item: 'Garchompite', gender: 'M', - moves: ['Outrage', 'Earthquake', 'Swords Dance'], - signatureMove: 'Epic Rage', - evs: {atk: 252, def: 4, spe: 252}, nature: 'Jolly', - }, - explodingdaisies: { - species: 'Shedinja', ability: 'Wonder Guard', item: 'Heavy-Duty Boots', gender: 'M', - moves: ['Swords Dance', 'X-Scissor', 'Shadow Sneak'], - signatureMove: 'You Have No Hope!', - evs: {atk: 252, spd: 4, spe: 252}, nature: 'Adamant', - }, - fart: { - species: 'Kartana', ability: 'Bipolar', item: 'Metronome', gender: 'M', - moves: ['U-turn'], - signatureMove: 'Soup-Stealing 7-Star Strike: Redux', - evs: {atk: 252, def: 4, spe: 252}, nature: 'Jolly', level: 100, shiny: true, - }, - Felucia: { - species: 'Uxie', ability: 'Regenerator', item: 'Red Card', gender: 'F', - moves: ['Strength Sap', ['Psyshock', 'Night Shade'], ['Thief', 'Toxic']], - signatureMove: 'Rigged Dice', - evs: {hp: 252, def: 4, spd: 252}, nature: 'Calm', - }, - Finland: { - species: 'Alcremie', ability: 'Winding Song', item: 'Leftovers', gender: 'M', - moves: ['Shore Up', 'Moonblast', ['Infestation', 'Whirlwind']], - signatureMove: 'Cradily Chaos', - evs: {hp: 252, def: 64, spa: 64, spd: 64, spe: 64}, ivs: {atk: 0}, nature: 'Serious', - }, - 'Finland-Tsikhe': { - species: 'Alcremie-Lemon-Cream', ability: 'Winding Song', item: 'Leftovers', gender: 'M', - moves: ['Shore Up', 'Spiky Shield', ['Reflect', 'Light Screen']], - signatureMove: 'Cradily Chaos', - evs: {hp: 252, def: 64, spa: 64, spd: 64, spe: 64}, ivs: {atk: 0}, nature: 'Serious', - skip: 'Finland', - }, - 'Finland-Nezavisa': { - species: 'Alcremie-Ruby-Swirl', ability: 'Winding Song', item: 'Leftovers', gender: 'M', - moves: ['Lava Plume', 'Scorching Sands', ['Refresh', 'Destiny Bond']], - signatureMove: 'Cradily Chaos', - evs: {hp: 252, def: 64, spa: 64, spd: 64, spe: 64}, ivs: {atk: 0}, nature: 'Serious', - skip: 'Finland', - }, - 'Finland-Järvilaulu': { - species: 'Alcremie-Mint-Cream', ability: 'Winding Song', item: 'Leftovers', gender: 'M', - moves: ['Sticky Web', 'Parting Shot', ['Light of Ruin', 'Sparkling Aria']], - signatureMove: 'Cradily Chaos', - evs: {hp: 252, def: 64, spa: 64, spd: 64, spe: 64}, ivs: {atk: 0}, nature: 'Serious', - skip: 'Finland', - }, - 'frostyicelad ❆': { - species: 'Lapras-Gmax', ability: 'Ice Shield', item: 'Life Orb', gender: 'M', - moves: ['Quiver Dance', 'Sparkling Aria', 'Recover'], - signatureMove: 'Frosty Wave', - evs: {spa: 252, spd: 4, spe: 252}, ivs: {atk: 0}, nature: 'Timid', - }, - 'gallant\'s pear': { - species: 'Orbeetle', ability: 'Armor Time', item: ['Life Orb', 'Heavy-Duty Boots'], gender: 'M', - moves: ['Bug Buzz', 'Nasty Plot', 'Snipe Shot'], - signatureMove: 'King Giri Giri Slash', - evs: {hp: 252, def: 4, spe: 252}, nature: 'Timid', - }, - Gimmick: { - species: 'Grimmsnarl', ability: 'IC3PEAK', item: 'Throat Spray', gender: 'M', - moves: ['Boomburst', 'Disarming Voice', 'Snarl'], - signatureMove: 'Random Screaming', - evs: {hp: 4, spa: 252, spe: 252}, ivs: {atk: 0}, nature: 'Timid', shiny: true, - }, - GMars: { - species: 'Minior-Meteor', ability: 'Capsule Armor', item: 'White Herb', gender: 'N', - moves: ['Acrobatics', 'Earthquake', 'Diamond Storm'], - signatureMove: 'Gacha', - evs: {hp: 68, atk: 252, spe: 188}, nature: 'Adamant', - }, - grimAuxiliatrix: { - species: 'Duraludon', ability: 'Aluminum Alloy', item: 'Assault Vest', gender: '', - moves: [['Core Enforcer', 'Draco Meteor'], 'Fire Blast', ['Thunderbolt', 'Earth Power']], - signatureMove: 'Skyscraper Suplex', - evs: {spa: 252, spd: 4, spe: 252}, nature: 'Timid', - }, - HoeenHero: { - species: 'Ludicolo', ability: 'Tropical Cyclone', item: 'Life Orb', gender: 'M', - moves: ['Scald', 'Giga Drain', 'Hurricane'], - signatureMove: 'Landfall', - evs: {spa: 252, spd: 4, spe: 252}, ivs: {atk: 0}, nature: 'Modest', - }, - Hubriz: { - species: 'Roserade', ability: 'Stakeout', item: 'Rose Incense', gender: 'F', - moves: [['Toxic Spikes', 'Spikes'], 'Leaf Storm', 'Sludge Bomb'], - signatureMove: 'Steroid Anaphylaxia', - evs: {def: 4, spa: 252, spe: 252}, ivs: {atk: 0}, nature: 'Timid', - }, - Hydro: { - species: 'Pichu', ability: 'Hydrostatic', item: 'Eviolite', gender: 'M', - moves: ['Hydro Pump', 'Thunder', 'Ice Beam'], - signatureMove: 'Hydrostatics', - evs: {def: 4, spa: 252, spe: 252}, nature: 'Modest', - }, - Inactive: { - species: 'Gyarados', ability: 'Dragon\'s Fury', item: 'Gyaradosite', gender: '', - moves: ['Dragon Dance', 'Earthquake', 'Crabhammer'], - signatureMove: 'Paranoia', - evs: {atk: 252, def: 4, spe: 252}, nature: 'Jolly', - }, - instruct: { - species: 'Riolu', ability: 'Truant', item: 'Heavy-Duty Boots', gender: '', - moves: ['Explosion', 'Lunar Dance', 'Memento'], - signatureMove: 'Soda Break', - evs: {hp: 252, atk: 4, spe: 252}, nature: 'Jolly', - }, - Iyarito: { - species: 'Gengar', ability: 'Pollo Diablo', item: 'Choice Specs', gender: 'F', - moves: ['Sludge Wave', 'Volt Switch', 'Fusion Flare'], - signatureMove: 'Patrona Attack', - evs: {def: 4, spa: 252, spe: 252}, nature: 'Timid', shiny: true, - }, - Jett: { - species: 'Sneasel', ability: 'Deceiver', item: 'Heavy Duty Boots', gender: 'F', - moves: ['Knock Off', 'Triple Axel', 'Counter'], - signatureMove: 'The Hunt is On!', - evs: {hp: 4, atk: 252, spe: 252}, nature: 'Jolly', - }, - Jho: { - species: 'Toxtricity', ability: 'Punk Rock', item: 'Throat Spray', gender: 'M', - moves: ['Nasty Plot', 'Overdrive', 'Volt Switch'], - signatureMove: 'Genre Change', - evs: {spa: 252, spd: 4, spe: 252}, ivs: {atk: 0}, nature: 'Timid', - }, - 'Jho-Low-Key': { - species: 'Toxtricity-Low-Key', ability: 'Venomize', item: 'Throat Spray', gender: 'M', - moves: ['Aura Sphere', 'Boomburst', 'Volt Switch'], - signatureMove: 'Genre Change', - evs: {spa: 252, spd: 4, spe: 252}, ivs: {atk: 0}, nature: 'Timid', - skip: 'Jho', - }, - Jordy: { - species: 'Archeops', ability: 'Divine Sandstorm', item: 'Life Orb', gender: 'M', - moves: ['Brave Bird', 'Head Smash', ['U-turn', 'Roost', 'Icicle Crash']], - signatureMove: 'Archeops\'s Rage', - evs: {atk: 252, spd: 4, spe: 252}, nature: 'Jolly', - }, - 'Kaiju Bunny': { - species: 'Lopunny', ability: 'Second Wind', item: 'Lopunnite', gender: 'F', - moves: ['Return', 'Play Rough', ['Drain Punch', 'High Jump Kick']], - signatureMove: 'Cozy Cuddle', - evs: {atk: 252, spd: 4, spe: 252}, nature: 'Jolly', shiny: true, - }, - Kalalokki: { - species: 'Wingull', ability: 'Magic Guard', item: 'Kalalokkium Z', gender: 'M', - moves: ['Tailwind', 'Encore', 'Healing Wish'], - signatureMove: 'Blackbird', - evs: {spa: 252, spd: 4, spe: 252}, ivs: {atk: 0}, nature: 'Timid', - }, - Kennedy: { - species: 'Cinderace', ability: 'False Nine', item: 'Choice Band', gender: 'M', - moves: ['High Jump Kick', 'Triple Axel', 'U-turn'], - signatureMove: 'Top Bins', - evs: {atk: 252, def: 4, spe: 252}, nature: 'Adamant', - }, - Kev: { - species: 'Kingdra', ability: 'King of Atlantis', item: 'Life Orb', gender: 'M', - moves: ['Hydro Pump', 'Core Enforcer', 'Hurricane'], - signatureMove: 'King\'s Trident', - evs: {spa: 252, spd: 4, spe: 252}, ivs: {atk: 0}, nature: 'Modest', - }, - Kingbaruk: { - species: 'Stonjourner', ability: 'Sturdy', item: 'Heavy Duty Boots', gender: 'M', - moves: ['Diamond Storm', ['Superpower', 'Earthquake'], 'King\'s Shield'], - signatureMove: 'Leave it to the team!', - evs: {atk: 252, def: 4, spe: 252}, nature: 'Jolly', - }, - KingSwordYT: { - species: 'Pangoro', ability: 'Bamboo Kingdom', item: 'Rocky Helmet', gender: 'M', - moves: ['Body Press', 'Spiky Shield', 'Shore Up'], - signatureMove: 'Clash of Pangoros', - evs: {hp: 252, atk: 4, def: 252}, nature: 'Impish', shiny: true, - }, - Kipkluif: { - species: 'Gossifleur', ability: 'Degenerator', item: 'Eviolite', gender: 'M', - moves: ['Strength Sap', 'Apple Acid', 'Court Change'], - signatureMove: 'Kip Up', - evs: {hp: 196, def: 116, spa: 36, spd: 116, spe: 36}, ivs: {atk: 0}, nature: 'Modest', shiny: true, - }, - Kris: { - species: 'Unown', ability: 'Protean', item: 'Life Orb', gender: 'N', - moves: ['Light of Ruin', 'Psystrike', ['Secret Sword', 'Mind Blown', 'Seed Flare']], - signatureMove: 'Alphabet Soup', - evs: {spa: 252, spd: 4, spe: 252}, ivs: {atk: 0}, nature: 'Timid', - }, - Lamp: { - species: 'Lampent', ability: 'Soul-Heart', item: 'Eviolite', gender: 'M', - moves: ['Nasty Plot', 'Searing Shot', 'Recover'], - signatureMove: 'Soul Swap', - evs: {def: 4, spa: 252, spe: 252}, ivs: {atk: 0}, nature: 'Timid', - }, - Lionyx: { - species: 'Gardevoir', ability: 'Tension', item: 'Blunder Policy', gender: 'F', - moves: [ - ['Psychic', 'Psystrike'], 'Quiver Dance', [ - 'Blizzard', 'Focus Blast', 'Hurricane', 'Hydro Pump', 'Inferno', 'Zap Cannon', - ], - ], - signatureMove: 'Big Bang', - evs: {spa: 252, spd: 4, spe: 252}, ivs: {atk: 0}, nature: 'Timid', shiny: true, - }, - 'Litt♥Eleven': { - species: 'Bisharp', ability: 'Dark Royalty', item: 'Black Glasses', gender: 'M', - moves: ['Sucker Punch', 'Knock Off', 'Iron Head'], - signatureMove: '/nexthunt', - evs: {hp: 4, atk: 252, spe: 252}, nature: 'Adamant', shiny: true, - }, - Lunala: { - species: 'Hattrem', ability: 'Magic Hat', item: 'Eviolite', gender: 'F', - moves: ['Nuzzle', 'Flamethrower', 'Healing Wish'], - signatureMove: 'Hat of Wisdom', - evs: {hp: 252, def: 4, spd: 252}, ivs: {atk: 0}, nature: 'Sassy', - }, - 'Mad Monty ¾°': { - species: 'Zekrom', ability: 'Petrichor', item: 'Damp Rock', gender: 'N', - moves: ['Bolt Strike', 'Dragon Claw', 'Liquidation'], - signatureMove: 'Ca-LLAMA-ty', - evs: {atk: 252, def: 4, spe: 252}, nature: 'Jolly', shiny: true, - }, - MajorBowman: { - species: 'Weezing-Galar', ability: 'Neutralizing Gas', item: 'Black Sludge', gender: 'M', - moves: ['Strange Steam', ['Toxic Spikes', 'Haze'], 'Recover'], - signatureMove: 'Corrosive Cloud', - evs: {hp: 252, def: 252, spd: 4}, nature: 'Bold', - }, - Marshmallon: { - species: 'Munchlax', ability: 'Stubbornness', item: 'Eviolite', gender: 'M', - moves: ['Head Charge', 'Flare Blitz', 'Wood Hammer', 'Head Smash'], - signatureMove: 'RAWWWR', - evs: {hp: 248, def: 252, spd: 8}, ivs: {spe: 0}, nature: 'Relaxed', - }, - Meicoo: { - species: 'Venusaur', ability: 'Regenerator', item: 'Venusaurite', gender: 'M', - moves: ['Sludge Bomb', ['Giga Drain', 'Knock Off', 'Flamethrower'], ['Recover', 'Strength Sap']], - signatureMove: 'spamguess', - evs: {hp: 252, def: 252, spd: 4}, nature: 'Bold', - }, - Mitsuki: { - species: 'Leafeon', ability: 'Photosynthesis', item: ['Life Orb', 'Miracle Seed'], gender: 'M', - moves: ['Leaf Blade', 'Attack Order', 'Thousand Arrows'], - signatureMove: 'Terraforming', - evs: {atk: 252, def: 4, spe: 252}, nature: 'Jolly', - }, - n10siT: { - species: 'Hoopa', ability: 'Greedy Magician', item: 'Focus Sash', gender: 'N', - moves: ['Hyperspace Hole', 'Shadow Ball', 'Aura Sphere'], - signatureMove: 'Unbind', - evs: {spa: 252, spd: 4, spe: 252}, ivs: {atk: 0}, nature: 'Timid', - }, - Naziel: { - species: 'Kirlia', ability: 'Prankster', item: 'Eviolite', gender: '', - moves: ['Glare', 'Defog', 'Swagger'], - signatureMove: 'Not-so-worthy Pirouette', - evs: {hp: 252, def: 200, spd: 56}, ivs: {atk: 0}, nature: 'Calm', shiny: true, - }, - Theia: { - species: 'Litwick', ability: 'Burning Soul', item: 'Spooky Plate', gender: 'F', - moves: ['Shadow Ball', 'Flamethrower', 'Giga Drain'], - signatureMove: 'Mad Hacks', - evs: {hp: 252, spa: 252, spd: 4}, ivs: {atk: 0, spe: 0}, nature: 'Quiet', shiny: true, - }, - Notater517: { - species: 'Jellicent', ability: 'Last-Minute Lag', item: 'Leftovers', gender: 'M', - moves: ['Hydro Cannon', 'Blast Burn', ['Toxic Spikes', 'Recover']], - signatureMove: 'Techno Tuber Transmission', - evs: {hp: 236, spa: 252, spe: 20}, ivs: {atk: 0}, nature: 'Modest', - }, - nui: { - species: 'Jigglypuff', ability: 'Condition Override', item: 'King\'s Rock', gender: 'M', - moves: ['Stealth Rock', 'Attract', 'Heal Order'], - signatureMove: 'Win Condition', - evs: {hp: 248, def: 92, spd: 168}, nature: 'Bold', shiny: true, - }, - 'OM~!': { - species: 'Glastrier', ability: 'Filter', item: 'Heavy Duty Boots', gender: 'M', - moves: ['Recover', 'Stealth Rock', 'Earthquake'], - signatureMove: 'OM Zoom', - evs: {hp: 252, def: 252, spd: 4}, ivs: {spe: 0}, nature: 'Relaxed', - }, - Overneat: { - species: 'Absol', ability: 'Intimidate', item: 'Absolite', gender: 'M', - moves: ['Play Rough', 'U-turn', 'Close Combat'], - signatureMove: 'Healing you?', - evs: {atk: 252, def: 4, spe: 252}, nature: 'Jolly', - }, - pants: { - species: 'Phantump', ability: 'Ghost Spores', item: 'Eviolite', gender: 'M', - moves: ['Taunt', 'Spirit Shackle', ['Horn Leech', 'U-turn', 'Flip Turn']], - signatureMove: 'Wistful Thinking', - evs: {hp: 252, def: 4, spd: 252}, nature: 'Impish', shiny: true, - }, - 'Paradise ╱╲☼': { - species: 'Slaking', ability: 'Unaware', item: 'Choice Scarf', gender: '', - moves: ['Sacred Fire', 'Spectral Thief', 'Icicle Crash'], - signatureMove: 'Rapid Turn', - evs: {atk: 252, def: 4, spe: 252}, nature: 'Jolly', - }, - PartMan: { - species: 'Chandelure', ability: 'Hecatomb', item: 'Focus Sash', gender: 'M', - moves: ['Nasty Plot', 'Draining Kiss', 'Dark Pulse'], - signatureMove: 'Baleful Blaze', - evs: {hp: 4, spa: 252, spe: 252}, ivs: {atk: 0}, nature: 'Timid', - }, - 'PartMan-Shiny': { - species: 'Chandelure', ability: 'Hecatomb', item: 'Focus Sash', gender: 'M', - moves: ['Nasty Plot', 'Light of Ruin', 'Fiery Wrath'], - signatureMove: 'Baleful Blaze', - evs: {hp: 4, spa: 252, spe: 252}, ivs: {atk: 0}, nature: 'Timid', shiny: true, - skip: 'PartMan', - }, - 'peapod c': { - species: 'Dragapult', ability: 'Stealth Black', item: 'Leftovers', gender: 'M', - moves: ['Hex', 'Dragon Darts', 'Work Up'], - signatureMove: 'Submartingale', - evs: {atk: 4, spa: 252, spe: 252}, nature: 'Mild', - }, - 'Perish Song': { - species: 'Rhydon', ability: 'Soup Sipper', item: 'Rocky Helmet', gender: 'M', - moves: ['Swords Dance', 'Stealth Rock', 'Rock Blast'], - signatureMove: 'Trickery', - evs: {hp: 252, atk: 4, def: 252}, nature: 'Impish', - }, - phiwings99: { - species: 'Froslass', ability: 'Plausible Deniability', item: 'Heavy Duty Boots', gender: 'M', - moves: ['Moongeist Beam', 'Spikes', 'Haze'], - signatureMove: 'Ghost of 1v1 Past', - evs: {hp: 252, spa: 4, spe: 252}, ivs: {atk: 0}, nature: 'Timid', - }, - 'piloswine gripado': { - species: 'Piloswine', ability: 'Forever Winter Nights', item: 'Eviolite', gender: 'M', - moves: ['Earthquake', 'Bulk Up', 'refresh'], - signatureMove: 'Icicle Spirits', - evs: {hp: 252, atk: 252, def: 4}, nature: 'Adamant', - }, - 'PiraTe Princess': { - species: 'Polteageist', ability: 'Wild Magic Surge', item: 'Expert Belt', gender: 'F', - moves: [ - 'Moongeist Beam', 'Spacial Rend', [ - 'Tri Attack', 'Fiery Dance', 'Scald', 'Discharge', 'Apple Acid', 'Ice Beam', - 'Aura Sphere', 'Sludge Bomb', 'Earth Power', 'Oblivion Wing', 'Psyshock', 'Bug Buzz', - 'Power Gem', 'Dark Pulse', 'Flash Cannon', 'Dazzling Gleam', - ], - ], - signatureMove: 'Dungeons & Dragons', - evs: {def: 4, spa: 252, spe: 252}, ivs: {atk: 0}, nature: 'Timid', - }, - Psynergy: { - species: 'Rayquaza', ability: 'Supernova', item: 'Wise Glasses', gender: 'M', - moves: ['Bouncy Bubble', 'Discharge', 'Lava Plume'], - signatureMove: 'Clear Breath', - evs: {spa: 252, spd: 4, spe: 252}, nature: 'Serious', shiny: true, - }, - ptoad: { - species: 'Palpitoad', ability: 'Swampy Surge', item: 'Eviolite', gender: 'M', - moves: ['Recover', 'Refresh', ['Sludge Bomb', 'Sludge Wave']], - signatureMove: 'Croak', - evs: {hp: 248, def: 8, spd: 252}, ivs: {atk: 0}, nature: 'Calm', - }, - Rabia: { - species: 'Mew', ability: 'Psychic Surge', item: 'Life Orb', gender: 'M', - moves: ['Nasty Plot', ['Flamethrower', 'Fire Blast'], 'Roost'], - signatureMove: 'Psycho Drive', - evs: {spa: 252, spd: 4, spe: 252}, nature: 'Timid', shiny: true, - }, - Rach: { - species: 'Spinda', ability: 'BURN IT DOWN!', item: 'Leftovers', gender: 'F', - moves: ['Extreme Speed', 'Recover', 'Knock Off'], - signatureMove: 'Spinda Wheel', - evs: {hp: 252, atk: 4, def: 252}, nature: 'Impish', - }, - Rage: { - species: 'Espeon', ability: 'Inversion Surge', item: 'Leftovers', gender: 'M', - moves: ['Psychic', 'Calm Mind', 'Hyper Voice'], - signatureMove: ':shockedlapras:', - evs: {spa: 252, spd: 4, spe: 252}, ivs: {atk: 0}, nature: 'Timid', - }, - 'Raihan Kibana': { - species: 'Stoutland', ability: 'Royal Coat', item: 'Leftovers', gender: 'M', - moves: ['Knock Off', 'Thousand Waves', ['Play Rough', 'Power Whip']], - signatureMove: 'Stony Kibbles', - evs: {atk: 128, spd: 252, spe: 128}, nature: 'Jolly', - }, - 'Raj.Shoot': { - species: 'Charizard', ability: 'Tough Claws', item: 'Heavy-Duty Boots', gender: 'N', - moves: ['Flare Blitz', 'Dragon Claw', 'Roost'], - signatureMove: 'Fan Service', - evs: {atk: 252, def: 4, spe: 252}, nature: 'Jolly', - }, - Ransei: { - species: 'Audino', ability: 'Neutralizing Gas', item: 'Choice Scarf', gender: 'M', - moves: ['Trick', 'Recover', 'Spectral Thief'], - signatureMove: 'ripsei', - evs: {hp: 252, atk: 4, spe: 252}, nature: 'Jolly', - }, - RavioliQueen: { - species: 'Mismagius', ability: 'Phantom Plane', item: 'Spell Tag', gender: '', - moves: ['Shadow Ball', 'Dark Pulse', 'Psychic'], - signatureMove: 'Witching Hour', - evs: {def: 4, spa: 252, spe: 252}, ivs: {atk: 0}, nature: 'Modest', - }, - Robb576: { - species: 'Necrozma-Dawn-Wings', ability: 'The Numbers Game', item: 'Metronome', gender: 'M', - moves: ['Moongeist Beam', 'Psystrike', 'Thunder Wave'], - signatureMove: 'Mode [5: Offensive]', - evs: {spa: 252, spd: 4, spe: 252}, ivs: {atk: 0}, nature: 'Modest', - }, - 'Robb576-Dusk-Mane': { - species: 'Necrozma-Dusk-Mane', ability: 'The Numbers Game', item: 'Leftovers', gender: 'M', - moves: ['Sunsteel Strike', 'Toxic', 'Rapid Spin'], - signatureMove: 'Mode [7: Defensive]', - evs: {hp: 252, atk: 4, spd: 252}, nature: 'Careful', - skip: 'Robb576', // This set is transformed into by The Numbers Game ability - }, - 'Robb576-Ultra': { - species: 'Necrozma-Ultra', ability: 'The Numbers Game', item: 'Modium-6 Z', gender: 'M', - moves: ['Earthquake', 'Dynamax Cannon', 'Fusion Flare'], - signatureMove: 'Photon Geyser', - evs: {atk: 204, spa: 200, spe: 104}, nature: 'Hasty', - skip: 'Robb576', // This set is transformed into by The Numbers Game ability - }, - Sectonia: { - species: 'Reuniclus', ability: 'Royal Aura', item: 'Leftovers', gender: 'M', - moves: ['Eerie Spell', 'Moonblast', 'Recover'], - signatureMove: 'Homunculus\'s Vanity', - evs: {hp: 252, def: 252, spd: 4}, ivs: {atk: 0, spe: 0}, nature: 'Relaxed', shiny: true, - }, - Segmr: { - species: 'Runerigus', ability: 'Skill Drain', item: 'Leftovers', gender: 'M', - moves: ['Recover', 'Will-O-Wisp', 'Protect'], - signatureMove: 'Tsukuyomi', - evs: {hp: 252, def: 4, spd: 252}, nature: 'Calm', shiny: true, - }, - sejesensei: { - species: 'Garbodor', ability: 'Trash Consumer', item: 'Red Card', gender: 'M', - moves: ['Toxic Spikes', 'Spikes', 'Thousand Waves'], - signatureMove: 'Bad Opinion', - evs: {hp: 252, atk: 56, def: 200}, nature: 'Impish', shiny: 2, - }, - Seso: { - species: 'Nidoking', ability: 'Intrepid Sword', item: 'Weakness Policy', gender: 'M', - moves: ['Sacred Sword', 'Leaf Blade', 'Behemoth Blade'], - signatureMove: 'Legendary Swordsman', - evs: {atk: 252, def: 4, spe: 252}, nature: 'Adamant', shiny: true, - }, - Shadecession: { - species: 'Honchkrow', ability: 'Shady Deal', item: 'Heavy Duty Boots', gender: 'M', - moves: ['Knock Off', 'Roost', 'Brave Bird'], - signatureMove: 'Shade Uppercut', - evs: {atk: 252, spd: 4, spe: 252}, nature: 'Jolly', shiny: true, - }, - 'Soft Flex': { - species: 'Zapdos', ability: 'Eye of the Storm', item: ['Leftovers', 'Damp Rock'], gender: '', - moves: ['Thunder', 'Roost', ['Defog', 'Toxic']], - signatureMove: 'Updraft', - evs: {hp: 252, def: 252, spe: 8}, ivs: {atk: 0}, nature: 'Bold', shiny: 1024, - }, - Spandan: { - species: 'Mareanie', ability: 'Hacked Corrosion', item: 'Eviolite', gender: 'M', - moves: ['Toxic', 'Recover', 'Spiky Shield'], - signatureMove: 'I\'m Toxic You\'re Slippin\' Under', - evs: {hp: 252, def: 4, spd: 252}, nature: 'Calm', - }, - Struchni: { - species: 'Aggron', ability: 'Overasked Clause', item: 'Choice Band', gender: 'M', - moves: ['Pursuit', 'U-turn', 'Fishious Rend'], - signatureMove: 'Veto', - evs: {hp: 251, atk: 5, def: 11, spd: 241}, nature: 'Careful', - }, - Teclis: { - species: 'Typhlosion', ability: 'Fiery Fur', item: 'Heavy Duty Boots', gender: 'M', - moves: ['Earth Power', 'Seed Flare', 'Spiky Shield'], - signatureMove: 'Kaboom', - evs: {def: 4, spa: 252, spe: 252}, ivs: {atk: 0}, nature: 'Modest', - }, - temp: { - species: 'Latias', ability: 'Charged Up', item: 'Dragon Fang', gender: 'F', - moves: ['Psychic', 'Surf', 'Roost'], - signatureMove: 'DROP A DRACO', - evs: {def: 4, spa: 252, spe: 252}, ivs: {atk: 0}, nature: 'Timid', shiny: true, - }, - 'The Immortal': { - species: 'Xurkitree', ability: 'Teravolt', item: 'Electrium Z', gender: '', - moves: ['Tail Glow', 'Freeze Dry', 'Secret Sword'], - signatureMove: 'Watt Up', - evs: {spa: 252, spd: 4, spe: 252}, ivs: {atk: 0}, nature: 'Timid', - }, - thewaffleman: { - species: 'Mr. Rime', ability: 'Prankster', item: 'Kasib Berry', gender: 'M', - moves: ['Cotton Guard', 'Slack Off', 'Focus Blast'], - signatureMove: 'Ice Press', - evs: {hp: 252, def: 4, spd: 252}, ivs: {atk: 0}, nature: 'Calm', - }, - tiki: { - species: 'Snom', ability: 'True Grit', item: 'Eviolite', gender: 'M', - moves: ['Toxic', 'Strength Sap', 'U-turn'], - signatureMove: 'Right. On. Cue!', - evs: {hp: 128, def: 144, spd: 236}, ivs: {atk: 0}, nature: 'Bold', - }, - trace: { - species: 'Jirachi', ability: 'Trace', item: 'Leftovers', gender: '', - moves: ['Wish', 'Protect', 'Psychic'], - signatureMove: 'Hero Creation', - evs: {hp: 248, def: 8, spd: 252}, ivs: {atk: 0}, nature: 'Calm', - }, - Trickster: { - species: 'Shiinotic', ability: 'Trillionage Roots', item: 'Leftovers', gender: '', - moves: ['Strength Sap', 'Cosmic Power', 'Knock Off'], - signatureMove: 'Soul-Shattering Stare', - evs: {hp: 252, def: 252, spd: 4}, nature: 'Bold', shiny: true, - }, - Vexen: { - species: 'Tauros', ability: 'Aquila\'s Blessing', item: 'Life Orb', gender: 'M', - moves: ['Earthquake', 'Zen Headbutt', 'Rock Slide'], - signatureMove: 'Asterius Strike', - evs: {atk: 252, def: 4, spe: 252}, nature: 'Jolly', - }, - vivalospride: { - species: 'Darmanitan-Zen', ability: 'Regenerator', item: 'Heavy Duty Boots', gender: 'M', - moves: ['Teleport', 'Future Sight', 'Toxic'], - signatureMove: 'DRIP BAYLESS', - evs: {hp: 252, spa: 252, def: 4}, ivs: {atk: 0}, nature: 'Modest', - }, - Volco: { - species: 'Volcanion', ability: 'Speedrunning', item: 'Choice Scarf', - moves: ['Steam Eruption', ['Vacuum Wave', 'Secret Sword'], 'Overdrive'], - signatureMove: 'Glitch Exploiting', - evs: {hp: 4, spa: 252, spe: 252}, ivs: {atk: 0}, nature: 'Timid', gender: 'N', - }, - vooper: { - species: 'Pancham', ability: 'Qi-Gong', item: 'Eviolite', gender: 'M', - moves: ['Drain Punch', 'Knock Off', 'Swords Dance'], - signatureMove: 'Panda Express', - evs: {hp: 252, atk: 252, spd: 4}, ivs: {atk: 0}, nature: 'Adamant', - }, - yuki: { - species: 'Pikachu-Cosplay', ability: 'Combat Training', item: 'Light Ball', gender: 'F', - moves: ['Quick Attack', 'Agility'], - signatureMove: 'Class Change', - evs: {hp: 4, spa: 252, spe: 252}, ivs: {atk: 0}, nature: ['Modest', 'Timid'], - }, - 'yuki-Cleric': { - species: 'Pikachu-PhD', ability: 'Triage', item: 'Light Ball', gender: 'F', - moves: ['Parabolic Charge', 'Wish', 'Baton Pass'], - signatureMove: 'Class Change', - evs: {hp: 4, spa: 252, spe: 252}, ivs: {atk: 0}, - skip: 'yuki', - }, - 'yuki-Dancer': { - species: 'Pikachu-Pop-Star', ability: 'Dancer', item: 'Light Ball', gender: 'F', - moves: ['Fiery Dance', 'Revelation Dance', 'Quiver Dance'], - signatureMove: 'Class Change', - evs: {hp: 4, spa: 252, spe: 252}, ivs: {atk: 0}, - skip: 'yuki', - }, - 'yuki-Ninja': { - species: 'Pikachu-Libre', ability: 'White Smoke', item: 'Light Ball', gender: 'F', - moves: ['Water Shuriken', 'Frost Breath', 'Toxic'], - signatureMove: 'Class Change', - evs: {hp: 4, spa: 252, spe: 252}, ivs: {atk: 0}, - skip: 'yuki', - }, - 'yuki-Songstress': { - species: 'Pikachu-Rock-Star', ability: 'Punk Rock', item: 'Light Ball', gender: 'F', - moves: ['Hyper Voice', 'Overdrive', 'Sing'], - signatureMove: 'Class Change', - evs: {hp: 4, spa: 252, spe: 252}, ivs: {atk: 0}, - skip: 'yuki', - }, - 'yuki-Jester': { - species: 'Pikachu-Belle', ability: 'Weak Armor', item: 'Light Ball', gender: 'F', - moves: ['Fire Blast', 'Thunder', 'Blizzard'], - signatureMove: 'Class Change', - evs: {hp: 4, spa: 252, spe: 252}, ivs: {atk: 0}, - skip: 'yuki', - }, - Zalm: { - species: 'Weedle', ability: 'Berserk', item: 'Sitrus Berry', gender: 'M', - moves: ['Quiver Dance', 'Belch', ['Snipe Shot', 'Power Gem']], - signatureMove: 'Ingredient Foraging', - evs: {hp: 252, spa: 252, spd: 4}, ivs: {atk: 0}, nature: 'Modest', - }, - Zarel: { - species: 'Meloetta', ability: 'Dancer', item: 'Leftovers', gender: 'N', - moves: ['Quiver Dance', 'Feather Dance', 'Lunar Dance'], - signatureMove: 'Relic Dance', - evs: {spa: 252, spd: 4, spe: 252}, ivs: {atk: 0}, nature: 'Modest', - }, - 'Zarel-Pirouette': { - species: 'Meloetta-Pirouette', ability: 'Serene Grace', item: 'Leftovers', gender: 'N', - moves: ['Revelation Dance', 'Fiery Dance', 'Petal Dance'], - signatureMove: 'Relic Dance', - evs: {spa: 252, spd: 4, spe: 252}, ivs: {atk: 0}, nature: 'Modest', - skip: 'Zarel', - }, - Zodiax: { - species: 'Oricorio-Pom-Pom', ability: 'Primordial Sea', item: 'Heavy-Duty Boots', gender: 'M', - moves: ['Quiver Dance', 'Hurricane', 'Thunder'], - signatureMove: 'Big Storm Coming', - evs: {hp: 4, spa: 252, spe: 252}, nature: 'Timid', - }, - Zyg: { - species: 'Azelf', ability: 'Magic Bounce', item: ['Life Orb', 'Expert Belt'], gender: 'M', - moves: ['Photon Geyser', 'Knock Off', ['U-turn', 'Play Rough', 'Close Combat']], - signatureMove: 'Luck of the Draw', - evs: {atk: 252, def: 4, spe: 252}, nature: 'Jolly', - }, -}; - -const afdSSBSets: SSBSets = { - 'Fox': { - species: 'Delphox', ability: 'No Ability', item: '', gender: '', - moves: [], - signatureMove: 'Super Metronome', - }, -}; - -export class RandomStaffBrosTeams extends RandomGen8Teams { - randomStaffBrosTeam(options: {inBattle?: boolean} = {}) { - this.enforceNoDirectCustomBanlistChanges(); - - const team: PokemonSet[] = []; - const debug: string[] = []; // Set this to a list of SSB sets to override the normal pool for debugging. - const ruleTable = this.dex.formats.getRuleTable(this.format); - const wiiulegacy = !ruleTable.has('dynamaxclause'); - const monotype = ruleTable.has('sametypeclause') ? this.sample([...this.dex.types.names()]) : false; - - let pool = debug.length ? debug : wiiulegacy ? Object.keys(afdSSBSets) : Object.keys(ssbSets); - if (monotype && !debug.length) { - pool = pool.filter(x => this.dex.species.get(ssbSets[x].species).types.includes(monotype)); - } - const typePool: {[k: string]: number} = {}; - let depth = 0; - while (pool.length && team.length < this.maxTeamSize) { - if (depth >= 200) throw new Error(`Infinite loop in Super Staff Bros team generation.`); - depth++; - const name = wiiulegacy ? this.sample(pool) : this.sampleNoReplace(pool); - const ssbSet: SSBSet = wiiulegacy ? this.dex.deepClone(afdSSBSets[name]) : this.dex.deepClone(ssbSets[name]); - if (ssbSet.skip) continue; - - // Enforce typing limits - if (!(debug.length || monotype || wiiulegacy)) { // Type limits are ignored for debugging, monotype, or memes. - const species = this.dex.species.get(ssbSet.species); - if (this.forceMonotype && !species.types.includes(this.forceMonotype)) continue; - - const weaknesses = []; - for (const type of this.dex.types.names()) { - const typeMod = this.dex.getEffectiveness(type, species.types); - if (typeMod > 0) weaknesses.push(type); - } - let rejected = false; - for (const type of weaknesses) { - if (typePool[type] === undefined) typePool[type] = 0; - if (typePool[type] >= 3) { - // Reject - rejected = true; - break; - } - } - if (ssbSet.ability === 'Wonder Guard') { - if (!typePool['wonderguard']) { - typePool['wonderguard'] = 1; - } else { - rejected = true; - } - } - if (rejected) continue; - // Update type counts - for (const type of weaknesses) { - typePool[type]++; - } - } - - const set: PokemonSet = { - name: name, - species: ssbSet.species, - item: Array.isArray(ssbSet.item) ? this.sampleNoReplace(ssbSet.item) : ssbSet.item, - ability: Array.isArray(ssbSet.ability) ? this.sampleNoReplace(ssbSet.ability) : ssbSet.ability, - moves: [], - nature: ssbSet.nature ? Array.isArray(ssbSet.nature) ? this.sampleNoReplace(ssbSet.nature) : ssbSet.nature : 'Serious', - gender: ssbSet.gender || this.sample(['M', 'F', 'N']), - evs: ssbSet.evs ? {...{hp: 0, atk: 0, def: 0, spa: 0, spd: 0, spe: 0}, ...ssbSet.evs} : - {hp: 84, atk: 84, def: 84, spa: 84, spd: 84, spe: 84}, - ivs: {...{hp: 31, atk: 31, def: 31, spa: 31, spd: 31, spe: 31}, ...ssbSet.ivs}, - level: this.adjustLevel || ssbSet.level || 100, - happiness: typeof ssbSet.happiness === 'number' ? ssbSet.happiness : 255, - shiny: typeof ssbSet.shiny === 'number' ? this.randomChance(1, ssbSet.shiny) : !!ssbSet.shiny, - }; - while (set.moves.length < 3 && ssbSet.moves.length > 0) { - let move = this.sampleNoReplace(ssbSet.moves); - if (Array.isArray(move)) move = this.sampleNoReplace(move); - set.moves.push(move); - } - set.moves.push(ssbSet.signatureMove); - - // Any set specific tweaks occur here. - if (set.name === 'Marshmallon' && !set.moves.includes('Head Charge')) set.moves[this.random(3)] = 'Head Charge'; - - if (wiiulegacy) { - const egg = this.random(100); - if (egg === 69) { - set.name = 'Falco'; - set.species = 'Swellow'; - } else if (egg === 96) { - set.name = 'Captain Falcon'; - set.species = 'Talonflame'; - } - if (this.randomChance(1, 100)) { - set.item = 'Mail'; - } - } - - team.push(set); - - // Team specific tweaks occur here - // Swap last and second to last sets if last set has Illusion - if (team.length === this.maxTeamSize && set.ability === 'Illusion') { - team[this.maxTeamSize - 1] = team[this.maxTeamSize - 2]; - team[this.maxTeamSize - 2] = set; - } - } - return team; - } -} - -export default RandomStaffBrosTeams; diff --git a/data/mods/ssb/scripts.ts b/data/mods/ssb/scripts.ts deleted file mode 100644 index 0c4868677607..000000000000 --- a/data/mods/ssb/scripts.ts +++ /dev/null @@ -1,1037 +0,0 @@ -export const Scripts: ModdedBattleScriptsData = { - gen: 8, - inherit: 'gen8', - actions: { - // 1 mega per pokemon - runMegaEvo(pokemon) { - if (pokemon.name === 'Struchni' && pokemon.species.name === 'Aggron') pokemon.canMegaEvo = 'Aggron-Mega'; - if (pokemon.name === 'Raj.Shoot' && pokemon.species.name === 'Charizard') pokemon.canMegaEvo = 'Charizard-Mega-X'; - const speciesid = pokemon.canMegaEvo || pokemon.canUltraBurst; - if (!speciesid) return false; - - pokemon.formeChange(speciesid, pokemon.getItem(), true); - if (pokemon.canMegaEvo) { - pokemon.canMegaEvo = null; - } else { - pokemon.canUltraBurst = null; - } - - this.battle.runEvent('AfterMega', pokemon); - - if (['Kaiju Bunny', 'Overneat', 'EpicNikolai'].includes(pokemon.name) && !pokemon.illusion) { - this.battle.add('-start', pokemon, 'typechange', pokemon.types.join('/')); - } - - this.battle.add('-ability', pokemon, `${pokemon.getAbility().name}`); - - return true; - }, - - // Modded for Mega Rayquaza - canMegaEvo(pokemon) { - const species = pokemon.baseSpecies; - const altForme = species.otherFormes && this.dex.species.get(species.otherFormes[0]); - const item = pokemon.getItem(); - // Mega Rayquaza - if (altForme?.isMega && altForme?.requiredMove && - pokemon.baseMoves.includes(this.battle.toID(altForme.requiredMove)) && !item.zMove) { - return altForme.name; - } - // a hacked-in Megazard X can mega evolve into Megazard Y, but not into Megazard X - if (item.megaEvolves === species.baseSpecies && item.megaStone !== species.name) { - return item.megaStone; - } - return null; - }, - - // 1 Z per pokemon - canZMove(pokemon) { - if (pokemon.m.zMoveUsed || - (pokemon.transformed && - (pokemon.species.isMega || pokemon.species.isPrimal || pokemon.species.forme === "Ultra")) - ) return; - const item = pokemon.getItem(); - if (!item.zMove) return; - if (item.itemUser && !item.itemUser.includes(pokemon.species.name)) return; - let atLeastOne = false; - let mustStruggle = true; - const zMoves: ZMoveOptions = []; - for (const moveSlot of pokemon.moveSlots) { - if (moveSlot.pp <= 0) { - zMoves.push(null); - continue; - } - if (!moveSlot.disabled) { - mustStruggle = false; - } - const move = this.dex.moves.get(moveSlot.move); - let zMoveName = this.getZMove(move, pokemon, true) || ''; - if (zMoveName) { - const zMove = this.dex.moves.get(zMoveName); - if (!zMove.isZ && zMove.category === 'Status') zMoveName = "Z-" + zMoveName; - zMoves.push({move: zMoveName, target: zMove.target}); - } else { - zMoves.push(null); - } - if (zMoveName) atLeastOne = true; - } - if (atLeastOne && !mustStruggle) return zMoves; - }, - - getZMove(move, pokemon, skipChecks) { - const item = pokemon.getItem(); - if (!skipChecks) { - if (pokemon.m.zMoveUsed) return; - if (!item.zMove) return; - if (item.itemUser && !item.itemUser.includes(pokemon.species.name)) return; - const moveData = pokemon.getMoveData(move); - // Draining the PP of the base move prevents the corresponding Z-move from being used. - if (!moveData?.pp) return; - } - - if (move.name === item.zMoveFrom) { - return item.zMove as string; - } else if (item.zMove === true && move.type === item.zMoveType) { - if (move.category === "Status") { - return move.name; - } else if (move.zMove?.basePower) { - return this.Z_MOVES[move.type]; - } - } - }, - - runMove(moveOrMoveName, pokemon, targetLoc, sourceEffect, zMove, externalMove, maxMove, originalTarget) { - pokemon.activeMoveActions++; - let target = this.battle.getTarget(pokemon, maxMove || zMove || moveOrMoveName, targetLoc, originalTarget); - let baseMove = this.dex.getActiveMove(moveOrMoveName); - const pranksterBoosted = baseMove.pranksterBoosted; - if (baseMove.id !== 'struggle' && !zMove && !maxMove && !externalMove) { - const changedMove = this.battle.runEvent('OverrideAction', pokemon, target, baseMove); - if (changedMove && changedMove !== true) { - baseMove = this.dex.getActiveMove(changedMove); - if (pranksterBoosted) baseMove.pranksterBoosted = pranksterBoosted; - target = this.battle.getRandomTarget(pokemon, baseMove); - } - } - let move = baseMove; - if (zMove) { - move = this.getActiveZMove(baseMove, pokemon); - } else if (maxMove) { - move = this.getActiveMaxMove(baseMove, pokemon); - } - - move.isExternal = externalMove; - - this.battle.setActiveMove(move, pokemon, target); - - /* if (pokemon.moveThisTurn) { - // THIS IS PURELY A SANITY CHECK - // DO NOT TAKE ADVANTAGE OF THIS TO PREVENT A POKEMON FROM MOVING; - // USE this.battle.queue.cancelMove INSTEAD - this.battle.debug('' + pokemon.id + ' INCONSISTENT STATE, ALREADY MOVED: ' + pokemon.moveThisTurn); - this.battle.clearActiveMove(true); - return; - } */ - const willTryMove = this.battle.runEvent('BeforeMove', pokemon, target, move); - if (!willTryMove) { - this.battle.runEvent('MoveAborted', pokemon, target, move); - this.battle.clearActiveMove(true); - // The event 'BeforeMove' could have returned false or null - // false indicates that this counts as a move failing for the purpose of calculating Stomping Tantrum's base power - // null indicates the opposite, as the Pokemon didn't have an option to choose anything - pokemon.moveThisTurnResult = willTryMove; - return; - } - if (move.beforeMoveCallback) { - if (move.beforeMoveCallback.call(this.battle, pokemon, target, move)) { - this.battle.clearActiveMove(true); - pokemon.moveThisTurnResult = false; - return; - } - } - pokemon.lastDamage = 0; - let lockedMove; - if (!externalMove) { - lockedMove = this.battle.runEvent('LockMove', pokemon); - if (lockedMove === true) lockedMove = false; - if (!lockedMove) { - if (!pokemon.deductPP(baseMove, null, target) && (move.id !== 'struggle')) { - this.battle.add('cant', pokemon, 'nopp', move); - const gameConsole = [ - null, 'Game Boy', 'Game Boy Color', 'Game Boy Advance', 'DS', 'DS', '3DS', '3DS', - ][this.battle.gen] || 'Switch'; - this.battle.hint(`This is not a bug, this is really how it works on the ${gameConsole}; try it yourself if you don't believe us.`); - this.battle.clearActiveMove(true); - pokemon.moveThisTurnResult = false; - return; - } - } else { - sourceEffect = this.dex.conditions.get('lockedmove'); - } - pokemon.moveUsed(move, targetLoc); - } - - // Dancer Petal Dance hack - // TODO: implement properly - const noLock = externalMove && !pokemon.volatiles['lockedmove']; - - if (zMove) { - if (pokemon.illusion) { - this.battle.singleEvent('End', this.dex.abilities.get('Illusion'), pokemon.abilityState, pokemon); - } - this.battle.add('-zpower', pokemon); - // In SSB Z-Moves are limited to 1 per pokemon. - pokemon.m.zMoveUsed = true; - } - const moveDidSomething = this.battle.actions.useMove(baseMove, pokemon, target, sourceEffect, zMove, maxMove); - if (this.battle.activeMove) move = this.battle.activeMove; - this.battle.singleEvent('AfterMove', move, null, pokemon, target, move); - this.battle.runEvent('AfterMove', pokemon, target, move); - - // Dancer's activation order is completely different from any other event, so it's handled separately - if (move.flags['dance'] && moveDidSomething && !move.isExternal) { - const dancers = []; - for (const currentPoke of this.battle.getAllActive()) { - if (pokemon === currentPoke) continue; - if (currentPoke.hasAbility('dancer') && !currentPoke.isSemiInvulnerable()) { - dancers.push(currentPoke); - } - } - // Dancer activates in order of lowest speed stat to highest - // Note that the speed stat used is after any volatile replacements like Speed Swap, - // but before any multipliers like Agility or Choice Scarf - // Ties go to whichever Pokemon has had the ability for the least amount of time - dancers.sort( - (a, b) => -(b.storedStats['spe'] - a.storedStats['spe']) || b.abilityOrder - a.abilityOrder - ); - for (const dancer of dancers) { - if (this.battle.faintMessages()) break; - if (dancer.fainted) continue; - this.battle.add('-activate', dancer, 'ability: Dancer'); - const dancersTarget = !target!.isAlly(dancer) && pokemon.isAlly(dancer) ? target! : pokemon; - const dancersTargetLoc = dancer.getLocOf(dancersTarget); - this.runMove(move.id, dancer, dancersTargetLoc, this.dex.abilities.get('dancer'), undefined, true); - } - } - if (noLock && pokemon.volatiles['lockedmove']) delete pokemon.volatiles['lockedmove']; - }, - - // Dollar Store Brand prankster immunity implementation - hitStepTryImmunity(targets, pokemon, move) { - const hitResults = []; - for (const [i, target] of targets.entries()) { - if (this.battle.gen >= 6 && move.flags['powder'] && target !== pokemon && !this.dex.getImmunity('powder', target)) { - this.battle.debug('natural powder immunity'); - this.battle.add('-immune', target); - hitResults[i] = false; - } else if (!this.battle.singleEvent('TryImmunity', move, {}, target, pokemon, move)) { - this.battle.add('-immune', target); - hitResults[i] = false; - } else if ( - this.battle.gen >= 7 && move.pranksterBoosted && - (pokemon.hasAbility('prankster') || pokemon.hasAbility('plausibledeniability') || pokemon.volatiles['nol']) && - !targets[i].isAlly(pokemon) && !this.dex.getImmunity('prankster', target) - ) { - this.battle.debug('natural prankster immunity'); - if (!target.illusion) this.battle.hint("Since gen 7, Dark is immune to Prankster moves."); - this.battle.add('-immune', target); - hitResults[i] = false; - } else { - hitResults[i] = true; - } - } - return hitResults; - }, - - // For Jett's The Hunt is On! - useMoveInner(moveOrMoveName, pokemon, target, sourceEffect, zMove, 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); - 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; - 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 = false; - } - 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]' + this.dex.conditions.get(sourceEffect); - 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 - } - - if (!sourceEffect || sourceEffect.id === 'pursuit' || sourceEffect.id === 'thehuntison') { - 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(move, extraPP); - } - } - - if (!this.battle.singleEvent('TryMove', move, null, pokemon, target, move) || - !this.battle.runEvent('TryMove', pokemon, target, move)) { - move.mindBlownRecoil = false; - return false; - } - - 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(target, 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.negateSecondary && - !(move.hasSheerForce && pokemon.hasAbility(['sheerforce', 'aquilasblessing'])) && - !this.battle.getAllActive().some(x => x.hasAbility('skilldrain')) - ) { - const originalHp = pokemon.hp; - this.battle.singleEvent('AfterMoveSecondarySelf', move, null, pokemon, target, move); - this.battle.runEvent('AfterMoveSecondarySelf', pokemon, target, move); - if (pokemon !== target && move.category !== 'Status') { - if (pokemon.hp <= pokemon.maxhp / 2 && originalHp > pokemon.maxhp / 2) { - this.battle.runEvent('EmergencyExit', pokemon, pokemon); - } - } - } - - if (move.selfSwitch && this.battle.getAllActive().some(x => x.hasAbility('skilldrain'))) { - this.battle.hint(`Self-switching doesn't trigger when a Pokemon with Skill Drain is active.`); - } - - return true; - }, - afterMoveSecondaryEvent(targets, pokemon, move) { - // console.log(`${targets}, ${pokemon}, ${move}`) - if ( - !move.negateSecondary && - !(move.hasSheerForce && pokemon.hasAbility(['sheerforce', 'aquilasblessing'])) && - !this.battle.getAllActive().some(x => x.hasAbility('skilldrain')) - ) { - this.battle.singleEvent('AfterMoveSecondary', move, null, targets[0], pokemon, move); - this.battle.runEvent('AfterMoveSecondary', targets, pokemon, move); - } - return undefined; - }, - hitStepMoveHitLoop(targets, pokemon, move) { // Temporary name - const damage: (number | boolean | undefined)[] = []; - for (const i of targets.keys()) { - damage[i] = 0; - } - move.totalDamage = 0; - pokemon.lastDamage = 0; - let targetHits = move.multihit || 1; - if (Array.isArray(targetHits)) { - // yes, it's hardcoded... meh - if (targetHits[0] === 2 && targetHits[1] === 5) { - if (this.battle.gen >= 5) { - targetHits = this.battle.sample([2, 2, 3, 3, 4, 5]); - } else { - targetHits = this.battle.sample([2, 2, 2, 3, 3, 3, 4, 5]); - } - } else { - targetHits = this.battle.random(targetHits[0], targetHits[1] + 1); - } - } - targetHits = Math.floor(targetHits); - let nullDamage = true; - let moveDamage: (number | boolean | undefined)[]; - // There is no need to recursively check the ´sleepUsable´ flag as Sleep Talk can only be used while asleep. - const isSleepUsable = move.sleepUsable || this.dex.moves.get(move.sourceEffect).sleepUsable; - - let targetsCopy: (Pokemon | false | null)[] = targets.slice(0); - let hit: number; - for (hit = 1; hit <= targetHits; hit++) { - if (damage.includes(false)) break; - if (hit > 1 && pokemon.status === 'slp' && !isSleepUsable) break; - if (targets.every(target => !target?.hp)) break; - move.hit = hit; - if (move.smartTarget && targets.length > 1) { - targetsCopy = [targets[hit - 1]]; - } else { - targetsCopy = targets.slice(0); - } - const target = targetsCopy[0]; // some relevant-to-single-target-moves-only things are hardcoded - if (target && typeof move.smartTarget === 'boolean') { - if (hit > 1) { - this.battle.addMove('-anim', pokemon, move.name, target); - } else { - this.battle.retargetLastMove(target); - } - } - - // like this (Triple Kick) - if (target && move.multiaccuracy && hit > 1) { - let accuracy = move.accuracy; - const boostTable = [1, 4 / 3, 5 / 3, 2, 7 / 3, 8 / 3, 3]; - if (accuracy !== true) { - if (!move.ignoreAccuracy) { - const boosts = this.battle.runEvent('ModifyBoost', pokemon, null, null, {...pokemon.boosts}); - const boost = this.battle.clampIntRange(boosts['accuracy'], -6, 6); - if (boost > 0) { - accuracy *= boostTable[boost]; - } else { - accuracy /= boostTable[-boost]; - } - } - if (!move.ignoreEvasion) { - const boosts = this.battle.runEvent('ModifyBoost', target, null, null, {...target.boosts}); - const boost = this.battle.clampIntRange(boosts['evasion'], -6, 6); - if (boost > 0) { - accuracy /= boostTable[boost]; - } else if (boost < 0) { - accuracy *= boostTable[-boost]; - } - } - } - accuracy = this.battle.runEvent('ModifyAccuracy', target, pokemon, move, accuracy); - if (!move.alwaysHit) { - accuracy = this.battle.runEvent('Accuracy', target, pokemon, move, accuracy); - if (accuracy !== true && !this.battle.randomChance(accuracy, 100)) break; - } - } - - const moveData = move; - if (!moveData.flags) moveData.flags = {}; - - // Modifies targetsCopy (which is why it's a copy) - [moveDamage, targetsCopy] = this.spreadMoveHit(targetsCopy, pokemon, move, moveData); - - if (!moveDamage.some(val => val !== false)) break; - nullDamage = false; - - for (const [i, md] of moveDamage.entries()) { - // Damage from each hit is individually counted for the - // purposes of Counter, Metal Burst, and Mirror Coat. - damage[i] = md === true || !md ? 0 : md; - // Total damage dealt is accumulated for the purposes of recoil (Parental Bond). - // @ts-ignore - move.totalDamage += damage[i]; - } - if (move.mindBlownRecoil) { - this.battle.damage(Math.round(pokemon.maxhp / 2), pokemon, pokemon, this.dex.conditions.get('Mind Blown'), true); - move.mindBlownRecoil = false; - } - this.battle.eachEvent('Update'); - if (!pokemon.hp && targets.length === 1) { - hit++; // report the correct number of hits for multihit moves - break; - } - } - // hit is 1 higher than the actual hit count - if (hit === 1) return damage.fill(false); - if (nullDamage) damage.fill(false); - if (move.multihit && typeof move.smartTarget !== 'boolean') { - this.battle.add('-hitcount', targets[0], hit - 1); - } - - if (move.recoil && move.totalDamage) { - this.battle.damage(this.calcRecoilDamage(move.totalDamage, move, pokemon), pokemon, pokemon, 'recoil'); - } - - if (move.struggleRecoil) { - let recoilDamage; - if (this.dex.gen >= 5) { - recoilDamage = this.battle.clampIntRange(Math.round(pokemon.baseMaxhp / 4), 1); - } else { - recoilDamage = this.battle.trunc(pokemon.maxhp / 4); - } - this.battle.directDamage(recoilDamage, pokemon, pokemon, {id: 'strugglerecoil'} as Condition); - } - - // smartTarget messes up targetsCopy, but smartTarget should in theory ensure that targets will never fail, anyway - if (move.smartTarget) targetsCopy = targets.slice(0); - - for (const [i, target] of targetsCopy.entries()) { - if (target && pokemon !== target) { - target.gotAttacked(move, damage[i] as number | false | undefined, pokemon); - } - } - - if (move.ohko && !targets[0].hp) this.battle.add('-ohko'); - - if (!damage.some(val => !!val || val === 0)) return damage; - - this.battle.eachEvent('Update'); - - this.afterMoveSecondaryEvent(targetsCopy.filter(val => !!val) as Pokemon[], pokemon, move); - - if ( - !move.negateSecondary && - !(move.hasSheerForce && pokemon.hasAbility(['sheerforce', 'aquilasblessing'])) && - !this.battle.getAllActive().some(x => x.hasAbility('skilldrain')) - ) { - for (const [i, d] of damage.entries()) { - // There are no multihit spread moves, so it's safe to use move.totalDamage for multihit moves - // The previous check was for `move.multihit`, but that fails for Dragon Darts - const curDamage = targets.length === 1 ? move.totalDamage : d; - if (typeof curDamage === 'number' && targets[i].hp) { - if (targets[i].hp <= targets[i].maxhp / 2 && targets[i].hp + curDamage > targets[i].maxhp / 2) { - this.battle.runEvent('EmergencyExit', targets[i], pokemon); - } - } - } - } - - return damage; - }, - - // For Spandan's custom move and Brandon's ability - 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 unknown as ActiveMove; - move.hit = 0; - } - - if (!move.ignoreImmunity || (move.ignoreImmunity !== true && !move.ignoreImmunity[move.type])) { - if (!target.runImmunity(move.type, !suppressMessages)) { - return false; - } - } - - if (move.ohko) return 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; - } - - const 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); - - 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); - - 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); - let defense = defender.calculateStat(defenseStat, defBoosts); - - 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); - }, - - runMoveEffects(damage, targets, pokemon, move, moveData, isSecondary, isSelf) { - let didAnything: number | boolean | null | undefined = damage.reduce(this.combineResults); - for (const [i, target] of targets.entries()) { - if (target === false) continue; - let hitResult; - let didSomething: number | boolean | null | undefined = undefined; - - if (target) { - if (moveData.boosts && !target.fainted) { - hitResult = this.battle.boost(moveData.boosts, target, pokemon, move, isSecondary, isSelf); - didSomething = this.combineResults(didSomething, hitResult); - } - if (moveData.heal && !target.fainted) { - if (target.hp >= target.maxhp) { - this.battle.add('-fail', target, 'heal'); - this.battle.attrLastMove('[still]'); - damage[i] = this.combineResults(damage[i], false); - didAnything = this.combineResults(didAnything, null); - continue; - } - const amount = target.baseMaxhp * moveData.heal[0] / moveData.heal[1]; - const d = target.heal((this.battle.gen < 5 ? Math.floor : Math.round)(amount)); - if (!d && d !== 0) { - this.battle.add('-fail', pokemon); - this.battle.attrLastMove('[still]'); - this.battle.debug('heal interrupted'); - damage[i] = this.combineResults(damage[i], false); - didAnything = this.combineResults(didAnything, null); - continue; - } - this.battle.add('-heal', target, target.getHealth); - didSomething = true; - } - if (moveData.status) { - hitResult = target.trySetStatus(moveData.status, pokemon, moveData.ability ? moveData.ability : move); - if (!hitResult && move.status) { - damage[i] = this.combineResults(damage[i], false); - didAnything = this.combineResults(didAnything, null); - continue; - } - didSomething = this.combineResults(didSomething, hitResult); - } - if (moveData.forceStatus) { - hitResult = target.setStatus(moveData.forceStatus, pokemon, move); - didSomething = this.combineResults(didSomething, hitResult); - } - if (moveData.volatileStatus) { - hitResult = target.addVolatile(moveData.volatileStatus, pokemon, move); - didSomething = this.combineResults(didSomething, hitResult); - } - if (moveData.sideCondition) { - hitResult = target.side.addSideCondition(moveData.sideCondition, pokemon, move); - didSomething = this.combineResults(didSomething, hitResult); - } - if (moveData.slotCondition) { - hitResult = target.side.addSlotCondition(target, moveData.slotCondition, pokemon, move); - didSomething = this.combineResults(didSomething, hitResult); - } - if (moveData.weather) { - hitResult = this.battle.field.setWeather(moveData.weather, pokemon, move); - didSomething = this.combineResults(didSomething, hitResult); - } - if (moveData.terrain) { - hitResult = this.battle.field.setTerrain(moveData.terrain, pokemon, move); - didSomething = this.combineResults(didSomething, hitResult); - } - if (moveData.pseudoWeather) { - hitResult = this.battle.field.addPseudoWeather(moveData.pseudoWeather, pokemon, move); - didSomething = this.combineResults(didSomething, hitResult); - } - if (moveData.forceSwitch && !this.battle.getAllActive().some(x => x.hasAbility('skilldrain'))) { - hitResult = !!this.battle.canSwitch(target.side); - didSomething = this.combineResults(didSomething, hitResult); - } - // Hit events - // These are like the TryHit events, except we don't need a FieldHit event. - // Scroll up for the TryHit event documentation, and just ignore the "Try" part. ;) - if (move.target === 'all' && !isSelf) { - if (moveData.onHitField) { - hitResult = this.battle.singleEvent('HitField', moveData, {}, target, pokemon, move); - didSomething = this.combineResults(didSomething, hitResult); - } - } else if ((move.target === 'foeSide' || move.target === 'allySide') && !isSelf) { - if (moveData.onHitSide) { - hitResult = this.battle.singleEvent('HitSide', moveData, {}, target.side, pokemon, move); - didSomething = this.combineResults(didSomething, hitResult); - } - } else { - if (moveData.onHit) { - hitResult = this.battle.singleEvent('Hit', moveData, {}, target, pokemon, move); - didSomething = this.combineResults(didSomething, hitResult); - } - if (!isSelf && !isSecondary) { - this.battle.runEvent('Hit', target, pokemon, move); - } - } - } - if (moveData.selfdestruct === 'ifHit' && damage[i] !== false) { - this.battle.faint(pokemon, pokemon, move); - } - if (moveData.selfSwitch && !this.battle.getAllActive().some(x => x.hasAbility('skilldrain'))) { - if (this.battle.canSwitch(pokemon.side)) { - didSomething = true; - } else { - didSomething = this.combineResults(didSomething, false); - } - } - // Move didn't fail because it didn't try to do anything - if (didSomething === undefined) didSomething = true; - damage[i] = this.combineResults(damage[i], didSomething === null ? false : didSomething); - didAnything = this.combineResults(didAnything, didSomething); - } - - - if (!didAnything && didAnything !== 0 && !moveData.self && !moveData.selfdestruct) { - if (!isSelf && !isSecondary) { - if (didAnything === false) { - this.battle.add('-fail', pokemon); - this.battle.attrLastMove('[still]'); - } - } - this.battle.debug('move failed because it did nothing'); - } else if (move.selfSwitch && pokemon.hp && !this.battle.getAllActive().some(x => x.hasAbility('skilldrain'))) { - pokemon.switchFlag = move.id; - } - - return damage; - }, - }, - - pokemon: { - isGrounded(negateImmunity) { - 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') && !('roost' in this.volatiles)) return false; - if (this.hasAbility('levitate') && !this.battle.suppressingAbility()) return null; - if ('magnetrise' in this.volatiles) return false; - if ('telekinesis' in this.volatiles) return false; - return item !== 'airballoon'; - }, - 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') || source?.hasAbility('hackedcorrosion') || sourceEffect?.id === 'cradilychaos') && - ['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) { - 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 = {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; - }, - }, - - // Modded to add a property to work with Struchni's move - nextTurn() { - this.turn++; - this.lastSuccessfulMoveThisTurn = null; - - const trappedBySide: boolean[] = []; - const stalenessBySide: ('internal' | 'external' | undefined)[] = []; - for (const side of this.sides) { - let sideTrapped = true; - let sideStaleness: 'internal' | 'external' | undefined; - for (const pokemon of side.active) { - if (!pokemon) continue; - pokemon.moveThisTurn = ''; - pokemon.newlySwitched = false; - pokemon.moveLastTurnResult = pokemon.moveThisTurnResult; - pokemon.moveThisTurnResult = undefined; - if (this.turn !== 1) { - pokemon.usedItemThisTurn = false; - // Used for Veto - pokemon.m.statsRaisedLastTurn = !!pokemon.statsRaisedThisTurn; - pokemon.statsRaisedThisTurn = false; - pokemon.statsLoweredThisTurn = false; - // It shouldn't be possible in a normal battle for a Pokemon to be damaged before turn 1's move selection - // However, this could be potentially relevant in certain OMs - pokemon.hurtThisTurn = null; - } - - pokemon.maybeDisabled = false; - for (const moveSlot of pokemon.moveSlots) { - moveSlot.disabled = false; - moveSlot.disabledSource = ''; - } - this.runEvent('DisableMove', pokemon); - if (!pokemon.ateBerry) pokemon.disableMove('belch'); - if (!pokemon.getItem().isBerry) pokemon.disableMove('stuffcheeks'); - - // If it was an illusion, it's not any more - if (pokemon.getLastAttackedBy() && this.gen >= 7) pokemon.knownType = true; - - for (let i = pokemon.attackedBy.length - 1; i >= 0; i--) { - const attack = pokemon.attackedBy[i]; - if (attack.source.isActive) { - attack.thisTurn = false; - } else { - pokemon.attackedBy.splice(pokemon.attackedBy.indexOf(attack), 1); - } - } - - if (this.gen >= 7) { - // In Gen 7, the real type of every Pokemon is visible to all players via the bottom screen while making choices - const seenPokemon = pokemon.illusion || pokemon; - const realTypeString = seenPokemon.getTypes(true).join('/'); - if (realTypeString !== seenPokemon.apparentType) { - this.add('-start', pokemon, 'typechange', realTypeString, '[silent]'); - seenPokemon.apparentType = realTypeString; - if (pokemon.addedType) { - // The typechange message removes the added type, so put it back - this.add('-start', pokemon, 'typeadd', pokemon.addedType, '[silent]'); - } - } - } - - pokemon.trapped = pokemon.maybeTrapped = false; - this.runEvent('TrapPokemon', pokemon); - if (!pokemon.knownType || this.dex.getImmunity('trapped', pokemon)) { - this.runEvent('MaybeTrapPokemon', pokemon); - } - // canceling switches would leak information - // if a foe might have a trapping ability - if (this.gen > 2) { - for (const source of pokemon.foes()) { - const species = (source.illusion || source).species; - if (!species.abilities) continue; - for (const abilitySlot in species.abilities) { - const abilityName = species.abilities[abilitySlot as keyof Species['abilities']]; - if (abilityName === source.ability) { - // pokemon event was already run above so we don't need - // to run it again. - continue; - } - const ruleTable = this.ruleTable; - if ((ruleTable.has('+hackmons') || !ruleTable.has('obtainableabilities')) && !this.format.team) { - // hackmons format - continue; - } else if (abilitySlot === 'H' && species.unreleasedHidden) { - // unreleased hidden ability - continue; - } - const ability = this.dex.abilities.get(abilityName); - if (ruleTable.has('-ability:' + ability.id)) continue; - if (pokemon.knownType && !this.dex.getImmunity('trapped', pokemon)) continue; - this.singleEvent('FoeMaybeTrapPokemon', ability, {}, pokemon, source); - } - } - } - - if (pokemon.fainted) continue; - - sideTrapped = sideTrapped && pokemon.trapped; - const staleness = pokemon.volatileStaleness || pokemon.staleness; - if (staleness) sideStaleness = sideStaleness === 'external' ? sideStaleness : staleness; - pokemon.activeTurns++; - } - trappedBySide.push(sideTrapped); - stalenessBySide.push(sideStaleness); - side.faintedLastTurn = side.faintedThisTurn; - side.faintedThisTurn = null; - } - - if (this.maybeTriggerEndlessBattleClause(trappedBySide, stalenessBySide)) return; - - if (this.gameType === 'triples' && !this.sides.filter(side => side.pokemonLeft > 1).length) { - // If both sides have one Pokemon left in triples and they are not adjacent, they are both moved to the center. - const actives = this.getAllActive(); - if (actives.length > 1 && !actives[0].isAdjacent(actives[1])) { - this.swapPosition(actives[0], 1, '[silent]'); - this.swapPosition(actives[1], 1, '[silent]'); - this.add('-center'); - } - } - - this.add('turn', this.turn); - - this.makeRequest('move'); - }, -}; diff --git a/data/mods/thecardgame/abilities.ts b/data/mods/thecardgame/abilities.ts index 5c9af8011c37..5dcf9c71d947 100644 --- a/data/mods/thecardgame/abilities.ts +++ b/data/mods/thecardgame/abilities.ts @@ -1,4 +1,4 @@ -export const Abilities: {[k: string]: ModdedAbilityData} = { +export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTable = { aerilate: { inherit: true, onModifyType(move, pokemon) { diff --git a/data/mods/thecardgame/conditions.ts b/data/mods/thecardgame/conditions.ts index 8a47e300630f..f56bbc9811f0 100644 --- a/data/mods/thecardgame/conditions.ts +++ b/data/mods/thecardgame/conditions.ts @@ -1,4 +1,4 @@ -export const Conditions: {[k: string]: ModdedConditionData} = { +export const Conditions: import('../../../sim/dex-conditions').ModdedConditionDataTable = { deltastream: { inherit: true, onEffectiveness(typeMod, target, type, move) { diff --git a/data/mods/thecardgame/items.ts b/data/mods/thecardgame/items.ts index 9d47db5e5976..b7bbed8f4b9e 100644 --- a/data/mods/thecardgame/items.ts +++ b/data/mods/thecardgame/items.ts @@ -1,4 +1,4 @@ -export const Items: {[k: string]: ModdedItemData} = { +export const Items: import('../../../sim/dex-items').ModdedItemDataTable = { buggem: { inherit: true, onSourceTryPrimaryHit(target, source, move) { diff --git a/data/mods/thecardgame/moves.ts b/data/mods/thecardgame/moves.ts index 61714cd75f58..3be0468d7699 100644 --- a/data/mods/thecardgame/moves.ts +++ b/data/mods/thecardgame/moves.ts @@ -1,4 +1,4 @@ -export const Moves: {[k: string]: ModdedMoveData} = { +export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = { camouflage: { inherit: true, onHit(target) { @@ -21,6 +21,22 @@ export const Moves: {[k: string]: ModdedMoveData} = { return typeMod + this.dex.getEffectiveness('Normal', type); }, }, + ivycudgel: { + inherit: true, + onModifyType(move, pokemon) { + 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 = 'Fighting'; + break; + } + }, + }, roost: { inherit: true, condition: { diff --git a/data/mods/thecardgame/typechart.ts b/data/mods/thecardgame/typechart.ts index 61e7d0fe950b..9b1f9a7371c7 100644 --- a/data/mods/thecardgame/typechart.ts +++ b/data/mods/thecardgame/typechart.ts @@ -1,4 +1,4 @@ -export const TypeChart: {[k: string]: ModdedTypeData} = { +export const TypeChart: import('../../../sim/dex-data').ModdedTypeDataTable = { dark: { inherit: true, damageTaken: { diff --git a/data/mods/trademarked/scripts.ts b/data/mods/trademarked/scripts.ts index d8b6c97506a4..7f5654e3feff 100644 --- a/data/mods/trademarked/scripts.ts +++ b/data/mods/trademarked/scripts.ts @@ -1,7 +1,9 @@ +import {Utils} from '../../../lib'; + export const Scripts: ModdedBattleScriptsData = { gen: 9, inherit: 'gen9', - nextTurn() { + endTurn() { this.turn++; this.lastSuccessfulMoveThisTurn = null; @@ -182,7 +184,7 @@ export const Scripts: ModdedBattleScriptsData = { // Please remove me once there is client support. if (this.ruleTable.has('crazyhouserule')) { for (const side of this.sides) { - let buf = `raw|${side.name}'s team:
`; + let buf = `raw|${Utils.escapeHTML(side.name)}'s team:
`; for (const pokemon of side.pokemon) { if (!buf.endsWith('
')) buf += '/​'; if (pokemon.fainted) { @@ -204,6 +206,7 @@ export const Scripts: ModdedBattleScriptsData = { return { id: move.id, name: move.name, + flags: {}, // Does not need activation message with this fullname: 'ability: ' + move.name, onStart(this: Battle, pokemon: Pokemon) { @@ -227,7 +230,8 @@ export const Scripts: ModdedBattleScriptsData = { const species = pokemon.species; if (pokemon.fainted || this.illusion || pokemon.illusion || (pokemon.volatiles['substitute'] && this.battle.gen >= 5) || (pokemon.transformed && this.battle.gen >= 2) || (this.transformed && this.battle.gen >= 5) || - species.name === 'Eternatus-Eternamax') { + species.name === 'Eternatus-Eternamax' || (['Ogerpon', 'Terapagos'].includes(species.baseSpecies) && + (this.terastallized || pokemon.terastallized)) || this.terastallized === 'Stellar') { return false; } @@ -255,7 +259,6 @@ export const Scripts: ModdedBattleScriptsData = { if (this.modifiedStats) this.modifiedStats[statName] = pokemon.modifiedStats![statName]; // Gen 1: Copy modified stats. } this.moveSlots = []; - this.set.ivs = (this.battle.gen >= 5 ? this.set.ivs : pokemon.set.ivs); this.hpType = (this.battle.gen >= 5 ? this.hpType : pokemon.hpType); this.hpPower = (this.battle.gen >= 5 ? this.hpPower : pokemon.hpPower); this.timesAttacked = pokemon.timesAttacked; @@ -280,13 +283,14 @@ export const Scripts: ModdedBattleScriptsData = { this.boosts[boostName] = pokemon.boosts[boostName]; } if (this.battle.gen >= 6) { - const volatilesToCopy = ['focusenergy', 'gmaxchistrike', 'laserfocus']; + const volatilesToCopy = ['dragoncheer', 'focusenergy', 'gmaxchistrike', 'laserfocus']; + // we need to remove all the crit volatiles before adding any crit volatile + for (const volatile of volatilesToCopy) this.removeVolatile(volatile); for (const volatile of volatilesToCopy) { if (pokemon.volatiles[volatile]) { this.addVolatile(volatile); if (volatile === 'gmaxchistrike') this.volatiles[volatile].layers = pokemon.volatiles[volatile].layers; - } else { - this.removeVolatile(volatile); + if (volatile === 'dragoncheer') this.volatiles[volatile].hasDragonType = pokemon.volatiles[volatile].hasDragonType; } } } @@ -323,6 +327,11 @@ export const Scripts: ModdedBattleScriptsData = { } } + // Pokemon transformed into Ogerpon cannot Terastallize + // restoring their ability to tera after they untransform is handled ELSEWHERE + if (this.species.baseSpecies === 'Ogerpon' && this.canTerastallize) this.canTerastallize = false; + if (this.species.baseSpecies === 'Terapagos' && this.canTerastallize) this.canTerastallize = false; + return true; }, }, diff --git a/data/mods/vaporemons/abilities.ts b/data/mods/vaporemons/abilities.ts deleted file mode 100644 index dc60aeadd72d..000000000000 --- a/data/mods/vaporemons/abilities.ts +++ /dev/null @@ -1,1616 +0,0 @@ -export const Abilities: {[k: string]: ModdedAbilityData} = { - zerotohero: { - onSourceAfterFaint(length, target, source, effect) { - if (effect?.effectType !== 'Move') { - return; - } - if (source.species.id === 'palafin' && source.hp && !source.transformed && source.side.foe.pokemonLeft) { - this.add('-activate', source, 'ability: Zero to Hero'); - source.formeChange('Palafin-Hero', this.effect, true); - } - }, - isPermanent: true, - name: "Zero to Hero", - shortDesc: "If this Pokemon is a Palafin in Zero Form, KOing a foe has it change to Hero Form.", - rating: 5, - num: 278, - }, - overcoat: { - inherit: true, - shortDesc: "This Pokemon is immune to sandstorm damage, hazards, and powder moves.", - name: "Overcoat", - }, - cutecharm: { - onSourceModifyAtkPriority: 6, - onSourceModifyAtk(atk, attacker, defender, move) { - if (defender.types.includes(move.type)) { - this.debug('Cute Charm weaken'); - return this.chainModify(0.5); - } - }, - onSourceModifySpAPriority: 5, - onSourceModifySpA(atk, attacker, defender, move) { - if (defender.types.includes(move.type)) { - this.debug('Cute Charm weaken'); - return this.chainModify(0.5); - } - }, - isBreakable: true, - name: "Cute Charm", - shortDesc: "This Pokemon takes 50% damage from moves of its own type.", - rating: 3, - num: 56, - }, - healer: { - name: "Healer", - onFaint(pokemon) { - pokemon.side.addSlotCondition(pokemon, 'healer'); - }, - condition: { - onSwap(target) { - if (!target.fainted) { - const source = this.effectState.source; - const damage = this.heal(target.baseMaxhp / 3, target, target); - if (damage) this.add('-heal', target, target.getHealth, '[from] ability: Healer', '[of] ' + source); - target.side.removeSlotCondition(target, 'healer'); - } - }, - }, - rating: 3, - shortDesc: "On faint, the next Pokemon sent out heals 33% of its max HP.", - num: 131, - }, - galewings: { - onModifyPriority(priority, pokemon, target, move) { - for (const poke of this.getAllActive()) { - if (poke.hasAbility('counteract') && poke.side.id !== pokemon.side.id && !poke.abilityState.ending) { - return; - } - } - if (move?.type === 'Flying' && pokemon.hp >= pokemon.maxhp / 2) return priority + 1; - }, - name: "Gale Wings", - shortDesc: "If this Pokemon has 50% of its max HP or more, its Flying-type moves have their priority increased by 1.", - rating: 3, - num: 177, - }, - grasspelt: { - onStart(pokemon) { - if (!this.field.setTerrain('grassyterrain') && this.field.isTerrain('grassyterrain')) { - this.add('-activate', pokemon, 'ability: Grass Pelt'); - } - }, - onModifyDefPriority: 5, - onModifyDef(def) { - for (const target of this.getAllActive()) { - if (target.hasAbility('cloudnine')) { - this.debug('Cloud Nine prevents Defense increase'); - return; - } - } - if (this.field.isTerrain('grassyterrain')) { - this.debug('Grass Pelt boost'); - return this.chainModify([5461, 4096]); - } - }, - isBreakable: true, - name: "Grass Pelt", - shortDesc: "On switch-in, summons Grassy Terrain. During Grassy Terrain, Def is 1.3333x.", - rating: 4.5, - num: 179, - }, - musclememory: { - onStart(pokemon) { - pokemon.addVolatile('musclememory'); - }, - condition: { - onStart(pokemon) { - this.effectState.lastMove = ''; - this.effectState.numConsecutive = 0; - }, - onTryMovePriority: -2, - onTryMove(pokemon, target, move) { - if (!pokemon.hasAbility('musclememory')) { - pokemon.removeVolatile('musclememory'); - return; - } - if (this.effectState.lastMove === move.id && pokemon.moveLastTurnResult) { - this.effectState.numConsecutive++; - } else if (pokemon.volatiles['twoturnmove']) { - if (this.effectState.lastMove !== move.id) { - this.effectState.numConsecutive = 1; - } else { - this.effectState.numConsecutive++; - } - } else { - this.effectState.numConsecutive = 0; - } - this.effectState.lastMove = move.id; - }, - onModifyDamage(damage, source, target, move) { - const dmgMod = [4096, 4915, 5734, 6553, 7372, 8192]; - const numConsecutive = this.effectState.numConsecutive > 5 ? 5 : this.effectState.numConsecutive; - this.debug(`Current musclememory boost: ${dmgMod[numConsecutive]}/4096`); - return this.chainModify([dmgMod[numConsecutive], 4096]); - }, - }, - name: "Muscle Memory", - shortDesc: "Damage of moves used on consecutive turns is increased. Max 2x after 5 turns.", - rating: 4, - }, - deathaura: { - name: "Death Aura", - shortDesc: "While this Pokemon is active, no Pokemon can heal or use draining moves.", - onStart(source) { - let activated = false; - for (const pokemon of source.foes()) { - if (!activated) { - this.add('-ability', source, 'Death Aura'); - activated = true; - } - if (!pokemon.volatiles['healblock']) { - pokemon.addVolatile('healblock'); - } - if (!source.volatiles['healblock']) { - source.addVolatile('healblock'); - } - } - }, - onAnySwitchIn(pokemon) { - const source = this.effectState.target; - if (pokemon === source) return; - for (const target of source.foes()) { - if (!target.volatiles['healblock']) { - target.addVolatile('healblock'); - } - } - }, - onEnd(pokemon) { - for (const target of pokemon.foes()) { - target.removeVolatile('healblock'); - } - }, - rating: 4, - }, - seedsower: { - onDamagingHit(damage, target, source, move) { - if (!source.hasType('Grass')) { - this.add('-activate', target, 'ability: Seed Sower'); - source.addVolatile('leechseed', this.effectState.target); - } - }, - name: "Seed Sower", - shortDesc: "When this Pokemon is hit by an attack, the effect of Leech Seed begins.", - rating: 3, - num: 269, - }, - sandspit: { - onDamagingHit(damage, target, source, move) { - this.add('-activate', target, 'ability: Sand Spit'); - source.addVolatile('sandspit', this.effectState.target); - }, - condition: { - duration: 5, - durationCallback(target, source) { - if (source?.hasItem('gripclaw')) return 8; - return this.random(5, 7); - }, - onStart(pokemon, source) { - this.add('-activate', pokemon, 'move: ' + this.effectState.sourceEffect, '[of] ' + source); - this.effectState.boundDivisor = source.hasItem('bindingband') ? 8 : 8; - }, - onResidualOrder: 13, - onResidual(pokemon) { - const source = this.effectState.source; - // G-Max Centiferno and G-Max Sandblast continue even after the user leaves the field - const gmaxEffect = ['gmaxcentiferno', 'gmaxsandblast'].includes(this.effectState.sourceEffect.id); - if (source && (!source.isActive || source.hp <= 0) && !gmaxEffect) { - delete pokemon.volatiles['sandspit']; - this.add('-end', pokemon, this.effectState.sourceEffect, '[sandspit]', '[silent]'); - return; - } - this.add('-anim', pokemon, "Sand Tomb", pokemon); - this.damage(pokemon.baseMaxhp / this.effectState.boundDivisor); - }, - onEnd(pokemon) { - this.add('-end', pokemon, this.effectState.sourceEffect, '[sandspit]'); - }, - onTrapPokemon(pokemon) { - const gmaxEffect = ['gmaxcentiferno', 'gmaxsandblast'].includes(this.effectState.sourceEffect.id); - if (this.effectState.source?.isActive || gmaxEffect) pokemon.tryTrap(); - }, - }, - name: "Sand Spit", - shortDesc: "When this Pokemon is hit by an attack, the effect of Sand Tomb begins.", - rating: 4, - num: 245, - }, - sandforce: { - onBasePowerPriority: 21, - onBasePower(basePower, attacker, defender, move) { - if (this.field.isWeather('sandstorm')) { - this.debug('Sand Force boost'); - return this.chainModify([0x14CD, 0x1000]); - } - }, - onImmunity(type, pokemon) { - if (type === 'sandstorm') return false; - }, - name: "Sand Force", - rating: 2, - shortDesc: "This Pokemon's moves deal 1.3x damage in a sandstorm; Sand immunity.", - num: 159, - }, - cloudnine: { - onSwitchIn(pokemon) { - this.effectState.switchingIn = true; - }, - onStart(pokemon) { - if (!this.effectState.switchingIn) return; - this.add('-ability', pokemon, 'Cloud Nine'); - this.effectState.switchingIn = false; - if (this.field.terrain) { - this.add('-message', `${pokemon.name} suppresses the effects of the terrain!`); - let activated = false; - for (const other of pokemon.foes()) { - if (!activated) { - this.add('-ability', pokemon, 'Cloud Nine'); - } - activated = true; - if (!other.volatiles['cloudnine']) { - other.addVolatile('cloudnine'); - } - } - } - }, - onTerrainChange() { - const pokemon = this.effectState.target; - this.add('-ability', pokemon, 'Cloud Nine'); - this.add('-message', `${pokemon.name} suppresses the effects of the terrain!`); - if (this.field.terrain) { - let activated = false; - for (const other of pokemon.foes()) { - if (!activated) { - this.add('-ability', pokemon, 'Cloud Nine'); - } - activated = true; - if (!other.volatiles['cloudnine']) { - other.addVolatile('cloudnine'); - } - } - } - }, - onAnySwitchIn(pokemon) { - const source = this.effectState.target; - if (pokemon === source) return; - for (const target of source.foes()) { - if (!target.volatiles['cloudnine']) { - target.addVolatile('cloudnine'); - } - } - }, - onEnd(source) { - if (this.field.terrain) { - const cnsource = this.effectState.target; - for (const target of cnsource.foes()) { - target.removeVolatile('cloudnine'); - } - } - source.abilityState.ending = true; - for (const pokemon of this.getAllActive()) { - if (pokemon.ignoringItem()) continue; - if ( - (pokemon.hasItem('psychicseed') && this.field.isTerrain('psychicterrain')) || - (pokemon.hasItem('electricseed') && this.field.isTerrain('electricterrain')) || - (pokemon.hasItem('grassyseed') && this.field.isTerrain('grassyterrain')) || - (pokemon.hasItem('mistyseed') && this.field.isTerrain('mistyterrain')) - ) { - for (const target of this.getAllActive()) { - if (target.hasAbility('cloudnine') && target !== source) { - this.debug('Cloud Nine prevents Seed use'); - return; - } - } - pokemon.useItem(); - } - } - }, - condition: {}, - suppressWeather: true, - name: "Cloud Nine", - shortDesc: "While this Pokemon is active, the effects of weathers and terrains are disabled.", - rating: 2, - num: 13, - }, - runedrive: { - onStart(pokemon) { - this.singleEvent('TerrainChange', this.effect, this.effectState, pokemon); - }, - onTerrainChange(pokemon) { - if (pokemon.transformed) return; - if (this.field.isTerrain('mistyterrain')) { - pokemon.addVolatile('runedrive'); - } else if (!pokemon.volatiles['runedrive']?.fromBooster) { - pokemon.removeVolatile('runedrive'); - } - }, - onEnd(pokemon) { - delete pokemon.volatiles['runedrive']; - this.add('-end', pokemon, 'Rune Drive', '[silent]'); - }, - condition: { - noCopy: true, - onStart(pokemon, source, effect) { - if (effect?.id === 'boosterenergy') { - this.effectState.fromBooster = true; - this.add('-activate', pokemon, 'ability: Rune Drive', '[fromitem]'); - } else { - this.add('-activate', pokemon, 'ability: Rune Drive'); - } - this.effectState.bestStat = pokemon.getBestStat(false, true); - this.add('-start', pokemon, 'runedrive' + this.effectState.bestStat); - }, - onModifyAtkPriority: 5, - onModifyAtk(atk, source, target, move) { - if (this.effectState.bestStat !== 'atk' || source.volatiles['cloudnine'] || source.ignoringAbility()) return; - this.debug('Rune Drive atk boost'); - return this.chainModify([5325, 4096]); - }, - onModifyDefPriority: 6, - onModifyDef(def, target, source, move) { - if (this.effectState.bestStat !== 'def' || target.volatiles['cloudnine'] || target.ignoringAbility()) return; - this.debug('Rune Drive def boost'); - return this.chainModify([5325, 4096]); - }, - onModifySpAPriority: 5, - onModifySpA(relayVar, source, target, move) { - if (this.effectState.bestStat !== 'spa' || source.volatiles['cloudnine'] || source.ignoringAbility()) return; - this.debug('Rune Drive spa boost'); - return this.chainModify([5325, 4096]); - }, - onModifySpDPriority: 6, - onModifySpD(relayVar, target, source, move) { - if (this.effectState.bestStat !== 'spd' || target.volatiles['cloudnine'] || target.ignoringAbility()) return; - this.debug('Rune Drive spd boost'); - return this.chainModify([5325, 4096]); - }, - onModifySpe(spe, pokemon) { - if (this.effectState.bestStat !== 'spe' || pokemon.volatiles['cloudnine'] || pokemon.ignoringAbility()) return; - this.debug('Rune Drive spe boost'); - return this.chainModify(1.5); - }, - onEnd(pokemon) { - this.add('-end', pokemon, 'Rune Drive'); - }, - }, - name: "Rune Drive", - rating: 3, - shortDesc: "Misty Terrain active or Booster Energy used: highest stat is 1.3x, or 1.5x if Speed.", - }, - photondrive: { - onStart(pokemon) { - this.singleEvent('TerrainChange', this.effect, this.effectState, pokemon); - }, - onTerrainChange(pokemon) { - if (pokemon.transformed) return; - if (this.field.isTerrain('grassyterrain')) { - pokemon.addVolatile('photondrive'); - } else if (!pokemon.volatiles['photondrive']?.fromBooster) { - pokemon.removeVolatile('photondrive'); - } - }, - onEnd(pokemon) { - delete pokemon.volatiles['photondrive']; - this.add('-end', pokemon, 'Photon Drive', '[silent]'); - }, - condition: { - noCopy: true, - onStart(pokemon, source, effect) { - if (effect?.id === 'boosterenergy') { - this.effectState.fromBooster = true; - this.add('-activate', pokemon, 'ability: Photon Drive', '[fromitem]'); - } else { - this.add('-activate', pokemon, 'ability: Photon Drive'); - } - this.effectState.bestStat = pokemon.getBestStat(false, true); - this.add('-start', pokemon, 'photondrive' + this.effectState.bestStat); - }, - onModifyAtkPriority: 5, - onModifyAtk(atk, source, target, move) { - if (this.effectState.bestStat !== 'atk' || source.volatiles['cloudnine'] || source.ignoringAbility()) return; - this.debug('Photon Drive atk boost'); - return this.chainModify([5325, 4096]); - }, - onModifyDefPriority: 6, - onModifyDef(def, target, source, move) { - if (this.effectState.bestStat !== 'def' || target.volatiles['cloudnine'] || target.ignoringAbility()) return; - this.debug('Photon Drive def boost'); - return this.chainModify([5325, 4096]); - }, - onModifySpAPriority: 5, - onModifySpA(relayVar, source, target, move) { - if (this.effectState.bestStat !== 'spa' || source.volatiles['cloudnine'] || source.ignoringAbility()) return; - this.debug('Photon Drive spa boost'); - return this.chainModify([5325, 4096]); - }, - onModifySpDPriority: 6, - onModifySpD(relayVar, target, source, move) { - if (this.effectState.bestStat !== 'spd' || target.volatiles['cloudnine'] || target.ignoringAbility()) return; - this.debug('Photon Drive spd boost'); - return this.chainModify([5325, 4096]); - }, - onModifySpe(spe, pokemon) { - if (this.effectState.bestStat !== 'spe' || pokemon.volatiles['cloudnine'] || pokemon.ignoringAbility()) return; - this.debug('Photon Drive spe boost'); - return this.chainModify(1.5); - }, - onEnd(pokemon) { - this.add('-end', pokemon, 'Photon Drive'); - }, - }, - name: "Photon Drive", - rating: 3, - shortDesc: "Grassy Terrain active or Booster Energy used: highest stat is 1.3x, or 1.5x if Speed.", - }, - neurondrive: { - onStart(pokemon) { - this.singleEvent('TerrainChange', this.effect, this.effectState, pokemon); - }, - onTerrainChange(pokemon) { - if (pokemon.transformed) return; - if (this.field.isTerrain('psychicterrain')) { - pokemon.addVolatile('neurondrive'); - } else if (!pokemon.volatiles['neurondrive']?.fromBooster) { - pokemon.removeVolatile('neurondrive'); - } - }, - onEnd(pokemon) { - delete pokemon.volatiles['neurondrive']; - this.add('-end', pokemon, 'Neuron Drive', '[silent]'); - }, - condition: { - noCopy: true, - onStart(pokemon, source, effect) { - if (effect?.id === 'boosterenergy') { - this.effectState.fromBooster = true; - this.add('-activate', pokemon, 'ability: Neuron Drive', '[fromitem]'); - } else { - this.add('-activate', pokemon, 'ability: Neuron Drive'); - } - this.effectState.bestStat = pokemon.getBestStat(false, true); - this.add('-start', pokemon, 'neurondrive' + this.effectState.bestStat); - }, - onModifyAtkPriority: 5, - onModifyAtk(atk, source, target, move) { - if (this.effectState.bestStat !== 'atk' || source.volatiles['cloudnine'] || source.ignoringAbility()) return; - this.debug('Neuron Drive atk boost'); - return this.chainModify([5325, 4096]); - }, - onModifyDefPriority: 6, - onModifyDef(def, target, source, move) { - if (this.effectState.bestStat !== 'def' || target.volatiles['cloudnine'] || target.ignoringAbility()) return; - this.debug('Neuron Drive def boost'); - return this.chainModify([5325, 4096]); - }, - onModifySpAPriority: 5, - onModifySpA(relayVar, source, target, move) { - if (this.effectState.bestStat !== 'spa' || source.volatiles['cloudnine'] || source.ignoringAbility()) return; - this.debug('Neuron Drive spa boost'); - return this.chainModify([5325, 4096]); - }, - onModifySpDPriority: 6, - onModifySpD(relayVar, target, source, move) { - if (this.effectState.bestStat !== 'spd' || target.volatiles['cloudnine'] || target.ignoringAbility()) return; - this.debug('Neuron Drive spd boost'); - return this.chainModify([5325, 4096]); - }, - onModifySpe(spe, pokemon) { - if (this.effectState.bestStat !== 'spe' || pokemon.volatiles['cloudnine'] || pokemon.ignoringAbility()) return; - this.debug('Neuron Drive spe boost'); - return this.chainModify(1.5); - }, - onEnd(pokemon) { - this.add('-end', pokemon, 'Neuron Drive'); - }, - }, - name: "Neuron Drive", - rating: 3, - shortDesc: "Psychic Terrain active or Booster Energy used: highest stat is 1.3x, or 1.5x if Speed.", - }, - protosmosis: { - onStart(pokemon) { - this.singleEvent('WeatherChange', this.effect, this.effectState, pokemon); - }, - onWeatherChange(pokemon) { - if (pokemon.transformed) return; - // Protosmosis is not affected by Utility Umbrella - if (this.field.isWeather('raindance')) { - pokemon.addVolatile('protosmosis'); - } else if (!pokemon.volatiles['protosmosis']?.fromBooster) { - pokemon.removeVolatile('protosmosis'); - } - }, - onEnd(pokemon) { - delete pokemon.volatiles['protosmosis']; - this.add('-end', pokemon, 'Protosmosis', '[silent]'); - }, - condition: { - noCopy: true, - onStart(pokemon, source, effect) { - if (effect?.id === 'boosterenergy') { - this.effectState.fromBooster = true; - this.add('-activate', pokemon, 'ability: Protosmosis', '[fromitem]'); - } else { - this.add('-activate', pokemon, 'ability: Protosmosis'); - } - this.effectState.bestStat = pokemon.getBestStat(false, true); - this.add('-start', pokemon, 'protosmosis' + this.effectState.bestStat); - }, - onModifyAtkPriority: 5, - onModifyAtk(atk, source, target, move) { - if (this.effectState.bestStat !== 'atk' || source.ignoringAbility()) return; - this.debug('Protosmosis atk boost'); - return this.chainModify([5325, 4096]); - }, - onModifyDefPriority: 6, - onModifyDef(def, target, source, move) { - if (this.effectState.bestStat !== 'def' || target.ignoringAbility()) return; - this.debug('Protosmosis def boost'); - return this.chainModify([5325, 4096]); - }, - onModifySpAPriority: 5, - onModifySpA(relayVar, source, target, move) { - if (this.effectState.bestStat !== 'spa' || source.ignoringAbility()) return; - this.debug('Protosmosis spa boost'); - return this.chainModify([5325, 4096]); - }, - onModifySpDPriority: 6, - onModifySpD(relayVar, target, source, move) { - if (this.effectState.bestStat !== 'spd' || target.ignoringAbility()) return; - this.debug('Protosmosis spd boost'); - return this.chainModify([5325, 4096]); - }, - onModifySpe(spe, pokemon) { - if (this.effectState.bestStat !== 'spe' || pokemon.ignoringAbility()) return; - this.debug('Protosmosis spe boost'); - return this.chainModify(1.5); - }, - onEnd(pokemon) { - this.add('-end', pokemon, 'Protosmosis'); - }, - }, - name: "Protosmosis", - rating: 3, - shortDesc: "Rain active or Booster Energy used: highest stat is 1.3x, or 1.5x if Speed.", - }, - protocrysalis: { - onStart(pokemon) { - this.singleEvent('WeatherChange', this.effect, this.effectState, pokemon); - }, - onWeatherChange(pokemon) { - if (pokemon.transformed) return; - // Protocrysalis is not affected by Utility Umbrella - if (this.field.isWeather('sandstorm')) { - pokemon.addVolatile('protocrysalis'); - } else if (!pokemon.volatiles['protocrysalis']?.fromBooster) { - pokemon.removeVolatile('protocrysalis'); - } - }, - onEnd(pokemon) { - delete pokemon.volatiles['protocrysalis']; - this.add('-end', pokemon, 'Protocrysalis', '[silent]'); - }, - condition: { - noCopy: true, - onStart(pokemon, source, effect) { - if (effect?.id === 'boosterenergy') { - this.effectState.fromBooster = true; - this.add('-activate', pokemon, 'ability: Protocrysalis', '[fromitem]'); - } else { - this.add('-activate', pokemon, 'ability: Protocrysalis'); - } - this.effectState.bestStat = pokemon.getBestStat(false, true); - this.add('-start', pokemon, 'protocrysalis' + this.effectState.bestStat); - }, - onModifyAtkPriority: 5, - onModifyAtk(atk, source, target, move) { - if (this.effectState.bestStat !== 'atk' || source.ignoringAbility()) return; - this.debug('Protocrysalis atk boost'); - return this.chainModify([5325, 4096]); - }, - onModifyDefPriority: 6, - onModifyDef(def, target, source, move) { - if (this.effectState.bestStat !== 'def' || target.ignoringAbility()) return; - this.debug('Protocrysalis def boost'); - return this.chainModify([5325, 4096]); - }, - onModifySpAPriority: 5, - onModifySpA(relayVar, source, target, move) { - if (this.effectState.bestStat !== 'spa' || source.ignoringAbility()) return; - this.debug('Protocrysalis spa boost'); - return this.chainModify([5325, 4096]); - }, - onModifySpDPriority: 6, - onModifySpD(relayVar, target, source, move) { - if (this.effectState.bestStat !== 'spd' || target.ignoringAbility()) return; - this.debug('Protocrysalis spd boost'); - return this.chainModify([5325, 4096]); - }, - onModifySpe(spe, pokemon) { - if (this.effectState.bestStat !== 'spe' || pokemon.ignoringAbility()) return; - this.debug('Protocrysalis spe boost'); - return this.chainModify(1.5); - }, - onEnd(pokemon) { - this.add('-end', pokemon, 'Protocrysalis'); - }, - }, - name: "Protocrysalis", - rating: 3, - shortDesc: "Sandstorm active or Booster Energy used: highest stat is 1.3x, or 1.5x if Speed.", - }, - protostasis: { - onStart(pokemon) { - this.singleEvent('WeatherChange', this.effect, this.effectState, pokemon); - }, - onWeatherChange(pokemon) { - if (pokemon.transformed) return; - // Protostasis is not affected by Utility Umbrella - if (this.field.isWeather('snow')) { - pokemon.addVolatile('protostasis'); - } else if (!pokemon.volatiles['protostasis']?.fromBooster) { - pokemon.removeVolatile('protostasis'); - } - }, - onEnd(pokemon) { - delete pokemon.volatiles['protostasis']; - this.add('-end', pokemon, 'Protostasis', '[silent]'); - }, - condition: { - noCopy: true, - onStart(pokemon, source, effect) { - if (effect?.id === 'boosterenergy') { - this.effectState.fromBooster = true; - this.add('-activate', pokemon, 'ability: Protostasis', '[fromitem]'); - } else { - this.add('-activate', pokemon, 'ability: Protostasis'); - } - this.effectState.bestStat = pokemon.getBestStat(false, true); - this.add('-start', pokemon, 'protostasis' + this.effectState.bestStat); - }, - onModifyAtkPriority: 5, - onModifyAtk(atk, source, target, move) { - if (this.effectState.bestStat !== 'atk' || source.ignoringAbility()) return; - this.debug('Protostasis atk boost'); - return this.chainModify([5325, 4096]); - }, - onModifyDefPriority: 6, - onModifyDef(def, target, source, move) { - if (this.effectState.bestStat !== 'def' || target.ignoringAbility()) return; - this.debug('Protostasis def boost'); - return this.chainModify([5325, 4096]); - }, - onModifySpAPriority: 5, - onModifySpA(relayVar, source, target, move) { - if (this.effectState.bestStat !== 'spa' || source.ignoringAbility()) return; - this.debug('Protostasis spa boost'); - return this.chainModify([5325, 4096]); - }, - onModifySpDPriority: 6, - onModifySpD(relayVar, target, source, move) { - if (this.effectState.bestStat !== 'spd' || target.ignoringAbility()) return; - this.debug('Protostasis spd boost'); - return this.chainModify([5325, 4096]); - }, - onModifySpe(spe, pokemon) { - if (this.effectState.bestStat !== 'spe' || pokemon.ignoringAbility()) return; - this.debug('Protostasis spe boost'); - return this.chainModify(1.5); - }, - onEnd(pokemon) { - this.add('-end', pokemon, 'Protostasis'); - }, - }, - name: "Protostasis", - rating: 3, - shortDesc: "Snow active or Booster Energy used: highest stat is 1.3x, or 1.5x if Speed.", - }, - counteract: { - name: "Counteract", - // new Ability suppression implemented in scripts.ts - onStart(pokemon) { - this.add('-ability', pokemon, 'Counteract'); - this.add('-message', `${pokemon.name}'s is thinking of how to counter the opponent's strategy!`); - }, - // onModifyPriority implemented in relevant abilities - onFoeBeforeMovePriority: 13, - onFoeBeforeMove(attacker, defender, move) { - attacker.addVolatile('counteract'); - }, - condition: { - onAfterMove(pokemon) { - pokemon.removeVolatile('counteract'); - }, - }, - 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.", - rating: 4, - gen: 8, - }, - sunblock: { - name: "Sunblock", - onDamage(damage, target, source, effect) { - if (effect.effectType !== 'Move' && this.field.isWeather('sunnyday')) { - if (effect.effectType === 'Ability') this.add('-activate', source, 'ability: ' + effect.name); - return false; - } - }, - onModifySecondaries(secondaries) { - if (this.field.isWeather('sunnyday')) { - this.debug('Sunblock prevent secondary'); - return secondaries.filter(effect => !!(effect.self || effect.dustproof)); - } - }, - shortDesc: "In Sun: Immune to indirect damage and secondary effects.", - gen: 8, - }, - sandveil: { - name: "Sand Veil", - onDamage(damage, target, source, effect) { - if (effect.effectType !== 'Move' && this.field.isWeather('sandstorm')) { - if (effect.effectType === 'Ability') this.add('-activate', source, 'ability: ' + effect.name); - return false; - } - }, - onModifySecondaries(secondaries) { - if (this.field.isWeather('sandstorm')) { - this.debug('Snow Cloak prevent secondary'); - return secondaries.filter(effect => !!(effect.self || effect.dustproof)); - } - }, - onImmunity(type, pokemon) { - if (type === 'sandstorm') return false; - }, - shortDesc: "In Sandstorm: Immune to indirect damage and secondary effects.", - rating: 3, - num: 8, - }, - snowcloak: { - name: "Snow Cloak", - onDamage(damage, target, source, effect) { - if (effect.effectType !== 'Move' && this.field.isWeather(['hail', 'snow'])) { - if (effect.effectType === 'Ability') this.add('-activate', source, 'ability: ' + effect.name); - return false; - } - }, - onModifySecondaries(secondaries) { - if (this.field.isWeather(['hail', 'snow'])) { - this.debug('Snow Cloak prevent secondary'); - return secondaries.filter(effect => !!(effect.self || effect.dustproof)); - } - }, - onImmunity(type, pokemon) { - if (type === 'hail') return false; - }, - shortDesc: "In Snow: Immune to indirect damage and secondary effects.", - rating: 3, - num: 81, - }, - outclass: { - onSourceHit(target, source, move) { - if (!move || !target || source.types[1] || source.volatiles['outclass'] || target.hasItem('terashard')) return; - const targetType = target.types[0]; - if (target !== source && move.category !== 'Status' && - !source.hasType(targetType) && source.addType(targetType) && targetType !== '???') { - target.setType(target.getTypes(true).map(type => type === targetType ? "???" : type)); - this.add('-start', target, 'typechange', target.types.join('/')); - this.add('-start', source, 'typeadd', targetType, '[from] ability: Outclass'); - source.addVolatile('outclass'); - } - }, - condition: {}, - name: "Outclass", - shortDesc: "If this Pokemon has one type, it steals the primary typing off a Pokemon it hits with an attack.", - rating: 4, - }, - steelyspirit: { - onAllyBasePowerPriority: 22, - onAllyBasePower(basePower, attacker, defender, move) { - if (move.type === 'Steel') { - this.debug('Steely Spirit boost'); - return this.chainModify(2); - } - }, - onSourceModifyAtkPriority: 5, - onSourceModifyAtk(atk, attacker, defender, move) { - if (move.type === 'Electric') { - return this.chainModify(0.5); - } - }, - onSourceModifySpAPriority: 5, - onSourceModifySpA(atk, attacker, defender, move) { - if (move.type === 'Electric') { - return this.chainModify(0.5); - } - }, - onUpdate(pokemon) { - if (pokemon.status === 'par') { - this.add('-activate', pokemon, 'ability: Steely Spirit'); - pokemon.cureStatus(); - } - }, - onSetStatus(status, target, source, effect) { - if (status.id !== 'par') return; - if ((effect as Move)?.status) { - this.add('-immune', target, '[from] ability: Steely Spirit'); - } - return false; - }, - isBreakable: true, - name: "Steely Spirit", - rating: 3.5, - shortDesc: "This Pokemon's Steel power is 2x; it can't be paralyzed; Electric power against it is halved.", - num: 252, - }, - sheerheart: { - onBasePowerPriority: 21, - onBasePower(basePower, pokemon, target, move) { - if (move.category === 'Special') return this.chainModify([5325, 4096]); - }, - onTryBoost(boost, target, source, effect) { - if (boost.spa) { - delete boost.spa; - if (!(effect as ActiveMove).secondaries) { - this.add("-fail", target, "unboost", "Special Attack", "[from] ability: Sheer Heart", "[of] " + target); - } - } - }, - isBreakable: true, - name: "Sheer Heart", - shortDesc: "Special attacks have 1.3x power; stat changes to the Special Attack stat have no effect.", - }, - battlespines: { - onAfterMove(target, source, move) { - if (target !== source && move.category !== 'Status' && move.totalDamage) { - this.damage(source.baseMaxhp / 8, source, target); - } - }, - name: "Battle Spines", - shortDesc: "This Pokemon’s attacks do an additional 1/8 of the target’s max HP in damage.", - }, - smelt: { - name: "Smelt", - onStart(pokemon) { - this.add('-ability', pokemon, 'Smelt'); - this.add('-message', `${pokemon.name}'s heat turns rocks into magma!`); - }, - onFoeBeforeMovePriority: 13, - onFoeBeforeMove(attacker, defender, move) { - attacker.addVolatile('smelt'); - }, - condition: { - onModifyTypePriority: -1, - onModifyType(move, pokemon) { - if (move.type === 'Rock') { - move.type = 'Fire'; - } - }, - onAfterMove(pokemon) { - pokemon.removeVolatile('smelt'); - }, - }, - shortDesc: "Rock moves used against this Pokemon become Fire-type (includes Stealth Rock).", - rating: 4, - }, - colorchange: { - onTryHitPriority: 1, - onTryHit(target, source, move) { - const type = move.type; - if ( - target.isActive && move.effectType === 'Move' && target !== source && - type !== '???' && !target.hasItem('terashard') - ) { - if (!target.setType(type)) return false; - this.add('-start', target, 'typechange', type, '[from] ability: Color Change'); - - if (target.side.active.length === 2 && target.position === 1) { - // Curse Glitch - const action = this.queue.willMove(target); - if (action && action.move.id === 'curse') { - action.targetLoc = -1; - } - } - } - }, - name: "Color Change", - shortDesc: "This Pokemon's type changes to the type of a move it's about to be hit by, unless it has the type.", - rating: 0, - num: 16, - }, - greeneyed: { - name: "Green-Eyed", - onStart(source) { - this.add('-ability', source, 'Green-Eyed'); - source.addVolatile('snatch'); - }, - shortDesc: "On switch-in, if the foe uses a Snatchable move, this Pokemon uses it instead.", - rating: 3, - }, - mudwash: { - name: "Mud Wash", - onStart(source) { - this.actions.useMove("Mud Sport", source); - this.actions.useMove("Water Sport", source); - this.add('-message', `${source.name}'s splashed around in the mud!`); - }, - onBasePower(basePower, attacker, defender, move) { - if (['Muddy Water', 'Mud Shot', 'Mud Bomb', 'Mud-Slap'].includes(move.name)) { - return this.chainModify(2); - } - }, - shortDesc: "On switch-in, sets Mud Sport and Water Sport. This Pokemon's mud moves deal double damage.", - rating: 5, - }, - exoskeleton: { - onStart(pokemon) { - this.add('-ability', pokemon, 'Exoskeleton'); - this.add('-message', `${pokemon.name} sports a tough exoskeleton!`); - }, - onSourceModifyDamage(damage, source, target, move) { - if (target.hasType('Bug')) { - if (['Rock', 'Fire', 'Flying'].includes(move.type)) { - this.debug('Exoskeleton Bug neutralize'); - return this.chainModify(0.5); - } - } else { - if (['Fighting', 'Ground', 'Grass'].includes(move.type)) { - this.debug('Exoskeleton non-Bug neutralize'); - return this.chainModify(0.5); - } - } - }, - onDamage(damage, target, source, effect) { - if (effect && effect.id === 'stealthrock' && target.hasType('Bug')) { - return damage / 2; - } - }, - isBreakable: true, - name: "Exoskeleton", - rating: 4, - shortDesc: "(Mostly functional) If Bug: no Bug weaknesses. If non-Bug: +Bug resistances.", - }, - bluntforce: { - // This should be applied directly to the stat as opposed to chaining with the others - onModifyAtkPriority: 5, - onModifyAtk(atk) { - return this.modify(atk, 1.5); - }, - onModifyDamage(damage, source, target, move) { - if (move && target.getMoveHitData(move).typeMod === 1) { - return this.chainModify(0.5); - } else if (move && target.getMoveHitData(move).typeMod > 1) { - return this.chainModify(0.25); - } - }, - name: "Blunt Force", - rating: 3.5, - shortDesc: "(Mostly functional) This Pokemon's physical moves have 1.5x power but can't be super effective.", - }, - waterveil: { - onStart(source) { - this.actions.useMove("Aqua Ring", source); - }, - onUpdate(pokemon) { - if (pokemon.status === 'brn') { - this.add('-activate', pokemon, 'ability: Water Veil'); - pokemon.cureStatus(); - } - }, - onSetStatus(status, target, source, effect) { - if (status.id !== 'brn') return; - if ((effect as Move)?.status) { - this.add('-immune', target, '[from] ability: Water Veil'); - } - return false; - }, - isBreakable: true, - name: "Water Veil", - rating: 2, - num: 41, - shortDesc: "This Pokemon uses Aqua Ring on switch-in. This Pokemon can't be burned.", - }, - shielddust: { - onModifySecondaries(secondaries) { - this.debug('Shield Dust prevent secondary'); - return secondaries.filter(effect => !!(effect.self || effect.dustproof)); - }, - onSourceModifyDamage(damage, source, target, move) { - if (move.secondaries) { - this.debug('Shield Dust neutralize'); - return this.chainModify(0.67); - } - }, - isBreakable: true, - name: "Shield Dust", - rating: 4, - num: 19, - shortDesc: "Moves with secondary effects against user: 0.67x power, secondary effects cannot activate.", - }, - blaze: { - onModifyAtkPriority: 5, - onModifyAtk(atk, attacker, defender, move) { - if (attacker.hp <= attacker.maxhp / 3) { - this.debug('Blaze low HP boost'); - return this.chainModify(1.5); - } else if (move.type === 'Fire') { - this.debug('Blaze boost'); - return this.chainModify(1.2); - } - }, - onModifySpAPriority: 5, - onModifySpA(atk, attacker, defender, move) { - if (attacker.hp <= attacker.maxhp / 3) { - this.debug('Blaze low HP boost'); - return this.chainModify(1.5); - } else if (move.type === 'Fire') { - this.debug('Blaze boost'); - return this.chainModify(1.2); - } - }, - name: "Blaze", - rating: 2, - num: 66, - shortDesc: "1.2x Power on Fire attacks. At 1/3 or less HP, all of this Pokemon's moves deal 1.5x damage.", - }, - torrent: { - onModifyAtkPriority: 5, - onModifyAtk(atk, attacker, defender, move) { - if (attacker.hp <= attacker.maxhp / 3) { - this.debug('Torrent low HP boost'); - return this.chainModify(1.5); - } else if (move.type === 'Water') { - this.debug('Torrent boost'); - return this.chainModify(1.2); - } - }, - onModifySpAPriority: 5, - onModifySpA(atk, attacker, defender, move) { - if (attacker.hp <= attacker.maxhp / 3) { - this.debug('Torrent low HP boost'); - return this.chainModify(1.5); - } else if (move.type === 'Water') { - this.debug('Torrent boost'); - return this.chainModify(1.2); - } - }, - name: "Torrent", - rating: 2, - num: 67, - shortDesc: "1.2x Power on Water attacks. At 1/3 or less HP, all of this Pokemon's moves deal 1.5x damage.", - }, - overgrow: { - onModifyAtkPriority: 5, - onModifyAtk(atk, attacker, defender, move) { - if (attacker.hp <= attacker.maxhp / 3) { - this.debug('Overgrow low HP boost'); - return this.chainModify(1.5); - } else if (move.type === 'Grass') { - this.debug('Overgrow boost'); - return this.chainModify(1.2); - } - }, - onModifySpAPriority: 5, - onModifySpA(atk, attacker, defender, move) { - if (attacker.hp <= attacker.maxhp / 3) { - this.debug('Overgrow low HP boost'); - return this.chainModify(1.5); - } else if (move.type === 'Grass') { - this.debug('Overgrow boost'); - return this.chainModify(1.2); - } - }, - name: "Overgrow", - rating: 2, - num: 65, - shortDesc: "1.2x Power on Grass attacks. At 1/3 or less HP, all of this Pokemon's moves deal 1.5x damage.", - }, - swarm: { - onModifyAtkPriority: 5, - onModifyAtk(atk, attacker, defender, move) { - if (attacker.hp <= attacker.maxhp / 3) { - this.debug('Swarm low HP boost'); - return this.chainModify(1.5); - } else if (move.type === 'Bug') { - this.debug('Swarm boost'); - return this.chainModify(1.2); - } - }, - onModifySpAPriority: 5, - onModifySpA(atk, attacker, defender, move) { - if (attacker.hp <= attacker.maxhp / 3) { - this.debug('Swarm low HP boost'); - return this.chainModify(1.5); - } else if (move.type === 'Bug') { - this.debug('Swarm boost'); - return this.chainModify(1.2); - } - }, - name: "Swarm", - rating: 2, - num: 68, - shortDesc: "1.2x Power on Bug attacks. At 1/3 or less HP, all of this Pokemon's moves deal 1.5x damage.", - }, - fairyringer: { - onTryHit(target, source, move) { - if (target !== source && move.type === 'Fairy') { - if (!this.boost({spa: 1})) { - this.add('-immune', target, '[from] ability: Fairy Ringer'); - } - return null; - } - }, - onAnyRedirectTarget(target, source, source2, move) { - if (move.type !== 'Fairy' || move.flags['pledgecombo']) return; - const redirectTarget = ['randomNormal', 'adjacentFoe'].includes(move.target) ? 'normal' : move.target; - if (this.validTarget(this.effectState.target, source, redirectTarget)) { - if (move.smartTarget) move.smartTarget = false; - if (this.effectState.target !== target) { - this.add('-activate', this.effectState.target, 'ability: Fairy Ringer'); - } - return this.effectState.target; - } - }, - isBreakable: true, - name: "Fairy Ringer", - rating: 3, - shortDesc: "This Pokemon draws Fairy moves to itself to raise Sp. Atk by 1; Fairy immunity.", - }, - justified: { - onDamagingHit(damage, target, source, move) { - if (move.type === 'Dark') { - this.boost({atk: 1}); - } - }, - onSourceModifyAtkPriority: 6, - onSourceModifyAtk(atk, attacker, defender, move) { - if (move.type === 'Dark') { - this.debug('Justified weaken'); - return this.chainModify(0.5); - } - }, - onSourceModifySpAPriority: 5, - onSourceModifySpA(atk, attacker, defender, move) { - if (move.type === 'Dark') { - this.debug('Justified weaken'); - return this.chainModify(0.5); - } - }, - isBreakable: true, - name: "Justified", - rating: 3, - num: 154, - shortDesc: "Dark-type moves deal 1/2 damage to this Pokemon and raise its Attack by 1 stage.", - }, - momentum: { - onAfterMoveSecondarySelfPriority: -1, - onAfterMoveSecondarySelf(pokemon, target, move) { - if (['rapidspin', 'icespinner', 'spinout', 'blazingtorque', 'combattorque', 'noxioustorque', - 'wickedtorque', 'drillrun', 'gyroball', 'rollout', 'iceball', 'flipturn', 'uturn', 'electrodrift', - 'darkestlariat', 'flamewheel', 'aurawheel', 'shiftgear', 'mortalspin', 'geargrind', 'steelroller', - 'rototiller', 'steamroller', 'tripleaxel', 'triplekick', 'firespin', 'leaftornado', 'hurricane', - 'bleakwindstorm', 'sandsearstorm', 'wildboltstorm', 'springtimestorm', 'whirlpool'].includes(move.id)) { - this.heal(pokemon.baseMaxhp / 8); - } - }, - onDamagingHit(damage, target, source, move) { - if (['rapidspin', 'icespinner', 'spinout', 'blazingtorque', 'combattorque', 'noxioustorque', - 'wickedtorque', 'drillrun', 'gyroball', 'rollout', 'iceball', 'flipturn', 'uturn', 'electrodrift', - 'darkestlariat', 'flamewheel', 'aurawheel', 'shiftgear', 'mortalspin', 'geargrind', 'steelroller', - 'rototiller', 'steamroller', 'tripleaxel', 'triplekick', 'firespin', 'leaftornado', 'hurricane', - 'bleakwindstorm', 'sandsearstorm', 'wildboltstorm', 'springtimestorm', 'whirlpool'].includes(move.id)) { - this.heal(target.baseMaxhp / 8); - } - }, - name: "Momentum", - shortDesc: "The user heals 1/8 of its HP if it uses or gets hit by a spinning move.", - }, - cudchew: { - onStart(pokemon) { - if (pokemon.getItem().isBerry) { - pokemon.eatItem(true); - this.add('-message', `${pokemon.name}'s ate its berry!`); - } - }, - onSwitchOut(pokemon) { - if (pokemon.hp && !pokemon.item && this.dex.items.get(pokemon.lastItem).isBerry) { - pokemon.setItem(pokemon.lastItem); - pokemon.lastItem = ''; - this.add('-item', pokemon, pokemon.getItem(), '[from] ability: Cud Chew'); - this.add('-message', `${pokemon.name}'s regenerated its berry!`); - } - }, - name: "Cud Chew", - rating: 4, - num: 291, - shortDesc: "Eats berry on switch-in, recycles berry on switch-out.", - }, - permafrost: { - name: "Permafrost", - onStart(pokemon) { - this.add('-ability', pokemon, 'Permafrost'); - this.add('-message', `${pokemon.name}'s freezing aura turns water into ice!`); - }, - onDamagingHit(damage, target, source, move) { - if (move.type === 'Ice') { - this.boost({def: 1, spd: 1}); - } - }, - onFoeBeforeMovePriority: 13, - onFoeBeforeMove(attacker, defender, move) { - attacker.addVolatile('permafrost'); - }, - condition: { - onModifyTypePriority: -1, - onModifyType(move, pokemon) { - if (move.type === 'Water') { - move.type = 'Ice'; - } - }, - onAfterMove(pokemon) { - pokemon.removeVolatile('permafrost'); - }, - }, - shortDesc: "Water moves used against this Pokemon become Ice-type. +1 Def/SpD when hit by Ice.", - rating: 4, - }, - prehistoricmight: { - onStart(pokemon) { - let activated = false; - for (const target of pokemon.adjacentFoes()) { - if (!target.positiveBoosts()) continue; - if (!activated) { - this.add('-ability', pokemon, 'Prehistoric Might', 'boost'); - activated = true; - } - if (target.volatiles['substitute']) { - this.add('-immune', target); - } else { - this.boost({spe: -2}, target, pokemon, null, true); - } - } - }, - name: "Prehistoric Might", - rating: 2.5, - shortDesc: "On switch-in, the foe's Speed is lowered by 2 stages if it has a positive stat boost.", - }, - synchronize: { - onDamage(damage, target, source, effect) { - if (effect && effect.effectType !== 'Move' && effect.id !== 'synchronize') { - for (const foes of target.adjacentFoes()) { - this.damage(damage, foes, target); - } - } - }, - name: "Synchronize", - rating: 2, - num: 28, - shortDesc: "If this Pokemon takes indirect damage, the opponent takes the same amount of damage.", - }, - illusion: { - onBeforeSwitchIn(pokemon) { - pokemon.illusion = null; - // yes, you can Illusion an active pokemon but only if it's to your right - for (let i = pokemon.side.pokemon.length - 1; i > pokemon.position; i--) { - const possibleTarget = pokemon.side.pokemon[i]; - if (!possibleTarget.fainted) { - // If Ogerpon is in the last slot while the Illusion Pokemon is Terastallized - // Illusion will not disguise as anything - if (!pokemon.terastallized || possibleTarget.species.baseSpecies !== 'Ogerpon') { - pokemon.illusion = possibleTarget; - } - break; - } - } - }, - onSourceModifyDamage(damage, source, target, move) { - if (target.illusion) { - this.debug('Illusion weaken'); - return this.chainModify(0.5); - } - }, - onDamagingHit(damage, target, source, move) { - if (target.illusion) { - this.singleEvent('End', this.dex.abilities.get('Illusion'), target.abilityState, target, source, move); - } - }, - onEnd(pokemon) { - if (pokemon.illusion) { - this.debug('illusion cleared'); - pokemon.illusion = null; - const details = pokemon.species.name + (pokemon.level === 100 ? '' : ', L' + pokemon.level) + - (pokemon.gender === '' ? '' : ', ' + pokemon.gender) + (pokemon.set.shiny ? ', shiny' : ''); - this.add('replace', pokemon, details); - this.add('-start', pokemon, 'typechange', pokemon.species.types.join('/'), '[silent]'); - this.add('-end', pokemon, 'Illusion'); - } - }, - onFaint(pokemon) { - pokemon.illusion = null; - }, - name: "Illusion", - rating: 4.5, - num: 149, - shortDesc: "This Pokemon appears as the last Pokemon in the party until it takes direct damage, which is halved while disguised.", - }, - steadfast: { - onTryAddVolatile(status, pokemon) { - if (status.id === 'flinch') return null; - }, - onSourceModifyDamage(damage, source, target, move) { - if (target.baseSpecies.bst < source.baseSpecies.bst) { - this.debug('Steadfast weaken'); - return this.chainModify(0.5); - } - }, - name: "Steadfast", - rating: 4, - num: 80, - shortDesc: "This Pokemon takes 0.5x damage from higher BST foes and can't flinch.", - }, - fairfight: { - name: "Fair Fight", - onStart(source) { - let activated = false; - for (const pokemon of source.foes()) { - if (!activated) { - this.add('-ability', source, 'Fair Fight'); - this.add('-message', `${source.name} wants to have a fair fight!`); - } - activated = true; - if (!pokemon.volatiles['fairfight']) { - pokemon.addVolatile('fairfight'); - } - if (!source.volatiles['fairfight']) { - source.addVolatile('fairfight'); - } - } - }, - onAnySwitchIn(pokemon) { - const source = this.effectState.target; - if (pokemon === source) return; - for (const target of source.foes()) { - if (!target.volatiles['fairfight']) { - target.addVolatile('fairfight'); - } - } - }, - onEnd(pokemon) { - for (const target of pokemon.foes()) { - target.removeVolatile('fairfight'); - } - }, - condition: { - onTryBoost(boost, target, source, effect) { - let showMsg = false; - let i: BoostID; - for (i in boost) { - if (boost[i]! < 0 || boost[i]! > 0) { - delete boost[i]; - showMsg = true; - } - } - if (showMsg && !(effect as ActiveMove).secondaries) { - this.add('-activate', target, 'ability: Fair Fight'); - this.add('-message', `${target.name} can't change its stats!`); - } - }, - }, - shortDesc: "While this Pokemon is active, no stat changes can occur.", - }, - - // unchanged abilities - damp: { - onAnyTryMove(target, source, effect) { - if (['explosion', 'mindblown', 'mistyexplosion', 'selfdestruct', 'shrapnelshot'].includes(effect.id)) { - this.attrLastMove('[still]'); - this.add('cant', this.effectState.target, 'ability: Damp', effect, '[of] ' + target); - return false; - } - }, - onAnyDamage(damage, target, source, effect) { - if (effect && effect.name === 'Aftermath') { - return false; - } - }, - isBreakable: true, - name: "Damp", - rating: 0.5, - num: 6, - }, - regenerator: { - onSwitchOut(pokemon) { - if (!pokemon.volatiles['healblock']) { - pokemon.heal(pokemon.baseMaxhp / 3); - } - }, - name: "Regenerator", - rating: 4.5, - num: 144, - }, - surgesurfer: { - shortDesc: "If Electric Terrain is active, this Pokémon's Speed is doubled.", - onModifySpe(spe) { - for (const target of this.getAllActive()) { - if (target.hasAbility('cloudnine')) { - this.debug('Cloud Nine prevents Speed increase'); - return; - } - } - if (this.field.isTerrain('electricterrain')) { - return this.chainModify(2); - } - }, - name: "Surge Surfer", - rating: 2.5, - num: 207, - }, - quarkdrive: { - onStart(pokemon) { - this.singleEvent('TerrainChange', this.effect, this.effectState, pokemon); - }, - onTerrainChange(pokemon) { - if (pokemon.transformed) return; - if (this.field.isTerrain('electricterrain')) { - pokemon.addVolatile('quarkdrive'); - } else if (!pokemon.volatiles['quarkdrive']?.fromBooster) { - pokemon.removeVolatile('quarkdrive'); - } - }, - onEnd(pokemon) { - delete pokemon.volatiles['quarkdrive']; - this.add('-end', pokemon, 'Quark Drive', '[silent]'); - }, - condition: { - noCopy: true, - onStart(pokemon, source, effect) { - if (effect?.id === 'boosterenergy') { - this.effectState.fromBooster = true; - this.add('-activate', pokemon, 'ability: Quark Drive', '[fromitem]'); - } else { - this.add('-activate', pokemon, 'ability: Quark Drive'); - } - this.effectState.bestStat = pokemon.getBestStat(false, true); - this.add('-start', pokemon, 'quarkdrive' + this.effectState.bestStat); - }, - onModifyAtkPriority: 5, - onModifyAtk(atk, source, target, move) { - if (this.effectState.bestStat !== 'atk' || source.volatiles['cloudnine'] || source.ignoringAbility()) return; - this.debug('Quark Drive atk boost'); - return this.chainModify([5325, 4096]); - }, - onModifyDefPriority: 6, - onModifyDef(def, target, source, move) { - if (this.effectState.bestStat !== 'def' || target.volatiles['cloudnine'] || target.ignoringAbility()) return; - this.debug('Quark Drive def boost'); - return this.chainModify([5325, 4096]); - }, - onModifySpAPriority: 5, - onModifySpA(relayVar, source, target, move) { - if (this.effectState.bestStat !== 'spa' || source.volatiles['cloudnine'] || source.ignoringAbility()) return; - this.debug('Quark Drive spa boost'); - return this.chainModify([5325, 4096]); - }, - onModifySpDPriority: 6, - onModifySpD(relayVar, target, source, move) { - if (this.effectState.bestStat !== 'spd' || target.volatiles['cloudnine'] || target.ignoringAbility()) return; - this.debug('Quark Drive spd boost'); - return this.chainModify([5325, 4096]); - }, - onModifySpe(spe, pokemon) { - if (this.effectState.bestStat !== 'spe' || pokemon.volatiles['cloudnine'] || pokemon.ignoringAbility()) return; - this.debug('Quark Drive spe boost'); - return this.chainModify(1.5); - }, - onEnd(pokemon) { - this.add('-end', pokemon, 'Quark Drive'); - }, - }, - name: "Quark Drive", - rating: 3, - num: 282, - }, - prankster: { - // for ngas - inherit: true, - onModifyPriority(priority, pokemon, target, move) { - for (const poke of this.getAllActive()) { - if (poke.hasAbility('counteract') && poke.side.id !== pokemon.side.id && !poke.abilityState.ending) { - return; - } - } - if (move?.category === 'Status') { - move.pranksterBoosted = true; - return priority + 1; - } - }, - }, - triage: { - inherit: true, - onModifyPriority(priority, pokemon, target, move) { - // for ngas - for (const poke of this.getAllActive()) { - if (poke.hasAbility('counteract') && poke.side.id !== pokemon.side.id && !poke.abilityState.ending) { - return; - } - } - if (move?.flags['heal']) return priority + 1; - }, - shortDesc: "This Pokemon's healing moves have their priority increased by 1.", - }, - icebody: { - onWeather(target, source, effect) { - if (effect.id === 'hail' || effect.id === 'snow') { - this.heal(target.baseMaxhp / 32); - } - }, - onImmunity(type, pokemon) { - if (type === 'hail') return false; - }, - name: "Ice Body", - rating: 1, - num: 115, - }, - libero: { - onPrepareHit(source, target, move) { - if (this.effectState.libero) return; - if (move.hasBounced || - move.flags['futuremove'] || - move.sourceEffect === 'snatch') return; - const type = move.type; - if (type && type !== '???' && !source.hasItem('terashard') && - source.getTypes().join() !== type && source.setType(type)) { - this.effectState.libero = true; - this.add('-start', source, 'typechange', type, '[from] ability: Libero'); - } - }, - onSwitchIn() { - delete this.effectState.libero; - }, - name: "Libero", - rating: 4, - num: 236, - }, - protean: { - onPrepareHit(source, target, move) { - if (this.effectState.protean) return; - if (move.hasBounced || - move.flags['futuremove'] || - move.sourceEffect === 'snatch') return; - const type = move.type; - if (type && type !== '???' && !source.hasItem('terashard') && - source.getTypes().join() !== type && source.setType(type)) { - this.effectState.protean = true; - this.add('-start', source, 'typechange', type, '[from] ability: Protean'); - } - }, - onSwitchIn(pokemon) { - delete this.effectState.protean; - }, - name: "Protean", - rating: 4, - num: 168, - }, - adaptability: { - onModifyMove(move, pokemon) { - if (move.type === pokemon.teraType && pokemon.baseSpecies.types.includes(pokemon.teraType) && - pokemon.hasItem('terashard')) { - move.stab = 2.25; - } else { - move.stab = 2; - } - }, - name: "Adaptability", - rating: 4, - num: 91, - }, -}; diff --git a/data/mods/vaporemons/conditions.ts b/data/mods/vaporemons/conditions.ts deleted file mode 100644 index 314209dfb936..000000000000 --- a/data/mods/vaporemons/conditions.ts +++ /dev/null @@ -1,33 +0,0 @@ -export const Conditions: {[k: string]: ConditionData} = { - partiallytrapped: { - name: 'partiallytrapped', - duration: 5, - durationCallback(target, source) { - if (source?.hasItem('gripclaw')) return 8; - return this.random(5, 7); - }, - onStart(pokemon, source) { - this.add('-activate', pokemon, 'move: ' + this.effectState.sourceEffect, '[of] ' + source); - this.effectState.boundDivisor = source.hasItem('bindingband') ? 8 : 8; - }, - onResidualOrder: 13, - onResidual(pokemon) { - const source = this.effectState.source; - // G-Max Centiferno and G-Max Sandblast continue even after the user leaves the field - const gmaxEffect = ['gmaxcentiferno', 'gmaxsandblast'].includes(this.effectState.sourceEffect.id); - if (source && (!source.isActive || source.hp <= 0 || !source.activeTurns) && !gmaxEffect) { - delete pokemon.volatiles['partiallytrapped']; - this.add('-end', pokemon, this.effectState.sourceEffect, '[partiallytrapped]', '[silent]'); - return; - } - this.damage(pokemon.baseMaxhp / this.effectState.boundDivisor); - }, - onEnd(pokemon) { - this.add('-end', pokemon, this.effectState.sourceEffect, '[partiallytrapped]'); - }, - onTrapPokemon(pokemon) { - const gmaxEffect = ['gmaxcentiferno', 'gmaxsandblast'].includes(this.effectState.sourceEffect.id); - if (this.effectState.source?.isActive || gmaxEffect) pokemon.tryTrap(); - }, - }, -}; diff --git a/data/mods/vaporemons/formats-data.ts b/data/mods/vaporemons/formats-data.ts deleted file mode 100644 index 25498a75e8e7..000000000000 --- a/data/mods/vaporemons/formats-data.ts +++ /dev/null @@ -1,2052 +0,0 @@ -export const FormatsData: {[k: string]: SpeciesFormatsData} = { - charizard: { - tier: "UU", - doublesTier: "DOU", - }, - raichu: { - tier: "RU", - doublesTier: "DOU", - }, - raichualola: { - tier: "RU", - doublesTier: "DOU", - }, - wigglytuff: { - tier: "UU", - doublesTier: "DOU", - }, - venomoth: { - tier: "RU", - doublesTier: "DOU", - }, - dugtrio: { - tier: "RU", - doublesTier: "DOU", - }, - dugtrioalola: { - tier: "RU", - doublesTier: "DOU", - }, - persian: { - tier: "RU", - doublesTier: "DOU", - }, - persianalola: { - tier: "RU", - doublesTier: "DOU", - }, - perrserker: { - tier: "UU", - doublesTier: "DOU", - }, - golduck: { - tier: "RU", - doublesTier: "DOU", - }, - primeape: { - tier: "RU", - doublesTier: "DOU", - }, - annihilape: { - tier: "Uber", - doublesTier: "DOU", - }, - arcanine: { - tier: "RU", - doublesTier: "DOU", - }, - arcaninehisui: { - tier: "UU", - doublesTier: "DOU", - }, - slowbro: { - tier: "OU", - doublesTier: "DOU", - }, - slowbrogalar: { - tier: "UU", - doublesTier: "DOU", - }, - slowking: { - tier: "UU", - doublesTier: "DOU", - }, - slowkinggalar: { - tier: "OU", - doublesTier: "DOU", - }, - magneton: { - tier: "RU", - doublesTier: "DOU", - }, - magnezone: { - tier: "OU", - doublesTier: "DOU", - }, - muk: { - tier: "UU", - doublesTier: "DOU", - }, - mukalola: { - tier: "UU", - doublesTier: "DOU", - }, - cloyster: { - tier: "RU", - doublesTier: "DOU", - }, - haunter: { - tier: "RU", - doublesTier: "DOU", - }, - gengar: { - tier: "UU", - doublesTier: "DOU", - }, - hypno: { - tier: "RU", - doublesTier: "DOU", - }, - electrode: { - tier: "RU", - doublesTier: "DOU", - }, - electrodehisui: { - tier: "RU", - doublesTier: "DOU", - }, - chansey: { - tier: "RU", - doublesTier: "DOU", - }, - blissey: { - tier: "UU", - doublesTier: "DOU", - }, - scyther: { - tier: "UU", - doublesTier: "DOU", - }, - scizor: { - tier: "UU", - doublesTier: "DOU", - }, - kleavor: { - tier: "UU", - doublesTier: "DOU", - }, - tauros: { - tier: "RU", - doublesTier: "DOU", - }, - taurospaldeacombat: { - tier: "RU", - doublesTier: "DOU", - }, - taurospaldeablaze: { - tier: "OU", - doublesTier: "DOU", - }, - taurospaldeaaqua: { - tier: "UU", - doublesTier: "DOU", - }, - gyarados: { - tier: "UU", - doublesTier: "DOU", - }, - ditto: { - tier: "RU", - doublesTier: "DOU", - }, - vaporeon: { - tier: "UU", - doublesTier: "DOU", - }, - jolteon: { - tier: "OU", - doublesTier: "DOU", - }, - flareon: { - tier: "RU", - doublesTier: "DOU", - }, - espeon: { - tier: "UU", - doublesTier: "DOU", - }, - umbreon: { - tier: "UU", - doublesTier: "DOU", - }, - leafeon: { - tier: "RU", - doublesTier: "DOU", - }, - glaceon: { - tier: "RU", - doublesTier: "DOU", - }, - sylveon: { - tier: "UU", - doublesTier: "DOU", - }, - articuno: { - tier: "RU", - doublesTier: "DOU", - }, - articunogalar: { - tier: "RU", - doublesTier: "DOU", - }, - zapdos: { - tier: "OU", - doublesTier: "DOU", - }, - zapdosgalar: { - tier: "UU", - doublesTier: "DOU", - }, - moltres: { - tier: "UU", - doublesTier: "DOU", - }, - moltresgalar: { - tier: "UU", - doublesTier: "DOU", - }, - dragonite: { - tier: "OU", - doublesTier: "DOU", - }, - mewtwo: { - tier: "Uber", - doublesTier: "DOU", - }, - mew: { - tier: "UU", - doublesTier: "DOU", - }, - typhlosion: { - tier: "RU", - doublesTier: "DOU", - }, - typhlosionhisui: { - tier: "UU", - doublesTier: "DOU", - }, - ampharos: { - tier: "RU", - doublesTier: "DOU", - }, - azumarill: { - tier: "UU", - doublesTier: "DOU", - }, - sudowoodo: { - tier: "RU", - doublesTier: "DOU", - }, - jumpluff: { - tier: "RU", - doublesTier: "DOU", - }, - sunflora: { - tier: "RU", - doublesTier: "DOU", - }, - quagsire: { - tier: "UU", - doublesTier: "DOU", - }, - clodsire: { - tier: "UU", - doublesTier: "DOU", - }, - honchkrow: { - tier: "RU", - doublesTier: "DOU", - }, - mismagius: { - tier: "RU", - doublesTier: "DOU", - }, - girafarig: { - tier: "RU", - doublesTier: "DOU", - }, - farigiraf: { - tier: "RU", - doublesTier: "DOU", - }, - forretress: { - tier: "RU", - doublesTier: "DOU", - }, - dudunsparce: { - tier: "RU", - doublesTier: "DOU", - }, - qwilfish: { - tier: "RU", - doublesTier: "DOU", - }, - overqwil: { - tier: "UU", - doublesTier: "DOU", - }, - heracross: { - tier: "RU", - doublesTier: "DOU", - }, - sneasel: { - tier: "RU", - doublesTier: "DOU", - }, - sneaselhisui: { - tier: "RU", - doublesTier: "DOU", - }, - weavile: { - tier: "UU", - doublesTier: "DOU", - }, - sneasler: { - tier: "OU", - doublesTier: "DOU", - }, - ursaring: { - tier: "RU", - doublesTier: "DOU", - }, - ursaluna: { - tier: "UU", - doublesTier: "DOU", - }, - ursalunabloodmoon: { - tier: "Uber", - doublesTier: "DOU", - }, - delibird: { - tier: "RU", - doublesTier: "DOU", - }, - houndoom: { - tier: "RU", - doublesTier: "DOU", - }, - donphan: { - tier: "UU", - doublesTier: "DOU", - }, - stantler: { - tier: "RU", - doublesTier: "DOU", - }, - wyrdeer: { - tier: "RU", - doublesTier: "DOU", - }, - tyranitar: { - tier: "UU", - doublesTier: "DOU", - }, - pelipper: { - tier: "OU", - doublesTier: "DOU", - }, - gardevoir: { - tier: "RU", - doublesTier: "DOU", - }, - gallade: { - tier: "RU", - doublesTier: "DOU", - }, - masquerain: { - tier: "RU", - doublesTier: "DOU", - }, - breloom: { - tier: "UU", - doublesTier: "DOU", - }, - slaking: { - tier: "RU", - doublesTier: "DOU", - }, - hariyama: { - tier: "UU", - doublesTier: "DOU", - }, - sableye: { - tier: "RU", - doublesTier: "DOU", - }, - medicham: { - tier: "RU", - doublesTier: "DOU", - }, - swalot: { - tier: "RU", - doublesTier: "DOU", - }, - camerupt: { - tier: "RU", - doublesTier: "DOU", - }, - torkoal: { - tier: "UU", - doublesTier: "DOU", - }, - grumpig: { - tier: "RU", - doublesTier: "DOU", - }, - cacturne: { - tier: "RU", - doublesTier: "DOU", - }, - altaria: { - tier: "RU", - doublesTier: "DOU", - }, - zangoose: { - tier: "RU", - doublesTier: "DOU", - }, - seviper: { - tier: "RU", - doublesTier: "DOU", - }, - whiscash: { - tier: "RU", - doublesTier: "DOU", - }, - banette: { - tier: "RU", - doublesTier: "DOU", - }, - tropius: { - tier: "RU", - doublesTier: "DOU", - }, - glalie: { - tier: "RU", - doublesTier: "DOU", - }, - froslass: { - tier: "UU", - doublesTier: "DOU", - }, - luvdisc: { - tier: "RU", - doublesTier: "DOU", - }, - salamence: { - tier: "UU", - doublesTier: "DOU", - }, - kyogre: { - tier: "Uber", - doublesTier: "DOU", - }, - groudon: { - tier: "Uber", - doublesTier: "DOU", - }, - rayquaza: { - tier: "Uber", - doublesTier: "DOU", - }, - staraptor: { - tier: "RU", - doublesTier: "DOU", - }, - kricketune: { - tier: "RU", - doublesTier: "DOU", - }, - luxray: { - tier: "RU", - doublesTier: "DOU", - }, - vespiquen: { - tier: "UU", - doublesTier: "DOU", - }, - pachirisu: { - tier: "RU", - doublesTier: "DOU", - }, - floatzel: { - tier: "UU", - doublesTier: "DOU", - }, - gastrodon: { - tier: "UU", - doublesTier: "DOU", - }, - drifblim: { - tier: "RU", - doublesTier: "DOU", - }, - skuntank: { - tier: "RU", - doublesTier: "DOU", - }, - bronzong: { - tier: "RU", - doublesTier: "DOU", - }, - spiritomb: { - tier: "UU", - doublesTier: "DOU", - }, - garchomp: { - tier: "UU", - doublesTier: "DOU", - }, - lucario: { - tier: "UU", - doublesTier: "DOU", - }, - hippowdon: { - tier: "UU", - doublesTier: "DOU", - }, - toxicroak: { - tier: "RU", - doublesTier: "DOU", - }, - lumineon: { - tier: "RU", - doublesTier: "DOU", - }, - abomasnow: { - tier: "RU", - doublesTier: "DOU", - }, - rotom: { - tier: "RU", - doublesTier: "DOU", - }, - rotomheat: { - tier: "UU", - doublesTier: "DOU", - }, - rotomwash: { - tier: "UU", - doublesTier: "DOU", - }, - rotomfrost: { - tier: "RU", - doublesTier: "DOU", - }, - rotomfan: { - tier: "UU", - doublesTier: "DOU", - }, - rotommow: { - tier: "RU", - doublesTier: "DOU", - }, - uxie: { - tier: "RU", - doublesTier: "DOU", - }, - mesprit: { - tier: "RU", - doublesTier: "DOU", - }, - azelf: { - tier: "UU", - doublesTier: "DOU", - }, - dialga: { - tier: "Uber", - doublesTier: "DOU", - }, - dialgaorigin: { - tier: "Uber", - doublesTier: "DOU", - }, - palkia: { - tier: "Uber", - doublesTier: "DOU", - }, - palkiaorigin: { - tier: "Uber", - doublesTier: "DOU", - }, - heatran: { - tier: "UU", - doublesTier: "DOU", - }, - giratina: { - tier: "Uber", - doublesTier: "DOU", - }, - giratinaorigin: { - tier: "Uber", - doublesTier: "DOU", - }, - cresselia: { - tier: "UU", - doublesTier: "DOU", - }, - arceus: { - tier: "Uber", - doublesTier: "DOU", - }, - samurott: { - tier: "RU", - doublesTier: "DOU", - }, - samurotthisui: { - tier: "OU", - doublesTier: "DOU", - }, - lilligant: { - tier: "RU", - doublesTier: "DOU", - }, - lilliganthisui: { - tier: "UU", - doublesTier: "DOU", - }, - basculin: { - tier: "RU", - doublesTier: "DOU", - }, - basculinbluestriped: { - tier: "RU", - doublesTier: "DOU", - }, - basculegion: { - tier: "OU", - doublesTier: "DOU", - }, - basculegionf: { - tier: "UU", - doublesTier: "DOU", - }, - krookodile: { - tier: "UU", - doublesTier: "DOU", - }, - zoroark: { - tier: "RU", - doublesTier: "DOU", - }, - zoroarkhisui: { - tier: "UU", - doublesTier: "DOU", - }, - gothitelle: { - tier: "RU", - doublesTier: "DOU", - }, - sawsbuck: { - tier: "RU", - doublesTier: "DOU", - }, - amoonguss: { - tier: "OU", - doublesTier: "DOU", - }, - alomomola: { - tier: "OU", - doublesTier: "DOU", - }, - eelektross: { - tier: "RU", - doublesTier: "DOU", - }, - haxorus: { - tier: "UU", - doublesTier: "DOU", - }, - beartic: { - tier: "RU", - doublesTier: "DOU", - }, - cryogonal: { - tier: "RU", - doublesTier: "DOU", - }, - bisharp: { - tier: "RU", - doublesTier: "DOU", - }, - kingambit: { - tier: "OU", - doublesTier: "DOU", - }, - braviary: { - tier: "RU", - doublesTier: "DOU", - }, - braviaryhisui: { - tier: "RU", - doublesTier: "DOU", - }, - hydreigon: { - tier: "UU", - doublesTier: "DOU", - }, - volcarona: { - tier: "UU", - doublesTier: "DOU", - }, - tornadus: { - tier: "RU", - doublesTier: "DOU", - }, - tornadustherian: { - tier: "OU", - doublesTier: "DOU", - }, - thundurus: { - tier: "OU", - doublesTier: "DOU", - }, - thundurustherian: { - tier: "UU", - doublesTier: "DOU", - }, - landorus: { - tier: "UU", - doublesTier: "DOU", - }, - landorustherian: { - tier: "OU", - doublesTier: "DOU", - }, - meloetta: { - tier: "UU", - doublesTier: "DOU", - }, - meloettapirouette: { - tier: "OU", - doublesTier: "DOU", - }, - chesnaught: { - tier: "UU", - doublesTier: "DOU", - }, - delphox: { - tier: "UU", - doublesTier: "DOU", - }, - greninja: { - tier: "UU", - doublesTier: "DOU", - }, - talonflame: { - tier: "RU", - doublesTier: "DOU", - }, - vivillon: { - tier: "RU", - doublesTier: "DOU", - }, - pyroar: { - tier: "UU", - doublesTier: "DOU", - }, - florges: { - tier: "UU", - doublesTier: "DOU", - }, - gogoat: { - tier: "RU", - doublesTier: "DOU", - }, - dragalge: { - tier: "UU", - doublesTier: "DOU", - }, - clawitzer: { - tier: "RU", - doublesTier: "DOU", - }, - hawlucha: { - tier: "UU", - doublesTier: "DOU", - }, - dedenne: { - tier: "RU", - doublesTier: "DOU", - }, - carbink: { - tier: "RU", - doublesTier: "DOU", - }, - goodra: { - tier: "RU", - doublesTier: "DOU", - }, - goodrahisui: { - tier: "UU", - doublesTier: "DOU", - }, - klefki: { - tier: "RU", - doublesTier: "DOU", - }, - avalugg: { - tier: "UU", - doublesTier: "DOU", - }, - avalugghisui: { - tier: "RU", - doublesTier: "DOU", - }, - noivern: { - tier: "RU", - doublesTier: "DOU", - }, - diancie: { - tier: "UU", - doublesTier: "DOU", - }, - hoopa: { - tier: "RU", - doublesTier: "DOU", - }, - hoopaunbound: { - tier: "UU", - doublesTier: "DOU", - }, - volcanion: { - tier: "UU", - doublesTier: "DOU", - }, - decidueye: { - tier: "UU", - doublesTier: "DOU", - }, - decidueyehisui: { - tier: "UU", - doublesTier: "DOU", - }, - gumshoos: { - tier: "RU", - doublesTier: "DOU", - }, - crabominable: { - tier: "OU", - doublesTier: "DOU", - }, - oricorio: { - tier: "UU", - doublesTier: "DOU", - }, - oricoriopompom: { - tier: "UU", - doublesTier: "DOU", - }, - oricoriopau: { - tier: "UU", - doublesTier: "DOU", - }, - oricoriosensu: { - tier: "UU", - doublesTier: "DOU", - }, - lycanroc: { - tier: "RU", - doublesTier: "DOU", - }, - lycanrocmidnight: { - tier: "RU", - doublesTier: "DOU", - }, - lycanrocdusk: { - tier: "UU", - doublesTier: "DOU", - }, - toxapex: { - tier: "UU", - doublesTier: "DOU", - }, - mudsdale: { - tier: "RU", - doublesTier: "DOU", - }, - lurantis: { - tier: "RU", - doublesTier: "DOU", - }, - salazzle: { - tier: "RU", - doublesTier: "DOU", - }, - tsareena: { - tier: "UU", - doublesTier: "DOU", - }, - oranguru: { - tier: "RU", - doublesTier: "DOU", - }, - passimian: { - tier: "RU", - doublesTier: "DOU", - }, - palossand: { - tier: "RU", - doublesTier: "DOU", - }, - komala: { - tier: "RU", - doublesTier: "DOU", - }, - mimikyu: { - tier: "RU", - doublesTier: "DOU", - }, - bruxish: { - tier: "RU", - doublesTier: "DOU", - }, - magearna: { - tier: "OU", - doublesTier: "DOU", - }, - magearnaoriginal: { - tier: "OU", - doublesTier: "DOU", - }, - rillaboom: { - tier: "UU", - doublesTier: "DOU", - }, - cinderace: { - tier: "OU", - doublesTier: "DOU", - }, - inteleon: { - tier: "UU", - doublesTier: "DOU", - }, - greedent: { - tier: "RU", - doublesTier: "DOU", - }, - corviknight: { - tier: "OU", - doublesTier: "DOU", - }, - drednaw: { - tier: "RU", - doublesTier: "DOU", - }, - coalossal: { - tier: "RU", - doublesTier: "DOU", - }, - flapple: { - tier: "RU", - doublesTier: "DOU", - }, - appletun: { - tier: "RU", - doublesTier: "DOU", - }, - dipplin: { - tier: "RU", - doublesTier: "DOU", - }, - sandaconda: { - tier: "RU", - doublesTier: "DOU", - }, - barraskewda: { - tier: "UU", - doublesTier: "DOU", - }, - toxtricity: { - tier: "RU", - doublesTier: "DOU", - }, - toxtricitylowkey: { - tier: "RU", - doublesTier: "DOU", - }, - polteageist: { - tier: "UU", - doublesTier: "DOU", - }, - hatterene: { - tier: "UU", - doublesTier: "DOU", - }, - grimmsnarl: { - tier: "RU", - doublesTier: "DOU", - }, - falinks: { - tier: "RU", - doublesTier: "DOU", - }, - pincurchin: { - tier: "RU", - doublesTier: "DOU", - }, - frosmoth: { - tier: "RU", - doublesTier: "DOU", - }, - stonjourner: { - tier: "RU", - doublesTier: "DOU", - }, - eiscue: { - tier: "RU", - doublesTier: "DOU", - }, - indeedee: { - tier: "UU", - doublesTier: "DOU", - }, - indeedeef: { - tier: "RU", - doublesTier: "DOU", - }, - copperajah: { - tier: "RU", - doublesTier: "DOU", - }, - dragapult: { - tier: "OU", - doublesTier: "DOU", - }, - zacian: { - tier: "Uber", - doublesTier: "DOU", - }, - zaciancrowned: { - tier: "Uber", - doublesTier: "DOU", - }, - zamazenta: { - tier: "UU", - doublesTier: "DOU", - }, - zamazentacrowned: { - tier: "Uber", - doublesTier: "DOU", - }, - eternatus: { - tier: "Uber", - doublesTier: "DOU", - }, - urshifu: { - tier: "Uber", - doublesTier: "DOU", - }, - urshifurapidstrike: { - tier: "Uber", - doublesTier: "DOU", - }, - zarude: { - tier: "RU", - doublesTier: "DOU", - }, - regieleki: { - tier: "RU", - doublesTier: "DOU", - }, - regidrago: { - tier: "UU", - doublesTier: "DOU", - }, - glastrier: { - tier: "RU", - doublesTier: "DOU", - }, - spectrier: { - tier: "Uber", - doublesTier: "DOU", - }, - calyrex: { - tier: "RU", - doublesTier: "DOU", - }, - calyrexice: { - tier: "Uber", - doublesTier: "DOU", - }, - calyrexshadow: { - tier: "Uber", - doublesTier: "DOU", - }, - enamorus: { - tier: "OU", - doublesTier: "DOU", - }, - enamorustherian: { - tier: "UU", - doublesTier: "DOU", - }, - meowscarada: { - tier: "UU", - doublesTier: "DOU", - }, - skeledirge: { - tier: "UU", - doublesTier: "DOU", - }, - quaquaval: { - tier: "UU", - doublesTier: "DOU", - }, - oinkologne: { - tier: "RU", - doublesTier: "DOU", - }, - oinkolognef: { - tier: "RU", - doublesTier: "DOU", - }, - spidops: { - tier: "UU", - doublesTier: "DOU", - }, - lokix: { - tier: "UU", - doublesTier: "DOU", - }, - pawmot: { - tier: "UU", - doublesTier: "DOU", - }, - maushold: { - tier: "UU", - doublesTier: "DOU", - }, - dachsbun: { - tier: "RU", - doublesTier: "DOU", - }, - arboliva: { - tier: "UU", - doublesTier: "DOU", - }, - squawkabilly: { - tier: "RU", - doublesTier: "DOU", - }, - squawkabillyblue: { - tier: "RU", - doublesTier: "DOU", - }, - squawkabillyyellow: { - tier: "RU", - doublesTier: "DOU", - }, - squawkabillywhite: { - tier: "RU", - doublesTier: "DOU", - }, - garganacl: { - tier: "OU", - doublesTier: "DOU", - }, - armarouge: { - tier: "UU", - doublesTier: "DOU", - }, - ceruledge: { - tier: "UU", - doublesTier: "DOU", - }, - bellibolt: { - tier: "UU", - doublesTier: "DOU", - }, - kilowattrel: { - tier: "RU", - doublesTier: "DOU", - }, - mabosstiff: { - tier: "RU", - doublesTier: "DOU", - }, - grafaiai: { - tier: "RU", - doublesTier: "DOU", - }, - brambleghast: { - tier: "UU", - doublesTier: "DOU", - }, - toedscruel: { - tier: "UU", - doublesTier: "DOU", - }, - klawf: { - tier: "RU", - doublesTier: "DOU", - }, - scovillain: { - tier: "RU", - doublesTier: "DOU", - }, - rabsca: { - tier: "RU", - doublesTier: "DOU", - }, - espathra: { - tier: "UU", - doublesTier: "DOU", - }, - tinkaton: { - tier: "UU", - doublesTier: "DOU", - }, - wugtrio: { - tier: "RU", - doublesTier: "DOU", - }, - bombirdier: { - tier: "RU", - doublesTier: "DOU", - }, - palafin: { - tier: "UU", - doublesTier: "DOU", - }, - revavroom: { - tier: "UU", - doublesTier: "DOU", - }, - cyclizar: { - tier: "RU", - doublesTier: "DOU", - }, - orthworm: { - tier: "UU", - doublesTier: "DOU", - }, - glimmora: { - tier: "UU", - doublesTier: "DOU", - }, - houndstone: { - tier: "RU", - doublesTier: "DOU", - }, - flamigo: { - tier: "RU", - doublesTier: "DOU", - }, - cetitan: { - tier: "RU", - doublesTier: "DOU", - }, - veluza: { - tier: "RU", - doublesTier: "DOU", - }, - dondozo: { - tier: "UU", - doublesTier: "DOU", - }, - tatsugiri: { - tier: "RU", - doublesTier: "DOU", - }, - greattusk: { - tier: "OU", - doublesTier: "DOU", - }, - screamtail: { - tier: "UU", - doublesTier: "DOU", - }, - brutebonnet: { - tier: "UU", - doublesTier: "DOU", - }, - fluttermane: { - tier: "Uber", - doublesTier: "DOU", - }, - slitherwing: { - tier: "UU", - doublesTier: "DOU", - }, - sandyshocks: { - tier: "UU", - doublesTier: "DOU", - }, - irontreads: { - tier: "UU", - doublesTier: "DOU", - }, - ironbundle: { - tier: "Uber", - doublesTier: "DOU", - }, - ironhands: { - tier: "OU", - doublesTier: "DOU", - }, - ironjugulis: { - tier: "OU", - doublesTier: "DOU", - }, - ironmoth: { - tier: "OU", - doublesTier: "DOU", - }, - ironthorns: { - tier: "UU", - doublesTier: "DOU", - }, - baxcalibur: { - tier: "Uber", - doublesTier: "DOU", - }, - gholdengo: { - tier: "OU", - doublesTier: "DOU", - }, - wochien: { - tier: "UU", - doublesTier: "DOU", - }, - chienpao: { - tier: "Uber", - doublesTier: "DOU", - }, - tinglu: { - tier: "OU", - doublesTier: "DOU", - }, - chiyu: { - tier: "Uber", - doublesTier: "DOU", - }, - roaringmoon: { - tier: "OU", - doublesTier: "DOU", - }, - ironvaliant: { - tier: "OU", - doublesTier: "DOU", - }, - koraidon: { - tier: "Uber", - doublesTier: "DOU", - }, - miraidon: { - tier: "Uber", - doublesTier: "DOU", - }, - walkingwake: { - tier: "OU", - doublesTier: "DOU", - }, - ironleaves: { - tier: "UU", - doublesTier: "DOU", - }, - arbok: { - tier: "RU", - doublesTier: "DOU", - }, - sandslash: { - tier: "RU", - doublesTier: "DOU", - }, - sandslashalola: { - tier: "RU", - doublesTier: "DOU", - }, - clefable: { - tier: "UU", - doublesTier: "DOU", - }, - victreebel: { - tier: "RU", - doublesTier: "DOU", - }, - vulpix: { - tier: "RU", - doublesTier: "DOU", - }, - ninetales: { - tier: "UU", - doublesTier: "DOU", - }, - ninetalesalola: { - tier: "RU", - doublesTier: "DOU", - }, - poilwrath: { - tier: "RU", - doublesTier: "DOU", - }, - politoed: { - tier: "UU", - doublesTier: "DOU", - }, - golem: { - tier: "RU", - doublesTier: "DOU", - }, - golemalola: { - tier: "RU", - doublesTier: "DOU", - }, - weezing: { - tier: "RU", - doublesTier: "DOU", - }, - weezinggalar: { - tier: "UU", - doublesTier: "DOU", - }, - snorlax: { - tier: "UU", - doublesTier: "DOU", - }, - furret: { - tier: "RU", - doublesTier: "DOU", - }, - noctowl: { - tier: "RU", - doublesTier: "DOU", - }, - ariados: { - tier: "RU", - doublesTier: "DOU", - }, - ambipom: { - tier: "RU", - doublesTier: "DOU", - }, - yanmega: { - tier: "RU", - doublesTier: "DOU", - }, - gligar: { - tier: "RU", - doublesTier: "DOU", - }, - gliscor: { - tier: "OU", - doublesTier: "DOU", - }, - magcargo: { - tier: "RU", - doublesTier: "DOU", - }, - piloswine: { - tier: "RU", - doublesTier: "DOU", - }, - mamoswine: { - tier: "RU", - doublesTier: "DOU", - }, - mightyena: { - tier: "RU", - doublesTier: "DOU", - }, - ludicolo: { - tier: "RU", - doublesTier: "DOU", - }, - shiftry: { - tier: "RU", - doublesTier: "DOU", - }, - probopass: { - tier: "RU", - doublesTier: "DOU", - }, - volbeat: { - tier: "RU", - doublesTier: "DOU", - }, - illumise: { - tier: "RU", - doublesTier: "DOU", - }, - crawdaunt: { - tier: "UU", - doublesTier: "DOU", - }, - milotic: { - tier: "OU", - doublesTier: "DOU", - }, - dusknoir: { - tier: "RU", - doublesTier: "DOU", - }, - chimecho: { - tier: "RU", - doublesTier: "DOU", - }, - jirachi: { - tier: "UU", - doublesTier: "DOU", - }, - torterra: { - tier: "RU", - doublesTier: "DOU", - }, - infernape: { - tier: "UU", - doublesTier: "DOU", - }, - empoleon: { - tier: "UU", - doublesTier: "DOU", - }, - phione: { - tier: "RU", - doublesTier: "DOU", - }, - manaphy: { - tier: "OU", - doublesTier: "DOU", - }, - shaymin: { - tier: "OU", - doublesTier: "DOU", - }, - shayminsky: { - tier: "Uber", - doublesTier: "DOU", - }, - darkrai: { - tier: "OU", - doublesTier: "DOU", - }, - conkeldurr: { - tier: "UU", - doublesTier: "DOU", - }, - leavanny: { - tier: "RU", - doublesTier: "DOU", - }, - swanna: { - tier: "RU", - doublesTier: "DOU", - }, - chandelure: { - tier: "UU", - doublesTier: "DOU", - }, - mienshao: { - tier: "UU", - doublesTier: "DOU", - }, - mandibuzz: { - tier: "UU", - doublesTier: "DOU", - }, - trevenant: { - tier: "RU", - doublesTier: "DOU", - }, - vikavolt: { - tier: "RU", - doublesTier: "DOU", - }, - ribombee: { - tier: "UU", - doublesTier: "DOU", - }, - kommoo: { - tier: "UU", - doublesTier: "DOU", - }, - cramorant: { - tier: "RU", - doublesTier: "DOU", - }, - morpeko: { - tier: "RU", - doublesTier: "DOU", - }, - sinistcha: { - tier: "UU", - doublesTier: "DOU", - }, - okidogi: { - tier: "UU", - doublesTier: "DOU", - }, - munkidori: { - tier: "UUBL", - doublesTier: "DOU", - }, - fezandipiti: { - tier: "UU", - doublesTier: "DOU", - }, - ogerpon: { - tier: "UU", - doublesTier: "DOU", - }, - ogerponhearthflame: { - tier: "OU", - doublesTier: "DOU", - }, - ogerponcornerstone: { - tier: "UU", - doublesTier: "DOU", - }, - ogerponwellspring: { - tier: "OU", - doublesTier: "DOU", - }, - qwilfishhisui: { - tier: "RU", - doublesTier: "DOU", - }, - hattrem: { - tier: "NFE", - doublesTier: "DOU", - }, - gabite: { - tier: "NFE", - doublesTier: "DOU", - }, - gurdurr: { - tier: "NFE", - doublesTier: "DOU", - }, - misdreavus: { - tier: "NFE", - doublesTier: "DOU", - }, - naclstack: { - tier: "NFE", - doublesTier: "DOU", - }, - pikachu: { - tier: "RU", - doublesTier: "DOU", - }, - quaxwell: { - tier: "NFE", - doublesTier: "DOU", - }, - thwackey: { - tier: "NFE", - doublesTier: "DOU", - }, - poliwrath: { - tier: "RU", - doublesTier: "DOU", - }, - tinkatuff: { - tier: "NFE", - doublesTier: "DOU", - }, - terapagos: { - tier: "OU", - }, - hydrapple: { - tier: "OU", - }, - ragingbolt: { - tier: "OU", - }, - gougingfire: { - tier: "OU", - }, - archaludon: { - tier: "OU", - }, - ironcrown: { - tier: "OU", - }, - ironboulder: { - tier: "OU", - }, - venusaur: { - tier: "OU", - doublesTier: "DOU", - }, - blastoise: { - tier: "OU", - doublesTier: "DOU", - }, - vileplume: { - tier: "OU", - doublesTier: "DOU", - }, - bellossom: { - tier: "OU", - doublesTier: "DOU", - }, - tentacruel: { - tier: "OU", - doublesTier: "DOU", - }, - dodrio: { - tier: "OU", - doublesTier: "DOU", - }, - dewgong: { - tier: "OU", - doublesTier: "DOU", - }, - exeggutor: { - tier: "OU", - doublesTier: "DOU", - }, - hitmonlee: { - tier: "OU", - doublesTier: "DOU", - }, - hitmonchan: { - tier: "OU", - doublesTier: "DOU", - }, - hitmontop: { - tier: "OU", - doublesTier: "DOU", - }, - rhydon: { - tier: "RU", - doublesTier: "DOU", - }, - rhyperior: { - tier: "OU", - doublesTier: "DOU", - }, - kingdra: { - tier: "OU", - doublesTier: "DOU", - }, - electivire: { - tier: "OU", - doublesTier: "DOU", - }, - magmortar: { - tier: "OU", - doublesTier: "DOU", - }, - lapras: { - tier: "OU", - doublesTier: "DOU", - }, - porygon2: { - tier: "RU", - doublesTier: "DOU", - }, - porygonz: { - tier: "OU", - doublesTier: "DOU", - }, - meganium: { - tier: "OU", - doublesTier: "DOU", - }, - feraligatr: { - tier: "OU", - doublesTier: "DOU", - }, - lanturn: { - tier: "OU", - doublesTier: "DOU", - }, - granbull: { - tier: "OU", - doublesTier: "DOU", - }, - skarmory: { - tier: "OU", - doublesTier: "DOU", - }, - smeargle: { - tier: "OU", - doublesTier: "DOU", - }, - raikou: { - tier: "OU", - doublesTier: "DOU", - }, - entei: { - tier: "OU", - doublesTier: "DOU", - }, - suicune: { - tier: "OU", - doublesTier: "DOU", - }, - lugia: { - tier: "Uber", - doublesTier: "DOU", - }, - hooh: { - tier: "Uber", - doublesTier: "DOU", - }, - sceptile: { - tier: "OU", - doublesTier: "DOU", - }, - combusken: { - tier: "RU", - doublesTier: "DOU", - }, - blaziken: { - tier: "OU", - doublesTier: "DOU", - }, - swampert: { - tier: "OU", - doublesTier: "DOU", - }, - plusle: { - tier: "OU", - doublesTier: "DOU", - }, - minun: { - tier: "OU", - doublesTier: "DOU", - }, - flygon: { - tier: "OU", - doublesTier: "DOU", - }, - metagross: { - tier: "OU", - doublesTier: "DOU", - }, - regirock: { - tier: "OU", - doublesTier: "DOU", - }, - regice: { - tier: "OU", - doublesTier: "DOU", - }, - registeel: { - tier: "OU", - doublesTier: "DOU", - }, - latias: { - tier: "OU", - doublesTier: "DOU", - }, - latios: { - tier: "OU", - doublesTier: "DOU", - }, - deoxys: { - tier: "Uber", - doublesTier: "DOU", - }, - deoxysattack: { - tier: "Uber", - doublesTier: "DOU", - }, - deoxysdefense: { - tier: "OU", - doublesTier: "DOU", - }, - deoxysspeed: { - tier: "OU", - doublesTier: "DOU", - }, - rampardos: { - tier: "OU", - doublesTier: "DOU", - }, - bastiodon: { - tier: "OU", - doublesTier: "DOU", - }, - serperior: { - tier: "OU", - doublesTier: "DOU", - }, - emboar: { - tier: "OU", - doublesTier: "DOU", - }, - zebstrika: { - tier: "OU", - doublesTier: "DOU", - }, - excadrill: { - tier: "OU", - doublesTier: "DOU", - }, - whimsicott: { - tier: "OU", - doublesTier: "DOU", - }, - scrafty: { - tier: "OU", - doublesTier: "DOU", - }, - cinccino: { - tier: "OU", - doublesTier: "DOU", - }, - reuniclus: { - tier: "OU", - doublesTier: "DOU", - }, - galvantula: { - tier: "OU", - doublesTier: "DOU", - }, - golurk: { - tier: "OU", - doublesTier: "DOU", - }, - cobalion: { - tier: "OU", - doublesTier: "DOU", - }, - terrakion: { - tier: "OU", - doublesTier: "DOU", - }, - virizion: { - tier: "OU", - doublesTier: "DOU", - }, - reshiram: { - tier: "Uber", - doublesTier: "DOU", - }, - zekrom: { - tier: "Uber", - doublesTier: "DOU", - }, - kyurem: { - tier: "OU", - doublesTier: "DOU", - }, - kyuremblack: { - tier: "Uber", - doublesTier: "DOU", - }, - kyuremwhite: { - tier: "Uber", - doublesTier: "DOU", - }, - keldeo: { - tier: "OU", - doublesTier: "DOU", - }, - meowstic: { - tier: "OU", - doublesTier: "DOU", - }, - meowsticf: { - tier: "OU", - doublesTier: "DOU", - }, - malamar: { - tier: "OU", - doublesTier: "DOU", - }, - incineroar: { - tier: "OU", - doublesTier: "DOU", - }, - primarina: { - tier: "OU", - doublesTier: "DOU", - }, - toucannon: { - tier: "OU", - doublesTier: "DOU", - }, - araquanid: { - tier: "OU", - doublesTier: "DOU", - }, - comfey: { - tier: "OU", - doublesTier: "DOU", - }, - minior: { - tier: "OU", - doublesTier: "DOU", - }, - cosmog: { - tier: "NFE", - doublesTier: "DOU", - }, - cosmoem: { - tier: "NFE", - doublesTier: "DOU", - }, - solgaleo: { - tier: "Uber", - doublesTier: "DOU", - }, - lunala: { - tier: "Uber", - doublesTier: "DOU", - }, - necrozma: { - tier: "OU", - doublesTier: "DOU", - }, - necrozmaduskmane: { - tier: "Uber", - doublesTier: "DOU", - }, - necrozmadawnwings: { - tier: "Uber", - doublesTier: "DOU", - }, - alcremie: { - tier: "OU", - doublesTier: "DOU", - }, - duraludon: { - tier: "RU", - doublesTier: "DOU", - }, - exeggutoralola: { - tier: "OU", - doublesTier: "DOU", - }, - revavroomcaph: { - tier: "Illegal", - doublesTier: "(DUU)", - natDexTier: "RU", - }, - revavroomnavi: { - tier: "Illegal", - doublesTier: "(DUU)", - natDexTier: "RU", - }, - revavroomruchbah: { - tier: "Illegal", - doublesTier: "(DUU)", - natDexTier: "RU", - }, - revavroomschedar: { - tier: "Illegal", - doublesTier: "(DUU)", - natDexTier: "RU", - }, - revavroomsegin: { - tier: "Illegal", - doublesTier: "(DUU)", - natDexTier: "RU", - }, -}; diff --git a/data/mods/vaporemons/items.ts b/data/mods/vaporemons/items.ts deleted file mode 100644 index db874970480d..000000000000 --- a/data/mods/vaporemons/items.ts +++ /dev/null @@ -1,1204 +0,0 @@ -export const Items: {[itemid: string]: ModdedItemData} = { - bigroot: { - name: "Big Root", - spritenum: 29, - fling: { - basePower: 10, - }, - onBasePowerPriority: 23, - onBasePower(basePower, attacker, defender, move) { - if (move.flags['heal'] || move.id === 'bitterblade') { - this.debug('Big Root boost'); - return this.chainModify([5324, 4096]); - } - }, - onTryHealPriority: 1, - onTryHeal(damage, target, source, effect) { - const heals = ['leechseed', 'ingrain', 'aquaring', 'strengthsap', 'healingstones', 'rekindleheal']; - if (heals.includes(effect.id)) { - return this.chainModify([5324, 4096]); - } - }, - num: 296, - desc: "Damaging draining moves deal 30% more damage, status draining moves heal 30% more.", - gen: 4, - }, - terashard: { - name: "Tera Shard", - spritenum: 658, - onTakeItem: false, - onStart(pokemon) { - const type = pokemon.teraType; - this.add('-item', pokemon, 'Tera Shard'); - this.add('-anim', pokemon, "Cosmic Power", pokemon); - if (type && type !== '???') { - if (!pokemon.setType(type)) return; - this.add('-start', pokemon, 'typechange', type, '[from] item: Tera Shard'); - } - this.add('-message', `${pokemon.name}'s Tera Shard changed its type!`); - }, - onBasePowerPriority: 30, - onBasePower(basePower, attacker, defender, move) { - if (move.id === 'terablast') { - return this.chainModify(1.25); - } - }, - onTryHit(pokemon, target, move) { - if (move.id === 'soak' || move.id === 'magicpowder') { - this.add('-immune', pokemon, '[from] item: Tera Shard'); - return null; - } - }, - num: -1000, - gen: 9, - desc: "Holder becomes its Tera Type on switch-in.", - }, - seginstarshard: { - name: "Segin Star Shard", - spritenum: 646, - fling: { - basePower: 20, - status: 'slp', - }, - onTakeItem(item, pokemon, source) { - if (source?.baseSpecies.num === 966 || pokemon.baseSpecies.num === 966) { - return false; - } - return true; - }, - onSwitchIn(pokemon) { - if (pokemon.baseSpecies.baseSpecies === 'Revavroom') { - this.add('-item', pokemon, 'Segin Star Shard'); - this.add('-anim', pokemon, "Cosmic Power", pokemon); - this.add('-message', `${pokemon.name}'s Segin Star Shard changed its type!`); - } - }, - onBasePowerPriority: 15, - onBasePower(basePower, user, target, move) { - if (user.baseSpecies.num === 966 && ['Dark', 'Steel', 'Poison'].includes(move.type)) { - return this.chainModify([4915, 4096]); - } - }, - onTryHit(pokemon, target, move) { - if (move.id === 'soak' || move.id === 'magicpowder') { - this.add('-immune', pokemon, '[from] item: Segin Star Shard'); - return null; - } - }, - forcedForme: "Revavroom-Segin", - itemUser: ["Revavroom"], - num: -1001, - gen: 9, - desc: "Revavroom: Becomes Dark-type, Ability: Intimidate, 1.2x Dark/Poison/Steel power.", - }, - schedarstarshard: { - name: "Schedar Star Shard", - spritenum: 632, - fling: { - basePower: 20, - status: 'brn', - }, - onTakeItem(item, pokemon, source) { - if (source?.baseSpecies.num === 966 || pokemon.baseSpecies.num === 966) { - return false; - } - return true; - }, - onSwitchIn(pokemon) { - if (pokemon.baseSpecies.baseSpecies === 'Revavroom') { - this.add('-item', pokemon, 'Schedar Star Shard'); - this.add('-anim', pokemon, "Cosmic Power", pokemon); - this.add('-message', `${pokemon.name}'s Schedar Star Shard changed its type!`); - } - }, - onBasePowerPriority: 15, - onBasePower(basePower, user, target, move) { - if (user.baseSpecies.num === 966 && ['Fire', 'Steel', 'Poison'].includes(move.type)) { - return this.chainModify([4915, 4096]); - } - }, - onTryHit(pokemon, target, move) { - if (move.id === 'soak' || move.id === 'magicpowder') { - this.add('-immune', pokemon, '[from] item: Schedar Star Shard'); - return null; - } - }, - forcedForme: "Revavroom-Schedar", - itemUser: ["Revavroom"], - num: -1002, - gen: 9, - desc: "Revavroom: Becomes Fire-type, Ability: Speed Boost, 1.2x Fire/Poison/Steel power.", - }, - navistarshard: { - name: "Navi Star Shard", - spritenum: 638, - fling: { - basePower: 20, - status: 'psn', - }, - onTakeItem(item, pokemon, source) { - if (source?.baseSpecies.num === 966 || pokemon.baseSpecies.num === 966) { - return false; - } - return true; - }, - onSwitchIn(pokemon) { - if (pokemon.baseSpecies.baseSpecies === 'Revavroom') { - this.add('-item', pokemon, 'Navi Star Shard'); - this.add('-anim', pokemon, "Cosmic Power", pokemon); - this.add('-message', `${pokemon.name}'s Navi Star Shard changed its type!`); - } - }, - onBasePowerPriority: 15, - onBasePower(basePower, user, target, move) { - if (user.baseSpecies.num === 966 && ['Steel', 'Poison'].includes(move.type)) { - return this.chainModify([4915, 4096]); - } - }, - onTryHit(pokemon, target, move) { - if (move.id === 'soak' || move.id === 'magicpowder') { - this.add('-immune', pokemon, '[from] item: Navi Star Shard'); - return null; - } - }, - forcedForme: "Revavroom-Navi", - itemUser: ["Revavroom"], - num: -1003, - gen: 9, - desc: "Revavroom: Becomes Poison-type, Ability: Toxic Debris, 1.2x Poison/Steel power.", - }, - ruchbahstarshard: { - name: "Ruchbah Star Shard", - spritenum: 648, - fling: { - basePower: 20, - volatileStatus: 'confusion', - }, - onTakeItem(item, pokemon, source) { - if (source?.baseSpecies.num === 966 || pokemon.baseSpecies.num === 966) { - return false; - } - return true; - }, - onSwitchIn(pokemon) { - if (pokemon.baseSpecies.baseSpecies === 'Revavroom') { - this.add('-item', pokemon, 'Ruchbah Star Shard'); - this.add('-anim', pokemon, "Cosmic Power", pokemon); - this.add('-message', `${pokemon.name}'s Ruchbah Star Shard changed its type!`); - } - }, - onBasePowerPriority: 15, - onBasePower(basePower, user, target, move) { - if (user.baseSpecies.num === 966 && ['Fairy', 'Steel', 'Poison'].includes(move.type)) { - return this.chainModify([4915, 4096]); - } - }, - onTryHit(pokemon, target, move) { - if (move.id === 'soak' || move.id === 'magicpowder') { - this.add('-immune', pokemon, '[from] item: Ruchbah Star Shard'); - return null; - } - }, - forcedForme: "Revavroom-Ruchbah", - itemUser: ["Revavroom"], - num: -1004, - gen: 9, - desc: "Revavroom: Becomes Fairy-type, Ability: Misty Surge, 1.2x Fairy/Poison/Steel power.", - }, - caphstarshard: { - name: "Caph Star Shard", - spritenum: 637, - fling: { - basePower: 20, - status: 'par', - }, - onTakeItem(item, pokemon, source) { - if (source?.baseSpecies.num === 966 || pokemon.baseSpecies.num === 966) { - return false; - } - return true; - }, - onSwitchIn(pokemon) { - if (pokemon.baseSpecies.baseSpecies === 'Revavroom') { - this.add('-item', pokemon, 'Caph Star Shard'); - this.add('-anim', pokemon, "Cosmic Power", pokemon); - this.add('-message', `${pokemon.name}'s Caph Star Shard changed its type!`); - } - }, - onBasePowerPriority: 15, - onBasePower(basePower, user, target, move) { - if (user.baseSpecies.num === 966 && ['Fighting', 'Steel', 'Poison'].includes(move.type)) { - return this.chainModify([4915, 4096]); - } - }, - onTryHit(pokemon, target, move) { - if (move.id === 'soak' || move.id === 'magicpowder') { - this.add('-immune', pokemon, '[from] item: Caph Star Shard'); - return null; - } - }, - forcedForme: "Revavroom-Caph", - itemUser: ["Revavroom"], - num: -1005, - gen: 9, - desc: "Revavroom: Becomes Fighting-type, Ability: Stamina, 1.2x Fighting/Poison/Steel power.", - }, - tuffytuff: { - name: "Tuffy-Tuff", - spritenum: 692, - fling: { - basePower: 10, - }, - onTakeItem(item, source) { - if (['Igglybuff', 'Jigglypuff', 'Wigglytuff'].includes((source.baseSpecies.baseSpecies))) return false; - return true; - }, - onModifyDefPriority: 1, - onModifyDef(def, pokemon) { - if (['Igglybuff', 'Jigglypuff', 'Wigglytuff'].includes((pokemon.baseSpecies.baseSpecies))) { - return this.chainModify(2); - } - }, - onModifySpDPriority: 1, - onModifySpD(spd, pokemon) { - if (['Igglybuff', 'Jigglypuff', 'Wigglytuff'].includes((pokemon.baseSpecies.baseSpecies))) { - return this.chainModify(2); - } - }, - desc: "Igglybuff line: 2x Defense & Special Defense.", - itemUser: ["Igglybuff", "Jigglypuff", "Wigglytuff"], - num: -1006, - gen: 9, - }, - blunderpolicy: { - name: "Blunder Policy", - spritenum: 716, - fling: { - basePower: 80, - }, - onUpdate(pokemon) { - if (pokemon.moveThisTurnResult === false) { - this.boost({spe: 2}); - pokemon.useItem(); - } - }, - // Item activation located in scripts.js - num: 1121, - gen: 8, - desc: "+2 Speed if the holder's move fails. Single use.", - }, - punchingglove: { - name: "Punching Glove", - spritenum: 0, // TODO - onBasePowerPriority: 23, - onBasePower(basePower, attacker, defender, move) { - if (move.flags['punch']) { - this.debug('Punching Glove boost'); - return this.chainModify([4915, 4096]); - } - }, - onModifyMovePriority: 1, - onModifyMove(move) { - if (move.flags['punch']) delete move.flags['contact']; - }, - desc: "Holder's punch-based attacks have 1.2x power and do not make contact.", - num: 1884, - gen: 9, - }, - razorclaw: { - name: "Razor Claw", - spritenum: 382, - fling: { - basePower: 80, - }, - onBasePowerPriority: 23, - onBasePower(basePower, attacker, defender, move) { - if (move.flags['slicing']) { - this.debug('Razor Claw boost'); - return this.chainModify([4915, 4096]); - } - }, - onModifyMovePriority: 1, - onModifyMove(move) { - if (move.flags['slicing']) delete move.flags['contact']; - }, - desc: "Holder's slicing-based attacks have 1.2x power and do not make contact.", - num: 326, - gen: 4, - }, - razorfang: { - name: "Razor Fang", - spritenum: 383, - fling: { - basePower: 30, - volatileStatus: 'flinch', - }, - onBasePowerPriority: 23, - onBasePower(basePower, attacker, defender, move) { - if (move.flags['bite']) { - this.debug('Razor Fang boost'); - return this.chainModify([4915, 4096]); - } - }, - onModifyMovePriority: 1, - onModifyMove(move) { - if (move.flags['bite']) delete move.flags['contact']; - }, - desc: "Holder's biting-based attacks have 1.2x power and do not make contact.", - num: 327, - gen: 4, - isNonstandard: null, - }, - baseballbat: { - name: "Baseball Bat", - spritenum: 465, - onBasePowerPriority: 23, - onBasePower(basePower, attacker, defender, move) { - if (move.flags['contact']) { - this.debug('Baseball Bat boost'); - return this.chainModify([5120, 4096]); - } - }, - onSourceModifyDamage(damage, source, target, move) { - if (move.flags['bullet']) { - const hitSub = target.volatiles['substitute'] && !move.flags['bypasssub'] && !(move.infiltrates && this.gen >= 6); - if (hitSub) return; - - if (target.useItem()) { - this.debug('-50% reduction'); - this.add('-enditem', target, this.effect, '[weaken]'); - return this.chainModify(0.5); - } - } - }, - desc: "Holder's contact moves have 1.25x power. If hit by bullet/bomb move, it deals 50% damage and the item breaks.", - num: -1007, - gen: 9, - }, - walkietalkie: { - name: "Walkie-Talkie", - spritenum: 713, - fling: { - basePower: 20, - }, - onBeforeMovePriority: 0.5, - onBeforeMove(attacker, defender, move) { - if (!this.canSwitch(attacker.side) || attacker.forceSwitchFlag || attacker.switchFlag || !move.flags['sound']) return; - this.effectState.move = this.dex.moves.get(move.id); - attacker.deductPP(move.id, 1); - this.add('-activate', attacker, 'item: Walkie-Talkie'); - this.add('-message', `${attacker.name} is calling in one of its allies!`); - attacker.switchFlag = true; - return null; - }, - desc: "(Mostly non-functional placeholder) Before using a sound move, holder switches. Switch-in uses move if it's holding a Walkei-Talkie.", - num: -1008, - gen: 8, - }, - airfreshener: { - name: "Air Freshener", - spritenum: 713, - fling: { - basePower: 30, - }, - // effect coded into the moves themselves - desc: "Holder's wind-based attacks heal the party's status.", - num: -1009, - gen: 9, - }, - dancingshoes: { - name: "Dancing Shoes", - spritenum: 715, - onSwitchIn(pokemon) { - if (pokemon.isActive && pokemon.baseSpecies.name === 'Meloetta') { - pokemon.formeChange('Meloetta-Pirouette'); - if (pokemon.hasAbility('trace')) { - pokemon.setAbility('noguard', pokemon, true); - this.add('-activate', pokemon, 'ability: No Guard'); - } - } - }, - onTryHitPriority: 1, - onTryHit(target, source, move) { - if (target !== source && move.flags['sound']) { - if (!this.boost({atk: 1})) { - this.add('-immune', target, '[from] item: Dancing Shoes'); - } - return null; - } - }, - onAllyTryHitSide(target, source, move) { - if (target === this.effectState.target || target.side !== source.side) return; - if (move.flags['sound']) { - this.boost({atk: 1}, this.effectState.target); - } - }, - onTakeItem(item, source) { - if (source.baseSpecies.baseSpecies === 'Meloetta') return false; - return true; - }, - itemUser: ["Meloetta"], - num: -1010, - gen: 9, - desc: "If held by Meloetta: Pirouette Forme on entry, hazard immunity, Sound immunity, +1 Attack when hit by Sound.", - }, - charizarditeshardx: { - name: "Charizardite Shard X", - spritenum: 585, - onTakeItem(item, source) { - if (source.baseSpecies.baseSpecies === 'Charizard') return false; - return true; - }, - onSwitchIn(pokemon) { - const type = pokemon.hpType; - if (pokemon.baseSpecies.baseSpecies === 'Charizard') { - this.add('-item', pokemon, 'Charizardite Shard X'); - this.add('-anim', pokemon, "Cosmic Power", pokemon); - if (type && type !== '???') { - if (!pokemon.setType('Dragon')) return; - this.add('-start', pokemon, 'typechange', 'Dragon', '[from] item: Charizardite Shard X'); - } - this.add('-message', `${pokemon.name}'s Charizardite Shard X changed its type!`); - pokemon.setAbility('toughclaws', pokemon, true); - this.add('-activate', pokemon, 'ability: Tough Claws'); - this.boost({atk: 1}); - } - }, - onBasePowerPriority: 15, - onBasePower(basePower, user, target, move) { - if (move && user.baseSpecies.num === 6 && ['Dragon', 'Fire'].includes(move.type)) { - return this.chainModify([4915, 4096]); - } - }, - onTryHit(pokemon, target, move) { - if (move.id === 'soak' || move.id === 'magicpowder') { - this.add('-immune', pokemon, '[from] item: Charizardite Shard X'); - return null; - } - }, - itemUser: ["Charizard"], - num: -1011, - gen: 9, - desc: "Charizard: Becomes Dragon-type, Ability: Tough Claws, +1 Atk, 1.2x Dragon/Fire power.", - }, - charizarditeshardy: { - name: "Charizardite Shard Y", - spritenum: 586, - onTakeItem(item, source) { - if (source.baseSpecies.baseSpecies === 'Charizard') return false; - return true; - }, - onSwitchIn(pokemon) { - const type = pokemon.hpType; - if (pokemon.baseSpecies.baseSpecies === 'Charizard') { - this.add('-item', pokemon, 'Charizardite Shard Y'); - this.add('-anim', pokemon, "Cosmic Power", pokemon); - if (type && type !== '???') { - if (!pokemon.setType('Fire')) return; - this.add('-start', pokemon, 'typechange', 'Fire', '[from] item: Charizardite Shard Y'); - } - this.add('-message', `${pokemon.name}'s Charizardite Shard Y changed its type!`); - pokemon.setAbility('drought', pokemon, true); - this.boost({spa: 1}); - } - }, - onBasePowerPriority: 15, - onBasePower(basePower, user, target, move) { - if (move && user.baseSpecies.num === 6 && ['Flying', 'Fire'].includes(move.type)) { - return this.chainModify([4915, 4096]); - } - }, - onTryHit(pokemon, target, move) { - if (move.id === 'soak' || move.id === 'magicpowder') { - this.add('-immune', pokemon, '[from] item: Charizardite Shard Y'); - return null; - } - }, - itemUser: ["Charizard"], - num: -1012, - gen: 9, - desc: "Charizard: Becomes Fire-type, Ability: Drought, +1 SpA, 1.2x Fire/Flying power.", - }, - oddkeystone: { - name: "Odd Keystone", - spritenum: 390, - onResidualOrder: 5, - onResidualSubOrder: 5, - onResidual(pokemon) { - if (pokemon.baseSpecies.name === 'Spiritomb') { - this.heal(pokemon.baseMaxhp / 8); - } - }, - onSourceModifyAtkPriority: 6, - onSourceModifyAtk(atk, attacker, defender, move) { - if (move.type === 'Fairy' && defender.baseSpecies.baseSpecies === 'Spiritomb') { - this.debug('Odd Keystone weaken'); - return this.chainModify(0.5); - } - }, - onSourceModifySpAPriority: 5, - onSourceModifySpA(atk, attacker, defender, move) { - if (move.type === 'Fairy' && defender.baseSpecies.baseSpecies === 'Spiritomb') { - this.debug('Odd Keystone weaken'); - return this.chainModify(0.5); - } - }, - onUpdate(pokemon) { - if (pokemon.volatiles['healblock'] && pokemon.baseSpecies.baseSpecies === 'Spiritomb') { - this.add('-activate', pokemon, 'item: Odd Keystone'); - pokemon.removeVolatile('healblock'); - this.add('-end', pokemon, 'move: Heal Block', '[from] item: Odd Keystone'); - } - }, - onHit(target, source, move) { - if (move?.volatileStatus === 'healblock' && target.baseSpecies.baseSpecies === 'Spiritomb') { - this.add('-immune', target, 'healblock', '[from] item: Odd Keystone'); - } - }, - onTryHit(pokemon, target, move) { - if (move.id === 'healblock' && pokemon.baseSpecies.baseSpecies === 'Spiritomb') { - this.add('-immune', pokemon, '[from] item: Odd Keystone'); - return null; - } - }, - onAllyTryAddVolatile(status, target, source, effect) { - if (['healblock'].includes(status.id)) { - const effectHolder = this.effectState.target; - this.add('-block', target, 'item: Odd Keystone', '[of] ' + effectHolder); - return null; - } - }, - onTakeItem(item, source) { - if (source.baseSpecies.baseSpecies === 'Spiritomb') return false; - return true; - }, - itemUser: ["Spiritomb"], - num: -1029, - gen: 8, - desc: "If held by Spiritomb: Heal 12.5% per turn, 50% damage from Fairy attacks, immune to Heal Block.", - }, - mithrilarmor: { - name: "Mithril Armor", - spritenum: 744, - fling: { - basePower: 80, - }, - onModifyDefPriority: 2, - onModifyDef(def, pokemon) { - return this.chainModify(1.2); - }, - onCriticalHit: false, - num: -1030, - gen: 8, - desc: "Holder is immune to critical hits and has 1.2x Defense.", - }, - tiedyeband: { - name: "Tie-Dye Band", - spritenum: 297, - fling: { - basePower: 30, - }, - onBasePower(basePower, pokemon, target, move) { - if (!pokemon.hasType(move.type)) { - return this.chainModify(1.3); - } else if (pokemon.hasType(move.type)) { - return this.chainModify(0.67); - } - }, - num: -1031, - gen: 8, - desc: "Holder's non-STAB moves deal 30% more damage, but its STAB moves deal 0.67x damage.", - }, - herosbubble: { - name: "Hero's Bubble", - spritenum: 390, - fling: { - basePower: 30, - }, - onModifyAtk(atk, attacker, defender, move) { - if (move.type === 'Water' && - attacker.baseSpecies.baseSpecies === 'Palafin' && - attacker.species.forme !== 'Hero') { - return this.chainModify(2); - } - }, - onModifySpA(atk, attacker, defender, move) { - if (move.type === 'Water' && - attacker.baseSpecies.baseSpecies === 'Palafin' && - attacker.species.forme !== 'Hero') { - return this.chainModify(2); - } - }, - onSourceModifyAtkPriority: 5, - onSourceModifyAtk(atk, attacker, defender, move) { - if ((move.type === 'Dark' || move.type === 'Fighting') && - defender.baseSpecies.baseSpecies === 'Palafin' && - defender.species.forme === 'Hero') { - return this.chainModify(0.5); - } - }, - onSourceModifySpAPriority: 5, - onSourceModifySpA(atk, attacker, defender, move) { - if ((move.type === 'Dark' || move.type === 'Fighting') && - defender.baseSpecies.baseSpecies === 'Palafin' && - defender.species.forme === 'Hero') { - return this.chainModify(0.5); - } - }, - itemUser: ["Palafin"], - num: -1032, - gen: 8, - desc: "If Palafin-Zero: 2x Water power. If Palafin-Hero: takes 50% damage from Dark and Fighting.", - }, - sandclock: { - name: "Sand Clock", - spritenum: 453, - fling: { - basePower: 30, - }, - onModifySpDPriority: 1, - onModifySpD(spd, pokemon) { - if (pokemon.hasType('Rock')) { - return this.chainModify(1.5); - } - }, - num: -1033, - gen: 8, - desc: "If the holder is a Rock-type, its SpD is boosted 1.5x.", - }, - snowglobe: { - name: "Snow Globe", - spritenum: 221, - fling: { - basePower: 30, - }, - onModifyDefPriority: 1, - onModifyDef(def, pokemon) { - if (pokemon.hasType('Ice')) { - return this.chainModify(1.5); - } - }, - num: -1034, - gen: 8, - desc: "If the holder is an Ice-type, its Def is boosted 1.5x.", - }, - handmirror: { - name: "Hand Mirror", - spritenum: 747, - fling: { - basePower: 30, - }, - onSourceModifyDamage(damage, source, target, move) { - if (target.hasType(source.getTypes())) { - return this.chainModify(0.66); - } - }, - num: -1035, - gen: 8, - desc: "Holder takes 2/3 damage from foes that share a type.", - }, - powerherb: { - onChargeMove(pokemon, target, move) { - if (pokemon.useItem()) { - this.debug('power herb - remove charge turn for ' + move.id); - this.attrLastMove('[still]'); - this.addMove('-anim', pokemon, move.name, target); - return false; // skip charge turn - } - }, - onUpdate(pokemon) { - if (pokemon.volatiles['mustrecharge']) { - pokemon.removeVolatile('mustrecharge'); - pokemon.useItem(); - } - }, - name: "Power Herb", - spritenum: 358, - fling: { - basePower: 10, - }, - num: 271, - gen: 4, - desc: "Holder's two-turn moves and recharge complete in one turn (except Sky Drop). Single use.", - }, - leatherbelt: { - name: "Leather Belt", - spritenum: 132, - fling: { - basePower: 10, - }, - onModifyDamage(damage, source, target, move) { - if (move && target.getMoveHitData(move).typeMod === 0) { - return this.chainModify([4915, 4096]); - } - }, - gen: 8, - desc: "Holder's neutral damaging moves deal 1.2x damage.", - }, - keeberry: { - name: "Kee Berry", - spritenum: 593, - isBerry: true, - naturalGift: { - basePower: 100, - type: "Fairy", - }, - onSourceModifyDamage(damage, source, target, move) { - if (move.category === 'Physical') { - const hitSub = target.volatiles['substitute'] && !move.flags['bypasssub'] && !(move.infiltrates && this.gen >= 6); - if (hitSub) return; - if (target.eatItem()) { - this.debug('kee activation'); - this.add('-enditem', target, this.effect, '[weaken]'); - if (!target.getMoveHitData(move).crit) { - return this.chainModify(0.67); - } - } - } - }, - onEat(pokemon) { - this.boost({def: 1}); - }, - num: 687, - gen: 6, - desc: "Raises holder's Defense by 1 stage before it is hit by a physical attack. Single use.", - }, - marangaberry: { - name: "Maranga Berry", - spritenum: 597, - isBerry: true, - naturalGift: { - basePower: 100, - type: "Dark", - }, - onSourceModifyDamage(damage, source, target, move) { - if (move.category === 'Special') { - const hitSub = target.volatiles['substitute'] && !move.flags['bypasssub'] && !(move.infiltrates && this.gen >= 6); - if (hitSub) return; - if (target.eatItem()) { - this.debug('maranga activation'); - this.add('-enditem', target, this.effect, '[weaken]'); - if (!target.getMoveHitData(move).crit) { - return this.chainModify(0.67); - } - } - } - }, - onEat(pokemon) { - this.boost({spd: 1}); - }, - num: 688, - gen: 6, - desc: "Raises holder's Sp. Defense by 1 stage before it is hit by a special attack. Single use.", - }, - bindingband: { - name: "Binding Band", - spritenum: 31, - fling: { - basePower: 60, - }, - onBasePowerPriority: 15, - onBasePower(basePower, user, target, move) { - if (target.volatiles['trapped'] || target.volatiles['partiallytrapped'] || target.volatiles['sandspit']) { - return this.chainModify(1.5); - } - }, - onSourceModifyAccuracyPriority: -2, - onSourceModifyAccuracy(accuracy, target) { - if (typeof accuracy === 'number' && - (target.volatiles['trapped'] || - target.volatiles['partiallytrapped'] || - target.volatiles['sandspit'])) { - this.debug('Binding Band boosting accuracy'); - return this.chainModify(1.5); - } - }, - // other effects removed in statuses - desc: "Against trapped targets: 1.5x move power and accuracy.", - num: 544, - gen: 5, - }, - slingshot: { - name: "Slingshot", - spritenum: 387, - fling: { - basePower: 60, - }, - onAfterMoveSecondary(target, source, move) { - if (source && source !== target && source.hp && target.hp && move && - ['uturn', 'voltswitch', 'flipturn', 'round', 'rollout', 'partingshot'].includes(move.id)) { - if (!source.isActive || !this.canSwitch(source.side) || source.forceSwitchFlag || target.forceSwitchFlag) { - return; - } - if (this.runEvent('DragOut', source, target, move)) { - this.damage(source.baseMaxhp / 8, source, target); - source.forceSwitchFlag = true; - } - } - }, - desc: "If hit by pivoting move: attacker takes 1/8 of their max HP in damage and is forced out.", - gen: 9, - num: -1100, - }, - mantisclaw: { - name: "Mantis Claw", - spritenum: 382, - fling: { - basePower: 10, - }, - onModifyAtkPriority: 1, - onModifyAtk(atk, pokemon) { - if (pokemon.baseSpecies.baseSpecies === 'Kleavor') { - return this.chainModify(1.5); - } - }, - onModifyDefPriority: 1, - onModifyDef(def, pokemon) { - if (pokemon.baseSpecies.baseSpecies === 'Scizor') { - return this.chainModify(1.3); - } - }, - onModifySpDPriority: 1, - onModifySpD(spd, pokemon) { - if (pokemon.baseSpecies.baseSpecies === 'Scizor') { - return this.chainModify(1.3); - } - }, - onModifySpePriority: 1, - onModifySpe(spe, pokemon) { - if (pokemon.baseSpecies.baseSpecies === 'Scyther') { - return this.chainModify(1.5); - } - }, - desc: "Scyther line: Immune to hazard damage, 1.5x Spe (Scyther), 1.3x Defenses (Scizor), 1.5x Attack (Kleavor).", - itemUser: ["Scyther", "Scizor", "Kleavor"], - gen: 9, - }, - clearamulet: { - name: "Clear Amulet", - spritenum: 747, - fling: { - basePower: 30, - }, - onTryBoost(boost, target, source, effect) { - // Don't bounce self stat changes, or boosts that have already bounced - if (!source || target === source || !boost || effect.name === 'Mirror Armor' || effect.name === 'Clear Amulet') return; - let b: BoostID; - for (b in boost) { - if (boost[b]! < 0) { - if (target.boosts[b] === -6) continue; - const negativeBoost: SparseBoostsTable = {}; - negativeBoost[b] = boost[b]; - delete boost[b]; - if (source.hp) { - this.add('-item', target, 'Clear Amulet'); - this.boost(negativeBoost, source, target, null, true); - } - } - } - }, - num: 1882, - desc: "If this Pokemon's stat stages would be lowered, the attacker's are lowered instead.", - gen: 9, - }, - quickclaw: { - name: "Quick Claw", - spritenum: 373, - fling: { - basePower: 20, - }, - onBasePowerPriority: 23, - onBasePower(basePower, attacker, defender, move) { - if (move?.priority > 0.1) { - this.debug('Quick Claw boost'); - return this.chainModify([4915, 4096]); - } - }, - onModifyMovePriority: 1, - onModifyMove(move) { - if (move?.priority > 0.1) delete move.flags['contact']; - }, - desc: "Holder's priority attacks have 1.2x power and do not make contact.", - num: 217, - gen: 2, - }, - protectivepads: { - name: "Protective Pads", - spritenum: 663, - fling: { - basePower: 30, - }, - onBasePowerPriority: 23, - onBasePower(basePower, attacker, defender, move) { - if (move.recoil || move.hasCrashDamage) { - this.debug('Protective Pads boost'); - return this.chainModify([4915, 4096]); - } - }, - // protective effect handled in Battle#checkMoveMakesContact - num: 880, - gen: 7, - desc: "This Pokemon's recoil moves deal 1.2x damage and all of its moves don't make contact.", - }, - desertrose: { - name: "Desert Rose", - spritenum: 603, - onTakeItem(item, source) { - if (source.baseSpecies.num === 671) return false; - return true; - }, - onSwitchIn(pokemon) { - this.add('-message', `${pokemon.name}'s flower blooms in the sandstorm!`); - pokemon.setAbility('sandveil', pokemon, true); - this.add('-activate', pokemon, 'ability: Sand Veil'); - }, - onResidualOrder: 5, - onResidualSubOrder: 5, - onResidual(pokemon) { - if (pokemon.baseSpecies.num === 671 && this.field.isWeather('sandstorm')) { - this.heal(pokemon.baseMaxhp / 8); - } - }, - onModifySpDPriority: 1, - onModifySpD(spd, pokemon) { - if (pokemon.baseSpecies.num === 671 && this.field.isWeather('sandstorm')) { - return this.chainModify(1.5); - } - }, - onUpdate(pokemon) { - if (pokemon.volatiles['healblock'] && pokemon.baseSpecies.num === 671) { - this.add('-activate', pokemon, 'item: Desert Rose'); - pokemon.removeVolatile('healblock'); - this.add('-end', pokemon, 'move: Heal Block', '[from] item: Desert Rose'); - } - }, - onHit(target, source, move) { - if (move?.volatileStatus === 'healblock' && target.baseSpecies.num === 671) { - this.add('-immune', target, 'healblock', '[from] item: Desert Rose'); - } - }, - onTryHit(pokemon, target, move) { - if (move.id === 'healblock' && target.baseSpecies.num === 671) { - this.add('-immune', pokemon, '[from] item: Desert Rose'); - return null; - } - }, - onAllyTryAddVolatile(status, target, source, effect) { - if (['healblock'].includes(status.id)) { - const effectHolder = this.effectState.target; - this.add('-block', target, 'item: Desert Rose', '[of] ' + effectHolder); - return null; - } - }, - itemUser: ["Florges"], - gen: 9, - desc: "Florges: Ability becomes Sand Veil, immune to Heal Block, 12.5% recovery and 1.5x SpD in Sand.", - }, - diancitestonefragment: { - name: "Diancite Stone Fragment", - spritenum: 624, - onTakeItem: false, - onSwitchIn(pokemon) { - this.add('-item', pokemon, 'Diancite Stone Fragment'); - pokemon.setAbility('magicbounce', pokemon, true); - this.add('-activate', pokemon, 'ability: Magic Bounce'); - this.boost({atk: 1, spa: 1, spe: 1}); - }, - itemUser: ["Diancie"], - gen: 9, - desc: "Diancie: Ability becomes Magic Bounce, +1 Atk/SpA/Spe.", - }, - - // unchanged items - boosterenergy: { - name: "Booster Energy", - spritenum: 0, // TODO - onUpdate(pokemon) { - if (pokemon.transformed) return; - if (this.queue.peek(true)?.choice === 'runSwitch') return; - if (pokemon.hasAbility('protosynthesis') && !pokemon.volatiles['protosynthesis'] && - !this.field.isWeather('sunnyday') && pokemon.useItem()) { - pokemon.addVolatile('protosynthesis'); - } - if (pokemon.hasAbility('protosmosis') && !pokemon.volatiles['protosmosis'] && - !this.field.isWeather('raindance') && pokemon.useItem()) { - pokemon.addVolatile('protosmosis'); - } - if (pokemon.hasAbility('protocrysalis') && !pokemon.volatiles['protocrysalis'] && - !this.field.isWeather('sandstorm') && pokemon.useItem()) { - pokemon.addVolatile('protocrysalis'); - } - if (pokemon.hasAbility('protostasis') && !pokemon.volatiles['protostasis'] && - !this.field.isWeather('snow') && pokemon.useItem()) { - pokemon.addVolatile('protostasis'); - } - if (pokemon.hasAbility('quarkdrive') && !pokemon.volatiles['quarkdrive'] && - !this.field.isTerrain('electricterrain') && pokemon.useItem()) { - pokemon.addVolatile('quarkdrive'); - } - if (pokemon.hasAbility('photondrive') && !pokemon.volatiles['photondrive'] && - !this.field.isTerrain('grassyterrain') && pokemon.useItem()) { - pokemon.addVolatile('photondrive'); - } - if (pokemon.hasAbility('neurondrive') && !pokemon.volatiles['neurondrive'] && - !this.field.isTerrain('psychicterrain') && pokemon.useItem()) { - pokemon.addVolatile('neurondrive'); - } - if (pokemon.hasAbility('runedrive') && !pokemon.volatiles['runedrive'] && - !this.field.isTerrain('mistyterrain') && pokemon.useItem()) { - pokemon.addVolatile('runedrive'); - } - }, - onTakeItem(item, source) { - if (source.baseSpecies.tags.includes("Paradox")) return false; - return true; - }, - num: 1880, - desc: "Activates the Paradox Abilities. Single use.", - gen: 9, - }, - electricseed: { - name: "Electric Seed", - spritenum: 664, - fling: { - basePower: 10, - }, - onStart(pokemon) { - if (!pokemon.ignoringItem() && this.field.isTerrain('electricterrain')) { - for (const target of this.getAllActive()) { - if (target.hasAbility('cloudnine')) { - this.debug('Cloud Nine prevents Seed use'); - return; - } - } - pokemon.useItem(); - } - }, - onTerrainChange() { - const pokemon = this.effectState.target; - if (this.field.isTerrain('electricterrain')) { - for (const target of this.getAllActive()) { - if (target.hasAbility('cloudnine')) { - this.debug('Cloud Nine prevents Seed use'); - return; - } - } - pokemon.useItem(); - } - }, - boosts: { - def: 1, - }, - num: 881, - gen: 7, - desc: "If the terrain is Electric Terrain, raises holder's Defense by 1 stage. Single use.", - }, - psychicseed: { - name: "Psychic Seed", - spritenum: 665, - fling: { - basePower: 10, - }, - onStart(pokemon) { - if (!pokemon.ignoringItem() && this.field.isTerrain('psychicterrain')) { - for (const target of this.getAllActive()) { - if (target.hasAbility('cloudnine')) { - this.debug('Cloud Nine prevents Seed use'); - return; - } - } - pokemon.useItem(); - } - }, - onTerrainChange() { - const pokemon = this.effectState.target; - if (this.field.isTerrain('psychicterrain')) { - for (const target of this.getAllActive()) { - if (target.hasAbility('cloudnine')) { - this.debug('Cloud Nine prevents Seed use'); - return; - } - } - pokemon.useItem(); - } - }, - boosts: { - spd: 1, - }, - num: 882, - gen: 7, - desc: "If the terrain is Psychic Terrain, raises holder's Sp. Def by 1 stage. Single use.", - }, - mistyseed: { - name: "Misty Seed", - spritenum: 666, - fling: { - basePower: 10, - }, - onStart(pokemon) { - if (!pokemon.ignoringItem() && this.field.isTerrain('mistyterrain')) { - for (const target of this.getAllActive()) { - if (target.hasAbility('cloudnine')) { - this.debug('Cloud Nine prevents Seed use'); - return; - } - } - pokemon.useItem(); - } - }, - onTerrainChange() { - const pokemon = this.effectState.target; - if (this.field.isTerrain('mistyterrain')) { - for (const target of this.getAllActive()) { - if (target.hasAbility('cloudnine')) { - this.debug('Cloud Nine prevents Seed use'); - return; - } - } - pokemon.useItem(); - } - }, - boosts: { - spd: 1, - }, - num: 883, - gen: 7, - desc: "If the terrain is Misty Terrain, raises holder's Sp. Def by 1 stage. Single use.", - }, - grassyseed: { - name: "Grassy Seed", - spritenum: 667, - fling: { - basePower: 10, - }, - onStart(pokemon) { - if (!pokemon.ignoringItem() && this.field.isTerrain('grassyterrain')) { - for (const target of this.getAllActive()) { - if (target.hasAbility('cloudnine')) { - this.debug('Cloud Nine prevents Seed use'); - return; - } - } - pokemon.useItem(); - } - }, - onTerrainChange() { - const pokemon = this.effectState.target; - if (this.field.isTerrain('grassyterrain')) { - for (const target of this.getAllActive()) { - if (target.hasAbility('cloudnine')) { - this.debug('Cloud Nine prevents Seed use'); - return; - } - } - pokemon.useItem(); - } - }, - boosts: { - def: 1, - }, - num: 884, - gen: 7, - desc: "If the terrain is Grassy Terrain, raises holder's Defense by 1 stage. Single use.", - }, -}; diff --git a/data/mods/vaporemons/learnsets.ts b/data/mods/vaporemons/learnsets.ts deleted file mode 100644 index 40957a3b2a2a..000000000000 --- a/data/mods/vaporemons/learnsets.ts +++ /dev/null @@ -1,120 +0,0 @@ -export const Learnsets: {[k: string]: LearnsetData} = { - rotomfan: { - learnset: { - windbreaker: ["9L1"], - aircutter: ["9L1"], - }, - }, - rotomfrost: { - learnset: { - blizzard: ["9L1"], - freezedry: ["9L1"], - }, - }, - rotomheat: { - learnset: { - overheat: ["9L1"], - lavaplume: ["9L1"], - }, - }, - rotomwash: { - learnset: { - hydropump: ["9L1"], - washaway: ["9L1"], - }, - }, - rotommow: { - learnset: { - leafstorm: ["9L1"], - grassknot: ["9L1"], - }, - }, - magearnaoriginal: { - learnset: { - agility: ["8M"], - aurasphere: ["9M", "9L66", "8M", "8L66"], - aurorabeam: ["9L36", "8L36"], - batonpass: ["9M", "8M"], - bodyslam: ["9M"], - brickbreak: ["9M", "8M"], - calmmind: ["9M", "8M"], - chargebeam: ["9M"], - confuseray: ["9M"], - craftyshield: ["8L54"], - dazzlinggleam: ["9M", "8M"], - defensecurl: ["9L6", "8L6", "8S0"], - disarmingvoice: ["9M"], - drainingkiss: ["8M"], - eerieimpulse: ["9M", "8M"], - electroball: ["9M", "8M"], - electroweb: ["8M"], - encore: ["9M", "8M"], - endure: ["9M", "8M"], - energyball: ["9M", "8M"], - facade: ["9M"], - falseswipe: ["9M", "8M"], - flashcannon: ["9M", "9L72", "8M", "8L72", "8S0"], - fleurcannon: ["9L90", "8L90", "8S0"], - focusblast: ["9M", "8M"], - gearup: ["8L24"], - gigaimpact: ["9M", "8M"], - grassknot: ["9M", "8M"], - gravity: ["9M"], - guardswap: ["8M"], - gyroball: ["9M", "9L1", "8M", "8L1"], - heavyslam: ["9M"], - helpinghand: ["9M", "9L1", "8M", "8L1"], - hyperbeam: ["9M", "8M"], - icebeam: ["9M", "8M"], - icespinner: ["9M"], - imprison: ["9M", "8M"], - irondefense: ["9M", "9L18", "8M", "8L18"], - ironhead: ["9M", "9L60", "8M", "8L60"], - lightscreen: ["9M", "8M"], - lockon: ["9L42"], - magneticflux: ["9L24"], - mindreader: ["8L42"], - mistyexplosion: ["9M", "8T"], - mistyterrain: ["9M"], - painsplit: ["9L78", "8L78"], - playrough: ["9M"], - powerswap: ["8M"], - protect: ["9M", "8M"], - psybeam: ["9M", "9L30", "8L30"], - psychic: ["9M"], - psyshock: ["9M"], - reflect: ["9M", "8M"], - rest: ["9M", "8M", "8S0"], - rollout: ["9L12", "8L12"], - round: ["8M"], - selfdestruct: ["8M"], - shadowball: ["9M", "8M"], - shiftgear: ["8L48"], - skillswap: ["9M"], - sleeptalk: ["9M"], - snore: ["8M"], - snowscape: ["9M"], - solarbeam: ["9M", "8M"], - speedswap: ["8M"], - steelbeam: ["9M", "8T"], - steelroller: ["8T"], - storedpower: ["8M"], - substitute: ["9M", "8M"], - sunnyday: ["9M"], - swift: ["9M"], - takedown: ["9M"], - terablast: ["9M"], - thunderbolt: ["9M", "8M"], - thunderwave: ["9M", "8M"], - triattack: ["8M"], - trick: ["8M"], - trickroom: ["9M", "8M"], - voltswitch: ["9M", "8M"], - zapcannon: ["9L84", "8L84"], - zenheadbutt: ["9M", "8M"], - }, - eventData: [ - {generation: 8, level: 50, nature: "Mild", ivs: {hp: 31, atk: 30, def: 30, spa: 31, spd: 31, spe: 0}, moves: ["fleurcannon", "flashcannon", "defensecurl", "rest"], pokeball: "cherishball"}, - ], - }, -}; diff --git a/data/mods/vaporemons/moves.ts b/data/mods/vaporemons/moves.ts deleted file mode 100644 index 439ab7ac3b59..000000000000 --- a/data/mods/vaporemons/moves.ts +++ /dev/null @@ -1,3004 +0,0 @@ -export const Moves: {[k: string]: ModdedMoveData} = { - direclaw: { - shortDesc: "Sets a layer of Toxic Spikes.", - num: -1005, - accuracy: 100, - basePower: 65, - category: "Physical", - name: "Dire Claw", - desc: "Sets a layer of Toxic Spikes on the opponent's side of the field.", - pp: 15, - priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, - onAfterHit(target, source, move) { - if (!move.hasSheerForce && source.hp && !target.hasItem('covertcloak')) { - for (const side of source.side.foeSidesWithConditions()) { - side.addSideCondition('toxicspikes'); - } - } - }, - onAfterSubDamage(damage, target, source, move) { - if (!move.hasSheerForce && source.hp && !target.hasItem('covertcloak')) { - for (const side of source.side.foeSidesWithConditions()) { - side.addSideCondition('toxicspikes'); - } - } - }, - secondary: {}, - target: "normal", - type: "Poison", - contestType: "Clever", - }, - ceaselessedge: { - num: 845, - accuracy: 100, - basePower: 65, - category: "Physical", - shortDesc: "Sets a layer of Spikes on the opposing side.", - name: "Ceaseless Edge", - pp: 15, - priority: 0, - flags: {contact: 1, protect: 1, mirror: 1, slicing: 1}, - onAfterHit(target, source, move) { - if (!move.hasSheerForce && source.hp && !target.hasItem('covertcloak')) { - for (const side of source.side.foeSidesWithConditions()) { - side.addSideCondition('spikes'); - } - } - }, - onAfterSubDamage(damage, target, source, move) { - if (!move.hasSheerForce && source.hp && !target.hasItem('covertcloak')) { - for (const side of source.side.foeSidesWithConditions()) { - side.addSideCondition('spikes'); - } - } - }, - secondary: {}, - target: "normal", - type: "Dark", - }, - stoneaxe: { - num: 830, - accuracy: 100, - basePower: 65, - category: "Physical", - name: "Stone Axe", - desc: "If this move is successful, it sets up a hazard on the opposing side of the field, damaging each opposing Pokemon that switches in. Foes lose 1/32, 1/16, 1/8, 1/4, or 1/2 of their maximum HP, rounded down, based on their weakness to the Rock type; 0.25x, 0.5x, neutral, 2x, or 4x, respectively. Can be removed from the opposing side if any opposing Pokemon uses Rapid Spin or Defog successfully, or is hit by Defog.", - shortDesc: "Sets Stealth Rock on the target's side.", - pp: 15, - priority: 0, - flags: {contact: 1, protect: 1, mirror: 1, slicing: 1}, - secondary: { - chance: 100, - sideCondition: 'stealthrock', - }, - target: "adjacentFoe", - type: "Rock", - contestType: "Tough", - }, - electroweb: { - num: 527, - accuracy: 95, - basePower: 65, - category: "Special", - shortDesc: "Sets Sticky Web on the target's side.", - name: "Electroweb", - pp: 15, - priority: 0, - flags: {protect: 1, mirror: 1}, - secondary: { - chance: 100, - sideCondition: 'stickyweb', - }, - target: "allAdjacentFoes", - type: "Electric", - contestType: "Beautiful", - }, - skullbash: { - num: 130, - accuracy: 90, - basePower: 120, - category: "Physical", - shortDesc: "Raises user's Atk by 1 on turn 1. Hits turn 2.", - isNonstandard: null, - name: "Skull Bash", - pp: 10, - priority: 0, - flags: {contact: 1, charge: 1, protect: 1, mirror: 1}, - onTryMove(attacker, defender, move) { - if (attacker.removeVolatile(move.id)) { - return; - } - this.add('-prepare', attacker, move.name); - this.boost({atk: 1}, attacker, attacker, move); - if (!this.runEvent('ChargeMove', attacker, defender, move)) { - return; - } - attacker.addVolatile('twoturnmove', defender); - return null; - }, - secondary: null, - target: "normal", - type: "Steel", - contestType: "Tough", - }, - shelter: { - num: 842, - accuracy: true, - basePower: 0, - category: "Status", - shortDesc: "Removes Spikes and Stealth Rock from the field. +1 Def for every type of hazard cleared.", - name: "Shelter", - pp: 10, - priority: 0, - flags: {snatch: 1}, - onHit(pokemon) { - const somesideConditions = ['spikes', 'stealthrock']; - const sides = [pokemon.side]; - for (const side of sides) { - for (const sideCondition of somesideConditions) { - if (sideCondition) { - this.add('-message', `This sides Stealth Rock and Spikes will be removed!`); - } - if (side.removeSideCondition('spikes')) { - this.add('-sideend', side, this.dex.conditions.get('spikes')); - this.boost({def: 1}, pokemon); - } - if (side.removeSideCondition('stealthrock')) { - this.add('-sideend', side, this.dex.conditions.get('stealthrock')); - this.boost({def: 1}, pokemon); - } - } - } - }, - secondary: null, - target: "self", - type: "Steel", - }, - healingstones: { - num: -191, - accuracy: true, - basePower: 0, - category: "Status", - desc: "Sets healing stones on the user's side, healing Pokemon that switch in for 1/8th of their max HP.", - shortDesc: "Heals allies on switch-in.", - name: "Healing Stones", - pp: 20, - priority: 0, - flags: {nonsky: 1, heal: 1, snatch: 1}, - sideCondition: 'healingstones', - onPrepareHit(target, source, move) { - this.attrLastMove('[still]'); - this.add('-anim', source, "Stealth Rock", target); - }, - condition: { - onSideStart(side) { - this.add('-sidestart', side, 'Healing Stones'); - this.effectState.layers = 1; - }, - onSideRestart(side) { - if (this.effectState.layers >= 1) return false; - this.add('-sidestart', side, 'Healing Stones'); - this.effectState.layers++; - }, - onEntryHazard(pokemon) { - if (pokemon.hasItem('heavydutyboots') || pokemon.hasAbility('overcoat') || - pokemon.hasItem('dancingshoes') || pokemon.hasItem('mantisclaw')) return; - const healAmounts = [0, 3]; // 1/8 - this.heal(healAmounts[this.effectState.layers] * pokemon.maxhp / 24); - }, - }, - secondary: null, - target: "allySide", - type: "Fairy", - contestType: "Clever", - }, - junglehealing: { - num: 816, - accuracy: true, - basePower: 0, - category: "Status", - shortDesc: "User and allies: healed 1/3 max HP, status cured.", - name: "Jungle Healing", - pp: 10, - priority: 0, - flags: {heal: 1, bypasssub: 1, allyanim: 1}, - onHit(pokemon) { - const success = !!this.heal(this.modify(pokemon.maxhp, 0.33)); - return pokemon.cureStatus() || success; - }, - secondary: null, - target: "allies", - type: "Grass", - }, - lifedew: { - num: 791, - accuracy: true, - basePower: 0, - category: "Status", - shortDesc: "User: healed 1/3 max HP. Next switch-in: healed 1/4 max HP.", - name: "Life Dew", - pp: 10, - priority: 0, - flags: {snatch: 1, heal: 1, bypasssub: 1}, - heal: [1, 3], - slotCondition: 'lifedew', - condition: { - onSwap(target) { - if (!target.fainted) { - const source = this.effectState.source; - const damage = this.heal(target.baseMaxhp / 4, target, target); - if (damage) this.add('-heal', target, target.getHealth, '[from] move: Life Dew', '[of] ' + source); - target.side.removeSlotCondition(target, 'lifedew'); - } - }, - }, - secondary: null, - target: "self", - type: "Water", - }, - shrapnelshot: { - accuracy: 90, - basePower: 15, - category: "Physical", - shortDesc: "Hits 2-5 times. First hit lowers the foe's Defense by 1 stage.", - name: "Shrapnel Shot", - pp: 20, - priority: 0, - flags: {bullet: 1, protect: 1, mirror: 1}, - multihit: [2, 5], - onPrepareHit(target, source, move) { - this.attrLastMove('[still]'); - this.add('-anim', source, "Spikes", target); - }, - secondary: { - chance: 100, - onHit(target, source, move) { - if (move.hit < 2) { - this.boost({def: -1}, target); - } - return false; - }, - }, - target: "normal", - type: "Steel", - zMove: {basePower: 140}, - maxMove: {basePower: 130}, - contestType: "Cool", - }, - stormthrow: { - num: 480, - accuracy: true, - basePower: 70, - category: "Physical", - isNonstandard: null, - name: "Storm Throw", - pp: 10, - priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, - willCrit: true, - secondary: null, - target: "normal", - type: "Fighting", - contestType: "Cool", - }, - frostbreath: { - num: 524, - accuracy: true, - basePower: 70, - category: "Special", - name: "Frost Breath", - pp: 10, - priority: 0, - flags: {protect: 1, mirror: 1}, - willCrit: true, - secondary: null, - target: "normal", - type: "Ice", - contestType: "Beautiful", - }, - snipeshot: { - num: 745, - accuracy: true, - basePower: 70, - category: "Special", - shortDesc: "Always critically hits.", - name: "Snipe Shot", - pp: 10, - priority: 0, - flags: {protect: 1, mirror: 1, pulse: 1}, - willCrit: true, - tracksTarget: true, - secondary: null, - target: "normal", - type: "Water", - }, - falsesurrender: { - num: 793, - accuracy: true, - basePower: 70, - category: "Physical", - shortDesc: "Always critically hits.", - name: "False Surrender", - pp: 10, - priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, - willCrit: true, - secondary: null, - target: "normal", - type: "Dark", - }, - choke: { - accuracy: 100, - basePower: 80, - category: "Physical", - shortDesc: "Inflicts the Heal Block effect.", - name: "Choke", - pp: 15, - priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, - onPrepareHit(target, source, move) { - this.attrLastMove('[still]'); - this.add('-anim', source, "Sky Uppercut", target); - this.add('-anim', source, "Hex", target); - }, - secondary: { - chance: 100, - onHit(target) { - target.addVolatile('healblock'); - }, - }, - target: "normal", - type: "Ghost", - contestType: "Clever", - }, - cuttingremark: { - accuracy: 100, - basePower: 40, - category: "Physical", - overrideDefensiveStat: 'spd', - shortDesc: "Usually goes first. Targets the foe's Special Defense.", - name: "Cutting Remark", - pp: 25, - priority: 1, - flags: {sound: 1, protect: 1, mirror: 1, bypasssub: 1, slicing: 1}, - onPrepareHit(target, source, move) { - this.attrLastMove('[still]'); - this.add('-anim', source, "Psycho Cut", target); - }, - self: { - sideCondition: 'echochamber', - }, - secondary: null, - target: "normal", - type: "Psychic", - contestType: "Cool", - }, - chainlightning: { - accuracy: 100, - basePower: 15, - category: "Physical", - shortDesc: "Usually goes first. Hits 2-5 times.", - name: "Chain Lightning", - pp: 20, - priority: 1, - flags: {protect: 1, mirror: 1}, - multihit: [2, 5], - onPrepareHit(target, source, move) { - this.attrLastMove('[still]'); - this.add('-anim', source, "Thunder Shock", target); - }, - secondary: null, - target: "normal", - type: "Electric", - contestType: "Cool", - }, - pluck: { - num: 365, - accuracy: 100, - basePower: 50, - category: "Physical", - shortDesc: "Heals the user by 75% of the damage dealt.", - name: "Pluck", - pp: 10, - priority: 0, - flags: {contact: 1, protect: 1, mirror: 1, heal: 1}, - drain: [3, 4], - secondary: null, - target: "normal", - type: "Flying", - contestType: "Cute", - }, - throatchop: { - num: 675, - accuracy: 100, - basePower: 85, - category: "Physical", - shortDesc: "Foe can't use Sound moves or Yawn for 3 turns.", - name: "Throat Chop", - pp: 10, - priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, - condition: { - duration: 3, - onStart(target) { - this.add('-start', target, 'Throat Chop', '[silent]'); - }, - onDisableMove(pokemon) { - for (const moveSlot of pokemon.moveSlots) { - if (this.dex.moves.get(moveSlot.id).flags['sound']) { - pokemon.disableMove(moveSlot.id); - } - } - }, - onBeforeMovePriority: 6, - onBeforeMove(pokemon, target, move) { - if (!move.isZ && !move.isMax && (move.flags['sound'] || move.id === 'yawn')) { - this.add('cant', pokemon, 'move: Throat Chop'); - return false; - } - }, - onResidualOrder: 22, - onEnd(target) { - this.add('-end', target, 'Throat Chop', '[silent]'); - }, - }, - secondary: { - chance: 100, - onHit(target) { - target.addVolatile('throatchop'); - }, - }, - target: "normal", - type: "Dark", - contestType: "Clever", - }, - windbreaker: { - accuracy: 100, - basePower: 85, - category: "Special", - shortDesc: "Foe can't use Wind moves for 3 turns.", - name: "Wind Breaker", - pp: 10, - priority: 0, - flags: {wind: 1, protect: 1, mirror: 1}, - onPrepareHit(target, source, move) { - this.attrLastMove('[still]'); - this.add('-anim', source, "Gust", target); - }, - condition: { - duration: 3, - onStart(target) { - this.add('-start', target, 'Wind Breaker', '[silent]'); - }, - onDisableMove(pokemon) { - for (const moveSlot of pokemon.moveSlots) { - if (this.dex.moves.get(moveSlot.id).flags['wind']) { - pokemon.disableMove(moveSlot.id); - } - } - }, - onBeforeMovePriority: 6, - onBeforeMove(pokemon, target, move) { - if (!move.isZ && !move.isMax && move.flags['wind']) { - this.add('cant', pokemon, 'move: Wind Breaker'); - return false; - } - }, - onResidualOrder: 22, - onEnd(target) { - this.add('-end', target, 'Wind Breaker', '[silent]'); - }, - }, - self: { - onHit(pokemon, source, move) { - if (source.hasItem('airfreshener')) { - this.add('-activate', source, 'move: Aromatherapy'); - for (const ally of source.side.pokemon) { - if (ally !== source && (ally.volatiles['substitute'] && !move.infiltrates)) { - continue; - } - ally.cureStatus(); - } - } - }, - }, - secondary: { - chance: 100, - onHit(target) { - target.addVolatile('windbreaker'); - }, - }, - target: "normal", - type: "Flying", - contestType: "Clever", - }, - hazardouswaste: { - accuracy: 100, - basePower: 50, - basePowerCallback(pokemon, target, move) { - const yourSide = pokemon.side; - let allLayers = 0; - if (yourSide.getSideCondition('stealthrock')) allLayers++; - if (yourSide.getSideCondition('healingstones')) allLayers++; - if (yourSide.getSideCondition('stickyweb')) allLayers++; - if (yourSide.sideConditions['spikes']) { - allLayers += yourSide.sideConditions['spikes'].layers; - } - if (yourSide.sideConditions['toxicspikes']) { - allLayers += yourSide.sideConditions['toxicspikes'].layers; - } - this.debug('Hazardous Waste damage boost'); - return Math.min(300, 50 + 50 * allLayers); - }, - category: "Physical", - shortDesc: "+50 power for each hazard layer on user's side. Caps at 300.", - name: "Hazardous Waste", - pp: 10, - priority: 0, - flags: {protect: 1, mirror: 1}, - onPrepareHit(target, source, move) { - this.attrLastMove('[still]'); - this.add('-anim', source, "Acid Downpour", target); - }, - secondary: null, - target: "normal", - type: "Poison", - contestType: "Tough", - }, - chisel: { - accuracy: 100, - basePower: 45, - category: "Physical", - shortDesc: "Gives the foe a Substitute, then hits 4 times.", - name: "Chisel", - pp: 10, - priority: 0, - flags: {protect: 1, mirror: 1, contact: 1}, - multihit: 4, - onPrepareHit(target, source, move) { - this.attrLastMove('[still]'); - this.add('-anim', source, "Salt Cure", target); - target.addVolatile('substitute'); - this.add('-anim', source, "Stone Axe", target); - }, - secondary: null, - target: "normal", - type: "Rock", - contestType: "Cool", - }, - peekaboo: { - accuracy: 100, - basePower: 140, - category: "Physical", - shortDesc: "Deal halved damage if the user takes damage before it hits.", - name: "Peekaboo", - pp: 20, - priority: -3, - flags: {contact: 1, protect: 1, failmefirst: 1, nosleeptalk: 1, noassist: 1, failcopycat: 1, failinstruct: 1}, - onPrepareHit(target, source, move) { - this.attrLastMove('[still]'); - this.add('-anim', source, "Heart Stamp", target); - }, - priorityChargeCallback(pokemon) { - pokemon.addVolatile('peekaboo'); - }, - condition: { - duration: 1, - onStart(pokemon) { - this.add('-singleturn', pokemon, 'move: Peekaboo'); - }, - onHit(pokemon, source, move) { - if (move.category !== 'Status') { - this.effectState.lostSurprise = true; - } - }, - onBasePower(basePower, pokemon) { - if (pokemon.volatiles['peekaboo']?.lostSurprise) { - this.debug('halved power'); - return this.chainModify(0.5); - } - }, - }, - secondary: null, - target: "normal", - type: "Fairy", - contestType: "Tough", - }, - psychoboost: { - num: 354, - accuracy: 100, - basePower: 120, - shortDesc: "Lowers the user's Sp. Atk by 1. Hits foe(s).", - category: "Special", - isNonstandard: null, - name: "Psycho Boost", - pp: 5, - priority: 0, - flags: {protect: 1, mirror: 1}, - self: { - boosts: { - spa: -1, - }, - }, - secondary: null, - target: "allAdjacentFoes", - type: "Psychic", - contestType: "Clever", - }, - ragefist: { - num: 889, - accuracy: 100, - basePower: 50, - basePowerCallback(pokemon) { - return Math.min(200, 50 + 50 * pokemon.timesAttacked); - }, - shortDesc: "+50 power for each time user was hit. Max 3 hits.", - category: "Physical", - name: "Rage Fist", - pp: 10, - priority: 0, - flags: {contact: 1, protect: 1, mirror: 1, punch: 1}, - onHit(target, source, move) { - const bp = Math.min(200, 50 + 50 * source.timesAttacked); - this.add('-message', `Rage Fist currently has a BP of ${bp}!`); - }, - secondary: null, - target: "normal", - type: "Ghost", - }, - ragingfury: { - num: 833, - accuracy: 100, - basePower: 50, - basePowerCallback(pokemon) { - return Math.min(200, 50 + 50 * pokemon.timesAttacked); - }, - shortDesc: "+50 power for each time user was hit. Max 3 hits.", - category: "Physical", - name: "Raging Fury", - pp: 10, - priority: 0, - flags: {protect: 1, mirror: 1}, - onHit(target, source, move) { - const bp = Math.min(200, 50 + 50 * source.timesAttacked); - this.add('-message', `Raging Fury currently has a BP of ${bp}!`); - }, - secondary: null, - target: "normal", - type: "Fire", - }, - parry: { - accuracy: 100, - basePower: 80, - category: "Physical", - shortDesc: "If the foe used a priority move, this move hits before that move and flinches the foe.", - name: "Parry", - pp: 10, - priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, - onPrepareHit(target, source, move) { - this.attrLastMove('[still]'); - this.add('-anim', source, "Mach Punch", target); - }, - priorityChargeCallback(pokemon) { - this.add('-anim', pokemon, "Imprison", pokemon); - this.add('-message', `${pokemon.name} is attempting to parry!`); - pokemon.addVolatile('parry'); - }, - secondary: {}, // sheer force boosted - condition: { - duration: 1, - onStart(target, source) { - this.add('-singleturn', source, 'Parry'); - }, - onFoeTryMove(target, source, move) { - const targetAllExceptions = ['perishsong', 'flowershield', 'rototiller']; - if (move.target === 'foeSide' || (move.target === 'all' && !targetAllExceptions.includes(move.id))) { - return; - } - const parryHolder = this.effectState.target; - if ((source.isAlly(parryHolder) || move.target === 'all') && - (!source.hasAbility('innerfocus') || !source.hasAbility('shielddust') || - !source.hasAbility('steadfast') || !source.hasItem('covertcloak') || - !source.hasAbility('sandveil') && !this.field.isWeather('sandstorm') || - !source.hasAbility('sunblock') && !this.field.isWeather('sunnyday') || - !source.hasAbility('snowcloak') && !this.field.isWeather('snow')) && - move.priority > 0.1) { - this.attrLastMove('[still]'); - this.add('cant', parryHolder, 'move: Parry', move, '[of] ' + target); - return false; - } - }, - }, - target: "normal", - type: "Fighting", - contestType: "Clever", - }, - rollout: { - num: 205, - accuracy: 100, - basePower: 50, - basePowerCallback(pokemon, target, move) { - if (pokemon.volatiles['defensecurl']) { - this.debug('BP doubled'); - return move.basePower * 2; - } - return move.basePower; - }, - category: "Physical", - shortDesc: "Switches the user out. 2x power if Rollout or Defense Curl was used last turn.", - name: "Rollout", - pp: 15, - priority: 0, - flags: {contact: 1, protect: 1, mirror: 1, noparentalbond: 1, failinstruct: 1}, - self: { - sideCondition: 'rollout', - }, - selfSwitch: true, - condition: { - duration: 2, - onBasePowerPriority: 1, - onBasePower(basePower, attacker, defender, move) { - if (move.id === 'rollout' && !attacker.volatiles['defensecurl']) { - return this.chainModify(2); - } - }, - }, - secondary: null, - target: "normal", - type: "Rock", - contestType: "Cute", - }, - round: { - num: 496, - accuracy: 100, - basePower: 50, - category: "Special", - shortDesc: "Switches the user out. 2x power if Round was used last turn.", - name: "Round", - pp: 15, - priority: 0, - flags: {protect: 1, mirror: 1, sound: 1, bypasssub: 1}, - self: { - sideCondition: 'round', - }, - selfSwitch: true, - condition: { - duration: 2, - onBasePowerPriority: 1, - onBasePower(basePower, attacker, defender, move) { - if (move.id === 'round' || move.id === 'echochamber') { - return this.chainModify(2); - } - }, - }, - secondary: null, - target: "normal", - type: "Normal", - contestType: "Beautiful", - }, - rekindleheal: { - accuracy: true, - basePower: 0, - category: "Status", - shortDesc: "Healing from Rekindle.", - name: "Rekindle Heal", - pp: 5, - priority: 0, - flags: {}, - volatileStatus: 'rekindleheal', - condition: { - onStart(pokemon) { - this.add('-start', pokemon, 'Rekindle'); - }, - onResidualOrder: 6, - onResidual(pokemon) { - this.heal(pokemon.baseMaxhp / 8); - }, - }, - secondary: null, - target: "self", - type: "Fire", - }, - rekindle: { - accuracy: true, - basePower: 0, - category: "Status", - shortDesc: "Heals 33% then 12.5% every turn. Burns foes that make contact.", - name: "Rekindle", - pp: 10, - priority: 0, - flags: {heal: 1, snatch: 1}, - heal: [1, 3], - onPrepareHit(target, source, move) { - this.attrLastMove('[still]'); - this.add('-anim', source, "Morning Sun", target); - }, - self: { - onHit(pokemon, source, move) { - pokemon.addVolatile('rekindleheal'); - pokemon.addVolatile('rekindle'); - this.add('-message', `${pokemon.name}'s flames burn brightly!`); - }, - }, - condition: { - duration: 1, - onDamagingHit(damage, target, source, move) { - if (this.checkMoveMakesContact(move, source, target)) { - source.trySetStatus('brn', target); - this.add('-message', `${target.name}'s flames burnt its attacker!`); - target.removeVolatile('rekindleheal'); - this.add('-message', `${target.name}'s flames were put out!`); - } - }, - }, - secondary: null, - target: "all", - type: "Fire", - contestType: "Clever", - }, - meteorbeam: { - num: 800, - accuracy: 90, - basePower: 120, - category: "Special", - shortDesc: "Raises user's Sp. Atk by 1 on turn 1. Hits turn 2. Hits in 1 turn in Sand.", - name: "Meteor Beam", - pp: 10, - priority: 0, - flags: {charge: 1, protect: 1, mirror: 1}, - onTryMove(attacker, defender, move) { - if (attacker.removeVolatile(move.id)) { - return; - } - this.add('-prepare', attacker, move.name); - this.boost({spa: 1}, attacker, attacker, move); - if (this.field.isWeather('sandstorm')) { - 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; - }, - secondary: null, - target: "normal", - type: "Rock", - }, - rebuild: { - accuracy: true, - basePower: 0, - category: "Status", - shortDesc: "Restores HP equal to the user's level × 1.25.", - name: "Rebuild", - pp: 10, - priority: 0, - flags: {snatch: 1, heal: 1}, - onPrepareHit(target, source, move) { - this.attrLastMove('[still]'); - this.add('-anim', source, "Iron Defense", target); - }, - onHit(pokemon) { - this.heal(pokemon.level * 1.25); - }, - secondary: null, - target: "self", - type: "Steel", - contestType: "Clever", - }, - washaway: { - accuracy: 100, - basePower: 80, - category: "Special", - shortDesc: "Removes hazards and terrains, then forces out target.", - name: "Wash Away", - pp: 10, - priority: -6, - flags: {protect: 1, mirror: 1, noassist: 1, failcopycat: 1}, - forceSwitch: true, - onPrepareHit(target, source, move) { - this.attrLastMove('[still]'); - this.add('-anim', source, "Surf", target); - }, - onHit(target, source, move) { - let success = false; - const removeTarget = [ - 'spikes', 'toxicspikes', 'stealthrock', 'stickyweb', 'gmaxsteelsurge', 'healingstones', - ]; - const removeAll = [ - 'spikes', 'toxicspikes', 'stealthrock', 'stickyweb', 'gmaxsteelsurge', 'healingstones', - ]; - 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: Wash Away', '[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: Wash Away', '[of] ' + source); - success = true; - } - } - this.field.clearTerrain(); - return success; - }, - target: "normal", - type: "Water", - contestType: "Tough", - }, - echochamber: { - accuracy: 100, - basePower: 90, - category: "Special", - shortDesc: "1.5x power if a sound move was used last turn.", - name: "Echo Chamber", - pp: 10, - priority: 0, - flags: {protect: 1, mirror: 1, sound: 1, bypasssub: 1}, - onPrepareHit(target, source, move) { - this.attrLastMove('[still]'); - this.add('-anim', source, "Hyper Voice", target); - }, - self: { - sideCondition: 'echochamber', - }, - condition: { - duration: 2, - onBasePowerPriority: 1, - onBasePower(basePower, attacker, defender, move) { - if (move.id === 'echochamber') { - return this.chainModify(1.5); - } - }, - }, - secondary: null, - target: "normal", - type: "Steel", - contestType: "Cool", - }, - brickbreak: { - inherit: true, - basePower: 85, - }, - psychicfangs: { - inherit: true, - flags: {bite: 1, protect: 1, mirror: 1}, - }, - sledgehammerblow: { - accuracy: 100, - basePower: 85, - category: "Physical", - shortDesc: "Destroys screens, unless the target is immune.", - name: "Sledgehammer Blow", - pp: 10, - priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, - onPrepareHit(target, source, move) { - this.attrLastMove('[still]'); - this.add('-anim', source, "Gigaton Hammer", target); - }, - onTryHit(pokemon) { - // will shatter screens through sub, before you hit - pokemon.side.removeSideCondition('reflect'); - pokemon.side.removeSideCondition('lightscreen'); - pokemon.side.removeSideCondition('auroraveil'); - }, - secondary: null, - target: "normal", - type: "Steel", - contestType: "Clever", - }, - desertstorm: { - accuracy: 100, - basePower: 90, - category: "Physical", - shortDesc: "(Partially functional placeholder) Hits two turns after being used. Sets sands when it hits, even if the target is immune.", - name: "Desert Storm", - pp: 15, - priority: 0, - flags: {allyanim: 1, futuremove: 1}, - ignoreImmunity: true, - onTry(source, target) { - if (!target.side.addSlotCondition(target, 'futuremove')) return false; - Object.assign(target.side.slotConditions[target.position]['futuremove'], { - duration: 3, - move: 'desertstorm', - source: source, - moveData: { - id: 'desertstorm', - name: "Desert Storm", - accuracy: 100, - basePower: 90, - category: "Physical", - priority: 0, - flags: {allyanim: 1, futuremove: 1}, - ignoreImmunity: false, - self: { - sideCondition: 'desertstorm', - }, - effectType: 'Move', - type: 'Ground', - }, - }); - this.add('-start', source, 'move: Desert Storm'); - return this.NOT_FAIL; - }, - condition: { - duration: 1, - onStart(source) { - this.field.setWeather('sandstorm'); - }, - }, - secondary: null, - target: "normal", - type: "Ground", - contestType: "Clever", - }, - dragonrage: { - num: 82, - accuracy: 100, - basePower: 85, - category: "Special", - shortDesc: "If the user is hit this turn, +1 SpA.", - isNonstandard: null, - name: "Dragon Rage", - pp: 10, - priority: 0, - flags: {protect: 1, mirror: 1}, - priorityChargeCallback(pokemon) { - pokemon.addVolatile('dragonrage'); - }, - condition: { - duration: 1, - onStart(pokemon) { - this.add('-singleturn', pokemon, 'move: Dragon Rage'); - }, - onHit(target, source, move) { - if (target !== source && move.category !== 'Status') { - this.boost({spa: 1}); - } - }, - }, - secondary: null, - target: "normal", - type: "Dragon", - contestType: "Cool", - }, - rage: { - num: 99, - accuracy: 100, - basePower: 85, - category: "Physical", - shortDesc: "If the user is hit this turn, +1 Atk.", - isNonstandard: null, - name: "Rage", - pp: 10, - priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, - priorityChargeCallback(pokemon) { - pokemon.addVolatile('rage'); - }, - condition: { - duration: 1, - onStart(pokemon) { - this.add('-singleturn', pokemon, 'move: Rage'); - }, - onHit(target, source, move) { - if (target !== source && move.category !== 'Status') { - this.boost({atk: 1}); - } - }, - }, - secondary: null, - target: "normal", - type: "Normal", - contestType: "Tough", - }, - latentvenom: { - accuracy: 100, - basePower: 0, - category: "Status", - shortDesc: "Hits two turns after being used. Foe: badly poisoned and -1 Def & SpD.", - name: "Latent Venom", - pp: 5, - priority: 0, - flags: {allyanim: 1, futuremove: 1, snatch: 1}, - ignoreImmunity: true, - onPrepareHit(target, source, move) { - this.attrLastMove('[still]'); - this.add('-anim', source, "Acid Spray", target); - }, - onTry(source, target) { - if (!target.side.addSlotCondition(target, 'futuremove')) return false; - Object.assign(target.side.slotConditions[target.position]['futuremove'], { - duration: 3, - move: 'latentvenom', - source: source, - moveData: { - id: 'latentvenom', - name: "Latent Venom", - accuracy: 100, - basePower: 0, - category: "Status", - priority: 0, - flags: {allyanim: 1, futuremove: 1}, - ignoreImmunity: false, - status: 'tox', - boosts: { - def: -1, - spd: -1, - }, - effectType: 'Move', - type: 'Poison', - }, - }); - this.add('-start', source, 'move: Latent Venom'); - return this.NOT_FAIL; - }, - secondary: null, - target: "normal", - type: "Poison", - contestType: "Cool", - }, - pivotfail: { - accuracy: true, - basePower: 0, - category: "Status", - shortDesc: "Prevents pivoting moves from being used for the rest of the turn.", - name: "Pivot Fail", - pp: 5, - priority: 0, - flags: {}, - volatileStatus: 'pivotfail', - condition: { - duration: 1, - onStart(pokemon) { - this.add('-message', `${pokemon.name}'s pivoting moves will fail for the rest of the turn!`); - }, - onBeforeMovePriority: 6, - onBeforeMove(pokemon, target, move) { - if (!move.isZ && !move.isMax && move.selfSwitch) { - this.add('cant', pokemon, 'move: Smack Down'); - return false; - } - }, - onModifyMove(move, pokemon, target) { - if (!move.isZ && !move.isMax && move.selfSwitch) { - this.add('cant', pokemon, 'move: Smack Down'); - return false; - } - }, - }, - secondary: null, - target: "self", - type: "Rock", - }, - smackdown: { - num: 479, - accuracy: 100, - basePower: 65, - category: "Physical", - shortDesc: "Removes the target's Ground immunity and causes pivoting moves to fail.", - name: "Smack Down", - pp: 15, - priority: 0, - flags: {protect: 1, mirror: 1, nonsky: 1}, - volatileStatus: 'smackdown', - onHit(target) { - target.addVolatile('pivotfail'); - }, - condition: { - noCopy: true, - onStart(pokemon) { - let applies = false; - if (pokemon.hasType('Flying') || pokemon.hasAbility('levitate')) applies = true; - if (pokemon.hasItem('ironball') || pokemon.volatiles['ingrain'] || - this.field.getPseudoWeather('gravity')) applies = false; - if (pokemon.removeVolatile('fly') || pokemon.removeVolatile('bounce')) { - applies = true; - this.queue.cancelMove(pokemon); - pokemon.removeVolatile('twoturnmove'); - } - if (pokemon.volatiles['magnetrise']) { - applies = true; - delete pokemon.volatiles['magnetrise']; - } - if (pokemon.volatiles['telekinesis']) { - applies = true; - delete pokemon.volatiles['telekinesis']; - } - if (!applies) return false; - this.add('-start', pokemon, 'Smack Down'); - }, - onRestart(pokemon) { - if (pokemon.removeVolatile('fly') || pokemon.removeVolatile('bounce')) { - this.queue.cancelMove(pokemon); - pokemon.removeVolatile('twoturnmove'); - this.add('-start', pokemon, 'Smack Down'); - } - }, - // groundedness implemented in battle.engine.js:BattlePokemon#isGrounded - }, - secondary: null, - target: "normal", - type: "Rock", - contestType: "Tough", - }, - rootpull: { - accuracy: 100, - basePower: 90, - category: "Physical", - shortDesc: "100% chance to lower the target's Speed by 1 (2 if Flying-type).", - name: "Root Pull", - pp: 10, - priority: 0, - flags: {protect: 1, mirror: 1}, - onPrepareHit(target, source, move) { - this.attrLastMove('[still]'); - this.add('-anim', source, "Trailblaze", target); - }, - onHit(target) { - if (target.hasType('Flying') && !target.hasItem('covertcloak') && !target.hasAbility('shielddust')) { - this.boost({spe: -1}, target); - } - }, - secondary: { - chance: 100, - boosts: { - spe: -1, - }, - }, - target: "normal", - type: "Grass", - }, - snatch: { - num: 289, - accuracy: 100, - basePower: 30, - category: "Physical", - isNonstandard: null, - name: "Snatch", - pp: 10, - priority: 2, - flags: {bypasssub: 1, mustpressure: 1, noassist: 1, failcopycat: 1, protect: 1, mirror: 1}, - self: { - onHit(pokemon, source, move) { - pokemon.addVolatile('snatch'); - }, - }, - condition: { - duration: 1, - onStart(pokemon) { - this.add('-singleturn', pokemon, 'Snatch'); - }, - onAnyPrepareHitPriority: -1, - onAnyPrepareHit(source, target, move) { - const snatchUser = this.effectState.source; - if (snatchUser.isSkyDropped()) return; - if (!move || move.isZ || move.isMax || !move.flags['snatch'] || move.sourceEffect === 'snatch') { - return; - } - snatchUser.removeVolatile('snatch'); - this.add('-activate', snatchUser, 'move: Snatch', '[of] ' + source); - this.actions.useMove(move.id, snatchUser); - return null; - }, - }, - secondary: null, - target: "normal", - type: "Dark", - contestType: "Clever", - }, - tailslap: { - inherit: true, - accuracy: 100, - }, - pinmissile: { - inherit: true, - accuracy: 100, - }, - rockblast: { - inherit: true, - accuracy: 100, - }, - signalbeam: { - num: 324, - accuracy: 100, - basePower: 75, - category: "Special", - shortDesc: "Nullifies the target's Ability.", - isNonstandard: null, - name: "Signal Beam", - pp: 10, - priority: 0, - flags: {protect: 1, mirror: 1}, - onHit(target) { - if (target.getAbility().isPermanent) return; - target.addVolatile('gastroacid'); - }, - onAfterSubDamage(damage, target) { - if (target.getAbility().isPermanent) return; - target.addVolatile('gastroacid'); - }, - secondary: null, - target: "normal", - type: "Bug", - contestType: "Beautiful", - }, - flyingpress: { - num: 560, - accuracy: 95, - basePower: 100, - category: "Physical", - shortDesc: "Either Fighting or Flying-type, whichever is more effective.", - name: "Flying Press", - pp: 10, - flags: {contact: 1, protect: 1, mirror: 1, gravity: 1, distance: 1, nonsky: 1}, - onModifyType(move, pokemon) { - for (const target of pokemon.side.foe.active) { - const type1 = 'Fighting'; - const type2 = 'Flying'; - if (this.dex.getEffectiveness(type1, target) < this.dex.getEffectiveness(type2, target)) { - move.type = 'Flying'; - } else if (target.hasType('Ghost') && !pokemon.hasAbility('scrappy') && - !pokemon.hasAbility('mindseye') && !target.hasItem('ringtarget')) { - move.type = 'Flying'; - } else if (this.dex.getEffectiveness(type1, target) === this.dex.getEffectiveness(type2, target)) { - if (pokemon.hasType('Flying') && !pokemon.hasType('Fighting')) { - move.type = 'Flying'; - } - } - } - }, - onHit(target, source, move) { - this.add('-message', `Flying Press dealt ${move.type}-type damage!`); - }, - priority: 0, - secondary: null, - target: "any", - type: "Fighting", - zMove: {basePower: 170}, - contestType: "Tough", - }, - softwarecrash: { - num: 560, - accuracy: 95, - basePower: 100, - category: "Special", - shortDesc: "Either Bug or Electric-type, whichever is more effective.", - name: "Software Crash", - pp: 10, - flags: {protect: 1, mirror: 1}, - onPrepareHit(target, source, move) { - this.attrLastMove('[still]'); - this.add('-anim', source, "Hyper Beam", target); - }, - onModifyType(move, pokemon) { - for (const target of pokemon.side.foe.active) { - const type1 = 'Bug'; - const type2 = 'Electric'; - if (this.dex.getEffectiveness(type1, target) < this.dex.getEffectiveness(type2, target)) { - if (!target.hasType('Ground') && !target.hasItem('ringtarget')) { - move.type = 'Electric'; - } - } else if (this.dex.getEffectiveness(type1, target) === this.dex.getEffectiveness(type2, target)) { - if (pokemon.hasType('Electric') && !pokemon.hasType('Bug')) { - move.type = 'Electric'; - } - } - } - }, - onHit(target, source, move) { - this.add('-message', `Software Crash dealt ${move.type}-type damage!`); - }, - priority: 0, - secondary: null, - target: "any", - type: "Bug", - zMove: {basePower: 170}, - contestType: "Tough", - }, - lashout: { - num: 808, - accuracy: 100, - basePower: 70, - category: "Physical", - shortDesc: "2x power if the user has negative stat changes or a status.", - name: "Lash Out", - pp: 10, - priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, - onBasePower(basePower, pokemon) { - const negativeVolatiles = ['confusion', 'taunt', 'torment', 'trapped', 'partiallytrapped', 'leechseed', 'sandspit', - 'attract', 'curse', 'disable', 'electrify', 'embargo', 'encore', 'foresight', 'gastroacid', 'foresight', 'miracleeye', - 'glaiverush', 'healblock', 'throatchop', 'windbreaker', 'nightmare', 'octolock', 'powder', 'saltcure', 'smackdown', - 'syrupbomb', 'tarshot', 'telekinesis', 'yawn']; - let i: BoostID; - for (i in pokemon.boosts) { - for (const volatile of negativeVolatiles) { - if (pokemon.status && pokemon.status !== 'brn' || pokemon.volatiles[volatile] || pokemon.boosts[i] < 0) { - return this.chainModify(2); - } else if (pokemon.status === 'brn') { - return this.chainModify(4); - } - } - } - }, - secondary: null, - target: "normal", - type: "Dark", - }, - naturalgift: { - num: 363, - accuracy: 100, - basePower: 0, - category: "Physical", - shortDesc: "Type and power based on user's berry.", - isNonstandard: null, - name: "Natural Gift", - pp: 15, - priority: 0, - flags: {protect: 1, mirror: 1}, - onModifyType(move, pokemon) { - if (pokemon.ignoringItem()) return; - const item = pokemon.getItem(); - if (!item.naturalGift) return; - move.type = item.naturalGift.type; - }, - onPrepareHit(target, pokemon, move) { - if (pokemon.ignoringItem()) return false; - const item = pokemon.getItem(); - if (!item.naturalGift) return false; - move.basePower = item.naturalGift.basePower; - this.debug('BP: ' + move.basePower); - }, - onBasePower(basePower, pokemon) { - if (pokemon.hasAbility('ripen') || pokemon.hasAbility('harvest')) { - return this.chainModify(2); - } - }, - secondary: null, - target: "normal", - type: "Normal", - zMove: {basePower: 160}, - maxMove: {basePower: 130}, - contestType: "Clever", - }, - - // all edited unchanged moves - stealthrock: { - num: 446, - accuracy: true, - basePower: 0, - category: "Status", - name: "Stealth Rock", - pp: 20, - priority: 0, - flags: {reflectable: 1, snatch: 1}, - sideCondition: 'stealthrock', - condition: { - // this is a side condition - onSideStart(side) { - this.add('-sidestart', side, 'move: Stealth Rock'); - }, - onEntryHazard(pokemon) { - if (pokemon.hasItem('heavydutyboots') || pokemon.hasAbility('overcoat') || - pokemon.hasItem('dancingshoes') || pokemon.hasItem('mantisclaw')) return; - const typeMod = this.clampIntRange(pokemon.runEffectiveness(this.dex.getActiveMove('stealthrock')), -6, 6); - if (pokemon.hasAbility('smelt')) { - const fireHazard = this.dex.getActiveMove('Stealth Rock'); - fireHazard.type = 'Fire'; - const smeltMod = this.clampIntRange(pokemon.runEffectiveness(fireHazard), -6, 6); - this.damage(pokemon.maxhp * Math.pow(2, smeltMod) / 8); - } else { - this.damage(pokemon.maxhp * Math.pow(2, typeMod) / 8); - } - }, - }, - secondary: null, - 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, mustpressure: 1, snatch: 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++; - }, - onEntryHazard(pokemon) { - if (!pokemon.isGrounded()) return; - if (pokemon.hasItem('heavydutyboots') || pokemon.hasAbility('overcoat') || - pokemon.hasItem('dancingshoes') || pokemon.hasItem('mantisclaw')) return; - const damageAmounts = [0, 3, 4, 6]; // 1/8, 1/6, 1/4 - this.damage(damageAmounts[this.effectState.layers] * pokemon.maxhp / 24); - }, - }, - secondary: null, - target: "foeSide", - type: "Ground", - zMove: {boost: {def: 1}}, - contestType: "Clever", - }, - toxicspikes: { - num: 390, - accuracy: true, - basePower: 0, - category: "Status", - name: "Toxic Spikes", - pp: 20, - priority: 0, - flags: {reflectable: 1, nonsky: 1, mustpressure: 1, snatch: 1}, - sideCondition: 'toxicspikes', - 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++; - }, - onEntryHazard(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('overcoat') || pokemon.hasItem('dancingshoes') || pokemon.hasItem('mantisclaw')) { - return; - } else if (this.effectState.layers >= 2) { - pokemon.trySetStatus('tox', pokemon.side.foe.active[0]); - } else { - pokemon.trySetStatus('psn', pokemon.side.foe.active[0]); - } - }, - }, - secondary: null, - target: "foeSide", - type: "Poison", - zMove: {boost: {def: 1}}, - contestType: "Clever", - }, - stickyweb: { - num: 564, - accuracy: true, - basePower: 0, - category: "Status", - name: "Sticky Web", - pp: 20, - priority: 0, - flags: {reflectable: 1, snatch: 1}, - sideCondition: 'stickyweb', - condition: { - onSideStart(side) { - this.add('-sidestart', side, 'move: Sticky Web'); - }, - onEntryHazard(pokemon) { - if (!pokemon.isGrounded() || pokemon.hasItem('heavydutyboots') || pokemon.hasAbility('overcoat') || - pokemon.hasItem('dancingshoes') || pokemon.hasItem('mantisclaw')) return; - this.add('-activate', pokemon, 'move: Sticky Web'); - this.boost({spe: -1}, pokemon, this.effectState.source, this.dex.getActiveMove('stickyweb')); - }, - }, - secondary: null, - target: "foeSide", - type: "Bug", - zMove: {boost: {spe: 1}}, - contestType: "Tough", - }, - defog: { - num: 432, - accuracy: true, - basePower: 0, - category: "Status", - name: "Defog", - pp: 15, - priority: 0, - flags: {protect: 1, reflectable: 1, mirror: 1, bypasssub: 1, wind: 1}, - onHit(target, source, move) { - let success = false; - if (!target.volatiles['substitute'] || move.infiltrates) success = !!this.boost({evasion: -1}); - const removeTarget = [ - 'reflect', 'lightscreen', 'auroraveil', 'safeguard', 'mist', 'spikes', 'toxicspikes', 'stealthrock', 'stickyweb', 'gmaxsteelsurge', 'healingstones', - ]; - const removeAll = [ - 'spikes', 'toxicspikes', 'stealthrock', 'stickyweb', 'gmaxsteelsurge', 'healingstones', - ]; - 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; - }, - self: { - onHit(pokemon, source, move) { - if (source.hasItem('airfreshener')) { - this.add('-activate', source, 'move: Aromatherapy'); - for (const ally of source.side.pokemon) { - if (ally !== source && (ally.volatiles['substitute'] && !move.infiltrates)) { - continue; - } - ally.cureStatus(); - } - } - }, - }, - secondary: null, - target: "normal", - type: "Flying", - zMove: {boost: {accuracy: 1}}, - contestType: "Cool", - }, - blazingtorque: { - inherit: true, - isNonstandard: null, - }, - wickedtorque: { - inherit: true, - isNonstandard: null, - }, - noxioustorque: { - inherit: true, - isNonstandard: null, - }, - combattorque: { - inherit: true, - isNonstandard: null, - }, - magicaltorque: { - inherit: true, - isNonstandard: null, - }, - rapidspin: { - num: 229, - accuracy: 100, - basePower: 50, - category: "Physical", - name: "Rapid Spin", - pp: 40, - priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, - 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', 'healingstones']; - 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', 'healingstones']; - 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'); - } - } - }, - secondary: { - chance: 100, - self: { - boosts: { - spe: 1, - }, - }, - }, - target: "normal", - type: "Normal", - contestType: "Cool", - }, - mortalspin: { - num: 866, - accuracy: 100, - basePower: 30, - category: "Physical", - name: "Mortal Spin", - pp: 15, - priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, - 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', 'healingstones']; - 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', 'healingstones']; - 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'); - } - } - }, - secondary: { - chance: 100, - status: 'psn', - }, - target: "allAdjacentFoes", - type: "Poison", - }, - tidyup: { - num: 882, - accuracy: true, - basePower: 0, - category: "Status", - name: "Tidy Up", - pp: 10, - priority: 0, - flags: {}, - onHit(pokemon) { - let success = false; - for (const active of this.getAllActive()) { - if (active.removeVolatile('substitute')) success = true; - } - const removeAll = ['spikes', 'toxicspikes', 'stealthrock', 'stickyweb', 'gmaxsteelsurge', 'healingstones']; - 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; - }, - secondary: null, - target: "self", - type: "Normal", - }, - courtchange: { - num: 756, - accuracy: 100, - basePower: 0, - category: "Status", - name: "Court Change", - pp: 10, - priority: 0, - flags: {mirror: 1}, - onHitField(target, source) { - const sideConditions = [ - 'mist', 'lightscreen', 'reflect', 'spikes', 'safeguard', 'tailwind', 'toxicspikes', 'stealthrock', - 'waterpledge', 'firepledge', 'grasspledge', 'stickyweb', 'auroraveil', 'gmaxsteelsurge', 'gmaxcannonade', - 'gmaxvinelash', 'gmaxwildfire', 'healingstones', - ]; - let success = false; - if (this.gameType === "freeforall") { - // random integer from 1-3 inclusive - const offset = this.random(3) + 1; - // the list of all sides in counterclockwise order - const sides = [this.sides[0], this.sides[2]!, this.sides[1], this.sides[3]!]; - 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]; - const effectName = this.dex.conditions.get(id).name; - this.add('-sideend', side, effectName, '[silent]'); - success = true; - } - } - for (let i = 0; i < 4; i++) { - const sourceSideConditions = temp[sides[i].n]; - const targetSide = sides[(i + offset) % 4]; // the next side in rotation - for (const id in sourceSideConditions) { - targetSide.sideConditions[id] = sourceSideConditions[id]; - const effectName = this.dex.conditions.get(id).name; - let layers = sourceSideConditions[id].layers || 1; - for (; layers > 0; layers--) this.add('-sidestart', targetSide, effectName, '[silent]'); - } - } - } 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]; - } - for (const id in targetTemp) { - sourceSideConditions[id] = targetTemp[id]; - } - this.add('-swapsideconditions'); - } - if (!success) return false; - this.add('-activate', source, 'move: Court Change'); - }, - secondary: null, - target: "all", - type: "Normal", - }, - healblock: { - num: 377, - accuracy: 100, - basePower: 0, - category: "Status", - isNonstandard: "Past", - name: "Heal Block", - pp: 15, - priority: 0, - flags: {protect: 1, reflectable: 1, mirror: 1}, - volatileStatus: 'healblock', - condition: { - duration: 5, - durationCallback(target, source, effect) { - if (source?.hasAbility('persistent')) { - this.add('-activate', source, 'ability: Persistent', '[move] Heal Block'); - return 7; - } - if (effect && effect.id === 'deathaura') { - return 0; - } - return 5; - }, - onStart(pokemon, source) { - this.add('-start', pokemon, 'move: Heal Block'); - source.moveThisTurnResult = true; - }, - 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.id === 'bitterblade') && !move.isZ && !move.isMax) { - this.add('cant', pokemon, 'move: Heal Block', move); - return false; - } - }, - onModifyMove(move, pokemon, target) { - if ((move.flags['heal'] || move.id === 'bitterblade') && !move.isZ && !move.isMax) { - this.add('cant', pokemon, 'move: Heal Block', move); - return false; - } - }, - onResidualOrder: 20, - onEnd(pokemon) { - this.add('-end', pokemon, 'move: Heal Block'); - }, - onTryHeal(damage, target, source, effect) { - if ((effect?.id === 'zpower') || this.effectState.isZ) return damage; - return false; - }, - onRestart(target, source) { - this.add('-fail', target, 'move: Heal Block'); // Succeeds to supress downstream messages - if (!source.moveThisTurnResult) { - source.moveThisTurnResult = false; - } - }, - }, - secondary: null, - target: "allAdjacentFoes", - type: "Psychic", - zMove: {boost: {spa: 2}}, - contestType: "Clever", - }, - electricterrain: { - num: 604, - accuracy: true, - basePower: 0, - category: "Status", - name: "Electric Terrain", - pp: 10, - priority: 0, - flags: {nonsky: 1}, - terrain: 'electricterrain', - condition: { - 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)) { - for (const active of this.getAllActive()) { - if (active.hasAbility('cloudnine')) { - return; - } - } - this.add('-activate', target, 'move: Electric Terrain'); - } - for (const active of this.getAllActive()) { - if (active.hasAbility('cloudnine')) { - this.add('-message', `${active.name} suppresses the effects of the terrain!`); - return; - } - } - return false; - } - }, - onTryAddVolatile(status, target) { - if (!target.isGrounded() || target.isSemiInvulnerable()) return; - if (status.id === 'yawn') { - this.add('-activate', target, 'move: Electric Terrain'); - for (const active of this.getAllActive()) { - if (active.hasAbility('cloudnine')) { - this.add('-message', `${active.name} suppresses the effects of the terrain!`); - return; - } - } - return null; - } - }, - onBasePowerPriority: 6, - onBasePower(basePower, attacker, defender, move) { - if (move.type === 'Electric' && attacker.isGrounded() && !attacker.isSemiInvulnerable()) { - for (const active of this.getAllActive()) { - if (active.hasAbility('cloudnine')) { - this.add('-message', `${active.name} suppresses the effects of the terrain!`); - return; - } - } - 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'); - } - }, - onFieldResidualOrder: 27, - onFieldResidualSubOrder: 7, - onFieldEnd() { - this.add('-fieldend', 'move: Electric Terrain'); - }, - }, - secondary: null, - target: "all", - type: "Electric", - zMove: {boost: {spe: 1}}, - contestType: "Clever", - }, - psychicterrain: { - num: 678, - accuracy: true, - basePower: 0, - category: "Status", - name: "Psychic Terrain", - pp: 10, - priority: 0, - flags: {nonsky: 1}, - terrain: 'psychicterrain', - condition: { - duration: 5, - durationCallback(source, effect) { - if (source?.hasItem('terrainextender')) { - return 8; - } - return 5; - }, - onTryHitPriority: 4, - onTryHit(target, source, effect) { - if (effect && (effect.priority <= 0.1 || effect.target === 'self')) { - return; - } - if (target.isSemiInvulnerable() || target.isAlly(source)) return; - 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."); - } - return; - } - for (const active of this.getAllActive()) { - if (active.hasAbility('cloudnine')) { - this.add('-message', `${active.name} suppresses the effects of the terrain!`); - return; - } - } - this.add('-activate', target, 'move: Psychic Terrain'); - return null; - }, - onBasePowerPriority: 6, - onBasePower(basePower, attacker, defender, move) { - if (move.type === 'Psychic' && attacker.isGrounded() && !attacker.isSemiInvulnerable()) { - for (const active of this.getAllActive()) { - if (active.hasAbility('cloudnine')) { - this.add('-message', `${active.name} suppresses the effects of the terrain!`); - return; - } - } - this.debug('psychic terrain boost'); - return this.chainModify([5325, 4096]); - } - }, - onFieldStart(field, source, effect) { - if (effect?.effectType === 'Ability') { - this.add('-fieldstart', 'move: Psychic Terrain', '[from] ability: ' + effect.name, '[of] ' + source); - } else { - this.add('-fieldstart', 'move: Psychic Terrain'); - } - }, - onFieldResidualOrder: 27, - onFieldResidualSubOrder: 7, - onFieldEnd() { - this.add('-fieldend', 'move: Psychic Terrain'); - }, - }, - secondary: null, - target: "all", - type: "Psychic", - zMove: {boost: {spa: 1}}, - contestType: "Clever", - }, - grassyterrain: { - num: 580, - accuracy: true, - basePower: 0, - category: "Status", - name: "Grassy Terrain", - pp: 10, - priority: 0, - flags: {nonsky: 1}, - terrain: 'grassyterrain', - condition: { - duration: 5, - durationCallback(source, effect) { - if (source?.hasItem('terrainextender')) { - return 8; - } - return 5; - }, - onBasePowerPriority: 6, - onBasePower(basePower, attacker, defender, move) { - const weakenedMoves = ['earthquake', 'bulldoze', 'magnitude']; - if (weakenedMoves.includes(move.id) && defender.isGrounded() && !defender.isSemiInvulnerable()) { - for (const target of this.getAllActive()) { - if (target.hasAbility('cloudnine')) { - this.add('-message', `${target.name} suppresses the effects of the terrain!`); - return; - } - } - this.debug('move weakened by grassy terrain'); - return this.chainModify(0.5); - } - if (move.type === 'Grass' && attacker.isGrounded()) { - for (const target of this.getAllActive()) { - if (target.hasAbility('cloudnine')) { - this.add('-message', `${target.name} suppresses the effects of the terrain!`); - return; - } - } - this.debug('grassy terrain boost'); - return this.chainModify([5325, 4096]); - } - }, - onFieldStart(field, source, effect) { - if (effect?.effectType === 'Ability') { - this.add('-fieldstart', 'move: Grassy Terrain', '[from] ability: ' + effect.name, '[of] ' + source); - } else { - this.add('-fieldstart', 'move: Grassy Terrain'); - } - }, - onResidualOrder: 5, - onResidualSubOrder: 2, - onResidual(pokemon) { - for (const target of this.getAllActive()) { - if (target.hasAbility('cloudnine')) { - this.add('-message', `${target.name} suppresses the effects of the terrain!`); - return; - } - } - if (pokemon.isGrounded() && !pokemon.isSemiInvulnerable()) { - this.heal(pokemon.baseMaxhp / 16, pokemon, pokemon); - } else { - this.debug(`Pokemon semi-invuln or not grounded; Grassy Terrain skipped`); - } - }, - onFieldResidualOrder: 27, - onFieldResidualSubOrder: 7, - onFieldEnd() { - this.add('-fieldend', 'move: Grassy Terrain'); - }, - }, - secondary: null, - target: "all", - type: "Grass", - zMove: {boost: {def: 1}}, - contestType: "Beautiful", - }, - mistyterrain: { - num: 581, - accuracy: true, - basePower: 0, - category: "Status", - name: "Misty Terrain", - pp: 10, - priority: 0, - flags: {nonsky: 1}, - terrain: 'mistyterrain', - condition: { - 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')) { - for (const active of this.getAllActive()) { - if (active.hasAbility('cloudnine')) { - return; - } - } - this.add('-activate', target, 'move: Misty Terrain'); - } - for (const active of this.getAllActive()) { - if (active.hasAbility('cloudnine')) { - this.add('-message', `${active.name} suppresses the effects of the terrain!`); - return; - } - } - return false; - }, - onTryAddVolatile(status, target, source, effect) { - if (!target.isGrounded() || target.isSemiInvulnerable()) return; - if (status.id === 'confusion') { - for (const active of this.getAllActive()) { - if (active.hasAbility('cloudnine')) { - this.add('-message', `${active.name} suppresses the effects of the terrain!`); - return; - } - } - 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()) { - for (const target of this.getAllActive()) { - if (target.hasAbility('cloudnine')) { - this.add('-message', `${target.name} suppresses the effects of the terrain!`); - return; - } - } - this.debug('misty terrain weaken'); - return this.chainModify(0.5); - } - }, - 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'); - }, - }, - secondary: null, - target: "all", - type: "Fairy", - zMove: {boost: {spd: 1}}, - contestType: "Beautiful", - }, - camouflage: { - inherit: true, - onHit(target) { - let newType = 'Normal'; - if (this.field.isTerrain('electricterrain')) { - newType = 'Electric'; - } else if (this.field.isTerrain('grassyterrain')) { - newType = 'Grass'; - } else if (this.field.isTerrain('mistyterrain')) { - newType = 'Fairy'; - } else if (this.field.isTerrain('psychicterrain')) { - newType = 'Psychic'; - } - for (const active of this.getAllActive()) { - if (active.hasAbility('cloudnine')) { - this.add('-message', `${target.name} suppresses the effects of the terrain!`); - newType = 'Normal'; - } - } - - if (target.getTypes().join() === newType || !target.setType(newType)) return false; - this.add('-start', target, 'typechange', newType); - }, - }, - expandingforce: { - inherit: true, - onBasePower(basePower, source) { - if (this.getAllActive().some(x => x.hasAbility('cloudnine'))) return; - if (this.field.isTerrain('psychicterrain') && source.isGrounded()) { - this.debug('terrain buff'); - return this.chainModify(1.5); - } - }, - onModifyMove(move, source, target) { - if (this.getAllActive().some(x => x.hasAbility('cloudnine'))) return; - if (this.field.isTerrain('psychicterrain') && source.isGrounded()) { - move.target = 'allAdjacentFoes'; - } - }, - }, - floralhealing: { - inherit: true, - onHit(target, source) { - let success = false; - if (this.field.isTerrain('grassyterrain')) { - if (this.getAllActive().some(x => x.hasAbility('cloudnine'))) { - this.add('-message', `${target.name} suppresses the effects of the terrain!`); - return success; - } - success = !!this.heal(this.modify(target.baseMaxhp, 0.667)); - } else { - success = !!this.heal(Math.ceil(target.baseMaxhp * 0.5)); - } - if (success && target.side !== source.side) { - target.staleness = 'external'; - } - return success; - }, - }, - grassyglide: { - inherit: true, - onModifyPriority(priority, source, target, move) { - if (this.getAllActive().some(x => x.hasAbility('cloudnine'))) return priority; - if (this.field.isTerrain('grassyterrain') && source.isGrounded()) { - return priority + 1; - } - }, - }, - mistyexplosion: { - inherit: true, - onBasePower(basePower, source) { - if (this.getAllActive().some(x => x.hasAbility('cloudnine'))) return; - if (this.field.isTerrain('mistyterrain') && source.isGrounded()) { - this.debug('misty terrain boost'); - return this.chainModify(1.5); - } - }, - }, - naturepower: { - inherit: true, - onTryHit(target, pokemon) { - let move = 'triattack'; - if (this.field.isTerrain('electricterrain')) { - move = 'thunderbolt'; - } else if (this.field.isTerrain('grassyterrain')) { - move = 'energyball'; - } else if (this.field.isTerrain('mistyterrain')) { - move = 'moonblast'; - } else if (this.field.isTerrain('psychicterrain')) { - move = 'psychic'; - } - for (const active of this.getAllActive()) { - if (active.hasAbility('cloudnine')) { - this.add('-message', `${active.name} suppresses the effects of the terrain!`); - move = 'triattack'; - } - } - this.actions.useMove(move, pokemon, target); - return null; - }, - }, - risingvoltage: { - inherit: true, - onBasePower(basePower, pokemon, target) { - if (this.getAllActive().some(x => x.hasAbility('cloudnine'))) return; - if (this.field.isTerrain('electricterrain') && target.isGrounded()) { - this.debug('terrain buff'); - return this.chainModify(2); - } - }, - }, - secretpower: { - inherit: true, - onModifyMove(move, pokemon) { - if (this.field.isTerrain('')) return; - for (const target of this.getAllActive()) { - if (target.hasAbility('cloudnine')) { - this.add('-message', `${target.name} suppresses the effects of the terrain!`); - return; - } - } - move.secondaries = []; - if (this.field.isTerrain('electricterrain')) { - move.secondaries.push({ - chance: 30, - status: 'par', - }); - } else if (this.field.isTerrain('grassyterrain')) { - move.secondaries.push({ - chance: 30, - status: 'slp', - }); - } else if (this.field.isTerrain('mistyterrain')) { - move.secondaries.push({ - chance: 30, - boosts: { - spa: -1, - }, - }); - } else if (this.field.isTerrain('psychicterrain')) { - move.secondaries.push({ - chance: 30, - boosts: { - spe: -1, - }, - }); - } - }, - }, - steelroller: { - inherit: true, - onTryHit() { - if (this.field.isTerrain('')) return false; - for (const target of this.getAllActive()) { - if (target.hasAbility('cloudnine')) { - this.add('-message', `${target.name} suppresses the effects of the terrain!`); - return false; - } - } - }, - }, - terrainpulse: { - inherit: true, - onModifyType(move, pokemon) { - if (!pokemon.isGrounded()) return; - if (this.getAllActive().some(x => x.hasAbility('cloudnine'))) return; - switch (this.field.terrain) { - case 'electricterrain': - move.type = 'Electric'; - break; - case 'grassyterrain': - move.type = 'Grass'; - break; - case 'mistyterrain': - move.type = 'Fairy'; - break; - case 'psychicterrain': - move.type = 'Psychic'; - break; - } - }, - onModifyMove(move, pokemon) { - if (this.field.terrain && pokemon.isGrounded()) { - for (const target of this.getAllActive()) { - if (target.hasAbility('cloudnine')) { - this.add('-message', `${target.name} suppresses the effects of the terrain!`); - return; - } - } - move.basePower *= 2; - } - }, - }, - bleakwindstorm: { - inherit: true, - self: { - onHit(pokemon, source, move) { - if (source.hasItem('airfreshener')) { - this.add('-activate', source, 'move: Aromatherapy'); - for (const ally of source.side.pokemon) { - if (ally !== source && (ally.volatiles['substitute'] && !move.infiltrates)) { - continue; - } - ally.cureStatus(); - } - } - }, - }, - }, - sandsearstorm: { - inherit: true, - self: { - onHit(pokemon, source, move) { - if (source.hasItem('airfreshener')) { - this.add('-activate', source, 'move: Aromatherapy'); - for (const ally of source.side.pokemon) { - if (ally !== source && (ally.volatiles['substitute'] && !move.infiltrates)) { - continue; - } - ally.cureStatus(); - } - } - }, - }, - }, - springtidestorm: { - inherit: true, - self: { - onHit(pokemon, source, move) { - if (source.hasItem('airfreshener')) { - this.add('-activate', source, 'move: Aromatherapy'); - for (const ally of source.side.pokemon) { - if (ally !== source && (ally.volatiles['substitute'] && !move.infiltrates)) { - continue; - } - ally.cureStatus(); - } - } - }, - }, - }, - wildboltstorm: { - inherit: true, - self: { - onHit(pokemon, source, move) { - if (source.hasItem('airfreshener')) { - this.add('-activate', source, 'move: Aromatherapy'); - for (const ally of source.side.pokemon) { - if (ally !== source && (ally.volatiles['substitute'] && !move.infiltrates)) { - continue; - } - ally.cureStatus(); - } - } - }, - }, - }, - aircutter: { - inherit: true, - self: { - onHit(pokemon, source, move) { - if (source.hasItem('airfreshener')) { - this.add('-activate', source, 'move: Aromatherapy'); - for (const ally of source.side.pokemon) { - if (ally !== source && (ally.volatiles['substitute'] && !move.infiltrates)) { - continue; - } - ally.cureStatus(); - } - } - }, - }, - }, - fairywind: { - inherit: true, - self: { - onHit(pokemon, source, move) { - if (source.hasItem('airfreshener')) { - this.add('-activate', source, 'move: Aromatherapy'); - for (const ally of source.side.pokemon) { - if (ally !== source && (ally.volatiles['substitute'] && !move.infiltrates)) { - continue; - } - ally.cureStatus(); - } - } - }, - }, - }, - gust: { - inherit: true, - self: { - onHit(pokemon, source, move) { - if (source.hasItem('airfreshener')) { - this.add('-activate', source, 'move: Aromatherapy'); - for (const ally of source.side.pokemon) { - if (ally !== source && (ally.volatiles['substitute'] && !move.infiltrates)) { - continue; - } - ally.cureStatus(); - } - } - }, - }, - }, - heatwave: { - inherit: true, - self: { - onHit(pokemon, source, move) { - if (source.hasItem('airfreshener')) { - this.add('-activate', source, 'move: Aromatherapy'); - for (const ally of source.side.pokemon) { - if (ally !== source && (ally.volatiles['substitute'] && !move.infiltrates)) { - continue; - } - ally.cureStatus(); - } - } - }, - }, - }, - hurricane: { - inherit: true, - self: { - onHit(pokemon, source, move) { - if (source.hasItem('airfreshener')) { - this.add('-activate', source, 'move: Aromatherapy'); - for (const ally of source.side.pokemon) { - if (ally !== source && (ally.volatiles['substitute'] && !move.infiltrates)) { - continue; - } - ally.cureStatus(); - } - } - }, - }, - }, - icywind: { - inherit: true, - self: { - onHit(pokemon, source, move) { - if (source.hasItem('airfreshener')) { - this.add('-activate', source, 'move: Aromatherapy'); - for (const ally of source.side.pokemon) { - if (ally !== source && (ally.volatiles['substitute'] && !move.infiltrates)) { - continue; - } - ally.cureStatus(); - } - } - }, - }, - }, - petalblizzard: { - inherit: true, - self: { - onHit(pokemon, source, move) { - if (source.hasItem('airfreshener')) { - this.add('-activate', source, 'move: Aromatherapy'); - for (const ally of source.side.pokemon) { - if (ally !== source && (ally.volatiles['substitute'] && !move.infiltrates)) { - continue; - } - ally.cureStatus(); - } - } - }, - }, - }, - sandstorm: { - inherit: true, - self: { - onHit(pokemon, source, move) { - if (source.hasItem('airfreshener')) { - this.add('-activate', source, 'move: Aromatherapy'); - for (const ally of source.side.pokemon) { - if (ally !== source && (ally.volatiles['substitute'] && !move.infiltrates)) { - continue; - } - ally.cureStatus(); - } - } - }, - }, - }, - tailwind: { - inherit: true, - self: { - onHit(pokemon, source, move) { - if (source.hasItem('airfreshener')) { - this.add('-activate', source, 'move: Aromatherapy'); - for (const ally of source.side.pokemon) { - if (ally !== source && (ally.volatiles['substitute'] && !move.infiltrates)) { - continue; - } - ally.cureStatus(); - } - } - }, - }, - }, - twister: { - inherit: true, - self: { - onHit(pokemon, source, move) { - if (source.hasItem('airfreshener')) { - this.add('-activate', source, 'move: Aromatherapy'); - for (const ally of source.side.pokemon) { - if (ally !== source && (ally.volatiles['substitute'] && !move.infiltrates)) { - continue; - } - ally.cureStatus(); - } - } - }, - }, - }, - whirlwind: { - inherit: true, - self: { - onHit(pokemon, source, move) { - if (source.hasItem('airfreshener')) { - this.add('-activate', source, 'move: Aromatherapy'); - for (const ally of source.side.pokemon) { - if (ally !== source && (ally.volatiles['substitute'] && !move.infiltrates)) { - continue; - } - ally.cureStatus(); - } - } - }, - }, - }, - boomburst: { - inherit: true, - self: { - sideCondition: 'echochamber', - }, - }, - bugbuzz: { - inherit: true, - self: { - sideCondition: 'echochamber', - }, - }, - clangingscales: { - inherit: true, - self: { - sideCondition: 'echochamber', - }, - }, - clangoroussoul: { - inherit: true, - self: { - sideCondition: 'echochamber', - }, - }, - confide: { - inherit: true, - self: { - sideCondition: 'echochamber', - }, - }, - disarmingvoice: { - inherit: true, - self: { - sideCondition: 'echochamber', - }, - }, - echoedvoice: { - inherit: true, - self: { - sideCondition: 'echochamber', - }, - }, - eeriespell: { - inherit: true, - self: { - sideCondition: 'echochamber', - }, - }, - growl: { - inherit: true, - self: { - sideCondition: 'echochamber', - }, - }, - healbell: { - inherit: true, - self: { - sideCondition: 'echochamber', - }, - }, - hypervoice: { - inherit: true, - self: { - sideCondition: 'echochamber', - }, - }, - metalsound: { - inherit: true, - self: { - sideCondition: 'echochamber', - }, - }, - howl: { - inherit: true, - self: { - sideCondition: 'echochamber', - }, - }, - nobleroar: { - inherit: true, - self: { - sideCondition: 'echochamber', - }, - }, - overdrive: { - inherit: true, - self: { - sideCondition: 'echochamber', - }, - }, - partingshot: { - inherit: true, - self: { - sideCondition: 'echochamber', - }, - }, - perishsong: { - inherit: true, - self: { - sideCondition: 'echochamber', - }, - }, - relicsong: { - inherit: true, - self: { - sideCondition: 'echochamber', - }, - }, - roar: { - inherit: true, - self: { - sideCondition: 'echochamber', - }, - }, - screech: { - inherit: true, - self: { - sideCondition: 'echochamber', - }, - }, - sing: { - inherit: true, - self: { - sideCondition: 'echochamber', - }, - }, - snarl: { - inherit: true, - self: { - sideCondition: 'echochamber', - }, - }, - snore: { - inherit: true, - self: { - sideCondition: 'echochamber', - }, - }, - sparklingaria: { - inherit: true, - self: { - sideCondition: 'echochamber', - }, - }, - chatter: { - inherit: true, - self: { - sideCondition: 'echochamber', - }, - }, - supersonic: { - inherit: true, - self: { - sideCondition: 'echochamber', - }, - }, - torchsong: { - inherit: true, - self: { - sideCondition: 'echochamber', - }, - }, - uproar: { - inherit: true, - self: { - sideCondition: 'echochamber', - volatileStatus: 'uproar', - }, - }, - revivalblessing: { - inherit: true, - flags: {snatch: 1}, - }, - shedtail: { - inherit: true, - flags: {snatch: 1}, - }, - aromaticmist: { - inherit: true, - flags: {bypasssub: 1, snatch: 1}, - }, - terablast: { - num: 851, - accuracy: 100, - basePower: 80, - category: "Special", - name: "Tera Blast", - pp: 10, - priority: 0, - flags: {protect: 1, mirror: 1, mustpressure: 1}, - onPrepareHit(target, source, move) { - if (source.terastallized) { - this.attrLastMove('[anim] Tera Blast ' + source.teraType); - } - }, - onModifyType(move, pokemon, target) { - if (pokemon.terastallized) { - move.type = pokemon.teraType; - } - }, - onModifyMove(move, pokemon) { - if ((pokemon.terastallized || pokemon.hasItem('terashard')) && - pokemon.getStat('atk', false, true) > pokemon.getStat('spa', false, true)) { - move.category = 'Physical'; - } - }, - secondary: null, - target: "normal", - type: "Normal", - }, - doubleshock: { - num: 892, - accuracy: 100, - basePower: 120, - category: "Physical", - name: "Double Shock", - pp: 5, - priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, - onTryMove(pokemon, target, move) { - if (pokemon.hasType('Electric')) return; - this.add('-fail', pokemon, 'move: Double Shock'); - this.attrLastMove('[still]'); - return null; - }, - self: { - onHit(pokemon) { - if (pokemon.hasItem('terashard') && pokemon.teraType === 'Electric') return; - pokemon.setType(pokemon.getTypes(true).map(type => type === "Electric" ? "???" : type)); - this.add('-start', pokemon, 'typechange', pokemon.getTypes().join('/'), '[from] move: Double Shock'); - }, - }, - secondary: null, - target: "normal", - type: "Electric", - contestType: "Clever", - }, - burnup: { - num: 682, - accuracy: 100, - basePower: 130, - category: "Special", - name: "Burn Up", - pp: 5, - priority: 0, - flags: {protect: 1, mirror: 1, defrost: 1}, - onTryMove(pokemon, target, move) { - if (pokemon.hasType('Fire')) return; - this.add('-fail', pokemon, 'move: Burn Up'); - this.attrLastMove('[still]'); - return null; - }, - self: { - onHit(pokemon) { - if (pokemon.hasItem('terashard') && pokemon.teraType === 'Fire') return; - pokemon.setType(pokemon.getTypes(true).map(type => type === "Fire" ? "???" : type)); - this.add('-start', pokemon, 'typechange', pokemon.getTypes().join('/'), '[from] move: Burn Up'); - }, - }, - secondary: null, - target: "normal", - type: "Fire", - contestType: "Clever", - }, - roost: { - num: 355, - accuracy: true, - basePower: 0, - category: "Status", - name: "Roost", - pp: 5, - priority: 0, - flags: {snatch: 1, heal: 1}, - heal: [1, 2], - self: { - volatileStatus: 'roost', - }, - condition: { - duration: 1, - onResidualOrder: 25, - onStart(target) { - if (!target.terastallized && !target.hasItem('terashard')) { - this.add('-singleturn', target, 'move: Roost'); - } else if (target.terastallized === "Flying" || target.hasItem('terashard')) { - this.add('-hint', "If a Flying Terastallized Pokemon uses Roost, it remains Flying-type."); - } - }, - onTypePriority: -1, - onType(types, pokemon) { - this.effectState.typeWas = types; - return types.filter(type => type !== 'Flying'); - }, - }, - secondary: null, - target: "self", - type: "Flying", - zMove: {effect: 'clearnegativeboost'}, - contestType: "Clever", - }, -}; diff --git a/data/mods/vaporemons/pokedex.ts b/data/mods/vaporemons/pokedex.ts deleted file mode 100644 index acb4cfb7dedb..000000000000 --- a/data/mods/vaporemons/pokedex.ts +++ /dev/null @@ -1,1598 +0,0 @@ -export const Pokedex: {[speciesid: string]: ModdedSpeciesData} = { - screamtail: { - inherit: true, - types: ["Fairy", "Dragon"], - abilities: {0: "Protosmosis", H: "Cute Charm"}, - }, - crabrawler: { - inherit: true, - abilities: {0: "Hyper Cutter", 1: "Iron Fist", H: "Fair Fight"}, - }, - crabominable: { - inherit: true, - types: ["Fighting", "Water"], - abilities: {0: "Fur Coat", 1: "Iron Fist", H: "Fair Fight"}, - }, - mareanie: { - inherit: true, - abilities: {0: "Battle Spines", 1: "Merciless", H: "Regenerator"}, - }, - toxapex: { - inherit: true, - types: ["Dark", "Water"], - abilities: {0: "Battle Spines", 1: "Merciless", H: "Regenerator"}, - }, - varoom: { - inherit: true, - abilities: {0: "Overcoat", 1: "Momentum", H: "Slow Start"}, - }, - revavroom: { - inherit: true, - abilities: {0: "Overcoat", 1: "Momentum", H: "Filter"}, - otherFormes: ["Revavroom-Segin", "Revavroom-Schedar", "Revavroom-Navi", "Revavroom-Ruchbah", "Revavroom-Caph"], - formeOrder: ["Revavroom", "Revavroom-Segin", "Revavroom-Schedar", "Revavroom-Navi", "Revavroom-Ruchbah", "Revavroom-Caph"], - }, - revavroomsegin: { - num: 966, - name: "Revavroom-Segin", - baseSpecies: "Revavroom", - forme: "Segin", - types: ["Dark"], - gender: "N", - baseStats: {hp: 80, atk: 119, def: 90, spa: 54, spd: 67, spe: 90}, - abilities: {0: "Intimidate"}, - heightm: 1.8, - weightkg: 120, - color: "Gray", - eggGroups: ["Mineral"], - requiredItem: "Segin Star Shard", - battleOnly: "Revavroom", - }, - revavroomschedar: { - num: 966, - name: "Revavroom-Schedar", - baseSpecies: "Revavroom", - forme: "Schedar", - types: ["Fire"], - gender: "N", - baseStats: {hp: 80, atk: 119, def: 90, spa: 54, spd: 67, spe: 90}, - abilities: {0: "Speed Boost"}, - heightm: 1.8, - weightkg: 120, - color: "Gray", - eggGroups: ["Mineral"], - requiredItem: "Schedar Star Shard", - battleOnly: "Revavroom", - }, - revavroomnavi: { - num: 966, - name: "Revavroom-Navi", - baseSpecies: "Revavroom", - forme: "Navi", - types: ["Poison"], - gender: "N", - baseStats: {hp: 80, atk: 119, def: 90, spa: 54, spd: 67, spe: 90}, - abilities: {0: "Toxic Debris"}, - heightm: 1.8, - weightkg: 120, - color: "Gray", - eggGroups: ["Mineral"], - requiredItem: "Navi Star Shard", - battleOnly: "Revavroom", - }, - revavroomruchbah: { - num: 966, - name: "Revavroom-Ruchbah", - baseSpecies: "Revavroom", - forme: "Ruchbah", - types: ["Fairy"], - gender: "N", - baseStats: {hp: 80, atk: 119, def: 90, spa: 54, spd: 67, spe: 90}, - abilities: {0: "Misty Surge"}, - heightm: 1.8, - weightkg: 120, - color: "Gray", - eggGroups: ["Mineral"], - requiredItem: "Ruchbah Star Shard", - battleOnly: "Revavroom", - }, - revavroomcaph: { - num: 966, - name: "Revavroom-Caph", - baseSpecies: "Revavroom", - forme: "Ruchbah", - types: ["Fighting"], - gender: "N", - baseStats: {hp: 80, atk: 119, def: 90, spa: 54, spd: 67, spe: 90}, - abilities: {0: "Stamina"}, - heightm: 1.8, - weightkg: 120, - color: "Gray", - eggGroups: ["Mineral"], - requiredItem: "Caph Star Shard", - battleOnly: "Revavroom", - }, - donphan: { - inherit: true, - abilities: {0: "Sturdy", 1: "Overcoat", H: "Sand Spit"}, - }, - avalugg: { - inherit: true, - abilities: {0: "Overcoat", 1: "Permafrost", H: "Sturdy"}, - }, - avalugghisui: { - inherit: true, - abilities: {0: "Strong Jaw", 1: "Permafrost", H: "Sturdy"}, - }, - vespiquen: { - inherit: true, - types: ["Poison", "Flying"], - abilities: {0: "Intimidate", 1: "Cute Charm", H: "Supreme Overlord"}, - }, - misdreavus: { - inherit: true, - abilities: {0: "Levitate", 1: "Death Aura", H: "Fairy Ringer"}, - }, - mismagius: { - inherit: true, - abilities: {0: "Levitate", 1: "Death Aura", H: "Fairy Ringer"}, - }, - floette: { - inherit: true, - abilities: {0: "Flower Veil", 1: "Healer", H: "Symbiosis"}, - }, - flabebe: { - inherit: true, - abilities: {0: "Flower Veil", 1: "Healer", H: "Symbiosis"}, - }, - florges: { - inherit: true, - abilities: {0: "Grass Pelt", 1: "Healer", H: "Symbiosis"}, - }, - oranguru: { - inherit: true, - abilities: {0: "Counteract", 1: "Healer", H: "Symbiosis"}, - }, - passimian: { - inherit: true, - abilities: {0: "Receiver", 1: "Counteract", H: "Defiant"}, - }, - petilil: { - inherit: true, - abilities: {0: "Chlorophyll", 1: "Sheer Heart", H: "Healer"}, - }, - lilligant: { - inherit: true, - abilities: {0: "Chlorophyll", 1: "Sheer Heart", H: "Healer"}, - }, - lilliganthisui: { - inherit: true, - abilities: {0: "Chlorophyll", 1: "Hustle", H: "Healer"}, - }, - ralts: { - inherit: true, - abilities: {0: "Synchronize", 1: "Trace", H: "Healer"}, - }, - kirlia: { - inherit: true, - abilities: {0: "Synchronize", 1: "Trace", H: "Healer"}, - }, - gardevoir: { - inherit: true, - abilities: {0: "Synchronize", 1: "Trace", H: "Healer"}, - }, - indeedee: { - inherit: true, - abilities: {0: "Healer", 1: "Synchronize", H: "Psychic Surge"}, - }, - indeedeef: { - inherit: true, - abilities: {0: "Healer", 1: "Synchronize", H: "Psychic Surge"}, - }, - magearna: { - inherit: true, - abilities: {0: "Soul-Heart", H: "Healer"}, - }, - magearnaoriginal: { - inherit: true, - abilities: {0: "Soul-Heart", H: "Healer"}, - }, - mesprit: { - inherit: true, - abilities: {0: "Levitate", H: "Healer"}, - }, - bellibolt: { - inherit: true, - types: ["Electric", "Water"], - abilities: {0: "Electromorphosis", 1: "Static", H: "Volt Absorb"}, - }, - decidueye: { - inherit: true, - abilities: {0: "Overgrow", H: "Contrary"}, - }, - decidueyehisui: { - inherit: true, - types: ["Ghost", "Fighting"], - abilities: {0: "Overgrow", H: "Scrappy"}, - }, - magnemite: { - inherit: true, - abilities: {0: "Magnet Pull", 1: "Levitate", H: "Analytic"}, - }, - magneton: { - inherit: true, - abilities: {0: "Magnet Pull", 1: "Levitate", H: "Analytic"}, - }, - magnezone: { - inherit: true, - abilities: {0: "Magnet Pull", 1: "Levitate", H: "Analytic"}, - }, - greattusk: { - inherit: true, - abilities: {0: "Protocrysalis", H: "Muscle Memory"}, - }, - sandyshocks: { - inherit: true, - abilities: {0: "Protocrysalis", H: "Sand Spit"}, - }, - fluttermane: { - inherit: true, - abilities: {0: "Protostasis", H: "Illusion"}, - }, - brutebonnet: { - inherit: true, - abilities: {0: "Protosmosis", H: "Seed Sower"}, - }, - slitherwing: { - inherit: true, - abilities: {0: "Protosynthesis", H: "Shield Dust"}, - }, - irontreads: { - inherit: true, - abilities: {0: "Rune Drive", H: "Momentum"}, - }, - ironbundle: { - inherit: true, - abilities: {0: "Neuron Drive", H: "Water Veil"}, - }, - ironhands: { - inherit: true, - abilities: {0: "Photon Drive", H: "Fair Fight"}, - }, - ironjugulis: { - inherit: true, - abilities: {0: "Neuron Drive", H: "Mega Launcher"}, - }, - ironmoth: { - inherit: true, - abilities: {0: "Photon Drive", H: "Exoskeleton"}, - }, - ironthorns: { - inherit: true, - abilities: {0: "Quark Drive", H: "Blunt Force"}, - }, - roaringmoon: { - inherit: true, - abilities: {0: "Protostasis", H: "Gale Wings"}, - }, - ironvaliant: { - inherit: true, - abilities: {0: "Rune Drive", H: "Outclass"}, - }, - ironleaves: { - inherit: true, - abilities: {0: "Quark Drive", H: "Justified"}, - }, - arboliva: { - inherit: true, - abilities: {0: "Seed Sower", 1: "Grass Pelt", H: "Harvest"}, - }, - squawkabillyyellow: { - inherit: true, - abilities: {0: "Intimidate", 1: "Hustle", H: "Gale Wings"}, - }, - squawkabillywhite: { - inherit: true, - abilities: {0: "Intimidate", 1: "Hustle", H: "Gale Wings"}, - }, - calyrex: { - inherit: true, - abilities: {0: "Unnerve", 1: "Fairy Ringer", H: "Grass Pelt"}, - }, - swablu: { - inherit: true, - abilities: {0: "Natural Cure", 1: "Gale Wings", H: "Sheer Heart"}, - }, - altaria: { - inherit: true, - abilities: {0: "Natural Cure", 1: "Gale Wings", H: "Sheer Heart"}, - }, - tropius: { - inherit: true, - abilities: {0: "Chlorophyll", 1: "Gale Wings", H: "Harvest"}, - }, - articuno: { - inherit: true, - abilities: {0: "Pressure", 1: "Gale Wings", H: "Permafrost"}, - }, - rotomfan: { - inherit: true, - abilities: {0: "Levitate", H: "Gale Wings"}, - }, - rotomheat: { - inherit: true, - abilities: {0: "Levitate", H: "Smelt"}, - }, - rotomfrost: { - inherit: true, - abilities: {0: "Levitate", H: "Permafrost"}, - }, - rotom: { - inherit: true, - abilities: {0: "Levitate", H: "Adaptability"}, - }, - rotomwash: { - inherit: true, - abilities: {0: "Levitate", H: "Water Veil"}, - }, - rotommow: { - inherit: true, - abilities: {0: "Levitate", H: "Natural Cure"}, - }, - bombirdier: { - inherit: true, - abilities: {0: "Big Pecks", 1: "Gale Wings", H: "Rocky Payload"}, - }, - oricorio: { - inherit: true, - types: ["Fighting", "Flying"], - abilities: {0: "Dancer", 1: "Muscle Memory", H: "Scrappy"}, - }, - oricoriopau: { - inherit: true, - types: ["Fairy", "Flying"], - abilities: {0: "Dancer", 1: "Muscle Memory", H: "Fairy Aura"}, - }, - oricoriopompom: { - inherit: true, - abilities: {0: "Dancer", 1: "Muscle Memory", H: "Fluffy"}, - }, - oricoriosensu: { - inherit: true, - abilities: {0: "Dancer", 1: "Muscle Memory", H: "Death Aura"}, - }, - hydreigon: { - inherit: true, - abilities: {0: "Levitate", H: "Muscle Memory"}, - }, - flamigo: { - inherit: true, - abilities: {0: "Scrappy", 1: "Muscle Memory", H: "Costar"}, - }, - meloetta: { - inherit: true, - types: ["Psychic", "Fighting"], - abilities: {0: "Trace", H: "Muscle Memory"}, - }, - meloettapirouette: { - inherit: true, - abilities: {0: "No Guard", H: "Muscle Memory"}, - }, - landorus: { - inherit: true, - abilities: {0: "Sand Force", H: "Cloud Nine"}, - }, - hoppip: { - inherit: true, - abilities: {0: "Chlorophyll", 1: "Cloud Nine", H: "Infiltrator"}, - }, - skiploom: { - inherit: true, - abilities: {0: "Chlorophyll", 1: "Cloud Nine", H: "Infiltrator"}, - }, - jumpluff: { - inherit: true, - abilities: {0: "Chlorophyll", 1: "Cloud Nine", H: "Infiltrator"}, - }, - lycanroc: { - inherit: true, - abilities: {0: "Steadfast", 1: "Sand Rush", H: "Cloud Nine"}, - }, - igglybuff: { - inherit: true, - abilities: {0: "Cute Charm", 1: "Competitive", H: "Cloud Nine"}, - }, - jigglypuff: { - inherit: true, - abilities: {0: "Cute Charm", 1: "Competitive", H: "Cloud Nine"}, - }, - wigglytuff: { - inherit: true, - abilities: {0: "Cute Charm", 1: "Natural Cure", H: "Wind Rider"}, - }, - dudunsparce: { - inherit: true, - abilities: {0: "Serene Grace", 1: "Cloud Nine", H: "Rattled"}, - }, - dudunsparcethreesegment: { - inherit: true, - abilities: {0: "Serene Grace", 1: "Cloud Nine", H: "Rattled"}, - }, - cacnea: { - inherit: true, - abilities: {0: "Battle Spines", H: "Water Absorb"}, - }, - cacturne: { - inherit: true, - abilities: {0: "Battle Spines", 1: "Sand Force", H: "Water Absorb"}, - }, - gible: { - inherit: true, - abilities: {0: "Sand Veil", 1: "Sand Force", H: "Rough Skin"}, - }, - gabite: { - inherit: true, - abilities: {0: "Sand Veil", 1: "Sand Force", H: "Rough Skin"}, - }, - garchomp: { - inherit: true, - abilities: {0: "Sand Veil", 1: "Sand Force", H: "Rough Skin"}, - }, - lycanrocmidnight: { - inherit: true, - abilities: {0: "Keen Eye", 1: "Sand Force", H: "No Guard"}, - }, - typhlosionhisui: { - inherit: true, - abilities: {0: "Blaze", H: "Death Aura"}, - }, - gastly: { - inherit: true, - abilities: {0: "Levitate", H: "Death Aura"}, - }, - haunter: { - inherit: true, - abilities: {0: "Levitate", H: "Death Aura"}, - }, - gengar: { - inherit: true, - abilities: {0: "Levitate", H: "Neutralizing Gas"}, - }, - rellor: { - inherit: true, - abilities: {0: "Compound Eyes", 1: "Sand Force", H: "Shed Skin"}, - }, - rabsca: { - inherit: true, - abilities: {0: "Sunblock", 1: "Sand Force", H: "Counteract"}, - }, - greavard: { - inherit: true, - abilities: {0: "Pickup", 1: "Death Aura", H: "Fluffy"}, - }, - houndstone: { - inherit: true, - abilities: {0: "Sand Rush", 1: "Death Aura", H: "Fluffy"}, - }, - spiritomb: { - inherit: true, - abilities: {0: "Pressure", 1: "Death Aura", H: "Green-Eyed"}, - }, - froslass: { - inherit: true, - abilities: {0: "Snow Cloak", 1: "Death Aura", H: "Sheer Heart"}, - }, - houndoom: { - inherit: true, - abilities: {0: "Death Aura", 1: "Flash Fire", H: "Unnerve"}, - }, - voltorbhisui: { - inherit: true, - abilities: {0: "Soundproof", 1: "Seed Sower", H: "Aftermath"}, - }, - electrodehisui: { - inherit: true, - abilities: {0: "Soundproof", 1: "Seed Sower", H: "Aftermath"}, - }, - chespin: { - inherit: true, - abilities: {0: "Overgrow", H: "Seed Sower"}, - }, - quilladin: { - inherit: true, - abilities: {0: "Overgrow", H: "Seed Sower"}, - }, - chesnaught: { - inherit: true, - abilities: {0: "Overgrow", H: "Seed Sower"}, - }, - bounsweet: { - inherit: true, - abilities: {0: "Seed Sower", 1: "Oblivious", H: "Sweet Veil"}, - }, - steenee: { - inherit: true, - abilities: {0: "Seed Sower", 1: "Oblivious", H: "Sweet Veil"}, - }, - tsareena: { - inherit: true, - types: ["Grass", "Fairy"], - abilities: {0: "Seed Sower", 1: "Queenly Majesty", H: "Cute Charm"}, - }, - leafeon: { - inherit: true, - abilities: {0: "Chlorophyll", H: "Sharpness"}, - }, - diglett: { - inherit: true, - abilities: {0: "Sand Spit", 1: "Arena Trap", H: "Sand Force"}, - }, - dugtrio: { - inherit: true, - abilities: {0: "Sand Spit", 1: "Arena Trap", H: "Sand Force"}, - }, - sandile: { - inherit: true, - abilities: {0: "Intimidate", 1: "Moxie", H: "Sand Spit"}, - }, - krokorok: { - inherit: true, - abilities: {0: "Intimidate", 1: "Moxie", H: "Sand Spit"}, - }, - krookodile: { - inherit: true, - abilities: {0: "Intimidate", 1: "Moxie", H: "Prehistoric Might"}, - }, - sandygast: { - inherit: true, - abilities: {0: "Water Compaction", 1: "Sand Spit", H: "Sand Veil"}, - }, - palossand: { - inherit: true, - abilities: {0: "Water Compaction", 1: "Sand Spit", H: "Sand Veil"}, - }, - pyroar: { - inherit: true, - types: ["Fire", "Ground"], - abilities: {0: "Sand Rush", 1: "Outclass", H: "Supreme Overlord"}, - }, - zacian: { - inherit: true, - abilities: {0: "Intrepid Sword", H: "Outclass"}, - }, - zaciancrowned: { - inherit: true, - abilities: {0: "Intrepid Sword", H: "Outclass"}, - }, - zamazenta: { - inherit: true, - abilities: {0: "Dauntless Shield", H: "Counteract"}, - }, - zamazentacrowned: { - inherit: true, - abilities: {0: "Dauntless Shield", H: "Counteract"}, - }, - uxie: { - inherit: true, - abilities: {0: "Levitate", H: "Counteract"}, - }, - azelf: { - inherit: true, - abilities: {0: "Levitate", H: "Outclass"}, - }, - tinkaton: { - inherit: true, - abilities: {0: "Mold Breaker", 1: "Counteract", H: "Blunt Force"}, - }, - girafarig: { - inherit: true, - abilities: {0: "Inner Focus", 1: "Early Bird", H: "Counteract"}, - }, - farigiraf: { - inherit: true, - abilities: {0: "Cud Chew", 1: "Armor Tail", H: "Counteract"}, - }, - umbreon: { - inherit: true, - abilities: {0: "Fairy Ringer", H: "Counteract"}, - }, - drifloon: { - inherit: true, - abilities: {0: "Counteract", 1: "Unburden", H: "Flare Boost"}, - }, - drifblim: { - inherit: true, - abilities: {0: "Counteract", 1: "Unburden", H: "Flare Boost"}, - }, - falinks: { - inherit: true, - abilities: {0: "Battle Armor", 1: "Counteract", H: "Defiant"}, - }, - basculegionf: { - inherit: true, - abilities: {0: "Swift Swim", 1: "Adaptability", H: "Counteract"}, - }, - taurospaldeablaze: { - inherit: true, - abilities: {0: "Intimidate", 1: "Sunblock", H: "Cud Chew"}, - }, - taurospaldeaaqua: { - inherit: true, - abilities: {0: "Intimidate", 1: "Counteract", H: "Cud Chew"}, - }, - espathra: { - inherit: true, - abilities: {0: "Opportunist", 1: "Outclass", H: "Speed Boost"}, - }, - haxorus: { - inherit: true, - abilities: {0: "Outclass", 1: "Mold Breaker", H: "Unnerve"}, - }, - eevee: { - inherit: true, - abilities: {0: "Outclass", 1: "Adaptability", H: "Anticipation"}, - }, - drednaw: { - inherit: true, - abilities: {0: "Strong Jaw", 1: "Sand Veil", H: "Swift Swim"}, - }, - sneasel: { - inherit: true, - abilities: {0: "Inner Focus", 1: "Keen Eye", H: "Green-Eyed"}, - }, - weavile: { - inherit: true, - abilities: {0: "Pressure", 1: "Snow Cloak", H: "Green-Eyed"}, - }, - snom: { - inherit: true, - abilities: {0: "Shield Dust", 1: "Snow Cloak", H: "Ice Scales"}, - }, - frosmoth: { - inherit: true, - abilities: {0: "Shield Dust", 1: "Snow Cloak", H: "Ice Scales"}, - }, - frigibax: { - inherit: true, - abilities: {0: "Thermal Exchange", 1: "Snow Cloak", H: "Ice Body"}, - }, - arctibax: { - inherit: true, - abilities: {0: "Thermal Exchange", 1: "Snow Cloak", H: "Ice Body"}, - }, - baxcalibur: { - inherit: true, - abilities: {0: "Thermal Exchange", 1: "Snow Cloak", H: "Ice Body"}, - }, - salandit: { - inherit: true, - abilities: {0: "Corrosion", 1: "Sunblock", H: "Green-Eyed"}, - }, - salazzle: { - inherit: true, - abilities: {0: "Corrosion", 1: "Sunblock", H: "Green-Eyed"}, - }, - fomantis: { - inherit: true, - abilities: {0: "Leaf Guard", 1: "Sunblock", H: "Contrary"}, - }, - lurantis: { - inherit: true, - abilities: {0: "Leaf Guard", 1: "Sunblock", H: "Contrary"}, - }, - moltres: { - inherit: true, - abilities: {0: "Pressure", 1: "Sunblock", H: "Flame Body"}, - }, - cyndaquil: { - inherit: true, - abilities: {0: "Blaze", H: "Sunblock"}, - }, - quilava: { - inherit: true, - abilities: {0: "Blaze", H: "Sunblock"}, - }, - typhlosion: { - inherit: true, - abilities: {0: "Blaze", H: "Sunblock"}, - }, - zarude: { - inherit: true, - abilities: {0: "Sunblock"}, - }, - zarudedada: { - inherit: true, - abilities: {0: "Sunblock"}, - }, - mew: { - inherit: true, - abilities: {0: "Synchronize", H: "Protean"}, - }, - hariyama: { - inherit: true, - abilities: {0: "Fair Fight", 1: "Guts", H: "Purifying Salt"}, - }, - mukalola: { - inherit: true, - abilities: {0: "Neutralizing Gas", 1: "Poison Touch", H: "Power of Alchemy"}, - }, - muk: { - inherit: true, - types: ["Poison", "Water"], - abilities: {0: "Regenerator", 1: "Liquid Ooze", H: "Water Absorb"}, - }, - meowthgalar: { - inherit: true, - abilities: {0: "Pickup", 1: "Tough Claws", H: "Steely Spirit"}, - }, - diglettalola: { - inherit: true, - abilities: {0: "Steely Spirit", 1: "Tangling Hair", H: "Sand Force"}, - }, - dugtrioalola: { - inherit: true, - abilities: {0: "Steely Spirit", 1: "Tangling Hair", H: "Sand Force"}, - }, - cufant: { - inherit: true, - abilities: {0: "Blunt Force", 1: "Steely Spirit", H: "Heavy Metal"}, - }, - copperajah: { - inherit: true, - abilities: {0: "Blunt Force", 1: "Steely Spirit", H: "Heavy Metal"}, - }, - bronzor: { - inherit: true, - abilities: {0: "Levitate", 1: "Heatproof", H: "Steely Spirit"}, - }, - bronzong: { - inherit: true, - abilities: {0: "Levitate", 1: "Heatproof", H: "Steely Spirit"}, - }, - thundurus: { - inherit: true, - abilities: {0: "Prankster", H: "Battle Spines"}, - }, - overqwil: { - inherit: true, - abilities: {0: "Battle Spines", 1: "Swift Swim", H: "Intimidate"}, - }, - clodsire: { - inherit: true, - abilities: {0: "Battle Spines", 1: "Water Absorb", H: "Unaware"}, - }, - jolteon: { - inherit: true, - abilities: {0: "Volt Absorb", H: "Battle Spines"}, - }, - pincurchin: { - inherit: true, - abilities: {0: "Lightning Rod", 1: "Battle Spines", H: "Electric Surge"}, - }, - cloyster: { - inherit: true, - abilities: {0: "Battle Spines", 1: "Skill Link", H: "Overcoat"}, - }, - spoink: { - inherit: true, - abilities: {0: "Thick Fat", 1: "Sheer Heart", H: "Gluttony"}, - }, - grumpig: { - inherit: true, - abilities: {0: "Thick Fat", 1: "Sheer Heart", H: "Gluttony"}, - }, - alomomola: { - inherit: true, - abilities: {0: "Healer", 1: "Sheer Heart", H: "Regenerator"}, - }, - luvdisc: { - inherit: true, - abilities: {0: "Swift Swim", 1: "Sheer Heart", H: "Hydration"}, - }, - lucario: { - inherit: true, - abilities: {0: "Sheer Heart", 1: "Steadfast", H: "Justified"}, - }, - gothita: { - inherit: true, - abilities: {0: "Sheer Heart", 1: "Competitive", H: "Shadow Tag"}, - }, - gothorita: { - inherit: true, - abilities: {0: "Sheer Heart", 1: "Competitive", H: "Shadow Tag"}, - }, - gothitelle: { - inherit: true, - abilities: {0: "Sheer Heart", 1: "Competitive", H: "Shadow Tag"}, - }, - gastrodon: { - inherit: true, - abilities: {0: "Color Change", 1: "Storm Drain", H: "Sand Force"}, - }, - deerling: { - inherit: true, - abilities: {0: "Chlorophyll", 1: "Color Change", H: "Serene Grace"}, - }, - sawsbuck: { - inherit: true, - abilities: {0: "Chlorophyll", 1: "Color Change", H: "Serene Grace"}, - }, - toedscool: { - inherit: true, - abilities: {0: "Mycelium Might", H: "Color Change"}, - }, - toedscruel: { - inherit: true, - abilities: {0: "Mycelium Might", H: "Color Change"}, - }, - heatran: { - inherit: true, - abilities: {0: "Flash Fire", 1: "Smelt", H: "Flame Body"}, - }, - torkoal: { - inherit: true, - abilities: {0: "White Smoke", 1: "Drought", H: "Smelt"}, - }, - camerupt: { - inherit: true, - abilities: {0: "Smelt", 1: "Solid Rock", H: "Cud Chew"}, - }, - rolycoly: { - inherit: true, - abilities: {0: "Steam Engine", 1: "Heatproof", H: "Smelt"}, - }, - carkol: { - inherit: true, - abilities: {0: "Steam Engine", 1: "Flame Body", H: "Smelt"}, - }, - coalossal: { - inherit: true, - abilities: {0: "Steam Engine", 1: "Flame Body", H: "Smelt"}, - }, - chiyu: { - inherit: true, - abilities: {0: "Beads of Ruin", H: "Smelt"}, - }, - tinglu: { - inherit: true, - abilities: {0: "Vessel of Ruin", H: "Green-Eyed"}, - }, - moltresgalar: { - inherit: true, - abilities: {0: "Berserk", H: "Green-Eyed"}, - }, - mewoth: { - inherit: true, - abilities: {0: "Pickup", 1: "Technician", H: "Green-Eyed"}, - }, - persian: { - inherit: true, - abilities: {0: "Limber", 1: "Technician", H: "Green-Eyed"}, - }, - meowthalola: { - inherit: true, - abilities: {0: "Pickup", 1: "Technician", H: "Green-Eyed"}, - }, - persianalola: { - inherit: true, - abilities: {0: "Fur Coat", 1: "Technician", H: "Green-Eyed"}, - }, - zangoose: { - inherit: true, - abilities: {0: "Immunity", 1: "Green-Eyed", H: "Toxic Boost"}, - }, - seviper: { - inherit: true, - abilities: {0: "Shed Skin", 1: "Green-Eyed", H: "Infiltrator"}, - }, - scovillain: { - inherit: true, - abilities: {0: "Chlorophyll", 1: "Green-Eyed", H: "Moody"}, - }, - hoopa: { - inherit: true, - abilities: {0: "Magician", H: "Green-Eyed"}, - }, - hoopaunbound: { - inherit: true, - abilities: {0: "Magician", H: "Green-Eyed"}, - }, - zorua: { - inherit: true, - abilities: {0: "Illusion", H: "Green-Eyed"}, - }, - zoroark: { - inherit: true, - abilities: {0: "Illusion", H: "Green-Eyed"}, - }, - murkrow: { - inherit: true, - abilities: {0: "Green-Eyed", 1: "Super Luck", H: "Prankster"}, - }, - honchkrow: { - inherit: true, - abilities: {0: "Green-Eyed", 1: "Super Luck", H: "Moxie"}, - }, - impidimp: { - inherit: true, - abilities: {0: "Prankster", 1: "Frisk", H: "Green-Eyed"}, - }, - morgrem: { - inherit: true, - abilities: {0: "Prankster", 1: "Frisk", H: "Green-Eyed"}, - }, - grimmsnarl: { - inherit: true, - abilities: {0: "Prankster", 1: "Frisk", H: "Green-Eyed"}, - }, - sableye: { - inherit: true, - abilities: {0: "Green-Eyed", 1: "Stall", H: "Prankster"}, - }, - mudbray: { - inherit: true, - abilities: {0: "Mud Wash", 1: "Stamina", H: "Inner Focus"}, - }, - mudsdale: { - inherit: true, - abilities: {0: "Mud Wash", 1: "Stamina", H: "Inner Focus"}, - }, - barboach: { - inherit: true, - abilities: {0: "Water Veil", 1: "Oblivious", H: "Mud Wash"}, - }, - whiscash: { - inherit: true, - abilities: {0: "Water Veil", 1: "Oblivious", H: "Mud Wash"}, - }, - vaporeon: { - inherit: true, - abilities: {0: "Water Absorb", H: "Mud Wash"}, - }, - surskit: { - inherit: true, - abilities: {0: "Swift Swim", 1: "Mud Wash", H: "Rain Dish"}, - }, - masquerain: { - inherit: true, - abilities: {0: "Intimidate", 1: "Mud Wash", H: "Unnerve"}, - }, - pelipper: { - inherit: true, - abilities: {0: "Mud Wash", 1: "Drizzle", H: "Rain Dish"}, - }, - orthworm: { - inherit: true, - types: ["Steel", "Water"], - abilities: {0: "Earth Eater", 1: "Steely Spirit", H: "Mud Wash"}, - }, - psyduck: { - inherit: true, - abilities: {0: "Mud Wash", 1: "Cloud Nine", H: "Swift Swim"}, - }, - golduck: { - inherit: true, - abilities: {0: "Mud Wash", 1: "Cloud Nine", H: "Swift Swim"}, - }, - wooper: { - inherit: true, - abilities: {0: "Mud Wash", 1: "Water Absorb", H: "Unaware"}, - }, - quagsire: { - inherit: true, - abilities: {0: "Mud Wash", 1: "Water Absorb", H: "Unaware"}, - }, - salamence: { - inherit: true, - abilities: {0: "Intimidate", 1: "Technician", H: "Moxie"}, - }, - inteleon: { - inherit: true, - abilities: {0: "Torrent", H: "Outclass"}, - }, - dragalge: { - inherit: true, - abilities: {0: "Poison Point", 1: "Color Change", H: "Adaptability"}, - }, - sandshrew: { - inherit: true, - abilities: {0: "Momentum", 1: "Battle Spines", H: "Sand Rush"}, - }, - sandshrewalola: { - inherit: true, - abilities: {0: "Steely Spirit", 1: "Battle Spines", H: "Slush Rush"}, - }, - sandslash: { - inherit: true, - abilities: {0: "Momentum", 1: "Battle Spines", H: "Sand Rush"}, - }, - sandslashalola: { - inherit: true, - abilities: {0: "Steely Spirit", 1: "Battle Spines", H: "Slush Rush"}, - }, - bellsprout: { - inherit: true, - abilities: {0: "Chlorophyll", 1: "Seed Sower", H: "Gluttony"}, - }, - weepinbell: { - inherit: true, - abilities: {0: "Chlorophyll", 1: "Seed Sower", H: "Gluttony"}, - }, - victreebel: { - inherit: true, - abilities: {0: "Chlorophyll", 1: "Seed Sower", H: "Gluttony"}, - }, - poliwag: { - inherit: true, - abilities: {0: "Water Absorb", 1: "Mud Wash", H: "Swift Swim"}, - }, - poliwhirl: { - inherit: true, - abilities: {0: "Water Absorb", 1: "Mud Wash", H: "Swift Swim"}, - }, - poliwrath: { - inherit: true, - abilities: {0: "Water Absorb", 1: "Mud Wash", H: "Swift Swim"}, - }, - politoed: { - inherit: true, - abilities: {0: "Water Absorb", 1: "Mud Wash", H: "Drizzle"}, - }, - munchlax: { - inherit: true, - abilities: {0: "Counteract", 1: "Thick Fat", H: "Gluttony"}, - }, - snorlax: { - inherit: true, - abilities: {0: "Comatose", 1: "Thick Fat", H: "Gluttony"}, - }, - sentret: { - inherit: true, - abilities: {0: "Cute Charm", 1: "Keen Eye", H: "Frisk"}, - }, - furret: { - inherit: true, - abilities: {0: "Cute Charm", 1: "Keen Eye", H: "Frisk"}, - }, - spinarak: { - inherit: true, - abilities: {0: "Battle Spines", 1: "Swarm", H: "Sniper"}, - }, - ariados: { - inherit: true, - abilities: {0: "Battle Spines", 1: "Swarm", H: "Sniper"}, - }, - gligar: { - inherit: true, - abilities: {0: "Sand Force", 1: "Exoskeleton", H: "Immunity"}, - }, - gliscor: { - inherit: true, - abilities: {0: "Sand Force", 1: "Exoskeleton", H: "Poison Heal"}, - }, - slugma: { - inherit: true, - abilities: {0: "Smelt", 1: "Flame Body", H: "Weak Armor"}, - }, - magcargo: { - inherit: true, - abilities: {0: "Smelt", 1: "Flame Body", H: "Weak Armor"}, - }, - lotad: { - inherit: true, - abilities: {0: "Swift Swim", 1: "Rain Dish", H: "Overcoat"}, - }, - lombre: { - inherit: true, - abilities: {0: "Swift Swim", 1: "Rain Dish", H: "Overcoat"}, - }, - ludicolo: { - inherit: true, - abilities: {0: "Swift Swim", 1: "Rain Dish", H: "Overcoat"}, - }, - seedot: { - inherit: true, - abilities: {0: "Chlorophyll", 1: "Early Bird", H: "Cloud Nine"}, - }, - nuzleaf: { - inherit: true, - abilities: {0: "Chlorophyll", 1: "Early Bird", H: "Cloud Nine"}, - }, - shiftry: { - inherit: true, - abilities: {0: "Chlorophyll", 1: "Wind Rider", H: "Cloud Nine"}, - }, - volbeat: { - inherit: true, - abilities: {0: "Cute Charm", 1: "Swarm", H: "Prankster"}, - }, - illumise: { - inherit: true, - abilities: {0: "Cute Charm", 1: "Tinted Lens", H: "Prankster"}, - }, - milotic: { - inherit: true, - types: ["Water", "Fairy"], - abilities: {0: "Marvel Scale", 1: "Water Veil", H: "Sheer Heart"}, - }, - duskull: { - inherit: true, - abilities: {0: "Levitate", 1: "Death Aura", H: "Frisk"}, - }, - dusclops: { - inherit: true, - abilities: {0: "Pressure", 1: "Death Aura", H: "Frisk"}, - }, - dusknoir: { - inherit: true, - abilities: {0: "Pressure", 1: "Death Aura", H: "Frisk"}, - }, - turtwig: { - inherit: true, - abilities: {0: "Overgrow", H: "Sand Force"}, - }, - grotle: { - inherit: true, - abilities: {0: "Overgrow", H: "Sand Force"}, - }, - torterra: { - inherit: true, - abilities: {0: "Overgrow", H: "Sand Force"}, - }, - chimchar: { - inherit: true, - abilities: {0: "Blaze", H: "Muscle Memory"}, - }, - monferno: { - inherit: true, - abilities: {0: "Blaze", H: "Muscle Memory"}, - }, - infernape: { - inherit: true, - abilities: {0: "Blaze", H: "Muscle Memory"}, - }, - phione: { - inherit: true, - abilities: {0: "Hydration", H: "Healer"}, - }, - manaphy: { - inherit: true, - abilities: {0: "Hydration", H: "Healer"}, - }, - shaymin: { - inherit: true, - abilities: {0: "Serene Grace", H: "Grass Pelt"}, - }, - gurdurr: { - inherit: true, - abilities: {0: "Guts", 1: "Sheer Force", H: "Steely Spirit"}, - }, - sewaddle: { - inherit: true, - abilities: {0: "Grass Pelt", 1: "Chlorophyll", H: "Overcoat"}, - }, - swadloon: { - inherit: true, - abilities: {0: "Grass Pelt", 1: "Chlorophyll", H: "Overcoat"}, - }, - leavanny: { - inherit: true, - abilities: {0: "Grass Pelt", 1: "Chlorophyll", H: "Overcoat"}, - }, - ducklett: { - inherit: true, - abilities: {0: "Keen Eye", 1: "Big Pecks", H: "Gale Wings"}, - }, - swanna: { - inherit: true, - abilities: {0: "Keen Eye", 1: "Big Pecks", H: "Gale Wings"}, - }, - litwick: { - inherit: true, - abilities: {0: "Flame Body", 1: "Flash Fire", H: "Smelt"}, - }, - lampent: { - inherit: true, - abilities: {0: "Flame Body", 1: "Flash Fire", H: "Smelt"}, - }, - chandelure: { - inherit: true, - abilities: {0: "Flame Body", 1: "Flash Fire", H: "Smelt"}, - }, - mienfoo: { - inherit: true, - abilities: {0: "Outclass", 1: "Regenerator", H: "Reckless"}, - }, - mienshao: { - inherit: true, - abilities: {0: "Outclass", 1: "Regenerator", H: "Reckless"}, - }, - cutiefly: { - inherit: true, - abilities: {0: "Cute Charm", 1: "Shield Dust", H: "Healer"}, - }, - ribombee: { - inherit: true, - abilities: {0: "Cute Charm", 1: "Shield Dust", H: "Healer"}, - }, - poltchageist: { - inherit: true, - abilities: {0: "Hospitality", 1: "Healer", H: "Heatproof"}, - }, - sinistcha: { - inherit: true, - abilities: {0: "Hospitality", 1: "Healer", H: "Heatproof"}, - }, - poltchageistartisan: { - inherit: true, - abilities: {0: "Hospitality", 1: "Healer", H: "Heatproof"}, - }, - sinistchamasterpiece: { - inherit: true, - abilities: {0: "Hospitality", 1: "Healer", H: "Heatproof"}, - }, - ogerpon: { - inherit: true, - abilities: {0: "Defiant", H: "Seed Sower"}, - }, - scizor: { - inherit: true, - abilities: {0: "Swarm", 1: "Technician", H: "Exoskeleton"}, - }, - forretress: { - inherit: true, - abilities: {0: "Sturdy", 1: "Exoskeleton", H: "Overcoat"}, - }, - klawf: { - inherit: true, - abilities: {0: "Anger Shell", 1: "Exoskeleton", H: "Regenerator"}, - }, - corphish: { - inherit: true, - abilities: {0: "Hyper Cutter", 1: "Exoskeleton", H: "Adaptability"}, - }, - crawdaunt: { - inherit: true, - abilities: {0: "Hyper Cutter", 1: "Exoskeleton", H: "Adaptability"}, - }, - charjabug: { - inherit: true, - abilities: {0: "Levitate", 1: "Swarm"}, - }, - vikavolt: { - inherit: true, - abilities: {0: "Levitate", 1: "Swarm", H: "Exoskeleton"}, - }, - tyranitar: { - inherit: true, - abilities: {0: "Sand Stream", 1: "Exoskeleton", H: "Unnerve"}, - }, - pupitar: { - inherit: true, - abilities: {0: "Shed Skin", 1: "Exoskeleton"}, - }, - larvitar: { - inherit: true, - abilities: {0: "Guts", 1: "Exoskeleton", H: "Sand Veil"}, - }, - regidrago: { - inherit: true, - abilities: {0: "Dragon's Maw", H: "Blunt Force"}, - }, - tauros: { - inherit: true, - abilities: {0: "Intimidate", 1: "Blunt Force", H: "Cud Chew"}, - }, - dondozo: { - inherit: true, - abilities: {0: "Unaware", 1: "Blunt Force", H: "Water Veil"}, - }, - geodude: { - inherit: true, - abilities: {0: "Blunt Force", 1: "Sturdy", H: "Sand Veil"}, - }, - graveler: { - inherit: true, - abilities: {0: "Blunt Force", 1: "Sturdy", H: "Sand Veil"}, - }, - golem: { - inherit: true, - abilities: {0: "Blunt Force", 1: "Sturdy", H: "Sand Veil"}, - }, - rufflet: { - inherit: true, - abilities: {0: "Fair Fight", 1: "Blunt Force", H: "Hustle"}, - }, - braviary: { - inherit: true, - abilities: {0: "Fair Fight", 1: "Blunt Force", H: "Defiant"}, - }, - braviaryhisui: { - inherit: true, - abilities: {0: "Fair Fight", 1: "Sheer Force", H: "Tinted Lens"}, - }, - volcanion: { - inherit: true, - abilities: {0: "Water Absorb", H: "Water Veil"}, - }, - silicobra: { - inherit: true, - abilities: {0: "Shed Skin", 1: "Sand Spit", H: "Shield Dust"}, - }, - sandaconda: { - inherit: true, - abilities: {0: "Shed Skin", 1: "Sand Spit", H: "Shield Dust"}, - }, - larvesta: { - inherit: true, - abilities: {0: "Flame Body", 1: "Shield Dust", H: "Swarm"}, - }, - volcarona: { - inherit: true, - abilities: {0: "Flame Body", 1: "Shield Dust", H: "Swarm"}, - }, - wochien: { - inherit: true, - abilities: {0: "Tablets of Ruin", H: "Shield Dust"}, - }, - flareon: { - inherit: true, - abilities: {0: "Smelt", H: "Fur Coat"}, - }, - glaceon: { - inherit: true, - abilities: {0: "Permafrost", H: "Muscle Memory"}, - }, - tarountula: { - inherit: true, - abilities: {0: "Insomnia", 1: "Steadfast", H: "Stakeout"}, - }, - spidops: { - inherit: true, - abilities: {0: "Insomnia", 1: "Steadfast", H: "Stakeout"}, - }, - cleffa: { - inherit: true, - abilities: {0: "Fairy Ringer", 1: "Magic Guard", H: "Friend Guard"}, - }, - clefairy: { - inherit: true, - abilities: {0: "Fairy Ringer", 1: "Magic Guard", H: "Friend Guard"}, - }, - clefable: { - inherit: true, - abilities: {0: "Fairy Ringer", 1: "Magic Guard", H: "Unaware"}, - }, - shroomish: { - inherit: true, - abilities: {0: "Fairy Ringer", 1: "Poison Heal", H: "Quick Feet"}, - }, - breloom: { - inherit: true, - abilities: {0: "Fairy Ringer", 1: "Poison Heal", H: "Technician"}, - }, - chingling: { - inherit: true, - abilities: {0: "Levitate", H: "Fairy Ringer"}, - }, - chimecho: { - inherit: true, - abilities: {0: "Levitate", H: "Fairy Ringer"}, - }, - hoothoot: { - inherit: true, - abilities: {0: "Synchronize", 1: "Fairy Ringer", H: "Tinted Lens"}, - }, - noctowl: { - inherit: true, - abilities: {0: "Synchronize", 1: "Fairy Ringer", H: "Tinted Lens"}, - }, - teddiursa: { - inherit: true, - abilities: {0: "Pickup", 1: "Quick Feet", H: "Fairy Ringer"}, - }, - ursaring: { - inherit: true, - abilities: {0: "Guts", 1: "Quick Feet", H: "Fairy Ringer"}, - }, - ursaluna: { - inherit: true, - abilities: {0: "Guts", 1: "Bulletproof", H: "Fairy Ringer"}, - }, - charcadet: { - inherit: true, - abilities: {0: "Flash Fire", 1: "Justified", H: "Flame Body"}, - }, - ceruledge: { - inherit: true, - abilities: {0: "Flash Fire", 1: "Justified", H: "Weak Armor"}, - }, - armarouge: { - inherit: true, - abilities: {0: "Flash Fire", 1: "Justified", H: "Weak Armor"}, - }, - rookidee: { - inherit: true, - abilities: {0: "Keen Eye", 1: "Justified", H: "Big Pecks"}, - }, - corvisquire: { - inherit: true, - abilities: {0: "Keen Eye", 1: "Justified", H: "Big Pecks"}, - }, - corviknight: { - inherit: true, - abilities: {0: "Pressure", 1: "Justified", H: "Mirror Armor"}, - }, - cyclizar: { - inherit: true, - abilities: {0: "Shed Skin", 1: "Momentum", H: "Regenerator"}, - }, - bramblin: { - inherit: true, - abilities: {0: "Wind Rider", 1: "Momentum", H: "Infiltrator"}, - }, - brambleghast: { - inherit: true, - abilities: {0: "Wind Rider", 1: "Sand Rush", H: "Infiltrator"}, - }, - snorunt: { - inherit: true, - abilities: {0: "Inner Focus", 1: "Moody", H: "Permafrost"}, - }, - glalie: { - inherit: true, - abilities: {0: "Momentum", 1: "Moody", H: "Permafrost"}, - }, - okidogi: { - inherit: true, - abilities: {0: "Toxic Chain", H: "Intimidate"}, - }, - fezandipiti: { - inherit: true, - abilities: {0: "Toxic Chain", H: "Neutralizing Gas"}, - }, - munkidori: { - inherit: true, - abilities: {0: "Toxic Chain", H: "Magic Guard"}, - }, - sneasler: { - inherit: true, - abilities: {0: "Pressure", 1: "Muscle Memory", H: "Poison Touch"}, - }, - lechonk: { - inherit: true, - abilities: {0: "Aroma Veil", 1: "Cud Chew", H: "Thick Fat"}, - }, - oinkologne: { - inherit: true, - abilities: {0: "Lingering Aroma", 1: "Cud Chew", H: "Thick Fat"}, - }, - oinkolognef: { - inherit: true, - abilities: {0: "Aroma Veil", 1: "Cud Chew", H: "Thick Fat"}, - }, - mareep: { - inherit: true, - abilities: {0: "Static", 1: "Cud Chew", H: "Plus"}, - }, - flaaffy: { - inherit: true, - abilities: {0: "Static", 1: "Cud Chew", H: "Plus"}, - }, - ampharos: { - inherit: true, - abilities: {0: "Static", 1: "Cud Chew", H: "Plus"}, - }, - cryogonal: { - inherit: true, - abilities: {0: "Levitate", H: "Permafrost"}, - }, - growlithehisui: { - inherit: true, - abilities: {0: "Intimidate", 1: "Prehistoric Might", H: "Rock Head"}, - }, - arcaninehisui: { - inherit: true, - abilities: {0: "Intimidate", 1: "Prehistoric Might", H: "Rock Head"}, - }, - growlithe: { - inherit: true, - abilities: {0: "Intimidate", 1: "Fair Fight", H: "Justified"}, - }, - arcanine: { - inherit: true, - abilities: {0: "Intimidate", 1: "Fair Fight", H: "Justified"}, - }, - kleavor: { - inherit: true, - abilities: {0: "Swarm", 1: "Prehistoric Might", H: "Sharpness"}, - }, - piloswine: { - inherit: true, - abilities: {0: "Oblivious", 1: "Prehistoric Might", H: "Thick Fat"}, - }, - mamoswine: { - inherit: true, - abilities: {0: "Oblivious", 1: "Prehistoric Might", H: "Thick Fat"}, - }, - yanma: { - inherit: true, - abilities: {0: "Speed Boost", 1: "Compound Eyes", H: "Prehistoric Might"}, - }, - yanmega: { - inherit: true, - abilities: {0: "Speed Boost", 1: "Tinted Lens", H: "Prehistoric Might"}, - }, - stonjourner: { - inherit: true, - abilities: {0: "Power Spot", H: "Prehistoric Might"}, - }, - walkingwake: { - inherit: true, - abilities: {0: "Protosynthesis", H: "Prehistoric Might"}, - }, - gallade: { - inherit: true, - abilities: {0: "Steadfast", 1: "Sharpness", H: "Justified"}, - }, - diancie: { - inherit: true, - abilities: {0: "Clear Body", H: "Synchronize"}, - }, - drowzee: { - inherit: true, - abilities: {0: "Insomnia", 1: "Forewarn", H: "Synchronize"}, - }, - hypno: { - inherit: true, - abilities: {0: "Insomnia", 1: "Forewarn", H: "Synchronize"}, - }, - bruxish: { - inherit: true, - abilities: {0: "Dazzling", 1: "Strong Jaw", H: "Synchronize"}, - }, - ditto: { - inherit: true, - abilities: {0: "Limber", 1: "Illusion", H: "Imposter"}, - }, - perrserker: { - inherit: true, - abilities: {0: "Steadfast", 1: "Tough Claws", H: "Steely Spirit"}, - }, - sunkern: { - inherit: true, - abilities: {0: "Chlorophyll", 1: "Early Bird", H: "Steadfast"}, - }, - sunflora: { - inherit: true, - abilities: {0: "Chlorophyll", 1: "Early Bird", H: "Steadfast"}, - }, - jangmoo: { - inherit: true, - abilities: {0: "Bulletproof", 1: "Fair Fight", H: "Overcoat"}, - }, - hakamoo: { - inherit: true, - abilities: {0: "Bulletproof", 1: "Fair Fight", H: "Overcoat"}, - }, - kommoo: { - inherit: true, - abilities: {0: "Bulletproof", 1: "Fair Fight", H: "Overcoat"}, - }, - oshawott: { - inherit: true, - abilities: {0: "Torrent", H: "Fair Fight"}, - }, - dewott: { - inherit: true, - abilities: {0: "Torrent", H: "Fair Fight"}, - }, - samurott: { - inherit: true, - abilities: {0: "Torrent", H: "Fair Fight"}, - }, - delphox: { - inherit: true, - types: ["Fire", "Fairy"], - }, -}; diff --git a/data/mods/vaporemons/rulesets.ts b/data/mods/vaporemons/rulesets.ts deleted file mode 100644 index 1c30f925d895..000000000000 --- a/data/mods/vaporemons/rulesets.ts +++ /dev/null @@ -1,43 +0,0 @@ -export const Rulesets: {[k: string]: ModdedFormatData} = { - teampreview: { - effectType: 'Rule', - name: 'Team Preview', - desc: "Allows each player to see the Pokémon on their opponent's team before they choose their lead Pokémon", - onBegin() { - if (this.ruleTable.has(`teratypepreview`)) { - this.add('rule', 'Tera Type Preview: Tera Types are shown at Team Preview'); - } - }, - onTeamPreview() { - this.add('clearpoke'); - for (const pokemon of this.getAllPokemon()) { - const details = pokemon.details.replace(', shiny', '') - .replace(/(Greninja|Gourgeist|Pumpkaboo|Xerneas|Silvally|Urshifu|Dudunsparce|Revavroom)(-[a-zA-Z?-]+)?/g, '$1-*') - .replace(/(Zacian|Zamazenta)(?!-Crowned)/g, '$1-*'); // Hacked-in Crowned formes will be revealed - this.add('poke', pokemon.side.id, details, ''); - } - this.makeRequest('teampreview'); - 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}`); - } - } - }, - }, - vaporemonsmod: { - effectType: 'Rule', - name: 'VaporeMons Mod', - desc: 'At the start of a battle, gives each player a link to the VaporeMons thread so they can use it to get information about new additions to the metagame.', - onBegin() { - this.add('-message', `Welcome to VaporeMons!`); - this.add('-message', `This is a [Gen 9] OU-based format where a bunch of new moves, items, abilities, and non-stat adjustments to Pokemon were added to the game!`); - this.add('-message', `You can find our thread and metagame resources here:`); - this.add('-message', `https://www.smogon.com/forums/threads/vaporemons-slate-1-discussion-phase.3722917/`); - }, - }, -}; diff --git a/data/mods/vaporemons/scripts.ts b/data/mods/vaporemons/scripts.ts deleted file mode 100644 index 1e5e4086249d..000000000000 --- a/data/mods/vaporemons/scripts.ts +++ /dev/null @@ -1,1494 +0,0 @@ -export const Scripts: ModdedBattleScriptsData = { - gen: 9, - pokemon: { - ignoringAbility() { - let neutralizinggas = false; - for (const pokemon of this.battle.getAllActive()) { - if (pokemon.ability === ('neutralizinggas' as ID) || - ( - pokemon.ability === ('powerofalchemyweezing' as ID) && - !pokemon.volatiles['gastroacid'] && - !pokemon.volatiles['counteract'] && - !pokemon.abilityState.ending - ) - ) { - neutralizinggas = true; - break; - } - } - return !!( - (this.battle.gen >= 5 && !this.isActive) || - ((this.volatiles['gastroacid'] || this.volatiles['counteract'] || - (neutralizinggas && this.ability !== ('neutralizinggas' as ID))) && !this.getAbility().isPermanent) - ); - }, - }, - init() { - this.modData("Learnsets", "screamtail").learnset.dracometeor = ["9L1"]; - this.modData("Learnsets", "screamtail").learnset.dragonpulse = ["9L1"]; - this.modData("Learnsets", "screamtail").learnset.knockoff = ["9L1"]; - this.modData("Learnsets", "screamtail").learnset.nastyplot = ["9L1"]; - this.modData("Learnsets", "screamtail").learnset.outrage = ["9L1"]; - this.modData("Learnsets", "screamtail").learnset.superfang = ["9L1"]; - this.modData("Learnsets", "crabominable").learnset.jetpunch = ["9L1"]; - this.modData("Learnsets", "crabominable").learnset.bulletpunch = ["9L1"]; - this.modData("Learnsets", "crabominable").learnset.machpunch = ["9L1"]; - this.modData("Learnsets", "crabominable").learnset.hammerarm = ["9L1"]; - this.modData("Learnsets", "crabominable").learnset.knockoff = ["9L1"]; - this.modData("Learnsets", "crabominable").learnset.slackoff = ["9L1"]; - this.modData("Learnsets", "crabominable").learnset.swordsdance = ["9L1"]; - this.modData("Learnsets", "revavroom").learnset.magicaltorque = ["9L1"]; - this.modData("Learnsets", "revavroom").learnset.wickedtorque = ["9L1"]; - this.modData("Learnsets", "revavroom").learnset.blazingtorque = ["9L1"]; - this.modData("Learnsets", "revavroom").learnset.combattorque = ["9L1"]; - this.modData("Learnsets", "revavroom").learnset.noxioustorque = ["9L1"]; - this.modData("Learnsets", "revavroom").learnset.highhorsepower = ["9L1"]; - this.modData("Learnsets", "toxapex").learnset.bodypress = ["9L1"]; - this.modData("Learnsets", "toxapex").learnset.darkpulse = ["9L1"]; - this.modData("Learnsets", "toxapex").learnset.crunch = ["9L1"]; - this.modData("Learnsets", "toxapex").learnset.knockoff = ["9L1"]; - this.modData("Learnsets", "toxapex").learnset.nastyplot = ["9L1"]; - this.modData("Learnsets", "toxapex").learnset.superfang = ["9L1"]; - this.modData("Learnsets", "toxapex").learnset.taunt = ["9L1"]; - this.modData('Learnsets', 'sneasler').learnset.direclaw = ['9L1']; - this.modData('Learnsets', 'skuntank').learnset.direclaw = ['9L1']; - this.modData('Learnsets', 'salazzle').learnset.direclaw = ['9L1']; - this.modData('Learnsets', 'eternatus').learnset.direclaw = ['9L1']; - this.modData('Learnsets', 'grafaiai').learnset.direclaw = ['9L1']; - this.modData('Learnsets', 'magnemite').learnset.electroweb = ['9L1']; - this.modData('Learnsets', 'mareep').learnset.electroweb = ['9L1']; - this.modData('Learnsets', 'spidops').learnset.electroweb = ['9L1']; - this.modData('Learnsets', 'surskit').learnset.electroweb = ['9L1']; - this.modData('Learnsets', 'pichu').learnset.electroweb = ['9L1']; - this.modData('Learnsets', 'raichualola').learnset.electroweb = ['9L1']; - this.modData('Learnsets', 'samurotthisui').learnset.ceaselessedge = ['9L1']; - this.modData('Learnsets', 'cacturne').learnset.ceaselessedge = ['9L1']; - this.modData('Learnsets', 'houndoom').learnset.ceaselessedge = ['9L1']; - this.modData('Learnsets', 'weavile').learnset.ceaselessedge = ['9L1']; - this.modData('Learnsets', 'lokix').learnset.ceaselessedge = ['9L1']; - this.modData('Learnsets', 'carbink').learnset.meteorbeam = ['9L1']; - this.modData('Learnsets', 'delphox').learnset.meteorbeam = ['9L1']; - this.modData('Learnsets', 'diancie').learnset.meteorbeam = ['9L1']; - this.modData('Learnsets', 'glimmora').learnset.meteorbeam = ['9L1']; - this.modData('Learnsets', 'sandyshocks').learnset.meteorbeam = ['9L1']; - this.modData('Learnsets', 'coalossal').learnset.meteorbeam = ['9L1']; - this.modData('Learnsets', 'stonjourner').learnset.meteorbeam = ['9L1']; - this.modData('Learnsets', 'mismagius').learnset.meteorbeam = ['9L1']; - this.modData('Learnsets', 'espeon').learnset.meteorbeam = ['9L1']; - this.modData('Learnsets', 'rabsca').learnset.meteorbeam = ['9L1']; - this.modData('Learnsets', 'bronzong').learnset.meteorbeam = ['9L1']; - this.modData('Learnsets', 'grumpig').learnset.meteorbeam = ['9L1']; - this.modData('Learnsets', 'rayquaza').learnset.meteorbeam = ['9L1']; - this.modData('Learnsets', 'eternatus').learnset.meteorbeam = ['9L1']; - this.modData('Learnsets', 'corviknight').learnset.skullbash = ['9L1']; - this.modData('Learnsets', 'irontreads').learnset.skullbash = ['9L1']; - this.modData('Learnsets', 'forretress').learnset.skullbash = ['9L1']; - this.modData('Learnsets', 'orthworm').learnset.skullbash = ['9L1']; - this.modData('Learnsets', 'cufant').learnset.skullbash = ['9L1']; - this.modData('Learnsets', 'varoom').learnset.skullbash = ['9L1']; - this.modData('Learnsets', 'perrserker').learnset.skullbash = ['9L1']; - this.modData('Learnsets', 'sudowoodo').learnset.skullbash = ['9L1']; - this.modData('Learnsets', 'chewtle').learnset.skullbash = ['9L1']; - this.modData('Learnsets', 'hawlucha').learnset.skullbash = ['9L1']; - this.modData('Learnsets', 'tauros').learnset.skullbash = ['9L1']; - this.modData('Learnsets', 'taurospaldeacombat').learnset.skullbash = ['9L1']; - this.modData('Learnsets', 'taurospaldeablaze').learnset.skullbash = ['9L1']; - this.modData('Learnsets', 'taurospaldeaaqua').learnset.skullbash = ['9L1']; - this.modData('Learnsets', 'sandaconda').learnset.skullbash = ['9L1']; - this.modData('Learnsets', 'bergmite').learnset.skullbash = ['9L1']; - this.modData('Learnsets', 'dugtrioalola').learnset.skullbash = ['9L1']; - this.modData('Learnsets', 'dialga').learnset.skullbash = ['9L1']; - this.modData('Learnsets', 'sliggoohisui').learnset.shelter = ['9L1']; - this.modData('Learnsets', 'chewtle').learnset.shelter = ['9L1']; - this.modData('Learnsets', 'shellder').learnset.shelter = ['9L1']; - this.modData('Learnsets', 'samurott').learnset.shelter = ['9L1']; - this.modData('Learnsets', 'klawf').learnset.shelter = ['9L1']; - this.modData('Learnsets', 'torkoal').learnset.shelter = ['9L1']; - this.modData('Learnsets', 'chesnaught').learnset.shelter = ['9L1']; - this.modData('Learnsets', 'pineco').learnset.shelter = ['9L1']; - this.modData('Learnsets', 'slowbro').learnset.shelter = ['9L1']; - this.modData('Learnsets', 'slowbrogalar').learnset.shelter = ['9L1']; - this.modData('Learnsets', 'sinistea').learnset.shelter = ['9L1']; - this.modData('Learnsets', 'kleavor').learnset.stoneaxe = ['9L1']; - this.modData('Learnsets', 'klawf').learnset.stoneaxe = ['9L1']; - this.modData('Learnsets', 'avalugghisui').learnset.stoneaxe = ['9L1']; - this.modData('Learnsets', 'drednaw').learnset.stoneaxe = ['9L1']; - delete this.modData('Learnsets', 'regieleki').learnset.electroweb; - delete this.modData('Learnsets', 'meloetta').learnset.sing; - delete this.modData('Learnsets', 'meloetta').learnset.swordsdance; - delete this.modData('Learnsets', 'magnemite').learnset.electroweb; - delete this.modData('Learnsets', 'magnezone').learnset.electroweb; - delete this.modData('Learnsets', 'magneton').learnset.electroweb; - delete this.modData('Learnsets', 'foongus').learnset.rollout; - delete this.modData('Learnsets', 'amoonguss').learnset.rollout; - delete this.modData('Learnsets', 'ragingbolt').learnset.electroweb; - delete this.modData('Learnsets', 'raikou').learnset.electroweb; - delete this.modData('Learnsets', 'magearna').learnset.electroweb; - delete this.modData('Learnsets', 'rotom').learnset.electroweb; - delete this.modData('Learnsets', 'sandyshocks').learnset.electroweb; - delete this.modData('Learnsets', 'thundurus').learnset.electroweb; - delete this.modData('Learnsets', 'mew').learnset.electroweb; - delete this.modData('Learnsets', 'bellibolt').learnset.electroweb; - delete this.modData('Learnsets', 'tadbulb').learnset.electroweb; - delete this.modData('Learnsets', 'voltorb').learnset.electroweb; - delete this.modData('Learnsets', 'voltorbhisui').learnset.electroweb; - delete this.modData('Learnsets', 'electrode').learnset.electroweb; - delete this.modData('Learnsets', 'electrodehisui').learnset.electroweb; - delete this.modData('Learnsets', 'jolteon').learnset.electroweb; - this.modData("Learnsets", "bellibolt").learnset.surf = ["9L1"]; - this.modData("Learnsets", "bellibolt").learnset.hydropump = ["9L1"]; - this.modData("Learnsets", "bellibolt").learnset.liquidation = ["9L1"]; - this.modData("Learnsets", "bellibolt").learnset.flipturn = ["9L1"]; - this.modData("Learnsets", "bellibolt").learnset.icebeam = ["9L1"]; - this.modData("Learnsets", "bellibolt").learnset.earthpower = ["9L1"]; - this.modData("Learnsets", "decidueye").learnset.poltergeist = ["9L1"]; - this.modData("Learnsets", "decidueyehisui").learnset.poltergeist = ["9L1"]; - this.modData("Learnsets", "magnemite").learnset.rapidspin = ["9L1"]; - this.modData('Learnsets', 'azelf').learnset.healingstones = ['9L1']; - this.modData('Learnsets', 'mesprit').learnset.healingstones = ['9L1']; - this.modData('Learnsets', 'uxie').learnset.healingstones = ['9L1']; - this.modData('Learnsets', 'carbink').learnset.healingstones = ['9L1']; - this.modData('Learnsets', 'diancie').learnset.healingstones = ['9L1']; - this.modData('Learnsets', 'mew').learnset.healingstones = ['9L1']; - this.modData('Learnsets', 'dunsparce').learnset.healingstones = ['9L1']; - this.modData('Learnsets', 'hatenna').learnset.healingstones = ['9L1']; - this.modData('Learnsets', 'gardevoir').learnset.healingstones = ['9L1']; - this.modData('Learnsets', 'sylveon').learnset.healingstones = ['9L1']; - this.modData('Learnsets', 'espeon').learnset.healingstones = ['9L1']; - this.modData('Learnsets', 'bronzor').learnset.healingstones = ['9L1']; - this.modData('Learnsets', 'spoink').learnset.healingstones = ['9L1']; - this.modData('Learnsets', 'rabsca').learnset.healingstones = ['9L1']; - this.modData('Learnsets', 'sableye').learnset.healingstones = ['9L1']; - this.modData('Learnsets', 'misdreavus').learnset.healingstones = ['9L1']; - this.modData('Learnsets', 'golduck').learnset.healingstones = ['9L1']; - this.modData('Learnsets', 'vespiquen').learnset.healingstones = ['9L1']; - this.modData('Learnsets', 'stonjourner').learnset.healingstones = ['9L1']; - this.modData('Learnsets', 'forretress').learnset.shrapnelshot = ['9L1']; - this.modData('Learnsets', 'heatran').learnset.shrapnelshot = ['9L1']; - this.modData('Learnsets', 'ironthorns').learnset.shrapnelshot = ['9L1']; - this.modData('Learnsets', 'irontreads').learnset.shrapnelshot = ['9L1']; - this.modData('Learnsets', 'corviknight').learnset.shrapnelshot = ['9L1']; - this.modData('Learnsets', 'glimmora').learnset.shrapnelshot = ['9L1']; - this.modData('Learnsets', 'magnezone').learnset.shrapnelshot = ['9L1']; - this.modData('Learnsets', 'coalossal').learnset.shrapnelshot = ['9L1']; - this.modData('Learnsets', 'klefki').learnset.shrapnelshot = ['9L1']; - this.modData('Learnsets', 'heracross').learnset.shrapnelshot = ['9L1']; - this.modData('Learnsets', 'shellder').learnset.shrapnelshot = ['9L1']; - this.modData('Learnsets', 'scizor').learnset.shrapnelshot = ['9L1']; - this.modData('Learnsets', 'cufant').learnset.shrapnelshot = ['9L1']; - this.modData('Learnsets', 'varoom').learnset.shrapnelshot = ['9L1']; - this.modData('Learnsets', 'magearna').learnset.shrapnelshot = ['9L1']; - this.modData('Learnsets', 'finizen').learnset.lifedew = ['9L1']; - this.modData('Learnsets', 'vaporeon').learnset.lifedew = ['9L1']; - this.modData('Learnsets', 'veluza').learnset.lifedew = ['9L1']; - this.modData('Learnsets', 'azurill').learnset.lifedew = ['9L1']; - this.modData('Learnsets', 'wochien').learnset.junglehealing = ['9L1']; - this.modData('Learnsets', 'tsareena').learnset.junglehealing = ['9L1']; - this.modData('Learnsets', 'rillaboom').learnset.junglehealing = ['9L1']; - this.modData('Learnsets', 'brutebonnet').learnset.junglehealing = ['9L1']; - this.modData('Learnsets', 'lurantis').learnset.junglehealing = ['9L1']; - this.modData('Learnsets', 'tropius').learnset.junglehealing = ['9L1']; - this.modData('Learnsets', 'spidops').learnset.choke = ['9L1']; - this.modData('Learnsets', 'pawmot').learnset.choke = ['9L1']; - this.modData('Learnsets', 'gallade').learnset.choke = ['9L1']; - this.modData('Learnsets', 'gengar').learnset.choke = ['9L1']; - this.modData('Learnsets', 'tsareena').learnset.choke = ['9L1']; - this.modData('Learnsets', 'breloom').learnset.choke = ['9L1']; - this.modData('Learnsets', 'hariyama').learnset.choke = ['9L1']; - this.modData('Learnsets', 'drifblim').learnset.choke = ['9L1']; - this.modData('Learnsets', 'primeape').learnset.choke = ['9L1']; - this.modData('Learnsets', 'medicham').learnset.choke = ['9L1']; - this.modData('Learnsets', 'ceruledge').learnset.choke = ['9L1']; - this.modData('Learnsets', 'lucario').learnset.choke = ['9L1']; - this.modData('Learnsets', 'goodra').learnset.choke = ['9L1']; - this.modData('Learnsets', 'toxicroak').learnset.choke = ['9L1']; - this.modData('Learnsets', 'dunsparce').learnset.choke = ['9L1']; - this.modData('Learnsets', 'muk').learnset.choke = ['9L1']; - this.modData('Learnsets', 'mukalola').learnset.choke = ['9L1']; - this.modData('Learnsets', 'seviper').learnset.choke = ['9L1']; - this.modData('Learnsets', 'zoroarkhisui').learnset.choke = ['9L1']; - this.modData('Learnsets', 'mimikyu').learnset.choke = ['9L1']; - this.modData('Learnsets', 'brambleghast').learnset.choke = ['9L1']; - this.modData('Learnsets', 'toedscool').learnset.choke = ['9L1']; - this.modData('Learnsets', 'heracross').learnset.choke = ['9L1']; - this.modData('Learnsets', 'silicobra').learnset.choke = ['9L1']; - this.modData('Learnsets', 'wiglett').learnset.choke = ['9L1']; - this.modData('Learnsets', 'sableye').learnset.choke = ['9L1']; - this.modData('Learnsets', 'banette').learnset.choke = ['9L1']; - this.modData('Learnsets', 'hawlucha').learnset.choke = ['9L1']; - this.modData('Learnsets', 'spiritomb').learnset.choke = ['9L1']; - this.modData('Learnsets', 'houndstone').learnset.choke = ['9L1']; - this.modData('Learnsets', 'passimian').learnset.choke = ['9L1']; - this.modData('Learnsets', 'eelektross').learnset.choke = ['9L1']; - this.modData('Learnsets', 'wochien').learnset.choke = ['9L1']; - this.modData('Learnsets', 'chesnaught').learnset.choke = ['9L1']; - this.modData('Learnsets', 'basculegion').learnset.choke = ['9L1']; - this.modData('Learnsets', 'gholdengo').learnset.choke = ['9L1']; - this.modData('Learnsets', 'hoopa').learnset.choke = ['9L1']; - this.modData('Learnsets', 'sandygast').learnset.choke = ['9L1']; - this.modData('Learnsets', 'crabrawler').learnset.stormthrow = ['9L1']; - this.modData('Learnsets', 'hariyama').learnset.stormthrow = ['9L1']; - this.modData('Learnsets', 'spidops').learnset.stormthrow = ['9L1']; - this.modData('Learnsets', 'passimian').learnset.stormthrow = ['9L1']; - this.modData('Learnsets', 'hawlucha').learnset.stormthrow = ['9L1']; - this.modData('Learnsets', 'pawmot').learnset.stormthrow = ['9L1']; - this.modData('Learnsets', 'medicham').learnset.stormthrow = ['9L1']; - this.modData('Learnsets', 'chesnaught').learnset.stormthrow = ['9L1']; - this.modData('Learnsets', 'tornadus').learnset.stormthrow = ['9L1']; - this.modData('Learnsets', 'thundurus').learnset.stormthrow = ['9L1']; - this.modData('Learnsets', 'landorus').learnset.stormthrow = ['9L1']; - this.modData('Learnsets', 'enamorus').learnset.stormthrow = ['9L1']; - this.modData('Learnsets', 'stonjourner').learnset.stormthrow = ['9L1']; - this.modData('Learnsets', 'kubfu').learnset.stormthrow = ['9L1']; - this.modData('Learnsets', 'lilliganthisui').learnset.stormthrow = ['9L1']; - this.modData('Learnsets', 'glaceon').learnset.frostbreath = ['9L1']; - this.modData('Learnsets', 'shellder').learnset.frostbreath = ['9L1']; - this.modData('Learnsets', 'delibird').learnset.frostbreath = ['9L1']; - this.modData('Learnsets', 'ironbundle').learnset.frostbreath = ['9L1']; - this.modData('Learnsets', 'chienpao').learnset.frostbreath = ['9L1']; - this.modData('Learnsets', 'clawitzer').learnset.snipeshot = ['9L1']; - this.modData('Learnsets', 'sneasel').learnset.falsesurrender = ['9L1']; - this.modData('Learnsets', 'stunky').learnset.falsesurrender = ['9L1']; - this.modData('Learnsets', 'maschiff').learnset.falsesurrender = ['9L1']; - this.modData('Learnsets', 'murkrow').learnset.falsesurrender = ['9L1']; - this.modData('Learnsets', 'zarude').learnset.falsesurrender = ['9L1']; - this.modData('Learnsets', 'zarudedada').learnset.falsesurrender = ['9L1']; - this.modData('Learnsets', 'zoroark').learnset.falsesurrender = ['9L1']; - this.modData('Learnsets', 'greninja').learnset.falsesurrender = ['9L1']; - this.modData('Learnsets', 'greninjabond').learnset.falsesurrender = ['9L1']; - this.modData('Learnsets', 'kricketune').learnset.cuttingremark = ['9L1']; - this.modData('Learnsets', 'gallade').learnset.cuttingremark = ['9L1']; - this.modData('Learnsets', 'squawkabilly').learnset.cuttingremark = ['9L1']; - this.modData('Learnsets', 'meditite').learnset.cuttingremark = ['9L1']; - this.modData('Learnsets', 'toxtricity').learnset.cuttingremark = ['9L1']; - this.modData('Learnsets', 'zangoose').learnset.cuttingremark = ['9L1']; - this.modData('Learnsets', 'scyther').learnset.cuttingremark = ['9L1']; - this.modData('Learnsets', 'veluza').learnset.cuttingremark = ['9L1']; - this.modData('Learnsets', 'ironleaves').learnset.cuttingremark = ['9L1']; - this.modData('Learnsets', 'hoopa').learnset.cuttingremark = ['9L1']; - this.modData('Learnsets', 'calyrex').learnset.cuttingremark = ['9L1']; - this.modData('Learnsets', 'meloetta').learnset.cuttingremark = ['9L1']; - this.modData('Learnsets', 'articunogalar').learnset.cuttingremark = ['9L1']; - this.modData('Learnsets', 'azelf').learnset.cuttingremark = ['9L1']; - this.modData('Learnsets', 'toxtricitylowkey').learnset.cuttingremark = ['9L1']; - this.modData("Learnsets", "gengar").learnset.fakeout = ["9L1"]; - this.modData("Learnsets", "gengar").learnset.knockoff = ["9L1"]; - this.modData("Learnsets", "gengar").learnset.moonblast = ["9L1"]; - this.modData("Learnsets", "gengar").learnset.moonlight = ["9L1"]; - this.modData("Learnsets", "gengar").learnset.shadowsneak = ["9L1"]; - this.modData("Learnsets", "gengar").learnset.sludgewave = ["9L1"]; - this.modData("Learnsets", "meloetta").learnset.aurasphere = ["9L1"]; - this.modData("Learnsets", "meloetta").learnset.axekick = ["9L1"]; - this.modData("Learnsets", "meloetta").learnset.blazekick = ["9L1"]; - this.modData("Learnsets", "meloetta").learnset.healbell = ["9L1"]; - this.modData("Learnsets", "meloetta").learnset.megakick = ["9L1"]; - this.modData("Learnsets", "meloetta").learnset.rapidspin = ["9L1"]; - this.modData("Learnsets", "meloetta").learnset.recover = ["9L1"]; - this.modData("Learnsets", "meloetta").learnset.vacuumwave = ["9L1"]; - this.modData("Learnsets", "pyroar").learnset.scorchingsands = ["9L1"]; - this.modData("Learnsets", "pyroar").learnset.earthpower = ["9L1"]; - this.modData("Learnsets", "pyroar").learnset.morningsun = ["9L1"]; - this.modData("Learnsets", "pyroar").learnset.grassknot = ["9L1"]; - this.modData("Learnsets", "vespiquen").learnset.gunkshot = ["9L1"]; - this.modData("Learnsets", "vespiquen").learnset.poisonjab = ["9L1"]; - this.modData("Learnsets", "vespiquen").learnset.barbbarrage = ["9L1"]; - this.modData("Learnsets", "vespiquen").learnset.poisonfang = ["9L1"]; - this.modData("Learnsets", "vespiquen").learnset.sludgewave = ["9L1"]; - this.modData("Learnsets", "vespiquen").learnset.acidarmor = ["9L1"]; - this.modData("Learnsets", "vespiquen").learnset.bodypress = ["9L1"]; - this.modData("Learnsets", "vespiquen").learnset.dualwingbeat = ["9L1"]; - this.modData("Learnsets", "vespiquen").learnset.defog = ["9L1"]; - this.modData("Learnsets", "vespiquen").learnset.whirlwind = ["9L1"]; - this.modData('Learnsets', 'tropius').learnset.defog = ['9L1']; - this.modData('Learnsets', 'vivillon').learnset.defog = ['9L1']; - this.modData('Learnsets', 'articuno').learnset.defog = ['9L1']; - this.modData('Learnsets', 'articunogalar').learnset.defog = ['9L1']; - this.modData('Learnsets', 'moltres').learnset.defog = ['9L1']; - this.modData('Learnsets', 'moltresgalar').learnset.defog = ['9L1']; - this.modData('Learnsets', 'thundurus').learnset.defog = ['9L1']; - this.modData('Learnsets', 'gyarados').learnset.defog = ['9L1']; - this.modData('Learnsets', 'salamence').learnset.defog = ['9L1']; - this.modData('Learnsets', 'florges').learnset.defog = ['9L1']; - this.modData('Learnsets', 'kilowattrel').learnset.defog = ['9L1']; - this.modData('Learnsets', 'dudunsparce').learnset.defog = ['9L1']; - this.modData('Learnsets', 'espathra').learnset.defog = ['9L1']; - this.modData('Learnsets', 'tinkatink').learnset.defog = ['9L1']; - this.modData('Learnsets', 'arceus').learnset.defog = ['9L1']; - this.modData('Learnsets', 'squawkabilly').learnset.defog = ['9L1']; - this.modData('Learnsets', 'bombirdier').learnset.defog = ['9L1']; - this.modData('Learnsets', 'pawmi').learnset.chainlightning = ['9L1']; - this.modData('Learnsets', 'pichu').learnset.chainlightning = ['9L1']; - this.modData('Learnsets', 'raichualola').learnset.chainlightning = ['9L1']; - this.modData('Learnsets', 'shinx').learnset.chainlightning = ['9L1']; - this.modData('Learnsets', 'toxtricity').learnset.chainlightning = ['9L1']; - this.modData('Learnsets', 'toxtricitylowkey').learnset.chainlightning = ['9L1']; - this.modData('Learnsets', 'eelektrik').learnset.chainlightning = ['9L1']; - this.modData('Learnsets', 'ironhands').learnset.chainlightning = ['9L1']; - this.modData('Learnsets', 'ironthorns').learnset.chainlightning = ['9L1']; - this.modData('Learnsets', 'thundurus').learnset.chainlightning = ['9L1']; - this.modData('Learnsets', 'jolteon').learnset.chainlightning = ['9L1']; - this.modData('Learnsets', 'grimer').learnset.hazardouswaste = ['9L1']; - this.modData('Learnsets', 'grimeralola').learnset.hazardouswaste = ['9L1']; - this.modData('Learnsets', 'glimmet').learnset.hazardouswaste = ['9L1']; - this.modData('Learnsets', 'gengar').learnset.hazardouswaste = ['9L1']; - this.modData('Learnsets', 'slowbrogalar').learnset.hazardouswaste = ['9L1']; - this.modData('Learnsets', 'skrelp').learnset.hazardouswaste = ['9L1']; - this.modData('Learnsets', 'stunky').learnset.hazardouswaste = ['9L1']; - this.modData('Learnsets', 'shroodle').learnset.hazardouswaste = ['9L1']; - this.modData('Learnsets', 'gulpin').learnset.hazardouswaste = ['9L1']; - this.modData('Learnsets', 'croagunk').learnset.hazardouswaste = ['9L1']; - this.modData('Learnsets', 'fletchling').learnset.pluck = ['9L1']; - this.modData('Learnsets', 'starly').learnset.pluck = ['9L1']; - this.modData('Learnsets', 'squawkabilly').learnset.pluck = ['9L1']; - this.modData('Learnsets', 'murkrow').learnset.pluck = ['9L1']; - this.modData('Learnsets', 'eiscue').learnset.pluck = ['9L1']; - this.modData('Learnsets', 'flamigo').learnset.pluck = ['9L1']; - this.modData('Learnsets', 'rufflet').learnset.pluck = ['9L1']; - this.modData('Learnsets', 'wingull').learnset.pluck = ['9L1']; - this.modData('Learnsets', 'delibird').learnset.pluck = ['9L1']; - this.modData('Learnsets', 'arrokuda').learnset.pluck = ['9L1']; - this.modData('Learnsets', 'toedscruel').learnset.pluck = ['9L1']; - this.modData('Learnsets', 'tornadus').learnset.windbreaker = ['9L1']; - this.modData('Learnsets', 'moltres').learnset.windbreaker = ['9L1']; - this.modData('Learnsets', 'moltresgalar').learnset.windbreaker = ['9L1']; - this.modData('Learnsets', 'articuno').learnset.windbreaker = ['9L1']; - this.modData('Learnsets', 'articunogalar').learnset.windbreaker = ['9L1']; - this.modData('Learnsets', 'ironjugulis').learnset.windbreaker = ['9L1']; - this.modData('Learnsets', 'oricorio').learnset.windbreaker = ['9L1']; - this.modData('Learnsets', 'noibat').learnset.windbreaker = ['9L1']; - this.modData('Learnsets', 'wattrel').learnset.windbreaker = ['9L1']; - this.modData('Learnsets', 'fletchling').learnset.windbreaker = ['9L1']; - this.modData('Learnsets', 'drifloon').learnset.windbreaker = ['9L1']; - this.modData('Learnsets', 'vivillon').learnset.windbreaker = ['9L1']; - // this.modData('Learnsets', 'rotomfan').learnset.windbreaker = ['9L1']; - this.modData('Learnsets', 'murkrow').learnset.windbreaker = ['9L1']; - this.modData('Learnsets', 'hawlucha').learnset.windbreaker = ['9L1']; - this.modData('Learnsets', 'hoppip').learnset.windbreaker = ['9L1']; - this.modData('Learnsets', 'sneasel').learnset.throatchop = ['9L1']; - this.modData('Learnsets', 'mankey').learnset.throatchop = ['9L1']; - this.modData('Learnsets', 'cacturne').learnset.throatchop = ['9L1']; - this.modData('Learnsets', 'zapdosgalar').learnset.throatchop = ['9L1']; - this.modData('Learnsets', 'urshifu').learnset.throatchop = ['9L1']; - this.modData('Learnsets', 'slitherwing').learnset.throatchop = ['9L1']; - this.modData('Learnsets', 'toxtricity').learnset.throatchop = ['9L1']; - this.modData('Learnsets', 'toxtricitylowkey').learnset.throatchop = ['9L1']; - this.modData('Learnsets', 'falinks').learnset.throatchop = ['9L1']; - this.modData("Learnsets", "mew").learnset.recover = ["9L1"]; - this.modData("Learnsets", "mew").learnset.defog = ["9L1"]; - this.modData("Learnsets", "mew").learnset.moonlight = ["9L1"]; - this.modData("Learnsets", "tinkaton").learnset.earthpower = ["9L1"]; - this.modData("Learnsets", "tinkaton").learnset.discharge = ["9L1"]; - this.modData('Learnsets', 'garganacl').learnset.chisel = ['9L1']; - this.modData('Learnsets', 'growlithehisui').learnset.chisel = ['9L1']; - this.modData('Learnsets', 'diancie').learnset.chisel = ['9L1']; - this.modData('Learnsets', 'kleavor').learnset.chisel = ['9L1']; - this.modData('Learnsets', 'larvitar').learnset.chisel = ['9L1']; - this.modData('Learnsets', 'drednaw').learnset.chisel = ['9L1']; - this.modData('Learnsets', 'rockruff').learnset.chisel = ['9L1']; - this.modData('Learnsets', 'lycanrocdusk').learnset.chisel = ['9L1']; - this.modData('Learnsets', 'ironthorns').learnset.chisel = ['9L1']; - this.modData('Learnsets', 'carbink').learnset.chisel = ['9L1']; - this.modData('Learnsets', 'stonjourner').learnset.chisel = ['9L1']; - this.modData('Learnsets', 'sableye').learnset.chisel = ['9L1']; - this.modData('Learnsets', 'glastrier').learnset.chisel = ['9L1']; - this.modData('Learnsets', 'sneasel').learnset.chisel = ['9L1']; - this.modData('Learnsets', 'froslass').learnset.chisel = ['9L1']; - this.modData('Learnsets', 'beartic').learnset.chisel = ['9L1']; - this.modData('Learnsets', 'greattusk').learnset.chisel = ['9L1']; - this.modData('Learnsets', 'ironvaliant').learnset.chisel = ['9L1']; - this.modData('Learnsets', 'gallade').learnset.chisel = ['9L1']; - this.modData('Learnsets', 'zapdosgalar').learnset.chisel = ['9L1']; - this.modData('Learnsets', 'toxicroak').learnset.chisel = ['9L1']; - this.modData('Learnsets', 'falinks').learnset.chisel = ['9L1']; - this.modData('Learnsets', 'veluza').learnset.chisel = ['9L1']; - this.modData('Learnsets', 'breloom').learnset.chisel = ['9L1']; - this.modData('Learnsets', 'gible').learnset.chisel = ['9L1']; - this.modData('Learnsets', 'sandile').learnset.chisel = ['9L1']; - this.modData('Learnsets', 'teddiursa').learnset.chisel = ['9L1']; - this.modData('Learnsets', 'ironvaliant').learnset.parry = ['9L1']; - this.modData('Learnsets', 'zamazenta').learnset.parry = ['9L1']; - this.modData('Learnsets', 'zacian').learnset.parry = ['9L1']; - this.modData('Learnsets', 'ironhands').learnset.parry = ['9L1']; - this.modData('Learnsets', 'breloom').learnset.parry = ['9L1']; - this.modData('Learnsets', 'chesnaught').learnset.parry = ['9L1']; - this.modData('Learnsets', 'decidueyehisui').learnset.parry = ['9L1']; - this.modData('Learnsets', 'gallade').learnset.parry = ['9L1']; - this.modData('Learnsets', 'riolu').learnset.parry = ['9L1']; - this.modData('Learnsets', 'flamigo').learnset.parry = ['9L1']; - this.modData('Learnsets', 'makuhita').learnset.parry = ['9L1']; - this.modData('Learnsets', 'mankey').learnset.parry = ['9L1']; - this.modData('Learnsets', 'oshawott').learnset.parry = ['9L1']; - this.modData('Learnsets', 'kleavor').learnset.parry = ['9L1']; - this.modData('Learnsets', 'palafin').learnset.parry = ['9L1']; - this.modData('Learnsets', 'ironleaves').learnset.parry = ['9L1']; - this.modData('Learnsets', 'lokix').learnset.parry = ['9L1']; - this.modData('Learnsets', 'golduck').learnset.parry = ['9L1']; - this.modData('Learnsets', 'meditite').learnset.parry = ['9L1']; - this.modData('Learnsets', 'meloetta').learnset.parry = ['9L1']; - this.modData('Learnsets', 'pawmo').learnset.parry = ['9L1']; - this.modData('Learnsets', 'hawlucha').learnset.parry = ['9L1']; - this.modData('Learnsets', 'ceruledge').learnset.parry = ['9L1']; - this.modData('Learnsets', 'veluza').learnset.parry = ['9L1']; - this.modData('Learnsets', 'azurill').learnset.peekaboo = ['9L1']; - this.modData('Learnsets', 'enamorus').learnset.peekaboo = ['9L1']; - this.modData('Learnsets', 'hatterene').learnset.peekaboo = ['9L1']; - this.modData('Learnsets', 'mimikyu').learnset.peekaboo = ['9L1']; - this.modData('Learnsets', 'pichu').learnset.peekaboo = ['9L1']; - this.modData('Learnsets', 'tinkaton').learnset.peekaboo = ['9L1']; - this.modData('Learnsets', 'screamtail').learnset.peekaboo = ['9L1']; - this.modData('Learnsets', 'ralts').learnset.peekaboo = ['9L1']; - this.modData('Learnsets', 'grimmsnarl').learnset.peekaboo = ['9L1']; - this.modData('Learnsets', 'dachsbun').learnset.peekaboo = ['9L1']; - this.modData('Learnsets', 'dedenne').learnset.peekaboo = ['9L1']; - this.modData('Learnsets', 'igglybuff').learnset.peekaboo = ['9L1']; - this.modData('Learnsets', 'mabosstiff').learnset.peekaboo = ['9L1']; - this.modData('Learnsets', 'meowth').learnset.peekaboo = ['9L1']; - this.modData('Learnsets', 'meowthalola').learnset.peekaboo = ['9L1']; - this.modData('Learnsets', 'meowthgalar').learnset.peekaboo = ['9L1']; - this.modData('Learnsets', 'riolu').learnset.peekaboo = ['9L1']; - this.modData('Learnsets', 'happiny').learnset.peekaboo = ['9L1']; - this.modData('Learnsets', 'toxel').learnset.peekaboo = ['9L1']; - this.modData('Learnsets', 'bonsly').learnset.peekaboo = ['9L1']; - this.modData('Learnsets', 'lurantis').learnset.peekaboo = ['9L1']; - this.modData('Learnsets', 'banette').learnset.peekaboo = ['9L1']; - this.modData('Learnsets', 'zoroarkhisui').learnset.peekaboo = ['9L1']; - this.modData('Learnsets', 'zoroark').learnset.peekaboo = ['9L1']; - this.modData('Learnsets', 'sableye').learnset.peekaboo = ['9L1']; - this.modData('Learnsets', 'farigiraf').learnset.peekaboo = ['9L1']; - this.modData('Learnsets', 'drowzee').learnset.peekaboo = ['9L1']; - this.modData('Learnsets', 'eevee').learnset.peekaboo = ['9L1']; - this.modData('Learnsets', 'rowlet').learnset.peekaboo = ['9L1']; - this.modData('Learnsets', 'houndstone').learnset.peekaboo = ['9L1']; - this.modData('Learnsets', 'alomomola').learnset.peekaboo = ['9L1']; - this.modData('Learnsets', 'dudunsparce').learnset.peekaboo = ['9L1']; - this.modData('Learnsets', 'sinistea').learnset.peekaboo = ['9L1']; - this.modData('Learnsets', 'maushold').learnset.peekaboo = ['9L1']; - this.modData('Learnsets', 'squawkabilly').learnset.peekaboo = ['9L1']; - this.modData('Learnsets', 'sandaconda').learnset.peekaboo = ['9L1']; - this.modData('Learnsets', 'scorbunny').learnset.peekaboo = ['9L1']; - this.modData('Learnsets', 'typhlosion').learnset.peekaboo = ['9L1']; - this.modData('Learnsets', 'typhlosionhisui').learnset.peekaboo = ['9L1']; - this.modData('Learnsets', 'torkoal').learnset.peekaboo = ['9L1']; - this.modData('Learnsets', 'cloyster').learnset.peekaboo = ['9L1']; - this.modData('Learnsets', 'flapple').learnset.peekaboo = ['9L1']; - this.modData('Learnsets', 'appletun').learnset.peekaboo = ['9L1']; - this.modData('Learnsets', 'mew').learnset.peekaboo = ['9L1']; - this.modData('Learnsets', 'mew').learnset.psychoboost = ['9L1']; - this.modData('Learnsets', 'mewtwo').learnset.psychoboost = ['9L1']; - this.modData('Learnsets', 'espathra').learnset.psychoboost = ['9L1']; - this.modData('Learnsets', 'espeon').learnset.psychoboost = ['9L1']; - this.modData('Learnsets', 'gardevoir').learnset.psychoboost = ['9L1']; - this.modData('Learnsets', 'indeedee').learnset.psychoboost = ['9L1']; - this.modData('Learnsets', 'indeedeef').learnset.psychoboost = ['9L1']; - this.modData('Learnsets', 'farigiraf').learnset.psychoboost = ['9L1']; - this.modData('Learnsets', 'wyrdeer').learnset.psychoboost = ['9L1']; - this.modData('Learnsets', 'delphox').learnset.psychoboost = ['9L1']; - this.modData('Learnsets', 'mesprit').learnset.psychoboost = ['9L1']; - this.modData('Learnsets', 'raichualola').learnset.psychoboost = ['9L1']; - this.modData('Learnsets', 'wyrdeer').learnset.psychoboost = ['9L1']; - this.modData('Learnsets', 'calyrex').learnset.psychoboost = ['9L1']; - this.modData('Learnsets', 'grumpig').learnset.psychoboost = ['9L1']; - this.modData('Learnsets', 'hypno').learnset.psychoboost = ['9L1']; - this.modData('Learnsets', 'rabsca').learnset.psychoboost = ['9L1']; - this.modData('Learnsets', 'medicham').learnset.psychoboost = ['9L1']; - this.modData('Learnsets', 'ironleaves').learnset.psychoboost = ['9L1']; - this.modData('Learnsets', 'psyduck').learnset.psychoboost = ['9L1']; - this.modData('Learnsets', 'banette').learnset.ragefist = ['9L1']; - this.modData('Learnsets', 'sableye').learnset.ragefist = ['9L1']; - this.modData('Learnsets', 'pawmot').learnset.ragefist = ['9L1']; - this.modData('Learnsets', 'kubfu').learnset.ragefist = ['9L1']; - this.modData('Learnsets', 'camerupt').learnset.ragingfury = ['9L1']; - this.modData('Learnsets', 'slitherwing').learnset.ragingfury = ['9L1']; - this.modData('Learnsets', 'taurospaldeablaze').learnset.ragingfury = ['9L1']; - this.modData('Learnsets', 'primeape').learnset.ragingfury = ['9L1']; - this.modData('Learnsets', 'charizard').learnset.ragingfury = ['9L1']; - this.modData('Learnsets', 'scovillain').learnset.ragingfury = ['9L1']; - this.modData("Learnsets", "muk").learnset.recover = ["9L1"]; - this.modData("Learnsets", "muk").learnset.earthquake = ["9L1"]; - this.modData("Learnsets", "muk").learnset.explosion = ["9L1"]; - this.modData("Learnsets", "muk").learnset.whirlpool = ["9L1"]; - this.modData("Learnsets", "muk").learnset.aquajet = ["9L1"]; - this.modData("Learnsets", "muk").learnset.liquidation = ["9L1"]; - this.modData("Learnsets", "muk").learnset.soak = ["9L1"]; - this.modData("Learnsets", "muk").learnset.wavecrash = ["9L1"]; - this.modData("Learnsets", "muk").learnset.surf = ["9L1"]; - this.modData("Learnsets", "muk").learnset.hydropump = ["9L1"]; - this.modData("Learnsets", "muk").learnset.muddywater = ["9L1"]; - this.modData("Learnsets", "mukalola").learnset.recover = ["9L1"]; - this.modData("Learnsets", "mukalola").learnset.earthquake = ["9L1"]; - this.modData("Learnsets", "mukalola").learnset.explosion = ["9L1"]; - this.modData("Learnsets", "mukalola").learnset.suckerpunch = ["9L1"]; - this.modData("Learnsets", "mukalola").learnset.foulplay = ["9L1"]; - this.modData("Learnsets", "mukalola").learnset.swordsdance = ["9L1"]; - this.modData("Learnsets", "mukalola").learnset.beatup = ["9L1"]; - this.modData("Learnsets", "mukalola").learnset.jawlock = ["9L1"]; - this.modData("Learnsets", "mukalola").learnset.powertrip = ["9L1"]; - this.modData("Learnsets", "mukalola").learnset.curse = ["9L1"]; - this.modData("Learnsets", "mukalola").learnset.stealthrock = ["9L1"]; - this.modData("Learnsets", "hariyama").learnset.courtchange = ["9L1"]; - this.modData("Learnsets", "hariyama").learnset.saltcure = ["9L1"]; - this.modData("Learnsets", "hariyama").learnset.slackoff = ["9L1"]; - this.modData("Learnsets", "hariyama").learnset.swordsdance = ["9L1"]; - this.modData("Learnsets", "ironjugulis").learnset.roost = ["9L1"]; - this.modData('Learnsets', 'growlithehisui').learnset.accelerock = ['9L1']; - this.modData('Learnsets', 'larvitar').learnset.accelerock = ['9L1']; - this.modData('Learnsets', 'carbink').learnset.accelerock = ['9L1']; - this.modData('Learnsets', 'diancie').learnset.accelerock = ['9L1']; - this.modData('Learnsets', 'rockruff').learnset.accelerock = ['9L1']; - this.modData('Learnsets', 'chewtle').learnset.accelerock = ['9L1']; - this.modData('Learnsets', 'rolycoly').learnset.accelerock = ['9L1']; - this.modData('Learnsets', 'stonjourner').learnset.accelerock = ['9L1']; - this.modData('Learnsets', 'kleavor').learnset.accelerock = ['9L1']; - this.modData('Learnsets', 'klawf').learnset.accelerock = ['9L1']; - this.modData('Learnsets', 'ironthorns').learnset.accelerock = ['9L1']; - this.modData('Learnsets', 'bombirdier').learnset.accelerock = ['9L1']; - this.modData('Learnsets', 'bagon').learnset.rollout = ['9L1']; - this.modData('Learnsets', 'goodrahisui').learnset.rollout = ['9L1']; - this.modData('Learnsets', 'varoom').learnset.rollout = ['9L1']; - this.modData('Learnsets', 'glimmora').learnset.rollout = ['9L1']; - this.modData('Learnsets', 'carbink').learnset.rollout = ['9L1']; - this.modData('Learnsets', 'diancie').learnset.rollout = ['9L1']; - this.modData('Learnsets', 'rolycoly').learnset.rollout = ['9L1']; - this.modData('Learnsets', 'screamtail').learnset.round = ['9L1']; - this.modData('Learnsets', 'happiny').learnset.round = ['9L1']; - this.modData('Learnsets', 'kricketune').learnset.round = ['9L1']; - this.modData('Learnsets', 'bellibolt').learnset.round = ['9L1']; - this.modData('Learnsets', 'croagunk').learnset.round = ['9L1']; - this.modData('Learnsets', 'azumarill').learnset.round = ['9L1']; - this.modData('Learnsets', 'komala').learnset.round = ['9L1']; - this.modData('Learnsets', 'toxel').learnset.round = ['9L1']; - this.modData('Learnsets', 'growlithe').learnset.rekindle = ['9L1']; - this.modData('Learnsets', 'growlithehisui').learnset.rekindle = ['9L1']; - this.modData('Learnsets', 'cyndaquil').learnset.rekindle = ['9L1']; - this.modData('Learnsets', 'moltres').learnset.rekindle = ['9L1']; - this.modData('Learnsets', 'carkol').learnset.rekindle = ['9L1']; - this.modData('Learnsets', 'volcarona').learnset.rekindle = ['9L1']; - this.modData('Learnsets', 'talonflame').learnset.rekindle = ['9L1']; - this.modData('Learnsets', 'charcadet').learnset.rekindle = ['9L1']; - this.modData('Learnsets', 'charmander').learnset.rekindle = ['9L1']; - this.modData('Learnsets', 'taurospaldeablaze').learnset.rekindle = ['9L1']; - this.modData('Learnsets', 'flareon').learnset.rekindle = ['9L1']; - this.modData('Learnsets', 'fennekin').learnset.rekindle = ['9L1']; - this.modData('Learnsets', 'litleo').learnset.rekindle = ['9L1']; - this.modData('Learnsets', 'fuecoco').learnset.rekindle = ['9L1']; - this.modData('Learnsets', 'chiyu').learnset.rekindle = ['9L1']; - this.modData("Learnsets", "salamence").learnset.scaleshot = ["9L1"]; - this.modData("Learnsets", "salamence").learnset.flamecharge = ["9L1"]; - this.modData("Learnsets", "salamence").learnset.pluck = ["9L1"]; - this.modData("Learnsets", "tsareena").learnset.knockoff = ["9L1"]; - this.modData("Learnsets", "tsareena").learnset.peekaboo = ["9L1"]; - this.modData("Learnsets", "tsareena").learnset.axekick = ["9L1"]; - this.modData("Learnsets", "tsareena").learnset.highhorsepower = ["9L1"]; - this.modData("Learnsets", "tsareena").learnset.leechseed = ["9L1"]; - this.modData("Learnsets", "tsareena").learnset.swordsdance = ["9L1"]; - this.modData("Learnsets", "orthworm").learnset.aquatail = ["9L1"]; - this.modData("Learnsets", "orthworm").learnset.aquajet = ["9L1"]; - this.modData("Learnsets", "orthworm").learnset.liquidation = ["9L1"]; - this.modData("Learnsets", "orthworm").learnset.wavecrash = ["9L1"]; - this.modData("Learnsets", "orthworm").learnset.whirlpool = ["9L1"]; - this.modData("Learnsets", "orthworm").learnset.surf = ["9L1"]; - this.modData("Learnsets", "orthworm").learnset.hydropump = ["9L1"]; - this.modData("Learnsets", "orthworm").learnset.toxic = ["9L1"]; - this.modData("Learnsets", "orthworm").learnset.recover = ["9L1"]; - delete this.modData('Learnsets', 'magearna').learnset.shiftgear; - delete this.modData('Learnsets', 'magearna').learnset.storedpower; - delete this.modData('Learnsets', 'magearna').learnset.spikes; - delete this.modData('Learnsets', 'magearna').learnset.trick; - delete this.modData('Learnsets', 'magearna').learnset.drainingkiss; - delete this.modData('Learnsets', 'magearna').learnset.agility; - this.modData('Learnsets', 'dragalge').learnset.lifedew = ['9L1']; - this.modData("Learnsets", "dipplin").learnset.peekaboo = ["9L1"]; - this.modData("Learnsets", "dipplin").learnset.shelter = ["9L1"]; - this.modData("Learnsets", "ursalunabloodmoon").learnset.skullbash = ["9L1"]; - this.modData("Learnsets", "ursalunabloodmoon").learnset.throatchop = ["9L1"]; - this.modData("Learnsets", "ekans").learnset.choke = ["9L1"]; - this.modData("Learnsets", "ekans").learnset.hazardouswaste = ["9L1"]; - this.modData("Learnsets", "arbok").learnset.choke = ["9L1"]; - this.modData("Learnsets", "arbok").learnset.hazardouswaste = ["9L1"]; - this.modData("Learnsets", "sandshrew").learnset.chisel = ["9L1"]; - this.modData("Learnsets", "sandshrew").learnset.shelter = ["9L1"]; - this.modData("Learnsets", "sandshrew").learnset.throatchop = ["9L1"]; - this.modData("Learnsets", "sandshrewalola").learnset.chisel = ["9L1"]; - this.modData("Learnsets", "sandshrewalola").learnset.shelter = ["9L1"]; - this.modData("Learnsets", "sandshrewalola").learnset.shrapnelshot = ["9L1"]; - this.modData("Learnsets", "sandshrewalola").learnset.skullbash = ["9L1"]; - this.modData("Learnsets", "sandshrewalola").learnset.throatchop = ["9L1"]; - this.modData("Learnsets", "sandslash").learnset.chisel = ["9L1"]; - this.modData("Learnsets", "sandslash").learnset.shelter = ["9L1"]; - this.modData("Learnsets", "sandslash").learnset.throatchop = ["9L1"]; - this.modData("Learnsets", "sandslashalola").learnset.chisel = ["9L1"]; - this.modData("Learnsets", "sandslashalola").learnset.shelter = ["9L1"]; - this.modData("Learnsets", "sandslashalola").learnset.shrapnelshot = ["9L1"]; - this.modData("Learnsets", "sandslashalola").learnset.skullbash = ["9L1"]; - this.modData("Learnsets", "sandslashalola").learnset.throatchop = ["9L1"]; - this.modData("Learnsets", "cleffa").learnset.meteorbeam = ["9L1"]; - this.modData("Learnsets", "cleffa").learnset.peekaboo = ["9L1"]; - this.modData("Learnsets", "clefairy").learnset.meteorbeam = ["9L1"]; - this.modData("Learnsets", "clefairy").learnset.peekaboo = ["9L1"]; - this.modData("Learnsets", "clefable").learnset.meteorbeam = ["9L1"]; - this.modData("Learnsets", "clefable").learnset.peekaboo = ["9L1"]; - this.modData("Learnsets", "bellsprout").learnset.junglehealing = ["9L1"]; - this.modData("Learnsets", "weepinbell").learnset.junglehealing = ["9L1"]; - this.modData("Learnsets", "victreebel").learnset.junglehealing = ["9L1"]; - this.modData("Learnsets", "vulpix").learnset.peekaboo = ["9L1"]; - this.modData("Learnsets", "vulpix").learnset.ragingfury = ["9L1"]; - this.modData("Learnsets", "vulpix").learnset.rekindle = ["9L1"]; - this.modData("Learnsets", "vulpixalola").learnset.frostbreath = ["9L1"]; - this.modData("Learnsets", "vulpixalola").learnset.peekaboo = ["9L1"]; - this.modData("Learnsets", "ninetales").learnset.peekaboo = ["9L1"]; - this.modData("Learnsets", "ninetales").learnset.ragingfury = ["9L1"]; - this.modData("Learnsets", "ninetales").learnset.rekindle = ["9L1"]; - this.modData("Learnsets", "ninetalesalola").learnset.frostbreath = ["9L1"]; - this.modData("Learnsets", "ninetalesalola").learnset.peekaboo = ["9L1"]; - this.modData("Learnsets", "poliwag").learnset.lifedew = ["9L1"]; - this.modData("Learnsets", "poliwhirl").learnset.lifedew = ["9L1"]; - this.modData("Learnsets", "poliwrath").learnset.lifedew = ["9L1"]; - this.modData("Learnsets", "poliwrath").learnset.parry = ["9L1"]; - this.modData("Learnsets", "poliwrath").learnset.ragefist = ["9L1"]; - this.modData("Learnsets", "poliwrath").learnset.stormthrow = ["9L1"]; - this.modData("Learnsets", "politoed").learnset.lifedew = ["9L1"]; - this.modData("Learnsets", "geodude").learnset.accelerock = ["9L1"]; - this.modData("Learnsets", "geodude").learnset.meteorbeam = ["9L1"]; - this.modData("Learnsets", "geodude").learnset.shrapnelshot = ["9L1"]; - this.modData("Learnsets", "geodude").learnset.skullbash = ["9L1"]; - this.modData("Learnsets", "geodudealola").learnset.accelerock = ["9L1"]; - this.modData("Learnsets", "geodudealola").learnset.chainlightning = ["9L1"]; - this.modData("Learnsets", "geodudealola").learnset.meteorbeam = ["9L1"]; - this.modData("Learnsets", "geodudealola").learnset.shrapnelshot = ["9L1"]; - this.modData("Learnsets", "geodudealola").learnset.skullbash = ["9L1"]; - this.modData("Learnsets", "graveler").learnset.accelerock = ["9L1"]; - this.modData("Learnsets", "graveler").learnset.meteorbeam = ["9L1"]; - this.modData("Learnsets", "graveler").learnset.shrapnelshot = ["9L1"]; - this.modData("Learnsets", "graveler").learnset.skullbash = ["9L1"]; - this.modData("Learnsets", "graveleralola").learnset.accelerock = ["9L1"]; - this.modData("Learnsets", "graveleralola").learnset.chainlightning = ["9L1"]; - this.modData("Learnsets", "graveleralola").learnset.meteorbeam = ["9L1"]; - this.modData("Learnsets", "graveleralola").learnset.shrapnelshot = ["9L1"]; - this.modData("Learnsets", "graveleralola").learnset.skullbash = ["9L1"]; - this.modData("Learnsets", "golem").learnset.accelerock = ["9L1"]; - this.modData("Learnsets", "golem").learnset.meteorbeam = ["9L1"]; - this.modData("Learnsets", "golem").learnset.shrapnelshot = ["9L1"]; - this.modData("Learnsets", "golem").learnset.skullbash = ["9L1"]; - this.modData("Learnsets", "golemalola").learnset.accelerock = ["9L1"]; - this.modData("Learnsets", "golemalola").learnset.chainlightning = ["9L1"]; - this.modData("Learnsets", "golemalola").learnset.meteorbeam = ["9L1"]; - this.modData("Learnsets", "golemalola").learnset.shrapnelshot = ["9L1"]; - this.modData("Learnsets", "golemalola").learnset.skullbash = ["9L1"]; - this.modData("Learnsets", "koffing").learnset.hazardouswaste = ["9L1"]; - this.modData("Learnsets", "koffing").learnset.windbreaker = ["9L1"]; - this.modData("Learnsets", "weezing").learnset.hazardouswaste = ["9L1"]; - this.modData("Learnsets", "weezing").learnset.windbreaker = ["9L1"]; - this.modData("Learnsets", "weezinggalar").learnset.hazardouswaste = ["9L1"]; - this.modData("Learnsets", "weezinggalar").learnset.windbreaker = ["9L1"]; - this.modData("Learnsets", "weezinggalar").learnset.healingstones = ["9L1"]; - this.modData("Learnsets", "weezinggalar").learnset.lifedew = ["9L1"]; - this.modData("Learnsets", "munchlax").learnset.parry = ["9L1"]; - this.modData("Learnsets", "munchlax").learnset.skullbash = ["9L1"]; - this.modData("Learnsets", "munchlax").learnset.throatchop = ["9L1"]; - this.modData("Learnsets", "snorlax").learnset.parry = ["9L1"]; - this.modData("Learnsets", "snorlax").learnset.skullbash = ["9L1"]; - this.modData("Learnsets", "snorlax").learnset.throatchop = ["9L1"]; - this.modData("Learnsets", "sentret").learnset.peekaboo = ["9L1"]; - this.modData("Learnsets", "furret").learnset.peekaboo = ["9L1"]; - this.modData("Learnsets", "hoothoot").learnset.pluck = ["9L1"]; - this.modData("Learnsets", "hoothoot").learnset.psychoboost = ["9L1"]; - this.modData("Learnsets", "hoothoot").learnset.windbreaker = ["9L1"]; - this.modData("Learnsets", "noctowl").learnset.pluck = ["9L1"]; - this.modData("Learnsets", "noctowl").learnset.psychoboost = ["9L1"]; - this.modData("Learnsets", "noctowl").learnset.windbreaker = ["9L1"]; - this.modData("Learnsets", "spinarak").learnset.choke = ["9L1"]; - this.modData("Learnsets", "spinarak").learnset.direclaw = ["9L1"]; - this.modData("Learnsets", "spinarak").learnset.electroweb = ["9L1"]; - this.modData("Learnsets", "spinarak").learnset.hazardouswaste = ["9L1"]; - this.modData("Learnsets", "ariados").learnset.choke = ["9L1"]; - this.modData("Learnsets", "ariados").learnset.direclaw = ["9L1"]; - this.modData("Learnsets", "ariados").learnset.electroweb = ["9L1"]; - this.modData("Learnsets", "ariados").learnset.hazardouswaste = ["9L1"]; - this.modData("Learnsets", "aipom").learnset.choke = ["9L1"]; - this.modData("Learnsets", "aipom").learnset.ragefist = ["9L1"]; - this.modData("Learnsets", "aipom").learnset.throatchop = ["9L1"]; - this.modData("Learnsets", "ambipom").learnset.choke = ["9L1"]; - this.modData("Learnsets", "ambipom").learnset.ragefist = ["9L1"]; - this.modData("Learnsets", "ambipom").learnset.throatchop = ["9L1"]; - this.modData("Learnsets", "yanma").learnset.defog = ["9L1"]; - this.modData("Learnsets", "yanma").learnset.meteorbeam = ["9L1"]; - this.modData("Learnsets", "yanma").learnset.windbreaker = ["9L1"]; - this.modData("Learnsets", "yanmega").learnset.defog = ["9L1"]; - this.modData("Learnsets", "yanmega").learnset.meteorbeam = ["9L1"]; - this.modData("Learnsets", "yanmega").learnset.windbreaker = ["9L1"]; - this.modData("Learnsets", "gligar").learnset.chisel = ["9L1"]; - this.modData("Learnsets", "gligar").learnset.direclaw = ["9L1"]; - this.modData("Learnsets", "gligar").learnset.hazardouswaste = ["9L1"]; - this.modData("Learnsets", "gligar").learnset.windbreaker = ["9L1"]; - this.modData("Learnsets", "gliscor").learnset.chisel = ["9L1"]; - this.modData("Learnsets", "gliscor").learnset.direclaw = ["9L1"]; - this.modData("Learnsets", "gliscor").learnset.hazardouswaste = ["9L1"]; - this.modData("Learnsets", "gliscor").learnset.windbreaker = ["9L1"]; - this.modData("Learnsets", "slugma").learnset.rekindle = ["9L1"]; - this.modData("Learnsets", "magcargo").learnset.rekindle = ["9L1"]; - this.modData("Learnsets", "magcargo").learnset.meteorbeam = ["9L1"]; - this.modData("Learnsets", "magcargo").learnset.shelter = ["9L1"]; - this.modData("Learnsets", "swinub").learnset.chisel = ["9L1"]; - this.modData("Learnsets", "swinub").learnset.frostbreath = ["9L1"]; - this.modData("Learnsets", "swinub").learnset.meteorbeam = ["9L1"]; - this.modData("Learnsets", "swinub").learnset.skullbash = ["9L1"]; - this.modData("Learnsets", "piloswine").learnset.chisel = ["9L1"]; - this.modData("Learnsets", "piloswine").learnset.frostbreath = ["9L1"]; - this.modData("Learnsets", "piloswine").learnset.meteorbeam = ["9L1"]; - this.modData("Learnsets", "piloswine").learnset.skullbash = ["9L1"]; - this.modData("Learnsets", "mamoswine").learnset.chisel = ["9L1"]; - this.modData("Learnsets", "mamoswine").learnset.frostbreath = ["9L1"]; - this.modData("Learnsets", "mamoswine").learnset.meteorbeam = ["9L1"]; - this.modData("Learnsets", "mamoswine").learnset.skullbash = ["9L1"]; - this.modData("Learnsets", "poochyena").learnset.ceaselessedge = ["9L1"]; - this.modData("Learnsets", "poochyena").learnset.falsesurrender = ["9L1"]; - this.modData("Learnsets", "poochyena").learnset.throatchop = ["9L1"]; - this.modData("Learnsets", "mightyena").learnset.ceaselessedge = ["9L1"]; - this.modData("Learnsets", "mightyena").learnset.falsesurrender = ["9L1"]; - this.modData("Learnsets", "mightyena").learnset.throatchop = ["9L1"]; - this.modData("Learnsets", "lotad").learnset.round = ["9L1"]; - this.modData("Learnsets", "lombre").learnset.round = ["9L1"]; - this.modData("Learnsets", "ludicolo").learnset.round = ["9L1"]; - this.modData("Learnsets", "seedot").learnset.junglehealing = ["9L1"]; - this.modData("Learnsets", "seedot").learnset.parry = ["9L1"]; - this.modData("Learnsets", "seedot").learnset.windbreaker = ["9L1"]; - this.modData("Learnsets", "nuzleaf").learnset.junglehealing = ["9L1"]; - this.modData("Learnsets", "nuzleaf").learnset.parry = ["9L1"]; - this.modData("Learnsets", "nuzleaf").learnset.windbreaker = ["9L1"]; - this.modData("Learnsets", "nuzleaf").learnset.ceaselessedge = ["9L1"]; - this.modData("Learnsets", "nuzleaf").learnset.falsesurrender = ["9L1"]; - this.modData("Learnsets", "nuzleaf").learnset.throatchop = ["9L1"]; - this.modData("Learnsets", "shiftry").learnset.junglehealing = ["9L1"]; - this.modData("Learnsets", "shiftry").learnset.parry = ["9L1"]; - this.modData("Learnsets", "shiftry").learnset.windbreaker = ["9L1"]; - this.modData("Learnsets", "shiftry").learnset.ceaselessedge = ["9L1"]; - this.modData("Learnsets", "shiftry").learnset.falsesurrender = ["9L1"]; - this.modData("Learnsets", "shiftry").learnset.throatchop = ["9L1"]; - this.modData("Learnsets", "shiftry").learnset.cuttingremark = ["9L1"]; - this.modData("Learnsets", "shiftry").learnset.stormthrow = ["9L1"]; - this.modData("Learnsets", "nosepass").learnset.meteorbeam = ["9L1"]; - this.modData("Learnsets", "nosepass").learnset.shrapnelshot = ["9L1"]; - this.modData("Learnsets", "probopass").learnset.meteorbeam = ["9L1"]; - this.modData("Learnsets", "probopass").learnset.shrapnelshot = ["9L1"]; - this.modData("Learnsets", "volbeat").learnset.defog = ["9L1"]; - this.modData("Learnsets", "volbeat").learnset.windbreaker = ["9L1"]; - this.modData("Learnsets", "illumise").learnset.defog = ["9L1"]; - this.modData("Learnsets", "illumise").learnset.windbreaker = ["9L1"]; - this.modData("Learnsets", "corphish").learnset.ceaselessedge = ["9L1"]; - this.modData("Learnsets", "corphish").learnset.parry = ["9L1"]; - this.modData("Learnsets", "corphish").learnset.throatchop = ["9L1"]; - this.modData("Learnsets", "crawdaunt").learnset.ceaselessedge = ["9L1"]; - this.modData("Learnsets", "crawdaunt").learnset.parry = ["9L1"]; - this.modData("Learnsets", "crawdaunt").learnset.throatchop = ["9L1"]; - this.modData("Learnsets", "duskull").learnset.choke = ["9L1"]; - this.modData("Learnsets", "dusclops").learnset.choke = ["9L1"]; - this.modData("Learnsets", "dusclops").learnset.ragefist = ["9L1"]; - this.modData("Learnsets", "dusclops").learnset.stormthrow = ["9L1"]; - this.modData("Learnsets", "dusclops").learnset.throatchop = ["9L1"]; - this.modData("Learnsets", "dusknoir").learnset.choke = ["9L1"]; - this.modData("Learnsets", "dusknoir").learnset.ragefist = ["9L1"]; - this.modData("Learnsets", "dusknoir").learnset.stormthrow = ["9L1"]; - this.modData("Learnsets", "dusknoir").learnset.throatchop = ["9L1"]; - this.modData("Learnsets", "chingling").learnset.cuttingremark = ["9L1"]; - this.modData("Learnsets", "chingling").learnset.defog = ["9L1"]; - this.modData("Learnsets", "chingling").learnset.healingstones = ["9L1"]; - this.modData("Learnsets", "chingling").learnset.psychoboost = ["9L1"]; - this.modData("Learnsets", "chingling").learnset.round = ["9L1"]; - this.modData("Learnsets", "chingling").learnset.windbreaker = ["9L1"]; - this.modData("Learnsets", "chimecho").learnset.cuttingremark = ["9L1"]; - this.modData("Learnsets", "chimecho").learnset.defog = ["9L1"]; - this.modData("Learnsets", "chimecho").learnset.healingstones = ["9L1"]; - this.modData("Learnsets", "chimecho").learnset.psychoboost = ["9L1"]; - this.modData("Learnsets", "chimecho").learnset.round = ["9L1"]; - this.modData("Learnsets", "chimecho").learnset.windbreaker = ["9L1"]; - this.modData("Learnsets", "jirachi").learnset.healingstones = ["9L1"]; - this.modData("Learnsets", "jirachi").learnset.meteorbeam = ["9L1"]; - this.modData("Learnsets", "jirachi").learnset.peekaboo = ["9L1"]; - this.modData("Learnsets", "jirachi").learnset.psychoboost = ["9L1"]; - this.modData("Learnsets", "jirachi").learnset.shrapnelshot = ["9L1"]; - this.modData("Learnsets", "turtwig").learnset.rollout = ["9L1"]; - this.modData("Learnsets", "turtwig").learnset.shelter = ["9L1"]; - this.modData("Learnsets", "turtwig").learnset.skullbash = ["9L1"]; - this.modData("Learnsets", "grotle").learnset.rollout = ["9L1"]; - this.modData("Learnsets", "grotle").learnset.shelter = ["9L1"]; - this.modData("Learnsets", "grotle").learnset.skullbash = ["9L1"]; - this.modData("Learnsets", "torterra").learnset.rollout = ["9L1"]; - this.modData("Learnsets", "torterra").learnset.shelter = ["9L1"]; - this.modData("Learnsets", "torterra").learnset.skullbash = ["9L1"]; - this.modData("Learnsets", "chimchar").learnset.choke = ["9L1"]; - this.modData("Learnsets", "chimchar").learnset.parry = ["9L1"]; - this.modData("Learnsets", "chimchar").learnset.rekindle = ["9L1"]; - this.modData("Learnsets", "chimchar").learnset.throatchop = ["9L1"]; - this.modData("Learnsets", "monferno").learnset.choke = ["9L1"]; - this.modData("Learnsets", "monferno").learnset.parry = ["9L1"]; - this.modData("Learnsets", "monferno").learnset.rekindle = ["9L1"]; - this.modData("Learnsets", "monferno").learnset.throatchop = ["9L1"]; - this.modData("Learnsets", "infernape").learnset.choke = ["9L1"]; - this.modData("Learnsets", "infernape").learnset.parry = ["9L1"]; - this.modData("Learnsets", "infernape").learnset.rekindle = ["9L1"]; - this.modData("Learnsets", "infernape").learnset.throatchop = ["9L1"]; - this.modData("Learnsets", "piplup").learnset.cuttingremark = ["9L1"]; - this.modData("Learnsets", "piplup").learnset.frostbreath = ["9L1"]; - this.modData("Learnsets", "piplup").learnset.lifedew = ["9L1"]; - this.modData("Learnsets", "piplup").learnset.pluck = ["9L1"]; - this.modData("Learnsets", "piplup").learnset.skullbash = ["9L1"]; - this.modData("Learnsets", "prinplup").learnset.cuttingremark = ["9L1"]; - this.modData("Learnsets", "prinplup").learnset.frostbreath = ["9L1"]; - this.modData("Learnsets", "prinplup").learnset.lifedew = ["9L1"]; - this.modData("Learnsets", "prinplup").learnset.pluck = ["9L1"]; - this.modData("Learnsets", "prinplup").learnset.skullbash = ["9L1"]; - this.modData("Learnsets", "empoleon").learnset.cuttingremark = ["9L1"]; - this.modData("Learnsets", "empoleon").learnset.frostbreath = ["9L1"]; - this.modData("Learnsets", "empoleon").learnset.lifedew = ["9L1"]; - this.modData("Learnsets", "empoleon").learnset.pluck = ["9L1"]; - this.modData("Learnsets", "empoleon").learnset.skullbash = ["9L1"]; - this.modData("Learnsets", "empoleon").learnset.shrapnelshot = ["9L1"]; - this.modData("Learnsets", "phione").learnset.lifedew = ["9L1"]; - this.modData("Learnsets", "manaphy").learnset.lifedew = ["9L1"]; - this.modData("Learnsets", "shaymin").learnset.healingstones = ["9L1"]; - this.modData("Learnsets", "shaymin").learnset.lifedew = ["9L1"]; - this.modData("Learnsets", "shaymin").learnset.windbreaker = ["9L1"]; - this.modData("Learnsets", "darkrai").learnset.choke = ["9L1"]; - this.modData("Learnsets", "darkrai").learnset.throatchop = ["9L1"]; - this.modData("Learnsets", "darkrai").learnset.comeuppance = ["9L1"]; - this.modData("Learnsets", "timburr").learnset.choke = ["9L1"]; - this.modData("Learnsets", "timburr").learnset.parry = ["9L1"]; - this.modData("Learnsets", "timburr").learnset.stormthrow = ["9L1"]; - this.modData("Learnsets", "timburr").learnset.throatchop = ["9L1"]; - this.modData("Learnsets", "gurdurr").learnset.choke = ["9L1"]; - this.modData("Learnsets", "gurdurr").learnset.parry = ["9L1"]; - this.modData("Learnsets", "gurdurr").learnset.stormthrow = ["9L1"]; - this.modData("Learnsets", "gurdurr").learnset.throatchop = ["9L1"]; - this.modData("Learnsets", "conkeldurr").learnset.choke = ["9L1"]; - this.modData("Learnsets", "conkeldurr").learnset.parry = ["9L1"]; - this.modData("Learnsets", "conkeldurr").learnset.stormthrow = ["9L1"]; - this.modData("Learnsets", "conkeldurr").learnset.throatchop = ["9L1"]; - this.modData("Learnsets", "sewaddle").learnset.electroweb = ["9L1"]; - this.modData("Learnsets", "sewaddle").learnset.parry = ["9L1"]; - this.modData("Learnsets", "swadloon").learnset.electroweb = ["9L1"]; - this.modData("Learnsets", "swadloon").learnset.parry = ["9L1"]; - this.modData("Learnsets", "leavanny").learnset.electroweb = ["9L1"]; - this.modData("Learnsets", "leavanny").learnset.parry = ["9L1"]; - this.modData("Learnsets", "ducklett").learnset.lifedew = ["9L1"]; - this.modData("Learnsets", "ducklett").learnset.pluck = ["9L1"]; - this.modData("Learnsets", "ducklett").learnset.round = ["9L1"]; - this.modData("Learnsets", "ducklett").learnset.windbreaker = ["9L1"]; - this.modData("Learnsets", "swanna").learnset.lifedew = ["9L1"]; - this.modData("Learnsets", "swanna").learnset.pluck = ["9L1"]; - this.modData("Learnsets", "swanna").learnset.round = ["9L1"]; - this.modData("Learnsets", "swanna").learnset.windbreaker = ["9L1"]; - this.modData("Learnsets", "litwick").learnset.choke = ["9L1"]; - this.modData("Learnsets", "litwick").learnset.rekindle = ["9L1"]; - this.modData("Learnsets", "lampent").learnset.choke = ["9L1"]; - this.modData("Learnsets", "lampent").learnset.rekindle = ["9L1"]; - this.modData("Learnsets", "chandelure").learnset.choke = ["9L1"]; - this.modData("Learnsets", "chandelure").learnset.rekindle = ["9L1"]; - this.modData("Learnsets", "mienfoo").learnset.choke = ["9L1"]; - this.modData("Learnsets", "mienfoo").learnset.parry = ["9L1"]; - this.modData("Learnsets", "mienfoo").learnset.throatchop = ["9L1"]; - this.modData("Learnsets", "mienshao").learnset.choke = ["9L1"]; - this.modData("Learnsets", "mienshao").learnset.parry = ["9L1"]; - this.modData("Learnsets", "mienshao").learnset.throatchop = ["9L1"]; - this.modData("Learnsets", "vullaby").learnset.falsesurrender = ["9L1"]; - this.modData("Learnsets", "vullaby").learnset.windbreaker = ["9L1"]; - this.modData("Learnsets", "mandibuzz").learnset.falsesurrender = ["9L1"]; - this.modData("Learnsets", "mandibuzz").learnset.windbreaker = ["9L1"]; - this.modData("Learnsets", "phantump").learnset.choke = ["9L1"]; - this.modData("Learnsets", "phantump").learnset.junglehealing = ["9L1"]; - this.modData("Learnsets", "phantump").learnset.throatchop = ["9L1"]; - this.modData("Learnsets", "trevenant").learnset.choke = ["9L1"]; - this.modData("Learnsets", "trevenant").learnset.junglehealing = ["9L1"]; - this.modData("Learnsets", "trevenant").learnset.throatchop = ["9L1"]; - this.modData("Learnsets", "trevenant").learnset.ragefist = ["9L1"]; - this.modData("Learnsets", "grubbin").learnset.electroweb = ["9L1"]; - this.modData("Learnsets", "charjabug").learnset.electroweb = ["9L1"]; - this.modData("Learnsets", "charjabug").learnset.chainlightning = ["9L1"]; - this.modData("Learnsets", "vikavolt").learnset.electroweb = ["9L1"]; - this.modData("Learnsets", "vikavolt").learnset.chainlightning = ["9L1"]; - this.modData("Learnsets", "cutiefly").learnset.healingstones = ["9L1"]; - this.modData("Learnsets", "cutiefly").learnset.peekaboo = ["9L1"]; - this.modData("Learnsets", "cutiefly").learnset.windbreaker = ["9L1"]; - this.modData("Learnsets", "ribombee").learnset.healingstones = ["9L1"]; - this.modData("Learnsets", "ribombee").learnset.peekaboo = ["9L1"]; - this.modData("Learnsets", "ribombee").learnset.windbreaker = ["9L1"]; - this.modData("Learnsets", "jangmoo").learnset.chisel = ["9L1"]; - this.modData("Learnsets", "jangmoo").learnset.parry = ["9L1"]; - this.modData("Learnsets", "jangmoo").learnset.skullbash = ["9L1"]; - this.modData("Learnsets", "hakamoo").learnset.chisel = ["9L1"]; - this.modData("Learnsets", "hakamoo").learnset.parry = ["9L1"]; - this.modData("Learnsets", "hakamoo").learnset.skullbash = ["9L1"]; - this.modData("Learnsets", "kommoo").learnset.chisel = ["9L1"]; - this.modData("Learnsets", "kommoo").learnset.parry = ["9L1"]; - this.modData("Learnsets", "kommoo").learnset.skullbash = ["9L1"]; - this.modData("Learnsets", "cramorant").learnset.shrapnelshot = ["9L1"]; - this.modData("Learnsets", "cramorant").learnset.snipeshot = ["9L1"]; - this.modData("Learnsets", "cramorant").learnset.windbreaker = ["9L1"]; - this.modData("Learnsets", "morpeko").learnset.chainlightning = ["9L1"]; - this.modData("Learnsets", "morpeko").learnset.peekaboo = ["9L1"]; - this.modData("Learnsets", "morpeko").learnset.ragingfury = ["9L1"]; - this.modData("Learnsets", "morpeko").learnset.rollout = ["9L1"]; - this.modData("Learnsets", "morpeko").learnset.throatchop = ["9L1"]; - this.modData("Learnsets", "okidogi").learnset.choke = ["9L1"]; - this.modData("Learnsets", "okidogi").learnset.direclaw = ["9L1"]; - this.modData("Learnsets", "okidogi").learnset.hazardouswaste = ["9L1"]; - this.modData("Learnsets", "okidogi").learnset.stormthrow = ["9L1"]; - this.modData("Learnsets", "okidogi").learnset.throatchop = ["9L1"]; - this.modData("Learnsets", "munkidori").learnset.cuttingremark = ["9L1"]; - this.modData("Learnsets", "munkidori").learnset.direclaw = ["9L1"]; - this.modData("Learnsets", "munkidori").learnset.hazardouswaste = ["9L1"]; - this.modData("Learnsets", "munkidori").learnset.throatchop = ["9L1"]; - this.modData("Learnsets", "fezandipiti").learnset.cuttingremark = ["9L1"]; - this.modData("Learnsets", "fezandipiti").learnset.defog = ["9L1"]; - this.modData("Learnsets", "fezandipiti").learnset.direclaw = ["9L1"]; - this.modData("Learnsets", "fezandipiti").learnset.hazardouswaste = ["9L1"]; - this.modData("Learnsets", "fezandipiti").learnset.healingstones = ["9L1"]; - this.modData("Learnsets", "fezandipiti").learnset.pluck = ["9L1"]; - this.modData("Learnsets", "fezandipiti").learnset.windbreaker = ["9L1"]; - this.modData("Learnsets", "ogerpon").learnset.junglehealing = ["9L1"]; - this.modData("Learnsets", "ogerpon").learnset.peekaboo = ["9L1"]; - this.modData('Learnsets', 'bronzor').learnset.rebuild = ['9L1']; - this.modData('Learnsets', 'magnemite').learnset.rebuild = ['9L1']; - this.modData('Learnsets', 'pineco').learnset.rebuild = ['9L1']; - this.modData('Learnsets', 'tinkatink').learnset.rebuild = ['9L1']; - this.modData('Learnsets', 'irontreads').learnset.rebuild = ['9L1']; - this.modData('Learnsets', 'nosepass').learnset.rebuild = ['9L1']; - this.modData('Learnsets', 'nacli').learnset.rebuild = ['9L1']; - this.modData('Learnsets', 'geodude').learnset.rebuild = ['9L1']; - this.modData('Learnsets', 'magcargo').learnset.rebuild = ['9L1']; - this.modData('Learnsets', 'diancie').learnset.rebuild = ['9L1']; - this.modData('Learnsets', 'rolycoly').learnset.rebuild = ['9L1']; - this.modData('Learnsets', 'stonjourner').learnset.rebuild = ['9L1']; - this.modData('Learnsets', 'timburr').learnset.rebuild = ['9L1']; - this.modData('Learnsets', 'carbink').learnset.rebuild = ['9L1']; - this.modData('Learnsets', 'alomomola').learnset.washaway = ['9L1']; - this.modData('Learnsets', 'bellibolt').learnset.washaway = ['9L1']; - this.modData('Learnsets', 'clawitzer').learnset.washaway = ['9L1']; - this.modData('Learnsets', 'cramorant').learnset.washaway = ['9L1']; - this.modData('Learnsets', 'dondozo').learnset.washaway = ['9L1']; - this.modData('Learnsets', 'empoleon').learnset.washaway = ['9L1']; - this.modData('Learnsets', 'gastrodon').learnset.washaway = ['9L1']; - this.modData('Learnsets', 'greninja').learnset.washaway = ['9L1']; - this.modData('Learnsets', 'gyarados').learnset.washaway = ['9L1']; - this.modData('Learnsets', 'lumineon').learnset.washaway = ['9L1']; - this.modData('Learnsets', 'manaphy').learnset.washaway = ['9L1']; - this.modData('Learnsets', 'pelipper').learnset.washaway = ['9L1']; - this.modData('Learnsets', 'phione').learnset.washaway = ['9L1']; - this.modData('Learnsets', 'politoed').learnset.washaway = ['9L1']; - this.modData('Learnsets', 'poliwrath').learnset.washaway = ['9L1']; - this.modData('Learnsets', 'tatsugiri').learnset.washaway = ['9L1']; - this.modData('Learnsets', 'toxapex').learnset.washaway = ['9L1']; - this.modData('Learnsets', 'whiscash').learnset.washaway = ['9L1']; - this.modData('Learnsets', 'vaporeon').learnset.washaway = ['9L1']; - this.modData('Learnsets', 'kommoo').learnset.echochamber = ['9L1']; - this.modData('Learnsets', 'noibat').learnset.echochamber = ['9L1']; - this.modData('Learnsets', 'toxtricity').learnset.echochamber = ['9L1']; - this.modData('Learnsets', 'rillaboom').learnset.echochamber = ['9L1']; - this.modData('Learnsets', 'bronzor').learnset.echochamber = ['9L1']; - this.modData('Learnsets', 'igglybuff').learnset.echochamber = ['9L1']; - this.modData('Learnsets', 'chingling').learnset.echochamber = ['9L1']; - this.modData('Learnsets', 'meloetta').learnset.echochamber = ['9L1']; - this.modData('Learnsets', 'skeledirge').learnset.echochamber = ['9L1']; - this.modData('Learnsets', 'corviknight').learnset.echochamber = ['9L1']; - this.modData('Learnsets', 'heatran').learnset.echochamber = ['9L1']; - this.modData('Learnsets', 'ironmoth').learnset.echochamber = ['9L1']; - this.modData('Learnsets', 'sandyshocks').learnset.echochamber = ['9L1']; - this.modData('Learnsets', 'magnemite').learnset.echochamber = ['9L1']; - this.modData('Learnsets', 'klefki').learnset.echochamber = ['9L1']; - this.modData('Learnsets', 'riolu').learnset.echochamber = ['9L1']; - this.modData('Learnsets', 'screamtail').learnset.echochamber = ['9L1']; - this.modData("Learnsets", "milotic").learnset.moonblast = ["9L1"]; - this.modData("Learnsets", "milotic").learnset.healingstones = ["9L1"]; - this.modData("Learnsets", "milotic").learnset.psychic = ["9L1"]; - this.modData("Learnsets", "eevee").learnset.round = ["9L1"]; - this.modData("Learnsets", "vaporeon").learnset.round = ["9L1"]; - this.modData("Learnsets", "jolteon").learnset.round = ["9L1"]; - this.modData("Learnsets", "jolteon").learnset.dazzlinggleam = ["9L1"]; - this.modData("Learnsets", "jolteon").learnset.overheat = ["9L1"]; - this.modData("Learnsets", "flareon").learnset.round = ["9L1"]; - this.modData("Learnsets", "flareon").learnset.closecombat = ["9L1"]; - this.modData("Learnsets", "flareon").learnset.morningsun = ["9L1"]; - this.modData("Learnsets", "flareon").learnset.ragingfury = ["9L1"]; - this.modData("Learnsets", "flareon").learnset.swordsdance = ["9L1"]; - this.modData("Learnsets", "espeon").learnset.round = ["9L1"]; - this.modData("Learnsets", "espeon").learnset.luminacrash = ["9L1"]; - this.modData("Learnsets", "umbreon").learnset.round = ["9L1"]; - this.modData("Learnsets", "umbreon").learnset.direclaw = ["9L1"]; - this.modData("Learnsets", "umbreon").learnset.knockoff = ["9L1"]; - this.modData("Learnsets", "leafeon").learnset.round = ["9L1"]; - this.modData("Learnsets", "leafeon").learnset.nightslash = ["9L1"]; - this.modData("Learnsets", "leafeon").learnset.psychocut = ["9L1"]; - this.modData("Learnsets", "glaceon").learnset.round = ["9L1"]; - this.modData("Learnsets", "glaceon").learnset.dazzlinggleam = ["9L1"]; - this.modData("Learnsets", "glaceon").learnset.earthpower = ["9L1"]; - this.modData("Learnsets", "sylveon").learnset.round = ["9L1"]; - this.modData("Learnsets", "landorus").learnset.spikes = ["9L1"]; - this.modData("Learnsets", "landorus").learnset.defog = ["9L1"]; - this.modData("Learnsets", "landorus").learnset.meteorbeam = ["9L1"]; - this.modData("Learnsets", "landorus").learnset.acrobatics = ["9L1"]; - this.modData("Learnsets", "landorus").learnset.skullbash = ["9L1"]; - this.modData('Learnsets', 'cinderace').learnset.brickbreak = ['9L1']; - this.modData('Learnsets', 'gyarados').learnset.psychicfangs = ['9L1']; - this.modData('Learnsets', 'sandile').learnset.psychicfangs = ['9L1']; - this.modData('Learnsets', 'drednaw').learnset.psychicfangs = ['9L1']; - this.modData('Learnsets', 'roaringmoon').learnset.psychicfangs = ['9L1']; - this.modData('Learnsets', 'tinkaton').learnset.sledgehammerblow = ['9L1']; - this.modData('Learnsets', 'empoleon').learnset.sledgehammerblow = ['9L1']; - this.modData('Learnsets', 'goodrahisui').learnset.sledgehammerblow = ['9L1']; - this.modData('Learnsets', 'scizor').learnset.sledgehammerblow = ['9L1']; - this.modData('Learnsets', 'copperajah').learnset.sledgehammerblow = ['9L1']; - this.modData('Learnsets', 'orthworm').learnset.sledgehammerblow = ['9L1']; - this.modData('Learnsets', 'probopass').learnset.sledgehammerblow = ['9L1']; - this.modData('Learnsets', 'gurdurr').learnset.sledgehammerblow = ['9L1']; - this.modData('Learnsets', 'irontreads').learnset.sledgehammerblow = ['9L1']; - this.modData('Learnsets', 'bronzong').learnset.sledgehammerblow = ['9L1']; - this.modData('Learnsets', 'corphish').learnset.sledgehammerblow = ['9L1']; - this.modData('Learnsets', 'gligar').learnset.sledgehammerblow = ['9L1']; - this.modData('Learnsets', 'crabrawler').learnset.sledgehammerblow = ['9L1']; - this.modData('Learnsets', 'klawf').learnset.sledgehammerblow = ['9L1']; - this.modData('Learnsets', 'chesnaught').learnset.sledgehammerblow = ['9L1']; - this.modData('Learnsets', 'snorlax').learnset.sledgehammerblow = ['9L1']; - this.modData('Learnsets', 'ursaring').learnset.sledgehammerblow = ['9L1']; - this.modData('Learnsets', 'rillaboom').learnset.sledgehammerblow = ['9L1']; - this.modData('Learnsets', 'greattusk').learnset.desertstorm = ['9L1']; - this.modData('Learnsets', 'landorus').learnset.desertstorm = ['9L1']; - this.modData('Learnsets', 'tinglu').learnset.desertstorm = ['9L1']; - this.modData('Learnsets', 'donphan').learnset.desertstorm = ['9L1']; - this.modData('Learnsets', 'garchomp').learnset.desertstorm = ['9L1']; - this.modData('Learnsets', 'hippowdon').learnset.desertstorm = ['9L1']; - this.modData('Learnsets', 'irontreads').learnset.desertstorm = ['9L1']; - this.modData('Learnsets', 'sandyshocks').learnset.desertstorm = ['9L1']; - this.modData('Learnsets', 'torterra').learnset.desertstorm = ['9L1']; - this.modData('Learnsets', 'krookodile').learnset.desertstorm = ['9L1']; - this.modData('Learnsets', 'golem').learnset.desertstorm = ['9L1']; - this.modData('Learnsets', 'sandaconda').learnset.desertstorm = ['9L1']; - this.modData('Learnsets', 'dugtrio').learnset.desertstorm = ['9L1']; - this.modData('Learnsets', 'dugtrioalola').learnset.desertstorm = ['9L1']; - this.modData('Learnsets', 'pyroar').learnset.desertstorm = ['9L1']; - this.modData('Learnsets', 'sandslash').learnset.desertstorm = ['9L1']; - this.modData('Learnsets', 'tyranitar').learnset.desertstorm = ['9L1']; - this.modData('Learnsets', 'rockruff').learnset.desertstorm = ['9L1']; - this.modData('Learnsets', 'lycanrocdusk').learnset.desertstorm = ['9L1']; - this.modData('Learnsets', 'whiscash').learnset.desertstorm = ['9L1']; - this.modData('Learnsets', 'nosepass').learnset.desertstorm = ['9L1']; - this.modData('Learnsets', 'stonjourner').learnset.desertstorm = ['9L1']; - this.modData('Learnsets', 'klawf').learnset.desertstorm = ['9L1']; - this.modData('Learnsets', 'orthworm').learnset.desertstorm = ['9L1']; - this.modData('Learnsets', 'dipplin').learnset.dragonrage = ['9L1']; - this.modData('Learnsets', 'flapple').learnset.dragonrage = ['9L1']; - this.modData('Learnsets', 'appletun').learnset.dragonrage = ['9L1']; - this.modData('Learnsets', 'dratini').learnset.dragonrage = ['9L1']; - this.modData('Learnsets', 'gible').learnset.dragonrage = ['9L1']; - this.modData('Learnsets', 'bagon').learnset.dragonrage = ['9L1']; - this.modData('Learnsets', 'jangmoo').learnset.dragonrage = ['9L1']; - this.modData('Learnsets', 'cyclizar').learnset.dragonrage = ['9L1']; - this.modData('Learnsets', 'goomy').learnset.dragonrage = ['9L1']; - this.modData('Learnsets', 'gyarados').learnset.dragonrage = ['9L1']; - this.modData('Learnsets', 'milotic').learnset.dragonrage = ['9L1']; - this.modData('Learnsets', 'deino').learnset.dragonrage = ['9L1']; - this.modData('Learnsets', 'regidrago').learnset.dragonrage = ['9L1']; - this.modData('Learnsets', 'altaria').learnset.dragonrage = ['9L1']; - this.modData('Learnsets', 'dragalge').learnset.dragonrage = ['9L1']; - this.modData('Learnsets', 'noivern').learnset.dragonrage = ['9L1']; - this.modData('Learnsets', 'tatsugiri').learnset.dragonrage = ['9L1']; - this.modData('Learnsets', 'rayquaza').learnset.dragonrage = ['9L1']; - this.modData('Learnsets', 'eternatus').learnset.dragonrage = ['9L1']; - this.modData('Learnsets', 'ampharos').learnset.dragonrage = ['9L1']; - this.modData('Learnsets', 'axew').learnset.dragonrage = ['9L1']; - this.modData('Learnsets', 'salazzle').learnset.dragonrage = ['9L1']; - this.modData('Learnsets', 'dondozo').learnset.dragonrage = ['9L1']; - this.modData('Learnsets', 'charmander').learnset.rage = ['9L1']; - this.modData('Learnsets', 'mankey').learnset.rage = ['9L1']; - this.modData('Learnsets', 'tauros').learnset.rage = ['9L1']; - this.modData('Learnsets', 'taurospaldeacombat').learnset.rage = ['9L1']; - this.modData('Learnsets', 'taurospaldeablaze').learnset.rage = ['9L1']; - this.modData('Learnsets', 'taurospaldeaaqua').learnset.rage = ['9L1']; - this.modData('Learnsets', 'gyarados').learnset.rage = ['9L1']; - this.modData('Learnsets', 'flareon').learnset.rage = ['9L1']; - this.modData('Learnsets', 'dunsparce').learnset.rage = ['9L1']; - this.modData('Learnsets', 'bagon').learnset.rage = ['9L1']; - this.modData('Learnsets', 'sandile').learnset.rage = ['9L1']; - this.modData('Learnsets', 'houndour').learnset.rage = ['9L1']; - this.modData('Learnsets', 'stantler').learnset.rage = ['9L1']; - this.modData('Learnsets', 'basculin').learnset.rage = ['9L1']; - this.modData('Learnsets', 'basculinwhitestriped').learnset.rage = ['9L1']; - this.modData('Learnsets', 'bruxish').learnset.rage = ['9L1']; - this.modData('Learnsets', 'munchlax').learnset.rage = ['9L1']; - this.modData('Learnsets', 'teddiursa').learnset.rage = ['9L1']; - this.modData('Learnsets', 'ursalunabloodmoon').learnset.rage = ['9L1']; - this.modData('Learnsets', 'zoroarkhisui').learnset.rage = ['9L1']; - this.modData('Learnsets', 'staraptor').learnset.rage = ['9L1']; - this.modData('Learnsets', 'rufflet').learnset.rage = ['9L1']; - this.modData('Learnsets', 'zangoose').learnset.rage = ['9L1']; - this.modData('Learnsets', 'yungoos').learnset.rage = ['9L1']; - this.modData('Learnsets', 'skwovet').learnset.rage = ['9L1']; - this.modData('Learnsets', 'vigoroth').learnset.rage = ['9L1']; - this.modData('Learnsets', 'squawkabilly').learnset.rage = ['9L1']; - this.modData('Learnsets', 'jigglypuff').learnset.rage = ['9L1']; - this.modData('Learnsets', 'litleo').learnset.rage = ['9L1']; - this.modData('Learnsets', 'okidogi').learnset.rage = ['9L1']; - this.modData('Learnsets', 'morpeko').learnset.rage = ['9L1']; - this.modData('Learnsets', 'lycanrocdusk').learnset.rage = ['9L1']; - this.modData('Learnsets', 'hydreigon').learnset.rage = ['9L1']; - this.modData('Learnsets', 'dondozo').learnset.rage = ['9L1']; - this.modData('Learnsets', 'slitherwing').learnset.rage = ['9L1']; - this.modData('Learnsets', 'ironthorns').learnset.rage = ['9L1']; - this.modData('Learnsets', 'geodude').learnset.rage = ['9L1']; - this.modData('Learnsets', 'geodudealola').learnset.rage = ['9L1']; - this.modData('Learnsets', 'chimchar').learnset.rage = ['9L1']; - this.modData('Learnsets', 'glimmet').learnset.latentvenom = ['9L1']; - this.modData('Learnsets', 'slowkinggalar').learnset.latentvenom = ['9L1']; - this.modData('Learnsets', 'sneaselhisui').learnset.latentvenom = ['9L1']; - this.modData('Learnsets', 'amoonguss').learnset.latentvenom = ['9L1']; - this.modData('Learnsets', 'wooperpaldea').learnset.latentvenom = ['9L1']; - this.modData('Learnsets', 'fezandipiti').learnset.latentvenom = ['9L1']; - this.modData('Learnsets', 'gengar').learnset.latentvenom = ['9L1']; - this.modData('Learnsets', 'grimeralola').learnset.latentvenom = ['9L1']; - this.modData('Learnsets', 'munkidori').learnset.latentvenom = ['9L1']; - this.modData('Learnsets', 'okidogi').learnset.latentvenom = ['9L1']; - this.modData('Learnsets', 'skrelp').learnset.latentvenom = ['9L1']; - this.modData('Learnsets', 'shroodle').learnset.latentvenom = ['9L1']; - this.modData('Learnsets', 'qwilfishhisui').learnset.latentvenom = ['9L1']; - this.modData('Learnsets', 'toxtricity').learnset.latentvenom = ['9L1']; - this.modData('Learnsets', 'toxtricitylowkey').learnset.latentvenom = ['9L1']; - this.modData('Learnsets', 'venonat').learnset.latentvenom = ['9L1']; - this.modData('Learnsets', 'grimer').learnset.latentvenom = ['9L1']; - this.modData('Learnsets', 'salandit').learnset.latentvenom = ['9L1']; - this.modData('Learnsets', 'slowbrogalar').learnset.latentvenom = ['9L1']; - this.modData('Learnsets', 'victreebel').learnset.latentvenom = ['9L1']; - this.modData('Learnsets', 'croagunk').learnset.latentvenom = ['9L1']; - this.modData('Learnsets', 'ekans').learnset.latentvenom = ['9L1']; - this.modData('Learnsets', 'spinarak').learnset.latentvenom = ['9L1']; - this.modData('Learnsets', 'weezing').learnset.latentvenom = ['9L1']; - this.modData('Learnsets', 'seviper').learnset.latentvenom = ['9L1']; - this.modData('Learnsets', 'gligar').learnset.latentvenom = ['9L1']; - this.modData('Learnsets', 'vespiquen').learnset.latentvenom = ['9L1']; - this.modData('Learnsets', 'pincurchin').learnset.latentvenom = ['9L1']; - this.modData('Learnsets', 'trevenant').learnset.latentvenom = ['9L1']; - this.modData("Learnsets", "wigglytuff").learnset.boomburst = ["9L1"]; - this.modData("Learnsets", "wigglytuff").learnset.moonblast = ["9L1"]; - this.modData("Learnsets", "wigglytuff").learnset.spiritbreak = ["9L1"]; - this.modData("Learnsets", "wigglytuff").learnset.teleport = ["9L1"]; - this.modData("Learnsets", "wigglytuff").learnset.tidyup = ["9L1"]; - this.modData("Learnsets", "froslass").learnset.freezedry = ["9L1"]; - this.modData("Learnsets", "froslass").learnset.nastyplot = ["9L1"]; - this.modData("Learnsets", "froslass").learnset.focusblast = ["9L1"]; - this.modData("Learnsets", "froslass").learnset.bittermalice = ["9L1"]; - this.modData("Learnsets", "okidogi").learnset.partingshot = ["9L1"]; - this.modData("Learnsets", "okidogi").learnset.swordsdance = ["9L1"]; - this.modData("Learnsets", "munkidori").learnset.psychoboost = ["9L1"]; - this.modData("Learnsets", "fezandipiti").learnset.willowisp = ["9L1"]; - this.modData("Learnsets", "snorlax").learnset.rollout = ["9L1"]; - this.modData("Learnsets", "snorlax").learnset.slackoff = ["9L1"]; - delete this.modData('Learnsets', 'sneasler').learnset.acrobatics; - delete this.modData('Learnsets', 'darkrai').learnset.trick; - delete this.modData('Learnsets', 'darkrai').learnset.hypnosis; - delete this.modData('Learnsets', 'darkrai').learnset.psychic; - delete this.modData('Learnsets', 'darkrai').learnset.nastyplot; - delete this.modData('Learnsets', 'darkrai').learnset.calmmind; - delete this.modData('Learnsets', 'mew').learnset.steelbeam; - this.modData("Learnsets", "brambleghast").learnset.pinmissile = ["9L1"]; - this.modData("Learnsets", "brambleghast").learnset.poisonjab = ["9L1"]; - this.modData("Learnsets", "brambleghast").learnset.sandstorm = ["9L1"]; - this.modData("Learnsets", "brambleghast").learnset.sandtomb = ["9L1"]; - this.modData("Learnsets", "brambleghast").learnset.spikyshield = ["9L1"]; - this.modData("Learnsets", "brambleghast").learnset.whirlwind = ["9L1"]; - this.modData("Learnsets", "brambleghast").learnset.wrap = ["9L1"]; - this.modData("Learnsets", "brambleghast").learnset.swordsdance = ["9L1"]; - this.modData('Learnsets', 'heatran').learnset.smackdown = ['9L1']; - this.modData('Learnsets', 'garchomp').learnset.smackdown = ['9L1']; - this.modData('Learnsets', 'applin').learnset.rootpull = ['9L1']; - this.modData('Learnsets', 'bellsprout').learnset.rootpull = ['9L1']; - this.modData('Learnsets', 'bounsweet').learnset.rootpull = ['9L1']; - this.modData('Learnsets', 'bramblin').learnset.rootpull = ['9L1']; - this.modData('Learnsets', 'brutebonnet').learnset.rootpull = ['9L1']; - this.modData('Learnsets', 'capsakid').learnset.rootpull = ['9L1']; - this.modData('Learnsets', 'chespin').learnset.rootpull = ['9L1']; - this.modData('Learnsets', 'decidueye').learnset.rootpull = ['9L1']; - this.modData('Learnsets', 'fomantis').learnset.rootpull = ['9L1']; - this.modData('Learnsets', 'grookey').learnset.rootpull = ['9L1']; - this.modData('Learnsets', 'hoppip').learnset.rootpull = ['9L1']; - this.modData('Learnsets', 'leafeon').learnset.rootpull = ['9L1']; - this.modData('Learnsets', 'lotad').learnset.rootpull = ['9L1']; - this.modData('Learnsets', 'petilil').learnset.rootpull = ['9L1']; - this.modData('Learnsets', 'phantump').learnset.rootpull = ['9L1']; - this.modData('Learnsets', 'seedot').learnset.rootpull = ['9L1']; - this.modData('Learnsets', 'shaymin').learnset.rootpull = ['9L1']; - this.modData('Learnsets', 'skiddo').learnset.rootpull = ['9L1']; - this.modData('Learnsets', 'smoliv').learnset.rootpull = ['9L1']; - this.modData('Learnsets', 'snover').learnset.rootpull = ['9L1']; - this.modData('Learnsets', 'sprigatito').learnset.rootpull = ['9L1']; - this.modData('Learnsets', 'sunkern').learnset.rootpull = ['9L1']; - this.modData('Learnsets', 'turtwig').learnset.rootpull = ['9L1']; - this.modData('Learnsets', 'tropius').learnset.rootpull = ['9L1']; - this.modData('Learnsets', 'wochien').learnset.rootpull = ['9L1']; - this.modData('Learnsets', 'zarude').learnset.rootpull = ['9L1']; - this.modData('Learnsets', 'zarudedada').learnset.rootpull = ['9L1']; - this.modData('Learnsets', 'sneasel').learnset.snatch = ['9L1']; - this.modData('Learnsets', 'sneaselhisui').learnset.snatch = ['9L1']; - this.modData('Learnsets', 'shuppet').learnset.snatch = ['9L1']; - this.modData('Learnsets', 'munchlax').learnset.snatch = ['9L1']; - this.modData('Learnsets', 'meowth').learnset.snatch = ['9L1']; - this.modData('Learnsets', 'meowthgalar').learnset.snatch = ['9L1']; - this.modData('Learnsets', 'meowthalola').learnset.snatch = ['9L1']; - this.modData('Learnsets', 'poochyena').learnset.snatch = ['9L1']; - this.modData('Learnsets', 'ekans').learnset.snatch = ['9L1']; - this.modData('Learnsets', 'zorua').learnset.snatch = ['9L1']; - this.modData('Learnsets', 'zoruahisui').learnset.snatch = ['9L1']; - this.modData('Learnsets', 'fletchling').learnset.snatch = ['9L1']; - this.modData('Learnsets', 'litleo').learnset.snatch = ['9L1']; - this.modData('Learnsets', 'noibat').learnset.snatch = ['9L1']; - this.modData('Learnsets', 'salandit').learnset.snatch = ['9L1']; - this.modData('Learnsets', 'cleffa').learnset.snatch = ['9L1']; - this.modData('Learnsets', 'drowzee').learnset.snatch = ['9L1']; - this.modData('Learnsets', 'happiny').learnset.snatch = ['9L1']; - this.modData('Learnsets', 'mewtwo').learnset.snatch = ['9L1']; - this.modData('Learnsets', 'mew').learnset.snatch = ['9L1']; - this.modData('Learnsets', 'aipom').learnset.snatch = ['9L1']; - this.modData('Learnsets', 'umbreon').learnset.snatch = ['9L1']; - this.modData('Learnsets', 'murkrow').learnset.snatch = ['9L1']; - this.modData('Learnsets', 'eevee').learnset.snatch = ['9L1']; - this.modData('Learnsets', 'misdreavus').learnset.snatch = ['9L1']; - this.modData('Learnsets', 'houndour').learnset.snatch = ['9L1']; - this.modData('Learnsets', 'ralts').learnset.snatch = ['9L1']; - this.modData('Learnsets', 'shroomish').learnset.snatch = ['9L1']; - this.modData('Learnsets', 'sableye').learnset.snatch = ['9L1']; - this.modData('Learnsets', 'gulpin').learnset.snatch = ['9L1']; - this.modData('Learnsets', 'spoink').learnset.snatch = ['9L1']; - this.modData('Learnsets', 'seviper').learnset.snatch = ['9L1']; - this.modData('Learnsets', 'duskull').learnset.snatch = ['9L1']; - this.modData('Learnsets', 'chingling').learnset.snatch = ['9L1']; - this.modData('Learnsets', 'stunky').learnset.snatch = ['9L1']; - this.modData('Learnsets', 'croagunk').learnset.snatch = ['9L1']; - this.modData('Learnsets', 'spiritomb').learnset.snatch = ['9L1']; - this.modData('Learnsets', 'froslass').learnset.snatch = ['9L1']; - this.modData('Learnsets', 'rotom').learnset.snatch = ['9L1']; - this.modData('Learnsets', 'darkrai').learnset.snatch = ['9L1']; - this.modData('Learnsets', 'sandile').learnset.snatch = ['9L1']; - this.modData('Learnsets', 'gothita').learnset.snatch = ['9L1']; - this.modData('Learnsets', 'vullaby').learnset.snatch = ['9L1']; - this.modData('Learnsets', 'fennekin').learnset.snatch = ['9L1']; - this.modData('Learnsets', 'froakie').learnset.snatch = ['9L1']; - this.modData('Learnsets', 'mareanie').learnset.snatch = ['9L1']; - this.modData('Learnsets', 'oranguru').learnset.snatch = ['9L1']; - this.modData('Learnsets', 'passimian').learnset.snatch = ['9L1']; - this.modData('Learnsets', 'mimikyu').learnset.snatch = ['9L1']; - this.modData('Learnsets', 'bruxish').learnset.snatch = ['9L1']; - this.modData('Learnsets', 'cacnea').learnset.snatch = ['9L1']; - this.modData('Learnsets', 'impidimp').learnset.snatch = ['9L1']; - this.modData('Learnsets', 'moltresgalar').learnset.snatch = ['9L1']; - this.modData('Learnsets', 'nuzleaf').learnset.snatch = ['9L1']; - this.modData('Learnsets', 'grimeralola').learnset.snatch = ['9L1']; - this.modData('Learnsets', 'zarude').learnset.snatch = ['9L1']; - this.modData('Learnsets', 'zarudedada').learnset.snatch = ['9L1']; - this.modData('Learnsets', 'sprigatito').learnset.snatch = ['9L1']; - this.modData('Learnsets', 'brutebonnet').learnset.snatch = ['9L1']; - this.modData('Learnsets', 'maschiff').learnset.snatch = ['9L1']; - this.modData('Learnsets', 'munkidori').learnset.snatch = ['9L1']; - this.modData('Learnsets', 'greavard').learnset.snatch = ['9L1']; - this.modData('Learnsets', 'zangoose').learnset.snatch = ['9L1']; - this.modData('Learnsets', 'tinglu').learnset.snatch = ['9L1']; - this.modData('Learnsets', 'capsakid').learnset.snatch = ['9L1']; - this.modData('Learnsets', 'vulpix').learnset.tailslap = ['9L1']; - this.modData('Learnsets', 'vulpixalola').learnset.tailslap = ['9L1']; - this.modData('Learnsets', 'buizel').learnset.tailslap = ['9L1']; - this.modData('Learnsets', 'aipom').learnset.tailslap = ['9L1']; - this.modData('Learnsets', 'cyclizar').learnset.tailslap = ['9L1']; - this.modData('Learnsets', 'tauros').learnset.tailslap = ['9L1']; - this.modData('Learnsets', 'skwovet').learnset.tailslap = ['9L1']; - this.modData('Learnsets', 'meowth').learnset.tailslap = ['9L1']; - this.modData('Learnsets', 'meowthalola').learnset.tailslap = ['9L1']; - this.modData('Learnsets', 'stunky').learnset.tailslap = ['9L1']; - this.modData('Learnsets', 'lycanroc').learnset.tailslap = ['9L1']; - this.modData('Learnsets', 'zacian').learnset.tailslap = ['9L1']; - this.modData('Learnsets', 'zamazenta').learnset.tailslap = ['9L1']; - this.modData('Learnsets', 'grafaiai').learnset.tailslap = ['9L1']; - this.modData('Learnsets', 'flareon').learnset.tailslap = ['9L1']; - this.modData('Learnsets', 'aipom').learnset.rockblast = ['9L1']; - this.modData('Learnsets', 'clawitzer').learnset.rockblast = ['9L1']; - this.modData('Learnsets', 'passimian').learnset.rockblast = ['9L1']; - this.modData('Learnsets', 'falinks').learnset.rockblast = ['9L1']; - this.modData('Learnsets', 'sandslash').learnset.pinmissile = ['9L1']; - this.modData('Learnsets', 'sandslashalola').learnset.pinmissile = ['9L1']; - this.modData('Learnsets', 'lokix').learnset.pinmissile = ['9L1']; - this.modData('Learnsets', 'vikavolt').learnset.pinmissile = ['9L1']; - this.modData('Learnsets', 'vespiquen').learnset.pinmissile = ['9L1']; - this.modData('Learnsets', 'cloyster').learnset.pinmissile = ['9L1']; - this.modData('Learnsets', 'pincurchin').learnset.pinmissile = ['9L1']; - this.modData('Learnsets', 'scyther').learnset.pinmissile = ['9L1']; - this.modData('Learnsets', 'mareep').learnset.signalbeam = ['9L1']; - this.modData('Learnsets', 'spinarak').learnset.signalbeam = ['9L1']; - this.modData('Learnsets', 'articuno').learnset.signalbeam = ['9L1']; - this.modData('Learnsets', 'azelf').learnset.signalbeam = ['9L1']; - this.modData('Learnsets', 'bruxish').learnset.signalbeam = ['9L1']; - this.modData('Learnsets', 'clefairy').learnset.signalbeam = ['9L1']; - this.modData('Learnsets', 'shellder').learnset.signalbeam = ['9L1']; - this.modData('Learnsets', 'cryogonal').learnset.signalbeam = ['9L1']; - this.modData('Learnsets', 'dedenne').learnset.signalbeam = ['9L1']; - this.modData('Learnsets', 'fennekin').learnset.signalbeam = ['9L1']; - this.modData('Learnsets', 'drowzee').learnset.signalbeam = ['9L1']; - this.modData('Learnsets', 'eelektrik').learnset.signalbeam = ['9L1']; - this.modData('Learnsets', 'voltorb').learnset.signalbeam = ['9L1']; - this.modData('Learnsets', 'voltorbhisui').learnset.signalbeam = ['9L1']; - this.modData('Learnsets', 'espeon').learnset.signalbeam = ['9L1']; - this.modData('Learnsets', 'snorunt').learnset.signalbeam = ['9L1']; - this.modData('Learnsets', 'pineco').learnset.signalbeam = ['9L1']; - this.modData('Learnsets', 'glaceon').learnset.signalbeam = ['9L1']; - this.modData('Learnsets', 'spoink').learnset.signalbeam = ['9L1']; - this.modData('Learnsets', 'jolteon').learnset.signalbeam = ['9L1']; - this.modData('Learnsets', 'kyogre').learnset.signalbeam = ['9L1']; - this.modData('Learnsets', 'larvesta').learnset.signalbeam = ['9L1']; - this.modData('Learnsets', 'finneon').learnset.signalbeam = ['9L1']; - this.modData('Learnsets', 'shinx').learnset.signalbeam = ['9L1']; - this.modData('Learnsets', 'magnemite').learnset.signalbeam = ['9L1']; - this.modData('Learnsets', 'manaphy').learnset.signalbeam = ['9L1']; - this.modData('Learnsets', 'surskit').learnset.signalbeam = ['9L1']; - this.modData('Learnsets', 'mesprit').learnset.signalbeam = ['9L1']; - this.modData('Learnsets', 'mew').learnset.signalbeam = ['9L1']; - this.modData('Learnsets', 'mewtwo').learnset.signalbeam = ['9L1']; - this.modData('Learnsets', 'pichu').learnset.signalbeam = ['9L1']; - this.modData('Learnsets', 'qwilfish').learnset.signalbeam = ['9L1']; - this.modData('Learnsets', 'qwilfishhisui').learnset.signalbeam = ['9L1']; - this.modData('Learnsets', 'cutiefly').learnset.signalbeam = ['9L1']; - this.modData('Learnsets', 'rotom').learnset.signalbeam = ['9L1']; - this.modData('Learnsets', 'sableye').learnset.signalbeam = ['9L1']; - this.modData('Learnsets', 'slowbrogalar').learnset.signalbeam = ['9L1']; - this.modData('Learnsets', 'slowkinggalar').learnset.signalbeam = ['9L1']; - this.modData('Learnsets', 'stantler').learnset.signalbeam = ['9L1']; - this.modData('Learnsets', 'uxie').learnset.signalbeam = ['9L1']; - this.modData('Learnsets', 'venonat').learnset.signalbeam = ['9L1']; - this.modData('Learnsets', 'charjabug').learnset.signalbeam = ['9L1']; - this.modData('Learnsets', 'vespiquen').learnset.signalbeam = ['9L1']; - this.modData('Learnsets', 'zapdos').learnset.signalbeam = ['9L1']; - this.modData('Learnsets', 'yanma').learnset.signalbeam = ['9L1']; - this.modData('Learnsets', 'articunogalar').learnset.signalbeam = ['9L1']; - this.modData('Learnsets', 'braviaryhisui').learnset.signalbeam = ['9L1']; - this.modData('Learnsets', 'frosmoth').learnset.signalbeam = ['9L1']; - this.modData('Learnsets', 'inteleon').learnset.signalbeam = ['9L1']; - this.modData('Learnsets', 'morpeko').learnset.signalbeam = ['9L1']; - this.modData('Learnsets', 'pincurchin').learnset.signalbeam = ['9L1']; - this.modData('Learnsets', 'tadbulb').learnset.signalbeam = ['9L1']; - this.modData('Learnsets', 'flittle').learnset.signalbeam = ['9L1']; - this.modData('Learnsets', 'ironbundle').learnset.signalbeam = ['9L1']; - this.modData('Learnsets', 'ironmoth').learnset.signalbeam = ['9L1']; - this.modData('Learnsets', 'wattrel').learnset.signalbeam = ['9L1']; - this.modData('Learnsets', 'miraidon').learnset.signalbeam = ['9L1']; - this.modData('Learnsets', 'munkidori').learnset.signalbeam = ['9L1']; - this.modData('Learnsets', 'pawmi').learnset.signalbeam = ['9L1']; - this.modData('Learnsets', 'rabsca').learnset.signalbeam = ['9L1']; - this.modData('Learnsets', 'sandyshocks').learnset.signalbeam = ['9L1']; - this.modData('Learnsets', 'toedscool').learnset.signalbeam = ['9L1']; - this.modData('Learnsets', 'ursalunabloodmoon').learnset.signalbeam = ['9L1']; - this.modData('Learnsets', 'umbreon').learnset.signalbeam = ['9L1']; - this.modData('Learnsets', 'nosepass').learnset.signalbeam = ['9L1']; - this.modData('Learnsets', 'corviknight').learnset.flyingpress = ['9L1']; - this.modData('Learnsets', 'flamigo').learnset.flyingpress = ['9L1']; - this.modData('Learnsets', 'tropius').learnset.flyingpress = ['9L1']; - this.modData('Learnsets', 'vespiquen').learnset.flyingpress = ['9L1']; - this.modData('Learnsets', 'decidueyehisui').learnset.flyingpress = ['9L1']; - this.modData('Learnsets', 'quaquaval').learnset.flyingpress = ['9L1']; - this.modData('Learnsets', 'heracross').learnset.flyingpress = ['9L1']; - this.modData('Learnsets', 'tsareena').learnset.flyingpress = ['9L1']; - this.modData('Learnsets', 'mienshao').learnset.flyingpress = ['9L1']; - this.modData('Learnsets', 'lucario').learnset.flyingpress = ['9L1']; - this.modData('Learnsets', 'medicham').learnset.flyingpress = ['9L1']; - this.modData('Learnsets', 'rotom').learnset.softwarecrash = ['9L1']; - this.modData('Learnsets', 'magnezone').learnset.softwarecrash = ['9L1']; - this.modData('Learnsets', 'vikavolt').learnset.softwarecrash = ['9L1']; - this.modData('Learnsets', 'venomoth').learnset.softwarecrash = ['9L1']; - this.modData('Learnsets', 'miraidon').learnset.softwarecrash = ['9L1']; - this.modData('Learnsets', 'ironbundle').learnset.softwarecrash = ['9L1']; - this.modData('Learnsets', 'ironthorns').learnset.softwarecrash = ['9L1']; - this.modData('Learnsets', 'electrode').learnset.softwarecrash = ['9L1']; - this.modData('Learnsets', 'ironmoth').learnset.softwarecrash = ['9L1']; - this.modData('Learnsets', 'eelektrik').learnset.softwarecrash = ['9L1']; - this.modData('Learnsets', 'yanmega').learnset.softwarecrash = ['9L1']; - this.modData('Learnsets', 'frosmoth').learnset.softwarecrash = ['9L1']; - this.modData('Learnsets', 'greninja').learnset.lashout = ['9L1']; - this.modData('Learnsets', 'crabrawler').learnset.lashout = ['9L1']; - this.modData('Learnsets', 'salazzle').learnset.lashout = ['9L1']; - this.modData('Learnsets', 'haxorus').learnset.lashout = ['9L1']; - this.modData('Learnsets', 'drednaw').learnset.lashout = ['9L1']; - this.modData('Learnsets', 'pineco').learnset.naturalgift = ['9L1']; - this.modData('Learnsets', 'phanpy').learnset.naturalgift = ['9L1']; - this.modData('Learnsets', 'lotad').learnset.naturalgift = ['9L1']; - this.modData('Learnsets', 'swablu').learnset.naturalgift = ['9L1']; - this.modData('Learnsets', 'tropius').learnset.naturalgift = ['9L1']; - this.modData('Learnsets', 'snorlax').learnset.naturalgift = ['9L1']; - this.modData('Learnsets', 'uxie').learnset.naturalgift = ['9L1']; - this.modData('Learnsets', 'mesprit').learnset.naturalgift = ['9L1']; - this.modData('Learnsets', 'azelf').learnset.naturalgift = ['9L1']; - this.modData('Learnsets', 'shaymin').learnset.naturalgift = ['9L1']; - this.modData('Learnsets', 'arceus').learnset.naturalgift = ['9L1']; - this.modData('Learnsets', 'fletchling').learnset.naturalgift = ['9L1']; - this.modData('Learnsets', 'happiny').learnset.naturalgift = ['9L1']; - this.modData('Learnsets', 'eevee').learnset.naturalgift = ['9L1']; - this.modData('Learnsets', 'sentret').learnset.naturalgift = ['9L1']; - this.modData('Learnsets', 'shroomish').learnset.naturalgift = ['9L1']; - this.modData('Learnsets', 'snover').learnset.naturalgift = ['9L1']; - this.modData('Learnsets', 'petilil').learnset.naturalgift = ['9L1']; - this.modData('Learnsets', 'deerling').learnset.naturalgift = ['9L1']; - this.modData('Learnsets', 'dedenne').learnset.naturalgift = ['9L1']; - this.modData('Learnsets', 'bellsprout').learnset.naturalgift = ['9L1']; - this.modData('Learnsets', 'tandemaus').learnset.naturalgift = ['9L1']; - this.modData('Learnsets', 'skwovet').learnset.naturalgift = ['9L1']; - this.modData('Learnsets', 'applin').learnset.naturalgift = ['9L1']; - this.modData('Learnsets', 'grimer').learnset.naturalgift = ['9L1']; - this.modData('Learnsets', 'gulpin').learnset.naturalgift = ['9L1']; - this.modData('Learnsets', 'tauros').learnset.naturalgift = ['9L1']; - this.modData('Learnsets', 'taurospaldeacombat').learnset.naturalgift = ['9L1']; - this.modData('Learnsets', 'taurospaldeablaze').learnset.naturalgift = ['9L1']; - this.modData('Learnsets', 'taurospaldeaaqua').learnset.naturalgift = ['9L1']; - this.modData('Learnsets', 'girafarig').learnset.naturalgift = ['9L1']; - this.modData('Learnsets', 'lechonk').learnset.naturalgift = ['9L1']; - this.modData('Learnsets', 'numel').learnset.naturalgift = ['9L1']; - this.modData('Learnsets', 'mareep').learnset.naturalgift = ['9L1']; - this.modData('Learnsets', 'phantump').learnset.naturalgift = ['9L1']; - this.modData('Learnsets', 'smoliv').learnset.naturalgift = ['9L1']; - this.modData('Learnsets', 'voltorb').learnset.naturalgift = ['9L1']; - this.modData('Learnsets', 'voltorbhisui').learnset.naturalgift = ['9L1']; - this.modData('Learnsets', 'shellos').learnset.naturalgift = ['9L1']; - this.modData('Learnsets', 'thundurus').learnset.naturalgift = ['9L1']; - this.modData('Learnsets', 'tornadus').learnset.naturalgift = ['9L1']; - this.modData('Learnsets', 'landorus').learnset.naturalgift = ['9L1']; - this.modData('Learnsets', 'enamorus').learnset.naturalgift = ['9L1']; - this.modData('Learnsets', 'turtwig').learnset.naturalgift = ['9L1']; - this.modData('Learnsets', 'gible').learnset.naturalgift = ['9L1']; - this.modData('Learnsets', 'sneasel').learnset.naturalgift = ['9L1']; - this.modData('Learnsets', 'ogerpon').learnset.naturalgift = ['9L1']; - this.modData('Learnsets', 'froakie').learnset.naturalgift = ['9L1']; - this.modData('Learnsets', 'dondozo').learnset.naturalgift = ['9L1']; - this.modData('Learnsets', 'tatsugiri').learnset.naturalgift = ['9L1']; - this.modData('Learnsets', 'bramblin').learnset.naturalgift = ['9L1']; - this.modData('Learnsets', 'shroodle').learnset.naturalgift = ['9L1']; - this.modData('Learnsets', 'bounsweet').learnset.naturalgift = ['9L1']; - this.modData('Learnsets', 'sewaddle').learnset.naturalgift = ['9L1']; - this.modData('Learnsets', 'passimian').learnset.naturalgift = ['9L1']; - this.modData('Learnsets', 'morpeko').learnset.naturalgift = ['9L1']; - this.modData('Learnsets', 'calyrex').learnset.naturalgift = ['9L1']; - this.modData('Learnsets', 'delibird').learnset.naturalgift = ['9L1']; - this.modData('Learnsets', 'squawkabilly').learnset.naturalgift = ['9L1']; - this.modData('Learnsets', 'aipom').learnset.naturalgift = ['9L1']; - this.modData('Learnsets', 'grookey').learnset.naturalgift = ['9L1']; - this.modData('Learnsets', 'zarude').learnset.naturalgift = ['9L1']; - this.modData('Learnsets', 'zarudedada').learnset.naturalgift = ['9L1']; - this.modData('Learnsets', 'azurill').learnset.naturalgift = ['9L1']; - this.modData('Learnsets', 'sunkern').learnset.naturalgift = ['9L1']; - this.modData("Learnsets", "krookodile").learnset.skullbash = ["9L1"]; - this.modData("Learnsets", "krookodile").learnset.ceaselessedge = ["9L1"]; - this.modData("Learnsets", "krookodile").learnset.falsesurrender = ["9L1"]; - this.modData("Learnsets", "krookodile").learnset.dragondance = ["9L1"]; - this.modData("Learnsets", "delphox").learnset.fairywind = ["9L1"]; - this.modData("Learnsets", "delphox").learnset.drainingkiss = ["9L1"]; - this.modData("Learnsets", "delphox").learnset.moonblast = ["9L1"]; - this.modData("Learnsets", "delphox").learnset.peekaboo = ["9L1"]; - this.modData("Learnsets", "delphox").learnset.round = ["9L1"]; - this.modData("Learnsets", "delphox").learnset.echochamber = ["9L1"]; - this.modData("Learnsets", "delphox").learnset.thunderwave = ["9L1"]; - this.modData("Learnsets", "delphox").learnset.courtchange = ["9L1"]; - this.modData("Learnsets", "rotom").learnset.defog = ["9L1"]; - this.modData("Learnsets", "rotom").learnset.painsplit = ["9L1"]; - this.modData("Learnsets", "rotom").learnset.memento = ["9L1"]; - this.modData("Learnsets", "rotom").learnset.weatherball = ["9L1"]; - this.modData("Learnsets", "rotom").learnset.dazzlinggleam = ["9L1"]; - }, -}; diff --git a/data/moves.ts b/data/moves.ts index d43d37386cde..5d77226b6b22 100644 --- a/data/moves.ts +++ b/data/moves.ts @@ -1,6 +1,6 @@ // List of flags and their descriptions can be found in sim/dex-moves.ts -export const Moves: {[moveid: string]: MoveData} = { +export const Moves: import('../sim/dex-moves').MoveDataTable = { "10000000voltthunderbolt": { num: 719, accuracy: true, @@ -26,7 +26,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Absorb", pp: 25, priority: 0, - flags: {protect: 1, mirror: 1, heal: 1}, + flags: {protect: 1, mirror: 1, heal: 1, metronome: 1}, drain: [1, 2], secondary: null, target: "normal", @@ -41,7 +41,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Accelerock", pp: 20, priority: 1, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, secondary: null, target: "normal", type: "Rock", @@ -55,7 +55,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Acid", pp: 30, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 10, boosts: { @@ -74,7 +74,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Acid Armor", pp: 20, priority: 0, - flags: {snatch: 1}, + flags: {snatch: 1, metronome: 1}, boosts: { def: 2, }, @@ -108,7 +108,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Acid Spray", pp: 20, priority: 0, - flags: {bullet: 1, protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1, bullet: 1}, secondary: { chance: 100, boosts: { @@ -134,7 +134,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Acrobatics", pp: 15, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1, distance: 1}, + flags: {contact: 1, protect: 1, mirror: 1, distance: 1, metronome: 1}, secondary: null, target: "any", type: "Flying", @@ -148,7 +148,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Acupressure", pp: 30, priority: 0, - flags: {}, + flags: {metronome: 1}, onHit(target) { const stats: BoostID[] = []; let stat: BoostID; @@ -180,7 +180,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Aerial Ace", pp: 20, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1, distance: 1, slicing: 1}, + flags: {contact: 1, protect: 1, mirror: 1, distance: 1, metronome: 1, slicing: 1}, secondary: null, target: "any", type: "Flying", @@ -194,7 +194,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Aeroblast", pp: 5, priority: 0, - flags: {protect: 1, mirror: 1, distance: 1, wind: 1}, + flags: {protect: 1, mirror: 1, distance: 1, metronome: 1, wind: 1}, critRatio: 2, secondary: null, target: "any", @@ -234,7 +234,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Agility", pp: 30, priority: 0, - flags: {snatch: 1}, + flags: {snatch: 1, metronome: 1}, boosts: { spe: 2, }, @@ -252,7 +252,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Air Cutter", pp: 25, priority: 0, - flags: {protect: 1, mirror: 1, slicing: 1, wind: 1}, + flags: {protect: 1, mirror: 1, metronome: 1, slicing: 1, wind: 1}, critRatio: 2, secondary: null, target: "allAdjacentFoes", @@ -267,7 +267,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Air Slash", pp: 15, priority: 0, - flags: {protect: 1, mirror: 1, distance: 1, slicing: 1}, + flags: {protect: 1, mirror: 1, distance: 1, metronome: 1, slicing: 1}, secondary: { chance: 30, volatileStatus: 'flinch', @@ -300,7 +300,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Alluring Voice", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1, sound: 1, bypasssub: 1}, + flags: {protect: 1, mirror: 1, sound: 1, bypasssub: 1, metronome: 1}, secondary: { chance: 100, onHit(target, source, move) { @@ -320,22 +320,50 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Ally Switch", pp: 15, priority: 2, - flags: {}, - stallingMove: true, + flags: {metronome: 1}, onPrepareHit(pokemon) { - return !!this.queue.willAct() && this.runEvent('StallMove', pokemon); - }, - onTryHit(source) { - if (source.side.active.length === 1) return false; - if (source.side.active.length === 3 && source.position === 1) return false; + return pokemon.addVolatile('allyswitch'); }, onHit(pokemon) { - pokemon.addVolatile('stall'); + let success = true; + // Fail in formats where you don't control allies + if (this.format.gameType !== 'doubles' && this.format.gameType !== 'triples') success = false; + + // Fail in triples if the Pokemon is in the middle + if (pokemon.side.active.length === 3 && pokemon.position === 1) success = false; + const newPosition = (pokemon.position === 0 ? pokemon.side.active.length - 1 : 0); - if (!pokemon.side.active[newPosition]) return false; - if (pokemon.side.active[newPosition].fainted) return false; + if (!pokemon.side.active[newPosition]) success = false; + if (pokemon.side.active[newPosition].fainted) success = false; + if (!success) { + this.add('-fail', pokemon, 'move: Ally Switch'); + this.attrLastMove('[still]'); + return this.NOT_FAIL; + } this.swapPosition(pokemon, newPosition, '[from] move: Ally Switch'); }, + condition: { + duration: 2, + counterMax: 729, + onStart() { + this.effectState.counter = 3; + }, + onRestart(pokemon) { + // this.effectState.counter should never be undefined here. + // However, just in case, use 1 if it is undefined. + const counter = this.effectState.counter || 1; + this.debug("Ally Switch success chance: " + Math.round(100 / counter) + "%"); + const success = this.randomChance(1, counter); + if (!success) { + delete pokemon.volatiles['allyswitch']; + return false; + } + if (this.effectState.counter < (this.effect as Condition).counterMax!) { + this.effectState.counter *= 3; + } + this.effectState.duration = 2; + }, + }, secondary: null, target: "self", type: "Psychic", @@ -350,7 +378,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Amnesia", pp: 20, priority: 0, - flags: {snatch: 1}, + flags: {snatch: 1, metronome: 1}, boosts: { spd: 2, }, @@ -369,7 +397,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Anchor Shot", pp: 20, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 100, onHit(target, source, move) { @@ -388,7 +416,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Ancient Power", pp: 5, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 10, self: { @@ -431,7 +459,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Aqua Cutter", pp: 20, priority: 0, - flags: {protect: 1, mirror: 1, slicing: 1}, + flags: {protect: 1, mirror: 1, metronome: 1, slicing: 1}, critRatio: 2, secondary: null, target: "normal", @@ -446,7 +474,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Aqua Jet", pp: 20, priority: 1, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, secondary: null, target: "normal", type: "Water", @@ -460,7 +488,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Aqua Ring", pp: 20, priority: 0, - flags: {snatch: 1}, + flags: {snatch: 1, metronome: 1}, volatileStatus: 'aquaring', condition: { onStart(pokemon) { @@ -485,7 +513,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Aqua Step", pp: 10, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1, dance: 1}, + flags: {contact: 1, protect: 1, mirror: 1, dance: 1, metronome: 1}, secondary: { chance: 100, self: { @@ -506,7 +534,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Aqua Tail", pp: 10, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, secondary: null, target: "normal", type: "Water", @@ -539,7 +567,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Arm Thrust", pp: 20, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, multihit: [2, 5], secondary: null, target: "normal", @@ -555,7 +583,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Aromatherapy", pp: 5, priority: 0, - flags: {snatch: 1, distance: 1}, + flags: {snatch: 1, distance: 1, metronome: 1}, onHit(target, source, move) { this.add('-activate', source, 'move: Aromatherapy'); let success = false; @@ -582,7 +610,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Aromatic Mist", pp: 20, priority: 0, - flags: {bypasssub: 1}, + flags: {bypasssub: 1, metronome: 1}, boosts: { spd: 1, }, @@ -601,7 +629,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Assist", pp: 20, priority: 0, - flags: {failencore: 1, nosleeptalk: 1, noassist: 1, failcopycat: 1, failinstruct: 1, failmimic: 1}, + flags: {failencore: 1, nosleeptalk: 1, noassist: 1, failcopycat: 1, failmimic: 1, failinstruct: 1}, onHit(target) { const moves = []; for (const pokemon of target.side.pokemon) { @@ -622,6 +650,7 @@ export const Moves: {[moveid: string]: MoveData} = { } this.actions.useMove(randomMove, target); }, + callsMove: true, secondary: null, target: "self", type: "Normal", @@ -642,7 +671,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Assurance", pp: 10, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, secondary: null, target: "normal", type: "Dark", @@ -656,7 +685,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Astonish", pp: 15, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 30, volatileStatus: 'flinch', @@ -686,7 +715,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Attack Order", pp: 15, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, critRatio: 2, secondary: null, target: "normal", @@ -701,7 +730,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Attract", pp: 15, priority: 0, - flags: {protect: 1, reflectable: 1, mirror: 1, bypasssub: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, bypasssub: 1, metronome: 1}, volatileStatus: 'attract', condition: { noCopy: true, // doesn't get copied by Baton Pass @@ -758,7 +787,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Aura Sphere", pp: 20, priority: 0, - flags: {bullet: 1, protect: 1, pulse: 1, mirror: 1, distance: 1}, + flags: {protect: 1, mirror: 1, distance: 1, metronome: 1, bullet: 1, pulse: 1}, secondary: null, target: "any", type: "Fighting", @@ -808,7 +837,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Aurora Beam", pp: 20, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 10, boosts: { @@ -827,7 +856,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Aurora Veil", pp: 20, priority: 0, - flags: {snatch: 1}, + flags: {snatch: 1, metronome: 1}, sideCondition: 'auroraveil', onTry() { return this.field.isWeather(['hail', 'snow']); @@ -877,7 +906,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Autotomize", pp: 15, priority: 0, - flags: {snatch: 1}, + flags: {snatch: 1, metronome: 1}, onTryHit(pokemon) { const hasContrary = pokemon.hasAbility('contrary'); if ((!hasContrary && pokemon.boosts.spe === 6) || (hasContrary && pokemon.boosts.spe === -6)) { @@ -917,7 +946,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Avalanche", pp: 10, priority: -4, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, secondary: null, target: "normal", type: "Ice", @@ -931,7 +960,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Axe Kick", pp: 10, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, hasCrashDamage: true, onMoveFail(target, source, move) { this.damage(source.baseMaxhp / 2, source, source, this.dex.conditions.get('High Jump Kick')); @@ -951,7 +980,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Baby-Doll Eyes", pp: 30, priority: 1, - flags: {protect: 1, reflectable: 1, mirror: 1, allyanim: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, allyanim: 1, metronome: 1}, boosts: { atk: -1, }, @@ -1045,7 +1074,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Barb Barrage", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, onBasePower(basePower, pokemon, target) { if (target.status === 'psn' || target.status === 'tox') { return this.chainModify(2); @@ -1067,7 +1096,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Barrage", pp: 20, priority: 0, - flags: {bullet: 1, protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1, bullet: 1}, multihit: [2, 5], secondary: null, target: "normal", @@ -1083,7 +1112,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Barrier", pp: 20, priority: 0, - flags: {snatch: 1}, + flags: {snatch: 1, metronome: 1}, boosts: { def: 2, }, @@ -1101,7 +1130,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Baton Pass", pp: 40, priority: 0, - flags: {}, + flags: {metronome: 1}, onHit(target) { if (!this.canSwitch(target.side) || target.volatiles['commanded']) { this.attrLastMove('[still]'); @@ -1129,7 +1158,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Beak Blast", pp: 15, priority: -3, - flags: {bullet: 1, protect: 1, noassist: 1, failmefirst: 1, nosleeptalk: 1, failcopycat: 1, failinstruct: 1}, + flags: {protect: 1, failmefirst: 1, nosleeptalk: 1, noassist: 1, failcopycat: 1, failinstruct: 1, bullet: 1}, priorityChargeCallback(pokemon) { pokemon.addVolatile('beakblast'); }, @@ -1167,7 +1196,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Beat Up", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1, allyanim: 1}, + flags: {protect: 1, mirror: 1, allyanim: 1, metronome: 1}, onModifyMove(move, pokemon) { move.allies = pokemon.side.pokemon.filter(ally => ally === pokemon || !ally.fainted && !ally.status); move.multihit = move.allies.length; @@ -1198,7 +1227,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Behemoth Blade", pp: 5, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1, slicing: 1, failcopycat: 1, failmimic: 1}, + flags: {contact: 1, protect: 1, mirror: 1, failcopycat: 1, failmimic: 1, slicing: 1}, secondary: null, target: "normal", type: "Steel", @@ -1211,7 +1240,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Belch", pp: 10, priority: 0, - flags: {protect: 1, failmefirst: 1, nosleeptalk: 1, noassist: 1, failcopycat: 1, failinstruct: 1, failmimic: 1}, + flags: {protect: 1, failmefirst: 1, nosleeptalk: 1, noassist: 1, failcopycat: 1, failmimic: 1, failinstruct: 1}, onDisableMove(pokemon) { if (!pokemon.ateBerry) pokemon.disableMove('belch'); }, @@ -1228,7 +1257,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Belly Drum", pp: 10, priority: 0, - flags: {snatch: 1}, + flags: {snatch: 1, metronome: 1}, onHit(target) { if (target.hp <= target.maxhp / 2 || target.boosts.atk >= 6 || target.maxhp === 1) { // Shedinja clause return false; @@ -1279,7 +1308,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Bide", pp: 10, priority: 1, - flags: {contact: 1, protect: 1, nosleeptalk: 1, failinstruct: 1}, + flags: {contact: 1, protect: 1, metronome: 1, nosleeptalk: 1, failinstruct: 1}, volatileStatus: 'bide', ignoreImmunity: true, beforeMoveCallback(pokemon) { @@ -1352,7 +1381,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Bind", pp: 20, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, volatileStatus: 'partiallytrapped', secondary: null, target: "normal", @@ -1367,7 +1396,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Bite", pp: 25, priority: 0, - flags: {bite: 1, contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1, bite: 1}, secondary: { chance: 30, volatileStatus: 'flinch', @@ -1384,7 +1413,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Bitter Blade", pp: 10, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1, heal: 1, slicing: 1}, + flags: {contact: 1, protect: 1, mirror: 1, heal: 1, metronome: 1, slicing: 1}, drain: [1, 2], secondary: null, target: "normal", @@ -1398,7 +1427,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Bitter Malice", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 100, boosts: { @@ -1432,7 +1461,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Blast Burn", pp: 5, priority: 0, - flags: {recharge: 1, protect: 1, mirror: 1}, + flags: {recharge: 1, protect: 1, mirror: 1, metronome: 1}, self: { volatileStatus: 'mustrecharge', }, @@ -1449,7 +1478,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Blaze Kick", pp: 10, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, critRatio: 2, secondary: { chance: 10, @@ -1469,9 +1498,9 @@ export const Moves: {[moveid: string]: MoveData} = { pp: 10, priority: 0, flags: { - protect: 1, failencore: 1, failmefirst: 1, nosleeptalk: 1, noassist: 1, failcopycat: 1, failinstruct: 1, failmimic: 1, + protect: 1, failencore: 1, failmefirst: 1, nosleeptalk: 1, noassist: 1, + failcopycat: 1, failmimic: 1, failinstruct: 1, nosketch: 1, }, - noSketch: true, secondary: { chance: 30, status: 'brn', @@ -1487,7 +1516,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Bleakwind Storm", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1, wind: 1}, + flags: {protect: 1, mirror: 1, metronome: 1, wind: 1}, onModifyMove(move, pokemon, target) { if (target && ['raindance', 'primordialsea'].includes(target.effectiveWeather())) { move.accuracy = true; @@ -1510,7 +1539,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Blizzard", pp: 5, priority: 0, - flags: {protect: 1, mirror: 1, wind: 1}, + flags: {protect: 1, mirror: 1, metronome: 1, wind: 1}, onModifyMove(move) { if (this.field.isWeather(['hail', 'snow'])) move.accuracy = true; }, @@ -1530,7 +1559,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Block", pp: 5, priority: 0, - flags: {reflectable: 1, mirror: 1}, + flags: {reflectable: 1, mirror: 1, metronome: 1}, onHit(target, source, move) { return target.addVolatile('trapped', source, move, 'trapper'); }, @@ -1548,7 +1577,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Blood Moon", pp: 5, priority: 0, - flags: {protect: 1, mirror: 1, cantusetwice: 1}, + flags: {protect: 1, mirror: 1, metronome: 1, cantusetwice: 1}, secondary: null, target: "normal", type: "Normal", @@ -1577,7 +1606,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Blue Flare", pp: 5, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 20, status: 'brn', @@ -1608,7 +1637,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Body Slam", pp: 15, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1, nonsky: 1}, + flags: {contact: 1, protect: 1, mirror: 1, nonsky: 1, metronome: 1}, secondary: { chance: 30, status: 'par', @@ -1634,7 +1663,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Bolt Beak", pp: 10, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, secondary: null, target: "normal", type: "Electric", @@ -1647,7 +1676,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Bolt Strike", pp: 5, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 20, status: 'par', @@ -1665,7 +1694,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Bone Club", pp: 20, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 10, volatileStatus: 'flinch', @@ -1683,7 +1712,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Bonemerang", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, multihit: 2, secondary: null, target: "normal", @@ -1699,7 +1728,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Bone Rush", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, multihit: [2, 5], secondary: null, target: "normal", @@ -1716,7 +1745,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Boomburst", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1, sound: 1, bypasssub: 1}, + flags: {protect: 1, mirror: 1, sound: 1, bypasssub: 1, metronome: 1}, secondary: null, target: "allAdjacent", type: "Normal", @@ -1731,7 +1760,8 @@ export const Moves: {[moveid: string]: MoveData} = { pp: 5, priority: 0, flags: { - contact: 1, charge: 1, protect: 1, mirror: 1, gravity: 1, distance: 1, nosleeptalk: 1, noassist: 1, failinstruct: 1, + contact: 1, charge: 1, protect: 1, mirror: 1, gravity: 1, distance: 1, + metronome: 1, nosleeptalk: 1, noassist: 1, failinstruct: 1, }, onTryMove(attacker, defender, move) { if (attacker.removeVolatile(move.id)) { @@ -1803,7 +1833,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Brave Bird", pp: 15, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1, distance: 1}, + flags: {contact: 1, protect: 1, mirror: 1, distance: 1, metronome: 1}, recoil: [33, 100], secondary: null, target: "any", @@ -1852,7 +1882,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Brick Break", pp: 15, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, onTryHit(pokemon) { // will shatter screens through sub, before you hit pokemon.side.removeSideCondition('reflect'); @@ -1872,7 +1902,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Brine", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, onBasePower(basePower, pokemon, target) { if (target.hp * 2 <= target.maxhp) { return this.chainModify(2); @@ -1891,7 +1921,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Brutal Swing", pp: 20, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, secondary: null, target: "allAdjacent", type: "Dark", @@ -1906,7 +1936,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Bubble", pp: 30, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 10, boosts: { @@ -1925,7 +1955,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Bubble Beam", pp: 20, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 10, boosts: { @@ -1944,7 +1974,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Bug Bite", pp: 20, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, onHit(target, source) { const item = target.getItem(); if (source.hp && item.isBerry && target.takeItem(source)) { @@ -1969,7 +1999,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Bug Buzz", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1, sound: 1, bypasssub: 1}, + flags: {protect: 1, mirror: 1, sound: 1, bypasssub: 1, metronome: 1}, secondary: { chance: 10, boosts: { @@ -1988,7 +2018,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Bulk Up", pp: 20, priority: 0, - flags: {snatch: 1}, + flags: {snatch: 1, metronome: 1}, boosts: { atk: 1, def: 1, @@ -2007,7 +2037,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Bulldoze", pp: 20, priority: 0, - flags: {protect: 1, mirror: 1, nonsky: 1}, + flags: {protect: 1, mirror: 1, nonsky: 1, metronome: 1}, secondary: { chance: 100, boosts: { @@ -2026,7 +2056,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Bullet Punch", pp: 30, priority: 1, - flags: {contact: 1, protect: 1, mirror: 1, punch: 1}, + flags: {contact: 1, protect: 1, mirror: 1, punch: 1, metronome: 1}, secondary: null, target: "normal", type: "Steel", @@ -2040,7 +2070,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Bullet Seed", pp: 30, priority: 0, - flags: {bullet: 1, protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1, bullet: 1}, multihit: [2, 5], secondary: null, target: "normal", @@ -2057,7 +2087,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Burning Bulwark", pp: 10, priority: 4, - flags: {noassist: 1, failcopycat: 1}, + flags: {metronome: 1, noassist: 1, failcopycat: 1}, stallingMove: true, volatileStatus: 'burningbulwark', onPrepareHit(pokemon) { @@ -2113,7 +2143,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Burning Jealousy", pp: 5, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 100, onHit(target, source, move) { @@ -2135,7 +2165,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Burn Up", pp: 5, priority: 0, - flags: {protect: 1, mirror: 1, defrost: 1}, + flags: {protect: 1, mirror: 1, defrost: 1, metronome: 1}, onTryMove(pokemon, target, move) { if (pokemon.hasType('Fire')) return; this.add('-fail', pokemon, 'move: Burn Up'); @@ -2179,7 +2209,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Calm Mind", pp: 20, priority: 0, - flags: {snatch: 1}, + flags: {snatch: 1, metronome: 1}, boosts: { spa: 1, spd: 1, @@ -2199,7 +2229,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Camouflage", pp: 20, priority: 0, - flags: {snatch: 1}, + flags: {snatch: 1, metronome: 1}, onHit(target) { let newType = 'Normal'; if (this.field.isTerrain('electricterrain')) { @@ -2230,7 +2260,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Captivate", pp: 20, priority: 0, - flags: {protect: 1, reflectable: 1, mirror: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, metronome: 1}, onTryImmunity(pokemon, source) { return (pokemon.gender === 'M' && source.gender === 'F') || (pokemon.gender === 'F' && source.gender === 'M'); }, @@ -2267,7 +2297,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Ceaseless Edge", pp: 15, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1, slicing: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1, slicing: 1}, onAfterHit(target, source, move) { if (!move.hasSheerForce && source.hp) { for (const side of source.side.foeSidesWithConditions()) { @@ -2294,7 +2324,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Celebrate", pp: 40, priority: 0, - flags: {nosleeptalk: 1, noassist: 1, failcopycat: 1, failinstruct: 1, failmimic: 1}, + flags: {nosleeptalk: 1, noassist: 1, failcopycat: 1, failmimic: 1, failinstruct: 1}, onTryHit(target, source) { this.add('-activate', target, 'move: Celebrate'); }, @@ -2312,7 +2342,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Charge", pp: 20, priority: 0, - flags: {snatch: 1}, + flags: {snatch: 1, metronome: 1}, volatileStatus: 'charge', condition: { onStart(pokemon, source, effect) { @@ -2367,7 +2397,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Charge Beam", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 70, self: { @@ -2388,7 +2418,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Charm", pp: 20, priority: 0, - flags: {protect: 1, reflectable: 1, mirror: 1, allyanim: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, allyanim: 1, metronome: 1}, boosts: { atk: -2, }, @@ -2408,10 +2438,9 @@ export const Moves: {[moveid: string]: MoveData} = { pp: 20, priority: 0, flags: { - protect: 1, mirror: 1, sound: 1, distance: 1, bypasssub: 1, nosleeptalk: 1, noassist: 1, - failcopycat: 1, failinstruct: 1, failmimic: 1, + protect: 1, mirror: 1, sound: 1, distance: 1, bypasssub: 1, + nosleeptalk: 1, noassist: 1, failcopycat: 1, failmimic: 1, failinstruct: 1, }, - noSketch: true, secondary: { chance: 100, volatileStatus: 'confusion', @@ -2465,7 +2494,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Chip Away", pp: 20, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, ignoreDefensive: true, ignoreEvasion: true, secondary: null, @@ -2481,7 +2510,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Chloroblast", pp: 5, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, // Recoil implemented in battle-actions.ts secondary: null, target: "normal", @@ -2495,7 +2524,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Circle Throw", pp: 10, priority: -6, - flags: {contact: 1, protect: 1, mirror: 1, noassist: 1, failcopycat: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1, noassist: 1, failcopycat: 1}, forceSwitch: true, target: "normal", type: "Fighting", @@ -2510,7 +2539,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Clamp", pp: 15, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, volatileStatus: 'partiallytrapped', secondary: null, target: "normal", @@ -2525,7 +2554,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Clanging Scales", pp: 5, priority: 0, - flags: {protect: 1, mirror: 1, sound: 1, bypasssub: 1}, + flags: {protect: 1, mirror: 1, sound: 1, bypasssub: 1, metronome: 1}, selfBoost: { boosts: { def: -1, @@ -2601,7 +2630,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Clear Smog", pp: 15, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, onHit(target) { target.clearBoosts(); this.add('-clearboost', target); @@ -2619,7 +2648,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Close Combat", pp: 5, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, self: { boosts: { def: -1, @@ -2639,7 +2668,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Coaching", pp: 10, priority: 0, - flags: {bypasssub: 1, allyanim: 1}, + flags: {bypasssub: 1, allyanim: 1, metronome: 1}, secondary: null, boosts: { atk: 1, @@ -2656,7 +2685,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Coil", pp: 20, priority: 0, - flags: {snatch: 1}, + flags: {snatch: 1, metronome: 1}, boosts: { atk: 1, def: 1, @@ -2699,9 +2728,9 @@ export const Moves: {[moveid: string]: MoveData} = { pp: 10, priority: 0, flags: { - protect: 1, failencore: 1, failmefirst: 1, nosleeptalk: 1, noassist: 1, failcopycat: 1, failinstruct: 1, failmimic: 1, + protect: 1, failencore: 1, failmefirst: 1, nosleeptalk: 1, noassist: 1, + failcopycat: 1, failmimic: 1, failinstruct: 1, nosketch: 1, }, - noSketch: true, secondary: { chance: 30, status: 'par', @@ -2718,7 +2747,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Comet Punch", pp: 15, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1, punch: 1}, + flags: {contact: 1, protect: 1, mirror: 1, punch: 1, metronome: 1}, multihit: [2, 5], secondary: null, target: "normal", @@ -2765,7 +2794,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Confide", pp: 20, priority: 0, - flags: {reflectable: 1, mirror: 1, sound: 1, bypasssub: 1}, + flags: {reflectable: 1, mirror: 1, sound: 1, bypasssub: 1, metronome: 1}, boosts: { spa: -1, }, @@ -2783,7 +2812,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Confuse Ray", pp: 10, priority: 0, - flags: {protect: 1, reflectable: 1, mirror: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, metronome: 1}, volatileStatus: 'confusion', secondary: null, target: "normal", @@ -2799,7 +2828,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Confusion", pp: 25, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 10, volatileStatus: 'confusion', @@ -2817,7 +2846,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Constrict", pp: 35, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 10, boosts: { @@ -2852,7 +2881,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Conversion", pp: 30, priority: 0, - flags: {snatch: 1}, + flags: {snatch: 1, metronome: 1}, onHit(target) { const type = this.dex.moves.get(target.moveSlots[0].id).type; if (target.hasType(type) || !target.setType(type)) return false; @@ -2872,18 +2901,18 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Conversion 2", pp: 30, priority: 0, - flags: {bypasssub: 1}, + flags: {bypasssub: 1, metronome: 1}, onHit(target, source) { if (!target.lastMoveUsed) { return false; } const possibleTypes = []; const attackType = target.lastMoveUsed.type; - for (const type of this.dex.types.names()) { - if (source.hasType(type)) continue; - const typeCheck = this.dex.types.get(type).damageTaken[attackType]; + for (const typeName of this.dex.types.names()) { + if (source.hasType(typeName)) continue; + const typeCheck = this.dex.types.get(typeName).damageTaken[attackType]; if (typeCheck === 2 || typeCheck === 3) { - possibleTypes.push(type); + possibleTypes.push(typeName); } } if (!possibleTypes.length) { @@ -2908,7 +2937,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Copycat", pp: 20, priority: 0, - flags: {failencore: 1, nosleeptalk: 1, noassist: 1, failcopycat: 1, failinstruct: 1, failmimic: 1}, + flags: {failencore: 1, nosleeptalk: 1, noassist: 1, failcopycat: 1, failmimic: 1, failinstruct: 1}, onHit(pokemon) { let move: Move | ActiveMove | null = this.lastMove; if (!move) return; @@ -2919,6 +2948,7 @@ export const Moves: {[moveid: string]: MoveData} = { } this.actions.useMove(move.id, pokemon); }, + callsMove: true, secondary: null, target: "self", type: "Normal", @@ -2934,14 +2964,14 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Core Enforcer", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, onHit(target) { - if (target.getAbility().isPermanent) return; + if (target.getAbility().flags['cantsuppress']) return; if (target.newlySwitched || this.queue.willMove(target)) return; target.addVolatile('gastroacid'); }, onAfterSubDamage(damage, target) { - if (target.getAbility().isPermanent) return; + if (target.getAbility().flags['cantsuppress']) return; if (target.newlySwitched || this.queue.willMove(target)) return; target.addVolatile('gastroacid'); }, @@ -2976,7 +3006,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Corrosive Gas", pp: 40, priority: 0, - flags: {protect: 1, reflectable: 1, mirror: 1, allyanim: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, allyanim: 1, metronome: 1}, onHit(target, source) { const item = target.takeItem(source); if (item) { @@ -2997,7 +3027,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Cosmic Power", pp: 20, priority: 0, - flags: {snatch: 1}, + flags: {snatch: 1, metronome: 1}, boosts: { def: 1, spd: 1, @@ -3016,7 +3046,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Cotton Guard", pp: 10, priority: 0, - flags: {snatch: 1}, + flags: {snatch: 1, metronome: 1}, boosts: { def: 3, }, @@ -3034,7 +3064,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Cotton Spore", pp: 40, priority: 0, - flags: {powder: 1, protect: 1, reflectable: 1, mirror: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, metronome: 1, powder: 1}, boosts: { spe: -2, }, @@ -3098,10 +3128,10 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Court Change", pp: 10, priority: 0, - flags: {mirror: 1}, + flags: {mirror: 1, metronome: 1}, onHitField(target, source) { const sideConditions = [ - 'mist', 'lightscreen', 'reflect', 'spikes', 'safeguard', 'tailwind', 'toxicspikes', 'stealthrock', 'waterpledge', 'firepledge', 'grasspledge', 'stickyweb', 'auroraveil', 'gmaxsteelsurge', 'gmaxcannonade', 'gmaxvinelash', 'gmaxwildfire', + 'mist', 'lightscreen', 'reflect', 'spikes', 'safeguard', 'tailwind', 'toxicspikes', 'stealthrock', 'waterpledge', 'firepledge', 'grasspledge', 'stickyweb', 'auroraveil', 'luckychant', 'gmaxsteelsurge', 'gmaxcannonade', 'gmaxvinelash', 'gmaxwildfire', 'gmaxvolcalith', ]; let success = false; if (this.gameType === "freeforall") { @@ -3201,7 +3231,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Crabhammer", pp: 10, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, critRatio: 2, secondary: null, target: "normal", @@ -3248,7 +3278,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Cross Chop", pp: 5, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, critRatio: 2, secondary: null, target: "normal", @@ -3263,7 +3293,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Cross Poison", pp: 20, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1, slicing: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1, slicing: 1}, secondary: { chance: 10, status: 'psn', @@ -3281,7 +3311,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Crunch", pp: 15, priority: 0, - flags: {bite: 1, contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1, bite: 1}, secondary: { chance: 20, boosts: { @@ -3300,7 +3330,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Crush Claw", pp: 10, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 50, boosts: { @@ -3326,7 +3356,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Crush Grip", pp: 5, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, secondary: null, target: "normal", type: "Normal", @@ -3342,7 +3372,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Curse", pp: 10, priority: 0, - flags: {bypasssub: 1}, + flags: {bypasssub: 1, metronome: 1}, volatileStatus: 'curse', onModifyMove(move, source, target) { if (!source.hasType('Ghost')) { @@ -3388,7 +3418,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Cut", pp: 30, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1, slicing: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1, slicing: 1}, secondary: null, target: "normal", type: "Normal", @@ -3402,7 +3432,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Darkest Lariat", pp: 10, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, ignoreEvasion: true, ignoreDefensive: true, secondary: null, @@ -3418,7 +3448,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Dark Pulse", pp: 15, priority: 0, - flags: {protect: 1, pulse: 1, mirror: 1, distance: 1}, + flags: {protect: 1, mirror: 1, distance: 1, metronome: 1, pulse: 1}, secondary: { chance: 20, volatileStatus: 'flinch', @@ -3435,7 +3465,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Dark Void", pp: 10, priority: 0, - flags: {protect: 1, reflectable: 1, mirror: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, metronome: 1, nosketch: 1}, status: 'slp', onTry(source, target, move) { if (source.species.name === 'Darkrai' || move.hasBounced) { @@ -3445,7 +3475,6 @@ export const Moves: {[moveid: string]: MoveData} = { this.hint("Only a Pokemon whose form is Darkrai can use this move."); return null; }, - noSketch: true, secondary: null, target: "allAdjacentFoes", type: "Dark", @@ -3460,7 +3489,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Dazzling Gleam", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: null, target: "allAdjacentFoes", type: "Fairy", @@ -3491,7 +3520,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Defend Order", pp: 10, priority: 0, - flags: {snatch: 1}, + flags: {snatch: 1, metronome: 1}, boosts: { def: 1, spd: 1, @@ -3510,7 +3539,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Defense Curl", pp: 40, priority: 0, - flags: {snatch: 1}, + flags: {snatch: 1, metronome: 1}, boosts: { def: 1, }, @@ -3533,7 +3562,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Defog", pp: 15, priority: 0, - flags: {protect: 1, reflectable: 1, mirror: 1, bypasssub: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, bypasssub: 1, metronome: 1}, onHit(target, source, move) { let success = false; if (!target.volatiles['substitute'] || move.infiltrates) success = !!this.boost({evasion: -1}); @@ -3678,7 +3707,10 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Dig", pp: 10, priority: 0, - flags: {contact: 1, charge: 1, protect: 1, mirror: 1, nonsky: 1, nosleeptalk: 1, noassist: 1, failinstruct: 1}, + flags: { + contact: 1, charge: 1, protect: 1, mirror: 1, + nonsky: 1, metronome: 1, nosleeptalk: 1, noassist: 1, failinstruct: 1, + }, onTryMove(attacker, defender, move) { if (attacker.removeVolatile(move.id)) { return; @@ -3720,7 +3752,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Disable", pp: 20, priority: 0, - flags: {protect: 1, reflectable: 1, mirror: 1, bypasssub: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, bypasssub: 1, metronome: 1}, volatileStatus: 'disable', onTryHit(target) { if (!target.lastMove || target.lastMove.isZ || target.lastMove.isMax || target.lastMove.id === 'struggle') { @@ -3751,7 +3783,7 @@ export const Moves: {[moveid: string]: MoveData} = { } } if (effect.effectType === 'Ability') { - this.add('-start', pokemon, 'Disable', pokemon.lastMove.name, '[from] ability: Cursed Body', '[of] ' + source); + this.add('-start', pokemon, 'Disable', pokemon.lastMove.name, '[from] ability: ' + effect.name, '[of] ' + source); } else { this.add('-start', pokemon, 'Disable', pokemon.lastMove.name); } @@ -3790,7 +3822,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Disarming Voice", pp: 15, priority: 0, - flags: {protect: 1, mirror: 1, sound: 1, bypasssub: 1}, + flags: {protect: 1, mirror: 1, sound: 1, bypasssub: 1, metronome: 1}, secondary: null, target: "allAdjacentFoes", type: "Fairy", @@ -3804,7 +3836,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Discharge", pp: 15, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 30, status: 'par', @@ -3821,7 +3853,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Dire Claw", pp: 15, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 50, onHit(target, source) { @@ -3847,7 +3879,8 @@ export const Moves: {[moveid: string]: MoveData} = { pp: 10, priority: 0, flags: { - contact: 1, charge: 1, protect: 1, mirror: 1, nonsky: 1, allyanim: 1, nosleeptalk: 1, noassist: 1, failinstruct: 1, + contact: 1, charge: 1, protect: 1, mirror: 1, + nonsky: 1, allyanim: 1, metronome: 1, nosleeptalk: 1, noassist: 1, failinstruct: 1, }, onTryMove(attacker, defender, move) { if (attacker.removeVolatile(move.id)) { @@ -3895,7 +3928,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Dizzy Punch", pp: 10, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1, punch: 1}, + flags: {contact: 1, protect: 1, mirror: 1, punch: 1, metronome: 1}, secondary: { chance: 20, volatileStatus: 'confusion', @@ -3915,14 +3948,16 @@ export const Moves: {[moveid: string]: MoveData} = { flags: {}, onHit(target, source, move) { let success: boolean | null = false; - for (const pokemon of source.alliesAndSelf()) { - if (pokemon.ability === target.ability) continue; - const oldAbility = pokemon.setAbility(target.ability); - if (oldAbility) { - this.add('-ability', pokemon, target.getAbility().name, '[from] move: Doodle'); - success = true; - } else if (!success && oldAbility === null) { - success = null; + if (!target.getAbility().flags['failroleplay']) { + for (const pokemon of source.alliesAndSelf()) { + if (pokemon.ability === target.ability || pokemon.getAbility().flags['cantsuppress']) continue; + const oldAbility = pokemon.setAbility(target.ability); + if (oldAbility) { + this.add('-ability', pokemon, target.getAbility().name, '[from] move: Doodle'); + success = true; + } else if (!success && oldAbility === null) { + success = null; + } } } if (!success) { @@ -3945,7 +3980,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Doom Desire", pp: 5, priority: 0, - flags: {futuremove: 1}, + flags: {metronome: 1, futuremove: 1}, onTry(source, target) { if (!target.side.addSlotCondition(target, 'futuremove')) return false; Object.assign(target.side.slotConditions[target.position]['futuremove'], { @@ -3958,7 +3993,7 @@ export const Moves: {[moveid: string]: MoveData} = { basePower: 140, category: "Special", priority: 0, - flags: {futuremove: 1}, + flags: {metronome: 1, futuremove: 1}, effectType: 'Move', type: 'Steel', }, @@ -3979,7 +4014,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Double-Edge", pp: 15, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, recoil: [33, 100], secondary: null, target: "normal", @@ -3994,7 +4029,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Double Hit", pp: 10, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, multihit: 2, secondary: null, target: "normal", @@ -4032,7 +4067,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Double Kick", pp: 30, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, multihit: 2, secondary: null, target: "normal", @@ -4075,7 +4110,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Double Slap", pp: 10, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, multihit: [2, 5], secondary: null, target: "normal", @@ -4090,7 +4125,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Double Team", pp: 15, priority: 0, - flags: {snatch: 1}, + flags: {snatch: 1, metronome: 1}, boosts: { evasion: 1, }, @@ -4108,7 +4143,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Draco Meteor", pp: 5, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, self: { boosts: { spa: -2, @@ -4146,7 +4181,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Dragon Breath", pp: 20, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 30, status: 'par', @@ -4163,7 +4198,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Dragon Cheer", pp: 15, priority: 0, - flags: {bypasssub: 1, allyanim: 1}, + flags: {bypasssub: 1, allyanim: 1, metronome: 1}, volatileStatus: 'dragoncheer', condition: { onStart(target, source, effect) { @@ -4195,7 +4230,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Dragon Claw", pp: 15, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, secondary: null, target: "normal", type: "Dragon", @@ -4209,7 +4244,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Dragon Dance", pp: 20, priority: 0, - flags: {snatch: 1, dance: 1}, + flags: {snatch: 1, dance: 1, metronome: 1}, boosts: { atk: 1, spe: 1, @@ -4228,7 +4263,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Dragon Darts", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1, noparentalbond: 1}, + flags: {protect: 1, mirror: 1, metronome: 1, noparentalbond: 1}, multihit: 2, smartTarget: true, secondary: null, @@ -4262,7 +4297,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Dragon Hammer", pp: 15, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, secondary: null, target: "normal", type: "Dragon", @@ -4276,7 +4311,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Dragon Pulse", pp: 10, priority: 0, - flags: {protect: 1, pulse: 1, mirror: 1, distance: 1}, + flags: {protect: 1, mirror: 1, distance: 1, metronome: 1, pulse: 1}, secondary: null, target: "any", type: "Dragon", @@ -4292,7 +4327,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Dragon Rage", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: null, target: "normal", type: "Dragon", @@ -4306,7 +4341,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Dragon Rush", pp: 10, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 20, volatileStatus: 'flinch', @@ -4323,7 +4358,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Dragon Tail", pp: 10, priority: -6, - flags: {contact: 1, protect: 1, mirror: 1, noassist: 1, failcopycat: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1, noassist: 1, failcopycat: 1}, forceSwitch: true, target: "normal", type: "Dragon", @@ -4337,7 +4372,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Draining Kiss", pp: 10, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1, heal: 1}, + flags: {contact: 1, protect: 1, mirror: 1, heal: 1, metronome: 1}, drain: [3, 4], secondary: null, target: "normal", @@ -4352,7 +4387,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Drain Punch", pp: 10, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1, punch: 1, heal: 1}, + flags: {contact: 1, protect: 1, mirror: 1, punch: 1, heal: 1, metronome: 1}, drain: [1, 2], secondary: null, target: "normal", @@ -4367,7 +4402,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Dream Eater", pp: 15, priority: 0, - flags: {protect: 1, mirror: 1, heal: 1}, + flags: {protect: 1, mirror: 1, heal: 1, metronome: 1}, drain: [1, 2], onTryImmunity(target) { return target.status === 'slp' || target.hasAbility('comatose'); @@ -4385,7 +4420,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Drill Peck", pp: 20, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1, distance: 1}, + flags: {contact: 1, protect: 1, mirror: 1, distance: 1, metronome: 1}, secondary: null, target: "any", type: "Flying", @@ -4399,7 +4434,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Drill Run", pp: 10, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, critRatio: 2, secondary: null, target: "normal", @@ -4433,7 +4468,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Dual Chop", pp: 15, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, multihit: 2, secondary: null, target: "normal", @@ -4449,7 +4484,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Dual Wingbeat", pp: 10, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, multihit: 2, secondary: null, target: "normal", @@ -4464,7 +4499,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Dynamax Cannon", pp: 5, priority: 0, - flags: {protect: 1, failencore: 1, nosleeptalk: 1, noparentalbond: 1, failcopycat: 1, failinstruct: 1, failmimic: 1}, + flags: {protect: 1, failencore: 1, nosleeptalk: 1, failcopycat: 1, failmimic: 1, failinstruct: 1, noparentalbond: 1}, secondary: null, target: "normal", type: "Dragon", @@ -4477,7 +4512,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Dynamic Punch", pp: 5, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1, punch: 1}, + flags: {contact: 1, protect: 1, mirror: 1, punch: 1, metronome: 1}, secondary: { chance: 100, volatileStatus: 'confusion', @@ -4494,7 +4529,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Earth Power", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1, nonsky: 1}, + flags: {protect: 1, mirror: 1, nonsky: 1, metronome: 1}, secondary: { chance: 10, boosts: { @@ -4513,7 +4548,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Earthquake", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1, nonsky: 1}, + flags: {protect: 1, mirror: 1, nonsky: 1, metronome: 1}, secondary: null, target: "allAdjacent", type: "Ground", @@ -4535,7 +4570,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Echoed Voice", pp: 15, priority: 0, - flags: {protect: 1, mirror: 1, sound: 1, bypasssub: 1}, + flags: {protect: 1, mirror: 1, sound: 1, bypasssub: 1, metronome: 1}, onTry() { this.field.addPseudoWeather('echoedvoice'); }, @@ -4566,7 +4601,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Eerie Impulse", pp: 15, priority: 0, - flags: {protect: 1, reflectable: 1, mirror: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, metronome: 1}, boosts: { spa: -2, }, @@ -4584,7 +4619,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Eerie Spell", pp: 5, priority: 0, - flags: {protect: 1, mirror: 1, sound: 1, bypasssub: 1}, + flags: {protect: 1, mirror: 1, sound: 1, bypasssub: 1, metronome: 1}, secondary: { chance: 100, onHit(target) { @@ -4610,7 +4645,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Egg Bomb", pp: 10, priority: 0, - flags: {bullet: 1, protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1, bullet: 1}, secondary: null, target: "normal", type: "Normal", @@ -4624,7 +4659,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Electric Terrain", pp: 10, priority: 0, - flags: {nonsky: 1}, + flags: {nonsky: 1, metronome: 1}, terrain: 'electricterrain', condition: { duration: 5, @@ -4684,7 +4719,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Electrify", pp: 20, priority: 0, - flags: {protect: 1, mirror: 1, allyanim: 1}, + flags: {protect: 1, mirror: 1, allyanim: 1, metronome: 1}, volatileStatus: 'electrify', onTryHit(target) { if (!this.queue.willMove(target) && target.activeTurns) return false; @@ -4723,7 +4758,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Electro Ball", pp: 10, priority: 0, - flags: {bullet: 1, protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1, bullet: 1}, secondary: null, target: "normal", type: "Electric", @@ -4760,7 +4795,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Electro Shot", pp: 10, priority: 0, - flags: {charge: 1, protect: 1, mirror: 1}, + flags: {charge: 1, protect: 1, mirror: 1, metronome: 1}, onTryMove(attacker, defender, move) { if (attacker.removeVolatile(move.id)) { return; @@ -4791,7 +4826,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Electroweb", pp: 15, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 100, boosts: { @@ -4811,7 +4846,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Embargo", pp: 15, priority: 0, - flags: {protect: 1, reflectable: 1, mirror: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, metronome: 1}, volatileStatus: 'embargo', condition: { duration: 5, @@ -4839,7 +4874,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Ember", pp: 25, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 10, status: 'brn', @@ -4856,7 +4891,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Encore", pp: 5, priority: 0, - flags: {protect: 1, reflectable: 1, mirror: 1, bypasssub: 1, failencore: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, bypasssub: 1, metronome: 1, failencore: 1}, volatileStatus: 'encore', condition: { duration: 3, @@ -4919,7 +4954,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Endeavor", pp: 5, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1, noparentalbond: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1, noparentalbond: 1}, onTryImmunity(target, pokemon) { return pokemon.hp < target.hp; }, @@ -4974,7 +5009,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Energy Ball", pp: 10, priority: 0, - flags: {bullet: 1, protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1, bullet: 1}, secondary: { chance: 10, boosts: { @@ -4993,18 +5028,13 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Entrainment", pp: 15, priority: 0, - flags: {protect: 1, reflectable: 1, mirror: 1, allyanim: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, allyanim: 1, metronome: 1}, onTryHit(target, source) { if (target === source || target.volatiles['dynamax']) return false; - - const additionalBannedSourceAbilities = [ - // Zen Mode included here for compatability with Gen 5-6 - 'commander', 'flowergift', 'forecast', 'hungerswitch', 'illusion', 'imposter', 'neutralizinggas', 'powerofalchemy', 'receiver', 'trace', 'zenmode', - ]; if ( target.ability === source.ability || - target.getAbility().isPermanent || target.ability === 'truant' || - source.getAbility().isPermanent || additionalBannedSourceAbilities.includes(source.ability) + target.getAbility().flags['cantsuppress'] || target.ability === 'truant' || + source.getAbility().flags['noentrain'] ) { return false; } @@ -5037,7 +5067,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Eruption", pp: 5, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: null, target: "allAdjacentFoes", type: "Fire", @@ -5051,7 +5081,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Esper Wing", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, critRatio: 2, secondary: { chance: 100, @@ -5089,7 +5119,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Expanding Force", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, onBasePower(basePower, source) { if (this.field.isTerrain('psychicterrain') && source.isGrounded()) { this.debug('terrain buff'); @@ -5113,7 +5143,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Explosion", pp: 5, priority: 0, - flags: {protect: 1, mirror: 1, noparentalbond: 1}, + flags: {protect: 1, mirror: 1, metronome: 1, noparentalbond: 1}, selfdestruct: "always", secondary: null, target: "allAdjacent", @@ -5128,7 +5158,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Extrasensory", pp: 20, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 10, volatileStatus: 'flinch', @@ -5168,7 +5198,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Extreme Speed", pp: 5, priority: 2, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, secondary: null, target: "normal", type: "Normal", @@ -5182,7 +5212,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Facade", pp: 20, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, onBasePower(basePower, pokemon) { if (pokemon.status && pokemon.status !== 'slp') { return this.chainModify(2); @@ -5201,7 +5231,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Fairy Lock", pp: 10, priority: 0, - flags: {mirror: 1, bypasssub: 1}, + flags: {mirror: 1, bypasssub: 1, metronome: 1}, pseudoWeather: 'fairylock', condition: { duration: 2, @@ -5226,7 +5256,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Fairy Wind", pp: 30, priority: 0, - flags: {protect: 1, mirror: 1, wind: 1}, + flags: {protect: 1, mirror: 1, metronome: 1, wind: 1}, secondary: null, target: "normal", type: "Fairy", @@ -5240,7 +5270,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Fake Out", pp: 10, priority: 3, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, onTry(source) { if (source.activeMoveActions > 1) { this.hint("Fake Out only works on your first turn out."); @@ -5263,7 +5293,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Fake Tears", pp: 20, priority: 0, - flags: {protect: 1, reflectable: 1, mirror: 1, allyanim: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, allyanim: 1, metronome: 1}, boosts: { spd: -2, }, @@ -5294,7 +5324,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "False Swipe", pp: 40, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, onDamagePriority: -20, onDamage(damage, target, source, effect) { if (damage >= target.hp) return target.hp - 1; @@ -5312,7 +5342,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Feather Dance", pp: 15, priority: 0, - flags: {protect: 1, reflectable: 1, mirror: 1, allyanim: 1, dance: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, dance: 1, allyanim: 1, metronome: 1}, boosts: { atk: -2, }, @@ -5347,7 +5377,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Feint Attack", pp: 20, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, secondary: null, target: "normal", type: "Dark", @@ -5361,7 +5391,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Fell Stinger", pp: 25, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, onAfterMoveSecondarySelf(pokemon, target, move) { if (!target || target.fainted || target.hp <= 0) this.boost({atk: 3}, pokemon, pokemon, move); }, @@ -5378,9 +5408,10 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Fickle Beam", pp: 5, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, onBasePower(basePower, pokemon) { if (this.randomChance(3, 10)) { + this.attrLastMove('[anim] Fickle Beam All Out'); this.add('-activate', pokemon, 'move: Fickle Beam'); return this.chainModify(2); } @@ -5397,7 +5428,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Fiery Dance", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1, dance: 1}, + flags: {protect: 1, mirror: 1, dance: 1, metronome: 1}, secondary: { chance: 50, self: { @@ -5468,7 +5499,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Final Gambit", pp: 5, priority: 0, - flags: {protect: 1, noparentalbond: 1}, + flags: {protect: 1, metronome: 1, noparentalbond: 1}, secondary: null, target: "normal", type: "Fighting", @@ -5483,7 +5514,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Fire Blast", pp: 5, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 10, status: 'brn', @@ -5500,7 +5531,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Fire Fang", pp: 15, priority: 0, - flags: {bite: 1, contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1, bite: 1}, secondaries: [ { chance: 10, @@ -5522,7 +5553,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Fire Lash", pp: 15, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 100, boosts: { @@ -5542,13 +5573,13 @@ export const Moves: {[moveid: string]: MoveData} = { this.add('-combine'); return 150; } - return 80; + return move.basePower; }, category: "Special", name: "Fire Pledge", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1, nonsky: 1, pledgecombo: 1}, + flags: {protect: 1, mirror: 1, nonsky: 1, metronome: 1, pledgecombo: 1}, onPrepareHit(target, source, move) { for (const action of this.queue.list as MoveAction[]) { if ( @@ -5605,7 +5636,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Fire Punch", pp: 15, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1, punch: 1}, + flags: {contact: 1, protect: 1, mirror: 1, punch: 1, metronome: 1}, secondary: { chance: 10, status: 'brn', @@ -5622,7 +5653,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Fire Spin", pp: 15, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, volatileStatus: 'partiallytrapped', secondary: null, target: "normal", @@ -5637,7 +5668,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "First Impression", pp: 10, priority: 2, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, onTry(source) { if (source.activeMoveActions > 1) { this.hint("First Impression only works on your first turn out."); @@ -5666,7 +5697,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Fishious Rend", pp: 10, priority: 0, - flags: {bite: 1, contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1, bite: 1}, secondary: null, target: "normal", type: "Water", @@ -5679,7 +5710,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Fissure", pp: 5, priority: 0, - flags: {protect: 1, mirror: 1, nonsky: 1}, + flags: {protect: 1, mirror: 1, nonsky: 1, metronome: 1}, ohko: true, secondary: null, target: "normal", @@ -5692,7 +5723,7 @@ export const Moves: {[moveid: string]: MoveData} = { num: 175, accuracy: 100, basePower: 0, - basePowerCallback(pokemon, target) { + basePowerCallback(pokemon) { const ratio = Math.max(Math.floor(pokemon.hp * 48 / pokemon.maxhp), 1); let bp; if (ratio < 2) { @@ -5715,7 +5746,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Flail", pp: 15, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, secondary: null, target: "normal", type: "Normal", @@ -5732,7 +5763,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Flame Burst", pp: 15, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, onHit(target, source, move) { for (const ally of target.adjacentAllies()) { this.damage(ally.baseMaxhp / 16, ally, source, this.dex.conditions.get('Flame Burst')); @@ -5756,7 +5787,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Flame Charge", pp: 20, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 100, self: { @@ -5777,7 +5808,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Flame Wheel", pp: 25, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1, defrost: 1}, + flags: {contact: 1, protect: 1, mirror: 1, defrost: 1, metronome: 1}, secondary: { chance: 10, status: 'brn', @@ -5794,7 +5825,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Flamethrower", pp: 15, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 10, status: 'brn', @@ -5811,7 +5842,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Flare Blitz", pp: 15, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1, defrost: 1}, + flags: {contact: 1, protect: 1, mirror: 1, defrost: 1, metronome: 1}, recoil: [33, 100], secondary: { chance: 10, @@ -5830,7 +5861,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Flash", pp: 20, priority: 0, - flags: {protect: 1, reflectable: 1, mirror: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, metronome: 1}, boosts: { accuracy: -1, }, @@ -5848,7 +5879,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Flash Cannon", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 10, boosts: { @@ -5867,7 +5898,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Flatter", pp: 15, priority: 0, - flags: {protect: 1, reflectable: 1, mirror: 1, allyanim: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, allyanim: 1, metronome: 1}, volatileStatus: 'confusion', boosts: { spa: 1, @@ -5905,7 +5936,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Fling", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1, allyanim: 1, noparentalbond: 1}, + flags: {protect: 1, mirror: 1, allyanim: 1, metronome: 1, noparentalbond: 1}, onPrepareHit(target, source, move) { if (source.ignoringItem()) return false; const item = source.getItem(); @@ -5957,7 +5988,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Flip Turn", pp: 20, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, selfSwitch: true, secondary: null, target: "normal", @@ -5989,7 +6020,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Floral Healing", pp: 10, priority: 0, - flags: {protect: 1, reflectable: 1, heal: 1, allyanim: 1}, + flags: {protect: 1, reflectable: 1, heal: 1, allyanim: 1, metronome: 1}, onHit(target, source) { let success = false; if (this.field.isTerrain('grassyterrain')) { @@ -6021,7 +6052,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Flower Shield", pp: 10, priority: 0, - flags: {distance: 1}, + flags: {distance: 1, metronome: 1}, onHitField(t, source, move) { const targets: Pokemon[] = []; for (const pokemon of this.getAllActive()) { @@ -6054,7 +6085,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Flower Trick", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, willCrit: true, secondary: null, target: "normal", @@ -6069,7 +6100,8 @@ export const Moves: {[moveid: string]: MoveData} = { pp: 15, priority: 0, flags: { - contact: 1, charge: 1, protect: 1, mirror: 1, gravity: 1, distance: 1, nosleeptalk: 1, noassist: 1, failinstruct: 1, + contact: 1, charge: 1, protect: 1, mirror: 1, gravity: 1, distance: 1, + metronome: 1, nosleeptalk: 1, noassist: 1, failinstruct: 1, }, onTryMove(attacker, defender, move) { if (attacker.removeVolatile(move.id)) { @@ -6108,7 +6140,7 @@ export const Moves: {[moveid: string]: MoveData} = { category: "Physical", name: "Flying Press", pp: 10, - flags: {contact: 1, protect: 1, mirror: 1, gravity: 1, distance: 1, nonsky: 1}, + flags: {contact: 1, protect: 1, mirror: 1, gravity: 1, distance: 1, nonsky: 1, metronome: 1}, onEffectiveness(typeMod, target, type, move) { return typeMod + this.dex.getEffectiveness('Flying', type); }, @@ -6127,7 +6159,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Focus Blast", pp: 5, priority: 0, - flags: {bullet: 1, protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1, bullet: 1}, secondary: { chance: 10, boosts: { @@ -6146,7 +6178,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Focus Energy", pp: 30, priority: 0, - flags: {snatch: 1}, + flags: {snatch: 1, metronome: 1}, volatileStatus: 'focusenergy', condition: { onStart(target, source, effect) { @@ -6251,7 +6283,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Force Palm", pp: 10, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 30, status: 'par', @@ -6269,7 +6301,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Foresight", pp: 40, priority: 0, - flags: {protect: 1, reflectable: 1, mirror: 1, bypasssub: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, bypasssub: 1, metronome: 1}, volatileStatus: 'foresight', onTryHit(target) { if (target.volatiles['miracleeye']) return false; @@ -6302,7 +6334,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Forest's Curse", pp: 20, priority: 0, - flags: {protect: 1, reflectable: 1, mirror: 1, allyanim: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, allyanim: 1, metronome: 1}, onHit(target) { if (target.hasType('Grass')) return false; if (!target.addType('Grass')) return false; @@ -6322,7 +6354,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Foul Play", pp: 15, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, overrideOffensivePokemon: 'target', secondary: null, target: "normal", @@ -6337,7 +6369,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Freeze-Dry", pp: 20, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, onEffectiveness(typeMod, target, type) { if (type === 'Water') return 1; }, @@ -6422,7 +6454,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Frenzy Plant", pp: 5, priority: 0, - flags: {recharge: 1, protect: 1, mirror: 1, nonsky: 1}, + flags: {recharge: 1, protect: 1, mirror: 1, nonsky: 1, metronome: 1}, self: { volatileStatus: 'mustrecharge', }, @@ -6439,7 +6471,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Frost Breath", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, willCrit: true, secondary: null, target: "normal", @@ -6458,7 +6490,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Frustration", pp: 20, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, secondary: null, target: "normal", type: "Normal", @@ -6474,7 +6506,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Fury Attack", pp: 20, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, multihit: [2, 5], secondary: null, target: "normal", @@ -6497,7 +6529,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Fury Cutter", pp: 20, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1, slicing: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1, slicing: 1}, condition: { duration: 2, onStart() { @@ -6523,7 +6555,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Fury Swipes", pp: 15, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, multihit: [2, 5], secondary: null, target: "normal", @@ -6539,7 +6571,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Fusion Bolt", pp: 5, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, onBasePower(basePower, pokemon) { if (this.lastSuccessfulMoveThisTurn === 'fusionflare') { this.debug('double power'); @@ -6559,7 +6591,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Fusion Flare", pp: 5, priority: 0, - flags: {protect: 1, mirror: 1, defrost: 1}, + flags: {protect: 1, mirror: 1, defrost: 1, metronome: 1}, onBasePower(basePower, pokemon) { if (this.lastSuccessfulMoveThisTurn === 'fusionbolt') { this.debug('double power'); @@ -6579,7 +6611,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Future Sight", pp: 10, priority: 0, - flags: {allyanim: 1, futuremove: 1}, + flags: {allyanim: 1, metronome: 1, futuremove: 1}, ignoreImmunity: true, onTry(source, target) { if (!target.side.addSlotCondition(target, 'futuremove')) return false; @@ -6594,7 +6626,7 @@ export const Moves: {[moveid: string]: MoveData} = { basePower: 120, category: "Special", priority: 0, - flags: {allyanim: 1, futuremove: 1}, + flags: {allyanim: 1, metronome: 1, futuremove: 1}, ignoreImmunity: false, effectType: 'Move', type: 'Psychic', @@ -6616,10 +6648,10 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Gastro Acid", pp: 10, priority: 0, - flags: {protect: 1, reflectable: 1, mirror: 1, allyanim: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, allyanim: 1, metronome: 1}, volatileStatus: 'gastroacid', onTryHit(target) { - if (target.getAbility().isPermanent) { + if (target.getAbility().flags['cantsuppress']) { return false; } if (target.hasItem('Ability Shield')) { @@ -6635,7 +6667,7 @@ export const Moves: {[moveid: string]: MoveData} = { this.singleEvent('End', pokemon.getAbility(), pokemon.abilityState, pokemon, pokemon, 'gastroacid'); }, onCopy(pokemon) { - if (pokemon.getAbility().isPermanent) pokemon.removeVolatile('gastroacid'); + if (pokemon.getAbility().flags['cantsuppress']) pokemon.removeVolatile('gastroacid'); }, }, secondary: null, @@ -6653,7 +6685,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Gear Grind", pp: 15, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, multihit: 2, secondary: null, target: "normal", @@ -6671,7 +6703,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Gear Up", pp: 20, priority: 0, - flags: {snatch: 1, bypasssub: 1}, + flags: {snatch: 1, bypasssub: 1, metronome: 1}, onHitSide(side, source, move) { const targets = side.allies().filter(target => ( target.hasAbility(['plus', 'minus']) && @@ -6722,7 +6754,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Geomancy", pp: 10, priority: 0, - flags: {charge: 1, nonsky: 1, nosleeptalk: 1, failinstruct: 1}, + flags: {charge: 1, nonsky: 1, metronome: 1, nosleeptalk: 1, failinstruct: 1}, onTryMove(attacker, defender, move) { if (attacker.removeVolatile(move.id)) { return; @@ -6753,7 +6785,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Giga Drain", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1, heal: 1}, + flags: {protect: 1, mirror: 1, heal: 1, metronome: 1}, drain: [1, 2], secondary: null, target: "normal", @@ -6768,7 +6800,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Giga Impact", pp: 5, priority: 0, - flags: {contact: 1, recharge: 1, protect: 1, mirror: 1}, + flags: {contact: 1, recharge: 1, protect: 1, mirror: 1, metronome: 1}, self: { volatileStatus: 'mustrecharge', }, @@ -6785,7 +6817,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Gigaton Hammer", pp: 5, priority: 0, - flags: {protect: 1, mirror: 1, cantusetwice: 1}, + flags: {protect: 1, mirror: 1, metronome: 1, cantusetwice: 1}, secondary: null, target: "normal", type: "Steel", @@ -6827,7 +6859,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Glaciate", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 100, boosts: { @@ -6846,7 +6878,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Glaive Rush", pp: 5, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, self: { volatileStatus: 'glaiverush', }, @@ -6879,7 +6911,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Glare", pp: 30, priority: 0, - flags: {protect: 1, reflectable: 1, mirror: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, metronome: 1}, status: 'par', secondary: null, target: "normal", @@ -7796,7 +7828,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Grass Knot", pp: 20, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1, nonsky: 1}, + flags: {contact: 1, protect: 1, mirror: 1, nonsky: 1, metronome: 1}, onTryHit(target, source, move) { if (target.volatiles['dynamax']) { this.add('-fail', source, 'move: Grass Knot', '[from] Dynamax'); @@ -7820,13 +7852,13 @@ export const Moves: {[moveid: string]: MoveData} = { this.add('-combine'); return 150; } - return 80; + return move.basePower; }, category: "Special", name: "Grass Pledge", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1, nonsky: 1, pledgecombo: 1}, + flags: {protect: 1, mirror: 1, nonsky: 1, metronome: 1, pledgecombo: 1}, onPrepareHit(target, source, move) { for (const action of this.queue.list as MoveAction[]) { if ( @@ -7882,7 +7914,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Grass Whistle", pp: 15, priority: 0, - flags: {protect: 1, reflectable: 1, mirror: 1, sound: 1, bypasssub: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, sound: 1, bypasssub: 1, metronome: 1}, status: 'slp', secondary: null, target: "normal", @@ -7898,7 +7930,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Grassy Glide", pp: 20, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, onModifyPriority(priority, source, target, move) { if (this.field.isTerrain('grassyterrain') && source.isGrounded()) { return priority + 1; @@ -7917,7 +7949,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Grassy Terrain", pp: 10, priority: 0, - flags: {nonsky: 1}, + flags: {nonsky: 1, metronome: 1}, terrain: 'grassyterrain', condition: { duration: 5, @@ -7998,7 +8030,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Gravity", pp: 5, priority: 0, - flags: {nonsky: 1}, + flags: {nonsky: 1, metronome: 1}, pseudoWeather: 'gravity', condition: { duration: 5, @@ -8088,7 +8120,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Growl", pp: 40, priority: 0, - flags: {protect: 1, reflectable: 1, mirror: 1, sound: 1, bypasssub: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, sound: 1, bypasssub: 1, metronome: 1}, boosts: { atk: -1, }, @@ -8106,7 +8138,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Growth", pp: 20, priority: 0, - flags: {snatch: 1}, + flags: {snatch: 1, metronome: 1}, onModifyMove(move, pokemon) { if (['sunnyday', 'desolateland'].includes(pokemon.effectiveWeather())) move.boosts = {atk: 2, spa: 2}; }, @@ -8129,7 +8161,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Grudge", pp: 5, priority: 0, - flags: {bypasssub: 1}, + flags: {bypasssub: 1, metronome: 1}, volatileStatus: 'grudge', condition: { onStart(pokemon) { @@ -8196,7 +8228,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Guard Split", pp: 10, priority: 0, - flags: {protect: 1, allyanim: 1}, + flags: {protect: 1, allyanim: 1, metronome: 1}, onHit(target, source) { const newdef = Math.floor((target.storedStats.def + source.storedStats.def) / 2); target.storedStats.def = newdef; @@ -8220,7 +8252,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Guard Swap", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1, bypasssub: 1, allyanim: 1}, + flags: {protect: 1, mirror: 1, bypasssub: 1, allyanim: 1, metronome: 1}, onHit(target, source) { const targetBoosts: SparseBoostsTable = {}; const sourceBoosts: SparseBoostsTable = {}; @@ -8250,7 +8282,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Guillotine", pp: 5, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, ohko: true, secondary: null, target: "normal", @@ -8267,7 +8299,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Gunk Shot", pp: 5, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 30, status: 'psn', @@ -8284,7 +8316,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Gust", pp: 35, priority: 0, - flags: {protect: 1, mirror: 1, distance: 1, wind: 1}, + flags: {protect: 1, mirror: 1, distance: 1, metronome: 1, wind: 1}, secondary: null, target: "any", type: "Flying", @@ -8305,7 +8337,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Gyro Ball", pp: 5, priority: 0, - flags: {bullet: 1, contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1, bullet: 1}, secondary: null, target: "normal", type: "Steel", @@ -8322,7 +8354,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Hail", pp: 10, priority: 0, - flags: {}, + flags: {metronome: 1}, weather: 'hail', secondary: null, target: "all", @@ -8338,7 +8370,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Hammer Arm", pp: 10, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1, punch: 1}, + flags: {contact: 1, protect: 1, mirror: 1, punch: 1, metronome: 1}, self: { boosts: { spe: -1, @@ -8357,7 +8389,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Happy Hour", pp: 30, priority: 0, - flags: {}, + flags: {metronome: 1}, onTryHit(target, source) { this.add('-activate', target, 'move: Happy Hour'); }, @@ -8375,7 +8407,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Harden", pp: 30, priority: 0, - flags: {snatch: 1}, + flags: {snatch: 1, metronome: 1}, boosts: { def: 1, }, @@ -8392,8 +8424,7 @@ export const Moves: {[moveid: string]: MoveData} = { basePowerCallback(pokemon, target) { const hp = target.hp; const maxHP = target.maxhp; - // TODO figure out actual BP cap - const bp = Math.floor(Math.floor((120 * (100 * Math.floor(hp * 4096 / maxHP)) + 2048 - 1) / 4096) / 100) || 1; + const bp = Math.floor(Math.floor((100 * (100 * Math.floor(hp * 4096 / maxHP)) + 2048 - 1) / 4096) / 100) || 1; this.debug('BP for ' + hp + '/' + maxHP + " HP: " + bp); return bp; }, @@ -8401,7 +8432,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Hard Press", pp: 10, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, secondary: null, target: "normal", type: "Steel", @@ -8414,7 +8445,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Haze", pp: 30, priority: 0, - flags: {bypasssub: 1}, + flags: {bypasssub: 1, metronome: 1}, onHitField() { this.add('-clearallboost'); for (const pokemon of this.getAllActive()) { @@ -8435,7 +8466,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Headbutt", pp: 15, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 30, volatileStatus: 'flinch', @@ -8453,7 +8484,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Head Charge", pp: 15, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, recoil: [1, 4], secondary: null, target: "normal", @@ -8468,7 +8499,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Headlong Rush", pp: 5, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1, punch: 1}, + flags: {contact: 1, protect: 1, mirror: 1, punch: 1, metronome: 1}, self: { boosts: { def: -1, @@ -8487,7 +8518,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Head Smash", pp: 5, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, recoil: [1, 2], secondary: null, target: "normal", @@ -8502,7 +8533,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Heal Bell", pp: 5, priority: 0, - flags: {snatch: 1, sound: 1, distance: 1, bypasssub: 1}, + flags: {snatch: 1, sound: 1, distance: 1, bypasssub: 1, metronome: 1}, onHit(target, source) { this.add('-activate', source, 'move: Heal Bell'); let success = false; @@ -8527,7 +8558,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Heal Block", pp: 15, priority: 0, - flags: {protect: 1, reflectable: 1, mirror: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, metronome: 1}, volatileStatus: 'healblock', condition: { duration: 5, @@ -8573,7 +8604,9 @@ export const Moves: {[moveid: string]: MoveData} = { if ((effect?.id === 'zpower') || this.effectState.isZ) return damage; return false; }, - onRestart(target, source) { + onRestart(target, source, effect) { + if (effect?.name === 'Psychic Noise') return; + this.add('-fail', target, 'move: Heal Block'); // Succeeds to supress downstream messages if (!source.moveThisTurnResult) { source.moveThisTurnResult = false; @@ -8594,7 +8627,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Healing Wish", pp: 10, priority: 0, - flags: {snatch: 1, heal: 1}, + flags: {snatch: 1, heal: 1, metronome: 1}, onTryHit(source) { if (!this.canSwitch(source.side)) { this.attrLastMove('[still]'); @@ -8628,7 +8661,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Heal Order", pp: 10, priority: 0, - flags: {snatch: 1, heal: 1}, + flags: {snatch: 1, heal: 1, metronome: 1}, heal: [1, 2], secondary: null, target: "self", @@ -8644,7 +8677,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Heal Pulse", pp: 10, priority: 0, - flags: {protect: 1, pulse: 1, reflectable: 1, distance: 1, heal: 1, allyanim: 1}, + flags: {protect: 1, reflectable: 1, distance: 1, heal: 1, allyanim: 1, metronome: 1, pulse: 1}, onHit(target, source) { let success = false; if (source.hasAbility('megalauncher')) { @@ -8676,7 +8709,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Heart Stamp", pp: 25, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 30, volatileStatus: 'flinch', @@ -8693,7 +8726,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Heart Swap", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1, bypasssub: 1, allyanim: 1}, + flags: {protect: 1, mirror: 1, bypasssub: 1, allyanim: 1, metronome: 1}, onHit(target, source) { const targetBoosts: SparseBoostsTable = {}; const sourceBoosts: SparseBoostsTable = {}; @@ -8741,7 +8774,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Heat Crash", pp: 10, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1, nonsky: 1}, + flags: {contact: 1, protect: 1, mirror: 1, nonsky: 1, metronome: 1}, onTryHit(target, pokemon, move) { if (target.volatiles['dynamax']) { this.add('-fail', pokemon, 'Dynamax'); @@ -8764,7 +8797,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Heat Wave", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1, wind: 1}, + flags: {protect: 1, mirror: 1, metronome: 1, wind: 1}, secondary: { chance: 10, status: 'brn', @@ -8799,7 +8832,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Heavy Slam", pp: 10, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1, nonsky: 1}, + flags: {contact: 1, protect: 1, mirror: 1, nonsky: 1, metronome: 1}, onTryHit(target, pokemon, move) { if (target.volatiles['dynamax']) { this.add('-fail', pokemon, 'Dynamax'); @@ -8864,7 +8897,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Hex", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: null, target: "normal", type: "Ghost", @@ -8880,7 +8913,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Hidden Power", pp: 15, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, onModifyType(move, pokemon) { move.type = pokemon.hpType || 'Dark'; }, @@ -9153,7 +9186,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "High Horsepower", pp: 10, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, secondary: null, target: "normal", type: "Ground", @@ -9167,7 +9200,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "High Jump Kick", pp: 10, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1, gravity: 1}, + flags: {contact: 1, protect: 1, mirror: 1, gravity: 1, metronome: 1}, hasCrashDamage: true, onMoveFail(target, source, move) { this.damage(source.baseMaxhp / 2, source, source, this.dex.conditions.get('High Jump Kick')); @@ -9186,7 +9219,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Hold Back", pp: 40, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, onDamagePriority: -20, onDamage(damage, target, source, effect) { if (damage >= target.hp) return target.hp - 1; @@ -9205,7 +9238,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Hold Hands", pp: 40, priority: 0, - flags: {bypasssub: 1, nosleeptalk: 1, noassist: 1, failcopycat: 1, failinstruct: 1, failmimic: 1}, + flags: {bypasssub: 1, nosleeptalk: 1, noassist: 1, failcopycat: 1, failmimic: 1, failinstruct: 1}, secondary: null, target: "adjacentAlly", type: "Normal", @@ -9220,7 +9253,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Hone Claws", pp: 15, priority: 0, - flags: {snatch: 1}, + flags: {snatch: 1, metronome: 1}, boosts: { atk: 1, accuracy: 1, @@ -9239,7 +9272,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Horn Attack", pp: 25, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, secondary: null, target: "normal", type: "Normal", @@ -9253,7 +9286,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Horn Drill", pp: 5, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, ohko: true, secondary: null, target: "normal", @@ -9270,7 +9303,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Horn Leech", pp: 10, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1, heal: 1}, + flags: {contact: 1, protect: 1, mirror: 1, heal: 1, metronome: 1}, drain: [1, 2], secondary: null, target: "normal", @@ -9285,7 +9318,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Howl", pp: 40, priority: 0, - flags: {snatch: 1, sound: 1}, + flags: {snatch: 1, sound: 1, metronome: 1}, boosts: { atk: 1, }, @@ -9303,7 +9336,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Hurricane", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1, distance: 1, wind: 1}, + flags: {protect: 1, mirror: 1, distance: 1, metronome: 1, wind: 1}, onModifyMove(move, pokemon, target) { switch (target?.effectiveWeather()) { case 'raindance': @@ -9332,7 +9365,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Hydro Cannon", pp: 5, priority: 0, - flags: {recharge: 1, protect: 1, mirror: 1}, + flags: {recharge: 1, protect: 1, mirror: 1, metronome: 1}, self: { volatileStatus: 'mustrecharge', }, @@ -9349,7 +9382,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Hydro Pump", pp: 5, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: null, target: "normal", type: "Water", @@ -9363,7 +9396,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Hydro Steam", pp: 15, priority: 0, - flags: {protect: 1, mirror: 1, defrost: 1}, + flags: {protect: 1, mirror: 1, defrost: 1, metronome: 1}, // Damage boost in Sun applied in conditions.ts thawsTarget: true, secondary: null, @@ -9394,7 +9427,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Hyper Beam", pp: 5, priority: 0, - flags: {recharge: 1, protect: 1, mirror: 1}, + flags: {recharge: 1, protect: 1, mirror: 1, metronome: 1}, self: { volatileStatus: 'mustrecharge', }, @@ -9426,7 +9459,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Hyper Fang", pp: 15, priority: 0, - flags: {bite: 1, contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1, bite: 1}, secondary: { chance: 10, volatileStatus: 'flinch', @@ -9443,7 +9476,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Hyperspace Fury", pp: 5, priority: 0, - flags: {mirror: 1, bypasssub: 1}, + flags: {mirror: 1, bypasssub: 1, nosketch: 1}, breaksProtect: true, onTry(source) { if (source.species.name === 'Hoopa-Unbound') { @@ -9464,7 +9497,6 @@ export const Moves: {[moveid: string]: MoveData} = { def: -1, }, }, - noSketch: true, secondary: null, target: "normal", type: "Dark", @@ -9493,7 +9525,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Hyper Voice", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1, sound: 1, bypasssub: 1}, + flags: {protect: 1, mirror: 1, sound: 1, bypasssub: 1, metronome: 1}, secondary: null, target: "allAdjacentFoes", type: "Normal", @@ -9507,7 +9539,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Hypnosis", pp: 20, priority: 0, - flags: {protect: 1, reflectable: 1, mirror: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, metronome: 1}, status: 'slp', secondary: null, target: "normal", @@ -9543,7 +9575,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Ice Ball", pp: 20, priority: 0, - flags: {bullet: 1, contact: 1, protect: 1, mirror: 1, noparentalbond: 1, failinstruct: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1, failinstruct: 1, bullet: 1, noparentalbond: 1}, onModifyMove(move, pokemon, target) { if (pokemon.volatiles['iceball'] || pokemon.status === 'slp' || !target) return; pokemon.addVolatile('iceball'); @@ -9594,7 +9626,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Ice Beam", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 10, status: 'frz', @@ -9639,7 +9671,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Ice Fang", pp: 15, priority: 0, - flags: {bite: 1, contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1, bite: 1}, secondaries: [ { chance: 10, @@ -9661,7 +9693,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Ice Hammer", pp: 10, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1, punch: 1}, + flags: {contact: 1, protect: 1, mirror: 1, punch: 1, metronome: 1}, self: { boosts: { spe: -1, @@ -9680,7 +9712,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Ice Punch", pp: 15, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1, punch: 1}, + flags: {contact: 1, protect: 1, mirror: 1, punch: 1, metronome: 1}, secondary: { chance: 10, status: 'frz', @@ -9697,7 +9729,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Ice Shard", pp: 30, priority: 1, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: null, target: "normal", type: "Ice", @@ -9711,7 +9743,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Ice Spinner", pp: 15, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, onAfterHit(target, source) { if (source.hp) { this.field.clearTerrain(); @@ -9734,7 +9766,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Icicle Crash", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 30, volatileStatus: 'flinch', @@ -9751,7 +9783,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Icicle Spear", pp: 30, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, multihit: [2, 5], secondary: null, target: "normal", @@ -9768,7 +9800,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Icy Wind", pp: 15, priority: 0, - flags: {protect: 1, mirror: 1, wind: 1}, + flags: {protect: 1, mirror: 1, metronome: 1, wind: 1}, secondary: { chance: 100, boosts: { @@ -9787,7 +9819,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Imprison", pp: 10, priority: 0, - flags: {snatch: 1, bypasssub: 1, mustpressure: 1}, + flags: {snatch: 1, bypasssub: 1, metronome: 1, mustpressure: 1}, volatileStatus: 'imprison', condition: { noCopy: true, @@ -9823,7 +9855,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Incinerate", pp: 15, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, onHit(pokemon, source) { const item = pokemon.getItem(); if ((item.isBerry || item.isGem) && pokemon.takeItem(source)) { @@ -9847,7 +9879,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Infernal Parade", pp: 15, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 30, status: 'brn', @@ -9863,7 +9895,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Inferno", pp: 5, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 100, status: 'brn', @@ -9896,7 +9928,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Infestation", pp: 20, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, volatileStatus: 'partiallytrapped', secondary: null, target: "normal", @@ -9911,7 +9943,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Ingrain", pp: 20, priority: 0, - flags: {snatch: 1, nonsky: 1}, + flags: {snatch: 1, nonsky: 1, metronome: 1}, volatileStatus: 'ingrain', condition: { onStart(pokemon) { @@ -9980,7 +10012,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Ion Deluge", pp: 25, priority: 1, - flags: {}, + flags: {metronome: 1}, pseudoWeather: 'iondeluge', condition: { duration: 1, @@ -10010,7 +10042,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Iron Defense", pp: 15, priority: 0, - flags: {snatch: 1}, + flags: {snatch: 1, metronome: 1}, boosts: { def: 2, }, @@ -10028,7 +10060,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Iron Head", pp: 15, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 30, volatileStatus: 'flinch', @@ -10045,7 +10077,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Iron Tail", pp: 15, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 30, boosts: { @@ -10064,7 +10096,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Ivy Cudgel", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, critRatio: 2, onPrepareHit(target, source, move) { if (move.type !== "Grass") { @@ -10096,7 +10128,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Jaw Lock", pp: 10, priority: 0, - flags: {bite: 1, contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1, bite: 1}, onHit(target, source, move) { source.addVolatile('trapped', target, move, 'trapper'); target.addVolatile('trapped', source, move, 'trapper'); @@ -10127,7 +10159,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Judgment", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, onModifyType(move, pokemon) { if (pokemon.ignoringItem()) return; const item = pokemon.getItem(); @@ -10149,7 +10181,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Jump Kick", pp: 10, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1, gravity: 1}, + flags: {contact: 1, protect: 1, mirror: 1, gravity: 1, metronome: 1}, hasCrashDamage: true, onMoveFail(target, source, move) { this.damage(source.baseMaxhp / 2, source, source, this.dex.conditions.get('Jump Kick')); @@ -10185,7 +10217,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Karate Chop", pp: 25, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, critRatio: 2, secondary: null, target: "normal", @@ -10201,7 +10233,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Kinesis", pp: 15, priority: 0, - flags: {protect: 1, reflectable: 1, mirror: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, metronome: 1}, boosts: { accuracy: -1, }, @@ -10278,7 +10310,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Knock Off", pp: 20, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, onBasePower(basePower, source, target, move) { const item = target.getItem(); if (!this.singleEvent('TakeItem', item, target.itemState, target, target, move, item)) return; @@ -10307,7 +10339,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Kowtow Cleave", pp: 10, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1, slicing: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1, slicing: 1}, secondary: null, target: "normal", type: "Dark", @@ -10321,7 +10353,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Land's Wrath", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1, nonsky: 1}, + flags: {protect: 1, mirror: 1, nonsky: 1, metronome: 1}, secondary: null, target: "allAdjacentFoes", type: "Ground", @@ -10337,7 +10369,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Laser Focus", pp: 30, priority: 0, - flags: {snatch: 1}, + flags: {snatch: 1, metronome: 1}, volatileStatus: 'laserfocus', condition: { duration: 2, @@ -10373,7 +10405,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Lash Out", pp: 5, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, onBasePower(basePower, source) { if (source.statsLoweredThisTurn) { this.debug('lashout buff'); @@ -10392,7 +10424,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Last Resort", pp: 5, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, onTry(source) { if (source.moveSlots.length < 2) return false; // Last Resort fails unless the user knows at least 2 moves let hasLastResort = false; // User must actually have Last Resort for it to succeed @@ -10421,7 +10453,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Last Respects", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: null, target: "normal", type: "Ghost", @@ -10434,7 +10466,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Lava Plume", pp: 15, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 30, status: 'brn', @@ -10451,7 +10483,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Leafage", pp: 40, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: null, target: "normal", type: "Grass", @@ -10465,7 +10497,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Leaf Blade", pp: 15, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1, slicing: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1, slicing: 1}, critRatio: 2, secondary: null, target: "normal", @@ -10480,7 +10512,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Leaf Storm", pp: 5, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, self: { boosts: { spa: -2, @@ -10500,7 +10532,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Leaf Tornado", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 50, boosts: { @@ -10519,7 +10551,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Leech Life", pp: 10, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1, heal: 1}, + flags: {contact: 1, protect: 1, mirror: 1, heal: 1, metronome: 1}, drain: [1, 2], secondary: null, target: "normal", @@ -10534,7 +10566,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Leech Seed", pp: 10, priority: 0, - flags: {protect: 1, reflectable: 1, mirror: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, metronome: 1}, volatileStatus: 'leechseed', condition: { onStart(target) { @@ -10570,7 +10602,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Leer", pp: 30, priority: 0, - flags: {protect: 1, reflectable: 1, mirror: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, metronome: 1}, boosts: { def: -1, }, @@ -10604,7 +10636,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Lick", pp: 30, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 30, status: 'par', @@ -10651,7 +10683,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Light Screen", pp: 30, priority: 0, - flags: {snatch: 1}, + flags: {snatch: 1, metronome: 1}, sideCondition: 'lightscreen', condition: { duration: 5, @@ -10713,7 +10745,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Liquidation", pp: 10, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 20, boosts: { @@ -10732,7 +10764,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Lock-On", pp: 5, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, onTryHit(target, source) { if (source.volatiles['lockon']) return false; }, @@ -10766,7 +10798,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Lovely Kiss", pp: 10, priority: 0, - flags: {protect: 1, reflectable: 1, mirror: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, metronome: 1}, status: 'slp', secondary: null, target: "normal", @@ -10801,7 +10833,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Low Kick", pp: 20, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, onTryHit(target, pokemon, move) { if (target.volatiles['dynamax']) { this.add('-fail', pokemon, 'Dynamax'); @@ -10823,7 +10855,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Low Sweep", pp: 20, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 100, boosts: { @@ -10843,7 +10875,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Lucky Chant", pp: 30, priority: 0, - flags: {snatch: 1}, + flags: {snatch: 1, metronome: 1}, sideCondition: 'luckychant', condition: { duration: 5, @@ -10871,7 +10903,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Lumina Crash", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 100, boosts: { @@ -10889,7 +10921,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Lunar Blessing", pp: 5, priority: 0, - flags: {snatch: 1, heal: 1}, + flags: {snatch: 1, heal: 1, metronome: 1}, onHit(pokemon) { const success = !!this.heal(this.modify(pokemon.maxhp, 0.25)); return pokemon.cureStatus() || success; @@ -10906,7 +10938,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Lunar Dance", pp: 10, priority: 0, - flags: {snatch: 1, heal: 1, dance: 1}, + flags: {snatch: 1, dance: 1, heal: 1, metronome: 1}, onTryHit(source) { if (!this.canSwitch(source.side)) { this.attrLastMove('[still]'); @@ -10948,7 +10980,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Lunge", pp: 15, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 100, boosts: { @@ -10967,7 +10999,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Luster Purge", pp: 5, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 50, boosts: { @@ -10986,7 +11018,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Mach Punch", pp: 30, priority: 1, - flags: {contact: 1, protect: 1, mirror: 1, punch: 1}, + flags: {contact: 1, protect: 1, mirror: 1, punch: 1, metronome: 1}, secondary: null, target: "normal", type: "Fighting", @@ -11000,7 +11032,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Magical Leaf", pp: 20, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: null, target: "normal", type: "Grass", @@ -11016,9 +11048,9 @@ export const Moves: {[moveid: string]: MoveData} = { pp: 10, priority: 0, flags: { - protect: 1, failencore: 1, failmefirst: 1, nosleeptalk: 1, noassist: 1, failcopycat: 1, failinstruct: 1, failmimic: 1, + protect: 1, failencore: 1, failmefirst: 1, nosleeptalk: 1, noassist: 1, + failcopycat: 1, failmimic: 1, failinstruct: 1, nosketch: 1, }, - noSketch: true, secondary: { chance: 30, volatileStatus: 'confusion', @@ -11035,7 +11067,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Magic Coat", pp: 15, priority: 4, - flags: {}, + flags: {metronome: 1}, volatileStatus: 'magiccoat', condition: { duration: 1, @@ -11053,7 +11085,7 @@ export const Moves: {[moveid: string]: MoveData} = { const newMove = this.dex.getActiveMove(move.id); newMove.hasBounced = true; newMove.pranksterBoosted = this.effectState.pranksterBoosted; - this.actions.useMove(newMove, target, source); + this.actions.useMove(newMove, target, {target: source}); return null; }, onAllyTryHitSide(target, source, move) { @@ -11063,7 +11095,7 @@ export const Moves: {[moveid: string]: MoveData} = { const newMove = this.dex.getActiveMove(move.id); newMove.hasBounced = true; newMove.pranksterBoosted = false; - this.actions.useMove(newMove, this.effectState.target, source); + this.actions.useMove(newMove, this.effectState.target, {target: source}); return null; }, }, @@ -11081,7 +11113,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Magic Powder", pp: 20, priority: 0, - flags: {powder: 1, protect: 1, reflectable: 1, mirror: 1, allyanim: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, allyanim: 1, metronome: 1, powder: 1}, onHit(target) { if (target.getTypes().join() === 'Psychic' || !target.setType('Psychic')) return false; this.add('-start', target, 'typechange', 'Psychic'); @@ -11098,7 +11130,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Magic Room", pp: 10, priority: 0, - flags: {mirror: 1}, + flags: {mirror: 1, metronome: 1}, pseudoWeather: 'magicroom', condition: { duration: 5, @@ -11143,7 +11175,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Magma Storm", pp: 5, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, volatileStatus: 'partiallytrapped', secondary: null, target: "normal", @@ -11159,7 +11191,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Magnet Bomb", pp: 20, priority: 0, - flags: {bullet: 1, protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1, bullet: 1}, secondary: null, target: "normal", type: "Steel", @@ -11173,7 +11205,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Magnetic Flux", pp: 20, priority: 0, - flags: {snatch: 1, distance: 1, bypasssub: 1}, + flags: {snatch: 1, distance: 1, bypasssub: 1, metronome: 1}, onHitSide(side, source, move) { const targets = side.allies().filter(ally => ( ally.hasAbility(['plus', 'minus']) && @@ -11201,7 +11233,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Magnet Rise", pp: 10, priority: 0, - flags: {snatch: 1, gravity: 1}, + flags: {snatch: 1, gravity: 1, metronome: 1}, volatileStatus: 'magnetrise', onTry(source, target, move) { if (target.volatiles['smackdown'] || target.volatiles['ingrain']) return false; @@ -11240,7 +11272,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Magnitude", pp: 30, priority: 0, - flags: {protect: 1, mirror: 1, nonsky: 1}, + flags: {protect: 1, mirror: 1, nonsky: 1, metronome: 1}, onModifyMove(move, pokemon) { const i = this.random(100); if (i < 5) { @@ -11316,11 +11348,10 @@ export const Moves: {[moveid: string]: MoveData} = { accuracy: 100, basePower: 100, category: "Special", - isNonstandard: "Unobtainable", name: "Malignant Chain", pp: 5, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 50, status: 'tox', @@ -11385,7 +11416,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Matcha Gotcha", pp: 15, priority: 0, - flags: {protect: 1, mirror: 1, heal: 1, defrost: 1}, + flags: {protect: 1, mirror: 1, defrost: 1, heal: 1, metronome: 1}, drain: [1, 2], thawsTarget: true, secondary: { @@ -11851,7 +11882,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Mean Look", pp: 5, priority: 0, - flags: {reflectable: 1, mirror: 1}, + flags: {reflectable: 1, mirror: 1, metronome: 1}, onHit(target, source, move) { return target.addVolatile('trapped', source, move, 'trapper'); }, @@ -11870,7 +11901,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Meditate", pp: 40, priority: 0, - flags: {snatch: 1}, + flags: {snatch: 1, metronome: 1}, boosts: { atk: 1, }, @@ -11891,7 +11922,8 @@ export const Moves: {[moveid: string]: MoveData} = { priority: 0, flags: { protect: 1, bypasssub: 1, - failencore: 1, failmefirst: 1, nosleeptalk: 1, noassist: 1, failcopycat: 1, failinstruct: 1, failmimic: 1, + failencore: 1, failmefirst: 1, nosleeptalk: 1, noassist: 1, + failcopycat: 1, failmimic: 1, failinstruct: 1, }, onTryHit(target, pokemon) { const action = this.queue.willMove(target); @@ -11902,7 +11934,7 @@ export const Moves: {[moveid: string]: MoveData} = { if (move.category === 'Status' || move.flags['failmefirst']) return false; pokemon.addVolatile('mefirst'); - this.actions.useMove(move, pokemon, target); + this.actions.useMove(move, pokemon, {target}); return null; }, condition: { @@ -11912,6 +11944,7 @@ export const Moves: {[moveid: string]: MoveData} = { return this.chainModify(1.5); }, }, + callsMove: true, secondary: null, target: "adjacentFoe", type: "Normal", @@ -11926,7 +11959,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Mega Drain", pp: 15, priority: 0, - flags: {protect: 1, mirror: 1, heal: 1}, + flags: {protect: 1, mirror: 1, heal: 1, metronome: 1}, drain: [1, 2], secondary: null, target: "normal", @@ -11942,7 +11975,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Megahorn", pp: 10, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, secondary: null, target: "normal", type: "Bug", @@ -11956,7 +11989,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Mega Kick", pp: 5, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, secondary: null, target: "normal", type: "Normal", @@ -11970,7 +12003,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Mega Punch", pp: 20, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1, punch: 1}, + flags: {contact: 1, protect: 1, mirror: 1, punch: 1, metronome: 1}, secondary: null, target: "normal", type: "Normal", @@ -11984,7 +12017,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Memento", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, boosts: { atk: -2, spa: -2, @@ -12028,7 +12061,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Metal Burst", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1, failmefirst: 1}, + flags: {protect: 1, mirror: 1, metronome: 1, failmefirst: 1}, onTry(source) { const lastDamagedBy = source.getLastDamagedBy(true); if (lastDamagedBy === undefined || !lastDamagedBy.thisTurn) return false; @@ -12052,7 +12085,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Metal Claw", pp: 35, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 10, self: { @@ -12073,7 +12106,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Metal Sound", pp: 40, priority: 0, - flags: {protect: 1, reflectable: 1, mirror: 1, sound: 1, bypasssub: 1, allyanim: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, sound: 1, bypasssub: 1, allyanim: 1, metronome: 1}, boosts: { spd: -2, }, @@ -12092,7 +12125,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Meteor Assault", pp: 5, priority: 0, - flags: {protect: 1, recharge: 1, mirror: 1, failinstruct: 1}, + flags: {recharge: 1, protect: 1, mirror: 1, failinstruct: 1}, self: { volatileStatus: 'mustrecharge', }, @@ -12108,7 +12141,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Meteor Beam", pp: 10, priority: 0, - flags: {charge: 1, protect: 1, mirror: 1}, + flags: {charge: 1, protect: 1, mirror: 1, metronome: 1}, onTryMove(attacker, defender, move) { if (attacker.removeVolatile(move.id)) { return; @@ -12133,7 +12166,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Meteor Mash", pp: 10, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1, punch: 1}, + flags: {contact: 1, protect: 1, mirror: 1, punch: 1, metronome: 1}, secondary: { chance: 20, self: { @@ -12154,16 +12187,12 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Metronome", pp: 10, priority: 0, - flags: {failencore: 1, nosleeptalk: 1, noassist: 1, failcopycat: 1, failinstruct: 1, failmimic: 1}, - noMetronome: [ - "After You", "Apple Acid", "Armor Cannon", "Assist", "Astral Barrage", "Aura Wheel", "Baneful Bunker", "Beak Blast", "Behemoth Bash", "Behemoth Blade", "Belch", "Bestow", "Blazing Torque", "Body Press", "Branch Poke", "Breaking Swipe", "Celebrate", "Chatter", "Chilling Water", "Chilly Reception", "Clangorous Soul", "Collision Course", "Combat Torque", "Comeuppance", "Copycat", "Counter", "Covet", "Crafty Shield", "Decorate", "Destiny Bond", "Detect", "Diamond Storm", "Doodle", "Double Iron Bash", "Double Shock", "Dragon Ascent", "Dragon Energy", "Drum Beating", "Dynamax Cannon", "Electro Drift", "Endure", "Eternabeam", "False Surrender", "Feint", "Fiery Wrath", "Fillet Away", "Fleur Cannon", "Focus Punch", "Follow Me", "Freeze Shock", "Freezing Glare", "Glacial Lance", "Grav Apple", "Helping Hand", "Hold Hands", "Hyper Drill", "Hyperspace Fury", "Hyperspace Hole", "Ice Burn", "Instruct", "Jet Punch", "Jungle Healing", "King's Shield", "Life Dew", "Light of Ruin", "Magical Torque", "Make It Rain", "Mat Block", "Me First", "Meteor Assault", "Metronome", "Mimic", "Mind Blown", "Mirror Coat", "Mirror Move", "Moongeist Beam", "Nature Power", "Nature's Madness", "Noxious Torque", "Obstruct", "Order Up", "Origin Pulse", "Overdrive", "Photon Geyser", "Plasma Fists", "Population Bomb", "Pounce", "Power Shift", "Precipice Blades", "Protect", "Pyro Ball", "Quash", "Quick Guard", "Rage Fist", "Rage Powder", "Raging Bull", "Raging Fury", "Relic Song", "Revival Blessing", "Ruination", "Salt Cure", "Secret Sword", "Shed Tail", "Shell Trap", "Silk Trap", "Sketch", "Sleep Talk", "Snap Trap", "Snarl", "Snatch", "Snore", "Snowscape", "Spectral Thief", "Spicy Extract", "Spiky Shield", "Spirit Break", "Spotlight", "Springtide Storm", "Steam Eruption", "Steel Beam", "Strange Steam", "Struggle", "Sunsteel Strike", "Surging Strikes", "Switcheroo", "Techno Blast", "Tera Starstorm", "Thief", "Thousand Arrows", "Thousand Waves", "Thunder Cage", "Thunderous Kick", "Tidy Up", "Trailblaze", "Transform", "Trick", "Twin Beam", "V-create", "Wicked Blow", "Wicked Torque", "Wide Guard", - ], + flags: {failencore: 1, nosleeptalk: 1, noassist: 1, failcopycat: 1, failmimic: 1, failinstruct: 1}, onHit(target, source, effect) { const moves = this.dex.moves.all().filter(move => ( (![2, 4].includes(this.gen) || !source.moves.includes(move.id)) && - !move.realMove && !move.isZ && !move.isMax && (!move.isNonstandard || move.isNonstandard === 'Unobtainable') && - !effect.noMetronome!.includes(move.name) + move.flags['metronome'] )); let randomMove = ''; if (moves.length) { @@ -12174,6 +12203,7 @@ export const Moves: {[moveid: string]: MoveData} = { source.side.lastSelectedMove = this.toID(randomMove); this.actions.useMove(randomMove, target); }, + callsMove: true, secondary: null, target: "self", type: "Normal", @@ -12187,7 +12217,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Mighty Cleave", pp: 5, priority: 0, - flags: {contact: 1, mirror: 1, slicing: 1}, + flags: {contact: 1, mirror: 1, metronome: 1, slicing: 1}, secondary: null, target: "normal", type: "Rock", @@ -12200,7 +12230,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Milk Drink", pp: 5, priority: 0, - flags: {snatch: 1, heal: 1}, + flags: {snatch: 1, heal: 1, metronome: 1}, heal: [1, 2], secondary: null, target: "self", @@ -12218,7 +12248,7 @@ export const Moves: {[moveid: string]: MoveData} = { priority: 0, flags: { protect: 1, bypasssub: 1, allyanim: 1, - failencore: 1, nosleeptalk: 1, noassist: 1, failcopycat: 1, failinstruct: 1, failmimic: 1, + failencore: 1, nosleeptalk: 1, noassist: 1, failcopycat: 1, failmimic: 1, failinstruct: 1, }, onHit(target, source) { const move = target.lastMove; @@ -12281,7 +12311,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Mind Reader", pp: 5, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, onTryHit(target, source) { if (source.volatiles['lockon']) return false; }, @@ -12303,7 +12333,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Minimize", pp: 10, priority: 0, - flags: {snatch: 1}, + flags: {snatch: 1, metronome: 1}, volatileStatus: 'minimize', condition: { noCopy: true, @@ -12344,7 +12374,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Miracle Eye", pp: 40, priority: 0, - flags: {protect: 1, reflectable: 1, mirror: 1, bypasssub: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, bypasssub: 1, metronome: 1}, volatileStatus: 'miracleeye', onTryHit(target) { if (target.volatiles['foresight']) return false; @@ -12423,15 +12453,16 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Mirror Move", pp: 20, priority: 0, - flags: {failencore: 1, nosleeptalk: 1, noassist: 1, failcopycat: 1, failinstruct: 1, failmimic: 1}, + flags: {failencore: 1, nosleeptalk: 1, noassist: 1, failcopycat: 1, failmimic: 1, failinstruct: 1}, onTryHit(target, pokemon) { const move = target.lastMove; if (!move?.flags['mirror'] || move.isZ || move.isMax) { return false; } - this.actions.useMove(move.id, pokemon, target); + this.actions.useMove(move.id, pokemon, {target}); return null; }, + callsMove: true, secondary: null, target: "normal", type: "Flying", @@ -12447,7 +12478,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Mirror Shot", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 30, boosts: { @@ -12466,7 +12497,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Mist", pp: 30, priority: 0, - flags: {snatch: 1}, + flags: {snatch: 1, metronome: 1}, sideCondition: 'mist', condition: { duration: 5, @@ -12509,7 +12540,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Mist Ball", pp: 5, priority: 0, - flags: {bullet: 1, protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1, bullet: 1}, secondary: { chance: 50, boosts: { @@ -12528,7 +12559,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Misty Explosion", pp: 5, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, selfdestruct: "always", onBasePower(basePower, source) { if (this.field.isTerrain('mistyterrain') && source.isGrounded()) { @@ -12548,7 +12579,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Misty Terrain", pp: 10, priority: 0, - flags: {nonsky: 1}, + flags: {nonsky: 1, metronome: 1}, terrain: 'mistyterrain', condition: { duration: 5, @@ -12606,7 +12637,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Moonblast", pp: 15, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 30, boosts: { @@ -12640,7 +12671,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Moonlight", pp: 5, priority: 0, - flags: {snatch: 1, heal: 1}, + flags: {snatch: 1, heal: 1, metronome: 1}, onHit(pokemon) { let factor = 0.5; switch (pokemon.effectiveWeather()) { @@ -12677,7 +12708,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Morning Sun", pp: 5, priority: 0, - flags: {snatch: 1, heal: 1}, + flags: {snatch: 1, heal: 1, metronome: 1}, onHit(pokemon) { let factor = 0.5; switch (pokemon.effectiveWeather()) { @@ -12714,7 +12745,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Mortal Spin", pp: 15, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, onAfterHit(target, pokemon, move) { if (!move.hasSheerForce) { if (pokemon.hp && pokemon.removeVolatile('leechseed')) { @@ -12762,7 +12793,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Mountain Gale", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 30, volatileStatus: 'flinch', @@ -12779,7 +12810,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Mud Bomb", pp: 10, priority: 0, - flags: {bullet: 1, protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1, bullet: 1}, secondary: { chance: 30, boosts: { @@ -12798,7 +12829,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Mud Shot", pp: 15, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 100, boosts: { @@ -12817,7 +12848,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Mud-Slap", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 100, boosts: { @@ -12837,7 +12868,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Mud Sport", pp: 15, priority: 0, - flags: {nonsky: 1}, + flags: {nonsky: 1, metronome: 1}, pseudoWeather: 'mudsport', condition: { duration: 5, @@ -12871,7 +12902,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Muddy Water", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1, nonsky: 1}, + flags: {protect: 1, mirror: 1, nonsky: 1, metronome: 1}, secondary: { chance: 30, boosts: { @@ -12891,7 +12922,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Multi-Attack", pp: 10, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, onModifyType(move, pokemon) { if (pokemon.ignoringItem()) return; move.type = this.runEvent('Memory', pokemon, null, move, 'Normal'); @@ -12911,7 +12942,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Mystical Fire", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 100, boosts: { @@ -12930,7 +12961,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Mystical Power", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 100, self: { @@ -12950,7 +12981,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Nasty Plot", pp: 20, priority: 0, - flags: {snatch: 1}, + flags: {snatch: 1, metronome: 1}, boosts: { spa: 2, }, @@ -12969,7 +13000,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Natural Gift", pp: 15, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, onModifyType(move, pokemon) { if (pokemon.ignoringItem()) return; const item = pokemon.getItem(); @@ -13003,7 +13034,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Nature Power", pp: 20, priority: 0, - flags: {failencore: 1, nosleeptalk: 1, noassist: 1, failcopycat: 1, failinstruct: 1, failmimic: 1}, + flags: {failencore: 1, nosleeptalk: 1, noassist: 1, failcopycat: 1, failmimic: 1, failinstruct: 1}, onTryHit(target, pokemon) { let move = 'triattack'; if (this.field.isTerrain('electricterrain')) { @@ -13015,9 +13046,10 @@ export const Moves: {[moveid: string]: MoveData} = { } else if (this.field.isTerrain('psychicterrain')) { move = 'psychic'; } - this.actions.useMove(move, pokemon, target); + this.actions.useMove(move, pokemon, {target}); return null; }, + callsMove: true, secondary: null, target: "normal", type: "Normal", @@ -13050,7 +13082,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Needle Arm", pp: 15, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 30, volatileStatus: 'flinch', @@ -13083,7 +13115,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Night Daze", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 40, boosts: { @@ -13103,7 +13135,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Nightmare", pp: 15, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, volatileStatus: 'nightmare', condition: { noCopy: true, @@ -13133,7 +13165,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Night Shade", pp: 15, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: null, target: "normal", type: "Ghost", @@ -13147,7 +13179,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Night Slash", pp: 15, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1, slicing: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1, slicing: 1}, critRatio: 2, secondary: null, target: "normal", @@ -13162,7 +13194,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Noble Roar", pp: 30, priority: 0, - flags: {protect: 1, reflectable: 1, mirror: 1, sound: 1, bypasssub: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, sound: 1, bypasssub: 1, metronome: 1}, boosts: { atk: -1, spa: -1, @@ -13181,7 +13213,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "No Retreat", pp: 5, priority: 0, - flags: {snatch: 1}, + flags: {snatch: 1, metronome: 1}, volatileStatus: 'noretreat', onTry(source, target, move) { if (source.volatiles['noretreat']) return false; @@ -13218,9 +13250,9 @@ export const Moves: {[moveid: string]: MoveData} = { pp: 10, priority: 0, flags: { - protect: 1, failencore: 1, failmefirst: 1, nosleeptalk: 1, noassist: 1, failcopycat: 1, failinstruct: 1, failmimic: 1, + protect: 1, failencore: 1, failmefirst: 1, nosleeptalk: 1, noassist: 1, + failcopycat: 1, failmimic: 1, failinstruct: 1, nosketch: 1, }, - noSketch: true, secondary: { chance: 30, status: 'psn', @@ -13236,7 +13268,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Nuzzle", pp: 20, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 100, status: 'par', @@ -13254,7 +13286,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Oblivion Wing", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1, distance: 1, heal: 1}, + flags: {protect: 1, mirror: 1, distance: 1, heal: 1, metronome: 1}, drain: [3, 4], secondary: null, target: "any", @@ -13343,7 +13375,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Octazooka", pp: 10, priority: 0, - flags: {bullet: 1, protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1, bullet: 1}, secondary: { chance: 50, boosts: { @@ -13363,7 +13395,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Octolock", pp: 15, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, onTryImmunity(target) { return this.dex.getImmunity('trapped', target); }, @@ -13399,7 +13431,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Odor Sleuth", pp: 40, priority: 0, - flags: {protect: 1, reflectable: 1, mirror: 1, bypasssub: 1, allyanim: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, bypasssub: 1, allyanim: 1, metronome: 1}, volatileStatus: 'foresight', onTryHit(target) { if (target.volatiles['miracleeye']) return false; @@ -13419,7 +13451,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Ominous Wind", pp: 5, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 10, self: { @@ -13474,7 +13506,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Origin Pulse", pp: 10, priority: 0, - flags: {protect: 1, pulse: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, pulse: 1}, target: "allAdjacentFoes", type: "Water", contestType: "Beautiful", @@ -13487,7 +13519,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Outrage", pp: 10, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1, failinstruct: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1, failinstruct: 1}, self: { volatileStatus: 'lockedmove', }, @@ -13522,7 +13554,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Overheat", pp: 5, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, self: { boosts: { spa: -2, @@ -13541,7 +13573,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Pain Split", pp: 20, priority: 0, - flags: {protect: 1, mirror: 1, allyanim: 1}, + flags: {protect: 1, mirror: 1, allyanim: 1, metronome: 1}, onHit(target, pokemon) { const targetHP = target.getUndynamaxedHP(); const averagehp = Math.floor((targetHP + pokemon.hp) / 2) || 1; @@ -13557,26 +13589,6 @@ export const Moves: {[moveid: string]: MoveData} = { zMove: {boost: {def: 1}}, contestType: "Clever", }, - paleowave: { - num: 0, - accuracy: 100, - basePower: 85, - category: "Special", - isNonstandard: "CAP", - name: "Paleo Wave", - pp: 15, - priority: 0, - flags: {protect: 1, mirror: 1}, - secondary: { - chance: 20, - boosts: { - atk: -1, - }, - }, - target: "normal", - type: "Rock", - contestType: "Beautiful", - }, paraboliccharge: { num: 570, accuracy: 100, @@ -13585,7 +13597,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Parabolic Charge", pp: 20, priority: 0, - flags: {protect: 1, mirror: 1, heal: 1}, + flags: {protect: 1, mirror: 1, heal: 1, metronome: 1}, drain: [1, 2], secondary: null, target: "allAdjacent", @@ -13600,7 +13612,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Parting Shot", pp: 20, priority: 0, - flags: {protect: 1, reflectable: 1, mirror: 1, sound: 1, bypasssub: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, sound: 1, bypasssub: 1, metronome: 1}, onHit(target, source, move) { const success = this.boost({atk: -1, spa: -1}, target, source); if (!success && !target.hasAbility('mirrorarmor')) { @@ -13630,7 +13642,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Payback", pp: 10, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, secondary: null, target: "normal", type: "Dark", @@ -13644,7 +13656,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Pay Day", pp: 20, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: null, target: "normal", type: "Normal", @@ -13658,7 +13670,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Peck", pp: 35, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1, distance: 1}, + flags: {contact: 1, protect: 1, mirror: 1, distance: 1, metronome: 1}, secondary: null, target: "any", type: "Flying", @@ -13672,7 +13684,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Perish Song", pp: 5, priority: 0, - flags: {sound: 1, distance: 1, bypasssub: 1}, + flags: {sound: 1, distance: 1, bypasssub: 1, metronome: 1}, onHitField(target, source, move) { let result = false; let message = false; @@ -13718,7 +13730,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Petal Blizzard", pp: 15, priority: 0, - flags: {protect: 1, mirror: 1, wind: 1}, + flags: {protect: 1, mirror: 1, metronome: 1, wind: 1}, secondary: null, target: "allAdjacent", type: "Grass", @@ -13732,7 +13744,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Petal Dance", pp: 10, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1, dance: 1, failinstruct: 1}, + flags: {contact: 1, protect: 1, mirror: 1, dance: 1, metronome: 1, failinstruct: 1}, self: { volatileStatus: 'lockedmove', }, @@ -13754,7 +13766,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Phantom Force", pp: 10, priority: 0, - flags: {contact: 1, charge: 1, mirror: 1, nosleeptalk: 1, noassist: 1, failinstruct: 1}, + 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)) { @@ -13822,7 +13834,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Pin Missile", pp: 20, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, multihit: [2, 5], secondary: null, target: "normal", @@ -13855,7 +13867,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Play Nice", pp: 20, priority: 0, - flags: {reflectable: 1, mirror: 1, bypasssub: 1}, + flags: {reflectable: 1, mirror: 1, bypasssub: 1, metronome: 1}, boosts: { atk: -1, }, @@ -13873,7 +13885,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Play Rough", pp: 10, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 10, boosts: { @@ -13892,7 +13904,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Pluck", pp: 20, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1, distance: 1}, + flags: {contact: 1, protect: 1, mirror: 1, distance: 1, metronome: 1}, onHit(target, source) { const item = target.getItem(); if (source.hp && item.isBerry && target.takeItem(source)) { @@ -13917,7 +13929,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Poison Fang", pp: 15, priority: 0, - flags: {bite: 1, contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1, bite: 1}, secondary: { chance: 50, status: 'tox', @@ -13934,7 +13946,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Poison Gas", pp: 40, priority: 0, - flags: {protect: 1, reflectable: 1, mirror: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, metronome: 1}, status: 'psn', secondary: null, target: "allAdjacentFoes", @@ -13950,7 +13962,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Poison Jab", pp: 20, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 30, status: 'psn', @@ -13967,7 +13979,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Poison Powder", pp: 35, priority: 0, - flags: {powder: 1, protect: 1, reflectable: 1, mirror: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, metronome: 1, powder: 1}, status: 'psn', secondary: null, target: "normal", @@ -13983,7 +13995,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Poison Sting", pp: 35, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 30, status: 'psn', @@ -14000,7 +14012,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Poison Tail", pp: 25, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, critRatio: 2, secondary: { chance: 10, @@ -14018,7 +14030,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Pollen Puff", pp: 15, priority: 0, - flags: {bullet: 1, protect: 1, mirror: 1, allyanim: 1}, + flags: {protect: 1, mirror: 1, allyanim: 1, metronome: 1, bullet: 1}, onTryHit(target, source, move) { if (source.isAlly(target)) { move.basePower = 0; @@ -14059,7 +14071,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Poltergeist", pp: 5, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, onTry(source, target) { return !!target.item; }, @@ -14112,7 +14124,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Pound", pp: 35, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, secondary: null, target: "normal", type: "Normal", @@ -14127,7 +14139,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Powder", pp: 20, priority: 1, - flags: {powder: 1, protect: 1, reflectable: 1, mirror: 1, bypasssub: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, bypasssub: 1, metronome: 1, powder: 1}, volatileStatus: 'powder', condition: { duration: 1, @@ -14158,7 +14170,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Powder Snow", pp: 25, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 10, status: 'frz', @@ -14175,7 +14187,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Power Gem", pp: 20, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: null, target: "normal", type: "Rock", @@ -14229,7 +14241,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Power Split", pp: 10, priority: 0, - flags: {protect: 1, allyanim: 1}, + flags: {protect: 1, allyanim: 1, metronome: 1}, onHit(target, source) { const newatk = Math.floor((target.storedStats.atk + source.storedStats.atk) / 2); target.storedStats.atk = newatk; @@ -14253,7 +14265,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Power Swap", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1, bypasssub: 1, allyanim: 1}, + flags: {protect: 1, mirror: 1, bypasssub: 1, allyanim: 1, metronome: 1}, onHit(target, source) { const targetBoosts: SparseBoostsTable = {}; const sourceBoosts: SparseBoostsTable = {}; @@ -14283,7 +14295,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Power Trick", pp: 10, priority: 0, - flags: {snatch: 1}, + flags: {snatch: 1, metronome: 1}, volatileStatus: 'powertrick', condition: { onStart(pokemon) { @@ -14329,7 +14341,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Power Trip", pp: 10, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, secondary: null, target: "normal", type: "Dark", @@ -14346,7 +14358,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Power-Up Punch", pp: 20, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1, punch: 1}, + flags: {contact: 1, protect: 1, mirror: 1, punch: 1, metronome: 1}, secondary: { chance: 100, self: { @@ -14367,7 +14379,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Power Whip", pp: 10, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, secondary: null, target: "normal", type: "Grass", @@ -14394,7 +14406,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Present", pp: 15, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, onModifyMove(move, pokemon, target) { const rand = this.random(10); if (rand < 2) { @@ -14421,7 +14433,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Prismatic Laser", pp: 10, priority: 0, - flags: {recharge: 1, protect: 1, mirror: 1}, + flags: {recharge: 1, protect: 1, mirror: 1, metronome: 1}, self: { volatileStatus: 'mustrecharge', }, @@ -14488,7 +14500,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Psybeam", pp: 20, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 10, volatileStatus: 'confusion', @@ -14505,7 +14517,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Psyblade", pp: 15, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1, slicing: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1, slicing: 1}, secondary: null, onBasePower(basePower, source) { if (this.field.isTerrain('electricterrain')) { @@ -14524,19 +14536,22 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Psych Up", pp: 10, priority: 0, - flags: {bypasssub: 1, allyanim: 1}, + flags: {bypasssub: 1, allyanim: 1, metronome: 1}, onHit(target, source) { let i: BoostID; for (i in target.boosts) { source.boosts[i] = target.boosts[i]; } - const volatilesToCopy = ['focusenergy', 'gmaxchistrike', 'laserfocus']; + + const volatilesToCopy = ['dragoncheer', 'focusenergy', 'gmaxchistrike', 'laserfocus']; + // we need to remove all crit stage volatiles first; otherwise copying e.g. dragoncheer onto a mon with focusenergy + // will crash the server (since addVolatile fails due to overlap, leaving the source mon with no hasDragonType to set) + for (const volatile of volatilesToCopy) source.removeVolatile(volatile); for (const volatile of volatilesToCopy) { if (target.volatiles[volatile]) { source.addVolatile(volatile); if (volatile === 'gmaxchistrike') source.volatiles[volatile].layers = target.volatiles[volatile].layers; - } else { - source.removeVolatile(volatile); + if (volatile === 'dragoncheer') source.volatiles[volatile].hasDragonType = target.volatiles[volatile].hasDragonType; } } this.add('-copyboost', source, target, '[from] move: Psych Up'); @@ -14555,7 +14570,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Psychic", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 10, boosts: { @@ -14574,7 +14589,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Psychic Fangs", pp: 10, priority: 0, - flags: {bite: 1, contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1, bite: 1}, onTryHit(pokemon) { // will shatter screens through sub, before you hit pokemon.side.removeSideCondition('reflect'); @@ -14594,7 +14609,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Psychic Noise", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1, sound: 1, bypasssub: 1}, + flags: {protect: 1, mirror: 1, sound: 1, bypasssub: 1, metronome: 1}, secondary: { chance: 100, volatileStatus: 'healblock', @@ -14610,7 +14625,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Psychic Terrain", pp: 10, priority: 0, - flags: {nonsky: 1}, + flags: {nonsky: 1, metronome: 1}, terrain: 'psychicterrain', condition: { duration: 5, @@ -14670,7 +14685,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Psycho Boost", pp: 5, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, self: { boosts: { spa: -2, @@ -14689,7 +14704,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Psycho Cut", pp: 20, priority: 0, - flags: {protect: 1, mirror: 1, slicing: 1}, + flags: {protect: 1, mirror: 1, metronome: 1, slicing: 1}, critRatio: 2, secondary: null, target: "normal", @@ -14705,7 +14720,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Psycho Shift", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, onTryHit(target, source, move) { if (!source.status) return false; move.status = source.status; @@ -14729,7 +14744,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Psyshield Bash", pp: 10, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 100, self: { @@ -14750,7 +14765,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Psyshock", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: null, target: "normal", type: "Psychic", @@ -14765,7 +14780,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Psystrike", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: null, target: "normal", type: "Psychic", @@ -14783,7 +14798,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Psywave", pp: 15, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: null, target: "normal", type: "Psychic", @@ -14820,7 +14835,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Punishment", pp: 5, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, secondary: null, target: "normal", type: "Dark", @@ -14837,7 +14852,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Purify", pp: 20, priority: 0, - flags: {protect: 1, reflectable: 1, heal: 1}, + flags: {protect: 1, reflectable: 1, heal: 1, metronome: 1}, onHit(target, source) { if (!target.cureStatus()) { this.add('-fail', source); @@ -14869,7 +14884,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Pursuit", pp: 20, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, beforeTurnCallback(pokemon) { for (const side of this.sides) { if (side.hasAlly(pokemon)) continue; @@ -14901,10 +14916,17 @@ export const Moves: {[moveid: string]: MoveData} = { } // 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) { + if (source.canMegaEvo || source.canUltraBurst || source.canTerastallize) { for (const [actionIndex, action] of this.queue.entries()) { - if (action.pokemon === source && action.choice === 'megaEvo') { - this.actions.runMegaEvo(source); + 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; } @@ -14966,7 +14988,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Quick Attack", pp: 30, priority: 1, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, secondary: null, target: "normal", type: "Normal", @@ -15028,7 +15050,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Quiver Dance", pp: 20, priority: 0, - flags: {snatch: 1, dance: 1}, + flags: {snatch: 1, dance: 1, metronome: 1}, boosts: { spa: 1, spd: 1, @@ -15049,7 +15071,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Rage", pp: 20, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, self: { volatileStatus: 'rage', }, @@ -15097,7 +15119,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Rage Powder", pp: 20, priority: 2, - flags: {powder: 1, noassist: 1, failcopycat: 1}, + flags: {noassist: 1, failcopycat: 1, powder: 1}, volatileStatus: 'ragepowder', onTry(source) { return this.activePerHalf > 1; @@ -15186,7 +15208,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Rain Dance", pp: 5, priority: 0, - flags: {}, + flags: {metronome: 1}, weather: 'RainDance', secondary: null, target: "all", @@ -15202,7 +15224,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Rapid Spin", pp: 40, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, onAfterHit(target, pokemon, move) { if (!move.hasSheerForce) { if (pokemon.hp && pokemon.removeVolatile('leechseed')) { @@ -15255,7 +15277,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Razor Leaf", pp: 25, priority: 0, - flags: {protect: 1, mirror: 1, slicing: 1}, + flags: {protect: 1, mirror: 1, metronome: 1, slicing: 1}, critRatio: 2, secondary: null, target: "allAdjacentFoes", @@ -15270,7 +15292,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Razor Shell", pp: 10, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1, slicing: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1, slicing: 1}, secondary: { chance: 50, boosts: { @@ -15290,7 +15312,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Razor Wind", pp: 10, priority: 0, - flags: {charge: 1, protect: 1, mirror: 1, nosleeptalk: 1, failinstruct: 1}, + flags: {charge: 1, protect: 1, mirror: 1, metronome: 1, nosleeptalk: 1, failinstruct: 1}, onTryMove(attacker, defender, move) { if (attacker.removeVolatile(move.id)) { return; @@ -15316,7 +15338,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Recover", pp: 5, priority: 0, - flags: {snatch: 1, heal: 1}, + flags: {snatch: 1, heal: 1, metronome: 1}, heal: [1, 2], secondary: null, target: "self", @@ -15332,7 +15354,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Recycle", pp: 10, priority: 0, - flags: {snatch: 1}, + flags: {snatch: 1, metronome: 1}, onHit(pokemon) { if (pokemon.item || !pokemon.lastItem) return false; const item = pokemon.lastItem; @@ -15354,7 +15376,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Reflect", pp: 20, priority: 0, - flags: {snatch: 1}, + flags: {snatch: 1, metronome: 1}, sideCondition: 'reflect', condition: { duration: 5, @@ -15396,7 +15418,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Reflect Type", pp: 15, priority: 0, - flags: {protect: 1, bypasssub: 1, allyanim: 1}, + flags: {protect: 1, bypasssub: 1, allyanim: 1, metronome: 1}, onHit(target, source) { if (source.species && (source.species.num === 493 || source.species.num === 773)) return false; if (source.terastallized) return false; @@ -15430,7 +15452,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Refresh", pp: 20, priority: 0, - flags: {snatch: 1}, + flags: {snatch: 1, metronome: 1}, onHit(pokemon) { if (['', 'slp', 'frz'].includes(pokemon.status)) return false; pokemon.cureStatus(); @@ -15477,7 +15499,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Rest", pp: 5, priority: 0, - flags: {snatch: 1, heal: 1}, + flags: {snatch: 1, heal: 1, metronome: 1}, onTry(source) { if (source.status === 'slp' || source.hasAbility('comatose')) return false; @@ -15485,8 +15507,13 @@ export const Moves: {[moveid: string]: MoveData} = { this.add('-fail', source, 'heal'); return null; } - if (source.hasAbility(['insomnia', 'vitalspirit'])) { - this.add('-fail', source, '[from] ability: ' + source.getAbility().name, '[of] ' + source); + // insomnia and vital spirit checks are separate so that the message is accurate in multi-ability mods + if (source.hasAbility('insomnia')) { + this.add('-fail', source, '[from] ability: Insomnia', '[of] ' + source); + return null; + } + if (source.hasAbility('vitalspirit')) { + this.add('-fail', source, '[from] ability: Vital Spirit', '[of] ' + source); return null; } }, @@ -15511,7 +15538,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Retaliate", pp: 5, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, onBasePower(basePower, pokemon) { if (pokemon.side.faintedLastTurn) { this.debug('Boosted for a faint last turn'); @@ -15535,7 +15562,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Return", pp: 20, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, secondary: null, target: "normal", type: "Normal", @@ -15551,11 +15578,12 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Revelation Dance", pp: 15, priority: 0, - flags: {protect: 1, mirror: 1, dance: 1}, + flags: {protect: 1, mirror: 1, dance: 1, metronome: 1}, onModifyType(move, pokemon) { - let type = pokemon.getTypes()[0]; - if (type === "Bird") type = "???"; - if (type === "Stellar") type = pokemon.getTypes(false, true)[0]; + const types = pokemon.getTypes(); + let type = types[0]; + if (type === 'Bird') type = '???'; + if (type === '???' && types[1]) type = types[1]; move.type = type; }, secondary: null, @@ -15582,7 +15610,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Revenge", pp: 10, priority: -4, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, secondary: null, target: "normal", type: "Fighting", @@ -15592,7 +15620,7 @@ export const Moves: {[moveid: string]: MoveData} = { num: 179, accuracy: 100, basePower: 0, - basePowerCallback(pokemon, target) { + basePowerCallback(pokemon) { const ratio = Math.max(Math.floor(pokemon.hp * 48 / pokemon.maxhp), 1); let bp; if (ratio < 2) { @@ -15615,7 +15643,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Reversal", pp: 15, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, secondary: null, target: "normal", type: "Fighting", @@ -15631,7 +15659,7 @@ export const Moves: {[moveid: string]: MoveData} = { pp: 1, noPPBoosts: true, priority: 0, - flags: {heal: 1}, + flags: {heal: 1, nosketch: 1}, onTryHit(source) { if (!source.side.pokemon.filter(ally => ally.fainted).length) { return false; @@ -15646,7 +15674,6 @@ export const Moves: {[moveid: string]: MoveData} = { duration: 1, // reviving implemented in side.ts, kind of }, - noSketch: true, secondary: null, target: "self", type: "Normal", @@ -15666,7 +15693,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Rising Voltage", pp: 20, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: null, target: "normal", type: "Electric", @@ -15680,7 +15707,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Roar", pp: 20, priority: -6, - flags: {reflectable: 1, mirror: 1, sound: 1, bypasssub: 1, allyanim: 1, noassist: 1, failcopycat: 1}, + flags: {reflectable: 1, mirror: 1, sound: 1, bypasssub: 1, allyanim: 1, metronome: 1, noassist: 1, failcopycat: 1}, forceSwitch: true, secondary: null, target: "normal", @@ -15696,7 +15723,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Roar of Time", pp: 5, priority: 0, - flags: {recharge: 1, protect: 1, mirror: 1}, + flags: {recharge: 1, protect: 1, mirror: 1, metronome: 1}, self: { volatileStatus: 'mustrecharge', }, @@ -15713,7 +15740,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Rock Blast", pp: 10, priority: 0, - flags: {bullet: 1, protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1, bullet: 1}, multihit: [2, 5], secondary: null, target: "normal", @@ -15731,7 +15758,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Rock Climb", pp: 20, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 20, volatileStatus: 'confusion', @@ -15748,7 +15775,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Rock Polish", pp: 20, priority: 0, - flags: {snatch: 1}, + flags: {snatch: 1, metronome: 1}, boosts: { spe: 2, }, @@ -15766,7 +15793,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Rock Slide", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 30, volatileStatus: 'flinch', @@ -15783,7 +15810,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Rock Smash", pp: 15, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 50, boosts: { @@ -15802,7 +15829,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Rock Throw", pp: 15, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: null, target: "normal", type: "Rock", @@ -15816,7 +15843,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Rock Tomb", pp: 15, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 100, boosts: { @@ -15835,7 +15862,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Rock Wrecker", pp: 5, priority: 0, - flags: {bullet: 1, recharge: 1, protect: 1, mirror: 1}, + flags: {recharge: 1, protect: 1, mirror: 1, metronome: 1, bullet: 1}, self: { volatileStatus: 'mustrecharge', }, @@ -15852,19 +15879,10 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Role Play", pp: 10, priority: 0, - flags: {bypasssub: 1, allyanim: 1}, + flags: {bypasssub: 1, allyanim: 1, metronome: 1}, onTryHit(target, source) { if (target.ability === source.ability) return false; - - const additionalBannedTargetAbilities = [ - // Zen Mode included here for compatability with Gen 5-6 - 'commander', 'flowergift', 'forecast', 'hungerswitch', 'illusion', 'imposter', 'neutralizinggas', 'powerofalchemy', 'receiver', 'trace', 'wonderguard', 'zenmode', - ]; - - if (target.getAbility().isPermanent || additionalBannedTargetAbilities.includes(target.ability) || - source.getAbility().isPermanent) { - return false; - } + if (target.getAbility().flags['failroleplay'] || source.getAbility().flags['cantsuppress']) return false; }, onHit(target, source) { const oldAbility = source.setAbility(target.ability); @@ -15889,7 +15907,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Rolling Kick", pp: 15, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 30, volatileStatus: 'flinch', @@ -15925,7 +15943,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Rollout", pp: 20, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1, noparentalbond: 1, failinstruct: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1, failinstruct: 1, noparentalbond: 1}, onModifyMove(move, pokemon, target) { if (pokemon.volatiles['rollout'] || pokemon.status === 'slp' || !target) return; pokemon.addVolatile('rollout'); @@ -15975,7 +15993,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Roost", pp: 5, priority: 0, - flags: {snatch: 1, heal: 1}, + flags: {snatch: 1, heal: 1, metronome: 1}, heal: [1, 2], self: { volatileStatus: 'roost', @@ -15984,11 +16002,13 @@ export const Moves: {[moveid: string]: MoveData} = { duration: 1, onResidualOrder: 25, onStart(target) { - if (!target.terastallized) { - this.add('-singleturn', target, 'move: Roost'); - } else if (target.terastallized === "Flying") { - this.add('-hint', "If a Flying Terastallized Pokemon uses Roost, it remains Flying-type."); + if (target.terastallized) { + if (target.hasType('Flying')) { + this.add('-hint', "If a Terastallized Pokemon uses Roost, it remains Flying-type."); + } + return false; } + this.add('-singleturn', target, 'move: Roost'); }, onTypePriority: -1, onType(types, pokemon) { @@ -16011,7 +16031,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Rototiller", pp: 10, priority: 0, - flags: {distance: 1, nonsky: 1}, + flags: {distance: 1, nonsky: 1, metronome: 1}, onHitField(target, source) { const targets: Pokemon[] = []; let anyAirborne = false; @@ -16052,7 +16072,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Round", pp: 15, priority: 0, - flags: {protect: 1, mirror: 1, sound: 1, bypasssub: 1}, + flags: {protect: 1, mirror: 1, sound: 1, bypasssub: 1, metronome: 1}, onTry(source, target, move) { for (const action of this.queue.list as MoveAction[]) { if (!action.pokemon || !action.move || action.maxMove || action.zmove) continue; @@ -16092,7 +16112,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Sacred Fire", pp: 5, priority: 0, - flags: {protect: 1, mirror: 1, defrost: 1}, + flags: {protect: 1, mirror: 1, defrost: 1, metronome: 1}, secondary: { chance: 50, status: 'brn', @@ -16109,7 +16129,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Sacred Sword", pp: 15, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1, slicing: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1, slicing: 1}, ignoreEvasion: true, ignoreDefensive: true, secondary: null, @@ -16125,7 +16145,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Safeguard", pp: 25, priority: 0, - flags: {snatch: 1}, + flags: {snatch: 1, metronome: 1}, sideCondition: 'safeguard', condition: { duration: 5, @@ -16212,7 +16232,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Sand Attack", pp: 15, priority: 0, - flags: {protect: 1, reflectable: 1, mirror: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, metronome: 1}, boosts: { accuracy: -1, }, @@ -16230,7 +16250,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Sandsear Storm", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1, wind: 1}, + flags: {protect: 1, mirror: 1, metronome: 1, wind: 1}, onModifyMove(move, pokemon, target) { if (target && ['raindance', 'primordialsea'].includes(target.effectiveWeather())) { move.accuracy = true; @@ -16251,7 +16271,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Sandstorm", pp: 10, priority: 0, - flags: {wind: 1}, + flags: {metronome: 1, wind: 1}, weather: 'Sandstorm', secondary: null, target: "all", @@ -16267,7 +16287,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Sand Tomb", pp: 15, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, volatileStatus: 'partiallytrapped', secondary: null, target: "normal", @@ -16317,7 +16337,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Scald", pp: 15, priority: 0, - flags: {protect: 1, mirror: 1, defrost: 1}, + flags: {protect: 1, mirror: 1, defrost: 1, metronome: 1}, thawsTarget: true, secondary: { chance: 30, @@ -16335,7 +16355,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Scale Shot", pp: 20, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, multihit: [2, 5], selfBoost: { boosts: { @@ -16357,7 +16377,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Scary Face", pp: 10, priority: 0, - flags: {protect: 1, reflectable: 1, mirror: 1, allyanim: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, allyanim: 1, metronome: 1}, boosts: { spe: -2, }, @@ -16375,7 +16395,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Scorching Sands", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1, defrost: 1}, + flags: {protect: 1, mirror: 1, defrost: 1, metronome: 1}, thawsTarget: true, secondary: { chance: 30, @@ -16392,7 +16412,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Scratch", pp: 35, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, secondary: null, target: "normal", type: "Normal", @@ -16406,7 +16426,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Screech", pp: 40, priority: 0, - flags: {protect: 1, reflectable: 1, mirror: 1, sound: 1, bypasssub: 1, allyanim: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, sound: 1, bypasssub: 1, allyanim: 1, metronome: 1}, boosts: { def: -2, }, @@ -16425,7 +16445,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Searing Shot", pp: 5, priority: 0, - flags: {bullet: 1, protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1, bullet: 1}, secondary: { chance: 30, status: 'brn', @@ -16460,7 +16480,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Secret Power", pp: 20, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, onModifyMove(move, pokemon) { if (this.field.isTerrain('')) return; move.secondaries = []; @@ -16521,7 +16541,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Seed Bomb", pp: 15, priority: 0, - flags: {bullet: 1, protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1, bullet: 1}, secondary: null, target: "normal", type: "Grass", @@ -16535,7 +16555,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Seed Flare", pp: 5, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 40, boosts: { @@ -16555,7 +16575,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Seismic Toss", pp: 20, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1, nonsky: 1}, + flags: {contact: 1, protect: 1, mirror: 1, nonsky: 1, metronome: 1}, secondary: null, target: "normal", type: "Fighting", @@ -16570,7 +16590,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Self-Destruct", pp: 5, priority: 0, - flags: {protect: 1, mirror: 1, noparentalbond: 1}, + flags: {protect: 1, mirror: 1, metronome: 1, noparentalbond: 1}, selfdestruct: "always", secondary: null, target: "allAdjacent", @@ -16585,7 +16605,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Shadow Ball", pp: 15, priority: 0, - flags: {bullet: 1, protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1, bullet: 1}, secondary: { chance: 20, boosts: { @@ -16605,7 +16625,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Shadow Bone", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 20, boosts: { @@ -16624,7 +16644,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Shadow Claw", pp: 15, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, critRatio: 2, secondary: null, target: "normal", @@ -16639,7 +16659,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Shadow Force", pp: 5, priority: 0, - flags: {contact: 1, charge: 1, mirror: 1, nosleeptalk: 1, noassist: 1, failinstruct: 1}, + 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)) { @@ -16669,7 +16689,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Shadow Punch", pp: 20, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1, punch: 1}, + flags: {contact: 1, protect: 1, mirror: 1, punch: 1, metronome: 1}, secondary: null, target: "normal", type: "Ghost", @@ -16683,32 +16703,12 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Shadow Sneak", pp: 30, priority: 1, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, secondary: null, target: "normal", type: "Ghost", contestType: "Clever", }, - shadowstrike: { - num: 0, - accuracy: 95, - basePower: 80, - category: "Physical", - isNonstandard: "CAP", - name: "Shadow Strike", - pp: 10, - priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, - secondary: { - chance: 50, - boosts: { - def: -1, - }, - }, - target: "normal", - type: "Ghost", - contestType: "Clever", - }, sharpen: { num: 159, accuracy: true, @@ -16718,7 +16718,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Sharpen", pp: 30, priority: 0, - flags: {snatch: 1}, + flags: {snatch: 1, metronome: 1}, boosts: { atk: 1, }, @@ -16790,7 +16790,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Sheer Cold", pp: 5, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: null, ohko: 'Ice', target: "normal", @@ -16807,7 +16807,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Shell Side Arm", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, onPrepareHit(target, source, move) { if (!source.isAlly(target)) { this.attrLastMove('[anim] Shell Side Arm ' + move.category); @@ -16848,7 +16848,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Shell Smash", pp: 15, priority: 0, - flags: {snatch: 1}, + flags: {snatch: 1, metronome: 1}, boosts: { def: -1, spd: -1, @@ -16910,7 +16910,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Shelter", pp: 10, priority: 0, - flags: {snatch: 1}, + flags: {snatch: 1, metronome: 1}, boosts: { def: 2, }, @@ -16926,7 +16926,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Shift Gear", pp: 10, priority: 0, - flags: {snatch: 1}, + flags: {snatch: 1, metronome: 1}, boosts: { spe: 2, atk: 1, @@ -16945,7 +16945,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Shock Wave", pp: 20, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: null, target: "normal", type: "Electric", @@ -16959,7 +16959,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Shore Up", pp: 5, priority: 0, - flags: {snatch: 1, heal: 1}, + flags: {snatch: 1, heal: 1, metronome: 1}, onHit(pokemon) { let factor = 0.5; if (this.field.isWeather('sandstorm')) { @@ -16987,7 +16987,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Signal Beam", pp: 15, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 10, volatileStatus: 'confusion', @@ -17059,7 +17059,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Silver Wind", pp: 5, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 10, self: { @@ -17084,9 +17084,9 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Simple Beam", pp: 15, priority: 0, - flags: {protect: 1, reflectable: 1, mirror: 1, allyanim: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, allyanim: 1, metronome: 1}, onTryHit(target) { - if (target.getAbility().isPermanent || target.ability === 'simple' || target.ability === 'truant') { + if (target.getAbility().flags['cantsuppress'] || target.ability === 'simple' || target.ability === 'truant') { return false; } }, @@ -17112,7 +17112,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Sing", pp: 15, priority: 0, - flags: {protect: 1, reflectable: 1, mirror: 1, sound: 1, bypasssub: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, sound: 1, bypasssub: 1, metronome: 1}, status: 'slp', secondary: null, target: "normal", @@ -17164,12 +17164,13 @@ export const Moves: {[moveid: string]: MoveData} = { noPPBoosts: true, priority: 0, flags: { - bypasssub: 1, allyanim: 1, failencore: 1, nosleeptalk: 1, noassist: 1, failcopycat: 1, failinstruct: 1, failmimic: 1, + bypasssub: 1, allyanim: 1, failencore: 1, nosleeptalk: 1, noassist: 1, + failcopycat: 1, failmimic: 1, failinstruct: 1, nosketch: 1, }, onHit(target, source) { const move = target.lastMove; if (source.transformed || !move || source.moves.includes(move.id)) return false; - if (move.noSketch || move.isZ || move.isMax) return false; + if (move.flags['nosketch'] || move.isZ || move.isMax) return false; const sketchIndex = source.moves.indexOf('sketch'); if (sketchIndex < 0) return false; const sketchedMove = { @@ -17185,7 +17186,6 @@ export const Moves: {[moveid: string]: MoveData} = { source.baseMoveSlots[sketchIndex] = sketchedMove; this.add('-activate', source, 'move: Sketch', move.name); }, - noSketch: true, secondary: null, target: "normal", type: "Normal", @@ -17200,17 +17200,11 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Skill Swap", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1, bypasssub: 1, allyanim: 1}, + flags: {protect: 1, mirror: 1, bypasssub: 1, allyanim: 1, metronome: 1}, onTryHit(target, source) { - const additionalBannedAbilities = ['hungerswitch', 'illusion', 'neutralizinggas', 'wonderguard', 'terashell']; const targetAbility = target.getAbility(); const sourceAbility = source.getAbility(); - // TODO: research in what order these should be checked - if ( - target.volatiles['dynamax'] || - targetAbility.isPermanent || sourceAbility.isPermanent || - additionalBannedAbilities.includes(target.ability) || additionalBannedAbilities.includes(source.ability) - ) { + if (sourceAbility.flags['failskillswap'] || targetAbility.flags['failskillswap'] || target.volatiles['dynamax']) { return false; } const sourceCanBeSet = this.runEvent('SetAbility', source, source, this.effect, targetAbility); @@ -17232,6 +17226,7 @@ export const Moves: {[moveid: string]: MoveData} = { target.ability = sourceAbility.id; source.abilityState = {id: this.toID(source.ability), target: source}; target.abilityState = {id: this.toID(target.ability), target: target}; + source.volatileStaleness = undefined; if (!target.isAlly(source)) target.volatileStaleness = 'external'; this.singleEvent('Start', targetAbility, source.abilityState, source); this.singleEvent('Start', sourceAbility, target.abilityState, target); @@ -17250,7 +17245,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Skitter Smack", pp: 10, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 100, boosts: { @@ -17269,7 +17264,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Skull Bash", pp: 10, priority: 0, - flags: {contact: 1, charge: 1, protect: 1, mirror: 1, nosleeptalk: 1, failinstruct: 1}, + flags: {contact: 1, charge: 1, protect: 1, mirror: 1, metronome: 1, nosleeptalk: 1, failinstruct: 1}, onTryMove(attacker, defender, move) { if (attacker.removeVolatile(move.id)) { return; @@ -17295,7 +17290,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Sky Attack", pp: 5, priority: 0, - flags: {charge: 1, protect: 1, mirror: 1, distance: 1, nosleeptalk: 1, failinstruct: 1}, + flags: {charge: 1, protect: 1, mirror: 1, distance: 1, metronome: 1, nosleeptalk: 1, failinstruct: 1}, critRatio: 2, onTryMove(attacker, defender, move) { if (attacker.removeVolatile(move.id)) { @@ -17326,7 +17321,8 @@ export const Moves: {[moveid: string]: MoveData} = { pp: 10, priority: 0, flags: { - contact: 1, charge: 1, protect: 1, mirror: 1, gravity: 1, distance: 1, nosleeptalk: 1, noassist: 1, failinstruct: 1, + contact: 1, charge: 1, protect: 1, mirror: 1, gravity: 1, distance: 1, + metronome: 1, nosleeptalk: 1, noassist: 1, failinstruct: 1, }, onModifyMove(move, source) { if (!source.volatiles['skydrop']) { @@ -17439,7 +17435,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Sky Uppercut", pp: 15, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1, punch: 1}, + flags: {contact: 1, protect: 1, mirror: 1, punch: 1, metronome: 1}, secondary: null, target: "normal", type: "Fighting", @@ -17453,7 +17449,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Slack Off", pp: 5, priority: 0, - flags: {snatch: 1, heal: 1}, + flags: {snatch: 1, heal: 1, metronome: 1}, heal: [1, 2], secondary: null, target: "self", @@ -17469,7 +17465,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Slam", pp: 20, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1, nonsky: 1}, + flags: {contact: 1, protect: 1, mirror: 1, nonsky: 1, metronome: 1}, secondary: null, target: "normal", type: "Normal", @@ -17483,7 +17479,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Slash", pp: 20, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1, slicing: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1, slicing: 1}, critRatio: 2, secondary: null, target: "normal", @@ -17498,7 +17494,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Sleep Powder", pp: 15, priority: 0, - flags: {powder: 1, protect: 1, reflectable: 1, mirror: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, metronome: 1, powder: 1}, status: 'slp', secondary: null, target: "normal", @@ -17514,7 +17510,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Sleep Talk", pp: 10, priority: 0, - flags: {failencore: 1, nosleeptalk: 1, noassist: 1, failcopycat: 1, failinstruct: 1, failmimic: 1}, + flags: {failencore: 1, nosleeptalk: 1, noassist: 1, failcopycat: 1, failmimic: 1, failinstruct: 1}, sleepUsable: true, onTry(source) { return source.status === 'slp' || source.hasAbility('comatose'); @@ -17537,6 +17533,7 @@ export const Moves: {[moveid: string]: MoveData} = { } this.actions.useMove(randomMove, pokemon); }, + callsMove: true, secondary: null, target: "self", type: "Normal", @@ -17551,7 +17548,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Sludge", pp: 20, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 30, status: 'psn', @@ -17568,7 +17565,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Sludge Bomb", pp: 10, priority: 0, - flags: {bullet: 1, protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1, bullet: 1}, secondary: { chance: 30, status: 'psn', @@ -17585,7 +17582,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Sludge Wave", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 10, status: 'psn', @@ -17602,7 +17599,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Smack Down", pp: 15, priority: 0, - flags: {protect: 1, mirror: 1, nonsky: 1}, + flags: {protect: 1, mirror: 1, nonsky: 1, metronome: 1}, volatileStatus: 'smackdown', condition: { noCopy: true, @@ -17649,7 +17646,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Smart Strike", pp: 10, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, secondary: null, target: "normal", type: "Steel", @@ -17671,7 +17668,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Smelling Salts", pp: 10, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, onHit(target) { if (target.status === 'par') target.cureStatus(); }, @@ -17688,7 +17685,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Smog", pp: 20, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 40, status: 'psn', @@ -17705,7 +17702,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Smokescreen", pp: 20, priority: 0, - flags: {protect: 1, reflectable: 1, mirror: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, metronome: 1}, boosts: { accuracy: -1, }, @@ -17792,7 +17789,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Snipe Shot", pp: 15, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, critRatio: 2, tracksTarget: true, secondary: null, @@ -17842,7 +17839,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Soak", pp: 20, priority: 0, - flags: {protect: 1, reflectable: 1, mirror: 1, allyanim: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, allyanim: 1, metronome: 1}, onHit(target) { if (target.getTypes().join() === 'Water' || !target.setType('Water')) { // Soak should animate even when it fails. @@ -17866,7 +17863,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Soft-Boiled", pp: 5, priority: 0, - flags: {snatch: 1, heal: 1}, + flags: {snatch: 1, heal: 1, metronome: 1}, heal: [1, 2], secondary: null, target: "self", @@ -17882,7 +17879,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Solar Beam", pp: 10, priority: 0, - flags: {charge: 1, protect: 1, mirror: 1, nosleeptalk: 1, failinstruct: 1}, + flags: {charge: 1, protect: 1, mirror: 1, metronome: 1, nosleeptalk: 1, failinstruct: 1}, onTryMove(attacker, defender, move) { if (attacker.removeVolatile(move.id)) { return; @@ -17919,7 +17916,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Solar Blade", pp: 10, priority: 0, - flags: {contact: 1, charge: 1, protect: 1, mirror: 1, slicing: 1, nosleeptalk: 1, failinstruct: 1}, + flags: {contact: 1, charge: 1, protect: 1, mirror: 1, metronome: 1, nosleeptalk: 1, failinstruct: 1, slicing: 1}, onTryMove(attacker, defender, move) { if (attacker.removeVolatile(move.id)) { return; @@ -17958,7 +17955,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Sonic Boom", pp: 20, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: null, target: "normal", type: "Normal", @@ -17988,7 +17985,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Spacial Rend", pp: 5, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, critRatio: 2, secondary: null, target: "normal", @@ -18003,7 +18000,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Spark", pp: 20, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 30, status: 'par', @@ -18020,7 +18017,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Sparkling Aria", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1, sound: 1, bypasssub: 1}, + flags: {protect: 1, mirror: 1, sound: 1, bypasssub: 1, metronome: 1}, secondary: { dustproof: true, chance: 100, @@ -18088,7 +18085,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Speed Swap", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1, bypasssub: 1, allyanim: 1}, + flags: {protect: 1, mirror: 1, bypasssub: 1, allyanim: 1, metronome: 1}, onHit(target, source) { const targetSpe = target.storedStats.spe; target.storedStats.spe = source.storedStats.spe; @@ -18127,7 +18124,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Spider Web", pp: 10, priority: 0, - flags: {protect: 1, reflectable: 1, mirror: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, metronome: 1}, onHit(target, source, move) { return target.addVolatile('trapped', source, move, 'trapper'); }, @@ -18146,7 +18143,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Spike Cannon", pp: 15, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, multihit: [2, 5], secondary: null, target: "normal", @@ -18162,7 +18159,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Spikes", pp: 20, priority: 0, - flags: {reflectable: 1, nonsky: 1, mustpressure: 1}, + flags: {reflectable: 1, nonsky: 1, metronome: 1, mustpressure: 1}, sideCondition: 'spikes', condition: { // this is a side condition @@ -18253,7 +18250,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Spin Out", pp: 5, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, self: { boosts: { spe: -2, @@ -18289,7 +18286,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Spirit Shackle", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 100, onHit(target, source, move) { @@ -18312,7 +18309,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Spit Up", pp: 10, priority: 0, - flags: {protect: 1}, + flags: {protect: 1, metronome: 1}, onTry(source) { return !!source.volatiles['stockpile']; }, @@ -18332,7 +18329,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Spite", pp: 10, priority: 0, - flags: {protect: 1, reflectable: 1, mirror: 1, bypasssub: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, bypasssub: 1, metronome: 1}, onHit(target) { let move: Move | ActiveMove | null = target.lastMove; if (!move || move.isZ) return false; @@ -18356,7 +18353,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Splash", pp: 40, priority: 0, - flags: {gravity: 1}, + flags: {gravity: 1, metronome: 1}, onTry(source, target, move) { // Additional Gravity check for Z-move variant if (this.field.getPseudoWeather('Gravity')) { @@ -18421,7 +18418,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Spore", pp: 15, priority: 0, - flags: {powder: 1, protect: 1, reflectable: 1, mirror: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, metronome: 1, powder: 1}, status: 'slp', secondary: null, target: "normal", @@ -18445,6 +18442,7 @@ export const Moves: {[moveid: string]: MoveData} = { }, condition: { duration: 1, + noCopy: true, // doesn't get copied by Baton Pass onStart(pokemon) { this.add('-singleturn', pokemon, 'move: Spotlight'); }, @@ -18488,7 +18486,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Stealth Rock", pp: 20, priority: 0, - flags: {reflectable: 1, mustpressure: 1}, + flags: {reflectable: 1, metronome: 1, mustpressure: 1}, sideCondition: 'stealthrock', condition: { // this is a side condition @@ -18534,7 +18532,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Steamroller", pp: 20, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 30, volatileStatus: 'flinch', @@ -18574,7 +18572,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Steel Roller", pp: 5, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, onTry() { return !this.field.isTerrain(''); }, @@ -18596,7 +18594,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Steel Wing", pp: 25, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 10, self: { @@ -18617,7 +18615,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Sticky Web", pp: 20, priority: 0, - flags: {reflectable: 1}, + flags: {reflectable: 1, metronome: 1}, sideCondition: 'stickyweb', condition: { onSideStart(side) { @@ -18626,7 +18624,7 @@ export const Moves: {[moveid: string]: MoveData} = { onEntryHazard(pokemon) { if (!pokemon.isGrounded() || pokemon.hasItem('heavydutyboots')) return; this.add('-activate', pokemon, 'move: Sticky Web'); - this.boost({spe: -1}, pokemon, this.effectState.source, this.dex.getActiveMove('stickyweb')); + this.boost({spe: -1}, pokemon, pokemon.side.foe.active[0], this.dex.getActiveMove('stickyweb')); }, }, secondary: null, @@ -18643,7 +18641,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Stockpile", pp: 20, priority: 0, - flags: {snatch: 1}, + flags: {snatch: 1, metronome: 1}, onTry(source) { if (source.volatiles['stockpile'] && source.volatiles['stockpile'].layers >= 3) return false; }, @@ -18716,7 +18714,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Stomp", pp: 20, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1, nonsky: 1}, + flags: {contact: 1, protect: 1, mirror: 1, nonsky: 1, metronome: 1}, secondary: { chance: 30, volatileStatus: 'flinch', @@ -18740,7 +18738,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Stomping Tantrum", pp: 10, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, secondary: null, target: "normal", type: "Ground", @@ -18754,7 +18752,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Stone Axe", pp: 15, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1, slicing: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1, slicing: 1}, onAfterHit(target, source, move) { if (!move.hasSheerForce && source.hp) { for (const side of source.side.foeSidesWithConditions()) { @@ -18781,7 +18779,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Stone Edge", pp: 5, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, critRatio: 2, secondary: null, target: "normal", @@ -18801,7 +18799,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Stored Power", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: null, target: "normal", type: "Psychic", @@ -18818,7 +18816,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Storm Throw", pp: 10, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, willCrit: true, secondary: null, target: "normal", @@ -18849,7 +18847,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Strength", pp: 15, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, secondary: null, target: "normal", type: "Normal", @@ -18863,7 +18861,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Strength Sap", pp: 10, priority: 0, - flags: {protect: 1, reflectable: 1, mirror: 1, heal: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, heal: 1, metronome: 1}, onHit(target, source) { if (target.boosts.atk === -6) return false; const atk = target.getStat('atk', false, true); @@ -18884,7 +18882,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "String Shot", pp: 40, priority: 0, - flags: {protect: 1, reflectable: 1, mirror: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, metronome: 1}, boosts: { spe: -2, }, @@ -18905,9 +18903,8 @@ export const Moves: {[moveid: string]: MoveData} = { priority: 0, flags: { contact: 1, protect: 1, - failencore: 1, failmefirst: 1, nosleeptalk: 1, noassist: 1, failcopycat: 1, failinstruct: 1, failmimic: 1, + failencore: 1, failmefirst: 1, nosleeptalk: 1, noassist: 1, failcopycat: 1, failmimic: 1, failinstruct: 1, nosketch: 1, }, - noSketch: true, onModifyMove(move, pokemon, target) { move.type = '???'; this.add('-activate', pokemon, 'move: Struggle'); @@ -18926,7 +18923,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Struggle Bug", pp: 20, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 100, boosts: { @@ -18945,7 +18942,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Stuff Cheeks", pp: 10, priority: 0, - flags: {snatch: 1}, + flags: {snatch: 1, metronome: 1}, onDisableMove(pokemon) { if (!pokemon.getItem().isBerry) pokemon.disableMove('stuffcheeks'); }, @@ -18968,7 +18965,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Stun Spore", pp: 30, priority: 0, - flags: {powder: 1, protect: 1, reflectable: 1, mirror: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, metronome: 1, powder: 1}, status: 'par', secondary: null, target: "normal", @@ -18985,7 +18982,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Submission", pp: 20, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, recoil: [1, 4], secondary: null, target: "normal", @@ -19000,7 +18997,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Substitute", pp: 10, priority: 0, - flags: {snatch: 1, nonsky: 1}, + flags: {snatch: 1, nonsky: 1, metronome: 1}, volatileStatus: 'substitute', onTryHit(source) { if (source.volatiles['substitute']) { @@ -19098,7 +19095,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Sucker Punch", pp: 5, priority: 1, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, onTry(source, target) { const action = this.queue.willMove(target); const move = action?.choice === 'move' ? action.move : null; @@ -19119,7 +19116,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Sunny Day", pp: 5, priority: 0, - flags: {}, + flags: {metronome: 1}, weather: 'sunnyday', secondary: null, target: "all", @@ -19150,7 +19147,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Supercell Slam", pp: 15, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, hasCrashDamage: true, onMoveFail(target, source, move) { this.damage(source.baseMaxhp / 2, source, source, this.dex.conditions.get('Supercell Slam')); @@ -19170,7 +19167,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Super Fang", pp: 10, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, secondary: null, target: "normal", type: "Normal", @@ -19184,7 +19181,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Superpower", pp: 5, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, self: { boosts: { atk: -1, @@ -19204,7 +19201,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Supersonic", pp: 20, priority: 0, - flags: {protect: 1, reflectable: 1, mirror: 1, sound: 1, bypasssub: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, sound: 1, bypasssub: 1, metronome: 1}, volatileStatus: 'confusion', secondary: null, target: "normal", @@ -19236,7 +19233,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Surf", pp: 15, priority: 0, - flags: {protect: 1, mirror: 1, nonsky: 1}, + flags: {protect: 1, mirror: 1, nonsky: 1, metronome: 1}, secondary: null, target: "allAdjacent", type: "Water", @@ -19250,7 +19247,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Surging Strikes", pp: 5, priority: 0, - flags: {contact: 1, protect: 1, punch: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, punch: 1}, willCrit: true, multihit: 3, secondary: null, @@ -19267,7 +19264,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Swagger", pp: 15, priority: 0, - flags: {protect: 1, reflectable: 1, mirror: 1, allyanim: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, allyanim: 1, metronome: 1}, volatileStatus: 'confusion', boosts: { atk: 2, @@ -19286,7 +19283,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Swallow", pp: 10, priority: 0, - flags: {snatch: 1, heal: 1}, + flags: {snatch: 1, heal: 1, metronome: 1}, onTry(source) { return !!source.volatiles['stockpile']; }, @@ -19311,7 +19308,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Sweet Kiss", pp: 10, priority: 0, - flags: {protect: 1, reflectable: 1, mirror: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, metronome: 1}, volatileStatus: 'confusion', secondary: null, target: "normal", @@ -19327,7 +19324,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Sweet Scent", pp: 20, priority: 0, - flags: {protect: 1, reflectable: 1, mirror: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, metronome: 1}, boosts: { evasion: -2, }, @@ -19345,7 +19342,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Swift", pp: 20, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: null, target: "allAdjacentFoes", type: "Normal", @@ -19407,7 +19404,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Swords Dance", pp: 20, priority: 0, - flags: {snatch: 1, dance: 1}, + flags: {snatch: 1, dance: 1, metronome: 1}, boosts: { atk: 2, }, @@ -19426,7 +19423,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Synchronoise", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, onTryImmunity(target, source) { return target.hasType(source.getTypes()); }, @@ -19443,7 +19440,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Synthesis", pp: 5, priority: 0, - flags: {snatch: 1, heal: 1}, + flags: {snatch: 1, heal: 1, metronome: 1}, onHit(pokemon) { let factor = 0.5; switch (pokemon.effectiveWeather()) { @@ -19480,16 +19477,21 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Syrup Bomb", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1, bullet: 1}, + flags: {protect: 1, mirror: 1, metronome: 1, bullet: 1}, condition: { noCopy: true, duration: 4, onStart(pokemon) { this.add('-start', pokemon, 'Syrup Bomb'); }, + onUpdate(pokemon) { + if (this.effectState.source && !this.effectState.source.isActive) { + pokemon.removeVolatile('syrupbomb'); + } + }, onResidualOrder: 14, - onResidual() { - this.boost({spe: -1}); + onResidual(pokemon) { + this.boost({spe: -1}, pokemon, this.effectState.source); }, onEnd(pokemon) { this.add('-end', pokemon, 'Syrup Bomb', '[silent]'); @@ -19510,7 +19512,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Tachyon Cutter", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1, slicing: 1}, + flags: {protect: 1, mirror: 1, metronome: 1, slicing: 1}, multihit: 2, secondary: null, target: "normal", @@ -19527,7 +19529,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Tackle", pp: 35, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, secondary: null, target: "normal", type: "Normal", @@ -19541,7 +19543,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Tail Glow", pp: 20, priority: 0, - flags: {snatch: 1}, + flags: {snatch: 1, metronome: 1}, boosts: { spa: 3, }, @@ -19559,7 +19561,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Tail Slap", pp: 10, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, multihit: [2, 5], secondary: null, target: "normal", @@ -19576,7 +19578,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Tail Whip", pp: 30, priority: 0, - flags: {protect: 1, reflectable: 1, mirror: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, metronome: 1}, boosts: { def: -1, }, @@ -19594,7 +19596,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Tailwind", pp: 15, priority: 0, - flags: {snatch: 1, wind: 1}, + flags: {snatch: 1, metronome: 1, wind: 1}, sideCondition: 'tailwind', condition: { duration: 4, @@ -19635,7 +19637,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Take Down", pp: 20, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, recoil: [1, 4], secondary: null, target: "normal", @@ -19650,7 +19652,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Take Heart", pp: 15, priority: 0, - flags: {snatch: 1}, + flags: {snatch: 1, metronome: 1}, onHit(pokemon) { const success = !!this.boost({spa: 1, spd: 1}); return pokemon.cureStatus() || success; @@ -19667,7 +19669,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Tar Shot", pp: 15, priority: 0, - flags: {protect: 1, reflectable: 1, mirror: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, metronome: 1}, volatileStatus: 'tarshot', condition: { onStart(pokemon) { @@ -19697,7 +19699,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Taunt", pp: 20, priority: 0, - flags: {protect: 1, reflectable: 1, mirror: 1, bypasssub: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, bypasssub: 1, metronome: 1}, volatileStatus: 'taunt', condition: { duration: 3, @@ -19741,7 +19743,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Tearful Look", pp: 20, priority: 0, - flags: {reflectable: 1, mirror: 1}, + flags: {reflectable: 1, mirror: 1, metronome: 1}, boosts: { atk: -1, spa: -1, @@ -19760,7 +19762,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Teatime", pp: 10, priority: 0, - flags: {bypasssub: 1}, + flags: {bypasssub: 1, metronome: 1}, onHitField(target, source, move) { const targets: Pokemon[] = []; for (const pokemon of this.getAllActive()) { @@ -19827,7 +19829,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Teeter Dance", pp: 20, priority: 0, - flags: {protect: 1, mirror: 1, dance: 1}, + flags: {protect: 1, mirror: 1, dance: 1, metronome: 1}, volatileStatus: 'confusion', secondary: null, target: "allAdjacent", @@ -19844,7 +19846,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Telekinesis", pp: 15, priority: 0, - flags: {protect: 1, reflectable: 1, mirror: 1, gravity: 1, allyanim: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, gravity: 1, allyanim: 1, metronome: 1}, volatileStatus: 'telekinesis', onTry(source, target, move) { // Additional Gravity check for Z-move variant @@ -19897,7 +19899,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Teleport", pp: 20, priority: -6, - flags: {}, + flags: {metronome: 1}, onTry(source) { return !!this.canSwitch(source.side); }, @@ -19923,7 +19925,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Temper Flare", pp: 10, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, secondary: null, target: "normal", type: "Fire", @@ -19936,13 +19938,13 @@ export const Moves: {[moveid: string]: MoveData} = { if (pokemon.terastallized === 'Stellar') { return 100; } - return 80; + return move.basePower; }, category: "Special", name: "Tera Blast", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1, mustpressure: 1}, + flags: {protect: 1, mirror: 1, metronome: 1, mustpressure: 1}, onPrepareHit(target, source, move) { if (source.terastallized) { this.attrLastMove('[anim] Tera Blast ' + source.teraType); @@ -19973,10 +19975,13 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Tera Starstorm", pp: 5, priority: 0, - flags: {protect: 1, mirror: 1, noassist: 1, failcopycat: 1, failmimic: 1}, + flags: {protect: 1, mirror: 1, noassist: 1, failcopycat: 1, failmimic: 1, nosketch: 1}, onModifyType(move, pokemon) { if (pokemon.species.name === 'Terapagos-Stellar') { move.type = 'Stellar'; + if (pokemon.terastallized && pokemon.getStat('atk', false, true) > pokemon.getStat('spa', false, true)) { + move.category = 'Physical'; + } } }, onModifyMove(move, pokemon) { @@ -19984,7 +19989,6 @@ export const Moves: {[moveid: string]: MoveData} = { move.target = 'allAdjacentFoes'; } }, - noSketch: true, secondary: null, target: "normal", type: "Normal", @@ -19997,7 +20001,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Terrain Pulse", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1, pulse: 1}, + flags: {protect: 1, mirror: 1, metronome: 1, pulse: 1}, onModifyType(move, pokemon) { if (!pokemon.isGrounded()) return; switch (this.field.terrain) { @@ -20109,7 +20113,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Thrash", pp: 10, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1, failinstruct: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1, failinstruct: 1}, self: { volatileStatus: 'lockedmove', }, @@ -20131,7 +20135,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Throat Chop", pp: 15, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, condition: { duration: 2, onStart(target) { @@ -20180,7 +20184,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Thunder", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, onModifyMove(move, pokemon, target) { switch (target?.effectiveWeather()) { case 'raindance': @@ -20209,7 +20213,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Thunderbolt", pp: 15, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 10, status: 'par', @@ -20240,7 +20244,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Thunderclap", pp: 5, priority: 1, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, onTry(source, target) { const action = this.queue.willMove(target); const move = action?.choice === 'move' ? action.move : null; @@ -20261,7 +20265,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Thunder Fang", pp: 15, priority: 0, - flags: {bite: 1, contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1, bite: 1}, secondaries: [ { chance: 10, @@ -20301,7 +20305,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Thunder Punch", pp: 15, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1, punch: 1}, + flags: {contact: 1, protect: 1, mirror: 1, punch: 1, metronome: 1}, secondary: { chance: 10, status: 'par', @@ -20318,7 +20322,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Thunder Shock", pp: 30, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 10, status: 'par', @@ -20335,7 +20339,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Thunder Wave", pp: 20, priority: 0, - flags: {protect: 1, reflectable: 1, mirror: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, metronome: 1}, status: 'par', ignoreImmunity: false, secondary: null, @@ -20352,7 +20356,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Tickle", pp: 20, priority: 0, - flags: {protect: 1, reflectable: 1, mirror: 1, allyanim: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, allyanim: 1, metronome: 1}, boosts: { atk: -1, def: -1, @@ -20402,7 +20406,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Topsy-Turvy", pp: 20, priority: 0, - flags: {protect: 1, reflectable: 1, mirror: 1, allyanim: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, allyanim: 1, metronome: 1}, onHit(target) { let success = false; let i: BoostID; @@ -20428,7 +20432,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Torch Song", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1, sound: 1, bypasssub: 1}, + flags: {protect: 1, mirror: 1, sound: 1, bypasssub: 1, metronome: 1}, secondary: { chance: 100, self: { @@ -20449,7 +20453,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Torment", pp: 15, priority: 0, - flags: {protect: 1, reflectable: 1, mirror: 1, bypasssub: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, bypasssub: 1, metronome: 1}, volatileStatus: 'torment', condition: { noCopy: true, @@ -20482,7 +20486,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Toxic", pp: 10, priority: 0, - flags: {protect: 1, reflectable: 1, mirror: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, metronome: 1}, // No Guard-like effect for Poison-type users implemented in Scripts#tryMoveHit status: 'tox', secondary: null, @@ -20499,7 +20503,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Toxic Spikes", pp: 20, priority: 0, - flags: {reflectable: 1, nonsky: 1, mustpressure: 1}, + flags: {reflectable: 1, nonsky: 1, metronome: 1, mustpressure: 1}, sideCondition: 'toxicspikes', condition: { // this is a side condition @@ -20540,7 +20544,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Toxic Thread", pp: 20, priority: 0, - flags: {protect: 1, reflectable: 1, mirror: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, metronome: 1}, status: 'psn', boosts: { spe: -1, @@ -20580,7 +20584,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Transform", pp: 10, priority: 0, - flags: {allyanim: 1, failencore: 1, noassist: 1, failcopycat: 1, failinstruct: 1, failmimic: 1}, + flags: {allyanim: 1, failencore: 1, noassist: 1, failcopycat: 1, failmimic: 1, failinstruct: 1}, onHit(target, pokemon) { if (!pokemon.transformInto(target)) { return false; @@ -20600,7 +20604,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Tri Attack", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 20, onHit(target, source) { @@ -20675,7 +20679,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Trick-or-Treat", pp: 20, priority: 0, - flags: {protect: 1, reflectable: 1, mirror: 1, allyanim: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, allyanim: 1, metronome: 1}, onHit(target) { if (target.hasType('Ghost')) return false; if (!target.addType('Ghost')) return false; @@ -20703,7 +20707,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Trick Room", pp: 5, priority: -7, - flags: {mirror: 1}, + flags: {mirror: 1, metronome: 1}, pseudoWeather: 'trickroom', condition: { duration: 5, @@ -20745,7 +20749,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Triple Arrows", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, critRatio: 2, secondaries: [ { @@ -20772,7 +20776,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Triple Axel", pp: 10, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, multihit: 3, multiaccuracy: true, secondary: null, @@ -20789,7 +20793,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Triple Dive", pp: 10, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, multihit: 3, secondary: null, target: "normal", @@ -20806,7 +20810,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Triple Kick", pp: 10, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, multihit: 3, multiaccuracy: true, secondary: null, @@ -20824,7 +20828,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Trop Kick", pp: 15, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 100, boosts: { @@ -20874,7 +20878,7 @@ export const Moves: {[moveid: string]: MoveData} = { pp: 5, noPPBoosts: true, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, secondary: null, target: "normal", type: "Normal", @@ -20906,7 +20910,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Twineedle", pp: 20, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, multihit: 2, secondary: { chance: 20, @@ -20941,7 +20945,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Twister", pp: 20, priority: 0, - flags: {protect: 1, mirror: 1, wind: 1}, + flags: {protect: 1, mirror: 1, metronome: 1, wind: 1}, secondary: { chance: 20, volatileStatus: 'flinch', @@ -20958,7 +20962,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "U-turn", pp: 20, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, selfSwitch: true, secondary: null, target: "normal", @@ -20973,8 +20977,8 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Upper Hand", pp: 15, priority: 3, - flags: {contact: 1, protect: 1, mirror: 1}, - onTryHit(target, pokemon) { + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, + onTry(source, target) { const action = this.queue.willMove(target); const move = action?.choice === 'move' ? action.move : null; if (!move || move.priority <= 0.1 || move.category === 'Status') { @@ -20996,7 +21000,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Uproar", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1, sound: 1, bypasssub: 1, nosleeptalk: 1, failinstruct: 1}, + flags: {protect: 1, mirror: 1, sound: 1, bypasssub: 1, metronome: 1, nosleeptalk: 1, failinstruct: 1}, self: { volatileStatus: 'uproar', }, @@ -21055,7 +21059,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Vacuum Wave", pp: 30, priority: 1, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: null, target: "normal", type: "Fighting", @@ -21113,7 +21117,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Venom Drench", pp: 20, priority: 0, - flags: {protect: 1, reflectable: 1, mirror: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, metronome: 1}, onHit(target, source, move) { if (target.status === 'psn' || target.status === 'tox') { return !!this.boost({atk: -1, spa: -1, spe: -1}, target, source, move); @@ -21134,7 +21138,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Venoshock", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, onBasePower(basePower, pokemon, target) { if (target.status === 'psn' || target.status === 'tox') { return this.chainModify(2); @@ -21153,7 +21157,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Victory Dance", pp: 10, priority: 0, - flags: {snatch: 1, dance: 1}, + flags: {snatch: 1, dance: 1, metronome: 1}, boosts: { atk: 1, def: 1, @@ -21171,7 +21175,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Vine Whip", pp: 25, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, secondary: null, target: "normal", type: "Grass", @@ -21185,7 +21189,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Vise Grip", pp: 30, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, secondary: null, target: "normal", type: "Normal", @@ -21200,7 +21204,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Vital Throw", pp: 10, priority: -1, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, secondary: null, target: "normal", type: "Fighting", @@ -21214,7 +21218,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Volt Switch", pp: 20, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, selfSwitch: true, secondary: null, target: "normal", @@ -21229,7 +21233,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Volt Tackle", pp: 15, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, recoil: [33, 100], secondary: { chance: 10, @@ -21255,7 +21259,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Wake-Up Slap", pp: 10, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, onHit(target) { if (target.status === 'slp') target.cureStatus(); }, @@ -21272,7 +21276,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Waterfall", pp: 15, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 20, volatileStatus: 'flinch', @@ -21289,7 +21293,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Water Gun", pp: 25, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: null, target: "normal", type: "Water", @@ -21304,13 +21308,13 @@ export const Moves: {[moveid: string]: MoveData} = { this.add('-combine'); return 150; } - return 80; + return move.basePower; }, category: "Special", name: "Water Pledge", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1, nonsky: 1, pledgecombo: 1}, + flags: {protect: 1, mirror: 1, nonsky: 1, metronome: 1, pledgecombo: 1}, onPrepareHit(target, source, move) { for (const action of this.queue) { if (action.choice !== 'move') continue; @@ -21375,7 +21379,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Water Pulse", pp: 20, priority: 0, - flags: {protect: 1, pulse: 1, mirror: 1, distance: 1}, + flags: {protect: 1, mirror: 1, distance: 1, metronome: 1, pulse: 1}, secondary: { chance: 20, volatileStatus: 'confusion', @@ -21399,7 +21403,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Water Shuriken", pp: 20, priority: 1, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, multihit: [2, 5], secondary: null, target: "normal", @@ -21415,7 +21419,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Water Sport", pp: 15, priority: 0, - flags: {nonsky: 1}, + flags: {nonsky: 1, metronome: 1}, pseudoWeather: 'watersport', condition: { duration: 5, @@ -21454,7 +21458,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Water Spout", pp: 5, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: null, target: "allAdjacentFoes", type: "Water", @@ -21468,7 +21472,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Wave Crash", pp: 10, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, recoil: [33, 100], secondary: null, target: "normal", @@ -21482,7 +21486,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Weather Ball", pp: 10, priority: 0, - flags: {bullet: 1, protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1, bullet: 1}, onModifyType(move, pokemon) { switch (pokemon.effectiveWeather()) { case 'sunnyday': @@ -21537,7 +21541,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Whirlpool", pp: 15, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, volatileStatus: 'partiallytrapped', secondary: null, target: "normal", @@ -21552,7 +21556,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Whirlwind", pp: 20, priority: -6, - flags: {reflectable: 1, mirror: 1, bypasssub: 1, allyanim: 1, wind: 1, noassist: 1, failcopycat: 1}, + flags: {reflectable: 1, mirror: 1, bypasssub: 1, allyanim: 1, metronome: 1, noassist: 1, failcopycat: 1, wind: 1}, forceSwitch: true, secondary: null, target: "normal", @@ -21568,7 +21572,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Wicked Blow", pp: 5, priority: 0, - flags: {contact: 1, protect: 1, punch: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, punch: 1}, willCrit: true, secondary: null, target: "normal", @@ -21584,9 +21588,9 @@ export const Moves: {[moveid: string]: MoveData} = { pp: 10, priority: 0, flags: { - protect: 1, failencore: 1, failmefirst: 1, nosleeptalk: 1, noassist: 1, failcopycat: 1, failinstruct: 1, failmimic: 1, + protect: 1, failencore: 1, failmefirst: 1, nosleeptalk: 1, noassist: 1, + failcopycat: 1, failmimic: 1, failinstruct: 1, nosketch: 1, }, - noSketch: true, secondary: { chance: 10, status: 'slp', @@ -21651,7 +21655,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Wildbolt Storm", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1, wind: 1}, + flags: {protect: 1, mirror: 1, metronome: 1, wind: 1}, onModifyMove(move, pokemon, target) { if (target && ['raindance', 'primordialsea'].includes(target.effectiveWeather())) { move.accuracy = true; @@ -21672,7 +21676,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Wild Charge", pp: 15, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, recoil: [1, 4], secondary: null, target: "normal", @@ -21687,7 +21691,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Will-O-Wisp", pp: 15, priority: 0, - flags: {protect: 1, reflectable: 1, mirror: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, metronome: 1}, status: 'brn', secondary: null, target: "normal", @@ -21703,7 +21707,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Wing Attack", pp: 35, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1, distance: 1}, + flags: {contact: 1, protect: 1, mirror: 1, distance: 1, metronome: 1}, secondary: null, target: "any", type: "Flying", @@ -21717,7 +21721,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Wish", pp: 10, priority: 0, - flags: {snatch: 1, heal: 1}, + flags: {snatch: 1, heal: 1, metronome: 1}, slotCondition: 'Wish', condition: { duration: 2, @@ -21748,7 +21752,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Withdraw", pp: 40, priority: 0, - flags: {snatch: 1}, + flags: {snatch: 1, metronome: 1}, boosts: { def: 1, }, @@ -21766,7 +21770,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Wonder Room", pp: 10, priority: 0, - flags: {mirror: 1}, + flags: {mirror: 1, metronome: 1}, pseudoWeather: 'wonderroom', condition: { duration: 5, @@ -21816,7 +21820,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Wood Hammer", pp: 15, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, recoil: [33, 100], secondary: null, target: "normal", @@ -21831,7 +21835,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Work Up", pp: 30, priority: 0, - flags: {snatch: 1}, + flags: {snatch: 1, metronome: 1}, boosts: { atk: 1, spa: 1, @@ -21850,7 +21854,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Worry Seed", pp: 10, priority: 0, - flags: {protect: 1, reflectable: 1, mirror: 1, allyanim: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, allyanim: 1, metronome: 1}, onTryImmunity(target) { // Truant and Insomnia have special treatment; they fail before // checking accuracy and will double Stomping Tantrum's BP @@ -21859,7 +21863,7 @@ export const Moves: {[moveid: string]: MoveData} = { } }, onTryHit(target) { - if (target.getAbility().isPermanent) { + if (target.getAbility().flags['cantsuppress']) { return false; } }, @@ -21888,7 +21892,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Wrap", pp: 20, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, volatileStatus: 'partiallytrapped', secondary: null, target: "normal", @@ -21911,7 +21915,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Wring Out", pp: 5, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, secondary: null, target: "normal", type: "Normal", @@ -21927,7 +21931,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "X-Scissor", pp: 15, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1, slicing: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1, slicing: 1}, secondary: null, target: "normal", type: "Bug", @@ -21941,7 +21945,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Yawn", pp: 10, priority: 0, - flags: {protect: 1, reflectable: 1, mirror: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, metronome: 1}, volatileStatus: 'yawn', onTryHit(target) { if (target.status || !target.runStatusImmunity('slp')) { @@ -21974,7 +21978,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Zap Cannon", pp: 5, priority: 0, - flags: {bullet: 1, protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1, bullet: 1}, secondary: { chance: 100, status: 'par', @@ -21991,7 +21995,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Zen Headbutt", pp: 15, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 20, volatileStatus: 'flinch', @@ -22008,7 +22012,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Zing Zap", pp: 10, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 30, volatileStatus: 'flinch', @@ -22039,4 +22043,47 @@ export const Moves: {[moveid: string]: MoveData} = { type: "Electric", contestType: "Cool", }, + + // CAP moves + + paleowave: { + num: 0, + accuracy: 100, + basePower: 85, + category: "Special", + isNonstandard: "CAP", + name: "Paleo Wave", + pp: 15, + priority: 0, + flags: {protect: 1, mirror: 1}, + secondary: { + chance: 20, + boosts: { + atk: -1, + }, + }, + target: "normal", + type: "Rock", + contestType: "Beautiful", + }, + shadowstrike: { + num: 0, + accuracy: 95, + basePower: 80, + category: "Physical", + isNonstandard: "CAP", + name: "Shadow Strike", + pp: 10, + priority: 0, + flags: {contact: 1, protect: 1, mirror: 1}, + secondary: { + chance: 50, + boosts: { + def: -1, + }, + }, + target: "normal", + type: "Ghost", + contestType: "Clever", + }, }; diff --git a/data/natures.ts b/data/natures.ts index 0f44111dd866..d7fc4a80a705 100644 --- a/data/natures.ts +++ b/data/natures.ts @@ -1,4 +1,4 @@ -export const Natures: {[k: string]: NatureData} = { +export const Natures: import('../sim/dex-data').NatureDataTable = { adamant: { name: "Adamant", plus: 'atk', diff --git a/data/pokedex.ts b/data/pokedex.ts index 954dd9a4bfa2..2c7c00af8ef0 100644 --- a/data/pokedex.ts +++ b/data/pokedex.ts @@ -1,4 +1,4 @@ -export const Pokedex: {[speciesid: string]: SpeciesData} = { +export const Pokedex: import('../sim/dex-species').SpeciesDataTable = { bulbasaur: { num: 1, name: "Bulbasaur", @@ -937,6 +937,7 @@ export const Pokedex: {[speciesid: string]: SpeciesData} = { color: "Purple", evos: ["Nidorino"], eggGroups: ["Monster", "Field"], + mother: 'nidoranf', }, nidorino: { num: 33, @@ -5823,6 +5824,7 @@ export const Pokedex: {[speciesid: string]: SpeciesData} = { weightkg: 17.7, color: "Gray", eggGroups: ["Bug", "Human-Like"], + mother: 'illumise', }, illumise: { num: 314, @@ -8588,7 +8590,7 @@ export const Pokedex: {[speciesid: string]: SpeciesData} = { abilities: {0: "Pressure", H: "Telepathy"}, heightm: 7, weightkg: 850, - color: "White", + color: "Blue", eggGroups: ["Undiscovered"], requiredItem: "Adamant Crystal", changesFrom: "Dialga", @@ -12451,6 +12453,7 @@ export const Pokedex: {[speciesid: string]: SpeciesData} = { color: "Purple", prevo: "Sliggoo", evoLevel: 50, + evoCondition: "during rain", eggGroups: ["Dragon"], otherFormes: ["Goodra-Hisui"], formeOrder: ["Goodra", "Goodra-Hisui"], @@ -12468,6 +12471,7 @@ export const Pokedex: {[speciesid: string]: SpeciesData} = { color: "Purple", prevo: "Sliggoo-Hisui", evoLevel: 50, + evoCondition: "during rain", eggGroups: ["Dragon"], }, klefki: { @@ -13323,7 +13327,7 @@ export const Pokedex: {[speciesid: string]: SpeciesData} = { color: "Brown", prevo: "Rockruff", evoLevel: 25, - evoCondition: "from a special Rockruff", + evoCondition: "from a special Rockruff during the evening", eggGroups: ["Field"], }, wishiwashi: { @@ -14374,7 +14378,7 @@ export const Pokedex: {[speciesid: string]: SpeciesData} = { heightm: 1.2, weightkg: 55.5, color: "White", - tags: ["Sub-Legendary"], + tags: ["Ultra Beast"], eggGroups: ["Undiscovered"], }, buzzwole: { @@ -14387,7 +14391,7 @@ export const Pokedex: {[speciesid: string]: SpeciesData} = { heightm: 2.4, weightkg: 333.6, color: "Red", - tags: ["Sub-Legendary"], + tags: ["Ultra Beast"], eggGroups: ["Undiscovered"], }, pheromosa: { @@ -14400,7 +14404,7 @@ export const Pokedex: {[speciesid: string]: SpeciesData} = { heightm: 1.8, weightkg: 25, color: "White", - tags: ["Sub-Legendary"], + tags: ["Ultra Beast"], eggGroups: ["Undiscovered"], }, xurkitree: { @@ -14413,7 +14417,7 @@ export const Pokedex: {[speciesid: string]: SpeciesData} = { heightm: 3.8, weightkg: 100, color: "Black", - tags: ["Sub-Legendary"], + tags: ["Ultra Beast"], eggGroups: ["Undiscovered"], }, celesteela: { @@ -14426,7 +14430,7 @@ export const Pokedex: {[speciesid: string]: SpeciesData} = { heightm: 9.2, weightkg: 999.9, color: "Green", - tags: ["Sub-Legendary"], + tags: ["Ultra Beast"], eggGroups: ["Undiscovered"], }, kartana: { @@ -14439,7 +14443,7 @@ export const Pokedex: {[speciesid: string]: SpeciesData} = { heightm: 0.3, weightkg: 0.1, color: "White", - tags: ["Sub-Legendary"], + tags: ["Ultra Beast"], eggGroups: ["Undiscovered"], }, guzzlord: { @@ -14452,7 +14456,7 @@ export const Pokedex: {[speciesid: string]: SpeciesData} = { heightm: 5.5, weightkg: 888, color: "Black", - tags: ["Sub-Legendary"], + tags: ["Ultra Beast"], eggGroups: ["Undiscovered"], }, necrozma: { @@ -14568,7 +14572,7 @@ export const Pokedex: {[speciesid: string]: SpeciesData} = { heightm: 0.6, weightkg: 1.8, color: "Purple", - tags: ["Sub-Legendary"], + tags: ["Ultra Beast"], evos: ["Naganadel"], eggGroups: ["Undiscovered"], }, @@ -14582,7 +14586,7 @@ export const Pokedex: {[speciesid: string]: SpeciesData} = { heightm: 3.6, weightkg: 150, color: "Purple", - tags: ["Sub-Legendary"], + tags: ["Ultra Beast"], prevo: "Poipole", evoType: "levelMove", evoMove: "Dragon Pulse", @@ -14598,7 +14602,7 @@ export const Pokedex: {[speciesid: string]: SpeciesData} = { heightm: 5.5, weightkg: 820, color: "Gray", - tags: ["Sub-Legendary"], + tags: ["Ultra Beast"], eggGroups: ["Undiscovered"], }, blacephalon: { @@ -14611,7 +14615,7 @@ export const Pokedex: {[speciesid: string]: SpeciesData} = { heightm: 1.8, weightkg: 13, color: "White", - tags: ["Sub-Legendary"], + tags: ["Ultra Beast"], eggGroups: ["Undiscovered"], }, zeraora: { @@ -15796,7 +15800,7 @@ export const Pokedex: {[speciesid: string]: SpeciesData} = { abilities: {0: "Sweet Veil", H: "Aroma Veil"}, heightm: 30, weightkg: 0, - color: "White", + color: "Yellow", eggGroups: ["Fairy", "Amorphous"], changesFrom: "Alcremie", }, @@ -15902,6 +15906,7 @@ export const Pokedex: {[speciesid: string]: SpeciesData} = { eggGroups: ["Fairy"], otherFormes: ["Indeedee-F"], formeOrder: ["Indeedee", "Indeedee-F"], + mother: 'indeedeef', }, indeedeef: { num: 876, @@ -16415,7 +16420,7 @@ export const Pokedex: {[speciesid: string]: SpeciesData} = { abilities: {0: "Intimidate", 1: "Frisk", H: "Sap Sipper"}, heightm: 1.8, weightkg: 95.1, - color: "White", + color: "Gray", prevo: "Stantler", evoType: "other", evoCondition: "Use Agile style Psyshield Bash 20 times", @@ -16431,7 +16436,7 @@ export const Pokedex: {[speciesid: string]: SpeciesData} = { weightkg: 89, color: "Brown", prevo: "Scyther", - evoType: "other", + evoType: "useItem", evoCondition: "Black Augurite", eggGroups: ["Bug"], }, @@ -16509,7 +16514,7 @@ export const Pokedex: {[speciesid: string]: SpeciesData} = { abilities: {0: "Pressure", 1: "Unburden", H: "Poison Touch"}, heightm: 1.3, weightkg: 43, - color: "Purple", + color: "Blue", prevo: "Sneasel-Hisui", evoType: "levelHold", evoItem: "Razor Claw", @@ -16524,7 +16529,7 @@ export const Pokedex: {[speciesid: string]: SpeciesData} = { abilities: {0: "Poison Point", 1: "Swift Swim", H: "Intimidate"}, heightm: 2.5, weightkg: 60.5, - color: "Gray", + color: "Black", prevo: "Qwilfish-Hisui", evoType: "other", evoCondition: "Use Strong style Barb Barrage 20 times", @@ -17058,7 +17063,7 @@ export const Pokedex: {[speciesid: string]: SpeciesData} = { abilities: {0: "Flash Fire", H: "Weak Armor"}, heightm: 1.6, weightkg: 62, - color: "Blue", + color: "Purple", prevo: "Charcadet", evoType: "useItem", evoItem: "Malicious Armor", @@ -17591,7 +17596,7 @@ export const Pokedex: {[speciesid: string]: SpeciesData} = { abilities: {0: "Commander", H: "Storm Drain"}, heightm: 0.3, weightkg: 8, - color: "Pink", + color: "Red", cosmeticFormes: ["Tatsugiri-Droopy", "Tatsugiri-Stretchy"], formeOrder: ["Tatsugiri", "Tatsugiri-Droopy", "Tatsugiri-Stretchy"], eggGroups: ["Water 2"], @@ -17719,7 +17724,7 @@ export const Pokedex: {[speciesid: string]: SpeciesData} = { abilities: {0: "Protosynthesis"}, heightm: 1.2, weightkg: 21, - color: "Gray", + color: "White", tags: ["Paradox"], eggGroups: ["Undiscovered"], }, @@ -17745,7 +17750,7 @@ export const Pokedex: {[speciesid: string]: SpeciesData} = { abilities: {0: "Protosynthesis"}, heightm: 3.2, weightkg: 92, - color: "Red", + color: "White", tags: ["Paradox"], eggGroups: ["Undiscovered"], }, @@ -17823,7 +17828,7 @@ export const Pokedex: {[speciesid: string]: SpeciesData} = { abilities: {0: "Quark Drive"}, heightm: 1.2, weightkg: 36, - color: "Yellow", + color: "White", tags: ["Paradox"], eggGroups: ["Undiscovered"], }, @@ -17860,7 +17865,7 @@ export const Pokedex: {[speciesid: string]: SpeciesData} = { abilities: {0: "Thermal Exchange", H: "Ice Body"}, heightm: 0.8, weightkg: 30, - color: "Gray", + color: "Blue", prevo: "Frigibax", evoLevel: 35, evos: ["Baxcalibur"], @@ -17874,7 +17879,7 @@ export const Pokedex: {[speciesid: string]: SpeciesData} = { abilities: {0: "Thermal Exchange", H: "Ice Body"}, heightm: 2.1, weightkg: 210, - color: "Gray", + color: "Blue", prevo: "Arctibax", evoLevel: 54, eggGroups: ["Dragon", "Mineral"], @@ -17889,7 +17894,7 @@ export const Pokedex: {[speciesid: string]: SpeciesData} = { abilities: {0: "Rattled"}, heightm: 0.3, weightkg: 5, - color: "Brown", + color: "Red", evos: ["Gholdengo"], otherFormes: ["Gimmighoul-Roaming"], formeOrder: ["Gimmighoul", "Gimmighoul-Roaming"], @@ -17906,7 +17911,7 @@ export const Pokedex: {[speciesid: string]: SpeciesData} = { abilities: {0: "Run Away"}, heightm: 0.1, weightkg: 0.1, - color: "Blue", + color: "Gray", evos: ["Gholdengo"], eggGroups: ["Undiscovered"], }, @@ -17986,7 +17991,7 @@ export const Pokedex: {[speciesid: string]: SpeciesData} = { abilities: {0: "Protosynthesis"}, heightm: 2, weightkg: 380, - color: "Green", + color: "Blue", tags: ["Paradox"], eggGroups: ["Undiscovered"], }, @@ -18025,7 +18030,7 @@ export const Pokedex: {[speciesid: string]: SpeciesData} = { abilities: {0: "Hadron Engine"}, heightm: 3.5, weightkg: 240, - color: "Blue", + color: "Purple", tags: ["Restricted Legendary"], eggGroups: ["Undiscovered"], }, @@ -18146,6 +18151,7 @@ export const Pokedex: {[speciesid: string]: SpeciesData} = { heightm: 1.8, weightkg: 92, color: "Black", + tags: ["Sub-Legendary"], eggGroups: ["Undiscovered"], }, munkidori: { @@ -18158,6 +18164,7 @@ export const Pokedex: {[speciesid: string]: SpeciesData} = { heightm: 1, weightkg: 12.2, color: "Black", + tags: ["Sub-Legendary"], eggGroups: ["Undiscovered"], }, fezandipiti: { @@ -18170,6 +18177,7 @@ export const Pokedex: {[speciesid: string]: SpeciesData} = { heightm: 1.4, weightkg: 30.1, color: "Black", + tags: ["Sub-Legendary"], eggGroups: ["Undiscovered"], }, ogerpon: { @@ -18183,6 +18191,7 @@ export const Pokedex: {[speciesid: string]: SpeciesData} = { heightm: 1.2, weightkg: 39.8, color: "Green", + tags: ["Sub-Legendary"], eggGroups: ["Undiscovered"], otherFormes: ["Ogerpon-Wellspring", "Ogerpon-Hearthflame", "Ogerpon-Cornerstone", "Ogerpon-Teal-Tera", "Ogerpon-Wellspring-Tera", "Ogerpon-Hearthflame-Tera", "Ogerpon-Cornerstone-Tera"], formeOrder: ["Ogerpon", "Ogerpon-Wellspring", "Ogerpon-Hearthflame", "Ogerpon-Cornerstone", "Ogerpon-Teal-Tera", "Ogerpon-Wellspring-Tera", "Ogerpon-Hearthflame-Tera", "Ogerpon-Cornerstone-Tera"], @@ -18199,7 +18208,7 @@ export const Pokedex: {[speciesid: string]: SpeciesData} = { abilities: {0: "Water Absorb"}, heightm: 1.2, weightkg: 39.8, - color: "Green", + color: "Blue", eggGroups: ["Undiscovered"], requiredItem: "Wellspring Mask", changesFrom: "Ogerpon", @@ -18266,7 +18275,7 @@ export const Pokedex: {[speciesid: string]: SpeciesData} = { abilities: {0: "Embody Aspect (Wellspring)"}, heightm: 1.2, weightkg: 39.8, - color: "Green", + color: "Blue", eggGroups: ["Undiscovered"], requiredItem: "Wellspring Mask", battleOnly: "Ogerpon-Wellspring", @@ -18344,7 +18353,6 @@ export const Pokedex: {[speciesid: string]: SpeciesData} = { heightm: 3.5, weightkg: 590, color: "Brown", - tags: ["Paradox"], eggGroups: ["Undiscovered"], }, ragingbolt: { @@ -18357,7 +18365,6 @@ export const Pokedex: {[speciesid: string]: SpeciesData} = { heightm: 5.2, weightkg: 480, color: "Yellow", - tags: ["Paradox"], eggGroups: ["Undiscovered"], }, ironboulder: { @@ -18370,7 +18377,6 @@ export const Pokedex: {[speciesid: string]: SpeciesData} = { heightm: 1.5, weightkg: 162.5, color: "Gray", - tags: ["Paradox"], eggGroups: ["Undiscovered"], }, ironcrown: { @@ -18383,7 +18389,6 @@ export const Pokedex: {[speciesid: string]: SpeciesData} = { heightm: 1.6, weightkg: 156, color: "Blue", - tags: ["Paradox"], eggGroups: ["Undiscovered"], }, terapagos: { @@ -18412,7 +18417,6 @@ export const Pokedex: {[speciesid: string]: SpeciesData} = { heightm: 0.3, weightkg: 16, color: "Blue", - tags: ["Restricted Legendary"], eggGroups: ["Undiscovered"], battleOnly: "Terapagos", forceTeraType: "Stellar", @@ -18428,7 +18432,6 @@ export const Pokedex: {[speciesid: string]: SpeciesData} = { heightm: 1.7, weightkg: 77, color: "Blue", - tags: ["Restricted Legendary"], eggGroups: ["Undiscovered"], battleOnly: "Terapagos", forceTeraType: "Stellar", @@ -18641,8 +18644,8 @@ export const Pokedex: {[speciesid: string]: SpeciesData} = { num: -14, name: "Kitsunoh", types: ["Ghost", "Steel"], - baseStats: {hp: 80, atk: 103, def: 85, spa: 55, spd: 80, spe: 110}, - abilities: {0: "Frisk", 1: "Limber", H: "Iron Fist"}, + baseStats: {hp: 80, atk: 117, def: 85, spa: 55, spd: 80, spe: 128}, + abilities: {0: "Frisk", 1: "Limber", H: "Trace"}, heightm: 1.1, weightkg: 51, color: "Gray", @@ -19491,12 +19494,24 @@ export const Pokedex: {[speciesid: string]: SpeciesData} = { num: -72, name: "Cresceidon", types: ["Water", "Fairy"], - baseStats: {hp: 80, atk: 32, def: 111, spa: 88, spd: 99, spe: 125}, - abilities: {0: "Multiscale", 1: "Rough Skin"}, + baseStats: {hp: 80, atk: 32, def: 111, spa: 88, spd: 99, spe: 124}, + abilities: {0: "Multiscale", 1: "Rough Skin", H: "Water Veil"}, heightm: 10, weightkg: 999.9, color: "Blue", - eggGroups: ["Undiscovered"], + eggGroups: ["Amorphous", "Water 3"], + gen: 9, + }, + chuggalong: { + num: -75, + name: "Chuggalong", + types: ["Dragon", "Poison"], + baseStats: {hp: 45, atk: 43, def: 117, spa: 120, spd: 110, spe: 108}, + abilities: {0: "Armor Tail", 1: "White Smoke", H: "Slow Start"}, + heightm: 6.2, + weightkg: 201.6, + color: "Black", + eggGroups: ["Dragon", "Mineral"], gen: 9, }, // NOTE: PokeStar "formes" are not actually formes and thus do not have a formeOrder diff --git a/data/pokemongo.ts b/data/pokemongo.ts index e56aaa272d7a..3c45b5b83663 100644 --- a/data/pokemongo.ts +++ b/data/pokemongo.ts @@ -26,7 +26,7 @@ * - Shadow Pokemon: most can also be obtained from the wild, and those that can't are from defeating Giovanni, which * is handled as as its own encounter */ -export const PokemonGoData: {[source: string]: PokemonGoData} = { +export const PokemonGoData: import('../sim/dex-species').PokemonGoDataTable = { bulbasaur: {encounters: ['wild']}, ivysaur: {encounters: ['wild']}, venusaur: {encounters: ['wild']}, diff --git a/data/mods/gen1/random-data.json b/data/random-battles/gen1/data.json similarity index 88% rename from data/mods/gen1/random-data.json rename to data/random-battles/gen1/data.json index cea42771582b..f30fee40c40e 100644 --- a/data/mods/gen1/random-data.json +++ b/data/random-battles/gen1/data.json @@ -1,25 +1,25 @@ { "bulbasaur": { - "level": 88, + "level": 89, "moves": ["bodyslam", "razorleaf", "sleeppowder", "swordsdance"] }, "ivysaur": { - "level": 79, + "level": 80, "moves": ["bodyslam", "razorleaf", "sleeppowder", "swordsdance"] }, "venusaur": { - "level": 73, - "moves": ["hyperbeam", "sleeppowder", "swordsdance"], - "essentialMoves": ["bodyslam", "razorleaf"] + "level": 74, + "moves": ["bodyslam", "razorleaf", "sleeppowder"], + "exclusiveMoves": ["hyperbeam", "swordsdance", "swordsdance"] }, "charmander": { - "level": 94, + "level": 90, "moves": ["counter", "seismictoss", "seismictoss", "slash", "slash"], "essentialMoves": ["bodyslam", "fireblast"], "comboMoves": ["bodyslam", "fireblast", "submission", "swordsdance"] }, "charmeleon": { - "level": 83, + "level": 81, "moves": ["counter", "seismictoss", "seismictoss", "slash", "slash"], "essentialMoves": ["bodyslam", "fireblast"], "comboMoves": ["bodyslam", "fireblast", "submission", "swordsdance"] @@ -30,13 +30,13 @@ "comboMoves": ["earthquake", "fireblast", "hyperbeam", "swordsdance"] }, "squirtle": { - "level": 91, + "level": 90, "moves": ["bodyslam", "counter"], "essentialMoves": ["blizzard", "seismictoss"], "exclusiveMoves": ["hydropump", "surf", "surf"] }, "wartortle": { - "level": 83, + "level": 82, "moves": ["counter", "rest", "seismictoss"], "essentialMoves": ["blizzard", "bodyslam"], "exclusiveMoves": ["hydropump", "surf", "surf"] @@ -48,58 +48,58 @@ "exclusiveMoves": ["hydropump", "surf", "surf"] }, "butterfree": { - "level": 79, + "level": 77, "moves": ["psychic", "sleeppowder", "stunspore"], - "exclusiveMoves": ["hyperbeam", "megadrain", "psywave", "substitute"] + "exclusiveMoves": ["doubleedge", "hyperbeam", "megadrain", "substitute"] }, "beedrill": { - "level": 86, + "level": 81, "moves": ["hyperbeam", "swordsdance", "twineedle"], "exclusiveMoves": ["agility", "agility", "megadrain"] }, "pidgey": { - "level": 97, - "moves": ["mimic", "mirrormove", "sandattack", "substitute"], - "essentialMoves": ["agility", "doubleedge"], - "exclusiveMoves": ["quickattack", "skyattack"], + "level": 90, + "moves": ["agility", "agility", "quickattack", "quickattack", "skyattack"], + "essentialMoves": ["doubleedge"], + "exclusiveMoves": ["mirrormove", "sandattack", "substitute"], "comboMoves": ["agility", "doubleedge", "quickattack", "skyattack"] }, "pidgeotto": { - "level": 88, - "moves": ["mimic", "mirrormove", "sandattack", "substitute"], - "essentialMoves": ["agility", "doubleedge"], - "exclusiveMoves": ["quickattack", "skyattack"], + "level": 82, + "moves": ["agility", "agility", "quickattack", "quickattack", "skyattack"], + "essentialMoves": ["doubleedge"], + "exclusiveMoves": ["mirrormove", "sandattack", "substitute"], "comboMoves": ["agility", "doubleedge", "quickattack", "skyattack"] }, "pidgeot": { - "level": 78, + "level": 76, "moves": ["agility", "doubleedge", "hyperbeam"], - "exclusiveMoves": ["mimic", "mirrormove", "reflect", "sandattack", "skyattack", "skyattack", "substitute", "quickattack", "quickattack", "quickattack"] + "exclusiveMoves": ["mirrormove", "reflect", "sandattack", "skyattack", "skyattack", "substitute", "quickattack", "quickattack", "quickattack"] }, "rattata": { - "level": 91, + "level": 89, "moves": ["blizzard", "bodyslam", "superfang"], "exclusiveMoves": ["doubleedge", "thunderbolt", "thunderbolt", "thunderbolt", "quickattack", "quickattack"] }, "raticate": { - "level": 76, + "level": 75, "moves": ["blizzard", "bodyslam", "hyperbeam", "superfang"] }, "spearow": { - "level": 92, + "level": 89, "moves": ["agility", "doubleedge", "drillpeck"], "exclusiveMoves": ["leer", "mimic", "mirrormove", "substitute"] }, "fearow": { - "level": 76, + "level": 75, "moves": ["agility", "doubleedge", "drillpeck", "hyperbeam"] }, "ekans": { - "level": 94, + "level": 90, "moves": ["bodyslam", "earthquake", "glare", "rockslide"] }, "arbok": { - "level": 82, + "level": 78, "moves": ["earthquake", "glare", "hyperbeam"], "exclusiveMoves": ["bodyslam", "rockslide", "rockslide"] }, @@ -118,17 +118,16 @@ "moves": ["bodyslam", "earthquake", "rockslide", "swordsdance"] }, "sandslash": { - "level": 77, - "moves": ["bodyslam", "earthquake", "rockslide"], - "exclusiveMoves": ["slash", "swordsdance", "swordsdance", "swordsdance"] + "level": 76, + "moves": ["bodyslam", "earthquake", "rockslide", "swordsdance"] }, "nidoranf": { - "level": 94, + "level": 90, "moves": ["blizzard", "bodyslam", "thunderbolt"], "exclusiveMoves": ["doubleedge", "doublekick"] }, "nidorina": { - "level": 87, + "level": 82, "moves": ["blizzard", "bodyslam", "thunderbolt"], "exclusiveMoves": ["bubblebeam", "doubleedge", "doublekick"] }, @@ -138,17 +137,17 @@ "exclusiveMoves": ["bodyslam", "bodyslam", "substitute"] }, "nidoranm": { - "level": 94, + "level": 90, "moves": ["blizzard", "bodyslam", "thunderbolt"], "exclusiveMoves": ["doubleedge", "doublekick"] }, "nidorino": { - "level": 85, + "level": 82, "moves": ["blizzard", "bodyslam", "thunderbolt"], "exclusiveMoves": ["bubblebeam", "doubleedge", "doublekick"] }, "nidoking": { - "level": 73, + "level": 74, "moves": ["rockslide", "thunderbolt", "thunderbolt"], "essentialMoves": ["blizzard", "earthquake"], "exclusiveMoves": ["bodyslam", "bodyslam", "substitute"] @@ -166,7 +165,7 @@ "exclusiveMoves": ["blizzard", "counter", "hyperbeam", "hyperbeam", "psychic", "sing", "sing"] }, "vulpix": { - "level": 92, + "level": 88, "moves": ["bodyslam", "confuseray", "fireblast"], "exclusiveMoves": ["flamethrower", "flamethrower", "quickattack", "reflect", "substitute", "substitute"] }, @@ -176,13 +175,13 @@ "exclusiveMoves": ["flamethrower", "hyperbeam", "reflect", "substitute", "substitute"] }, "jigglypuff": { - "level": 91, + "level": 89, "moves": ["blizzard", "bodyslam", "seismictoss"], "essentialMoves": ["thunderwave"], "exclusiveMoves": ["counter", "sing", "thunderwave"] }, "wigglytuff": { - "level": 77, + "level": 76, "moves": ["blizzard", "bodyslam", "thunderwave"], "exclusiveMoves": ["counter", "hyperbeam", "sing"] }, @@ -192,11 +191,11 @@ "exclusiveMoves": ["substitute", "substitute", "wingattack"] }, "golbat": { - "level": 80, + "level": 78, "moves": ["confuseray", "doubleedge", "hyperbeam", "megadrain"] }, "oddish": { - "level": 89, + "level": 90, "moves": ["doubleedge", "megadrain", "sleeppowder"], "exclusiveMoves": ["stunspore", "stunspore", "swordsdance"] }, @@ -216,17 +215,17 @@ "exclusiveMoves": ["stunspore", "stunspore", "swordsdance"] }, "parasect": { - "level": 78, + "level": 77, "moves": ["bodyslam", "megadrain", "spore"], "exclusiveMoves": ["hyperbeam", "slash", "stunspore", "stunspore", "stunspore", "swordsdance", "swordsdance"] }, "venonat": { "level": 88, "moves": ["psychic", "sleeppowder", "stunspore"], - "exclusiveMoves": ["doubleedge", "megadrain", "psywave"] + "exclusiveMoves": ["doubleedge", "megadrain"] }, "venomoth": { - "level": 73, + "level": 74, "moves": ["psychic", "sleeppowder", "stunspore"], "exclusiveMoves": ["doubleedge", "megadrain"] }, @@ -241,14 +240,13 @@ "exclusiveMoves": ["bodyslam", "substitute"] }, "meowth": { - "level": 86, - "moves": ["bodyslam", "bubblebeam", "slash"], - "exclusiveMoves": ["thunder", "thunderbolt"] + "level": 85, + "moves": ["bodyslam", "bubblebeam", "slash", "thunderbolt"] }, "persian": { "level": 73, "moves": ["bodyslam", "bubblebeam", "slash"], - "exclusiveMoves": ["hyperbeam", "hyperbeam", "thunder", "thunderbolt"] + "exclusiveMoves": ["hyperbeam", "thunderbolt"] }, "psyduck": { "level": 89, @@ -261,23 +259,23 @@ "exclusiveMoves": ["bodyslam", "hydropump", "rest", "rest", "seismictoss"] }, "mankey": { - "level": 91, + "level": 89, "moves": ["bodyslam", "rockslide", "submission"], "exclusiveMoves": ["counter", "lowkick", "megakick"] }, "primeape": { - "level": 78, + "level": 76, "moves": ["rockslide", "rockslide", "rockslide", "thunderbolt"], "essentialMoves": ["bodyslam", "submission"], "exclusiveMoves": ["counter", "lowkick", "hyperbeam", "hyperbeam"] }, "growlithe": { - "level": 94, - "moves": ["agility", "flamethrower", "reflect"], - "essentialMoves": ["bodyslam", "fireblast"] + "level": 89, + "moves": ["agility", "bodyslam", "fireblast"], + "exclusiveMoves": ["flamethrower", "reflect"] }, "arcanine": { - "level": 76, + "level": 75, "moves": ["bodyslam", "fireblast", "hyperbeam"], "exclusiveMoves": ["agility", "agility", "flamethrower", "flamethrower", "reflect", "rest"] }, @@ -287,49 +285,48 @@ "exclusiveMoves": ["hypnosis", "hypnosis", "hypnosis", "psychic"] }, "poliwhirl": { - "level": 77, + "level": 79, "moves": ["amnesia", "blizzard", "surf"], - "exclusiveMoves": ["counter", "hypnosis", "hypnosis", "hypnosis", "psychic"] + "exclusiveMoves": ["hypnosis", "hypnosis", "hypnosis", "psychic"] }, "poliwrath": { - "level": 73, - "moves": ["blizzard", "bodyslam", "earthquake", "submission"], - "essentialMoves": ["surf"], - "exclusiveMoves": ["hypnosis", "hypnosis", "hypnosis", "psychic"], - "comboMoves": ["amnesia", "blizzard"] + "level": 74, + "moves": ["bodyslam", "earthquake", "hypnosis", "submission"], + "essentialMoves": ["blizzard", "surf"], + "comboMoves": ["amnesia", "blizzard", "hypnosis", "surf"] }, "abra": { - "level": 81, + "level": 84, "moves": ["psychic", "seismictoss", "thunderwave"], "exclusiveMoves": ["counter", "reflect", "substitute"] }, "kadabra": { - "level": 73, + "level": 74, "moves": ["psychic", "recover", "thunderwave"], "exclusiveMoves": ["counter", "reflect", "reflect", "seismictoss", "seismictoss"] }, "alakazam": { - "level": 66, + "level": 68, "moves": ["psychic", "recover", "thunderwave"], "exclusiveMoves": ["counter", "reflect", "reflect", "seismictoss", "seismictoss"] }, "machop": { - "level": 92, + "level": 89, "moves": ["bodyslam", "earthquake", "submission"], "exclusiveMoves": ["counter", "rockslide", "rockslide"] }, "machoke": { - "level": 83, + "level": 81, "moves": ["bodyslam", "earthquake", "submission"], "exclusiveMoves": ["counter", "rockslide", "rockslide"] }, "machamp": { - "level": 77, + "level": 76, "moves": ["bodyslam", "earthquake", "submission"], "exclusiveMoves": ["counter", "hyperbeam", "hyperbeam", "rockslide", "rockslide"] }, "bellsprout": { - "level": 90, + "level": 88, "moves": ["doubleedge", "razorleaf", "sleeppowder"], "exclusiveMoves": ["stunspore", "stunspore", "swordsdance"] }, @@ -340,16 +337,16 @@ }, "victreebel": { "level": 74, - "moves": ["bodyslam", "razorleaf", "sleeppowder", "stunspore"], - "comboMoves": ["bodyslam", "hyperbeam", "razorleaf", "swordsdance"] + "moves": ["bodyslam", "razorleaf", "sleeppowder"], + "exclusiveMoves": ["hyperbeam", "stunspore", "stunspore", "stunspore", "swordsdance", "swordsdance"] }, "tentacool": { - "level": 84, + "level": 86, "moves": ["blizzard", "megadrain", "surf"], "exclusiveMoves": ["barrier", "hydropump", "hydropump"] }, "tentacruel": { - "level": 72, + "level": 73, "moves": ["blizzard", "hyperbeam", "swordsdance"], "exclusiveMoves": ["hydropump", "surf", "surf"] }, @@ -358,24 +355,24 @@ "moves": ["bodyslam", "earthquake", "explosion", "rockslide"] }, "graveler": { - "level": 79, + "level": 80, "moves": ["bodyslam", "earthquake", "explosion", "rockslide"] }, "golem": { - "level": 74, + "level": 71, "moves": ["bodyslam", "earthquake", "explosion", "rockslide"] }, "ponyta": { - "level": 85, + "level": 84, "moves": ["agility", "bodyslam", "fireblast"], "exclusiveMoves": ["reflect", "reflect", "reflect", "stomp", "substitute", "substitute"] }, "rapidash": { - "level": 77, + "level": 75, "moves": ["agility", "bodyslam", "fireblast", "hyperbeam"] }, "slowpoke": { - "level": 86, + "level": 84, "moves": ["blizzard", "psychic", "rest"], "essentialMoves": ["surf", "thunderwave"], "exclusiveMoves": ["amnesia", "earthquake", "earthquake"], @@ -388,17 +385,17 @@ "comboMoves": ["amnesia", "rest", "surf", "thunderwave"] }, "magnemite": { - "level": 90, + "level": 88, "moves": ["thunder", "thunderbolt", "thunderwave"], "exclusiveMoves": ["doubleedge", "doubleedge", "mimic", "rest"] }, "magneton": { - "level": 77, + "level": 76, "moves": ["thunder", "thunderbolt", "thunderwave"], "exclusiveMoves": ["doubleedge", "hyperbeam", "hyperbeam", "mimic", "rest"] }, "farfetchd": { - "level": 85, + "level": 78, "moves": ["agility", "bodyslam", "slash", "swordsdance"] }, "doduo": { @@ -406,7 +403,7 @@ "moves": ["agility", "bodyslam", "doubleedge", "drillpeck"] }, "dodrio": { - "level": 72, + "level": 73, "moves": ["agility", "bodyslam", "drillpeck", "hyperbeam"] }, "seel": { @@ -419,60 +416,60 @@ "exclusiveMoves": ["hyperbeam", "rest", "rest", "rest"] }, "grimer": { - "level": 93, + "level": 90, "moves": ["fireblast", "fireblast", "megadrain", "sludge", "sludge", "sludge", "thunderbolt"], "essentialMoves": ["bodyslam", "explosion"] }, "muk": { - "level": 78, + "level": 76, "moves": ["fireblast", "fireblast", "hyperbeam", "megadrain", "megadrain", "sludge", "sludge", "sludge", "thunderbolt"], "essentialMoves": ["bodyslam", "explosion"] }, "shellder": { - "level": 91, + "level": 90, "moves": ["blizzard", "doubleedge", "explosion", "surf"] }, "cloyster": { - "level": 72, + "level": 70, "moves": ["blizzard", "explosion", "surf"], "exclusiveMoves": ["doubleedge", "hyperbeam", "hyperbeam"] }, "gastly": { - "level": 76, + "level": 83, "moves": ["explosion", "explosion", "megadrain", "nightshade", "psychic", "psychic"], "essentialMoves": ["thunderbolt", "hypnosis"] }, "haunter": { - "level": 69, + "level": 74, "moves": ["explosion", "explosion", "megadrain", "nightshade", "psychic", "psychic"], "essentialMoves": ["thunderbolt", "hypnosis"] }, "gengar": { - "level": 63, + "level": 68, "moves": ["explosion", "explosion", "megadrain", "nightshade", "psychic", "psychic"], "essentialMoves": ["thunderbolt", "hypnosis"] }, "onix": { - "level": 81, + "level": 80, "moves": ["bodyslam", "earthquake", "explosion", "rockslide"] }, "drowzee": { - "level": 82, + "level": 84, "moves": ["hypnosis", "psychic", "thunderwave"], - "exclusiveMoves": ["counter", "reflect", "rest", "seismictoss", "seismictoss"] + "exclusiveMoves": ["counter", "rest", "seismictoss", "seismictoss"] }, "hypno": { - "level": 69, + "level": 72, "moves": ["hypnosis", "psychic", "thunderwave"], - "exclusiveMoves": ["counter", "reflect", "rest", "rest", "seismictoss", "seismictoss"] + "exclusiveMoves": ["counter", "rest", "rest", "seismictoss", "seismictoss"] }, "krabby": { - "level": 91, + "level": 89, "moves": ["bodyslam", "crabhammer", "swordsdance"], "exclusiveMoves": ["blizzard", "blizzard", "blizzard", "stomp"] }, "kingler": { - "level": 77, + "level": 76, "moves": ["bodyslam", "crabhammer", "hyperbeam", "swordsdance"] }, "voltorb": { @@ -481,39 +478,39 @@ "exclusiveMoves": ["takedown", "thunder"] }, "electrode": { - "level": 77, + "level": 76, "moves": ["explosion", "thunderbolt", "thunderwave"], "exclusiveMoves": ["hyperbeam", "hyperbeam", "takedown", "thunder", "thunder"] }, "exeggcute": { - "level": 78, + "level": 84, "moves": ["explosion", "psychic", "sleeppowder", "stunspore"] }, "exeggutor": { - "level": 65, + "level": 68, "moves": ["explosion", "psychic", "sleeppowder"], "exclusiveMoves": ["doubleedge", "hyperbeam", "megadrain", "stunspore", "stunspore", "stunspore"] }, "cubone": { - "level": 88, + "level": 89, "moves": ["blizzard", "bodyslam", "earthquake", "seismictoss"] }, "marowak": { - "level": 80, + "level": 79, "moves": ["blizzard", "bodyslam", "earthquake", "seismictoss"] }, "hitmonlee": { - "level": 82, + "level": 78, "moves": ["bodyslam", "highjumpkick", "seismictoss"], "exclusiveMoves": ["counter", "counter", "meditate", "megakick", "rollingkick"] }, "hitmonchan": { - "level": 85, + "level": 80, "moves": ["bodyslam", "seismictoss", "submission"], "exclusiveMoves": ["agility", "agility", "counter", "counter", "megakick"] }, "lickitung": { - "level": 81, + "level": 78, "moves": ["bodyslam", "hyperbeam", "swordsdance"], "exclusiveMoves": ["blizzard", "earthquake", "earthquake", "earthquake"] }, @@ -522,7 +519,7 @@ "moves": ["explosion", "fireblast", "sludge", "thunderbolt"] }, "weezing": { - "level": 78, + "level": 76, "moves": ["explosion", "fireblast", "sludge", "thunderbolt"] }, "rhyhorn": { @@ -534,7 +531,7 @@ "moves": ["bodyslam", "earthquake", "rockslide", "substitute"] }, "chansey": { - "level": 67, + "level": 68, "moves": ["icebeam", "softboiled", "thunderwave"], "exclusiveMoves": ["counter", "reflect", "seismictoss", "sing", "thunderbolt", "thunderbolt", "thunderbolt"] }, @@ -549,7 +546,7 @@ "exclusiveMoves": ["counter", "rockslide", "rockslide", "surf"] }, "horsea": { - "level": 89, + "level": 88, "moves": ["agility", "blizzard", "surf"], "exclusiveMoves": ["doubleedge", "hydropump", "smokescreen"] }, @@ -559,22 +556,22 @@ "exclusiveMoves": ["doubleedge", "hydropump", "hyperbeam", "smokescreen"] }, "goldeen": { - "level": 91, + "level": 88, "moves": ["agility", "blizzard", "doubleedge", "surf"] }, "seaking": { - "level": 79, + "level": 78, "moves": ["agility", "doubleedge", "hyperbeam"], "essentialMoves": ["blizzard", "surf"] }, "staryu": { - "level": 81, + "level": 84, "moves": ["blizzard", "thunderbolt", "thunderwave"], "essentialMoves": ["recover"], "exclusiveMoves": ["hydropump", "surf", "surf"] }, "starmie": { - "level": 66, + "level": 68, "moves": ["blizzard", "psychic", "thunderbolt", "thunderwave", "thunderwave"], "essentialMoves": ["recover"], "exclusiveMoves": ["hydropump", "psychic", "surf", "surf"] @@ -584,26 +581,26 @@ "moves": ["psychic", "seismictoss", "thunderbolt", "thunderwave"] }, "scyther": { - "level": 78, + "level": 75, "moves": ["agility", "hyperbeam", "slash", "swordsdance"] }, "jynx": { - "level": 67, + "level": 68, "moves": ["blizzard", "lovelykiss", "psychic"], "exclusiveMoves": ["bodyslam", "counter", "counter", "seismictoss", "substitute"] }, "electabuzz": { - "level": 73, + "level": 74, "moves": ["psychic", "thunderbolt", "thunderwave"], "exclusiveMoves": ["hyperbeam", "seismictoss", "seismictoss", "seismictoss"] }, "magmar": { - "level": 78, + "level": 76, "moves": ["bodyslam", "confuseray", "fireblast"], "exclusiveMoves": ["hyperbeam", "psychic", "seismictoss"] }, "pinsir": { - "level": 78, + "level": 75, "moves": ["bodyslam", "bodyslam", "slash"], "essentialMoves": ["hyperbeam", "swordsdance"], "exclusiveMoves": ["seismictoss", "submission", "submission"] @@ -614,7 +611,7 @@ "exclusiveMoves": ["blizzard", "blizzard", "blizzard", "thunderbolt"] }, "gyarados": { - "level": 72, + "level": 74, "moves": ["blizzard", "bodyslam", "bodyslam", "hyperbeam", "thunderbolt"], "exclusiveMoves": ["hydropump", "surf", "surf"] }, @@ -628,7 +625,7 @@ "moves": ["transform"] }, "eevee": { - "level": 89, + "level": 88, "moves": ["doubleedge", "doubleedge", "quickattack", "quickattack", "reflect"], "essentialMoves": ["bodyslam"], "exclusiveMoves": ["sandattack", "tailwhip"] @@ -639,21 +636,21 @@ "exclusiveMoves": ["acidarmor", "bodyslam", "bodyslam", "bodyslam", "hydropump", "mimic"] }, "jolteon": { - "level": 70, + "level": 69, "moves": ["bodyslam", "thunderbolt", "thunderwave"], "exclusiveMoves": ["agility", "agility", "doublekick", "pinmissile", "pinmissile"] }, "flareon": { - "level": 77, + "level": 76, "moves": ["bodyslam", "fireblast", "hyperbeam", "quickattack"] }, "porygon": { - "level": 78, + "level": 76, "moves": ["blizzard", "recover", "thunderwave"], "exclusiveMoves": ["doubleedge", "psychic", "thunderbolt", "triattack"] }, "omanyte": { - "level": 88, + "level": 87, "moves": ["blizzard", "bodyslam", "rest"], "exclusiveMoves": ["hydropump", "surf"] }, @@ -664,12 +661,12 @@ "exclusiveMoves": ["hydropump", "surf"] }, "kabuto": { - "level": 89, + "level": 88, "moves": ["blizzard", "bodyslam", "slash"], "exclusiveMoves": ["hydropump", "surf", "surf"] }, "kabutops": { - "level": 77, + "level": 75, "moves": ["hyperbeam", "surf", "swordsdance"], "exclusiveMoves": ["bodyslam", "slash"] }, @@ -679,9 +676,8 @@ "exclusiveMoves": ["agility", "skyattack", "skyattack"] }, "snorlax": { - "level": 70, - "moves": ["bodyslam", "thunderbolt"], - "essentialMoves": ["amnesia", "blizzard"], + "level": 69, + "moves": ["amnesia", "blizzard", "bodyslam"], "exclusiveMoves": ["rest", "selfdestruct"], "comboMoves": ["bodyslam", "earthquake", "hyperbeam", "selfdestruct"] }, @@ -696,32 +692,32 @@ "moves": ["agility", "drillpeck", "thunderbolt", "thunderwave"] }, "moltres": { - "level": 74, + "level": 73, "moves": ["agility", "fireblast", "hyperbeam"], "exclusiveMoves": ["doubleedge", "doubleedge", "doubleedge", "reflect"] }, "dratini": { - "level": 92, + "level": 89, "moves": ["bodyslam", "hyperbeam", "thunderbolt", "thunderbolt"], "essentialMoves": ["blizzard", "thunderwave"] }, "dragonair": { - "level": 81, + "level": 80, "moves": ["bodyslam", "hyperbeam", "thunderbolt", "thunderbolt"], "essentialMoves": ["blizzard", "thunderwave"] }, "dragonite": { - "level": 72, + "level": 74, "moves": ["bodyslam", "hyperbeam", "thunderbolt", "thunderwave", "thunderwave"], "essentialMoves": ["blizzard"] }, "mewtwo": { - "level": 57, + "level": 60, "moves": ["amnesia", "psychic", "recover"], "exclusiveMoves": ["blizzard", "thunderbolt", "thunderwave", "thunderwave"] }, "mew": { - "level": 63, + "level": 64, "moves": ["blizzard", "blizzard", "earthquake", "explosion", "explosion", "thunderbolt"], "essentialMoves": ["psychic", "softboiled", "thunderwave"] } diff --git a/data/mods/gen1/random-teams.ts b/data/random-battles/gen1/teams.ts similarity index 89% rename from data/mods/gen1/random-teams.ts rename to data/random-battles/gen1/teams.ts index c739370902d2..2ce6a27ef455 100644 --- a/data/mods/gen1/random-teams.ts +++ b/data/random-battles/gen1/teams.ts @@ -1,4 +1,4 @@ -import RandomGen2Teams from '../gen2/random-teams'; +import RandomGen2Teams from '../gen2/teams'; import {Utils} from '../../../lib'; interface HackmonsCupEntry { @@ -15,7 +15,7 @@ interface Gen1RandomBattleSpecies { } export class RandomGen1Teams extends RandomGen2Teams { - randomData: {[species: string]: Gen1RandomBattleSpecies} = require('./random-data.json'); + randomData: {[species: IDEntry]: Gen1RandomBattleSpecies} = require('./data.json'); // Challenge Cup or CC teams are basically fully random teams. randomCCTeam() { @@ -118,16 +118,13 @@ export class RandomGen1Teams extends RandomGen2Teams { /** Pokémon that are not wholly incompatible with the team, but still pretty bad */ const rejectedButNotInvalidPool: string[] = []; - const nuTiers = ['UU', 'UUBL', 'NFE', 'LC', 'NU']; - const uuTiers = ['NFE', 'UU', 'UUBL', 'NU']; // Now let's store what we are getting. const typeCount: {[k: string]: number} = {}; const weaknessCount: {[k: string]: number} = {Electric: 0, Psychic: 0, Water: 0, Ice: 0, Ground: 0, Fire: 0}; - let uberCount = 0; - let nuCount = 0; + let numMaxLevelPokemon = 0; - const pokemonPool = this.getPokemonPool(type, pokemon, isMonotype, Object.keys(this.randomData))[0]; + const pokemonPool = Object.keys(this.getPokemonPool(type, pokemon, isMonotype, Object.keys(this.randomData))[0]); while (pokemonPool.length && pokemon.length < this.maxTeamSize) { const species = this.dex.species.get(this.sampleNoReplace(pokemonPool)); if (!species.exists) continue; @@ -140,33 +137,12 @@ export class RandomGen1Teams extends RandomGen2Teams { // Dynamically scale limits for different team sizes. The default and minimum value is 1. const limitFactor = Math.round(this.maxTeamSize / 6) || 1; - const tier = species.tier; - switch (tier) { - case 'LC': - case 'NFE': - // Don't add pre-evo mon if already 4 or more non-OUs - // Regardless, pre-evo mons are slightly less common. - if (nuCount >= 4 * limitFactor || this.randomChance(1, 3)) continue; - break; - case 'Uber': - // Only allow a single Uber. - if (uberCount >= 1 * limitFactor) continue; - break; - default: - // OUs are fine. Otherwise 50% chance to skip mon if already 4 or more non-OUs. - if (uuTiers.includes(tier) && pokemonPool.length > 1 && (nuCount >= 4 * limitFactor && this.randomChance(1, 2))) { - continue; - } - } - let skip = false; if (!isMonotype && !this.forceMonotype) { - // Limit 2 of any type as well. Diversity and minor weakness count. - // The second of a same type has halved chance of being added. + // Limit two of any type for (const typeName of species.types) { - if (typeCount[typeName] >= 2 * limitFactor || - (typeCount[typeName] >= 1 * limitFactor && this.randomChance(1, 2) && pokemonPool.length > 1)) { + if (typeCount[typeName] >= 2 * limitFactor) { skip = true; break; } @@ -179,7 +155,7 @@ export class RandomGen1Teams extends RandomGen2Teams { } // We need a weakness count of spammable attacks to avoid being swept by those. - // Spammable attacks are: Thunderbolt, Psychic, Surf, Blizzard, Earthquake. + // Spammable attacks are: Thunderbolt, Psychic, Surf, Blizzard, Earthquake, Fire Blast. const pokemonWeaknesses = []; for (const typeName in weaknessCount) { const increaseCount = this.dex.getImmunity(typeName, species) && this.dex.getEffectiveness(typeName, species) > 0; @@ -196,6 +172,12 @@ export class RandomGen1Teams extends RandomGen2Teams { continue; } + // Limit one level 100 Pokemon + if (!this.adjustLevel && (this.getLevel(species) === 100) && numMaxLevelPokemon >= limitFactor) { + rejectedButNotInvalidPool.push(species.id); + continue; + } + // The set passes the limitations. pokemon.push(this.randomSet(species)); @@ -214,12 +196,8 @@ export class RandomGen1Teams extends RandomGen2Teams { weaknessCount[weakness]++; } - // Increment tier bias counters. - if (tier === 'Uber') { - uberCount++; - } else if (nuTiers.includes(tier)) { - nuCount++; - } + // Increment level 100 counter + if (this.getLevel(species) === 100) numMaxLevelPokemon++; // Ditto check if (species.id === 'ditto') this.battleHasDitto = true; @@ -277,7 +255,7 @@ export class RandomGen1Teams extends RandomGen2Teams { } } - const level = this.adjustLevel || data.level || 80; + const level = this.getLevel(species); const evs = {hp: 255, atk: 255, def: 255, spa: 255, spd: 255, spe: 255}; const ivs = {hp: 30, atk: 30, def: 30, spa: 30, spd: 30, spe: 30}; diff --git a/data/random-battles/gen2/sets.json b/data/random-battles/gen2/sets.json new file mode 100644 index 000000000000..3f6c37ae811d --- /dev/null +++ b/data/random-battles/gen2/sets.json @@ -0,0 +1,1670 @@ +{ + "venusaur": { + "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["growth", "hiddenpowerfire", "hiddenpowerice", "razorleaf", "sleeppowder", "synthesis"] + } + ] + }, + "charizard": { + "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["bellydrum", "earthquake", "fireblast", "rockslide", "swordsdance"] + } + ] + }, + "blastoise": { + "sets": [ + { + "role": "Generalist", + "movepool": ["icebeam", "rest", "sleeptalk", "surf", "zapcannon"] + }, + { + "role": "Bulky Support", + "movepool": ["icebeam", "rapidspin", "rest", "roar", "surf", "toxic"] + } + ] + }, + "butterfree": { + "sets": [ + { + "role": "Generalist", + "movepool": ["nightmare", "psychic", "sleeppowder", "substitute"] + }, + { + "role": "Fast Attacker", + "movepool": ["psychic", "reflect", "sleeppowder", "stunspore"] + }, + { + "role": "Bulky Attacker", + "movepool": ["hiddenpowerbug", "psychic", "sleeppowder", "stunspore"] + } + ] + }, + "beedrill": { + "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["agility", "hiddenpowerground", "sludgebomb", "substitute", "swordsdance"] + } + ] + }, + "pidgeot": { + "sets": [ + { + "role": "Bulky Setup", + "movepool": ["curse", "doubleedge", "rest", "sleeptalk"] + }, + { + "role": "Fast Attacker", + "movepool": ["doubleedge", "hiddenpowerground", "hiddenpowerwater", "rest", "sleeptalk"] + }, + { + "role": "Thief user", + "movepool": ["hiddenpowerground", "hiddenpowerwater", "return", "thief", "toxic"] + } + ] + }, + "raticate": { + "sets": [ + { + "role": "Generalist", + "movepool": ["doubleedge", "irontail", "rest", "return", "sleeptalk", "superfang"] + } + ] + }, + "fearow": { + "sets": [ + { + "role": "Fast Attacker", + "movepool": ["doubleedge", "drillpeck", "hiddenpowerground", "rest", "sleeptalk"] + } + ] + }, + "arbok": { + "sets": [ + { + "role": "Generalist", + "movepool": ["curse", "earthquake", "rest", "sleeptalk", "sludgebomb"] + }, + { + "role": "Fast Attacker", + "movepool": ["curse", "earthquake", "glare", "haze", "sludgebomb"] + }, + { + "role": "Bulky Attacker", + "movepool": ["curse", "earthquake", "glare", "rockslide", "sludgebomb"], + "preferredTypes": ["Ground"] + } + ] + }, + "pikachu": { + "sets": [ + { + "role": "Fast Attacker", + "movepool": ["encore", "hiddenpowerfire", "hiddenpowerice", "surf", "thunderbolt"] + }, + { + "role": "Bulky Attacker", + "movepool": ["hiddenpowerfire", "hiddenpowerice", "substitute", "surf", "thunderbolt"] + }, + { + "role": "Generalist", + "movepool": ["hiddenpowerice", "surf", "thunder", "thunderbolt"] + } + ] + }, + "raichu": { + "sets": [ + { + "role": "Generalist", + "movepool": ["hiddenpowerice", "rest", "sleeptalk", "surf", "thunder"] + } + ] + }, + "sandslash": { + "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["earthquake", "hiddenpowerbug", "rockslide", "substitute", "swordsdance"], + "preferredTypes": ["Rock"] + }, + { + "role": "Generalist", + "movepool": ["earthquake", "rest", "rockslide", "sleeptalk"] + } + ] + }, + "nidoqueen": { + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["earthquake", "fireblast", "icebeam", "moonlight", "thunder"], + "preferredTypes": ["Ice"] + }, + { + "role": "Fast Attacker", + "movepool": ["earthquake", "icebeam", "lovelykiss", "thunder"] + } + ] + }, + "nidoking": { + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["earthquake", "fireblast", "icebeam", "morningsun", "thunder"], + "preferredTypes": ["Ice"] + }, + { + "role": "Fast Attacker", + "movepool": ["earthquake", "icebeam", "lovelykiss", "thunder"] + } + ] + }, + "clefable": { + "sets": [ + { + "role": "Bulky Setup", + "movepool": ["bellydrum", "bodyslam", "hiddenpowerground", "moonlight", "return", "thunderwave"] + }, + { + "role": "Bulky Support", + "movepool": ["bodyslam", "encore", "fireblast", "flamethrower", "moonlight"] + }, + { + "role": "Setup Sweeper", + "movepool": ["curse", "moonlight", "return", "thunderwave"] + } + ] + }, + "ninetales": { + "sets": [ + { + "role": "Bulky Support", + "movepool": ["fireblast", "flamethrower", "hiddenpowergrass", "rest", "sleeptalk", "sunnyday"] + } + ] + }, + "wigglytuff": { + "sets": [ + { + "role": "Bulky Support", + "movepool": ["curse", "doubleedge", "rest", "sleeptalk", "thunder"] + } + ] + }, + "vileplume": { + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["moonlight", "razorleaf", "sleeppowder", "sludgebomb", "stunspore"] + }, + { + "role": "Setup Sweeper", + "movepool": ["hiddenpowerground", "moonlight", "sleeppowder", "sludgebomb", "swordsdance"] + }, + { + "role": "Bulky Setup", + "movepool": ["curse", "moonlight", "sludgebomb", "stunspore"] + } + ] + }, + "parasect": { + "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["bodyslam", "hiddenpowerground", "return", "spore", "swordsdance"] + }, + { + "role": "Bulky Setup", + "movepool": ["hiddenpowerbug", "spore", "swordsdance", "synthesis"] + } + ] + }, + "venomoth": { + "sets": [ + { + "role": "Fast Attacker", + "movepool": ["gigadrain", "hiddenpowerfire", "psychic", "sleeppowder", "sludgebomb", "stunspore"], + "preferredTypes": ["Fire", "Psychic"] + }, + { + "role": "Bulky Setup", + "movepool": ["batonpass", "curse", "sleeppowder", "sludgebomb"] + }, + { + "role": "Setup Sweeper", + "movepool": ["batonpass", "curse", "sludgebomb", "stunspore"] + } + ] + }, + "dugtrio": { + "sets": [ + { + "role": "Fast Attacker", + "movepool": ["earthquake", "rockslide", "sludgebomb", "substitute", "thief"], + "preferredTypes": ["Rock"] + } + ] + }, + "persian": { + "sets": [ + { + "role": "Fast Attacker", + "movepool": ["doubleedge", "hypnosis", "irontail", "rest", "sleeptalk", "thief"] + }, + { + "role": "Generalist", + "movepool": ["doubleedge", "hypnosis", "rest", "sleeptalk", "thief", "thunder"], + "preferredTypes": ["Electric"] + }, + { + "role": "Setup Sweeper", + "movepool": ["curse", "doubleedge", "rest", "sleeptalk"] + } + ] + }, + "golduck": { + "sets": [ + { + "role": "Generalist", + "movepool": ["crosschop", "hiddenpowerelectric", "hydropump", "hypnosis", "icebeam"] + }, + { + "role": "Bulky Attacker", + "movepool": ["crosschop", "hiddenpowerelectric", "icebeam", "rest", "sleeptalk", "surf"] + } + ] + }, + "primeape": { + "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["crosschop", "hiddenpowerghost", "meditate", "rest", "rockslide", "substitute"] + }, + { + "role": "Bulky Setup", + "movepool": ["crosschop", "doubleedge", "hiddenpowerghost", "meditate", "rockslide"] + }, + { + "role": "Generalist", + "movepool": ["meditate", "reversal", "rockslide", "substitute"] + } + ] + }, + "arcanine": { + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["crunch", "doubleedge", "fireblast", "flamethrower", "hiddenpowergrass", "rest", "sleeptalk"] + } + ] + }, + "poliwhirl": { + "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["bellydrum", "earthquake", "lovelykiss", "return"] + }, + { + "role": "Generalist", + "movepool": ["bellydrum", "earthquake", "hiddenpowerrock", "lovelykiss"] + } + ] + }, + "poliwrath": { + "sets": [ + { + "role": "Bulky Support", + "movepool": ["earthquake", "growth", "rest", "sleeptalk", "submission", "surf"] + }, + { + "role": "Setup Sweeper", + "movepool": ["bellydrum", "earthquake", "lovelykiss", "return"] + }, + { + "role": "Generalist", + "movepool": ["bellydrum", "earthquake", "hiddenpowerrock", "lovelykiss"] + } + ] + }, + "alakazam": { + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["encore", "firepunch", "hiddenpowerdark", "psychic", "recover", "thunderwave"], + "preferredTypes": ["Fire"] + } + ] + }, + "machamp": { + "sets": [ + { + "role": "Generalist", + "movepool": ["crosschop", "curse", "rest", "rockslide", "sleeptalk"] + }, + { + "role": "Setup Sweeper", + "movepool": ["crosschop", "curse", "earthquake", "hiddenpowerbug", "rockslide"], + "preferredTypes": ["Rock"] + } + ] + }, + "victreebel": { + "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["hiddenpowerground", "sleeppowder", "sludgebomb", "swordsdance", "synthesis"] + } + ] + }, + "tentacruel": { + "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["hydropump", "sludgebomb", "substitute", "swordsdance"] + } + ] + }, + "golem": { + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["curse", "earthquake", "explosion", "rapidspin", "roar", "rockslide"] + } + ] + }, + "rapidash": { + "sets": [ + { + "role": "Generalist", + "movepool": ["doubleedge", "fireblast", "hiddenpowergrass", "hypnosis", "sunnyday"] + }, + { + "role": "Bulky Support", + "movepool": ["doubleedge", "fireblast", "flamethrower", "rest", "sleeptalk", "sunnyday"] + } + ] + }, + "slowbro": { + "sets": [ + { + "role": "Generalist", + "movepool": ["psychic", "rest", "sleeptalk", "surf"] + } + ] + }, + "magneton": { + "sets": [ + { + "role": "Generalist", + "movepool": ["hiddenpowerice", "rest", "sleeptalk", "thunder"] + } + ] + }, + "farfetchd": { + "sets": [ + { + "role": "Generalist", + "movepool": ["agility", "batonpass", "return", "swordsdance"] + } + ] + }, + "dodrio": { + "sets": [ + { + "role": "Fast Attacker", + "movepool": ["doubleedge", "drillpeck", "hiddenpowerground", "rest", "sleeptalk"] + } + ] + }, + "dewgong": { + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["icebeam", "rest", "sleeptalk", "surf"] + }, + { + "role": "Generalist", + "movepool": ["encore", "icebeam", "protect", "toxic"] + } + ] + }, + "muk": { + "sets": [ + { + "role": "Generalist", + "movepool": ["curse", "explosion", "hiddenpowerground", "sludgebomb"], + "preferredTypes": ["Ground"] + } + ] + }, + "cloyster": { + "sets": [ + { + "role": "Fast Attacker", + "movepool": ["explosion", "icebeam", "rapidspin", "spikes", "surf", "toxic"] + }, + { + "role": "Generalist", + "movepool": ["explosion", "rapidspin", "spikes", "surf", "toxic"] + }, + { + "role": "Bulky Support", + "movepool": ["explosion", "icebeam", "rapidspin", "spikes", "toxic"] + } + ] + }, + "gengar": { + "sets": [ + { + "role": "Generalist", + "movepool": ["explosion", "firepunch", "hypnosis", "icepunch", "psychic", "thunderbolt"], + "preferredTypes": ["Electric", "Ice"] + }, + { + "role": "Fast Attacker", + "movepool": ["destinybond", "firepunch", "hypnosis", "icepunch", "psychic", "thunderbolt"], + "preferredTypes": ["Electric", "Ice"] + } + ] + }, + "hypno": { + "sets": [ + { + "role": "Generalist", + "movepool": ["psychic", "rest", "seismictoss", "sleeptalk", "thunderwave"] + }, + { + "role": "Setup Sweeper", + "movepool": ["curse", "doubleedge", "rest", "sleeptalk"] + }, + { + "role": "Bulky Setup", + "movepool": ["bodyslam", "curse", "psychic", "rest", "return"] + } + ] + }, + "kingler": { + "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["hiddenpowerground", "protect", "rest", "return", "substitute", "swordsdance"] + }, + { + "role": "Bulky Setup", + "movepool": ["hiddenpowerground", "protect", "return", "substitute", "surf", "swordsdance"], + "preferredTypes": ["Normal"] + } + ] + }, + "electrode": { + "sets": [ + { + "role": "Generalist", + "movepool": ["explosion", "hiddenpowerice", "thunderbolt", "thunderwave"] + }, + { + "role": "Fast Attacker", + "movepool": ["explosion", "hiddenpowerice", "lightscreen", "reflect", "thunder", "thunderbolt"] + } + ] + }, + "exeggutor": { + "sets": [ + { + "role": "Fast Attacker", + "movepool": ["explosion", "hiddenpowerfire", "hiddenpowergrass", "psychic", "sleeppowder", "stunspore", "thief"] + }, + { + "role": "Generalist", + "movepool": ["explosion", "gigadrain", "hiddenpowerfire", "psychic"] + } + ] + }, + "marowak": { + "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["earthquake", "hiddenpowerbug", "rockslide", "swordsdance"] + } + ] + }, + "hitmonlee": { + "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["hiddenpowerghost", "hiddenpowerrock", "highjumpkick", "meditate", "rest", "substitute"] + }, + { + "role": "Bulky Setup", + "movepool": ["doubleedge", "hiddenpowerghost", "hiddenpowerrock", "highjumpkick", "meditate"] + }, + { + "role": "Generalist", + "movepool": ["bodyslam", "hiddenpowerrock", "highjumpkick", "rest", "sleeptalk"] + } + ] + }, + "hitmonchan": { + "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["curse", "hiddenpowerghost", "hiddenpowerrock", "highjumpkick", "machpunch"] + }, + { + "role": "Bulky Setup", + "movepool": ["curse", "highjumpkick", "rest", "sleeptalk"] + }, + { + "role": "Generalist", + "movepool": ["bodyslam", "hiddenpowerrock", "highjumpkick", "rest", "sleeptalk"] + } + ] + }, + "lickitung": { + "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["bodyslam", "earthquake", "protect", "return", "swordsdance"] + }, + { + "role": "Bulky Setup", + "movepool": ["curse", "doubleedge", "rest", "return", "sleeptalk", "swordsdance"] + }, + { + "role": "Bulky Attacker", + "movepool": ["doubleedge", "earthquake", "rest", "sleeptalk", "surf", "thunder"] + } + ] + }, + "weezing": { + "sets": [ + { + "role": "Fast Attacker", + "movepool": ["explosion", "fireblast", "sludgebomb", "thunder"] + }, + { + "role": "Generalist", + "movepool": ["explosion", "hiddenpowerwater", "sludgebomb", "thunder"] + }, + { + "role": "Bulky Attacker", + "movepool": ["fireblast", "haze", "hiddenpowerwater", "painsplit", "sludgebomb", "thunder"], + "preferredTypes": ["Electric"] + } + ] + }, + "rhydon": { + "sets": [ + { + "role": "Fast Attacker", + "movepool": ["curse", "earthquake", "rest", "roar", "rockslide", "sleeptalk"] + }, + { + "role": "Bulky Setup", + "movepool": ["curse", "rest", "rockslide", "sleeptalk"] + } + ] + }, + "tangela": { + "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["gigadrain", "growth", "hiddenpowerfire", "hiddenpowerice", "sleeppowder", "synthesis"] + } + ] + }, + "kangaskhan": { + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["doubleedge", "earthquake", "rest", "sleeptalk"] + }, + { + "role": "Bulky Setup", + "movepool": ["bodyslam", "curse", "doubleedge", "rest", "return", "sleeptalk"] + }, + { + "role": "Setup Sweeper", + "movepool": ["bodyslam", "curse", "earthquake", "return", "roar"] + } + ] + }, + "seaking": { + "sets": [ + { + "role": "Bulky Setup", + "movepool": ["agility", "hydropump", "return", "substitute", "swordsdance"], + "preferredTypes": ["Normal"] + }, + { + "role": "Setup Sweeper", + "movepool": ["agility", "hiddenpowerground", "return", "substitute", "swordsdance"] + } + ] + }, + "starmie": { + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["psychic", "rapidspin", "recover", "surf", "thunderbolt", "thunderwave"], + "preferredTypes": ["Psychic"] + }, + { + "role": "Bulky Support", + "movepool": ["icebeam", "psychic", "recover", "surf", "thunder"] + } + ] + }, + "mrmime": { + "sets": [ + { + "role": "Fast Attacker", + "movepool": ["encore", "firepunch", "hypnosis", "psychic", "thief", "thunder"] + }, + { + "role": "Generalist", + "movepool": ["firepunch", "psychic", "rest", "sleeptalk", "thunder"] + }, + { + "role": "Bulky Attacker", + "movepool": ["barrier", "batonpass", "psychic", "thunder"] + } + ] + }, + "scyther": { + "sets": [ + { + "role": "Bulky Setup", + "movepool": ["batonpass", "doubleedge", "hiddenpowerground", "swordsdance"] + } + ] + }, + "jynx": { + "sets": [ + { + "role": "Generalist", + "movepool": ["icebeam", "lovelykiss", "nightmare", "psychic"] + }, + { + "role": "Thief user", + "movepool": ["icebeam", "lovelykiss", "psychic", "thief"] + }, + { + "role": "Bulky Attacker", + "movepool": ["icebeam", "lovelykiss", "psychic", "substitute"] + } + ] + }, + "electabuzz": { + "sets": [ + { + "role": "Fast Attacker", + "movepool": ["crosschop", "icepunch", "pursuit", "thief", "thunder", "thunderbolt"], + "preferredTypes": ["Fighting", "Ice"] + }, + { + "role": "Bulky Attacker", + "movepool": ["icepunch", "rest", "sleeptalk", "thunder"] + } + ] + }, + "magmar": { + "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["crosschop", "fireblast", "hiddenpowerground", "sunnyday", "thunderpunch"], + "preferredTypes": ["Electric"] + }, + { + "role": "Fast Attacker", + "movepool": ["crosschop", "fireblast", "hiddenpowerground", "thief", "thunderpunch"], + "preferredTypes": ["Electric"] + } + ] + }, + "pinsir": { + "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["hiddenpowerground", "protect", "rest", "return", "substitute", "swordsdance"] + } + ] + }, + "tauros": { + "sets": [ + { + "role": "Generalist", + "movepool": ["curse", "doubleedge", "earthquake", "rest", "return", "sleeptalk"] + } + ] + }, + "gyarados": { + "sets": [ + { + "role": "Generalist", + "movepool": ["doubleedge", "hiddenpowerflying", "hydropump", "roar", "thunder"], + "preferredTypes": ["Electric"] + }, + { + "role": "Bulky Attacker", + "movepool": ["doubleedge", "hiddenpowerflying", "hydropump", "rest", "sleeptalk", "surf"] + }, + { + "role": "Bulky Setup", + "movepool": ["curse", "hiddenpowerflying", "rest", "sleeptalk"] + } + ] + }, + "lapras": { + "sets": [ + { + "role": "Generalist", + "movepool": ["icebeam", "rest", "sleeptalk", "surf"] + }, + { + "role": "Fast Attacker", + "movepool": ["rest", "sleeptalk", "surf", "thunder"] + }, + { + "role": "Bulky Attacker", + "movepool": ["icebeam", "rest", "sleeptalk", "thunder"] + } + ] + }, + "ditto": { + "level": 90, + "sets": [ + { + "role": "Generalist", + "movepool": ["transform"] + } + ] + }, + "vaporeon": { + "sets": [ + { + "role": "Generalist", + "movepool": ["growth", "rest", "sleeptalk", "surf"] + } + ] + }, + "jolteon": { + "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["batonpass", "growth", "hiddenpowerice", "substitute", "thunderbolt"] + } + ] + }, + "flareon": { + "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["batonpass", "fireblast", "growth", "hiddenpowergrass"] + }, + { + "role": "Generalist", + "movepool": ["doubleedge", "fireblast", "flamethrower", "rest", "sleeptalk"] + } + ] + }, + "omastar": { + "sets": [ + { + "role": "Bulky Support", + "movepool": ["hiddenpowerelectric", "icebeam", "rest", "sandstorm", "sleeptalk", "surf"] + } + ] + }, + "kabutops": { + "sets": [ + { + "role": "Bulky Setup", + "movepool": ["hiddenpowerground", "hydropump", "return", "swordsdance"] + }, + { + "role": "Setup Sweeper", + "movepool": ["ancientpower", "hiddenpowerground", "protect", "rest", "substitute", "swordsdance"] + } + ] + }, + "aerodactyl": { + "sets": [ + { + "role": "Bulky Setup", + "movepool": ["curse", "earthquake", "hiddenpowerrock", "rest"] + }, + { + "role": "Setup Sweeper", + "movepool": ["ancientpower", "curse", "earthquake", "hiddenpowerflying"] + }, + { + "role": "Bulky Attacker", + "movepool": ["curse", "earthquake", "hiddenpowerrock", "whirlwind"] + } + ] + }, + "snorlax": { + "sets": [ + { + "role": "Generalist", + "movepool": ["curse", "doubleedge", "earthquake", "rest", "sleeptalk"] + }, + { + "role": "Bulky Setup", + "movepool": ["bodyslam", "curse", "doubleedge", "earthquake", "rest", "return"] + }, + { + "role": "Bulky Attacker", + "movepool": ["bodyslam", "curse", "earthquake", "lovelykiss", "return", "selfdestruct"] + } + ] + }, + "articuno": { + "sets": [ + { + "role": "Generalist", + "movepool": ["hiddenpowerelectric", "icebeam", "rest", "sleeptalk", "toxic"] + } + ] + }, + "zapdos": { + "sets": [ + { + "role": "Generalist", + "movepool": ["hiddenpowerice", "rest", "sleeptalk", "thunder"] + } + ] + }, + "moltres": { + "sets": [ + { + "role": "Generalist", + "movepool": ["fireblast", "flamethrower", "hiddenpowergrass", "rest", "sleeptalk", "sunnyday"] + } + ] + }, + "dragonite": { + "sets": [ + { + "role": "Generalist", + "movepool": ["haze", "hiddenpowerflying", "rest", "surf", "thunder"] + }, + { + "role": "Bulky Attacker", + "movepool": ["icebeam", "rest", "sleeptalk", "thunder"] + }, + { + "role": "Fast Attacker", + "movepool": ["dynamicpunch", "hiddenpowerflying", "icebeam", "thunder"] + } + ] + }, + "mewtwo": { + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["flamethrower", "icebeam", "psychic", "recover", "thunder"] + }, + { + "role": "Bulky Setup", + "movepool": ["barrier", "flamethrower", "psychic", "recover", "thunder"] + } + ] + }, + "mew": { + "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["earthquake", "explosion", "rockslide", "swordsdance"] + }, + { + "role": "Bulky Setup", + "movepool": ["earthquake", "rockslide", "softboiled", "swordsdance"] + } + ] + }, + "meganium": { + "sets": [ + { + "role": "Bulky Setup", + "movepool": ["bodyslam", "earthquake", "swordsdance", "synthesis"] + }, + { + "role": "Setup Sweeper", + "movepool": ["earthquake", "hiddenpowerrock", "swordsdance", "synthesis"] + } + ] + }, + "typhlosion": { + "sets": [ + { + "role": "Generalist", + "movepool": ["earthquake", "fireblast", "flamethrower", "rest", "sleeptalk", "thunderpunch"] + }, + { + "role": "Setup Sweeper", + "movepool": ["earthquake", "fireblast", "sunnyday", "thunderpunch"] + } + ] + }, + "feraligatr": { + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["earthquake", "hiddenpowerelectric", "icebeam", "rest", "sleeptalk", "surf"] + } + ] + }, + "furret": { + "sets": [ + { + "role": "Bulky Setup", + "movepool": ["curse", "doubleedge", "rest", "sleeptalk"] + }, + { + "role": "Bulky Attacker", + "movepool": ["doubleedge", "irontail", "rest", "sleeptalk", "surf"] + }, + { + "role": "Setup Sweeper", + "movepool": ["curse", "irontail", "quickattack", "return"] + } + ] + }, + "noctowl": { + "sets": [ + { + "role": "Thief user", + "movepool": ["hypnosis", "return", "thief", "toxic", "whirlwind"] + }, + { + "role": "Bulky Support", + "movepool": ["curse", "nightshade", "rest", "return", "sleeptalk"] + } + ] + }, + "ledian": { + "sets": [ + { + "role": "Generalist", + "movepool": ["agility", "barrier", "batonpass", "lightscreen"] + } + ] + }, + "ariados": { + "sets": [ + { + "role": "Generalist", + "movepool": ["agility", "batonpass", "sludgebomb", "spiderweb"] + }, + { + "role": "Bulky Setup", + "movepool": ["agility", "batonpass", "growth", "sludgebomb"] + }, + { + "role": "Setup Sweeper", + "movepool": ["agility", "batonpass", "curse", "sludgebomb"] + } + ] + }, + "crobat": { + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["haze", "hiddenpowerground", "rest", "toxic", "wingattack"] + }, + { + "role": "Generalist", + "movepool": ["haze", "protect", "toxic", "wingattack"] + } + ] + }, + "lanturn": { + "sets": [ + { + "role": "Generalist", + "movepool": ["rest", "sleeptalk", "surf", "thunder"] + } + ] + }, + "togetic": { + "sets": [ + { + "role": "Bulky Support", + "movepool": ["curse", "doubleedge", "fireblast", "rest", "sleeptalk"] + }, + { + "role": "Setup Sweeper", + "movepool": ["encore", "fireblast", "solarbeam", "sunnyday", "zapcannon"], + "preferredTypes": ["Fire", "Grass"] + } + ] + }, + "xatu": { + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["drillpeck", "psychic", "rest", "sleeptalk"] + }, + { + "role": "Thief user", + "movepool": ["confuseray", "drillpeck", "hiddenpowerfire", "psychic", "thief"] + } + ] + }, + "ampharos": { + "sets": [ + { + "role": "Generalist", + "movepool": ["firepunch", "hiddenpowerice", "rest", "sleeptalk", "thunder"] + } + ] + }, + "bellossom": { + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["hiddenpowerfire", "hiddenpowerice", "leechseed", "moonlight", "razorleaf", "sleeppowder", "stunspore"] + }, + { + "role": "Bulky Setup", + "movepool": ["hiddenpowerground", "moonlight", "return", "stunspore", "swordsdance"], + "preferredTypes": ["Normal"] + } + ] + }, + "azumarill": { + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["perishsong", "rest", "surf", "whirlpool"] + }, + { + "role": "Bulky Support", + "movepool": ["icebeam", "lightscreen", "rest", "sleeptalk", "surf", "toxic"] + }, + { + "role": "Bulky Setup", + "movepool": ["curse", "doubleedge", "rest", "sleeptalk"] + } + ] + }, + "sudowoodo": { + "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["curse", "earthquake", "rockslide", "selfdestruct"] + }, + { + "role": "Bulky Setup", + "movepool": ["curse", "rest", "rockslide", "sleeptalk"] + }, + { + "role": "Thief user", + "movepool": ["earthquake", "rockslide", "selfdestruct", "thief"] + } + ] + }, + "politoed": { + "sets": [ + { + "role": "Generalist", + "movepool": ["growth", "rest", "sleeptalk", "surf"] + } + ] + }, + "jumpluff": { + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["encore", "hiddenpowerflying", "stunspore", "synthesis"] + }, + { + "role": "Generalist", + "movepool": ["encore", "hiddenpowerflying", "leechseed", "stunspore"] + }, + { + "role": "Bulky Support", + "movepool": ["encore", "hiddenpowerflying", "sleeppowder", "stunspore"] + } + ] + }, + "aipom": { + "sets": [ + { + "role": "Generalist", + "movepool": ["agility", "batonpass", "curse", "return"] + }, + { + "role": "Bulky Setup", + "movepool": ["curse", "rest", "return", "sleeptalk"] + } + ] + }, + "sunflora": { + "sets": [ + { + "role": "Bulky Setup", + "movepool": ["growth", "hiddenpowerfire", "hiddenpowerice", "razorleaf", "synthesis"] + } + ] + }, + "yanma": { + "sets": [ + { + "role": "Fast Attacker", + "movepool": ["gigadrain", "hiddenpowerflying", "return", "thief"] + }, + { + "role": "Thief user", + "movepool": ["gigadrain", "hiddenpowerbug", "thief", "wingattack"] + }, + { + "role": "Setup Sweeper", + "movepool": ["endure", "hiddenpowerflying", "return", "reversal"] + } + ] + }, + "quagsire": { + "sets": [ + { + "role": "Generalist", + "movepool": ["earthquake", "rest", "sleeptalk", "surf"] + }, + { + "role": "Bulky Attacker", + "movepool": ["earthquake", "icebeam", "rest", "sleeptalk", "sludgebomb"] + } + ] + }, + "espeon": { + "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["batonpass", "growth", "hiddenpowerfire", "psychic", "substitute"] + }, + { + "role": "Bulky Setup", + "movepool": ["batonpass", "growth", "hiddenpowerfire", "morningsun", "psychic"] + } + ] + }, + "umbreon": { + "sets": [ + { + "role": "Bulky Setup", + "movepool": ["batonpass", "growth", "hiddenpowerdark", "moonlight"] + }, + { + "role": "Generalist", + "movepool": ["batonpass", "meanlook", "moonlight", "sandattack"] + }, + { + "role": "Bulky Support", + "movepool": ["batonpass", "growth", "meanlook", "moonlight"] + } + ] + }, + "murkrow": { + "sets": [ + { + "role": "Generalist", + "movepool": ["drillpeck", "hiddenpowerdark", "pursuit", "toxic"] + }, + { + "role": "Thief user", + "movepool": ["drillpeck", "haze", "hiddenpowerdark", "thief", "toxic"], + "preferredTypes": ["Dark"] + } + ] + }, + "slowking": { + "sets": [ + { + "role": "Generalist", + "movepool": ["psychic", "rest", "sleeptalk", "surf"] + } + ] + }, + "misdreavus": { + "sets": [ + { + "role": "Generalist", + "movepool": ["meanlook", "painsplit", "perishsong", "protect", "thunder"] + }, + { + "role": "Thief user", + "movepool": ["hypnosis", "psychic", "thief", "thunder"] + }, + { + "role": "Bulky Attacker", + "movepool": ["hypnosis", "painsplit", "psychic", "shadowball", "thief", "thunder"], + "preferredTypes": ["Electric"] + } + ] + }, + "unown": { + "level": 100, + "sets": [ + { + "role": "Generalist", + "movepool": ["hiddenpowerpsychic"] + } + ] + }, + "wobbuffet": { + "level": 95, + "sets": [ + { + "role": "Generalist", + "movepool": ["counter", "mimic", "mirrorcoat", "safeguard"] + } + ] + }, + "girafarig": { + "sets": [ + { + "role": "Fast Attacker", + "movepool": ["earthquake", "psychic", "rest", "return", "sleeptalk", "thunder"] + }, + { + "role": "Setup Sweeper", + "movepool": ["agility", "amnesia", "batonpass", "psychic"] + }, + { + "role": "Bulky Setup", + "movepool": ["agility", "batonpass", "psychic", "thunder"] + } + ] + }, + "forretress": { + "sets": [ + { + "role": "Generalist", + "movepool": ["explosion", "hiddenpowerbug", "hiddenpowersteel", "rapidspin", "spikes", "toxic"] + } + ] + }, + "dunsparce": { + "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["curse", "glare", "hiddenpowerground", "return"] + }, + { + "role": "Generalist", + "movepool": ["curse", "rest", "return", "sleeptalk", "thunder"] + } + ] + }, + "gligar": { + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["earthquake", "hiddenpowerflying", "rest", "sleeptalk"] + }, + { + "role": "Thief user", + "movepool": ["counter", "earthquake", "hiddenpowerflying", "thief", "toxic"] + } + ] + }, + "steelix": { + "sets": [ + { + "role": "Generalist", + "movepool": ["curse", "earthquake", "irontail", "rest", "roar", "sleeptalk"] + }, + { + "role": "Bulky Attacker", + "movepool": ["curse", "earthquake", "irontail", "rest"] + }, + { + "role": "Bulky Setup", + "movepool": ["curse", "earthquake", "explosion", "irontail", "roar"] + } + ] + }, + "granbull": { + "sets": [ + { + "role": "Bulky Setup", + "movepool": ["curse", "rest", "return", "sleeptalk"] + }, + { + "role": "Bulky Support", + "movepool": ["healbell", "hiddenpowerground", "rest", "return", "sleeptalk"] + }, + { + "role": "Setup Sweeper", + "movepool": ["curse", "hiddenpowerground", "lovelykiss", "return"] + } + ] + }, + "qwilfish": { + "sets": [ + { + "role": "Generalist", + "movepool": ["curse", "haze", "hiddenpowerground", "hydropump", "sludgebomb", "spikes"] + } + ] + }, + "scizor": { + "sets": [ + { + "role": "Generalist", + "movepool": ["agility", "batonpass", "hiddenpowerbug", "hiddenpowersteel", "swordsdance"] + }, + { + "role": "Setup Sweeper", + "movepool": ["agility", "hiddenpowerground", "return", "swordsdance"] + }, + { + "role": "Bulky Setup", + "movepool": ["curse", "hiddenpowerbug", "hiddenpowersteel", "rest", "sleeptalk", "swordsdance"] + } + ] + }, + "shuckle": { + "sets": [ + { + "role": "Bulky Setup", + "movepool": ["defensecurl", "rest", "rollout", "toxic"] + } + ] + }, + "heracross": { + "sets": [ + { + "role": "Generalist", + "movepool": ["curse", "earthquake", "megahorn", "rest", "sleeptalk"] + }, + { + "role": "Setup Sweeper", + "movepool": ["curse", "earthquake", "hiddenpowerrock", "megahorn"] + } + ] + }, + "sneasel": { + "sets": [ + { + "role": "Generalist", + "movepool": ["hiddenpowerground", "moonlight", "return", "toxic"] + }, + { + "role": "Bulky Attacker", + "movepool": ["dynamicpunch", "icebeam", "moonlight", "return"] + }, + { + "role": "Thief user", + "movepool": ["dynamicpunch", "moonlight", "return", "thief"] + } + ] + }, + "ursaring": { + "sets": [ + { + "role": "Generalist", + "movepool": ["curse", "earthquake", "rest", "return", "sleeptalk"] + } + ] + }, + "magcargo": { + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["earthquake", "fireblast", "flamethrower", "hiddenpowergrass", "rest", "rockslide", "sleeptalk"] + }, + { + "role": "Bulky Setup", + "movepool": ["curse", "fireblast", "flamethrower", "rest", "rockslide"] + } + ] + }, + "piloswine": { + "sets": [ + { + "role": "Generalist", + "movepool": ["earthquake", "icebeam", "rest", "sleeptalk"] + } + ] + }, + "corsola": { + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["curse", "icebeam", "recover", "rockslide", "sandstorm", "surf", "toxic"] + } + ] + }, + "octillery": { + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["flamethrower", "hiddenpowerelectric", "icebeam", "rest", "sleeptalk", "surf"] + } + ] + }, + "delibird": { + "sets": [ + { + "role": "Thief user", + "movepool": ["hiddenpowerflying", "icebeam", "rapidspin", "spikes", "thief", "toxic"] + } + ] + }, + "mantine": { + "sets": [ + { + "role": "Generalist", + "movepool": ["hiddenpowerelectric", "icebeam", "rest", "sleeptalk", "surf"] + } + ] + }, + "skarmory": { + "sets": [ + { + "role": "Generalist", + "movepool": ["curse", "drillpeck", "rest", "sleeptalk"] + }, + { + "role": "Bulky Setup", + "movepool": ["curse", "drillpeck", "rest", "toxic", "whirlwind"] + } + ] + }, + "houndoom": { + "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["crunch", "fireblast", "pursuit", "solarbeam", "sunnyday"], + "preferredTypes": ["Grass"] + }, + { + "role": "Bulky Attacker", + "movepool": ["crunch", "fireblast", "rest", "sleeptalk"] + }, + { + "role": "Generalist", + "movepool": ["counter", "crunch", "fireblast", "pursuit"] + } + ] + }, + "kingdra": { + "sets": [ + { + "role": "Generalist", + "movepool": ["dragonbreath", "icebeam", "rest", "sleeptalk", "surf"] + } + ] + }, + "donphan": { + "sets": [ + { + "role": "Generalist", + "movepool": ["curse", "earthquake", "hiddenpowerrock", "rest", "sleeptalk"] + }, + { + "role": "Bulky Setup", + "movepool": ["curse", "earthquake", "hiddenpowerrock", "roar"] + } + ] + }, + "porygon2": { + "sets": [ + { + "role": "Bulky Setup", + "movepool": ["curse", "doubleedge", "icebeam", "recover", "thunder", "thunderwave"] + } + ] + }, + "stantler": { + "sets": [ + { + "role": "Generalist", + "movepool": ["curse", "earthquake", "rest", "return", "sleeptalk"] + } + ] + }, + "smeargle": { + "sets": [ + { + "role": "Generalist", + "movepool": ["agility", "batonpass", "spiderweb", "spikes", "spore", "swordsdance"] + } + ] + }, + "hitmontop": { + "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["curse", "hiddenpowerghost", "hiddenpowerrock", "highjumpkick", "machpunch"] + }, + { + "role": "Bulky Setup", + "movepool": ["curse", "highjumpkick", "rest", "sleeptalk"] + }, + { + "role": "Generalist", + "movepool": ["hiddenpowerghost", "hiddenpowerrock", "highjumpkick", "rest", "sleeptalk"] + } + ] + }, + "miltank": { + "sets": [ + { + "role": "Bulky Setup", + "movepool": ["bodyslam", "curse", "earthquake", "healbell", "milkdrink"] + } + ] + }, + "blissey": { + "sets": [ + { + "role": "Bulky Support", + "movepool": ["counter", "flamethrower", "healbell", "icebeam", "lightscreen", "present", "softboiled", "thunderwave", "toxic"] + }, + { + "role": "Bulky Attacker", + "movepool": ["healbell", "present", "softboiled", "thunder"] + } + ] + }, + "raikou": { + "sets": [ + { + "role": "Generalist", + "movepool": ["crunch", "hiddenpowerice", "rest", "sleeptalk", "thunder"] + } + ] + }, + "entei": { + "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["fireblast", "hiddenpowerground", "hiddenpowerrock", "solarbeam", "sunnyday"] + }, + { + "role": "Generalist", + "movepool": ["fireblast", "flamethrower", "hiddenpowergrass", "rest", "return", "sleeptalk"] + } + ] + }, + "suicune": { + "sets": [ + { + "role": "Generalist", + "movepool": ["icebeam", "rest", "sleeptalk", "surf", "toxic"] + }, + { + "role": "Bulky Support", + "movepool": ["icebeam", "rest", "roar", "surf", "toxic"] + } + ] + }, + "tyranitar": { + "sets": [ + { + "role": "Generalist", + "movepool": ["crunch", "earthquake", "fireblast", "icebeam", "pursuit", "rockslide", "thunderbolt"] + }, + { + "role": "Bulky Support", + "movepool": ["curse", "earthquake", "rest", "rockslide", "sleeptalk"] + }, + { + "role": "Bulky Setup", + "movepool": ["curse", "rest", "roar", "rockslide"] + } + ] + }, + "lugia": { + "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["aeroblast", "curse", "earthquake", "recover"] + }, + { + "role": "Bulky Setup", + "movepool": ["curse", "hiddenpowerflying", "recover", "whirlwind"] + }, + { + "role": "Bulky Support", + "movepool": ["psychic", "recover", "thunder", "whirlwind"] + } + ] + }, + "hooh": { + "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["curse", "earthquake", "hiddenpowerflying", "recover"] + }, + { + "role": "Bulky Attacker", + "movepool": ["earthquake", "recover", "sacredfire", "thunder"] + } + ] + }, + "celebi": { + "sets": [ + { + "role": "Bulky Support", + "movepool": ["healbell", "leechseed", "psychic", "recover", "toxic"] + }, + { + "role": "Bulky Attacker", + "movepool": ["healbell", "hiddenpowergrass", "psychic", "recover"] + }, + { + "role": "Bulky Setup", + "movepool": ["batonpass", "curse", "recover", "return"] + } + ] + } +} diff --git a/data/random-battles/gen2/teams.ts b/data/random-battles/gen2/teams.ts new file mode 100644 index 000000000000..2ff19a98c159 --- /dev/null +++ b/data/random-battles/gen2/teams.ts @@ -0,0 +1,490 @@ +import RandomGen3Teams from '../gen3/teams'; +import {PRNG, PRNGSeed} from '../../../sim/prng'; +import type {MoveCounter} from '../gen8/teams'; + +// Moves that restore HP: +const RECOVERY_MOVES = [ + 'milkdrink', 'moonlight', 'morningsun', 'painsplit', 'recover', 'softboiled', 'synthesis', +]; +// Moves that boost Attack: +const PHYSICAL_SETUP = [ + 'bellydrum', 'curse', 'meditate', 'swordsdance', +]; +// Conglomerate for ease of access +const SETUP = [ + 'agility', 'bellydrum', 'curse', 'growth', 'meditate', 'raindance', 'sunnyday', 'swordsdance', +]; +// Moves that shouldn't be the only STAB moves: +const NO_STAB = [ + 'explosion', 'icywind', 'machpunch', 'pursuit', 'quickattack', 'rapidspin', 'selfdestruct', 'skyattack', 'thief', +]; + +// Moves that should be paired together when possible +const MOVE_PAIRS = [ + ['sleeptalk', 'rest'], + ['meanlook', 'perishsong'], +]; + +export class RandomGen2Teams extends RandomGen3Teams { + randomSets: {[species: IDEntry]: RandomTeamsTypes.RandomSpeciesData} = require('./sets.json'); + + constructor(format: string | Format, prng: PRNG | PRNGSeed | null) { + super(format, prng); + this.noStab = NO_STAB; + this.moveEnforcementCheckers = { + Electric: (movePool, moves, abilities, types, counter) => !counter.get('Electric'), + Fire: (movePool, moves, abilities, types, counter) => !counter.get('Fire'), + Flying: (movePool, moves, abilities, types, counter, species) => ( + !counter.get('Flying') && ['gligar', 'murkrow', 'xatu'].includes(species.id) + ), + Ground: (movePool, moves, abilities, types, counter) => !counter.get('Ground'), + Ice: (movePool, moves, abilities, types, counter) => !counter.get('Ice'), + Normal: (movePool, moves, abilities, types, counter) => !counter.get('Normal'), + Poison: (movePool, moves, abilities, types, counter) => !counter.get('Poison'), + Psychic: (movePool, moves, abilities, types, counter, species) => !counter.get('Psychic') && species.id !== 'starmie', + Rock: (movePool, moves, abilities, types, counter, species) => !counter.get('Rock') && species.id !== 'magcargo', + Water: (movePool, moves, abilities, types, counter) => !counter.get('Water'), + }; + } + + cullMovePool( + types: string[], + moves: Set, + abilities = {}, + counter: MoveCounter, + movePool: string[], + teamDetails: RandomTeamsTypes.TeamDetails, + species: Species, + isLead: boolean, + preferredType: string, + role: RandomTeamsTypes.Role, + ): void { + // Pokemon cannot have multiple Hidden Powers in any circumstance + let hasHiddenPower = false; + for (const move of moves) { + if (move.startsWith('hiddenpower')) hasHiddenPower = true; + } + if (hasHiddenPower) { + let movePoolHasHiddenPower = true; + while (movePoolHasHiddenPower) { + movePoolHasHiddenPower = false; + for (const moveid of movePool) { + if (moveid.startsWith('hiddenpower')) { + this.fastPop(movePool, movePool.indexOf(moveid)); + movePoolHasHiddenPower = true; + break; + } + } + } + } + + 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])); + } + } + } + + // Team-based move culls + if (teamDetails.spikes) { + if (movePool.includes('spikes')) this.fastPop(movePool, movePool.indexOf('spikes')); + if (moves.size + movePool.length <= this.maxMoveCount) return; + } + if (teamDetails.rapidSpin) { + if (movePool.includes('rapidspin')) this.fastPop(movePool, movePool.indexOf('rapidspin')); + 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; + } + + // General incompatibilities + const incompatiblePairs = [ + // These moves don't mesh well with other aspects of the set + [PHYSICAL_SETUP, PHYSICAL_SETUP], + [SETUP, 'haze'], + ['bodyslam', 'thunderwave'], + [['stunspore', 'thunderwave'], 'toxic'], + + // These attacks are redundant with each other + ['surf', 'hydropump'], + [['bodyslam', 'return'], ['bodyslam', 'doubleedge']], + ['fireblast', 'flamethrower'], + ['thunder', 'thunderbolt'], + ]; + + for (const pair of incompatiblePairs) this.incompatibleMoves(moves, movePool, pair[0], pair[1]); + + if (!role.includes('Bulky')) this.incompatibleMoves(moves, movePool, ['rest', 'sleeptalk'], 'roar'); + } + + // Generate random moveset for a given species, role, preferred type. + randomMoveset( + types: string[], + abilities: string[], + teamDetails: RandomTeamsTypes.TeamDetails, + species: Species, + isLead: boolean, + movePool: string[], + preferredType: string, + role: RandomTeamsTypes.Role, + ): Set { + const preferredTypes = preferredType ? preferredType.split(',') : []; + const moves = new Set(); + let counter = this.newQueryMoves(moves, species, preferredType, abilities); + this.cullMovePool(types, moves, abilities, counter, movePool, teamDetails, species, isLead, + preferredType, role); + + // If there are only four moves, add all moves and return early + if (movePool.length <= this.maxMoveCount) { + // Still need to ensure that multiple Hidden Powers are not added (if maxMoveCount is increased) + while (movePool.length) { + const moveid = this.sample(movePool); + counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, + movePool, preferredType, role); + } + return moves; + } + + const runEnforcementChecker = (checkerName: string) => { + if (!this.moveEnforcementCheckers[checkerName]) return false; + return this.moveEnforcementCheckers[checkerName]( + movePool, moves, abilities, new Set(types), counter, species, teamDetails + ); + }; + + // 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, + movePool, preferredType, role); + } + + // Add other moves you really want to have, e.g. STAB, recovery, setup. + + // Enforce Destiny Bond, Explosion, Present, Spikes and Spore + for (const moveid of ['destinybond', 'explosion', 'present', 'spikes', 'spore']) { + if (movePool.includes(moveid)) { + counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, + movePool, preferredType, role); + } + } + + // Enforce Baton Pass on Smeargle + if (movePool.includes('batonpass') && species.id === 'smeargle') { + counter = this.addMove('batonpass', moves, types, abilities, teamDetails, species, isLead, + movePool, preferredType, role); + } + + // Enforce moves of all Preferred Types + for (const type of preferredTypes) { + if (!counter.get(type)) { + const stabMoves = []; + for (const moveid of movePool) { + const move = this.dex.moves.get(moveid); + const moveType = this.getMoveType(move, species, abilities, preferredType); + if (!this.noStab.includes(moveid) && (move.basePower || move.basePowerCallback) && type === moveType) { + stabMoves.push(moveid); + } + } + if (stabMoves.length) { + const moveid = this.sample(stabMoves); + counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, + movePool, preferredType, role); + } + } + } + + // Enforce STAB + for (const type of types) { + // 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, preferredType); + 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, + movePool, preferredType, role); + } + } + + // If no STAB move was added, add a STAB move + if (!counter.get('stab')) { + const stabMoves = []; + for (const moveid of movePool) { + const move = this.dex.moves.get(moveid); + const moveType = this.getMoveType(move, species, abilities, preferredType); + 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, + movePool, preferredType, 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, + movePool, preferredType, role); + } + // Rest/Sleep Talk count as recovery in Gen 2 + if (movePool.includes('rest')) { + counter = this.addMove('rest', moves, types, abilities, teamDetails, species, isLead, + movePool, preferredType, role); + } + if (movePool.includes('sleeptalk')) { + counter = this.addMove('sleeptalk', moves, types, abilities, teamDetails, species, isLead, + movePool, preferredType, role); + } + } + + // Enforce setup + if (role.includes('Setup')) { + // First, try to add a non-Speed setup move + const nonSpeedSetupMoves = movePool.filter(moveid => SETUP.includes(moveid) && moveid !== 'agility'); + if (nonSpeedSetupMoves.length) { + const moveid = this.sample(nonSpeedSetupMoves); + counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, + movePool, preferredType, role); + } else { + if (movePool.includes('agility')) { + counter = this.addMove('agility', moves, types, abilities, teamDetails, species, isLead, + movePool, preferredType, role); + } + } + } + + // Enforce Thief + if (role === 'Thief user') { + if (movePool.includes('thief')) { + counter = this.addMove('thief', moves, types, abilities, teamDetails, species, isLead, + movePool, preferredType, role); + } + } + + // Enforce a move not on the noSTAB list + if (!counter.damagingMoves.size && !moves.has('present')) { + // 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, + movePool, preferredType, role); + } + } + + // Enforce coverage move + if (['Fast Attacker', 'Setup Sweeper', 'Bulky Attacker'].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, preferredType); + 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, + movePool, preferredType, role); + } + } + } + + // Choose remaining moves randomly from movepool and add them to moves list: + while (moves.size < this.maxMoveCount && movePool.length) { + const moveid = this.sample(movePool); + counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, + movePool, preferredType, 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, + movePool, preferredType, role); + } + if (moveid === pair[1] && movePool.includes(pair[0])) { + counter = this.addMove(pair[0], moves, types, abilities, teamDetails, species, isLead, + movePool, preferredType, role); + } + } + } + return moves; + } + + getItem( + ability: string, + types: string[], + moves: Set, + counter: MoveCounter, + teamDetails: RandomTeamsTypes.TeamDetails, + species: Species, + isLead: boolean, + preferredType: string, + role: RandomTeamsTypes.Role, + ): string { + // First, the high-priority items + if (species.id === 'ditto') return 'Metal Powder'; + if (species.id === 'marowak') return 'Thick Club'; + if (species.id === 'pikachu') return 'Light Ball'; + + if (moves.has('thief')) return ''; + + if (moves.has('flail')) return 'Pink Bow'; + if (moves.has('reversal')) return 'Black Belt'; + + if (moves.has('rest') && !moves.has('sleeptalk') && !role.includes('Bulky')) return 'Mint Berry'; + + if (moves.has('bellydrum') && !counter.get('recovery') && this.randomChance(1, 2)) return 'Miracle Berry'; + + // Default to Leftovers + return 'Leftovers'; + } + + randomSet( + species: string | Species, + teamDetails: RandomTeamsTypes.TeamDetails = {}, + isLead = false + ): RandomTeamsTypes.RandomSet { + species = this.dex.species.get(species); + const forme = this.getForme(species); + const sets = this.randomSets[species.id]["sets"]; + + const set = this.sampleIfArray(sets); + const role = set.role; + const movePool: string[] = Array.from(set.movepool); + const preferredTypes = set.preferredTypes; + // In Gen 2, if a set has multiple preferred types, enforce all of them. + const preferredType = preferredTypes ? preferredTypes.join() : ''; + + const ability = ''; + let item = undefined; + + const evs = {hp: 255, atk: 255, def: 255, spa: 255, spd: 255, spe: 255}; + const ivs = {hp: 30, atk: 30, def: 30, spa: 30, spd: 30, spe: 30}; + + const types = species.types; + const abilities: string[] = []; + + // Get moves + const moves = this.randomMoveset(types, abilities, teamDetails, species, isLead, movePool, + preferredType, role); + const counter = this.newQueryMoves(moves, species, preferredType, abilities); + + // Get items + item = this.getItem(ability, types, moves, counter, teamDetails, species, isLead, preferredType, role); + + const level = this.getLevel(species); + + // We use a special variable to track Hidden Power + // so that we can check for all Hidden Powers at once + let hasHiddenPower = false; + for (const move of moves) { + if (move.startsWith('hiddenpower')) hasHiddenPower = true; + } + + if (hasHiddenPower) { + let hpType; + for (const move of moves) { + if (move.startsWith('hiddenpower')) hpType = move.substr(11); + } + if (!hpType) throw new Error(`hasHiddenPower is true, but no Hidden Power move was found.`); + const hpIVs: {[k: string]: Partial} = { + dragon: {def: 28}, + ice: {def: 26}, + psychic: {def: 24}, + electric: {atk: 28}, + grass: {atk: 28, def: 28}, + water: {atk: 28, def: 26}, + fire: {atk: 28, def: 24}, + steel: {atk: 26}, + ghost: {atk: 26, def: 28}, + bug: {atk: 26, def: 26}, + rock: {atk: 26, def: 24}, + ground: {atk: 24}, + poison: {atk: 24, def: 28}, + flying: {atk: 24, def: 26}, + fighting: {atk: 24, def: 24}, + }; + let iv: StatID; + for (iv in hpIVs[hpType]) { + ivs[iv] = hpIVs[hpType][iv]!; + } + if (ivs.atk === 28 || ivs.atk === 24) ivs.hp = 14; + if (ivs.def === 28 || ivs.def === 24) ivs.hp -= 8; + } + + // Prepare optimal HP + 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') && item !== 'Leftovers') { + // Should be able to use four Substitutes + if (hp % 4 > 0) break; + } else if (moves.has('bellydrum') && item !== 'Leftovers') { + // Belly Drum users without Leftovers should reach exactly 50% HP + if (hp % 2 === 0) break; + } else { + break; + } + evs.hp -= 4; + } + + // shuffle moves to add more randomness to camomons + const shuffledMoves = Array.from(moves); + this.prng.shuffle(shuffledMoves); + + return { + name: species.baseSpecies, + species: forme, + level, + moves: shuffledMoves, + ability: 'No Ability', + evs, + ivs, + item, + role, + // No shiny chance because Gen 2 shinies have bad IVs + shiny: false, + gender: species.gender ? species.gender : 'M', + }; + } +} + +export default RandomGen2Teams; diff --git a/data/random-battles/gen3/sets.json b/data/random-battles/gen3/sets.json new file mode 100644 index 000000000000..bf13e4bf972e --- /dev/null +++ b/data/random-battles/gen3/sets.json @@ -0,0 +1,3132 @@ +{ + "venusaur": { + "level": 81, + "sets": [ + { + "role": "Staller", + "movepool": ["hiddenpowergrass", "leechseed", "sleeppowder", "sludgebomb", "substitute"], + "abilities": ["Overgrow"] + }, + { + "role": "Setup Sweeper", + "movepool": ["earthquake", "hiddenpowerghost", "sleeppowder", "sludgebomb", "swordsdance", "synthesis"], + "abilities": ["Overgrow"], + "preferredTypes": ["Ground"] + } + ] + }, + "charizard": { + "level": 80, + "sets": [ + { + "role": "Wallbreaker", + "movepool": ["dragondance", "earthquake", "fireblast", "hiddenpowerflying", "rockslide"], + "abilities": ["Blaze"], + "preferredTypes": ["Ground"] + }, + { + "role": "Setup Sweeper", + "movepool": ["bellydrum", "earthquake", "hiddenpowerflying", "rockslide", "substitute"], + "abilities": ["Blaze"], + "preferredTypes": ["Ground"] + }, + { + "role": "Berry Sweeper", + "movepool": ["dragonclaw", "fireblast", "hiddenpowergrass", "substitute"], + "abilities": ["Blaze"] + } + ] + }, + "blastoise": { + "level": 82, + "sets": [ + { + "role": "Bulky Support", + "movepool": ["icebeam", "rest", "sleeptalk", "surf", "toxic"], + "abilities": ["Torrent"] + }, + { + "role": "Bulky Attacker", + "movepool": ["icebeam", "rapidspin", "refresh", "roar", "surf", "toxic"], + "abilities": ["Torrent"] + }, + { + "role": "Staller", + "movepool": ["icebeam", "protect", "refresh", "surf", "toxic"], + "abilities": ["Torrent"] + } + ] + }, + "butterfree": { + "level": 96, + "sets": [ + { + "role": "Generalist", + "movepool": ["hiddenpowerfire", "morningsun", "psychic", "sleeppowder", "stunspore", "toxic"], + "abilities": ["Compound Eyes"], + "preferredTypes": ["Psychic"] + } + ] + }, + "beedrill": { + "level": 92, + "sets": [ + { + "role": "Berry Sweeper", + "movepool": ["brickbreak", "endure", "hiddenpowerbug", "sludgebomb", "swordsdance"], + "abilities": ["Swarm"], + "preferredTypes": ["Bug"] + }, + { + "role": "Fast Attacker", + "movepool": ["brickbreak", "doubleedge", "hiddenpowerbug", "sludgebomb", "swordsdance"], + "abilities": ["Swarm"] + } + ] + }, + "pidgeot": { + "level": 87, + "sets": [ + { + "role": "Fast Attacker", + "movepool": ["aerialace", "doubleedge", "hiddenpowerground", "quickattack", "return", "toxic"], + "abilities": ["Keen Eye"], + "preferredTypes": ["Ground"] + }, + { + "role": "Berry Sweeper", + "movepool": ["aerialace", "hiddenpowerground", "return", "substitute"], + "abilities": ["Keen Eye"] + } + ] + }, + "raticate": { + "level": 85, + "sets": [ + { + "role": "Wallbreaker", + "movepool": ["doubleedge", "hiddenpowerground", "quickattack", "return", "shadowball"], + "abilities": ["Guts"] + }, + { + "role": "Fast Attacker", + "movepool": ["doubleedge", "facade", "hiddenpowerground", "return", "shadowball"], + "abilities": ["Guts"] + }, + { + "role": "Berry Sweeper", + "movepool": ["return", "reversal", "shadowball", "substitute"], + "abilities": ["Guts"] + } + ] + }, + "fearow": { + "level": 81, + "sets": [ + { + "role": "Fast Attacker", + "movepool": ["doubleedge", "drillpeck", "hiddenpowerground", "quickattack", "return"], + "abilities": ["Keen Eye"] + } + ] + }, + "arbok": { + "level": 85, + "sets": [ + { + "role": "Wallbreaker", + "movepool": ["earthquake", "hiddenpowerghost", "rest", "rockslide", "sleeptalk", "sludgebomb"], + "abilities": ["Intimidate"], + "preferredTypes": ["Ground"] + } + ] + }, + "pikachu": { + "level": 88, + "sets": [ + { + "role": "Fast Attacker", + "movepool": ["encore", "hiddenpowerice", "substitute", "surf", "thunderbolt"], + "abilities": ["Static"], + "preferredTypes": ["Ice", "Water"] + }, + { + "role": "Wallbreaker", + "movepool": ["hiddenpowerice", "surf", "thunderbolt", "volttackle"], + "abilities": ["Static"] + } + ] + }, + "raichu": { + "level": 83, + "sets": [ + { + "role": "Fast Attacker", + "movepool": ["encore", "hiddenpowerice", "surf", "thunderbolt", "thunderwave", "toxic"], + "abilities": ["Static"], + "preferredTypes": ["Ice"] + }, + { + "role": "Berry Sweeper", + "movepool": ["hiddenpowerice", "substitute", "surf", "thunderbolt"], + "abilities": ["Static"] + } + ] + }, + "sandslash": { + "level": 85, + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["earthquake", "hiddenpowerbug", "rapidspin", "rockslide", "swordsdance", "toxic"], + "abilities": ["Sand Veil"], + "preferredTypes": ["Rock"] + } + ] + }, + "nidoqueen": { + "level": 82, + "sets": [ + { + "role": "Wallbreaker", + "movepool": ["earthquake", "fireblast", "icebeam", "shadowball", "sludgebomb", "substitute", "thunderbolt"], + "abilities": ["Poison Point"] + } + ] + }, + "nidoking": { + "level": 80, + "sets": [ + { + "role": "Wallbreaker", + "movepool": ["earthquake", "fireblast", "icebeam", "megahorn", "shadowball", "sludgebomb", "substitute", "thunderbolt"], + "abilities": ["Poison Point"] + } + ] + }, + "clefable": { + "level": 85, + "sets": [ + { + "role": "Bulky Support", + "movepool": ["fireblast", "return", "shadowball", "softboiled", "thunderwave", "toxic"], + "abilities": ["Cute Charm"] + }, + { + "role": "Bulky Setup", + "movepool": ["calmmind", "icebeam", "softboiled", "thunderbolt"], + "abilities": ["Cute Charm"] + } + ] + }, + "ninetales": { + "level": 82, + "sets": [ + { + "role": "Fast Attacker", + "movepool": ["fireblast", "flamethrower", "hiddenpowergrass", "hypnosis", "substitute", "toxic", "willowisp"], + "abilities": ["Flash Fire"] + } + ] + }, + "wigglytuff": { + "level": 91, + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["bodyslam", "fireblast", "protect", "wish"], + "abilities": ["Cute Charm"] + }, + { + "role": "Bulky Support", + "movepool": ["doubleedge", "protect", "thunderwave", "toxic", "wish"], + "abilities": ["Cute Charm"] + }, + { + "role": "Staller", + "movepool": ["protect", "seismictoss", "toxic", "wish"], + "abilities": ["Cute Charm"] + } + ] + }, + "vileplume": { + "level": 85, + "sets": [ + { + "role": "Bulky Support", + "movepool": ["aromatherapy", "hiddenpowerfire", "hiddenpowergrass", "sleeppowder", "sludgebomb", "synthesis"], + "abilities": ["Chlorophyll"] + } + ] + }, + "parasect": { + "level": 95, + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["aromatherapy", "gigadrain", "hiddenpowerbug", "return", "spore", "stunspore"], + "abilities": ["Effect Spore"], + "preferredTypes": ["Normal"] + } + ] + }, + "venomoth": { + "level": 87, + "sets": [ + { + "role": "Generalist", + "movepool": ["batonpass", "hiddenpowerfire", "psychic", "signalbeam", "sleeppowder", "sludgebomb", "substitute"], + "abilities": ["Shield Dust"] + }, + { + "role": "Bulky Support", + "movepool": ["hiddenpowerfire", "psychic", "signalbeam", "sleeppowder", "sludgebomb"], + "abilities": ["Shield Dust"] + } + ] + }, + "dugtrio": { + "level": 78, + "sets": [ + { + "role": "Wallbreaker", + "movepool": ["earthquake", "hiddenpowerbug", "rockslide", "sludgebomb"], + "abilities": ["Arena Trap"] + } + ] + }, + "persian": { + "level": 88, + "sets": [ + { + "role": "Berry Sweeper", + "movepool": ["hiddenpowerground", "irontail", "return", "shadowball", "substitute"], + "abilities": ["Limber"] + }, + { + "role": "Fast Attacker", + "movepool": ["hiddenpowerground", "hypnosis", "irontail", "return", "shadowball"], + "abilities": ["Limber"] + } + ] + }, + "golduck": { + "level": 81, + "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["calmmind", "hiddenpowerelectric", "hiddenpowergrass", "hydropump", "hypnosis", "icebeam", "substitute", "surf"], + "abilities": ["Cloud Nine"], + "preferredTypes": ["Ice"] + } + ] + }, + "primeape": { + "level": 84, + "sets": [ + { + "role": "Fast Attacker", + "movepool": ["bulkup", "crosschop", "earthquake", "hiddenpowerghost", "rockslide"], + "abilities": ["Vital Spirit"] + }, + { + "role": "Setup Sweeper", + "movepool": ["bulkup", "crosschop", "hiddenpowerghost", "rockslide", "substitute"], + "abilities": ["Vital Spirit"] + }, + { + "role": "Berry Sweeper", + "movepool": ["bulkup", "hiddenpowerghost", "reversal", "substitute"], + "abilities": ["Vital Spirit"] + } + ] + }, + "arcanine": { + "level": 79, + "sets": [ + { + "role": "Bulky Support", + "movepool": ["flamethrower", "hiddenpowergrass", "rest", "sleeptalk", "toxic"], + "abilities": ["Intimidate"] + }, + { + "role": "Wallbreaker", + "movepool": ["doubleedge", "extremespeed", "fireblast", "hiddenpowerrock", "irontail"], + "abilities": ["Intimidate"], + "preferredTypes": ["Steel"] + }, + { + "role": "Staller", + "movepool": ["flamethrower", "hiddenpowergrass", "hiddenpowerrock", "protect", "toxic"], + "abilities": ["Intimidate"] + } + ] + }, + "poliwrath": { + "level": 85, + "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["brickbreak", "bulkup", "earthquake", "hiddenpowerghost", "hydropump", "hypnosis", "substitute"], + "abilities": ["Water Absorb"] + }, + { + "role": "Bulky Attacker", + "movepool": ["brickbreak", "hiddenpowerghost", "hydropump", "hypnosis", "icebeam", "rest", "sleeptalk", "toxic"], + "abilities": ["Water Absorb"] + }, + { + "role": "Generalist", + "movepool": ["focuspunch", "hydropump", "icebeam", "substitute", "toxic"], + "abilities": ["Water Absorb"] + } + ] + }, + "alakazam": { + "level": 76, + "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["calmmind", "encore", "firepunch", "icepunch", "psychic", "recover", "substitute", "thunderpunch"], + "abilities": ["Synchronize"], + "preferredTypes": ["Fire"] + } + ] + }, + "machamp": { + "level": 83, + "sets": [ + { + "role": "Fast Attacker", + "movepool": ["bulkup", "crosschop", "earthquake", "hiddenpowerghost", "rockslide"], + "abilities": ["Guts"] + }, + { + "role": "Bulky Attacker", + "movepool": ["crosschop", "hiddenpowerghost", "rest", "rockslide", "sleeptalk"], + "abilities": ["Guts"] + } + ] + }, + "victreebel": { + "level": 85, + "sets": [ + { + "role": "Fast Attacker", + "movepool": ["hiddenpowerfire", "sludgebomb", "solarbeam", "sunnyday"], + "abilities": ["Chlorophyll"] + }, + { + "role": "Bulky Attacker", + "movepool": ["hiddenpowerground", "magicalleaf", "sleeppowder", "sludgebomb", "synthesis"], + "abilities": ["Chlorophyll"], + "preferredTypes": ["Ground"] + }, + { + "role": "Setup Sweeper", + "movepool": ["hiddenpowerground", "sleeppowder", "sludgebomb", "swordsdance", "synthesis"], + "abilities": ["Chlorophyll"] + } + ] + }, + "tentacruel": { + "level": 80, + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["hydropump", "icebeam", "rapidspin", "sludgebomb", "surf", "toxic"], + "abilities": ["Clear Body", "Liquid Ooze"] + } + ] + }, + "golem": { + "level": 84, + "sets": [ + { + "role": "Staller", + "movepool": ["earthquake", "protect", "rockslide", "toxic"], + "abilities": ["Rock Head"] + }, + { + "role": "Bulky Attacker", + "movepool": ["doubleedge", "earthquake", "explosion", "hiddenpowerbug", "rockslide", "toxic"], + "abilities": ["Rock Head"] + } + ] + }, + "rapidash": { + "level": 82, + "sets": [ + { + "role": "Fast Attacker", + "movepool": ["fireblast", "hiddenpowergrass", "hiddenpowerrock", "substitute", "toxic"], + "abilities": ["Flash Fire"] + } + ] + }, + "slowbro": { + "level": 82, + "sets": [ + { + "role": "Bulky Support", + "movepool": ["fireblast", "icebeam", "psychic", "rest", "sleeptalk", "surf", "thunderwave", "toxic"], + "abilities": ["Own Tempo"] + }, + { + "role": "Setup Sweeper", + "movepool": ["calmmind", "psychic", "rest", "surf"], + "abilities": ["Own Tempo"] + }, + { + "role": "Bulky Setup", + "movepool": ["calmmind", "rest", "sleeptalk", "surf"], + "abilities": ["Own Tempo"] + } + ] + }, + "magneton": { + "level": 85, + "sets": [ + { + "role": "Staller", + "movepool": ["hiddenpowerice", "protect", "thunderbolt", "toxic"], + "abilities": ["Magnet Pull"] + }, + { + "role": "Bulky Attacker", + "movepool": ["hiddenpowerice", "rest", "sleeptalk", "thunderbolt"], + "abilities": ["Magnet Pull"] + } + ] + }, + "farfetchd": { + "level": 100, + "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["agility", "batonpass", "return", "swordsdance"], + "abilities": ["Inner Focus"] + } + ] + }, + "dodrio": { + "level": 78, + "sets": [ + { + "role": "Wallbreaker", + "movepool": ["doubleedge", "drillpeck", "hiddenpowerground", "quickattack", "return"], + "abilities": ["Early Bird"] + }, + { + "role": "Berry Sweeper", + "movepool": ["drillpeck", "flail", "hiddenpowerground", "quickattack", "substitute"], + "abilities": ["Early Bird"] + } + ] + }, + "dewgong": { + "level": 87, + "sets": [ + { + "role": "Staller", + "movepool": ["icebeam", "protect", "surf", "toxic"], + "abilities": ["Thick Fat"] + }, + { + "role": "Bulky Attacker", + "movepool": ["encore", "icebeam", "rest", "sleeptalk", "surf", "toxic"], + "abilities": ["Thick Fat"] + } + ] + }, + "muk": { + "level": 84, + "sets": [ + { + "role": "Wallbreaker", + "movepool": ["explosion", "fireblast", "hiddenpowerground", "rest", "sludgebomb", "toxic"], + "abilities": ["Sticky Hold"], + "preferredTypes": ["Ground"] + }, + { + "role": "Setup Sweeper", + "movepool": ["curse", "hiddenpowerground", "rest", "sludgebomb"], + "abilities": ["Sticky Hold"] + } + ] + }, + "cloyster": { + "level": 82, + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["explosion", "icebeam", "rapidspin", "spikes", "surf", "toxic"], + "abilities": ["Shell Armor"] + }, + { + "role": "Bulky Support", + "movepool": ["explosion", "rapidspin", "spikes", "surf", "toxic"], + "abilities": ["Shell Armor"] + } + ] + }, + "gengar": { + "level": 74, + "sets": [ + { + "role": "Fast Attacker", + "movepool": ["destinybond", "explosion", "firepunch", "icepunch", "substitute", "thunderbolt", "willowisp"], + "abilities": ["Levitate"], + "preferredTypes": ["Electric", "Ice"] + } + ] + }, + "hypno": { + "level": 88, + "sets": [ + { + "role": "Bulky Setup", + "movepool": ["batonpass", "calmmind", "firepunch", "psychic"], + "abilities": ["Insomnia"] + }, + { + "role": "Bulky Support", + "movepool": ["firepunch", "protect", "psychic", "toxic", "wish"], + "abilities": ["Insomnia"] + }, + { + "role": "Staller", + "movepool": ["protect", "seismictoss", "toxic", "wish"], + "abilities": ["Insomnia"] + } + ] + }, + "kingler": { + "level": 91, + "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["doubleedge", "hiddenpowerghost", "hiddenpowerground", "surf", "swordsdance"], + "abilities": ["Hyper Cutter"] + } + ] + }, + "electrode": { + "level": 82, + "sets": [ + { + "role": "Fast Attacker", + "movepool": ["explosion", "hiddenpowerice", "substitute", "thunderbolt", "toxic"], + "abilities": ["Static"] + } + ] + }, + "exeggutor": { + "level": 83, + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["gigadrain", "hiddenpowerfire", "psychic", "sleeppowder", "stunspore", "synthesis"], + "abilities": ["Chlorophyll"] + }, + { + "role": "Wallbreaker", + "movepool": ["explosion", "gigadrain", "hiddenpowerfire", "leechseed", "psychic", "sleeppowder", "stunspore", "substitute"], + "abilities": ["Chlorophyll"] + }, + { + "role": "Setup Sweeper", + "movepool": ["hiddenpowerfire", "psychic", "solarbeam", "sunnyday"], + "abilities": ["Chlorophyll"] + } + ] + }, + "marowak": { + "level": 83, + "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["doubleedge", "earthquake", "rockslide", "swordsdance"], + "abilities": ["Rock Head"] + }, + { + "role": "Generalist", + "movepool": ["bonemerang", "doubleedge", "rockslide", "swordsdance"], + "abilities": ["Rock Head"] + } + ] + }, + "hitmonlee": { + "level": 84, + "sets": [ + { + "role": "Fast Attacker", + "movepool": ["bulkup", "earthquake", "hiddenpowerghost", "highjumpkick", "machpunch", "rockslide"], + "abilities": ["Limber"], + "preferredTypes": ["Ghost"] + }, + { + "role": "Berry Sweeper", + "movepool": ["earthquake", "hiddenpowerghost", "reversal", "rockslide", "substitute"], + "abilities": ["Limber"], + "preferredTypes": ["Ghost"] + } + ] + }, + "hitmonchan": { + "level": 87, + "sets": [ + { + "role": "Fast Attacker", + "movepool": ["bulkup", "earthquake", "hiddenpowerghost", "machpunch", "rapidspin", "rockslide", "skyuppercut", "toxic"], + "abilities": ["Keen Eye"], + "preferredTypes": ["Ghost"] + } + ] + }, + "lickitung": { + "level": 94, + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["bodyslam", "earthquake", "protect", "wish"], + "abilities": ["Own Tempo"] + }, + { + "role": "Bulky Support", + "movepool": ["healbell", "knockoff", "protect", "seismictoss", "wish"], + "abilities": ["Own Tempo"] + }, + { + "role": "Staller", + "movepool": ["protect", "seismictoss", "toxic", "wish"], + "abilities": ["Own Tempo"] + } + ] + }, + "weezing": { + "level": 82, + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["explosion", "fireblast", "haze", "painsplit", "sludgebomb", "toxic", "willowisp"], + "abilities": ["Levitate"] + } + ] + }, + "rhydon": { + "level": 84, + "sets": [ + { + "role": "Fast Attacker", + "movepool": ["earthquake", "megahorn", "rockslide", "substitute", "swordsdance"], + "abilities": ["Rock Head"] + }, + { + "role": "Wallbreaker", + "movepool": ["doubleedge", "earthquake", "megahorn", "rockslide"], + "abilities": ["Rock Head"] + } + ] + }, + "tangela": { + "level": 93, + "sets": [ + { + "role": "Bulky Support", + "movepool": ["hiddenpowergrass", "leechseed", "morningsun", "sleeppowder", "stunspore", "toxic"], + "abilities": ["Chlorophyll"] + }, + { + "role": "Setup Sweeper", + "movepool": ["hiddenpowerfire", "morningsun", "sleeppowder", "solarbeam", "sunnyday"], + "abilities": ["Chlorophyll"] + } + ] + }, + "kangaskhan": { + "level": 79, + "sets": [ + { + "role": "Fast Attacker", + "movepool": ["doubleedge", "earthquake", "rest", "return", "shadowball", "toxic"], + "abilities": ["Early Bird"], + "preferredTypes": ["Ground"] + }, + { + "role": "Bulky Attacker", + "movepool": ["bodyslam", "earthquake", "protect", "return", "wish"], + "abilities": ["Early Bird"] + } + ] + }, + "seaking": { + "level": 90, + "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["hiddenpowerelectric", "hiddenpowergrass", "hydropump", "icebeam", "megahorn", "raindance"], + "abilities": ["Swift Swim"] + } + ] + }, + "starmie": { + "level": 75, + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["hydropump", "icebeam", "psychic", "recover", "surf", "thunderbolt"], + "abilities": ["Natural Cure"] + } + ] + }, + "mrmime": { + "level": 84, + "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["batonpass", "calmmind", "encore", "firepunch", "hypnosis", "psychic", "substitute", "thunderbolt"], + "abilities": ["Soundproof"] + } + ] + }, + "scyther": { + "level": 81, + "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["aerialace", "batonpass", "hiddenpowerground", "silverwind", "swordsdance"], + "abilities": ["Swarm"], + "preferredTypes": ["Ground"] + } + ] + }, + "jynx": { + "level": 80, + "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["calmmind", "hiddenpowerfire", "icebeam", "lovelykiss", "psychic", "substitute"], + "abilities": ["Oblivious"] + } + ] + }, + "electabuzz": { + "level": 82, + "sets": [ + { + "role": "Fast Attacker", + "movepool": ["crosschop", "firepunch", "focuspunch", "hiddenpowergrass", "icepunch", "substitute", "thunderbolt"], + "abilities": ["Static"], + "preferredTypes": ["Ice"] + }, + { + "role": "Berry Sweeper", + "movepool": ["firepunch", "hiddenpowergrass", "icepunch", "substitute", "thunderbolt"], + "abilities": ["Static"], + "preferredTypes": ["Ice"] + } + ] + }, + "magmar": { + "level": 85, + "sets": [ + { + "role": "Fast Attacker", + "movepool": ["crosschop", "fireblast", "flamethrower", "focuspunch", "hiddenpowergrass", "hiddenpowerice", "substitute", "thunderpunch", "toxic"], + "abilities": ["Flame Body"], + "preferredTypes": ["Electric"] + }, + { + "role": "Berry Sweeper", + "movepool": ["fireblast", "flamethrower", "hiddenpowergrass", "hiddenpowerice", "substitute", "thunderpunch"], + "abilities": ["Flame Body"], + "preferredTypes": ["Electric"] + } + ] + }, + "pinsir": { + "level": 81, + "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["earthquake", "hiddenpowerbug", "rockslide", "swordsdance"], + "abilities": ["Hyper Cutter"] + }, + { + "role": "Wallbreaker", + "movepool": ["doubleedge", "earthquake", "hiddenpowerbug", "rockslide"], + "abilities": ["Hyper Cutter"] + } + ] + }, + "tauros": { + "level": 76, + "sets": [ + { + "role": "Wallbreaker", + "movepool": ["doubleedge", "earthquake", "hiddenpowerghost", "return"], + "abilities": ["Intimidate"] + } + ] + }, + "gyarados": { + "level": 74, + "sets": [ + { + "role": "Wallbreaker", + "movepool": ["doubleedge", "dragondance", "earthquake", "hiddenpowerflying", "hydropump"], + "abilities": ["Intimidate"], + "preferredTypes": ["Ground"] + }, + { + "role": "Setup Sweeper", + "movepool": ["doubleedge", "dragondance", "earthquake", "hiddenpowerflying", "substitute"], + "abilities": ["Intimidate"], + "preferredTypes": ["Ground"] + } + ] + }, + "lapras": { + "level": 79, + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["healbell", "icebeam", "rest", "sleeptalk", "surf", "thunderbolt", "toxic"], + "abilities": ["Water Absorb"] + }, + { + "role": "Fast Attacker", + "movepool": ["healbell", "icebeam", "rest", "sleeptalk", "thunderbolt", "toxic"], + "abilities": ["Water Absorb"] + } + ] + }, + "ditto": { + "level": 100, + "sets": [ + { + "role": "Generalist", + "movepool": ["transform"], + "abilities": ["Limber"] + } + ] + }, + "vaporeon": { + "level": 80, + "sets": [ + { + "role": "Bulky Support", + "movepool": ["icebeam", "protect", "surf", "toxic", "wish"], + "abilities": ["Water Absorb"] + } + ] + }, + "jolteon": { + "level": 77, + "sets": [ + { + "role": "Staller", + "movepool": ["hiddenpowerice", "protect", "thunderbolt", "toxic"], + "abilities": ["Volt Absorb"] + }, + { + "role": "Fast Attacker", + "movepool": ["batonpass", "hiddenpowerice", "substitute", "thunderbolt"], + "abilities": ["Volt Absorb"] + } + ] + }, + "flareon": { + "level": 88, + "sets": [ + { + "role": "Bulky Support", + "movepool": ["flamethrower", "hiddenpowergrass", "protect", "toxic", "wish"], + "abilities": ["Flash Fire"] + }, + { + "role": "Wallbreaker", + "movepool": ["doubleedge", "fireblast", "hiddenpowergrass", "hiddenpowerrock", "irontail", "shadowball", "toxic"], + "abilities": ["Flash Fire"] + } + ] + }, + "omastar": { + "level": 84, + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["hiddenpowergrass", "hydropump", "icebeam", "spikes", "surf"], + "abilities": ["Shell Armor", "Swift Swim"] + }, + { + "role": "Setup Sweeper", + "movepool": ["hiddenpowergrass", "hydropump", "icebeam", "raindance", "surf"], + "abilities": ["Swift Swim"] + } + ] + }, + "kabutops": { + "level": 84, + "sets": [ + { + "role": "Wallbreaker", + "movepool": ["brickbreak", "hiddenpowerflying", "rockslide", "surf", "swordsdance"], + "abilities": ["Battle Armor", "Swift Swim"] + } + ] + }, + "aerodactyl": { + "level": 74, + "sets": [ + { + "role": "Fast Attacker", + "movepool": ["doubleedge", "earthquake", "hiddenpowerflying", "rockslide"], + "abilities": ["Rock Head"] + }, + { + "role": "Berry Sweeper", + "movepool": ["earthquake", "hiddenpowerflying", "rockslide", "substitute"], + "abilities": ["Pressure"] + } + ] + }, + "snorlax": { + "level": 72, + "sets": [ + { + "role": "Wallbreaker", + "movepool": ["bodyslam", "earthquake", "return", "selfdestruct", "shadowball"], + "abilities": ["Immunity"] + }, + { + "role": "Bulky Support", + "movepool": ["bodyslam", "curse", "rest", "sleeptalk"], + "abilities": ["Thick Fat"] + }, + { + "role": "Bulky Setup", + "movepool": ["bodyslam", "curse", "earthquake", "rest"], + "abilities": ["Immunity", "Thick Fat"] + } + ] + }, + "articuno": { + "level": 80, + "sets": [ + { + "role": "Staller", + "movepool": ["healbell", "hiddenpowerfire", "icebeam", "protect", "toxic"], + "abilities": ["Pressure"] + }, + { + "role": "Bulky Attacker", + "movepool": ["hiddenpowerfire", "icebeam", "rest", "sleeptalk"], + "abilities": ["Pressure"] + } + ] + }, + "zapdos": { + "level": 74, + "sets": [ + { + "role": "Staller", + "movepool": ["hiddenpowerice", "protect", "thunderbolt", "toxic"], + "abilities": ["Pressure"] + }, + { + "role": "Fast Attacker", + "movepool": ["batonpass", "hiddenpowerice", "substitute", "thunderbolt", "thunderwave", "toxic"], + "abilities": ["Pressure"] + }, + { + "role": "Bulky Attacker", + "movepool": ["hiddenpowerice", "rest", "sleeptalk", "thunderbolt"], + "abilities": ["Pressure"] + } + ] + }, + "moltres": { + "level": 78, + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["fireblast", "flamethrower", "hiddenpowergrass", "morningsun", "substitute", "toxic", "willowisp"], + "abilities": ["Pressure"] + } + ] + }, + "dragonite": { + "level": 76, + "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["doubleedge", "dragondance", "earthquake", "healbell", "hiddenpowerflying", "rest", "substitute"], + "abilities": ["Inner Focus"], + "preferredTypes": ["Ground"] + }, + { + "role": "Wallbreaker", + "movepool": ["brickbreak", "doubleedge", "earthquake", "fireblast", "hiddenpowerflying"], + "abilities": ["Inner Focus"], + "preferredTypes": ["Ground"] + } + ] + }, + "mewtwo": { + "level": 66, + "sets": [ + { + "role": "Bulky Setup", + "movepool": ["calmmind", "flamethrower", "psychic", "recover"], + "abilities": ["Pressure"] + }, + { + "role": "Setup Sweeper", + "movepool": ["calmmind", "flamethrower", "icebeam", "psychic", "thunderbolt"], + "abilities": ["Pressure"], + "preferredTypes": ["Electric"] + } + ] + }, + "mew": { + "level": 72, + "sets": [ + { + "role": "Bulky Support", + "movepool": ["explosion", "flamethrower", "psychic", "softboiled", "thunderwave", "transform"], + "abilities": ["Synchronize"] + }, + { + "role": "Bulky Setup", + "movepool": ["calmmind", "flamethrower", "psychic", "softboiled", "thunderbolt"], + "abilities": ["Synchronize"] + }, + { + "role": "Setup Sweeper", + "movepool": ["brickbreak", "earthquake", "explosion", "rockslide", "softboiled", "swordsdance"], + "abilities": ["Synchronize"], + "preferredTypes": ["Ground", "Rock"] + } + ] + }, + "meganium": { + "level": 85, + "sets": [ + { + "role": "Staller", + "movepool": ["bodyslam", "earthquake", "hiddenpowergrass", "leechseed", "synthesis", "toxic"], + "abilities": ["Overgrow"] + }, + { + "role": "Bulky Setup", + "movepool": ["bodyslam", "earthquake", "hiddenpowerrock", "swordsdance", "synthesis"], + "abilities": ["Overgrow"], + "preferredTypes": ["Ground"] + } + ] + }, + "typhlosion": { + "level": 79, + "sets": [ + { + "role": "Berry Sweeper", + "movepool": ["fireblast", "flamethrower", "hiddenpowerice", "substitute", "thunderpunch"], + "abilities": ["Blaze"] + }, + { + "role": "Fast Attacker", + "movepool": ["earthquake", "fireblast", "flamethrower", "focuspunch", "hiddenpowerice", "substitute", "thunderpunch", "toxic"], + "abilities": ["Blaze"], + "preferredTypes": ["Electric"] + } + ] + }, + "feraligatr": { + "level": 83, + "sets": [ + { + "role": "Wallbreaker", + "movepool": ["earthquake", "hiddenpowerflying", "hydropump", "rockslide", "swordsdance"], + "abilities": ["Torrent"], + "preferredTypes": ["Ground"] + } + ] + }, + "furret": { + "level": 87, + "sets": [ + { + "role": "Wallbreaker", + "movepool": ["brickbreak", "doubleedge", "quickattack", "return", "shadowball"], + "abilities": ["Keen Eye"] + }, + { + "role": "Fast Attacker", + "movepool": ["brickbreak", "doubleedge", "return", "shadowball", "trick"], + "abilities": ["Keen Eye"] + }, + { + "role": "Berry Sweeper", + "movepool": ["return", "reversal", "shadowball", "substitute"], + "abilities": ["Keen Eye"] + } + ] + }, + "noctowl": { + "level": 92, + "sets": [ + { + "role": "Staller", + "movepool": ["hiddenpowerfire", "hypnosis", "return", "toxic", "whirlwind"], + "abilities": ["Insomnia"] + } + ] + }, + "ledian": { + "level": 100, + "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["agility", "batonpass", "silverwind", "swordsdance"], + "abilities": ["Swarm"] + }, + { + "role": "Generalist", + "movepool": ["batonpass", "silverwind", "substitute", "swordsdance"], + "abilities": ["Swarm"] + } + ] + }, + "ariados": { + "level": 98, + "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["agility", "batonpass", "signalbeam", "sludgebomb"], + "abilities": ["Insomnia", "Swarm"] + }, + { + "role": "Bulky Support", + "movepool": ["batonpass", "signalbeam", "sludgebomb", "spiderweb", "toxic"], + "abilities": ["Insomnia", "Swarm"], + "preferredTypes": ["Bug"] + }, + { + "role": "Bulky Setup", + "movepool": ["agility", "batonpass", "sludgebomb", "spiderweb"], + "abilities": ["Insomnia"] + } + ] + }, + "crobat": { + "level": 79, + "sets": [ + { + "role": "Fast Attacker", + "movepool": ["aerialace", "haze", "hiddenpowerground", "shadowball", "sludgebomb", "toxic"], + "abilities": ["Inner Focus"], + "preferredTypes": ["Ground"] + } + ] + }, + "lanturn": { + "level": 82, + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["icebeam", "rest", "sleeptalk", "surf", "thunderbolt", "toxic"], + "abilities": ["Volt Absorb"] + } + ] + }, + "togetic": { + "level": 96, + "sets": [ + { + "role": "Staller", + "movepool": ["charm", "encore", "flamethrower", "seismictoss", "softboiled", "thunderwave", "toxic"], + "abilities": ["Serene Grace"] + }, + { + "role": "Bulky Support", + "movepool": ["protect", "seismictoss", "toxic", "wish"], + "abilities": ["Serene Grace"] + } + ] + }, + "xatu": { + "level": 85, + "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["calmmind", "hiddenpowerfire", "psychic", "rest"], + "abilities": ["Early Bird"] + }, + { + "role": "Bulky Attacker", + "movepool": ["batonpass", "calmmind", "hiddenpowerfire", "protect", "psychic", "wish"], + "abilities": ["Synchronize"] + }, + { + "role": "Bulky Support", + "movepool": ["protect", "psychic", "thunderwave", "toxic", "wish"], + "abilities": ["Synchronize"] + } + ] + }, + "ampharos": { + "level": 82, + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["firepunch", "healbell", "hiddenpowerice", "thunderbolt", "toxic"], + "abilities": ["Static"], + "preferredTypes": ["Ice"] + } + ] + }, + "bellossom": { + "level": 91, + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["hiddenpowerfire", "leechseed", "magicalleaf", "moonlight", "sleeppowder", "stunspore"], + "abilities": ["Chlorophyll"] + } + ] + }, + "azumarill": { + "level": 87, + "sets": [ + { + "role": "Wallbreaker", + "movepool": ["brickbreak", "doubleedge", "hiddenpowerghost", "hydropump", "rest", "return", "sleeptalk"], + "abilities": ["Huge Power"], + "preferredTypes": ["Normal"] + } + ] + }, + "sudowoodo": { + "level": 92, + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["brickbreak", "doubleedge", "earthquake", "explosion", "rockslide", "toxic"], + "abilities": ["Rock Head"], + "preferredTypes": ["Ground"] + } + ] + }, + "politoed": { + "level": 84, + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["hiddenpowergrass", "hypnosis", "icebeam", "rest", "surf", "toxic"], + "abilities": ["Water Absorb"], + "preferredTypes": ["Ice"] + }, + { + "role": "Staller", + "movepool": ["icebeam", "protect", "surf", "toxic"], + "abilities": ["Water Absorb"] + }, + { + "role": "Bulky Support", + "movepool": ["icebeam", "rest", "sleeptalk", "surf", "toxic"], + "abilities": ["Water Absorb"] + } + ] + }, + "jumpluff": { + "level": 87, + "sets": [ + { + "role": "Generalist", + "movepool": ["encore", "hiddenpowerflying", "sleeppowder", "synthesis", "toxic"], + "abilities": ["Chlorophyll"] + }, + { + "role": "Staller", + "movepool": ["hiddenpowerflying", "leechseed", "protect", "substitute"], + "abilities": ["Chlorophyll"] + } + ] + }, + "aipom": { + "level": 93, + "sets": [ + { + "role": "Fast Attacker", + "movepool": ["brickbreak", "focuspunch", "return", "shadowball", "substitute", "thunderwave", "toxic"], + "abilities": ["Pickup", "Run Away"], + "preferredTypes": ["Ghost"] + }, + { + "role": "Generalist", + "movepool": ["batonpass", "brickbreak", "return", "shadowball", "substitute", "thunderwave", "toxic"], + "abilities": ["Pickup", "Run Away"] + }, + { + "role": "Wallbreaker", + "movepool": ["batonpass", "brickbreak", "doubleedge", "return", "shadowball"], + "abilities": ["Pickup", "Run Away"] + } + ] + }, + "sunflora": { + "level": 99, + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["hiddenpowerfire", "leechseed", "razorleaf", "synthesis", "toxic"], + "abilities": ["Chlorophyll"] + }, + { + "role": "Fast Attacker", + "movepool": ["hiddenpowerfire", "solarbeam", "sunnyday", "synthesis"], + "abilities": ["Chlorophyll"] + } + ] + }, + "yanma": { + "level": 91, + "sets": [ + { + "role": "Berry Sweeper", + "movepool": ["hiddenpowerflying", "hypnosis", "reversal", "shadowball", "substitute"], + "abilities": ["Compound Eyes", "Speed Boost"] + }, + { + "role": "Fast Attacker", + "movepool": ["aerialace", "doubleedge", "hiddenpowerground", "hypnosis", "signalbeam", "toxic"], + "abilities": ["Compound Eyes", "Speed Boost"], + "preferredTypes": ["Ground"] + } + ] + }, + "quagsire": { + "level": 85, + "sets": [ + { + "role": "Staller", + "movepool": ["earthquake", "icebeam", "protect", "toxic"], + "abilities": ["Water Absorb"] + }, + { + "role": "Bulky Attacker", + "movepool": ["earthquake", "icebeam", "rest", "sleeptalk", "surf", "toxic"], + "abilities": ["Water Absorb"] + } + ] + }, + "espeon": { + "level": 77, + "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["batonpass", "calmmind", "hiddenpowerfire", "morningsun", "psychic", "substitute"], + "abilities": ["Synchronize"] + } + ] + }, + "umbreon": { + "level": 85, + "sets": [ + { + "role": "Staller", + "movepool": ["hiddenpowerfire", "hiddenpowerground", "protect", "toxic", "wish"], + "abilities": ["Synchronize"] + }, + { + "role": "Bulky Support", + "movepool": ["batonpass", "protect", "toxic", "wish"], + "abilities": ["Synchronize"] + } + ] + }, + "murkrow": { + "level": 90, + "sets": [ + { + "role": "Wallbreaker", + "movepool": ["doubleedge", "drillpeck", "hiddenpowerfighting", "hiddenpowerground", "shadowball"], + "abilities": ["Insomnia"] + }, + { + "role": "Bulky Attacker", + "movepool": ["drillpeck", "hiddenpowerground", "pursuit", "shadowball", "thunderwave", "toxic"], + "abilities": ["Insomnia"], + "preferredTypes": ["Ground"] + } + ] + }, + "slowking": { + "level": 84, + "sets": [ + { + "role": "Bulky Support", + "movepool": ["fireblast", "icebeam", "psychic", "rest", "sleeptalk", "surf", "thunderwave", "toxic"], + "abilities": ["Own Tempo"] + }, + { + "role": "Setup Sweeper", + "movepool": ["calmmind", "psychic", "rest", "surf"], + "abilities": ["Own Tempo"] + }, + { + "role": "Bulky Setup", + "movepool": ["calmmind", "rest", "sleeptalk", "surf"], + "abilities": ["Own Tempo"] + } + ] + }, + "misdreavus": { + "level": 85, + "sets": [ + { + "role": "Bulky Support", + "movepool": ["hiddenpowerice", "painsplit", "shadowball", "thunderbolt", "thunderwave", "toxic"], + "abilities": ["Levitate"] + }, + { + "role": "Staller", + "movepool": ["meanlook", "perishsong", "protect", "shadowball"], + "abilities": ["Levitate"] + }, + { + "role": "Setup Sweeper", + "movepool": ["calmmind", "hiddenpowerice", "substitute", "thunderbolt"], + "abilities": ["Levitate"] + } + ] + }, + "unown": { + "level": 100, + "sets": [ + { + "role": "Fast Attacker", + "movepool": ["hiddenpowerpsychic"], + "abilities": ["Levitate"] + }, + { + "role": "Wallbreaker", + "movepool": ["hiddenpowerbug", "hiddenpowerfighting"], + "abilities": ["Levitate"] + } + ] + }, + "wobbuffet": { + "level": 81, + "sets": [ + { + "role": "Bulky Support", + "movepool": ["counter", "destinybond", "encore", "mirrorcoat"], + "abilities": ["Shadow Tag"] + } + ] + }, + "girafarig": { + "level": 86, + "sets": [ + { + "role": "Bulky Setup", + "movepool": ["batonpass", "calmmind", "crunch", "psychic", "rest", "substitute", "thunderbolt"], + "abilities": ["Early Bird"] + }, + { + "role": "Wallbreaker", + "movepool": ["doubleedge", "earthquake", "protect", "psychic", "return", "shadowball", "thunderbolt", "thunderwave", "toxic", "wish"], + "abilities": ["Early Bird"] + } + ] + }, + "forretress": { + "level": 82, + "sets": [ + { + "role": "Bulky Support", + "movepool": ["earthquake", "explosion", "hiddenpowerbug", "hiddenpowersteel", "rapidspin", "spikes", "toxic"], + "abilities": ["Sturdy"] + } + ] + }, + "dunsparce": { + "level": 88, + "sets": [ + { + "role": "Bulky Setup", + "movepool": ["bodyslam", "curse", "earthquake", "rest", "shadowball"], + "abilities": ["Serene Grace"] + }, + { + "role": "Bulky Attacker", + "movepool": ["earthquake", "headbutt", "shadowball", "thunderwave"], + "abilities": ["Serene Grace"] + } + ] + }, + "gligar": { + "level": 84, + "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["earthquake", "hiddenpowerflying", "quickattack", "rockslide", "substitute", "swordsdance"], + "abilities": ["Hyper Cutter"] + } + ] + }, + "steelix": { + "level": 83, + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["doubleedge", "earthquake", "explosion", "hiddenpowerrock", "irontail", "rest", "roar", "toxic"], + "abilities": ["Rock Head"] + }, + { + "role": "Staller", + "movepool": ["doubleedge", "earthquake", "hiddenpowerrock", "protect", "toxic"], + "abilities": ["Rock Head"] + } + ] + }, + "granbull": { + "level": 83, + "sets": [ + { + "role": "Fast Attacker", + "movepool": ["doubleedge", "earthquake", "rest", "return", "sleeptalk"], + "abilities": ["Intimidate"] + }, + { + "role": "Wallbreaker", + "movepool": ["bulkup", "doubleedge", "earthquake", "overheat", "shadowball"], + "abilities": ["Intimidate"] + }, + { + "role": "Bulky Attacker", + "movepool": ["earthquake", "healbell", "return", "shadowball", "thunderwave"], + "abilities": ["Intimidate"], + "preferredTypes": ["Ground"] + } + ] + }, + "qwilfish": { + "level": 84, + "sets": [ + { + "role": "Wallbreaker", + "movepool": ["hydropump", "selfdestruct", "shadowball", "sludgebomb", "swordsdance"], + "abilities": ["Poison Point", "Swift Swim"] + }, + { + "role": "Fast Attacker", + "movepool": ["destinybond", "hydropump", "selfdestruct", "sludgebomb", "spikes"], + "abilities": ["Poison Point", "Swift Swim"] + } + ] + }, + "scizor": { + "level": 82, + "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["batonpass", "hiddenpowerground", "morningsun", "silverwind", "steelwing", "swordsdance"], + "abilities": ["Swarm"] + }, + { + "role": "Generalist", + "movepool": ["agility", "batonpass", "hiddenpowerground", "silverwind", "steelwing"], + "abilities": ["Swarm"] + } + ] + }, + "shuckle": { + "level": 98, + "sets": [ + { + "role": "Staller", + "movepool": ["encore", "rest", "toxic", "wrap"], + "abilities": ["Sturdy"] + } + ] + }, + "heracross": { + "level": 77, + "sets": [ + { + "role": "Wallbreaker", + "movepool": ["brickbreak", "earthquake", "hiddenpowerghost", "megahorn", "rockslide"], + "abilities": ["Guts"], + "preferredTypes": ["Rock"] + }, + { + "role": "Setup Sweeper", + "movepool": ["brickbreak", "megahorn", "rockslide", "swordsdance"], + "abilities": ["Guts"] + }, + { + "role": "Berry Sweeper", + "movepool": ["endure", "megahorn", "reversal", "rockslide", "substitute"], + "abilities": ["Swarm"] + } + ] + }, + "sneasel": { + "level": 88, + "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["brickbreak", "hiddenpowerflying", "shadowball", "substitute", "swordsdance"], + "abilities": ["Inner Focus"], + "preferredTypes": ["Fighting", "Ghost"] + }, + { + "role": "Wallbreaker", + "movepool": ["brickbreak", "doubleedge", "hiddenpowerflying", "shadowball", "swordsdance"], + "abilities": ["Inner Focus"], + "preferredTypes": ["Fighting", "Ghost"] + } + ] + }, + "ursaring": { + "level": 82, + "sets": [ + { + "role": "Wallbreaker", + "movepool": ["earthquake", "focuspunch", "hiddenpowerghost", "return"], + "abilities": ["Guts"] + }, + { + "role": "Fast Attacker", + "movepool": ["earthquake", "facade", "hiddenpowerghost", "return"], + "abilities": ["Guts"] + }, + { + "role": "Setup Sweeper", + "movepool": ["earthquake", "hiddenpowerghost", "return", "swordsdance"], + "abilities": ["Guts"] + } + ] + }, + "magcargo": { + "level": 99, + "sets": [ + { + "role": "Bulky Support", + "movepool": ["fireblast", "flamethrower", "hiddenpowergrass", "rest", "sleeptalk", "toxic"], + "abilities": ["Flame Body"] + }, + { + "role": "Staller", + "movepool": ["fireblast", "flamethrower", "hiddenpowergrass", "protect", "toxic"], + "abilities": ["Flame Body"] + } + ] + }, + "piloswine": { + "level": 87, + "sets": [ + { + "role": "Staller", + "movepool": ["earthquake", "icebeam", "protect", "toxic"], + "abilities": ["Oblivious"] + }, + { + "role": "Wallbreaker", + "movepool": ["doubleedge", "earthquake", "icebeam", "rest", "rockslide", "sleeptalk"], + "abilities": ["Oblivious"] + } + ] + }, + "corsola": { + "level": 97, + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["calmmind", "icebeam", "recover", "surf", "toxic"], + "abilities": ["Natural Cure"] + } + ] + }, + "octillery": { + "level": 87, + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["fireblast", "hiddenpowerelectric", "hiddenpowergrass", "icebeam", "surf", "thunderwave"], + "abilities": ["Suction Cups"], + "preferredTypes": ["Ice"] + } + ] + }, + "delibird": { + "level": 97, + "sets": [ + { + "role": "Wallbreaker", + "movepool": ["aerialace", "doubleedge", "focuspunch", "hiddenpowerground", "icebeam", "quickattack"], + "abilities": ["Hustle"], + "preferredTypes": ["Ground"] + } + ] + }, + "mantine": { + "level": 86, + "sets": [ + { + "role": "Bulky Support", + "movepool": ["hiddenpowergrass", "icebeam", "rest", "sleeptalk", "surf", "toxic"], + "abilities": ["Water Absorb"] + }, + { + "role": "Staller", + "movepool": ["haze", "icebeam", "protect", "surf", "toxic"], + "abilities": ["Water Absorb"] + }, + { + "role": "Setup Sweeper", + "movepool": ["hiddenpowergrass", "hydropump", "icebeam", "raindance", "surf"], + "abilities": ["Swift Swim"] + } + ] + }, + "skarmory": { + "level": 75, + "sets": [ + { + "role": "Bulky Support", + "movepool": ["drillpeck", "protect", "spikes", "toxic"], + "abilities": ["Keen Eye"] + }, + { + "role": "Generalist", + "movepool": ["drillpeck", "spikes", "toxic", "whirlwind"], + "abilities": ["Keen Eye"] + }, + { + "role": "Staller", + "movepool": ["protect", "spikes", "toxic", "whirlwind"], + "abilities": ["Keen Eye"] + } + ] + }, + "houndoom": { + "level": 81, + "sets": [ + { + "role": "Berry Sweeper", + "movepool": ["crunch", "fireblast", "hiddenpowergrass", "substitute"], + "abilities": ["Flash Fire"] + }, + { + "role": "Fast Attacker", + "movepool": ["crunch", "fireblast", "hiddenpowergrass", "pursuit", "willowisp"], + "abilities": ["Flash Fire"] + } + ] + }, + "kingdra": { + "level": 81, + "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["hiddenpowerelectric", "hiddenpowergrass", "hydropump", "icebeam", "raindance", "substitute", "surf"], + "abilities": ["Swift Swim"], + "preferredTypes": ["Ice"] + } + ] + }, + "donphan": { + "level": 83, + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["earthquake", "rapidspin", "rest", "rockslide", "sleeptalk", "toxic"], + "abilities": ["Sturdy"] + } + ] + }, + "porygon2": { + "level": 81, + "sets": [ + { + "role": "Bulky Support", + "movepool": ["icebeam", "recover", "return", "thunderbolt", "thunderwave", "toxic"], + "abilities": ["Trace"] + } + ] + }, + "stantler": { + "level": 83, + "sets": [ + { + "role": "Wallbreaker", + "movepool": ["earthquake", "hypnosis", "return", "shadowball", "thunderbolt", "thunderwave"], + "abilities": ["Intimidate"], + "preferredTypes": ["Ground"] + } + ] + }, + "smeargle": { + "level": 89, + "sets": [ + { + "role": "Generalist", + "movepool": ["encore", "explosion", "spikes", "spore"], + "abilities": ["Own Tempo"] + } + ] + }, + "hitmontop": { + "level": 86, + "sets": [ + { + "role": "Fast Attacker", + "movepool": ["bulkup", "earthquake", "hiddenpowerghost", "highjumpkick", "machpunch", "rapidspin", "rockslide", "toxic"], + "abilities": ["Intimidate"], + "preferredTypes": ["Ghost"] + } + ] + }, + "miltank": { + "level": 78, + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["bodyslam", "curse", "earthquake", "healbell", "milkdrink", "toxic"], + "abilities": ["Thick Fat"] + } + ] + }, + "blissey": { + "level": 78, + "sets": [ + { + "role": "Staller", + "movepool": ["aromatherapy", "seismictoss", "softboiled", "thunderwave", "toxic"], + "abilities": ["Natural Cure"] + }, + { + "role": "Bulky Support", + "movepool": ["protect", "seismictoss", "toxic", "wish"], + "abilities": ["Natural Cure"] + } + ] + }, + "raikou": { + "level": 73, + "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["calmmind", "crunch", "hiddenpowerice", "substitute", "thunderbolt"], + "abilities": ["Pressure"], + "preferredTypes": ["Ice"] + }, + { + "role": "Bulky Attacker", + "movepool": ["hiddenpowerice", "rest", "sleeptalk", "thunderbolt"], + "abilities": ["Pressure"] + } + ] + }, + "entei": { + "level": 79, + "sets": [ + { + "role": "Bulky Support", + "movepool": ["flamethrower", "rest", "sleeptalk", "toxic"], + "abilities": ["Pressure"] + }, + { + "role": "Staller", + "movepool": ["flamethrower", "protect", "substitute", "toxic"], + "abilities": ["Pressure"] + }, + { + "role": "Bulky Setup", + "movepool": ["calmmind", "flamethrower", "hiddenpowergrass", "substitute"], + "abilities": ["Pressure"] + } + ] + }, + "suicune": { + "level": 74, + "sets": [ + { + "role": "Bulky Setup", + "movepool": ["calmmind", "rest", "sleeptalk", "surf"], + "abilities": ["Pressure"] + }, + { + "role": "Bulky Attacker", + "movepool": ["calmmind", "icebeam", "rest", "substitute", "surf"], + "abilities": ["Pressure"] + } + ] + }, + "tyranitar": { + "level": 74, + "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["dragondance", "earthquake", "fireblast", "hiddenpowerflying", "rockslide"], + "abilities": ["Sand Stream"], + "preferredTypes": ["Ground"] + }, + { + "role": "Bulky Attacker", + "movepool": ["crunch", "earthquake", "fireblast", "icebeam", "pursuit", "rockslide", "thunderwave"], + "abilities": ["Sand Stream"] + }, + { + "role": "Wallbreaker", + "movepool": ["earthquake", "fireblast", "hiddenpowerflying", "rest", "rockslide", "sleeptalk"], + "abilities": ["Sand Stream"], + "preferredTypes": ["Ground"] + } + ] + }, + "lugia": { + "level": 69, + "sets": [ + { + "role": "Staller", + "movepool": ["earthquake", "psychic", "recover", "substitute", "toxic"], + "abilities": ["Pressure"] + }, + { + "role": "Bulky Setup", + "movepool": ["calmmind", "icebeam", "recover", "thunderbolt"], + "abilities": ["Pressure"] + } + ] + }, + "hooh": { + "level": 70, + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["earthquake", "recover", "sacredfire", "substitute", "thunderbolt", "toxic"], + "abilities": ["Pressure"] + }, + { + "role": "Bulky Setup", + "movepool": ["calmmind", "recover", "sacredfire", "thunderbolt"], + "abilities": ["Pressure"] + } + ] + }, + "celebi": { + "level": 74, + "sets": [ + { + "role": "Bulky Setup", + "movepool": ["batonpass", "calmmind", "hiddenpowerfire", "hiddenpowergrass", "psychic", "recover"], + "abilities": ["Natural Cure"] + }, + { + "role": "Bulky Support", + "movepool": ["healbell", "hiddenpowerfire", "hiddenpowergrass", "leechseed", "psychic", "recover", "toxic"], + "abilities": ["Natural Cure"] + } + ] + }, + "sceptile": { + "level": 82, + "sets": [ + { + "role": "Staller", + "movepool": ["hiddenpowerfire", "hiddenpowerice", "leafblade", "leechseed", "substitute"], + "abilities": ["Overgrow"] + }, + { + "role": "Berry Sweeper", + "movepool": ["hiddenpowerice", "leafblade", "substitute", "thunderpunch"], + "abilities": ["Overgrow"] + }, + { + "role": "Fast Attacker", + "movepool": ["earthquake", "hiddenpowerice", "leafblade", "thunderpunch", "toxic"], + "abilities": ["Overgrow"], + "preferredTypes": ["Ground"] + } + ] + }, + "blaziken": { + "level": 82, + "sets": [ + { + "role": "Fast Attacker", + "movepool": ["earthquake", "fireblast", "hiddenpowerice", "rockslide", "skyuppercut", "thunderpunch"], + "abilities": ["Blaze"] + }, + { + "role": "Berry Sweeper", + "movepool": ["endure", "fireblast", "reversal", "swordsdance"], + "abilities": ["Blaze"] + }, + { + "role": "Wallbreaker", + "movepool": ["earthquake", "fireblast", "rockslide", "skyuppercut", "swordsdance"], + "abilities": ["Blaze"] + } + ] + }, + "swampert": { + "level": 79, + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["earthquake", "hydropump", "protect", "surf", "toxic"], + "abilities": ["Torrent"] + }, + { + "role": "Bulky Support", + "movepool": ["earthquake", "hydropump", "rest", "sleeptalk", "surf"], + "abilities": ["Torrent"] + }, + { + "role": "Staller", + "movepool": ["earthquake", "hydropump", "icebeam", "refresh", "surf", "toxic"], + "abilities": ["Torrent"] + } + ] + }, + "mightyena": { + "level": 91, + "sets": [ + { + "role": "Wallbreaker", + "movepool": ["crunch", "doubleedge", "healbell", "hiddenpowerfighting", "shadowball", "toxic"], + "abilities": ["Intimidate"], + "preferredTypes": ["Fighting"] + } + ] + }, + "linoone": { + "level": 82, + "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["bellydrum", "extremespeed", "hiddenpowerfighting", "shadowball"], + "abilities": ["Pickup"] + }, + { + "role": "Bulky Setup", + "movepool": ["bellydrum", "hiddenpowerground", "return", "shadowball", "substitute"], + "abilities": ["Pickup"], + "preferredTypes": ["Ground"] + } + ] + }, + "beautifly": { + "level": 100, + "sets": [ + { + "role": "Staller", + "movepool": ["hiddenpowerfire", "morningsun", "psychic", "toxic"], + "abilities": ["Swarm"] + } + ] + }, + "dustox": { + "level": 96, + "sets": [ + { + "role": "Staller", + "movepool": ["hiddenpowerground", "moonlight", "sludgebomb", "toxic", "whirlwind"], + "abilities": ["Shield Dust"] + } + ] + }, + "ludicolo": { + "level": 84, + "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["hiddenpowergrass", "hydropump", "icebeam", "raindance", "surf"], + "abilities": ["Swift Swim"] + } + ] + }, + "shiftry": { + "level": 90, + "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["brickbreak", "explosion", "shadowball", "swordsdance"], + "abilities": ["Chlorophyll", "Early Bird"] + }, + { + "role": "Staller", + "movepool": ["hiddenpowerdark", "leechseed", "substitute", "toxic"], + "abilities": ["Chlorophyll", "Early Bird"] + } + ] + }, + "swellow": { + "level": 81, + "sets": [ + { + "role": "Wallbreaker", + "movepool": ["aerialace", "doubleedge", "hiddenpowerground", "quickattack", "return"], + "abilities": ["Guts"] + }, + { + "role": "Fast Attacker", + "movepool": ["aerialace", "doubleedge", "facade", "hiddenpowerground", "return"], + "abilities": ["Guts"] + } + ] + }, + "pelipper": { + "level": 88, + "sets": [ + { + "role": "Bulky Support", + "movepool": ["icebeam", "rest", "sleeptalk", "surf", "toxic"], + "abilities": ["Keen Eye"] + }, + { + "role": "Staller", + "movepool": ["icebeam", "protect", "surf", "toxic"], + "abilities": ["Keen Eye"] + } + ] + }, + "gardevoir": { + "level": 79, + "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["calmmind", "firepunch", "hypnosis", "icepunch", "psychic", "substitute", "thunderbolt"], + "abilities": ["Trace"], + "preferredTypes": ["Fire"] + } + ] + }, + "masquerain": { + "level": 96, + "sets": [ + { + "role": "Fast Attacker", + "movepool": ["hydropump", "icebeam", "stunspore", "substitute", "toxic"], + "abilities": ["Intimidate"] + } + ] + }, + "breloom": { + "level": 84, + "sets": [ + { + "role": "Fast Attacker", + "movepool": ["hiddenpowerghost", "hiddenpowerrock", "machpunch", "skyuppercut", "spore", "substitute", "swordsdance"], + "abilities": ["Effect Spore"] + }, + { + "role": "Generalist", + "movepool": ["focuspunch", "hiddenpowerghost", "hiddenpowerrock", "spore", "substitute"], + "abilities": ["Effect Spore"] + } + ] + }, + "vigoroth": { + "level": 84, + "sets": [ + { + "role": "Bulky Setup", + "movepool": ["bodyslam", "bulkup", "earthquake", "return", "shadowball", "slackoff"], + "abilities": ["Vital Spirit"] + } + ] + }, + "slaking": { + "level": 78, + "sets": [ + { + "role": "Fast Attacker", + "movepool": ["doubleedge", "earthquake", "hyperbeam", "return", "shadowball"], + "abilities": ["Truant"] + } + ] + }, + "ninjask": { + "level": 80, + "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["batonpass", "hiddenpowerflying", "substitute", "swordsdance"], + "abilities": ["Speed Boost"] + }, + { + "role": "Bulky Setup", + "movepool": ["batonpass", "hiddenpowerflying", "protect", "swordsdance"], + "abilities": ["Speed Boost"] + } + ] + }, + "shedinja": { + "level": 100, + "sets": [ + { + "role": "Fast Attacker", + "movepool": ["agility", "batonpass", "hiddenpowerfighting", "shadowball", "silverwind", "toxic"], + "abilities": ["Wonder Guard"], + "preferredTypes": ["Fighting"] + } + ] + }, + "exploud": { + "level": 86, + "sets": [ + { + "role": "Wallbreaker", + "movepool": ["doubleedge", "earthquake", "overheat", "return", "shadowball"], + "abilities": ["Soundproof"] + }, + { + "role": "Fast Attacker", + "movepool": ["earthquake", "flamethrower", "icebeam", "return", "shadowball", "substitute"], + "abilities": ["Soundproof"], + "preferredTypes": ["Ground"] + } + ] + }, + "hariyama": { + "level": 83, + "sets": [ + { + "role": "Fast Attacker", + "movepool": ["bulkup", "crosschop", "earthquake", "hiddenpowerghost", "knockoff", "rockslide"], + "abilities": ["Guts", "Thick Fat"] + }, + { + "role": "Bulky Attacker", + "movepool": ["crosschop", "hiddenpowerghost", "rest", "rockslide", "sleeptalk"], + "abilities": ["Guts"] + } + ] + }, + "nosepass": { + "level": 99, + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["earthquake", "explosion", "rockslide", "thunderwave", "toxic"], + "abilities": ["Magnet Pull"] + } + ] + }, + "delcatty": { + "level": 96, + "sets": [ + { + "role": "Bulky Support", + "movepool": ["doubleedge", "protect", "thunderwave", "toxic", "wish"], + "abilities": ["Cute Charm"] + }, + { + "role": "Generalist", + "movepool": ["bodyslam", "healbell", "protect", "wish"], + "abilities": ["Cute Charm"] + }, + { + "role": "Setup Sweeper", + "movepool": ["batonpass", "calmmind", "icebeam", "thunderbolt"], + "abilities": ["Cute Charm"] + } + ] + }, + "sableye": { + "level": 90, + "sets": [ + { + "role": "Bulky Support", + "movepool": ["knockoff", "recover", "seismictoss", "toxic"], + "abilities": ["Keen Eye"] + }, + { + "role": "Bulky Attacker", + "movepool": ["recover", "seismictoss", "shadowball", "toxic"], + "abilities": ["Keen Eye"] + } + ] + }, + "mawile": { + "level": 95, + "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["batonpass", "brickbreak", "hiddenpowersteel", "rockslide", "substitute", "swordsdance"], + "abilities": ["Intimidate"], + "preferredTypes": ["Fighting"] + }, + { + "role": "Bulky Support", + "movepool": ["focuspunch", "hiddenpowersteel", "rockslide", "substitute", "toxic"], + "abilities": ["Intimidate"] + } + ] + }, + "aggron": { + "level": 85, + "sets": [ + { + "role": "Wallbreaker", + "movepool": ["doubleedge", "earthquake", "irontail", "rockslide", "thunderwave", "toxic"], + "abilities": ["Rock Head"], + "preferredTypes": ["Ground"] + }, + { + "role": "Generalist", + "movepool": ["doubleedge", "earthquake", "focuspunch", "irontail", "rockslide", "substitute"], + "abilities": ["Rock Head"] + } + ] + }, + "medicham": { + "level": 82, + "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["brickbreak", "bulkup", "recover", "rockslide", "shadowball", "substitute"], + "abilities": ["Pure Power"], + "preferredTypes": ["Ghost"] + }, + { + "role": "Berry Sweeper", + "movepool": ["bulkup", "reversal", "shadowball", "substitute"], + "abilities": ["Pure Power"] + } + ] + }, + "manectric": { + "level": 82, + "sets": [ + { + "role": "Berry Sweeper", + "movepool": ["crunch", "hiddenpowerice", "substitute", "thunderbolt"], + "abilities": ["Static"] + } + ] + }, + "plusle": { + "level": 88, + "sets": [ + { + "role": "Fast Attacker", + "movepool": ["batonpass", "encore", "hiddenpowerice", "substitute", "thunderbolt", "toxic"], + "abilities": ["Plus"] + }, + { + "role": "Staller", + "movepool": ["hiddenpowerice", "protect", "thunderbolt", "toxic"], + "abilities": ["Plus"] + }, + { + "role": "Bulky Support", + "movepool": ["hiddenpowerice", "protect", "thunderbolt", "toxic", "wish"], + "abilities": ["Plus"] + } + ] + }, + "minun": { + "level": 89, + "sets": [ + { + "role": "Fast Attacker", + "movepool": ["batonpass", "encore", "hiddenpowerice", "substitute", "thunderbolt", "toxic"], + "abilities": ["Minus"] + }, + { + "role": "Staller", + "movepool": ["hiddenpowerice", "protect", "thunderbolt", "toxic"], + "abilities": ["Minus"] + }, + { + "role": "Bulky Support", + "movepool": ["hiddenpowerice", "protect", "thunderbolt", "toxic", "wish"], + "abilities": ["Minus"] + } + ] + }, + "volbeat": { + "level": 93, + "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["batonpass", "icepunch", "tailglow", "thunderbolt"], + "abilities": ["Swarm"] + } + ] + }, + "illumise": { + "level": 94, + "sets": [ + { + "role": "Bulky Support", + "movepool": ["encore", "moonlight", "seismictoss", "thunderwave", "toxic"], + "abilities": ["Oblivious"] + }, + { + "role": "Generalist", + "movepool": ["batonpass", "encore", "seismictoss", "substitute", "thunderwave", "toxic"], + "abilities": ["Oblivious"] + } + ] + }, + "roselia": { + "level": 97, + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["hiddenpowerfire", "magicalleaf", "spikes", "synthesis"], + "abilities": ["Natural Cure"] + }, + { + "role": "Bulky Support", + "movepool": ["aromatherapy", "hiddenpowergrass", "spikes", "synthesis", "toxic"], + "abilities": ["Natural Cure"] + } + ] + }, + "swalot": { + "level": 89, + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["encore", "explosion", "hiddenpowerground", "icebeam", "painsplit", "shadowball", "sludgebomb", "toxic", "yawn"], + "abilities": ["Liquid Ooze"] + } + ] + }, + "sharpedo": { + "level": 85, + "sets": [ + { + "role": "Wallbreaker", + "movepool": ["doubleedge", "earthquake", "hiddenpowerflying", "hydropump"], + "abilities": ["Rough Skin"] + }, + { + "role": "Berry Sweeper", + "movepool": ["crunch", "hiddenpowerelectric", "hiddenpowergrass", "hydropump", "icebeam", "substitute"], + "abilities": ["Rough Skin"] + } + ] + }, + "wailord": { + "level": 87, + "sets": [ + { + "role": "Bulky Support", + "movepool": ["icebeam", "rest", "sleeptalk", "surf", "toxic"], + "abilities": ["Water Veil"] + }, + { + "role": "Bulky Attacker", + "movepool": ["hiddenpowergrass", "icebeam", "selfdestruct", "surf", "toxic"], + "abilities": ["Water Veil"], + "preferredTypes": ["Ice"] + } + ] + }, + "camerupt": { + "level": 86, + "sets": [ + { + "role": "Wallbreaker", + "movepool": ["earthquake", "explosion", "fireblast", "rest", "rockslide", "sleeptalk", "toxic"], + "abilities": ["Magma Armor"] + } + ] + }, + "torkoal": { + "level": 90, + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["explosion", "fireblast", "flamethrower", "hiddenpowergrass", "rest", "toxic"], + "abilities": ["White Smoke"] + } + ] + }, + "grumpig": { + "level": 83, + "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["calmmind", "firepunch", "psychic", "substitute", "thunderpunch"], + "abilities": ["Thick Fat"], + "preferredTypes": ["Fire"] + } + ] + }, + "spinda": { + "level": 100, + "sets": [ + { + "role": "Staller", + "movepool": ["encore", "protect", "seismictoss", "shadowball", "substitute", "toxic"], + "abilities": ["Own Tempo"] + }, + { + "role": "Bulky Support", + "movepool": ["protect", "seismictoss", "toxic", "wish"], + "abilities": ["Own Tempo"] + } + ] + }, + "flygon": { + "level": 78, + "sets": [ + { + "role": "Wallbreaker", + "movepool": ["earthquake", "hiddenpowerbug", "quickattack", "rockslide"], + "abilities": ["Levitate"] + }, + { + "role": "Staller", + "movepool": ["dragonclaw", "earthquake", "fireblast", "protect", "toxic"], + "abilities": ["Levitate"] + }, + { + "role": "Bulky Attacker", + "movepool": ["dragonclaw", "earthquake", "fireblast", "rockslide", "substitute", "toxic"], + "abilities": ["Levitate"] + } + ] + }, + "cacturne": { + "level": 94, + "sets": [ + { + "role": "Staller", + "movepool": ["focuspunch", "hiddenpowerdark", "leechseed", "substitute"], + "abilities": ["Sand Veil"] + }, + { + "role": "Generalist", + "movepool": ["hiddenpowerdark", "needlearm", "spikes", "thunderpunch"], + "abilities": ["Sand Veil"] + } + ] + }, + "altaria": { + "level": 85, + "sets": [ + { + "role": "Bulky Support", + "movepool": ["dragonclaw", "earthquake", "flamethrower", "haze", "healbell", "rest", "toxic"], + "abilities": ["Natural Cure"] + }, + { + "role": "Setup Sweeper", + "movepool": ["dragondance", "earthquake", "fireblast", "healbell", "hiddenpowerflying", "rest"], + "abilities": ["Natural Cure"], + "preferredTypes": ["Ground"] + } + ] + }, + "zangoose": { + "level": 79, + "sets": [ + { + "role": "Fast Attacker", + "movepool": ["brickbreak", "quickattack", "return", "shadowball", "swordsdance"], + "abilities": ["Immunity"], + "preferredTypes": ["Ghost"] + } + ] + }, + "seviper": { + "level": 88, + "sets": [ + { + "role": "Fast Attacker", + "movepool": ["crunch", "earthquake", "flamethrower", "hiddenpowergrass", "sludgebomb"], + "abilities": ["Shed Skin"], + "preferredTypes": ["Ground"] + } + ] + }, + "lunatone": { + "level": 84, + "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["batonpass", "calmmind", "hiddenpowerfire", "hypnosis", "icebeam", "psychic"], + "abilities": ["Levitate"] + }, + { + "role": "Bulky Attacker", + "movepool": ["explosion", "hiddenpowerfire", "hypnosis", "icebeam", "psychic", "toxic"], + "abilities": ["Levitate"] + } + ] + }, + "solrock": { + "level": 84, + "sets": [ + { + "role": "Staller", + "movepool": ["earthquake", "protect", "rockslide", "toxic"], + "abilities": ["Levitate"] + }, + { + "role": "Wallbreaker", + "movepool": ["earthquake", "explosion", "overheat", "rockslide", "shadowball"], + "abilities": ["Levitate"], + "preferredTypes": ["Ground"] + } + ] + }, + "whiscash": { + "level": 83, + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["earthquake", "icebeam", "rest", "sleeptalk", "surf", "toxic"], + "abilities": ["Oblivious"] + }, + { + "role": "Staller", + "movepool": ["earthquake", "icebeam", "protect", "toxic"], + "abilities": ["Oblivious"] + } + ] + }, + "crawdaunt": { + "level": 90, + "sets": [ + { + "role": "Fast Attacker", + "movepool": ["brickbreak", "crunch", "doubleedge", "hiddenpowerelectric", "hiddenpowergrass", "icebeam", "surf"], + "abilities": ["Hyper Cutter"], + "preferredTypes": ["Normal"] + }, + { + "role": "Wallbreaker", + "movepool": ["brickbreak", "doubleedge", "hiddenpowerflying", "surf", "swordsdance"], + "abilities": ["Hyper Cutter"], + "preferredTypes": ["Normal"] + } + ] + }, + "claydol": { + "level": 81, + "sets": [ + { + "role": "Bulky Support", + "movepool": ["earthquake", "explosion", "icebeam", "psychic", "rapidspin", "toxic"], + "abilities": ["Levitate"] + } + ] + }, + "cradily": { + "level": 84, + "sets": [ + { + "role": "Bulky Support", + "movepool": ["earthquake", "hiddenpowergrass", "recover", "rockslide", "toxic"], + "abilities": ["Suction Cups"], + "preferredTypes": ["Ground"] + } + ] + }, + "armaldo": { + "level": 82, + "sets": [ + { + "role": "Wallbreaker", + "movepool": ["doubleedge", "earthquake", "hiddenpowerbug", "rapidspin", "rockslide", "swordsdance"], + "abilities": ["Battle Armor"], + "preferredTypes": ["Ground"] + } + ] + }, + "milotic": { + "level": 77, + "sets": [ + { + "role": "Staller", + "movepool": ["icebeam", "recover", "refresh", "surf", "toxic"], + "abilities": ["Marvel Scale"] + } + ] + }, + "castform": { + "level": 90, + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["fireblast", "icebeam", "return", "thunderbolt", "thunderwave"], + "abilities": ["Forecast"] + } + ] + }, + "kecleon": { + "level": 91, + "sets": [ + { + "role": "Wallbreaker", + "movepool": ["brickbreak", "return", "shadowball", "thunderwave", "trick"], + "abilities": ["Color Change"] + } + ] + }, + "banette": { + "level": 88, + "sets": [ + { + "role": "Berry Sweeper", + "movepool": ["destinybond", "endure", "hiddenpowerfighting", "shadowball"], + "abilities": ["Insomnia"] + }, + { + "role": "Wallbreaker", + "movepool": ["doubleedge", "hiddenpowerfighting", "knockoff", "shadowball", "willowisp"], + "abilities": ["Insomnia"], + "preferredTypes": ["Fighting"] + } + ] + }, + "dusclops": { + "level": 86, + "sets": [ + { + "role": "Bulky Support", + "movepool": ["rest", "seismictoss", "sleeptalk", "willowisp"], + "abilities": ["Pressure"] + }, + { + "role": "Bulky Attacker", + "movepool": ["rest", "seismictoss", "shadowball", "sleeptalk"], + "abilities": ["Pressure"] + }, + { + "role": "Generalist", + "movepool": ["focuspunch", "icebeam", "painsplit", "shadowball", "substitute", "willowisp"], + "abilities": ["Pressure"] + } + ] + }, + "tropius": { + "level": 95, + "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["earthquake", "hiddenpowerflying", "swordsdance", "synthesis"], + "abilities": ["Chlorophyll"] + }, + { + "role": "Staller", + "movepool": ["earthquake", "hiddenpowerflying", "leechseed", "synthesis", "toxic"], + "abilities": ["Chlorophyll"] + } + ] + }, + "chimecho": { + "level": 89, + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["calmmind", "healbell", "hiddenpowerfire", "psychic", "toxic"], + "abilities": ["Levitate"] + } + ] + }, + "absol": { + "level": 87, + "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["batonpass", "doubleedge", "hiddenpowerfighting", "quickattack", "shadowball", "swordsdance"], + "abilities": ["Pressure"], + "preferredTypes": ["Fighting", "Ghost"] + }, + { + "role": "Wallbreaker", + "movepool": ["doubleedge", "hiddenpowerfighting", "quickattack", "shadowball"], + "abilities": ["Pressure"] + } + ] + }, + "glalie": { + "level": 82, + "sets": [ + { + "role": "Generalist", + "movepool": ["earthquake", "explosion", "icebeam", "spikes", "toxic"], + "abilities": ["Inner Focus"] + } + ] + }, + "walrein": { + "level": 80, + "sets": [ + { + "role": "Staller", + "movepool": ["icebeam", "protect", "surf", "toxic"], + "abilities": ["Thick Fat"] + }, + { + "role": "Bulky Attacker", + "movepool": ["encore", "icebeam", "rest", "sleeptalk", "surf", "toxic"], + "abilities": ["Thick Fat"] + } + ] + }, + "huntail": { + "level": 88, + "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["doubleedge", "hiddenpowerelectric", "hiddenpowergrass", "hydropump", "icebeam", "raindance", "surf"], + "abilities": ["Swift Swim"], + "preferredTypes": ["Ice"] + } + ] + }, + "gorebyss": { + "level": 85, + "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["hiddenpowerelectric", "hiddenpowergrass", "hydropump", "icebeam", "raindance", "surf"], + "abilities": ["Swift Swim"] + } + ] + }, + "relicanth": { + "level": 88, + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["doubleedge", "earthquake", "hiddenpowerflying", "rest", "rockslide", "sleeptalk", "toxic"], + "abilities": ["Rock Head", "Swift Swim"], + "preferredTypes": ["Ground"] + } + ] + }, + "luvdisc": { + "level": 100, + "sets": [ + { + "role": "Staller", + "movepool": ["icebeam", "protect", "substitute", "surf", "toxic"], + "abilities": ["Swift Swim"] + } + ] + }, + "salamence": { + "level": 73, + "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["dragondance", "earthquake", "fireblast", "hiddenpowerflying", "rockslide"], + "abilities": ["Intimidate"], + "preferredTypes": ["Ground"] + }, + { + "role": "Wallbreaker", + "movepool": ["brickbreak", "doubleedge", "earthquake", "fireblast", "hiddenpowerflying", "rockslide"], + "abilities": ["Intimidate"], + "preferredTypes": ["Ground"] + } + ] + }, + "metagross": { + "level": 73, + "sets": [ + { + "role": "Wallbreaker", + "movepool": ["earthquake", "explosion", "meteormash", "rockslide"], + "abilities": ["Clear Body"] + }, + { + "role": "Setup Sweeper", + "movepool": ["agility", "earthquake", "explosion", "meteormash", "psychic", "rockslide"], + "abilities": ["Clear Body"], + "preferredTypes": ["Ground"] + } + ] + }, + "regirock": { + "level": 81, + "sets": [ + { + "role": "Fast Attacker", + "movepool": ["curse", "earthquake", "explosion", "rest", "rockslide", "superpower"], + "abilities": ["Clear Body"], + "preferredTypes": ["Ground"] + }, + { + "role": "Bulky Attacker", + "movepool": ["earthquake", "explosion", "rest", "rockslide", "sleeptalk", "thunderwave", "toxic"], + "abilities": ["Clear Body"] + } + ] + }, + "regice": { + "level": 79, + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["explosion", "icebeam", "rest", "sleeptalk", "thunderbolt", "thunderwave"], + "abilities": ["Clear Body"] + }, + { + "role": "Staller", + "movepool": ["icebeam", "protect", "thunderbolt", "toxic"], + "abilities": ["Clear Body"] + } + ] + }, + "registeel": { + "level": 78, + "sets": [ + { + "role": "Bulky Support", + "movepool": ["rest", "seismictoss", "sleeptalk", "toxic"], + "abilities": ["Clear Body"] + } + ] + }, + "latias": { + "level": 67, + "sets": [ + { + "role": "Bulky Setup", + "movepool": ["calmmind", "dragonclaw", "hiddenpowerfire", "psychic", "recover"], + "abilities": ["Levitate"] + }, + { + "role": "Setup Sweeper", + "movepool": ["calmmind", "dragonclaw", "recover", "refresh"], + "abilities": ["Levitate"] + } + ] + }, + "latios": { + "level": 67, + "sets": [ + { + "role": "Bulky Setup", + "movepool": ["calmmind", "dragonclaw", "hiddenpowerfire", "psychic", "recover"], + "abilities": ["Levitate"] + }, + { + "role": "Setup Sweeper", + "movepool": ["calmmind", "dragonclaw", "recover", "refresh"], + "abilities": ["Levitate"] + } + ] + }, + "kyogre": { + "level": 67, + "sets": [ + { + "role": "Bulky Support", + "movepool": ["calmmind", "icebeam", "rest", "sleeptalk", "surf", "thunder"], + "abilities": ["Drizzle"] + } + ] + }, + "groudon": { + "level": 69, + "sets": [ + { + "role": "Wallbreaker", + "movepool": ["earthquake", "hiddenpowerbug", "overheat", "rockslide", "substitute", "swordsdance", "thunderwave"], + "abilities": ["Drought"], + "preferredTypes": ["Rock"] + } + ] + }, + "rayquaza": { + "level": 71, + "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["dragondance", "earthquake", "hiddenpowerflying", "overheat", "rockslide"], + "abilities": ["Air Lock"], + "preferredTypes": ["Ground"] + }, + { + "role": "Wallbreaker", + "movepool": ["earthquake", "extremespeed", "hiddenpowerflying", "overheat", "rockslide"], + "abilities": ["Air Lock"], + "preferredTypes": ["Ground", "Normal"] + } + ] + }, + "jirachi": { + "level": 73, + "sets": [ + { + "role": "Bulky Support", + "movepool": ["bodyslam", "firepunch", "protect", "psychic", "toxic", "wish"], + "abilities": ["Serene Grace"] + }, + { + "role": "Setup Sweeper", + "movepool": ["calmmind", "firepunch", "icepunch", "psychic", "substitute", "thunderbolt"], + "abilities": ["Serene Grace"], + "preferredTypes": ["Fire"] + } + ] + }, + "deoxys": { + "level": 72, + "sets": [ + { + "role": "Wallbreaker", + "movepool": ["extremespeed", "firepunch", "icebeam", "psychoboost", "shadowball", "superpower"], + "abilities": ["Pressure"], + "preferredTypes": ["Fighting", "Ghost"] + } + ] + }, + "deoxysattack": { + "level": 71, + "sets": [ + { + "role": "Wallbreaker", + "movepool": ["extremespeed", "firepunch", "icebeam", "psychoboost", "shadowball", "superpower"], + "abilities": ["Pressure"], + "preferredTypes": ["Fighting", "Ghost"] + } + ] + }, + "deoxysdefense": { + "level": 75, + "sets": [ + { + "role": "Bulky Support", + "movepool": ["recover", "seismictoss", "spikes", "toxic"], + "abilities": ["Pressure"] + } + ] + }, + "deoxysspeed": { + "level": 77, + "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["calmmind", "firepunch", "icebeam", "psychic", "recover", "substitute"], + "abilities": ["Pressure"], + "preferredTypes": ["Fire"] + }, + { + "role": "Bulky Support", + "movepool": ["psychoboost", "recover", "spikes", "superpower", "toxic"], + "abilities": ["Pressure"] + } + ] + } +} diff --git a/data/random-battles/gen3/teams.ts b/data/random-battles/gen3/teams.ts new file mode 100644 index 000000000000..b67d2e3f65ca --- /dev/null +++ b/data/random-battles/gen3/teams.ts @@ -0,0 +1,773 @@ +import RandomGen4Teams from '../gen4/teams'; +import {PRNG, PRNGSeed} from '../../../sim/prng'; +import type {MoveCounter} from '../gen8/teams'; + +// Moves that restore HP: +const RECOVERY_MOVES = [ + 'milkdrink', 'moonlight', 'morningsun', 'recover', 'slackoff', 'softboiled', 'synthesis', +]; +// Conglomerate for ease of access +const SETUP = [ + 'acidarmor', 'agility', 'bellydrum', 'bulkup', 'calmmind', 'curse', 'dragondance', 'growth', 'howl', 'irondefense', + 'meditate', 'raindance', 'sunnyday', 'swordsdance', 'tailglow', +]; +// Moves that shouldn't be the only STAB moves: +const NO_STAB = [ + 'eruption', 'explosion', 'fakeout', 'focuspunch', 'futuresight', 'icywind', 'knockoff', 'machpunch', 'pursuit', + 'quickattack', 'rapidspin', 'selfdestruct', 'skyattack', 'waterspout', +]; + +// Moves that should be paired together when possible +const MOVE_PAIRS = [ + ['sleeptalk', 'rest'], + ['protect', 'wish'], + ['leechseed', 'substitute'], + ['focuspunch', 'substitute'], + ['batonpass', 'spiderweb'], +]; + +export class RandomGen3Teams extends RandomGen4Teams { + battleHasDitto: boolean; + battleHasWobbuffet: boolean; + + randomSets: {[species: string]: RandomTeamsTypes.RandomSpeciesData} = require('./sets.json'); + + constructor(format: string | Format, prng: PRNG | PRNGSeed | null) { + super(format, prng); + this.noStab = NO_STAB; + this.battleHasDitto = false; + this.battleHasWobbuffet = false; + this.moveEnforcementCheckers = { + Bug: (movePool, moves, abilities, types, counter, species) => ( + !counter.get('Bug') && ['armaldo', 'heracross', 'parasect'].includes(species.id) + ), + Dark: (movePool, moves, abilities, types, counter) => !counter.get('Dark'), + Electric: (movePool, moves, abilities, types, counter) => !counter.get('Electric'), + Fighting: (movePool, moves, abilities, types, counter) => !counter.get('Fighting'), + Fire: (movePool, moves, abilities, types, counter) => !counter.get('Fire'), + Flying: (movePool, moves, abilities, types, counter, species) => (!counter.get('Flying') && species.id !== 'crobat'), + Ghost: (movePool, moves, abilities, types, counter) => !counter.get('Ghost'), + Ground: (movePool, moves, abilities, types, counter) => !counter.get('Ground'), + Ice: (movePool, moves, abilities, types, counter) => !counter.get('Ice'), + Normal: (movePool, moves, abilities, types, counter, species) => !counter.get('Normal'), + Poison: (movePool, moves, abilities, types, counter) => !counter.get('Poison') && !counter.get('Bug'), + Psychic: (movePool, moves, abilities, types, counter, species) => ( + !counter.get('Psychic') && species.baseStats.spa >= 100 + ), + Rock: (movePool, moves, abilities, types, counter, species) => !counter.get('Rock'), + Steel: (movePool, moves, abilities, types, counter, species) => (!counter.get('Steel') && species.id !== 'forretress'), + Water: (movePool, moves, abilities, types, counter, species) => !counter.get('Water'), + }; + } + + cullMovePool( + types: string[], + moves: Set, + abilities: string[], + counter: MoveCounter, + movePool: string[], + teamDetails: RandomTeamsTypes.TeamDetails, + species: Species, + isLead: boolean, + preferredType: string, + role: RandomTeamsTypes.Role, + ): void { + // Pokemon cannot have multiple Hidden Powers in any circumstance + let hasHiddenPower = false; + for (const move of moves) { + if (move.startsWith('hiddenpower')) hasHiddenPower = true; + } + if (hasHiddenPower) { + let movePoolHasHiddenPower = true; + while (movePoolHasHiddenPower) { + movePoolHasHiddenPower = false; + for (const moveid of movePool) { + if (moveid.startsWith('hiddenpower')) { + this.fastPop(movePool, movePool.indexOf(moveid)); + movePoolHasHiddenPower = true; + break; + } + } + } + } + + 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])); + } + } + } + + // Team-based move culls + if (teamDetails.rapidSpin) { + if (movePool.includes('rapidspin')) this.fastPop(movePool, movePool.indexOf('rapidspin')); + 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('aromatherapy')) this.fastPop(movePool, movePool.indexOf('aromatherapy')); + if (movePool.includes('healbell')) this.fastPop(movePool, movePool.indexOf('healbell')); + if (moves.size + movePool.length <= this.maxMoveCount) return; + } + + // Develop additional move lists + const badWithSetup = ['knockoff', 'rapidspin', 'toxic']; + const statusMoves = this.cachedStatusMoves; + + // General incompatibilities + const incompatiblePairs = [ + // These moves don't mesh well with other aspects of the set + [statusMoves, 'trick'], + [SETUP, badWithSetup], + ['rest', ['protect', 'substitute']], + [['selfdestruct', 'explosion'], ['destinybond', 'painsplit', 'rest']], + + // These attacks are redundant with each other + ['surf', 'hydropump'], + [['bodyslam', 'return'], ['bodyslam', 'doubleedge']], + ['fireblast', 'flamethrower'], + + // Assorted hardcodes go here: + // Granbull + ['bulkup', 'overheat'], + // Heracross + ['endure', 'substitute'], + ]; + + for (const pair of incompatiblePairs) this.incompatibleMoves(moves, movePool, pair[0], pair[1]); + + const statusInflictingMoves = ['stunspore', 'thunderwave', 'toxic', 'willowisp', 'yawn']; + if (role !== 'Staller') { + this.incompatibleMoves(moves, movePool, statusInflictingMoves, statusInflictingMoves); + } + } + + // Generate random moveset for a given species, role, preferred type. + randomMoveset( + types: string[], + abilities: string[], + teamDetails: RandomTeamsTypes.TeamDetails, + species: Species, + isLead: boolean, + movePool: string[], + preferredType: string, + role: RandomTeamsTypes.Role, + ): Set { + const preferredTypes = preferredType ? preferredType.split(',') : []; + const moves = new Set(); + let counter = this.newQueryMoves(moves, species, preferredType, abilities); + this.cullMovePool(types, moves, abilities, counter, movePool, teamDetails, species, isLead, + preferredType, role); + + // If there are only four moves, add all moves and return early + if (movePool.length <= this.maxMoveCount) { + // Still need to ensure that multiple Hidden Powers are not added (if maxMoveCount is increased) + while (movePool.length) { + const moveid = this.sample(movePool); + counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, + movePool, preferredType, role); + } + return moves; + } + + const runEnforcementChecker = (checkerName: string) => { + if (!this.moveEnforcementCheckers[checkerName]) return false; + return this.moveEnforcementCheckers[checkerName]( + movePool, moves, abilities, new Set(types), counter, species, teamDetails + ); + }; + + // 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, + movePool, preferredType, role); + } + + // Add other moves you really want to have, e.g. STAB, recovery, setup. + + // Enforce Seismic Toss and Spore + for (const moveid of ['seismictoss', 'spikes', 'spore']) { + if (movePool.includes(moveid)) { + counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, + movePool, preferredType, role); + } + } + + // Enforce Substitute on non-Setup sets with Baton Pass + if (!role.includes('Setup')) { + if (movePool.includes('batonpass') && movePool.includes('substitute')) { + counter = this.addMove('substitute', moves, types, abilities, teamDetails, species, isLead, + movePool, preferredType, role); + } + } + + // Enforce moves of all Preferred Types + for (const type of preferredTypes) { + if (!counter.get(type)) { + const stabMoves = []; + for (const moveid of movePool) { + const move = this.dex.moves.get(moveid); + const moveType = this.getMoveType(move, species, abilities, preferredType); + if (!this.noStab.includes(moveid) && (move.basePower || move.basePowerCallback) && type === moveType) { + stabMoves.push(moveid); + } + } + if (stabMoves.length) { + const moveid = this.sample(stabMoves); + counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, + movePool, preferredType, role); + } + } + } + + // Enforce STAB + for (const type of types) { + // 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, preferredType); + 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, + movePool, preferredType, role); + } + } + + // If no STAB move was added, add a STAB move + if (!counter.get('stab')) { + const stabMoves = []; + for (const moveid of movePool) { + const move = this.dex.moves.get(moveid); + const moveType = this.getMoveType(move, species, abilities, preferredType); + 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, + movePool, preferredType, role); + } + } + + // Enforce recovery + if (['Bulky Support', 'Bulky Attacker', 'Bulky Setup', 'Staller'].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, + movePool, preferredType, role); + } + } + + // Enforce Staller moves + if (role === 'Staller') { + const enforcedMoves = ['protect', 'toxic', 'wish']; + for (const move of enforcedMoves) { + if (movePool.includes(move)) { + counter = this.addMove(move, moves, types, abilities, teamDetails, species, isLead, + movePool, preferredType, role); + } + } + } + + // Enforce setup + if (role.includes('Setup') || role === 'Berry Sweeper') { + 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, + movePool, preferredType, role); + } + } + + // Enforce Berry Sweeper moves + if (role === 'Berry Sweeper') { + // Enforce Flail/Reversal + for (const move of ['flail', 'reversal']) { + if (movePool.includes(move)) { + counter = this.addMove(move, moves, types, abilities, teamDetails, species, isLead, + movePool, preferredType, role); + } + } + // Enforce one of Endure and Substitute, but not both + const hpControlMoves = []; + for (const moveid of movePool) { + if (['endure', 'substitute'].includes(moveid)) hpControlMoves.push(moveid); + } + if (hpControlMoves.length) { + const moveid = this.sample(hpControlMoves); + counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, + movePool, preferredType, 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, + movePool, preferredType, role); + } + } + + // Enforce coverage move + if (['Fast Attacker', 'Setup Sweeper', 'Bulky Attacker', 'Wallbreaker', 'Berry Sweeper'].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, preferredType); + 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, + movePool, preferredType, role); + } + } + } + + // Choose remaining moves randomly from movepool and add them to moves list: + while (moves.size < this.maxMoveCount && movePool.length) { + const moveid = this.sample(movePool); + counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, + movePool, preferredType, 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, + movePool, preferredType, role); + } + if (moveid === pair[1] && movePool.includes(pair[0])) { + counter = this.addMove(pair[0], moves, types, abilities, teamDetails, species, isLead, + movePool, preferredType, role); + } + } + } + return moves; + } + + shouldCullAbility( + ability: string, + types: Set, + moves: Set, + abilities: string[], + counter: MoveCounter, + movePool: string[], + teamDetails: RandomTeamsTypes.TeamDetails, + species: Species, + preferredType: string, + role: RandomTeamsTypes.Role + ) { + switch (ability) { + case 'Chlorophyll': + return !teamDetails.sun; + case 'Rock Head': + return !counter.get('recoil'); + case 'Swift Swim': + return !teamDetails.rain; + } + + return false; + } + + + getAbility( + types: Set, + moves: Set, + abilities: string[], + counter: MoveCounter, + movePool: string[], + teamDetails: RandomTeamsTypes.TeamDetails, + species: Species, + preferredType: string, + role: RandomTeamsTypes.Role, + ): string { + if (abilities.length <= 1) return abilities[0]; + + // Hard-code abilities here + if (species.id === 'yanma') return counter.get('inaccurate') ? 'Compound Eyes' : 'Speed Boost'; + + 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, movePool, teamDetails, species, preferredType, 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', 'Swift Swim'].includes(a)); + if (weatherAbilities.length) return this.sample(weatherAbilities); + } + + // Pick a random ability + return this.sample(abilities); + } + + getItem( + ability: string, + types: string[], + moves: Set, + counter: MoveCounter, + teamDetails: RandomTeamsTypes.TeamDetails, + species: Species, + isLead: boolean, + preferredType: string, + role: RandomTeamsTypes.Role, + ): string { + // First, the high-priority items + if (species.id === 'farfetchd') return 'Stick'; + if (species.id === 'latias' || species.id === 'latios') return 'Soul Dew'; + if (species.id === 'linoone' && role === 'Setup Sweeper') return 'Silk Scarf'; + if (species.id === 'marowak') return 'Thick Club'; + if (species.id === 'pikachu') return 'Light Ball'; + if (species.id === 'shedinja') return 'Lum Berry'; + if (species.id === 'shuckle') return 'Leftovers'; + if (species.id === 'unown') return counter.get('Physical') ? 'Choice Band' : 'Twisted Spoon'; + + if (moves.has('trick')) return 'Choice Band'; + if ( + moves.has('rest') && !moves.has('sleeptalk') && + // Altaria wants Chesto Berry on Dragon Dance + Rest + (moves.has('dragondance') || !['Early Bird', 'Natural Cure', 'Shed Skin'].includes(ability)) + ) return 'Chesto Berry'; + + // Medium priority items + if (counter.get('Physical') >= 4) return 'Choice Band'; + if (counter.get('Physical') >= 3 && (moves.has('batonpass') || (role === 'Wallbreaker' && counter.get('Special')))) { + return 'Choice Band'; + } + + if ( + moves.has('dragondance') && ability !== 'Natural Cure' && + !moves.has('healbell') && !moves.has('substitute') + ) return 'Lum Berry'; + if (moves.has('bellydrum')) return moves.has('substitute') ? 'Salac Berry' : 'Lum Berry'; + + if (moves.has('raindance') && counter.get('Special') >= 3) return 'Petaya Berry'; + + if (role === 'Berry Sweeper') { + if (moves.has('endure')) return 'Salac Berry'; + if (moves.has('flail') || moves.has('reversal')) return (species.baseStats.spe >= 90) ? 'Liechi Berry' : 'Salac Berry'; + if (moves.has('substitute') && counter.get('Physical') >= 3) return 'Liechi Berry'; + if (moves.has('substitute') && counter.get('Special') >= 3) return 'Petaya Berry'; + } + + const salacReqs = species.baseStats.spe >= 60 && species.baseStats.spe <= 100 && !counter.get('priority'); + + if (moves.has('bulkup') && moves.has('substitute') && counter.get('Status') === 2 && salacReqs) return 'Salac Berry'; + + if (moves.has('swordsdance') && moves.has('substitute') && counter.get('Status') === 2) { + if (salacReqs) return 'Salac Berry'; + if (species.baseStats.spe > 100 && counter.get('Physical') >= 2) return 'Liechi Berry'; + } + + if (moves.has('swordsdance') && counter.get('Status') === 1) { + if (salacReqs) return 'Salac Berry'; + if (species.baseStats.spe > 100) { + return (counter.get('Physical') >= 3 && this.randomChance(1, 2)) ? 'Liechi Berry' : 'Lum Berry'; + } + } + + if (species.id === 'deoxys' || species.id === 'deoxysattack') return 'White Herb'; + + // Default to Leftovers + return 'Leftovers'; + } + + randomSet( + species: string | Species, + teamDetails: RandomTeamsTypes.TeamDetails = {}, + isLead = false + ): RandomTeamsTypes.RandomSet { + species = this.dex.species.get(species); + const forme = this.getForme(species); + const sets = this.randomSets[species.id]["sets"]; + + const set = this.sampleIfArray(sets); + const role = set.role; + const movePool: string[] = Array.from(set.movepool); + const preferredTypes = set.preferredTypes; + // In Gen 3, if a set has multiple preferred types, enforce all of them. + const preferredType = preferredTypes ? preferredTypes.join() : ''; + + 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, movePool, + preferredType, role); + const counter = this.newQueryMoves(moves, species, preferredType, abilities); + + // Get ability + ability = this.getAbility(new Set(types), moves, abilities, counter, movePool, teamDetails, species, + preferredType, role); + + // Get items + item = this.getItem(ability, types, moves, counter, teamDetails, species, isLead, preferredType, role); + + const level = this.getLevel(species); + + // We use a special variable to track Hidden Power + // so that we can check for all Hidden Powers at once + let hasHiddenPower = false; + for (const move of moves) { + if (move.startsWith('hiddenpower')) hasHiddenPower = true; + } + + if (hasHiddenPower) { + let hpType; + for (const move of moves) { + if (move.startsWith('hiddenpower')) hpType = move.substr(11); + } + if (!hpType) throw new Error(`hasHiddenPower is true, but no Hidden Power move was found.`); + const HPivs = this.dex.types.get(hpType).HPivs; + let iv: StatID; + for (iv in HPivs) { + ivs[iv] = HPivs[iv]!; + } + } + + // Prepare optimal HP + 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') && ['flail', 'reversal'].some(m => moves.has(m))) { + // Flail/Reversal users should be able to use four Substitutes + if (hp % 4 > 0) break; + } else if (moves.has('substitute') && (item === 'Salac Berry' || item === 'Petaya Berry' || item === 'Liechi Berry')) { + // Other pinch berry holders should have berries activate after three Substitutes + if (hp % 4 === 0) break; + } else if (moves.has('bellydrum')) { + // Belly Drum users should be able to use Belly Drum twice + if (hp % 2 > 0) break; + } else { + break; + } + evs.hp -= 4; + } + + // Minimize confusion damage + if (!counter.get('Physical') && !moves.has('transform')) { + evs.atk = 0; + ivs.atk = hasHiddenPower ? (ivs.atk || 31) - 28 : 0; + } + + // Prepare optimal HP + let hp = Math.floor(Math.floor(2 * species.baseStats.hp + ivs.hp + Math.floor(evs.hp / 4) + 100) * level / 100 + 10); + if (moves.has('substitute') && ['endeavor', 'flail', 'reversal'].some(m => moves.has(m))) { + // Endeavor/Flail/Reversal users should be able to use four Substitutes + if (hp % 4 === 0) evs.hp -= 4; + } else if (moves.has('substitute') && (item === 'Salac Berry' || item === 'Petaya Berry' || item === 'Liechi Berry')) { + // Other pinch berry holders should have berries activate after three Substitutes + while (hp % 4 > 0) { + evs.hp -= 4; + hp = Math.floor(Math.floor(2 * species.baseStats.hp + ivs.hp + Math.floor(evs.hp / 4) + 100) * level / 100 + 10); + } + } + + // 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.gender, + shiny: this.randomChance(1, 1024), + level, + moves: shuffledMoves, + ability, + evs, + ivs, + item, + role, + }; + } + + randomTeam() { + this.enforceNoDirectCustomBanlistChanges(); + + const seed = this.prng.seed; + const ruleTable = this.dex.formats.getRuleTable(this.format); + const pokemon: RandomTeamsTypes.RandomSet[] = []; + + // For Monotype + const isMonotype = !!this.forceMonotype || ruleTable.has('sametypeclause'); + const typePool = this.dex.types.names(); + const type = this.forceMonotype || this.sample(typePool); + + const baseFormes: {[k: string]: number} = {}; + const typeCount: {[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); + while (baseSpeciesPool.length && pokemon.length < this.maxTeamSize) { + const baseSpecies = this.sampleNoReplace(baseSpeciesPool); + const 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; + + // Prevent Shedinja from generating after Tyranitar + if (species.name === 'Shedinja' && teamDetails.sand) continue; + + // Limit to one Wobbuffet per battle (not just per team) + if (species.name === 'Wobbuffet' && this.battleHasWobbuffet) continue; + // Limit to one Ditto per battle in Gen 2 + if (this.dex.gen < 3 && species.name === 'Ditto' && this.battleHasDitto) continue; + + const types = species.types; + + if (!isMonotype && !this.forceMonotype) { + // Dynamically scale limits for different team sizes. The default and minimum value is 1. + const limitFactor = Math.round(this.maxTeamSize / 6) || 1; + + // Limit two of any type + let skip = false; + 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] >= 1 * limitFactor) { + skip = true; + break; + } + } + } + if (skip) continue; + + // Limit one level 100 Pokemon + if (!this.adjustLevel && (this.getLevel(species) === 100) && numMaxLevelPokemon >= limitFactor) { + continue; + } + } + + // Okay, the set passes, add it to our team + const set = this.randomSet(species, teamDetails); + 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; + } + } + + // 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]++; + } + } + + // Increment level 100 counter + if (set.level === 100) numMaxLevelPokemon++; + + // Update team details + if (set.ability === 'Drizzle' || set.moves.includes('raindance')) teamDetails.rain = 1; + if (set.ability === 'Drought' || set.moves.includes('sunnyday')) teamDetails.sun = 1; + if (set.ability === 'Sand Stream') teamDetails.sand = 1; + if (set.moves.includes('aromatherapy') || set.moves.includes('healbell')) teamDetails.statusCure = 1; + if (set.moves.includes('spikes')) teamDetails.spikes = 1; + if (set.moves.includes('rapidspin')) teamDetails.rapidSpin = 1; + + // In Gen 3, Shadow Tag users can prevent each other from switching out, possibly causing and endless battle or at least causing a long stall war + // To prevent this, we prevent more than one Wobbuffet in a single battle. + if (species.id === 'wobbuffet') this.battleHasWobbuffet = true; + if (species.id === 'ditto') this.battleHasDitto = true; + } + + if (pokemon.length < this.maxTeamSize && !isMonotype && !this.forceMonotype && pokemon.length < 12) { + throw new Error(`Could not build a random team for ${this.format} (seed=${seed})`); + } + + return pokemon; + } +} + +export default RandomGen3Teams; diff --git a/data/mods/gen4/random-sets.json b/data/random-battles/gen4/sets.json similarity index 67% rename from data/mods/gen4/random-sets.json rename to data/random-battles/gen4/sets.json index d123ea3d669c..c0eb65c53de5 100644 --- a/data/mods/gen4/random-sets.json +++ b/data/random-battles/gen4/sets.json @@ -4,11 +4,13 @@ "sets": [ { "role": "Staller", - "movepool": ["leechseed", "powerwhip", "sleeppowder", "sludgebomb", "substitute"] + "movepool": ["leechseed", "powerwhip", "sleeppowder", "sludgebomb", "substitute"], + "abilities": ["Overgrow"] }, { "role": "Bulky Attacker", - "movepool": ["earthquake", "hiddenpowerfire", "hiddenpowerice", "leafstorm", "sleeppowder", "sludgebomb", "synthesis"] + "movepool": ["earthquake", "leafstorm", "sleeppowder", "sludgebomb", "synthesis"], + "abilities": ["Overgrow"] } ] }, @@ -17,7 +19,8 @@ "sets": [ { "role": "Fast Attacker", - "movepool": ["airslash", "dragonpulse", "fireblast", "hiddenpowergrass", "roost"] + "movepool": ["airslash", "dragonpulse", "fireblast", "hiddenpowergrass", "roost"], + "abilities": ["Blaze"] } ] }, @@ -26,20 +29,23 @@ "sets": [ { "role": "Spinner", - "movepool": ["icebeam", "rapidspin", "rest", "roar", "surf", "toxic"] + "movepool": ["icebeam", "rapidspin", "rest", "roar", "surf", "toxic"], + "abilities": ["Torrent"] }, { "role": "Bulky Support", - "movepool": ["icebeam", "rest", "sleeptalk", "surf", "toxic"] + "movepool": ["icebeam", "rest", "sleeptalk", "surf", "toxic"], + "abilities": ["Torrent"] } ] }, "butterfree": { - "level": 94, + "level": 95, "sets": [ { "role": "Bulky Support", - "movepool": ["bugbuzz", "sleeppowder", "stunspore", "uturn"] + "movepool": ["bugbuzz", "sleeppowder", "stunspore", "uturn"], + "abilities": ["Compound Eyes"] } ] }, @@ -48,11 +54,13 @@ "sets": [ { "role": "Fast Support", - "movepool": ["brickbreak", "poisonjab", "toxicspikes", "uturn"] + "movepool": ["brickbreak", "poisonjab", "toxicspikes", "uturn"], + "abilities": ["Swarm"] }, { "role": "Fast Attacker", - "movepool": ["brickbreak", "poisonjab", "swordsdance", "uturn", "xscissor"] + "movepool": ["brickbreak", "poisonjab", "swordsdance", "uturn", "xscissor"], + "abilities": ["Swarm"] } ] }, @@ -61,11 +69,13 @@ "sets": [ { "role": "Fast Attacker", - "movepool": ["bravebird", "heatwave", "return", "roost"] + "movepool": ["bravebird", "heatwave", "return", "roost"], + "abilities": ["Tangled Feet"] }, { "role": "Wallbreaker", - "movepool": ["bravebird", "doubleedge", "pursuit", "quickattack", "return", "roost", "uturn"] + "movepool": ["bravebird", "doubleedge", "pursuit", "quickattack", "return", "roost", "uturn"], + "abilities": ["Tangled Feet"] } ] }, @@ -74,16 +84,23 @@ "sets": [ { "role": "Wallbreaker", - "movepool": ["crunch", "facade", "protect", "suckerpunch", "swordsdance", "uturn"] + "movepool": ["crunch", "facade", "protect", "suckerpunch", "swordsdance", "uturn"], + "abilities": ["Guts"] } ] }, "fearow": { - "level": 87, + "level": 86, "sets": [ + { + "role": "Fast Attacker", + "movepool": ["doubleedge", "drillpeck", "quickattack", "return", "uturn"], + "abilities": ["Keen Eye"] + }, { "role": "Wallbreaker", - "movepool": ["doubleedge", "drillpeck", "pursuit", "quickattack", "return", "uturn"] + "movepool": ["doubleedge", "drillpeck", "pursuit", "return", "uturn"], + "abilities": ["Keen Eye"] } ] }, @@ -92,27 +109,30 @@ "sets": [ { "role": "Fast Attacker", - "movepool": ["aquatail", "crunch", "earthquake", "glare", "gunkshot", "poisonjab", "seedbomb", "switcheroo"], + "movepool": ["crunch", "earthquake", "glare", "gunkshot", "poisonjab", "seedbomb", "switcheroo"], + "abilities": ["Intimidate"], "preferredTypes": ["Ground"] } ] }, "pikachu": { - "level": 91, + "level": 92, "sets": [ { "role": "Fast Attacker", "movepool": ["fakeout", "grassknot", "hiddenpowerice", "surf", "thunderbolt", "volttackle"], + "abilities": ["Static"], "preferredTypes": ["Ice"] } ] }, "raichu": { - "level": 87, + "level": 86, "sets": [ { "role": "Wallbreaker", - "movepool": ["encore", "focusblast", "grassknot", "hiddenpowerice", "nastyplot", "surf", "thunderbolt"] + "movepool": ["encore", "focusblast", "grassknot", "hiddenpowerice", "nastyplot", "surf", "thunderbolt"], + "abilities": ["Static"] } ] }, @@ -121,11 +141,13 @@ "sets": [ { "role": "Spinner", - "movepool": ["earthquake", "nightslash", "rapidspin", "stealthrock", "stoneedge", "toxic"] + "movepool": ["earthquake", "nightslash", "rapidspin", "stealthrock", "stoneedge", "toxic"], + "abilities": ["Sand Veil"] }, { "role": "Bulky Setup", "movepool": ["earthquake", "nightslash", "stoneedge", "substitute", "swordsdance", "xscissor"], + "abilities": ["Sand Veil"], "preferredTypes": ["Rock"] } ] @@ -136,30 +158,34 @@ { "role": "Bulky Attacker", "movepool": ["earthquake", "fireblast", "icebeam", "roar", "stealthrock", "toxicspikes"], + "abilities": ["Poison Point"], "preferredTypes": ["Ice"] } ] }, "nidoking": { - "level": 83, + "level": 84, "sets": [ { "role": "Fast Attacker", "movepool": ["earthquake", "fireblast", "icebeam", "megahorn", "stealthrock", "suckerpunch", "thunderbolt"], + "abilities": ["Poison Point"], "preferredTypes": ["Ice"] } ] }, "clefable": { - "level": 83, + "level": 84, "sets": [ { "role": "Bulky Support", - "movepool": ["aromatherapy", "doubleedge", "fireblast", "icebeam", "softboiled", "stealthrock", "thunderwave"] + "movepool": ["aromatherapy", "doubleedge", "fireblast", "icebeam", "softboiled", "stealthrock", "thunderwave"], + "abilities": ["Magic Guard"] }, { "role": "Setup Sweeper", - "movepool": ["calmmind", "icebeam", "softboiled", "thunderbolt"] + "movepool": ["calmmind", "icebeam", "softboiled", "thunderbolt"], + "abilities": ["Magic Guard"] } ] }, @@ -169,64 +195,78 @@ { "role": "Setup Sweeper", "movepool": ["energyball", "fireblast", "hiddenpowerrock", "hypnosis", "nastyplot"], + "abilities": ["Flash Fire"], "preferredTypes": ["Grass"] } ] }, "wigglytuff": { - "level": 93, + "level": 98, "sets": [ + { + "role": "Fast Support", + "movepool": ["doubleedge", "protect", "thunderwave", "toxic", "wish"], + "abilities": ["Cute Charm"] + }, { "role": "Bulky Support", - "movepool": ["bodyslam", "doubleedge", "fireblast", "healbell", "protect", "stealthrock", "thunderwave", "toxic", "wish"] + "movepool": ["bodyslam", "fireblast", "healbell", "protect", "stealthrock", "wish"], + "abilities": ["Cute Charm"] }, { "role": "Staller", - "movepool": ["protect", "seismictoss", "toxic", "wish"] + "movepool": ["protect", "seismictoss", "toxic", "wish"], + "abilities": ["Cute Charm"] } ] }, "vileplume": { - "level": 88, + "level": 89, "sets": [ { "role": "Bulky Support", - "movepool": ["aromatherapy", "energyball", "hiddenpowerfire", "sleeppowder", "sludgebomb", "synthesis"] + "movepool": ["aromatherapy", "energyball", "hiddenpowerground", "sleeppowder", "sludgebomb", "synthesis"], + "abilities": ["Chlorophyll"] }, { "role": "Setup Sweeper", - "movepool": ["hiddenpowerfire", "sludgebomb", "solarbeam", "sunnyday", "synthesis"] + "movepool": ["hiddenpowerfire", "sludgebomb", "solarbeam", "sunnyday"], + "abilities": ["Chlorophyll"] } ] }, "parasect": { - "level": 96, + "level": 97, "sets": [ { "role": "Bulky Support", - "movepool": ["aromatherapy", "seedbomb", "spore", "stunspore", "synthesis", "xscissor"] + "movepool": ["aromatherapy", "seedbomb", "spore", "stunspore", "synthesis", "xscissor"], + "abilities": ["Dry Skin"] }, { "role": "Bulky Attacker", - "movepool": ["pursuit", "seedbomb", "spore", "swordsdance", "xscissor"] + "movepool": ["pursuit", "seedbomb", "spore", "swordsdance", "xscissor"], + "abilities": ["Dry Skin"] } ] }, "venomoth": { - "level": 87, + "level": 85, "sets": [ { "role": "Fast Support", - "movepool": ["bugbuzz", "roost", "sleeppowder", "toxicspikes", "uturn"] + "movepool": ["bugbuzz", "roost", "sleeppowder", "toxicspikes", "uturn"], + "abilities": ["Tinted Lens"] } ] }, "dugtrio": { - "level": 85, + "level": 83, "sets": [ { "role": "Fast Support", "movepool": ["earthquake", "nightslash", "stealthrock", "stoneedge", "suckerpunch"], + "abilities": ["Arena Trap"], "preferredTypes": ["Rock"] } ] @@ -236,7 +276,8 @@ "sets": [ { "role": "Fast Attacker", - "movepool": ["aerialace", "bite", "doubleedge", "fakeout", "hypnosis", "return", "seedbomb", "switcheroo", "taunt", "uturn"], + "movepool": ["bite", "doubleedge", "fakeout", "hypnosis", "return", "seedbomb", "taunt", "uturn"], + "abilities": ["Technician"], "preferredTypes": ["Dark"] } ] @@ -247,6 +288,7 @@ { "role": "Fast Attacker", "movepool": ["calmmind", "encore", "focusblast", "hiddenpowergrass", "hydropump", "icebeam", "psychic", "surf"], + "abilities": ["Cloud Nine"], "preferredTypes": ["Ice"] } ] @@ -256,7 +298,9 @@ "sets": [ { "role": "Fast Attacker", - "movepool": ["closecombat", "earthquake", "encore", "icepunch", "stoneedge", "uturn"] + "movepool": ["closecombat", "earthquake", "encore", "stoneedge", "uturn"], + "abilities": ["Vital Spirit"], + "preferredTypes": ["Rock"] } ] }, @@ -266,11 +310,13 @@ { "role": "Bulky Attacker", "movepool": ["extremespeed", "flareblitz", "hiddenpowergrass", "morningsun", "roar", "thunderfang", "toxic", "willowisp"], + "abilities": ["Intimidate"], "preferredTypes": ["Normal"] }, { "role": "Fast Attacker", "movepool": ["crunch", "extremespeed", "flareblitz", "ironhead", "morningsun", "thunderfang"], + "abilities": ["Intimidate"], "preferredTypes": ["Normal"] } ] @@ -280,24 +326,28 @@ "sets": [ { "role": "Bulky Setup", - "movepool": ["brickbreak", "bulkup", "icepunch", "waterfall"] + "movepool": ["brickbreak", "bulkup", "icepunch", "waterfall"], + "abilities": ["Water Absorb"] }, { "role": "Fast Support", - "movepool": ["encore", "focuspunch", "icepunch", "substitute", "waterfall"] + "movepool": ["encore", "focuspunch", "icepunch", "substitute", "waterfall"], + "abilities": ["Water Absorb"] }, { "role": "Bulky Support", - "movepool": ["bulkup", "rest", "sleeptalk", "toxic", "waterfall"] + "movepool": ["bulkup", "rest", "sleeptalk", "toxic", "waterfall"], + "abilities": ["Water Absorb"] } ] }, "alakazam": { - "level": 83, + "level": 81, "sets": [ { "role": "Fast Attacker", - "movepool": ["encore", "focusblast", "psychic", "shadowball", "substitute", "trick"], + "movepool": ["calmmind", "encore", "focusblast", "psychic", "shadowball", "substitute", "trick"], + "abilities": ["Synchronize"], "preferredTypes": ["Fighting"] } ] @@ -307,38 +357,44 @@ "sets": [ { "role": "Bulky Attacker", - "movepool": ["bulkup", "bulletpunch", "dynamicpunch", "icepunch", "payback", "stoneedge"] + "movepool": ["bulletpunch", "dynamicpunch", "earthquake", "payback", "stoneedge", "toxic"], + "abilities": ["No Guard"], + "preferredTypes": ["Dark"] } ] }, "victreebel": { - "level": 88, + "level": 90, "sets": [ { "role": "Wallbreaker", - "movepool": ["hiddenpowerfire", "leafblade", "leafstorm", "sleeppowder", "sludgebomb", "suckerpunch"] + "movepool": ["hiddenpowerground", "leafblade", "leafstorm", "sleeppowder", "sludgebomb", "suckerpunch"], + "abilities": ["Chlorophyll"] }, { "role": "Setup Sweeper", - "movepool": ["sludgebomb", "solarbeam", "sunnyday", "weatherball"] + "movepool": ["sludgebomb", "solarbeam", "sunnyday", "weatherball"], + "abilities": ["Chlorophyll"] } ] }, "tentacruel": { - "level": 81, + "level": 80, "sets": [ { "role": "Bulky Support", - "movepool": ["haze", "hydropump", "icebeam", "rapidspin", "sludgebomb", "surf", "toxicspikes"] + "movepool": ["haze", "hydropump", "icebeam", "rapidspin", "sludgebomb", "surf", "toxicspikes"], + "abilities": ["Clear Body", "Liquid Ooze"] } ] }, "golem": { - "level": 88, + "level": 87, "sets": [ { "role": "Bulky Attacker", - "movepool": ["earthquake", "explosion", "stealthrock", "stoneedge", "suckerpunch", "toxic"] + "movepool": ["earthquake", "explosion", "stealthrock", "stoneedge", "suckerpunch", "toxic"], + "abilities": ["Rock Head"] } ] }, @@ -347,21 +403,24 @@ "sets": [ { "role": "Bulky Attacker", - "movepool": ["flareblitz", "hypnosis", "megahorn", "morningsun", "willowisp"] + "movepool": ["flareblitz", "hypnosis", "megahorn", "morningsun", "willowisp"], + "abilities": ["Flash Fire"] } ] }, "slowbro": { - "level": 84, + "level": 85, "sets": [ { "role": "Bulky Attacker", "movepool": ["fireblast", "icebeam", "psychic", "slackoff", "surf", "thunderwave", "toxic"], + "abilities": ["Own Tempo"], "preferredTypes": ["Psychic"] }, { "role": "Bulky Setup", - "movepool": ["calmmind", "psychic", "slackoff", "surf"] + "movepool": ["calmmind", "psychic", "slackoff", "surf"], + "abilities": ["Own Tempo"] } ] }, @@ -370,20 +429,25 @@ "sets": [ { "role": "Fast Attacker", - "movepool": ["heatwave", "leafblade", "nightslash", "return", "uturn"] + "movepool": ["doubleedge", "heatwave", "leafblade", "nightslash", "quickattack", "uturn"], + "abilities": ["Inner Focus"], + "preferredTypes": ["Grass"] }, { "role": "Setup Sweeper", - "movepool": ["batonpass", "leafblade", "nightslash", "return", "swordsdance"] + "movepool": ["batonpass", "leafblade", "nightslash", "return", "swordsdance"], + "abilities": ["Inner Focus"], + "preferredTypes": ["Grass"] } ] }, "dodrio": { - "level": 87, + "level": 86, "sets": [ { "role": "Wallbreaker", - "movepool": ["bravebird", "pursuit", "quickattack", "return", "roost"] + "movepool": ["bravebird", "pursuit", "quickattack", "return", "roost"], + "abilities": ["Early Bird"] } ] }, @@ -391,16 +455,19 @@ "level": 91, "sets": [ { - "role": "Bulky Attacker", - "movepool": ["icebeam", "protect", "rest", "sleeptalk", "surf", "toxic"] + "role": "Staller", + "movepool": ["icebeam", "protect", "surf", "toxic"], + "abilities": ["Thick Fat"] }, { "role": "Fast Attacker", - "movepool": ["encore", "raindance", "rest", "surf", "toxic"] + "movepool": ["raindance", "rest", "surf", "toxic"], + "abilities": ["Hydration"] }, { "role": "Bulky Support", - "movepool": ["encore", "icebeam", "raindance", "rest", "surf", "toxic"] + "movepool": ["encore", "icebeam", "raindance", "rest", "surf", "toxic"], + "abilities": ["Hydration", "Thick Fat"] } ] }, @@ -409,16 +476,19 @@ "sets": [ { "role": "Bulky Attacker", - "movepool": ["brickbreak", "curse", "explosion", "gunkshot", "icepunch", "payback", "poisonjab", "rest", "shadowsneak"] + "movepool": ["brickbreak", "curse", "explosion", "gunkshot", "icepunch", "payback", "poisonjab", "rest", "shadowsneak"], + "abilities": ["Sticky Hold"], + "preferredTypes": ["Fighting"] } ] }, "cloyster": { - "level": 86, + "level": 88, "sets": [ { "role": "Bulky Support", - "movepool": ["explosion", "iceshard", "rapidspin", "rockblast", "spikes", "surf", "toxicspikes"] + "movepool": ["explosion", "iceshard", "rapidspin", "rockblast", "spikes", "surf", "toxicspikes"], + "abilities": ["Shell Armor", "Skill Link"] } ] }, @@ -428,52 +498,64 @@ { "role": "Wallbreaker", "movepool": ["explosion", "focusblast", "painsplit", "shadowball", "sludgebomb", "substitute", "trick", "willowisp"], + "abilities": ["Levitate"], "preferredTypes": ["Fighting"] } ] }, "hypno": { - "level": 91, + "level": 92, "sets": [ { "role": "Bulky Support", - "movepool": ["protect", "psychic", "thunderwave", "toxic", "wish"] + "movepool": ["protect", "psychic", "thunderwave", "toxic", "wish"], + "abilities": ["Insomnia"] }, { "role": "Staller", - "movepool": ["protect", "seismictoss", "toxic", "wish"] + "movepool": ["protect", "seismictoss", "toxic", "wish"], + "abilities": ["Insomnia"] + }, + { + "role": "Bulky Setup", + "movepool": ["batonpass", "focusblast", "nastyplot", "psychic"], + "abilities": ["Insomnia"] } ] }, "kingler": { - "level": 89, + "level": 88, "sets": [ { "role": "Fast Attacker", - "movepool": ["crabhammer", "return", "superpower", "swordsdance", "xscissor"] + "movepool": ["crabhammer", "return", "superpower", "swordsdance", "xscissor"], + "abilities": ["Hyper Cutter"] }, { "role": "Bulky Setup", - "movepool": ["agility", "crabhammer", "return", "swordsdance"] + "movepool": ["agility", "crabhammer", "return", "swordsdance"], + "abilities": ["Hyper Cutter"] } ] }, "electrode": { - "level": 88, + "level": 87, "sets": [ { "role": "Wallbreaker", "movepool": ["explosion", "hiddenpowerice", "signalbeam", "taunt", "thunderbolt"], + "abilities": ["Static"], "preferredTypes": ["Ice"] } ] }, "exeggutor": { - "level": 87, + "level": 88, "sets": [ { "role": "Bulky Attacker", "movepool": ["explosion", "hiddenpowerfire", "leafstorm", "psychic", "sleeppowder", "synthesis"], + "abilities": ["Chlorophyll"], "preferredTypes": ["Psychic"] } ] @@ -484,6 +566,7 @@ { "role": "Wallbreaker", "movepool": ["doubleedge", "earthquake", "firepunch", "stealthrock", "stoneedge", "swordsdance"], + "abilities": ["Rock Head"], "preferredTypes": ["Rock"] } ] @@ -494,11 +577,13 @@ { "role": "Fast Attacker", "movepool": ["closecombat", "earthquake", "machpunch", "rapidspin", "stoneedge", "suckerpunch"], + "abilities": ["Limber"], "preferredTypes": ["Rock"] }, { "role": "Setup Sweeper", "movepool": ["bulkup", "closecombat", "earthquake", "machpunch", "stoneedge", "suckerpunch"], + "abilities": ["Limber"], "preferredTypes": ["Rock"] } ] @@ -508,24 +593,28 @@ "sets": [ { "role": "Spinner", - "movepool": ["closecombat", "drainpunch", "icepunch", "machpunch", "rapidspin", "stoneedge"] + "movepool": ["closecombat", "drainpunch", "icepunch", "machpunch", "rapidspin", "stoneedge"], + "abilities": ["Iron Fist"] }, { "role": "Bulky Attacker", - "movepool": ["bulkup", "closecombat", "drainpunch", "icepunch", "machpunch", "stoneedge"] + "movepool": ["bulkup", "closecombat", "drainpunch", "icepunch", "machpunch", "stoneedge"], + "abilities": ["Iron Fist"] } ] }, "weezing": { - "level": 86, + "level": 89, "sets": [ { "role": "Bulky Support", - "movepool": ["fireblast", "haze", "painsplit", "sludgebomb", "willowisp"] + "movepool": ["fireblast", "haze", "painsplit", "sludgebomb", "willowisp"], + "abilities": ["Levitate"] }, { "role": "Bulky Attacker", - "movepool": ["fireblast", "rest", "sleeptalk", "sludgebomb"] + "movepool": ["fireblast", "rest", "sleeptalk", "sludgebomb"], + "abilities": ["Levitate"] } ] }, @@ -534,33 +623,38 @@ "sets": [ { "role": "Bulky Support", - "movepool": ["doubleedge", "earthquake", "fakeout", "hammerarm", "return", "suckerpunch"] + "movepool": ["doubleedge", "earthquake", "fakeout", "hammerarm", "return", "suckerpunch"], + "abilities": ["Scrappy"] }, { "role": "Bulky Attacker", - "movepool": ["bodyslam", "earthquake", "protect", "return", "wish"] + "movepool": ["bodyslam", "earthquake", "protect", "return", "wish"], + "abilities": ["Scrappy"] } ] }, "seaking": { - "level": 92, + "level": 93, "sets": [ { - "role": "Fast Attacker", - "movepool": ["icebeam", "megahorn", "raindance", "return", "waterfall"] + "role": "Setup Sweeper", + "movepool": ["icebeam", "megahorn", "raindance", "return", "waterfall"], + "abilities": ["Swift Swim"] } ] }, "starmie": { - "level": 80, + "level": 79, "sets": [ { "role": "Wallbreaker", - "movepool": ["hydropump", "icebeam", "psychic", "recover", "thunderbolt"] + "movepool": ["hydropump", "icebeam", "psychic", "recover", "thunderbolt"], + "abilities": ["Natural Cure"] }, { "role": "Bulky Support", - "movepool": ["icebeam", "psychic", "rapidspin", "recover", "surf", "thunderwave"] + "movepool": ["icebeam", "psychic", "rapidspin", "recover", "surf", "thunderwave"], + "abilities": ["Natural Cure"] } ] }, @@ -570,20 +664,23 @@ { "role": "Setup Sweeper", "movepool": ["batonpass", "encore", "focusblast", "nastyplot", "psychic", "shadowball", "substitute"], + "abilities": ["Filter"], "preferredTypes": ["Fighting"] } ] }, "scyther": { - "level": 83, + "level": 82, "sets": [ { "role": "Setup Sweeper", - "movepool": ["aerialace", "brickbreak", "bugbite", "roost", "swordsdance"] + "movepool": ["aerialace", "brickbreak", "bugbite", "roost", "swordsdance"], + "abilities": ["Technician"] }, { "role": "Wallbreaker", - "movepool": ["aerialace", "brickbreak", "pursuit", "uturn"] + "movepool": ["aerialace", "brickbreak", "pursuit", "uturn"], + "abilities": ["Technician"] } ] }, @@ -592,20 +689,23 @@ "sets": [ { "role": "Fast Attacker", - "movepool": ["focusblast", "icebeam", "lovelykiss", "psychic", "trick"] + "movepool": ["focusblast", "icebeam", "lovelykiss", "psychic", "trick"], + "abilities": ["Forewarn"] }, { "role": "Setup Sweeper", - "movepool": ["focusblast", "icebeam", "lovelykiss", "nastyplot", "psychic", "substitute"] + "movepool": ["focusblast", "icebeam", "lovelykiss", "nastyplot", "psychic", "substitute"], + "abilities": ["Forewarn"] } ] }, "pinsir": { - "level": 85, + "level": 84, "sets": [ { "role": "Fast Attacker", "movepool": ["closecombat", "earthquake", "stealthrock", "stoneedge", "swordsdance", "xscissor"], + "abilities": ["Mold Breaker"], "preferredTypes": ["Rock"] } ] @@ -615,7 +715,8 @@ "sets": [ { "role": "Fast Attacker", - "movepool": ["doubleedge", "earthquake", "payback", "pursuit", "return", "stoneedge"] + "movepool": ["doubleedge", "earthquake", "payback", "pursuit", "return", "stoneedge"], + "abilities": ["Intimidate"] } ] }, @@ -624,11 +725,13 @@ "sets": [ { "role": "Setup Sweeper", - "movepool": ["dragondance", "earthquake", "stoneedge", "substitute", "waterfall"] + "movepool": ["dragondance", "earthquake", "stoneedge", "substitute", "waterfall"], + "abilities": ["Intimidate"] }, { "role": "Bulky Setup", - "movepool": ["dragondance", "rest", "sleeptalk", "waterfall"] + "movepool": ["dragondance", "rest", "sleeptalk", "waterfall"], + "abilities": ["Intimidate"] } ] }, @@ -637,11 +740,13 @@ "sets": [ { "role": "Bulky Support", - "movepool": ["healbell", "hydropump", "icebeam", "thunderbolt", "toxic"] + "movepool": ["healbell", "hydropump", "icebeam", "thunderbolt", "toxic"], + "abilities": ["Water Absorb"] }, { "role": "Staller", - "movepool": ["hydropump", "icebeam", "protect", "toxic"] + "movepool": ["hydropump", "icebeam", "protect", "toxic"], + "abilities": ["Water Absorb"] } ] }, @@ -650,7 +755,8 @@ "sets": [ { "role": "Fast Support", - "movepool": ["transform"] + "movepool": ["transform"], + "abilities": ["Limber"] } ] }, @@ -659,105 +765,121 @@ "sets": [ { "role": "Bulky Support", - "movepool": ["healbell", "icebeam", "protect", "surf", "wish"] + "movepool": ["healbell", "icebeam", "protect", "surf", "wish"], + "abilities": ["Water Absorb"] }, { "role": "Staller", - "movepool": ["protect", "surf", "toxic", "wish"] + "movepool": ["protect", "surf", "toxic", "wish"], + "abilities": ["Water Absorb"] } ] }, "jolteon": { - "level": 81, + "level": 78, "sets": [ { "role": "Bulky Attacker", - "movepool": ["batonpass", "hiddenpowerice", "substitute", "thunderbolt", "toxic"] + "movepool": ["batonpass", "hiddenpowerice", "substitute", "thunderbolt", "toxic"], + "abilities": ["Volt Absorb"] }, { "role": "Fast Attacker", - "movepool": ["hiddenpowerice", "shadowball", "signalbeam", "thunderbolt"] + "movepool": ["hiddenpowerice", "shadowball", "signalbeam", "thunderbolt"], + "abilities": ["Volt Absorb"] } ] }, "flareon": { - "level": 93, + "level": 94, "sets": [ { "role": "Bulky Attacker", - "movepool": ["fireblast", "hiddenpowergrass", "lavaplume", "protect", "superpower", "wish"] + "movepool": ["fireblast", "hiddenpowergrass", "lavaplume", "protect", "superpower", "wish"], + "abilities": ["Flash Fire"] }, { "role": "Staller", - "movepool": ["fireblast", "lavaplume", "protect", "toxic", "wish"] + "movepool": ["fireblast", "lavaplume", "protect", "toxic", "wish"], + "abilities": ["Flash Fire"] } ] }, "omastar": { - "level": 85, + "level": 86, "sets": [ { "role": "Setup Sweeper", - "movepool": ["hiddenpowergrass", "hydropump", "icebeam", "raindance"] + "movepool": ["hiddenpowergrass", "hydropump", "icebeam", "raindance"], + "abilities": ["Swift Swim"] }, { "role": "Bulky Support", "movepool": ["earthpower", "icebeam", "spikes", "stealthrock", "surf", "toxicspikes"], + "abilities": ["Shell Armor", "Swift Swim"], "preferredTypes": ["Ice"] } ] }, "kabutops": { - "level": 84, + "level": 83, "sets": [ { "role": "Spinner", - "movepool": ["aquajet", "rapidspin", "stealthrock", "stoneedge", "superpower", "waterfall"] + "movepool": ["aquajet", "rapidspin", "stealthrock", "stoneedge", "superpower", "waterfall"], + "abilities": ["Battle Armor", "Swift Swim"] }, { "role": "Fast Attacker", - "movepool": ["aquajet", "stealthrock", "stoneedge", "superpower", "swordsdance", "waterfall"] + "movepool": ["aquajet", "stealthrock", "stoneedge", "superpower", "swordsdance", "waterfall"], + "abilities": ["Battle Armor", "Swift Swim"] } ] }, "aerodactyl": { - "level": 79, + "level": 78, "sets": [ { "role": "Bulky Attacker", - "movepool": ["earthquake", "roost", "stealthrock", "stoneedge", "taunt", "toxic"] + "movepool": ["earthquake", "roost", "stealthrock", "stoneedge", "taunt", "toxic"], + "abilities": ["Pressure"] }, { "role": "Fast Support", - "movepool": ["aquatail", "doubleedge", "earthquake", "pursuit", "roost", "stealthrock", "stoneedge"], + "movepool": ["aerialace", "aquatail", "earthquake", "pursuit", "roost", "stealthrock", "stoneedge"], + "abilities": ["Pressure"], "preferredTypes": ["Ground"] } ] }, "snorlax": { - "level": 80, + "level": 79, "sets": [ { "role": "Bulky Attacker", "movepool": ["bodyslam", "crunch", "earthquake", "pursuit", "return", "selfdestruct"], + "abilities": ["Thick Fat"], "preferredTypes": ["Ground"] }, { "role": "Bulky Support", - "movepool": ["bodyslam", "curse", "rest", "sleeptalk", "whirlwind"] + "movepool": ["bodyslam", "curse", "rest", "sleeptalk"], + "abilities": ["Thick Fat"] }, { "role": "Bulky Setup", - "movepool": ["bodyslam", "curse", "earthquake", "rest"] + "movepool": ["bodyslam", "curse", "earthquake", "rest"], + "abilities": ["Thick Fat"] } ] }, "articuno": { - "level": 83, + "level": 82, "sets": [ { "role": "Staller", - "movepool": ["healbell", "icebeam", "roost", "substitute", "toxic"] + "movepool": ["healbell", "icebeam", "roost", "substitute", "toxic"], + "abilities": ["Pressure"] } ] }, @@ -766,11 +888,13 @@ "sets": [ { "role": "Bulky Support", - "movepool": ["heatwave", "hiddenpowerice", "roost", "substitute", "thunderbolt", "toxic", "uturn"] + "movepool": ["heatwave", "hiddenpowerice", "roost", "substitute", "thunderbolt", "toxic", "uturn"], + "abilities": ["Pressure"] }, { "role": "Fast Attacker", - "movepool": ["heatwave", "hiddenpowerice", "roost", "thunderbolt", "uturn"] + "movepool": ["heatwave", "hiddenpowerice", "roost", "thunderbolt", "uturn"], + "abilities": ["Pressure"] } ] }, @@ -779,20 +903,24 @@ "sets": [ { "role": "Bulky Attacker", - "movepool": ["airslash", "fireblast", "hiddenpowergrass", "roost", "substitute", "toxic", "uturn"] + "movepool": ["airslash", "fireblast", "hiddenpowergrass", "roost", "substitute", "toxic", "uturn"], + "abilities": ["Pressure"] } ] }, "dragonite": { - "level": 78, + "level": 76, "sets": [ { - "role": "Fast Attacker", - "movepool": ["dragondance", "earthquake", "extremespeed", "firepunch", "outrage"] + "role": "Wallbreaker", + "movepool": ["earthquake", "extremespeed", "outrage", "superpower"], + "abilities": ["Inner Focus"] }, { - "role": "Bulky Setup", - "movepool": ["dragonclaw", "dragondance", "earthquake", "firepunch", "roost"] + "role": "Setup Sweeper", + "movepool": ["dragondance", "earthquake", "firepunch", "outrage", "roost"], + "abilities": ["Inner Focus"], + "preferredTypes": ["Ground"] } ] }, @@ -801,34 +929,39 @@ "sets": [ { "role": "Setup Sweeper", - "movepool": ["aurasphere", "calmmind", "fireblast", "psychic", "recover", "shadowball"] + "movepool": ["aurasphere", "calmmind", "fireblast", "psychic", "recover", "shadowball"], + "abilities": ["Pressure"] } ] }, "mew": { - "level": 76, + "level": 77, "sets": [ { "role": "Bulky Support", - "movepool": ["psychic", "softboiled", "stealthrock", "taunt", "uturn", "willowisp"] + "movepool": ["psychic", "softboiled", "stealthrock", "taunt", "uturn", "willowisp"], + "abilities": ["Synchronize"] }, { "role": "Setup Sweeper", - "movepool": ["aurasphere", "batonpass", "earthpower", "fireblast", "nastyplot", "psychic", "softboiled"] + "movepool": ["aurasphere", "batonpass", "earthpower", "fireblast", "nastyplot", "psychic", "softboiled"], + "abilities": ["Synchronize"] }, { "role": "Bulky Setup", "movepool": ["batonpass", "earthquake", "explosion", "suckerpunch", "superpower", "swordsdance", "zenheadbutt"], + "abilities": ["Synchronize"], "preferredTypes": ["Ground"] } ] }, "meganium": { - "level": 90, + "level": 91, "sets": [ { - "role": "Bulky Support", - "movepool": ["aromatherapy", "energyball", "leechseed", "lightscreen", "reflect", "synthesis", "toxic"] + "role": "Staller", + "movepool": ["aromatherapy", "earthquake", "energyball", "leechseed", "synthesis", "toxic"], + "abilities": ["Overgrow"] } ] }, @@ -837,7 +970,8 @@ "sets": [ { "role": "Fast Attacker", - "movepool": ["eruption", "fireblast", "focusblast", "hiddenpowergrass", "hiddenpowerrock"] + "movepool": ["eruption", "fireblast", "focusblast", "hiddenpowergrass", "hiddenpowerrock"], + "abilities": ["Blaze"] } ] }, @@ -846,21 +980,29 @@ "sets": [ { "role": "Setup Sweeper", - "movepool": ["dragondance", "earthquake", "icepunch", "return", "waterfall"], - "preferredTypes": ["Ice"] + "movepool": ["dragondance", "earthquake", "icepunch", "waterfall"], + "abilities": ["Torrent"] }, { "role": "Fast Attacker", - "movepool": ["aquajet", "earthquake", "icepunch", "return", "swordsdance", "waterfall"] + "movepool": ["aquajet", "return", "swordsdance", "waterfall"], + "abilities": ["Torrent"] + }, + { + "role": "Bulky Attacker", + "movepool": ["aquajet", "earthquake", "icepunch", "superpower", "waterfall"], + "abilities": ["Torrent"], + "preferredTypes": ["Ice"] } ] }, "furret": { - "level": 92, + "level": 93, "sets": [ { "role": "Wallbreaker", - "movepool": ["aquatail", "doubleedge", "firepunch", "shadowclaw", "trick", "uturn"] + "movepool": ["aquatail", "doubleedge", "firepunch", "shadowclaw", "trick", "uturn"], + "abilities": ["Keen Eye"] } ] }, @@ -869,7 +1011,8 @@ "sets": [ { "role": "Staller", - "movepool": ["nightshade", "roost", "toxic", "whirlwind"] + "movepool": ["airslash", "nightshade", "roost", "toxic", "whirlwind"], + "abilities": ["Insomnia"] } ] }, @@ -877,30 +1020,34 @@ "level": 100, "sets": [ { - "role": "Bulky Support", - "movepool": ["encore", "knockoff", "lightscreen", "reflect", "roost", "toxic", "uturn"] + "role": "Staller", + "movepool": ["encore", "focusblast", "hiddenpowerflying", "knockoff", "roost", "toxic"], + "abilities": ["Early Bird"] }, { "role": "Fast Support", - "movepool": ["agility", "batonpass", "encore", "swordsdance"] + "movepool": ["agility", "batonpass", "encore", "swordsdance"], + "abilities": ["Early Bird"] } ] }, "ariados": { - "level": 97, + "level": 100, "sets": [ { "role": "Bulky Support", - "movepool": ["bugbite", "poisonjab", "suckerpunch", "toxicspikes"] + "movepool": ["bugbite", "poisonjab", "suckerpunch", "toxicspikes"], + "abilities": ["Insomnia", "Swarm"] } ] }, "crobat": { - "level": 82, + "level": 81, "sets": [ { "role": "Bulky Support", - "movepool": ["bravebird", "heatwave", "roost", "superfang", "taunt", "toxic", "uturn"] + "movepool": ["bravebird", "heatwave", "roost", "superfang", "taunt", "toxic", "uturn"], + "abilities": ["Inner Focus"] } ] }, @@ -909,7 +1056,8 @@ "sets": [ { "role": "Bulky Attacker", - "movepool": ["discharge", "healbell", "hydropump", "icebeam", "surf", "thunderbolt", "thunderwave", "toxic"] + "movepool": ["discharge", "healbell", "hydropump", "icebeam", "surf", "thunderbolt", "thunderwave", "toxic"], + "abilities": ["Volt Absorb"] } ] }, @@ -919,11 +1067,13 @@ { "role": "Fast Attacker", "movepool": ["calmmind", "grassknot", "heatwave", "hiddenpowerfighting", "psychic", "roost", "trick", "uturn"], + "abilities": ["Synchronize"], "preferredTypes": ["Fire"] }, { "role": "Bulky Support", - "movepool": ["heatwave", "hiddenpowerfighting", "psychic", "roost", "thunderwave", "toxic"] + "movepool": ["heatwave", "hiddenpowerfighting", "psychic", "roost", "thunderwave", "toxic"], + "abilities": ["Synchronize"] } ] }, @@ -932,16 +1082,18 @@ "sets": [ { "role": "Bulky Attacker", - "movepool": ["discharge", "focusblast", "healbell", "hiddenpowerice", "lightscreen", "reflect", "signalbeam", "thunderbolt", "toxic"] + "movepool": ["discharge", "focusblast", "healbell", "hiddenpowerice", "signalbeam", "thunderbolt", "toxic"], + "abilities": ["Static"] } ] }, "bellossom": { - "level": 90, + "level": 92, "sets": [ { "role": "Bulky Support", - "movepool": ["energyball", "hiddenpowerfire", "hiddenpowerrock", "leafstorm", "sleeppowder", "stunspore", "synthesis"] + "movepool": ["energyball", "hiddenpowerfire", "hiddenpowerrock", "leafstorm", "leechseed", "sleeppowder", "stunspore", "synthesis"], + "abilities": ["Chlorophyll"] } ] }, @@ -950,20 +1102,24 @@ "sets": [ { "role": "Bulky Attacker", - "movepool": ["aquajet", "doubleedge", "icepunch", "superpower", "waterfall"] + "movepool": ["aquajet", "doubleedge", "icepunch", "superpower", "waterfall"], + "abilities": ["Huge Power"], + "preferredTypes": ["Ice"] }, { "role": "Bulky Setup", - "movepool": ["aquajet", "bellydrum", "return", "waterfall"] + "movepool": ["aquajet", "bellydrum", "return", "waterfall"], + "abilities": ["Huge Power"] } ] }, "sudowoodo": { - "level": 90, + "level": 92, "sets": [ { "role": "Bulky Attacker", - "movepool": ["earthquake", "explosion", "stealthrock", "stoneedge", "suckerpunch", "toxic", "woodhammer"] + "movepool": ["earthquake", "explosion", "stealthrock", "stoneedge", "suckerpunch", "toxic", "woodhammer"], + "abilities": ["Rock Head"] } ] }, @@ -973,33 +1129,38 @@ { "role": "Bulky Attacker", "movepool": ["encore", "focusblast", "hiddenpowergrass", "hydropump", "icebeam", "rest", "surf", "toxic"], + "abilities": ["Water Absorb"], "preferredTypes": ["Ice"] }, { "role": "Staller", - "movepool": ["encore", "icebeam", "protect", "surf", "toxic"] + "movepool": ["encore", "icebeam", "protect", "surf", "toxic"], + "abilities": ["Water Absorb"] } ] }, "jumpluff": { - "level": 91, + "level": 92, "sets": [ { "role": "Bulky Support", - "movepool": ["encore", "energyball", "sleeppowder", "stunspore", "toxic", "uturn"] + "movepool": ["encore", "energyball", "sleeppowder", "stunspore", "toxic", "uturn"], + "abilities": ["Chlorophyll"] }, { - "role": "Staller", - "movepool": ["bounce", "leechseed", "substitute", "toxic"] + "role": "Fast Support", + "movepool": ["hiddenpowerflying", "leechseed", "protect", "substitute", "toxic"], + "abilities": ["Chlorophyll"] } ] }, "sunflora": { - "level": 96, + "level": 98, "sets": [ { "role": "Wallbreaker", - "movepool": ["earthpower", "hiddenpowerfire", "hiddenpowerice", "hiddenpowerrock", "leafstorm", "sludgebomb"] + "movepool": ["earthpower", "hiddenpowerfire", "hiddenpowerice", "hiddenpowerrock", "leafstorm", "sludgebomb"], + "abilities": ["Chlorophyll"] } ] }, @@ -1008,20 +1169,23 @@ "sets": [ { "role": "Bulky Support", - "movepool": ["earthquake", "encore", "icebeam", "recover", "toxic", "waterfall"] + "movepool": ["earthquake", "encore", "icebeam", "recover", "toxic", "waterfall"], + "abilities": ["Water Absorb"] } ] }, "espeon": { - "level": 82, + "level": 81, "sets": [ { "role": "Fast Attacker", - "movepool": ["calmmind", "hiddenpowerfire", "morningsun", "psychic", "signalbeam", "trick"] + "movepool": ["calmmind", "hiddenpowerfighting", "morningsun", "psychic", "signalbeam", "trick"], + "abilities": ["Synchronize"] }, { "role": "Setup Sweeper", - "movepool": ["batonpass", "calmmind", "hiddenpowerfire", "morningsun", "psychic", "substitute"] + "movepool": ["batonpass", "calmmind", "hiddenpowerfighting", "morningsun", "psychic", "substitute"], + "abilities": ["Synchronize"] } ] }, @@ -1029,12 +1193,14 @@ "level": 85, "sets": [ { - "role": "Staller", - "movepool": ["healbell", "moonlight", "payback", "toxic"] + "role": "Bulky Support", + "movepool": ["curse", "healbell", "moonlight", "payback", "toxic"], + "abilities": ["Synchronize"] }, { - "role": "Bulky Support", - "movepool": ["curse", "payback", "protect", "toxic", "wish"] + "role": "Staller", + "movepool": ["payback", "protect", "toxic", "wish"], + "abilities": ["Synchronize"] } ] }, @@ -1044,11 +1210,13 @@ { "role": "Bulky Support", "movepool": ["fireblast", "icebeam", "psychic", "slackoff", "surf", "thunderwave", "toxic"], + "abilities": ["Own Tempo"], "preferredTypes": ["Psychic"] }, { "role": "Wallbreaker", "movepool": ["fireblast", "icebeam", "psychic", "slackoff", "surf", "trick", "trickroom"], + "abilities": ["Own Tempo"], "preferredTypes": ["Psychic"] } ] @@ -1058,47 +1226,53 @@ "sets": [ { "role": "Wallbreaker", - "movepool": ["hiddenpowerfighting", "hiddenpowerpsychic"] + "movepool": ["hiddenpowerfighting", "hiddenpowerpsychic"], + "abilities": ["Levitate"] } ] }, "wobbuffet": { - "level": 82, + "level": 85, "sets": [ { "role": "Bulky Support", - "movepool": ["counter", "destinybond", "encore", "mirrorcoat"] + "movepool": ["counter", "destinybond", "encore", "mirrorcoat"], + "abilities": ["Shadow Tag"] } ] }, "girafarig": { - "level": 91, + "level": 92, "sets": [ { "role": "Setup Sweeper", - "movepool": ["batonpass", "calmmind", "hiddenpowerfire", "psychic", "substitute", "thunderbolt"] + "movepool": ["batonpass", "calmmind", "hiddenpowerfighting", "psychic", "substitute", "thunderbolt"], + "abilities": ["Inner Focus"] } ] }, "forretress": { - "level": 80, + "level": 79, "sets": [ { "role": "Bulky Support", - "movepool": ["explosion", "gyroball", "rapidspin", "spikes", "stealthrock", "toxicspikes"] + "movepool": ["explosion", "payback", "rapidspin", "spikes", "stealthrock", "toxicspikes"], + "abilities": ["Sturdy"] } ] }, "dunsparce": { - "level": 92, + "level": 93, "sets": [ { "role": "Bulky Attacker", - "movepool": ["earthquake", "headbutt", "roost", "thunderwave"] + "movepool": ["earthquake", "headbutt", "roost", "thunderwave"], + "abilities": ["Serene Grace"] }, { "role": "Bulky Support", "movepool": ["bite", "bodyslam", "earthquake", "roost", "stealthrock"], + "abilities": ["Serene Grace"], "preferredTypes": ["Dark"] } ] @@ -1108,7 +1282,13 @@ "sets": [ { "role": "Bulky Support", - "movepool": ["earthquake", "explosion", "ironhead", "roar", "stealthrock", "stoneedge", "toxic"] + "movepool": ["earthquake", "explosion", "ironhead", "roar", "stealthrock", "stoneedge", "toxic"], + "abilities": ["Rock Head"] + }, + { + "role": "Staller", + "movepool": ["earthquake", "ironhead", "protect", "toxic"], + "abilities": ["Rock Head"] } ] }, @@ -1117,38 +1297,43 @@ "sets": [ { "role": "Bulky Attacker", - "movepool": ["closecombat", "crunch", "healbell", "return", "thunderwave"] + "movepool": ["closecombat", "crunch", "healbell", "return", "thunderwave"], + "abilities": ["Intimidate"] } ] }, "qwilfish": { - "level": 85, + "level": 84, "sets": [ { "role": "Fast Support", - "movepool": ["destinybond", "explosion", "spikes", "thunderwave", "toxicspikes", "waterfall"] + "movepool": ["destinybond", "explosion", "spikes", "thunderwave", "toxicspikes", "waterfall"], + "abilities": ["Poison Point", "Swift Swim"] } ] }, "scizor": { - "level": 78, + "level": 76, "sets": [ { "role": "Setup Sweeper", - "movepool": ["bugbite", "bulletpunch", "roost", "superpower", "swordsdance"] + "movepool": ["bugbite", "bulletpunch", "roost", "superpower", "swordsdance"], + "abilities": ["Technician"] }, { "role": "Fast Attacker", - "movepool": ["bulletpunch", "pursuit", "superpower", "uturn"] + "movepool": ["bulletpunch", "pursuit", "superpower", "uturn"], + "abilities": ["Technician"] } ] }, "shuckle": { - "level": 93, + "level": 92, "sets": [ { - "role": "Staller", - "movepool": ["encore", "knockoff", "rest", "stealthrock", "toxic"] + "role": "Bulky Support", + "movepool": ["encore", "knockoff", "protect", "stealthrock", "toxic"], + "abilities": ["Gluttony"] } ] }, @@ -1157,11 +1342,13 @@ "sets": [ { "role": "Wallbreaker", - "movepool": ["closecombat", "facade", "megahorn", "nightslash"] + "movepool": ["closecombat", "facade", "megahorn", "nightslash"], + "abilities": ["Guts"] }, { "role": "Fast Attacker", - "movepool": ["closecombat", "earthquake", "megahorn", "nightslash", "stoneedge", "swordsdance"] + "movepool": ["closecombat", "earthquake", "megahorn", "nightslash", "stoneedge", "swordsdance"], + "abilities": ["Guts"] } ] }, @@ -1170,34 +1357,38 @@ "sets": [ { "role": "Wallbreaker", - "movepool": ["closecombat", "crunch", "facade", "protect", "swordsdance"] + "movepool": ["closecombat", "crunch", "facade", "protect", "swordsdance"], + "abilities": ["Guts", "Quick Feet"] } ] }, "magcargo": { - "level": 94, + "level": 97, "sets": [ { "role": "Staller", - "movepool": ["hiddenpowerrock", "lavaplume", "recover", "stealthrock", "toxic"] + "movepool": ["hiddenpowerrock", "lavaplume", "recover", "stealthrock", "toxic"], + "abilities": ["Flame Body"] } ] }, "corsola": { - "level": 94, + "level": 98, "sets": [ { "role": "Bulky Support", - "movepool": ["explosion", "powergem", "recover", "stealthrock", "surf", "toxic"] + "movepool": ["explosion", "powergem", "recover", "stealthrock", "surf", "toxic"], + "abilities": ["Natural Cure"] } ] }, "octillery": { - "level": 89, + "level": 90, "sets": [ { "role": "Bulky Attacker", - "movepool": ["energyball", "fireblast", "icebeam", "surf", "thunderwave"] + "movepool": ["energyball", "fireblast", "icebeam", "surf", "thunderwave"], + "abilities": ["Sniper"] } ] }, @@ -1206,51 +1397,68 @@ "sets": [ { "role": "Bulky Support", - "movepool": ["icebeam", "iceshard", "rapidspin", "seismictoss", "toxic"] + "movepool": ["icebeam", "iceshard", "rapidspin", "seismictoss", "toxic"], + "abilities": ["Vital Spirit"] } ] }, "mantine": { - "level": 89, + "level": 90, "sets": [ { "role": "Bulky Support", - "movepool": ["hiddenpowerflying", "rest", "sleeptalk", "surf", "toxic"] + "movepool": ["rest", "sleeptalk", "surf", "toxic"], + "abilities": ["Water Absorb"] + }, + { + "role": "Staller", + "movepool": ["hiddenpowerflying", "protect", "surf", "toxic"], + "abilities": ["Water Absorb"] } ] }, "skarmory": { - "level": 77, + "level": 75, "sets": [ { "role": "Bulky Support", - "movepool": ["bravebird", "roost", "spikes", "stealthrock", "whirlwind"] + "movepool": ["bravebird", "roost", "spikes", "stealthrock", "whirlwind"], + "abilities": ["Keen Eye"] + }, + { + "role": "Staller", + "movepool": ["bravebird", "roost", "spikes", "stealthrock", "toxic"], + "abilities": ["Keen Eye"] } ] }, "houndoom": { - "level": 83, + "level": 82, "sets": [ { "role": "Wallbreaker", - "movepool": ["darkpulse", "fireblast", "hiddenpowergrass", "nastyplot", "suckerpunch"] + "movepool": ["darkpulse", "fireblast", "hiddenpowergrass", "nastyplot", "suckerpunch"], + "abilities": ["Flash Fire"] } ] }, "kingdra": { - "level": 80, + "level": 79, "sets": [ { "role": "Bulky Setup", - "movepool": ["dragondance", "outrage", "rest", "substitute", "waterfall"] + "movepool": ["dragondance", "outrage", "rest", "substitute", "waterfall"], + "abilities": ["Sniper", "Swift Swim"] }, { "role": "Setup Sweeper", - "movepool": ["dracometeor", "hydropump", "icebeam", "raindance", "waterfall"] + "movepool": ["dracometeor", "hydropump", "icebeam", "raindance", "waterfall"], + "abilities": ["Swift Swim"] }, { "role": "Bulky Support", - "movepool": ["dragondance", "outrage", "rest", "sleeptalk"] + "movepool": ["dragondance", "outrage", "rest", "sleeptalk"], + "abilities": ["Sniper", "Swift Swim"] } ] }, @@ -1260,21 +1468,24 @@ { "role": "Spinner", "movepool": ["earthquake", "iceshard", "rapidspin", "stealthrock", "stoneedge", "toxic"], + "abilities": ["Sturdy"], "preferredTypes": ["Rock"] }, { "role": "Bulky Attacker", "movepool": ["earthquake", "gunkshot", "iceshard", "stealthrock", "stoneedge"], + "abilities": ["Sturdy"], "preferredTypes": ["Rock"] } ] }, "porygon2": { - "level": 85, + "level": 86, "sets": [ { "role": "Bulky Support", - "movepool": ["discharge", "icebeam", "recover", "toxic", "triattack"] + "movepool": ["discharge", "icebeam", "recover", "toxic", "triattack"], + "abilities": ["Download", "Trace"] } ] }, @@ -1284,6 +1495,7 @@ { "role": "Wallbreaker", "movepool": ["earthquake", "hypnosis", "megahorn", "return", "suckerpunch", "thunderbolt"], + "abilities": ["Intimidate"], "preferredTypes": ["Ground"] } ] @@ -1293,7 +1505,8 @@ "sets": [ { "role": "Fast Support", - "movepool": ["explosion", "spikes", "spore", "stealthrock", "whirlwind"] + "movepool": ["explosion", "spikes", "spore", "stealthrock", "whirlwind"], + "abilities": ["Own Tempo"] } ] }, @@ -1302,82 +1515,94 @@ "sets": [ { "role": "Bulky Support", - "movepool": ["closecombat", "earthquake", "rapidspin", "stoneedge", "suckerpunch", "toxic"] + "movepool": ["closecombat", "earthquake", "rapidspin", "stoneedge", "suckerpunch", "toxic"], + "abilities": ["Intimidate"] } ] }, "miltank": { - "level": 82, + "level": 83, "sets": [ { - "role": "Bulky Support", - "movepool": ["bodyslam", "earthquake", "healbell", "milkdrink", "stealthrock", "toxic"] - }, - { - "role": "Bulky Setup", - "movepool": ["bodyslam", "curse", "earthquake", "milkdrink"] + "role": "Bulky Attacker", + "movepool": ["bodyslam", "curse", "earthquake", "healbell", "milkdrink", "stealthrock", "toxic"], + "abilities": ["Thick Fat"] } ] }, "blissey": { - "level": 80, + "level": 81, "sets": [ { "role": "Staller", - "movepool": ["aromatherapy", "seismictoss", "softboiled", "stealthrock", "thunderwave", "toxic"] + "movepool": ["aromatherapy", "seismictoss", "softboiled", "stealthrock", "thunderwave", "toxic"], + "abilities": ["Natural Cure"] }, { "role": "Bulky Support", - "movepool": ["protect", "seismictoss", "toxic", "wish"] + "movepool": ["protect", "seismictoss", "toxic", "wish"], + "abilities": ["Natural Cure"] } ] }, "raikou": { - "level": 76, + "level": 75, "sets": [ { "role": "Fast Attacker", - "movepool": ["aurasphere", "hiddenpowerice", "shadowball", "thunderbolt"] + "movepool": ["aurasphere", "hiddenpowerice", "shadowball", "thunderbolt"], + "abilities": ["Pressure"] }, { - "role": "Setup Sweeper", - "movepool": ["aurasphere", "calmmind", "hiddenpowerice", "substitute", "thunderbolt"] + "role": "Bulky Setup", + "movepool": ["aurasphere", "calmmind", "hiddenpowerice", "substitute", "thunderbolt"], + "abilities": ["Pressure"], + "preferredTypes": ["Ice"] } ] }, "entei": { - "level": 82, + "level": 80, "sets": [ { "role": "Wallbreaker", - "movepool": ["extremespeed", "flareblitz", "hiddenpowergrass", "ironhead", "stoneedge"], - "preferredTypes": ["Normal"] + "movepool": ["extremespeed", "flareblitz", "ironhead", "stoneedge"], + "abilities": ["Pressure"] + }, + { + "role": "Fast Attacker", + "movepool": ["extremespeed", "flareblitz", "hiddenpowergrass", "stoneedge"], + "abilities": ["Pressure"] } ] }, "suicune": { - "level": 80, + "level": 79, "sets": [ { "role": "Bulky Attacker", - "movepool": ["calmmind", "rest", "sleeptalk", "surf"] + "movepool": ["calmmind", "rest", "sleeptalk", "surf"], + "abilities": ["Pressure"] }, { "role": "Bulky Setup", - "movepool": ["calmmind", "hydropump", "icebeam", "rest", "substitute", "surf"] + "movepool": ["calmmind", "hydropump", "icebeam", "rest", "substitute", "surf"], + "abilities": ["Pressure"] } ] }, "tyranitar": { - "level": 79, + "level": 78, "sets": [ { "role": "Bulky Attacker", - "movepool": ["crunch", "earthquake", "fireblast", "icebeam", "pursuit", "stealthrock", "stoneedge", "superpower"] + "movepool": ["crunch", "earthquake", "fireblast", "icebeam", "pursuit", "stealthrock", "stoneedge", "superpower"], + "abilities": ["Sand Stream"] }, { "role": "Bulky Setup", - "movepool": ["crunch", "dragondance", "earthquake", "firepunch", "icepunch", "stoneedge"] + "movepool": ["crunch", "dragondance", "earthquake", "firepunch", "icepunch", "stoneedge"], + "abilities": ["Sand Stream"] } ] }, @@ -1386,11 +1611,13 @@ "sets": [ { "role": "Staller", - "movepool": ["aeroblast", "earthquake", "roost", "substitute", "toxic", "whirlwind"] + "movepool": ["aeroblast", "earthquake", "roost", "substitute", "toxic", "whirlwind"], + "abilities": ["Pressure"] }, { "role": "Bulky Setup", - "movepool": ["aeroblast", "calmmind", "earthpower", "roost"] + "movepool": ["aeroblast", "calmmind", "earthpower", "roost"], + "abilities": ["Pressure"] } ] }, @@ -1399,38 +1626,44 @@ "sets": [ { "role": "Bulky Attacker", - "movepool": ["bravebird", "earthquake", "roost", "sacredfire", "substitute", "toxic"] + "movepool": ["bravebird", "earthquake", "roost", "sacredfire", "substitute", "toxic"], + "abilities": ["Pressure"] } ] }, "celebi": { - "level": 80, + "level": 79, "sets": [ { "role": "Fast Attacker", - "movepool": ["earthpower", "energyball", "hiddenpowerfire", "leafstorm", "nastyplot", "psychic", "uturn"], + "movepool": ["earthpower", "energyball", "leafstorm", "nastyplot", "psychic", "uturn"], + "abilities": ["Natural Cure"], "preferredTypes": ["Psychic"] }, { "role": "Bulky Support", - "movepool": ["healbell", "leafstorm", "psychic", "recover", "stealthrock", "thunderwave", "uturn"] + "movepool": ["leafstorm", "psychic", "recover", "stealthrock", "thunderwave", "uturn"], + "abilities": ["Natural Cure"] }, { "role": "Setup Sweeper", - "movepool": ["batonpass", "energyball", "nastyplot", "psychic", "recover"] + "movepool": ["batonpass", "energyball", "nastyplot", "psychic", "recover"], + "abilities": ["Natural Cure"] } ] }, "sceptile": { - "level": 84, + "level": 83, "sets": [ { "role": "Fast Attacker", - "movepool": ["earthquake", "focusblast", "hiddenpowerfire", "hiddenpowerice", "leafstorm", "rockslide"] + "movepool": ["earthquake", "focusblast", "hiddenpowerfire", "hiddenpowerice", "leafstorm", "rockslide"], + "abilities": ["Overgrow"] }, { "role": "Staller", - "movepool": ["energyball", "hiddenpowerfire", "hiddenpowerice", "leechseed", "substitute"] + "movepool": ["energyball", "hiddenpowerfire", "hiddenpowerice", "leechseed", "substitute"], + "abilities": ["Overgrow"] } ] }, @@ -1439,11 +1672,13 @@ "sets": [ { "role": "Fast Attacker", - "movepool": ["agility", "fireblast", "stoneedge", "superpower", "thunderpunch", "vacuumwave"] + "movepool": ["agility", "fireblast", "stoneedge", "superpower", "thunderpunch", "vacuumwave"], + "abilities": ["Blaze"] }, { "role": "Wallbreaker", - "movepool": ["flareblitz", "stoneedge", "superpower", "swordsdance", "thunderpunch"] + "movepool": ["flareblitz", "stoneedge", "superpower", "swordsdance", "thunderpunch"], + "abilities": ["Blaze"] } ] }, @@ -1452,52 +1687,58 @@ "sets": [ { "role": "Bulky Attacker", - "movepool": ["earthquake", "icebeam", "roar", "stealthrock", "toxic", "waterfall"] + "movepool": ["earthquake", "icebeam", "roar", "stealthrock", "toxic", "waterfall"], + "abilities": ["Torrent"] }, { "role": "Staller", - "movepool": ["earthquake", "protect", "toxic", "waterfall"] + "movepool": ["earthquake", "protect", "toxic", "waterfall"], + "abilities": ["Torrent"] }, { "role": "Fast Attacker", - "movepool": ["earthquake", "icepunch", "stoneedge", "waterfall"] + "movepool": ["earthquake", "icepunch", "stoneedge", "waterfall"], + "abilities": ["Torrent"] } ] }, "mightyena": { - "level": 93, + "level": 94, "sets": [ { - "role": "Bulky Attacker", + "role": "Bulky Support", "movepool": ["crunch", "doubleedge", "firefang", "suckerpunch", "superfang", "taunt", "toxic"], - "preferredTypes": ["Fire"] + "abilities": ["Intimidate"] } ] }, "linoone": { - "level": 84, + "level": 83, "sets": [ { "role": "Setup Sweeper", - "movepool": ["bellydrum", "extremespeed", "seedbomb", "shadowclaw"] + "movepool": ["bellydrum", "extremespeed", "seedbomb", "shadowclaw"], + "abilities": ["Gluttony"] } ] }, "beautifly": { - "level": 96, + "level": 99, "sets": [ { "role": "Fast Attacker", - "movepool": ["bugbuzz", "hiddenpowerground", "psychic", "uturn"] + "movepool": ["bugbuzz", "hiddenpowerground", "psychic", "uturn"], + "abilities": ["Swarm"] } ] }, "dustox": { - "level": 99, + "level": 100, "sets": [ { "role": "Staller", - "movepool": ["bugbuzz", "roost", "toxic", "uturn", "whirlwind"] + "movepool": ["bugbuzz", "hiddenpowerground", "roost", "toxic", "uturn", "whirlwind"], + "abilities": ["Shield Dust"] } ] }, @@ -1506,11 +1747,13 @@ "sets": [ { "role": "Setup Sweeper", - "movepool": ["energyball", "hydropump", "icebeam", "raindance"] + "movepool": ["energyball", "hydropump", "icebeam", "raindance"], + "abilities": ["Swift Swim"] }, { "role": "Wallbreaker", - "movepool": ["energyball", "focusblast", "hydropump", "icebeam", "surf"] + "movepool": ["energyball", "hydropump", "icebeam", "surf"], + "abilities": ["Swift Swim"] } ] }, @@ -1519,29 +1762,38 @@ "sets": [ { "role": "Wallbreaker", - "movepool": ["darkpulse", "explosion", "hiddenpowerfire", "leafstorm", "lowkick", "suckerpunch"] + "movepool": ["darkpulse", "explosion", "hiddenpowerfire", "leafstorm", "lowkick", "suckerpunch"], + "abilities": ["Chlorophyll", "Early Bird"] }, { "role": "Setup Sweeper", - "movepool": ["lowkick", "seedbomb", "suckerpunch", "swordsdance"] + "movepool": ["lowkick", "seedbomb", "suckerpunch", "swordsdance"], + "abilities": ["Chlorophyll", "Early Bird"] } ] }, "swellow": { - "level": 83, + "level": 80, "sets": [ + { + "role": "Fast Attacker", + "movepool": ["bravebird", "facade", "protect", "uturn"], + "abilities": ["Guts"] + }, { "role": "Wallbreaker", - "movepool": ["bravebird", "facade", "protect", "quickattack", "uturn"] + "movepool": ["bravebird", "facade", "quickattack", "uturn"], + "abilities": ["Guts"] } ] }, "pelipper": { - "level": 90, + "level": 91, "sets": [ { "role": "Bulky Attacker", - "movepool": ["airslash", "hiddenpowergrass", "hydropump", "icebeam", "roost", "surf", "toxic", "uturn"] + "movepool": ["airslash", "hiddenpowergrass", "hydropump", "icebeam", "roost", "surf", "toxic", "uturn"], + "abilities": ["Keen Eye"] } ] }, @@ -1551,61 +1803,74 @@ { "role": "Fast Attacker", "movepool": ["focusblast", "healingwish", "psychic", "shadowball", "thunderbolt", "trick"], + "abilities": ["Trace"], "preferredTypes": ["Fighting"] }, { "role": "Setup Sweeper", "movepool": ["calmmind", "focusblast", "psychic", "shadowball", "substitute", "willowisp"], + "abilities": ["Trace"], "preferredTypes": ["Fighting"] } ] }, "masquerain": { - "level": 96, + "level": 98, "sets": [ { "role": "Setup Sweeper", - "movepool": ["agility", "airslash", "batonpass", "bugbuzz", "hydropump", "roost"] + "movepool": ["agility", "airslash", "batonpass", "bugbuzz", "hydropump", "roost"], + "abilities": ["Intimidate"] + }, + { + "role": "Bulky Support", + "movepool": ["airslash", "bugbuzz", "hydropump", "roost", "stunspore", "toxic"], + "abilities": ["Intimidate"] } ] }, "breloom": { - "level": 81, + "level": 80, "sets": [ { "role": "Fast Attacker", - "movepool": ["facade", "machpunch", "seedbomb", "spore", "stoneedge", "superpower", "swordsdance"] + "movepool": ["facade", "machpunch", "seedbomb", "spore", "stoneedge", "superpower", "swordsdance"], + "abilities": ["Poison Heal"] }, { "role": "Bulky Attacker", - "movepool": ["focuspunch", "spore", "stoneedge", "substitute"] + "movepool": ["focuspunch", "spore", "stoneedge", "substitute"], + "abilities": ["Poison Heal"] } ] }, "vigoroth": { - "level": 88, + "level": 89, "sets": [ { "role": "Bulky Attacker", - "movepool": ["bodyslam", "earthquake", "encore", "lowkick", "nightslash", "return", "slackoff", "suckerpunch"] + "movepool": ["bodyslam", "earthquake", "encore", "nightslash", "return", "slackoff", "suckerpunch"], + "abilities": ["Vital Spirit"] }, { "role": "Bulky Setup", - "movepool": ["bodyslam", "bulkup", "earthquake", "nightslash", "return", "slackoff"] + "movepool": ["bodyslam", "bulkup", "earthquake", "nightslash", "return", "slackoff"], + "abilities": ["Vital Spirit"] }, { "role": "Setup Sweeper", - "movepool": ["bodyslam", "bulkup", "earthquake", "lowkick", "nightslash", "return", "suckerpunch"] + "movepool": ["bodyslam", "bulkup", "earthquake", "nightslash", "return", "suckerpunch"], + "abilities": ["Vital Spirit"] } ] }, "slaking": { - "level": 84, + "level": 82, "sets": [ { "role": "Fast Attacker", - "movepool": ["doubleedge", "earthquake", "firepunch", "gigaimpact", "nightslash", "return"], - "preferredTypes": ["Ground"] + "movepool": ["doubleedge", "earthquake", "gigaimpact", "nightslash", "return"], + "abilities": ["Truant"] } ] }, @@ -1614,29 +1879,33 @@ "sets": [ { "role": "Setup Sweeper", - "movepool": ["batonpass", "substitute", "swordsdance", "xscissor"] + "movepool": ["batonpass", "substitute", "swordsdance", "xscissor"], + "abilities": ["Speed Boost"] }, { "role": "Bulky Setup", - "movepool": ["batonpass", "protect", "swordsdance", "xscissor"] + "movepool": ["batonpass", "protect", "swordsdance", "xscissor"], + "abilities": ["Speed Boost"] } ] }, "shedinja": { - "level": 92, + "level": 98, "sets": [ { "role": "Setup Sweeper", - "movepool": ["batonpass", "shadowclaw", "shadowsneak", "swordsdance", "willowisp", "xscissor"] + "movepool": ["batonpass", "shadowclaw", "shadowsneak", "swordsdance", "willowisp", "xscissor"], + "abilities": ["Wonder Guard"] } ] }, "exploud": { - "level": 89, + "level": 91, "sets": [ { "role": "Wallbreaker", - "movepool": ["crunch", "earthquake", "fireblast", "icebeam", "return", "surf"] + "movepool": ["crunch", "earthquake", "fireblast", "icebeam", "return", "surf"], + "abilities": ["Soundproof"] } ] }, @@ -1646,33 +1915,43 @@ { "role": "Wallbreaker", "movepool": ["bulletpunch", "closecombat", "facade", "fakeout", "payback", "stoneedge"], + "abilities": ["Guts"], "preferredTypes": ["Dark"] }, { "role": "Bulky Attacker", - "movepool": ["bulkup", "bulletpunch", "closecombat", "payback", "stoneedge"] + "movepool": ["bulkup", "bulletpunch", "closecombat", "payback", "stoneedge"], + "abilities": ["Thick Fat"] } ] }, "delcatty": { - "level": 99, + "level": 100, "sets": [ { "role": "Bulky Support", - "movepool": ["healbell", "protect", "return", "thunderwave", "wish"] + "movepool": ["doubleedge", "protect", "thunderwave", "toxic", "wish"], + "abilities": ["Cute Charm"] }, { "role": "Fast Support", - "movepool": ["doubleedge", "fakeout", "healbell", "suckerpunch", "thunderwave", "toxic"] + "movepool": ["doubleedge", "fakeout", "healbell", "suckerpunch", "thunderwave", "toxic"], + "abilities": ["Cute Charm"] + }, + { + "role": "Bulky Setup", + "movepool": ["batonpass", "calmmind", "icebeam", "thunderbolt"], + "abilities": ["Cute Charm"] } ] }, "sableye": { - "level": 100, + "level": 98, "sets": [ { - "role": "Bulky Support", - "movepool": ["recover", "seismictoss", "taunt", "toxic", "willowisp"] + "role": "Bulky Attacker", + "movepool": ["payback", "recover", "seismictoss", "toxic", "willowisp"], + "abilities": ["Keen Eye"] } ] }, @@ -1681,11 +1960,13 @@ "sets": [ { "role": "Bulky Setup", - "movepool": ["batonpass", "ironhead", "substitute", "suckerpunch", "swordsdance"] + "movepool": ["batonpass", "ironhead", "substitute", "suckerpunch", "swordsdance"], + "abilities": ["Intimidate"] }, { "role": "Bulky Attacker", - "movepool": ["focuspunch", "ironhead", "substitute", "suckerpunch"] + "movepool": ["focuspunch", "ironhead", "substitute", "suckerpunch"], + "abilities": ["Intimidate"] } ] }, @@ -1695,6 +1976,7 @@ { "role": "Wallbreaker", "movepool": ["aquatail", "earthquake", "headsmash", "icepunch", "rockpolish", "stealthrock"], + "abilities": ["Rock Head"], "preferredTypes": ["Ground"] } ] @@ -1704,16 +1986,18 @@ "sets": [ { "role": "Fast Attacker", - "movepool": ["bulletpunch", "highjumpkick", "icepunch", "trick", "zenheadbutt"] + "movepool": ["bulletpunch", "highjumpkick", "icepunch", "trick", "zenheadbutt"], + "abilities": ["Pure Power"] } ] }, "manectric": { - "level": 86, + "level": 83, "sets": [ { "role": "Wallbreaker", - "movepool": ["flamethrower", "hiddenpowerice", "overheat", "switcheroo", "thunderbolt"] + "movepool": ["flamethrower", "hiddenpowerice", "overheat", "switcheroo", "thunderbolt"], + "abilities": ["Static"] } ] }, @@ -1722,56 +2006,91 @@ "sets": [ { "role": "Bulky Setup", - "movepool": ["batonpass", "encore", "hiddenpowerice", "nastyplot", "thunderbolt"] + "movepool": ["batonpass", "encore", "hiddenpowerice", "nastyplot", "thunderbolt"], + "abilities": ["Plus"], + "preferredTypes": ["Ice"] + }, + { + "role": "Setup Sweeper", + "movepool": ["grassknot", "hiddenpowerice", "nastyplot", "thunderbolt"], + "abilities": ["Plus"] } ] }, "minun": { - "level": 89, + "level": 90, "sets": [ { "role": "Bulky Setup", - "movepool": ["batonpass", "encore", "hiddenpowerice", "nastyplot", "thunderbolt"] + "movepool": ["batonpass", "encore", "hiddenpowerice", "nastyplot", "thunderbolt"], + "abilities": ["Minus"], + "preferredTypes": ["Ice"] + }, + { + "role": "Setup Sweeper", + "movepool": ["grassknot", "hiddenpowerice", "nastyplot", "thunderbolt"], + "abilities": ["Minus"] } ] }, "volbeat": { - "level": 97, + "level": 99, "sets": [ { "role": "Setup Sweeper", - "movepool": ["batonpass", "bugbuzz", "substitute", "tailglow"] + "movepool": ["batonpass", "bugbuzz", "substitute", "tailglow"], + "abilities": ["Swarm"] + }, + { + "role": "Bulky Support", + "movepool": ["batonpass", "bugbuzz", "encore", "tailglow"], + "abilities": ["Swarm"] }, { "role": "Bulky Setup", - "movepool": ["batonpass", "bugbuzz", "encore", "tailglow"] + "movepool": ["batonpass", "bugbuzz", "roost", "tailglow"], + "abilities": ["Swarm"] } ] }, "illumise": { - "level": 92, + "level": 93, "sets": [ { "role": "Bulky Support", - "movepool": ["bugbuzz", "encore", "roost", "thunderbolt", "thunderwave", "toxic", "uturn"] + "movepool": ["bugbuzz", "encore", "roost", "thunderwave", "toxic", "uturn"], + "abilities": ["Tinted Lens"] } ] }, "swalot": { - "level": 91, + "level": 92, "sets": [ { - "role": "Bulky Support", - "movepool": ["earthquake", "encore", "explosion", "icebeam", "painsplit", "sludgebomb", "toxic", "yawn"] + "role": "Bulky Attacker", + "movepool": ["earthquake", "encore", "explosion", "icebeam", "painsplit", "sludgebomb", "toxic", "yawn"], + "abilities": ["Liquid Ooze"], + "preferredTypes": ["Ground"] + }, + { + "role": "Staller", + "movepool": ["earthquake", "protect", "sludgebomb", "toxic"], + "abilities": ["Liquid Ooze"] } ] }, "sharpedo": { "level": 85, "sets": [ + { + "role": "Wallbreaker", + "movepool": ["aquajet", "crunch", "earthquake", "hydropump", "icebeam"], + "abilities": ["Rough Skin"] + }, { "role": "Fast Attacker", - "movepool": ["aquajet", "crunch", "earthquake", "hiddenpowergrass", "hydropump", "icebeam", "waterfall"] + "movepool": ["aquajet", "crunch", "earthquake", "icebeam", "waterfall"], + "abilities": ["Rough Skin"] } ] }, @@ -1780,21 +2099,24 @@ "sets": [ { "role": "Fast Attacker", - "movepool": ["hiddenpowergrass", "hydropump", "icebeam", "selfdestruct", "surf", "waterspout"], + "movepool": ["hiddenpowergrass", "hydropump", "icebeam", "selfdestruct", "waterspout"], + "abilities": ["Water Veil"], "preferredTypes": ["Ice"] } ] }, "camerupt": { - "level": 88, + "level": 90, "sets": [ { "role": "Bulky Support", - "movepool": ["earthquake", "explosion", "lavaplume", "stealthrock", "toxic"] + "movepool": ["earthquake", "explosion", "lavaplume", "stealthrock", "toxic"], + "abilities": ["Solid Rock"] }, { "role": "Setup Sweeper", - "movepool": ["earthquake", "explosion", "fireblast", "rockpolish", "stoneedge"] + "movepool": ["earthquake", "explosion", "fireblast", "rockpolish", "stoneedge"], + "abilities": ["Solid Rock"] } ] }, @@ -1803,7 +2125,8 @@ "sets": [ { "role": "Bulky Support", - "movepool": ["earthquake", "explosion", "lavaplume", "rapidspin", "stealthrock", "yawn"] + "movepool": ["earthquake", "explosion", "lavaplume", "rapidspin", "stealthrock", "yawn"], + "abilities": ["White Smoke"] } ] }, @@ -1812,11 +2135,13 @@ "sets": [ { "role": "Bulky Support", - "movepool": ["focusblast", "healbell", "lightscreen", "psychic", "reflect", "thunderwave", "toxic"] + "movepool": ["focusblast", "healbell", "psychic", "thunderwave", "toxic"], + "abilities": ["Thick Fat"] }, { "role": "Bulky Attacker", - "movepool": ["calmmind", "focusblast", "psychic", "shadowball", "trick"] + "movepool": ["calmmind", "focusblast", "psychic", "shadowball", "trick"], + "abilities": ["Thick Fat"] } ] }, @@ -1825,29 +2150,34 @@ "sets": [ { "role": "Staller", - "movepool": ["bodyslam", "encore", "shadowball", "teeterdance", "toxic"] + "movepool": ["encore", "protect", "seismictoss", "shadowball", "substitute", "toxic"], + "abilities": ["Own Tempo"] }, { "role": "Bulky Support", - "movepool": ["protect", "seismictoss", "toxic", "wish"] + "movepool": ["protect", "seismictoss", "toxic", "wish"], + "abilities": ["Own Tempo"] }, { "role": "Bulky Attacker", "movepool": ["doubleedge", "fakeout", "lowkick", "shadowball", "suckerpunch"], + "abilities": ["Own Tempo"], "preferredTypes": ["Fighting"] } ] }, "flygon": { - "level": 80, + "level": 81, "sets": [ { "role": "Fast Attacker", - "movepool": ["earthquake", "fireblast", "outrage", "roost", "stoneedge", "uturn"] + "movepool": ["earthquake", "outrage", "roost", "stoneedge", "uturn"], + "abilities": ["Levitate"] }, { "role": "Bulky Attacker", - "movepool": ["dracometeor", "earthquake", "fireblast", "roost", "uturn"] + "movepool": ["dracometeor", "earthquake", "fireblast", "roost", "uturn"], + "abilities": ["Levitate"] } ] }, @@ -1856,57 +2186,70 @@ "sets": [ { "role": "Wallbreaker", - "movepool": ["darkpulse", "encore", "lowkick", "seedbomb", "spikes", "suckerpunch"] + "movepool": ["darkpulse", "encore", "lowkick", "seedbomb", "spikes", "suckerpunch"], + "abilities": ["Sand Veil"] }, { "role": "Setup Sweeper", - "movepool": ["lowkick", "seedbomb", "suckerpunch", "swordsdance"] + "movepool": ["lowkick", "seedbomb", "suckerpunch", "swordsdance"], + "abilities": ["Sand Veil"] }, { "role": "Bulky Attacker", - "movepool": ["focuspunch", "seedbomb", "substitute", "suckerpunch"] + "movepool": ["focuspunch", "seedbomb", "substitute", "suckerpunch"], + "abilities": ["Sand Veil"] } ] }, "altaria": { - "level": 86, + "level": 87, "sets": [ { "role": "Bulky Setup", - "movepool": ["dragondance", "earthquake", "outrage", "roost"] + "movepool": ["dragondance", "earthquake", "outrage", "roost"], + "abilities": ["Natural Cure"] }, { - "role": "Bulky Support", - "movepool": ["dracometeor", "earthquake", "fireblast", "haze", "healbell", "roost", "toxic"] + "role": "Bulky Attacker", + "movepool": ["dracometeor", "earthquake", "fireblast", "haze", "healbell", "roost", "toxic"], + "abilities": ["Natural Cure"] } ] }, "zangoose": { - "level": 85, + "level": 84, "sets": [ { "role": "Wallbreaker", "movepool": ["closecombat", "nightslash", "quickattack", "return", "swordsdance"], + "abilities": ["Immunity"], "preferredTypes": ["Dark"] } ] }, "seviper": { - "level": 91, + "level": 92, "sets": [ { "role": "Fast Attacker", "movepool": ["aquatail", "darkpulse", "earthquake", "flamethrower", "sludgebomb", "suckerpunch", "switcheroo"], + "abilities": ["Shed Skin"], "preferredTypes": ["Ground"] } ] }, "lunatone": { - "level": 94, + "level": 93, "sets": [ { "role": "Bulky Setup", - "movepool": ["batonpass", "calmmind", "earthpower", "psychic", "shadowball", "substitute"] + "movepool": ["batonpass", "calmmind", "earthpower", "psychic", "signalbeam", "substitute"], + "abilities": ["Levitate"] + }, + { + "role": "Bulky Support", + "movepool": ["earthpower", "explosion", "psychic", "stealthrock", "toxic"], + "abilities": ["Levitate"] } ] }, @@ -1916,16 +2259,18 @@ { "role": "Fast Attacker", "movepool": ["earthquake", "explosion", "rockpolish", "stealthrock", "stoneedge", "zenheadbutt"], + "abilities": ["Levitate"], "preferredTypes": ["Ground"] } ] }, "whiscash": { - "level": 88, + "level": 87, "sets": [ { "role": "Setup Sweeper", - "movepool": ["dragondance", "earthquake", "stoneedge", "waterfall"] + "movepool": ["dragondance", "earthquake", "stoneedge", "waterfall"], + "abilities": ["Anticipation"] } ] }, @@ -1934,7 +2279,8 @@ "sets": [ { "role": "Fast Attacker", - "movepool": ["crunch", "dragondance", "superpower", "waterfall", "xscissor"] + "movepool": ["crunch", "dragondance", "superpower", "waterfall", "xscissor"], + "abilities": ["Hyper Cutter"] } ] }, @@ -1943,55 +2289,58 @@ "sets": [ { "role": "Bulky Support", - "movepool": ["earthquake", "explosion", "icebeam", "psychic", "rapidspin", "stealthrock", "toxic"] + "movepool": ["earthquake", "explosion", "icebeam", "psychic", "rapidspin", "stealthrock", "toxic"], + "abilities": ["Levitate"] } ] }, "cradily": { - "level": 88, + "level": 87, "sets": [ { "role": "Bulky Attacker", - "movepool": ["recover", "seedbomb", "stealthrock", "stoneedge", "toxic"] - }, - { - "role": "Bulky Setup", - "movepool": ["curse", "recover", "seedbomb", "stoneedge", "swordsdance"] + "movepool": ["curse", "earthquake", "recover", "seedbomb", "stealthrock", "stoneedge", "swordsdance", "toxic"], + "abilities": ["Suction Cups"] } ] }, "armaldo": { - "level": 87, + "level": 86, "sets": [ { "role": "Spinner", - "movepool": ["earthquake", "rapidspin", "stealthrock", "stoneedge", "toxic", "xscissor"] + "movepool": ["earthquake", "rapidspin", "stealthrock", "stoneedge", "toxic", "xscissor"], + "abilities": ["Battle Armor"] }, { "role": "Bulky Attacker", - "movepool": ["aquatail", "earthquake", "rockpolish", "stealthrock", "stoneedge", "swordsdance", "xscissor"] + "movepool": ["aquatail", "earthquake", "rockpolish", "stealthrock", "stoneedge", "swordsdance", "xscissor"], + "abilities": ["Battle Armor"] } ] }, "milotic": { - "level": 82, + "level": 81, "sets": [ { "role": "Staller", - "movepool": ["haze", "icebeam", "recover", "surf", "toxic"] + "movepool": ["haze", "icebeam", "recover", "surf", "toxic"], + "abilities": ["Marvel Scale"] }, { "role": "Bulky Support", - "movepool": ["icebeam", "rest", "sleeptalk", "surf", "toxic"] + "movepool": ["icebeam", "rest", "sleeptalk", "surf", "toxic"], + "abilities": ["Marvel Scale"] } ] }, "castform": { - "level": 99, + "level": 96, "sets": [ { "role": "Bulky Attacker", - "movepool": ["fireblast", "icebeam", "return", "thunderbolt", "thunderwave"] + "movepool": ["fireblast", "icebeam", "return", "thunderbolt", "thunderwave"], + "abilities": ["Forecast"] } ] }, @@ -2000,7 +2349,8 @@ "sets": [ { "role": "Bulky Support", - "movepool": ["recover", "return", "stealthrock", "thunderwave", "toxic"] + "movepool": ["recover", "return", "stealthrock", "thunderwave", "toxic"], + "abilities": ["Color Change"] } ] }, @@ -2009,7 +2359,8 @@ "sets": [ { "role": "Wallbreaker", - "movepool": ["hiddenpowerfighting", "shadowclaw", "shadowsneak", "thunderwave", "willowisp"] + "movepool": ["hiddenpowerfighting", "shadowclaw", "shadowsneak", "thunderwave", "willowisp"], + "abilities": ["Frisk"] } ] }, @@ -2018,35 +2369,44 @@ "sets": [ { "role": "Staller", - "movepool": ["airslash", "earthquake", "leechseed", "roost", "toxic"] + "movepool": ["airslash", "earthquake", "leechseed", "roost", "toxic"], + "abilities": ["Chlorophyll"] }, { "role": "Setup Sweeper", - "movepool": ["aerialace", "dragondance", "earthquake", "leafblade", "roost"], - "preferredTypes": ["Ground"] + "movepool": ["aerialace", "dragondance", "earthquake", "leafblade"], + "abilities": ["Chlorophyll"] } ] }, "chimecho": { - "level": 92, + "level": 93, "sets": [ { "role": "Bulky Support", - "movepool": ["healbell", "hiddenpowerfighting", "psychic", "recover", "thunderwave", "toxic"] + "movepool": ["healbell", "hiddenpowerfighting", "psychic", "recover", "thunderwave", "toxic"], + "abilities": ["Levitate"] }, { "role": "Bulky Setup", - "movepool": ["calmmind", "hiddenpowerfighting", "psychic", "recover", "signalbeam"] + "movepool": ["calmmind", "hiddenpowerfighting", "psychic", "recover", "signalbeam"], + "abilities": ["Levitate"] } ] }, "absol": { - "level": 85, + "level": 84, "sets": [ { - "role": "Wallbreaker", - "movepool": ["nightslash", "psychocut", "pursuit", "suckerpunch", "superpower", "swordsdance"], + "role": "Bulky Attacker", + "movepool": ["nightslash", "psychocut", "pursuit", "suckerpunch", "superpower"], + "abilities": ["Super Luck"], "preferredTypes": ["Fighting"] + }, + { + "role": "Setup Sweeper", + "movepool": ["nightslash", "suckerpunch", "superpower", "swordsdance"], + "abilities": ["Super Luck"] } ] }, @@ -2055,7 +2415,8 @@ "sets": [ { "role": "Fast Support", - "movepool": ["earthquake", "explosion", "icebeam", "spikes", "taunt"] + "movepool": ["earthquake", "explosion", "icebeam", "spikes", "taunt"], + "abilities": ["Inner Focus"] } ] }, @@ -2064,11 +2425,13 @@ "sets": [ { "role": "Bulky Support", - "movepool": ["encore", "icebeam", "roar", "superfang", "surf", "toxic"] + "movepool": ["encore", "icebeam", "roar", "superfang", "surf", "toxic"], + "abilities": ["Thick Fat"] }, { "role": "Bulky Attacker", - "movepool": ["icebeam", "protect", "rest", "sleeptalk", "surf", "toxic"] + "movepool": ["icebeam", "protect", "rest", "sleeptalk", "surf", "toxic"], + "abilities": ["Thick Fat"] } ] }, @@ -2078,11 +2441,13 @@ { "role": "Setup Sweeper", "movepool": ["doubleedge", "hiddenpowergrass", "hydropump", "icebeam", "raindance", "surf"], + "abilities": ["Swift Swim"], "preferredTypes": ["Ice"] }, { "role": "Fast Attacker", "movepool": ["doubleedge", "hiddenpowergrass", "hydropump", "icebeam", "suckerpunch", "surf"], + "abilities": ["Swift Swim"], "preferredTypes": ["Ice"] } ] @@ -2092,20 +2457,23 @@ "sets": [ { "role": "Setup Sweeper", - "movepool": ["hiddenpowergrass", "hydropump", "icebeam", "raindance", "surf"] + "movepool": ["hiddenpowergrass", "hydropump", "icebeam", "raindance", "surf"], + "abilities": ["Swift Swim"] } ] }, "relicanth": { - "level": 87, + "level": 85, "sets": [ { "role": "Bulky Attacker", - "movepool": ["earthquake", "headsmash", "stealthrock", "toxic", "waterfall"] + "movepool": ["earthquake", "headsmash", "stealthrock", "toxic", "waterfall"], + "abilities": ["Rock Head"] }, { "role": "Wallbreaker", "movepool": ["doubleedge", "earthquake", "headsmash", "rockpolish", "waterfall"], + "abilities": ["Rock Head"], "preferredTypes": ["Ground"] } ] @@ -2115,7 +2483,8 @@ "sets": [ { "role": "Staller", - "movepool": ["charm", "protect", "surf", "toxic"] + "movepool": ["icebeam", "protect", "substitute", "surf", "toxic"], + "abilities": ["Swift Swim"] } ] }, @@ -2125,21 +2494,24 @@ { "role": "Setup Sweeper", "movepool": ["dragondance", "earthquake", "fireblast", "outrage", "roost"], + "abilities": ["Intimidate"], "preferredTypes": ["Ground"] } ] }, "metagross": { - "level": 78, + "level": 77, "sets": [ { "role": "Setup Sweeper", "movepool": ["agility", "earthquake", "explosion", "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"] } ] @@ -2149,15 +2521,18 @@ "sets": [ { "role": "Bulky Attacker", - "movepool": ["earthquake", "explosion", "rest", "stealthrock", "stoneedge", "thunderwave", "toxic"] + "movepool": ["earthquake", "explosion", "rest", "stealthrock", "stoneedge", "thunderwave", "toxic"], + "abilities": ["Clear Body"] }, { "role": "Bulky Support", - "movepool": ["curse", "earthquake", "rest", "sleeptalk", "stoneedge"] + "movepool": ["curse", "earthquake", "rest", "sleeptalk", "stoneedge"], + "abilities": ["Clear Body"] }, { "role": "Staller", - "movepool": ["earthquake", "protect", "rockslide", "toxic"] + "movepool": ["earthquake", "protect", "rockslide", "toxic"], + "abilities": ["Clear Body"] } ] }, @@ -2167,16 +2542,19 @@ { "role": "Bulky Attacker", "movepool": ["focusblast", "icebeam", "rest", "sleeptalk", "thunderbolt", "thunderwave"], + "abilities": ["Clear Body"], "preferredTypes": ["Electric"] }, { "role": "Setup Sweeper", "movepool": ["explosion", "focusblast", "icebeam", "rockpolish", "thunderbolt"], + "abilities": ["Clear Body"], "preferredTypes": ["Electric"] }, { "role": "Staller", - "movepool": ["icebeam", "protect", "thunderbolt", "toxic"] + "movepool": ["icebeam", "protect", "thunderbolt", "toxic"], + "abilities": ["Clear Body"] } ] }, @@ -2185,15 +2563,18 @@ "sets": [ { "role": "Bulky Setup", - "movepool": ["curse", "ironhead", "rest", "sleeptalk"] + "movepool": ["curse", "ironhead", "rest", "sleeptalk"], + "abilities": ["Clear Body"] }, { "role": "Bulky Support", - "movepool": ["rest", "seismictoss", "sleeptalk", "toxic"] + "movepool": ["rest", "seismictoss", "sleeptalk", "toxic"], + "abilities": ["Clear Body"] }, { "role": "Staller", - "movepool": ["protect", "seismictoss", "stealthrock", "toxic"] + "movepool": ["protect", "seismictoss", "stealthrock", "thunderwave", "toxic"], + "abilities": ["Clear Body"] } ] }, @@ -2202,7 +2583,8 @@ "sets": [ { "role": "Bulky Attacker", - "movepool": ["calmmind", "dracometeor", "psychic", "roost"] + "movepool": ["calmmind", "dracometeor", "psychic", "roost"], + "abilities": ["Levitate"] } ] }, @@ -2211,20 +2593,23 @@ "sets": [ { "role": "Bulky Attacker", - "movepool": ["calmmind", "dracometeor", "psychic", "roost"] + "movepool": ["calmmind", "dracometeor", "psychic", "roost"], + "abilities": ["Levitate"] } ] }, "kyogre": { - "level": 69, + "level": 67, "sets": [ { "role": "Fast Attacker", - "movepool": ["icebeam", "surf", "thunder", "waterspout"] + "movepool": ["icebeam", "surf", "thunder", "waterspout"], + "abilities": ["Drizzle"] }, { "role": "Bulky Support", - "movepool": ["calmmind", "icebeam", "rest", "sleeptalk", "surf", "thunder"] + "movepool": ["calmmind", "icebeam", "rest", "sleeptalk", "surf", "thunder"], + "abilities": ["Drizzle"] } ] }, @@ -2233,11 +2618,13 @@ "sets": [ { "role": "Bulky Support", - "movepool": ["earthquake", "lavaplume", "roar", "stealthrock", "stoneedge", "thunderwave"] + "movepool": ["earthquake", "lavaplume", "roar", "stealthrock", "stoneedge", "thunderwave"], + "abilities": ["Drought"] }, { "role": "Bulky Setup", - "movepool": ["earthquake", "firepunch", "rockpolish", "stoneedge", "swordsdance"] + "movepool": ["earthquake", "firepunch", "rockpolish", "stoneedge", "swordsdance"], + "abilities": ["Drought"] } ] }, @@ -2246,16 +2633,19 @@ "sets": [ { "role": "Wallbreaker", - "movepool": ["dracometeor", "earthquake", "extremespeed", "fireblast", "outrage"] + "movepool": ["dracometeor", "earthquake", "extremespeed", "fireblast", "outrage"], + "abilities": ["Air Lock"] }, { "role": "Setup Sweeper", "movepool": ["dragondance", "earthquake", "extremespeed", "outrage", "overheat"], + "abilities": ["Air Lock"], "preferredTypes": ["Ground"] }, { "role": "Fast Attacker", - "movepool": ["dragonclaw", "earthquake", "extremespeed", "swordsdance"] + "movepool": ["dragonclaw", "earthquake", "extremespeed", "swordsdance"], + "abilities": ["Air Lock"] } ] }, @@ -2264,41 +2654,54 @@ "sets": [ { "role": "Bulky Support", - "movepool": ["bodyslam", "firepunch", "healingwish", "ironhead", "protect", "stealthrock", "toxic", "uturn", "wish"] + "movepool": ["bodyslam", "firepunch", "healingwish", "ironhead", "protect", "stealthrock", "toxic", "uturn", "wish"], + "abilities": ["Serene Grace"] }, { "role": "Bulky Setup", "movepool": ["calmmind", "hiddenpowerfire", "psychic", "substitute", "thunderbolt", "wish"], + "abilities": ["Serene Grace"], "preferredTypes": ["Electric"] } ] }, "deoxys": { - "level": 75, + "level": 74, "sets": [ { "role": "Wallbreaker", - "movepool": ["extremespeed", "hiddenpowerfire", "icebeam", "psychoboost", "shadowball", "stealthrock", "superpower"], - "preferredTypes": ["Fighting"] + "movepool": ["extremespeed", "psychoboost", "shadowball", "superpower"], + "abilities": ["Pressure"] + }, + { + "role": "Fast Support", + "movepool": ["icebeam", "psychoboost", "shadowball", "superpower"], + "abilities": ["Pressure"] } ] }, "deoxysattack": { - "level": 74, + "level": 72, "sets": [ { "role": "Wallbreaker", - "movepool": ["extremespeed", "hiddenpowerfire", "icebeam", "psychoboost", "shadowball", "superpower"], - "preferredTypes": ["Fighting"] + "movepool": ["extremespeed", "psychoboost", "shadowball", "superpower"], + "abilities": ["Pressure"] + }, + { + "role": "Fast Support", + "movepool": ["icebeam", "psychoboost", "shadowball", "superpower"], + "abilities": ["Pressure"] } ] }, "deoxysdefense": { - "level": 77, + "level": 81, "sets": [ { "role": "Bulky Support", - "movepool": ["recover", "seismictoss", "spikes", "stealthrock", "taunt", "toxic"] + "movepool": ["recover", "seismictoss", "spikes", "stealthrock", "taunt", "toxic"], + "abilities": ["Pressure"] } ] }, @@ -2307,33 +2710,38 @@ "sets": [ { "role": "Fast Support", - "movepool": ["lightscreen", "psychoboost", "reflect", "spikes", "stealthrock", "superpower", "taunt"] + "movepool": ["psychoboost", "spikes", "stealthrock", "superpower", "taunt"], + "abilities": ["Pressure"] } ] }, "torterra": { - "level": 88, + "level": 86, "sets": [ { "role": "Bulky Attacker", - "movepool": ["earthquake", "stealthrock", "stoneedge", "synthesis", "woodhammer"] + "movepool": ["earthquake", "stealthrock", "stoneedge", "synthesis", "woodhammer"], + "abilities": ["Overgrow"] }, { "role": "Bulky Setup", - "movepool": ["earthquake", "rockpolish", "stoneedge", "woodhammer"] + "movepool": ["earthquake", "rockpolish", "stoneedge", "woodhammer"], + "abilities": ["Overgrow"] } ] }, "infernape": { - "level": 78, + "level": 76, "sets": [ { "role": "Wallbreaker", - "movepool": ["closecombat", "grassknot", "machpunch", "overheat", "stealthrock"] + "movepool": ["closecombat", "grassknot", "machpunch", "overheat", "stealthrock"], + "abilities": ["Blaze"] }, { "role": "Fast Attacker", - "movepool": ["closecombat", "flareblitz", "machpunch", "stoneedge", "swordsdance", "uturn"] + "movepool": ["closecombat", "flareblitz", "machpunch", "stoneedge", "swordsdance", "uturn"], + "abilities": ["Blaze"] } ] }, @@ -2342,29 +2750,34 @@ "sets": [ { "role": "Staller", - "movepool": ["icebeam", "protect", "stealthrock", "surf", "toxic"] + "movepool": ["icebeam", "protect", "stealthrock", "surf", "toxic"], + "abilities": ["Torrent"] }, { "role": "Bulky Support", - "movepool": ["icebeam", "roar", "stealthrock", "surf", "toxic"] + "movepool": ["icebeam", "roar", "stealthrock", "surf", "toxic"], + "abilities": ["Torrent"] }, { "role": "Setup Sweeper", - "movepool": ["agility", "grassknot", "hydropump", "icebeam"] + "movepool": ["agility", "grassknot", "hydropump", "icebeam"], + "abilities": ["Torrent"] } ] }, "staraptor": { - "level": 82, + "level": 80, "sets": [ { "role": "Fast Attacker", "movepool": ["bravebird", "closecombat", "doubleedge", "pursuit", "quickattack", "return", "uturn"], + "abilities": ["Intimidate"], "preferredTypes": ["Fighting"] }, { "role": "Bulky Attacker", "movepool": ["bravebird", "closecombat", "return", "roost", "uturn"], + "abilities": ["Intimidate"], "preferredTypes": ["Fighting"] } ] @@ -2374,7 +2787,13 @@ "sets": [ { "role": "Setup Sweeper", - "movepool": ["curse", "quickattack", "return", "waterfall"] + "movepool": ["curse", "quickattack", "return", "waterfall"], + "abilities": ["Simple"] + }, + { + "role": "Bulky Setup", + "movepool": ["curse", "quickattack", "return", "waterfall"], + "abilities": ["Simple"] } ] }, @@ -2383,7 +2802,8 @@ "sets": [ { "role": "Setup Sweeper", - "movepool": ["brickbreak", "nightslash", "return", "swordsdance", "xscissor"] + "movepool": ["brickbreak", "nightslash", "return", "swordsdance", "xscissor"], + "abilities": ["Swarm"] } ] }, @@ -2393,93 +2813,105 @@ { "role": "Bulky Attacker", "movepool": ["crunch", "icefang", "roar", "superpower", "thunderbolt", "toxic"], + "abilities": ["Intimidate"], "preferredTypes": ["Fighting"] }, { "role": "Staller", - "movepool": ["protect", "superpower", "thunderbolt", "toxic"] + "movepool": ["protect", "superpower", "thunderbolt", "toxic"], + "abilities": ["Intimidate"] } ] }, "roserade": { - "level": 80, + "level": 81, "sets": [ { "role": "Fast Support", - "movepool": ["energyball", "hiddenpowerfire", "leafstorm", "sleeppowder", "sludgebomb", "spikes", "synthesis", "toxicspikes"] + "movepool": ["energyball", "hiddenpowerground", "leafstorm", "sleeppowder", "sludgebomb", "spikes", "synthesis", "toxicspikes"], + "abilities": ["Natural Cure"] } ] }, "rampardos": { - "level": 91, + "level": 87, "sets": [ { "role": "Setup Sweeper", "movepool": ["earthquake", "firepunch", "rockpolish", "stoneedge", "zenheadbutt"], + "abilities": ["Mold Breaker"], "preferredTypes": ["Ground"] }, { "role": "Fast Attacker", - "movepool": ["earthquake", "firepunch", "headsmash", "superpower", "zenheadbutt"] + "movepool": ["earthquake", "headsmash", "stoneedge", "superpower"], + "abilities": ["Mold Breaker"] } ] }, "bastiodon": { - "level": 91, + "level": 92, "sets": [ { "role": "Bulky Support", - "movepool": ["metalburst", "roar", "rockslide", "stealthrock", "toxic"] + "movepool": ["metalburst", "roar", "rockslide", "stealthrock", "toxic"], + "abilities": ["Sturdy"] }, { "role": "Staller", - "movepool": ["metalburst", "protect", "roar", "rockslide", "stealthrock", "toxic"] + "movepool": ["metalburst", "protect", "roar", "rockslide", "stealthrock", "toxic"], + "abilities": ["Sturdy"] } ] }, "wormadam": { - "level": 98, + "level": 100, "sets": [ { "role": "Wallbreaker", - "movepool": ["hiddenpowerground", "hiddenpowerrock", "leafstorm", "psychic", "signalbeam"] + "movepool": ["hiddenpowerground", "hiddenpowerrock", "leafstorm", "psychic", "signalbeam"], + "abilities": ["Anticipation"] } ] }, "wormadamsandy": { - "level": 98, + "level": 99, "sets": [ { "role": "Staller", - "movepool": ["earthquake", "rest", "sleeptalk", "toxic"] + "movepool": ["earthquake", "rest", "sleeptalk", "toxic"], + "abilities": ["Anticipation"] } ] }, "wormadamtrash": { - "level": 87, + "level": 85, "sets": [ { "role": "Staller", - "movepool": ["flashcannon", "protect", "stealthrock", "toxic"] + "movepool": ["flashcannon", "protect", "stealthrock", "suckerpunch", "toxic"], + "abilities": ["Anticipation"] } ] }, "mothim": { - "level": 95, + "level": 97, "sets": [ { "role": "Fast Attacker", "movepool": ["airslash", "bugbuzz", "hiddenpowerfighting", "hiddenpowerground", "shadowball", "uturn"], + "abilities": ["Swarm"], "preferredTypes": ["Bug"] } ] }, "vespiquen": { - "level": 99, + "level": 100, "sets": [ { "role": "Staller", - "movepool": ["attackorder", "defendorder", "roost", "substitute", "toxic", "uturn"] + "movepool": ["hiddenpowerflying", "roost", "toxic", "uturn"], + "abilities": ["Pressure"] } ] }, @@ -2488,42 +2920,39 @@ "sets": [ { "role": "Bulky Support", - "movepool": ["discharge", "superfang", "thunderbolt", "thunderwave", "toxic", "uturn"] + "movepool": ["discharge", "superfang", "thunderbolt", "thunderwave", "toxic", "uturn"], + "abilities": ["Pickup", "Run Away"] }, { "role": "Staller", - "movepool": ["protect", "thunderbolt", "toxic", "uturn"] + "movepool": ["protect", "thunderbolt", "toxic", "uturn"], + "abilities": ["Pickup", "Run Away"] } ] }, "floatzel": { - "level": 85, + "level": 83, "sets": [ { "role": "Fast Attacker", - "movepool": ["aquajet", "crunch", "icepunch", "return", "waterfall"] + "movepool": ["aquajet", "crunch", "icepunch", "return", "waterfall"], + "abilities": ["Swift Swim"], + "preferredTypes": ["Ice"] }, { "role": "Setup Sweeper", - "movepool": ["aquajet", "batonpass", "bulkup", "icepunch", "return", "substitute", "waterfall"] + "movepool": ["bulkup", "icepunch", "return", "substitute", "waterfall"], + "abilities": ["Swift Swim"] } ] }, "cherrim": { - "level": 94, - "sets": [ - { - "role": "Bulky Support", - "movepool": ["aromatherapy", "energyball", "hiddenpowerfire", "hiddenpowerground", "hiddenpowerrock", "synthesis", "toxic"] - } - ] - }, - "cherrimsunshine": { - "level": 94, + "level": 96, "sets": [ { - "role": "Setup Sweeper", - "movepool": ["hiddenpowerice", "solarbeam", "sunnyday", "weatherball"] + "role": "Staller", + "movepool": ["aromatherapy", "energyball", "hiddenpowerground", "leechseed", "synthesis", "toxic"], + "abilities": ["Flower Gift"] } ] }, @@ -2532,38 +2961,43 @@ "sets": [ { "role": "Bulky Support", - "movepool": ["earthquake", "icebeam", "recover", "surf", "toxic"] + "movepool": ["earthquake", "icebeam", "recover", "surf", "toxic"], + "abilities": ["Sticky Hold"] } ] }, "ambipom": { - "level": 83, + "level": 81, "sets": [ { "role": "Fast Attacker", - "movepool": ["fakeout", "lowkick", "payback", "pursuit", "return", "uturn"] + "movepool": ["fakeout", "lowkick", "payback", "pursuit", "return", "uturn"], + "abilities": ["Technician"] } ] }, "drifblim": { - "level": 85, + "level": 84, "sets": [ { "role": "Setup Sweeper", - "movepool": ["batonpass", "calmmind", "hiddenpowerfighting", "rest", "shadowball", "substitute", "thunderbolt"] + "movepool": ["batonpass", "calmmind", "hiddenpowerfighting", "rest", "shadowball", "substitute", "thunderbolt"], + "abilities": ["Unburden"] } ] }, "lopunny": { - "level": 88, + "level": 87, "sets": [ { "role": "Fast Support", - "movepool": ["batonpass", "encore", "return", "substitute", "thunderwave", "toxic"] + "movepool": ["batonpass", "encore", "return", "substitute", "thunderwave", "toxic"], + "abilities": ["Cute Charm"] }, { "role": "Wallbreaker", - "movepool": ["healingwish", "icepunch", "return", "skyuppercut", "switcheroo"] + "movepool": ["healingwish", "icepunch", "return", "skyuppercut", "switcheroo"], + "abilities": ["Cute Charm"] } ] }, @@ -2572,11 +3006,13 @@ "sets": [ { "role": "Bulky Attacker", - "movepool": ["destinybond", "hiddenpowerfighting", "painsplit", "shadowball", "substitute", "taunt", "willowisp"] + "movepool": ["destinybond", "hiddenpowerfighting", "painsplit", "shadowball", "substitute", "taunt", "willowisp"], + "abilities": ["Levitate"] }, { "role": "Wallbreaker", - "movepool": ["hiddenpowerfighting", "nastyplot", "shadowball", "thunderbolt", "trick"] + "movepool": ["hiddenpowerfighting", "nastyplot", "shadowball", "thunderbolt", "trick"], + "abilities": ["Levitate"] } ] }, @@ -2585,25 +3021,28 @@ "sets": [ { "role": "Wallbreaker", - "movepool": ["bravebird", "heatwave", "pursuit", "roost", "suckerpunch", "superpower"] + "movepool": ["bravebird", "heatwave", "pursuit", "roost", "suckerpunch", "superpower"], + "abilities": ["Insomnia"] } ] }, "purugly": { - "level": 89, + "level": 88, "sets": [ { "role": "Fast Attacker", - "movepool": ["fakeout", "return", "shadowclaw", "taunt", "uturn"] + "movepool": ["fakeout", "irontail", "return", "shadowclaw", "uturn"], + "abilities": ["Thick Fat"] } ] }, "skuntank": { - "level": 86, + "level": 84, "sets": [ { "role": "Bulky Attacker", - "movepool": ["crunch", "explosion", "fireblast", "poisonjab", "pursuit", "suckerpunch", "taunt"] + "movepool": ["crunch", "explosion", "fireblast", "poisonjab", "pursuit", "suckerpunch", "taunt"], + "abilities": ["Aftermath"] } ] }, @@ -2612,11 +3051,13 @@ "sets": [ { "role": "Bulky Support", - "movepool": ["earthquake", "explosion", "ironhead", "lightscreen", "payback", "reflect", "stealthrock", "toxic"] + "movepool": ["earthquake", "explosion", "ironhead", "payback", "stealthrock", "toxic"], + "abilities": ["Levitate"] }, { "role": "Staller", - "movepool": ["earthquake", "protect", "psychic", "toxic"] + "movepool": ["earthquake", "protect", "psychic", "toxic"], + "abilities": ["Levitate"] } ] }, @@ -2625,11 +3066,13 @@ "sets": [ { "role": "Setup Sweeper", - "movepool": ["chatter", "encore", "heatwave", "hiddenpowergrass", "hypervoice", "nastyplot"] + "movepool": ["chatter", "encore", "heatwave", "hiddenpowergrass", "hypervoice", "nastyplot"], + "abilities": ["Tangled Feet"] }, { "role": "Fast Attacker", - "movepool": ["chatter", "heatwave", "hiddenpowergrass", "hypervoice", "uturn"] + "movepool": ["chatter", "heatwave", "hiddenpowergrass", "hypervoice", "uturn"], + "abilities": ["Tangled Feet"] } ] }, @@ -2638,11 +3081,13 @@ "sets": [ { "role": "Bulky Setup", - "movepool": ["calmmind", "darkpulse", "rest", "sleeptalk"] + "movepool": ["calmmind", "darkpulse", "rest", "sleeptalk"], + "abilities": ["Pressure"] }, { "role": "Bulky Attacker", - "movepool": ["darkpulse", "painsplit", "pursuit", "shadowsneak", "suckerpunch", "willowisp"] + "movepool": ["darkpulse", "painsplit", "pursuit", "shadowsneak", "suckerpunch", "willowisp"], + "abilities": ["Pressure"] } ] }, @@ -2651,24 +3096,28 @@ "sets": [ { "role": "Fast Support", - "movepool": ["earthquake", "fireblast", "outrage", "stealthrock", "stoneedge"] + "movepool": ["earthquake", "fireblast", "outrage", "stealthrock", "stoneedge"], + "abilities": ["Sand Veil"] }, { "role": "Fast Attacker", - "movepool": ["earthquake", "firefang", "outrage", "stoneedge", "swordsdance"] + "movepool": ["earthquake", "firefang", "outrage", "stoneedge", "swordsdance"], + "abilities": ["Sand Veil"] }, { "role": "Bulky Setup", - "movepool": ["dragonclaw", "earthquake", "substitute", "swordsdance"] + "movepool": ["dragonclaw", "earthquake", "substitute", "swordsdance"], + "abilities": ["Sand Veil"] } ] }, "lucario": { - "level": 80, + "level": 79, "sets": [ { "role": "Fast Attacker", - "movepool": ["closecombat", "crunch", "extremespeed", "icepunch", "swordsdance"], + "movepool": ["closecombat", "crunch", "extremespeed", "stoneedge", "swordsdance"], + "abilities": ["Inner Focus"], "preferredTypes": ["Normal"] } ] @@ -2678,21 +3127,24 @@ "sets": [ { "role": "Bulky Support", - "movepool": ["earthquake", "roar", "slackoff", "stealthrock", "stoneedge", "toxic"] + "movepool": ["earthquake", "roar", "slackoff", "stealthrock", "stoneedge", "toxic"], + "abilities": ["Sand Stream"] } ] }, "drapion": { - "level": 84, + "level": 83, "sets": [ { "role": "Fast Attacker", "movepool": ["aquatail", "crunch", "earthquake", "poisonjab", "pursuit", "swordsdance"], + "abilities": ["Battle Armor"], "preferredTypes": ["Ground"] }, { "role": "Bulky Support", - "movepool": ["crunch", "earthquake", "poisonjab", "taunt", "toxicspikes", "whirlwind"] + "movepool": ["crunch", "earthquake", "poisonjab", "taunt", "toxicspikes", "whirlwind"], + "abilities": ["Battle Armor"] } ] }, @@ -2701,20 +3153,23 @@ "sets": [ { "role": "Setup Sweeper", - "movepool": ["crosschop", "icepunch", "poisonjab", "substitute", "suckerpunch", "swordsdance"] + "movepool": ["crosschop", "earthquake", "icepunch", "poisonjab", "substitute", "suckerpunch", "swordsdance"], + "abilities": ["Dry Skin"] } ] }, "carnivine": { - "level": 96, + "level": 97, "sets": [ { "role": "Bulky Support", - "movepool": ["knockoff", "powerwhip", "sleeppowder", "synthesis"] + "movepool": ["knockoff", "powerwhip", "sleeppowder", "synthesis"], + "abilities": ["Levitate"] }, { "role": "Bulky Setup", - "movepool": ["powerwhip", "return", "sleeppowder", "swordsdance", "synthesis"] + "movepool": ["powerwhip", "return", "sleeppowder", "swordsdance", "synthesis"], + "abilities": ["Levitate"] } ] }, @@ -2723,7 +3178,8 @@ "sets": [ { "role": "Fast Attacker", - "movepool": ["hiddenpowerelectric", "hiddenpowergrass", "icebeam", "raindance", "surf", "uturn"] + "movepool": ["hiddenpowerelectric", "hiddenpowergrass", "icebeam", "raindance", "surf", "uturn"], + "abilities": ["Swift Swim"] } ] }, @@ -2732,17 +3188,18 @@ "sets": [ { "role": "Bulky Attacker", - "movepool": ["blizzard", "earthquake", "focusblast", "hiddenpowerfire", "iceshard", "woodhammer"], - "preferredTypes": ["Grass"] + "movepool": ["blizzard", "earthquake", "iceshard", "woodhammer"], + "abilities": ["Snow Warning"] } ] }, "weavile": { - "level": 78, + "level": 77, "sets": [ { "role": "Fast Attacker", - "movepool": ["icepunch", "iceshard", "lowkick", "nightslash", "pursuit", "swordsdance"] + "movepool": ["icepunch", "iceshard", "lowkick", "nightslash", "pursuit", "swordsdance"], + "abilities": ["Pressure"] } ] }, @@ -2751,47 +3208,54 @@ "sets": [ { "role": "Fast Attacker", - "movepool": ["explosion", "flashcannon", "hiddenpowerfire", "hiddenpowerice", "thunderbolt"] + "movepool": ["explosion", "flashcannon", "hiddenpowerfire", "hiddenpowerground", "hiddenpowerice", "thunderbolt"], + "abilities": ["Magnet Pull"] }, { - "role": "Bulky Support", - "movepool": ["hiddenpowerfighting", "hiddenpowerfire", "magnetrise", "substitute", "thunderbolt"] + "role": "Staller", + "movepool": ["hiddenpowerice", "protect", "thunderbolt", "toxic"], + "abilities": ["Magnet Pull"] } ] }, "lickilicky": { - "level": 88, + "level": 87, "sets": [ { "role": "Bulky Support", - "movepool": ["bodyslam", "healbell", "protect", "toxic", "wish"] + "movepool": ["bodyslam", "healbell", "protect", "toxic", "wish"], + "abilities": ["Own Tempo"] }, { "role": "Bulky Setup", "movepool": ["bodyslam", "earthquake", "explosion", "powerwhip", "return", "swordsdance"], + "abilities": ["Own Tempo"], "preferredTypes": ["Ground"] } ] }, "rhyperior": { - "level": 82, + "level": 79, "sets": [ { "role": "Bulky Attacker", - "movepool": ["earthquake", "icepunch", "megahorn", "rockpolish", "stealthrock", "stoneedge"] + "movepool": ["earthquake", "icepunch", "megahorn", "rockpolish", "stealthrock", "stoneedge"], + "abilities": ["Solid Rock"] } ] }, "tangrowth": { - "level": 86, + "level": 88, "sets": [ { "role": "Bulky Attacker", - "movepool": ["earthquake", "hiddenpowerfire", "leafstorm", "powerwhip", "rockslide", "sleeppowder", "synthesis"] + "movepool": ["earthquake", "hiddenpowerfire", "leafstorm", "morningsun", "powerwhip", "rockslide", "sleeppowder"], + "abilities": ["Chlorophyll"] }, { "role": "Bulky Setup", - "movepool": ["earthquake", "powerwhip", "rockslide", "swordsdance"] + "movepool": ["earthquake", "powerwhip", "rockslide", "swordsdance"], + "abilities": ["Chlorophyll"] } ] }, @@ -2801,6 +3265,7 @@ { "role": "Fast Attacker", "movepool": ["crosschop", "earthquake", "flamethrower", "hiddenpowergrass", "icepunch", "thunderbolt"], + "abilities": ["Motor Drive"], "preferredTypes": ["Ice"] } ] @@ -2810,7 +3275,8 @@ "sets": [ { "role": "Fast Attacker", - "movepool": ["earthquake", "fireblast", "focusblast", "hiddenpowergrass", "hiddenpowerice", "substitute", "thunderbolt"], + "movepool": ["earthquake", "fireblast", "focusblast", "hiddenpowerice", "taunt", "thunderbolt"], + "abilities": ["Flame Body"], "preferredTypes": ["Electric"] } ] @@ -2820,15 +3286,18 @@ "sets": [ { "role": "Bulky Setup", - "movepool": ["airslash", "aurasphere", "batonpass", "nastyplot", "roost", "thunderwave"] + "movepool": ["airslash", "aurasphere", "batonpass", "nastyplot", "roost", "thunderwave"], + "abilities": ["Serene Grace"] }, { "role": "Bulky Attacker", - "movepool": ["airslash", "healbell", "roost", "thunderwave"] + "movepool": ["airslash", "healbell", "roost", "thunderwave"], + "abilities": ["Serene Grace"] }, { "role": "Fast Attacker", - "movepool": ["airslash", "aurasphere", "fireblast", "trick"] + "movepool": ["airslash", "aurasphere", "fireblast", "trick"], + "abilities": ["Serene Grace"] } ] }, @@ -2837,11 +3306,13 @@ "sets": [ { "role": "Fast Attacker", - "movepool": ["airslash", "bugbuzz", "hiddenpowerfire", "hiddenpowerground", "protect"] + "movepool": ["airslash", "bugbuzz", "hiddenpowerfire", "hiddenpowerground", "protect"], + "abilities": ["Speed Boost"] }, { "role": "Wallbreaker", - "movepool": ["airslash", "bugbuzz", "hiddenpowerfire", "hiddenpowerground", "uturn"] + "movepool": ["airslash", "bugbuzz", "hiddenpowerfire", "hiddenpowerground", "uturn"], + "abilities": ["Tinted Lens"] } ] }, @@ -2850,25 +3321,29 @@ "sets": [ { "role": "Bulky Support", - "movepool": ["healbell", "leafblade", "synthesis", "toxic"] + "movepool": ["healbell", "leafblade", "synthesis", "toxic"], + "abilities": ["Leaf Guard"] }, { "role": "Setup Sweeper", "movepool": ["batonpass", "doubleedge", "leafblade", "substitute", "swordsdance", "synthesis", "xscissor"], + "abilities": ["Leaf Guard"], "preferredTypes": ["Normal"] } ] }, "glaceon": { - "level": 88, + "level": 87, "sets": [ { "role": "Bulky Support", - "movepool": ["healbell", "hiddenpowerground", "icebeam", "protect", "wish"] + "movepool": ["healbell", "hiddenpowerground", "icebeam", "protect", "wish"], + "abilities": ["Snow Cloak"] }, { "role": "Staller", - "movepool": ["icebeam", "protect", "toxic", "wish"] + "movepool": ["icebeam", "protect", "toxic", "wish"], + "abilities": ["Snow Cloak"] } ] }, @@ -2876,21 +3351,24 @@ "level": 81, "sets": [ { - "role": "Bulky Support", - "movepool": ["earthquake", "roost", "stealthrock", "stoneedge", "taunt", "toxic", "uturn"] + "role": "Staller", + "movepool": ["earthquake", "roost", "stealthrock", "stoneedge", "taunt", "toxic", "uturn"], + "abilities": ["Hyper Cutter"] }, { "role": "Bulky Setup", - "movepool": ["earthquake", "roost", "stoneedge", "swordsdance"] + "movepool": ["earthquake", "roost", "stoneedge", "swordsdance"], + "abilities": ["Hyper Cutter"] } ] }, "mamoswine": { - "level": 80, + "level": 79, "sets": [ { "role": "Wallbreaker", - "movepool": ["earthquake", "iceshard", "stealthrock", "stoneedge", "superpower"] + "movepool": ["earthquake", "iceshard", "stealthrock", "stoneedge", "superpower"], + "abilities": ["Snow Cloak"] } ] }, @@ -2899,7 +3377,8 @@ "sets": [ { "role": "Fast Attacker", - "movepool": ["darkpulse", "hiddenpowerfighting", "icebeam", "nastyplot", "thunderbolt", "triattack", "trick"] + "movepool": ["darkpulse", "hiddenpowerfighting", "icebeam", "nastyplot", "thunderbolt", "triattack", "trick"], + "abilities": ["Adaptability", "Download"] } ] }, @@ -2908,29 +3387,39 @@ "sets": [ { "role": "Fast Attacker", - "movepool": ["closecombat", "nightslash", "shadowsneak", "swordsdance", "trick", "zenheadbutt"] + "movepool": ["closecombat", "nightslash", "shadowsneak", "swordsdance", "trick", "zenheadbutt"], + "abilities": ["Steadfast"] } ] }, "probopass": { - "level": 88, + "level": 89, "sets": [ { "role": "Bulky Attacker", - "movepool": ["earthpower", "explosion", "powergem", "stealthrock", "thunderwave", "toxic"] + "movepool": ["earthpower", "explosion", "powergem", "stealthrock", "thunderwave", "toxic"], + "abilities": ["Magnet Pull"] } ] }, "dusknoir": { - "level": 84, + "level": 85, "sets": [ { "role": "Bulky Support", - "movepool": ["earthquake", "icepunch", "painsplit", "shadowsneak", "trick", "willowisp"] + "movepool": ["earthquake", "icepunch", "painsplit", "shadowsneak", "toxic", "trick", "willowisp"], + "abilities": ["Pressure"], + "preferredTypes": ["Ground"] + }, + { + "role": "Staller", + "movepool": ["earthquake", "protect", "shadowsneak", "toxic"], + "abilities": ["Pressure"] }, { "role": "Bulky Attacker", - "movepool": ["focuspunch", "painsplit", "shadowsneak", "substitute"] + "movepool": ["focuspunch", "painsplit", "shadowsneak", "substitute"], + "abilities": ["Pressure"] } ] }, @@ -2939,7 +3428,8 @@ "sets": [ { "role": "Fast Support", - "movepool": ["destinybond", "icebeam", "shadowball", "spikes", "taunt", "thunderwave"] + "movepool": ["destinybond", "icebeam", "shadowball", "spikes", "taunt", "thunderwave"], + "abilities": ["Snow Cloak"] } ] }, @@ -2948,7 +3438,8 @@ "sets": [ { "role": "Fast Attacker", - "movepool": ["hiddenpowerfighting", "hiddenpowerice", "shadowball", "thunderbolt", "trick"] + "movepool": ["hiddenpowerfighting", "hiddenpowerice", "shadowball", "thunderbolt", "trick"], + "abilities": ["Levitate"] } ] }, @@ -2958,31 +3449,45 @@ { "role": "Bulky Attacker", "movepool": ["overheat", "painsplit", "shadowball", "thunderbolt", "trick", "willowisp"], + "abilities": ["Levitate"], "preferredTypes": ["Fire"] + }, + { + "role": "Bulky Support", + "movepool": ["rest", "shadowball", "sleeptalk", "thunderbolt"], + "abilities": ["Levitate"] } ] }, "rotomwash": { - "level": 80, + "level": 79, "sets": [ { "role": "Bulky Attacker", "movepool": ["hydropump", "painsplit", "shadowball", "thunderbolt", "trick", "willowisp"], + "abilities": ["Levitate"], "preferredTypes": ["Water"] + }, + { + "role": "Bulky Support", + "movepool": ["rest", "shadowball", "sleeptalk", "thunderbolt"], + "abilities": ["Levitate"] } ] }, "rotomfrost": { - "level": 80, + "level": 79, "sets": [ { "role": "Bulky Attacker", "movepool": ["blizzard", "painsplit", "shadowball", "thunderbolt", "trick", "willowisp"], + "abilities": ["Levitate"], "preferredTypes": ["Ice"] }, { "role": "Bulky Support", - "movepool": ["rest", "shadowball", "sleeptalk", "thunderbolt"] + "movepool": ["rest", "shadowball", "sleeptalk", "thunderbolt"], + "abilities": ["Levitate"] } ] }, @@ -2991,11 +3496,13 @@ "sets": [ { "role": "Bulky Attacker", - "movepool": ["painsplit", "shadowball", "thunderbolt", "willowisp"] + "movepool": ["painsplit", "shadowball", "thunderbolt", "willowisp"], + "abilities": ["Levitate"] }, { "role": "Bulky Support", - "movepool": ["rest", "shadowball", "sleeptalk", "thunderbolt"] + "movepool": ["rest", "shadowball", "sleeptalk", "thunderbolt"], + "abilities": ["Levitate"] } ] }, @@ -3005,16 +3512,23 @@ { "role": "Bulky Attacker", "movepool": ["leafstorm", "painsplit", "shadowball", "thunderbolt", "trick", "willowisp"], + "abilities": ["Levitate"], "preferredTypes": ["Grass"] + }, + { + "role": "Bulky Support", + "movepool": ["rest", "shadowball", "sleeptalk", "thunderbolt"], + "abilities": ["Levitate"] } ] }, "uxie": { - "level": 79, + "level": 77, "sets": [ { "role": "Bulky Support", - "movepool": ["healbell", "lightscreen", "psychic", "reflect", "stealthrock", "thunderwave", "uturn", "yawn"] + "movepool": ["healbell", "psychic", "stealthrock", "thunderwave", "uturn", "yawn"], + "abilities": ["Levitate"] } ] }, @@ -3023,11 +3537,13 @@ "sets": [ { "role": "Fast Attacker", - "movepool": ["calmmind", "healingwish", "hiddenpowerfire", "icebeam", "psychic", "thunderbolt", "trick", "uturn"] + "movepool": ["calmmind", "healingwish", "hiddenpowerfighting", "icebeam", "psychic", "thunderbolt", "trick", "uturn"], + "abilities": ["Levitate"] }, { "role": "Bulky Support", - "movepool": ["hiddenpowerfire", "psychic", "stealthrock", "thunderwave", "toxic", "uturn"] + "movepool": ["hiddenpowerfighting", "psychic", "stealthrock", "thunderwave", "toxic", "uturn"], + "abilities": ["Levitate"] } ] }, @@ -3037,29 +3553,34 @@ { "role": "Fast Attacker", "movepool": ["fireblast", "nastyplot", "psychic", "signalbeam", "thunderbolt", "trick", "uturn"], + "abilities": ["Levitate"], "preferredTypes": ["Fire"] }, { "role": "Fast Support", - "movepool": ["explosion", "fireblast", "psychic", "stealthrock", "taunt", "uturn"] + "movepool": ["explosion", "fireblast", "psychic", "stealthrock", "taunt", "uturn"], + "abilities": ["Levitate"] } ] }, "dialga": { - "level": 70, + "level": 71, "sets": [ { "role": "Bulky Attacker", "movepool": ["aurasphere", "dracometeor", "fireblast", "roar", "stealthrock", "thunderbolt", "toxic"], + "abilities": ["Pressure"], "preferredTypes": ["Fire"] }, { "role": "Bulky Support", - "movepool": ["bulkup", "outrage", "rest", "sleeptalk"] + "movepool": ["bulkup", "outrage", "rest", "sleeptalk"], + "abilities": ["Pressure"] }, { "role": "Bulky Setup", "movepool": ["bulkup", "dragonclaw", "earthquake", "fireblast", "rest"], + "abilities": ["Pressure"], "preferredTypes": ["Ground"] } ] @@ -3070,34 +3591,39 @@ { "role": "Bulky Attacker", "movepool": ["dracometeor", "fireblast", "hydropump", "spacialrend", "thunderwave"], + "abilities": ["Pressure"], "preferredTypes": ["Fire"] } ] }, "heatran": { - "level": 76, + "level": 74, "sets": [ { "role": "Fast Attacker", - "movepool": ["earthpower", "eruption", "explosion", "fireblast"] + "movepool": ["earthpower", "eruption", "explosion", "fireblast"], + "abilities": ["Flash Fire"] }, { "role": "Bulky Attacker", "movepool": ["dragonpulse", "earthpower", "explosion", "fireblast", "hiddenpowergrass", "lavaplume", "roar", "stealthrock", "toxic"], + "abilities": ["Flash Fire"], "preferredTypes": ["Ground"] }, { "role": "Staller", - "movepool": ["earthpower", "fireblast", "lavaplume", "protect", "substitute", "toxic"] + "movepool": ["earthpower", "fireblast", "lavaplume", "protect", "substitute", "toxic"], + "abilities": ["Flash Fire"] } ] }, "regigigas": { - "level": 84, + "level": 82, "sets": [ { "role": "Staller", - "movepool": ["confuseray", "earthquake", "return", "substitute", "thunderwave"] + "movepool": ["earthquake", "return", "substitute", "thunderwave"], + "abilities": ["Slow Start"] } ] }, @@ -3106,54 +3632,48 @@ "sets": [ { "role": "Fast Attacker", - "movepool": ["dracometeor", "earthquake", "hiddenpowerfire", "outrage", "shadowball", "shadowsneak", "willowisp"] - }, - { - "role": "Bulky Setup", - "movepool": ["aurasphere", "calmmind", "dragonpulse", "substitute"] + "movepool": ["dracometeor", "earthquake", "outrage", "shadowball", "shadowsneak", "willowisp"], + "abilities": ["Levitate"] } ] }, "giratina": { - "level": 70, + "level": 68, "sets": [ - { - "role": "Fast Support", - "movepool": ["dragonpulse", "rest", "roar", "sleeptalk", "willowisp"] - }, { "role": "Bulky Setup", - "movepool": ["calmmind", "dragonpulse", "rest", "sleeptalk"] + "movepool": ["calmmind", "dragonpulse", "rest", "sleeptalk"], + "abilities": ["Pressure"] } ] }, "cresselia": { "level": 79, "sets": [ - { - "role": "Bulky Attacker", - "movepool": ["calmmind", "hiddenpowerfighting", "psychic", "substitute"] - }, { "role": "Bulky Setup", - "movepool": ["calmmind", "hiddenpowerfighting", "moonlight", "psychic"] + "movepool": ["calmmind", "hiddenpowerfighting", "moonlight", "psychic", "signalbeam"], + "abilities": ["Levitate"] }, { "role": "Bulky Support", - "movepool": ["hiddenpowerfighting", "lightscreen", "moonlight", "psychic", "reflect", "thunderwave", "toxic"] + "movepool": ["hiddenpowerfighting", "moonlight", "psychic", "thunderwave", "toxic"], + "abilities": ["Levitate"] } ] }, "phione": { - "level": 90, + "level": 91, "sets": [ { "role": "Staller", - "movepool": ["raindance", "rest", "surf", "toxic"] + "movepool": ["raindance", "rest", "surf", "toxic"], + "abilities": ["Hydration"] }, { "role": "Bulky Support", - "movepool": ["healbell", "icebeam", "surf", "toxic", "uturn"] + "movepool": ["healbell", "icebeam", "surf", "toxic", "uturn"], + "abilities": ["Hydration"] } ] }, @@ -3162,20 +3682,23 @@ "sets": [ { "role": "Bulky Setup", - "movepool": ["energyball", "icebeam", "surf", "tailglow"] + "movepool": ["energyball", "icebeam", "surf", "tailglow"], + "abilities": ["Hydration"] } ] }, "darkrai": { - "level": 70, + "level": 69, "sets": [ { "role": "Setup Sweeper", - "movepool": ["darkpulse", "darkvoid", "focusblast", "nastyplot"] + "movepool": ["darkpulse", "darkvoid", "focusblast", "nastyplot"], + "abilities": ["Bad Dreams"] }, { "role": "Bulky Setup", - "movepool": ["darkpulse", "darkvoid", "nastyplot", "substitute"] + "movepool": ["darkpulse", "darkvoid", "nastyplot", "substitute"], + "abilities": ["Bad Dreams"] } ] }, @@ -3184,17 +3707,19 @@ "sets": [ { "role": "Fast Support", - "movepool": ["airslash", "earthpower", "leechseed", "rest", "seedflare", "substitute"], + "movepool": ["airslash", "earthpower", "leechseed", "seedflare", "substitute", "synthesis"], + "abilities": ["Natural Cure"], "preferredTypes": ["Flying"] } ] }, "shayminsky": { - "level": 71, + "level": 70, "sets": [ { "role": "Fast Attacker", - "movepool": ["airslash", "earthpower", "hiddenpowerice", "leechseed", "seedflare", "substitute"] + "movepool": ["airslash", "earthpower", "hiddenpowerice", "leechseed", "seedflare", "substitute"], + "abilities": ["Serene Grace"] } ] }, @@ -3203,7 +3728,9 @@ "sets": [ { "role": "Setup Sweeper", - "movepool": ["earthquake", "extremespeed", "recover", "shadowclaw", "swordsdance"] + "movepool": ["earthquake", "extremespeed", "recover", "shadowclaw", "swordsdance"], + "abilities": ["Multitype"], + "preferredTypes": ["Ground"] } ] }, @@ -3212,11 +3739,13 @@ "sets": [ { "role": "Bulky Setup", - "movepool": ["calmmind", "earthpower", "fireblast", "judgment", "recover"] + "movepool": ["calmmind", "earthpower", "fireblast", "judgment", "recover"], + "abilities": ["Multitype"] }, { "role": "Setup Sweeper", - "movepool": ["calmmind", "earthpower", "icebeam", "judgment"] + "movepool": ["calmmind", "earthpower", "icebeam", "judgment"], + "abilities": ["Multitype"] } ] }, @@ -3225,7 +3754,8 @@ "sets": [ { "role": "Bulky Setup", - "movepool": ["calmmind", "focusblast", "judgment", "recover", "refresh"] + "movepool": ["calmmind", "focusblast", "judgment", "recover", "refresh"], + "abilities": ["Multitype"] } ] }, @@ -3235,11 +3765,13 @@ { "role": "Setup Sweeper", "movepool": ["earthquake", "extremespeed", "outrage", "recover", "swordsdance"], + "abilities": ["Multitype"], "preferredTypes": ["Ground"] }, { "role": "Bulky Setup", - "movepool": ["calmmind", "earthpower", "fireblast", "judgment", "recover", "refresh"] + "movepool": ["calmmind", "earthpower", "fireblast", "judgment", "recover", "refresh"], + "abilities": ["Multitype"] } ] }, @@ -3248,7 +3780,8 @@ "sets": [ { "role": "Setup Sweeper", - "movepool": ["calmmind", "icebeam", "judgment", "recover"] + "movepool": ["calmmind", "icebeam", "judgment", "recover"], + "abilities": ["Multitype"] } ] }, @@ -3257,7 +3790,8 @@ "sets": [ { "role": "Bulky Setup", - "movepool": ["calmmind", "darkpulse", "icebeam", "judgment", "recover"] + "movepool": ["calmmind", "darkpulse", "icebeam", "judgment", "recover"], + "abilities": ["Multitype"] } ] }, @@ -3266,7 +3800,8 @@ "sets": [ { "role": "Setup Sweeper", - "movepool": ["calmmind", "earthpower", "icebeam", "judgment", "recover", "thunderbolt"] + "movepool": ["calmmind", "earthpower", "icebeam", "judgment", "recover", "thunderbolt"], + "abilities": ["Multitype"] } ] }, @@ -3275,7 +3810,8 @@ "sets": [ { "role": "Bulky Setup", - "movepool": ["calmmind", "earthpower", "judgment", "recover", "refresh"] + "movepool": ["calmmind", "earthpower", "judgment", "recover", "refresh"], + "abilities": ["Multitype"] } ] }, @@ -3284,7 +3820,8 @@ "sets": [ { "role": "Bulky Attacker", - "movepool": ["calmmind", "focusblast", "judgment", "recover", "willowisp"] + "movepool": ["calmmind", "focusblast", "judgment", "recover", "willowisp"], + "abilities": ["Multitype"] } ] }, @@ -3293,11 +3830,13 @@ "sets": [ { "role": "Bulky Setup", - "movepool": ["calmmind", "fireblast", "judgment", "recover"] + "movepool": ["calmmind", "fireblast", "judgment", "recover"], + "abilities": ["Multitype"] }, { "role": "Setup Sweeper", - "movepool": ["calmmind", "earthpower", "icebeam", "judgment"] + "movepool": ["calmmind", "earthpower", "icebeam", "judgment"], + "abilities": ["Multitype"] } ] }, @@ -3307,11 +3846,13 @@ { "role": "Setup Sweeper", "movepool": ["earthquake", "extremespeed", "recover", "stoneedge", "swordsdance"], + "abilities": ["Multitype"], "preferredTypes": ["Rock"] }, { "role": "Bulky Setup", - "movepool": ["calmmind", "icebeam", "judgment", "recover"] + "movepool": ["calmmind", "icebeam", "judgment", "recover"], + "abilities": ["Multitype"] } ] }, @@ -3320,7 +3861,8 @@ "sets": [ { "role": "Bulky Setup", - "movepool": ["calmmind", "earthpower", "judgment", "recover", "thunderbolt"] + "movepool": ["calmmind", "earthpower", "judgment", "recover", "thunderbolt"], + "abilities": ["Multitype"] } ] }, @@ -3329,24 +3871,26 @@ "sets": [ { "role": "Setup Sweeper", - "movepool": ["calmmind", "earthpower", "fireblast", "recover", "sludgebomb"] + "movepool": ["calmmind", "earthpower", "fireblast", "recover", "sludgebomb"], + "abilities": ["Multitype"], + "preferredTypes": ["Ground"] }, { "role": "Bulky Attacker", - "movepool": ["earthquake", "fireblast", "icebeam", "recover", "sludgebomb", "stealthrock", "willowisp"] + "movepool": ["earthquake", "fireblast", "icebeam", "recover", "sludgebomb", "stealthrock", "willowisp"], + "abilities": ["Multitype"], + "preferredTypes": ["Ground"] } ] }, "arceuspsychic": { "level": 69, "sets": [ - { - "role": "Bulky Setup", - "movepool": ["calmmind", "earthpower", "fireblast", "judgment", "recover"] - }, { "role": "Setup Sweeper", - "movepool": ["calmmind", "darkpulse", "focusblast", "judgment"] + "movepool": ["calmmind", "darkpulse", "focusblast", "judgment", "recover"], + "abilities": ["Multitype"], + "preferredTypes": ["Fighting"] } ] }, @@ -3356,11 +3900,13 @@ { "role": "Setup Sweeper", "movepool": ["earthquake", "extremespeed", "recover", "stoneedge", "swordsdance"], + "abilities": ["Multitype"], "preferredTypes": ["Ground"] }, { "role": "Bulky Setup", - "movepool": ["calmmind", "earthpower", "fireblast", "judgment", "recover"] + "movepool": ["calmmind", "earthpower", "fireblast", "judgment", "recover"], + "abilities": ["Multitype"] } ] }, @@ -3369,11 +3915,13 @@ "sets": [ { "role": "Bulky Attacker", - "movepool": ["earthquake", "judgment", "recover", "toxic", "willowisp"] + "movepool": ["earthquake", "judgment", "recover", "toxic", "willowisp"], + "abilities": ["Multitype"] }, { "role": "Bulky Setup", - "movepool": ["calmmind", "earthpower", "judgment", "recover"] + "movepool": ["calmmind", "earthpower", "judgment", "recover"], + "abilities": ["Multitype"] } ] }, @@ -3382,7 +3930,8 @@ "sets": [ { "role": "Bulky Attacker", - "movepool": ["calmmind", "icebeam", "judgment", "recover", "willowisp"] + "movepool": ["calmmind", "icebeam", "judgment", "recover", "willowisp"], + "abilities": ["Multitype"] } ] } diff --git a/data/mods/gen4/random-teams.ts b/data/random-battles/gen4/teams.ts similarity index 83% rename from data/mods/gen4/random-teams.ts rename to data/random-battles/gen4/teams.ts index 66ace7afa9c5..1ce2723fe08e 100644 --- a/data/mods/gen4/random-teams.ts +++ b/data/random-battles/gen4/teams.ts @@ -1,7 +1,6 @@ -import RandomGen5Teams from '../gen5/random-teams'; -import {Utils} from '../../../lib'; +import RandomGen5Teams from '../gen5/teams'; import {PRNG} from '../../../sim'; -import type {MoveCounter} from '../gen8/random-teams'; +import type {MoveCounter} from '../gen8/teams'; // Moves that restore HP: const RECOVERY_MOVES = [ @@ -39,11 +38,11 @@ const MOVE_PAIRS = [ /** Pokemon who always want priority STAB, and are fine with it as its only STAB move of that type */ const PRIORITY_POKEMON = [ - 'cacturne', 'dusknoir', 'honchkrow', 'mamoswine', 'scizor', 'shedinja', + 'cacturne', 'dusknoir', 'honchkrow', 'mamoswine', 'scizor', 'shedinja', 'shiftry', ]; export class RandomGen4Teams extends RandomGen5Teams { - randomSets: {[species: string]: RandomTeamsTypes.RandomSpeciesData} = require('./random-sets.json'); + randomSets: {[species: string]: RandomTeamsTypes.RandomSpeciesData} = require('./sets.json'); constructor(format: string | Format, prng: PRNG | PRNGSeed | null) { super(format, prng); @@ -52,14 +51,14 @@ export class RandomGen4Teams extends RandomGen5Teams { this.moveEnforcementCheckers = { Bug: (movePool, moves, abilities, types, counter) => ( - !counter.get('Bug') && (movePool.includes('megahorn') || abilities.has('Tinted Lens')) + !counter.get('Bug') && movePool.includes('megahorn') ), Dark: (movePool, moves, abilities, types, counter) => !counter.get('Dark'), Dragon: (movePool, moves, abilities, types, counter) => !counter.get('Dragon'), Electric: (movePool, moves, abilities, types, counter) => !counter.get('Electric'), Fighting: (movePool, moves, abilities, types, counter) => !counter.get('Fighting'), Fire: (movePool, moves, abilities, types, counter) => !counter.get('Fire'), - Flying: (movePool, moves, abilities, types, counter, species) => (!counter.get('Flying') && species.id !== 'mantine'), + Flying: (movePool, moves, abilities, types, counter, species) => !counter.get('Flying') && species.id !== 'aerodactyl', Ghost: (movePool, moves, abilities, types, counter) => !counter.get('Ghost'), Grass: (movePool, moves, abilities, types, counter, species) => ( !counter.get('Grass') && @@ -67,28 +66,30 @@ export class RandomGen4Teams extends RandomGen5Teams { ), Ground: (movePool, moves, abilities, types, counter) => !counter.get('Ground'), Ice: (movePool, moves, abilities, types, counter) => !counter.get('Ice'), - Poison: (movePool, moves, abilities, types, counter) => (!counter.get('Poison') && types.has('Grass')), + Poison: (movePool, moves, abilities, types, counter, species) => ( + !counter.get('Poison') && (types.has('Grass') || species.id === 'gengar') + ), Psychic: (movePool, moves, abilities, types, counter) => ( !counter.get('Psychic') && (types.has('Fighting') || movePool.includes('calmmind')) ), - Rock: (movePool, moves, abilities, types, counter, species) => ( - !counter.get('Rock') && (species.baseStats.atk >= 95 || abilities.has('Rock Head')) - ), + Rock: (movePool, moves, abilities, types, counter, species) => (!counter.get('Rock') && species.baseStats.atk >= 80), Steel: (movePool, moves, abilities, types, counter, species) => (!counter.get('Steel') && species.id === 'metagross'), Water: (movePool, moves, abilities, types, counter) => !counter.get('Water'), }; + this.cachedStatusMoves = this.dex.moves.all() + .filter(move => move.category === 'Status') + .map(move => move.id); } cullMovePool( types: string[], moves: Set, - abilities: Set, + abilities: string[], counter: MoveCounter, movePool: string[], teamDetails: RandomTeamsTypes.TeamDetails, species: Species, isLead: boolean, - isDoubles: boolean, preferredType: string, role: RandomTeamsTypes.Role, ): void { @@ -158,13 +159,15 @@ export class RandomGen4Teams extends RandomGen5Teams { if (movePool.includes('spikes')) this.fastPop(movePool, movePool.indexOf('spikes')); if (moves.size + movePool.length <= this.maxMoveCount) return; } + if (teamDetails.statusCure) { + if (movePool.includes('aromatherapy')) this.fastPop(movePool, movePool.indexOf('aromatherapy')); + if (movePool.includes('healbell')) this.fastPop(movePool, movePool.indexOf('healbell')); + if (moves.size + movePool.length <= this.maxMoveCount) return; + } // Develop additional move lists - const badWithSetup = ['healbell', 'pursuit', 'toxic']; - // Nature Power is Earthquake this gen - const statusMoves = this.dex.moves.all() - .filter(move => move.category === 'Status') - .map(move => move.id); + const badWithSetup = ['pursuit', 'toxic']; + const statusMoves = this.cachedStatusMoves; // General incompatibilities const incompatiblePairs = [ @@ -188,6 +191,7 @@ export class RandomGen4Teams extends RandomGen5Teams { ['discharge', 'thunderbolt'], ['gunkshot', 'poisonjab'], ['payback', 'pursuit'], + ['protect', 'swordsdance'], // Assorted hardcodes go here: // Manectric @@ -202,6 +206,8 @@ export class RandomGen4Teams extends RandomGen5Teams { ['bodyslam', 'healingwish'], // Blaziken ['agility', 'vacuumwave'], + // Shuckle + ['knockoff', 'protect'], ]; for (const pair of incompatiblePairs) this.incompatibleMoves(moves, movePool, pair[0], pair[1]); @@ -210,23 +216,34 @@ export class RandomGen4Teams extends RandomGen5Teams { if (role !== 'Staller') { this.incompatibleMoves(moves, movePool, statusInflictingMoves, statusInflictingMoves); } + + // Cull filler moves for otherwise fixed set Stealth Rock users + if (!teamDetails.stealthRock) { + if (species.id === 'registeel' && role === 'Staller') { + if (movePool.includes('thunderwave')) this.fastPop(movePool, movePool.indexOf('thunderwave')); + if (moves.size + movePool.length <= this.maxMoveCount) return; + } + if (species.id === 'wormadamtrash' && role === 'Staller') { + if (movePool.includes('suckerpunch')) this.fastPop(movePool, movePool.indexOf('suckerpunch')); + if (moves.size + movePool.length <= this.maxMoveCount) return; + } + } } // Generate random moveset for a given species, role, preferred type. randomMoveset( types: string[], - abilities: Set, + abilities: string[], teamDetails: RandomTeamsTypes.TeamDetails, species: Species, isLead: boolean, - isDoubles: boolean, movePool: string[], preferredType: string, role: RandomTeamsTypes.Role, ): Set { const moves = new Set(); let counter = this.newQueryMoves(moves, species, preferredType, abilities); - this.cullMovePool(types, moves, abilities, counter, movePool, teamDetails, species, isLead, isDoubles, + this.cullMovePool(types, moves, abilities, counter, movePool, teamDetails, species, isLead, preferredType, role); // If there are only four moves, add all moves and return early @@ -234,7 +251,7 @@ export class RandomGen4Teams extends RandomGen5Teams { // Still need to ensure that multiple Hidden Powers are not added (if maxMoveCount is increased) while (movePool.length) { const moveid = this.sample(movePool); - counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles, + counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, movePool, preferredType, role); } return moves; @@ -250,22 +267,22 @@ export class RandomGen4Teams extends RandomGen5Teams { // 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, + counter = this.addMove(move, moves, types, abilities, teamDetails, species, isLead, movePool, preferredType, role); } // Add other moves you really want to have, e.g. STAB, recovery, setup. // Enforce Facade if Guts is a possible ability - if (movePool.includes('facade') && abilities.has('Guts')) { - counter = this.addMove('facade', moves, types, abilities, teamDetails, species, isLead, isDoubles, + if (movePool.includes('facade') && abilities.includes('Guts')) { + counter = this.addMove('facade', moves, types, abilities, teamDetails, species, isLead, movePool, preferredType, role); } // Enforce Seismic Toss, Spore, and Volt Tackle for (const moveid of ['seismictoss', 'spore', 'volttackle']) { if (movePool.includes(moveid)) { - counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles, + counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, movePool, preferredType, role); } } @@ -273,7 +290,7 @@ export class RandomGen4Teams extends RandomGen5Teams { // Enforce Substitute on non-Setup sets with Baton Pass if (!role.includes('Setup')) { if (movePool.includes('batonpass') && movePool.includes('substitute')) { - counter = this.addMove('substitute', moves, types, abilities, teamDetails, species, isLead, isDoubles, + counter = this.addMove('substitute', moves, types, abilities, teamDetails, species, isLead, movePool, preferredType, role); } } @@ -281,7 +298,7 @@ export class RandomGen4Teams extends RandomGen5Teams { // Enforce hazard removal on Bulky Support and Spinner if the team doesn't already have it if (['Bulky Support', 'Spinner'].includes(role) && !teamDetails.rapidSpin) { if (movePool.includes('rapidspin')) { - counter = this.addMove('rapidspin', moves, types, abilities, teamDetails, species, isLead, isDoubles, + counter = this.addMove('rapidspin', moves, types, abilities, teamDetails, species, isLead, movePool, preferredType, role); } } @@ -298,7 +315,7 @@ export class RandomGen4Teams extends RandomGen5Teams { } if (priorityMoves.length) { const moveid = this.sample(priorityMoves); - counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles, + counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, movePool, preferredType, role); } } @@ -317,7 +334,7 @@ export class RandomGen4Teams extends RandomGen5Teams { while (runEnforcementChecker(type)) { if (!stabMoves.length) break; const moveid = this.sampleNoReplace(stabMoves); - counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles, + counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, movePool, preferredType, role); } } @@ -334,7 +351,7 @@ export class RandomGen4Teams extends RandomGen5Teams { } if (stabMoves.length) { const moveid = this.sample(stabMoves); - counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles, + counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, movePool, preferredType, role); } } @@ -351,12 +368,12 @@ export class RandomGen4Teams extends RandomGen5Teams { } if (stabMoves.length) { const moveid = this.sample(stabMoves); - counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles, + counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, movePool, preferredType, role); } else { // If they have no regular STAB move, enforce U-turn on Bug types. if (movePool.includes('uturn') && types.includes('Bug')) { - counter = this.addMove('uturn', moves, types, abilities, teamDetails, species, isLead, isDoubles, + counter = this.addMove('uturn', moves, types, abilities, teamDetails, species, isLead, movePool, preferredType, role); } } @@ -367,7 +384,7 @@ export class RandomGen4Teams extends RandomGen5Teams { 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, + counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, movePool, preferredType, role); } } @@ -377,7 +394,7 @@ export class RandomGen4Teams extends RandomGen5Teams { const enforcedMoves = ['protect', 'toxic', 'wish']; for (const move of enforcedMoves) { if (movePool.includes(move)) { - counter = this.addMove(move, moves, types, abilities, teamDetails, species, isLead, isDoubles, + counter = this.addMove(move, moves, types, abilities, teamDetails, species, isLead, movePool, preferredType, role); } } @@ -388,7 +405,7 @@ export class RandomGen4Teams extends RandomGen5Teams { 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, + counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, movePool, preferredType, role); } } @@ -403,7 +420,7 @@ export class RandomGen4Teams extends RandomGen5Teams { } if (attackingMoves.length) { const moveid = this.sample(attackingMoves); - counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles, + counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, movePool, preferredType, role); } } @@ -424,7 +441,7 @@ export class RandomGen4Teams extends RandomGen5Teams { } if (coverageMoves.length) { const moveid = this.sample(coverageMoves); - counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles, + counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, movePool, preferredType, role); } } @@ -433,15 +450,15 @@ export class RandomGen4Teams extends RandomGen5Teams { // Choose remaining moves randomly from movepool and add them to moves list: while (moves.size < this.maxMoveCount && movePool.length) { const moveid = this.sample(movePool); - counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles, + counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, movePool, preferredType, 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, + counter = this.addMove(pair[1], moves, types, abilities, teamDetails, species, isLead, movePool, preferredType, role); } if (moveid === pair[1] && movePool.includes(pair[0])) { - counter = this.addMove(pair[0], moves, types, abilities, teamDetails, species, isLead, isDoubles, + counter = this.addMove(pair[0], moves, types, abilities, teamDetails, species, isLead, movePool, preferredType, role); } } @@ -453,36 +470,23 @@ export class RandomGen4Teams extends RandomGen5Teams { ability: string, types: Set, moves: Set, - abilities: Set, + abilities: string[], counter: MoveCounter, movePool: string[], teamDetails: RandomTeamsTypes.TeamDetails, species: Species, - isDoubles: boolean, preferredType: string, role: RandomTeamsTypes.Role ): boolean { switch (ability) { - case 'Hustle': case 'Ice Body': case 'Rain Dish': case 'Sand Veil': case 'Snow Cloak': case 'Solar Power': - case 'Steadfast': case 'Sticky Hold': case 'Unaware': - return true; case 'Chlorophyll': - return !moves.has('sunnyday') && !teamDetails.sun; - case 'Guts': - return !moves.has('facade') && species.id !== 'heracross'; - case 'Hydration': case 'Swift Swim': - return ( - !moves.has('raindance') && !teamDetails.rain || - !moves.has('raindance') && ['Rock Head', 'Water Absorb'].some(abil => abilities.has(abil)) - ); - case 'Reckless': case 'Rock Head': + return !teamDetails.sun; + case 'Swift Swim': + return !teamDetails.rain; + case 'Rock Head': return !counter.get('recoil'); case 'Skill Link': return !counter.get('skilllink'); - case 'Swarm': - return !counter.get('Bug'); - case 'Technician': - return !counter.get('technician'); } return false; @@ -492,60 +496,41 @@ export class RandomGen4Teams extends RandomGen5Teams { getAbility( types: Set, moves: Set, - abilities: Set, + abilities: string[], counter: MoveCounter, movePool: string[], teamDetails: RandomTeamsTypes.TeamDetails, species: Species, - isDoubles: boolean, preferredType: string, role: RandomTeamsTypes.Role, ): string { - const abilityData = Array.from(abilities).map(a => this.dex.abilities.get(a)); - Utils.sortBy(abilityData, abil => -abil.rating); - - if (abilityData.length <= 1) return abilityData[0].name; + if (abilities.length <= 1) return abilities[0]; // Hard-code abilities here - if (species.id === 'jynx') return 'Forewarn'; - if (species.id === 'arcanine') return 'Intimidate'; - if (species.id === 'blissey') return 'Natural Cure'; - if (species.id === 'yanmega') return (role === 'Fast Attacker') ? 'Speed Boost' : 'Tinted Lens'; - if (species.id === 'absol') return 'Super Luck'; - if (species.id === 'lanturn') return 'Volt Absorb'; - - if (abilities.has('Guts') && !abilities.has('Quick Feet') && moves.has('facade')) return 'Guts'; - if (abilities.has('Hydration') && moves.has('raindance') && moves.has('rest')) return 'Hydration'; - if (abilities.has('Trace')) return 'Trace'; - - let abilityAllowed: Ability[] = []; + if (species.id === 'dewgong') return moves.has('raindance') ? 'Hydration' : 'Thick Fat'; + if (species.id === 'cloyster' && counter.get('skilllink')) return 'Skill Link'; + + const abilityAllowed: string[] = []; // Obtain a list of abilities that are allowed (not culled) - for (const ability of abilityData) { - if (ability.rating >= 1 && !this.shouldCullAbility( - ability.name, types, moves, abilities, counter, movePool, teamDetails, species, isDoubles, preferredType, role + for (const ability of abilities) { + if (!this.shouldCullAbility( + ability, types, moves, abilities, counter, movePool, teamDetails, species, preferredType, role )) { abilityAllowed.push(ability); } } - // If all abilities are rejected, re-allow all abilities - if (!abilityAllowed.length) { - for (const ability of abilityData) { - if (ability.rating > 0) abilityAllowed.push(ability); - } - if (!abilityAllowed.length) abilityAllowed = abilityData; - } + // Pick a random allowed ability + if (abilityAllowed.length >= 1) return this.sample(abilityAllowed); - if (abilityAllowed.length === 1) return abilityAllowed[0].name; - // Sort abilities by rating with an element of randomness - if (abilityAllowed[0].rating <= abilityAllowed[1].rating) { - if (this.randomChance(1, 2)) [abilityAllowed[0], abilityAllowed[1]] = [abilityAllowed[1], abilityAllowed[0]]; - } else if (abilityAllowed[0].rating - 0.5 <= abilityAllowed[1].rating) { - if (this.randomChance(1, 3)) [abilityAllowed[0], abilityAllowed[1]] = [abilityAllowed[1], abilityAllowed[0]]; + // If all abilities are rejected, prioritize weather abilities over non-weather abilities + if (!abilityAllowed.length) { + const weatherAbilities = abilities.filter(a => ['Chlorophyll', 'Swift Swim'].includes(a)); + if (weatherAbilities.length) return this.sample(weatherAbilities); } - // After sorting, choose the first ability - return abilityAllowed[0].name; + // Pick a random ability + return this.sample(abilities); } getPriorityItem( @@ -566,7 +551,7 @@ export class RandomGen4Teams extends RandomGen5Teams { if (species.id === 'shedinja' || species.id === 'smeargle') return 'Focus Sash'; if (species.id === 'unown') return 'Choice Specs'; if (species.id === 'wobbuffet') return 'Custap Berry'; - if (species.id === 'ditto') return 'Choice Scarf'; + if (species.id === 'ditto' || (species.id === 'rampardos' && role === 'Fast Attacker')) return 'Choice Scarf'; if (ability === 'Poison Heal' || moves.has('facade')) return 'Toxic Orb'; if (ability === 'Speed Boost' && species.id === 'yanmega') return 'Life Orb'; if (['healingwish', 'switcheroo', 'trick'].some(m => moves.has(m))) { @@ -579,6 +564,7 @@ export class RandomGen4Teams extends RandomGen5Teams { } } if (moves.has('bellydrum')) return 'Sitrus Berry'; + if (moves.has('waterspout')) return 'Choice Scarf'; if (ability === 'Magic Guard') return 'Life Orb'; if (moves.has('lightscreen') && moves.has('reflect')) return 'Light Clay'; if (moves.has('rest') && !moves.has('sleeptalk') && !['Natural Cure', 'Shed Skin'].includes(ability)) { @@ -636,7 +622,7 @@ export class RandomGen4Teams extends RandomGen5Teams { if (['batonpass', 'protect', 'substitute'].some(m => moves.has(m))) return 'Leftovers'; if ( role === 'Fast Support' && isLead && defensiveStatTotal < 255 && !counter.get('recovery') && - (!counter.get('recoil') || ability === 'Rock Head') + (counter.get('hazards') || counter.get('setup')) && (!counter.get('recoil') || ability === 'Rock Head') ) return 'Focus Sash'; // Default Items @@ -666,19 +652,10 @@ export class RandomGen4Teams extends RandomGen5Teams { randomSet( species: string | Species, teamDetails: RandomTeamsTypes.TeamDetails = {}, - isLead = false, - isDoubles = false + isLead = false ): RandomTeamsTypes.RandomSet { species = this.dex.species.get(species); - let forme = species.name; - - if (typeof species.battleOnly === 'string') { - // Only change the forme. The species has custom moves, and may have different typing and requirements. - forme = species.battleOnly; - } - if (species.cosmeticFormes) { - forme = this.sample([species.name].concat(species.cosmeticFormes)); - } + const forme = this.getForme(species); const sets = this.randomSets[species.id]["sets"]; const possibleSets = []; // Check if the Pokemon has a Spinner set @@ -706,17 +683,16 @@ export class RandomGen4Teams extends RandomGen5Teams { const ivs = {hp: 31, atk: 31, def: 31, spa: 31, spd: 31, spe: 31}; const types = species.types; - const abilities = new Set(Object.values(species.abilities)); - if (species.unreleasedHidden) abilities.delete(species.abilities.H); + const abilities = set.abilities!; // Get moves - const moves = this.randomMoveset(types, abilities, teamDetails, species, isLead, isDoubles, movePool, + const moves = this.randomMoveset(types, abilities, teamDetails, species, isLead, movePool, preferredType, role); const counter = this.newQueryMoves(moves, species, preferredType, abilities); // Get ability ability = this.getAbility(new Set(types), moves, abilities, counter, movePool, teamDetails, species, - false, preferredType, role); + preferredType, role); // Get items item = this.getPriorityItem(ability, types, moves, counter, teamDetails, species, isLead, preferredType, role); @@ -729,7 +705,7 @@ export class RandomGen4Teams extends RandomGen5Teams { item = 'Black Sludge'; } - const level = this.adjustLevel || this.randomSets[species.id]["level"] || (species.nfe ? 90 : 80); + const level = this.getLevel(species); // We use a special variable to track Hidden Power // so that we can check for all Hidden Powers at once @@ -753,9 +729,7 @@ export class RandomGen4Teams extends RandomGen5Teams { // Prepare optimal HP const srImmunity = ability === 'Magic Guard'; - let srWeakness = srImmunity ? 0 : this.dex.getEffectiveness('Rock', species); - // Crash damage move users want an odd HP to survive two misses - if (['highjumpkick', 'jumpkick'].some(m => moves.has(m))) srWeakness = 2; + const srWeakness = srImmunity ? 0 : this.dex.getEffectiveness('Rock', species); 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') && item === 'Sitrus Berry') { @@ -766,7 +740,8 @@ export class RandomGen4Teams extends RandomGen5Teams { if (hp % 2 === 0) break; } else { // Maximize number of Stealth Rock switch-ins - if (srWeakness <= 0 || ['Black Sludge', 'Leftovers', 'Life Orb'].includes(item)) break; + if (srWeakness <= 0) break; + if (srWeakness === 1 && ['Black Sludge', '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; diff --git a/data/mods/gen5/random-sets.json b/data/random-battles/gen5/sets.json similarity index 66% rename from data/mods/gen5/random-sets.json rename to data/random-battles/gen5/sets.json index ebe84129d3a8..a5d7dd9415b7 100644 --- a/data/mods/gen5/random-sets.json +++ b/data/random-battles/gen5/sets.json @@ -1,31 +1,36 @@ { "venusaur": { - "level": 85, + "level": 84, "sets": [ { "role": "Staller", - "movepool": ["gigadrain", "leechseed", "sleeppowder", "sludgebomb", "substitute"] + "movepool": ["gigadrain", "leechseed", "sleeppowder", "sludgebomb", "substitute"], + "abilities": ["Chlorophyll", "Overgrow"] }, { "role": "Bulky Attacker", - "movepool": ["earthquake", "hiddenpowerfire", "hiddenpowerice", "leafstorm", "sleeppowder", "sludgebomb", "synthesis"] + "movepool": ["earthquake", "leafstorm", "sleeppowder", "sludgebomb", "synthesis"], + "abilities": ["Chlorophyll", "Overgrow"] } ] }, "charizard": { - "level": 85, + "level": 84, "sets": [ { "role": "Fast Attacker", - "movepool": ["airslash", "dragonpulse", "fireblast", "focusblast", "hiddenpowergrass", "roost"] + "movepool": ["airslash", "dragonpulse", "fireblast", "focusblast", "hiddenpowergrass", "roost"], + "abilities": ["Blaze", "Solar Power"] }, { "role": "Bulky Attacker", - "movepool": ["airslash", "earthquake", "fireblast", "roost", "willowisp"] + "movepool": ["airslash", "earthquake", "fireblast", "roost", "willowisp"], + "abilities": ["Blaze", "Solar Power"] }, { "role": "Setup Sweeper", - "movepool": ["acrobatics", "dragondance", "earthquake", "flareblitz", "swordsdance"] + "movepool": ["acrobatics", "dragondance", "earthquake", "flareblitz", "swordsdance"], + "abilities": ["Blaze"] } ] }, @@ -34,29 +39,38 @@ "sets": [ { "role": "Spinner", - "movepool": ["icebeam", "rapidspin", "roar", "scald", "toxic"] + "movepool": ["icebeam", "rapidspin", "roar", "scald", "toxic"], + "abilities": ["Torrent"] }, { "role": "Staller", - "movepool": ["haze", "icebeam", "protect", "scald", "toxic"] + "movepool": ["haze", "icebeam", "protect", "scald", "toxic"], + "abilities": ["Torrent"] } ] }, "butterfree": { "level": 93, "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["bugbuzz", "quiverdance", "sleeppowder", "substitute"], + "abilities": ["Tinted Lens"] + }, { "role": "Bulky Setup", - "movepool": ["bugbuzz", "hiddenpowerrock", "psychic", "quiverdance", "sleeppowder", "substitute"] + "movepool": ["bugbuzz", "quiverdance", "roost", "sleeppowder"], + "abilities": ["Tinted Lens"] } ] }, "beedrill": { - "level": 95, + "level": 97, "sets": [ { "role": "Fast Support", - "movepool": ["drillrun", "poisonjab", "toxicspikes", "uturn"] + "movepool": ["drillrun", "poisonjab", "toxicspikes", "uturn"], + "abilities": ["Swarm"] } ] }, @@ -65,11 +79,13 @@ "sets": [ { "role": "Bulky Attacker", - "movepool": ["bravebird", "heatwave", "return", "roost", "uturn", "workup"] + "movepool": ["bravebird", "heatwave", "return", "roost", "uturn", "workup"], + "abilities": ["Big Pecks"] }, { "role": "Wallbreaker", - "movepool": ["bravebird", "quickattack", "return", "uturn"] + "movepool": ["bravebird", "quickattack", "return", "uturn"], + "abilities": ["Big Pecks"] } ] }, @@ -78,21 +94,24 @@ "sets": [ { "role": "Wallbreaker", - "movepool": ["crunch", "facade", "flamewheel", "protect", "suckerpunch", "swordsdance", "uturn"] + "movepool": ["crunch", "facade", "flamewheel", "protect", "suckerpunch", "swordsdance", "uturn"], + "abilities": ["Guts"], + "preferredTypes": ["Dark"] } ] }, "fearow": { - "level": 90, + "level": 89, "sets": [ { "role": "Wallbreaker", - "movepool": ["doubleedge", "drillpeck", "drillrun", "pursuit", "quickattack", "return", "uturn"], - "preferredTypes": ["Normal"] + "movepool": ["doubleedge", "drillpeck", "drillrun", "return", "uturn"], + "abilities": ["Sniper"] }, { "role": "Fast Attacker", - "movepool": ["doubleedge", "drillpeck", "drillrun", "return", "roost"] + "movepool": ["doubleedge", "drillpeck", "drillrun", "return", "roost"], + "abilities": ["Sniper"] } ] }, @@ -101,7 +120,19 @@ "sets": [ { "role": "Setup Sweeper", - "movepool": ["aquatail", "coil", "earthquake", "glare", "gunkshot", "rest", "seedbomb", "suckerpunch"], + "movepool": ["coil", "earthquake", "glare", "gunkshot", "suckerpunch"], + "abilities": ["Intimidate"] + }, + { + "role": "Bulky Attacker", + "movepool": ["coil", "earthquake", "gunkshot", "suckerpunch"], + "abilities": ["Intimidate"], + "preferredTypes": ["Ground"] + }, + { + "role": "Bulky Setup", + "movepool": ["coil", "earthquake", "gunkshot", "rest"], + "abilities": ["Shed Skin"], "preferredTypes": ["Ground"] } ] @@ -111,16 +142,18 @@ "sets": [ { "role": "Fast Attacker", - "movepool": ["extremespeed", "grassknot", "hiddenpowerice", "voltswitch", "volttackle"] + "movepool": ["extremespeed", "grassknot", "hiddenpowerice", "voltswitch", "volttackle"], + "abilities": ["Lightning Rod"] } ] }, "raichu": { - "level": 88, + "level": 87, "sets": [ { "role": "Wallbreaker", - "movepool": ["encore", "focusblast", "grassknot", "hiddenpowerice", "nastyplot", "thunderbolt", "voltswitch"] + "movepool": ["encore", "focusblast", "grassknot", "hiddenpowerice", "nastyplot", "thunderbolt", "voltswitch"], + "abilities": ["Lightning Rod"] } ] }, @@ -129,11 +162,13 @@ "sets": [ { "role": "Spinner", - "movepool": ["earthquake", "rapidspin", "stealthrock", "stoneedge", "toxic"] + "movepool": ["earthquake", "rapidspin", "stealthrock", "stoneedge", "toxic"], + "abilities": ["Sand Rush"] }, { "role": "Bulky Setup", - "movepool": ["earthquake", "stoneedge", "swordsdance", "xscissor"] + "movepool": ["earthquake", "stoneedge", "swordsdance", "xscissor"], + "abilities": ["Sand Rush"] } ] }, @@ -143,53 +178,71 @@ { "role": "Wallbreaker", "movepool": ["earthpower", "fireblast", "icebeam", "sludgewave", "stealthrock", "toxicspikes"], + "abilities": ["Sheer Force"], "preferredTypes": ["Ice"] } ] }, "nidoking": { - "level": 83, + "level": 82, "sets": [ { "role": "Wallbreaker", "movepool": ["earthpower", "fireblast", "icebeam", "sludgewave", "substitute", "superpower"], + "abilities": ["Sheer Force"], "preferredTypes": ["Ice"] } ] }, "clefable": { - "level": 84, + "level": 85, "sets": [ { "role": "Bulky Support", - "movepool": ["aromatherapy", "doubleedge", "fireblast", "softboiled", "stealthrock", "thunderwave"] + "movepool": ["aromatherapy", "doubleedge", "fireblast", "softboiled", "stealthrock", "thunderwave"], + "abilities": ["Magic Guard"] }, { "role": "Bulky Setup", - "movepool": ["calmmind", "icebeam", "softboiled", "thunderbolt"] + "movepool": ["calmmind", "icebeam", "softboiled", "thunderbolt"], + "abilities": ["Magic Guard", "Unaware"] } ] }, "ninetales": { "level": 80, "sets": [ + { + "role": "Bulky Setup", + "movepool": ["fireblast", "hypnosis", "nastyplot", "solarbeam", "willowisp"], + "abilities": ["Drought"], + "preferredTypes": ["Grass"] + }, { "role": "Setup Sweeper", - "movepool": ["fireblast", "hiddenpowerice", "hypnosis", "nastyplot", "solarbeam", "substitute", "willowisp"], + "movepool": ["fireblast", "hiddenpowerrock", "nastyplot", "solarbeam", "substitute"], + "abilities": ["Drought"], "preferredTypes": ["Grass"] } ] }, "wigglytuff": { - "level": 93, + "level": 96, "sets": [ + { + "role": "Fast Support", + "movepool": ["doubleedge", "protect", "thunderwave", "toxic", "wish"], + "abilities": ["Frisk"] + }, { "role": "Bulky Support", - "movepool": ["bodyslam", "doubleedge", "fireblast", "healbell", "protect", "stealthrock", "thunderwave", "toxic", "wish"] + "movepool": ["bodyslam", "fireblast", "healbell", "protect", "stealthrock", "wish"], + "abilities": ["Frisk"] }, { "role": "Staller", - "movepool": ["protect", "seismictoss", "toxic", "wish"] + "movepool": ["protect", "seismictoss", "toxic", "wish"], + "abilities": ["Frisk"] } ] }, @@ -198,34 +251,44 @@ "sets": [ { "role": "Bulky Support", - "movepool": ["aromatherapy", "gigadrain", "hiddenpowerfire", "leechseed", "sleeppowder", "sludgebomb", "synthesis"] + "movepool": ["aromatherapy", "gigadrain", "hiddenpowerground", "leechseed", "sleeppowder", "sludgebomb", "synthesis"], + "abilities": ["Effect Spore"] } ] }, "parasect": { - "level": 95, + "level": 98, "sets": [ { "role": "Bulky Support", "movepool": ["aromatherapy", "leechseed", "seedbomb", "spore", "stunspore", "synthesis", "xscissor"], + "abilities": ["Dry Skin"], "preferredTypes": ["Bug"] }, { "role": "Bulky Attacker", - "movepool": ["aromatherapy", "leechseed", "seedbomb", "spore", "stunspore", "xscissor"] + "movepool": ["aromatherapy", "leechseed", "seedbomb", "spore", "stunspore", "xscissor"], + "abilities": ["Dry Skin"] + }, + { + "role": "Staller", + "movepool": ["leechseed", "protect", "spore", "xscissor"], + "abilities": ["Dry Skin"] } ] }, "venomoth": { - "level": 82, + "level": 81, "sets": [ { "role": "Bulky Setup", - "movepool": ["bugbuzz", "quiverdance", "roost", "sleeppowder"] + "movepool": ["bugbuzz", "quiverdance", "roost", "sleeppowder"], + "abilities": ["Tinted Lens"] }, { "role": "Setup Sweeper", - "movepool": ["bugbuzz", "quiverdance", "sleeppowder", "substitute"] + "movepool": ["bugbuzz", "quiverdance", "sleeppowder", "substitute"], + "abilities": ["Tinted Lens"] } ] }, @@ -234,7 +297,8 @@ "sets": [ { "role": "Fast Support", - "movepool": ["earthquake", "memento", "stealthrock", "stoneedge", "suckerpunch"] + "movepool": ["earthquake", "memento", "stealthrock", "stoneedge", "suckerpunch"], + "abilities": ["Arena Trap"] } ] }, @@ -243,26 +307,30 @@ "sets": [ { "role": "Fast Attacker", - "movepool": ["aerialace", "bite", "doubleedge", "fakeout", "hypnosis", "return", "seedbomb", "switcheroo", "taunt", "uturn"] + "movepool": ["bite", "doubleedge", "fakeout", "hypnosis", "return", "seedbomb", "taunt", "uturn"], + "abilities": ["Technician"], + "preferredTypes": ["Dark"] } ] }, "golduck": { - "level": 87, + "level": 88, "sets": [ { "role": "Fast Attacker", - "movepool": ["calmmind", "encore", "focusblast", "hydropump", "icebeam", "psyshock", "scald"], + "movepool": ["calmmind", "encore", "focusblast", "hydropump", "icebeam", "scald"], + "abilities": ["Cloud Nine", "Swift Swim"], "preferredTypes": ["Ice"] } ] }, "primeape": { - "level": 86, + "level": 85, "sets": [ { "role": "Fast Attacker", - "movepool": ["closecombat", "earthquake", "honeclaws", "icepunch", "stoneedge", "uturn"] + "movepool": ["closecombat", "earthquake", "honeclaws", "stoneedge", "uturn"], + "abilities": ["Defiant", "Vital Spirit"] } ] }, @@ -271,38 +339,44 @@ "sets": [ { "role": "Bulky Attacker", - "movepool": ["closecombat", "extremespeed", "flareblitz", "morningsun", "roar", "toxic", "wildcharge", "willowisp"] + "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": 85, + "level": 88, "sets": [ { "role": "Setup Sweeper", - "movepool": ["focusblast", "hydropump", "icepunch", "raindance"] + "movepool": ["focusblast", "hydropump", "icepunch", "raindance"], + "abilities": ["Swift Swim"] }, { "role": "Bulky Attacker", - "movepool": ["circlethrow", "rest", "scald", "sleeptalk"] + "movepool": ["circlethrow", "rest", "scald", "sleeptalk"], + "abilities": ["Water Absorb"] } ] }, "alakazam": { - "level": 79, + "level": 78, "sets": [ { "role": "Fast Attacker", - "movepool": ["counter", "focusblast", "hiddenpowerfire", "psychic", "psyshock", "shadowball"] + "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"] } ] @@ -312,7 +386,8 @@ "sets": [ { "role": "Bulky Attacker", - "movepool": ["bulkup", "bulletpunch", "dynamicpunch", "icepunch", "payback", "stoneedge"], + "movepool": ["bulletpunch", "dynamicpunch", "earthquake", "payback", "stoneedge", "toxic"], + "abilities": ["No Guard"], "preferredTypes": ["Rock"] } ] @@ -322,11 +397,13 @@ "sets": [ { "role": "Wallbreaker", - "movepool": ["hiddenpowerfire", "powerwhip", "sleeppowder", "sludgebomb", "suckerpunch"] + "movepool": ["hiddenpowerground", "powerwhip", "sleeppowder", "sludgebomb", "suckerpunch"], + "abilities": ["Chlorophyll"] }, { "role": "Setup Sweeper", - "movepool": ["powerwhip", "sludgebomb", "sunnyday", "weatherball"] + "movepool": ["powerwhip", "sludgebomb", "sunnyday", "weatherball"], + "abilities": ["Chlorophyll"] } ] }, @@ -335,7 +412,8 @@ "sets": [ { "role": "Bulky Support", - "movepool": ["haze", "icebeam", "rapidspin", "scald", "sludgebomb", "toxicspikes"] + "movepool": ["haze", "icebeam", "rapidspin", "scald", "sludgebomb", "toxicspikes"], + "abilities": ["Clear Body", "Liquid Ooze"] } ] }, @@ -344,20 +422,23 @@ "sets": [ { "role": "Bulky Attacker", - "movepool": ["earthquake", "explosion", "stealthrock", "stoneedge", "suckerpunch", "toxic"] + "movepool": ["earthquake", "explosion", "stealthrock", "stoneedge", "suckerpunch", "toxic"], + "abilities": ["Sturdy"] } ] }, "rapidash": { - "level": 88, + "level": 87, "sets": [ { "role": "Bulky Attacker", - "movepool": ["drillrun", "flareblitz", "morningsun", "wildcharge", "willowisp"] + "movepool": ["drillrun", "flareblitz", "morningsun", "wildcharge", "willowisp"], + "abilities": ["Flame Body", "Flash Fire"] }, { "role": "Wallbreaker", - "movepool": ["drillrun", "flareblitz", "megahorn", "morningsun", "wildcharge"] + "movepool": ["drillrun", "flareblitz", "megahorn", "morningsun", "wildcharge"], + "abilities": ["Flash Fire"] } ] }, @@ -366,15 +447,18 @@ "sets": [ { "role": "Bulky Support", - "movepool": ["fireblast", "icebeam", "psyshock", "scald", "slackoff", "thunderwave", "toxic"] + "movepool": ["fireblast", "icebeam", "psyshock", "scald", "slackoff", "thunderwave", "toxic"], + "abilities": ["Regenerator"] }, { - "role": "Bulky Setup", - "movepool": ["calmmind", "psyshock", "scald", "slackoff"] + "role": "Staller", + "movepool": ["calmmind", "psyshock", "scald", "slackoff"], + "abilities": ["Regenerator"] }, { "role": "Wallbreaker", "movepool": ["fireblast", "icebeam", "psyshock", "surf", "trick", "trickroom"], + "abilities": ["Regenerator"], "preferredTypes": ["Psychic"] } ] @@ -384,16 +468,18 @@ "sets": [ { "role": "Setup Sweeper", - "movepool": ["bravebird", "leafblade", "quickattack", "return", "swordsdance"] + "movepool": ["bravebird", "leafblade", "quickattack", "return", "swordsdance"], + "abilities": ["Defiant"] } ] }, "dodrio": { - "level": 87, + "level": 86, "sets": [ { "role": "Wallbreaker", - "movepool": ["bravebird", "pursuit", "quickattack", "return", "roost"] + "movepool": ["bravebird", "pursuit", "quickattack", "return", "roost"], + "abilities": ["Early Bird"] } ] }, @@ -402,97 +488,112 @@ "sets": [ { "role": "Bulky Attacker", - "movepool": ["encore", "icebeam", "rest", "sleeptalk", "surf", "toxic"] + "movepool": ["encore", "icebeam", "rest", "sleeptalk", "surf", "toxic"], + "abilities": ["Thick Fat"] }, { "role": "Staller", - "movepool": ["icebeam", "protect", "surf", "toxic"] + "movepool": ["icebeam", "protect", "surf", "toxic"], + "abilities": ["Thick Fat"] } ] }, "muk": { - "level": 90, + "level": 89, "sets": [ { "role": "Bulky Attacker", - "movepool": ["brickbreak", "curse", "firepunch", "icepunch", "poisonjab", "rest", "shadowsneak"] + "movepool": ["brickbreak", "curse", "icepunch", "poisonjab", "rest", "shadowsneak"], + "abilities": ["Poison Touch"], + "preferredTypes": ["Fighting"] } ] }, "cloyster": { - "level": 80, + "level": 79, "sets": [ { "role": "Setup Sweeper", - "movepool": ["hydropump", "iciclespear", "rockblast", "shellsmash"] + "movepool": ["hydropump", "iciclespear", "rockblast", "shellsmash"], + "abilities": ["Skill Link"] } ] }, "gengar": { - "level": 79, + "level": 78, "sets": [ { "role": "Fast Attacker", "movepool": ["focusblast", "painsplit", "shadowball", "sludgewave", "substitute", "trick", "willowisp"], + "abilities": ["Levitate"], "preferredTypes": ["Fighting"] } ] }, "hypno": { - "level": 91, + "level": 95, "sets": [ { "role": "Bulky Support", - "movepool": ["focusblast", "foulplay", "lightscreen", "protect", "psychic", "reflect", "thunderwave", "toxic", "wish"] + "movepool": ["focusblast", "foulplay", "protect", "psychic", "thunderwave", "toxic", "wish"], + "abilities": ["Insomnia"] }, { "role": "Staller", - "movepool": ["protect", "seismictoss", "toxic", "wish"] + "movepool": ["protect", "seismictoss", "toxic", "wish"], + "abilities": ["Insomnia"] } ] }, "kingler": { - "level": 90, + "level": 89, "sets": [ { "role": "Setup Sweeper", - "movepool": ["bodyslam", "crabhammer", "rockslide", "superpower", "swordsdance", "xscissor"] + "movepool": ["bodyslam", "crabhammer", "rockslide", "superpower", "swordsdance", "xscissor"], + "abilities": ["Hyper Cutter", "Sheer Force"] }, { "role": "Bulky Setup", - "movepool": ["agility", "crabhammer", "return", "swordsdance"] + "movepool": ["agility", "crabhammer", "return", "swordsdance"], + "abilities": ["Hyper Cutter"] } ] }, "electrode": { - "level": 87, + "level": 86, "sets": [ { "role": "Wallbreaker", - "movepool": ["foulplay", "hiddenpowergrass", "hiddenpowerice", "signalbeam", "taunt", "thunderbolt", "voltswitch"] + "movepool": ["foulplay", "hiddenpowerice", "signalbeam", "taunt", "thunderbolt", "voltswitch"], + "abilities": ["Aftermath", "Static"], + "preferredTypes": ["Ice"] }, { "role": "Fast Support", - "movepool": ["hiddenpowerice", "thunderbolt", "thunderwave", "toxic", "voltswitch"] + "movepool": ["hiddenpowerice", "thunderbolt", "thunderwave", "toxic", "voltswitch"], + "abilities": ["Aftermath", "Static"] } ] }, "exeggutor": { - "level": 87, + "level": 88, "sets": [ { "role": "Bulky Support", "movepool": ["gigadrain", "hiddenpowerfire", "leechseed", "psychic", "sleeppowder", "substitute"], + "abilities": ["Harvest"], "preferredTypes": ["Psychic"] } ] }, "marowak": { - "level": 88, + "level": 87, "sets": [ { "role": "Wallbreaker", "movepool": ["doubleedge", "earthquake", "firepunch", "stealthrock", "stoneedge", "swordsdance"], + "abilities": ["Battle Armor", "Rock Head"], "preferredTypes": ["Rock"] } ] @@ -502,24 +603,28 @@ "sets": [ { "role": "Fast Attacker", - "movepool": ["closecombat", "earthquake", "fakeout", "rapidspin", "stoneedge", "suckerpunch"] + "movepool": ["closecombat", "earthquake", "fakeout", "rapidspin", "stoneedge", "suckerpunch"], + "abilities": ["Unburden"] }, { "role": "Wallbreaker", - "movepool": ["earthquake", "highjumpkick", "machpunch", "stoneedge", "suckerpunch"] + "movepool": ["earthquake", "highjumpkick", "machpunch", "stoneedge", "suckerpunch"], + "abilities": ["Reckless"] } ] }, "hitmonchan": { - "level": 85, + "level": 86, "sets": [ { "role": "Spinner", - "movepool": ["drainpunch", "icepunch", "machpunch", "rapidspin", "stoneedge"] + "movepool": ["drainpunch", "icepunch", "machpunch", "rapidspin", "stoneedge"], + "abilities": ["Iron Fist"] }, { "role": "Bulky Attacker", - "movepool": ["bulkup", "drainpunch", "icepunch", "machpunch", "stoneedge"] + "movepool": ["bulkup", "drainpunch", "icepunch", "machpunch", "stoneedge"], + "abilities": ["Iron Fist"] } ] }, @@ -528,29 +633,28 @@ "sets": [ { "role": "Bulky Support", - "movepool": ["fireblast", "haze", "painsplit", "sludgebomb", "willowisp"] + "movepool": ["fireblast", "haze", "painsplit", "sludgebomb", "willowisp"], + "abilities": ["Levitate"] } ] }, "rhydon": { - "level": 84, + "level": 83, "sets": [ { "role": "Bulky Attacker", - "movepool": ["earthquake", "megahorn", "stealthrock", "stoneedge", "toxic"] + "movepool": ["earthquake", "megahorn", "stealthrock", "stoneedge", "swordsdance", "toxic"], + "abilities": ["Lightning Rod"] } ] }, "chansey": { - "level": 82, + "level": 83, "sets": [ { "role": "Staller", - "movepool": ["aromatherapy", "seismictoss", "softboiled", "stealthrock", "thunderwave", "toxic"] - }, - { - "role": "Bulky Support", - "movepool": ["protect", "seismictoss", "toxic", "wish"] + "movepool": ["aromatherapy", "seismictoss", "softboiled", "stealthrock", "thunderwave", "toxic", "wish"], + "abilities": ["Natural Cure"] } ] }, @@ -559,33 +663,43 @@ "sets": [ { "role": "Bulky Support", - "movepool": ["doubleedge", "drainpunch", "earthquake", "fakeout", "return", "suckerpunch"] + "movepool": ["doubleedge", "drainpunch", "earthquake", "fakeout", "return", "suckerpunch"], + "abilities": ["Scrappy"] }, { "role": "Bulky Attacker", - "movepool": ["bodyslam", "drainpunch", "protect", "return", "wish"] + "movepool": ["bodyslam", "drainpunch", "protect", "return", "wish"], + "abilities": ["Scrappy"] } ] }, "seaking": { - "level": 91, + "level": 93, "sets": [ { "role": "Fast Attacker", - "movepool": ["drillrun", "icebeam", "megahorn", "raindance", "return", "waterfall"] + "movepool": ["drillrun", "icebeam", "megahorn", "return", "waterfall"], + "abilities": ["Lightning Rod"] + }, + { + "role": "Setup Sweeper", + "movepool": ["drillrun", "icebeam", "megahorn", "raindance", "return", "waterfall"], + "abilities": ["Swift Swim"] } ] }, "starmie": { - "level": 80, + "level": 79, "sets": [ { "role": "Wallbreaker", - "movepool": ["hydropump", "icebeam", "psyshock", "recover", "thunderbolt"] + "movepool": ["hydropump", "icebeam", "psyshock", "recover", "thunderbolt"], + "abilities": ["Analytic"] }, { "role": "Bulky Support", - "movepool": ["icebeam", "psyshock", "rapidspin", "recover", "scald", "thunderwave"] + "movepool": ["icebeam", "psyshock", "rapidspin", "recover", "scald", "thunderwave"], + "abilities": ["Natural Cure"] } ] }, @@ -595,16 +709,18 @@ { "role": "Setup Sweeper", "movepool": ["encore", "focusblast", "nastyplot", "psychic", "shadowball", "substitute"], + "abilities": ["Filter"], "preferredTypes": ["Fighting"] } ] }, "scyther": { - "level": 83, + "level": 82, "sets": [ { "role": "Setup Sweeper", - "movepool": ["aerialace", "brickbreak", "bugbite", "roost", "swordsdance"] + "movepool": ["aerialace", "brickbreak", "bugbite", "roost", "swordsdance"], + "abilities": ["Technician"] } ] }, @@ -613,49 +729,50 @@ "sets": [ { "role": "Fast Attacker", - "movepool": ["focusblast", "icebeam", "lovelykiss", "psychic", "psyshock", "trick"] + "movepool": ["focusblast", "icebeam", "lovelykiss", "psychic", "psyshock", "trick"], + "abilities": ["Dry Skin"] }, { "role": "Setup Sweeper", - "movepool": ["focusblast", "icebeam", "lovelykiss", "nastyplot", "psyshock", "substitute"] + "movepool": ["focusblast", "icebeam", "lovelykiss", "nastyplot", "psyshock"], + "abilities": ["Dry Skin"] } ] }, "pinsir": { - "level": 86, + "level": 87, "sets": [ - { - "role": "Bulky Attacker", - "movepool": ["closecombat", "earthquake", "stealthrock", "stoneedge", "xscissor"], - "preferredTypes": ["Rock"] - }, { "role": "Fast Attacker", - "movepool": ["closecombat", "earthquake", "quickattack", "stoneedge", "swordsdance", "xscissor"], - "preferredTypes": ["Ground"] + "movepool": ["closecombat", "earthquake", "stealthrock", "stoneedge", "swordsdance", "xscissor"], + "abilities": ["Mold Breaker", "Moxie"], + "preferredTypes": ["Rock"] } ] }, "tauros": { - "level": 83, + "level": 81, "sets": [ { "role": "Wallbreaker", "movepool": ["bodyslam", "earthquake", "fireblast", "rockslide", "zenheadbutt"], + "abilities": ["Sheer Force"], "preferredTypes": ["Ground"] }, { "role": "Fast Attacker", - "movepool": ["doubleedge", "earthquake", "stoneedge", "zenheadbutt"] + "movepool": ["doubleedge", "earthquake", "stoneedge", "zenheadbutt"], + "abilities": ["Intimidate"] } ] }, "gyarados": { - "level": 78, + "level": 77, "sets": [ { "role": "Setup Sweeper", - "movepool": ["dragondance", "earthquake", "stoneedge", "substitute", "waterfall"] + "movepool": ["dragondance", "earthquake", "stoneedge", "substitute", "waterfall"], + "abilities": ["Intimidate", "Moxie"] } ] }, @@ -664,11 +781,13 @@ "sets": [ { "role": "Bulky Support", - "movepool": ["healbell", "hydropump", "icebeam", "thunderbolt", "toxic"] + "movepool": ["healbell", "hydropump", "icebeam", "thunderbolt", "toxic"], + "abilities": ["Water Absorb"] }, { "role": "Staller", - "movepool": ["hydropump", "icebeam", "protect", "toxic"] + "movepool": ["hydropump", "icebeam", "protect", "toxic"], + "abilities": ["Water Absorb"] } ] }, @@ -677,20 +796,23 @@ "sets": [ { "role": "Fast Support", - "movepool": ["transform"] + "movepool": ["transform"], + "abilities": ["Imposter"] } ] }, "vaporeon": { - "level": 82, + "level": 83, "sets": [ { "role": "Bulky Support", - "movepool": ["healbell", "icebeam", "protect", "scald", "wish"] + "movepool": ["healbell", "icebeam", "protect", "scald", "wish"], + "abilities": ["Water Absorb"] }, { "role": "Staller", - "movepool": ["protect", "scald", "toxic", "wish"] + "movepool": ["protect", "scald", "toxic", "wish"], + "abilities": ["Water Absorb"] } ] }, @@ -699,7 +821,8 @@ "sets": [ { "role": "Fast Attacker", - "movepool": ["hiddenpowerice", "signalbeam", "thunderbolt", "voltswitch"] + "movepool": ["hiddenpowerice", "signalbeam", "thunderbolt", "voltswitch"], + "abilities": ["Volt Absorb"] } ] }, @@ -708,50 +831,53 @@ "sets": [ { "role": "Setup Sweeper", - "movepool": ["facade", "flamecharge", "rest", "sleeptalk"] + "movepool": ["facade", "flamecharge", "rest", "sleeptalk"], + "abilities": ["Guts"] }, { "role": "Wallbreaker", - "movepool": ["facade", "flamecharge", "protect", "superpower"] - }, - { - "role": "Staller", - "movepool": ["lavaplume", "protect", "toxic", "wish"] + "movepool": ["facade", "flamecharge", "protect", "superpower"], + "abilities": ["Guts"] } ] }, "omastar": { - "level": 81, + "level": 80, "sets": [ { "role": "Setup Sweeper", - "movepool": ["hiddenpowergrass", "hydropump", "icebeam", "shellsmash", "surf"] + "movepool": ["hiddenpowergrass", "hydropump", "icebeam", "shellsmash", "surf"], + "abilities": ["Shell Armor", "Swift Swim"] } ] }, "kabutops": { - "level": 85, + "level": 86, "sets": [ { "role": "Spinner", - "movepool": ["aquajet", "rapidspin", "stealthrock", "stoneedge", "superpower", "waterfall"] + "movepool": ["aquajet", "rapidspin", "stealthrock", "stoneedge", "superpower", "waterfall"], + "abilities": ["Battle Armor", "Swift Swim"] }, { "role": "Fast Attacker", - "movepool": ["aquajet", "stealthrock", "stoneedge", "superpower", "swordsdance", "waterfall"] + "movepool": ["aquajet", "stealthrock", "stoneedge", "superpower", "swordsdance", "waterfall"], + "abilities": ["Battle Armor", "Swift Swim"] } ] }, "aerodactyl": { - "level": 83, + "level": 81, "sets": [ { "role": "Bulky Attacker", - "movepool": ["earthquake", "roost", "stealthrock", "stoneedge", "taunt", "toxic"] + "movepool": ["earthquake", "roost", "stealthrock", "stoneedge", "taunt", "toxic"], + "abilities": ["Unnerve"] }, { "role": "Fast Support", - "movepool": ["aquatail", "doubleedge", "earthquake", "pursuit", "roost", "stealthrock", "stoneedge"], + "movepool": ["aerialace", "aquatail", "earthquake", "pursuit", "roost", "stealthrock", "stoneedge"], + "abilities": ["Unnerve"], "preferredTypes": ["Ground"] } ] @@ -761,28 +887,33 @@ "sets": [ { "role": "Bulky Support", - "movepool": ["bodyslam", "crunch", "earthquake", "rest", "sleeptalk"] + "movepool": ["bodyslam", "crunch", "earthquake", "rest", "sleeptalk"], + "abilities": ["Thick Fat"] }, { "role": "Bulky Setup", - "movepool": ["bodyslam", "curse", "rest", "sleeptalk"] + "movepool": ["bodyslam", "curse", "rest", "sleeptalk"], + "abilities": ["Thick Fat"] }, { "role": "Bulky Attacker", - "movepool": ["bodyslam", "curse", "earthquake", "rest"] + "movepool": ["bodyslam", "curse", "earthquake", "rest"], + "abilities": ["Thick Fat"] } ] }, "articuno": { - "level": 84, + "level": 83, "sets": [ { "role": "Staller", - "movepool": ["icebeam", "roost", "substitute", "toxic"] + "movepool": ["icebeam", "roost", "substitute", "toxic"], + "abilities": ["Pressure"] }, { "role": "Bulky Support", - "movepool": ["hurricane", "icebeam", "roost", "substitute", "toxic"] + "movepool": ["hurricane", "icebeam", "roost", "substitute", "toxic"], + "abilities": ["Pressure"] } ] }, @@ -791,7 +922,8 @@ "sets": [ { "role": "Bulky Support", - "movepool": ["heatwave", "hiddenpowerice", "roost", "substitute", "thunderbolt", "toxic", "uturn"] + "movepool": ["heatwave", "hiddenpowerice", "roost", "substitute", "thunderbolt", "toxic", "uturn"], + "abilities": ["Pressure"] } ] }, @@ -800,33 +932,39 @@ "sets": [ { "role": "Bulky Attacker", - "movepool": ["fireblast", "hiddenpowergrass", "hurricane", "roost", "substitute", "toxic", "uturn", "willowisp"] + "movepool": ["fireblast", "hiddenpowergrass", "hurricane", "roost", "substitute", "toxic", "uturn", "willowisp"], + "abilities": ["Pressure"] } ] }, "dragonair": { - "level": 89, + "level": 87, "sets": [ { "role": "Setup Sweeper", - "movepool": ["dragondance", "outrage", "rest", "waterfall"] + "movepool": ["dragondance", "outrage", "rest", "waterfall"], + "abilities": ["Shed Skin"] }, { "role": "Bulky Setup", - "movepool": ["dragondance", "outrage", "rest", "sleeptalk"] + "movepool": ["dragondance", "outrage", "rest", "sleeptalk"], + "abilities": ["Marvel Scale", "Shed Skin"] } ] }, "dragonite": { - "level": 75, + "level": 74, "sets": [ { - "role": "Fast Attacker", - "movepool": ["dragondance", "earthquake", "extremespeed", "firepunch", "outrage"] + "role": "Wallbreaker", + "movepool": ["earthquake", "extremespeed", "outrage", "superpower"], + "abilities": ["Multiscale"] }, { - "role": "Bulky Setup", - "movepool": ["dragonclaw", "dragondance", "earthquake", "firepunch", "roost"] + "role": "Setup Sweeper", + "movepool": ["dragondance", "earthquake", "firepunch", "outrage", "roost"], + "abilities": ["Multiscale"], + "preferredTypes": ["Ground"] } ] }, @@ -835,7 +973,8 @@ "sets": [ { "role": "Fast Attacker", - "movepool": ["aurasphere", "calmmind", "fireblast", "psystrike", "recover", "shadowball"] + "movepool": ["aurasphere", "calmmind", "fireblast", "psystrike", "recover", "shadowball"], + "abilities": ["Unnerve"] } ] }, @@ -844,29 +983,33 @@ "sets": [ { "role": "Bulky Support", - "movepool": ["psychic", "softboiled", "stealthrock", "taunt", "uturn", "willowisp"] + "movepool": ["psychic", "softboiled", "stealthrock", "taunt", "uturn", "willowisp"], + "abilities": ["Synchronize"] }, { "role": "Setup Sweeper", - "movepool": ["aurasphere", "earthpower", "fireblast", "nastyplot", "psychic", "psyshock", "softboiled"] + "movepool": ["aurasphere", "earthpower", "fireblast", "nastyplot", "psychic", "psyshock", "softboiled"], + "abilities": ["Synchronize"] } ] }, "meganium": { - "level": 90, + "level": 91, "sets": [ { - "role": "Bulky Support", - "movepool": ["aromatherapy", "dragontail", "gigadrain", "leechseed", "lightscreen", "reflect", "synthesis", "toxic"] + "role": "Staller", + "movepool": ["aromatherapy", "dragontail", "earthquake", "gigadrain", "leechseed", "synthesis", "toxic"], + "abilities": ["Overgrow"] } ] }, "typhlosion": { - "level": 82, + "level": 83, "sets": [ { "role": "Fast Attacker", - "movepool": ["eruption", "fireblast", "focusblast", "hiddenpowergrass", "hiddenpowerrock"] + "movepool": ["eruption", "fireblast", "focusblast", "hiddenpowergrass", "hiddenpowerrock"], + "abilities": ["Blaze"] } ] }, @@ -875,34 +1018,40 @@ "sets": [ { "role": "Setup Sweeper", - "movepool": ["dragondance", "earthquake", "icepunch", "superpower", "waterfall"], - "preferredTypes": ["Ice"] + "movepool": ["dragondance", "earthquake", "icepunch", "waterfall"], + "abilities": ["Torrent"] }, { "role": "Fast Attacker", - "movepool": ["aquajet", "earthquake", "icepunch", "superpower", "swordsdance", "waterfall"] + "movepool": ["aquajet", "return", "swordsdance", "waterfall"], + "abilities": ["Torrent"] + }, + { + "role": "Bulky Attacker", + "movepool": ["aquajet", "earthquake", "icepunch", "superpower", "waterfall"], + "abilities": ["Torrent"], + "preferredTypes": ["Ice"] } ] }, "furret": { - "level": 92, + "level": 93, "sets": [ { "role": "Wallbreaker", - "movepool": ["aquatail", "doubleedge", "firepunch", "shadowclaw", "trick", "uturn"] + "movepool": ["aquatail", "doubleedge", "firepunch", "shadowclaw", "trick", "uturn"], + "abilities": ["Frisk"] } ] }, "noctowl": { - "level": 95, + "level": 96, "sets": [ { "role": "Bulky Support", - "movepool": ["airslash", "heatwave", "hypervoice", "roost", "toxic", "whirlwind"] - }, - { - "role": "Staller", - "movepool": ["nightshade", "roost", "toxic", "whirlwind"] + "movepool": ["airslash", "heatwave", "hypervoice", "roost", "toxic", "whirlwind"], + "abilities": ["Tinted Lens"], + "preferredTypes": ["Normal"] } ] }, @@ -910,26 +1059,29 @@ "level": 100, "sets": [ { - "role": "Bulky Support", - "movepool": ["encore", "lightscreen", "reflect", "roost", "toxic", "uturn"] + "role": "Staller", + "movepool": ["acrobatics", "encore", "focusblast", "knockoff", "roost", "toxic"], + "abilities": ["Early Bird"] } ] }, "ariados": { - "level": 96, + "level": 97, "sets": [ { "role": "Bulky Support", - "movepool": ["poisonjab", "suckerpunch", "toxicspikes", "xscissor"] + "movepool": ["poisonjab", "suckerpunch", "toxicspikes", "xscissor"], + "abilities": ["Insomnia", "Swarm"] } ] }, "crobat": { - "level": 83, + "level": 81, "sets": [ { "role": "Bulky Support", - "movepool": ["bravebird", "heatwave", "roost", "superfang", "taunt", "toxic", "uturn"] + "movepool": ["bravebird", "heatwave", "hypnosis", "roost", "superfang", "taunt", "toxic", "uturn"], + "abilities": ["Inner Focus"] } ] }, @@ -938,7 +1090,8 @@ "sets": [ { "role": "Bulky Attacker", - "movepool": ["healbell", "icebeam", "scald", "thunderbolt", "thunderwave", "toxic", "voltswitch"] + "movepool": ["healbell", "icebeam", "scald", "thunderbolt", "thunderwave", "toxic", "voltswitch"], + "abilities": ["Volt Absorb"] } ] }, @@ -947,101 +1100,121 @@ "sets": [ { "role": "Bulky Setup", - "movepool": ["calmmind", "heatwave", "psychic", "roost"] + "movepool": ["calmmind", "heatwave", "psychic", "roost"], + "abilities": ["Magic Bounce"] }, { "role": "Bulky Support", - "movepool": ["heatwave", "psychic", "roost", "thunderwave", "toxic", "uturn"] + "movepool": ["heatwave", "psychic", "roost", "thunderwave", "toxic", "uturn"], + "abilities": ["Magic Bounce"] } ] }, "ampharos": { - "level": 87, + "level": 88, "sets": [ { "role": "Fast Attacker", - "movepool": ["agility", "focusblast", "hiddenpowerice", "thunderbolt", "voltswitch"] + "movepool": ["agility", "focusblast", "hiddenpowerice", "thunderbolt", "voltswitch"], + "abilities": ["Static"] }, { "role": "Bulky Attacker", - "movepool": ["focusblast", "healbell", "hiddenpowerice", "thunderbolt", "toxic", "voltswitch"] + "movepool": ["focusblast", "healbell", "hiddenpowerice", "thunderbolt", "toxic", "voltswitch"], + "abilities": ["Static"] } ] }, "bellossom": { - "level": 92, + "level": 94, "sets": [ { "role": "Bulky Support", - "movepool": ["gigadrain", "hiddenpowerfire", "hiddenpowerrock", "leafstorm", "leechseed", "sleeppowder", "stunspore", "synthesis"] + "movepool": ["gigadrain", "hiddenpowerfire", "hiddenpowerrock", "leafstorm", "leechseed", "sleeppowder", "stunspore", "synthesis"], + "abilities": ["Chlorophyll"] } ] }, "azumarill": { - "level": 85, + "level": 84, "sets": [ { "role": "Bulky Attacker", - "movepool": ["aquajet", "doubleedge", "icepunch", "superpower", "waterfall"] + "movepool": ["aquajet", "doubleedge", "icepunch", "superpower", "waterfall"], + "abilities": ["Huge Power"], + "preferredTypes": ["Ice"] }, { "role": "Bulky Setup", - "movepool": ["aquajet", "bellydrum", "return", "waterfall"] + "movepool": ["aquajet", "bellydrum", "return", "waterfall"], + "abilities": ["Huge Power"] } ] }, "sudowoodo": { - "level": 90, + "level": 92, "sets": [ { "role": "Bulky Attacker", "movepool": ["earthquake", "stealthrock", "stoneedge", "suckerpunch", "toxic", "woodhammer"], + "abilities": ["Rock Head"], "preferredTypes": ["Grass"] } ] }, "politoed": { - "level": 83, + "level": 84, "sets": [ { "role": "Bulky Attacker", "movepool": ["encore", "focusblast", "hiddenpowergrass", "hypnosis", "icebeam", "rest", "scald"], + "abilities": ["Drizzle"], "preferredTypes": ["Ice"] }, { "role": "Staller", - "movepool": ["encore", "icebeam", "protect", "scald", "toxic"] + "movepool": ["encore", "icebeam", "protect", "scald", "toxic"], + "abilities": ["Drizzle"] } ] }, "jumpluff": { - "level": 88, + "level": 84, "sets": [ { "role": "Fast Support", - "movepool": ["acrobatics", "encore", "sleeppowder", "uturn"] + "movepool": ["acrobatics", "encore", "sleeppowder", "uturn"], + "abilities": ["Chlorophyll"] }, { "role": "Staller", - "movepool": ["acrobatics", "leechseed", "protect", "substitute"] + "movepool": ["acrobatics", "leechseed", "sleeppowder", "substitute"], + "abilities": ["Chlorophyll"] } ] }, "sunflora": { - "level": 96, + "level": 100, "sets": [ { "role": "Wallbreaker", - "movepool": ["earthpower", "hiddenpowerfire", "hiddenpowerice", "hiddenpowerrock", "leafstorm", "sludgebomb"] + "movepool": ["earthpower", "hiddenpowerfire", "hiddenpowerice", "hiddenpowerrock", "leafstorm", "sludgebomb"], + "abilities": ["Chlorophyll", "Early Bird"] + }, + { + "role": "Setup Sweeper", + "movepool": ["earthpower", "hiddenpowerfire", "solarbeam", "sunnyday"], + "abilities": ["Chlorophyll"] } ] }, "quagsire": { - "level": 85, + "level": 86, "sets": [ { "role": "Bulky Attacker", - "movepool": ["earthquake", "icebeam", "recover", "scald", "toxic"] + "movepool": ["earthquake", "icebeam", "recover", "scald", "toxic"], + "abilities": ["Unaware"] } ] }, @@ -1050,7 +1223,8 @@ "sets": [ { "role": "Fast Attacker", - "movepool": ["calmmind", "hiddenpowerfire", "morningsun", "psychic", "psyshock", "signalbeam", "trick"] + "movepool": ["calmmind", "hiddenpowerfighting", "morningsun", "psychic", "psyshock", "signalbeam", "trick"], + "abilities": ["Magic Bounce"] } ] }, @@ -1059,20 +1233,23 @@ "sets": [ { "role": "Staller", - "movepool": ["foulplay", "protect", "toxic", "wish"] + "movepool": ["foulplay", "protect", "toxic", "wish"], + "abilities": ["Synchronize"] }, { "role": "Bulky Support", - "movepool": ["foulplay", "healbell", "moonlight", "toxic"] + "movepool": ["foulplay", "healbell", "moonlight", "toxic"], + "abilities": ["Synchronize"] } ] }, "murkrow": { - "level": 89, + "level": 88, "sets": [ { "role": "Bulky Support", - "movepool": ["bravebird", "foulplay", "haze", "roost", "taunt", "thunderwave"] + "movepool": ["bravebird", "foulplay", "haze", "roost", "taunt", "thunderwave"], + "abilities": ["Prankster"] } ] }, @@ -1081,11 +1258,13 @@ "sets": [ { "role": "Bulky Support", - "movepool": ["fireblast", "icebeam", "psyshock", "scald", "slackoff", "thunderwave", "toxic"] + "movepool": ["fireblast", "icebeam", "psyshock", "scald", "slackoff", "thunderwave", "toxic"], + "abilities": ["Regenerator"] }, { "role": "Wallbreaker", "movepool": ["fireblast", "icebeam", "psyshock", "surf", "trick", "trickroom"], + "abilities": ["Regenerator"], "preferredTypes": ["Psychic"] } ] @@ -1095,25 +1274,28 @@ "sets": [ { "role": "Wallbreaker", - "movepool": ["hiddenpowerpsychic"] + "movepool": ["hiddenpowerpsychic"], + "abilities": ["Levitate"] } ] }, "wobbuffet": { - "level": 87, + "level": 89, "sets": [ { "role": "Bulky Support", - "movepool": ["counter", "destinybond", "encore", "mirrorcoat"] + "movepool": ["counter", "destinybond", "encore", "mirrorcoat"], + "abilities": ["Shadow Tag"] } ] }, "girafarig": { - "level": 90, + "level": 92, "sets": [ { "role": "Setup Sweeper", - "movepool": ["calmmind", "hiddenpowerfire", "hypervoice", "psychic", "psyshock", "substitute", "thunderbolt"] + "movepool": ["calmmind", "hiddenpowerfighting", "hypervoice", "psychic", "psyshock", "substitute", "thunderbolt"], + "abilities": ["Sap Sipper"] } ] }, @@ -1122,7 +1304,8 @@ "sets": [ { "role": "Bulky Support", - "movepool": ["gyroball", "rapidspin", "spikes", "stealthrock", "toxic", "voltswitch"] + "movepool": ["earthquake", "rapidspin", "spikes", "stealthrock", "toxic", "voltswitch"], + "abilities": ["Sturdy"] } ] }, @@ -1131,20 +1314,23 @@ "sets": [ { "role": "Bulky Attacker", - "movepool": ["earthquake", "glare", "headbutt", "roost"] + "movepool": ["earthquake", "glare", "headbutt", "roost"], + "abilities": ["Serene Grace"] }, { "role": "Bulky Setup", - "movepool": ["bodyslam", "coil", "earthquake", "roost"] + "movepool": ["bodyslam", "coil", "earthquake", "roost"], + "abilities": ["Serene Grace"] } ] }, "gligar": { - "level": 83, + "level": 82, "sets": [ { "role": "Staller", - "movepool": ["earthquake", "roost", "stealthrock", "taunt", "toxic", "uturn"] + "movepool": ["earthquake", "roost", "stealthrock", "taunt", "toxic", "uturn"], + "abilities": ["Immunity"] } ] }, @@ -1154,24 +1340,28 @@ { "role": "Wallbreaker", "movepool": ["earthquake", "ironhead", "roar", "rockslide", "stealthrock", "toxic"], + "abilities": ["Sheer Force"], "preferredTypes": ["Steel"] }, { "role": "Staller", - "movepool": ["earthquake", "heavyslam", "protect", "toxic"] + "movepool": ["earthquake", "heavyslam", "protect", "toxic"], + "abilities": ["Sturdy"] }, { "role": "Bulky Support", - "movepool": ["earthquake", "heavyslam", "roar", "stealthrock", "toxic"] + "movepool": ["earthquake", "heavyslam", "roar", "stealthrock", "toxic"], + "abilities": ["Sturdy"] } ] }, "granbull": { - "level": 89, + "level": 90, "sets": [ { "role": "Bulky Attacker", - "movepool": ["closecombat", "crunch", "healbell", "return", "thunderwave"] + "movepool": ["closecombat", "crunch", "healbell", "return", "thunderwave"], + "abilities": ["Intimidate"] } ] }, @@ -1180,20 +1370,23 @@ "sets": [ { "role": "Fast Support", - "movepool": ["destinybond", "spikes", "taunt", "thunderwave", "toxicspikes", "waterfall"] + "movepool": ["destinybond", "spikes", "taunt", "thunderwave", "toxicspikes", "waterfall"], + "abilities": ["Intimidate"] } ] }, "scizor": { - "level": 80, + "level": 79, "sets": [ { "role": "Setup Sweeper", - "movepool": ["bugbite", "bulletpunch", "roost", "superpower", "swordsdance"] + "movepool": ["bugbite", "bulletpunch", "roost", "superpower", "swordsdance"], + "abilities": ["Technician"] }, { "role": "Fast Attacker", - "movepool": ["bulletpunch", "pursuit", "superpower", "uturn"] + "movepool": ["bulletpunch", "pursuit", "superpower", "uturn"], + "abilities": ["Technician"] } ] }, @@ -1202,24 +1395,24 @@ "sets": [ { "role": "Bulky Support", - "movepool": ["encore", "knockoff", "stealthrock", "toxic"] - }, - { - "role": "Staller", - "movepool": ["encore", "knockoff", "protect", "stealthrock", "toxic"] + "movepool": ["encore", "knockoff", "protect", "stealthrock", "toxic"], + "abilities": ["Sturdy"] } ] }, "heracross": { - "level": 81, + "level": 79, "sets": [ { "role": "Wallbreaker", - "movepool": ["closecombat", "facade", "megahorn", "nightslash"] + "movepool": ["closecombat", "facade", "megahorn", "nightslash"], + "abilities": ["Guts"] }, { "role": "Fast Attacker", - "movepool": ["closecombat", "earthquake", "megahorn", "nightslash", "stoneedge"] + "movepool": ["closecombat", "earthquake", "megahorn", "nightslash", "stoneedge"], + "abilities": ["Moxie"], + "preferredTypes": ["Rock"] } ] }, @@ -1228,34 +1421,38 @@ "sets": [ { "role": "Wallbreaker", - "movepool": ["closecombat", "crunch", "facade", "protect", "swordsdance"] + "movepool": ["closecombat", "crunch", "facade", "protect", "swordsdance"], + "abilities": ["Guts", "Quick Feet"] } ] }, "magcargo": { - "level": 93, + "level": 95, "sets": [ { "role": "Staller", - "movepool": ["hiddenpowerrock", "lavaplume", "recover", "stealthrock", "toxic"] + "movepool": ["hiddenpowerrock", "lavaplume", "recover", "stealthrock", "toxic"], + "abilities": ["Flame Body"] } ] }, "corsola": { - "level": 93, + "level": 96, "sets": [ { "role": "Bulky Support", - "movepool": ["powergem", "recover", "scald", "stealthrock", "toxic"] + "movepool": ["powergem", "recover", "scald", "stealthrock", "toxic"], + "abilities": ["Regenerator"] } ] }, "octillery": { - "level": 90, + "level": 91, "sets": [ { "role": "Bulky Attacker", - "movepool": ["energyball", "fireblast", "hydropump", "icebeam", "thunderwave"] + "movepool": ["energyball", "fireblast", "hydropump", "icebeam", "thunderwave"], + "abilities": ["Sniper"] } ] }, @@ -1264,7 +1461,8 @@ "sets": [ { "role": "Bulky Support", - "movepool": ["icebeam", "iceshard", "rapidspin", "seismictoss", "toxic"] + "movepool": ["icebeam", "iceshard", "rapidspin", "seismictoss", "toxic"], + "abilities": ["Insomnia", "Vital Spirit"] } ] }, @@ -1273,42 +1471,53 @@ "sets": [ { "role": "Bulky Support", - "movepool": ["airslash", "rest", "scald", "sleeptalk", "toxic"] + "movepool": ["airslash", "rest", "scald", "sleeptalk", "toxic"], + "abilities": ["Water Absorb"] }, { "role": "Setup Sweeper", - "movepool": ["airslash", "hydropump", "icebeam", "raindance"] + "movepool": ["airslash", "hydropump", "icebeam", "raindance"], + "abilities": ["Swift Swim"] } ] }, "skarmory": { - "level": 78, + "level": 76, "sets": [ { "role": "Bulky Support", - "movepool": ["bravebird", "roost", "spikes", "stealthrock", "whirlwind"] + "movepool": ["bravebird", "roost", "spikes", "stealthrock", "whirlwind"], + "abilities": ["Sturdy"] + }, + { + "role": "Staller", + "movepool": ["bravebird", "roost", "spikes", "stealthrock", "toxic"], + "abilities": ["Sturdy"] } ] }, "houndoom": { - "level": 82, + "level": 83, "sets": [ { "role": "Wallbreaker", - "movepool": ["darkpulse", "fireblast", "hiddenpowergrass", "nastyplot", "suckerpunch"] + "movepool": ["darkpulse", "fireblast", "hiddenpowergrass", "nastyplot", "suckerpunch"], + "abilities": ["Flash Fire"] } ] }, "kingdra": { - "level": 82, + "level": 81, "sets": [ { "role": "Bulky Setup", - "movepool": ["dragondance", "outrage", "rest", "substitute", "waterfall"] + "movepool": ["dragondance", "outrage", "rest", "substitute", "waterfall"], + "abilities": ["Sniper", "Swift Swim"] }, { "role": "Setup Sweeper", - "movepool": ["dracometeor", "hydropump", "icebeam", "raindance", "waterfall"] + "movepool": ["dracometeor", "hydropump", "icebeam", "raindance", "waterfall"], + "abilities": ["Swift Swim"] } ] }, @@ -1318,21 +1527,24 @@ { "role": "Spinner", "movepool": ["earthquake", "iceshard", "rapidspin", "stealthrock", "stoneedge", "toxic"], + "abilities": ["Sturdy"], "preferredTypes": ["Rock"] }, { "role": "Bulky Attacker", "movepool": ["earthquake", "gunkshot", "iceshard", "stealthrock", "stoneedge"], + "abilities": ["Sturdy"], "preferredTypes": ["Rock"] } ] }, "porygon2": { - "level": 82, + "level": 81, "sets": [ { "role": "Bulky Support", - "movepool": ["discharge", "icebeam", "recover", "toxic", "triattack"] + "movepool": ["discharge", "icebeam", "recover", "toxic", "triattack"], + "abilities": ["Download", "Trace"] } ] }, @@ -1341,7 +1553,9 @@ "sets": [ { "role": "Wallbreaker", - "movepool": ["doubleedge", "earthquake", "jumpkick", "megahorn", "suckerpunch"] + "movepool": ["doubleedge", "earthquake", "hypnosis", "jumpkick", "megahorn", "suckerpunch", "thunderwave"], + "abilities": ["Intimidate"], + "preferredTypes": ["Ground"] } ] }, @@ -1350,16 +1564,18 @@ "sets": [ { "role": "Fast Support", - "movepool": ["memento", "spikes", "spore", "stealthrock", "whirlwind"] + "movepool": ["memento", "spikes", "spore", "stealthrock", "whirlwind"], + "abilities": ["Own Tempo"] } ] }, "hitmontop": { - "level": 87, + "level": 88, "sets": [ { "role": "Bulky Support", - "movepool": ["closecombat", "earthquake", "rapidspin", "stoneedge", "suckerpunch", "toxic"] + "movepool": ["closecombat", "earthquake", "rapidspin", "stoneedge", "suckerpunch", "toxic"], + "abilities": ["Intimidate"] } ] }, @@ -1367,65 +1583,75 @@ "level": 83, "sets": [ { - "role": "Bulky Support", - "movepool": ["bodyslam", "earthquake", "healbell", "milkdrink", "stealthrock", "toxic"] - }, - { - "role": "Bulky Setup", - "movepool": ["bodyslam", "curse", "earthquake", "milkdrink"] + "role": "Bulky Attacker", + "movepool": ["bodyslam", "curse", "earthquake", "healbell", "milkdrink", "stealthrock", "toxic"], + "abilities": ["Sap Sipper", "Thick Fat"] } ] }, "blissey": { - "level": 83, + "level": 84, "sets": [ { "role": "Staller", - "movepool": ["aromatherapy", "seismictoss", "softboiled", "stealthrock", "thunderwave", "toxic"] + "movepool": ["aromatherapy", "seismictoss", "softboiled", "stealthrock", "thunderwave", "toxic"], + "abilities": ["Natural Cure"] }, { "role": "Bulky Support", - "movepool": ["protect", "seismictoss", "toxic", "wish"] + "movepool": ["protect", "seismictoss", "toxic", "wish"], + "abilities": ["Natural Cure"] } ] }, "raikou": { - "level": 78, + "level": 76, "sets": [ { "role": "Fast Attacker", - "movepool": ["aurasphere", "hiddenpowerice", "thunderbolt", "voltswitch"] + "movepool": ["aurasphere", "hiddenpowerice", "thunderbolt", "voltswitch"], + "abilities": ["Pressure"] }, { - "role": "Setup Sweeper", - "movepool": ["aurasphere", "calmmind", "hiddenpowerice", "substitute", "thunderbolt"] + "role": "Bulky Setup", + "movepool": ["aurasphere", "calmmind", "hiddenpowerice", "substitute", "thunderbolt"], + "abilities": ["Pressure"], + "preferredTypes": ["Ice"] } ] }, "entei": { - "level": 82, + "level": 80, "sets": [ { "role": "Wallbreaker", - "movepool": ["bulldoze", "extremespeed", "flareblitz", "hiddenpowergrass", "stoneedge"], - "preferredTypes": ["Normal"] + "movepool": ["bulldoze", "extremespeed", "flareblitz", "stoneedge"], + "abilities": ["Pressure"] + }, + { + "role": "Fast Attacker", + "movepool": ["extremespeed", "flareblitz", "hiddenpowergrass", "stoneedge"], + "abilities": ["Pressure"] } ] }, "suicune": { - "level": 82, + "level": 80, "sets": [ { "role": "Bulky Attacker", - "movepool": ["calmmind", "rest", "scald", "sleeptalk"] + "movepool": ["calmmind", "rest", "scald", "sleeptalk"], + "abilities": ["Pressure"] }, { "role": "Bulky Setup", - "movepool": ["calmmind", "hydropump", "icebeam", "rest", "scald", "substitute"] + "movepool": ["calmmind", "hydropump", "icebeam", "rest", "scald", "substitute"], + "abilities": ["Pressure"] }, { "role": "Staller", - "movepool": ["calmmind", "protect", "scald", "substitute"] + "movepool": ["calmmind", "protect", "scald", "substitute"], + "abilities": ["Pressure"] } ] }, @@ -1434,127 +1660,145 @@ "sets": [ { "role": "Bulky Attacker", - "movepool": ["crunch", "earthquake", "fireblast", "icebeam", "pursuit", "stealthrock", "stoneedge", "superpower"] + "movepool": ["crunch", "earthquake", "fireblast", "icebeam", "pursuit", "stealthrock", "stoneedge", "superpower"], + "abilities": ["Sand Stream"] }, { "role": "Bulky Setup", - "movepool": ["crunch", "dragondance", "earthquake", "firepunch", "icepunch", "stoneedge"] + "movepool": ["crunch", "dragondance", "earthquake", "firepunch", "icepunch", "stoneedge"], + "abilities": ["Sand Stream"] } ] }, "lugia": { - "level": 72, + "level": 71, "sets": [ { "role": "Staller", - "movepool": ["aeroblast", "earthquake", "roost", "substitute", "toxic", "whirlwind"] + "movepool": ["aeroblast", "earthquake", "roost", "substitute", "toxic", "whirlwind"], + "abilities": ["Multiscale"] } ] }, "hooh": { - "level": 73, + "level": 72, "sets": [ { "role": "Bulky Attacker", - "movepool": ["bravebird", "earthquake", "roost", "sacredfire", "substitute", "toxic"] + "movepool": ["bravebird", "earthquake", "roost", "sacredfire", "substitute", "toxic"], + "abilities": ["Regenerator"] } ] }, "celebi": { - "level": 80, + "level": 81, "sets": [ { "role": "Fast Attacker", - "movepool": ["earthpower", "gigadrain", "hiddenpowerfire", "leafstorm", "nastyplot", "psychic", "uturn"], + "movepool": ["earthpower", "gigadrain", "leafstorm", "nastyplot", "psychic", "uturn"], + "abilities": ["Natural Cure"], "preferredTypes": ["Psychic"] }, { "role": "Bulky Support", - "movepool": ["healbell", "leafstorm", "psychic", "recover", "stealthrock", "thunderwave", "uturn"] + "movepool": ["leafstorm", "psychic", "recover", "stealthrock", "thunderwave", "uturn"], + "abilities": ["Natural Cure"] }, { "role": "Bulky Setup", - "movepool": ["leafstorm", "nastyplot", "psychic", "recover"] + "movepool": ["leafstorm", "nastyplot", "psychic", "recover"], + "abilities": ["Natural Cure"] } ] }, "sceptile": { - "level": 83, + "level": 82, "sets": [ { "role": "Setup Sweeper", - "movepool": ["acrobatics", "earthquake", "leafblade", "swordsdance"] + "movepool": ["acrobatics", "earthquake", "leafblade", "swordsdance"], + "abilities": ["Unburden"] }, { "role": "Fast Attacker", - "movepool": ["earthquake", "focusblast", "gigadrain", "hiddenpowerfire", "hiddenpowerice", "leafstorm", "rockslide"] + "movepool": ["earthquake", "focusblast", "gigadrain", "hiddenpowerfire", "hiddenpowerice", "leafstorm", "rockslide"], + "abilities": ["Overgrow"] }, { "role": "Staller", - "movepool": ["gigadrain", "hiddenpowerfire", "hiddenpowerice", "leechseed", "substitute"] + "movepool": ["gigadrain", "hiddenpowerfire", "hiddenpowerice", "leechseed", "substitute"], + "abilities": ["Overgrow"] } ] }, "blaziken": { - "level": 74, + "level": 75, "sets": [ { "role": "Setup Sweeper", - "movepool": ["flareblitz", "highjumpkick", "protect", "stoneedge", "swordsdance"] + "movepool": ["flareblitz", "highjumpkick", "protect", "stoneedge", "swordsdance"], + "abilities": ["Speed Boost"] }, { "role": "Wallbreaker", - "movepool": ["fireblast", "highjumpkick", "protect", "stoneedge"] + "movepool": ["fireblast", "highjumpkick", "protect", "stoneedge"], + "abilities": ["Speed Boost"] } ] }, "swampert": { - "level": 81, + "level": 80, "sets": [ { "role": "Bulky Attacker", - "movepool": ["earthquake", "icebeam", "roar", "scald", "stealthrock", "toxic"] + "movepool": ["earthquake", "icebeam", "roar", "scald", "stealthrock", "toxic"], + "abilities": ["Torrent"] }, { "role": "Staller", - "movepool": ["earthquake", "protect", "scald", "toxic"] + "movepool": ["earthquake", "protect", "scald", "toxic"], + "abilities": ["Torrent"] } ] }, "mightyena": { - "level": 93, + "level": 95, "sets": [ { "role": "Fast Attacker", "movepool": ["crunch", "doubleedge", "firefang", "suckerpunch", "taunt"], + "abilities": ["Intimidate"], "preferredTypes": ["Fire"] } ] }, "linoone": { - "level": 85, + "level": 84, "sets": [ { "role": "Setup Sweeper", - "movepool": ["bellydrum", "extremespeed", "seedbomb", "shadowclaw"] + "movepool": ["bellydrum", "extremespeed", "seedbomb", "shadowclaw"], + "abilities": ["Quick Feet"] } ] }, "beautifly": { - "level": 96, + "level": 99, "sets": [ { "role": "Setup Sweeper", - "movepool": ["bugbuzz", "hiddenpowerground", "psychic", "quiverdance"] + "movepool": ["bugbuzz", "hiddenpowerground", "psychic", "quiverdance"], + "abilities": ["Swarm"] } ] }, "dustox": { - "level": 92, + "level": 93, "sets": [ { "role": "Bulky Setup", - "movepool": ["bugbuzz", "hiddenpowerground", "quiverdance", "roost", "sludgebomb"] + "movepool": ["bugbuzz", "hiddenpowerground", "quiverdance", "roost", "sludgebomb"], + "abilities": ["Shield Dust"] } ] }, @@ -1563,33 +1807,43 @@ "sets": [ { "role": "Setup Sweeper", - "movepool": ["gigadrain", "hydropump", "icebeam", "raindance"] + "movepool": ["gigadrain", "hydropump", "icebeam", "raindance"], + "abilities": ["Swift Swim"] }, { "role": "Wallbreaker", - "movepool": ["focusblast", "gigadrain", "hydropump", "icebeam", "scald"] + "movepool": ["gigadrain", "hydropump", "icebeam", "scald"], + "abilities": ["Swift Swim"] } ] }, "shiftry": { - "level": 88, + "level": 89, "sets": [ { "role": "Fast Attacker", - "movepool": ["darkpulse", "hiddenpowerfire", "leafstorm", "naturepower", "suckerpunch"] + "movepool": ["darkpulse", "hiddenpowerfire", "leafstorm", "naturepower", "suckerpunch"], + "abilities": ["Chlorophyll", "Early Bird"] }, { "role": "Setup Sweeper", - "movepool": ["naturepower", "seedbomb", "suckerpunch", "swordsdance"] + "movepool": ["naturepower", "seedbomb", "suckerpunch", "swordsdance"], + "abilities": ["Chlorophyll", "Early Bird"] } ] }, "swellow": { - "level": 85, + "level": 82, "sets": [ + { + "role": "Fast Attacker", + "movepool": ["bravebird", "facade", "protect", "uturn"], + "abilities": ["Guts"] + }, { "role": "Wallbreaker", - "movepool": ["bravebird", "facade", "protect", "quickattack", "uturn"] + "movepool": ["bravebird", "facade", "quickattack", "uturn"], + "abilities": ["Guts"] } ] }, @@ -1598,7 +1852,8 @@ "sets": [ { "role": "Bulky Attacker", - "movepool": ["hurricane", "icebeam", "roost", "scald", "toxic", "uturn"] + "movepool": ["hurricane", "roost", "scald", "toxic", "uturn"], + "abilities": ["Rain Dish"] } ] }, @@ -1608,115 +1863,130 @@ { "role": "Fast Attacker", "movepool": ["focusblast", "healingwish", "psychic", "shadowball", "thunderbolt", "trick"], + "abilities": ["Trace"], "preferredTypes": ["Fighting"] }, { "role": "Setup Sweeper", "movepool": ["calmmind", "focusblast", "psychic", "psyshock", "shadowball", "substitute", "willowisp"], + "abilities": ["Trace"], "preferredTypes": ["Fighting"] } ] }, "masquerain": { - "level": 91, + "level": 92, "sets": [ { "role": "Setup Sweeper", - "movepool": ["airslash", "bugbuzz", "hydropump", "quiverdance", "roost"] + "movepool": ["airslash", "bugbuzz", "hydropump", "quiverdance", "roost"], + "abilities": ["Intimidate"] } ] }, "breloom": { - "level": 80, + "level": 78, "sets": [ { "role": "Fast Attacker", - "movepool": ["bulletseed", "machpunch", "spore", "stoneedge", "swordsdance"] + "movepool": ["bulletseed", "machpunch", "spore", "stoneedge", "swordsdance"], + "abilities": ["Technician"] }, { "role": "Bulky Attacker", - "movepool": ["focuspunch", "spore", "stoneedge", "substitute"] + "movepool": ["focuspunch", "spore", "stoneedge", "substitute"], + "abilities": ["Poison Heal"] } ] }, "vigoroth": { - "level": 88, + "level": 87, "sets": [ { "role": "Bulky Setup", - "movepool": ["bodyslam", "bulkup", "earthquake", "nightslash", "return", "slackoff"] + "movepool": ["bodyslam", "bulkup", "earthquake", "nightslash", "return", "slackoff"], + "abilities": ["Vital Spirit"] } ] }, "slaking": { - "level": 85, + "level": 82, "sets": [ { "role": "Fast Attacker", - "movepool": ["earthquake", "firepunch", "gigaimpact", "nightslash", "retaliate"], - "preferredTypes": ["Ground"] + "movepool": ["earthquake", "gigaimpact", "nightslash", "retaliate"], + "abilities": ["Truant"] } ] }, "ninjask": { - "level": 90, + "level": 91, "sets": [ { "role": "Fast Attacker", - "movepool": ["aerialace", "nightslash", "swordsdance", "uturn", "xscissor"] + "movepool": ["aerialace", "nightslash", "swordsdance", "uturn", "xscissor"], + "abilities": ["Speed Boost"] }, { "role": "Setup Sweeper", - "movepool": ["aerialace", "substitute", "swordsdance", "xscissor"] + "movepool": ["aerialace", "substitute", "swordsdance", "xscissor"], + "abilities": ["Speed Boost"] } ] }, "shedinja": { - "level": 90, + "level": 92, "sets": [ { "role": "Setup Sweeper", - "movepool": ["shadowclaw", "shadowsneak", "swordsdance", "willowisp", "xscissor"] + "movepool": ["shadowclaw", "shadowsneak", "swordsdance", "willowisp", "xscissor"], + "abilities": ["Wonder Guard"] } ] }, "exploud": { - "level": 90, + "level": 92, "sets": [ { "role": "Wallbreaker", - "movepool": ["fireblast", "focusblast", "hypervoice", "icebeam", "surf"] + "movepool": ["fireblast", "focusblast", "hypervoice", "icebeam", "surf"], + "abilities": ["Scrappy"] }, { "role": "Bulky Attacker", - "movepool": ["doubleedge", "earthquake", "facade", "lowkick"] + "movepool": ["doubleedge", "earthquake", "facade", "lowkick"], + "abilities": ["Scrappy"] }, { "role": "Fast Attacker", - "movepool": ["earthquake", "fireblast", "focusblast", "return", "surf", "workup"] + "movepool": ["earthquake", "fireblast", "focusblast", "return", "surf", "workup"], + "abilities": ["Scrappy"] } ] }, "hariyama": { - "level": 85, + "level": 86, "sets": [ { "role": "Wallbreaker", - "movepool": ["bulletpunch", "closecombat", "facade", "fakeout", "stoneedge"] + "movepool": ["bulletpunch", "closecombat", "facade", "fakeout", "stoneedge"], + "abilities": ["Guts"] }, { "role": "Bulky Attacker", "movepool": ["bulkup", "bulletpunch", "closecombat", "earthquake", "stoneedge"], + "abilities": ["Thick Fat"], "preferredTypes": ["Rock"] } ] }, "delcatty": { - "level": 94, + "level": 97, "sets": [ { "role": "Fast Support", - "movepool": ["doubleedge", "fakeout", "healbell", "suckerpunch", "thunderwave", "toxic"] + "movepool": ["doubleedge", "fakeout", "healbell", "suckerpunch", "thunderwave", "toxic"], + "abilities": ["Wonder Skin"] } ] }, @@ -1725,20 +1995,29 @@ "sets": [ { "role": "Staller", - "movepool": ["foulplay", "recover", "taunt", "willowisp"] + "movepool": ["foulplay", "recover", "taunt", "willowisp"], + "abilities": ["Prankster"] }, { "role": "Bulky Support", - "movepool": ["recover", "seismictoss", "taunt", "toxic", "willowisp"] + "movepool": ["recover", "seismictoss", "taunt", "toxic", "willowisp"], + "abilities": ["Prankster"] } ] }, "mawile": { - "level": 93, + "level": 95, "sets": [ + { + "role": "Bulky Setup", + "movepool": ["firefang", "ironhead", "suckerpunch", "swordsdance", "thunderpunch"], + "abilities": ["Intimidate", "Sheer Force"], + "preferredTypes": ["Fire"] + }, { "role": "Bulky Attacker", - "movepool": ["firefang", "ironhead", "stealthrock", "suckerpunch", "swordsdance", "thunderpunch"], + "movepool": ["fireblast", "ironhead", "stealthrock", "suckerpunch", "thunderpunch"], + "abilities": ["Intimidate", "Sheer Force"], "preferredTypes": ["Fire"] } ] @@ -1749,6 +2028,7 @@ { "role": "Wallbreaker", "movepool": ["aquatail", "earthquake", "headsmash", "heavyslam", "rockpolish", "stealthrock", "thunderwave"], + "abilities": ["Rock Head"], "preferredTypes": ["Ground"] } ] @@ -1758,17 +2038,18 @@ "sets": [ { "role": "Fast Attacker", - "movepool": ["bulletpunch", "highjumpkick", "icepunch", "trick", "zenheadbutt"] + "movepool": ["bulletpunch", "highjumpkick", "icepunch", "trick", "zenheadbutt"], + "abilities": ["Pure Power"] } ] }, "manectric": { - "level": 84, + "level": 83, "sets": [ { "role": "Wallbreaker", - "movepool": ["flamethrower", "hiddenpowerice", "overheat", "switcheroo", "thunderbolt", "voltswitch"], - "preferredTypes": ["Fire"] + "movepool": ["flamethrower", "hiddenpowerice", "overheat", "thunderbolt", "voltswitch"], + "abilities": ["Lightning Rod"] } ] }, @@ -1777,16 +2058,30 @@ "sets": [ { "role": "Bulky Setup", - "movepool": ["encore", "hiddenpowerice", "nastyplot", "substitute", "thunderbolt"] + "movepool": ["encore", "hiddenpowerice", "nastyplot", "substitute", "thunderbolt"], + "abilities": ["Plus"], + "preferredTypes": ["Ice"] + }, + { + "role": "Setup Sweeper", + "movepool": ["grassknot", "hiddenpowerice", "nastyplot", "thunderbolt"], + "abilities": ["Plus"] } ] }, "minun": { - "level": 90, + "level": 92, "sets": [ { "role": "Bulky Setup", - "movepool": ["encore", "hiddenpowerice", "nastyplot", "substitute", "thunderbolt"] + "movepool": ["encore", "hiddenpowerice", "nastyplot", "substitute", "thunderbolt"], + "abilities": ["Minus"], + "preferredTypes": ["Ice"] + }, + { + "role": "Setup Sweeper", + "movepool": ["grassknot", "hiddenpowerice", "nastyplot", "thunderbolt"], + "abilities": ["Minus"] } ] }, @@ -1795,7 +2090,8 @@ "sets": [ { "role": "Bulky Support", - "movepool": ["encore", "roost", "thunderwave", "uturn"] + "movepool": ["encore", "roost", "thunderwave", "uturn"], + "abilities": ["Prankster"] } ] }, @@ -1804,16 +2100,24 @@ "sets": [ { "role": "Bulky Support", - "movepool": ["bugbuzz", "encore", "roost", "thunderwave", "wish"] + "movepool": ["bugbuzz", "encore", "roost", "thunderwave"], + "abilities": ["Prankster"] } ] }, "swalot": { - "level": 92, + "level": 93, "sets": [ { - "role": "Bulky Support", - "movepool": ["earthquake", "encore", "icebeam", "painsplit", "sludgebomb", "toxic", "yawn"] + "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"] } ] }, @@ -1822,16 +2126,18 @@ "sets": [ { "role": "Staller", - "movepool": ["crunch", "earthquake", "hydropump", "icebeam", "protect"] + "movepool": ["crunch", "earthquake", "hydropump", "icebeam", "protect"], + "abilities": ["Speed Boost"] } ] }, "wailord": { - "level": 90, + "level": 89, "sets": [ { "role": "Bulky Attacker", - "movepool": ["hiddenpowergrass", "hydropump", "icebeam", "waterspout"] + "movepool": ["hiddenpowergrass", "hydropump", "icebeam", "waterspout"], + "abilities": ["Water Veil"] } ] }, @@ -1840,16 +2146,18 @@ "sets": [ { "role": "Bulky Support", - "movepool": ["earthquake", "hiddenpowergrass", "lavaplume", "roar", "stealthrock", "toxic"] + "movepool": ["earthquake", "lavaplume", "roar", "stealthrock", "toxic"], + "abilities": ["Solid Rock"] } ] }, "torkoal": { - "level": 87, + "level": 88, "sets": [ { "role": "Bulky Support", - "movepool": ["earthquake", "lavaplume", "rapidspin", "stealthrock", "yawn"] + "movepool": ["earthquake", "lavaplume", "rapidspin", "stealthrock", "yawn"], + "abilities": ["White Smoke"] } ] }, @@ -1858,16 +2166,23 @@ "sets": [ { "role": "Bulky Support", - "movepool": ["focusblast", "healbell", "lightscreen", "psychic", "reflect", "thunderwave", "toxic", "whirlwind"] + "movepool": ["focusblast", "healbell", "psychic", "thunderwave", "toxic", "whirlwind"], + "abilities": ["Thick Fat"] + }, + { + "role": "Wallbreaker", + "movepool": ["calmmind", "focusblast", "psychic", "psyshock", "shadowball", "trick"], + "abilities": ["Thick Fat"] } ] }, "spinda": { - "level": 99, + "level": 98, "sets": [ { "role": "Bulky Support", - "movepool": ["icepunch", "rapidspin", "return", "suckerpunch", "superpower"], + "movepool": ["feintattack", "rapidspin", "return", "suckerpunch", "superpower"], + "abilities": ["Contrary"], "preferredTypes": ["Fighting"] } ] @@ -1877,11 +2192,13 @@ "sets": [ { "role": "Fast Attacker", - "movepool": ["earthquake", "outrage", "stoneedge", "uturn"] + "movepool": ["earthquake", "outrage", "stoneedge", "uturn"], + "abilities": ["Levitate"] }, { "role": "Bulky Attacker", - "movepool": ["dracometeor", "earthquake", "fireblast", "roost", "uturn"] + "movepool": ["dracometeor", "earthquake", "fireblast", "roost", "uturn"], + "abilities": ["Levitate"] } ] }, @@ -1890,11 +2207,13 @@ "sets": [ { "role": "Wallbreaker", - "movepool": ["darkpulse", "focusblast", "gigadrain", "spikes", "suckerpunch"] + "movepool": ["darkpulse", "focusblast", "gigadrain", "spikes", "suckerpunch"], + "abilities": ["Water Absorb"] }, { "role": "Setup Sweeper", - "movepool": ["drainpunch", "seedbomb", "suckerpunch", "swordsdance"] + "movepool": ["drainpunch", "seedbomb", "suckerpunch", "swordsdance"], + "abilities": ["Water Absorb"] } ] }, @@ -1903,45 +2222,57 @@ "sets": [ { "role": "Bulky Setup", - "movepool": ["dragondance", "earthquake", "outrage", "roost"] + "movepool": ["dragondance", "earthquake", "outrage", "roost"], + "abilities": ["Natural Cure"] }, { - "role": "Bulky Support", - "movepool": ["dracometeor", "earthquake", "fireblast", "haze", "healbell", "roost", "toxic"] + "role": "Bulky Attacker", + "movepool": ["dracometeor", "earthquake", "fireblast", "haze", "healbell", "roost", "toxic"], + "abilities": ["Natural Cure"] } ] }, "zangoose": { - "level": 86, + "level": 85, "sets": [ { "role": "Wallbreaker", "movepool": ["closecombat", "facade", "nightslash", "quickattack", "swordsdance"], + "abilities": ["Toxic Boost"], "preferredTypes": ["Dark"] } ] }, "seviper": { - "level": 91, + "level": 92, "sets": [ { "role": "Fast Attacker", "movepool": ["earthquake", "flamethrower", "gigadrain", "sludgebomb", "suckerpunch", "switcheroo"], + "abilities": ["Shed Skin"], "preferredTypes": ["Ground"] } ] }, "lunatone": { - "level": 90, + "level": 93, "sets": [ { "role": "Wallbreaker", - "movepool": ["earthpower", "hiddenpowerrock", "icebeam", "moonlight", "psychic", "rockpolish"], + "movepool": ["earthpower", "icebeam", "moonlight", "psychic", "rockpolish"], + "abilities": ["Levitate"], "preferredTypes": ["Ground"] }, { "role": "Bulky Support", - "movepool": ["earthpower", "hiddenpowerrock", "moonlight", "psychic", "stealthrock", "toxic"] + "movepool": ["earthpower", "hiddenpowerrock", "moonlight", "psychic", "stealthrock", "toxic"], + "abilities": ["Levitate"], + "preferredTypes": ["Psychic"] + }, + { + "role": "Bulky Setup", + "movepool": ["calmmind", "earthpower", "moonlight", "psychic"], + "abilities": ["Levitate"] } ] }, @@ -1950,16 +2281,23 @@ "sets": [ { "role": "Bulky Support", - "movepool": ["earthquake", "morningsun", "stealthrock", "stoneedge", "willowisp"] + "movepool": ["earthquake", "morningsun", "stealthrock", "stoneedge", "willowisp"], + "abilities": ["Levitate"] } ] }, "whiscash": { - "level": 89, + "level": 90, "sets": [ { "role": "Setup Sweeper", - "movepool": ["dragondance", "earthquake", "stoneedge", "waterfall"] + "movepool": ["dragondance", "earthquake", "stoneedge", "waterfall"], + "abilities": ["Anticipation", "Hydration"] + }, + { + "role": "Staller", + "movepool": ["earthquake", "protect", "scald", "toxic"], + "abilities": ["Anticipation", "Hydration"] } ] }, @@ -1968,16 +2306,18 @@ "sets": [ { "role": "Setup Sweeper", - "movepool": ["crunch", "dragondance", "substitute", "superpower", "waterfall"] + "movepool": ["crunch", "dragondance", "superpower", "waterfall"], + "abilities": ["Adaptability"] } ] }, "claydol": { - "level": 83, + "level": 85, "sets": [ { "role": "Bulky Support", - "movepool": ["earthquake", "icebeam", "psychic", "rapidspin", "stealthrock", "toxic"] + "movepool": ["earthquake", "icebeam", "psychic", "rapidspin", "stealthrock", "toxic"], + "abilities": ["Levitate"] } ] }, @@ -1986,11 +2326,14 @@ "sets": [ { "role": "Bulky Setup", - "movepool": ["curse", "recover", "seedbomb", "stoneedge", "swordsdance"] + "movepool": ["curse", "earthquake", "recover", "seedbomb", "stoneedge", "swordsdance"], + "abilities": ["Storm Drain"] }, { "role": "Bulky Attacker", - "movepool": ["gigadrain", "recover", "stealthrock", "stoneedge", "toxic"] + "movepool": ["earthpower", "gigadrain", "recover", "stealthrock", "stoneedge", "toxic"], + "abilities": ["Storm Drain"], + "preferredTypes": ["Grass"] } ] }, @@ -1999,11 +2342,13 @@ "sets": [ { "role": "Spinner", - "movepool": ["earthquake", "rapidspin", "stealthrock", "stoneedge", "toxic", "xscissor"] + "movepool": ["earthquake", "rapidspin", "stealthrock", "stoneedge", "toxic", "xscissor"], + "abilities": ["Battle Armor", "Swift Swim"] }, { "role": "Bulky Attacker", - "movepool": ["aquatail", "earthquake", "stealthrock", "stoneedge", "swordsdance", "xscissor"] + "movepool": ["aquatail", "earthquake", "stealthrock", "stoneedge", "swordsdance", "xscissor"], + "abilities": ["Battle Armor", "Swift Swim"] } ] }, @@ -2012,34 +2357,38 @@ "sets": [ { "role": "Staller", - "movepool": ["dragontail", "haze", "icebeam", "recover", "scald", "toxic"] + "movepool": ["dragontail", "haze", "icebeam", "recover", "scald", "toxic"], + "abilities": ["Marvel Scale"] } ] }, "castform": { - "level": 99, + "level": 97, "sets": [ { "role": "Bulky Attacker", - "movepool": ["fireblast", "icebeam", "return", "scald", "thunderbolt", "thunderwave"] + "movepool": ["fireblast", "icebeam", "return", "scald", "thunderbolt", "thunderwave"], + "abilities": ["Forecast"] } ] }, "kecleon": { - "level": 92, + "level": 93, "sets": [ { "role": "Bulky Support", - "movepool": ["foulplay", "recover", "stealthrock", "thunderwave", "toxic"] + "movepool": ["foulplay", "recover", "stealthrock", "thunderwave", "toxic"], + "abilities": ["Color Change"] } ] }, "banette": { - "level": 93, + "level": 94, "sets": [ { "role": "Wallbreaker", - "movepool": ["hiddenpowerfighting", "shadowclaw", "shadowsneak", "thunderwave", "willowisp"] + "movepool": ["hiddenpowerfighting", "shadowclaw", "shadowsneak", "thunderwave", "willowisp"], + "abilities": ["Cursed Body", "Frisk", "Insomnia"] } ] }, @@ -2048,29 +2397,33 @@ "sets": [ { "role": "Bulky Support", - "movepool": ["nightshade", "rest", "sleeptalk", "willowisp"] + "movepool": ["rest", "seismictoss", "sleeptalk", "willowisp"], + "abilities": ["Pressure"] } ] }, "tropius": { - "level": 91, + "level": 94, "sets": [ { "role": "Staller", - "movepool": ["airslash", "leechseed", "protect", "substitute"] + "movepool": ["airslash", "leechseed", "protect", "substitute"], + "abilities": ["Harvest"] } ] }, "chimecho": { - "level": 93, + "level": 95, "sets": [ { "role": "Bulky Support", - "movepool": ["healbell", "psychic", "recover", "signalbeam", "thunderwave", "toxic"] + "movepool": ["healbell", "hiddenpowerfighting", "psychic", "recover", "thunderwave", "toxic"], + "abilities": ["Levitate"] }, { "role": "Bulky Setup", - "movepool": ["calmmind", "psychic", "recover", "signalbeam"] + "movepool": ["calmmind", "hiddenpowerfighting", "psychic", "psyshock", "recover", "signalbeam"], + "abilities": ["Levitate"] } ] }, @@ -2078,14 +2431,15 @@ "level": 87, "sets": [ { - "role": "Wallbreaker", - "movepool": ["fireblast", "nightslash", "psychocut", "pursuit", "suckerpunch", "superpower"], + "role": "Bulky Attacker", + "movepool": ["nightslash", "pursuit", "suckerpunch", "superpower", "zenheadbutt"], + "abilities": ["Justified"], "preferredTypes": ["Fighting"] }, { "role": "Setup Sweeper", - "movepool": ["nightslash", "psychocut", "suckerpunch", "superpower", "swordsdance"], - "preferredTypes": ["Fighting"] + "movepool": ["nightslash", "suckerpunch", "superpower", "swordsdance"], + "abilities": ["Justified"] } ] }, @@ -2094,20 +2448,24 @@ "sets": [ { "role": "Fast Support", - "movepool": ["earthquake", "explosion", "icebeam", "spikes", "taunt"] + "movepool": ["earthquake", "icebeam", "spikes", "superfang", "taunt"], + "abilities": ["Inner Focus"], + "preferredTypes": ["Ground"] } ] }, "walrein": { - "level": 89, + "level": 88, "sets": [ { "role": "Bulky Support", - "movepool": ["encore", "icebeam", "roar", "superfang", "surf", "toxic"] + "movepool": ["encore", "icebeam", "roar", "superfang", "surf", "toxic"], + "abilities": ["Thick Fat"] }, { "role": "Staller", - "movepool": ["icebeam", "protect", "surf", "toxic"] + "movepool": ["icebeam", "protect", "surf", "toxic"], + "abilities": ["Thick Fat"] } ] }, @@ -2116,7 +2474,8 @@ "sets": [ { "role": "Setup Sweeper", - "movepool": ["icebeam", "return", "shellsmash", "substitute", "suckerpunch", "waterfall"], + "movepool": ["icebeam", "return", "shellsmash", "suckerpunch", "waterfall"], + "abilities": ["Swift Swim", "Water Veil"], "preferredTypes": ["Ice"] } ] @@ -2126,8 +2485,8 @@ "sets": [ { "role": "Setup Sweeper", - "movepool": ["hiddenpowergrass", "hydropump", "icebeam", "shellsmash", "substitute"], - "preferredTypes": ["Ice"] + "movepool": ["hiddenpowergrass", "hydropump", "icebeam", "shellsmash"], + "abilities": ["Swift Swim"] } ] }, @@ -2136,11 +2495,13 @@ "sets": [ { "role": "Bulky Attacker", - "movepool": ["earthquake", "headsmash", "stealthrock", "toxic", "waterfall", "yawn"] + "movepool": ["earthquake", "headsmash", "stealthrock", "toxic", "waterfall", "yawn"], + "abilities": ["Rock Head"] }, { "role": "Wallbreaker", "movepool": ["doubleedge", "earthquake", "headsmash", "rockpolish", "waterfall"], + "abilities": ["Rock Head"], "preferredTypes": ["Ground"] } ] @@ -2150,31 +2511,35 @@ "sets": [ { "role": "Staller", - "movepool": ["charm", "protect", "scald", "toxic"] + "movepool": ["icebeam", "protect", "scald", "substitute", "toxic"], + "abilities": ["Hydration"] } ] }, "salamence": { - "level": 77, + "level": 75, "sets": [ { "role": "Setup Sweeper", "movepool": ["dragondance", "earthquake", "fireblast", "outrage", "roost"], + "abilities": ["Intimidate", "Moxie"], "preferredTypes": ["Ground"] } ] }, "metagross": { - "level": 80, + "level": 79, "sets": [ { "role": "Setup Sweeper", "movepool": ["agility", "earthquake", "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"] } ] @@ -2184,15 +2549,18 @@ "sets": [ { "role": "Bulky Setup", - "movepool": ["curse", "drainpunch", "rest", "stoneedge"] + "movepool": ["curse", "drainpunch", "rest", "stoneedge"], + "abilities": ["Clear Body"] }, { "role": "Bulky Support", - "movepool": ["drainpunch", "earthquake", "stealthrock", "stoneedge", "thunderwave", "toxic"] + "movepool": ["drainpunch", "earthquake", "stealthrock", "stoneedge", "thunderwave", "toxic"], + "abilities": ["Clear Body"] }, { "role": "Staller", - "movepool": ["drainpunch", "earthquake", "protect", "rockslide", "toxic"] + "movepool": ["drainpunch", "earthquake", "protect", "rockslide", "toxic"], + "abilities": ["Clear Body"] } ] }, @@ -2201,15 +2569,19 @@ "sets": [ { "role": "Staller", - "movepool": ["icebeam", "protect", "thunderbolt", "toxic"] + "movepool": ["icebeam", "protect", "thunderbolt", "toxic"], + "abilities": ["Clear Body"] }, { "role": "Bulky Attacker", - "movepool": ["icebeam", "rest", "sleeptalk", "thunderbolt"] + "movepool": ["focusblast", "icebeam", "rest", "sleeptalk", "thunderbolt", "thunderwave"], + "abilities": ["Clear Body"], + "preferredTypes": ["Electric"] }, { "role": "Setup Sweeper", - "movepool": ["focusblast", "icebeam", "rockpolish", "thunderbolt"] + "movepool": ["focusblast", "icebeam", "rockpolish", "thunderbolt"], + "abilities": ["Clear Body"] } ] }, @@ -2218,15 +2590,18 @@ "sets": [ { "role": "Bulky Setup", - "movepool": ["curse", "ironhead", "rest", "sleeptalk"] + "movepool": ["curse", "ironhead", "rest", "sleeptalk"], + "abilities": ["Clear Body"] }, { "role": "Bulky Support", - "movepool": ["rest", "seismictoss", "sleeptalk", "toxic"] + "movepool": ["rest", "seismictoss", "sleeptalk", "toxic"], + "abilities": ["Clear Body"] }, { "role": "Staller", - "movepool": ["protect", "seismictoss", "stealthrock", "toxic"] + "movepool": ["protect", "seismictoss", "stealthrock", "thunderwave", "toxic"], + "abilities": ["Clear Body"] } ] }, @@ -2235,7 +2610,8 @@ "sets": [ { "role": "Bulky Attacker", - "movepool": ["calmmind", "dracometeor", "psyshock", "roost"] + "movepool": ["calmmind", "dracometeor", "psyshock", "roost"], + "abilities": ["Levitate"] } ] }, @@ -2244,20 +2620,23 @@ "sets": [ { "role": "Bulky Attacker", - "movepool": ["calmmind", "dracometeor", "psyshock", "roost"] + "movepool": ["calmmind", "dracometeor", "psyshock", "roost"], + "abilities": ["Levitate"] } ] }, "kyogre": { - "level": 71, + "level": 69, "sets": [ { "role": "Fast Attacker", - "movepool": ["icebeam", "surf", "thunder", "waterspout"] + "movepool": ["icebeam", "surf", "thunder", "waterspout"], + "abilities": ["Drizzle"] }, { - "role": "Bulky Support", - "movepool": ["calmmind", "icebeam", "rest", "sleeptalk", "surf", "thunder"] + "role": "Bulky Setup", + "movepool": ["calmmind", "icebeam", "rest", "sleeptalk", "surf", "thunder"], + "abilities": ["Drizzle"] } ] }, @@ -2266,38 +2645,44 @@ "sets": [ { "role": "Bulky Support", - "movepool": ["dragontail", "earthquake", "lavaplume", "stealthrock", "stoneedge", "thunderwave"] + "movepool": ["dragontail", "earthquake", "lavaplume", "stealthrock", "stoneedge", "thunderwave"], + "abilities": ["Drought"] }, { "role": "Bulky Setup", - "movepool": ["earthquake", "firepunch", "rockpolish", "stoneedge", "swordsdance"] + "movepool": ["earthquake", "firepunch", "rockpolish", "stoneedge", "swordsdance"], + "abilities": ["Drought"] } ] }, "rayquaza": { - "level": 75, + "level": 73, "sets": [ { "role": "Wallbreaker", - "movepool": ["dracometeor", "earthquake", "extremespeed", "outrage", "vcreate"] + "movepool": ["dracometeor", "earthquake", "extremespeed", "outrage", "vcreate"], + "abilities": ["Air Lock"] }, { "role": "Setup Sweeper", - "movepool": ["dragondance", "earthquake", "extremespeed", "outrage", "vcreate"] + "movepool": ["dragondance", "earthquake", "extremespeed", "outrage", "vcreate"], + "abilities": ["Air Lock"] }, { "role": "Fast Attacker", "movepool": ["earthquake", "extremespeed", "outrage", "swordsdance", "vcreate"], + "abilities": ["Air Lock"], "preferredTypes": ["Normal"] } ] }, "jirachi": { - "level": 78, + "level": 77, "sets": [ { "role": "Bulky Support", - "movepool": ["bodyslam", "firepunch", "healingwish", "ironhead", "protect", "stealthrock", "toxic", "uturn", "wish"] + "movepool": ["bodyslam", "firepunch", "healingwish", "ironhead", "protect", "stealthrock", "toxic", "uturn", "wish"], + "abilities": ["Serene Grace"] } ] }, @@ -2306,18 +2691,28 @@ "sets": [ { "role": "Wallbreaker", - "movepool": ["darkpulse", "extremespeed", "hiddenpowerfire", "icebeam", "psychoboost", "stealthrock", "superpower"], - "preferredTypes": ["Fighting"] + "movepool": ["darkpulse", "extremespeed", "psychoboost", "superpower"], + "abilities": ["Pressure"] + }, + { + "role": "Fast Support", + "movepool": ["darkpulse", "icebeam", "psychoboost", "superpower"], + "abilities": ["Pressure"] } ] }, "deoxysattack": { - "level": 73, + "level": 72, "sets": [ { "role": "Wallbreaker", - "movepool": ["darkpulse", "extremespeed", "hiddenpowerfire", "icebeam", "psychoboost", "superpower"], - "preferredTypes": ["Fighting"] + "movepool": ["darkpulse", "extremespeed", "psychoboost", "superpower"], + "abilities": ["Pressure"] + }, + { + "role": "Fast Support", + "movepool": ["darkpulse", "icebeam", "psychoboost", "superpower"], + "abilities": ["Pressure"] } ] }, @@ -2326,16 +2721,18 @@ "sets": [ { "role": "Bulky Support", - "movepool": ["recover", "seismictoss", "spikes", "stealthrock", "taunt", "toxic"] + "movepool": ["recover", "seismictoss", "spikes", "stealthrock", "taunt", "toxic"], + "abilities": ["Pressure"] } ] }, "deoxysspeed": { - "level": 76, + "level": 78, "sets": [ { "role": "Fast Support", - "movepool": ["lightscreen", "psychoboost", "reflect", "spikes", "stealthrock", "superpower", "taunt"] + "movepool": ["psychoboost", "spikes", "stealthrock", "superpower", "taunt"], + "abilities": ["Pressure"] } ] }, @@ -2344,50 +2741,58 @@ "sets": [ { "role": "Bulky Attacker", - "movepool": ["earthquake", "stealthrock", "stoneedge", "synthesis", "woodhammer"] + "movepool": ["earthquake", "stealthrock", "stoneedge", "synthesis", "woodhammer"], + "abilities": ["Overgrow"] }, { "role": "Bulky Setup", - "movepool": ["earthquake", "rockpolish", "stoneedge", "woodhammer"] + "movepool": ["earthquake", "rockpolish", "stoneedge", "woodhammer"], + "abilities": ["Overgrow"] } ] }, "infernape": { - "level": 80, + "level": 79, "sets": [ { "role": "Wallbreaker", - "movepool": ["closecombat", "grassknot", "machpunch", "overheat", "stealthrock"] + "movepool": ["closecombat", "grassknot", "machpunch", "overheat", "stealthrock"], + "abilities": ["Blaze", "Iron Fist"] }, { "role": "Fast Attacker", - "movepool": ["closecombat", "flareblitz", "machpunch", "stoneedge", "swordsdance", "uturn"] + "movepool": ["closecombat", "flareblitz", "machpunch", "stoneedge", "swordsdance", "uturn"], + "abilities": ["Blaze", "Iron Fist"] } ] }, "empoleon": { - "level": 82, + "level": 80, "sets": [ { "role": "Staller", - "movepool": ["icebeam", "protect", "scald", "stealthrock", "toxic"] + "movepool": ["icebeam", "protect", "scald", "stealthrock", "toxic"], + "abilities": ["Torrent"] }, { "role": "Bulky Support", - "movepool": ["icebeam", "roar", "scald", "stealthrock", "toxic"] + "movepool": ["icebeam", "roar", "scald", "stealthrock", "toxic"], + "abilities": ["Torrent"] }, { "role": "Setup Sweeper", - "movepool": ["agility", "grassknot", "hydropump", "icebeam"] + "movepool": ["agility", "grassknot", "hydropump", "icebeam"], + "abilities": ["Torrent"] } ] }, "staraptor": { - "level": 81, + "level": 79, "sets": [ { "role": "Fast Attacker", "movepool": ["bravebird", "closecombat", "doubleedge", "quickattack", "uturn"], + "abilities": ["Reckless"], "preferredTypes": ["Fighting"] } ] @@ -2397,7 +2802,13 @@ "sets": [ { "role": "Setup Sweeper", - "movepool": ["curse", "quickattack", "return", "waterfall"] + "movepool": ["quickattack", "return", "waterfall", "workup"], + "abilities": ["Simple"] + }, + { + "role": "Bulky Setup", + "movepool": ["curse", "quickattack", "return", "waterfall"], + "abilities": ["Simple"] } ] }, @@ -2406,7 +2817,8 @@ "sets": [ { "role": "Setup Sweeper", - "movepool": ["aerialace", "brickbreak", "bugbite", "nightslash", "swordsdance"] + "movepool": ["aerialace", "brickbreak", "bugbite", "nightslash", "swordsdance"], + "abilities": ["Technician"] } ] }, @@ -2415,12 +2827,13 @@ "sets": [ { "role": "Wallbreaker", - "movepool": ["crunch", "facade", "icefang", "superpower", "wildcharge"], - "preferredTypes": ["Fighting"] + "movepool": ["crunch", "facade", "superpower", "wildcharge"], + "abilities": ["Guts"] }, { "role": "Bulky Attacker", "movepool": ["crunch", "icefang", "superpower", "voltswitch", "wildcharge"], + "abilities": ["Intimidate"], "preferredTypes": ["Fighting"] } ] @@ -2430,95 +2843,113 @@ "sets": [ { "role": "Fast Support", - "movepool": ["gigadrain", "hiddenpowerfire", "leafstorm", "sleeppowder", "sludgebomb", "spikes", "synthesis", "toxicspikes"] + "movepool": ["gigadrain", "hiddenpowerground", "leafstorm", "sleeppowder", "sludgebomb", "spikes", "synthesis", "toxicspikes"], + "abilities": ["Natural Cure"] } ] }, "rampardos": { - "level": 90, + "level": 88, "sets": [ { - "role": "Wallbreaker", - "movepool": ["crunch", "earthquake", "firepunch", "rockpolish", "rockslide"] + "role": "Setup Sweeper", + "movepool": ["earthquake", "firepunch", "rockpolish", "rockslide", "zenheadbutt"], + "abilities": ["Sheer Force"] }, { - "role": "Bulky Attacker", - "movepool": ["crunch", "earthquake", "firepunch", "headsmash", "superpower"] + "role": "Fast Attacker", + "movepool": ["earthquake", "firepunch", "headsmash", "rockslide"], + "abilities": ["Sheer Force"] } ] }, "bastiodon": { - "level": 89, + "level": 90, "sets": [ { "role": "Bulky Support", - "movepool": ["metalburst", "roar", "rockblast", "stealthrock", "toxic"] + "movepool": ["metalburst", "roar", "rockblast", "stealthrock", "toxic"], + "abilities": ["Sturdy"] }, { "role": "Staller", - "movepool": ["metalburst", "protect", "roar", "rockblast", "stealthrock", "toxic"] + "movepool": ["metalburst", "protect", "roar", "rockblast", "stealthrock", "toxic"], + "abilities": ["Sturdy"] } ] }, "wormadam": { - "level": 98, + "level": 100, "sets": [ { "role": "Bulky Attacker", - "movepool": ["hiddenpowerground", "hiddenpowerrock", "leafstorm", "signalbeam", "synthesis", "toxic"] + "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", "protect", "signalbeam", "synthesis", "toxic"] + "movepool": ["gigadrain", "hiddenpowerground", "protect", "toxic"], + "abilities": ["Anticipation", "Overcoat"] } ] }, "wormadamsandy": { - "level": 91, + "level": 92, "sets": [ { "role": "Staller", - "movepool": ["earthquake", "protect", "stealthrock", "toxic"] + "movepool": ["earthquake", "protect", "stealthrock", "suckerpunch", "toxic"], + "abilities": ["Anticipation"] } ] }, "wormadamtrash": { - "level": 90, + "level": 89, "sets": [ { "role": "Staller", - "movepool": ["flashcannon", "protect", "stealthrock", "toxic"] + "movepool": ["flashcannon", "protect", "stealthrock", "suckerpunch", "toxic"], + "abilities": ["Anticipation"] } ] }, "mothim": { - "level": 93, + "level": 94, "sets": [ { "role": "Setup Sweeper", - "movepool": ["airslash", "bugbuzz", "hiddenpowerground", "quiverdance", "substitute"] + "movepool": ["airslash", "bugbuzz", "hiddenpowerground", "quiverdance", "substitute"], + "abilities": ["Tinted Lens"] } ] }, "vespiquen": { - "level": 97, + "level": 98, "sets": [ { "role": "Staller", - "movepool": ["airslash", "roost", "toxic", "uturn"] + "movepool": ["acrobatics", "roost", "toxic", "uturn"], + "abilities": ["Pressure"] } ] }, "pachirisu": { - "level": 91, + "level": 93, "sets": [ { "role": "Bulky Support", - "movepool": ["superfang", "thunderbolt", "thunderwave", "toxic", "uturn"] + "movepool": ["superfang", "thunderbolt", "thunderwave", "toxic", "uturn"], + "abilities": ["Volt Absorb"] }, { "role": "Staller", - "movepool": ["protect", "thunderbolt", "toxic", "uturn"] + "movepool": ["protect", "thunderbolt", "toxic", "uturn"], + "abilities": ["Volt Absorb"] } ] }, @@ -2527,30 +2958,40 @@ "sets": [ { "role": "Fast Attacker", - "movepool": ["aquajet", "crunch", "icepunch", "lowkick", "switcheroo", "waterfall"] + "movepool": ["aquajet", "crunch", "icepunch", "lowkick", "switcheroo", "waterfall"], + "abilities": ["Water Veil"], + "preferredTypes": ["Ice"] }, { "role": "Setup Sweeper", - "movepool": ["aquajet", "bulkup", "crunch", "icepunch", "lowkick", "substitute", "waterfall"], + "movepool": ["bulkup", "crunch", "icepunch", "lowkick", "substitute", "waterfall"], + "abilities": ["Water Veil"], "preferredTypes": ["Ice"] } ] }, "cherrim": { - "level": 94, + "level": 95, "sets": [ { "role": "Fast Attacker", - "movepool": ["gigadrain", "healingwish", "hiddenpowerfire", "hiddenpowerrock", "naturepower", "synthesis"] + "movepool": ["gigadrain", "healingwish", "hiddenpowerfire", "hiddenpowerrock", "morningsun", "naturepower"], + "abilities": ["Flower Gift"] + }, + { + "role": "Staller", + "movepool": ["aromatherapy", "gigadrain", "leechseed", "morningsun", "naturepower", "toxic"], + "abilities": ["Flower Gift"] } ] }, "gastrodon": { - "level": 83, + "level": 84, "sets": [ { "role": "Bulky Support", - "movepool": ["clearsmog", "earthquake", "icebeam", "recover", "scald", "toxic"] + "movepool": ["clearsmog", "earthquake", "icebeam", "recover", "scald", "toxic"], + "abilities": ["Storm Drain"] } ] }, @@ -2559,16 +3000,18 @@ "sets": [ { "role": "Fast Attacker", - "movepool": ["fakeout", "lowkick", "pursuit", "return", "seedbomb", "switcheroo", "uturn"] + "movepool": ["fakeout", "lowkick", "payback", "pursuit", "return", "uturn"], + "abilities": ["Technician"] } ] }, "drifblim": { - "level": 84, + "level": 83, "sets": [ { "role": "Fast Attacker", - "movepool": ["acrobatics", "destinybond", "disable", "shadowball", "substitute", "thunderwave", "willowisp"] + "movepool": ["acrobatics", "destinybond", "disable", "shadowball", "substitute", "willowisp"], + "abilities": ["Unburden"] } ] }, @@ -2577,7 +3020,8 @@ "sets": [ { "role": "Wallbreaker", - "movepool": ["healingwish", "icepunch", "jumpkick", "return", "switcheroo"] + "movepool": ["healingwish", "icepunch", "jumpkick", "return", "switcheroo"], + "abilities": ["Limber"] } ] }, @@ -2586,11 +3030,13 @@ "sets": [ { "role": "Bulky Attacker", - "movepool": ["destinybond", "hiddenpowerfighting", "painsplit", "shadowball", "substitute", "taunt", "willowisp"] + "movepool": ["destinybond", "hiddenpowerfighting", "painsplit", "shadowball", "substitute", "taunt", "willowisp"], + "abilities": ["Levitate"] }, { "role": "Wallbreaker", - "movepool": ["hiddenpowerfighting", "nastyplot", "shadowball", "thunderbolt", "trick"] + "movepool": ["hiddenpowerfighting", "nastyplot", "shadowball", "thunderbolt", "trick"], + "abilities": ["Levitate"] } ] }, @@ -2599,7 +3045,8 @@ "sets": [ { "role": "Wallbreaker", - "movepool": ["bravebird", "heatwave", "pursuit", "roost", "suckerpunch", "superpower"] + "movepool": ["bravebird", "heatwave", "pursuit", "roost", "suckerpunch", "superpower"], + "abilities": ["Moxie"] } ] }, @@ -2608,11 +3055,13 @@ "sets": [ { "role": "Fast Support", - "movepool": ["fakeout", "hypnosis", "return", "shadowclaw", "uturn"] + "movepool": ["fakeout", "hypnosis", "return", "shadowclaw", "uturn"], + "abilities": ["Defiant", "Thick Fat"] }, { "role": "Setup Sweeper", - "movepool": ["honeclaws", "hypnosis", "irontail", "return"] + "movepool": ["honeclaws", "hypnosis", "irontail", "return"], + "abilities": ["Defiant", "Thick Fat"] } ] }, @@ -2621,46 +3070,53 @@ "sets": [ { "role": "Bulky Attacker", - "movepool": ["crunch", "fireblast", "poisonjab", "pursuit", "suckerpunch", "taunt"] + "movepool": ["crunch", "fireblast", "poisonjab", "pursuit", "suckerpunch", "taunt"], + "abilities": ["Aftermath"] } ] }, "bronzong": { - "level": 79, + "level": 80, "sets": [ { "role": "Bulky Support", - "movepool": ["earthquake", "hypnosis", "lightscreen", "psychic", "reflect", "stealthrock", "toxic"] + "movepool": ["earthquake", "hypnosis", "psychic", "stealthrock", "toxic"], + "abilities": ["Levitate"] }, { "role": "Staller", - "movepool": ["earthquake", "protect", "psychic", "toxic"] + "movepool": ["earthquake", "protect", "psychic", "toxic"], + "abilities": ["Levitate"] } ] }, "chatot": { - "level": 91, + "level": 93, "sets": [ { "role": "Wallbreaker", - "movepool": ["chatter", "heatwave", "hiddenpowerground", "hypervoice", "nastyplot", "uturn"] + "movepool": ["chatter", "heatwave", "hiddenpowerground", "hypervoice", "nastyplot", "uturn"], + "abilities": ["Tangled Feet"] }, { "role": "Setup Sweeper", - "movepool": ["chatter", "heatwave", "hiddenpowerground", "hypervoice", "nastyplot", "substitute"] + "movepool": ["chatter", "heatwave", "hiddenpowerground", "hypervoice", "nastyplot", "substitute"], + "abilities": ["Tangled Feet"] } ] }, "spiritomb": { - "level": 85, + "level": 86, "sets": [ { "role": "Bulky Setup", - "movepool": ["calmmind", "darkpulse", "rest", "sleeptalk"] + "movepool": ["calmmind", "darkpulse", "rest", "sleeptalk"], + "abilities": ["Pressure"] }, { "role": "Bulky Attacker", - "movepool": ["foulplay", "painsplit", "pursuit", "shadowsneak", "suckerpunch", "willowisp"] + "movepool": ["foulplay", "painsplit", "pursuit", "suckerpunch", "willowisp"], + "abilities": ["Pressure"] } ] }, @@ -2669,11 +3125,13 @@ "sets": [ { "role": "Fast Support", - "movepool": ["earthquake", "fireblast", "outrage", "stealthrock", "stoneedge"] + "movepool": ["earthquake", "fireblast", "outrage", "stealthrock", "stoneedge"], + "abilities": ["Rough Skin"] }, { "role": "Fast Attacker", - "movepool": ["earthquake", "firefang", "outrage", "stoneedge", "swordsdance"] + "movepool": ["earthquake", "firefang", "outrage", "stoneedge", "swordsdance"], + "abilities": ["Rough Skin"] } ] }, @@ -2682,12 +3140,14 @@ "sets": [ { "role": "Fast Attacker", - "movepool": ["closecombat", "crunch", "extremespeed", "icepunch", "swordsdance"], + "movepool": ["closecombat", "crunch", "extremespeed", "stoneedge", "swordsdance"], + "abilities": ["Justified"], "preferredTypes": ["Normal"] }, { "role": "Setup Sweeper", - "movepool": ["aurasphere", "darkpulse", "flashcannon", "nastyplot", "vacuumwave"] + "movepool": ["aurasphere", "flashcannon", "nastyplot", "vacuumwave"], + "abilities": ["Inner Focus"] } ] }, @@ -2696,39 +3156,44 @@ "sets": [ { "role": "Bulky Support", - "movepool": ["earthquake", "slackoff", "stealthrock", "stoneedge", "toxic", "whirlwind"] + "movepool": ["earthquake", "slackoff", "stealthrock", "stoneedge", "toxic", "whirlwind"], + "abilities": ["Sand Stream"] } ] }, "drapion": { - "level": 84, + "level": 85, "sets": [ { "role": "Fast Attacker", "movepool": ["aquatail", "crunch", "earthquake", "poisonjab", "pursuit", "swordsdance"], + "abilities": ["Battle Armor"], "preferredTypes": ["Ground"] }, { "role": "Bulky Support", - "movepool": ["crunch", "earthquake", "poisonjab", "taunt", "toxicspikes", "whirlwind"] + "movepool": ["crunch", "earthquake", "poisonjab", "taunt", "toxicspikes", "whirlwind"], + "abilities": ["Battle Armor"] } ] }, "toxicroak": { - "level": 82, + "level": 84, "sets": [ { "role": "Setup Sweeper", - "movepool": ["drainpunch", "icepunch", "poisonjab", "substitute", "suckerpunch", "swordsdance"] + "movepool": ["drainpunch", "earthquake", "icepunch", "poisonjab", "substitute", "suckerpunch", "swordsdance"], + "abilities": ["Dry Skin"] } ] }, "carnivine": { - "level": 95, + "level": 98, "sets": [ { "role": "Bulky Support", - "movepool": ["knockoff", "powerwhip", "sleeppowder", "synthesis"] + "movepool": ["knockoff", "powerwhip", "sleeppowder", "synthesis"], + "abilities": ["Levitate"] } ] }, @@ -2737,11 +3202,18 @@ "sets": [ { "role": "Bulky Support", - "movepool": ["icebeam", "scald", "toxic", "uturn"] + "movepool": ["icebeam", "scald", "toxic", "uturn"], + "abilities": ["Storm Drain"] }, { "role": "Staller", - "movepool": ["icebeam", "protect", "scald", "toxic", "uturn"] + "movepool": ["icebeam", "protect", "scald", "toxic", "uturn"], + "abilities": ["Storm Drain"] + }, + { + "role": "Bulky Attacker", + "movepool": ["hiddenpowergrass", "icebeam", "scald", "toxic"], + "abilities": ["Storm Drain"] } ] }, @@ -2750,8 +3222,8 @@ "sets": [ { "role": "Bulky Attacker", - "movepool": ["blizzard", "earthquake", "focusblast", "hiddenpowerfire", "iceshard", "woodhammer"], - "preferredTypes": ["Grass"] + "movepool": ["blizzard", "earthquake", "iceshard", "woodhammer"], + "abilities": ["Snow Warning"] } ] }, @@ -2760,7 +3232,8 @@ "sets": [ { "role": "Fast Attacker", - "movepool": ["icepunch", "iceshard", "lowkick", "nightslash", "pursuit", "swordsdance"] + "movepool": ["icepunch", "iceshard", "lowkick", "nightslash", "pursuit", "swordsdance"], + "abilities": ["Pressure"] } ] }, @@ -2769,7 +3242,13 @@ "sets": [ { "role": "Fast Attacker", - "movepool": ["flashcannon", "hiddenpowerfire", "hiddenpowerice", "thunderbolt", "voltswitch"] + "movepool": ["flashcannon", "hiddenpowerfire", "hiddenpowerground", "hiddenpowerice", "thunderbolt", "voltswitch"], + "abilities": ["Magnet Pull"] + }, + { + "role": "Staller", + "movepool": ["hiddenpowerice", "protect", "thunderbolt", "toxic"], + "abilities": ["Analytic"] } ] }, @@ -2778,34 +3257,39 @@ "sets": [ { "role": "Bulky Support", - "movepool": ["bodyslam", "healbell", "protect", "toxic", "wish"] + "movepool": ["bodyslam", "healbell", "protect", "toxic", "wish"], + "abilities": ["Cloud Nine"] }, { "role": "Bulky Setup", "movepool": ["bodyslam", "earthquake", "explosion", "powerwhip", "return", "swordsdance"], + "abilities": ["Cloud Nine"], "preferredTypes": ["Ground"] } ] }, "rhyperior": { - "level": 82, + "level": 81, "sets": [ { "role": "Bulky Attacker", - "movepool": ["earthquake", "icepunch", "megahorn", "rockpolish", "stoneedge", "swordsdance"] + "movepool": ["earthquake", "icepunch", "megahorn", "rockpolish", "stoneedge", "swordsdance"], + "abilities": ["Solid Rock"] } ] }, "tangrowth": { - "level": 85, + "level": 86, "sets": [ { "role": "Bulky Attacker", - "movepool": ["earthquake", "hiddenpowerfire", "leafstorm", "leechseed", "powerwhip", "rockslide", "sleeppowder", "synthesis"] + "movepool": ["earthquake", "hiddenpowerfire", "leafstorm", "leechseed", "morningsun", "powerwhip", "rockslide", "sleeppowder"], + "abilities": ["Regenerator"] }, { "role": "Bulky Support", - "movepool": ["earthquake", "hiddenpowerfire", "leafstorm", "powerwhip", "rockslide", "sleeppowder"] + "movepool": ["earthquake", "hiddenpowerfire", "leafstorm", "powerwhip", "rockslide", "sleeppowder"], + "abilities": ["Regenerator"] } ] }, @@ -2815,34 +3299,39 @@ { "role": "Fast Attacker", "movepool": ["crosschop", "earthquake", "flamethrower", "icepunch", "voltswitch", "wildcharge"], + "abilities": ["Motor Drive"], "preferredTypes": ["Ice"] } ] }, "magmortar": { - "level": 84, + "level": 85, "sets": [ { "role": "Fast Attacker", - "movepool": ["earthquake", "fireblast", "focusblast", "hiddenpowergrass", "hiddenpowerice", "substitute", "thunderbolt"], + "movepool": ["earthquake", "fireblast", "focusblast", "hiddenpowerice", "taunt", "thunderbolt"], + "abilities": ["Flame Body", "Vital Spirit"], "preferredTypes": ["Electric"] } ] }, "togekiss": { - "level": 81, + "level": 79, "sets": [ { "role": "Bulky Setup", - "movepool": ["airslash", "aurasphere", "nastyplot", "roost", "thunderwave"] + "movepool": ["airslash", "aurasphere", "nastyplot", "roost", "thunderwave"], + "abilities": ["Serene Grace"] }, { "role": "Bulky Attacker", - "movepool": ["airslash", "healbell", "roost", "thunderwave"] + "movepool": ["airslash", "healbell", "roost", "thunderwave"], + "abilities": ["Serene Grace"] }, { "role": "Fast Attacker", - "movepool": ["airslash", "aurasphere", "fireblast", "trick"] + "movepool": ["airslash", "aurasphere", "fireblast", "trick"], + "abilities": ["Serene Grace"] } ] }, @@ -2851,11 +3340,13 @@ "sets": [ { "role": "Fast Attacker", - "movepool": ["airslash", "bugbuzz", "hiddenpowerground", "protect"] + "movepool": ["airslash", "bugbuzz", "hiddenpowerground", "protect"], + "abilities": ["Speed Boost"] }, { "role": "Wallbreaker", - "movepool": ["airslash", "bugbuzz", "hiddenpowerground", "uturn"] + "movepool": ["airslash", "bugbuzz", "gigadrain", "uturn"], + "abilities": ["Tinted Lens"] } ] }, @@ -2865,37 +3356,43 @@ { "role": "Setup Sweeper", "movepool": ["doubleedge", "leafblade", "swordsdance", "synthesis", "xscissor"], + "abilities": ["Chlorophyll"], "preferredTypes": ["Normal"] } ] }, "glaceon": { - "level": 90, + "level": 91, "sets": [ { "role": "Bulky Support", - "movepool": ["healbell", "hiddenpowerground", "icebeam", "protect", "wish"] + "movepool": ["healbell", "hiddenpowerground", "icebeam", "protect", "wish"], + "abilities": ["Ice Body"] }, { "role": "Staller", - "movepool": ["icebeam", "protect", "toxic", "wish"] + "movepool": ["icebeam", "protect", "toxic", "wish"], + "abilities": ["Ice Body"] } ] }, "gliscor": { - "level": 79, + "level": 78, "sets": [ { - "role": "Staller", - "movepool": ["earthquake", "protect", "substitute", "toxic"] + "role": "Bulky Support", + "movepool": ["earthquake", "protect", "substitute", "toxic"], + "abilities": ["Poison Heal"] }, { - "role": "Bulky Support", - "movepool": ["earthquake", "facade", "roost", "stealthrock", "stoneedge", "taunt", "toxic", "uturn"] + "role": "Staller", + "movepool": ["earthquake", "facade", "roost", "stealthrock", "stoneedge", "taunt", "toxic", "uturn"], + "abilities": ["Poison Heal"] }, { "role": "Setup Sweeper", - "movepool": ["earthquake", "facade", "roost", "stoneedge", "swordsdance"] + "movepool": ["earthquake", "facade", "roost", "swordsdance"], + "abilities": ["Poison Heal"] } ] }, @@ -2904,20 +3401,23 @@ "sets": [ { "role": "Wallbreaker", - "movepool": ["earthquake", "iceshard", "iciclecrash", "stealthrock"] + "movepool": ["earthquake", "iceshard", "iciclecrash", "stealthrock"], + "abilities": ["Thick Fat"] }, { "role": "Fast Attacker", - "movepool": ["earthquake", "iceshard", "iciclecrash", "stoneedge", "superpower"] + "movepool": ["earthquake", "iceshard", "iciclecrash", "stoneedge", "superpower"], + "abilities": ["Thick Fat"] } ] }, "porygonz": { - "level": 82, + "level": 81, "sets": [ { "role": "Fast Attacker", - "movepool": ["darkpulse", "hiddenpowerfighting", "icebeam", "nastyplot", "thunderbolt", "triattack", "trick"] + "movepool": ["darkpulse", "hiddenpowerfighting", "icebeam", "nastyplot", "thunderbolt", "triattack", "trick"], + "abilities": ["Adaptability", "Download"] } ] }, @@ -2926,16 +3426,18 @@ "sets": [ { "role": "Fast Attacker", - "movepool": ["closecombat", "nightslash", "shadowsneak", "swordsdance", "trick", "zenheadbutt"] + "movepool": ["closecombat", "nightslash", "shadowsneak", "swordsdance", "trick", "zenheadbutt"], + "abilities": ["Justified"] } ] }, "probopass": { - "level": 88, + "level": 89, "sets": [ { "role": "Bulky Attacker", - "movepool": ["earthpower", "powergem", "stealthrock", "thunderwave", "toxic", "voltswitch"] + "movepool": ["earthpower", "powergem", "stealthrock", "thunderwave", "toxic", "voltswitch"], + "abilities": ["Magnet Pull"] } ] }, @@ -2943,8 +3445,15 @@ "level": 85, "sets": [ { - "role": "Bulky Support", - "movepool": ["earthquake", "icepunch", "painsplit", "shadowsneak", "trick", "willowisp"] + "role": "Bulky Attacker", + "movepool": ["earthquake", "icepunch", "painsplit", "shadowsneak", "toxic", "trick", "willowisp"], + "abilities": ["Pressure"], + "preferredTypes": ["Ground"] + }, + { + "role": "Staller", + "movepool": ["earthquake", "protect", "shadowsneak", "toxic"], + "abilities": ["Pressure"] } ] }, @@ -2953,7 +3462,8 @@ "sets": [ { "role": "Fast Support", - "movepool": ["destinybond", "icebeam", "shadowball", "spikes", "taunt", "thunderwave"] + "movepool": ["destinybond", "icebeam", "shadowball", "spikes", "taunt", "thunderwave"], + "abilities": ["Cursed Body"] } ] }, @@ -2962,16 +3472,18 @@ "sets": [ { "role": "Fast Attacker", - "movepool": ["hiddenpowerice", "painsplit", "shadowball", "thunderbolt", "trick", "voltswitch", "willowisp"] + "movepool": ["hiddenpowerice", "painsplit", "shadowball", "thunderbolt", "trick", "voltswitch", "willowisp"], + "abilities": ["Levitate"] } ] }, "rotomheat": { - "level": 82, + "level": 81, "sets": [ { "role": "Bulky Attacker", - "movepool": ["hiddenpowerice", "overheat", "painsplit", "thunderbolt", "thunderwave", "trick", "voltswitch", "willowisp"] + "movepool": ["hiddenpowerice", "overheat", "painsplit", "thunderbolt", "thunderwave", "trick", "voltswitch", "willowisp"], + "abilities": ["Levitate"] } ] }, @@ -2980,25 +3492,28 @@ "sets": [ { "role": "Bulky Attacker", - "movepool": ["hydropump", "painsplit", "thunderbolt", "thunderwave", "trick", "voltswitch", "willowisp"] + "movepool": ["hydropump", "painsplit", "thunderbolt", "thunderwave", "trick", "voltswitch", "willowisp"], + "abilities": ["Levitate"] } ] }, "rotomfrost": { - "level": 86, + "level": 84, "sets": [ { "role": "Bulky Attacker", - "movepool": ["blizzard", "painsplit", "substitute", "thunderbolt", "trick", "voltswitch", "willowisp"] + "movepool": ["blizzard", "painsplit", "substitute", "thunderbolt", "trick", "voltswitch", "willowisp"], + "abilities": ["Levitate"] } ] }, "rotomfan": { - "level": 86, + "level": 85, "sets": [ { "role": "Bulky Attacker", - "movepool": ["airslash", "painsplit", "substitute", "thunderbolt", "trick", "voltswitch", "willowisp"] + "movepool": ["airslash", "painsplit", "substitute", "thunderbolt", "trick", "voltswitch", "willowisp"], + "abilities": ["Levitate"] } ] }, @@ -3007,43 +3522,49 @@ "sets": [ { "role": "Bulky Attacker", - "movepool": ["hiddenpowerfire", "hiddenpowerice", "leafstorm", "painsplit", "thunderbolt", "thunderwave", "trick", "voltswitch", "willowisp"] + "movepool": ["hiddenpowerice", "leafstorm", "painsplit", "thunderbolt", "thunderwave", "trick", "voltswitch", "willowisp"], + "abilities": ["Levitate"] } ] }, "uxie": { - "level": 83, + "level": 79, "sets": [ { "role": "Bulky Support", - "movepool": ["healbell", "lightscreen", "psychic", "reflect", "stealthrock", "thunderwave", "uturn", "yawn"] + "movepool": ["healbell", "psychic", "stealthrock", "thunderwave", "uturn", "yawn"], + "abilities": ["Levitate"] } ] }, "mesprit": { - "level": 83, + "level": 82, "sets": [ { "role": "Fast Attacker", - "movepool": ["calmmind", "healingwish", "hiddenpowerfire", "icebeam", "psychic", "psyshock", "signalbeam", "thunderbolt", "trick", "uturn"] + "movepool": ["calmmind", "healingwish", "hiddenpowerfighting", "icebeam", "psychic", "psyshock", "signalbeam", "thunderbolt", "trick", "uturn"], + "abilities": ["Levitate"] }, { "role": "Bulky Support", - "movepool": ["hiddenpowerfire", "psychic", "stealthrock", "thunderwave", "toxic", "uturn"] + "movepool": ["hiddenpowerfighting", "psychic", "stealthrock", "thunderwave", "toxic", "uturn"], + "abilities": ["Levitate"] } ] }, "azelf": { - "level": 81, + "level": 79, "sets": [ { "role": "Fast Attacker", "movepool": ["fireblast", "nastyplot", "psychic", "psyshock", "signalbeam", "thunderbolt", "trick", "uturn"], + "abilities": ["Levitate"], "preferredTypes": ["Fire"] }, { "role": "Fast Support", - "movepool": ["explosion", "fireblast", "psychic", "stealthrock", "taunt", "uturn"] + "movepool": ["explosion", "fireblast", "psychic", "stealthrock", "taunt", "uturn"], + "abilities": ["Levitate"] } ] }, @@ -3053,35 +3574,40 @@ { "role": "Bulky Attacker", "movepool": ["aurasphere", "dracometeor", "dragontail", "fireblast", "stealthrock", "thunderbolt", "toxic"], + "abilities": ["Pressure"], "preferredTypes": ["Fire"] } ] }, "palkia": { - "level": 73, + "level": 70, "sets": [ { "role": "Bulky Attacker", "movepool": ["dracometeor", "fireblast", "hydropump", "spacialrend", "thunderwave"], + "abilities": ["Pressure"], "preferredTypes": ["Fire"] } ] }, "heatran": { - "level": 79, + "level": 78, "sets": [ { "role": "Fast Attacker", - "movepool": ["earthpower", "eruption", "fireblast", "hiddenpowerice"] + "movepool": ["earthpower", "eruption", "fireblast", "hiddenpowerice"], + "abilities": ["Flash Fire"] }, { "role": "Bulky Attacker", "movepool": ["earthpower", "fireblast", "hiddenpowerice", "lavaplume", "roar", "stealthrock", "toxic"], + "abilities": ["Flash Fire"], "preferredTypes": ["Ground"] }, { "role": "Staller", - "movepool": ["earthpower", "magmastorm", "protect", "toxic"] + "movepool": ["earthpower", "magmastorm", "protect", "toxic"], + "abilities": ["Flash Fire"] } ] }, @@ -3090,20 +3616,23 @@ "sets": [ { "role": "Staller", - "movepool": ["confuseray", "earthquake", "return", "substitute", "thunderwave"] + "movepool": ["earthquake", "return", "substitute", "thunderwave"], + "abilities": ["Slow Start"] } ] }, "giratina": { - "level": 72, + "level": 70, "sets": [ { "role": "Fast Support", - "movepool": ["dragonpulse", "dragontail", "rest", "sleeptalk", "willowisp"] + "movepool": ["dragonpulse", "dragontail", "rest", "sleeptalk", "willowisp"], + "abilities": ["Pressure"] }, { "role": "Bulky Setup", - "movepool": ["calmmind", "dragonpulse", "rest", "sleeptalk"] + "movepool": ["calmmind", "dragonpulse", "rest", "sleeptalk"], + "abilities": ["Pressure"] } ] }, @@ -3112,60 +3641,73 @@ "sets": [ { "role": "Fast Attacker", - "movepool": ["dracometeor", "earthquake", "hiddenpowerfire", "outrage", "shadowball", "shadowsneak", "willowisp"] + "movepool": ["dracometeor", "earthquake", "outrage", "shadowball", "shadowsneak", "willowisp"], + "abilities": ["Levitate"] } ] }, "cresselia": { - "level": 81, + "level": 80, "sets": [ { "role": "Bulky Setup", - "movepool": ["calmmind", "hiddenpowerfighting", "moonlight", "psyshock", "substitute"] + "movepool": ["calmmind", "hiddenpowerfighting", "moonlight", "psyshock", "signalbeam"], + "abilities": ["Levitate"] }, { "role": "Bulky Support", - "movepool": ["hiddenpowerfighting", "moonlight", "psychic", "thunderwave", "toxic"] + "movepool": ["hiddenpowerfighting", "moonlight", "psychic", "thunderwave", "toxic"], + "abilities": ["Levitate"] } ] }, "phione": { "level": 89, "sets": [ + { + "role": "Staller", + "movepool": ["raindance", "rest", "scald", "toxic"], + "abilities": ["Hydration"] + }, { "role": "Bulky Support", - "movepool": ["healbell", "icebeam", "scald", "toxic", "uturn"] + "movepool": ["healbell", "icebeam", "scald", "toxic", "uturn"], + "abilities": ["Hydration"] } ] }, "manaphy": { - "level": 76, + "level": 75, "sets": [ { "role": "Bulky Setup", - "movepool": ["energyball", "icebeam", "surf", "tailglow"] + "movepool": ["energyball", "icebeam", "surf", "tailglow"], + "abilities": ["Hydration"] } ] }, "darkrai": { - "level": 71, + "level": 70, "sets": [ { "role": "Setup Sweeper", - "movepool": ["darkpulse", "darkvoid", "focusblast", "nastyplot"] + "movepool": ["darkpulse", "darkvoid", "focusblast", "nastyplot"], + "abilities": ["Bad Dreams"] }, { "role": "Bulky Setup", - "movepool": ["darkpulse", "darkvoid", "nastyplot", "substitute"] + "movepool": ["darkpulse", "darkvoid", "nastyplot", "substitute"], + "abilities": ["Bad Dreams"] } ] }, "shaymin": { - "level": 82, + "level": 83, "sets": [ { "role": "Fast Support", - "movepool": ["airslash", "earthpower", "leechseed", "rest", "seedflare", "substitute"], + "movepool": ["airslash", "earthpower", "leechseed", "seedflare", "substitute", "synthesis"], + "abilities": ["Natural Cure"], "preferredTypes": ["Flying"] } ] @@ -3175,7 +3717,8 @@ "sets": [ { "role": "Fast Attacker", - "movepool": ["airslash", "earthpower", "hiddenpowerice", "leechseed", "seedflare", "substitute"] + "movepool": ["airslash", "earthpower", "hiddenpowerice", "leechseed", "seedflare", "substitute"], + "abilities": ["Serene Grace"] } ] }, @@ -3184,7 +3727,9 @@ "sets": [ { "role": "Setup Sweeper", - "movepool": ["earthquake", "extremespeed", "recover", "shadowclaw", "swordsdance"] + "movepool": ["earthquake", "extremespeed", "recover", "shadowclaw", "swordsdance"], + "abilities": ["Multitype"], + "preferredTypes": ["Ground"] } ] }, @@ -3193,11 +3738,13 @@ "sets": [ { "role": "Bulky Setup", - "movepool": ["calmmind", "earthpower", "fireblast", "judgment", "recover"] + "movepool": ["calmmind", "earthpower", "fireblast", "judgment", "recover"], + "abilities": ["Multitype"] }, { "role": "Setup Sweeper", - "movepool": ["calmmind", "earthpower", "icebeam", "judgment"] + "movepool": ["calmmind", "earthpower", "icebeam", "judgment"], + "abilities": ["Multitype"] } ] }, @@ -3206,7 +3753,8 @@ "sets": [ { "role": "Bulky Setup", - "movepool": ["calmmind", "focusblast", "judgment", "recover", "refresh"] + "movepool": ["calmmind", "focusblast", "judgment", "recover", "refresh"], + "abilities": ["Multitype"] } ] }, @@ -3216,11 +3764,13 @@ { "role": "Setup Sweeper", "movepool": ["earthquake", "extremespeed", "outrage", "recover", "swordsdance"], + "abilities": ["Multitype"], "preferredTypes": ["Ground"] }, { "role": "Bulky Setup", - "movepool": ["calmmind", "earthpower", "fireblast", "judgment", "recover", "refresh"] + "movepool": ["calmmind", "earthpower", "fireblast", "judgment", "recover", "refresh"], + "abilities": ["Multitype"] } ] }, @@ -3229,7 +3779,8 @@ "sets": [ { "role": "Setup Sweeper", - "movepool": ["calmmind", "icebeam", "judgment", "recover"] + "movepool": ["calmmind", "icebeam", "judgment", "recover"], + "abilities": ["Multitype"] } ] }, @@ -3238,7 +3789,8 @@ "sets": [ { "role": "Bulky Setup", - "movepool": ["calmmind", "darkpulse", "icebeam", "judgment", "recover"] + "movepool": ["calmmind", "darkpulse", "icebeam", "judgment", "recover"], + "abilities": ["Multitype"] } ] }, @@ -3247,7 +3799,8 @@ "sets": [ { "role": "Setup Sweeper", - "movepool": ["calmmind", "earthpower", "icebeam", "judgment", "recover", "thunderbolt"] + "movepool": ["calmmind", "earthpower", "icebeam", "judgment", "recover", "thunderbolt"], + "abilities": ["Multitype"] } ] }, @@ -3256,7 +3809,8 @@ "sets": [ { "role": "Bulky Setup", - "movepool": ["calmmind", "earthpower", "judgment", "recover", "refresh"] + "movepool": ["calmmind", "earthpower", "judgment", "recover", "refresh"], + "abilities": ["Multitype"] } ] }, @@ -3265,7 +3819,8 @@ "sets": [ { "role": "Bulky Attacker", - "movepool": ["calmmind", "focusblast", "judgment", "recover", "willowisp"] + "movepool": ["calmmind", "focusblast", "judgment", "recover", "willowisp"], + "abilities": ["Multitype"] } ] }, @@ -3274,11 +3829,13 @@ "sets": [ { "role": "Bulky Setup", - "movepool": ["calmmind", "fireblast", "judgment", "recover"] + "movepool": ["calmmind", "fireblast", "judgment", "recover"], + "abilities": ["Multitype"] }, { "role": "Setup Sweeper", - "movepool": ["calmmind", "earthpower", "icebeam", "judgment"] + "movepool": ["calmmind", "earthpower", "icebeam", "judgment"], + "abilities": ["Multitype"] } ] }, @@ -3288,11 +3845,13 @@ { "role": "Setup Sweeper", "movepool": ["earthquake", "extremespeed", "recover", "stoneedge", "swordsdance"], + "abilities": ["Multitype"], "preferredTypes": ["Rock"] }, { "role": "Bulky Setup", - "movepool": ["calmmind", "icebeam", "judgment", "recover"] + "movepool": ["calmmind", "icebeam", "judgment", "recover"], + "abilities": ["Multitype"] } ] }, @@ -3301,29 +3860,36 @@ "sets": [ { "role": "Bulky Setup", - "movepool": ["calmmind", "earthpower", "judgment", "recover", "thunderbolt"] + "movepool": ["calmmind", "earthpower", "judgment", "recover", "thunderbolt"], + "abilities": ["Multitype"] } ] }, "arceuspoison": { "level": 71, "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["calmmind", "earthpower", "fireblast", "recover", "sludgebomb"], + "abilities": ["Multitype"], + "preferredTypes": ["Ground"] + }, { "role": "Bulky Attacker", - "movepool": ["earthquake", "fireblast", "icebeam", "recover", "sludgebomb", "stealthrock", "willowisp"] + "movepool": ["earthquake", "fireblast", "icebeam", "recover", "sludgebomb", "stealthrock", "willowisp"], + "abilities": ["Multitype"], + "preferredTypes": ["Ground"] } ] }, "arceuspsychic": { "level": 71, "sets": [ - { - "role": "Bulky Setup", - "movepool": ["calmmind", "earthpower", "fireblast", "judgment", "recover"] - }, { "role": "Setup Sweeper", - "movepool": ["calmmind", "darkpulse", "focusblast", "judgment"] + "movepool": ["calmmind", "darkpulse", "focusblast", "judgment", "recover"], + "abilities": ["Multitype"], + "preferredTypes": ["Fighting"] } ] }, @@ -3333,7 +3899,13 @@ { "role": "Setup Sweeper", "movepool": ["earthquake", "extremespeed", "recover", "stoneedge", "swordsdance"], + "abilities": ["Multitype"], "preferredTypes": ["Ground"] + }, + { + "role": "Bulky Setup", + "movepool": ["calmmind", "earthpower", "fireblast", "judgment", "recover"], + "abilities": ["Multitype"] } ] }, @@ -3342,11 +3914,13 @@ "sets": [ { "role": "Bulky Attacker", - "movepool": ["earthquake", "judgment", "recover", "toxic", "willowisp"] + "movepool": ["earthquake", "judgment", "recover", "toxic", "willowisp"], + "abilities": ["Multitype"] }, { "role": "Bulky Setup", - "movepool": ["calmmind", "earthpower", "judgment", "recover"] + "movepool": ["calmmind", "earthpower", "judgment", "recover"], + "abilities": ["Multitype"] } ] }, @@ -3355,20 +3929,23 @@ "sets": [ { "role": "Bulky Attacker", - "movepool": ["calmmind", "icebeam", "judgment", "recover", "willowisp"] + "movepool": ["calmmind", "icebeam", "judgment", "recover", "willowisp"], + "abilities": ["Multitype"] } ] }, "victini": { - "level": 79, + "level": 78, "sets": [ { "role": "Bulky Attacker", - "movepool": ["boltstrike", "uturn", "vcreate", "zenheadbutt"] + "movepool": ["boltstrike", "uturn", "vcreate", "zenheadbutt"], + "abilities": ["Victory Star"] }, { "role": "Fast Attacker", "movepool": ["boltstrike", "energyball", "focusblast", "psychic", "trick", "uturn", "vcreate"], + "abilities": ["Victory Star"], "preferredTypes": ["Electric"] } ] @@ -3378,28 +3955,33 @@ "sets": [ { "role": "Fast Attacker", - "movepool": ["aromatherapy", "dragonpulse", "gigadrain", "glare", "hiddenpowerfire", "leechseed", "substitute"] + "movepool": ["aromatherapy", "dragonpulse", "gigadrain", "glare", "hiddenpowerfire", "leechseed", "substitute"], + "abilities": ["Overgrow"] }, { - "role": "Bulky Setup", - "movepool": ["calmmind", "dragonpulse", "gigadrain", "hiddenpowerfire", "substitute"] + "role": "Setup Sweeper", + "movepool": ["calmmind", "dragonpulse", "gigadrain", "hiddenpowerfire", "substitute"], + "abilities": ["Overgrow"] }, { - "role": "Setup Sweeper", - "movepool": ["aquatail", "leafblade", "return", "swordsdance"] + "role": "Wallbreaker", + "movepool": ["aquatail", "leafblade", "return", "swordsdance"], + "abilities": ["Overgrow"] } ] }, "emboar": { - "level": 85, + "level": 84, "sets": [ { "role": "Bulky Attacker", - "movepool": ["earthquake", "flareblitz", "headsmash", "superpower", "wildcharge"] + "movepool": ["earthquake", "flareblitz", "headsmash", "superpower", "wildcharge"], + "abilities": ["Blaze"] }, { "role": "Wallbreaker", - "movepool": ["earthquake", "fireblast", "grassknot", "superpower", "wildcharge"] + "movepool": ["earthquake", "fireblast", "grassknot", "superpower", "wildcharge"], + "abilities": ["Blaze"] } ] }, @@ -3408,34 +3990,40 @@ "sets": [ { "role": "Fast Attacker", - "movepool": ["aquajet", "grassknot", "hydropump", "icebeam", "megahorn", "superpower"] + "movepool": ["aquajet", "grassknot", "hydropump", "icebeam", "megahorn", "superpower"], + "abilities": ["Torrent"] }, { "role": "Wallbreaker", - "movepool": ["aquajet", "megahorn", "superpower", "swordsdance", "waterfall"] + "movepool": ["aquajet", "megahorn", "superpower", "swordsdance", "waterfall"], + "abilities": ["Torrent"] } ] }, "watchog": { - "level": 91, + "level": 95, "sets": [ { "role": "Bulky Attacker", - "movepool": ["crunch", "hypnosis", "return", "superfang"] + "movepool": ["crunch", "hypnosis", "return", "superfang"], + "abilities": ["Analytic"] }, { "role": "Setup Sweeper", "movepool": ["crunch", "hypnosis", "lowkick", "return", "substitute", "swordsdance"], + "abilities": ["Analytic"], "preferredTypes": ["Dark"] } ] }, "stoutland": { - "level": 88, + "level": 87, "sets": [ { "role": "Bulky Attacker", - "movepool": ["crunch", "return", "superpower", "thunderwave", "wildcharge"] + "movepool": ["crunch", "return", "superpower", "thunderwave", "wildcharge"], + "abilities": ["Scrappy"], + "preferredTypes": ["Fighting"] } ] }, @@ -3444,7 +4032,8 @@ "sets": [ { "role": "Bulky Setup", - "movepool": ["darkpulse", "encore", "hiddenpowerfighting", "nastyplot", "thunderwave"] + "movepool": ["darkpulse", "encore", "hiddenpowerfighting", "nastyplot", "thunderwave"], + "abilities": ["Prankster"] } ] }, @@ -3453,11 +4042,13 @@ "sets": [ { "role": "Fast Attacker", - "movepool": ["hiddenpowerice", "leafstorm", "rockslide", "superpower"] + "movepool": ["hiddenpowerice", "leafstorm", "rockslide", "superpower"], + "abilities": ["Overgrow"] }, { "role": "Setup Sweeper", - "movepool": ["focusblast", "gigadrain", "hiddenpowerrock", "nastyplot", "substitute"] + "movepool": ["focusblast", "gigadrain", "hiddenpowerrock", "nastyplot", "substitute"], + "abilities": ["Overgrow"] } ] }, @@ -3466,30 +4057,34 @@ "sets": [ { "role": "Setup Sweeper", - "movepool": ["fireblast", "focusblast", "grassknot", "hiddenpowerrock", "nastyplot", "substitute"] + "movepool": ["fireblast", "focusblast", "grassknot", "hiddenpowerrock", "nastyplot", "substitute"], + "abilities": ["Blaze"] } ] }, "simipour": { - "level": 86, + "level": 85, "sets": [ { "role": "Setup Sweeper", - "movepool": ["focusblast", "hiddenpowergrass", "hydropump", "icebeam", "nastyplot", "substitute"], + "movepool": ["grassknot", "hydropump", "icebeam", "nastyplot", "substitute"], + "abilities": ["Torrent"], "preferredTypes": ["Ice"] } ] }, "musharna": { - "level": 87, + "level": 86, "sets": [ { "role": "Bulky Support", - "movepool": ["healbell", "hiddenpowerground", "moonlight", "psychic", "signalbeam", "thunderwave", "toxic"] + "movepool": ["healbell", "hiddenpowerfighting", "moonlight", "psychic", "signalbeam", "thunderwave", "toxic"], + "abilities": ["Synchronize"] }, { "role": "Bulky Setup", - "movepool": ["calmmind", "hiddenpowerground", "moonlight", "psyshock", "signalbeam"] + "movepool": ["calmmind", "hiddenpowerfighting", "moonlight", "psyshock", "signalbeam"], + "abilities": ["Synchronize"] } ] }, @@ -3498,16 +4093,23 @@ "sets": [ { "role": "Bulky Support", - "movepool": ["hypnosis", "pluck", "return", "roost", "toxic", "uturn"] + "movepool": ["hypnosis", "pluck", "return", "roost", "toxic", "uturn"], + "abilities": ["Super Luck"] } ] }, "zebstrika": { - "level": 87, + "level": 85, "sets": [ { "role": "Fast Attacker", - "movepool": ["hiddenpowergrass", "hiddenpowerice", "overheat", "thunderbolt", "voltswitch", "wildcharge"] + "movepool": ["hiddenpowerice", "overheat", "voltswitch", "wildcharge"], + "abilities": ["Sap Sipper"] + }, + { + "role": "Wallbreaker", + "movepool": ["hiddenpowerice", "overheat", "thunderbolt", "voltswitch"], + "abilities": ["Lightning Rod"] } ] }, @@ -3516,73 +4118,89 @@ "sets": [ { "role": "Bulky Attacker", - "movepool": ["earthquake", "explosion", "stealthrock", "stoneedge", "superpower"] + "movepool": ["earthquake", "explosion", "stealthrock", "stoneedge", "superpower", "toxic"], + "abilities": ["Sturdy"], + "preferredTypes": ["Ground"] } ] }, "swoobat": { - "level": 88, + "level": 86, "sets": [ { "role": "Bulky Setup", - "movepool": ["calmmind", "heatwave", "roost", "storedpower"] + "movepool": ["calmmind", "heatwave", "roost", "storedpower"], + "abilities": ["Simple"] }, { "role": "Setup Sweeper", - "movepool": ["airslash", "calmmind", "heatwave", "roost", "storedpower"] + "movepool": ["airslash", "calmmind", "heatwave", "roost", "storedpower"], + "abilities": ["Simple"] } ] }, "excadrill": { - "level": 80, + "level": 81, "sets": [ { "role": "Spinner", - "movepool": ["earthquake", "ironhead", "rapidspin", "swordsdance"] + "movepool": ["earthquake", "ironhead", "rapidspin", "swordsdance"], + "abilities": ["Mold Breaker", "Sand Rush"] }, { "role": "Setup Sweeper", - "movepool": ["earthquake", "ironhead", "rockslide", "swordsdance"] + "movepool": ["earthquake", "ironhead", "rockslide", "swordsdance"], + "abilities": ["Mold Breaker", "Sand Rush"] } ] }, "audino": { - "level": 91, + "level": 93, "sets": [ { "role": "Bulky Support", - "movepool": ["doubleedge", "healbell", "protect", "toxic", "wish"] + "movepool": ["doubleedge", "healbell", "protect", "toxic", "wish"], + "abilities": ["Regenerator"] } ] }, "conkeldurr": { - "level": 80, + "level": 79, "sets": [ { - "role": "Bulky Setup", - "movepool": ["bulkup", "drainpunch", "icepunch", "machpunch", "thunderpunch"] + "role": "Bulky Attacker", + "movepool": ["bulkup", "drainpunch", "icepunch", "machpunch", "thunderpunch"], + "abilities": ["Iron Fist"] } ] }, "seismitoad": { - "level": 86, + "level": 85, "sets": [ { "role": "Setup Sweeper", - "movepool": ["earthquake", "hydropump", "raindance", "sludgewave"] + "movepool": ["earthquake", "hydropump", "raindance", "sludgewave"], + "abilities": ["Swift Swim"] }, { "role": "Bulky Support", - "movepool": ["earthquake", "scald", "sludgebomb", "stealthrock", "toxic"] + "movepool": ["earthquake", "scald", "sludgebomb", "stealthrock", "toxic"], + "abilities": ["Water Absorb"] + }, + { + "role": "Staller", + "movepool": ["earthquake", "protect", "scald", "toxic"], + "abilities": ["Water Absorb"] } ] }, "throh": { - "level": 88, + "level": 89, "sets": [ { "role": "Bulky Support", - "movepool": ["bulkup", "circlethrow", "payback", "rest", "sleeptalk"] + "movepool": ["bulkup", "circlethrow", "payback", "rest", "sleeptalk"], + "abilities": ["Guts"] } ] }, @@ -3591,39 +4209,44 @@ "sets": [ { "role": "Fast Attacker", - "movepool": ["bulkup", "closecombat", "earthquake", "icepunch", "stoneedge"] + "movepool": ["bulkup", "closecombat", "earthquake", "icepunch", "stoneedge"], + "abilities": ["Mold Breaker", "Sturdy"] } ] }, "leavanny": { - "level": 90, + "level": 91, "sets": [ { "role": "Setup Sweeper", - "movepool": ["leafblade", "return", "swordsdance", "xscissor"] + "movepool": ["leafblade", "return", "swordsdance", "xscissor"], + "abilities": ["Chlorophyll", "Swarm"] } ] }, "scolipede": { - "level": 85, + "level": 83, "sets": [ { "role": "Fast Attacker", "movepool": ["earthquake", "megahorn", "rockslide", "spikes", "swordsdance", "toxicspikes"], + "abilities": ["Swarm"], "preferredTypes": ["Ground"] } ] }, "whimsicott": { - "level": 85, + "level": 88, "sets": [ { "role": "Fast Support", - "movepool": ["encore", "gigadrain", "leechseed", "stunspore", "taunt", "toxic", "uturn"] + "movepool": ["encore", "gigadrain", "stunspore", "taunt", "toxic", "uturn"], + "abilities": ["Prankster"] }, { "role": "Staller", - "movepool": ["hurricane", "leechseed", "protect", "substitute"] + "movepool": ["hurricane", "leechseed", "protect", "substitute"], + "abilities": ["Prankster"] } ] }, @@ -3632,56 +4255,58 @@ "sets": [ { "role": "Setup Sweeper", - "movepool": ["gigadrain", "hiddenpowerfire", "hiddenpowerrock", "petaldance", "quiverdance", "sleeppowder"] - } - ] - }, - "basculin": { - "level": 86, - "sets": [ + "movepool": ["gigadrain", "hiddenpowerfire", "hiddenpowerrock", "quiverdance", "sleeppowder"], + "abilities": ["Chlorophyll"] + }, { - "role": "Bulky Attacker", - "movepool": ["aquajet", "crunch", "superpower", "waterfall", "zenheadbutt"] + "role": "Fast Attacker", + "movepool": ["hiddenpowerfire", "hiddenpowerrock", "petaldance", "quiverdance", "sleeppowder"], + "abilities": ["Own Tempo"] } ] }, - "basculinbluestriped": { + "basculin": { "level": 86, "sets": [ { "role": "Bulky Attacker", - "movepool": ["aquajet", "crunch", "superpower", "waterfall", "zenheadbutt"] + "movepool": ["aquajet", "crunch", "superpower", "waterfall", "zenheadbutt"], + "abilities": ["Adaptability"] } ] }, "krookodile": { - "level": 80, + "level": 79, "sets": [ { "role": "Fast Attacker", - "movepool": ["crunch", "earthquake", "pursuit", "stealthrock", "stoneedge", "superpower"] + "movepool": ["crunch", "earthquake", "pursuit", "stealthrock", "stoneedge", "superpower"], + "abilities": ["Intimidate"] } ] }, "darmanitan": { - "level": 82, + "level": 81, "sets": [ { "role": "Wallbreaker", - "movepool": ["earthquake", "flareblitz", "rockslide", "superpower", "uturn"] + "movepool": ["earthquake", "flareblitz", "rockslide", "superpower", "uturn"], + "abilities": ["Sheer Force"] } ] }, "maractus": { - "level": 95, + "level": 98, "sets": [ { "role": "Fast Support", - "movepool": ["gigadrain", "hiddenpowerfire", "spikes", "suckerpunch", "toxic"] + "movepool": ["gigadrain", "hiddenpowerfire", "spikes", "synthesis", "toxic"], + "abilities": ["Storm Drain", "Water Absorb"] }, { "role": "Staller", - "movepool": ["gigadrain", "leechseed", "protect", "toxic"] + "movepool": ["gigadrain", "hiddenpowerfire", "hiddenpowerice", "leechseed", "protect"], + "abilities": ["Storm Drain", "Water Absorb"] } ] }, @@ -3690,7 +4315,8 @@ "sets": [ { "role": "Setup Sweeper", - "movepool": ["earthquake", "shellsmash", "stoneedge", "xscissor"] + "movepool": ["earthquake", "shellsmash", "stoneedge", "xscissor"], + "abilities": ["Sturdy"] } ] }, @@ -3699,11 +4325,13 @@ "sets": [ { "role": "Setup Sweeper", - "movepool": ["crunch", "dragondance", "highjumpkick", "icepunch", "zenheadbutt"] + "movepool": ["crunch", "dragondance", "highjumpkick", "stoneedge", "zenheadbutt"], + "abilities": ["Intimidate", "Moxie"] }, { "role": "Bulky Setup", - "movepool": ["bulkup", "crunch", "drainpunch", "highjumpkick", "rest"] + "movepool": ["bulkup", "crunch", "drainpunch", "rest"], + "abilities": ["Shed Skin"] } ] }, @@ -3712,29 +4340,34 @@ "sets": [ { "role": "Bulky Attacker", - "movepool": ["airslash", "calmmind", "heatwave", "psyshock", "roost"] + "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"] + "movepool": ["cosmicpower", "psychoshift", "roost", "storedpower"], + "abilities": ["Magic Guard"] } ] }, "cofagrigus": { - "level": 86, + "level": 87, "sets": [ { "role": "Bulky Support", - "movepool": ["haze", "hiddenpowerfighting", "painsplit", "shadowball", "willowisp"] + "movepool": ["haze", "hiddenpowerfighting", "painsplit", "shadowball", "willowisp"], + "abilities": ["Mummy"] }, { "role": "Bulky Setup", - "movepool": ["hiddenpowerfighting", "nastyplot", "shadowball", "trickroom"] + "movepool": ["hiddenpowerfighting", "nastyplot", "shadowball", "trickroom"], + "abilities": ["Mummy"] } ] }, @@ -3743,26 +4376,29 @@ "sets": [ { "role": "Setup Sweeper", - "movepool": ["aquajet", "earthquake", "icebeam", "shellsmash", "stoneedge", "waterfall"] + "movepool": ["aquajet", "earthquake", "icebeam", "shellsmash", "stoneedge", "waterfall"], + "abilities": ["Solid Rock", "Sturdy", "Swift Swim"] } ] }, "archeops": { - "level": 80, + "level": 79, "sets": [ { "role": "Fast Attacker", "movepool": ["acrobatics", "earthquake", "roost", "stealthrock", "stoneedge", "uturn"], + "abilities": ["Defeatist"], "preferredTypes": ["Ground"] } ] }, "garbodor": { - "level": 87, + "level": 89, "sets": [ { - "role": "Bulky Support", - "movepool": ["drainpunch", "gunkshot", "haze", "painsplit", "spikes", "toxicspikes"] + "role": "Bulky Attacker", + "movepool": ["drainpunch", "gunkshot", "haze", "painsplit", "spikes", "toxicspikes"], + "abilities": ["Aftermath"] } ] }, @@ -3770,8 +4406,9 @@ "level": 82, "sets": [ { - "role": "Fast Attacker", - "movepool": ["darkpulse", "flamethrower", "focusblast", "nastyplot", "trick", "uturn"] + "role": "Wallbreaker", + "movepool": ["darkpulse", "flamethrower", "focusblast", "nastyplot", "trick", "uturn"], + "abilities": ["Illusion"] } ] }, @@ -3780,7 +4417,8 @@ "sets": [ { "role": "Fast Attacker", - "movepool": ["bulletseed", "rockblast", "tailslap", "uturn"] + "movepool": ["bulletseed", "rockblast", "tailslap", "uturn"], + "abilities": ["Skill Link"] } ] }, @@ -3789,33 +4427,33 @@ "sets": [ { "role": "Bulky Attacker", - "movepool": ["calmmind", "hiddenpowerfighting", "psychic", "signalbeam", "thunderbolt", "trick"] + "movepool": ["calmmind", "hiddenpowerfighting", "psychic", "signalbeam", "thunderbolt", "trick"], + "abilities": ["Shadow Tag"] } ] }, "reuniclus": { - "level": 82, + "level": 83, "sets": [ { - "role": "Bulky Attacker", - "movepool": ["calmmind", "focusblast", "psychic", "psyshock", "recover", "signalbeam", "trickroom"] - }, - { - "role": "Wallbreaker", - "movepool": ["focusblast", "psychic", "psyshock", "shadowball", "trickroom"] + "role": "Bulky Setup", + "movepool": ["calmmind", "focusblast", "psychic", "psyshock", "recover", "signalbeam"], + "abilities": ["Magic Guard"] } ] }, "swanna": { - "level": 87, + "level": 86, "sets": [ { "role": "Bulky Attacker", - "movepool": ["bravebird", "icebeam", "roost", "scald", "toxic"] + "movepool": ["bravebird", "icebeam", "roost", "scald", "toxic"], + "abilities": ["Hydration"] }, { "role": "Setup Sweeper", - "movepool": ["hurricane", "icebeam", "raindance", "rest", "surf"] + "movepool": ["hurricane", "raindance", "rest", "surf"], + "abilities": ["Hydration"] } ] }, @@ -3824,7 +4462,9 @@ "sets": [ { "role": "Fast Attacker", - "movepool": ["autotomize", "explosion", "flashcannon", "hiddenpowerground", "icebeam"] + "movepool": ["autotomize", "explosion", "flashcannon", "hiddenpowerground", "icebeam"], + "abilities": ["Weak Armor"], + "preferredTypes": ["Ground"] } ] }, @@ -3834,16 +4474,18 @@ { "role": "Setup Sweeper", "movepool": ["doubleedge", "hornleech", "naturepower", "return", "substitute", "swordsdance"], + "abilities": ["Sap Sipper"], "preferredTypes": ["Normal"] } ] }, "emolga": { - "level": 87, + "level": 86, "sets": [ { "role": "Bulky Attacker", - "movepool": ["acrobatics", "encore", "roost", "thunderbolt", "toxic", "uturn"] + "movepool": ["acrobatics", "encore", "roost", "thunderbolt", "toxic", "uturn"], + "abilities": ["Motor Drive"] } ] }, @@ -3852,20 +4494,23 @@ "sets": [ { "role": "Bulky Attacker", - "movepool": ["ironhead", "megahorn", "pursuit", "return", "swordsdance"] + "movepool": ["ironhead", "megahorn", "pursuit", "return", "swordsdance"], + "abilities": ["Swarm"] } ] }, "amoonguss": { - "level": 85, + "level": 82, "sets": [ { "role": "Bulky Attacker", - "movepool": ["clearsmog", "foulplay", "gigadrain", "hiddenpowerfire", "sludgebomb", "spore", "stunspore", "toxic"] + "movepool": ["clearsmog", "foulplay", "gigadrain", "hiddenpowerground", "sludgebomb", "spore", "stunspore", "toxic"], + "abilities": ["Regenerator"] }, { "role": "Bulky Support", - "movepool": ["gigadrain", "sludgebomb", "spore", "synthesis"] + "movepool": ["gigadrain", "sludgebomb", "spore", "synthesis"], + "abilities": ["Regenerator"] } ] }, @@ -3874,39 +4519,44 @@ "sets": [ { "role": "Bulky Support", - "movepool": ["icebeam", "recover", "scald", "shadowball", "toxic", "willowisp"] + "movepool": ["icebeam", "recover", "scald", "shadowball", "toxic", "willowisp"], + "abilities": ["Water Absorb"] } ] }, "alomomola": { - "level": 86, + "level": 85, "sets": [ { - "role": "Staller", - "movepool": ["protect", "scald", "toxic", "wish"] + "role": "Bulky Support", + "movepool": ["protect", "scald", "toxic", "wish"], + "abilities": ["Regenerator"] } ] }, "galvantula": { - "level": 82, + "level": 81, "sets": [ { "role": "Wallbreaker", "movepool": ["bugbuzz", "gigadrain", "hiddenpowerice", "thunder", "voltswitch"], + "abilities": ["Compound Eyes"], "preferredTypes": ["Bug"] } ] }, "ferrothorn": { - "level": 76, + "level": 72, "sets": [ { "role": "Bulky Attacker", - "movepool": ["gyroball", "leechseed", "powerwhip", "spikes", "stealthrock"] + "movepool": ["gyroball", "leechseed", "powerwhip", "spikes", "stealthrock"], + "abilities": ["Iron Barbs"] }, { "role": "Bulky Support", - "movepool": ["powerwhip", "spikes", "stealthrock", "thunderwave", "toxic"] + "movepool": ["powerwhip", "spikes", "stealthrock", "thunderwave", "toxic"], + "abilities": ["Iron Barbs"] } ] }, @@ -3915,7 +4565,8 @@ "sets": [ { "role": "Setup Sweeper", - "movepool": ["geargrind", "return", "shiftgear", "substitute", "wildcharge"] + "movepool": ["geargrind", "return", "shiftgear", "substitute", "wildcharge"], + "abilities": ["Clear Body"] } ] }, @@ -3924,54 +4575,60 @@ "sets": [ { "role": "Bulky Attacker", - "movepool": ["flamethrower", "gigadrain", "hiddenpowerice", "superpower", "thunderbolt", "uturn"] + "movepool": ["flamethrower", "gigadrain", "hiddenpowerice", "superpower", "thunderbolt", "uturn"], + "abilities": ["Levitate"] }, { "role": "Bulky Setup", "movepool": ["aquatail", "coil", "drainpunch", "firepunch", "wildcharge"], + "abilities": ["Levitate"], "preferredTypes": ["Fighting"] } ] }, "beheeyem": { - "level": 89, + "level": 90, "sets": [ { "role": "Wallbreaker", - "movepool": ["hiddenpowerfighting", "psychic", "signalbeam", "thunderbolt", "trick", "trickroom"] + "movepool": ["hiddenpowerfighting", "psychic", "recover", "signalbeam", "thunderbolt", "trick", "trickroom"], + "abilities": ["Analytic"] } ] }, "chandelure": { - "level": 82, + "level": 81, "sets": [ { "role": "Fast Attacker", "movepool": ["energyball", "fireblast", "hiddenpowerfighting", "shadowball", "trick"], + "abilities": ["Flash Fire"], "preferredTypes": ["Grass"] }, { "role": "Bulky Setup", - "movepool": ["calmmind", "fireblast", "shadowball", "substitute"] + "movepool": ["calmmind", "fireblast", "shadowball", "substitute"], + "abilities": ["Flame Body", "Flash Fire"] } ] }, "haxorus": { - "level": 77, + "level": 75, "sets": [ { "role": "Setup Sweeper", - "movepool": ["dragondance", "earthquake", "outrage", "superpower", "swordsdance"], - "preferredTypes": ["Ground"] + "movepool": ["dragondance", "earthquake", "outrage", "superpower"], + "abilities": ["Mold Breaker"] } ] }, "beartic": { - "level": 90, + "level": 91, "sets": [ { "role": "Wallbreaker", "movepool": ["aquajet", "iciclecrash", "stoneedge", "superpower", "swordsdance"], + "abilities": ["Swift Swim"], "preferredTypes": ["Fighting"] } ] @@ -3981,7 +4638,8 @@ "sets": [ { "role": "Bulky Support", - "movepool": ["haze", "hiddenpowerground", "icebeam", "rapidspin", "recover", "toxic"] + "movepool": ["haze", "hiddenpowerground", "icebeam", "rapidspin", "recover", "toxic"], + "abilities": ["Levitate"] } ] }, @@ -3990,48 +4648,59 @@ "sets": [ { "role": "Fast Support", - "movepool": ["bugbuzz", "encore", "focusblast", "gigadrain", "hiddenpowerrock", "spikes", "yawn"] + "movepool": ["bugbuzz", "encore", "focusblast", "hiddenpowerground", "hiddenpowerrock", "spikes", "uturn"], + "abilities": ["Hydration", "Sticky Hold"] } ] }, "stunfisk": { - "level": 88, + "level": 87, "sets": [ { "role": "Bulky Attacker", - "movepool": ["discharge", "earthpower", "rest", "scald", "sleeptalk", "stealthrock", "toxic"] + "movepool": ["discharge", "earthpower", "rest", "scald", "sleeptalk", "stealthrock", "toxic"], + "abilities": ["Static"] } ] }, "mienshao": { - "level": 81, + "level": 79, "sets": [ { "role": "Setup Sweeper", "movepool": ["acrobatics", "highjumpkick", "stoneedge", "substitute", "swordsdance"], + "abilities": ["Reckless"], "preferredTypes": ["Flying"] }, + { + "role": "Fast Attacker", + "movepool": ["fakeout", "highjumpkick", "stoneedge", "uturn"], + "abilities": ["Regenerator"] + }, { "role": "Wallbreaker", - "movepool": ["fakeout", "highjumpkick", "stoneedge", "uturn"] + "movepool": ["drainpunch", "highjumpkick", "stoneedge", "uturn"], + "abilities": ["Reckless"] } ] }, "druddigon": { - "level": 85, + "level": 84, "sets": [ { "role": "Bulky Support", - "movepool": ["dragontail", "earthquake", "glare", "outrage", "stealthrock", "suckerpunch", "superpower"] + "movepool": ["dragontail", "earthquake", "glare", "outrage", "stealthrock", "suckerpunch", "superpower"], + "abilities": ["Rough Skin"] } ] }, "golurk": { - "level": 84, + "level": 81, "sets": [ { "role": "Wallbreaker", "movepool": ["dynamicpunch", "earthquake", "icepunch", "rockpolish", "stealthrock", "stoneedge"], + "abilities": ["No Guard"], "preferredTypes": ["Fighting"] } ] @@ -4041,11 +4710,13 @@ "sets": [ { "role": "Fast Attacker", - "movepool": ["ironhead", "nightslash", "pursuit", "suckerpunch"] + "movepool": ["ironhead", "nightslash", "pursuit", "suckerpunch"], + "abilities": ["Defiant"] }, { "role": "Setup Sweeper", "movepool": ["ironhead", "lowkick", "nightslash", "suckerpunch", "swordsdance"], + "abilities": ["Defiant"], "preferredTypes": ["Fighting"] } ] @@ -4055,20 +4726,23 @@ "sets": [ { "role": "Bulky Attacker", - "movepool": ["earthquake", "headcharge", "stoneedge", "superpower", "swordsdance"] + "movepool": ["earthquake", "headcharge", "stoneedge", "superpower", "swordsdance"], + "abilities": ["Reckless", "Sap Sipper"] } ] }, "braviary": { - "level": 86, + "level": 84, "sets": [ { "role": "Bulky Attacker", - "movepool": ["bravebird", "bulkup", "roost", "superpower"] + "movepool": ["bravebird", "bulkup", "roost", "superpower"], + "abilities": ["Defiant"] }, { "role": "Fast Attacker", - "movepool": ["bravebird", "return", "superpower", "uturn"] + "movepool": ["bravebird", "return", "superpower", "uturn"], + "abilities": ["Defiant"] } ] }, @@ -4077,11 +4751,13 @@ "sets": [ { "role": "Bulky Attacker", - "movepool": ["bravebird", "foulplay", "roost", "taunt", "toxic", "whirlwind"] + "movepool": ["bravebird", "foulplay", "roost", "taunt", "toxic", "whirlwind"], + "abilities": ["Overcoat"] }, { "role": "Staller", - "movepool": ["foulplay", "roost", "taunt", "toxic", "whirlwind"] + "movepool": ["foulplay", "roost", "taunt", "toxic", "whirlwind"], + "abilities": ["Overcoat"] } ] }, @@ -4090,7 +4766,8 @@ "sets": [ { "role": "Wallbreaker", - "movepool": ["fireblast", "gigadrain", "suckerpunch", "superpower"] + "movepool": ["fireblast", "gigadrain", "suckerpunch", "superpower"], + "abilities": ["Flash Fire"] } ] }, @@ -4098,49 +4775,56 @@ "level": 79, "sets": [ { - "role": "Fast Attacker", - "movepool": ["honeclaws", "ironhead", "rockslide", "superpower", "xscissor"] + "role": "Setup Sweeper", + "movepool": ["honeclaws", "ironhead", "rockslide", "superpower", "xscissor"], + "abilities": ["Hustle"], + "preferredTypes": ["Fighting"] } ] }, "hydreigon": { - "level": 79, + "level": 78, "sets": [ { "role": "Fast Attacker", - "movepool": ["darkpulse", "dracometeor", "fireblast", "focusblast", "roost", "uturn"] + "movepool": ["darkpulse", "dracometeor", "fireblast", "focusblast", "roost", "uturn"], + "abilities": ["Levitate"] } ] }, "volcarona": { - "level": 78, + "level": 77, "sets": [ { "role": "Setup Sweeper", - "movepool": ["bugbuzz", "fierydance", "fireblast", "gigadrain", "hiddenpowerrock", "quiverdance", "roost"] + "movepool": ["bugbuzz", "fierydance", "fireblast", "gigadrain", "hiddenpowerrock", "quiverdance", "roost"], + "abilities": ["Flame Body"] } ] }, "cobalion": { - "level": 79, + "level": 77, "sets": [ { "role": "Bulky Attacker", "movepool": ["closecombat", "ironhead", "stealthrock", "stoneedge", "taunt", "thunderwave", "toxic"], + "abilities": ["Justified"], "preferredTypes": ["Steel"] }, { "role": "Bulky Setup", - "movepool": ["closecombat", "ironhead", "stoneedge", "swordsdance"] + "movepool": ["closecombat", "ironhead", "stoneedge", "swordsdance"], + "abilities": ["Justified"] } ] }, "terrakion": { - "level": 77, + "level": 76, "sets": [ { "role": "Fast Attacker", "movepool": ["closecombat", "earthquake", "quickattack", "stealthrock", "stoneedge", "swordsdance"], + "abilities": ["Justified"], "preferredTypes": ["Ground"] } ] @@ -4150,7 +4834,8 @@ "sets": [ { "role": "Fast Attacker", - "movepool": ["closecombat", "leafblade", "stoneedge", "swordsdance"] + "movepool": ["closecombat", "leafblade", "stoneedge", "swordsdance"], + "abilities": ["Justified"] } ] }, @@ -4159,51 +4844,58 @@ "sets": [ { "role": "Bulky Setup", - "movepool": ["acrobatics", "bulkup", "superpower", "taunt"] + "movepool": ["acrobatics", "bulkup", "superpower", "taunt"], + "abilities": ["Defiant"] }, { "role": "Fast Attacker", - "movepool": ["focusblast", "heatwave", "hurricane", "uturn"] + "movepool": ["focusblast", "heatwave", "hurricane", "uturn"], + "abilities": ["Defiant"] } ] }, "tornadustherian": { - "level": 76, + "level": 75, "sets": [ { "role": "Fast Attacker", - "movepool": ["focusblast", "heatwave", "hurricane", "superpower", "uturn"] + "movepool": ["focusblast", "heatwave", "hurricane", "superpower", "uturn"], + "abilities": ["Regenerator"] } ] }, "thundurus": { - "level": 76, + "level": 77, "sets": [ { "role": "Setup Sweeper", - "movepool": ["focusblast", "hiddenpowerflying", "hiddenpowerice", "nastyplot", "substitute", "thunderbolt"] + "movepool": ["focusblast", "hiddenpowerflying", "hiddenpowerice", "nastyplot", "substitute", "thunderbolt"], + "abilities": ["Prankster"] }, { "role": "Fast Support", - "movepool": ["focusblast", "hiddenpowerflying", "hiddenpowerice", "taunt", "thunderbolt", "thunderwave"] + "movepool": ["hiddenpowerflying", "hiddenpowerice", "superpower", "taunt", "thunderbolt", "thunderwave"], + "abilities": ["Prankster"] } ] }, "thundurustherian": { - "level": 79, + "level": 78, "sets": [ { "role": "Fast Attacker", - "movepool": ["focusblast", "hiddenpowerflying", "hiddenpowerice", "nastyplot", "thunderbolt", "voltswitch"] + "movepool": ["focusblast", "hiddenpowerflying", "hiddenpowerice", "nastyplot", "thunderbolt", "voltswitch"], + "abilities": ["Volt Absorb"] } ] }, "reshiram": { - "level": 74, + "level": 72, "sets": [ { "role": "Bulky Attacker", - "movepool": ["blueflare", "dracometeor", "flamecharge", "roost", "toxic"] + "movepool": ["blueflare", "dracometeor", "flamecharge", "roost", "toxic"], + "abilities": ["Turboblaze"] } ] }, @@ -4212,11 +4904,13 @@ "sets": [ { "role": "Bulky Attacker", - "movepool": ["boltstrike", "dracometeor", "outrage", "roost", "voltswitch"] + "movepool": ["boltstrike", "dracometeor", "outrage", "roost", "voltswitch"], + "abilities": ["Teravolt"] }, { "role": "Setup Sweeper", - "movepool": ["boltstrike", "honeclaws", "outrage", "roost", "substitute"] + "movepool": ["boltstrike", "honeclaws", "outrage", "roost", "substitute"], + "abilities": ["Teravolt"] } ] }, @@ -4226,24 +4920,28 @@ { "role": "Wallbreaker", "movepool": ["earthpower", "focusblast", "psychic", "rockpolish", "rockslide", "sludgewave", "stealthrock"], + "abilities": ["Sheer Force"], "preferredTypes": ["Rock"] }, { "role": "Setup Sweeper", - "movepool": ["calmmind", "earthpower", "focusblast", "psychic", "rockpolish", "sludgewave"] + "movepool": ["calmmind", "earthpower", "focusblast", "psychic", "rockpolish", "sludgewave"], + "abilities": ["Sheer Force"] } ] }, "landorustherian": { - "level": 80, + "level": 76, "sets": [ { "role": "Bulky Support", - "movepool": ["earthquake", "stealthrock", "stoneedge", "toxic", "uturn"] + "movepool": ["earthquake", "stealthrock", "stoneedge", "toxic", "uturn"], + "abilities": ["Intimidate"] }, { "role": "Setup Sweeper", "movepool": ["earthquake", "rockpolish", "stoneedge", "superpower", "swordsdance"], + "abilities": ["Intimidate"], "preferredTypes": ["Rock"] } ] @@ -4253,20 +4951,23 @@ "sets": [ { "role": "Staller", - "movepool": ["earthpower", "icebeam", "roost", "substitute"] + "movepool": ["earthpower", "icebeam", "roost", "substitute"], + "abilities": ["Pressure"] }, { "role": "Bulky Attacker", - "movepool": ["dracometeor", "earthpower", "focusblast", "icebeam", "outrage", "roost", "substitute"] + "movepool": ["dracometeor", "earthpower", "focusblast", "icebeam", "outrage", "roost", "substitute"], + "abilities": ["Pressure"] } ] }, "kyuremblack": { - "level": 75, + "level": 74, "sets": [ { "role": "Bulky Attacker", - "movepool": ["earthpower", "fusionbolt", "icebeam", "outrage", "roost", "substitute"] + "movepool": ["earthpower", "fusionbolt", "icebeam", "outrage", "roost", "substitute"], + "abilities": ["Teravolt"] } ] }, @@ -4275,55 +4976,63 @@ "sets": [ { "role": "Fast Attacker", - "movepool": ["dracometeor", "earthpower", "fusionflare", "icebeam", "roost"] + "movepool": ["dracometeor", "earthpower", "fusionflare", "icebeam", "roost"], + "abilities": ["Turboblaze"] } ] }, "keldeo": { - "level": 78, + "level": 77, "sets": [ { - "role": "Fast Attacker", - "movepool": ["calmmind", "hiddenpowerelectric", "hiddenpowerflying", "hydropump", "icywind", "scald", "secretsword"] + "role": "Setup Sweeper", + "movepool": ["calmmind", "hiddenpowerelectric", "hiddenpowerflying", "hiddenpowerice", "hydropump", "scald", "secretsword"], + "abilities": ["Justified"] }, { "role": "Bulky Setup", - "movepool": ["calmmind", "scald", "secretsword", "substitute"] - } - ] - }, - "meloetta": { - "level": 81, - "sets": [ + "movepool": ["calmmind", "scald", "secretsword", "substitute"], + "abilities": ["Justified"] + }, { "role": "Fast Attacker", - "movepool": ["calmmind", "focusblast", "hypervoice", "psyshock", "uturn"] + "movepool": ["focusblast", "hydropump", "scald", "secretsword"], + "abilities": ["Justified"] } ] }, - "meloettapirouette": { - "level": 81, + "meloetta": { + "level": 80, "sets": [ { "role": "Fast Attacker", - "movepool": ["closecombat", "relicsong", "return", "shadowclaw"] + "movepool": ["calmmind", "focusblast", "hypervoice", "psyshock", "uturn"], + "abilities": ["Serene Grace"] + }, + { + "role": "Wallbreaker", + "movepool": ["closecombat", "relicsong", "return", "shadowclaw"], + "abilities": ["Serene Grace"] } ] }, "genesect": { - "level": 75, + "level": 73, "sets": [ { "role": "Setup Sweeper", - "movepool": ["blazekick", "ironhead", "shiftgear", "thunderbolt", "xscissor"] + "movepool": ["blazekick", "ironhead", "shiftgear", "thunderbolt", "xscissor"], + "abilities": ["Download"] }, { "role": "Wallbreaker", - "movepool": ["blazekick", "extremespeed", "ironhead", "uturn"] + "movepool": ["blazekick", "extremespeed", "ironhead", "uturn"], + "abilities": ["Download"] }, { "role": "Fast Attacker", "movepool": ["bugbuzz", "flamethrower", "flashcannon", "icebeam", "thunderbolt", "uturn"], + "abilities": ["Download"], "preferredTypes": ["Bug"] } ] diff --git a/data/mods/gen5/random-teams.ts b/data/random-battles/gen5/teams.ts similarity index 74% rename from data/mods/gen5/random-teams.ts rename to data/random-battles/gen5/teams.ts index 58d2747b6d00..0454eef66335 100644 --- a/data/mods/gen5/random-teams.ts +++ b/data/random-battles/gen5/teams.ts @@ -1,8 +1,7 @@ -import RandomGen6Teams from '../gen6/random-teams'; -import {Utils} from '../../../lib'; -import {toID} from '../../../sim/dex'; +import RandomGen6Teams from '../gen6/teams'; import {PRNG} from '../../../sim'; -import {MoveCounter} from '../gen8/random-teams'; +import {MoveCounter} from '../gen8/teams'; +import {toID} from '../../../sim/dex'; // Moves that restore HP: const RECOVERY_MOVES = [ @@ -48,11 +47,11 @@ const MOVE_PAIRS = [ /** Pokemon who always want priority STAB, and are fine with it as its only STAB move of that type */ const PRIORITY_POKEMON = [ - 'bisharp', 'breloom', 'cacturne', 'dusknoir', 'honchkrow', 'scizor', 'shedinja', + 'bisharp', 'breloom', 'cacturne', 'dusknoir', 'honchkrow', 'scizor', 'shedinja', 'shiftry', ]; export class RandomGen5Teams extends RandomGen6Teams { - randomSets: {[species: string]: RandomTeamsTypes.RandomSpeciesData} = require('./random-sets.json'); + randomSets: {[species: string]: RandomTeamsTypes.RandomSpeciesData} = require('./sets.json'); constructor(format: string | Format, prng: PRNG | PRNGSeed | null) { super(format, prng); @@ -61,7 +60,7 @@ export class RandomGen5Teams extends RandomGen6Teams { this.moveEnforcementCheckers = { Bug: (movePool, moves, abilities, types, counter) => ( - !counter.get('Bug') && (movePool.includes('megahorn') || abilities.has('Tinted Lens')) + !counter.get('Bug') && (movePool.includes('megahorn') || abilities.includes('Tinted Lens')) ), Dark: (movePool, moves, abilities, types, counter) => !counter.get('Dark'), Dragon: (movePool, moves, abilities, types, counter) => !counter.get('Dragon'), @@ -69,7 +68,7 @@ export class RandomGen5Teams extends RandomGen6Teams { Fighting: (movePool, moves, abilities, types, counter) => !counter.get('Fighting'), Fire: (movePool, moves, abilities, types, counter) => !counter.get('Fire'), Flying: (movePool, moves, abilities, types, counter, species) => ( - !counter.get('Flying') && !['mantine', 'murkrow'].includes(species.id) && + !counter.get('Flying') && !['aerodactyl', 'mantine', 'murkrow'].includes(species.id) && !movePool.includes('hiddenpowerflying') ), Ghost: (movePool, moves, abilities, types, counter) => !counter.get('Ghost'), @@ -84,26 +83,27 @@ export class RandomGen5Teams extends RandomGen6Teams { Psychic: (movePool, moves, abilities, types, counter) => ( !counter.get('Psychic') && (types.has('Fighting') || movePool.includes('calmmind')) ), - Rock: (movePool, moves, abilities, types, counter, species) => ( - !counter.get('Rock') && (species.baseStats.atk >= 95 || abilities.has('Rock Head')) - ), + Rock: (movePool, moves, abilities, types, counter, species) => (!counter.get('Rock') && species.baseStats.atk >= 80), Steel: (movePool, moves, abilities, types, counter, species) => ( !counter.get('Steel') && ['aggron', 'metagross'].includes(species.id) ), Water: (movePool, moves, abilities, types, counter) => !counter.get('Water'), }; + // Nature Power is Earthquake this gen + this.cachedStatusMoves = this.dex.moves.all() + .filter(move => move.category === 'Status' && move.id !== 'naturepower') + .map(move => move.id); } cullMovePool( types: string[], moves: Set, - abilities: Set, + abilities: string[], counter: MoveCounter, movePool: string[], teamDetails: RandomTeamsTypes.TeamDetails, species: Species, isLead: boolean, - isDoubles: boolean, preferredType: string, role: RandomTeamsTypes.Role, ): void { @@ -173,13 +173,15 @@ export class RandomGen5Teams extends RandomGen6Teams { if (movePool.includes('spikes')) this.fastPop(movePool, movePool.indexOf('spikes')); if (moves.size + movePool.length <= this.maxMoveCount) return; } + if (teamDetails.statusCure) { + if (movePool.includes('aromatherapy')) this.fastPop(movePool, movePool.indexOf('aromatherapy')); + if (movePool.includes('healbell')) this.fastPop(movePool, movePool.indexOf('healbell')); + if (moves.size + movePool.length <= this.maxMoveCount) return; + } // Develop additional move lists const badWithSetup = ['healbell', 'pursuit', 'toxic']; - // Nature Power is Earthquake this gen - const statusMoves = this.dex.moves.all() - .filter(move => move.category === 'Status' && move.id !== 'naturepower') - .map(move => move.id); + const statusMoves = this.cachedStatusMoves; // General incompatibilities const incompatiblePairs = [ @@ -199,6 +201,7 @@ export class RandomGen5Teams extends RandomGen6Teams { [['bodyslam', 'return'], ['bodyslam', 'doubleedge']], [['gigadrain', 'leafstorm'], ['leafstorm', 'petaldance', 'powerwhip']], [['drainpunch', 'focusblast'], ['closecombat', 'highjumpkick', 'superpower']], + ['payback', 'pursuit'], // Assorted hardcodes go here: // Zebstrika @@ -219,6 +222,8 @@ export class RandomGen5Teams extends RandomGen6Teams { ['switcheroo', 'suckerpunch'], // Jirachi ['bodyslam', 'healingwish'], + // Shuckle + ['knockoff', 'protect'], ]; for (const pair of incompatiblePairs) this.incompatibleMoves(moves, movePool, pair[0], pair[1]); @@ -226,26 +231,39 @@ export class RandomGen5Teams extends RandomGen6Teams { if (species.id === 'dugtrio') this.incompatibleMoves(moves, movePool, statusMoves, 'memento'); const statusInflictingMoves = ['stunspore', 'thunderwave', 'toxic', 'willowisp', 'yawn']; - if (!abilities.has('Prankster') && role !== 'Staller') { + if (!abilities.includes('Prankster') && role !== 'Staller') { this.incompatibleMoves(moves, movePool, statusInflictingMoves, statusInflictingMoves); } + + if (abilities.includes('Guts')) this.incompatibleMoves(moves, movePool, 'protect', 'swordsdance'); + + // Cull filler moves for otherwise fixed set Stealth Rock users + if (!teamDetails.stealthRock) { + if (species.id === 'registeel' && role === 'Staller') { + if (movePool.includes('thunderwave')) this.fastPop(movePool, movePool.indexOf('thunderwave')); + if (moves.size + movePool.length <= this.maxMoveCount) return; + } + if (species.baseSpecies === 'Wormadam' && role === 'Staller') { + if (movePool.includes('suckerpunch')) this.fastPop(movePool, movePool.indexOf('suckerpunch')); + if (moves.size + movePool.length <= this.maxMoveCount) return; + } + } } // Generate random moveset for a given species, role, preferred type. randomMoveset( types: string[], - abilities: Set, + abilities: string[], teamDetails: RandomTeamsTypes.TeamDetails, species: Species, isLead: boolean, - isDoubles: boolean, movePool: string[], preferredType: string, role: RandomTeamsTypes.Role, ): Set { const moves = new Set(); let counter = this.newQueryMoves(moves, species, preferredType, abilities); - this.cullMovePool(types, moves, abilities, counter, movePool, teamDetails, species, isLead, isDoubles, + this.cullMovePool(types, moves, abilities, counter, movePool, teamDetails, species, isLead, preferredType, role); // If there are only four moves, add all moves and return early @@ -253,7 +271,7 @@ export class RandomGen5Teams extends RandomGen6Teams { // Still need to ensure that multiple Hidden Powers are not added (if maxMoveCount is increased) while (movePool.length) { const moveid = this.sample(movePool); - counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles, + counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, movePool, preferredType, role); } return moves; @@ -269,36 +287,36 @@ export class RandomGen5Teams extends RandomGen6Teams { // 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, + counter = this.addMove(move, moves, types, abilities, teamDetails, species, isLead, movePool, preferredType, role); } // Add other moves you really want to have, e.g. STAB, recovery, setup. // Enforce Facade if Guts is a possible ability - if (movePool.includes('facade') && abilities.has('Guts')) { - counter = this.addMove('facade', moves, types, abilities, teamDetails, species, isLead, isDoubles, + if (movePool.includes('facade') && abilities.includes('Guts')) { + counter = this.addMove('facade', moves, types, abilities, teamDetails, species, isLead, movePool, preferredType, role); } - // Enforce Seismic Toss, Spore + // Enforce Seismic Toss and Spore for (const moveid of ['seismictoss', 'spore']) { if (movePool.includes(moveid)) { - counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles, + counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, movePool, preferredType, role); } } // Enforce Thunder Wave on Prankster users - if (movePool.includes('thunderwave') && abilities.has('Prankster')) { - counter = this.addMove('thunderwave', moves, types, abilities, teamDetails, species, isLead, isDoubles, + if (movePool.includes('thunderwave') && abilities.includes('Prankster')) { + counter = this.addMove('thunderwave', moves, types, abilities, teamDetails, species, isLead, movePool, preferredType, role); } // Enforce hazard removal on Bulky Support and Spinner if the team doesn't already have it if (['Bulky Support', 'Spinner'].includes(role) && !teamDetails.rapidSpin) { if (movePool.includes('rapidspin')) { - counter = this.addMove('rapidspin', moves, types, abilities, teamDetails, species, isLead, isDoubles, + counter = this.addMove('rapidspin', moves, types, abilities, teamDetails, species, isLead, movePool, preferredType, role); } } @@ -315,7 +333,7 @@ export class RandomGen5Teams extends RandomGen6Teams { } if (priorityMoves.length) { const moveid = this.sample(priorityMoves); - counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles, + counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, movePool, preferredType, role); } } @@ -334,7 +352,7 @@ export class RandomGen5Teams extends RandomGen6Teams { while (runEnforcementChecker(type)) { if (!stabMoves.length) break; const moveid = this.sampleNoReplace(stabMoves); - counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles, + counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, movePool, preferredType, role); } } @@ -351,7 +369,7 @@ export class RandomGen5Teams extends RandomGen6Teams { } if (stabMoves.length) { const moveid = this.sample(stabMoves); - counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles, + counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, movePool, preferredType, role); } } @@ -368,12 +386,12 @@ export class RandomGen5Teams extends RandomGen6Teams { } if (stabMoves.length) { const moveid = this.sample(stabMoves); - counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles, + counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, movePool, preferredType, role); } else { // If they have no regular STAB move, enforce U-turn on Bug types. if (movePool.includes('uturn') && types.includes('Bug')) { - counter = this.addMove('uturn', moves, types, abilities, teamDetails, species, isLead, isDoubles, + counter = this.addMove('uturn', moves, types, abilities, teamDetails, species, isLead, movePool, preferredType, role); } } @@ -384,17 +402,17 @@ export class RandomGen5Teams extends RandomGen6Teams { 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, + counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, movePool, preferredType, role); } } // Enforce Staller moves if (role === 'Staller') { - const enforcedMoves = ['protect', 'toxic', 'wish']; + const enforcedMoves = ['protect', 'toxic']; for (const move of enforcedMoves) { if (movePool.includes(move)) { - counter = this.addMove(move, moves, types, abilities, teamDetails, species, isLead, isDoubles, + counter = this.addMove(move, moves, types, abilities, teamDetails, species, isLead, movePool, preferredType, role); } } @@ -406,14 +424,14 @@ export class RandomGen5Teams extends RandomGen6Teams { 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, + counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, movePool, preferredType, 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, + counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, movePool, preferredType, role); } } @@ -429,7 +447,7 @@ export class RandomGen5Teams extends RandomGen6Teams { } if (attackingMoves.length) { const moveid = this.sample(attackingMoves); - counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles, + counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, movePool, preferredType, role); } } @@ -450,7 +468,7 @@ export class RandomGen5Teams extends RandomGen6Teams { } if (coverageMoves.length) { const moveid = this.sample(coverageMoves); - counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles, + counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, movePool, preferredType, role); } } @@ -459,15 +477,15 @@ export class RandomGen5Teams extends RandomGen6Teams { // Choose remaining moves randomly from movepool and add them to moves list: while (moves.size < this.maxMoveCount && movePool.length) { const moveid = this.sample(movePool); - counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles, + counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, movePool, preferredType, 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, + counter = this.addMove(pair[1], moves, types, abilities, teamDetails, species, isLead, movePool, preferredType, role); } if (moveid === pair[1] && movePool.includes(pair[0])) { - counter = this.addMove(pair[0], moves, types, abilities, teamDetails, species, isLead, isDoubles, + counter = this.addMove(pair[0], moves, types, abilities, teamDetails, species, isLead, movePool, preferredType, role); } } @@ -479,93 +497,27 @@ export class RandomGen5Teams extends RandomGen6Teams { ability: string, types: Set, moves: Set, - abilities: Set, + abilities: string[], counter: MoveCounter, movePool: string[], teamDetails: RandomTeamsTypes.TeamDetails, species: Species, - isDoubles: boolean, preferredType: string, role: RandomTeamsTypes.Role ): boolean { switch (ability) { - case 'Flare Boost': case 'Gluttony': case 'Hyper Cutter': case 'Ice Body': case 'Moody': case 'Pickpocket': - case 'Pressure': case 'Sand Veil': case 'Snow Cloak': case 'Steadfast': case 'Unburden': - return true; - case 'Chlorophyll': - // Petal Dance is for Lilligant - return ( - species.baseStats.spe > 100 || moves.has('petaldance') || - (!moves.has('sunnyday') && !teamDetails.sun) - ); - case 'Compound Eyes': case 'No Guard': - return !counter.get('inaccurate'); - case 'Contrary': case 'Skill Link': + case 'Chlorophyll': case 'Solar Power': + return !teamDetails.sun; + case 'Hydration': case 'Swift Swim': + return !teamDetails.rain; + case 'Iron Fist': case 'Sheer Force': return !counter.get(toID(ability)); - case 'Defiant': case 'Justified': case 'Moxie': - return !counter.get('Physical'); - case 'Guts': - return (!moves.has('facade') && !moves.has('sleeptalk')); - case 'Hustle': - return (counter.get('Physical') < 2 || species.id === 'delibird'); - case 'Hydration': case 'Rain Dish': case 'Swift Swim': - return ( - species.baseStats.spe > 100 || !moves.has('raindance') && !teamDetails.rain || - !moves.has('raindance') && ['Rock Head', 'Water Absorb'].some(abil => abilities.has(abil)) - ); - case 'Intimidate': - // Slam part is for Tauros - return (moves.has('bodyslam') || species.id === 'staraptor'); - case 'Iron Fist': - return (!counter.get(toID(ability)) || species.id === 'golurk'); - case 'Lightning Rod': - return (types.has('Ground') || ((!!teamDetails.rain || moves.has('raindance')) && species.id === 'seaking')); - case 'Magic Guard': case 'Speed Boost': - return (abilities.has('Tinted Lens') && role === 'Wallbreaker'); - case 'Mold Breaker': - return (species.baseSpecies === 'Basculin' || species.id === 'rampardos'); case 'Overgrow': return !counter.get('Grass'); - case 'Prankster': - return !counter.get('Status'); - case 'Poison Heal': - return (species.id === 'breloom' && role === 'Fast Attacker'); - case 'Synchronize': - return (counter.get('Status') < 2 || !!counter.get('recoil')); - case 'Regenerator': - return ((species.id === 'mienshao' && role !== 'Wallbreaker') || species.id === 'reuniclus'); - case 'Reckless': case 'Rock Head': + case 'Rock Head': return !counter.get('recoil'); case 'Sand Force': case 'Sand Rush': return !teamDetails.sand; - case 'Serene Grace': - return !counter.get('serenegrace'); - case 'Sheer Force': - return (!counter.get('sheerforce') || moves.has('doubleedge') || abilities.has('Guts')); - case 'Simple': - return !counter.get('setup'); - case 'Solar Power': - return (!counter.get('Special') || !teamDetails.sun); - case 'Sticky Hold': - return species.id !== 'accelgor'; - case 'Sturdy': - return (!!counter.get('recoil') && !counter.get('recovery') || species.id === 'steelix' && !!counter.get('sheerforce')); - case 'Swarm': - return !counter.get('Bug'); - case 'Technician': - return (!counter.get('technician') || moves.has('tailslap')); - case 'Tinted Lens': - // Night Shade part is for Noctowl - return ( - moves.has('nightshade') || - ['illumise', 'sigilyph', 'yanmega'].some(m => species.id === (m)) && role !== 'Wallbreaker' - ); - case 'Torrent': - return !counter.get('Water'); - case 'Unaware': - return ((role !== 'Bulky Attacker' && role !== 'Bulky Setup') || species.id === 'swoobat'); - case 'Water Absorb': - return moves.has('raindance') || ['Drizzle', 'Unaware', 'Volt Absorb'].some(abil => abilities.has(abil)); } return false; @@ -575,87 +527,44 @@ export class RandomGen5Teams extends RandomGen6Teams { getAbility( types: Set, moves: Set, - abilities: Set, + abilities: string[], counter: MoveCounter, movePool: string[], teamDetails: RandomTeamsTypes.TeamDetails, species: Species, - isDoubles: boolean, preferredType: string, role: RandomTeamsTypes.Role, ): string { - const abilityData = Array.from(abilities).map(a => this.dex.abilities.get(a)); - Utils.sortBy(abilityData, abil => -abil.rating); - - if (abilityData.length <= 1) return abilityData[0].name; + if (abilities.length <= 1) return abilities[0]; // Hard-code abilities here - if ( - abilities.has('Guts') && - !abilities.has('Quick Feet') && - (moves.has('facade') || (moves.has('sleeptalk') && moves.has('rest'))) - ) return 'Guts'; - if (species.id === 'starmie') return role === 'Wallbreaker' ? 'Analytic' : 'Natural Cure'; - if (species.id === 'ninetales') return 'Drought'; - if (species.id === 'arcanine') return 'Intimidate'; - if (species.id === 'rampardos' && role === 'Bulky Attacker') return 'Mold Breaker'; - if (species.id === 'altaria') return 'Natural Cure'; - if (species.id === 'mandibuzz') return 'Overcoat'; - // If Ambipom doesn't qualify for Technician, Skill Link is useless on it - if (species.id === 'ambipom' && !counter.get('technician')) return 'Pickup'; - if (['spiritomb', 'vespiquen', 'wailord', 'weavile'].includes(species.id)) return 'Pressure'; - if (species.id === 'druddigon') return 'Rough Skin'; - if (species.id === 'stunfisk') return 'Static'; - if (species.id === 'zangoose') return 'Toxic Boost'; - if (species.id === 'porygon2') return 'Trace'; - - if (abilities.has('Harvest')) return 'Harvest'; - if (abilities.has('Shed Skin') && moves.has('rest') && !moves.has('sleeptalk')) return 'Shed Skin'; - if (abilities.has('Unburden') && ['acrobatics', 'closecombat'].some(m => moves.has(m))) return 'Unburden'; - - let abilityAllowed: Ability[] = []; + if (species.id === 'marowak' && counter.get('recoil')) return 'Rock Head'; + if (species.id === 'kingler' && counter.get('sheerforce')) return 'Sheer Force'; + 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 abilityData) { - if (ability.rating >= 1 && !this.shouldCullAbility( - ability.name, types, moves, abilities, counter, movePool, teamDetails, species, isDoubles, preferredType, role + for (const ability of abilities) { + if (!this.shouldCullAbility( + ability, types, moves, abilities, counter, movePool, teamDetails, species, preferredType, role )) { abilityAllowed.push(ability); } } - // If all abilities are rejected, re-allow all abilities - if (!abilityAllowed.length) { - for (const ability of abilityData) { - if (ability.rating > 0) abilityAllowed.push(ability); - } - if (!abilityAllowed.length) abilityAllowed = abilityData; - } + // Pick a random allowed ability + if (abilityAllowed.length >= 1) return this.sample(abilityAllowed); - if (abilityAllowed.length === 1) return abilityAllowed[0].name; - // Sort abilities by rating with an element of randomness - // All three abilities can be chosen - if (abilityAllowed[2] && abilityAllowed[0].rating - 0.5 <= abilityAllowed[2].rating) { - if (abilityAllowed[1].rating <= abilityAllowed[2].rating) { - if (this.randomChance(1, 2)) [abilityAllowed[1], abilityAllowed[2]] = [abilityAllowed[2], abilityAllowed[1]]; - } else { - if (this.randomChance(1, 3)) [abilityAllowed[1], abilityAllowed[2]] = [abilityAllowed[2], abilityAllowed[1]]; - } - if (abilityAllowed[0].rating <= abilityAllowed[1].rating) { - if (this.randomChance(2, 3)) [abilityAllowed[0], abilityAllowed[1]] = [abilityAllowed[1], abilityAllowed[0]]; - } else { - if (this.randomChance(1, 2)) [abilityAllowed[0], abilityAllowed[1]] = [abilityAllowed[1], abilityAllowed[0]]; - } - } else { - // Third ability cannot be chosen - if (abilityAllowed[0].rating <= abilityAllowed[1].rating) { - if (this.randomChance(1, 2)) [abilityAllowed[0], abilityAllowed[1]] = [abilityAllowed[1], abilityAllowed[0]]; - } else if (abilityAllowed[0].rating - 0.5 <= abilityAllowed[1].rating) { - if (this.randomChance(1, 3)) [abilityAllowed[0], abilityAllowed[1]] = [abilityAllowed[1], abilityAllowed[0]]; - } + // 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', 'Solar Power', 'Swift Swim'].includes(a) + ); + if (weatherAbilities.length) return this.sample(weatherAbilities); } - // After sorting, choose the first ability - return abilityAllowed[0].name; + // Pick a random ability + return this.sample(abilities); } getPriorityItem( @@ -693,17 +602,17 @@ export class RandomGen5Teams extends RandomGen6Teams { } } if (moves.has('bellydrum')) return 'Sitrus Berry'; + if (moves.has('waterspout')) return 'Choice Scarf'; if (moves.has('shellsmash')) return 'White Herb'; if (moves.has('psychoshift')) return 'Flame Orb'; - if (ability === 'Magic Guard' && role !== 'Bulky Support') { - return moves.has('counter') ? 'Focus Sash' : 'Life Orb'; - } + if (ability === 'Magic Guard') return moves.has('counter') ? 'Focus Sash' : 'Life Orb'; + if (species.id === 'rampardos' && role === 'Fast Attacker') return 'Choice Scarf'; if (ability === 'Sheer Force' && counter.get('sheerforce')) return 'Life Orb'; if (moves.has('acrobatics')) return 'Flying Gem'; if (species.id === 'hitmonlee' && ability === 'Unburden') return moves.has('fakeout') ? 'Normal Gem' : 'Fighting Gem'; if (moves.has('lightscreen') && moves.has('reflect')) return 'Light Clay'; - if (moves.has('rest') && !moves.has('sleeptalk') && !['Hydration', 'Natural Cure', 'Shed Skin'].includes(ability)) { - return 'Chesto Berry'; + if (moves.has('rest') && !moves.has('sleeptalk') && !['Natural Cure', 'Shed Skin'].includes(ability)) { + return (moves.has('raindance') && ability === 'Hydration') ? 'Damp Rock' : 'Chesto Berry'; } if (role === 'Staller') return 'Leftovers'; } @@ -763,7 +672,7 @@ export class RandomGen5Teams extends RandomGen6Teams { } if ( role === 'Fast Support' && isLead && defensiveStatTotal < 255 && !counter.get('recovery') && - (!counter.get('recoil') || ability === 'Rock Head') + (counter.get('hazards') || counter.get('setup')) && (!counter.get('recoil') || ability === 'Rock Head') ) return 'Focus Sash'; // Default Items @@ -796,19 +705,10 @@ export class RandomGen5Teams extends RandomGen6Teams { randomSet( species: string | Species, teamDetails: RandomTeamsTypes.TeamDetails = {}, - isLead = false, - isDoubles = false + isLead = false ): RandomTeamsTypes.RandomSet { species = this.dex.species.get(species); - let forme = species.name; - - if (typeof species.battleOnly === 'string') { - // Only change the forme. The species has custom moves, and may have different typing and requirements. - forme = species.battleOnly; - } - if (species.cosmeticFormes) { - forme = this.sample([species.name].concat(species.cosmeticFormes)); - } + const forme = this.getForme(species); const sets = this.randomSets[species.id]["sets"]; const possibleSets = []; // Check if the Pokemon has a Spinner set @@ -836,17 +736,16 @@ export class RandomGen5Teams extends RandomGen6Teams { const ivs = {hp: 31, atk: 31, def: 31, spa: 31, spd: 31, spe: 31}; const types = species.types; - const abilities = new Set(Object.values(species.abilities)); - if (species.unreleasedHidden) abilities.delete(species.abilities.H); + const abilities = set.abilities!; // Get moves - const moves = this.randomMoveset(types, abilities, teamDetails, species, isLead, isDoubles, movePool, + const moves = this.randomMoveset(types, abilities, teamDetails, species, isLead, movePool, preferredType, role); const counter = this.newQueryMoves(moves, species, preferredType, abilities); // Get ability ability = this.getAbility(new Set(types), moves, abilities, counter, movePool, teamDetails, species, - false, preferredType, role); + preferredType, role); // Get items item = this.getPriorityItem(ability, types, moves, counter, teamDetails, species, isLead, preferredType, role); @@ -859,7 +758,7 @@ export class RandomGen5Teams extends RandomGen6Teams { item = 'Black Sludge'; } - const level = this.adjustLevel || this.randomSets[species.id]["level"] || (species.nfe ? 90 : 80); + const level = this.getLevel(species); // We use a special variable to track Hidden Power // so that we can check for all Hidden Powers at once @@ -883,20 +782,27 @@ export class RandomGen5Teams extends RandomGen6Teams { // Prepare optimal HP const srImmunity = ability === 'Magic Guard'; - let srWeakness = srImmunity ? 0 : this.dex.getEffectiveness('Rock', species); - // Crash damage move users want an odd HP to survive two misses - if (['highjumpkick', 'jumpkick'].some(m => moves.has(m))) srWeakness = 2; + const srWeakness = srImmunity ? 0 : this.dex.getEffectiveness('Rock', species); 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') && item === 'Sitrus Berry') { - // Two Substitutes should activate Sitrus Berry - if (hp % 4 === 0) break; + if (moves.has('substitute') && !['Black Sludge', 'Leftovers'].includes(item)) { + if (item === 'Sitrus Berry') { + // Two Substitutes should activate Sitrus Berry + if (hp % 4 === 0) break; + } else { + // Should be able to use Substitute four times from full HP without fainting + if (hp % 4 > 0) break; + } } else if (moves.has('bellydrum') && item === 'Sitrus Berry') { // Belly Drum should activate Sitrus Berry if (hp % 2 === 0) break; + } else if (['highjumpkick', 'jumpkick'].some(m => moves.has(m))) { + // Crash damage move users want an odd HP to survive two misses + if (hp % 2 > 0) break; } else { // Maximize number of Stealth Rock switch-ins - if (srWeakness <= 0 || ability === 'Regenerator' || ['Black Sludge', 'Leftovers', 'Life Orb'].includes(item)) break; + if (srWeakness <= 0 || ability === 'Regenerator') break; + if (srWeakness === 1 && ['Black Sludge', '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; @@ -904,8 +810,11 @@ export class RandomGen5Teams extends RandomGen6Teams { evs.hp -= 4; } - // Minimize confusion damage - if (!counter.get('Physical') && !moves.has('transform')) { + // Minimize confusion damage, including if Foul Play is its only physical attack + if ( + (!counter.get('Physical') || (counter.get('Physical') <= 1 && (moves.has('foulplay') || moves.has('rapidspin')))) && + !moves.has('transform') + ) { evs.atk = 0; ivs.atk = hasHiddenPower ? (ivs.atk || 31) - 28 : 0; } @@ -947,22 +856,17 @@ export class RandomGen5Teams extends RandomGen6Teams { const type = this.forceMonotype || this.sample(typePool); const baseFormes: {[k: string]: number} = {}; - const tierCount: {[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 [pokemonPool, baseSpeciesPool] = this.getPokemonPool(type, pokemon, isMonotype, pokemonList); while (baseSpeciesPool.length && pokemon.length < this.maxTeamSize) { const baseSpecies = this.sampleNoReplace(baseSpeciesPool); - const currentSpeciesPool: Species[] = []; - for (const poke of pokemonPool) { - const species = this.dex.species.get(poke); - if (species.baseSpecies === baseSpecies) currentSpeciesPool.push(species); - } - const species = this.sample(currentSpeciesPool); + const species = this.dex.species.get(this.sample(pokemonPool[baseSpecies])); if (!species.exists) continue; // Limit to one of each species (Species Clause) @@ -971,15 +875,13 @@ export class RandomGen5Teams extends RandomGen6Teams { // Illusion shouldn't be in the last slot if (species.name === 'Zoroark' && pokemon.length >= (this.maxTeamSize - 1)) continue; + // Prevent Shedinja from generating after Sandstorm/Hail setters + if (species.name === 'Shedinja' && (teamDetails.sand || teamDetails.hail)) continue; + // Dynamically scale limits for different team sizes. The default and minimum value is 1. const limitFactor = Math.round(this.maxTeamSize / 6) || 1; - const tier = species.tier; - - // Limit two Pokemon per tier - if (this.gen === 5 && !isMonotype && !this.forceMonotype && tierCount[tier] >= 2 * limitFactor) continue; const types = species.types; - const typeCombo = types.slice().sort().join(); if (!isMonotype && !this.forceMonotype) { let skip = false; @@ -993,7 +895,7 @@ export class RandomGen5Teams extends RandomGen6Teams { } if (skip) continue; - // Limit three weak to any type + // 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) { @@ -1003,11 +905,26 @@ export class RandomGen5Teams extends RandomGen6Teams { break; } } + if (this.dex.getEffectiveness(typeName, species) > 1) { + if (!typeDoubleWeaknesses[typeName]) typeDoubleWeaknesses[typeName] = 0; + if (typeDoubleWeaknesses[typeName] >= 1 * limitFactor) { + skip = true; + break; + } + } } if (skip) continue; - // Limit one of any type combination - if (typeComboCount[typeCombo] >= 1 * limitFactor) continue; + // Count Dry Skin as a Fire weakness + if (this.dex.getEffectiveness('Fire', species) === 0 && Object.values(species.abilities).includes('Dry Skin')) { + if (!typeWeaknesses['Fire']) typeWeaknesses['Fire'] = 0; + if (typeWeaknesses['Fire'] >= 3 * limitFactor) continue; + } + + // Limit one level 100 Pokemon + if (!this.adjustLevel && (this.getLevel(species) === 100) && numMaxLevelPokemon >= limitFactor) { + continue; + } } const set = this.randomSet(species, teamDetails, pokemon.length === 0); @@ -1021,13 +938,6 @@ export class RandomGen5Teams extends RandomGen6Teams { // Now that our Pokemon has passed all checks, we can increment our counters baseFormes[species.baseSpecies] = 1; - // Increment tier counter - if (tierCount[tier]) { - tierCount[tier]++; - } else { - tierCount[tier] = 1; - } - // Increment type counters for (const typeName of types) { if (typeName in typeCount) { @@ -1036,11 +946,6 @@ export class RandomGen5Teams extends RandomGen6Teams { typeCount[typeName] = 1; } } - if (typeCombo in typeComboCount) { - typeComboCount[typeCombo]++; - } else { - typeComboCount[typeCombo] = 1; - } // Increment weakness counter for (const typeName of this.dex.types.names()) { @@ -1048,13 +953,22 @@ export class RandomGen5Teams extends RandomGen6Teams { if (this.dex.getEffectiveness(typeName, species) > 0) { typeWeaknesses[typeName]++; } + if (this.dex.getEffectiveness(typeName, species) > 1) { + typeDoubleWeaknesses[typeName]++; + } } + // Count Dry Skin as a Fire weakness + if (set.ability === 'Dry Skin' && this.dex.getEffectiveness('Fire', species) === 0) typeWeaknesses['Fire']++; + + // Increment level 100 counter + if (set.level === 100) numMaxLevelPokemon++; // Team details if (set.ability === 'Snow Warning' || set.moves.includes('hail')) teamDetails.hail = 1; if (set.ability === 'Drizzle' || set.moves.includes('raindance')) teamDetails.rain = 1; if (set.ability === 'Sand Stream') teamDetails.sand = 1; if (set.ability === 'Drought' || set.moves.includes('sunnyday')) teamDetails.sun = 1; + if (set.moves.includes('aromatherapy') || set.moves.includes('healbell')) teamDetails.statusCure = 1; if (set.moves.includes('spikes')) teamDetails.spikes = (teamDetails.spikes || 0) + 1; if (set.moves.includes('stealthrock')) teamDetails.stealthRock = 1; if (set.moves.includes('toxicspikes')) teamDetails.toxicSpikes = 1; diff --git a/data/mods/gen6/factory-sets.json b/data/random-battles/gen6/factory-sets.json similarity index 99% rename from data/mods/gen6/factory-sets.json rename to data/random-battles/gen6/factory-sets.json index ad8e741a1f5e..12918022ce0f 100644 --- a/data/mods/gen6/factory-sets.json +++ b/data/random-battles/gen6/factory-sets.json @@ -9487,7 +9487,7 @@ "item": "Leftovers", "ability": "Sturdy", "evs": {"hp": 252, "atk": 0, "def": 4, "spa": 0, "spd": 252, "spe": 0}, - "nature": "Modest", + "nature": "Calm", "moves": [["Stealth Rock"], ["Flash Cannon"], ["Volt Switch"], ["Earth Power", "Toxic", "Thunder Wave"]] } ] @@ -10316,4 +10316,4 @@ ] } } -} \ No newline at end of file +} diff --git a/data/mods/gen6/random-sets.json b/data/random-battles/gen6/sets.json similarity index 64% rename from data/mods/gen6/random-sets.json rename to data/random-battles/gen6/sets.json index 91d09d91ac11..6ae5e64ebb7e 100644 --- a/data/mods/gen6/random-sets.json +++ b/data/random-battles/gen6/sets.json @@ -4,20 +4,23 @@ "sets": [ { "role": "Staller", - "movepool": ["gigadrain", "leechseed", "sleeppowder", "sludgebomb", "substitute"] + "movepool": ["gigadrain", "leechseed", "sleeppowder", "sludgebomb", "substitute"], + "abilities": ["Chlorophyll", "Overgrow"] }, { "role": "Bulky Attacker", - "movepool": ["earthquake", "energyball", "hiddenpowerfire", "knockoff", "sleeppowder", "sludgebomb", "synthesis"] + "movepool": ["earthquake", "energyball", "knockoff", "sleeppowder", "sludgebomb", "synthesis"], + "abilities": ["Chlorophyll", "Overgrow"] } ] }, "venusaurmega": { - "level": 79, + "level": 78, "sets": [ { "role": "Bulky Attacker", - "movepool": ["earthquake", "gigadrain", "hiddenpowerfire", "knockoff", "sleeppowder", "sludgebomb", "synthesis"] + "movepool": ["earthquake", "gigadrain", "knockoff", "sleeppowder", "sludgebomb", "synthesis"], + "abilities": ["Chlorophyll"] } ] }, @@ -26,38 +29,48 @@ "sets": [ { "role": "Bulky Attacker", - "movepool": ["airslash", "earthquake", "fireblast", "roost", "willowisp"] + "movepool": ["airslash", "earthquake", "fireblast", "roost", "willowisp"], + "abilities": ["Blaze", "Solar Power"] } ] }, "charizardmegax": { - "level": 76, + "level": 74, "sets": [ { "role": "Setup Sweeper", - "movepool": ["dragonclaw", "dragondance", "earthquake", "flareblitz", "roost"] + "movepool": ["dragonclaw", "dragondance", "earthquake", "flareblitz", "roost"], + "abilities": ["Blaze"] } ] }, "charizardmegay": { - "level": 76, + "level": 74, "sets": [ { "role": "Fast Attacker", - "movepool": ["airslash", "fireblast", "focusblast", "roost", "solarbeam"] + "movepool": ["airslash", "fireblast", "roost", "solarbeam"], + "abilities": ["Blaze"] + }, + { + "role": "Bulky Attacker", + "movepool": ["dragonpulse", "fireblast", "roost", "solarbeam"], + "abilities": ["Blaze"] } ] }, "blastoise": { - "level": 84, + "level": 85, "sets": [ { "role": "Bulky Support", - "movepool": ["icebeam", "rapidspin", "roar", "scald", "toxic"] + "movepool": ["icebeam", "rapidspin", "roar", "scald", "toxic"], + "abilities": ["Torrent"] }, { "role": "Staller", - "movepool": ["haze", "icebeam", "protect", "rapidspin", "scald", "toxic"] + "movepool": ["haze", "icebeam", "protect", "rapidspin", "scald", "toxic"], + "abilities": ["Torrent"] } ] }, @@ -66,52 +79,58 @@ "sets": [ { "role": "Bulky Support", - "movepool": ["aurasphere", "darkpulse", "icebeam", "rapidspin", "scald"] + "movepool": ["aurasphere", "darkpulse", "icebeam", "rapidspin", "scald"], + "abilities": ["Rain Dish"] } ] }, "butterfree": { - "level": 90, + "level": 92, "sets": [ { "role": "Setup Sweeper", - "movepool": ["bugbuzz", "energyball", "psychic", "quiverdance", "sleeppowder"] + "movepool": ["bugbuzz", "psychic", "quiverdance", "sleeppowder"], + "abilities": ["Tinted Lens"] } ] }, "beedrill": { - "level": 90, + "level": 94, "sets": [ { "role": "Fast Support", - "movepool": ["defog", "knockoff", "poisonjab", "toxicspikes", "uturn"] + "movepool": ["defog", "knockoff", "poisonjab", "toxicspikes", "uturn"], + "abilities": ["Swarm"] } ] }, "beedrillmega": { - "level": 81, + "level": 78, "sets": [ { "role": "Fast Attacker", - "movepool": ["drillrun", "knockoff", "poisonjab", "protect", "uturn"] + "movepool": ["drillrun", "knockoff", "poisonjab", "protect", "uturn"], + "abilities": ["Swarm"] } ] }, "pidgeot": { - "level": 88, + "level": 89, "sets": [ { "role": "Bulky Attacker", - "movepool": ["bravebird", "defog", "heatwave", "return", "roost", "uturn"] + "movepool": ["bravebird", "defog", "heatwave", "return", "roost", "uturn"], + "abilities": ["Big Pecks"] } ] }, "pidgeotmega": { - "level": 79, + "level": 78, "sets": [ { "role": "Bulky Attacker", - "movepool": ["defog", "heatwave", "hurricane", "roost", "uturn", "workup"] + "movepool": ["defog", "heatwave", "hurricane", "roost", "uturn", "workup"], + "abilities": ["Big Pecks"] } ] }, @@ -120,7 +139,9 @@ "sets": [ { "role": "Wallbreaker", - "movepool": ["facade", "flamewheel", "protect", "suckerpunch", "swordsdance", "uturn"] + "movepool": ["crunch", "facade", "flamewheel", "protect", "suckerpunch", "swordsdance", "uturn"], + "abilities": ["Guts"], + "preferredTypes": ["Dark"] } ] }, @@ -129,8 +150,8 @@ "sets": [ { "role": "Wallbreaker", - "movepool": ["doubleedge", "drillpeck", "drillrun", "pursuit", "return", "uturn"], - "preferredTypes": ["Normal"] + "movepool": ["doubleedge", "drillpeck", "drillrun", "return", "uturn"], + "abilities": ["Sniper"] } ] }, @@ -139,8 +160,14 @@ "sets": [ { "role": "Setup Sweeper", - "movepool": ["aquatail", "coil", "earthquake", "gunkshot", "rest", "suckerpunch"], + "movepool": ["aquatail", "coil", "earthquake", "gunkshot", "suckerpunch"], + "abilities": ["Intimidate"], "preferredTypes": ["Ground"] + }, + { + "role": "Bulky Setup", + "movepool": ["coil", "earthquake", "gunkshot", "rest"], + "abilities": ["Shed Skin"] } ] }, @@ -149,20 +176,24 @@ "sets": [ { "role": "Fast Attacker", - "movepool": ["extremespeed", "grassknot", "hiddenpowerice", "knockoff", "surf", "voltswitch", "volttackle"] + "movepool": ["extremespeed", "grassknot", "hiddenpowerice", "knockoff", "surf", "voltswitch", "volttackle"], + "abilities": ["Lightning Rod"] } ] }, "raichu": { - "level": 88, + "level": 87, "sets": [ { "role": "Fast Support", - "movepool": ["encore", "hiddenpowerice", "knockoff", "nastyplot", "nuzzle", "thunderbolt", "voltswitch"] + "movepool": ["encore", "hiddenpowerice", "knockoff", "nastyplot", "nuzzle", "thunderbolt", "voltswitch"], + "abilities": ["Lightning Rod"], + "preferredTypes": ["Ice"] }, { "role": "Fast Attacker", - "movepool": ["focusblast", "grassknot", "nastyplot", "surf", "thunderbolt", "voltswitch"] + "movepool": ["focusblast", "grassknot", "nastyplot", "surf", "thunderbolt", "voltswitch"], + "abilities": ["Lightning Rod"] } ] }, @@ -171,7 +202,8 @@ "sets": [ { "role": "Bulky Attacker", - "movepool": ["earthquake", "knockoff", "rapidspin", "stealthrock", "stoneedge", "swordsdance", "toxic"] + "movepool": ["earthquake", "knockoff", "rapidspin", "stealthrock", "stoneedge", "swordsdance", "toxic"], + "abilities": ["Sand Rush"] } ] }, @@ -181,16 +213,18 @@ { "role": "Wallbreaker", "movepool": ["earthpower", "fireblast", "icebeam", "sludgewave", "stealthrock", "toxicspikes"], + "abilities": ["Sheer Force"], "preferredTypes": ["Ice"] } ] }, "nidoking": { - "level": 82, + "level": 81, "sets": [ { "role": "Wallbreaker", "movepool": ["earthpower", "fireblast", "icebeam", "sludgewave", "substitute", "superpower"], + "abilities": ["Sheer Force"], "preferredTypes": ["Ice"] } ] @@ -200,48 +234,59 @@ "sets": [ { "role": "Bulky Support", - "movepool": ["aromatherapy", "knockoff", "moonblast", "softboiled", "stealthrock", "thunderwave"] + "movepool": ["aromatherapy", "knockoff", "moonblast", "softboiled", "stealthrock", "thunderwave"], + "abilities": ["Magic Guard", "Unaware"] }, { "role": "Bulky Setup", - "movepool": ["calmmind", "fireblast", "moonblast", "softboiled"] + "movepool": ["calmmind", "fireblast", "moonblast", "softboiled"], + "abilities": ["Magic Guard", "Unaware"] } ] }, "ninetales": { - "level": 85, + "level": 84, "sets": [ { "role": "Setup Sweeper", - "movepool": ["fireblast", "hiddenpowerice", "nastyplot", "solarbeam", "substitute", "willowisp"], + "movepool": ["fireblast", "hiddenpowerrock", "nastyplot", "solarbeam"], + "abilities": ["Drought"] + }, + { + "role": "Bulky Setup", + "movepool": ["fireblast", "nastyplot", "solarbeam", "substitute", "willowisp"], + "abilities": ["Drought"], "preferredTypes": ["Grass"] } ] }, "wigglytuff": { - "level": 90, + "level": 93, "sets": [ { "role": "Bulky Support", - "movepool": ["dazzlinggleam", "fireblast", "healbell", "lightscreen", "protect", "reflect", "stealthrock", "thunderwave", "wish"] + "movepool": ["dazzlinggleam", "fireblast", "healbell", "knockoff", "protect", "stealthrock", "thunderwave", "wish"], + "abilities": ["Competitive"] } ] }, "vileplume": { - "level": 87, + "level": 88, "sets": [ { "role": "Bulky Support", - "movepool": ["aromatherapy", "gigadrain", "hiddenpowerfire", "sleeppowder", "sludgebomb", "synthesis"] + "movepool": ["aromatherapy", "gigadrain", "hiddenpowerground", "sleeppowder", "sludgebomb", "synthesis"], + "abilities": ["Effect Spore"] } ] }, "parasect": { - "level": 95, + "level": 99, "sets": [ { "role": "Bulky Attacker", "movepool": ["aromatherapy", "knockoff", "seedbomb", "spore", "stunspore", "xscissor"], + "abilities": ["Dry Skin"], "preferredTypes": ["Bug"] } ] @@ -251,7 +296,8 @@ "sets": [ { "role": "Bulky Setup", - "movepool": ["bugbuzz", "quiverdance", "sleeppowder", "sludgebomb", "substitute"] + "movepool": ["bugbuzz", "quiverdance", "sleeppowder", "sludgebomb"], + "abilities": ["Tinted Lens"] } ] }, @@ -260,30 +306,38 @@ "sets": [ { "role": "Fast Support", - "movepool": ["earthquake", "memento", "stealthrock", "stoneedge", "suckerpunch"] + "movepool": ["earthquake", "memento", "stealthrock", "stoneedge", "suckerpunch"], + "abilities": ["Arena Trap"] } ] }, "persian": { - "level": 89, + "level": 91, "sets": [ { "role": "Fast Attacker", - "movepool": ["aerialace", "doubleedge", "fakeout", "gunkshot", "knockoff", "return", "seedbomb", "taunt", "uturn"], - "preferredTypes": ["Dark"] + "movepool": ["doubleedge", "knockoff", "return", "seedbomb", "uturn"], + "abilities": ["Limber"] + }, + { + "role": "Wallbreaker", + "movepool": ["doubleedge", "fakeout", "knockoff", "return", "uturn"], + "abilities": ["Technician"] }, { "role": "Setup Sweeper", - "movepool": ["hiddenpowerfighting", "hiddenpowerfire", "hypervoice", "nastyplot", "shadowball", "waterpulse"] + "movepool": ["hiddenpowerfighting", "hypervoice", "nastyplot", "shadowball"], + "abilities": ["Technician"] } ] }, "golduck": { - "level": 88, + "level": 90, "sets": [ { "role": "Fast Attacker", - "movepool": ["calmmind", "encore", "focusblast", "hydropump", "icebeam", "psyshock", "scald"], + "movepool": ["calmmind", "encore", "focusblast", "hydropump", "icebeam", "scald"], + "abilities": ["Cloud Nine", "Swift Swim"], "preferredTypes": ["Ice"] } ] @@ -293,7 +347,8 @@ "sets": [ { "role": "Fast Attacker", - "movepool": ["closecombat", "earthquake", "gunkshot", "honeclaws", "icepunch", "stoneedge", "uturn"] + "movepool": ["closecombat", "earthquake", "gunkshot", "honeclaws", "stoneedge", "uturn"], + "abilities": ["Defiant"] } ] }, @@ -302,11 +357,13 @@ "sets": [ { "role": "Bulky Attacker", - "movepool": ["closecombat", "extremespeed", "flareblitz", "morningsun", "roar", "toxic", "wildcharge", "willowisp"] + "movepool": ["closecombat", "extremespeed", "flareblitz", "morningsun", "roar", "toxic", "wildcharge", "willowisp"], + "abilities": ["Intimidate"] }, { "role": "Fast Attacker", "movepool": ["closecombat", "extremespeed", "flareblitz", "morningsun", "wildcharge"], + "abilities": ["Intimidate"], "preferredTypes": ["Fighting"] } ] @@ -316,45 +373,56 @@ "sets": [ { "role": "Setup Sweeper", - "movepool": ["focusblast", "hydropump", "icepunch", "raindance"] + "movepool": ["focusblast", "icepunch", "raindance", "waterfall"], + "abilities": ["Swift Swim"] }, { "role": "Bulky Attacker", - "movepool": ["circlethrow", "rest", "scald", "sleeptalk"] + "movepool": ["circlethrow", "rest", "scald", "sleeptalk"], + "abilities": ["Water Absorb"] } ] }, "alakazam": { - "level": 82, + "level": 80, "sets": [ { "role": "Fast Attacker", - "movepool": ["counter", "focusblast", "hiddenpowerfire", "psychic", "psyshock", "shadowball"] + "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": 80, + "level": 78, "sets": [ { "role": "Setup Sweeper", "movepool": ["calmmind", "encore", "focusblast", "psychic", "psyshock", "shadowball", "substitute"], + "abilities": ["Magic Guard"], "preferredTypes": ["Fighting"] } ] }, "machamp": { - "level": 82, + "level": 81, "sets": [ { "role": "Bulky Attacker", "movepool": ["bulkup", "bulletpunch", "dynamicpunch", "knockoff", "stoneedge"], + "abilities": ["No Guard"], "preferredTypes": ["Dark"] }, { "role": "AV Pivot", - "movepool": ["bulletpunch", "dynamicpunch", "icepunch", "knockoff", "stoneedge"], - "preferredTypes": ["Dark"] + "movepool": ["bulletpunch", "dynamicpunch", "knockoff", "stoneedge"], + "abilities": ["No Guard"] } ] }, @@ -363,25 +431,38 @@ "sets": [ { "role": "Wallbreaker", - "movepool": ["hiddenpowerfire", "knockoff", "powerwhip", "sleeppowder", "sludgebomb", "suckerpunch"] + "movepool": ["hiddenpowerground", "knockoff", "powerwhip", "sleeppowder", "sludgebomb", "suckerpunch"], + "abilities": ["Chlorophyll"] + }, + { + "role": "Setup Sweeper", + "movepool": ["powerwhip", "sludgebomb", "sunnyday", "weatherball"], + "abilities": ["Chlorophyll"] } ] }, "tentacruel": { - "level": 82, + "level": 83, "sets": [ { "role": "Bulky Support", - "movepool": ["haze", "knockoff", "rapidspin", "scald", "sludgebomb", "toxicspikes"] + "movepool": ["haze", "knockoff", "rapidspin", "scald", "sludgebomb", "toxicspikes"], + "abilities": ["Clear Body", "Liquid Ooze"] } ] }, "golem": { - "level": 87, + "level": 86, "sets": [ { "role": "Bulky Attacker", - "movepool": ["earthquake", "explosion", "stealthrock", "stoneedge", "suckerpunch", "toxic"] + "movepool": ["earthquake", "explosion", "stealthrock", "stoneedge", "suckerpunch", "toxic"], + "abilities": ["Sturdy"] + }, + { + "role": "Bulky Setup", + "movepool": ["earthquake", "explosion", "rockpolish", "stoneedge", "suckerpunch"], + "abilities": ["Sturdy"] } ] }, @@ -390,68 +471,78 @@ "sets": [ { "role": "Bulky Attacker", - "movepool": ["drillrun", "flareblitz", "morningsun", "wildcharge", "willowisp"] + "movepool": ["drillrun", "flareblitz", "morningsun", "wildcharge", "willowisp"], + "abilities": ["Flame Body", "Flash Fire"] }, { "role": "Wallbreaker", - "movepool": ["drillrun", "flareblitz", "megahorn", "morningsun", "wildcharge"] + "movepool": ["drillrun", "flareblitz", "megahorn", "morningsun", "wildcharge"], + "abilities": ["Flash Fire"] } ] }, "slowbro": { - "level": 81, + "level": 82, "sets": [ { "role": "Bulky Support", - "movepool": ["fireblast", "icebeam", "psyshock", "scald", "slackoff", "thunderwave", "toxic"] + "movepool": ["fireblast", "icebeam", "psyshock", "scald", "slackoff", "thunderwave", "toxic"], + "abilities": ["Regenerator"] }, { "role": "AV Pivot", - "movepool": ["fireblast", "futuresight", "icebeam", "psyshock", "scald"] + "movepool": ["fireblast", "futuresight", "icebeam", "psyshock", "scald"], + "abilities": ["Regenerator"] } ] }, "slowbromega": { - "level": 83, + "level": 82, "sets": [ { "role": "Bulky Attacker", - "movepool": ["calmmind", "fireblast", "psyshock", "scald", "slackoff"] + "movepool": ["calmmind", "fireblast", "psyshock", "scald", "slackoff"], + "abilities": ["Regenerator"] } ] }, "farfetchd": { - "level": 98, + "level": 100, "sets": [ { "role": "Setup Sweeper", - "movepool": ["bravebird", "knockoff", "leafblade", "return", "swordsdance"] + "movepool": ["bravebird", "knockoff", "leafblade", "return", "swordsdance"], + "abilities": ["Defiant"] } ] }, "dodrio": { - "level": 88, + "level": 86, "sets": [ { "role": "Wallbreaker", - "movepool": ["bravebird", "doubleedge", "knockoff", "quickattack", "return"] + "movepool": ["bravebird", "doubleedge", "knockoff", "quickattack", "return"], + "abilities": ["Early Bird"] }, { "role": "Fast Attacker", - "movepool": ["bravebird", "knockoff", "return", "roost"] + "movepool": ["bravebird", "knockoff", "return", "roost"], + "abilities": ["Early Bird"] } ] }, "dewgong": { - "level": 89, + "level": 92, "sets": [ { "role": "Staller", - "movepool": ["icebeam", "protect", "surf", "toxic"] + "movepool": ["icebeam", "protect", "surf", "toxic"], + "abilities": ["Thick Fat"] }, { "role": "Bulky Support", - "movepool": ["encore", "icebeam", "surf", "toxic"] + "movepool": ["encore", "icebeam", "surf", "toxic"], + "abilities": ["Thick Fat"] } ] }, @@ -460,26 +551,29 @@ "sets": [ { "role": "Bulky Attacker", - "movepool": ["curse", "firepunch", "gunkshot", "haze", "icepunch", "poisonjab", "shadowsneak"], - "preferredTypes": ["Fire"] + "movepool": ["brickbreak", "curse", "gunkshot", "haze", "icepunch", "poisonjab", "shadowsneak"], + "abilities": ["Poison Touch"], + "preferredTypes": ["Fighting"] } ] }, "cloyster": { - "level": 80, + "level": 78, "sets": [ { "role": "Setup Sweeper", - "movepool": ["hydropump", "iciclespear", "rockblast", "shellsmash"] + "movepool": ["hydropump", "iciclespear", "rockblast", "shellsmash"], + "abilities": ["Skill Link"] } ] }, "gengar": { - "level": 79, + "level": 78, "sets": [ { "role": "Fast Attacker", - "movepool": ["focusblast", "painsplit", "shadowball", "sludgewave", "substitute", "trick", "willowisp"] + "movepool": ["focusblast", "painsplit", "shadowball", "sludgewave", "substitute", "trick", "willowisp"], + "abilities": ["Levitate"] } ] }, @@ -488,33 +582,38 @@ "sets": [ { "role": "Fast Support", - "movepool": ["disable", "perishsong", "protect", "shadowball", "substitute"] + "movepool": ["disable", "perishsong", "protect", "shadowball", "substitute"], + "abilities": ["Levitate"] }, { "role": "Fast Attacker", - "movepool": ["destinybond", "disable", "focusblast", "shadowball", "sludgewave", "taunt"] + "movepool": ["destinybond", "disable", "focusblast", "shadowball", "sludgewave", "taunt"], + "abilities": ["Levitate"] } ] }, "hypno": { - "level": 91, + "level": 95, "sets": [ { "role": "Bulky Support", - "movepool": ["focusblast", "foulplay", "lightscreen", "protect", "psychic", "reflect", "thunderwave", "toxic", "wish"] + "movepool": ["focusblast", "foulplay", "protect", "psychic", "thunderwave", "toxic", "wish"], + "abilities": ["Insomnia"] }, { "role": "Staller", - "movepool": ["protect", "seismictoss", "toxic", "wish"] + "movepool": ["protect", "seismictoss", "toxic", "wish"], + "abilities": ["Insomnia"] } ] }, "kingler": { - "level": 88, + "level": 89, "sets": [ { "role": "Setup Sweeper", - "movepool": ["agility", "crabhammer", "knockoff", "rockslide", "superpower", "swordsdance", "xscissor"] + "movepool": ["agility", "crabhammer", "knockoff", "rockslide", "superpower", "swordsdance", "xscissor"], + "abilities": ["Hyper Cutter", "Sheer Force"] } ] }, @@ -523,20 +622,24 @@ "sets": [ { "role": "Wallbreaker", - "movepool": ["foulplay", "hiddenpowergrass", "hiddenpowerice", "signalbeam", "taunt", "thunderbolt", "voltswitch"] + "movepool": ["foulplay", "hiddenpowerice", "signalbeam", "taunt", "thunderbolt", "voltswitch"], + "abilities": ["Aftermath", "Static"], + "preferredTypes": ["Ice"] }, { "role": "Fast Support", - "movepool": ["hiddenpowerice", "thunderbolt", "thunderwave", "toxic", "voltswitch"] + "movepool": ["hiddenpowerice", "thunderbolt", "thunderwave", "toxic", "voltswitch"], + "abilities": ["Aftermath", "Static"] } ] }, "exeggutor": { - "level": 91, + "level": 92, "sets": [ { "role": "Bulky Support", "movepool": ["gigadrain", "hiddenpowerfire", "leechseed", "psychic", "sleeppowder", "substitute"], + "abilities": ["Harvest"], "preferredTypes": ["Psychic"] } ] @@ -547,6 +650,7 @@ { "role": "Wallbreaker", "movepool": ["doubleedge", "earthquake", "knockoff", "stealthrock", "stoneedge", "swordsdance"], + "abilities": ["Battle Armor", "Rock Head"], "preferredTypes": ["Rock"] } ] @@ -557,6 +661,13 @@ { "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"] } ] @@ -566,7 +677,8 @@ "sets": [ { "role": "Bulky Attacker", - "movepool": ["bulkup", "drainpunch", "icepunch", "machpunch", "rapidspin", "stoneedge"] + "movepool": ["bulkup", "drainpunch", "icepunch", "machpunch", "rapidspin", "stoneedge"], + "abilities": ["Iron Fist"] } ] }, @@ -575,7 +687,8 @@ "sets": [ { "role": "Bulky Support", - "movepool": ["fireblast", "painsplit", "sludgebomb", "toxicspikes", "willowisp"] + "movepool": ["fireblast", "painsplit", "sludgebomb", "toxicspikes", "willowisp"], + "abilities": ["Levitate"] } ] }, @@ -584,20 +697,18 @@ "sets": [ { "role": "Bulky Attacker", - "movepool": ["earthquake", "megahorn", "stealthrock", "stoneedge", "toxic"] + "movepool": ["earthquake", "megahorn", "stealthrock", "stoneedge", "swordsdance", "toxic"], + "abilities": ["Lightning Rod"] } ] }, "chansey": { - "level": 85, + "level": 86, "sets": [ { "role": "Staller", - "movepool": ["aromatherapy", "seismictoss", "softboiled", "stealthrock", "thunderwave", "toxic"] - }, - { - "role": "Bulky Support", - "movepool": ["protect", "seismictoss", "toxic", "wish"] + "movepool": ["aromatherapy", "seismictoss", "softboiled", "stealthrock", "thunderwave", "toxic", "wish"], + "abilities": ["Natural Cure"] } ] }, @@ -606,48 +717,61 @@ "sets": [ { "role": "Bulky Support", - "movepool": ["doubleedge", "drainpunch", "earthquake", "fakeout", "return", "suckerpunch"] + "movepool": ["doubleedge", "drainpunch", "earthquake", "fakeout", "return", "suckerpunch"], + "abilities": ["Scrappy"] }, { "role": "AV Pivot", - "movepool": ["drainpunch", "earthquake", "fakeout", "return", "suckerpunch"] + "movepool": ["drainpunch", "earthquake", "fakeout", "return", "suckerpunch"], + "abilities": ["Scrappy"] } ] }, "kangaskhanmega": { - "level": 73, + "level": 71, "sets": [ { "role": "Fast Support", - "movepool": ["bodyslam", "crunch", "fakeout", "seismictoss", "suckerpunch"] + "movepool": ["bodyslam", "crunch", "fakeout", "seismictoss", "suckerpunch"], + "abilities": ["Scrappy"] }, { "role": "Setup Sweeper", "movepool": ["bodyslam", "crunch", "earthquake", "poweruppunch", "return", "suckerpunch"], + "abilities": ["Scrappy"], "preferredTypes": ["Ground"] } ] }, "seaking": { - "level": 90, + "level": 92, "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": 81, + "level": 82, "sets": [ { "role": "Wallbreaker", - "movepool": ["hydropump", "icebeam", "psyshock", "recover", "thunderbolt"] + "movepool": ["hydropump", "icebeam", "psyshock", "recover", "thunderbolt"], + "abilities": ["Analytic"] }, { "role": "Bulky Support", - "movepool": ["psyshock", "rapidspin", "recover", "scald", "thunderwave", "toxic"] + "movepool": ["psyshock", "rapidspin", "recover", "scald", "thunderwave", "toxic"], + "abilities": ["Natural Cure"] } ] }, @@ -657,20 +781,23 @@ { "role": "Fast Attacker", "movepool": ["dazzlinggleam", "encore", "focusblast", "healingwish", "nastyplot", "psychic", "psyshock", "shadowball"], + "abilities": ["Filter"], "preferredTypes": ["Psychic"] } ] }, "scyther": { - "level": 83, + "level": 82, "sets": [ { "role": "Fast Attacker", - "movepool": ["aerialace", "brickbreak", "knockoff", "pursuit", "uturn"] + "movepool": ["aerialace", "brickbreak", "knockoff", "pursuit", "uturn"], + "abilities": ["Technician"] }, { "role": "Setup Sweeper", - "movepool": ["aerialace", "brickbreak", "bugbite", "knockoff", "roost", "swordsdance"] + "movepool": ["aerialace", "brickbreak", "bugbite", "knockoff", "roost", "swordsdance"], + "abilities": ["Technician"] } ] }, @@ -679,11 +806,13 @@ "sets": [ { "role": "Fast Attacker", - "movepool": ["focusblast", "icebeam", "lovelykiss", "psychic", "psyshock", "trick"] + "movepool": ["focusblast", "icebeam", "lovelykiss", "psychic", "psyshock", "trick"], + "abilities": ["Dry Skin"] }, { "role": "Setup Sweeper", - "movepool": ["focusblast", "icebeam", "lovelykiss", "nastyplot", "psyshock", "substitute"] + "movepool": ["focusblast", "icebeam", "lovelykiss", "nastyplot", "psyshock"], + "abilities": ["Dry Skin"] } ] }, @@ -693,16 +822,18 @@ { "role": "Fast Attacker", "movepool": ["closecombat", "earthquake", "knockoff", "stealthrock", "stoneedge", "swordsdance", "xscissor"], + "abilities": ["Mold Breaker", "Moxie"], "preferredTypes": ["Ground"] } ] }, "pinsirmega": { - "level": 75, + "level": 74, "sets": [ { "role": "Bulky Setup", - "movepool": ["closecombat", "earthquake", "quickattack", "return", "swordsdance"] + "movepool": ["closecombat", "earthquake", "quickattack", "return", "swordsdance"], + "abilities": ["Hyper Cutter"] } ] }, @@ -712,64 +843,73 @@ { "role": "Wallbreaker", "movepool": ["bodyslam", "earthquake", "fireblast", "rockslide", "zenheadbutt"], + "abilities": ["Sheer Force"], "preferredTypes": ["Ground"] }, { "role": "Fast Attacker", - "movepool": ["doubleedge", "earthquake", "stoneedge", "zenheadbutt"] + "movepool": ["doubleedge", "earthquake", "stoneedge", "zenheadbutt"], + "abilities": ["Intimidate"] } ] }, "gyarados": { - "level": 78, + "level": 77, "sets": [ { "role": "Setup Sweeper", - "movepool": ["dragondance", "earthquake", "stoneedge", "substitute", "waterfall"] + "movepool": ["dragondance", "earthquake", "stoneedge", "substitute", "waterfall"], + "abilities": ["Intimidate", "Moxie"] } ] }, "gyaradosmega": { - "level": 76, + "level": 74, "sets": [ { "role": "Setup Sweeper", - "movepool": ["crunch", "dragondance", "earthquake", "substitute", "waterfall"] + "movepool": ["crunch", "dragondance", "earthquake", "substitute", "waterfall"], + "abilities": ["Intimidate"] } ] }, "lapras": { - "level": 88, + "level": 87, "sets": [ { "role": "Bulky Support", - "movepool": ["freezedry", "healbell", "hydropump", "icebeam", "thunderbolt", "toxic"] + "movepool": ["freezedry", "healbell", "hydropump", "icebeam", "toxic"], + "abilities": ["Water Absorb"] }, { "role": "Staller", - "movepool": ["freezedry", "hydropump", "protect", "toxic"] + "movepool": ["freezedry", "hydropump", "protect", "toxic"], + "abilities": ["Water Absorb"] } ] }, "ditto": { - "level": 83, + "level": 84, "sets": [ { "role": "Fast Support", - "movepool": ["transform"] + "movepool": ["transform"], + "abilities": ["Imposter"] } ] }, "vaporeon": { - "level": 83, + "level": 84, "sets": [ { "role": "Bulky Support", - "movepool": ["healbell", "icebeam", "protect", "scald", "wish"] + "movepool": ["healbell", "icebeam", "protect", "scald", "wish"], + "abilities": ["Water Absorb"] }, { "role": "Staller", - "movepool": ["protect", "scald", "toxic", "wish"] + "movepool": ["protect", "scald", "toxic", "wish"], + "abilities": ["Water Absorb"] } ] }, @@ -778,7 +918,13 @@ "sets": [ { "role": "Fast Attacker", - "movepool": ["hiddenpowerice", "shadowball", "signalbeam", "thunderbolt", "voltswitch"] + "movepool": ["hiddenpowerice", "shadowball", "thunderbolt", "voltswitch"], + "abilities": ["Volt Absorb"] + }, + { + "role": "Wallbreaker", + "movepool": ["hiddenpowerice", "signalbeam", "thunderbolt", "voltswitch"], + "abilities": ["Volt Absorb"] } ] }, @@ -787,48 +933,55 @@ "sets": [ { "role": "Wallbreaker", - "movepool": ["facade", "flamecharge", "flareblitz", "quickattack", "superpower"] + "movepool": ["facade", "flamecharge", "flareblitz", "quickattack", "superpower"], + "abilities": ["Guts"] } ] }, "omastar": { - "level": 84, + "level": 83, "sets": [ { "role": "Setup Sweeper", - "movepool": ["earthpower", "hydropump", "icebeam", "shellsmash"] + "movepool": ["hiddenpowergrass", "hydropump", "icebeam", "shellsmash"], + "abilities": ["Shell Armor", "Swift Swim"] } ] }, "kabutops": { - "level": 86, + "level": 87, "sets": [ { "role": "Fast Support", - "movepool": ["aquajet", "knockoff", "rapidspin", "stoneedge", "swordsdance", "waterfall"] + "movepool": ["aquajet", "knockoff", "rapidspin", "stoneedge", "swordsdance", "waterfall"], + "abilities": ["Battle Armor", "Swift Swim"] } ] }, "aerodactyl": { - "level": 83, + "level": 82, "sets": [ { "role": "Bulky Attacker", - "movepool": ["defog", "earthquake", "roost", "stealthrock", "stoneedge", "taunt", "toxic"] + "movepool": ["defog", "earthquake", "roost", "stealthrock", "stoneedge", "taunt", "toxic"], + "abilities": ["Unnerve"] }, { "role": "Fast Support", - "movepool": ["defog", "doubleedge", "earthquake", "pursuit", "roost", "stealthrock", "stoneedge"], + "movepool": ["aerialace", "aquatail", "defog", "earthquake", "pursuit", "roost", "stealthrock", "stoneedge"], + "abilities": ["Unnerve"], "preferredTypes": ["Ground"] } ] }, "aerodactylmega": { - "level": 78, + "level": 77, "sets": [ { "role": "Fast Attacker", - "movepool": ["aerialace", "aquatail", "earthquake", "firefang", "honeclaws", "roost", "stoneedge"] + "movepool": ["aerialace", "aquatail", "earthquake", "honeclaws", "roost", "stoneedge"], + "abilities": ["Unnerve"], + "preferredTypes": ["Ground"] } ] }, @@ -836,12 +989,9 @@ "level": 82, "sets": [ { - "role": "Bulky Attacker", - "movepool": ["bodyslam", "crunch", "curse", "earthquake", "rest", "return", "sleeptalk"] - }, - { - "role": "AV Pivot", - "movepool": ["bodyslam", "crunch", "earthquake", "firepunch", "pursuit", "return"] + "role": "Bulky Support", + "movepool": ["bodyslam", "crunch", "curse", "earthquake", "rest", "sleeptalk"], + "abilities": ["Thick Fat"] } ] }, @@ -850,65 +1000,74 @@ "sets": [ { "role": "Staller", - "movepool": ["freezedry", "roost", "substitute", "toxic"] + "movepool": ["freezedry", "roost", "substitute", "toxic"], + "abilities": ["Pressure"] }, { "role": "Bulky Support", - "movepool": ["freezedry", "hurricane", "roost", "substitute", "toxic"] + "movepool": ["freezedry", "hurricane", "roost", "substitute", "toxic"], + "abilities": ["Pressure"] } ] }, "zapdos": { - "level": 79, + "level": 78, "sets": [ { "role": "Bulky Support", - "movepool": ["defog", "discharge", "heatwave", "hiddenpowerice", "roost", "toxic", "uturn"] + "movepool": ["defog", "discharge", "heatwave", "hiddenpowerice", "roost", "toxic", "uturn"], + "abilities": ["Static"] } ] }, "moltres": { - "level": 83, + "level": 81, "sets": [ { "role": "Bulky Attacker", - "movepool": ["defog", "fireblast", "hurricane", "roost", "toxic", "uturn", "willowisp"] + "movepool": ["defog", "fireblast", "hurricane", "roost", "toxic", "uturn", "willowisp"], + "abilities": ["Flame Body"] } ] }, "dragonite": { - "level": 75, + "level": 73, "sets": [ { - "role": "Bulky Attacker", - "movepool": ["dragondance", "earthquake", "extremespeed", "firepunch", "outrage"] + "role": "Setup Sweeper", + "movepool": ["dragondance", "earthquake", "ironhead", "outrage", "roost"], + "abilities": ["Multiscale"], + "preferredTypes": ["Ground"] } ] }, "mewtwo": { - "level": 72, + "level": 70, "sets": [ { "role": "Fast Attacker", - "movepool": ["aurasphere", "calmmind", "fireblast", "psystrike", "recover", "shadowball"] + "movepool": ["aurasphere", "calmmind", "fireblast", "psystrike", "recover", "shadowball"], + "abilities": ["Unnerve"] } ] }, "mewtwomegax": { - "level": 71, + "level": 70, "sets": [ { "role": "Setup Sweeper", - "movepool": ["bulkup", "drainpunch", "stoneedge", "taunt", "zenheadbutt"] + "movepool": ["bulkup", "drainpunch", "stoneedge", "taunt", "zenheadbutt"], + "abilities": ["Unnerve"] } ] }, "mewtwomegay": { - "level": 71, + "level": 70, "sets": [ { "role": "Setup Sweeper", - "movepool": ["aurasphere", "calmmind", "fireblast", "psystrike", "recover", "shadowball"] + "movepool": ["aurasphere", "calmmind", "fireblast", "psystrike", "recover", "shadowball"], + "abilities": ["Unnerve"] } ] }, @@ -917,24 +1076,28 @@ "sets": [ { "role": "Staller", - "movepool": ["defog", "knockoff", "psychic", "roost", "stealthrock", "taunt", "uturn", "willowisp"] + "movepool": ["defog", "knockoff", "psychic", "roost", "stealthrock", "taunt", "uturn", "willowisp"], + "abilities": ["Synchronize"] }, { "role": "Setup Sweeper", - "movepool": ["aurasphere", "earthpower", "fireblast", "nastyplot", "psychic", "psyshock", "roost"] + "movepool": ["aurasphere", "earthpower", "fireblast", "nastyplot", "psychic", "psyshock", "roost"], + "abilities": ["Synchronize"] }, { - "role": "Bulky Setup", - "movepool": ["aurasphere", "earthpower", "fireblast", "nastyplot", "psychic", "psyshock", "roost"] + "role": "Fast Attacker", + "movepool": ["drainpunch", "knockoff", "swordsdance", "zenheadbutt"], + "abilities": ["Synchronize"] } ] }, "meganium": { - "level": 88, + "level": 92, "sets": [ { - "role": "Bulky Support", - "movepool": ["aromatherapy", "dragontail", "gigadrain", "leechseed", "lightscreen", "reflect", "synthesis", "toxic"] + "role": "Staller", + "movepool": ["aromatherapy", "dragontail", "earthquake", "energyball", "leechseed", "synthesis", "toxic"], + "abilities": ["Overgrow"] } ] }, @@ -943,71 +1106,72 @@ "sets": [ { "role": "Fast Attacker", - "movepool": ["eruption", "fireblast", "focusblast", "hiddenpowergrass"] + "movepool": ["eruption", "fireblast", "focusblast", "hiddenpowergrass", "hiddenpowerrock"], + "abilities": ["Flash Fire"] } ] }, "feraligatr": { - "level": 81, + "level": 80, "sets": [ { "role": "Setup Sweeper", "movepool": ["crunch", "dragondance", "earthquake", "icepunch", "waterfall"], + "abilities": ["Sheer Force"], "preferredTypes": ["Ice"] - }, - { - "role": "Bulky Setup", - "movepool": ["aquajet", "crunch", "icepunch", "swordsdance", "waterfall"] } ] }, "furret": { - "level": 91, + "level": 93, "sets": [ { "role": "Wallbreaker", "movepool": ["aquatail", "doubleedge", "firepunch", "knockoff", "trick", "uturn"], + "abilities": ["Frisk"], "preferredTypes": ["Dark"] } ] }, "noctowl": { - "level": 93, + "level": 95, "sets": [ { "role": "Bulky Support", - "movepool": ["airslash", "defog", "heatwave", "hypervoice", "roost", "whirlwind"] + "movepool": ["airslash", "defog", "hypervoice", "roost", "toxic"], + "abilities": ["Tinted Lens"], + "preferredTypes": ["Normal"] } ] }, "ledian": { "level": 100, "sets": [ - { - "role": "Bulky Support", - "movepool": ["knockoff", "lightscreen", "reflect", "roost", "toxic", "uturn"] - }, { "role": "Staller", - "movepool": ["encore", "knockoff", "roost", "toxic", "uturn"] + "movepool": ["encore", "focusblast", "knockoff", "roost", "toxic"], + "abilities": ["Early Bird"], + "preferredTypes": ["Dark"] } ] }, "ariados": { - "level": 88, + "level": 91, "sets": [ { "role": "Bulky Support", - "movepool": ["megahorn", "poisonjab", "stickyweb", "suckerpunch", "toxicspikes"] + "movepool": ["megahorn", "poisonjab", "stickyweb", "suckerpunch", "toxicspikes"], + "abilities": ["Insomnia", "Swarm"] } ] }, "crobat": { - "level": 82, + "level": 81, "sets": [ { "role": "Bulky Attacker", - "movepool": ["bravebird", "defog", "roost", "superfang", "taunt", "toxic", "uturn"] + "movepool": ["bravebird", "defog", "roost", "superfang", "taunt", "toxic", "uturn"], + "abilities": ["Infiltrator"] } ] }, @@ -1016,7 +1180,8 @@ "sets": [ { "role": "Bulky Attacker", - "movepool": ["healbell", "icebeam", "scald", "thunderbolt", "toxic", "voltswitch"] + "movepool": ["healbell", "icebeam", "scald", "thunderbolt", "toxic", "voltswitch"], + "abilities": ["Volt Absorb"] } ] }, @@ -1025,11 +1190,13 @@ "sets": [ { "role": "Bulky Setup", - "movepool": ["calmmind", "heatwave", "psychic", "roost"] + "movepool": ["calmmind", "heatwave", "psychic", "roost"], + "abilities": ["Magic Bounce"] }, { "role": "Bulky Support", - "movepool": ["heatwave", "psychic", "roost", "thunderwave", "toxic", "uturn"] + "movepool": ["heatwave", "psychic", "roost", "thunderwave", "toxic", "uturn"], + "abilities": ["Magic Bounce"] } ] }, @@ -1038,25 +1205,33 @@ "sets": [ { "role": "Bulky Attacker", - "movepool": ["focusblast", "healbell", "hiddenpowerice", "thunderbolt", "toxic", "voltswitch"] + "movepool": ["focusblast", "healbell", "hiddenpowerice", "thunderbolt", "toxic", "voltswitch"], + "abilities": ["Static"] } ] }, "ampharosmega": { - "level": 83, + "level": 82, "sets": [ { "role": "Bulky Attacker", - "movepool": ["agility", "dragonpulse", "focusblast", "healbell", "thunderbolt", "voltswitch"] + "movepool": ["agility", "dragonpulse", "focusblast", "thunderbolt", "voltswitch"], + "abilities": ["Static"] + }, + { + "role": "Bulky Support", + "movepool": ["discharge", "dragonpulse", "focusblast", "healbell", "rest", "sleeptalk", "voltswitch"], + "abilities": ["Static"] } ] }, "bellossom": { - "level": 90, + "level": 95, "sets": [ { "role": "Bulky Support", - "movepool": ["gigadrain", "hiddenpowerfire", "hiddenpowerrock", "moonblast", "sleeppowder", "synthesis", "toxic"] + "movepool": ["gigadrain", "hiddenpowerfire", "hiddenpowerrock", "moonblast", "sleeppowder", "synthesis", "toxic"], + "abilities": ["Chlorophyll"] } ] }, @@ -1065,52 +1240,64 @@ "sets": [ { "role": "Bulky Attacker", - "movepool": ["aquajet", "bellydrum", "knockoff", "playrough", "superpower", "waterfall"] + "movepool": ["aquajet", "bellydrum", "knockoff", "playrough", "superpower", "waterfall"], + "abilities": ["Huge Power"] } ] }, "sudowoodo": { - "level": 89, + "level": 94, "sets": [ { "role": "Bulky Attacker", "movepool": ["earthquake", "stealthrock", "stoneedge", "suckerpunch", "toxic", "woodhammer"], + "abilities": ["Rock Head"], "preferredTypes": ["Grass"] } ] }, "politoed": { - "level": 84, + "level": 85, "sets": [ { "role": "Staller", - "movepool": ["encore", "icebeam", "protect", "scald", "toxic"] + "movepool": ["encore", "icebeam", "protect", "scald", "toxic"], + "abilities": ["Drizzle"] }, { "role": "Bulky Support", - "movepool": ["encore", "icebeam", "rest", "scald", "toxic"] + "movepool": ["encore", "icebeam", "rest", "scald", "toxic"], + "abilities": ["Drizzle"] } ] }, "jumpluff": { - "level": 88, + "level": 89, "sets": [ { "role": "Staller", - "movepool": ["acrobatics", "leechseed", "protect", "substitute"] + "movepool": ["acrobatics", "leechseed", "protect", "substitute"], + "abilities": ["Infiltrator"] }, { "role": "Bulky Attacker", - "movepool": ["acrobatics", "encore", "sleeppowder", "toxic", "uturn"] + "movepool": ["acrobatics", "encore", "sleeppowder", "toxic", "uturn"], + "abilities": ["Infiltrator"] } ] }, "sunflora": { - "level": 97, + "level": 100, "sets": [ { "role": "Wallbreaker", - "movepool": ["earthpower", "hiddenpowerfire", "hiddenpowerice", "hiddenpowerrock", "leafstorm", "sludgebomb"] + "movepool": ["earthpower", "hiddenpowerfire", "hiddenpowerice", "hiddenpowerrock", "leafstorm", "sludgebomb"], + "abilities": ["Chlorophyll"] + }, + { + "role": "Setup Sweeper", + "movepool": ["earthpower", "hiddenpowerfire", "solarbeam", "sunnyday"], + "abilities": ["Chlorophyll"] } ] }, @@ -1119,29 +1306,34 @@ "sets": [ { "role": "Bulky Support", - "movepool": ["earthquake", "icebeam", "recover", "scald", "toxic"] + "movepool": ["earthquake", "icebeam", "recover", "scald", "toxic"], + "abilities": ["Unaware"] } ] }, "espeon": { - "level": 83, + "level": 81, "sets": [ { "role": "Fast Attacker", - "movepool": ["calmmind", "dazzlinggleam", "morningsun", "psychic", "psyshock", "shadowball", "trick"] + "movepool": ["calmmind", "dazzlinggleam", "morningsun", "psychic", "psyshock", "shadowball", "trick"], + "abilities": ["Magic Bounce"], + "preferredTypes": ["Fairy"] } ] }, "umbreon": { - "level": 82, + "level": 83, "sets": [ { "role": "Staller", - "movepool": ["foulplay", "protect", "toxic", "wish"] + "movepool": ["foulplay", "protect", "toxic", "wish"], + "abilities": ["Synchronize"] }, { "role": "Bulky Support", - "movepool": ["foulplay", "healbell", "moonlight", "toxic"] + "movepool": ["foulplay", "healbell", "moonlight", "toxic"], + "abilities": ["Synchronize"] } ] }, @@ -1150,7 +1342,8 @@ "sets": [ { "role": "Staller", - "movepool": ["bravebird", "defog", "foulplay", "haze", "roost", "thunderwave"] + "movepool": ["bravebird", "defog", "foulplay", "haze", "roost", "thunderwave"], + "abilities": ["Prankster"] } ] }, @@ -1159,11 +1352,13 @@ "sets": [ { "role": "Bulky Support", - "movepool": ["fireblast", "icebeam", "nastyplot", "psyshock", "scald", "slackoff", "thunderwave", "toxic"] + "movepool": ["fireblast", "icebeam", "nastyplot", "psyshock", "scald", "slackoff", "thunderwave", "toxic"], + "abilities": ["Regenerator"] }, { "role": "AV Pivot", - "movepool": ["dragontail", "fireblast", "futuresight", "icebeam", "psyshock", "scald"] + "movepool": ["dragontail", "fireblast", "futuresight", "icebeam", "psyshock", "scald"], + "abilities": ["Regenerator"] } ] }, @@ -1172,48 +1367,54 @@ "sets": [ { "role": "Wallbreaker", - "movepool": ["hiddenpowerpsychic"] + "movepool": ["hiddenpowerpsychic"], + "abilities": ["Levitate"] } ] }, "wobbuffet": { - "level": 83, + "level": 89, "sets": [ { "role": "Bulky Support", - "movepool": ["counter", "destinybond", "encore", "mirrorcoat"] + "movepool": ["counter", "destinybond", "encore", "mirrorcoat"], + "abilities": ["Shadow Tag"] } ] }, "girafarig": { - "level": 90, + "level": 92, "sets": [ { "role": "Setup Sweeper", "movepool": ["dazzlinggleam", "hypervoice", "nastyplot", "psychic", "psyshock", "substitute", "thunderbolt"], + "abilities": ["Sap Sipper"], "preferredTypes": ["Psychic"] } ] }, "forretress": { - "level": 83, + "level": 82, "sets": [ { "role": "Bulky Support", - "movepool": ["gyroball", "rapidspin", "spikes", "stealthrock", "toxic", "voltswitch"] + "movepool": ["gyroball", "rapidspin", "spikes", "stealthrock", "toxic", "voltswitch"], + "abilities": ["Sturdy"] } ] }, "dunsparce": { - "level": 90, + "level": 92, "sets": [ { "role": "Bulky Attacker", - "movepool": ["earthquake", "glare", "headbutt", "roost"] + "movepool": ["earthquake", "glare", "headbutt", "roost"], + "abilities": ["Serene Grace"] }, { "role": "Bulky Setup", - "movepool": ["bodyslam", "coil", "earthquake", "roost"] + "movepool": ["bodyslam", "coil", "earthquake", "roost"], + "abilities": ["Serene Grace"] } ] }, @@ -1222,34 +1423,39 @@ "sets": [ { "role": "Staller", - "movepool": ["defog", "earthquake", "knockoff", "roost", "stealthrock", "toxic", "uturn"] + "movepool": ["defog", "earthquake", "knockoff", "roost", "stealthrock", "toxic", "uturn"], + "abilities": ["Immunity"] } ] }, "steelix": { - "level": 86, + "level": 84, "sets": [ { "role": "Wallbreaker", "movepool": ["earthquake", "ironhead", "roar", "rockslide", "stealthrock", "toxic"], + "abilities": ["Sheer Force"], "preferredTypes": ["Steel"] }, { "role": "Staller", - "movepool": ["earthquake", "heavyslam", "protect", "toxic"] + "movepool": ["earthquake", "heavyslam", "protect", "toxic"], + "abilities": ["Sturdy"] }, { "role": "Bulky Support", - "movepool": ["earthquake", "heavyslam", "roar", "stealthrock", "toxic"] + "movepool": ["earthquake", "heavyslam", "roar", "stealthrock", "toxic"], + "abilities": ["Sturdy"] } ] }, "steelixmega": { - "level": 84, + "level": 81, "sets": [ { "role": "Bulky Support", - "movepool": ["dragontail", "earthquake", "heavyslam", "stealthrock", "toxic"] + "movepool": ["dragontail", "earthquake", "heavyslam", "stealthrock", "toxic"], + "abilities": ["Sturdy"] } ] }, @@ -1258,7 +1464,8 @@ "sets": [ { "role": "Bulky Attacker", - "movepool": ["earthquake", "healbell", "playrough", "thunderwave", "toxic"] + "movepool": ["earthquake", "healbell", "playrough", "thunderwave", "toxic"], + "abilities": ["Intimidate"] } ] }, @@ -1267,37 +1474,43 @@ "sets": [ { "role": "Fast Support", - "movepool": ["destinybond", "spikes", "taunt", "thunderwave", "toxicspikes", "waterfall"] + "movepool": ["destinybond", "spikes", "taunt", "thunderwave", "toxicspikes", "waterfall"], + "abilities": ["Intimidate"] } ] }, "scizor": { - "level": 80, + "level": 79, "sets": [ { "role": "Setup Sweeper", - "movepool": ["bugbite", "bulletpunch", "knockoff", "roost", "superpower", "swordsdance"] + "movepool": ["bugbite", "bulletpunch", "knockoff", "roost", "superpower", "swordsdance"], + "abilities": ["Technician"] }, { "role": "Bulky Support", - "movepool": ["bulletpunch", "defog", "knockoff", "roost", "superpower", "uturn"] + "movepool": ["bulletpunch", "defog", "knockoff", "roost", "superpower", "uturn"], + "abilities": ["Technician"] }, { "role": "Fast Attacker", - "movepool": ["bulletpunch", "knockoff", "pursuit", "superpower", "uturn"] + "movepool": ["bulletpunch", "knockoff", "pursuit", "superpower", "uturn"], + "abilities": ["Technician"] } ] }, "scizormega": { - "level": 78, + "level": 75, "sets": [ { "role": "Bulky Setup", - "movepool": ["bugbite", "bulletpunch", "knockoff", "roost", "superpower", "swordsdance"] + "movepool": ["bugbite", "bulletpunch", "knockoff", "roost", "superpower", "swordsdance"], + "abilities": ["Light Metal"] }, { "role": "Bulky Support", - "movepool": ["bulletpunch", "defog", "knockoff", "roost", "superpower", "uturn"] + "movepool": ["bulletpunch", "defog", "knockoff", "roost", "superpower", "uturn"], + "abilities": ["Light Metal"] } ] }, @@ -1306,70 +1519,79 @@ "sets": [ { "role": "Bulky Support", - "movepool": ["encore", "knockoff", "stealthrock", "stickyweb", "toxic"] + "movepool": ["encore", "knockoff", "stealthrock", "stickyweb", "toxic"], + "abilities": ["Sturdy"] } ] }, "heracross": { - "level": 81, + "level": 79, "sets": [ { "role": "Wallbreaker", - "movepool": ["closecombat", "facade", "knockoff", "megahorn"] + "movepool": ["closecombat", "facade", "knockoff", "megahorn"], + "abilities": ["Guts"] }, { "role": "Fast Attacker", - "movepool": ["closecombat", "knockoff", "megahorn", "stoneedge"] + "movepool": ["closecombat", "knockoff", "megahorn", "stoneedge"], + "abilities": ["Moxie"] } ] }, "heracrossmega": { - "level": 79, + "level": 78, "sets": [ { "role": "Wallbreaker", - "movepool": ["closecombat", "pinmissile", "rockblast", "substitute", "swordsdance"], + "movepool": ["closecombat", "earthquake", "knockoff", "pinmissile", "rockblast", "substitute", "swordsdance"], + "abilities": ["Moxie"], "preferredTypes": ["Rock"] } ] }, "ursaring": { - "level": 87, + "level": 86, "sets": [ { "role": "Wallbreaker", - "movepool": ["closecombat", "crunch", "facade", "protect", "swordsdance"] + "movepool": ["closecombat", "crunch", "facade", "protect", "swordsdance"], + "abilities": ["Guts", "Quick Feet"] } ] }, "magcargo": { - "level": 92, + "level": 97, "sets": [ { "role": "Staller", - "movepool": ["ancientpower", "lavaplume", "recover", "stealthrock", "toxic"] + "movepool": ["ancientpower", "lavaplume", "recover", "stealthrock", "toxic"], + "abilities": ["Flame Body"] } ] }, "corsola": { - "level": 94, + "level": 97, "sets": [ { "role": "Bulky Support", - "movepool": ["powergem", "recover", "scald", "stealthrock", "toxic"] + "movepool": ["powergem", "recover", "scald", "stealthrock", "toxic"], + "abilities": ["Regenerator"] } ] }, "octillery": { - "level": 89, + "level": 91, "sets": [ { "role": "Wallbreaker", - "movepool": ["energyball", "fireblast", "gunkshot", "hydropump", "icebeam", "scald"] + "movepool": ["energyball", "fireblast", "gunkshot", "hydropump", "icebeam", "scald"], + "abilities": ["Sniper"] }, { "role": "Bulky Attacker", - "movepool": ["energyball", "fireblast", "gunkshot", "icebeam", "scald", "thunderwave"] + "movepool": ["energyball", "fireblast", "gunkshot", "icebeam", "scald", "thunderwave"], + "abilities": ["Sniper"] } ] }, @@ -1378,7 +1600,8 @@ "sets": [ { "role": "Fast Support", - "movepool": ["destinybond", "freezedry", "rapidspin", "spikes"] + "movepool": ["destinybond", "freezedry", "rapidspin", "spikes"], + "abilities": ["Insomnia", "Vital Spirit"] } ] }, @@ -1387,29 +1610,38 @@ "sets": [ { "role": "Bulky Support", - "movepool": ["airslash", "defog", "haze", "rest", "scald", "toxic"] + "movepool": ["airslash", "defog", "haze", "rest", "scald", "toxic"], + "abilities": ["Water Absorb"] }, { "role": "Staller", - "movepool": ["rest", "scald", "sleeptalk", "toxic"] + "movepool": ["rest", "scald", "sleeptalk", "toxic"], + "abilities": ["Water Absorb"] } ] }, "skarmory": { - "level": 80, + "level": 78, "sets": [ { "role": "Bulky Support", - "movepool": ["bravebird", "roost", "spikes", "stealthrock", "whirlwind"] + "movepool": ["bravebird", "roost", "spikes", "stealthrock", "whirlwind"], + "abilities": ["Sturdy"] + }, + { + "role": "Staller", + "movepool": ["bravebird", "roost", "spikes", "stealthrock", "toxic"], + "abilities": ["Sturdy"] } ] }, "houndoom": { - "level": 85, + "level": 86, "sets": [ { "role": "Fast Attacker", - "movepool": ["darkpulse", "fireblast", "hiddenpowergrass", "nastyplot", "suckerpunch"] + "movepool": ["darkpulse", "fireblast", "nastyplot", "sludgebomb", "suckerpunch"], + "abilities": ["Flash Fire"] } ] }, @@ -1418,7 +1650,8 @@ "sets": [ { "role": "Setup Sweeper", - "movepool": ["darkpulse", "fireblast", "hiddenpowergrass", "nastyplot", "taunt"] + "movepool": ["darkpulse", "fireblast", "nastyplot", "sludgebomb", "taunt"], + "abilities": ["Flash Fire"] } ] }, @@ -1427,7 +1660,8 @@ "sets": [ { "role": "Setup Sweeper", - "movepool": ["dracometeor", "hydropump", "icebeam", "raindance", "waterfall"] + "movepool": ["dracometeor", "hydropump", "icebeam", "raindance", "waterfall"], + "abilities": ["Swift Swim"] } ] }, @@ -1436,12 +1670,8 @@ "sets": [ { "role": "Bulky Support", - "movepool": ["earthquake", "knockoff", "rapidspin", "stealthrock", "stoneedge", "toxic"] - }, - { - "role": "Bulky Attacker", - "movepool": ["earthquake", "gunkshot", "iceshard", "knockoff", "rapidspin", "stoneedge"], - "preferredTypes": ["Dark"] + "movepool": ["earthquake", "knockoff", "rapidspin", "stealthrock", "stoneedge", "toxic"], + "abilities": ["Sturdy"] } ] }, @@ -1450,16 +1680,19 @@ "sets": [ { "role": "Bulky Support", - "movepool": ["discharge", "icebeam", "recover", "toxic", "triattack"] + "movepool": ["discharge", "icebeam", "recover", "toxic", "triattack"], + "abilities": ["Download", "Trace"] } ] }, "stantler": { - "level": 88, + "level": 89, "sets": [ { "role": "Wallbreaker", - "movepool": ["doubleedge", "earthquake", "jumpkick", "megahorn", "suckerpunch"] + "movepool": ["doubleedge", "earthquake", "jumpkick", "megahorn", "suckerpunch", "thunderwave"], + "abilities": ["Intimidate"], + "preferredTypes": ["Ground"] } ] }, @@ -1468,7 +1701,8 @@ "sets": [ { "role": "Fast Support", - "movepool": ["destinybond", "nuzzle", "spore", "stealthrock", "stickyweb", "whirlwind"] + "movepool": ["nuzzle", "spikes", "spore", "stealthrock", "stickyweb", "whirlwind"], + "abilities": ["Own Tempo"] } ] }, @@ -1477,7 +1711,8 @@ "sets": [ { "role": "Bulky Support", - "movepool": ["closecombat", "earthquake", "rapidspin", "stoneedge", "suckerpunch", "toxic"] + "movepool": ["closecombat", "earthquake", "rapidspin", "stoneedge", "suckerpunch", "toxic"], + "abilities": ["Intimidate"] } ] }, @@ -1485,12 +1720,9 @@ "level": 84, "sets": [ { - "role": "Bulky Support", - "movepool": ["bodyslam", "earthquake", "healbell", "milkdrink", "stealthrock", "toxic"] - }, - { - "role": "Bulky Setup", - "movepool": ["bodyslam", "curse", "earthquake", "milkdrink"] + "role": "Bulky Attacker", + "movepool": ["bodyslam", "curse", "earthquake", "healbell", "milkdrink", "stealthrock", "toxic"], + "abilities": ["Sap Sipper", "Thick Fat"] } ] }, @@ -1499,24 +1731,29 @@ "sets": [ { "role": "Staller", - "movepool": ["aromatherapy", "seismictoss", "softboiled", "stealthrock", "thunderwave", "toxic"] + "movepool": ["aromatherapy", "seismictoss", "softboiled", "stealthrock", "thunderwave", "toxic"], + "abilities": ["Natural Cure"] }, { "role": "Bulky Support", - "movepool": ["protect", "seismictoss", "toxic", "wish"] + "movepool": ["protect", "seismictoss", "toxic", "wish"], + "abilities": ["Natural Cure"] } ] }, "raikou": { - "level": 80, + "level": 79, "sets": [ { "role": "Fast Attacker", - "movepool": ["aurasphere", "hiddenpowerice", "thunderbolt", "voltswitch"] + "movepool": ["aurasphere", "hiddenpowerice", "thunderbolt", "voltswitch"], + "abilities": ["Pressure"] }, { - "role": "Setup Sweeper", - "movepool": ["aurasphere", "calmmind", "hiddenpowerice", "substitute", "thunderbolt"] + "role": "Bulky Setup", + "movepool": ["aurasphere", "calmmind", "hiddenpowerice", "substitute", "thunderbolt"], + "abilities": ["Pressure"], + "preferredTypes": ["Ice"] } ] }, @@ -1525,25 +1762,33 @@ "sets": [ { "role": "Wallbreaker", - "movepool": ["bulldoze", "extremespeed", "flareblitz", "sacredfire", "stoneedge"], - "preferredTypes": ["Normal"] + "movepool": ["bulldoze", "extremespeed", "flareblitz", "sacredfire"], + "abilities": ["Pressure"] + }, + { + "role": "Fast Attacker", + "movepool": ["extremespeed", "flareblitz", "sacredfire", "stoneedge"], + "abilities": ["Pressure"] } ] }, "suicune": { - "level": 81, + "level": 80, "sets": [ { "role": "Bulky Attacker", - "movepool": ["calmmind", "rest", "scald", "sleeptalk"] + "movepool": ["calmmind", "rest", "scald", "sleeptalk"], + "abilities": ["Pressure"] }, { "role": "Bulky Setup", - "movepool": ["calmmind", "hydropump", "icebeam", "rest", "scald", "substitute"] + "movepool": ["calmmind", "icebeam", "rest", "scald", "substitute"], + "abilities": ["Pressure"] }, { "role": "Staller", - "movepool": ["calmmind", "protect", "scald", "substitute"] + "movepool": ["calmmind", "protect", "scald", "substitute"], + "abilities": ["Pressure"] } ] }, @@ -1552,20 +1797,23 @@ "sets": [ { "role": "Bulky Attacker", - "movepool": ["crunch", "earthquake", "fireblast", "icebeam", "pursuit", "stealthrock", "stoneedge"] + "movepool": ["crunch", "earthquake", "fireblast", "icebeam", "pursuit", "stealthrock", "stoneedge"], + "abilities": ["Sand Stream"] }, { "role": "Bulky Setup", - "movepool": ["crunch", "dragondance", "earthquake", "firepunch", "icepunch", "stoneedge"] + "movepool": ["crunch", "dragondance", "earthquake", "firepunch", "icepunch", "stoneedge"], + "abilities": ["Sand Stream"] } ] }, "tyranitarmega": { - "level": 77, + "level": 76, "sets": [ { "role": "Setup Sweeper", - "movepool": ["crunch", "dragondance", "earthquake", "firepunch", "icepunch", "stoneedge"] + "movepool": ["crunch", "dragondance", "earthquake", "firepunch", "icepunch", "stoneedge"], + "abilities": ["Sand Stream"] } ] }, @@ -1574,16 +1822,18 @@ "sets": [ { "role": "Staller", - "movepool": ["aeroblast", "earthquake", "roost", "substitute", "toxic", "whirlwind"] + "movepool": ["aeroblast", "earthquake", "roost", "substitute", "toxic", "whirlwind"], + "abilities": ["Multiscale"] } ] }, "hooh": { - "level": 72, + "level": 70, "sets": [ { "role": "Bulky Attacker", - "movepool": ["bravebird", "defog", "earthquake", "roost", "sacredfire", "substitute", "toxic"] + "movepool": ["bravebird", "defog", "earthquake", "roost", "sacredfire", "substitute", "toxic"], + "abilities": ["Regenerator"] } ] }, @@ -1592,16 +1842,19 @@ "sets": [ { "role": "Fast Attacker", - "movepool": ["earthpower", "gigadrain", "hiddenpowerfire", "leafstorm", "nastyplot", "psychic", "uturn"], + "movepool": ["earthpower", "gigadrain", "leafstorm", "nastyplot", "psychic", "uturn"], + "abilities": ["Natural Cure"], "preferredTypes": ["Psychic"] }, { "role": "Bulky Support", - "movepool": ["healbell", "leafstorm", "psychic", "recover", "stealthrock", "thunderwave", "uturn"] + "movepool": ["leafstorm", "psychic", "recover", "stealthrock", "thunderwave", "uturn"], + "abilities": ["Natural Cure"] }, { "role": "Bulky Setup", - "movepool": ["leafstorm", "nastyplot", "psychic", "recover"] + "movepool": ["leafstorm", "nastyplot", "psychic", "recover"], + "abilities": ["Natural Cure"] } ] }, @@ -1610,42 +1863,53 @@ "sets": [ { "role": "Fast Attacker", - "movepool": ["earthquake", "focusblast", "gigadrain", "hiddenpowerfire", "hiddenpowerice", "leafstorm", "rockslide"] + "movepool": ["earthquake", "focusblast", "gigadrain", "hiddenpowerfire", "hiddenpowerice", "leafstorm", "rockslide"], + "abilities": ["Overgrow"] }, { "role": "Staller", - "movepool": ["gigadrain", "hiddenpowerfire", "hiddenpowerice", "leechseed", "substitute"] + "movepool": ["gigadrain", "hiddenpowerfire", "hiddenpowerice", "leechseed", "substitute"], + "abilities": ["Overgrow"] } ] }, "sceptilemega": { - "level": 82, + "level": 81, "sets": [ { "role": "Fast Attacker", - "movepool": ["dragonpulse", "earthquake", "focusblast", "gigadrain", "hiddenpowerfire", "leafstorm", "substitute"] + "movepool": ["dragonpulse", "earthquake", "focusblast", "gigadrain", "leafstorm", "substitute"], + "abilities": ["Overgrow"] }, { "role": "Setup Sweeper", - "movepool": ["earthquake", "leafblade", "outrage", "swordsdance"] + "movepool": ["earthquake", "leafblade", "outrage", "swordsdance"], + "abilities": ["Overgrow"] } ] }, "blaziken": { - "level": 76, + "level": 75, "sets": [ { "role": "Wallbreaker", - "movepool": ["fireblast", "highjumpkick", "knockoff", "protect", "stoneedge"] + "movepool": ["fireblast", "highjumpkick", "knockoff", "protect", "stoneedge"], + "abilities": ["Speed Boost"] + }, + { + "role": "Setup Sweeper", + "movepool": ["flareblitz", "highjumpkick", "knockoff", "stoneedge", "swordsdance"], + "abilities": ["Speed Boost"] } ] }, "blazikenmega": { - "level": 75, + "level": 73, "sets": [ { - "role": "Wallbreaker", - "movepool": ["flareblitz", "highjumpkick", "knockoff", "protect", "stoneedge", "swordsdance"] + "role": "Setup Sweeper", + "movepool": ["flareblitz", "highjumpkick", "knockoff", "protect", "stoneedge", "swordsdance"], + "abilities": ["Speed Boost"] } ] }, @@ -1654,74 +1918,84 @@ "sets": [ { "role": "Bulky Attacker", - "movepool": ["earthquake", "icebeam", "roar", "scald", "stealthrock", "toxic"] + "movepool": ["earthquake", "icebeam", "roar", "scald", "stealthrock", "toxic"], + "abilities": ["Torrent"] }, { "role": "Staller", - "movepool": ["earthquake", "protect", "scald", "toxic"] + "movepool": ["earthquake", "protect", "scald", "toxic"], + "abilities": ["Torrent"] } ] }, "swampertmega": { - "level": 82, + "level": 81, "sets": [ { "role": "Setup Sweeper", - "movepool": ["earthquake", "icepunch", "raindance", "superpower", "waterfall"] + "movepool": ["earthquake", "icepunch", "raindance", "superpower", "waterfall"], + "abilities": ["Damp"] } ] }, "mightyena": { - "level": 90, + "level": 92, "sets": [ { - "role": "Fast Attacker", - "movepool": ["crunch", "firefang", "irontail", "playrough", "suckerpunch"], + "role": "Wallbreaker", + "movepool": ["crunch", "irontail", "playrough", "suckerpunch", "toxic"], + "abilities": ["Intimidate"], "preferredTypes": ["Fairy"] } ] }, "linoone": { - "level": 85, + "level": 84, "sets": [ { "role": "Setup Sweeper", - "movepool": ["bellydrum", "extremespeed", "seedbomb", "shadowclaw"] + "movepool": ["bellydrum", "extremespeed", "seedbomb", "shadowclaw"], + "abilities": ["Quick Feet"] } ] }, "beautifly": { - "level": 94, + "level": 98, "sets": [ { "role": "Setup Sweeper", - "movepool": ["bugbuzz", "energyball", "hiddenpowerfighting", "psychic", "quiverdance"] + "movepool": ["aircutter", "bugbuzz", "hiddenpowerground", "quiverdance"], + "abilities": ["Swarm"] } ] }, "dustox": { - "level": 90, + "level": 95, "sets": [ { "role": "Bulky Setup", - "movepool": ["bugbuzz", "quiverdance", "roost", "sludgebomb"] + "movepool": ["bugbuzz", "hiddenpowerground", "quiverdance", "roost", "sludgebomb"], + "abilities": ["Shield Dust"] }, { "role": "Bulky Support", - "movepool": ["bugbuzz", "defog", "roost", "sludgebomb", "toxic", "uturn"] + "movepool": ["bugbuzz", "defog", "roost", "toxic", "uturn"], + "abilities": ["Shield Dust"] } ] }, "ludicolo": { - "level": 87, + "level": 88, "sets": [ { "role": "Setup Sweeper", - "movepool": ["gigadrain", "hydropump", "icebeam", "raindance"] + "movepool": ["gigadrain", "hydropump", "icebeam", "raindance"], + "abilities": ["Swift Swim"] }, { "role": "Wallbreaker", - "movepool": ["energyball", "focusblast", "hydropump", "icebeam", "scald"] + "movepool": ["energyball", "hydropump", "icebeam", "scald"], + "abilities": ["Swift Swim"] } ] }, @@ -1730,20 +2004,28 @@ "sets": [ { "role": "Fast Attacker", - "movepool": ["defog", "knockoff", "leafstorm", "lowkick", "suckerpunch"] + "movepool": ["defog", "knockoff", "leafstorm", "lowkick", "suckerpunch"], + "abilities": ["Chlorophyll", "Pickpocket"] }, { "role": "Setup Sweeper", - "movepool": ["knockoff", "leafblade", "lowkick", "suckerpunch", "swordsdance"] + "movepool": ["knockoff", "leafblade", "lowkick", "suckerpunch", "swordsdance"], + "abilities": ["Chlorophyll", "Pickpocket"] } ] }, "swellow": { - "level": 84, + "level": 82, "sets": [ + { + "role": "Fast Attacker", + "movepool": ["bravebird", "facade", "protect", "uturn"], + "abilities": ["Guts"] + }, { "role": "Wallbreaker", - "movepool": ["bravebird", "facade", "protect", "quickattack", "uturn"] + "movepool": ["bravebird", "facade", "quickattack", "uturn"], + "abilities": ["Guts"] } ] }, @@ -1752,24 +2034,28 @@ "sets": [ { "role": "Bulky Attacker", - "movepool": ["defog", "hurricane", "knockoff", "roost", "scald", "toxic", "uturn"] + "movepool": ["defog", "hurricane", "knockoff", "roost", "scald", "toxic", "uturn"], + "abilities": ["Rain Dish"] }, { "role": "Bulky Support", - "movepool": ["defog", "knockoff", "roost", "scald", "toxic", "uturn"] + "movepool": ["defog", "knockoff", "roost", "scald", "toxic", "uturn"], + "abilities": ["Rain Dish"] } ] }, "gardevoir": { - "level": 82, + "level": 81, "sets": [ { "role": "Fast Attacker", - "movepool": ["calmmind", "focusblast", "healingwish", "moonblast", "psychic", "shadowball", "thunderbolt", "trick"] + "movepool": ["calmmind", "focusblast", "healingwish", "moonblast", "psychic", "shadowball", "thunderbolt", "trick"], + "abilities": ["Trace"] }, { "role": "Setup Sweeper", - "movepool": ["calmmind", "focusblast", "moonblast", "psyshock", "substitute", "willowisp"] + "movepool": ["calmmind", "focusblast", "moonblast", "psyshock", "substitute", "willowisp"], + "abilities": ["Trace"] } ] }, @@ -1778,33 +2064,38 @@ "sets": [ { "role": "Setup Sweeper", - "movepool": ["calmmind", "focusblast", "hypervoice", "psyshock", "substitute", "taunt", "willowisp"] + "movepool": ["calmmind", "focusblast", "hypervoice", "psyshock", "substitute", "taunt", "willowisp"], + "abilities": ["Trace"] } ] }, "masquerain": { - "level": 89, + "level": 90, "sets": [ { "role": "Setup Sweeper", - "movepool": ["airslash", "bugbuzz", "hydropump", "quiverdance"] + "movepool": ["airslash", "bugbuzz", "hydropump", "quiverdance"], + "abilities": ["Intimidate"] }, { "role": "Fast Support", - "movepool": ["airslash", "bugbuzz", "hydropump", "icebeam", "roost", "stickyweb", "stunspore", "uturn"] + "movepool": ["airslash", "bugbuzz", "roost", "scald", "stickyweb", "stunspore", "uturn"], + "abilities": ["Intimidate"] } ] }, "breloom": { - "level": 81, + "level": 82, "sets": [ { "role": "Fast Attacker", - "movepool": ["bulletseed", "machpunch", "rocktomb", "spore", "swordsdance"] + "movepool": ["bulletseed", "machpunch", "rocktomb", "spore", "swordsdance"], + "abilities": ["Technician"] }, { "role": "Setup Sweeper", - "movepool": ["bulletseed", "machpunch", "rocktomb", "swordsdance"] + "movepool": ["bulletseed", "machpunch", "rocktomb", "swordsdance"], + "abilities": ["Technician"] } ] }, @@ -1813,7 +2104,8 @@ "sets": [ { "role": "Bulky Setup", - "movepool": ["bodyslam", "bulkup", "earthquake", "return", "shadowclaw", "slackoff"] + "movepool": ["bodyslam", "bulkup", "earthquake", "return", "shadowclaw", "slackoff"], + "abilities": ["Vital Spirit"] } ] }, @@ -1822,8 +2114,8 @@ "sets": [ { "role": "Fast Attacker", - "movepool": ["earthquake", "firepunch", "gigaimpact", "nightslash", "retaliate"], - "preferredTypes": ["Ground"] + "movepool": ["earthquake", "gigaimpact", "nightslash", "retaliate"], + "abilities": ["Truant"] } ] }, @@ -1832,16 +2124,18 @@ "sets": [ { "role": "Fast Attacker", - "movepool": ["aerialace", "nightslash", "swordsdance", "uturn", "xscissor"] + "movepool": ["aerialace", "nightslash", "swordsdance", "uturn", "xscissor"], + "abilities": ["Infiltrator"] } ] }, "shedinja": { - "level": 89, + "level": 92, "sets": [ { "role": "Setup Sweeper", - "movepool": ["shadowclaw", "shadowsneak", "swordsdance", "willowisp", "xscissor"] + "movepool": ["shadowclaw", "shadowsneak", "swordsdance", "willowisp", "xscissor"], + "abilities": ["Wonder Guard"] } ] }, @@ -1850,7 +2144,8 @@ "sets": [ { "role": "Wallbreaker", - "movepool": ["boomburst", "fireblast", "focusblast", "icebeam", "surf"] + "movepool": ["boomburst", "fireblast", "focusblast", "icebeam", "surf"], + "abilities": ["Scrappy"] } ] }, @@ -1859,22 +2154,25 @@ "sets": [ { "role": "AV Pivot", - "movepool": ["bulletpunch", "closecombat", "heavyslam", "icepunch", "knockoff", "stoneedge"], + "movepool": ["bulletpunch", "closecombat", "heavyslam", "knockoff", "stoneedge"], + "abilities": ["Guts", "Thick Fat"], "preferredTypes": ["Dark"] }, { "role": "Wallbreaker", - "movepool": ["bulkup", "bulletpunch", "closecombat", "facade", "knockoff"], + "movepool": ["bulletpunch", "closecombat", "facade", "fakeout", "knockoff"], + "abilities": ["Guts"], "preferredTypes": ["Dark"] } ] }, "delcatty": { - "level": 95, + "level": 99, "sets": [ { "role": "Fast Support", - "movepool": ["doubleedge", "fakeout", "healbell", "suckerpunch", "thunderwave", "toxic"] + "movepool": ["doubleedge", "fakeout", "healbell", "suckerpunch", "thunderwave", "toxic"], + "abilities": ["Wonder Skin"] } ] }, @@ -1883,7 +2181,8 @@ "sets": [ { "role": "Bulky Support", - "movepool": ["foulplay", "knockoff", "recover", "taunt", "willowisp"] + "movepool": ["foulplay", "knockoff", "recover", "taunt", "willowisp"], + "abilities": ["Prankster"] } ] }, @@ -1892,25 +2191,28 @@ "sets": [ { "role": "Bulky Setup", - "movepool": ["calmmind", "darkpulse", "recover", "willowisp"] + "movepool": ["calmmind", "darkpulse", "recover", "willowisp"], + "abilities": ["Prankster"] } ] }, "mawile": { - "level": 92, + "level": 89, "sets": [ { - "role": "Wallbreaker", - "movepool": ["ironhead", "knockoff", "playrough", "stealthrock", "suckerpunch", "swordsdance"] + "role": "Bulky Attacker", + "movepool": ["ironhead", "knockoff", "playrough", "stealthrock", "suckerpunch", "swordsdance"], + "abilities": ["Intimidate", "Sheer Force"] } ] }, "mawilemega": { - "level": 79, + "level": 76, "sets": [ { "role": "Wallbreaker", - "movepool": ["firefang", "ironhead", "playrough", "suckerpunch", "swordsdance"] + "movepool": ["ironhead", "knockoff", "playrough", "suckerpunch", "swordsdance"], + "abilities": ["Intimidate"] } ] }, @@ -1920,16 +2222,19 @@ { "role": "Wallbreaker", "movepool": ["aquatail", "earthquake", "headsmash", "heavyslam", "rockpolish", "stealthrock"], + "abilities": ["Rock Head"], "preferredTypes": ["Ground"] } ] }, "aggronmega": { - "level": 82, + "level": 80, "sets": [ { "role": "Bulky Support", - "movepool": ["earthquake", "heavyslam", "roar", "stealthrock", "stoneedge", "thunderwave", "toxic"] + "movepool": ["earthquake", "heavyslam", "roar", "stealthrock", "stoneedge", "thunderwave", "toxic"], + "abilities": ["Sturdy"], + "preferredTypes": ["Ground"] } ] }, @@ -1938,7 +2243,8 @@ "sets": [ { "role": "Fast Attacker", - "movepool": ["bulletpunch", "highjumpkick", "icepunch", "poisonjab", "zenheadbutt"] + "movepool": ["bulletpunch", "highjumpkick", "icepunch", "poisonjab", "zenheadbutt"], + "abilities": ["Pure Power"] } ] }, @@ -1947,7 +2253,8 @@ "sets": [ { "role": "Fast Attacker", - "movepool": ["fakeout", "highjumpkick", "icepunch", "thunderpunch", "zenheadbutt"] + "movepool": ["fakeout", "highjumpkick", "icepunch", "thunderpunch", "zenheadbutt"], + "abilities": ["Pure Power"] } ] }, @@ -1956,52 +2263,60 @@ "sets": [ { "role": "Wallbreaker", - "movepool": ["flamethrower", "hiddenpowerice", "overheat", "switcheroo", "thunderbolt", "voltswitch"], - "preferredTypes": ["Fire"] + "movepool": ["flamethrower", "hiddenpowerice", "overheat", "thunderbolt", "voltswitch"], + "abilities": ["Lightning Rod"] } ] }, "manectricmega": { - "level": 80, + "level": 78, "sets": [ { "role": "Fast Attacker", - "movepool": ["hiddenpowergrass", "hiddenpowerice", "overheat", "thunderbolt", "voltswitch"] + "movepool": ["hiddenpowerice", "overheat", "thunderbolt", "voltswitch"], + "abilities": ["Lightning Rod"] } ] }, "plusle": { - "level": 91, + "level": 93, "sets": [ { "role": "Bulky Setup", - "movepool": ["encore", "hiddenpowerice", "nastyplot", "substitute", "thunderbolt"] + "movepool": ["encore", "hiddenpowerice", "nastyplot", "substitute", "thunderbolt"], + "abilities": ["Lightning Rod"], + "preferredTypes": ["Ice"] }, { - "role": "Bulky Attacker", - "movepool": ["encore", "hiddenpowerice", "nuzzle", "thunderbolt", "toxic", "voltswitch"] + "role": "Setup Sweeper", + "movepool": ["grassknot", "hiddenpowerice", "nastyplot", "thunderbolt"], + "abilities": ["Lightning Rod"] } ] }, "minun": { - "level": 90, + "level": 93, "sets": [ { "role": "Bulky Setup", - "movepool": ["encore", "hiddenpowerice", "nastyplot", "substitute", "thunderbolt"] + "movepool": ["encore", "hiddenpowerice", "nastyplot", "substitute", "thunderbolt"], + "abilities": ["Volt Absorb"], + "preferredTypes": ["Ice"] }, { - "role": "Bulky Attacker", - "movepool": ["encore", "hiddenpowerice", "nuzzle", "thunderbolt", "toxic", "voltswitch"] + "role": "Setup Sweeper", + "movepool": ["grassknot", "hiddenpowerice", "nastyplot", "thunderbolt"], + "abilities": ["Volt Absorb"] } ] }, "volbeat": { - "level": 89, + "level": 90, "sets": [ { "role": "Bulky Support", - "movepool": ["encore", "roost", "thunderwave", "toxic", "uturn"] + "movepool": ["encore", "roost", "thunderwave", "uturn"], + "abilities": ["Prankster"] } ] }, @@ -2010,16 +2325,24 @@ "sets": [ { "role": "Bulky Support", - "movepool": ["bugbuzz", "encore", "roost", "thunderwave", "wish"] + "movepool": ["bugbuzz", "encore", "roost", "thunderwave"], + "abilities": ["Prankster"] } ] }, "swalot": { - "level": 88, + "level": 90, "sets": [ { - "role": "Bulky Support", - "movepool": ["earthquake", "encore", "icebeam", "painsplit", "sludgebomb", "toxic", "yawn"] + "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"] } ] }, @@ -2028,7 +2351,8 @@ "sets": [ { "role": "Wallbreaker", - "movepool": ["crunch", "destinybond", "earthquake", "icebeam", "protect", "waterfall"] + "movepool": ["crunch", "destinybond", "earthquake", "icebeam", "protect", "waterfall"], + "abilities": ["Speed Boost"] } ] }, @@ -2037,16 +2361,18 @@ "sets": [ { "role": "Wallbreaker", - "movepool": ["crunch", "icefang", "protect", "waterfall"] + "movepool": ["crunch", "icefang", "protect", "waterfall"], + "abilities": ["Speed Boost"] } ] }, "wailord": { - "level": 88, + "level": 91, "sets": [ { "role": "Bulky Attacker", - "movepool": ["hiddenpowergrass", "hydropump", "icebeam", "waterspout"] + "movepool": ["hiddenpowergrass", "hydropump", "icebeam", "waterspout"], + "abilities": ["Water Veil"] } ] }, @@ -2054,21 +2380,24 @@ "level": 89, "sets": [ { - "role": "Bulky Attacker", - "movepool": ["earthquake", "fireblast", "hiddenpowergrass", "rockpolish", "stoneedge"] + "role": "Setup Sweeper", + "movepool": ["earthquake", "fireblast", "rockpolish", "stoneedge"], + "abilities": ["Solid Rock"] }, { "role": "Bulky Support", - "movepool": ["earthquake", "lavaplume", "roar", "stealthrock", "toxic"] + "movepool": ["earthquake", "lavaplume", "roar", "stealthrock", "toxic"], + "abilities": ["Solid Rock"] } ] }, "cameruptmega": { - "level": 87, + "level": 86, "sets": [ { "role": "Bulky Attacker", - "movepool": ["ancientpower", "earthpower", "fireblast", "stealthrock", "toxic", "willowisp"] + "movepool": ["ancientpower", "earthpower", "fireblast", "stealthrock", "toxic", "willowisp"], + "abilities": ["Solid Rock"] } ] }, @@ -2077,16 +2406,18 @@ "sets": [ { "role": "Bulky Support", - "movepool": ["earthquake", "lavaplume", "rapidspin", "stealthrock", "yawn"] + "movepool": ["earthquake", "lavaplume", "rapidspin", "stealthrock", "yawn"], + "abilities": ["White Smoke"] } ] }, "grumpig": { - "level": 92, + "level": 93, "sets": [ { "role": "Bulky Support", - "movepool": ["focusblast", "healbell", "lightscreen", "psychic", "reflect", "thunderwave", "toxic", "whirlwind"] + "movepool": ["focusblast", "healbell", "psychic", "thunderwave", "toxic", "whirlwind"], + "abilities": ["Thick Fat"] } ] }, @@ -2095,21 +2426,24 @@ "sets": [ { "role": "Staller", - "movepool": ["icepunch", "rest", "return", "sleeptalk", "suckerpunch", "superpower"], + "movepool": ["rest", "return", "sleeptalk", "suckerpunch", "superpower", "thief"], + "abilities": ["Contrary"], "preferredTypes": ["Fighting"] } ] }, "flygon": { - "level": 84, + "level": 83, "sets": [ { "role": "Fast Attacker", - "movepool": ["earthquake", "outrage", "stoneedge", "uturn"] + "movepool": ["earthquake", "outrage", "stoneedge", "uturn"], + "abilities": ["Levitate"] }, { "role": "Bulky Support", - "movepool": ["defog", "dracometeor", "earthquake", "roost", "uturn"] + "movepool": ["defog", "dracometeor", "earthquake", "roost", "uturn"], + "abilities": ["Levitate"] } ] }, @@ -2118,24 +2452,28 @@ "sets": [ { "role": "Wallbreaker", - "movepool": ["darkpulse", "focusblast", "gigadrain", "spikes", "suckerpunch"] + "movepool": ["darkpulse", "focusblast", "gigadrain", "spikes", "suckerpunch"], + "abilities": ["Water Absorb"] }, { "role": "Setup Sweeper", - "movepool": ["drainpunch", "seedbomb", "suckerpunch", "swordsdance"] + "movepool": ["drainpunch", "seedbomb", "suckerpunch", "swordsdance"], + "abilities": ["Water Absorb"] } ] }, "altaria": { - "level": 88, + "level": 89, "sets": [ { "role": "Bulky Setup", - "movepool": ["dragondance", "earthquake", "outrage", "roost"] + "movepool": ["dragondance", "earthquake", "outrage", "roost"], + "abilities": ["Natural Cure"] }, { "role": "Bulky Support", - "movepool": ["dracometeor", "earthquake", "fireblast", "roost", "toxic"] + "movepool": ["dracometeor", "earthquake", "fireblast", "healbell", "roost", "toxic"], + "abilities": ["Natural Cure"] } ] }, @@ -2144,54 +2482,61 @@ "sets": [ { "role": "Setup Sweeper", - "movepool": ["dragondance", "earthquake", "return", "roost"] + "movepool": ["dragondance", "earthquake", "return", "roost"], + "abilities": ["Natural Cure"] }, { "role": "Bulky Support", - "movepool": ["earthquake", "fireblast", "healbell", "return", "roost"] + "movepool": ["earthquake", "fireblast", "healbell", "return", "roost"], + "abilities": ["Natural Cure"] } ] }, "zangoose": { - "level": 86, + "level": 84, "sets": [ { - "role": "Wallbreaker", + "role": "Fast Attacker", "movepool": ["closecombat", "facade", "knockoff", "quickattack", "swordsdance"], + "abilities": ["Toxic Boost"], "preferredTypes": ["Dark"] } ] }, "seviper": { - "level": 89, + "level": 91, "sets": [ { "role": "Fast Attacker", "movepool": ["earthquake", "flamethrower", "gigadrain", "glare", "knockoff", "sludgewave", "suckerpunch", "switcheroo"], + "abilities": ["Infiltrator"], "preferredTypes": ["Ground"] } ] }, "lunatone": { - "level": 91, + "level": 96, "sets": [ { "role": "Wallbreaker", "movepool": ["earthpower", "icebeam", "moonblast", "moonlight", "psychic", "rockpolish"], + "abilities": ["Levitate"], "preferredTypes": ["Ground"] }, { "role": "Bulky Support", - "movepool": ["moonblast", "moonlight", "psychic", "stealthrock", "toxic"] + "movepool": ["earthpower", "moonlight", "psychic", "stealthrock", "toxic"], + "abilities": ["Levitate"] } ] }, "solrock": { - "level": 89, + "level": 90, "sets": [ { "role": "Bulky Support", - "movepool": ["earthquake", "morningsun", "stealthrock", "stoneedge", "willowisp"] + "movepool": ["earthquake", "morningsun", "stealthrock", "stoneedge", "willowisp"], + "abilities": ["Levitate"] } ] }, @@ -2200,7 +2545,13 @@ "sets": [ { "role": "Setup Sweeper", - "movepool": ["dragondance", "earthquake", "stoneedge", "waterfall"] + "movepool": ["dragondance", "earthquake", "stoneedge", "waterfall"], + "abilities": ["Hydration", "Oblivious"] + }, + { + "role": "Staller", + "movepool": ["earthquake", "protect", "scald", "toxic"], + "abilities": ["Hydration", "Oblivious"] } ] }, @@ -2208,21 +2559,19 @@ "level": 83, "sets": [ { - "role": "Wallbreaker", - "movepool": ["aquajet", "crabhammer", "dragondance", "knockoff", "superpower"] - }, - { - "role": "Setup Sweeper", - "movepool": ["aquajet", "crabhammer", "knockoff", "swordsdance"] + "role": "Fast Attacker", + "movepool": ["aquajet", "crabhammer", "dragondance", "knockoff", "superpower"], + "abilities": ["Adaptability"] } ] }, "claydol": { - "level": 87, + "level": 88, "sets": [ { "role": "Bulky Support", - "movepool": ["earthquake", "icebeam", "psychic", "rapidspin", "stealthrock", "toxic"] + "movepool": ["earthquake", "icebeam", "psychic", "rapidspin", "stealthrock", "toxic"], + "abilities": ["Levitate"] } ] }, @@ -2231,11 +2580,14 @@ "sets": [ { "role": "Bulky Setup", - "movepool": ["curse", "recover", "seedbomb", "stoneedge", "swordsdance"] + "movepool": ["curse", "earthquake", "recover", "seedbomb", "stoneedge", "swordsdance"], + "abilities": ["Storm Drain"] }, { "role": "Bulky Attacker", - "movepool": ["gigadrain", "recover", "stealthrock", "stoneedge", "toxic"] + "movepool": ["earthpower", "gigadrain", "recover", "stealthrock", "stoneedge", "toxic"], + "abilities": ["Storm Drain"], + "preferredTypes": ["Grass"] } ] }, @@ -2244,11 +2596,13 @@ "sets": [ { "role": "Bulky Support", - "movepool": ["earthquake", "knockoff", "rapidspin", "stealthrock", "stoneedge", "toxic", "xscissor"] + "movepool": ["earthquake", "knockoff", "rapidspin", "stealthrock", "stoneedge", "toxic", "xscissor"], + "abilities": ["Battle Armor", "Swift Swim"] }, { "role": "Bulky Attacker", - "movepool": ["aquajet", "earthquake", "knockoff", "stoneedge", "swordsdance", "xscissor"] + "movepool": ["aquajet", "earthquake", "knockoff", "stoneedge", "swordsdance", "xscissor"], + "abilities": ["Battle Armor", "Swift Swim"] } ] }, @@ -2257,7 +2611,8 @@ "sets": [ { "role": "Staller", - "movepool": ["dragontail", "haze", "icebeam", "recover", "scald", "toxic"] + "movepool": ["dragontail", "haze", "icebeam", "recover", "scald", "toxic"], + "abilities": ["Competitive", "Marvel Scale"] } ] }, @@ -2266,26 +2621,35 @@ "sets": [ { "role": "Bulky Attacker", - "movepool": ["fireblast", "icebeam", "return", "scald", "thunderbolt", "thunderwave"] + "movepool": ["fireblast", "icebeam", "return", "scald", "thunderbolt", "thunderwave"], + "abilities": ["Forecast"], + "preferredTypes": ["Water"] } ] }, "kecleon": { - "level": 88, + "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": 88, + "level": 89, "sets": [ { "role": "Wallbreaker", - "movepool": ["destinybond", "gunkshot", "knockoff", "shadowclaw", "shadowsneak", "taunt", "willowisp"] + "movepool": ["gunkshot", "knockoff", "shadowclaw", "shadowsneak", "thunderwave", "willowisp"], + "abilities": ["Cursed Body", "Frisk"] } ] }, @@ -2294,38 +2658,44 @@ "sets": [ { "role": "Fast Support", - "movepool": ["destinybond", "knockoff", "shadowclaw", "taunt", "willowisp"] + "movepool": ["destinybond", "knockoff", "shadowclaw", "taunt", "willowisp"], + "abilities": ["Frisk"] } ] }, "tropius": { - "level": 91, + "level": 94, "sets": [ { "role": "Staller", - "movepool": ["airslash", "leechseed", "protect", "substitute"] + "movepool": ["airslash", "leechseed", "protect", "substitute"], + "abilities": ["Harvest"] } ] }, "chimecho": { - "level": 94, + "level": 97, "sets": [ { "role": "Staller", - "movepool": ["healbell", "knockoff", "psychic", "recover", "taunt", "toxic"] + "movepool": ["healbell", "knockoff", "psychic", "recover", "toxic"], + "abilities": ["Levitate"] }, { "role": "Bulky Setup", - "movepool": ["calmmind", "psychic", "recover", "signalbeam"] + "movepool": ["calmmind", "psychic", "psyshock", "recover", "signalbeam"], + "abilities": ["Levitate"] } ] }, "absol": { - "level": 84, + "level": 82, "sets": [ { "role": "Wallbreaker", - "movepool": ["knockoff", "playrough", "pursuit", "suckerpunch", "superpower", "swordsdance"] + "movepool": ["knockoff", "playrough", "pursuit", "suckerpunch", "superpower", "swordsdance"], + "abilities": ["Justified"], + "preferredTypes": ["Fairy"] } ] }, @@ -2334,20 +2704,19 @@ "sets": [ { "role": "Fast Attacker", - "movepool": ["fireblast", "knockoff", "playrough", "protect", "pursuit", "suckerpunch", "superpower"] - }, - { - "role": "Setup Sweeper", - "movepool": ["knockoff", "playrough", "suckerpunch", "superpower", "swordsdance"] + "movepool": ["irontail", "knockoff", "playrough", "pursuit", "suckerpunch", "superpower", "swordsdance"], + "abilities": ["Justified"], + "preferredTypes": ["Fairy"] } ] }, "glalie": { - "level": 88, + "level": 90, "sets": [ { "role": "Fast Support", - "movepool": ["earthquake", "explosion", "freezedry", "spikes", "superfang", "taunt"] + "movepool": ["earthquake", "freezedry", "spikes", "superfang", "taunt"], + "abilities": ["Inner Focus"] } ] }, @@ -2355,8 +2724,10 @@ "level": 82, "sets": [ { - "role": "Wallbreaker", - "movepool": ["earthquake", "explosion", "freezedry", "iceshard", "return", "spikes"] + "role": "Fast Attacker", + "movepool": ["earthquake", "explosion", "freezedry", "iceshard", "return", "spikes"], + "abilities": ["Inner Focus"], + "preferredTypes": ["Ground"] } ] }, @@ -2365,31 +2736,34 @@ "sets": [ { "role": "Bulky Support", - "movepool": ["icebeam", "roar", "superfang", "surf", "toxic"] + "movepool": ["icebeam", "roar", "superfang", "surf", "toxic"], + "abilities": ["Thick Fat"] }, { "role": "Staller", - "movepool": ["icebeam", "protect", "surf", "toxic"] + "movepool": ["icebeam", "protect", "surf", "toxic"], + "abilities": ["Thick Fat"] } ] }, "huntail": { - "level": 83, + "level": 84, "sets": [ { "role": "Setup Sweeper", - "movepool": ["icebeam", "return", "shellsmash", "substitute", "suckerpunch", "waterfall"], + "movepool": ["icebeam", "return", "shellsmash", "suckerpunch", "waterfall"], + "abilities": ["Swift Swim", "Water Veil"], "preferredTypes": ["Ice"] } ] }, "gorebyss": { - "level": 84, + "level": 83, "sets": [ { "role": "Setup Sweeper", - "movepool": ["hiddenpowergrass", "hydropump", "icebeam", "shellsmash", "substitute"], - "preferredTypes": ["Ice"] + "movepool": ["hiddenpowergrass", "hydropump", "icebeam", "shellsmash"], + "abilities": ["Swift Swim"] } ] }, @@ -2398,11 +2772,13 @@ "sets": [ { "role": "Bulky Attacker", - "movepool": ["earthquake", "headsmash", "stealthrock", "toxic", "waterfall"] + "movepool": ["earthquake", "headsmash", "stealthrock", "toxic", "waterfall"], + "abilities": ["Rock Head"] }, { "role": "Wallbreaker", "movepool": ["doubleedge", "earthquake", "headsmash", "rockpolish", "waterfall"], + "abilities": ["Rock Head"], "preferredTypes": ["Ground"] } ] @@ -2412,25 +2788,28 @@ "sets": [ { "role": "Staller", - "movepool": ["charm", "protect", "scald", "toxic"] + "movepool": ["icebeam", "protect", "scald", "substitute", "toxic"], + "abilities": ["Hydration"] } ] }, "salamence": { - "level": 77, + "level": 76, "sets": [ { "role": "Setup Sweeper", - "movepool": ["dragondance", "earthquake", "outrage", "roost"] + "movepool": ["dragondance", "earthquake", "outrage", "roost"], + "abilities": ["Intimidate", "Moxie"] } ] }, "salamencemega": { - "level": 71, + "level": 69, "sets": [ { "role": "Setup Sweeper", - "movepool": ["doubleedge", "dragondance", "earthquake", "return", "roost"] + "movepool": ["doubleedge", "dragondance", "earthquake", "return", "roost"], + "abilities": ["Intimidate"] } ] }, @@ -2440,11 +2819,13 @@ { "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"] } ] @@ -2454,20 +2835,30 @@ "sets": [ { "role": "Bulky Attacker", - "movepool": ["agility", "earthquake", "hammerarm", "icepunch", "meteormash", "zenheadbutt"] + "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, + "level": 87, "sets": [ { "role": "Bulky Setup", - "movepool": ["curse", "drainpunch", "rest", "stoneedge"] + "movepool": ["curse", "drainpunch", "rest", "stoneedge"], + "abilities": ["Sturdy"] }, { "role": "Bulky Support", - "movepool": ["drainpunch", "earthquake", "stealthrock", "stoneedge", "thunderwave", "toxic"] + "movepool": ["drainpunch", "earthquake", "stealthrock", "stoneedge", "thunderwave", "toxic"], + "abilities": ["Sturdy"] } ] }, @@ -2475,16 +2866,20 @@ "level": 87, "sets": [ { - "role": "Bulky Support", - "movepool": ["icebeam", "rest", "sleeptalk", "thunderwave", "toxic"] + "role": "Staller", + "movepool": ["icebeam", "protect", "thunderbolt", "toxic"], + "abilities": ["Clear Body"] }, { "role": "Bulky Attacker", - "movepool": ["icebeam", "rest", "sleeptalk", "thunderbolt"] + "movepool": ["focusblast", "icebeam", "rest", "sleeptalk", "thunderbolt", "thunderwave"], + "abilities": ["Clear Body"], + "preferredTypes": ["Electric"] }, { "role": "Bulky Setup", - "movepool": ["focusblast", "icebeam", "rockpolish", "thunderbolt"] + "movepool": ["focusblast", "icebeam", "rockpolish", "thunderbolt"], + "abilities": ["Clear Body"] } ] }, @@ -2493,60 +2888,68 @@ "sets": [ { "role": "Bulky Setup", - "movepool": ["curse", "ironhead", "rest", "sleeptalk"] + "movepool": ["curse", "ironhead", "rest", "sleeptalk"], + "abilities": ["Clear Body"] }, { "role": "Bulky Support", - "movepool": ["rest", "seismictoss", "sleeptalk", "toxic"] + "movepool": ["rest", "seismictoss", "sleeptalk", "toxic"], + "abilities": ["Clear Body"] }, { "role": "Staller", - "movepool": ["protect", "seismictoss", "stealthrock", "toxic"] + "movepool": ["protect", "seismictoss", "stealthrock", "thunderwave", "toxic"], + "abilities": ["Clear Body"] } ] }, "latias": { - "level": 75, + "level": 74, "sets": [ { "role": "Bulky Attacker", - "movepool": ["calmmind", "dracometeor", "psyshock", "roost"] + "movepool": ["calmmind", "dracometeor", "psyshock", "roost"], + "abilities": ["Levitate"] } ] }, "latiasmega": { - "level": 78, + "level": 77, "sets": [ { "role": "Bulky Attacker", - "movepool": ["calmmind", "defog", "dracometeor", "hiddenpowerfire", "psyshock", "roost"] + "movepool": ["calmmind", "dracometeor", "psyshock", "roost"], + "abilities": ["Levitate"] } ] }, "latios": { - "level": 74, + "level": 73, "sets": [ { "role": "Bulky Attacker", - "movepool": ["calmmind", "dracometeor", "psyshock", "roost"] + "movepool": ["calmmind", "dracometeor", "psyshock", "roost"], + "abilities": ["Levitate"] } ] }, "latiosmega": { - "level": 79, + "level": 77, "sets": [ { "role": "Bulky Attacker", - "movepool": ["calmmind", "dracometeor", "hiddenpowerfire", "psyshock", "roost"] + "movepool": ["calmmind", "dracometeor", "psyshock", "roost"], + "abilities": ["Levitate"] } ] }, "kyogre": { - "level": 69, + "level": 68, "sets": [ { "role": "Fast Attacker", - "movepool": ["icebeam", "originpulse", "scald", "thunder", "waterspout"] + "movepool": ["icebeam", "originpulse", "scald", "thunder", "waterspout"], + "abilities": ["Drizzle"] } ] }, @@ -2555,11 +2958,13 @@ "sets": [ { "role": "Bulky Setup", - "movepool": ["calmmind", "rest", "scald", "sleeptalk"] + "movepool": ["calmmind", "rest", "scald", "sleeptalk"], + "abilities": ["Drizzle"] }, { "role": "Setup Sweeper", - "movepool": ["calmmind", "icebeam", "originpulse", "thunder"] + "movepool": ["calmmind", "icebeam", "originpulse", "thunder"], + "abilities": ["Drizzle"] } ] }, @@ -2568,89 +2973,129 @@ "sets": [ { "role": "Bulky Support", - "movepool": ["dragontail", "lavaplume", "precipiceblades", "stealthrock", "stoneedge", "thunderwave"] + "movepool": ["dragontail", "lavaplume", "precipiceblades", "stealthrock", "stoneedge", "thunderwave"], + "abilities": ["Drought"] }, { "role": "Bulky Setup", - "movepool": ["firepunch", "precipiceblades", "rockpolish", "stoneedge", "swordsdance"] + "movepool": ["firepunch", "precipiceblades", "rockpolish", "stoneedge", "swordsdance"], + "abilities": ["Drought"] } ] }, "groudonprimal": { - "level": 66, + "level": 64, "sets": [ { "role": "Bulky Support", - "movepool": ["dragontail", "lavaplume", "precipiceblades", "stealthrock", "thunderwave"] + "movepool": ["dragontail", "lavaplume", "precipiceblades", "stealthrock", "thunderwave"], + "abilities": ["Drought"] }, { "role": "Bulky Setup", - "movepool": ["firepunch", "precipiceblades", "rockpolish", "swordsdance"] + "movepool": ["firepunch", "precipiceblades", "rockpolish", "swordsdance"], + "abilities": ["Drought"] } ] }, "rayquaza": { - "level": 74, + "level": 71, "sets": [ { "role": "Wallbreaker", - "movepool": ["dracometeor", "dragondance", "earthquake", "extremespeed", "outrage", "vcreate"] + "movepool": ["dracometeor", "earthquake", "extremespeed", "outrage", "vcreate"], + "abilities": ["Air Lock"] + }, + { + "role": "Setup Sweeper", + "movepool": ["dragondance", "earthquake", "extremespeed", "outrage", "vcreate"], + "abilities": ["Air Lock"] + }, + { + "role": "Fast Attacker", + "movepool": ["earthquake", "extremespeed", "outrage", "swordsdance", "vcreate"], + "abilities": ["Air Lock"], + "preferredTypes": ["Normal"] } ] }, "rayquazamega": { - "level": 67, + "level": 65, "sets": [ { "role": "Fast Attacker", - "movepool": ["dragonascent", "dragondance", "earthquake", "extremespeed", "vcreate"] + "movepool": ["dragonascent", "dragondance", "earthquake", "extremespeed", "vcreate"], + "abilities": ["Air Lock"] } ] }, "jirachi": { - "level": 80, + "level": 79, "sets": [ { "role": "Bulky Support", - "movepool": ["bodyslam", "firepunch", "healingwish", "ironhead", "protect", "stealthrock", "toxic", "uturn", "wish"] + "movepool": ["bodyslam", "firepunch", "healingwish", "ironhead", "protect", "stealthrock", "toxic", "uturn", "wish"], + "abilities": ["Serene Grace"] } ] }, "deoxys": { - "level": 76, + "level": 74, "sets": [ { "role": "Wallbreaker", - "movepool": ["extremespeed", "firepunch", "icebeam", "knockoff", "psychoboost", "stealthrock", "superpower"], - "preferredTypes": ["Fighting"] + "movepool": ["extremespeed", "knockoff", "psychoboost", "superpower"], + "abilities": ["Pressure"] + }, + { + "role": "Fast Attacker", + "movepool": ["icebeam", "knockoff", "psychoboost", "superpower"], + "abilities": ["Pressure"] } ] }, "deoxysattack": { - "level": 76, + "level": 72, "sets": [ { "role": "Wallbreaker", - "movepool": ["extremespeed", "firepunch", "icebeam", "knockoff", "psychoboost", "superpower"], - "preferredTypes": ["Fighting"] + "movepool": ["extremespeed", "knockoff", "psychoboost", "superpower"], + "abilities": ["Pressure"] + }, + { + "role": "Fast Attacker", + "movepool": ["icebeam", "knockoff", "psychoboost", "superpower"], + "abilities": ["Pressure"] } ] }, "deoxysdefense": { - "level": 83, + "level": 84, "sets": [ { "role": "Bulky Support", - "movepool": ["knockoff", "recover", "seismictoss", "spikes", "stealthrock", "taunt", "toxic"] + "movepool": ["knockoff", "recover", "seismictoss", "spikes", "stealthrock", "taunt", "toxic"], + "abilities": ["Pressure"] + }, + { + "role": "Bulky Setup", + "movepool": ["focusblast", "nastyplot", "psychic", "psyshock", "recover", "signalbeam"], + "abilities": ["Pressure"] } ] }, "deoxysspeed": { - "level": 82, + "level": 81, "sets": [ { "role": "Fast Support", - "movepool": ["knockoff", "psychoboost", "spikes", "stealthrock", "superpower", "taunt"] + "movepool": ["knockoff", "psychoboost", "spikes", "stealthrock", "superpower", "taunt"], + "abilities": ["Pressure"] + }, + { + "role": "Setup Sweeper", + "movepool": ["darkpulse", "focusblast", "nastyplot", "psychoboost"], + "abilities": ["Pressure"] } ] }, @@ -2659,11 +3104,13 @@ "sets": [ { "role": "Bulky Support", - "movepool": ["earthquake", "stealthrock", "stoneedge", "synthesis", "woodhammer"] + "movepool": ["earthquake", "stealthrock", "stoneedge", "synthesis", "woodhammer"], + "abilities": ["Overgrow"] }, { "role": "Bulky Attacker", - "movepool": ["earthquake", "rockpolish", "stoneedge", "woodhammer"] + "movepool": ["earthquake", "rockpolish", "stoneedge", "woodhammer"], + "abilities": ["Overgrow"] } ] }, @@ -2671,12 +3118,14 @@ "level": 80, "sets": [ { - "role": "Wallbreaker", - "movepool": ["closecombat", "grassknot", "machpunch", "overheat", "stealthrock"] + "role": "Fast Attacker", + "movepool": ["closecombat", "grassknot", "machpunch", "overheat", "stealthrock"], + "abilities": ["Blaze", "Iron Fist"] }, { - "role": "Fast Attacker", - "movepool": ["closecombat", "flareblitz", "machpunch", "stoneedge", "swordsdance", "uturn"] + "role": "Fast Support", + "movepool": ["closecombat", "flareblitz", "machpunch", "stoneedge", "swordsdance", "uturn"], + "abilities": ["Blaze", "Iron Fist"] } ] }, @@ -2685,43 +3134,54 @@ "sets": [ { "role": "Staller", - "movepool": ["defog", "knockoff", "protect", "scald", "stealthrock", "toxic"] + "movepool": ["defog", "knockoff", "protect", "scald", "stealthrock", "toxic"], + "abilities": ["Torrent"] }, { "role": "Bulky Support", - "movepool": ["defog", "icebeam", "knockoff", "roar", "scald", "toxic"] + "movepool": ["defog", "icebeam", "knockoff", "roar", "scald", "toxic"], + "abilities": ["Torrent"] }, { "role": "Bulky Attacker", - "movepool": ["flashcannon", "grassknot", "hydropump", "icebeam", "knockoff", "scald"] + "movepool": ["flashcannon", "grassknot", "hydropump", "icebeam", "knockoff", "scald"], + "abilities": ["Torrent"] } ] }, "staraptor": { - "level": 80, + "level": 79, "sets": [ { "role": "Fast Attacker", "movepool": ["bravebird", "closecombat", "doubleedge", "quickattack", "uturn"], + "abilities": ["Reckless"], "preferredTypes": ["Fighting"] } ] }, "bibarel": { - "level": 91, + "level": 95, "sets": [ { "role": "Setup Sweeper", - "movepool": ["curse", "quickattack", "return", "waterfall"] + "movepool": ["quickattack", "return", "waterfall", "workup"], + "abilities": ["Simple"] + }, + { + "role": "Bulky Setup", + "movepool": ["curse", "quickattack", "return", "waterfall"], + "abilities": ["Simple"] } ] }, "kricketune": { - "level": 92, + "level": 96, "sets": [ { "role": "Fast Support", - "movepool": ["bugbite", "knockoff", "stickyweb", "taunt", "toxic"] + "movepool": ["bugbite", "knockoff", "stickyweb", "taunt", "toxic"], + "abilities": ["Technician"] } ] }, @@ -2730,12 +3190,13 @@ "sets": [ { "role": "Wallbreaker", - "movepool": ["crunch", "facade", "icefang", "superpower", "wildcharge"], - "preferredTypes": ["Fighting"] + "movepool": ["crunch", "facade", "superpower", "wildcharge"], + "abilities": ["Guts"] }, { "role": "AV Pivot", "movepool": ["crunch", "icefang", "superpower", "voltswitch", "wildcharge"], + "abilities": ["Intimidate"], "preferredTypes": ["Fighting"] } ] @@ -2745,91 +3206,108 @@ "sets": [ { "role": "Fast Support", - "movepool": ["gigadrain", "hiddenpowerfire", "leafstorm", "sleeppowder", "sludgebomb", "spikes", "synthesis", "toxicspikes"] + "movepool": ["gigadrain", "hiddenpowerground", "leafstorm", "sleeppowder", "sludgebomb", "spikes", "synthesis", "toxicspikes"], + "abilities": ["Natural Cure", "Technician"] } ] }, "rampardos": { - "level": 90, + "level": 87, "sets": [ { - "role": "Wallbreaker", - "movepool": ["crunch", "earthquake", "firepunch", "rockpolish", "rockslide"] + "role": "Setup Sweeper", + "movepool": ["earthquake", "firepunch", "rockpolish", "rockslide", "zenheadbutt"], + "abilities": ["Sheer Force"] }, { - "role": "Bulky Attacker", - "movepool": ["crunch", "earthquake", "firepunch", "headsmash", "superpower"] + "role": "Fast Attacker", + "movepool": ["earthquake", "firepunch", "headsmash", "rockslide"], + "abilities": ["Sheer Force"] } ] }, "bastiodon": { - "level": 88, + "level": 93, "sets": [ { "role": "Bulky Support", - "movepool": ["metalburst", "roar", "rockblast", "stealthrock", "toxic"] + "movepool": ["metalburst", "roar", "rockblast", "stealthrock", "toxic"], + "abilities": ["Sturdy"] }, { "role": "Staller", - "movepool": ["metalburst", "protect", "roar", "rockblast", "stealthrock", "toxic"] + "movepool": ["metalburst", "protect", "roar", "rockblast", "stealthrock", "toxic"], + "abilities": ["Sturdy"] } ] }, "wormadam": { - "level": 98, + "level": 100, "sets": [ { "role": "Bulky Attacker", - "movepool": ["hiddenpowerground", "hiddenpowerrock", "leafstorm", "signalbeam", "synthesis", "toxic"] + "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", "protect", "signalbeam", "synthesis", "toxic"] + "movepool": ["gigadrain", "hiddenpowerground", "protect", "toxic"], + "abilities": ["Anticipation", "Overcoat"] } ] }, "wormadamsandy": { - "level": 88, + "level": 89, "sets": [ { "role": "Staller", - "movepool": ["earthquake", "protect", "stealthrock", "toxic"] + "movepool": ["earthquake", "infestation", "protect", "stealthrock", "toxic"], + "abilities": ["Overcoat"] } ] }, "wormadamtrash": { - "level": 88, + "level": 87, "sets": [ { "role": "Staller", - "movepool": ["flashcannon", "protect", "stealthrock", "toxic"] + "movepool": ["flashcannon", "infestation", "protect", "stealthrock", "toxic"], + "abilities": ["Overcoat"] } ] }, "mothim": { - "level": 91, + "level": 93, "sets": [ { "role": "Setup Sweeper", - "movepool": ["airslash", "bugbuzz", "energyball", "quiverdance"] + "movepool": ["airslash", "bugbuzz", "energyball", "quiverdance"], + "abilities": ["Tinted Lens"] } ] }, "vespiquen": { - "level": 97, + "level": 99, "sets": [ { "role": "Staller", - "movepool": ["airslash", "defog", "roost", "toxic", "uturn"] + "movepool": ["airslash", "defog", "roost", "toxic", "uturn"], + "abilities": ["Pressure"] } ] }, "pachirisu": { - "level": 90, + "level": 94, "sets": [ { "role": "Bulky Support", - "movepool": ["nuzzle", "superfang", "thunderbolt", "toxic", "uturn"] + "movepool": ["nuzzle", "superfang", "thunderbolt", "toxic", "uturn"], + "abilities": ["Volt Absorb"] } ] }, @@ -2838,22 +3316,30 @@ "sets": [ { "role": "Setup Sweeper", - "movepool": ["aquajet", "bulkup", "icepunch", "lowkick", "substitute", "taunt", "waterfall"], + "movepool": ["bulkup", "icepunch", "lowkick", "substitute", "waterfall"], + "abilities": ["Water Veil"], "preferredTypes": ["Ice"] }, { "role": "Fast Attacker", "movepool": ["aquajet", "crunch", "icepunch", "lowkick", "waterfall"], - "preferredTypes": ["Fighting"] + "abilities": ["Water Veil"], + "preferredTypes": ["Ice"] } ] }, "cherrim": { - "level": 93, + "level": 97, "sets": [ { - "role": "Fast Attacker", - "movepool": ["dazzlinggleam", "energyball", "healingwish", "hiddenpowerfire", "hiddenpowerground", "hiddenpowerrock", "synthesis"] + "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"] } ] }, @@ -2862,49 +3348,54 @@ "sets": [ { "role": "Bulky Attacker", - "movepool": ["clearsmog", "earthquake", "icebeam", "recover", "scald", "toxic"] + "movepool": ["clearsmog", "earthquake", "icebeam", "recover", "scald", "toxic"], + "abilities": ["Storm Drain"] } ] }, "ambipom": { - "level": 84, + "level": 83, "sets": [ { "role": "Fast Attacker", - "movepool": ["fakeout", "knockoff", "lowkick", "return", "seedbomb", "switcheroo", "uturn"], + "movepool": ["fakeout", "knockoff", "lowkick", "return", "uturn"], + "abilities": ["Technician"], "preferredTypes": ["Dark"] } ] }, "drifblim": { - "level": 85, + "level": 84, "sets": [ { "role": "Fast Support", - "movepool": ["acrobatics", "defog", "destinybond", "shadowball", "substitute", "willowisp"] + "movepool": ["acrobatics", "defog", "destinybond", "shadowball", "substitute", "willowisp"], + "abilities": ["Unburden"] }, { "role": "Bulky Support", - "movepool": ["acrobatics", "hex", "substitute", "willowisp"] + "movepool": ["acrobatics", "hex", "substitute", "willowisp"], + "abilities": ["Unburden"] } ] }, "lopunny": { - "level": 87, + "level": 86, "sets": [ { "role": "Wallbreaker", - "movepool": ["healingwish", "highjumpkick", "icepunch", "return", "switcheroo"] + "movepool": ["healingwish", "highjumpkick", "icepunch", "return", "switcheroo"], + "abilities": ["Limber"] } ] }, "lopunnymega": { - "level": 78, + "level": 77, "sets": [ { "role": "Fast Attacker", - "movepool": ["fakeout", "highjumpkick", "icepunch", "poweruppunch", "return", "substitute"], - "preferredTypes": ["Normal"] + "movepool": ["encore", "fakeout", "highjumpkick", "poweruppunch", "return", "substitute"], + "abilities": ["Limber"] } ] }, @@ -2913,29 +3404,33 @@ "sets": [ { "role": "Bulky Attacker", - "movepool": ["dazzlinggleam", "destinybond", "painsplit", "shadowball", "taunt", "willowisp"] + "movepool": ["dazzlinggleam", "destinybond", "painsplit", "shadowball", "taunt", "willowisp"], + "abilities": ["Levitate"] }, { "role": "Wallbreaker", - "movepool": ["dazzlinggleam", "nastyplot", "shadowball", "thunderbolt", "trick"] + "movepool": ["dazzlinggleam", "nastyplot", "shadowball", "thunderbolt", "trick"], + "abilities": ["Levitate"] } ] }, "honchkrow": { - "level": 84, + "level": 82, "sets": [ { "role": "Wallbreaker", - "movepool": ["bravebird", "heatwave", "pursuit", "roost", "suckerpunch", "superpower"] + "movepool": ["bravebird", "heatwave", "pursuit", "roost", "suckerpunch", "superpower"], + "abilities": ["Moxie"] } ] }, "purugly": { - "level": 87, + "level": 88, "sets": [ { "role": "Fast Attacker", - "movepool": ["fakeout", "knockoff", "quickattack", "return", "suckerpunch", "uturn"], + "movepool": ["fakeout", "knockoff", "return", "uturn", "wakeupslap"], + "abilities": ["Defiant", "Thick Fat"], "preferredTypes": ["Dark"] } ] @@ -2945,7 +3440,8 @@ "sets": [ { "role": "Bulky Attacker", - "movepool": ["crunch", "defog", "fireblast", "poisonjab", "pursuit", "suckerpunch", "taunt"] + "movepool": ["crunch", "defog", "fireblast", "poisonjab", "pursuit", "suckerpunch", "taunt"], + "abilities": ["Aftermath"] } ] }, @@ -2954,50 +3450,60 @@ "sets": [ { "role": "Bulky Support", - "movepool": ["earthquake", "ironhead", "lightscreen", "psychic", "reflect", "stealthrock", "toxic"] + "movepool": ["earthquake", "ironhead", "psychic", "stealthrock", "toxic"], + "abilities": ["Levitate"], + "preferredTypes": ["Ground"] }, { "role": "Staller", - "movepool": ["earthquake", "ironhead", "protect", "psychic", "toxic"] + "movepool": ["earthquake", "ironhead", "protect", "psychic", "toxic"], + "abilities": ["Levitate"], + "preferredTypes": ["Ground"] } ] }, "chatot": { - "level": 88, + "level": 87, "sets": [ { "role": "Wallbreaker", - "movepool": ["boomburst", "chatter", "heatwave", "hiddenpowerground", "uturn"] + "movepool": ["boomburst", "chatter", "heatwave", "hiddenpowerground", "uturn"], + "abilities": ["Tangled Feet"] }, { "role": "Setup Sweeper", - "movepool": ["boomburst", "chatter", "heatwave", "nastyplot", "substitute"] + "movepool": ["boomburst", "chatter", "heatwave", "nastyplot", "substitute"], + "abilities": ["Tangled Feet"] } ] }, "spiritomb": { - "level": 89, + "level": 88, "sets": [ { "role": "Bulky Setup", - "movepool": ["calmmind", "darkpulse", "rest", "sleeptalk"] + "movepool": ["calmmind", "darkpulse", "rest", "sleeptalk"], + "abilities": ["Infiltrator"] }, { "role": "Bulky Attacker", - "movepool": ["foulplay", "painsplit", "pursuit", "shadowsneak", "suckerpunch", "willowisp"] + "movepool": ["foulplay", "painsplit", "pursuit", "suckerpunch", "toxic", "willowisp"], + "abilities": ["Infiltrator"] } ] }, "garchomp": { - "level": 76, + "level": 75, "sets": [ { "role": "Fast Support", - "movepool": ["dragonclaw", "earthquake", "fireblast", "outrage", "stealthrock", "stoneedge", "toxic"] + "movepool": ["dragonclaw", "earthquake", "fireblast", "outrage", "stealthrock", "stoneedge", "toxic"], + "abilities": ["Rough Skin"] }, { "role": "Fast Attacker", - "movepool": ["earthquake", "firefang", "outrage", "stoneedge", "swordsdance"] + "movepool": ["earthquake", "firefang", "outrage", "stoneedge", "swordsdance"], + "abilities": ["Rough Skin"] } ] }, @@ -3006,11 +3512,13 @@ "sets": [ { "role": "Bulky Support", - "movepool": ["dracometeor", "earthquake", "fireblast", "stealthrock", "stoneedge"] + "movepool": ["dracometeor", "earthquake", "fireblast", "stealthrock", "stoneedge"], + "abilities": ["Rough Skin"] }, { "role": "Setup Sweeper", - "movepool": ["earthquake", "firefang", "outrage", "stoneedge", "swordsdance"] + "movepool": ["earthquake", "firefang", "outrage", "stoneedge", "swordsdance"], + "abilities": ["Rough Skin"] } ] }, @@ -3020,24 +3528,28 @@ { "role": "Fast Attacker", "movepool": ["bulletpunch", "closecombat", "crunch", "extremespeed", "stoneedge", "swordsdance"], + "abilities": ["Justified"], "preferredTypes": ["Normal"] }, { "role": "Setup Sweeper", - "movepool": ["aurasphere", "darkpulse", "flashcannon", "nastyplot", "vacuumwave"] + "movepool": ["aurasphere", "flashcannon", "nastyplot", "vacuumwave"], + "abilities": ["Inner Focus"] } ] }, "lucariomega": { - "level": 76, + "level": 75, "sets": [ { "role": "Bulky Setup", - "movepool": ["bulletpunch", "closecombat", "icepunch", "swordsdance"] + "movepool": ["bulletpunch", "closecombat", "irontail", "swordsdance"], + "abilities": ["Justified"] }, { "role": "Setup Sweeper", - "movepool": ["aurasphere", "flashcannon", "nastyplot", "vacuumwave"] + "movepool": ["aurasphere", "flashcannon", "nastyplot", "vacuumwave"], + "abilities": ["Justified"] } ] }, @@ -3046,39 +3558,44 @@ "sets": [ { "role": "Bulky Support", - "movepool": ["earthquake", "slackoff", "stealthrock", "stoneedge", "toxic", "whirlwind"] + "movepool": ["earthquake", "slackoff", "stealthrock", "stoneedge", "toxic", "whirlwind"], + "abilities": ["Sand Stream"] } ] }, "drapion": { - "level": 84, + "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"] + "movepool": ["earthquake", "knockoff", "poisonjab", "taunt", "toxicspikes", "whirlwind"], + "abilities": ["Battle Armor"] } ] }, "toxicroak": { - "level": 82, + "level": 83, "sets": [ { "role": "Setup Sweeper", - "movepool": ["drainpunch", "gunkshot", "icepunch", "substitute", "suckerpunch", "swordsdance"] + "movepool": ["drainpunch", "earthquake", "gunkshot", "knockoff", "substitute", "suckerpunch", "swordsdance"], + "abilities": ["Dry Skin"] } ] }, "carnivine": { - "level": 94, + "level": 99, "sets": [ { "role": "Bulky Support", - "movepool": ["knockoff", "powerwhip", "sleeppowder", "synthesis", "toxic"] + "movepool": ["knockoff", "powerwhip", "sleeppowder", "synthesis", "toxic"], + "abilities": ["Levitate"] } ] }, @@ -3087,35 +3604,40 @@ "sets": [ { "role": "Bulky Support", - "movepool": ["defog", "icebeam", "scald", "toxic", "uturn"] + "movepool": ["defog", "icebeam", "scald", "toxic", "uturn"], + "abilities": ["Storm Drain"] } ] }, "abomasnow": { - "level": 86, + "level": 84, "sets": [ { "role": "Bulky Attacker", - "movepool": ["blizzard", "earthquake", "focusblast", "gigadrain", "iceshard", "woodhammer"], - "preferredTypes": ["Grass"] + "movepool": ["blizzard", "earthquake", "gigadrain", "iceshard", "woodhammer"], + "abilities": ["Snow Warning"], + "preferredTypes": ["Ground"] } ] }, "abomasnowmega": { - "level": 84, + "level": 83, "sets": [ { "role": "Bulky Attacker", - "movepool": ["blizzard", "earthquake", "focusblast", "gigadrain", "iceshard", "woodhammer"] + "movepool": ["blizzard", "earthquake", "gigadrain", "iceshard", "woodhammer"], + "abilities": ["Snow Warning"], + "preferredTypes": ["Ground"] } ] }, "weavile": { - "level": 78, + "level": 77, "sets": [ { "role": "Fast Attacker", - "movepool": ["iceshard", "iciclecrash", "knockoff", "lowkick", "pursuit", "swordsdance"] + "movepool": ["iceshard", "iciclecrash", "knockoff", "lowkick", "pursuit", "swordsdance"], + "abilities": ["Pickpocket"] } ] }, @@ -3124,7 +3646,13 @@ "sets": [ { "role": "Fast Attacker", - "movepool": ["flashcannon", "hiddenpowerfire", "hiddenpowerice", "thunderbolt", "voltswitch"] + "movepool": ["flashcannon", "hiddenpowerground", "thunderbolt", "voltswitch"], + "abilities": ["Magnet Pull"] + }, + { + "role": "Staller", + "movepool": ["flashcannon", "protect", "thunderbolt", "toxic"], + "abilities": ["Analytic"] } ] }, @@ -3133,16 +3661,19 @@ "sets": [ { "role": "Bulky Support", - "movepool": ["bodyslam", "healbell", "knockoff", "protect", "wish"] + "movepool": ["bodyslam", "healbell", "knockoff", "protect", "wish"], + "abilities": ["Cloud Nine"] }, { "role": "AV Pivot", "movepool": ["bodyslam", "dragontail", "earthquake", "explosion", "knockoff", "powerwhip"], + "abilities": ["Cloud Nine"], "preferredTypes": ["Ground"] }, { "role": "Bulky Setup", "movepool": ["bodyslam", "earthquake", "explosion", "knockoff", "powerwhip", "return", "swordsdance"], + "abilities": ["Cloud Nine"], "preferredTypes": ["Dark"] } ] @@ -3152,33 +3683,38 @@ "sets": [ { "role": "Bulky Attacker", - "movepool": ["dragontail", "earthquake", "icepunch", "megahorn", "stoneedge"] + "movepool": ["dragontail", "earthquake", "icepunch", "megahorn", "stoneedge"], + "abilities": ["Solid Rock"] }, { "role": "Bulky Setup", - "movepool": ["earthquake", "icepunch", "megahorn", "rockpolish", "stoneedge"] + "movepool": ["earthquake", "icepunch", "megahorn", "rockpolish", "stoneedge"], + "abilities": ["Solid Rock"] } ] }, "tangrowth": { - "level": 87, + "level": 88, "sets": [ { "role": "Bulky Attacker", - "movepool": ["earthquake", "hiddenpowerfire", "knockoff", "leafstorm", "leechseed", "powerwhip", "rockslide", "sleeppowder", "synthesis"] + "movepool": ["earthquake", "knockoff", "leafstorm", "leechseed", "morningsun", "powerwhip", "rockslide", "sleeppowder", "sludgebomb"], + "abilities": ["Regenerator"] }, { "role": "AV Pivot", - "movepool": ["earthquake", "gigadrain", "knockoff", "powerwhip", "rockslide", "sludgebomb"] + "movepool": ["earthquake", "gigadrain", "knockoff", "powerwhip", "rockslide", "sludgebomb"], + "abilities": ["Regenerator"] } ] }, "electivire": { - "level": 85, + "level": 84, "sets": [ { "role": "Fast Attacker", "movepool": ["crosschop", "earthquake", "flamethrower", "icepunch", "voltswitch", "wildcharge"], + "abilities": ["Motor Drive"], "preferredTypes": ["Ice"] } ] @@ -3188,25 +3724,29 @@ "sets": [ { "role": "Bulky Attacker", - "movepool": ["earthquake", "fireblast", "focusblast", "hiddenpowergrass", "hiddenpowerice", "substitute", "thunderbolt"], + "movepool": ["earthquake", "fireblast", "focusblast", "hiddenpowerice", "taunt", "thunderbolt"], + "abilities": ["Flame Body"], "preferredTypes": ["Electric"] } ] }, "togekiss": { - "level": 81, + "level": 79, "sets": [ { "role": "Bulky Setup", - "movepool": ["airslash", "aurasphere", "nastyplot", "roost", "thunderwave"] + "movepool": ["airslash", "aurasphere", "nastyplot", "roost", "thunderwave"], + "abilities": ["Serene Grace"] }, { "role": "Bulky Attacker", - "movepool": ["airslash", "defog", "healbell", "roost", "thunderwave"] + "movepool": ["airslash", "defog", "healbell", "roost", "thunderwave"], + "abilities": ["Serene Grace"] }, { "role": "Fast Attacker", - "movepool": ["airslash", "aurasphere", "dazzlinggleam", "trick"] + "movepool": ["airslash", "aurasphere", "dazzlinggleam", "trick"], + "abilities": ["Serene Grace"] } ] }, @@ -3215,55 +3755,59 @@ "sets": [ { "role": "Fast Attacker", - "movepool": ["airslash", "bugbuzz", "gigadrain", "protect"] + "movepool": ["airslash", "bugbuzz", "hiddenpowerground", "protect"], + "abilities": ["Speed Boost"] }, { "role": "Wallbreaker", - "movepool": ["airslash", "bugbuzz", "gigadrain", "uturn"] + "movepool": ["airslash", "bugbuzz", "gigadrain", "uturn"], + "abilities": ["Tinted Lens"] } ] }, "leafeon": { - "level": 88, + "level": 87, "sets": [ - { - "role": "Bulky Attacker", - "movepool": ["healbell", "knockoff", "leafblade", "synthesis", "toxic"] - }, { "role": "Setup Sweeper", "movepool": ["doubleedge", "knockoff", "leafblade", "swordsdance", "synthesis", "xscissor"], + "abilities": ["Chlorophyll"], "preferredTypes": ["Dark"] } ] }, "glaceon": { - "level": 88, + "level": 91, "sets": [ { "role": "Bulky Support", - "movepool": ["healbell", "hiddenpowerground", "icebeam", "protect", "wish"] + "movepool": ["healbell", "hiddenpowerground", "icebeam", "protect", "wish"], + "abilities": ["Ice Body"] }, { "role": "Staller", - "movepool": ["icebeam", "protect", "toxic", "wish"] + "movepool": ["icebeam", "protect", "toxic", "wish"], + "abilities": ["Ice Body"] } ] }, "gliscor": { - "level": 79, + "level": 77, "sets": [ { - "role": "Staller", - "movepool": ["earthquake", "protect", "substitute", "toxic"] + "role": "Bulky Support", + "movepool": ["earthquake", "protect", "substitute", "toxic"], + "abilities": ["Poison Heal"] }, { - "role": "Bulky Support", - "movepool": ["earthquake", "knockoff", "roost", "stealthrock", "taunt", "toxic", "uturn"] + "role": "Staller", + "movepool": ["defog", "earthquake", "knockoff", "roost", "stealthrock", "taunt", "toxic", "uturn"], + "abilities": ["Poison Heal"] }, { "role": "Setup Sweeper", - "movepool": ["earthquake", "facade", "knockoff", "roost", "swordsdance"] + "movepool": ["earthquake", "facade", "roost", "swordsdance"], + "abilities": ["Poison Heal"] } ] }, @@ -3272,11 +3816,8 @@ "sets": [ { "role": "Wallbreaker", - "movepool": ["earthquake", "iceshard", "iciclecrash", "stealthrock"] - }, - { - "role": "Fast Attacker", - "movepool": ["earthquake", "iceshard", "iciclecrash", "knockoff", "superpower"] + "movepool": ["earthquake", "iceshard", "iciclecrash", "knockoff", "stealthrock"], + "abilities": ["Thick Fat"] } ] }, @@ -3285,7 +3826,8 @@ "sets": [ { "role": "Fast Attacker", - "movepool": ["icebeam", "nastyplot", "shadowball", "thunderbolt", "triattack", "trick"] + "movepool": ["icebeam", "nastyplot", "shadowball", "thunderbolt", "triattack", "trick"], + "abilities": ["Adaptability", "Download"] } ] }, @@ -3295,25 +3837,34 @@ { "role": "Fast Attacker", "movepool": ["closecombat", "icepunch", "knockoff", "shadowsneak", "swordsdance", "zenheadbutt"], + "abilities": ["Justified"], "preferredTypes": ["Dark"] } ] }, "gallademega": { - "level": 79, + "level": 77, "sets": [ { "role": "Setup Sweeper", - "movepool": ["closecombat", "knockoff", "swordsdance", "zenheadbutt"] + "movepool": ["closecombat", "knockoff", "swordsdance", "zenheadbutt"], + "abilities": ["Justified"] } ] }, "probopass": { - "level": 90, + "level": 91, "sets": [ { "role": "Bulky Attacker", - "movepool": ["earthpower", "flashcannon", "stealthrock", "thunderwave", "toxic", "voltswitch"] + "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"] } ] }, @@ -3321,8 +3872,15 @@ "level": 89, "sets": [ { - "role": "Bulky Support", - "movepool": ["earthquake", "haze", "icepunch", "painsplit", "shadowsneak", "willowisp"] + "role": "Bulky Attacker", + "movepool": ["earthquake", "haze", "icepunch", "painsplit", "shadowsneak", "toxic", "willowisp"], + "abilities": ["Frisk", "Pressure"], + "preferredTypes": ["Ground"] + }, + { + "role": "Staller", + "movepool": ["earthquake", "protect", "shadowsneak", "toxic"], + "abilities": ["Frisk", "Pressure"] } ] }, @@ -3331,7 +3889,8 @@ "sets": [ { "role": "Fast Support", - "movepool": ["destinybond", "icebeam", "shadowball", "spikes", "taunt", "thunderwave"] + "movepool": ["destinybond", "icebeam", "shadowball", "spikes", "taunt", "thunderwave"], + "abilities": ["Cursed Body"] } ] }, @@ -3340,16 +3899,18 @@ "sets": [ { "role": "Fast Support", - "movepool": ["hiddenpowerice", "painsplit", "shadowball", "thunderbolt", "trick", "voltswitch", "willowisp"] + "movepool": ["hiddenpowerice", "painsplit", "shadowball", "thunderbolt", "trick", "voltswitch", "willowisp"], + "abilities": ["Levitate"] } ] }, "rotomheat": { - "level": 82, + "level": 83, "sets": [ { "role": "Bulky Attacker", - "movepool": ["hiddenpowerice", "overheat", "painsplit", "thunderbolt", "voltswitch", "willowisp"] + "movepool": ["hiddenpowerice", "overheat", "painsplit", "thunderbolt", "voltswitch", "willowisp"], + "abilities": ["Levitate"] } ] }, @@ -3358,7 +3919,8 @@ "sets": [ { "role": "Bulky Attacker", - "movepool": ["hydropump", "painsplit", "thunderbolt", "trick", "voltswitch", "willowisp"] + "movepool": ["hydropump", "painsplit", "thunderbolt", "trick", "voltswitch", "willowisp"], + "abilities": ["Levitate"] } ] }, @@ -3367,47 +3929,54 @@ "sets": [ { "role": "Bulky Attacker", - "movepool": ["blizzard", "painsplit", "thunderbolt", "trick", "voltswitch", "willowisp"] + "movepool": ["blizzard", "painsplit", "thunderbolt", "trick", "voltswitch", "willowisp"], + "abilities": ["Levitate"] } ] }, "rotomfan": { - "level": 85, + "level": 84, "sets": [ { "role": "Bulky Attacker", - "movepool": ["airslash", "painsplit", "thunderbolt", "voltswitch", "willowisp"] + "movepool": ["airslash", "painsplit", "thunderbolt", "voltswitch", "willowisp"], + "abilities": ["Levitate"] } ] }, "rotommow": { - "level": 84, + "level": 85, "sets": [ { "role": "Fast Support", - "movepool": ["hiddenpowerfire", "hiddenpowerice", "leafstorm", "thunderbolt", "trick", "voltswitch", "willowisp"] + "movepool": ["hiddenpowerice", "leafstorm", "thunderbolt", "trick", "voltswitch", "willowisp"], + "abilities": ["Levitate"] } ] }, "uxie": { - "level": 82, + "level": 81, "sets": [ { "role": "Bulky Support", - "movepool": ["healbell", "knockoff", "psychic", "stealthrock", "thunderwave", "toxic", "uturn", "yawn"] + "movepool": ["healbell", "knockoff", "psychic", "stealthrock", "thunderwave", "toxic", "uturn", "yawn"], + "abilities": ["Levitate"] } ] }, "mesprit": { - "level": 86, + "level": 85, "sets": [ { "role": "Fast Attacker", - "movepool": ["calmmind", "energyball", "healingwish", "hiddenpowerfire", "icebeam", "psychic", "psyshock", "signalbeam", "thunderbolt", "uturn"] + "movepool": ["calmmind", "healingwish", "hiddenpowerfire", "psychic", "psyshock", "signalbeam", "thunderbolt", "uturn"], + "abilities": ["Levitate"], + "preferredTypes": ["Bug"] }, { "role": "Bulky Support", - "movepool": ["knockoff", "psychic", "stealthrock", "thunderwave", "toxic", "uturn"] + "movepool": ["knockoff", "psychic", "stealthrock", "thunderwave", "toxic", "uturn"], + "abilities": ["Levitate"] } ] }, @@ -3416,29 +3985,34 @@ "sets": [ { "role": "Fast Attacker", - "movepool": ["dazzlinggleam", "fireblast", "nastyplot", "psychic", "psyshock", "uturn"] + "movepool": ["dazzlinggleam", "fireblast", "nastyplot", "psychic", "psyshock", "uturn"], + "abilities": ["Levitate"] }, { "role": "Fast Support", - "movepool": ["explosion", "fireblast", "knockoff", "psychic", "stealthrock", "taunt", "uturn"] + "movepool": ["explosion", "fireblast", "knockoff", "psychic", "stealthrock", "taunt", "uturn"], + "abilities": ["Levitate"] } ] }, "dialga": { - "level": 74, + "level": 73, "sets": [ { "role": "Bulky Attacker", - "movepool": ["dracometeor", "dragontail", "fireblast", "flashcannon", "stealthrock", "thunderbolt", "toxic"] + "movepool": ["dracometeor", "dragontail", "fireblast", "flashcannon", "stealthrock", "thunderbolt", "toxic"], + "abilities": ["Pressure"], + "preferredTypes": ["Fire"] } ] }, "palkia": { - "level": 74, + "level": 73, "sets": [ { "role": "Bulky Attacker", "movepool": ["dracometeor", "fireblast", "hydropump", "spacialrend", "thunderwave"], + "abilities": ["Pressure"], "preferredTypes": ["Fire"] } ] @@ -3448,50 +4022,59 @@ "sets": [ { "role": "Bulky Attacker", - "movepool": ["earthpower", "flashcannon", "lavaplume", "magmastorm", "stealthrock", "taunt", "toxic"] + "movepool": ["earthpower", "flashcannon", "lavaplume", "magmastorm", "stealthrock", "taunt", "toxic"], + "abilities": ["Flash Fire"] }, { "role": "Staller", - "movepool": ["earthpower", "magmastorm", "protect", "toxic"] + "movepool": ["earthpower", "magmastorm", "protect", "toxic"], + "abilities": ["Flash Fire"] } ] }, "regigigas": { - "level": 82, + "level": 83, "sets": [ { - "role": "Bulky Support", - "movepool": ["confuseray", "drainpunch", "knockoff", "return", "substitute", "thunderwave"] + "role": "Bulky Attacker", + "movepool": ["drainpunch", "knockoff", "return", "substitute", "thunderwave"], + "abilities": ["Slow Start"], + "preferredTypes": ["Dark"] } ] }, "giratinaorigin": { - "level": 74, + "level": 70, "sets": [ { "role": "Bulky Attacker", - "movepool": ["dracometeor", "hex", "shadowsneak", "thunderwave", "willowisp"] + "movepool": ["dracometeor", "hex", "shadowsneak", "thunderwave", "willowisp"], + "abilities": ["Levitate"] }, { "role": "Fast Attacker", - "movepool": ["defog", "dracometeor", "earthquake", "outrage", "shadowball", "shadowsneak", "willowisp"] + "movepool": ["defog", "dracometeor", "earthquake", "outrage", "shadowball", "shadowsneak", "willowisp"], + "abilities": ["Levitate"] } ] }, "giratina": { - "level": 75, + "level": 73, "sets": [ { "role": "Fast Support", - "movepool": ["dragontail", "rest", "shadowball", "sleeptalk", "willowisp"] + "movepool": ["dragontail", "rest", "shadowball", "sleeptalk", "willowisp"], + "abilities": ["Pressure"] }, { "role": "Bulky Setup", - "movepool": ["calmmind", "dragonpulse", "rest", "sleeptalk"] + "movepool": ["calmmind", "dragonpulse", "rest", "sleeptalk"], + "abilities": ["Pressure"] }, { "role": "Bulky Support", - "movepool": ["defog", "dragontail", "rest", "shadowball", "willowisp"] + "movepool": ["defog", "dragontail", "rest", "shadowball", "willowisp"], + "abilities": ["Pressure"] } ] }, @@ -3500,276 +4083,316 @@ "sets": [ { "role": "Bulky Setup", - "movepool": ["calmmind", "moonblast", "moonlight", "psyshock", "substitute"] + "movepool": ["calmmind", "moonblast", "moonlight", "psyshock"], + "abilities": ["Levitate"] }, { "role": "Bulky Support", - "movepool": ["moonblast", "moonlight", "psychic", "thunderwave", "toxic"] + "movepool": ["moonblast", "moonlight", "psychic", "thunderwave", "toxic"], + "abilities": ["Levitate"] } ] }, "phione": { - "level": 88, + "level": 90, "sets": [ { "role": "Bulky Support", - "movepool": ["healbell", "icebeam", "knockoff", "scald", "toxic", "uturn"] + "movepool": ["healbell", "icebeam", "knockoff", "scald", "toxic", "uturn"], + "abilities": ["Hydration"] } ] }, "manaphy": { - "level": 77, + "level": 76, "sets": [ { "role": "Bulky Setup", - "movepool": ["energyball", "icebeam", "surf", "tailglow"] + "movepool": ["energyball", "icebeam", "surf", "tailglow"], + "abilities": ["Hydration"] } ] }, "darkrai": { - "level": 74, + "level": 75, "sets": [ { "role": "Setup Sweeper", "movepool": ["darkpulse", "darkvoid", "focusblast", "nastyplot", "sludgebomb", "substitute"], + "abilities": ["Bad Dreams"], "preferredTypes": ["Poison"] } ] }, "shaymin": { - "level": 84, + "level": 83, "sets": [ { "role": "Fast Support", - "movepool": ["airslash", "earthpower", "leechseed", "rest", "seedflare", "substitute"], + "movepool": ["airslash", "earthpower", "leechseed", "seedflare", "substitute", "synthesis"], + "abilities": ["Natural Cure"], "preferredTypes": ["Flying"] } ] }, "shayminsky": { - "level": 75, + "level": 74, "sets": [ { "role": "Fast Attacker", - "movepool": ["airslash", "earthpower", "hiddenpowerice", "leechseed", "seedflare", "substitute"] + "movepool": ["airslash", "earthpower", "hiddenpowerice", "leechseed", "seedflare", "substitute"], + "abilities": ["Serene Grace"] } ] }, "arceus": { - "level": 72, + "level": 71, "sets": [ { "role": "Setup Sweeper", - "movepool": ["earthquake", "extremespeed", "recover", "shadowclaw", "swordsdance"] + "movepool": ["earthquake", "extremespeed", "recover", "shadowclaw", "swordsdance"], + "abilities": ["Multitype"] } ] }, "arceusbug": { - "level": 72, + "level": 71, "sets": [ { "role": "Bulky Setup", - "movepool": ["calmmind", "earthpower", "fireblast", "judgment", "recover"] + "movepool": ["calmmind", "earthpower", "fireblast", "judgment", "recover"], + "abilities": ["Multitype"] }, { "role": "Setup Sweeper", - "movepool": ["calmmind", "earthpower", "icebeam", "judgment"] + "movepool": ["calmmind", "earthpower", "icebeam", "judgment"], + "abilities": ["Multitype"] } ] }, "arceusdark": { - "level": 72, + "level": 71, "sets": [ { "role": "Bulky Attacker", - "movepool": ["calmmind", "defog", "fireblast", "judgment", "recover", "sludgebomb", "toxic", "willowisp"] + "movepool": ["calmmind", "defog", "fireblast", "judgment", "recover", "sludgebomb", "toxic", "willowisp"], + "abilities": ["Multitype"] } ] }, "arceusdragon": { - "level": 72, + "level": 71, "sets": [ { "role": "Bulky Support", - "movepool": ["defog", "earthquake", "fireblast", "judgment", "recover", "willowisp"] + "movepool": ["defog", "earthquake", "fireblast", "judgment", "recover", "willowisp"], + "abilities": ["Multitype"] }, { "role": "Setup Sweeper", "movepool": ["earthquake", "extremespeed", "outrage", "recover", "swordsdance"], + "abilities": ["Multitype"], "preferredTypes": ["Ground"] } ] }, "arceuselectric": { - "level": 72, + "level": 71, "sets": [ { "role": "Setup Sweeper", - "movepool": ["calmmind", "icebeam", "judgment", "recover"] + "movepool": ["calmmind", "icebeam", "judgment", "recover"], + "abilities": ["Multitype"] } ] }, "arceusfairy": { - "level": 72, + "level": 71, "sets": [ { "role": "Bulky Attacker", - "movepool": ["defog", "earthquake", "judgment", "recover", "toxic", "willowisp"] + "movepool": ["defog", "earthquake", "judgment", "recover", "toxic", "willowisp"], + "abilities": ["Multitype"] }, { "role": "Bulky Setup", - "movepool": ["calmmind", "earthpower", "judgment", "recover"] + "movepool": ["calmmind", "earthpower", "judgment", "recover"], + "abilities": ["Multitype"] } ] }, "arceusfighting": { - "level": 72, + "level": 71, "sets": [ { "role": "Bulky Setup", - "movepool": ["calmmind", "icebeam", "judgment", "recover", "shadowball"] + "movepool": ["calmmind", "icebeam", "judgment", "recover", "shadowball"], + "abilities": ["Multitype"] } ] }, "arceusfire": { - "level": 72, + "level": 71, "sets": [ { - "role": "Setup Sweeper", - "movepool": ["calmmind", "earthpower", "icebeam", "judgment", "recover", "thunderbolt"] + "role": "Bulky Setup", + "movepool": ["calmmind", "earthpower", "energyball", "judgment", "recover"], + "abilities": ["Multitype"] } ] }, "arceusflying": { - "level": 72, + "level": 71, "sets": [ { "role": "Bulky Setup", - "movepool": ["calmmind", "earthpower", "judgment", "recover"] + "movepool": ["calmmind", "earthpower", "judgment", "recover"], + "abilities": ["Multitype"] }, { "role": "Bulky Attacker", - "movepool": ["defog", "earthquake", "judgment", "recover", "toxic", "willowisp"] + "movepool": ["defog", "earthquake", "judgment", "recover", "toxic", "willowisp"], + "abilities": ["Multitype"] } ] }, "arceusghost": { - "level": 72, + "level": 71, "sets": [ { "role": "Bulky Attacker", - "movepool": ["calmmind", "defog", "focusblast", "judgment", "recover", "toxic", "willowisp"] + "movepool": ["calmmind", "defog", "focusblast", "judgment", "recover", "toxic", "willowisp"], + "abilities": ["Multitype"] }, { "role": "Setup Sweeper", - "movepool": ["brickbreak", "extremespeed", "shadowforce", "swordsdance"] + "movepool": ["brickbreak", "extremespeed", "shadowforce", "swordsdance"], + "abilities": ["Multitype"] } ] }, "arceusgrass": { - "level": 72, + "level": 71, "sets": [ { "role": "Bulky Setup", - "movepool": ["calmmind", "fireblast", "judgment", "recover"] + "movepool": ["calmmind", "fireblast", "judgment", "recover"], + "abilities": ["Multitype"] }, { "role": "Setup Sweeper", - "movepool": ["calmmind", "earthpower", "icebeam", "judgment"] + "movepool": ["calmmind", "earthpower", "icebeam", "judgment"], + "abilities": ["Multitype"] } ] }, "arceusground": { - "level": 72, + "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"] + "movepool": ["calmmind", "icebeam", "judgment", "recover", "toxic"], + "abilities": ["Multitype"] } ] }, "arceusice": { - "level": 72, + "level": 71, "sets": [ { "role": "Bulky Setup", - "movepool": ["calmmind", "earthpower", "judgment", "recover", "thunderbolt"] + "movepool": ["calmmind", "earthpower", "judgment", "recover", "thunderbolt"], + "abilities": ["Multitype"] } ] }, "arceuspoison": { - "level": 72, + "level": 71, "sets": [ { "role": "Bulky Attacker", - "movepool": ["defog", "earthquake", "fireblast", "icebeam", "recover", "sludgebomb"] + "movepool": ["defog", "earthquake", "icebeam", "recover", "sludgebomb"], + "abilities": ["Multitype"], + "preferredTypes": ["Ground"] }, { "role": "Setup Sweeper", - "movepool": ["calmmind", "earthpower", "fireblast", "icebeam", "recover", "sludgebomb"] + "movepool": ["calmmind", "earthpower", "icebeam", "recover", "sludgebomb"], + "abilities": ["Multitype"], + "preferredTypes": ["Ground"] } ] }, "arceuspsychic": { - "level": 72, + "level": 71, "sets": [ { "role": "Bulky Attacker", - "movepool": ["defog", "earthquake", "fireblast", "judgment", "recover", "toxic", "willowisp"] + "movepool": ["defog", "earthquake", "fireblast", "judgment", "recover", "toxic", "willowisp"], + "abilities": ["Multitype"] }, { "role": "Bulky Setup", - "movepool": ["calmmind", "earthpower", "fireblast", "judgment", "recover"] + "movepool": ["calmmind", "earthpower", "fireblast", "judgment", "recover"], + "abilities": ["Multitype"] } ] }, "arceusrock": { - "level": 72, + "level": 71, "sets": [ { "role": "Bulky Attacker", - "movepool": ["defog", "earthquake", "judgment", "recover", "toxic", "willowisp"] + "movepool": ["defog", "earthquake", "judgment", "recover", "toxic", "willowisp"], + "abilities": ["Multitype"] }, { "role": "Setup Sweeper", "movepool": ["earthquake", "extremespeed", "recover", "stoneedge", "swordsdance"], + "abilities": ["Multitype"], "preferredTypes": ["Ground"] } ] }, "arceussteel": { - "level": 72, + "level": 71, "sets": [ { "role": "Bulky Attacker", - "movepool": ["defog", "earthquake", "judgment", "recover", "toxic", "willowisp"] + "movepool": ["defog", "earthquake", "judgment", "recover", "toxic", "willowisp"], + "abilities": ["Multitype"] } ] }, "arceuswater": { - "level": 72, + "level": 71, "sets": [ { "role": "Bulky Attacker", - "movepool": ["calmmind", "defog", "icebeam", "judgment", "recover", "toxic", "willowisp"] + "movepool": ["calmmind", "icebeam", "judgment", "recover", "toxic", "willowisp"], + "abilities": ["Multitype"] } ] }, "victini": { - "level": 79, + "level": 78, "sets": [ { "role": "Fast Attacker", - "movepool": ["boltstrike", "uturn", "vcreate", "zenheadbutt"] + "movepool": ["boltstrike", "uturn", "vcreate", "zenheadbutt"], + "abilities": ["Victory Star"] }, { "role": "AV Pivot", - "movepool": ["boltstrike", "energyball", "focusblast", "psychic", "uturn", "vcreate"] + "movepool": ["boltstrike", "energyball", "focusblast", "glaciate", "psychic", "uturn", "vcreate"], + "abilities": ["Victory Star"], + "preferredTypes": ["Electric"] } ] }, @@ -3778,7 +4401,8 @@ "sets": [ { "role": "Fast Attacker", - "movepool": ["dragonpulse", "glare", "hiddenpowerfire", "leafstorm", "leechseed", "substitute"] + "movepool": ["dragonpulse", "glare", "hiddenpowerfire", "leafstorm", "leechseed", "substitute"], + "abilities": ["Contrary"] } ] }, @@ -3787,11 +4411,13 @@ "sets": [ { "role": "Bulky Attacker", - "movepool": ["flareblitz", "headsmash", "suckerpunch", "superpower", "wildcharge"] + "movepool": ["flareblitz", "headsmash", "suckerpunch", "superpower", "wildcharge"], + "abilities": ["Reckless"] }, { "role": "AV Pivot", - "movepool": ["fireblast", "grassknot", "suckerpunch", "superpower", "wildcharge"] + "movepool": ["flareblitz", "grassknot", "suckerpunch", "superpower", "wildcharge"], + "abilities": ["Reckless"] } ] }, @@ -3800,43 +4426,53 @@ "sets": [ { "role": "AV Pivot", - "movepool": ["aquajet", "grassknot", "hydropump", "icebeam", "knockoff", "megahorn", "superpower"] + "movepool": ["aquajet", "grassknot", "hydropump", "icebeam", "knockoff", "megahorn", "scald", "superpower"], + "abilities": ["Torrent"] }, { "role": "Fast Attacker", - "movepool": ["aquajet", "knockoff", "megahorn", "superpower", "swordsdance", "waterfall"] + "movepool": ["aquajet", "knockoff", "megahorn", "superpower", "swordsdance", "waterfall"], + "abilities": ["Torrent"] } ] }, "watchog": { - "level": 90, + "level": 94, "sets": [ { "role": "Bulky Attacker", - "movepool": ["hypnosis", "knockoff", "return", "superfang"] + "movepool": ["hypnosis", "knockoff", "return", "superfang"], + "abilities": ["Analytic"] }, { "role": "Setup Sweeper", - "movepool": ["hypnosis", "knockoff", "return", "substitute", "swordsdance"] + "movepool": ["hypnosis", "knockoff", "return", "substitute", "swordsdance"], + "abilities": ["Analytic"] } ] }, "stoutland": { - "level": 87, + "level": 86, "sets": [ { "role": "Fast Attacker", - "movepool": ["crunch", "playrough", "return", "superpower", "wildcharge"], - "preferredTypes": ["Fighting"] + "movepool": ["crunch", "facade", "return", "superpower"], + "abilities": ["Scrappy"] } ] }, "liepard": { - "level": 86, + "level": 85, "sets": [ { "role": "Fast Support", - "movepool": ["copycat", "encore", "knockoff", "substitute", "thunderwave", "uturn"] + "movepool": ["copycat", "encore", "knockoff", "substitute", "thunderwave", "uturn"], + "abilities": ["Prankster"] + }, + { + "role": "Fast Attacker", + "movepool": ["gunkshot", "knockoff", "playrough", "thunderwave"], + "abilities": ["Prankster"] } ] }, @@ -3846,11 +4482,13 @@ { "role": "Fast Attacker", "movepool": ["gunkshot", "hiddenpowerice", "knockoff", "leafstorm", "rockslide", "superpower"], + "abilities": ["Overgrow"], "preferredTypes": ["Fighting"] }, { "role": "Setup Sweeper", - "movepool": ["focusblast", "gigadrain", "hiddenpowerice", "nastyplot", "substitute"] + "movepool": ["focusblast", "gigadrain", "hiddenpowerice", "nastyplot", "substitute"], + "abilities": ["Overgrow"] } ] }, @@ -3859,7 +4497,8 @@ "sets": [ { "role": "Setup Sweeper", - "movepool": ["fireblast", "focusblast", "grassknot", "hiddenpowerrock", "nastyplot", "substitute"] + "movepool": ["fireblast", "focusblast", "grassknot", "hiddenpowerrock", "nastyplot", "substitute"], + "abilities": ["Blaze"] } ] }, @@ -3868,7 +4507,8 @@ "sets": [ { "role": "Setup Sweeper", - "movepool": ["focusblast", "hydropump", "icebeam", "nastyplot", "substitute"], + "movepool": ["grassknot", "hydropump", "icebeam", "nastyplot", "substitute"], + "abilities": ["Torrent"], "preferredTypes": ["Ice"] } ] @@ -3878,11 +4518,13 @@ "sets": [ { "role": "Bulky Setup", - "movepool": ["calmmind", "moonlight", "psyshock", "shadowball", "signalbeam"] + "movepool": ["calmmind", "moonlight", "psyshock", "shadowball", "signalbeam"], + "abilities": ["Synchronize"] }, { "role": "Bulky Support", - "movepool": ["healbell", "moonlight", "psychic", "signalbeam", "thunderwave", "toxic"] + "movepool": ["healbell", "moonlight", "psychic", "signalbeam", "thunderwave", "toxic"], + "abilities": ["Synchronize"] } ] }, @@ -3891,25 +4533,34 @@ "sets": [ { "role": "Bulky Attacker", - "movepool": ["nightslash", "pluck", "return", "roost", "toxic", "uturn"] + "movepool": ["nightslash", "pluck", "return", "roost", "toxic", "uturn"], + "abilities": ["Super Luck"] } ] }, "zebstrika": { - "level": 88, + "level": 87, "sets": [ { "role": "Fast Attacker", - "movepool": ["hiddenpowergrass", "hiddenpowerice", "overheat", "thunderbolt", "voltswitch", "wildcharge"] + "movepool": ["hiddenpowerice", "overheat", "voltswitch", "wildcharge"], + "abilities": ["Sap Sipper"] + }, + { + "role": "Wallbreaker", + "movepool": ["hiddenpowerice", "overheat", "thunderbolt", "voltswitch"], + "abilities": ["Lightning Rod"] } ] }, "gigalith": { - "level": 83, + "level": 85, "sets": [ { "role": "Bulky Attacker", - "movepool": ["earthquake", "explosion", "stealthrock", "stoneedge", "superpower"] + "movepool": ["earthquake", "explosion", "stealthrock", "stoneedge", "superpower", "toxic"], + "abilities": ["Sturdy"], + "preferredTypes": ["Ground"] } ] }, @@ -3917,12 +4568,14 @@ "level": 86, "sets": [ { - "role": "Bulky Setup", - "movepool": ["calmmind", "heatwave", "roost", "storedpower"] + "role": "Bulky Attacker", + "movepool": ["calmmind", "heatwave", "roost", "storedpower"], + "abilities": ["Simple"] }, { "role": "Setup Sweeper", - "movepool": ["airslash", "calmmind", "heatwave", "roost", "storedpower"] + "movepool": ["airslash", "calmmind", "heatwave", "roost", "storedpower"], + "abilities": ["Simple"] } ] }, @@ -3931,7 +4584,8 @@ "sets": [ { "role": "Fast Attacker", - "movepool": ["earthquake", "ironhead", "rapidspin", "rockslide", "swordsdance"] + "movepool": ["earthquake", "ironhead", "rapidspin", "rockslide", "swordsdance"], + "abilities": ["Mold Breaker", "Sand Rush"] } ] }, @@ -3940,37 +4594,38 @@ "sets": [ { "role": "Bulky Support", - "movepool": ["knockoff", "protect", "toxic", "wish"] + "movepool": ["knockoff", "protect", "toxic", "wish"], + "abilities": ["Regenerator"] } ] }, "audinomega": { - "level": 90, + "level": 91, "sets": [ { - "role": "Bulky Support", - "movepool": ["dazzlinggleam", "healbell", "protect", "toxic", "wish"] - }, - { - "role": "Bulky Attacker", - "movepool": ["dazzlinggleam", "fireblast", "knockoff", "protect", "wish"] + "role": "Staller", + "movepool": ["dazzlinggleam", "protect", "toxic", "wish"], + "abilities": ["Regenerator"] }, { - "role": "Bulky Setup", - "movepool": ["calmmind", "dazzlinggleam", "protect", "wish"] + "role": "Bulky Support", + "movepool": ["calmmind", "dazzlinggleam", "fireblast", "protect", "wish"], + "abilities": ["Regenerator"] } ] }, "conkeldurr": { - "level": 83, + "level": 81, "sets": [ { "role": "Wallbreaker", - "movepool": ["drainpunch", "facade", "knockoff", "machpunch"] + "movepool": ["drainpunch", "facade", "knockoff", "machpunch"], + "abilities": ["Guts"] }, { "role": "Setup Sweeper", - "movepool": ["bulkup", "drainpunch", "knockoff", "machpunch"] + "movepool": ["bulkup", "drainpunch", "knockoff", "machpunch"], + "abilities": ["Iron Fist"] } ] }, @@ -3979,20 +4634,28 @@ "sets": [ { "role": "Setup Sweeper", - "movepool": ["earthquake", "hydropump", "knockoff", "raindance", "sludgewave"] + "movepool": ["earthquake", "hydropump", "knockoff", "raindance", "sludgewave"], + "abilities": ["Swift Swim"] }, { "role": "Bulky Support", - "movepool": ["earthquake", "knockoff", "scald", "stealthrock", "toxic"] + "movepool": ["earthquake", "knockoff", "scald", "stealthrock", "toxic"], + "abilities": ["Water Absorb"] + }, + { + "role": "Staller", + "movepool": ["earthquake", "protect", "scald", "toxic"], + "abilities": ["Water Absorb"] } ] }, "throh": { - "level": 88, + "level": 89, "sets": [ { "role": "Bulky Support", - "movepool": ["bulkup", "circlethrow", "knockoff", "rest", "sleeptalk"] + "movepool": ["bulkup", "circlethrow", "knockoff", "rest", "sleeptalk"], + "abilities": ["Guts"] } ] }, @@ -4001,7 +4664,8 @@ "sets": [ { "role": "Fast Attacker", - "movepool": ["bulkup", "closecombat", "earthquake", "icepunch", "knockoff", "poisonjab", "stoneedge"], + "movepool": ["bulkup", "closecombat", "earthquake", "knockoff", "poisonjab", "stoneedge"], + "abilities": ["Mold Breaker", "Sturdy"], "preferredTypes": ["Dark"] } ] @@ -4009,26 +4673,25 @@ "leavanny": { "level": 88, "sets": [ - { - "role": "Setup Sweeper", - "movepool": ["knockoff", "leafblade", "swordsdance", "xscissor"] - }, { "role": "Fast Support", - "movepool": ["healbell", "knockoff", "leafblade", "stickyweb", "xscissor"] + "movepool": ["knockoff", "leafblade", "stickyweb", "toxic", "xscissor"], + "abilities": ["Chlorophyll", "Swarm"] } ] }, "scolipede": { - "level": 81, + "level": 80, "sets": [ { "role": "Fast Support", - "movepool": ["earthquake", "megahorn", "poisonjab", "protect", "spikes", "toxicspikes"] + "movepool": ["earthquake", "megahorn", "poisonjab", "spikes", "toxicspikes"], + "abilities": ["Speed Boost"] }, { "role": "Setup Sweeper", - "movepool": ["earthquake", "megahorn", "poisonjab", "protect", "swordsdance"] + "movepool": ["earthquake", "megahorn", "poisonjab", "swordsdance"], + "abilities": ["Speed Boost"] } ] }, @@ -4037,11 +4700,13 @@ "sets": [ { "role": "Fast Support", - "movepool": ["encore", "energyball", "moonblast", "stunspore", "taunt", "toxic", "uturn"] + "movepool": ["encore", "energyball", "moonblast", "stunspore", "taunt", "toxic", "uturn"], + "abilities": ["Prankster"] }, { "role": "Staller", - "movepool": ["leechseed", "moonblast", "protect", "substitute"] + "movepool": ["leechseed", "moonblast", "protect", "substitute"], + "abilities": ["Prankster"] } ] }, @@ -4050,25 +4715,23 @@ "sets": [ { "role": "Setup Sweeper", - "movepool": ["gigadrain", "hiddenpowerfire", "hiddenpowerrock", "petaldance", "quiverdance", "sleeppowder"] - } - ] - }, - "basculin": { - "level": 87, - "sets": [ + "movepool": ["gigadrain", "hiddenpowerfire", "hiddenpowerrock", "quiverdance", "sleeppowder"], + "abilities": ["Chlorophyll"] + }, { - "role": "Bulky Attacker", - "movepool": ["aquajet", "crunch", "superpower", "waterfall", "zenheadbutt"] + "role": "Fast Attacker", + "movepool": ["hiddenpowerfire", "hiddenpowerrock", "petaldance", "quiverdance", "sleeppowder"], + "abilities": ["Own Tempo"] } ] }, - "basculinbluestriped": { + "basculin": { "level": 87, "sets": [ { "role": "Bulky Attacker", - "movepool": ["aquajet", "crunch", "superpower", "waterfall", "zenheadbutt"] + "movepool": ["aquajet", "crunch", "superpower", "waterfall", "zenheadbutt"], + "abilities": ["Adaptability"] } ] }, @@ -4077,70 +4740,80 @@ "sets": [ { "role": "Fast Attacker", - "movepool": ["earthquake", "knockoff", "pursuit", "stealthrock", "stoneedge", "superpower"] + "movepool": ["earthquake", "knockoff", "pursuit", "stealthrock", "stoneedge", "superpower"], + "abilities": ["Intimidate"] } ] }, "darmanitan": { - "level": 81, + "level": 80, "sets": [ { "role": "Wallbreaker", - "movepool": ["earthquake", "flareblitz", "rockslide", "superpower", "uturn"] + "movepool": ["earthquake", "flareblitz", "rockslide", "superpower", "uturn"], + "abilities": ["Sheer Force"] } ] }, "maractus": { - "level": 93, + "level": 98, "sets": [ { "role": "Fast Support", - "movepool": ["gigadrain", "hiddenpowerfire", "knockoff", "spikes", "suckerpunch", "toxic"] + "movepool": ["gigadrain", "hiddenpowerfire", "knockoff", "spikes", "synthesis", "toxic"], + "abilities": ["Storm Drain", "Water Absorb"] }, { "role": "Staller", - "movepool": ["gigadrain", "leechseed", "spikyshield", "toxic"] + "movepool": ["gigadrain", "hiddenpowerfire", "hiddenpowerice", "leechseed", "spikyshield"], + "abilities": ["Storm Drain", "Water Absorb"] } ] }, "crustle": { - "level": 85, + "level": 83, "sets": [ { "role": "Setup Sweeper", "movepool": ["earthquake", "knockoff", "shellsmash", "stoneedge", "xscissor"], + "abilities": ["Sturdy"], "preferredTypes": ["Ground"] } ] }, "scrafty": { - "level": 84, + "level": 83, "sets": [ { "role": "Setup Sweeper", - "movepool": ["dragondance", "highjumpkick", "icepunch", "knockoff", "poisonjab"] + "movepool": ["dragondance", "highjumpkick", "ironhead", "knockoff"], + "abilities": ["Intimidate", "Moxie"] }, { "role": "Bulky Setup", - "movepool": ["bulkup", "drainpunch", "highjumpkick", "knockoff", "rest"] + "movepool": ["bulkup", "drainpunch", "knockoff", "rest"], + "abilities": ["Shed Skin"] } ] }, "sigilyph": { - "level": 84, + "level": 83, "sets": [ { "role": "Bulky Attacker", - "movepool": ["airslash", "calmmind", "heatwave", "psyshock", "roost"] + "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"] + "movepool": ["cosmicpower", "psychoshift", "roost", "storedpower"], + "abilities": ["Magic Guard"] } ] }, @@ -4149,11 +4822,13 @@ "sets": [ { "role": "Bulky Support", - "movepool": ["haze", "painsplit", "shadowball", "toxicspikes", "willowisp"] + "movepool": ["haze", "painsplit", "shadowball", "toxicspikes", "willowisp"], + "abilities": ["Mummy"] }, { "role": "Bulky Setup", - "movepool": ["hiddenpowerfighting", "nastyplot", "shadowball", "trickroom"] + "movepool": ["hiddenpowerfighting", "nastyplot", "shadowball", "trickroom"], + "abilities": ["Mummy"] } ] }, @@ -4162,20 +4837,18 @@ "sets": [ { "role": "Setup Sweeper", - "movepool": ["aquajet", "earthquake", "shellsmash", "stoneedge", "waterfall"] + "movepool": ["aquajet", "earthquake", "icebeam", "shellsmash", "stoneedge", "waterfall"], + "abilities": ["Solid Rock", "Sturdy", "Swift Swim"] } ] }, "archeops": { - "level": 83, + "level": 82, "sets": [ { - "role": "Fast Support", - "movepool": ["acrobatics", "defog", "earthquake", "roost", "stoneedge", "uturn"] - }, - { - "role": "Wallbreaker", - "movepool": ["aquatail", "earthquake", "headsmash", "knockoff", "stealthrock", "stoneedge", "uturn"], + "role": "Fast Attacker", + "movepool": ["acrobatics", "defog", "earthquake", "knockoff", "roost", "stealthrock", "stoneedge", "uturn"], + "abilities": ["Defeatist"], "preferredTypes": ["Ground"] } ] @@ -4184,62 +4857,60 @@ "level": 88, "sets": [ { - "role": "Bulky Support", - "movepool": ["drainpunch", "gunkshot", "haze", "painsplit", "spikes", "toxic", "toxicspikes"] + "role": "Bulky Attacker", + "movepool": ["drainpunch", "gunkshot", "haze", "painsplit", "spikes", "toxic", "toxicspikes"], + "abilities": ["Aftermath"] } ] }, "zoroark": { - "level": 84, + "level": 82, "sets": [ { - "role": "Fast Attacker", + "role": "Wallbreaker", "movepool": ["darkpulse", "flamethrower", "focusblast", "nastyplot", "sludgebomb", "trick", "uturn"], + "abilities": ["Illusion"], "preferredTypes": ["Poison"] } ] }, "cinccino": { - "level": 83, + "level": 82, "sets": [ { "role": "Fast Attacker", - "movepool": ["bulletseed", "knockoff", "rockblast", "tailslap", "uturn"] + "movepool": ["bulletseed", "knockoff", "rockblast", "tailslap", "uturn"], + "abilities": ["Skill Link"] } ] }, "gothitelle": { - "level": 84, + "level": 89, "sets": [ { "role": "Bulky Attacker", - "movepool": ["calmmind", "hiddenpowerfighting", "psychic", "shadowball", "signalbeam", "thunderbolt", "trick"] + "movepool": ["calmmind", "hiddenpowerfighting", "psychic", "shadowball", "signalbeam", "thunderbolt", "trick"], + "abilities": ["Shadow Tag"] } ] }, "reuniclus": { - "level": 84, + "level": 85, "sets": [ { - "role": "Bulky Attacker", - "movepool": ["calmmind", "focusblast", "psychic", "psyshock", "recover", "shadowball", "trickroom"] - }, - { - "role": "Wallbreaker", - "movepool": ["focusblast", "psychic", "psyshock", "shadowball", "trickroom"] - }, - { - "role": "AV Pivot", - "movepool": ["focusblast", "futuresight", "knockoff", "psychic", "shadowball"] + "role": "Bulky Setup", + "movepool": ["calmmind", "focusblast", "psychic", "psyshock", "recover", "signalbeam"], + "abilities": ["Magic Guard"] } ] }, "swanna": { - "level": 88, + "level": 86, "sets": [ { "role": "Bulky Attacker", - "movepool": ["bravebird", "defog", "icebeam", "roost", "scald"] + "movepool": ["bravebird", "defog", "roost", "scald", "toxic"], + "abilities": ["Hydration"] } ] }, @@ -4248,30 +4919,36 @@ "sets": [ { "role": "Fast Attacker", - "movepool": ["autotomize", "explosion", "flashcannon", "freezedry", "hiddenpowerground", "icebeam", "toxic"] + "movepool": ["autotomize", "explosion", "flashcannon", "freezedry", "hiddenpowerground", "icebeam", "toxic"], + "abilities": ["Weak Armor"], + "preferredTypes": ["Ground"] }, { "role": "AV Pivot", - "movepool": ["explosion", "flashcannon", "freezedry", "hiddenpowerground", "icebeam"] + "movepool": ["explosion", "flashcannon", "freezedry", "hiddenpowerground", "icebeam"], + "abilities": ["Weak Armor"], + "preferredTypes": ["Ground"] } ] }, "sawsbuck": { - "level": 87, + "level": 86, "sets": [ { "role": "Setup Sweeper", "movepool": ["hornleech", "jumpkick", "return", "substitute", "swordsdance"], + "abilities": ["Sap Sipper"], "preferredTypes": ["Normal"] } ] }, "emolga": { - "level": 88, + "level": 89, "sets": [ { "role": "Bulky Attacker", - "movepool": ["acrobatics", "encore", "knockoff", "nuzzle", "roost", "thunderbolt", "toxic", "uturn"] + "movepool": ["acrobatics", "encore", "knockoff", "nuzzle", "roost", "thunderbolt", "toxic", "uturn"], + "abilities": ["Motor Drive"] } ] }, @@ -4280,20 +4957,23 @@ "sets": [ { "role": "Bulky Attacker", - "movepool": ["drillrun", "ironhead", "knockoff", "megahorn", "pursuit", "swordsdance"] + "movepool": ["drillrun", "ironhead", "knockoff", "megahorn", "pursuit", "swordsdance"], + "abilities": ["Overcoat", "Swarm"] } ] }, "amoonguss": { - "level": 84, + "level": 83, "sets": [ { "role": "Bulky Attacker", - "movepool": ["clearsmog", "foulplay", "gigadrain", "hiddenpowerfire", "sludgebomb", "spore"] + "movepool": ["clearsmog", "foulplay", "gigadrain", "hiddenpowerground", "sludgebomb", "spore"], + "abilities": ["Regenerator"] }, { "role": "Bulky Support", - "movepool": ["gigadrain", "sludgebomb", "spore", "synthesis"] + "movepool": ["gigadrain", "sludgebomb", "spore", "synthesis"], + "abilities": ["Regenerator"] } ] }, @@ -4302,20 +4982,23 @@ "sets": [ { "role": "Bulky Attacker", - "movepool": ["icebeam", "recover", "scald", "shadowball", "taunt"] + "movepool": ["icebeam", "recover", "scald", "shadowball", "taunt"], + "abilities": ["Water Absorb"] }, { "role": "Bulky Support", - "movepool": ["hex", "recover", "scald", "toxic", "willowisp"] + "movepool": ["hex", "recover", "scald", "toxic", "willowisp"], + "abilities": ["Water Absorb"] } ] }, "alomomola": { - "level": 84, + "level": 85, "sets": [ { "role": "Bulky Support", - "movepool": ["knockoff", "protect", "scald", "toxic", "wish"] + "movepool": ["knockoff", "protect", "scald", "toxic", "wish"], + "abilities": ["Regenerator"] } ] }, @@ -4323,31 +5006,35 @@ "level": 80, "sets": [ { - "role": "Fast Attacker", - "movepool": ["bugbuzz", "gigadrain", "hiddenpowerice", "stickyweb", "thunder", "voltswitch"], + "role": "Wallbreaker", + "movepool": ["bugbuzz", "gigadrain", "stickyweb", "thunder", "voltswitch"], + "abilities": ["Compound Eyes"], "preferredTypes": ["Bug"] } ] }, "ferrothorn": { - "level": 77, + "level": 72, "sets": [ { "role": "Bulky Attacker", - "movepool": ["gyroball", "leechseed", "powerwhip", "spikes", "stealthrock"] + "movepool": ["gyroball", "leechseed", "powerwhip", "spikes", "stealthrock"], + "abilities": ["Iron Barbs"] }, { "role": "Bulky Support", - "movepool": ["knockoff", "powerwhip", "spikes", "stealthrock", "thunderwave", "toxic"] + "movepool": ["knockoff", "powerwhip", "spikes", "stealthrock", "thunderwave", "toxic"], + "abilities": ["Iron Barbs"] } ] }, "klinklang": { - "level": 86, + "level": 87, "sets": [ { "role": "Setup Sweeper", - "movepool": ["geargrind", "return", "shiftgear", "substitute", "wildcharge"] + "movepool": ["geargrind", "return", "shiftgear", "substitute", "wildcharge"], + "abilities": ["Clear Body"] } ] }, @@ -4356,7 +5043,8 @@ "sets": [ { "role": "AV Pivot", - "movepool": ["acidspray", "flamethrower", "gigadrain", "hiddenpowerice", "knockoff", "superpower", "thunderbolt", "uturn"] + "movepool": ["discharge", "flamethrower", "gigadrain", "hiddenpowerice", "knockoff", "superpower", "uturn"], + "abilities": ["Levitate"] } ] }, @@ -4365,7 +5053,9 @@ "sets": [ { "role": "Wallbreaker", - "movepool": ["hiddenpowerfighting", "nastyplot", "psychic", "psyshock", "signalbeam", "thunderbolt", "trick", "trickroom"] + "movepool": ["hiddenpowerfighting", "psychic", "psyshock", "recover", "signalbeam", "thunderbolt", "trick", "trickroom"], + "abilities": ["Analytic"], + "preferredTypes": ["Bug"] } ] }, @@ -4374,30 +5064,34 @@ "sets": [ { "role": "Fast Attacker", - "movepool": ["energyball", "fireblast", "shadowball", "trick"] + "movepool": ["energyball", "fireblast", "shadowball", "trick"], + "abilities": ["Flash Fire"] }, { "role": "Bulky Setup", - "movepool": ["calmmind", "fireblast", "shadowball", "substitute"] + "movepool": ["calmmind", "fireblast", "shadowball", "substitute"], + "abilities": ["Flame Body", "Flash Fire"] } ] }, "haxorus": { - "level": 78, + "level": 77, "sets": [ { "role": "Setup Sweeper", - "movepool": ["dragondance", "earthquake", "outrage", "poisonjab", "swordsdance", "taunt"], + "movepool": ["dragondance", "earthquake", "outrage", "poisonjab", "taunt"], + "abilities": ["Mold Breaker"], "preferredTypes": ["Ground"] } ] }, "beartic": { - "level": 91, + "level": 94, "sets": [ { "role": "Wallbreaker", "movepool": ["aquajet", "iciclecrash", "stoneedge", "superpower", "swordsdance"], + "abilities": ["Swift Swim"], "preferredTypes": ["Fighting"] } ] @@ -4407,16 +5101,18 @@ "sets": [ { "role": "Bulky Support", - "movepool": ["freezedry", "haze", "hiddenpowerground", "rapidspin", "recover", "toxic"] + "movepool": ["freezedry", "haze", "hiddenpowerground", "rapidspin", "recover", "toxic"], + "abilities": ["Levitate"] } ] }, "accelgor": { - "level": 86, + "level": 89, "sets": [ { "role": "Fast Support", - "movepool": ["bugbuzz", "encore", "energyball", "focusblast", "hiddenpowerrock", "spikes", "yawn"] + "movepool": ["bugbuzz", "encore", "focusblast", "hiddenpowerground", "hiddenpowerrock", "spikes", "uturn"], + "abilities": ["Hydration", "Sticky Hold"] } ] }, @@ -4425,25 +5121,29 @@ "sets": [ { "role": "Bulky Attacker", - "movepool": ["discharge", "earthpower", "rest", "scald", "sleeptalk", "stealthrock", "toxic"] + "movepool": ["discharge", "earthpower", "rest", "scald", "sleeptalk", "stealthrock", "toxic"], + "abilities": ["Static"] }, { "role": "AV Pivot", - "movepool": ["discharge", "earthpower", "foulplay", "scald", "sludgebomb"] + "movepool": ["discharge", "earthpower", "foulplay", "scald", "sludgebomb"], + "abilities": ["Static"] } ] }, "mienshao": { - "level": 82, + "level": 81, "sets": [ { - "role": "Fast Attacker", + "role": "Wallbreaker", "movepool": ["highjumpkick", "knockoff", "poisonjab", "stoneedge", "swordsdance", "uturn"], + "abilities": ["Reckless"], "preferredTypes": ["Dark"] }, { "role": "AV Pivot", - "movepool": ["fakeout", "highjumpkick", "knockoff", "uturn"] + "movepool": ["fakeout", "highjumpkick", "knockoff", "uturn"], + "abilities": ["Regenerator"] } ] }, @@ -4453,20 +5153,23 @@ { "role": "Wallbreaker", "movepool": ["firepunch", "glare", "gunkshot", "outrage", "suckerpunch"], + "abilities": ["Sheer Force"], "preferredTypes": ["Poison"] }, { "role": "Bulky Support", - "movepool": ["dragontail", "earthquake", "glare", "gunkshot", "outrage", "stealthrock", "suckerpunch"] + "movepool": ["dragontail", "earthquake", "glare", "gunkshot", "outrage", "stealthrock", "suckerpunch"], + "abilities": ["Rough Skin"] } ] }, "golurk": { - "level": 85, + "level": 84, "sets": [ { "role": "Wallbreaker", "movepool": ["dynamicpunch", "earthquake", "icepunch", "rockpolish", "stealthrock", "stoneedge"], + "abilities": ["No Guard"], "preferredTypes": ["Fighting"] } ] @@ -4476,7 +5179,8 @@ "sets": [ { "role": "Fast Attacker", - "movepool": ["ironhead", "knockoff", "pursuit", "suckerpunch", "swordsdance"] + "movepool": ["ironhead", "knockoff", "pursuit", "suckerpunch", "swordsdance"], + "abilities": ["Defiant"] } ] }, @@ -4485,51 +5189,59 @@ "sets": [ { "role": "Bulky Attacker", - "movepool": ["earthquake", "headcharge", "stoneedge", "superpower", "swordsdance"] + "movepool": ["earthquake", "headcharge", "stoneedge", "superpower", "swordsdance"], + "abilities": ["Reckless", "Sap Sipper"] } ] }, "braviary": { - "level": 83, + "level": 82, "sets": [ { "role": "Bulky Attacker", - "movepool": ["bravebird", "bulkup", "roost", "superpower"] + "movepool": ["bravebird", "bulkup", "roost", "superpower"], + "abilities": ["Defiant"] }, { "role": "Fast Attacker", - "movepool": ["bravebird", "return", "superpower", "uturn"] + "movepool": ["bravebird", "return", "superpower", "uturn"], + "abilities": ["Defiant"] } ] }, "mandibuzz": { - "level": 83, + "level": 84, "sets": [ { "role": "Bulky Attacker", - "movepool": ["bravebird", "defog", "foulplay", "knockoff", "roost", "taunt", "toxic", "uturn"] + "movepool": ["bravebird", "defog", "foulplay", "knockoff", "roost", "taunt", "toxic", "uturn"], + "abilities": ["Overcoat"] }, { "role": "Bulky Support", - "movepool": ["defog", "foulplay", "roost", "taunt", "toxic", "uturn"] + "movepool": ["defog", "foulplay", "roost", "taunt", "toxic", "uturn"], + "abilities": ["Overcoat"] } ] }, "heatmor": { - "level": 88, + "level": 91, "sets": [ { "role": "Wallbreaker", - "movepool": ["fireblast", "gigadrain", "knockoff", "suckerpunch", "superpower"] + "movepool": ["fireblast", "gigadrain", "knockoff", "suckerpunch", "superpower"], + "abilities": ["Flash Fire"] } ] }, "durant": { - "level": 81, + "level": 79, "sets": [ { - "role": "Fast Attacker", - "movepool": ["honeclaws", "ironhead", "rockslide", "superpower", "xscissor"] + "role": "Setup Sweeper", + "movepool": ["honeclaws", "ironhead", "rockslide", "superpower", "xscissor"], + "abilities": ["Hustle"], + "preferredTypes": ["Fighting"] } ] }, @@ -4538,54 +5250,60 @@ "sets": [ { "role": "Fast Attacker", - "movepool": ["darkpulse", "dracometeor", "earthpower", "fireblast", "flashcannon", "roost", "uturn"] + "movepool": ["darkpulse", "dracometeor", "earthpower", "fireblast", "flashcannon", "roost", "uturn"], + "abilities": ["Levitate"] }, { "role": "Bulky Attacker", - "movepool": ["darkpulse", "dracometeor", "fireblast", "roost", "uturn"] + "movepool": ["darkpulse", "dracometeor", "fireblast", "roost", "uturn"], + "abilities": ["Levitate"] }, { "role": "AV Pivot", "movepool": ["darkpulse", "dracometeor", "flashcannon", "superpower", "uturn"], + "abilities": ["Levitate"], "preferredTypes": ["Fighting"] } ] }, "volcarona": { - "level": 78, + "level": 77, "sets": [ { "role": "Setup Sweeper", - "movepool": ["bugbuzz", "fierydance", "fireblast", "gigadrain", "hiddenpowerrock", "quiverdance", "roost"] + "movepool": ["bugbuzz", "fierydance", "fireblast", "gigadrain", "hiddenpowerrock", "quiverdance", "roost"], + "abilities": ["Flame Body", "Swarm"] } ] }, "cobalion": { - "level": 79, + "level": 78, "sets": [ { "role": "Bulky Attacker", - "movepool": ["closecombat", "ironhead", "stealthrock", "stoneedge", "swordsdance", "voltswitch"], - "preferredTypes": ["Steel"] + "movepool": ["closecombat", "ironhead", "stealthrock", "stoneedge", "swordsdance"], + "abilities": ["Justified"] } ] }, "terrakion": { - "level": 79, + "level": 77, "sets": [ { "role": "Fast Attacker", "movepool": ["closecombat", "earthquake", "quickattack", "stealthrock", "stoneedge", "swordsdance"], + "abilities": ["Justified"], "preferredTypes": ["Ground"] } ] }, "virizion": { - "level": 82, + "level": 81, "sets": [ { "role": "Fast Attacker", - "movepool": ["closecombat", "leafblade", "stoneedge", "swordsdance"] + "movepool": ["closecombat", "leafblade", "stoneedge", "swordsdance"], + "abilities": ["Justified"] } ] }, @@ -4594,11 +5312,13 @@ "sets": [ { "role": "Fast Attacker", - "movepool": ["heatwave", "hurricane", "knockoff", "superpower", "taunt", "uturn"] + "movepool": ["heatwave", "hurricane", "knockoff", "superpower", "taunt", "uturn"], + "abilities": ["Defiant", "Prankster"] }, { "role": "Setup Sweeper", "movepool": ["acrobatics", "bulkup", "knockoff", "superpower", "taunt"], + "abilities": ["Defiant"], "preferredTypes": ["Fighting"] } ] @@ -4608,96 +5328,111 @@ "sets": [ { "role": "Fast Support", - "movepool": ["heatwave", "hurricane", "knockoff", "superpower", "taunt", "uturn"] + "movepool": ["heatwave", "hurricane", "knockoff", "superpower", "taunt", "uturn"], + "abilities": ["Regenerator"] } ] }, "thundurus": { - "level": 80, + "level": 79, "sets": [ { "role": "Setup Sweeper", - "movepool": ["focusblast", "hiddenpowerflying", "hiddenpowerice", "nastyplot", "substitute", "thunderbolt"] + "movepool": ["focusblast", "hiddenpowerflying", "hiddenpowerice", "nastyplot", "substitute", "thunderbolt"], + "abilities": ["Prankster"] }, { "role": "Fast Attacker", - "movepool": ["focusblast", "hiddenpowerflying", "hiddenpowerice", "knockoff", "taunt", "thunderbolt", "thunderwave"] + "movepool": ["hiddenpowerflying", "hiddenpowerice", "knockoff", "superpower", "taunt", "thunderbolt", "thunderwave"], + "abilities": ["Prankster"] } ] }, "thundurustherian": { - "level": 80, + "level": 79, "sets": [ { "role": "Fast Attacker", - "movepool": ["focusblast", "hiddenpowerflying", "hiddenpowerice", "nastyplot", "thunderbolt", "voltswitch"] + "movepool": ["focusblast", "hiddenpowerflying", "hiddenpowerice", "nastyplot", "thunderbolt", "voltswitch"], + "abilities": ["Volt Absorb"] } ] }, "reshiram": { - "level": 75, + "level": 73, "sets": [ { "role": "Bulky Attacker", - "movepool": ["blueflare", "dracometeor", "roost", "toxic"] + "movepool": ["blueflare", "dracometeor", "roost", "toxic"], + "abilities": ["Turboblaze"] } ] }, "zekrom": { - "level": 75, + "level": 74, "sets": [ { "role": "Setup Sweeper", - "movepool": ["boltstrike", "honeclaws", "outrage", "roost", "substitute"] + "movepool": ["boltstrike", "honeclaws", "outrage", "roost", "substitute"], + "abilities": ["Teravolt"] }, { "role": "AV Pivot", - "movepool": ["boltstrike", "dracometeor", "outrage", "voltswitch"] + "movepool": ["boltstrike", "dracometeor", "outrage", "voltswitch"], + "abilities": ["Teravolt"] } ] }, "landorus": { - "level": 76, + "level": 77, "sets": [ { "role": "Wallbreaker", - "movepool": ["earthpower", "focusblast", "knockoff", "psychic", "rockpolish", "rockslide", "sludgewave", "stealthrock"] + "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": 78, + "level": 77, "sets": [ { "role": "Bulky Support", - "movepool": ["earthquake", "knockoff", "stealthrock", "stoneedge", "toxic", "uturn"] + "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": 79, + "level": 78, "sets": [ { "role": "Staller", - "movepool": ["earthpower", "icebeam", "roost", "substitute"] + "movepool": ["earthpower", "icebeam", "roost", "substitute"], + "abilities": ["Pressure"] }, { "role": "Bulky Support", - "movepool": ["dracometeor", "earthpower", "icebeam", "outrage", "roost", "substitute"] + "movepool": ["dracometeor", "earthpower", "icebeam", "outrage", "roost", "substitute"], + "abilities": ["Pressure"] }, { "role": "Bulky Attacker", - "movepool": ["dracometeor", "earthpower", "focusblast", "icebeam", "outrage"] + "movepool": ["dracometeor", "earthpower", "focusblast", "icebeam", "outrage"], + "abilities": ["Pressure"] } ] }, @@ -4706,16 +5441,18 @@ "sets": [ { "role": "Bulky Attacker", - "movepool": ["earthpower", "fusionbolt", "icebeam", "outrage", "roost", "substitute"] + "movepool": ["earthpower", "fusionbolt", "icebeam", "outrage", "roost", "substitute"], + "abilities": ["Teravolt"] } ] }, "kyuremwhite": { - "level": 75, + "level": 74, "sets": [ { "role": "Fast Attacker", - "movepool": ["dracometeor", "earthpower", "fusionflare", "icebeam", "roost"] + "movepool": ["dracometeor", "earthpower", "fusionflare", "icebeam", "roost"], + "abilities": ["Turboblaze"] } ] }, @@ -4723,12 +5460,19 @@ "level": 79, "sets": [ { - "role": "Fast Attacker", - "movepool": ["calmmind", "hiddenpowerelectric", "hiddenpowerflying", "hydropump", "icywind", "scald", "secretsword"] + "role": "Setup Sweeper", + "movepool": ["calmmind", "hiddenpowerelectric", "hiddenpowerflying", "hydropump", "icywind", "scald", "secretsword"], + "abilities": ["Justified"] }, { "role": "Bulky Setup", - "movepool": ["calmmind", "hydropump", "scald", "secretsword", "substitute"] + "movepool": ["calmmind", "scald", "secretsword", "substitute"], + "abilities": ["Justified"] + }, + { + "role": "Fast Attacker", + "movepool": ["focusblast", "hydropump", "scald", "secretsword"], + "abilities": ["Justified"] } ] }, @@ -4737,53 +5481,49 @@ "sets": [ { "role": "Fast Attacker", - "movepool": ["calmmind", "focusblast", "hypervoice", "psyshock", "uturn"] - } - ] - }, - "meloettapirouette": { - "level": 82, - "sets": [ + "movepool": ["calmmind", "focusblast", "hypervoice", "psyshock", "uturn"], + "abilities": ["Serene Grace"] + }, { - "role": "AV Pivot", - "movepool": ["closecombat", "knockoff", "relicsong", "return"] + "role": "Wallbreaker", + "movepool": ["closecombat", "knockoff", "relicsong", "return"], + "abilities": ["Serene Grace"] } ] }, "genesect": { - "level": 75, + "level": 73, "sets": [ { "role": "Setup Sweeper", - "movepool": ["blazekick", "extremespeed", "ironhead", "shiftgear", "thunderbolt", "xscissor"] + "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"] } ] }, - "genesectdouse": { - "level": 75, - "sets": [ - { - "role": "Wallbreaker", - "movepool": ["bugbuzz", "extremespeed", "flamethrower", "icebeam", "ironhead", "technoblast", "thunderbolt", "uturn"], - "preferredTypes": ["Water"] - } - ] - }, "chesnaught": { - "level": 85, + "level": 86, "sets": [ { "role": "Bulky Support", - "movepool": ["drainpunch", "leechseed", "spikes", "synthesis", "woodhammer"] + "movepool": ["bulkup", "drainpunch", "spikes", "synthesis", "toxic", "woodhammer"], + "abilities": ["Bulletproof"] }, { "role": "Staller", - "movepool": ["drainpunch", "leechseed", "spikyshield", "woodhammer"] + "movepool": ["drainpunch", "leechseed", "spikyshield", "woodhammer"], + "abilities": ["Bulletproof"] } ] }, @@ -4792,7 +5532,8 @@ "sets": [ { "role": "Fast Attacker", - "movepool": ["calmmind", "dazzlinggleam", "fireblast", "grassknot", "psyshock", "switcheroo"] + "movepool": ["calmmind", "dazzlinggleam", "fireblast", "grassknot", "psyshock", "switcheroo"], + "abilities": ["Blaze"] } ] }, @@ -4801,21 +5542,25 @@ "sets": [ { "role": "Fast Attacker", - "movepool": ["gunkshot", "hydropump", "icebeam", "spikes", "taunt", "toxicspikes", "uturn"] + "movepool": ["grassknot", "gunkshot", "hydropump", "icebeam", "spikes", "taunt", "toxicspikes", "uturn"], + "abilities": ["Protean"], + "preferredTypes": ["Poison"] } ] }, "diggersby": { - "level": 82, + "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"] } ] @@ -4825,61 +5570,79 @@ "sets": [ { "role": "Bulky Attacker", - "movepool": ["bravebird", "overheat", "roost", "uturn", "willowisp"] + "movepool": ["bravebird", "overheat", "roost", "uturn", "willowisp"], + "abilities": ["Gale Wings"] }, { "role": "Bulky Setup", - "movepool": ["bravebird", "flareblitz", "roost", "swordsdance"] + "movepool": ["bravebird", "flareblitz", "roost", "swordsdance"], + "abilities": ["Gale Wings"] } ] }, "vivillon": { - "level": 86, + "level": 83, "sets": [ { "role": "Bulky Setup", - "movepool": ["energyball", "hurricane", "quiverdance", "sleeppowder", "substitute"] + "movepool": ["energyball", "hurricane", "quiverdance", "sleeppowder"], + "abilities": ["Compound Eyes"] + }, + { + "role": "Bulky Attacker", + "movepool": ["bugbuzz", "hurricane", "quiverdance", "sleeppowder"], + "abilities": ["Compound Eyes"] } ] }, "pyroar": { - "level": 87, + "level": 86, "sets": [ { "role": "Fast Attacker", - "movepool": ["darkpulse", "fireblast", "hypervoice", "solarbeam", "sunnyday", "willowisp"], + "movepool": ["darkpulse", "fireblast", "hypervoice", "solarbeam", "sunnyday", "willowisp", "workup"], + "abilities": ["Unnerve"], "preferredTypes": ["Normal"] } ] }, "floetteeternal": { - "level": 80, + "level": 81, "sets": [ { "role": "Fast Attacker", - "movepool": ["hiddenpowerfire", "hiddenpowerground", "lightofruin", "moonblast", "psychic"] + "movepool": ["hiddenpowerfire", "hiddenpowerground", "lightofruin", "moonblast", "psychic"], + "abilities": ["Flower Veil"] } ] }, "florges": { - "level": 83, + "level": 84, "sets": [ { "role": "Bulky Support", - "movepool": ["aromatherapy", "moonblast", "synthesis", "toxic"] + "movepool": ["aromatherapy", "moonblast", "synthesis", "toxic"], + "abilities": ["Flower Veil"] }, { "role": "Staller", - "movepool": ["moonblast", "protect", "toxic", "wish"] + "movepool": ["moonblast", "protect", "toxic", "wish"], + "abilities": ["Flower Veil"] + }, + { + "role": "Bulky Setup", + "movepool": ["calmmind", "hiddenpowerground", "moonblast", "synthesis"], + "abilities": ["Flower Veil"] } ] }, "gogoat": { - "level": 88, + "level": 90, "sets": [ { - "role": "Bulky Setup", - "movepool": ["bulkup", "earthquake", "hornleech", "milkdrink"] + "role": "Bulky Attacker", + "movepool": ["bulkup", "earthquake", "hornleech", "milkdrink", "toxic"], + "abilities": ["Sap Sipper"] } ] }, @@ -4889,6 +5652,7 @@ { "role": "Wallbreaker", "movepool": ["drainpunch", "gunkshot", "icepunch", "knockoff", "partingshot", "superpower", "swordsdance"], + "abilities": ["Iron Fist", "Scrappy"], "preferredTypes": ["Poison"] } ] @@ -4898,29 +5662,34 @@ "sets": [ { "role": "Bulky Support", - "movepool": ["rest", "return", "suckerpunch", "thunderwave", "toxic", "uturn"] + "movepool": ["darkpulse", "rest", "return", "thunderwave", "toxic", "uturn"], + "abilities": ["Fur Coat"] }, { "role": "Staller", - "movepool": ["cottonguard", "rest", "return", "substitute", "toxic"] + "movepool": ["cottonguard", "rest", "return", "substitute", "toxic"], + "abilities": ["Fur Coat"] } ] }, "meowstic": { - "level": 87, + "level": 86, "sets": [ { "role": "Bulky Support", - "movepool": ["healbell", "lightscreen", "psychic", "reflect", "thunderwave", "toxic", "yawn"] + "movepool": ["healbell", "lightscreen", "psychic", "reflect", "signalbeam", "thunderwave", "toxic", "yawn"], + "abilities": ["Prankster"] } ] }, "meowsticf": { - "level": 88, + "level": 89, "sets": [ { "role": "Fast Attacker", - "movepool": ["calmmind", "energyball", "psychic", "psyshock", "shadowball", "signalbeam", "thunderbolt"] + "movepool": ["calmmind", "darkpulse", "psychic", "psyshock", "signalbeam", "thunderbolt"], + "abilities": ["Competitive"], + "preferredTypes": ["Bug"] } ] }, @@ -4929,38 +5698,34 @@ "sets": [ { "role": "Bulky Setup", - "movepool": ["ironhead", "sacredsword", "shadowclaw", "shadowsneak", "swordsdance"] - }, - { - "role": "Staller", - "movepool": ["ironhead", "sacredsword", "shadowclaw", "shadowsneak", "toxic"] + "movepool": ["ironhead", "sacredsword", "shadowclaw", "shadowsneak", "swordsdance"], + "abilities": ["No Guard"] } ] }, "aegislash": { - "level": 79, + "level": 78, "sets": [ { "role": "Staller", - "movepool": ["ironhead", "kingsshield", "shadowball", "substitute", "toxic"] - } - ] - }, - "aegislashblade": { - "level": 79, - "sets": [ + "movepool": ["ironhead", "kingsshield", "shadowball", "substitute", "toxic"], + "abilities": ["Stance Change"] + }, { "role": "Setup Sweeper", - "movepool": ["ironhead", "kingsshield", "sacredsword", "shadowclaw", "shadowsneak", "swordsdance"] + "movepool": ["ironhead", "kingsshield", "sacredsword", "shadowclaw", "shadowsneak", "swordsdance"], + "abilities": ["Stance Change"], + "preferredTypes": ["Steel"] } ] }, "aromatisse": { - "level": 88, + "level": 90, "sets": [ { "role": "Bulky Support", - "movepool": ["calmmind", "moonblast", "protect", "toxic", "wish"] + "movepool": ["calmmind", "moonblast", "protect", "toxic", "wish"], + "abilities": ["Aroma Veil"] } ] }, @@ -4969,29 +5734,33 @@ "sets": [ { "role": "Setup Sweeper", - "movepool": ["bellydrum", "drainpunch", "playrough", "return"] + "movepool": ["bellydrum", "drainpunch", "playrough", "return"], + "abilities": ["Unburden"] } ] }, "malamar": { - "level": 82, + "level": 81, "sets": [ { "role": "Bulky Attacker", - "movepool": ["knockoff", "rest", "sleeptalk", "superpower"] + "movepool": ["knockoff", "rest", "sleeptalk", "superpower"], + "abilities": ["Contrary"] }, { "role": "Fast Attacker", - "movepool": ["knockoff", "psychocut", "rest", "superpower"] + "movepool": ["knockoff", "psychocut", "rest", "superpower"], + "abilities": ["Contrary"] } ] }, "barbaracle": { - "level": 83, + "level": 82, "sets": [ { "role": "Setup Sweeper", - "movepool": ["earthquake", "lowkick", "razorshell", "shellsmash", "stoneedge"] + "movepool": ["earthquake", "lowkick", "razorshell", "shellsmash", "stoneedge"], + "abilities": ["Tough Claws"] } ] }, @@ -5000,7 +5769,13 @@ "sets": [ { "role": "Bulky Attacker", - "movepool": ["dracometeor", "focusblast", "hiddenpowerfire", "scald", "sludgewave", "toxicspikes"] + "movepool": ["dracometeor", "focusblast", "sludgewave", "toxicspikes"], + "abilities": ["Adaptability"] + }, + { + "role": "Wallbreaker", + "movepool": ["dracometeor", "dragonpulse", "focusblast", "sludgewave"], + "abilities": ["Adaptability"] } ] }, @@ -5009,30 +5784,34 @@ "sets": [ { "role": "Wallbreaker", - "movepool": ["aurasphere", "darkpulse", "icebeam", "scald", "uturn", "waterpulse"] + "movepool": ["aurasphere", "darkpulse", "icebeam", "scald", "uturn", "waterpulse"], + "abilities": ["Mega Launcher"] } ] }, "heliolisk": { - "level": 82, + "level": 83, "sets": [ { "role": "Fast Attacker", - "movepool": ["darkpulse", "glare", "hiddenpowerice", "hypervoice", "surf", "thunderbolt", "voltswitch"], + "movepool": ["darkpulse", "glare", "hypervoice", "surf", "thunderbolt", "voltswitch"], + "abilities": ["Dry Skin"], "preferredTypes": ["Normal"] }, { "role": "Setup Sweeper", - "movepool": ["hypervoice", "raindance", "surf", "thunder"] + "movepool": ["hypervoice", "raindance", "surf", "thunder"], + "abilities": ["Dry Skin"] } ] }, "tyrantrum": { - "level": 82, + "level": 81, "sets": [ { "role": "Fast Attacker", - "movepool": ["dragondance", "earthquake", "headsmash", "outrage", "stealthrock", "superpower"], + "movepool": ["dragondance", "earthquake", "headsmash", "outrage", "superpower"], + "abilities": ["Rock Head"], "preferredTypes": ["Ground"] } ] @@ -5042,11 +5821,15 @@ "sets": [ { "role": "Bulky Attacker", - "movepool": ["ancientpower", "blizzard", "earthpower", "freezedry", "stealthrock"] + "movepool": ["ancientpower", "blizzard", "earthpower", "freezedry", "haze", "stealthrock", "thunderwave"], + "abilities": ["Snow Warning"], + "preferredTypes": ["Ground"] }, { "role": "Bulky Support", - "movepool": ["earthpower", "freezedry", "haze", "hypervoice", "stealthrock", "thunderwave"] + "movepool": ["ancientpower", "earthpower", "freezedry", "haze", "hypervoice", "stealthrock", "thunderwave"], + "abilities": ["Refrigerate"], + "preferredTypes": ["Ground"] } ] }, @@ -5055,60 +5838,73 @@ "sets": [ { "role": "Bulky Attacker", - "movepool": ["calmmind", "hiddenpowerground", "hypervoice", "protect", "psyshock", "wish"] + "movepool": ["calmmind", "hiddenpowerground", "hypervoice", "protect", "psyshock", "wish"], + "abilities": ["Pixilate"] }, { "role": "Bulky Setup", - "movepool": ["calmmind", "hypervoice", "protect", "wish"] + "movepool": ["calmmind", "hypervoice", "protect", "wish"], + "abilities": ["Pixilate"] } ] }, "hawlucha": { - "level": 78, + "level": 77, "sets": [ { "role": "Setup Sweeper", - "movepool": ["acrobatics", "highjumpkick", "skyattack", "substitute", "swordsdance"] + "movepool": ["acrobatics", "highjumpkick", "skyattack", "substitute", "swordsdance"], + "abilities": ["Unburden"] } ] }, "dedenne": { - "level": 88, + "level": 89, "sets": [ + { + "role": "Bulky Support", + "movepool": ["protect", "recycle", "thunderbolt", "toxic"], + "abilities": ["Cheek Pouch"] + }, { "role": "Staller", - "movepool": ["protect", "recycle", "thunderbolt", "toxic"] + "movepool": ["recycle", "substitute", "superfang", "thunderbolt", "toxic", "uturn"], + "abilities": ["Cheek Pouch"] } ] }, "carbink": { - "level": 88, + "level": 90, "sets": [ { "role": "Bulky Support", - "movepool": ["lightscreen", "moonblast", "powergem", "reflect", "stealthrock", "toxic"] + "movepool": ["lightscreen", "moonblast", "powergem", "reflect", "stealthrock", "toxic"], + "abilities": ["Sturdy"] } ] }, "goodra": { - "level": 84, + "level": 85, "sets": [ { - "role": "Bulky Attacker", - "movepool": ["dracometeor", "dragontail", "earthquake", "fireblast", "powerwhip", "sludgebomb", "thunderbolt"] + "role": "AV Pivot", + "movepool": ["dracometeor", "dragontail", "earthquake", "fireblast", "powerwhip", "sludgebomb"], + "abilities": ["Sap Sipper"] } ] }, "klefki": { - "level": 83, + "level": 80, "sets": [ { "role": "Bulky Support", - "movepool": ["dazzlinggleam", "foulplay", "spikes", "thunderwave", "toxic"] + "movepool": ["dazzlinggleam", "foulplay", "spikes", "thunderwave"], + "abilities": ["Prankster"] }, { "role": "Bulky Attacker", - "movepool": ["magnetrise", "playrough", "spikes", "thunderwave"] + "movepool": ["magnetrise", "playrough", "spikes", "thunderwave"], + "abilities": ["Prankster"] } ] }, @@ -5117,11 +5913,13 @@ "sets": [ { "role": "Wallbreaker", - "movepool": ["earthquake", "hornleech", "rockslide", "shadowclaw", "trickroom", "woodhammer"] + "movepool": ["earthquake", "hornleech", "rockslide", "shadowclaw", "trickroom", "woodhammer"], + "abilities": ["Natural Cure"] }, { "role": "Staller", - "movepool": ["leechseed", "protect", "shadowclaw", "substitute"] + "movepool": ["earthquake", "hornleech", "protect", "toxic"], + "abilities": ["Harvest"] } ] }, @@ -5130,7 +5928,8 @@ "sets": [ { "role": "Bulky Support", - "movepool": ["seedbomb", "shadowsneak", "synthesis", "willowisp"] + "movepool": ["seedbomb", "shadowsneak", "synthesis", "willowisp"], + "abilities": ["Frisk"] } ] }, @@ -5139,16 +5938,18 @@ "sets": [ { "role": "Bulky Support", - "movepool": ["seedbomb", "shadowsneak", "synthesis", "willowisp"] + "movepool": ["seedbomb", "shadowsneak", "synthesis", "willowisp"], + "abilities": ["Frisk"] } ] }, "gourgeist": { - "level": 88, + "level": 87, "sets": [ { "role": "Bulky Support", - "movepool": ["seedbomb", "shadowsneak", "synthesis", "willowisp"] + "movepool": ["seedbomb", "shadowsneak", "synthesis", "willowisp"], + "abilities": ["Frisk"] } ] }, @@ -5157,7 +5958,8 @@ "sets": [ { "role": "Bulky Support", - "movepool": ["seedbomb", "shadowsneak", "synthesis", "willowisp"] + "movepool": ["seedbomb", "shadowsneak", "synthesis", "willowisp"], + "abilities": ["Frisk"] } ] }, @@ -5166,16 +5968,18 @@ "sets": [ { "role": "Bulky Support", - "movepool": ["avalanche", "earthquake", "rapidspin", "recover", "roar", "toxic"] + "movepool": ["avalanche", "curse", "earthquake", "rapidspin", "recover"], + "abilities": ["Sturdy"] } ] }, "noivern": { - "level": 83, + "level": 82, "sets": [ { "role": "Fast Attacker", - "movepool": ["boomburst", "dracometeor", "flamethrower", "hurricane", "roost", "switcheroo", "uturn"] + "movepool": ["boomburst", "dracometeor", "flamethrower", "hurricane", "roost", "switcheroo", "uturn"], + "abilities": ["Infiltrator"] } ] }, @@ -5184,7 +5988,8 @@ "sets": [ { "role": "Setup Sweeper", - "movepool": ["focusblast", "geomancy", "hiddenpowerfire", "moonblast", "psyshock", "thunder"] + "movepool": ["focusblast", "geomancy", "moonblast", "psyshock"], + "abilities": ["Fairy Aura"] } ] }, @@ -5193,11 +5998,8 @@ "sets": [ { "role": "Bulky Support", - "movepool": ["foulplay", "knockoff", "oblivionwing", "roost", "suckerpunch", "taunt", "toxic", "uturn"] - }, - { - "role": "Bulky Attacker", - "movepool": ["darkpulse", "focusblast", "knockoff", "oblivionwing", "suckerpunch", "uturn"] + "movepool": ["knockoff", "oblivionwing", "roost", "suckerpunch", "taunt", "toxic", "uturn"], + "abilities": ["Dark Aura"] } ] }, @@ -5206,29 +6008,29 @@ "sets": [ { "role": "Setup Sweeper", - "movepool": ["dragondance", "earthquake", "extremespeed", "glare", "outrage", "substitute"] + "movepool": ["dragondance", "earthquake", "extremespeed", "glare", "outrage", "substitute"], + "abilities": ["Aura Break"] } ] }, "diancie": { - "level": 84, + "level": 82, "sets": [ { "role": "Bulky Support", - "movepool": ["diamondstorm", "earthpower", "healbell", "lightscreen", "moonblast", "reflect", "stealthrock", "toxic"] + "movepool": ["diamondstorm", "earthpower", "healbell", "moonblast", "stealthrock", "toxic"], + "abilities": ["Clear Body"] } ] }, "dianciemega": { - "level": 77, + "level": 75, "sets": [ { "role": "Fast Attacker", - "movepool": ["diamondstorm", "earthpower", "hiddenpowerfire", "moonblast", "protect"] - }, - { - "role": "Setup Sweeper", - "movepool": ["calmmind", "diamondstorm", "earthpower", "hiddenpowerfire", "moonblast"] + "movepool": ["calmmind", "diamondstorm", "earthpower", "moonblast", "protect"], + "abilities": ["Clear Body"], + "preferredTypes": ["Ground"] } ] }, @@ -5237,31 +6039,35 @@ "sets": [ { "role": "Fast Attacker", - "movepool": ["focusblast", "nastyplot", "psyshock", "shadowball", "trick"] + "movepool": ["focusblast", "nastyplot", "psychic", "psyshock", "shadowball", "trick"], + "abilities": ["Magician"] } ] }, "hoopaunbound": { - "level": 80, + "level": 79, "sets": [ { "role": "Wallbreaker", - "movepool": ["drainpunch", "gunkshot", "hyperspacefury", "icepunch", "trick", "zenheadbutt"], + "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": 80, + "level": 79, "sets": [ { "role": "Bulky Attacker", - "movepool": ["earthpower", "fireblast", "sludgebomb", "steameruption", "substitute", "superpower"] + "movepool": ["earthpower", "fireblast", "sludgebomb", "steameruption", "superpower", "toxic"], + "abilities": ["Water Absorb"] } ] } diff --git a/data/mods/gen6/random-teams.ts b/data/random-battles/gen6/teams.ts similarity index 75% rename from data/mods/gen6/random-teams.ts rename to data/random-battles/gen6/teams.ts index f2392f9b7ed6..dce848f40ad9 100644 --- a/data/mods/gen6/random-teams.ts +++ b/data/random-battles/gen6/teams.ts @@ -1,12 +1,11 @@ -import {MoveCounter, TeamData} from '../gen8/random-teams'; -import RandomGen7Teams, {BattleFactorySpecies, ZeroAttackHPIVs} from '../gen7/random-teams'; +import {MoveCounter, TeamData} from '../gen8/teams'; +import RandomGen7Teams, {BattleFactorySpecies, ZeroAttackHPIVs} from '../gen7/teams'; import {PRNG, PRNGSeed} from '../../../sim/prng'; -import {Utils} from '../../../lib'; import {toID} from '../../../sim/dex'; // Moves that restore HP: const RECOVERY_MOVES = [ - 'healorder', 'milkdrink', 'moonlight', 'morningsun', 'recover', 'roost', 'slackoff', 'softboiled', 'synthesis', + 'healorder', 'milkdrink', 'moonlight', 'morningsun', 'recover', 'recycle', 'roost', 'slackoff', 'softboiled', 'synthesis', ]; // Moves that boost Attack: const PHYSICAL_SETUP = [ @@ -29,8 +28,8 @@ const SETUP = [ // Moves that shouldn't be the only STAB moves: const NO_STAB = [ 'aquajet', 'bulletpunch', 'clearsmog', 'dragontail', 'eruption', 'explosion', 'fakeout', 'flamecharge', - 'futuresight', 'iceshard', 'icywind', 'incinerate', 'machpunch', 'nuzzle', 'pluck', 'poweruppunch', 'pursuit', - 'quickattack', 'rapidspin', 'reversal', 'selfdestruct', 'shadowsneak', 'skyattack', 'skydrop', 'snarl', + 'futuresight', 'iceshard', 'icywind', 'incinerate', 'infestation', 'machpunch', 'nuzzle', 'pluck', 'poweruppunch', + 'pursuit', 'quickattack', 'rapidspin', 'reversal', 'selfdestruct', 'shadowsneak', 'skyattack', 'skydrop', 'snarl', 'suckerpunch', 'uturn', 'watershuriken', 'vacuumwave', 'voltswitch', 'waterspout', ]; // Hazard-setting moves @@ -59,11 +58,11 @@ const MOVE_PAIRS = [ /** Pokemon who always want priority STAB, and are fine with it as its only STAB move of that type */ const PRIORITY_POKEMON = [ - 'aegislashblade', 'banette', 'breloom', 'cacturne', 'doublade', 'dusknoir', 'honchkrow', 'scizor', 'scizormega', 'shedinja', + 'aegislash', 'banette', 'breloom', 'cacturne', 'doublade', 'dusknoir', 'honchkrow', 'scizor', 'scizormega', 'shedinja', ]; export class RandomGen6Teams extends RandomGen7Teams { - randomSets: {[species: string]: RandomTeamsTypes.RandomSpeciesData} = require('./random-sets.json'); + randomSets: {[species: string]: RandomTeamsTypes.RandomSpeciesData} = require('./sets.json'); constructor(format: Format | string, prng: PRNG | PRNGSeed | null) { super(format, prng); @@ -74,7 +73,7 @@ export class RandomGen6Teams extends RandomGen7Teams { this.moveEnforcementCheckers = { Bug: (movePool, moves, abilities, types, counter) => ( ['megahorn', 'pinmissile'].some(m => movePool.includes(m)) || - !counter.get('Bug') && abilities.has('Tinted Lens') + !counter.get('Bug') && abilities.includes('Tinted Lens') ), Dark: (movePool, moves, abilities, types, counter) => !counter.get('Dark'), Dragon: (movePool, moves, abilities, types, counter) => !counter.get('Dragon'), @@ -83,7 +82,7 @@ export class RandomGen6Teams extends RandomGen7Teams { Fighting: (movePool, moves, abilities, types, counter) => !counter.get('Fighting'), Fire: (movePool, moves, abilities, types, counter) => !counter.get('Fire'), Flying: (movePool, moves, abilities, types, counter, species) => ( - !counter.get('Flying') && !['aerodactylmega', 'charizardmegay', 'mantine', 'murkrow'].includes(species.id) && + !counter.get('Flying') && !['aerodactyl', 'aerodactylmega', 'mantine', 'murkrow'].includes(species.id) && !movePool.includes('hiddenpowerflying') ), Ghost: (movePool, moves, abilities, types, counter) => !counter.get('Ghost'), @@ -92,34 +91,32 @@ export class RandomGen6Teams extends RandomGen7Teams { ), Ground: (movePool, moves, abilities, types, counter) => !counter.get('Ground'), Ice: (movePool, moves, abilities, types, counter) => ( - !counter.get('Ice') || movePool.includes('blizzard') || - abilities.has('Refrigerate') && (movePool.includes('return') || movePool.includes('hypervoice')) + !counter.get('Ice') || (moves.has('icebeam') && movePool.includes('freezedry')) || + abilities.includes('Refrigerate') && (movePool.includes('return') || movePool.includes('hypervoice')) ), Normal: movePool => movePool.includes('boomburst'), Poison: (movePool, moves, abilities, types, counter) => !counter.get('Poison'), Psychic: (movePool, moves, abilities, types, counter) => ( !counter.get('Psychic') && (types.has('Fighting') || movePool.includes('calmmind')) ), - Rock: (movePool, moves, abilities, types, counter, species) => ( - !counter.get('Rock') && (species.baseStats.atk >= 95 || abilities.has('Rock Head')) - ), - Steel: (movePool, moves, abilities, types, counter, species) => ( - !counter.get('Steel') && species.baseStats.atk >= 100 - ), + Rock: (movePool, moves, abilities, types, counter, species) => (!counter.get('Rock') && species.baseStats.atk >= 80), + Steel: (movePool, moves, abilities, types, counter, species) => (!counter.get('Steel') && species.baseStats.atk >= 100), Water: (movePool, moves, abilities, types, counter) => !counter.get('Water'), }; + this.cachedStatusMoves = this.dex.moves.all() + .filter(move => move.category === 'Status') + .map(move => move.id); } cullMovePool( types: string[], moves: Set, - abilities: Set, + abilities: string[], counter: MoveCounter, movePool: string[], teamDetails: RandomTeamsTypes.TeamDetails, species: Species, isLead: boolean, - isDoubles: boolean, preferredType: string, role: RandomTeamsTypes.Role, ): void { @@ -194,12 +191,15 @@ export class RandomGen6Teams extends RandomGen7Teams { if (movePool.includes('spikes')) this.fastPop(movePool, movePool.indexOf('spikes')); if (moves.size + movePool.length <= this.maxMoveCount) return; } + if (teamDetails.statusCure) { + if (movePool.includes('aromatherapy')) this.fastPop(movePool, movePool.indexOf('aromatherapy')); + if (movePool.includes('healbell')) this.fastPop(movePool, movePool.indexOf('healbell')); + if (moves.size + movePool.length <= this.maxMoveCount) return; + } // Develop additional move lists const badWithSetup = ['defog', 'dragontail', 'haze', 'healbell', 'nuzzle', 'pursuit', 'rapidspin', 'toxic']; - const statusMoves = this.dex.moves.all() - .filter(move => move.category === 'Status') - .map(move => move.id); + const statusMoves = this.cachedStatusMoves; // General incompatibilities const incompatiblePairs = [ @@ -209,7 +209,7 @@ export class RandomGen6Teams extends RandomGen7Teams { [SETUP, HAZARDS], [SETUP, badWithSetup], [PHYSICAL_SETUP, PHYSICAL_SETUP], - [SPEED_SETUP, ['quickattack', 'suckerpunch']], + [SPEED_SETUP, 'quickattack'], ['defog', HAZARDS], [['fakeout', 'uturn'], ['switcheroo', 'trick']], ['substitute', PIVOT_MOVES], @@ -243,7 +243,7 @@ export class RandomGen6Teams extends RandomGen7Teams { // Lunatone ['moonlight', 'rockpolish'], // Smeargle - ['destinybond', 'whirlwind'], + ['nuzzle', 'whirlwind'], // Liepard ['copycat', 'uturn'], // Seviper @@ -259,31 +259,44 @@ export class RandomGen6Teams extends RandomGen7Teams { } const statusInflictingMoves = ['thunderwave', 'toxic', 'willowisp', 'yawn']; - if (!abilities.has('Prankster') && role !== 'Staller') { + if (!abilities.includes('Prankster') && role !== 'Staller') { this.incompatibleMoves(moves, movePool, statusInflictingMoves, statusInflictingMoves); } + if (abilities.includes('Guts')) this.incompatibleMoves(moves, movePool, 'protect', 'swordsdance'); + // Force Protect and U-turn on Beedrill-Mega if (species.id === 'beedrillmega') { this.incompatibleMoves(moves, movePool, 'drillrun', 'knockoff'); } + + // Cull filler moves for otherwise fixed set Stealth Rock users + if (!teamDetails.stealthRock) { + if (species.id === 'registeel' && role === 'Staller') { + if (movePool.includes('thunderwave')) this.fastPop(movePool, movePool.indexOf('thunderwave')); + if (moves.size + movePool.length <= this.maxMoveCount) return; + } + if (species.baseSpecies === 'Wormadam' && role === 'Staller') { + if (movePool.includes('infestation')) this.fastPop(movePool, movePool.indexOf('infestation')); + if (moves.size + movePool.length <= this.maxMoveCount) return; + } + } } // Generate random moveset for a given species, role, preferred type. randomMoveset( types: string[], - abilities: Set, + abilities: string[], teamDetails: RandomTeamsTypes.TeamDetails, species: Species, isLead: boolean, - isDoubles: boolean, movePool: string[], preferredType: string, role: RandomTeamsTypes.Role, ): Set { const moves = new Set(); let counter = this.newQueryMoves(moves, species, preferredType, abilities); - this.cullMovePool(types, moves, abilities, counter, movePool, teamDetails, species, isLead, isDoubles, + this.cullMovePool(types, moves, abilities, counter, movePool, teamDetails, species, isLead, preferredType, role); // If there are only four moves, add all moves and return early @@ -291,7 +304,7 @@ export class RandomGen6Teams extends RandomGen7Teams { // Still need to ensure that multiple Hidden Powers are not added (if maxMoveCount is increased) while (movePool.length) { const moveid = this.sample(movePool); - counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles, + counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, movePool, preferredType, role); } return moves; @@ -307,52 +320,52 @@ export class RandomGen6Teams extends RandomGen7Teams { // 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, + counter = this.addMove(move, moves, types, abilities, teamDetails, species, isLead, movePool, preferredType, role); } // Add other moves you really want to have, e.g. STAB, recovery, setup. // Enforce Facade if Guts is a possible ability - if (movePool.includes('facade') && abilities.has('Guts')) { - counter = this.addMove('facade', moves, types, abilities, teamDetails, species, isLead, isDoubles, + if (movePool.includes('facade') && abilities.includes('Guts')) { + counter = this.addMove('facade', moves, types, abilities, teamDetails, species, isLead, movePool, preferredType, role); } - // Enforce Seismic Toss, Spore, and Sticky Web - for (const moveid of ['seismictoss', 'spore', 'stickyweb']) { + // Enforce Blizzard, Seismic Toss, Spore, and Sticky Web + for (const moveid of ['blizzard', 'seismictoss', 'spore', 'stickyweb']) { if (movePool.includes(moveid)) { - counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles, + counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, movePool, preferredType, role); } } // Enforce Thunder Wave on Prankster users - if (movePool.includes('thunderwave') && abilities.has('Prankster')) { - counter = this.addMove('thunderwave', moves, types, abilities, teamDetails, species, isLead, isDoubles, + if (movePool.includes('thunderwave') && abilities.includes('Prankster')) { + counter = this.addMove('thunderwave', moves, types, abilities, teamDetails, species, isLead, movePool, preferredType, role); } // Enforce Shadow Sneak on Kecleon if (movePool.includes('shadowsneak') && species.id === 'kecleon') { - counter = this.addMove('shadowsneak', moves, types, abilities, teamDetails, species, isLead, isDoubles, + counter = this.addMove('shadowsneak', moves, types, abilities, teamDetails, species, isLead, movePool, preferredType, 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, + counter = this.addMove('rapidspin', moves, types, abilities, teamDetails, species, isLead, movePool, preferredType, role); } if (movePool.includes('defog')) { - counter = this.addMove('defog', moves, types, abilities, teamDetails, species, isLead, isDoubles, + counter = this.addMove('defog', moves, types, abilities, teamDetails, species, isLead, movePool, preferredType, role); } } // Enforce STAB priority - if (['Bulky Attacker', 'Bulky Setup'].includes(role) || this.priorityPokemon.includes(species.id)) { + if (['Bulky Attacker', 'Bulky Setup', 'Wallbreaker'].includes(role) || this.priorityPokemon.includes(species.id)) { const priorityMoves = []; for (const moveid of movePool) { const move = this.dex.moves.get(moveid); @@ -363,7 +376,7 @@ export class RandomGen6Teams extends RandomGen7Teams { } if (priorityMoves.length) { const moveid = this.sample(priorityMoves); - counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles, + counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, movePool, preferredType, role); } } @@ -382,7 +395,7 @@ export class RandomGen6Teams extends RandomGen7Teams { while (runEnforcementChecker(type)) { if (!stabMoves.length) break; const moveid = this.sampleNoReplace(stabMoves); - counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles, + counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, movePool, preferredType, role); } } @@ -399,7 +412,7 @@ export class RandomGen6Teams extends RandomGen7Teams { } if (stabMoves.length) { const moveid = this.sample(stabMoves); - counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles, + counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, movePool, preferredType, role); } } @@ -416,12 +429,12 @@ export class RandomGen6Teams extends RandomGen7Teams { } if (stabMoves.length) { const moveid = this.sample(stabMoves); - counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles, + counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, movePool, preferredType, role); } else { // If they have no regular STAB move, enforce U-turn on Bug types. if (movePool.includes('uturn') && types.includes('Bug')) { - counter = this.addMove('uturn', moves, types, abilities, teamDetails, species, isLead, isDoubles, + counter = this.addMove('uturn', moves, types, abilities, teamDetails, species, isLead, movePool, preferredType, role); } } @@ -432,17 +445,17 @@ export class RandomGen6Teams extends RandomGen7Teams { 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, + counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, movePool, preferredType, role); } } // Enforce Staller moves if (role === 'Staller') { - const enforcedMoves = [...PROTECT_MOVES, 'toxic', 'wish']; + const enforcedMoves = [...PROTECT_MOVES, 'toxic']; for (const move of enforcedMoves) { if (movePool.includes(move)) { - counter = this.addMove(move, moves, types, abilities, teamDetails, species, isLead, isDoubles, + counter = this.addMove(move, moves, types, abilities, teamDetails, species, isLead, movePool, preferredType, role); } } @@ -453,7 +466,7 @@ export class RandomGen6Teams extends RandomGen7Teams { 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, + counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, movePool, preferredType, role); } } @@ -468,7 +481,7 @@ export class RandomGen6Teams extends RandomGen7Teams { } if (attackingMoves.length) { const moveid = this.sample(attackingMoves); - counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles, + counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, movePool, preferredType, role); } } @@ -489,7 +502,7 @@ export class RandomGen6Teams extends RandomGen7Teams { } if (coverageMoves.length) { const moveid = this.sample(coverageMoves); - counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles, + counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, movePool, preferredType, role); } } @@ -498,15 +511,15 @@ export class RandomGen6Teams extends RandomGen7Teams { // Choose remaining moves randomly from movepool and add them to moves list: while (moves.size < this.maxMoveCount && movePool.length) { const moveid = this.sample(movePool); - counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles, + counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, movePool, preferredType, 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, + counter = this.addMove(pair[1], moves, types, abilities, teamDetails, species, isLead, movePool, preferredType, role); } if (moveid === pair[1] && movePool.includes(pair[0])) { - counter = this.addMove(pair[0], moves, types, abilities, teamDetails, species, isLead, isDoubles, + counter = this.addMove(pair[0], moves, types, abilities, teamDetails, species, isLead, movePool, preferredType, role); } } @@ -518,96 +531,31 @@ export class RandomGen6Teams extends RandomGen7Teams { ability: string, types: Set, moves: Set, - abilities: Set, + abilities: string[], counter: MoveCounter, movePool: string[], teamDetails: RandomTeamsTypes.TeamDetails, species: Species, - isDoubles: boolean, preferredType: string, role: RandomTeamsTypes.Role ): boolean { switch (ability) { - case 'Flare Boost': case 'Gluttony': case 'Harvest': case 'Hyper Cutter': case 'Ice Body': case 'Magician': - case 'Moody': case 'Pressure': case 'Sand Veil': case 'Snow Cloak': case 'Steadfast': - return true; - case 'Aerilate': case 'Pixilate': case 'Refrigerate': - return ['doubleedge', 'hypervoice', 'return'].every(m => !moves.has(m)); - case 'Chlorophyll': - // Petal Dance is for Lilligant - return ( - species.baseStats.spe > 100 || moves.has('petaldance') || - (!moves.has('sunnyday') && !teamDetails.sun) - ); - case 'Competitive': - return !counter.get('Special'); - case 'Compound Eyes': case 'No Guard': - return !counter.get('inaccurate'); - case 'Contrary': case 'Skill Link': case 'Strong Jaw': + case 'Chlorophyll': case 'Solar Power': + return !teamDetails.sun; + case 'Hydration': case 'Swift Swim': + return !teamDetails.rain; + case 'Iron Fist': case 'Sheer Force': case 'Technician': return !counter.get(toID(ability)); - case 'Defiant': case 'Justified': case 'Moxie': - return !counter.get('Physical'); - case 'Guts': - return (!moves.has('facade') && !moves.has('sleeptalk')); - case 'Hustle': - return counter.get('Physical') < 2; - case 'Hydration': case 'Rain Dish': case 'Swift Swim': - return ( - species.baseStats.spe > 100 || !moves.has('raindance') && !teamDetails.rain || - !moves.has('raindance') && ['Rock Head', 'Water Absorb'].some(abil => abilities.has(abil)) - ); - case 'Intimidate': - // Slam part is for Tauros - return (moves.has('bodyslam') || species.id === 'staraptor'); - case 'Iron Fist': - return (!counter.get(toID(ability)) || species.id === 'golurk'); - case 'Lightning Rod': - return (types.has('Ground') || ((!!teamDetails.rain || moves.has('raindance')) && species.id === 'seaking')); - case 'Magic Guard': case 'Speed Boost': - return (abilities.has('Tinted Lens') && role === 'Wallbreaker'); - case 'Mold Breaker': - return (species.baseSpecies === 'Basculin' || species.id === 'pangoro' || abilities.has('Sheer Force')); - case 'Oblivious': case 'Prankster': - return !counter.get('Status'); case 'Overgrow': return !counter.get('Grass'); - case 'Synchronize': - return (counter.get('Status') < 2 || !!counter.get('recoil') || !!species.isMega); - case 'Regenerator': - return species.id === 'mienshao' || species.id === 'reuniclus'; - case 'Reckless': case 'Rock Head': - return (!counter.get('recoil') || !!species.isMega); + case 'Prankster': + return !counter.get('Status'); + case 'Rock Head': + return !counter.get('recoil'); case 'Sand Force': case 'Sand Rush': return !teamDetails.sand; - case 'Scrappy': - return !types.has('Normal'); - case 'Serene Grace': - return !counter.get('serenegrace'); - case 'Sheer Force': - return (!counter.get('sheerforce') || moves.has('doubleedge') || abilities.has('Guts') || !!species.isMega); - case 'Simple': - return !counter.get('setup'); - case 'Snow Warning': - // Aurorus - return moves.has('hypervoice'); - case 'Solar Power': - return (!counter.get('Special') || !teamDetails.sun || !!species.isMega); - case 'Sturdy': - return (!!counter.get('recoil') && !counter.get('recovery') || species.id === 'steelix' && !!counter.get('sheerforce')); case 'Swarm': - return (!counter.get('Bug') || !!species.isMega); - case 'Technician': - return (!counter.get('technician') || moves.has('tailslap') || !!species.isMega); - case 'Tinted Lens': - return (['illumise', 'sigilyph', 'yanmega'].some(m => species.id === (m)) && role !== 'Wallbreaker'); - case 'Torrent': - return (!counter.get('Water') || !!species.isMega); - case 'Unaware': - return (role !== 'Bulky Support' && role !== 'Staller'); - case 'Unburden': - return (!!species.isMega || !counter.get('setup') && !moves.has('acrobatics')); - case 'Water Absorb': - return moves.has('raindance') || ['Drizzle', 'Unaware', 'Volt Absorb'].some(abil => abilities.has(abil)); + return !counter.get('Bug'); } return false; @@ -617,96 +565,47 @@ export class RandomGen6Teams extends RandomGen7Teams { getAbility( types: Set, moves: Set, - abilities: Set, + abilities: string[], counter: MoveCounter, movePool: string[], teamDetails: RandomTeamsTypes.TeamDetails, species: Species, - isDoubles: boolean, preferredType: string, role: RandomTeamsTypes.Role, ): string { - if (species.battleOnly && !species.requiredAbility) { - abilities = new Set(Object.values(this.dex.species.get(species.battleOnly as string).abilities)); - } - const abilityData = Array.from(abilities).map(a => this.dex.abilities.get(a)); - Utils.sortBy(abilityData, abil => -abil.rating); - - if (abilityData.length <= 1) return abilityData[0].name; + if (abilities.length <= 1) return abilities[0]; // Hard-code abilities here - if ( - abilities.has('Guts') && - !abilities.has('Quick Feet') && - (moves.has('facade') || (moves.has('sleeptalk') && moves.has('rest'))) - ) return 'Guts'; - - if (species.id === 'starmie') return role === 'Wallbreaker' ? 'Analytic' : 'Natural Cure'; - if (species.id === 'ninetales') return 'Drought'; - if (species.id === 'ninjask' || species.id === 'seviper') return 'Infiltrator'; - if (species.id === 'arcanine') return 'Intimidate'; - if (species.id === 'rampardos' && role === 'Bulky Attacker') return 'Mold Breaker'; - if (species.baseSpecies === 'Altaria') return 'Natural Cure'; - // If Ambipom doesn't qualify for Technician, Skill Link is useless on it - if (species.id === 'ambipom' && !counter.get('technician')) return 'Pickup'; - if (['dusknoir', 'vespiquen', 'wailord'].includes(species.id)) return 'Pressure'; - if (species.id === 'druddigon' && role === 'Bulky Support') return 'Rough Skin'; - if (species.id === 'pangoro' && !counter.get('ironfist')) return 'Scrappy'; - if (species.id === 'stunfisk') return 'Static'; - if (species.id === 'breloom') return 'Technician'; - if (species.id === 'zangoose') return 'Toxic Boost'; - if (species.id === 'porygon2') return 'Trace'; - - if (abilities.has('Harvest') && (role === 'Bulky Support' || role === 'Staller')) return 'Harvest'; - if (abilities.has('Moxie') && (counter.get('Physical') > 3)) return 'Moxie'; - if (abilities.has('Regenerator') && role === 'AV Pivot') return 'Regenerator'; - if (abilities.has('Shed Skin') && moves.has('rest') && !moves.has('sleeptalk')) return 'Shed Skin'; - if (abilities.has('Sniper') && moves.has('focusenergy')) return 'Sniper'; - if (abilities.has('Unburden') && ['acrobatics', 'bellydrum'].some(m => moves.has(m))) return 'Unburden'; - - let abilityAllowed: Ability[] = []; + if (species.id === 'pangoro' && counter.get('ironfist')) return 'Iron Fist'; + if (species.id === 'tornadus' && counter.get('Status')) return 'Prankster'; + if (species.id === 'marowak' && counter.get('recoil')) return 'Rock Head'; + if (species.id === 'kingler' && counter.get('sheerforce')) return 'Sheer Force'; + if (species.id === 'golduck' && teamDetails.rain) return 'Swift Swim'; + if (species.id === 'roserade' && counter.get('technician')) return 'Technician'; + + const abilityAllowed: string[] = []; // Obtain a list of abilities that are allowed (not culled) - for (const ability of abilityData) { - if (ability.rating >= 1 && !this.shouldCullAbility( - ability.name, types, moves, abilities, counter, movePool, teamDetails, species, isDoubles, preferredType, role + for (const ability of abilities) { + if (!this.shouldCullAbility( + ability, types, moves, abilities, counter, movePool, teamDetails, species, preferredType, role )) { abilityAllowed.push(ability); } } - // If all abilities are rejected, re-allow all abilities - if (!abilityAllowed.length) { - for (const ability of abilityData) { - if (ability.rating > 0) abilityAllowed.push(ability); - } - if (!abilityAllowed.length) abilityAllowed = abilityData; - } + // Pick a random allowed ability + if (abilityAllowed.length >= 1) return this.sample(abilityAllowed); - if (abilityAllowed.length === 1) return abilityAllowed[0].name; - // Sort abilities by rating with an element of randomness - // All three abilities can be chosen - if (abilityAllowed[2] && abilityAllowed[0].rating - 0.5 <= abilityAllowed[2].rating) { - if (abilityAllowed[1].rating <= abilityAllowed[2].rating) { - if (this.randomChance(1, 2)) [abilityAllowed[1], abilityAllowed[2]] = [abilityAllowed[2], abilityAllowed[1]]; - } else { - if (this.randomChance(1, 3)) [abilityAllowed[1], abilityAllowed[2]] = [abilityAllowed[2], abilityAllowed[1]]; - } - if (abilityAllowed[0].rating <= abilityAllowed[1].rating) { - if (this.randomChance(2, 3)) [abilityAllowed[0], abilityAllowed[1]] = [abilityAllowed[1], abilityAllowed[0]]; - } else { - if (this.randomChance(1, 2)) [abilityAllowed[0], abilityAllowed[1]] = [abilityAllowed[1], abilityAllowed[0]]; - } - } else { - // Third ability cannot be chosen - if (abilityAllowed[0].rating <= abilityAllowed[1].rating) { - if (this.randomChance(1, 2)) [abilityAllowed[0], abilityAllowed[1]] = [abilityAllowed[1], abilityAllowed[0]]; - } else if (abilityAllowed[0].rating - 0.5 <= abilityAllowed[1].rating) { - if (this.randomChance(1, 3)) [abilityAllowed[0], abilityAllowed[1]] = [abilityAllowed[1], abilityAllowed[0]]; - } + // 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', 'Solar Power', 'Swift Swim'].includes(a) + ); + if (weatherAbilities.length) return this.sample(weatherAbilities); } - // After sorting, choose the first ability - return abilityAllowed[0].name; + // Pick a random ability + return this.sample(abilities); } getPriorityItem( @@ -745,19 +644,19 @@ export class RandomGen6Teams extends RandomGen7Teams { } } if (moves.has('bellydrum')) return 'Sitrus Berry'; + if (moves.has('waterspout')) return 'Choice Scarf'; if (moves.has('geomancy') || moves.has('skyattack')) return 'Power Herb'; if (moves.has('shellsmash')) { return (ability === 'Solid Rock' && !!counter.get('priority')) ? 'Weakness Policy' : 'White Herb'; } if (moves.has('psychoshift')) return 'Flame Orb'; - if ((ability === 'Guts' || moves.has('facade')) && !moves.has('sleeptalk')) { + if ((ability === 'Guts' || moves.has('facade')) && !moves.has('sleeptalk') && species.id !== 'stoutland') { return species.name === 'Conkeldurr' ? 'Flame Orb' : 'Toxic Orb'; } - if (ability === 'Magic Guard' && role !== 'Bulky Support') { - return moves.has('counter') ? 'Focus Sash' : 'Life Orb'; - } + if (ability === 'Magic Guard') return moves.has('counter') ? 'Focus Sash' : 'Life Orb'; + if (species.id === 'rampardos' && role === 'Fast Attacker') return 'Choice Scarf'; if (ability === 'Sheer Force' && counter.get('sheerforce')) return 'Life Orb'; - if (ability === 'Unburden') return 'Sitrus Berry'; + if (ability === 'Unburden') return (species.id === 'hitmonlee') ? 'White Herb' : 'Sitrus Berry'; if (moves.has('acrobatics')) return ''; if (moves.has('lightscreen') && moves.has('reflect')) return 'Light Clay'; if (moves.has('rest') && !moves.has('sleeptalk') && !['Hydration', 'Natural Cure', 'Shed Skin'].includes(ability)) { @@ -817,8 +716,14 @@ export class RandomGen6Teams extends RandomGen7Teams { } if (moves.has('outrage') && counter.get('setup')) return 'Lum Berry'; if ( - (ability === 'Rough Skin') || (species.id !== 'hooh' && - ability === 'Regenerator' && species.baseStats.hp + species.baseStats.def >= 180 && this.randomChance(1, 2)) + (ability === 'Rough Skin') || ( + species.id !== 'hooh' && + ability === 'Regenerator' && 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 (['kingsshield', 'protect', 'spikyshield', 'substitute'].some(m => moves.has(m))) return 'Leftovers'; if ( @@ -829,8 +734,8 @@ export class RandomGen6Teams extends RandomGen7Teams { } if ( (role === 'Fast Support' || moves.has('stickyweb')) && isLead && defensiveStatTotal < 255 && - !counter.get('recovery') && !moves.has('defog') && (!counter.get('recoil') || ability === 'Rock Head') && - ability !== 'Regenerator' + !counter.get('recovery') && (counter.get('hazards') || counter.get('setup')) && + (!counter.get('recoil') || ability === 'Rock Head') ) return 'Focus Sash'; // Default Items @@ -856,19 +761,10 @@ export class RandomGen6Teams extends RandomGen7Teams { randomSet( species: string | Species, teamDetails: RandomTeamsTypes.TeamDetails = {}, - isLead = false, - isDoubles = false + isLead = false ): RandomTeamsTypes.RandomSet { species = this.dex.species.get(species); - let forme = species.name; - - if (typeof species.battleOnly === 'string') { - // Only change the forme. The species has custom moves, and may have different typing and requirements. - forme = species.battleOnly; - } - if (species.cosmeticFormes) { - forme = this.sample([species.name].concat(species.cosmeticFormes)); - } + const forme = this.getForme(species); const sets = this.randomSets[species.id]["sets"]; const possibleSets = []; for (const set of sets) possibleSets.push(set); @@ -885,17 +781,18 @@ export class RandomGen6Teams extends RandomGen7Teams { const ivs = {hp: 31, atk: 31, def: 31, spa: 31, spd: 31, spe: 31}; const types = species.types; - const abilities = new Set(Object.values(species.abilities)); - if (species.unreleasedHidden) abilities.delete(species.abilities.H); + const baseAbilities = set.abilities!; + // Use the mega's ability for moveset generation + const abilities = (species.battleOnly && !species.requiredAbility) ? Object.values(species.abilities) : baseAbilities; // Get moves - const moves = this.randomMoveset(types, abilities, teamDetails, species, isLead, isDoubles, movePool, + const moves = this.randomMoveset(types, abilities, teamDetails, species, isLead, movePool, preferredType, role); const counter = this.newQueryMoves(moves, species, preferredType, abilities); // Get ability - ability = this.getAbility(new Set(types), moves, abilities, counter, movePool, teamDetails, species, - false, preferredType, role); + ability = this.getAbility(new Set(types), moves, baseAbilities, counter, movePool, teamDetails, species, + preferredType, role); // Get items item = this.getPriorityItem(ability, types, moves, counter, teamDetails, species, isLead, preferredType, role); @@ -908,10 +805,13 @@ export class RandomGen6Teams extends RandomGen7Teams { item = 'Black Sludge'; } - const level = this.adjustLevel || this.randomSets[species.id]["level"] || (species.nfe ? 90 : 80); + const level = this.getLevel(species); - // Minimize confusion damage - if (!counter.get('Physical') && !moves.has('copycat') && !moves.has('transform')) { + // Minimize confusion damage, including if Foul Play is its only physical attack + if ( + (!counter.get('Physical') || (counter.get('Physical') <= 1 && (moves.has('foulplay') || moves.has('rapidspin')))) && + !moves.has('copycat') && !moves.has('transform') + ) { evs.atk = 0; ivs.atk = 0; } @@ -938,20 +838,27 @@ export class RandomGen6Teams extends RandomGen7Teams { // Prepare optimal HP const srImmunity = ability === 'Magic Guard'; - let srWeakness = srImmunity ? 0 : this.dex.getEffectiveness('Rock', species); - // Crash damage move users want an odd HP to survive two misses - if (['highjumpkick', 'jumpkick'].some(m => moves.has(m))) srWeakness = 2; + const srWeakness = srImmunity ? 0 : this.dex.getEffectiveness('Rock', species); 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') && item === 'Sitrus Berry') { - // Two Substitutes should activate Sitrus Berry - if (hp % 4 === 0) break; + if (moves.has('substitute') && !['Black Sludge', 'Leftovers'].includes(item)) { + if (item === 'Sitrus Berry') { + // Two Substitutes should activate Sitrus Berry + if (hp % 4 === 0) break; + } else { + // Should be able to use Substitute four times from full HP without fainting + if (hp % 4 > 0) break; + } } else if (moves.has('bellydrum') && item === 'Sitrus Berry') { // Belly Drum should activate Sitrus Berry if (hp % 2 === 0) break; + } else if (['highjumpkick', 'jumpkick'].some(m => moves.has(m))) { + // Crash damage move users want an odd HP to survive two misses + if (hp % 2 > 0) break; } else { // Maximize number of Stealth Rock switch-ins - if (srWeakness <= 0 || ability === 'Regenerator' || ['Black Sludge', 'Leftovers', 'Life Orb'].includes(item)) break; + if (srWeakness <= 0 || ability === 'Regenerator') break; + if (srWeakness === 1 && ['Black Sludge', '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; diff --git a/data/mods/gen7/bss-factory-sets.json b/data/random-battles/gen7/bss-factory-sets.json similarity index 100% rename from data/mods/gen7/bss-factory-sets.json rename to data/random-battles/gen7/bss-factory-sets.json diff --git a/data/mods/gen7/factory-sets.json b/data/random-battles/gen7/factory-sets.json similarity index 100% rename from data/mods/gen7/factory-sets.json rename to data/random-battles/gen7/factory-sets.json diff --git a/data/mods/gen7/random-sets.json b/data/random-battles/gen7/sets.json similarity index 64% rename from data/mods/gen7/random-sets.json rename to data/random-battles/gen7/sets.json index cfd503a85195..03ce79d7b193 100644 --- a/data/mods/gen7/random-sets.json +++ b/data/random-battles/gen7/sets.json @@ -1,51 +1,67 @@ { "venusaur": { - "level": 84, + "level": 83, "sets": [ { "role": "Staller", - "movepool": ["gigadrain", "leechseed", "sleeppowder", "sludgebomb", "substitute"] + "movepool": ["gigadrain", "leechseed", "sleeppowder", "sludgebomb", "substitute"], + "abilities": ["Chlorophyll", "Overgrow"] }, { "role": "Bulky Attacker", - "movepool": ["earthquake", "energyball", "hiddenpowerfire", "knockoff", "sleeppowder", "sludgebomb", "synthesis"] + "movepool": ["earthquake", "energyball", "knockoff", "sleeppowder", "sludgebomb", "synthesis"], + "abilities": ["Chlorophyll", "Overgrow"] } ] }, "venusaurmega": { - "level": 80, + "level": 79, "sets": [ { "role": "Bulky Attacker", - "movepool": ["earthquake", "gigadrain", "hiddenpowerfire", "knockoff", "sleeppowder", "sludgebomb", "synthesis"] + "movepool": ["earthquake", "gigadrain", "knockoff", "sleeppowder", "sludgebomb", "synthesis"], + "abilities": ["Chlorophyll"] } ] }, "charizard": { - "level": 83, + "level": 82, "sets": [ { "role": "Z-Move user", "movepool": ["airslash", "earthquake", "fireblast", "holdhands", "roost"], + "abilities": ["Blaze", "Solar Power"], "preferredTypes": ["Normal"] + }, + { + "role": "Bulky Attacker", + "movepool": ["airslash", "earthquake", "fireblast", "roost", "willowisp"], + "abilities": ["Blaze", "Solar Power"] } ] }, "charizardmegax": { - "level": 77, + "level": 76, "sets": [ { "role": "Setup Sweeper", - "movepool": ["dragonclaw", "dragondance", "earthquake", "flareblitz", "roost"] + "movepool": ["dragonclaw", "dragondance", "earthquake", "flareblitz", "roost"], + "abilities": ["Blaze"] } ] }, "charizardmegay": { - "level": 77, + "level": 76, "sets": [ { "role": "Fast Attacker", - "movepool": ["airslash", "fireblast", "focusblast", "roost", "solarbeam"] + "movepool": ["airslash", "fireblast", "roost", "solarbeam"], + "abilities": ["Blaze"] + }, + { + "role": "Bulky Attacker", + "movepool": ["dragonpulse", "fireblast", "roost", "solarbeam"], + "abilities": ["Blaze"] } ] }, @@ -54,60 +70,74 @@ "sets": [ { "role": "Bulky Support", - "movepool": ["icebeam", "rapidspin", "roar", "scald", "toxic"] + "movepool": ["icebeam", "rapidspin", "roar", "scald", "toxic"], + "abilities": ["Torrent"] }, { "role": "Staller", - "movepool": ["haze", "icebeam", "protect", "rapidspin", "scald", "toxic"] + "movepool": ["haze", "icebeam", "protect", "rapidspin", "scald", "toxic"], + "abilities": ["Torrent"] } ] }, "blastoisemega": { - "level": 83, + "level": 82, "sets": [ { "role": "Bulky Support", - "movepool": ["aurasphere", "darkpulse", "icebeam", "rapidspin", "scald"] + "movepool": ["aurasphere", "darkpulse", "icebeam", "rapidspin", "scald"], + "abilities": ["Rain Dish"] } ] }, "butterfree": { - "level": 88, + "level": 90, "sets": [ { "role": "Setup Sweeper", - "movepool": ["airslash", "bugbuzz", "energyball", "quiverdance", "sleeppowder"] + "movepool": ["airslash", "bugbuzz", "quiverdance", "sleeppowder"], + "abilities": ["Tinted Lens"] + }, + { + "role": "Z-Move user", + "movepool": ["airslash", "bugbuzz", "quiverdance", "sleeppowder"], + "abilities": ["Tinted Lens"], + "preferredTypes": ["Bug"] } ] }, "beedrill": { - "level": 91, + "level": 94, "sets": [ { "role": "Fast Support", - "movepool": ["defog", "knockoff", "poisonjab", "toxicspikes", "uturn"] + "movepool": ["defog", "knockoff", "poisonjab", "toxicspikes", "uturn"], + "abilities": ["Swarm"] } ] }, "beedrillmega": { - "level": 79, + "level": 77, "sets": [ { "role": "Setup Sweeper", - "movepool": ["drillrun", "knockoff", "poisonjab", "swordsdance", "xscissor"] + "movepool": ["drillrun", "knockoff", "poisonjab", "swordsdance", "xscissor"], + "abilities": ["Swarm"] }, { "role": "Fast Attacker", - "movepool": ["drillrun", "knockoff", "poisonjab", "uturn"] + "movepool": ["drillrun", "knockoff", "poisonjab", "uturn"], + "abilities": ["Swarm"] } ] }, "pidgeot": { - "level": 88, + "level": 89, "sets": [ { "role": "Bulky Attacker", - "movepool": ["bravebird", "defog", "heatwave", "return", "roost", "uturn"] + "movepool": ["bravebird", "defog", "heatwave", "return", "roost", "uturn"], + "abilities": ["Big Pecks"] } ] }, @@ -116,7 +146,8 @@ "sets": [ { "role": "Bulky Attacker", - "movepool": ["defog", "heatwave", "hurricane", "roost", "uturn", "workup"] + "movepool": ["defog", "heatwave", "hurricane", "roost", "uturn", "workup"], + "abilities": ["Big Pecks"] } ] }, @@ -125,16 +156,25 @@ "sets": [ { "role": "Wallbreaker", - "movepool": ["facade", "protect", "stompingtantrum", "suckerpunch", "swordsdance", "uturn"] + "movepool": ["crunch", "facade", "protect", "stompingtantrum", "suckerpunch", "swordsdance", "uturn"], + "abilities": ["Guts"], + "preferredTypes": ["Dark"] } ] }, "raticatealola": { - "level": 88, + "level": 89, "sets": [ { "role": "Wallbreaker", - "movepool": ["doubleedge", "knockoff", "pursuit", "return", "suckerpunch", "swordsdance"] + "movepool": ["doubleedge", "knockoff", "pursuit", "return", "suckerpunch", "swordsdance"], + "abilities": ["Hustle"] + }, + { + "role": "Z-Move user", + "movepool": ["doubleedge", "knockoff", "suckerpunch", "swordsdance"], + "abilities": ["Hustle"], + "preferredTypes": ["Normal"] } ] }, @@ -143,12 +183,13 @@ "sets": [ { "role": "Wallbreaker", - "movepool": ["doubleedge", "drillpeck", "drillrun", "pursuit", "return", "uturn"], - "preferredTypes": ["Normal"] + "movepool": ["doubleedge", "drillpeck", "drillrun", "return", "uturn"], + "abilities": ["Sniper"] }, { "role": "Setup Sweeper", - "movepool": ["drillpeck", "drillrun", "focusenergy", "return"] + "movepool": ["drillpeck", "drillrun", "focusenergy", "return"], + "abilities": ["Sniper"] } ] }, @@ -157,8 +198,14 @@ "sets": [ { "role": "Setup Sweeper", - "movepool": ["aquatail", "coil", "earthquake", "gunkshot", "rest", "suckerpunch"], + "movepool": ["aquatail", "coil", "earthquake", "gunkshot", "suckerpunch"], + "abilities": ["Intimidate"], "preferredTypes": ["Ground"] + }, + { + "role": "Bulky Setup", + "movepool": ["coil", "earthquake", "gunkshot", "rest"], + "abilities": ["Shed Skin"] } ] }, @@ -167,7 +214,8 @@ "sets": [ { "role": "Fast Attacker", - "movepool": ["extremespeed", "grassknot", "hiddenpowerice", "knockoff", "surf", "voltswitch", "volttackle"] + "movepool": ["extremespeed", "grassknot", "hiddenpowerice", "knockoff", "surf", "voltswitch", "volttackle"], + "abilities": ["Lightning Rod"] } ] }, @@ -176,40 +224,47 @@ "sets": [ { "role": "Fast Support", - "movepool": ["encore", "hiddenpowerice", "knockoff", "nastyplot", "nuzzle", "thunderbolt", "voltswitch"] + "movepool": ["encore", "hiddenpowerice", "knockoff", "nastyplot", "nuzzle", "thunderbolt", "voltswitch"], + "abilities": ["Lightning Rod"], + "preferredTypes": ["Ice"] }, { "role": "Fast Attacker", - "movepool": ["focusblast", "grassknot", "nastyplot", "surf", "thunderbolt", "voltswitch"] + "movepool": ["focusblast", "grassknot", "nastyplot", "surf", "thunderbolt", "voltswitch"], + "abilities": ["Lightning Rod"] } ] }, "raichualola": { - "level": 87, + "level": 86, "sets": [ { "role": "Fast Attacker", "movepool": ["focusblast", "psyshock", "surf", "thunderbolt", "voltswitch"], + "abilities": ["Surge Surfer"], "preferredTypes": ["Psychic"] }, { "role": "Setup Sweeper", "movepool": ["focusblast", "nastyplot", "psyshock", "surf", "thunderbolt"], + "abilities": ["Surge Surfer"], "preferredTypes": ["Psychic"] }, { "role": "Z-Move user", "movepool": ["focusblast", "nastyplot", "psyshock", "surf", "thunderbolt"], + "abilities": ["Surge Surfer"], "preferredTypes": ["Psychic"] } ] }, "sandslash": { - "level": 89, + "level": 90, "sets": [ { "role": "Bulky Attacker", - "movepool": ["earthquake", "knockoff", "rapidspin", "stealthrock", "stoneedge", "swordsdance", "toxic"] + "movepool": ["earthquake", "knockoff", "rapidspin", "stealthrock", "stoneedge", "swordsdance", "toxic"], + "abilities": ["Sand Rush"] } ] }, @@ -218,68 +273,81 @@ "sets": [ { "role": "Bulky Attacker", - "movepool": ["earthquake", "iciclecrash", "ironhead", "knockoff", "rapidspin", "stealthrock", "swordsdance"] + "movepool": ["earthquake", "iciclecrash", "ironhead", "knockoff", "rapidspin", "stealthrock", "swordsdance"], + "abilities": ["Slush Rush"] } ] }, "nidoqueen": { - "level": 84, + "level": 83, "sets": [ { "role": "Wallbreaker", "movepool": ["earthpower", "fireblast", "icebeam", "sludgewave", "stealthrock", "toxicspikes"], + "abilities": ["Sheer Force"], "preferredTypes": ["Ice"] } ] }, "nidoking": { - "level": 82, + "level": 83, "sets": [ { "role": "Wallbreaker", "movepool": ["earthpower", "fireblast", "icebeam", "sludgewave", "substitute", "superpower"], + "abilities": ["Sheer Force"], "preferredTypes": ["Ice"] } ] }, "clefable": { - "level": 82, + "level": 83, "sets": [ { "role": "Bulky Support", - "movepool": ["aromatherapy", "knockoff", "moonblast", "softboiled", "stealthrock", "thunderwave"] + "movepool": ["aromatherapy", "knockoff", "moonblast", "softboiled", "stealthrock", "thunderwave"], + "abilities": ["Magic Guard", "Unaware"] }, { "role": "Bulky Setup", - "movepool": ["calmmind", "fireblast", "moonblast", "softboiled"] + "movepool": ["calmmind", "fireblast", "moonblast", "softboiled"], + "abilities": ["Magic Guard", "Unaware"] } ] }, "ninetales": { - "level": 85, + "level": 84, "sets": [ { "role": "Setup Sweeper", - "movepool": ["fireblast", "hiddenpowerice", "nastyplot", "solarbeam", "substitute", "willowisp"], + "movepool": ["fireblast", "hiddenpowerrock", "nastyplot", "solarbeam"], + "abilities": ["Drought"] + }, + { + "role": "Bulky Setup", + "movepool": ["fireblast", "nastyplot", "solarbeam", "substitute", "willowisp"], + "abilities": ["Drought"], "preferredTypes": ["Grass"] } ] }, "ninetalesalola": { - "level": 80, + "level": 78, "sets": [ { "role": "Fast Support", - "movepool": ["auroraveil", "blizzard", "freezedry", "hiddenpowerground", "moonblast", "nastyplot"] + "movepool": ["auroraveil", "blizzard", "encore", "freezedry", "hiddenpowerground", "moonblast", "nastyplot"], + "abilities": ["Snow Warning"] } ] }, "wigglytuff": { - "level": 91, + "level": 94, "sets": [ { "role": "Bulky Support", - "movepool": ["dazzlinggleam", "fireblast", "healbell", "lightscreen", "protect", "reflect", "stealthrock", "thunderwave", "wish"] + "movepool": ["dazzlinggleam", "fireblast", "healbell", "knockoff", "protect", "stealthrock", "thunderwave", "wish"], + "abilities": ["Competitive"] } ] }, @@ -288,81 +356,101 @@ "sets": [ { "role": "Bulky Support", - "movepool": ["aromatherapy", "gigadrain", "hiddenpowerfire", "sleeppowder", "sludgebomb", "strengthsap"] + "movepool": ["aromatherapy", "gigadrain", "hiddenpowerground", "sleeppowder", "sludgebomb", "strengthsap"], + "abilities": ["Effect Spore"] } ] }, "parasect": { - "level": 95, + "level": 99, "sets": [ { "role": "Bulky Attacker", "movepool": ["aromatherapy", "knockoff", "leechlife", "seedbomb", "spore", "stunspore", "swordsdance"], + "abilities": ["Dry Skin"], "preferredTypes": ["Bug"] } ] }, "venomoth": { - "level": 83, + "level": 82, "sets": [ { "role": "Bulky Setup", - "movepool": ["bugbuzz", "quiverdance", "sleeppowder", "sludgebomb", "substitute"] + "movepool": ["bugbuzz", "quiverdance", "sleeppowder", "sludgebomb"], + "abilities": ["Tinted Lens"] }, { "role": "Z-Move user", "movepool": ["bugbuzz", "quiverdance", "roost", "sleeppowder", "sludgebomb"], + "abilities": ["Tinted Lens"], "preferredTypes": ["Bug"] } ] }, "dugtrio": { - "level": 82, + "level": 83, "sets": [ { "role": "Fast Support", - "movepool": ["earthquake", "memento", "stealthrock", "stoneedge", "suckerpunch"] + "movepool": ["earthquake", "memento", "stealthrock", "stoneedge", "suckerpunch"], + "abilities": ["Arena Trap"] } ] }, "dugtrioalola": { - "level": 87, + "level": 85, "sets": [ { "role": "Fast Attacker", - "movepool": ["earthquake", "ironhead", "stealthrock", "stoneedge", "suckerpunch", "toxic"] + "movepool": ["earthquake", "ironhead", "stealthrock", "stoneedge", "suckerpunch", "toxic"], + "abilities": ["Sand Force", "Tangling Hair"] } ] }, "persian": { - "level": 91, + "level": 93, "sets": [ { "role": "Fast Attacker", - "movepool": ["aerialace", "doubleedge", "fakeout", "gunkshot", "knockoff", "return", "seedbomb", "taunt", "uturn"], - "preferredTypes": ["Dark"] + "movepool": ["doubleedge", "knockoff", "return", "seedbomb", "uturn"], + "abilities": ["Limber"] + }, + { + "role": "Wallbreaker", + "movepool": ["doubleedge", "fakeout", "knockoff", "return", "uturn"], + "abilities": ["Technician"] }, { "role": "Setup Sweeper", - "movepool": ["hiddenpowerfighting", "hiddenpowerfire", "hypervoice", "nastyplot", "shadowball", "waterpulse"] + "movepool": ["hiddenpowerfighting", "hypervoice", "nastyplot", "shadowball"], + "abilities": ["Technician"] } ] }, "persianalola": { - "level": 86, + "level": 85, "sets": [ { "role": "Bulky Setup", - "movepool": ["darkpulse", "hiddenpowerfighting", "hypnosis", "nastyplot", "powergem", "thunderbolt"] + "movepool": ["darkpulse", "hiddenpowerfighting", "hypnosis", "nastyplot", "powergem", "thunderbolt"], + "abilities": ["Fur Coat"] + }, + { + "role": "Z-Move user", + "movepool": ["darkpulse", "hiddenpowerfighting", "hypnosis", "nastyplot", "powergem", "thunderbolt"], + "abilities": ["Fur Coat"], + "preferredTypes": ["Dark"] } ] }, "golduck": { - "level": 88, + "level": 91, "sets": [ { "role": "Fast Attacker", - "movepool": ["calmmind", "encore", "focusblast", "hydropump", "icebeam", "psyshock", "scald"], + "movepool": ["calmmind", "encore", "focusblast", "hydropump", "icebeam", "scald"], + "abilities": ["Cloud Nine", "Swift Swim"], "preferredTypes": ["Ice"] } ] @@ -372,7 +460,14 @@ "sets": [ { "role": "Fast Attacker", - "movepool": ["closecombat", "earthquake", "gunkshot", "honeclaws", "icepunch", "stoneedge", "throatchop", "uturn"] + "movepool": ["closecombat", "earthquake", "gunkshot", "stoneedge", "throatchop", "uturn"], + "abilities": ["Defiant"] + }, + { + "role": "Setup Sweeper", + "movepool": ["closecombat", "earthquake", "gunkshot", "honeclaws", "stoneedge", "throatchop"], + "abilities": ["Defiant"], + "preferredTypes": ["Rock"] } ] }, @@ -381,43 +476,55 @@ "sets": [ { "role": "Bulky Attacker", - "movepool": ["closecombat", "extremespeed", "flareblitz", "morningsun", "roar", "toxic", "wildcharge", "willowisp"] + "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, + "level": 91, "sets": [ { "role": "Setup Sweeper", - "movepool": ["focusblast", "hydropump", "icepunch", "raindance"] + "movepool": ["focusblast", "icepunch", "raindance", "waterfall"], + "abilities": ["Swift Swim"] }, { "role": "Bulky Attacker", - "movepool": ["circlethrow", "rest", "scald", "sleeptalk"] + "movepool": ["circlethrow", "rest", "scald", "sleeptalk"], + "abilities": ["Water Absorb"] } ] }, "alakazam": { - "level": 82, + "level": 81, "sets": [ { "role": "Fast Attacker", - "movepool": ["counter", "focusblast", "hiddenpowerfire", "psychic", "psyshock", "shadowball"] + "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": 79, + "level": 78, "sets": [ { "role": "Setup Sweeper", "movepool": ["calmmind", "encore", "focusblast", "psychic", "psyshock", "shadowball", "substitute"], + "abilities": ["Magic Guard"], "preferredTypes": ["Fighting"] } ] @@ -428,16 +535,18 @@ { "role": "Bulky Attacker", "movepool": ["bulkup", "bulletpunch", "dynamicpunch", "knockoff", "stoneedge"], + "abilities": ["No Guard"], "preferredTypes": ["Dark"] }, { "role": "AV Pivot", - "movepool": ["bulletpunch", "dynamicpunch", "icepunch", "knockoff", "stoneedge"], - "preferredTypes": ["Dark"] + "movepool": ["bulletpunch", "dynamicpunch", "knockoff", "stoneedge"], + "abilities": ["No Guard"] }, { "role": "Wallbreaker", - "movepool": ["bulkup", "bulletpunch", "closecombat", "facade", "knockoff"], + "movepool": ["bulletpunch", "closecombat", "facade", "knockoff"], + "abilities": ["Guts"], "preferredTypes": ["Dark"] } ] @@ -447,20 +556,28 @@ "sets": [ { "role": "Setup Sweeper", - "movepool": ["poisonjab", "powerwhip", "suckerpunch", "swordsdance"] + "movepool": ["poisonjab", "powerwhip", "suckerpunch", "swordsdance"], + "abilities": ["Chlorophyll"] }, { "role": "Wallbreaker", - "movepool": ["hiddenpowerfire", "knockoff", "powerwhip", "sleeppowder", "sludgebomb", "strengthsap", "suckerpunch"] + "movepool": ["hiddenpowerground", "knockoff", "powerwhip", "sleeppowder", "sludgebomb", "strengthsap", "suckerpunch"], + "abilities": ["Chlorophyll"] + }, + { + "role": "Fast Attacker", + "movepool": ["powerwhip", "sludgebomb", "sunnyday", "weatherball"], + "abilities": ["Chlorophyll"] } ] }, "tentacruel": { - "level": 84, + "level": 83, "sets": [ { "role": "Bulky Support", - "movepool": ["haze", "knockoff", "rapidspin", "scald", "sludgebomb", "toxicspikes"] + "movepool": ["haze", "knockoff", "rapidspin", "scald", "sludgebomb", "toxicspikes"], + "abilities": ["Clear Body", "Liquid Ooze"] } ] }, @@ -469,20 +586,23 @@ "sets": [ { "role": "Bulky Attacker", - "movepool": ["earthquake", "explosion", "stealthrock", "stoneedge", "suckerpunch", "toxic"] + "movepool": ["earthquake", "explosion", "stealthrock", "stoneedge", "suckerpunch", "toxic"], + "abilities": ["Sturdy"] + }, + { + "role": "Bulky Setup", + "movepool": ["earthquake", "explosion", "rockpolish", "stoneedge", "suckerpunch"], + "abilities": ["Sturdy"] } ] }, "golemalola": { - "level": 88, + "level": 90, "sets": [ - { - "role": "Bulky Attacker", - "movepool": ["earthquake", "firepunch", "stealthrock", "stoneedge", "wildcharge"] - }, { "role": "Wallbreaker", "movepool": ["autotomize", "earthquake", "explosion", "return", "stoneedge"], + "abilities": ["Galvanize"], "preferredTypes": ["Ground"] } ] @@ -492,11 +612,13 @@ "sets": [ { "role": "Bulky Attacker", - "movepool": ["flareblitz", "highhorsepower", "morningsun", "wildcharge", "willowisp"] + "movepool": ["flareblitz", "highhorsepower", "morningsun", "wildcharge", "willowisp"], + "abilities": ["Flame Body", "Flash Fire"] }, { "role": "Wallbreaker", - "movepool": ["flareblitz", "highhorsepower", "megahorn", "morningsun", "wildcharge"] + "movepool": ["flareblitz", "highhorsepower", "megahorn", "morningsun", "wildcharge"], + "abilities": ["Flash Fire"] } ] }, @@ -505,89 +627,101 @@ "sets": [ { "role": "Bulky Support", - "movepool": ["fireblast", "icebeam", "psyshock", "scald", "slackoff", "thunderwave", "toxic"] + "movepool": ["fireblast", "icebeam", "psyshock", "scald", "slackoff", "thunderwave", "toxic"], + "abilities": ["Regenerator"] }, { "role": "AV Pivot", - "movepool": ["fireblast", "futuresight", "icebeam", "psyshock", "scald"] + "movepool": ["fireblast", "futuresight", "icebeam", "psyshock", "scald"], + "abilities": ["Regenerator"] } ] }, "slowbromega": { - "level": 85, + "level": 84, "sets": [ { "role": "Bulky Attacker", - "movepool": ["calmmind", "fireblast", "psyshock", "scald", "slackoff"] + "movepool": ["calmmind", "fireblast", "psyshock", "scald", "slackoff"], + "abilities": ["Regenerator"] } ] }, "farfetchd": { - "level": 98, + "level": 99, "sets": [ { "role": "Setup Sweeper", - "movepool": ["bravebird", "knockoff", "leafblade", "return", "swordsdance"] + "movepool": ["bravebird", "knockoff", "leafblade", "return", "swordsdance"], + "abilities": ["Defiant"] } ] }, "dodrio": { - "level": 84, + "level": 83, "sets": [ { "role": "Fast Attacker", "movepool": ["bravebird", "jumpkick", "knockoff", "quickattack", "return", "swordsdance"], + "abilities": ["Early Bird"], "preferredTypes": ["Fighting"] }, { "role": "Z-Move user", "movepool": ["bravebird", "jumpkick", "knockoff", "return", "swordsdance"], + "abilities": ["Early Bird"], "preferredTypes": ["Flying"] } ] }, "dewgong": { - "level": 90, + "level": 93, "sets": [ { "role": "Staller", - "movepool": ["icebeam", "protect", "surf", "toxic"] + "movepool": ["icebeam", "protect", "surf", "toxic"], + "abilities": ["Thick Fat"] }, { "role": "Bulky Support", - "movepool": ["encore", "icebeam", "surf", "toxic"] + "movepool": ["encore", "icebeam", "surf", "toxic"], + "abilities": ["Thick Fat"] } ] }, "muk": { - "level": 87, + "level": 88, "sets": [ { "role": "Bulky Attacker", - "movepool": ["curse", "firepunch", "gunkshot", "haze", "icepunch", "poisonjab", "shadowsneak"], - "preferredTypes": ["Fire"] + "movepool": ["brickbreak", "curse", "gunkshot", "haze", "icepunch", "poisonjab", "shadowsneak"], + "abilities": ["Poison Touch"], + "preferredTypes": ["Fighting"] } ] }, "mukalola": { - "level": 82, + "level": 81, "sets": [ { "role": "Bulky Setup", - "movepool": ["curse", "gunkshot", "knockoff", "recycle"] + "movepool": ["curse", "gunkshot", "knockoff", "recycle"], + "abilities": ["Gluttony"] }, { "role": "AV Pivot", - "movepool": ["firepunch", "gunkshot", "icepunch", "knockoff", "poisonjab", "pursuit", "shadowsneak"] + "movepool": ["firepunch", "gunkshot", "icepunch", "knockoff", "poisonjab", "pursuit", "shadowsneak"], + "abilities": ["Poison Touch"] } ] }, "cloyster": { - "level": 81, + "level": 80, "sets": [ { "role": "Setup Sweeper", - "movepool": ["hydropump", "iciclespear", "rockblast", "shellsmash"] + "movepool": ["hydropump", "iciclespear", "rockblast", "shellsmash"], + "abilities": ["Skill Link"] } ] }, @@ -596,7 +730,8 @@ "sets": [ { "role": "Fast Attacker", - "movepool": ["focusblast", "painsplit", "shadowball", "sludgewave", "substitute", "trick", "willowisp"] + "movepool": ["focusblast", "painsplit", "shadowball", "sludgewave", "substitute", "trick", "willowisp"], + "abilities": ["Cursed Body"] } ] }, @@ -605,24 +740,28 @@ "sets": [ { "role": "Fast Support", - "movepool": ["disable", "perishsong", "protect", "shadowball", "substitute"] + "movepool": ["disable", "perishsong", "protect", "shadowball", "substitute"], + "abilities": ["Cursed Body"] }, { "role": "Fast Attacker", - "movepool": ["destinybond", "disable", "focusblast", "shadowball", "sludgewave", "taunt"] + "movepool": ["destinybond", "disable", "focusblast", "shadowball", "sludgewave", "taunt"], + "abilities": ["Cursed Body"] } ] }, "hypno": { - "level": 92, + "level": 96, "sets": [ { "role": "Bulky Support", - "movepool": ["focusblast", "foulplay", "lightscreen", "protect", "psychic", "reflect", "thunderwave", "toxic", "wish"] + "movepool": ["focusblast", "foulplay", "protect", "psychic", "thunderwave", "toxic", "wish"], + "abilities": ["Insomnia"] }, { "role": "Staller", - "movepool": ["protect", "seismictoss", "toxic", "wish"] + "movepool": ["protect", "seismictoss", "toxic", "wish"], + "abilities": ["Insomnia"] } ] }, @@ -631,7 +770,8 @@ "sets": [ { "role": "Setup Sweeper", - "movepool": ["agility", "knockoff", "liquidation", "rockslide", "superpower", "swordsdance", "xscissor"] + "movepool": ["agility", "knockoff", "liquidation", "rockslide", "superpower", "swordsdance", "xscissor"], + "abilities": ["Sheer Force"] } ] }, @@ -640,34 +780,41 @@ "sets": [ { "role": "Wallbreaker", - "movepool": ["foulplay", "hiddenpowergrass", "hiddenpowerice", "signalbeam", "taunt", "thunderbolt", "voltswitch"] + "movepool": ["foulplay", "hiddenpowerice", "signalbeam", "taunt", "thunderbolt", "voltswitch"], + "abilities": ["Aftermath", "Static"], + "preferredTypes": ["Ice"] }, { "role": "Fast Support", - "movepool": ["hiddenpowerice", "lightscreen", "reflect", "thunderbolt", "thunderwave", "toxic", "voltswitch"] + "movepool": ["hiddenpowerice", "lightscreen", "reflect", "thunderbolt", "thunderwave", "toxic", "voltswitch"], + "abilities": ["Aftermath", "Static"] } ] }, "exeggutor": { - "level": 89, + "level": 90, "sets": [ { "role": "Bulky Support", "movepool": ["gigadrain", "hiddenpowerfire", "leechseed", "psychic", "sleeppowder", "substitute"], + "abilities": ["Harvest"], "preferredTypes": ["Psychic"] } ] }, "exeggutoralola": { - "level": 90, + "level": 91, "sets": [ { "role": "Wallbreaker", - "movepool": ["dracometeor", "flamethrower", "gigadrain", "leafstorm", "trickroom"] + "movepool": ["dracometeor", "flamethrower", "gigadrain", "leafstorm"], + "abilities": ["Frisk"] }, { - "role": "Bulky Attacker", - "movepool": ["dracometeor", "flamethrower", "gigadrain", "leafstorm"] + "role": "Fast Attacker", + "movepool": ["dracometeor", "dragontail", "flamethrower", "knockoff", "moonlight", "sleeppowder", "stunspore", "woodhammer"], + "abilities": ["Harvest"], + "preferredTypes": ["Fire"] } ] }, @@ -677,6 +824,7 @@ { "role": "Wallbreaker", "movepool": ["doubleedge", "earthquake", "knockoff", "stealthrock", "stoneedge", "swordsdance"], + "abilities": ["Battle Armor", "Rock Head"], "preferredTypes": ["Rock"] } ] @@ -686,7 +834,8 @@ "sets": [ { "role": "Wallbreaker", - "movepool": ["earthquake", "flamecharge", "flareblitz", "shadowbone", "stealthrock", "stoneedge", "swordsdance", "willowisp"] + "movepool": ["earthquake", "flamecharge", "flareblitz", "shadowbone", "stealthrock", "stoneedge", "swordsdance", "willowisp"], + "abilities": ["Rock Head"] } ] }, @@ -696,21 +845,24 @@ { "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": 89, + "level": 87, "sets": [ { "role": "Bulky Attacker", - "movepool": ["bulkup", "drainpunch", "icepunch", "machpunch", "rapidspin", "stoneedge", "throatchop"] + "movepool": ["bulkup", "drainpunch", "icepunch", "machpunch", "rapidspin", "stoneedge", "throatchop"], + "abilities": ["Iron Fist"] } ] }, @@ -719,7 +871,8 @@ "sets": [ { "role": "Bulky Support", - "movepool": ["fireblast", "painsplit", "sludgebomb", "toxicspikes", "willowisp"] + "movepool": ["fireblast", "painsplit", "sludgebomb", "toxicspikes", "willowisp"], + "abilities": ["Levitate"] } ] }, @@ -728,7 +881,8 @@ "sets": [ { "role": "Bulky Attacker", - "movepool": ["earthquake", "megahorn", "stealthrock", "stoneedge", "toxic"] + "movepool": ["earthquake", "megahorn", "stealthrock", "stoneedge", "swordsdance", "toxic"], + "abilities": ["Lightning Rod"] } ] }, @@ -737,24 +891,23 @@ "sets": [ { "role": "Staller", - "movepool": ["aromatherapy", "seismictoss", "softboiled", "stealthrock", "toxic"] - }, - { - "role": "Bulky Support", - "movepool": ["protect", "seismictoss", "toxic", "wish"] + "movepool": ["aromatherapy", "seismictoss", "softboiled", "stealthrock", "thunderwave", "toxic", "wish"], + "abilities": ["Natural Cure"] } ] }, "kangaskhan": { - "level": 89, + "level": 87, "sets": [ { "role": "Bulky Support", - "movepool": ["doubleedge", "drainpunch", "earthquake", "fakeout", "return", "suckerpunch"] + "movepool": ["doubleedge", "drainpunch", "earthquake", "fakeout", "return", "suckerpunch"], + "abilities": ["Scrappy"] }, { "role": "AV Pivot", - "movepool": ["drainpunch", "earthquake", "fakeout", "return", "suckerpunch"] + "movepool": ["drainpunch", "earthquake", "fakeout", "return", "suckerpunch"], + "abilities": ["Scrappy"] } ] }, @@ -763,66 +916,87 @@ "sets": [ { "role": "Fast Support", - "movepool": ["bodyslam", "crunch", "fakeout", "seismictoss", "suckerpunch"] + "movepool": ["bodyslam", "crunch", "fakeout", "seismictoss", "suckerpunch"], + "abilities": ["Scrappy"] + }, + { + "role": "Setup Sweeper", + "movepool": ["bodyslam", "crunch", "earthquake", "poweruppunch", "return", "suckerpunch"], + "abilities": ["Scrappy"], + "preferredTypes": ["Ground"] } ] }, "seaking": { - "level": 91, + "level": 94, "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, + "level": 85, "sets": [ { "role": "Wallbreaker", - "movepool": ["hydropump", "icebeam", "psyshock", "recover", "thunderbolt"] + "movepool": ["hydropump", "icebeam", "psyshock", "recover", "thunderbolt"], + "abilities": ["Analytic"] }, { "role": "Bulky Support", - "movepool": ["psyshock", "rapidspin", "recover", "scald", "thunderwave", "toxic"] + "movepool": ["psyshock", "rapidspin", "recover", "scald", "thunderwave", "toxic"], + "abilities": ["Natural Cure"] } ] }, "mrmime": { - "level": 88, + "level": 90, "sets": [ { "role": "Fast Attacker", "movepool": ["dazzlinggleam", "encore", "focusblast", "healingwish", "nastyplot", "psychic", "psyshock", "shadowball"], + "abilities": ["Filter"], "preferredTypes": ["Psychic"] } ] }, "scyther": { - "level": 84, + "level": 83, "sets": [ { "role": "Fast Attacker", - "movepool": ["aerialace", "brickbreak", "knockoff", "pursuit", "uturn"] + "movepool": ["aerialace", "brickbreak", "knockoff", "pursuit", "uturn"], + "abilities": ["Technician"] }, { "role": "Setup Sweeper", - "movepool": ["aerialace", "brickbreak", "bugbite", "knockoff", "roost", "swordsdance"] + "movepool": ["aerialace", "brickbreak", "bugbite", "knockoff", "roost", "swordsdance"], + "abilities": ["Technician"] } ] }, "jynx": { - "level": 87, + "level": 89, "sets": [ { "role": "Fast Attacker", - "movepool": ["focusblast", "icebeam", "lovelykiss", "psychic", "psyshock", "trick"] + "movepool": ["focusblast", "icebeam", "lovelykiss", "psychic", "psyshock", "trick"], + "abilities": ["Dry Skin"] }, { "role": "Setup Sweeper", - "movepool": ["focusblast", "icebeam", "lovelykiss", "nastyplot", "psyshock", "substitute"] + "movepool": ["focusblast", "icebeam", "lovelykiss", "nastyplot", "psyshock"], + "abilities": ["Dry Skin"] } ] }, @@ -832,16 +1006,18 @@ { "role": "Fast Attacker", "movepool": ["closecombat", "earthquake", "knockoff", "stealthrock", "stoneedge", "swordsdance", "xscissor"], + "abilities": ["Mold Breaker", "Moxie"], "preferredTypes": ["Ground"] } ] }, "pinsirmega": { - "level": 76, + "level": 74, "sets": [ { "role": "Bulky Setup", - "movepool": ["closecombat", "earthquake", "quickattack", "return", "swordsdance"] + "movepool": ["closecombat", "earthquake", "quickattack", "return", "swordsdance"], + "abilities": ["Moxie"] } ] }, @@ -851,34 +1027,39 @@ { "role": "Wallbreaker", "movepool": ["bodyslam", "earthquake", "fireblast", "rockslide", "zenheadbutt"], + "abilities": ["Sheer Force"], "preferredTypes": ["Ground"] }, { "role": "Fast Attacker", - "movepool": ["doubleedge", "earthquake", "stoneedge", "zenheadbutt"] + "movepool": ["doubleedge", "earthquake", "stoneedge", "zenheadbutt"], + "abilities": ["Intimidate"] } ] }, "gyarados": { - "level": 75, + "level": 74, "sets": [ { "role": "Setup Sweeper", - "movepool": ["dragondance", "earthquake", "stoneedge", "substitute", "waterfall"] + "movepool": ["dragondance", "earthquake", "stoneedge", "substitute", "waterfall"], + "abilities": ["Intimidate", "Moxie"] }, { "role": "Z-Move user", "movepool": ["bounce", "dragondance", "earthquake", "waterfall"], + "abilities": ["Moxie"], "preferredTypes": ["Flying"] } ] }, "gyaradosmega": { - "level": 76, + "level": 75, "sets": [ { "role": "Setup Sweeper", - "movepool": ["crunch", "dragondance", "earthquake", "substitute", "waterfall"] + "movepool": ["crunch", "dragondance", "earthquake", "substitute", "waterfall"], + "abilities": ["Intimidate"] } ] }, @@ -887,11 +1068,13 @@ "sets": [ { "role": "Bulky Support", - "movepool": ["freezedry", "healbell", "hydropump", "icebeam", "thunderbolt", "toxic"] + "movepool": ["freezedry", "healbell", "hydropump", "icebeam", "toxic"], + "abilities": ["Water Absorb"] }, { "role": "Staller", - "movepool": ["freezedry", "hydropump", "protect", "toxic"] + "movepool": ["freezedry", "hydropump", "protect", "toxic"], + "abilities": ["Water Absorb"] } ] }, @@ -900,7 +1083,8 @@ "sets": [ { "role": "Fast Support", - "movepool": ["transform"] + "movepool": ["transform"], + "abilities": ["Imposter"] } ] }, @@ -909,75 +1093,102 @@ "sets": [ { "role": "Bulky Support", - "movepool": ["healbell", "icebeam", "protect", "scald", "wish"] + "movepool": ["healbell", "icebeam", "protect", "scald", "wish"], + "abilities": ["Water Absorb"] }, { "role": "Staller", - "movepool": ["protect", "scald", "toxic", "wish"] + "movepool": ["protect", "scald", "toxic", "wish"], + "abilities": ["Water Absorb"] } ] }, "jolteon": { - "level": 84, + "level": 82, "sets": [ { "role": "Fast Attacker", - "movepool": ["hiddenpowerice", "shadowball", "signalbeam", "thunderbolt", "voltswitch"] + "movepool": ["hiddenpowerice", "shadowball", "thunderbolt", "voltswitch"], + "abilities": ["Volt Absorb"] + }, + { + "role": "Wallbreaker", + "movepool": ["hiddenpowerice", "signalbeam", "thunderbolt", "voltswitch"], + "abilities": ["Volt Absorb"] } ] }, "flareon": { - "level": 87, + "level": 88, "sets": [ { "role": "Wallbreaker", - "movepool": ["facade", "flamecharge", "flareblitz", "quickattack", "superpower"] + "movepool": ["facade", "flamecharge", "flareblitz", "quickattack", "superpower"], + "abilities": ["Guts"] } ] }, "omastar": { - "level": 85, + "level": 84, "sets": [ { "role": "Setup Sweeper", - "movepool": ["earthpower", "hydropump", "icebeam", "shellsmash"] + "movepool": ["hiddenpowergrass", "hydropump", "icebeam", "shellsmash"], + "abilities": ["Shell Armor", "Swift Swim"] } ] }, "kabutops": { - "level": 88, + "level": 87, "sets": [ { "role": "Fast Support", - "movepool": ["aquajet", "knockoff", "liquidation", "rapidspin", "stoneedge", "swordsdance"] + "movepool": ["aquajet", "knockoff", "liquidation", "rapidspin", "stoneedge"], + "abilities": ["Battle Armor", "Swift Swim"] + }, + { + "role": "Setup Sweeper", + "movepool": ["aquajet", "knockoff", "liquidation", "stoneedge", "swordsdance"], + "abilities": ["Weak Armor"] }, { "role": "Z-Move user", "movepool": ["aquajet", "knockoff", "liquidation", "stoneedge", "swordsdance"], + "abilities": ["Weak Armor"], "preferredTypes": ["Rock"] } ] }, "aerodactyl": { - "level": 85, + "level": 82, "sets": [ { "role": "Bulky Attacker", - "movepool": ["defog", "earthquake", "roost", "stealthrock", "stoneedge", "taunt", "toxic"] + "movepool": ["defog", "earthquake", "roost", "stealthrock", "stoneedge", "taunt", "toxic"], + "abilities": ["Unnerve"] }, { "role": "Fast Support", - "movepool": ["defog", "doubleedge", "earthquake", "pursuit", "roost", "stealthrock", "stoneedge"], + "movepool": ["aerialace", "aquatail", "defog", "earthquake", "pursuit", "roost", "stealthrock", "stoneedge"], + "abilities": ["Unnerve"], "preferredTypes": ["Ground"] + }, + { + "role": "Z-Move user", + "movepool": ["earthquake", "honeclaws", "skyattack", "stoneedge"], + "abilities": ["Unnerve"], + "preferredTypes": ["Flying"] } ] }, "aerodactylmega": { - "level": 80, + "level": 78, "sets": [ { "role": "Fast Attacker", - "movepool": ["aerialace", "aquatail", "earthquake", "firefang", "honeclaws", "roost", "stoneedge"] + "movepool": ["aerialace", "aquatail", "earthquake", "honeclaws", "roost", "stoneedge"], + "abilities": ["Unnerve"], + "preferredTypes": ["Ground"] } ] }, @@ -985,38 +1196,39 @@ "level": 84, "sets": [ { - "role": "Bulky Attacker", - "movepool": ["bodyslam", "crunch", "curse", "earthquake", "rest", "return", "sleeptalk"] - }, - { - "role": "AV Pivot", - "movepool": ["bodyslam", "crunch", "earthquake", "firepunch", "pursuit", "return"] + "role": "Bulky Support", + "movepool": ["bodyslam", "crunch", "curse", "earthquake", "rest", "return", "sleeptalk"], + "abilities": ["Thick Fat"] }, { "role": "Bulky Setup", - "movepool": ["bodyslam", "crunch", "curse", "earthquake", "recycle", "return"] + "movepool": ["bodyslam", "crunch", "curse", "earthquake", "recycle", "return"], + "abilities": ["Gluttony"] } ] }, "articuno": { - "level": 87, + "level": 86, "sets": [ { "role": "Staller", - "movepool": ["freezedry", "roost", "substitute", "toxic"] + "movepool": ["freezedry", "roost", "substitute", "toxic"], + "abilities": ["Pressure"] }, { "role": "Bulky Support", - "movepool": ["freezedry", "hurricane", "roost", "substitute", "toxic"] + "movepool": ["freezedry", "hurricane", "roost", "substitute", "toxic"], + "abilities": ["Pressure"] } ] }, "zapdos": { - "level": 80, + "level": 79, "sets": [ { "role": "Bulky Support", - "movepool": ["defog", "discharge", "heatwave", "hiddenpowerice", "roost", "toxic", "uturn"] + "movepool": ["defog", "discharge", "heatwave", "hiddenpowerice", "roost", "toxic", "uturn"], + "abilities": ["Static"] } ] }, @@ -1025,79 +1237,95 @@ "sets": [ { "role": "Bulky Attacker", - "movepool": ["defog", "fireblast", "hurricane", "roost", "toxic", "uturn", "willowisp"] + "movepool": ["defog", "fireblast", "hurricane", "roost", "toxic", "uturn", "willowisp"], + "abilities": ["Flame Body"] } ] }, "dragonite": { - "level": 74, + "level": 72, "sets": [ { "role": "Z-Move user", "movepool": ["dragondance", "earthquake", "fly", "outrage"], + "abilities": ["Multiscale"], "preferredTypes": ["Flying"] }, { - "role": "Bulky Attacker", - "movepool": ["dragondance", "earthquake", "extremespeed", "firepunch", "outrage"] + "role": "Setup Sweeper", + "movepool": ["dragondance", "earthquake", "ironhead", "outrage", "roost"], + "abilities": ["Multiscale"], + "preferredTypes": ["Ground"] } ] }, "mewtwo": { - "level": 73, + "level": 72, "sets": [ { "role": "Fast Attacker", - "movepool": ["aurasphere", "calmmind", "fireblast", "psystrike", "recover", "shadowball"] + "movepool": ["aurasphere", "calmmind", "fireblast", "psystrike", "recover", "shadowball"], + "abilities": ["Unnerve"] } ] }, "mewtwomegax": { - "level": 71, + "level": 70, "sets": [ { "role": "Setup Sweeper", - "movepool": ["bulkup", "drainpunch", "stoneedge", "taunt", "zenheadbutt"] + "movepool": ["bulkup", "drainpunch", "stoneedge", "taunt", "zenheadbutt"], + "abilities": ["Unnerve"] } ] }, "mewtwomegay": { - "level": 71, + "level": 70, "sets": [ { "role": "Setup Sweeper", - "movepool": ["aurasphere", "calmmind", "fireblast", "psystrike", "recover", "shadowball"] + "movepool": ["aurasphere", "calmmind", "fireblast", "psystrike", "recover", "shadowball"], + "abilities": ["Unnerve"] } ] }, "mew": { - "level": 82, + "level": 80, "sets": [ { "role": "Staller", - "movepool": ["defog", "knockoff", "psychic", "roost", "stealthrock", "taunt", "uturn", "willowisp"] + "movepool": ["defog", "knockoff", "psychic", "roost", "stealthrock", "taunt", "uturn", "willowisp"], + "abilities": ["Synchronize"] }, { "role": "Z-Move user", - "movepool": ["aurasphere", "earthpower", "fireblast", "nastyplot", "psychic", "roost"] + "movepool": ["aurasphere", "earthpower", "fireblast", "nastyplot", "psychic", "roost"], + "abilities": ["Synchronize"] + }, + { + "role": "Fast Attacker", + "movepool": ["earthquake", "leechlife", "swordsdance", "zenheadbutt"], + "abilities": ["Synchronize"] } ] }, "meganium": { - "level": 89, + "level": 91, "sets": [ { - "role": "Bulky Support", - "movepool": ["aromatherapy", "dragontail", "gigadrain", "leechseed", "lightscreen", "reflect", "synthesis", "toxic"] + "role": "Staller", + "movepool": ["aromatherapy", "dragontail", "earthquake", "energyball", "leechseed", "synthesis", "toxic"], + "abilities": ["Overgrow"] } ] }, "typhlosion": { - "level": 86, + "level": 85, "sets": [ { "role": "Fast Attacker", - "movepool": ["eruption", "fireblast", "focusblast", "hiddenpowergrass"] + "movepool": ["eruption", "fireblast", "focusblast", "hiddenpowergrass", "hiddenpowerrock"], + "abilities": ["Flash Fire"] } ] }, @@ -1107,56 +1335,54 @@ { "role": "Setup Sweeper", "movepool": ["crunch", "dragondance", "earthquake", "icepunch", "liquidation"], + "abilities": ["Sheer Force"], "preferredTypes": ["Ice"] - }, - { - "role": "Bulky Setup", - "movepool": ["aquajet", "crunch", "icepunch", "liquidation", "swordsdance"] } ] }, "furret": { - "level": 93, + "level": 94, "sets": [ { "role": "Wallbreaker", "movepool": ["aquatail", "doubleedge", "firepunch", "knockoff", "trick", "uturn"], + "abilities": ["Frisk"], "preferredTypes": ["Dark"] }, { "role": "Bulky Setup", - "movepool": ["coil", "irontail", "knockoff", "return"] + "movepool": ["coil", "irontail", "knockoff", "return"], + "abilities": ["Frisk"] } ] }, "noctowl": { - "level": 92, + "level": 94, "sets": [ { "role": "Bulky Support", - "movepool": ["defog", "heatwave", "hurricane", "hypervoice", "roost", "whirlwind"] + "movepool": ["defog", "hurricane", "hypervoice", "roost", "toxic"], + "abilities": ["Tinted Lens"] } ] }, "ledian": { "level": 100, "sets": [ - { - "role": "Bulky Support", - "movepool": ["knockoff", "lightscreen", "reflect", "roost", "toxic", "uturn"] - }, { "role": "Staller", - "movepool": ["defog", "encore", "knockoff", "roost", "toxic", "uturn"] + "movepool": ["airslash", "defog", "encore", "focusblast", "knockoff", "roost", "toxic"], + "abilities": ["Early Bird"] } ] }, "ariados": { - "level": 89, + "level": 91, "sets": [ { "role": "Bulky Support", - "movepool": ["megahorn", "poisonjab", "stickyweb", "suckerpunch", "toxicspikes"] + "movepool": ["megahorn", "poisonjab", "stickyweb", "suckerpunch", "toxicspikes"], + "abilities": ["Insomnia", "Swarm"] } ] }, @@ -1165,7 +1391,8 @@ "sets": [ { "role": "Bulky Attacker", - "movepool": ["bravebird", "defog", "roost", "superfang", "taunt", "toxic", "uturn"] + "movepool": ["bravebird", "defog", "roost", "superfang", "taunt", "toxic", "uturn"], + "abilities": ["Infiltrator"] } ] }, @@ -1174,7 +1401,8 @@ "sets": [ { "role": "Bulky Attacker", - "movepool": ["healbell", "icebeam", "scald", "thunderbolt", "toxic", "voltswitch"] + "movepool": ["healbell", "icebeam", "scald", "thunderbolt", "toxic", "voltswitch"], + "abilities": ["Volt Absorb"] } ] }, @@ -1183,11 +1411,13 @@ "sets": [ { "role": "Bulky Setup", - "movepool": ["calmmind", "heatwave", "psychic", "roost"] + "movepool": ["calmmind", "heatwave", "psychic", "roost"], + "abilities": ["Magic Bounce"] }, { "role": "Bulky Support", - "movepool": ["heatwave", "psychic", "roost", "thunderwave", "toxic", "uturn"] + "movepool": ["heatwave", "psychic", "roost", "thunderwave", "toxic", "uturn"], + "abilities": ["Magic Bounce"] } ] }, @@ -1196,7 +1426,8 @@ "sets": [ { "role": "Bulky Attacker", - "movepool": ["focusblast", "healbell", "hiddenpowerice", "thunderbolt", "toxic", "voltswitch"] + "movepool": ["focusblast", "healbell", "hiddenpowerice", "thunderbolt", "toxic", "voltswitch"], + "abilities": ["Static"] } ] }, @@ -1205,53 +1436,70 @@ "sets": [ { "role": "Bulky Attacker", - "movepool": ["agility", "dragonpulse", "focusblast", "healbell", "thunderbolt", "voltswitch"] + "movepool": ["agility", "dragonpulse", "focusblast", "thunderbolt", "voltswitch"], + "abilities": ["Static"] + }, + { + "role": "Bulky Support", + "movepool": ["discharge", "dragonpulse", "focusblast", "healbell", "rest", "sleeptalk", "voltswitch"], + "abilities": ["Static"] } ] }, "bellossom": { - "level": 87, + "level": 88, "sets": [ { - "role": "Bulky Setup", - "movepool": ["gigadrain", "hiddenpowerfire", "moonblast", "quiverdance", "sleeppowder", "strengthsap"] + "role": "Bulky Attacker", + "movepool": ["gigadrain", "moonblast", "quiverdance", "strengthsap"], + "abilities": ["Chlorophyll"] + }, + { + "role": "Bulky Support", + "movepool": ["gigadrain", "hiddenpowerfire", "hiddenpowerrock", "quiverdance", "strengthsap"], + "abilities": ["Chlorophyll"] }, { "role": "Z-Move user", "movepool": ["gigadrain", "quiverdance", "sleeppowder", "strengthsap"], + "abilities": ["Chlorophyll"], "preferredTypes": ["Grass"] } ] }, "azumarill": { - "level": 80, + "level": 81, "sets": [ { "role": "Bulky Attacker", - "movepool": ["aquajet", "bellydrum", "knockoff", "liquidation", "playrough", "superpower"] + "movepool": ["aquajet", "bellydrum", "knockoff", "liquidation", "playrough", "superpower"], + "abilities": ["Huge Power"] } ] }, "sudowoodo": { - "level": 89, + "level": 93, "sets": [ { "role": "Bulky Attacker", "movepool": ["earthquake", "headsmash", "stealthrock", "suckerpunch", "toxic", "woodhammer"], + "abilities": ["Rock Head"], "preferredTypes": ["Grass"] } ] }, "politoed": { - "level": 85, + "level": 87, "sets": [ { "role": "Staller", - "movepool": ["encore", "icebeam", "protect", "scald", "toxic"] + "movepool": ["encore", "icebeam", "protect", "scald", "toxic"], + "abilities": ["Drizzle"] }, { "role": "Bulky Support", - "movepool": ["encore", "icebeam", "rest", "scald", "toxic"] + "movepool": ["encore", "icebeam", "rest", "scald", "toxic"], + "abilities": ["Drizzle"] } ] }, @@ -1260,20 +1508,28 @@ "sets": [ { "role": "Staller", - "movepool": ["acrobatics", "leechseed", "strengthsap", "substitute"] + "movepool": ["acrobatics", "leechseed", "strengthsap", "substitute"], + "abilities": ["Infiltrator"] }, { "role": "Bulky Attacker", - "movepool": ["acrobatics", "encore", "sleeppowder", "strengthsap", "toxic", "uturn"] + "movepool": ["acrobatics", "encore", "sleeppowder", "strengthsap", "toxic", "uturn"], + "abilities": ["Infiltrator"] } ] }, "sunflora": { - "level": 97, + "level": 100, "sets": [ { "role": "Wallbreaker", - "movepool": ["earthpower", "hiddenpowerfire", "hiddenpowerice", "hiddenpowerrock", "leafstorm", "sludgebomb"] + "movepool": ["earthpower", "hiddenpowerfire", "hiddenpowerice", "hiddenpowerrock", "leafstorm", "sludgebomb"], + "abilities": ["Chlorophyll"] + }, + { + "role": "Setup Sweeper", + "movepool": ["earthpower", "hiddenpowerfire", "solarbeam", "sunnyday"], + "abilities": ["Chlorophyll"] } ] }, @@ -1282,7 +1538,8 @@ "sets": [ { "role": "Bulky Support", - "movepool": ["earthquake", "icebeam", "recover", "scald", "toxic"] + "movepool": ["earthquake", "icebeam", "recover", "scald", "toxic"], + "abilities": ["Unaware"] } ] }, @@ -1291,7 +1548,9 @@ "sets": [ { "role": "Fast Attacker", - "movepool": ["calmmind", "dazzlinggleam", "morningsun", "psychic", "psyshock", "shadowball", "trick"] + "movepool": ["calmmind", "dazzlinggleam", "morningsun", "psychic", "psyshock", "shadowball", "trick"], + "abilities": ["Magic Bounce"], + "preferredTypes": ["Fairy"] } ] }, @@ -1300,38 +1559,28 @@ "sets": [ { "role": "Staller", - "movepool": ["foulplay", "protect", "toxic", "wish"] + "movepool": ["foulplay", "protect", "toxic", "wish"], + "abilities": ["Synchronize"] }, { "role": "Bulky Support", - "movepool": ["foulplay", "healbell", "moonlight", "toxic"] + "movepool": ["foulplay", "healbell", "moonlight", "toxic"], + "abilities": ["Synchronize"] } ] }, - "murkrow": { - "level": 92, + "slowking": { + "level": 88, "sets": [ { - "role": "Bulky Attacker", - "movepool": ["bravebird", "defog", "haze", "pursuit", "roost", "thunderwave"] - }, - { - "role": "Z-Move user", - "movepool": ["bravebird", "mirrormove", "protect", "suckerpunch"], - "preferredTypes": ["Flying"] - } - ] - }, - "slowking": { - "level": 88, - "sets": [ - { - "role": "Bulky Support", - "movepool": ["fireblast", "icebeam", "nastyplot", "psyshock", "scald", "slackoff", "thunderwave", "toxic"] + "role": "Bulky Support", + "movepool": ["fireblast", "icebeam", "nastyplot", "psyshock", "scald", "slackoff", "thunderwave", "toxic"], + "abilities": ["Regenerator"] }, { "role": "AV Pivot", - "movepool": ["dragontail", "fireblast", "futuresight", "icebeam", "psyshock", "scald"] + "movepool": ["dragontail", "fireblast", "futuresight", "icebeam", "psyshock", "scald"], + "abilities": ["Regenerator"] } ] }, @@ -1340,26 +1589,33 @@ "sets": [ { "role": "Wallbreaker", - "movepool": ["hiddenpowerpsychic"] + "movepool": ["hiddenpowerpsychic"], + "abilities": ["Levitate"] } ] }, "wobbuffet": { - "level": 85, + "level": 91, "sets": [ { "role": "Bulky Support", - "movepool": ["counter", "destinybond", "encore", "mirrorcoat"] + "movepool": ["counter", "destinybond", "encore", "mirrorcoat"], + "abilities": ["Shadow Tag"] } ] }, "girafarig": { - "level": 92, + "level": 94, "sets": [ { "role": "Setup Sweeper", - "movepool": ["dazzlinggleam", "hypervoice", "nastyplot", "psychic", "psyshock", "substitute", "thunderbolt"], - "preferredTypes": ["Psychic"] + "movepool": ["dazzlinggleam", "nastyplot", "psychic", "psyshock", "substitute", "thunderbolt"], + "abilities": ["Sap Sipper"] + }, + { + "role": "Fast Attacker", + "movepool": ["hypervoice", "nastyplot", "psyshock", "thunderbolt"], + "abilities": ["Sap Sipper"] } ] }, @@ -1368,47 +1624,54 @@ "sets": [ { "role": "Bulky Support", - "movepool": ["gyroball", "rapidspin", "spikes", "stealthrock", "toxic", "voltswitch"] + "movepool": ["gyroball", "rapidspin", "spikes", "stealthrock", "toxic", "voltswitch"], + "abilities": ["Sturdy"] } ] }, "dunsparce": { - "level": 92, + "level": 95, "sets": [ { "role": "Bulky Attacker", - "movepool": ["earthquake", "glare", "headbutt", "roost"] + "movepool": ["earthquake", "glare", "headbutt", "roost"], + "abilities": ["Serene Grace"] }, { "role": "Bulky Setup", - "movepool": ["bodyslam", "coil", "earthquake", "roost"] + "movepool": ["bodyslam", "coil", "earthquake", "roost"], + "abilities": ["Serene Grace"] } ] }, "gligar": { - "level": 83, + "level": 82, "sets": [ { "role": "Staller", - "movepool": ["defog", "earthquake", "knockoff", "roost", "stealthrock", "toxic", "uturn"] + "movepool": ["defog", "earthquake", "knockoff", "roost", "stealthrock", "toxic", "uturn"], + "abilities": ["Immunity"] } ] }, "steelix": { - "level": 84, + "level": 82, "sets": [ { "role": "Wallbreaker", "movepool": ["earthquake", "ironhead", "roar", "rockslide", "stealthrock", "toxic"], + "abilities": ["Sheer Force"], "preferredTypes": ["Steel"] }, { "role": "Staller", - "movepool": ["earthquake", "heavyslam", "protect", "toxic"] + "movepool": ["earthquake", "heavyslam", "protect", "toxic"], + "abilities": ["Sturdy"] }, { "role": "Bulky Support", - "movepool": ["earthquake", "heavyslam", "roar", "stealthrock", "toxic"] + "movepool": ["earthquake", "heavyslam", "roar", "stealthrock", "toxic"], + "abilities": ["Sturdy"] } ] }, @@ -1417,55 +1680,63 @@ "sets": [ { "role": "Bulky Support", - "movepool": ["dragontail", "earthquake", "heavyslam", "stealthrock", "toxic"] + "movepool": ["dragontail", "earthquake", "heavyslam", "stealthrock", "toxic"], + "abilities": ["Sturdy"] } ] }, "granbull": { - "level": 88, + "level": 89, "sets": [ { "role": "Bulky Attacker", - "movepool": ["earthquake", "healbell", "playrough", "thunderwave", "toxic"] + "movepool": ["earthquake", "healbell", "playrough", "thunderwave", "toxic"], + "abilities": ["Intimidate"] } ] }, "qwilfish": { - "level": 88, + "level": 86, "sets": [ { "role": "Fast Support", - "movepool": ["destinybond", "spikes", "taunt", "thunderwave", "toxicspikes", "waterfall"] + "movepool": ["destinybond", "spikes", "taunt", "thunderwave", "toxicspikes", "waterfall"], + "abilities": ["Intimidate"] } ] }, "scizor": { - "level": 81, + "level": 80, "sets": [ { "role": "Setup Sweeper", - "movepool": ["bugbite", "bulletpunch", "knockoff", "roost", "superpower", "swordsdance"] + "movepool": ["bugbite", "bulletpunch", "knockoff", "roost", "superpower", "swordsdance"], + "abilities": ["Technician"] }, { "role": "Bulky Support", - "movepool": ["bulletpunch", "defog", "knockoff", "roost", "superpower", "uturn"] + "movepool": ["bulletpunch", "defog", "knockoff", "roost", "superpower", "uturn"], + "abilities": ["Technician"] }, { "role": "Fast Attacker", - "movepool": ["bulletpunch", "knockoff", "pursuit", "superpower", "uturn"] + "movepool": ["bulletpunch", "knockoff", "pursuit", "superpower", "uturn"], + "abilities": ["Technician"] } ] }, "scizormega": { - "level": 78, + "level": 76, "sets": [ { "role": "Bulky Setup", - "movepool": ["bugbite", "bulletpunch", "knockoff", "roost", "superpower", "swordsdance"] + "movepool": ["bugbite", "bulletpunch", "knockoff", "roost", "superpower", "swordsdance"], + "abilities": ["Light Metal"] }, { "role": "Bulky Support", - "movepool": ["bulletpunch", "defog", "knockoff", "roost", "superpower", "uturn"] + "movepool": ["bulletpunch", "defog", "knockoff", "roost", "superpower", "uturn"], + "abilities": ["Light Metal"] } ] }, @@ -1474,20 +1745,23 @@ "sets": [ { "role": "Bulky Support", - "movepool": ["encore", "knockoff", "stealthrock", "stickyweb", "toxic"] + "movepool": ["encore", "knockoff", "stealthrock", "stickyweb", "toxic"], + "abilities": ["Sturdy"] } ] }, "heracross": { - "level": 84, + "level": 82, "sets": [ { "role": "Wallbreaker", - "movepool": ["closecombat", "facade", "knockoff", "swordsdance"] + "movepool": ["closecombat", "facade", "knockoff", "swordsdance"], + "abilities": ["Guts"] }, { "role": "Fast Attacker", - "movepool": ["closecombat", "knockoff", "megahorn", "stoneedge"] + "movepool": ["closecombat", "knockoff", "megahorn", "stoneedge"], + "abilities": ["Moxie"] } ] }, @@ -1496,7 +1770,8 @@ "sets": [ { "role": "Wallbreaker", - "movepool": ["closecombat", "pinmissile", "rockblast", "substitute", "swordsdance"], + "movepool": ["closecombat", "earthquake", "knockoff", "pinmissile", "rockblast", "substitute", "swordsdance"], + "abilities": ["Moxie"], "preferredTypes": ["Rock"] } ] @@ -1506,38 +1781,44 @@ "sets": [ { "role": "Wallbreaker", - "movepool": ["closecombat", "crunch", "facade", "protect", "swordsdance"] + "movepool": ["closecombat", "crunch", "facade", "protect", "swordsdance"], + "abilities": ["Guts", "Quick Feet"] } ] }, "magcargo": { - "level": 92, + "level": 94, "sets": [ { "role": "Staller", - "movepool": ["ancientpower", "lavaplume", "recover", "stealthrock", "toxic"] + "movepool": ["ancientpower", "lavaplume", "recover", "stealthrock", "toxic"], + "abilities": ["Flame Body"] }, { - "role": "Setup Sweeper", - "movepool": ["ancientpower", "earthpower", "fireblast", "hiddenpowergrass", "shellsmash"] + "role": "Z-Move user", + "movepool": ["ancientpower", "earthpower", "fireblast", "shellsmash"], + "abilities": ["Weak Armor"], + "preferredTypes": ["Fire", "Rock"] } ] }, "corsola": { - "level": 92, + "level": 95, "sets": [ { "role": "Bulky Support", - "movepool": ["powergem", "recover", "scald", "stealthrock", "toxic"] + "movepool": ["powergem", "recover", "scald", "stealthrock", "toxic"], + "abilities": ["Regenerator"] } ] }, "octillery": { - "level": 90, + "level": 95, "sets": [ { "role": "Wallbreaker", - "movepool": ["energyball", "fireblast", "gunkshot", "hydropump", "icebeam", "scald"] + "movepool": ["energyball", "fireblast", "gunkshot", "hydropump", "icebeam", "scald"], + "abilities": ["Sniper"] } ] }, @@ -1546,34 +1827,43 @@ "sets": [ { "role": "Fast Support", - "movepool": ["destinybond", "freezedry", "rapidspin", "spikes"] + "movepool": ["destinybond", "freezedry", "rapidspin", "spikes"], + "abilities": ["Insomnia", "Vital Spirit"] } ] }, "mantine": { - "level": 86, + "level": 88, "sets": [ { "role": "Bulky Support", - "movepool": ["airslash", "defog", "haze", "roost", "scald", "toxic"] + "movepool": ["airslash", "defog", "haze", "roost", "scald", "toxic"], + "abilities": ["Water Absorb"] } ] }, "skarmory": { - "level": 80, + "level": 78, "sets": [ { "role": "Bulky Support", - "movepool": ["bravebird", "roost", "spikes", "stealthrock", "whirlwind"] + "movepool": ["bravebird", "roost", "spikes", "stealthrock", "whirlwind"], + "abilities": ["Sturdy"] + }, + { + "role": "Staller", + "movepool": ["bravebird", "roost", "spikes", "stealthrock", "toxic"], + "abilities": ["Sturdy"] } ] }, "houndoom": { - "level": 88, + "level": 87, "sets": [ { "role": "Fast Attacker", - "movepool": ["darkpulse", "fireblast", "hiddenpowergrass", "nastyplot", "suckerpunch"] + "movepool": ["darkpulse", "fireblast", "nastyplot", "sludgebomb", "suckerpunch"], + "abilities": ["Flash Fire"] } ] }, @@ -1582,7 +1872,8 @@ "sets": [ { "role": "Setup Sweeper", - "movepool": ["darkpulse", "fireblast", "hiddenpowergrass", "nastyplot", "taunt"] + "movepool": ["darkpulse", "fireblast", "nastyplot", "sludgebomb", "taunt"], + "abilities": ["Flash Fire"] } ] }, @@ -1591,7 +1882,8 @@ "sets": [ { "role": "Setup Sweeper", - "movepool": ["dracometeor", "hydropump", "icebeam", "raindance", "waterfall"] + "movepool": ["dracometeor", "hydropump", "icebeam", "raindance", "waterfall"], + "abilities": ["Swift Swim"] } ] }, @@ -1600,12 +1892,8 @@ "sets": [ { "role": "Bulky Support", - "movepool": ["earthquake", "knockoff", "rapidspin", "stealthrock", "stoneedge", "toxic"] - }, - { - "role": "Bulky Attacker", - "movepool": ["earthquake", "gunkshot", "iceshard", "knockoff", "rapidspin", "stoneedge"], - "preferredTypes": ["Dark"] + "movepool": ["earthquake", "knockoff", "rapidspin", "stealthrock", "stoneedge", "toxic"], + "abilities": ["Sturdy"] } ] }, @@ -1614,16 +1902,19 @@ "sets": [ { "role": "Bulky Support", - "movepool": ["discharge", "icebeam", "recover", "toxic", "triattack"] + "movepool": ["discharge", "icebeam", "recover", "toxic", "triattack"], + "abilities": ["Download", "Trace"] } ] }, "stantler": { - "level": 88, + "level": 91, "sets": [ { "role": "Wallbreaker", - "movepool": ["doubleedge", "earthquake", "jumpkick", "megahorn", "suckerpunch"] + "movepool": ["doubleedge", "earthquake", "jumpkick", "megahorn", "suckerpunch", "throatchop", "thunderwave"], + "abilities": ["Intimidate"], + "preferredTypes": ["Ground"] } ] }, @@ -1632,7 +1923,8 @@ "sets": [ { "role": "Fast Support", - "movepool": ["destinybond", "nuzzle", "spore", "stealthrock", "stickyweb", "whirlwind"] + "movepool": ["nuzzle", "spikes", "spore", "stealthrock", "stickyweb", "whirlwind"], + "abilities": ["Own Tempo"] } ] }, @@ -1641,7 +1933,8 @@ "sets": [ { "role": "Bulky Support", - "movepool": ["closecombat", "earthquake", "rapidspin", "stoneedge", "suckerpunch", "toxic"] + "movepool": ["closecombat", "earthquake", "rapidspin", "stoneedge", "suckerpunch", "toxic"], + "abilities": ["Intimidate"] } ] }, @@ -1649,12 +1942,9 @@ "level": 86, "sets": [ { - "role": "Bulky Support", - "movepool": ["bodyslam", "earthquake", "healbell", "milkdrink", "stealthrock", "toxic"] - }, - { - "role": "Bulky Setup", - "movepool": ["bodyslam", "curse", "earthquake", "milkdrink"] + "role": "Bulky Attacker", + "movepool": ["bodyslam", "curse", "earthquake", "healbell", "milkdrink", "stealthrock", "toxic"], + "abilities": ["Sap Sipper", "Thick Fat"] } ] }, @@ -1663,11 +1953,13 @@ "sets": [ { "role": "Staller", - "movepool": ["aromatherapy", "seismictoss", "softboiled", "stealthrock", "toxic"] + "movepool": ["aromatherapy", "seismictoss", "softboiled", "stealthrock", "thunderwave", "toxic"], + "abilities": ["Natural Cure"] }, { "role": "Bulky Support", - "movepool": ["protect", "seismictoss", "toxic", "wish"] + "movepool": ["protect", "seismictoss", "toxic", "wish"], + "abilities": ["Natural Cure"] } ] }, @@ -1676,21 +1968,29 @@ "sets": [ { "role": "Fast Attacker", - "movepool": ["aurasphere", "hiddenpowerice", "thunderbolt", "voltswitch"] + "movepool": ["aurasphere", "hiddenpowerice", "thunderbolt", "voltswitch"], + "abilities": ["Pressure"] }, { - "role": "Setup Sweeper", - "movepool": ["aurasphere", "calmmind", "hiddenpowerice", "substitute", "thunderbolt"] + "role": "Bulky Setup", + "movepool": ["aurasphere", "calmmind", "hiddenpowerice", "substitute", "thunderbolt"], + "abilities": ["Pressure"], + "preferredTypes": ["Ice"] } ] }, "entei": { - "level": 80, + "level": 78, "sets": [ { "role": "Wallbreaker", - "movepool": ["extremespeed", "flareblitz", "sacredfire", "stompingtantrum", "stoneedge"], - "preferredTypes": ["Normal"] + "movepool": ["extremespeed", "flareblitz", "sacredfire", "stompingtantrum"], + "abilities": ["Inner Focus"] + }, + { + "role": "Fast Attacker", + "movepool": ["extremespeed", "flareblitz", "sacredfire", "stoneedge"], + "abilities": ["Inner Focus"] } ] }, @@ -1699,15 +1999,18 @@ "sets": [ { "role": "Bulky Attacker", - "movepool": ["calmmind", "rest", "scald", "sleeptalk"] + "movepool": ["calmmind", "rest", "scald", "sleeptalk"], + "abilities": ["Pressure"] }, { "role": "Bulky Setup", - "movepool": ["calmmind", "hydropump", "icebeam", "rest", "scald", "substitute"] + "movepool": ["calmmind", "icebeam", "rest", "scald", "substitute"], + "abilities": ["Pressure"] }, { "role": "Staller", - "movepool": ["calmmind", "protect", "scald", "substitute"] + "movepool": ["calmmind", "protect", "scald", "substitute"], + "abilities": ["Pressure"] } ] }, @@ -1716,38 +2019,43 @@ "sets": [ { "role": "Bulky Attacker", - "movepool": ["crunch", "earthquake", "fireblast", "icebeam", "pursuit", "stealthrock", "stoneedge"] + "movepool": ["crunch", "earthquake", "fireblast", "icebeam", "pursuit", "stealthrock", "stoneedge"], + "abilities": ["Sand Stream"] }, { "role": "Bulky Setup", - "movepool": ["crunch", "dragondance", "earthquake", "firepunch", "icepunch", "stoneedge"] + "movepool": ["crunch", "dragondance", "earthquake", "firepunch", "icepunch", "stoneedge"], + "abilities": ["Sand Stream"] } ] }, "tyranitarmega": { - "level": 78, + "level": 77, "sets": [ { "role": "Setup Sweeper", - "movepool": ["crunch", "dragondance", "earthquake", "firepunch", "icepunch", "stoneedge"] + "movepool": ["crunch", "dragondance", "earthquake", "firepunch", "icepunch", "stoneedge"], + "abilities": ["Sand Stream"] } ] }, "lugia": { - "level": 73, + "level": 72, "sets": [ { "role": "Staller", - "movepool": ["aeroblast", "earthquake", "roost", "substitute", "toxic", "whirlwind"] + "movepool": ["aeroblast", "earthquake", "roost", "substitute", "toxic", "whirlwind"], + "abilities": ["Multiscale"] } ] }, "hooh": { - "level": 73, + "level": 72, "sets": [ { "role": "Bulky Attacker", - "movepool": ["bravebird", "defog", "earthquake", "roost", "sacredfire", "substitute", "toxic"] + "movepool": ["bravebird", "defog", "earthquake", "roost", "sacredfire", "substitute", "toxic"], + "abilities": ["Regenerator"] } ] }, @@ -1756,16 +2064,19 @@ "sets": [ { "role": "Fast Attacker", - "movepool": ["earthpower", "gigadrain", "hiddenpowerfire", "leafstorm", "nastyplot", "psychic", "uturn"], + "movepool": ["earthpower", "gigadrain", "leafstorm", "nastyplot", "psychic", "uturn"], + "abilities": ["Natural Cure"], "preferredTypes": ["Psychic"] }, { "role": "Bulky Support", - "movepool": ["healbell", "leafstorm", "psychic", "recover", "stealthrock", "thunderwave", "uturn"] + "movepool": ["leafstorm", "psychic", "recover", "stealthrock", "thunderwave", "uturn"], + "abilities": ["Natural Cure"] }, { "role": "Z-Move user", "movepool": ["leafstorm", "nastyplot", "psychic", "recover"], + "abilities": ["Natural Cure"], "preferredTypes": ["Grass"] } ] @@ -1775,24 +2086,28 @@ "sets": [ { "role": "Fast Attacker", - "movepool": ["earthquake", "focusblast", "gigadrain", "hiddenpowerfire", "hiddenpowerice", "leafstorm", "rockslide"] + "movepool": ["earthquake", "focusblast", "gigadrain", "hiddenpowerfire", "hiddenpowerice", "leafstorm", "rockslide"], + "abilities": ["Overgrow"] }, { "role": "Staller", - "movepool": ["gigadrain", "hiddenpowerfire", "hiddenpowerice", "leechseed", "substitute"] + "movepool": ["gigadrain", "hiddenpowerfire", "hiddenpowerice", "leechseed", "substitute"], + "abilities": ["Overgrow"] } ] }, "sceptilemega": { - "level": 83, + "level": 82, "sets": [ { "role": "Fast Attacker", - "movepool": ["dragonpulse", "earthquake", "focusblast", "gigadrain", "hiddenpowerfire", "leafstorm", "substitute"] + "movepool": ["dragonpulse", "earthquake", "focusblast", "gigadrain", "leafstorm", "substitute"], + "abilities": ["Overgrow"] }, { "role": "Setup Sweeper", - "movepool": ["earthquake", "leafblade", "outrage", "swordsdance"] + "movepool": ["earthquake", "leafblade", "outrage", "swordsdance"], + "abilities": ["Overgrow"] } ] }, @@ -1801,16 +2116,23 @@ "sets": [ { "role": "Wallbreaker", - "movepool": ["fireblast", "highjumpkick", "knockoff", "protect", "stoneedge"] + "movepool": ["fireblast", "highjumpkick", "knockoff", "protect", "stoneedge"], + "abilities": ["Speed Boost"] + }, + { + "role": "Setup Sweeper", + "movepool": ["flareblitz", "highjumpkick", "knockoff", "stoneedge", "swordsdance"], + "abilities": ["Speed Boost"] } ] }, "blazikenmega": { - "level": 75, + "level": 73, "sets": [ { - "role": "Wallbreaker", - "movepool": ["flareblitz", "highjumpkick", "knockoff", "protect", "stoneedge", "swordsdance"] + "role": "Setup Sweeper", + "movepool": ["flareblitz", "highjumpkick", "knockoff", "protect", "stoneedge", "swordsdance"], + "abilities": ["Speed Boost"] } ] }, @@ -1819,11 +2141,13 @@ "sets": [ { "role": "Bulky Attacker", - "movepool": ["earthquake", "icebeam", "roar", "scald", "stealthrock", "toxic"] + "movepool": ["earthquake", "icebeam", "roar", "scald", "stealthrock", "toxic"], + "abilities": ["Torrent"] }, { "role": "Staller", - "movepool": ["earthquake", "protect", "scald", "toxic"] + "movepool": ["earthquake", "protect", "scald", "toxic"], + "abilities": ["Torrent"] } ] }, @@ -1832,16 +2156,18 @@ "sets": [ { "role": "Setup Sweeper", - "movepool": ["earthquake", "icepunch", "raindance", "superpower", "waterfall"] + "movepool": ["earthquake", "icepunch", "raindance", "superpower", "waterfall"], + "abilities": ["Damp"] } ] }, "mightyena": { - "level": 92, + "level": 94, "sets": [ { - "role": "Fast Attacker", - "movepool": ["crunch", "firefang", "irontail", "playrough", "suckerpunch"], + "role": "Wallbreaker", + "movepool": ["crunch", "irontail", "playrough", "suckerpunch", "toxic"], + "abilities": ["Intimidate"], "preferredTypes": ["Fairy"] } ] @@ -1851,29 +2177,33 @@ "sets": [ { "role": "Setup Sweeper", - "movepool": ["bellydrum", "extremespeed", "stompingtantrum", "throatchop"] + "movepool": ["bellydrum", "extremespeed", "stompingtantrum", "throatchop"], + "abilities": ["Gluttony"] } ] }, "beautifly": { - "level": 97, + "level": 99, "sets": [ { "role": "Setup Sweeper", - "movepool": ["bugbuzz", "energyball", "hiddenpowerfighting", "psychic", "quiverdance"] + "movepool": ["aircutter", "bugbuzz", "hiddenpowerground", "quiverdance"], + "abilities": ["Swarm"] } ] }, "dustox": { - "level": 92, + "level": 96, "sets": [ { "role": "Bulky Setup", - "movepool": ["bugbuzz", "quiverdance", "roost", "sludgebomb"] + "movepool": ["bugbuzz", "hiddenpowerground", "quiverdance", "roost", "sludgebomb"], + "abilities": ["Shield Dust"] }, { "role": "Bulky Support", - "movepool": ["bugbuzz", "defog", "roost", "sludgebomb", "toxic", "uturn"] + "movepool": ["bugbuzz", "defog", "roost", "toxic", "uturn"], + "abilities": ["Shield Dust"] } ] }, @@ -1882,50 +2212,58 @@ "sets": [ { "role": "Setup Sweeper", - "movepool": ["gigadrain", "hydropump", "icebeam", "raindance"] + "movepool": ["gigadrain", "hydropump", "icebeam", "raindance"], + "abilities": ["Swift Swim"] }, { "role": "Wallbreaker", - "movepool": ["energyball", "focusblast", "hydropump", "icebeam", "scald"] + "movepool": ["energyball", "hydropump", "icebeam", "scald"], + "abilities": ["Swift Swim"] } ] }, "shiftry": { - "level": 89, + "level": 90, "sets": [ { "role": "Fast Attacker", - "movepool": ["defog", "knockoff", "leafstorm", "lowkick", "suckerpunch"] + "movepool": ["defog", "knockoff", "leafstorm", "lowkick", "suckerpunch"], + "abilities": ["Chlorophyll", "Pickpocket"] }, { "role": "Setup Sweeper", - "movepool": ["knockoff", "leafblade", "lowkick", "suckerpunch", "swordsdance"] + "movepool": ["knockoff", "leafblade", "lowkick", "suckerpunch", "swordsdance"], + "abilities": ["Chlorophyll", "Pickpocket"] } ] }, "swellow": { - "level": 84, + "level": 82, "sets": [ { - "role": "Wallbreaker", - "movepool": ["bravebird", "facade", "protect", "quickattack", "uturn"] + "role": "Fast Attacker", + "movepool": ["bravebird", "facade", "protect", "quickattack", "uturn"], + "abilities": ["Guts"] }, { - "role": "Fast Attacker", - "movepool": ["boomburst", "heatwave", "hurricane", "uturn"] + "role": "Wallbreaker", + "movepool": ["boomburst", "heatwave", "hurricane", "uturn"], + "abilities": ["Scrappy"] } ] }, "pelipper": { - "level": 88, + "level": 87, "sets": [ { "role": "Bulky Attacker", - "movepool": ["defog", "hurricane", "knockoff", "roost", "scald", "uturn"] + "movepool": ["defog", "hurricane", "knockoff", "roost", "scald", "uturn"], + "abilities": ["Drizzle"] }, { "role": "Wallbreaker", - "movepool": ["hurricane", "hydropump", "scald", "uturn"] + "movepool": ["hurricane", "hydropump", "scald", "uturn"], + "abilities": ["Drizzle"] } ] }, @@ -1934,11 +2272,13 @@ "sets": [ { "role": "Fast Attacker", - "movepool": ["calmmind", "focusblast", "healingwish", "moonblast", "psychic", "shadowball", "thunderbolt", "trick"] + "movepool": ["calmmind", "focusblast", "healingwish", "moonblast", "psychic", "shadowball", "thunderbolt", "trick"], + "abilities": ["Trace"] }, { "role": "Setup Sweeper", - "movepool": ["calmmind", "focusblast", "moonblast", "psyshock", "substitute", "willowisp"] + "movepool": ["calmmind", "focusblast", "moonblast", "psyshock", "substitute", "willowisp"], + "abilities": ["Trace"] } ] }, @@ -1947,7 +2287,8 @@ "sets": [ { "role": "Setup Sweeper", - "movepool": ["calmmind", "focusblast", "hypervoice", "psyshock", "substitute", "taunt", "willowisp"] + "movepool": ["calmmind", "focusblast", "hypervoice", "psyshock", "substitute", "taunt", "willowisp"], + "abilities": ["Trace"] } ] }, @@ -1956,11 +2297,13 @@ "sets": [ { "role": "Setup Sweeper", - "movepool": ["airslash", "bugbuzz", "hydropump", "quiverdance"] + "movepool": ["airslash", "bugbuzz", "hydropump", "quiverdance"], + "abilities": ["Intimidate"] }, { "role": "Fast Support", - "movepool": ["airslash", "bugbuzz", "hydropump", "icebeam", "roost", "stickyweb", "stunspore", "uturn"] + "movepool": ["airslash", "bugbuzz", "roost", "scald", "stickyweb", "stunspore", "uturn"], + "abilities": ["Intimidate"] } ] }, @@ -1969,11 +2312,13 @@ "sets": [ { "role": "Fast Attacker", - "movepool": ["bulletseed", "machpunch", "rocktomb", "spore", "swordsdance"] + "movepool": ["bulletseed", "machpunch", "rocktomb", "spore", "swordsdance"], + "abilities": ["Technician"] }, { "role": "Setup Sweeper", - "movepool": ["bulletseed", "machpunch", "rocktomb", "swordsdance"] + "movepool": ["bulletseed", "machpunch", "rocktomb", "swordsdance"], + "abilities": ["Technician"] } ] }, @@ -1982,7 +2327,8 @@ "sets": [ { "role": "Bulky Setup", - "movepool": ["bodyslam", "bulkup", "earthquake", "return", "shadowclaw", "slackoff"] + "movepool": ["bodyslam", "bulkup", "earthquake", "return", "shadowclaw", "slackoff"], + "abilities": ["Vital Spirit"] } ] }, @@ -1991,8 +2337,8 @@ "sets": [ { "role": "Fast Attacker", - "movepool": ["earthquake", "firepunch", "gigaimpact", "nightslash", "retaliate"], - "preferredTypes": ["Ground"] + "movepool": ["earthquake", "gigaimpact", "nightslash", "retaliate"], + "abilities": ["Truant"] } ] }, @@ -2001,21 +2347,24 @@ "sets": [ { "role": "Fast Attacker", - "movepool": ["aerialace", "leechlife", "nightslash", "swordsdance", "uturn"] + "movepool": ["aerialace", "leechlife", "nightslash", "swordsdance", "uturn"], + "abilities": ["Infiltrator"] }, { "role": "Z-Move user", "movepool": ["aerialace", "dig", "leechlife", "swordsdance"], + "abilities": ["Infiltrator"], "preferredTypes": ["Ground"] } ] }, "shedinja": { - "level": 89, + "level": 94, "sets": [ { "role": "Setup Sweeper", - "movepool": ["shadowclaw", "shadowsneak", "swordsdance", "willowisp", "xscissor"] + "movepool": ["shadowclaw", "shadowsneak", "swordsdance", "willowisp", "xscissor"], + "abilities": ["Wonder Guard"] } ] }, @@ -2024,7 +2373,8 @@ "sets": [ { "role": "Wallbreaker", - "movepool": ["boomburst", "fireblast", "focusblast", "icebeam", "surf"] + "movepool": ["boomburst", "fireblast", "focusblast", "icebeam", "surf"], + "abilities": ["Scrappy"] } ] }, @@ -2033,22 +2383,25 @@ "sets": [ { "role": "AV Pivot", - "movepool": ["bulletpunch", "closecombat", "heavyslam", "icepunch", "knockoff", "stoneedge"], + "movepool": ["bulletpunch", "closecombat", "heavyslam", "knockoff", "stoneedge"], + "abilities": ["Thick Fat"], "preferredTypes": ["Dark"] }, { "role": "Wallbreaker", - "movepool": ["bulkup", "bulletpunch", "closecombat", "facade", "knockoff"], + "movepool": ["bulletpunch", "closecombat", "facade", "fakeout", "knockoff"], + "abilities": ["Guts"], "preferredTypes": ["Dark"] } ] }, "delcatty": { - "level": 95, + "level": 99, "sets": [ { "role": "Fast Support", - "movepool": ["doubleedge", "fakeout", "healbell", "stompingtantrum", "suckerpunch", "thunderwave", "toxic"] + "movepool": ["doubleedge", "fakeout", "healbell", "shadowball", "stompingtantrum", "thunderwave", "toxic"], + "abilities": ["Wonder Skin"] } ] }, @@ -2057,7 +2410,8 @@ "sets": [ { "role": "Bulky Support", - "movepool": ["foulplay", "knockoff", "recover", "taunt", "toxic", "willowisp"] + "movepool": ["foulplay", "knockoff", "recover", "taunt", "toxic", "willowisp"], + "abilities": ["Prankster"] } ] }, @@ -2066,16 +2420,18 @@ "sets": [ { "role": "Bulky Setup", - "movepool": ["calmmind", "darkpulse", "recover", "willowisp"] + "movepool": ["calmmind", "darkpulse", "recover", "willowisp"], + "abilities": ["Prankster"] } ] }, "mawile": { - "level": 88, + "level": 89, "sets": [ { - "role": "Wallbreaker", - "movepool": ["ironhead", "knockoff", "playrough", "stealthrock", "suckerpunch", "swordsdance"] + "role": "Bulky Attacker", + "movepool": ["ironhead", "knockoff", "playrough", "stealthrock", "suckerpunch", "swordsdance"], + "abilities": ["Intimidate", "Sheer Force"] } ] }, @@ -2084,90 +2440,117 @@ "sets": [ { "role": "Wallbreaker", - "movepool": ["firefang", "ironhead", "knockoff", "playrough", "suckerpunch", "swordsdance"] + "movepool": ["ironhead", "knockoff", "playrough", "suckerpunch", "swordsdance"], + "abilities": ["Intimidate"] } ] }, "aggron": { - "level": 88, + "level": 87, "sets": [ { "role": "Wallbreaker", "movepool": ["aquatail", "earthquake", "headsmash", "heavyslam", "rockpolish", "stealthrock"], + "abilities": ["Rock Head"], "preferredTypes": ["Ground"] } ] }, "aggronmega": { - "level": 82, + "level": 81, "sets": [ { - "role": "Bulky Support", - "movepool": ["earthquake", "heavyslam", "roar", "stealthrock", "stoneedge", "thunderwave", "toxic"] + "role": "Bulky Attacker", + "movepool": ["earthquake", "heavyslam", "roar", "stealthrock", "stoneedge", "thunderwave", "toxic"], + "abilities": ["Sturdy"], + "preferredTypes": ["Ground"] } ] }, "medicham": { - "level": 86, + "level": 85, "sets": [ { "role": "Fast Attacker", - "movepool": ["bulletpunch", "highjumpkick", "icepunch", "poisonjab", "zenheadbutt"] + "movepool": ["bulletpunch", "highjumpkick", "icepunch", "poisonjab", "zenheadbutt"], + "abilities": ["Pure Power"] } ] }, "medichammega": { - "level": 80, + "level": 78, "sets": [ { "role": "Fast Attacker", - "movepool": ["fakeout", "highjumpkick", "icepunch", "thunderpunch", "zenheadbutt"] + "movepool": ["fakeout", "highjumpkick", "icepunch", "thunderpunch", "zenheadbutt"], + "abilities": ["Pure Power"] } ] }, "manectric": { - "level": 88, + "level": 85, "sets": [ { "role": "Wallbreaker", - "movepool": ["flamethrower", "hiddenpowerice", "overheat", "switcheroo", "thunderbolt", "voltswitch"], - "preferredTypes": ["Fire"] + "movepool": ["flamethrower", "hiddenpowerice", "overheat", "thunderbolt", "voltswitch"], + "abilities": ["Lightning Rod"] } ] }, "manectricmega": { - "level": 80, + "level": 79, "sets": [ { "role": "Fast Attacker", - "movepool": ["hiddenpowergrass", "hiddenpowerice", "overheat", "thunderbolt", "voltswitch"] + "movepool": ["hiddenpowerice", "overheat", "thunderbolt", "voltswitch"], + "abilities": ["Lightning Rod"] } ] }, "plusle": { - "level": 93, + "level": 95, "sets": [ { "role": "Bulky Setup", - "movepool": ["encore", "hiddenpowerice", "nastyplot", "substitute", "thunderbolt"] + "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, + "level": 94, "sets": [ { "role": "Bulky Setup", - "movepool": ["encore", "hiddenpowerice", "nastyplot", "substitute", "thunderbolt"] + "movepool": ["encore", "hiddenpowerice", "nastyplot", "substitute", "thunderbolt"], + "abilities": ["Volt Absorb"], + "preferredTypes": ["Ice"] + }, + { + "role": "Setup Sweeper", + "movepool": ["grassknot", "hiddenpowerice", "nastyplot", "thunderbolt"], + "abilities": ["Volt Absorb"] } ] }, "volbeat": { - "level": 90, + "level": 91, "sets": [ { "role": "Bulky Attacker", - "movepool": ["defog", "encore", "roost", "thunderwave", "toxic", "uturn"] + "movepool": ["defog", "encore", "roost", "thunderwave", "uturn"], + "abilities": ["Prankster"] + }, + { + "role": "Staller", + "movepool": ["defog", "encore", "lunge", "roost", "thunderwave"], + "abilities": ["Prankster"] } ] }, @@ -2176,25 +2559,34 @@ "sets": [ { "role": "Bulky Attacker", - "movepool": ["bugbuzz", "defog", "encore", "roost", "thunderwave", "wish"] + "movepool": ["bugbuzz", "defog", "encore", "roost", "thunderwave"], + "abilities": ["Prankster"] } ] }, "swalot": { - "level": 89, + "level": 90, "sets": [ { - "role": "Bulky Support", - "movepool": ["earthquake", "encore", "icebeam", "painsplit", "sludgebomb", "toxic", "yawn"] + "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": 84, + "level": 83, "sets": [ { "role": "Wallbreaker", - "movepool": ["crunch", "destinybond", "earthquake", "icebeam", "protect", "waterfall"] + "movepool": ["crunch", "destinybond", "earthquake", "icebeam", "protect", "waterfall"], + "abilities": ["Speed Boost"] } ] }, @@ -2203,29 +2595,33 @@ "sets": [ { "role": "Wallbreaker", - "movepool": ["crunch", "icefang", "protect", "psychicfangs", "waterfall"] + "movepool": ["crunch", "icefang", "protect", "psychicfangs", "waterfall"], + "abilities": ["Speed Boost"] } ] }, "wailord": { - "level": 89, + "level": 93, "sets": [ { "role": "Bulky Attacker", - "movepool": ["hiddenpowergrass", "hydropump", "icebeam", "waterspout"] + "movepool": ["hiddenpowergrass", "hydropump", "icebeam", "waterspout"], + "abilities": ["Water Veil"] } ] }, "camerupt": { - "level": 88, + "level": 90, "sets": [ { - "role": "Bulky Attacker", - "movepool": ["earthquake", "fireblast", "hiddenpowergrass", "rockpolish", "stoneedge"] + "role": "Setup Sweeper", + "movepool": ["earthquake", "fireblast", "rockpolish", "stoneedge"], + "abilities": ["Solid Rock"] }, { "role": "Bulky Support", - "movepool": ["earthquake", "lavaplume", "roar", "stealthrock", "toxic"] + "movepool": ["earthquake", "lavaplume", "roar", "stealthrock", "toxic"], + "abilities": ["Solid Rock"] } ] }, @@ -2234,7 +2630,8 @@ "sets": [ { "role": "Bulky Attacker", - "movepool": ["ancientpower", "earthpower", "fireblast", "stealthrock", "toxic", "willowisp"] + "movepool": ["ancientpower", "earthpower", "fireblast", "stealthrock", "toxic", "willowisp"], + "abilities": ["Solid Rock"] } ] }, @@ -2243,29 +2640,34 @@ "sets": [ { "role": "Bulky Support", - "movepool": ["earthquake", "lavaplume", "rapidspin", "solarbeam", "stealthrock", "yawn"] + "movepool": ["earthquake", "lavaplume", "rapidspin", "solarbeam", "stealthrock", "yawn"], + "abilities": ["Drought"] } ] }, "grumpig": { - "level": 91, + "level": 93, "sets": [ { "role": "Bulky Support", - "movepool": ["focusblast", "healbell", "lightscreen", "psychic", "reflect", "thunderwave", "toxic", "whirlwind"] + "movepool": ["focusblast", "healbell", "psychic", "thunderwave", "toxic", "whirlwind"], + "abilities": ["Thick Fat"] + }, + { + "role": "Bulky Setup", + "movepool": ["calmmind", "focusblast", "psychic", "psyshock", "recycle"], + "abilities": ["Gluttony"] } ] }, "spinda": { - "level": 100, + "level": 99, "sets": [ { "role": "Staller", - "movepool": ["icepunch", "return", "suckerpunch", "superpower"] - }, - { - "role": "Bulky Attacker", - "movepool": ["protect", "rest", "return", "sleeptalk", "superpower", "wish"] + "movepool": ["rest", "return", "sleeptalk", "suckerpunch", "superpower", "thief"], + "abilities": ["Contrary"], + "preferredTypes": ["Fighting"] } ] }, @@ -2274,51 +2676,59 @@ "sets": [ { "role": "Fast Attacker", - "movepool": ["dragondance", "earthquake", "outrage", "stoneedge", "uturn"] + "movepool": ["dragondance", "earthquake", "outrage", "stoneedge", "uturn"], + "abilities": ["Levitate"] }, { "role": "Bulky Attacker", - "movepool": ["defog", "dragondance", "earthquake", "outrage", "roost"] + "movepool": ["defog", "dragondance", "earthquake", "outrage", "roost"], + "abilities": ["Levitate"] }, { "role": "Z-Move user", "movepool": ["dragondance", "earthquake", "outrage", "roost", "stoneedge"], + "abilities": ["Levitate"], "preferredTypes": ["Dragon"] } ] }, "cacturne": { - "level": 90, + "level": 92, "sets": [ { "role": "Wallbreaker", - "movepool": ["darkpulse", "focusblast", "gigadrain", "spikes", "suckerpunch"] + "movepool": ["darkpulse", "focusblast", "gigadrain", "spikes", "suckerpunch"], + "abilities": ["Water Absorb"] }, { "role": "Setup Sweeper", - "movepool": ["drainpunch", "seedbomb", "suckerpunch", "swordsdance"] + "movepool": ["drainpunch", "seedbomb", "suckerpunch", "swordsdance"], + "abilities": ["Water Absorb"] } ] }, "altaria": { - "level": 88, + "level": 90, "sets": [ { "role": "Bulky Support", - "movepool": ["defog", "dracometeor", "earthquake", "fireblast", "roost", "toxic"] + "movepool": ["defog", "dracometeor", "earthquake", "fireblast", "healbell", "roost", "toxic"], + "abilities": ["Natural Cure"] } ] }, "altariamega": { - "level": 81, + "level": 80, "sets": [ { "role": "Setup Sweeper", - "movepool": ["dragondance", "earthquake", "return", "roost"] + "movepool": ["dragondance", "earthquake", "return", "roost"], + "abilities": ["Natural Cure"] }, { "role": "Bulky Support", - "movepool": ["defog", "earthquake", "fireblast", "healbell", "return", "roost"] + "movepool": ["defog", "earthquake", "fireblast", "healbell", "return", "roost"], + "abilities": ["Natural Cure"] } ] }, @@ -2326,55 +2736,67 @@ "level": 87, "sets": [ { - "role": "Wallbreaker", + "role": "Fast Attacker", "movepool": ["closecombat", "facade", "knockoff", "quickattack", "swordsdance"], + "abilities": ["Toxic Boost"], "preferredTypes": ["Dark"] } ] }, "seviper": { - "level": 90, + "level": 93, "sets": [ { "role": "Fast Attacker", "movepool": ["earthquake", "flamethrower", "gigadrain", "glare", "knockoff", "sludgewave", "suckerpunch", "switcheroo"], + "abilities": ["Infiltrator"], "preferredTypes": ["Ground"] }, { "role": "Setup Sweeper", - "movepool": ["earthquake", "poisonjab", "suckerpunch", "swordsdance"] + "movepool": ["earthquake", "poisonjab", "suckerpunch", "swordsdance"], + "abilities": ["Infiltrator"] } ] }, "lunatone": { - "level": 90, + "level": 92, "sets": [ { "role": "Wallbreaker", "movepool": ["earthpower", "icebeam", "moonblast", "moonlight", "powergem", "psychic", "rockpolish"], + "abilities": ["Levitate"], "preferredTypes": ["Ground"] }, { "role": "Bulky Support", - "movepool": ["moonblast", "moonlight", "powergem", "psychic", "stealthrock", "toxic"] + "movepool": ["earthpower", "moonlight", "powergem", "psychic", "stealthrock", "toxic"], + "abilities": ["Levitate"] } ] }, "solrock": { - "level": 89, + "level": 90, "sets": [ { "role": "Bulky Support", - "movepool": ["earthquake", "morningsun", "stealthrock", "stoneedge", "willowisp"] + "movepool": ["earthquake", "morningsun", "stealthrock", "stoneedge", "willowisp"], + "abilities": ["Levitate"] } ] }, "whiscash": { - "level": 88, + "level": 89, "sets": [ { "role": "Setup Sweeper", - "movepool": ["dragondance", "earthquake", "stoneedge", "waterfall"] + "movepool": ["dragondance", "earthquake", "stoneedge", "waterfall"], + "abilities": ["Hydration", "Oblivious"] + }, + { + "role": "Staller", + "movepool": ["earthquake", "protect", "scald", "toxic"], + "abilities": ["Hydration", "Oblivious"] } ] }, @@ -2382,12 +2804,9 @@ "level": 85, "sets": [ { - "role": "Wallbreaker", - "movepool": ["aquajet", "crabhammer", "dragondance", "knockoff", "superpower"] - }, - { - "role": "Setup Sweeper", - "movepool": ["aquajet", "crabhammer", "knockoff", "swordsdance"] + "role": "Fast Attacker", + "movepool": ["aquajet", "crabhammer", "dragondance", "knockoff", "superpower"], + "abilities": ["Adaptability"] } ] }, @@ -2396,20 +2815,24 @@ "sets": [ { "role": "Bulky Support", - "movepool": ["earthquake", "icebeam", "psychic", "rapidspin", "stealthrock", "toxic"] + "movepool": ["earthquake", "icebeam", "psychic", "rapidspin", "stealthrock", "toxic"], + "abilities": ["Levitate"] } ] }, "cradily": { - "level": 88, + "level": 89, "sets": [ { "role": "Bulky Setup", - "movepool": ["curse", "recover", "seedbomb", "stoneedge", "swordsdance"] + "movepool": ["curse", "earthquake", "recover", "seedbomb", "stoneedge", "swordsdance"], + "abilities": ["Storm Drain"] }, { "role": "Bulky Attacker", - "movepool": ["gigadrain", "recover", "stealthrock", "stoneedge", "toxic"] + "movepool": ["earthpower", "gigadrain", "recover", "stealthrock", "stoneedge", "toxic"], + "abilities": ["Storm Drain"], + "preferredTypes": ["Grass"] } ] }, @@ -2418,11 +2841,13 @@ "sets": [ { "role": "Bulky Support", - "movepool": ["earthquake", "knockoff", "rapidspin", "stealthrock", "stoneedge", "toxic", "xscissor"] + "movepool": ["earthquake", "knockoff", "rapidspin", "stealthrock", "stoneedge", "toxic", "xscissor"], + "abilities": ["Battle Armor", "Swift Swim"] }, { "role": "Bulky Attacker", - "movepool": ["aquajet", "earthquake", "knockoff", "liquidation", "stoneedge", "swordsdance", "xscissor"] + "movepool": ["aquajet", "earthquake", "knockoff", "liquidation", "stoneedge", "swordsdance", "xscissor"], + "abilities": ["Battle Armor", "Swift Swim"] } ] }, @@ -2431,7 +2856,8 @@ "sets": [ { "role": "Staller", - "movepool": ["dragontail", "haze", "icebeam", "recover", "scald", "toxic"] + "movepool": ["dragontail", "haze", "icebeam", "recover", "scald", "toxic"], + "abilities": ["Competitive", "Marvel Scale"] } ] }, @@ -2440,26 +2866,35 @@ "sets": [ { "role": "Bulky Attacker", - "movepool": ["fireblast", "icebeam", "return", "scald", "thunderbolt", "thunderwave"] + "movepool": ["defog", "fireblast", "icebeam", "return", "scald", "thunderbolt", "thunderwave"], + "abilities": ["Forecast"], + "preferredTypes": ["Water"] } ] }, "kecleon": { - "level": 88, + "level": 90, "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": 92, + "level": 93, "sets": [ { "role": "Wallbreaker", - "movepool": ["destinybond", "gunkshot", "knockoff", "shadowclaw", "shadowsneak", "taunt", "willowisp"] + "movepool": ["gunkshot", "knockoff", "shadowclaw", "shadowsneak", "thunderwave", "willowisp"], + "abilities": ["Cursed Body", "Frisk"] } ] }, @@ -2468,29 +2903,33 @@ "sets": [ { "role": "Fast Support", - "movepool": ["destinybond", "gunkshot", "knockoff", "shadowclaw", "shadowsneak", "taunt", "willowisp"] + "movepool": ["destinybond", "gunkshot", "knockoff", "shadowclaw", "shadowsneak", "taunt", "willowisp"], + "abilities": ["Frisk"] } ] }, "tropius": { - "level": 90, + "level": 93, "sets": [ { "role": "Staller", - "movepool": ["airslash", "leechseed", "protect", "substitute"] + "movepool": ["airslash", "leechseed", "protect", "substitute"], + "abilities": ["Harvest"] } ] }, "chimecho": { - "level": 93, + "level": 94, "sets": [ { "role": "Staller", - "movepool": ["defog", "healbell", "knockoff", "psychic", "recover", "taunt", "toxic"] + "movepool": ["defog", "healbell", "knockoff", "psychic", "recover", "toxic"], + "abilities": ["Levitate"] }, { "role": "Bulky Setup", - "movepool": ["calmmind", "psychic", "recover", "signalbeam"] + "movepool": ["calmmind", "psychic", "psyshock", "recover", "signalbeam"], + "abilities": ["Levitate"] } ] }, @@ -2499,7 +2938,9 @@ "sets": [ { "role": "Wallbreaker", - "movepool": ["knockoff", "playrough", "pursuit", "suckerpunch", "superpower", "swordsdance"] + "movepool": ["knockoff", "playrough", "pursuit", "suckerpunch", "superpower", "swordsdance"], + "abilities": ["Justified"], + "preferredTypes": ["Fairy"] } ] }, @@ -2508,20 +2949,19 @@ "sets": [ { "role": "Fast Attacker", - "movepool": ["fireblast", "knockoff", "playrough", "pursuit", "suckerpunch", "superpower"] - }, - { - "role": "Setup Sweeper", - "movepool": ["knockoff", "playrough", "suckerpunch", "superpower", "swordsdance"] + "movepool": ["irontail", "knockoff", "playrough", "pursuit", "suckerpunch", "superpower", "swordsdance"], + "abilities": ["Justified"], + "preferredTypes": ["Fairy"] } ] }, "glalie": { - "level": 88, + "level": 90, "sets": [ { "role": "Fast Support", - "movepool": ["earthquake", "explosion", "freezedry", "spikes", "superfang", "taunt"] + "movepool": ["earthquake", "freezedry", "spikes", "superfang", "taunt"], + "abilities": ["Inner Focus"] } ] }, @@ -2529,8 +2969,10 @@ "level": 84, "sets": [ { - "role": "Wallbreaker", - "movepool": ["earthquake", "explosion", "freezedry", "iceshard", "return", "spikes"] + "role": "Fast Attacker", + "movepool": ["earthquake", "explosion", "freezedry", "iceshard", "return", "spikes"], + "abilities": ["Inner Focus"], + "preferredTypes": ["Ground"] } ] }, @@ -2539,11 +2981,13 @@ "sets": [ { "role": "Bulky Support", - "movepool": ["icebeam", "roar", "superfang", "surf", "toxic"] + "movepool": ["icebeam", "roar", "superfang", "surf", "toxic"], + "abilities": ["Thick Fat"] }, { "role": "Staller", - "movepool": ["icebeam", "protect", "surf", "toxic"] + "movepool": ["icebeam", "protect", "surf", "toxic"], + "abilities": ["Thick Fat"] } ] }, @@ -2552,7 +2996,8 @@ "sets": [ { "role": "Setup Sweeper", - "movepool": ["icebeam", "return", "shellsmash", "substitute", "suckerpunch", "waterfall"], + "movepool": ["icebeam", "return", "shellsmash", "suckerpunch", "waterfall"], + "abilities": ["Swift Swim", "Water Veil"], "preferredTypes": ["Ice"] } ] @@ -2562,8 +3007,8 @@ "sets": [ { "role": "Setup Sweeper", - "movepool": ["hiddenpowergrass", "hydropump", "icebeam", "shellsmash", "substitute"], - "preferredTypes": ["Ice"] + "movepool": ["hiddenpowergrass", "hydropump", "icebeam", "shellsmash"], + "abilities": ["Swift Swim"] } ] }, @@ -2572,11 +3017,13 @@ "sets": [ { "role": "Bulky Attacker", - "movepool": ["earthquake", "headsmash", "stealthrock", "toxic", "waterfall"] + "movepool": ["earthquake", "headsmash", "stealthrock", "toxic", "waterfall"], + "abilities": ["Rock Head"] }, { "role": "Wallbreaker", "movepool": ["doubleedge", "earthquake", "headsmash", "rockpolish", "waterfall"], + "abilities": ["Rock Head"], "preferredTypes": ["Ground"] } ] @@ -2586,58 +3033,73 @@ "sets": [ { "role": "Staller", - "movepool": ["charm", "protect", "scald", "toxic"] + "movepool": ["icebeam", "protect", "scald", "substitute", "toxic"], + "abilities": ["Hydration"] } ] }, "salamence": { - "level": 75, + "level": 73, "sets": [ { "role": "Setup Sweeper", - "movepool": ["dragondance", "earthquake", "outrage", "roost"] + "movepool": ["dragondance", "earthquake", "outrage", "roost"], + "abilities": ["Intimidate", "Moxie"] }, { "role": "Z-Move user", "movepool": ["dragondance", "earthquake", "fly", "outrage"], + "abilities": ["Moxie"], "preferredTypes": ["Flying"] } ] }, "salamencemega": { - "level": 73, + "level": 72, "sets": [ { "role": "Setup Sweeper", - "movepool": ["doubleedge", "dragondance", "earthquake", "return", "roost"] + "movepool": ["doubleedge", "dragondance", "earthquake", "return", "roost"], + "abilities": ["Intimidate"] }, { "role": "Bulky Attacker", - "movepool": ["doubleedge", "dracometeor", "earthquake", "fireblast", "return", "roost"] + "movepool": ["doubleedge", "dracometeor", "earthquake", "fireblast", "return", "roost"], + "abilities": ["Intimidate"] } ] }, "metagross": { - "level": 81, + "level": 79, "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": 76, + "level": 75, "sets": [ { "role": "Bulky Attacker", - "movepool": ["agility", "earthquake", "hammerarm", "icepunch", "meteormash", "zenheadbutt"] + "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"] } ] }, @@ -2646,11 +3108,13 @@ "sets": [ { "role": "Bulky Setup", - "movepool": ["curse", "drainpunch", "rest", "stoneedge"] + "movepool": ["curse", "drainpunch", "rest", "stoneedge"], + "abilities": ["Sturdy"] }, { "role": "Bulky Support", - "movepool": ["drainpunch", "earthquake", "stealthrock", "stoneedge", "thunderwave", "toxic"] + "movepool": ["drainpunch", "earthquake", "stealthrock", "stoneedge", "thunderwave", "toxic"], + "abilities": ["Sturdy"] } ] }, @@ -2658,16 +3122,20 @@ "level": 87, "sets": [ { - "role": "Bulky Support", - "movepool": ["icebeam", "rest", "sleeptalk", "thunderwave", "toxic"] + "role": "Staller", + "movepool": ["icebeam", "protect", "thunderbolt", "toxic"], + "abilities": ["Clear Body"] }, { "role": "Bulky Attacker", - "movepool": ["icebeam", "rest", "sleeptalk", "thunderbolt"] + "movepool": ["focusblast", "icebeam", "rest", "sleeptalk", "thunderbolt", "thunderwave"], + "abilities": ["Clear Body"], + "preferredTypes": ["Electric"] }, { "role": "Bulky Setup", - "movepool": ["focusblast", "icebeam", "rockpolish", "thunderbolt"] + "movepool": ["focusblast", "icebeam", "rockpolish", "thunderbolt"], + "abilities": ["Clear Body"] } ] }, @@ -2676,145 +3144,172 @@ "sets": [ { "role": "Bulky Setup", - "movepool": ["curse", "ironhead", "rest", "sleeptalk"] + "movepool": ["curse", "ironhead", "rest", "sleeptalk"], + "abilities": ["Clear Body"] }, { "role": "Bulky Support", - "movepool": ["rest", "seismictoss", "sleeptalk", "toxic"] + "movepool": ["rest", "seismictoss", "sleeptalk", "toxic"], + "abilities": ["Clear Body"] }, { "role": "Staller", - "movepool": ["protect", "seismictoss", "stealthrock", "toxic"] + "movepool": ["protect", "seismictoss", "stealthrock", "thunderwave", "toxic"], + "abilities": ["Clear Body"] } ] }, "latias": { - "level": 81, + "level": 80, "sets": [ { "role": "Fast Support", - "movepool": ["calmmind", "defog", "dracometeor", "healingwish", "hiddenpowerfire", "psyshock", "roost", "trick"] + "movepool": ["calmmind", "defog", "dracometeor", "healingwish", "hiddenpowerfire", "psyshock", "roost", "trick"], + "abilities": ["Levitate"] }, { "role": "Z-Move user", "movepool": ["calmmind", "dracometeor", "psyshock", "roost"], + "abilities": ["Levitate"], "preferredTypes": ["Dragon"] } ] }, "latiasmega": { - "level": 80, + "level": 78, "sets": [ { "role": "Bulky Attacker", - "movepool": ["calmmind", "defog", "dracometeor", "hiddenpowerfire", "psyshock", "roost"] + "movepool": ["calmmind", "dracometeor", "psyshock", "roost"], + "abilities": ["Levitate"] } ] }, "latios": { - "level": 80, + "level": 79, "sets": [ { "role": "Fast Support", - "movepool": ["calmmind", "dracometeor", "hiddenpowerfire", "psyshock", "roost", "surf", "thunderbolt", "trick"] + "movepool": ["calmmind", "dracometeor", "hiddenpowerfire", "psyshock", "roost", "surf", "thunderbolt", "trick"], + "abilities": ["Levitate"] }, { "role": "Z-Move user", "movepool": ["calmmind", "dracometeor", "psyshock", "roost"], + "abilities": ["Levitate"], "preferredTypes": ["Dragon"] } ] }, "latiosmega": { - "level": 80, + "level": 79, "sets": [ { "role": "Bulky Attacker", - "movepool": ["calmmind", "dracometeor", "hiddenpowerfire", "psyshock", "roost"] + "movepool": ["calmmind", "dracometeor", "psyshock", "roost"], + "abilities": ["Levitate"] } ] }, "kyogre": { - "level": 71, + "level": 69, "sets": [ { "role": "Fast Attacker", - "movepool": ["icebeam", "originpulse", "scald", "thunder", "waterspout"] + "movepool": ["icebeam", "originpulse", "scald", "thunder", "waterspout"], + "abilities": ["Drizzle"] } ] }, "kyogreprimal": { - "level": 73, + "level": 72, "sets": [ { "role": "Bulky Setup", - "movepool": ["calmmind", "rest", "scald", "sleeptalk"] + "movepool": ["calmmind", "rest", "scald", "sleeptalk"], + "abilities": ["Drizzle"] }, { "role": "Setup Sweeper", - "movepool": ["calmmind", "icebeam", "originpulse", "thunder"] + "movepool": ["calmmind", "icebeam", "originpulse", "thunder"], + "abilities": ["Drizzle"] } ] }, "groudon": { - "level": 75, + "level": 74, "sets": [ { "role": "Bulky Support", - "movepool": ["dragontail", "lavaplume", "precipiceblades", "stealthrock", "stoneedge", "thunderwave"] + "movepool": ["dragontail", "lavaplume", "precipiceblades", "stealthrock", "stoneedge", "thunderwave"], + "abilities": ["Drought"] }, { "role": "Bulky Setup", - "movepool": ["firepunch", "precipiceblades", "rockpolish", "stoneedge", "swordsdance"] + "movepool": ["firepunch", "precipiceblades", "rockpolish", "stoneedge", "swordsdance"], + "abilities": ["Drought"] } ] }, "groudonprimal": { - "level": 67, + "level": 66, "sets": [ { "role": "Bulky Support", - "movepool": ["dragontail", "lavaplume", "precipiceblades", "stealthrock", "thunderwave"] + "movepool": ["dragontail", "lavaplume", "precipiceblades", "stealthrock", "thunderwave"], + "abilities": ["Drought"] }, { "role": "Bulky Setup", - "movepool": ["firepunch", "precipiceblades", "rockpolish", "swordsdance"] + "movepool": ["firepunch", "precipiceblades", "rockpolish", "swordsdance"], + "abilities": ["Drought"] } ] }, "rayquaza": { - "level": 73, + "level": 71, "sets": [ - { - "role": "Wallbreaker", - "movepool": ["dracometeor", "dragondance", "earthquake", "extremespeed", "outrage", "vcreate"] - }, { "role": "Z-Move user", "movepool": ["dragonascent", "dragondance", "earthquake", "extremespeed", "vcreate"], + "abilities": ["Air Lock"], "preferredTypes": ["Flying"] + }, + { + "role": "Setup Sweeper", + "movepool": ["dragondance", "earthquake", "extremespeed", "outrage", "vcreate"], + "abilities": ["Air Lock"] + }, + { + "role": "Bulky Setup", + "movepool": ["earthquake", "extremespeed", "outrage", "swordsdance", "vcreate"], + "abilities": ["Air Lock"], + "preferredTypes": ["Normal"] } ] }, "rayquazamega": { - "level": 67, + "level": 66, "sets": [ { "role": "Fast Attacker", - "movepool": ["dragonascent", "dragondance", "earthquake", "extremespeed", "vcreate"] + "movepool": ["dragonascent", "dragondance", "earthquake", "extremespeed", "vcreate"], + "abilities": ["Air Lock"] } ] }, "jirachi": { - "level": 78, + "level": 77, "sets": [ { "role": "Bulky Support", - "movepool": ["bodyslam", "firepunch", "healingwish", "ironhead", "protect", "stealthrock", "toxic", "uturn", "wish"] + "movepool": ["bodyslam", "firepunch", "healingwish", "ironhead", "protect", "stealthrock", "toxic", "uturn", "wish"], + "abilities": ["Serene Grace"] }, { "role": "Z-Move user", "movepool": ["drainpunch", "happyhour", "ironhead", "psychic"], + "abilities": ["Serene Grace"], "preferredTypes": ["Normal"] } ] @@ -2824,18 +3319,28 @@ "sets": [ { "role": "Wallbreaker", - "movepool": ["extremespeed", "firepunch", "icebeam", "knockoff", "psychoboost", "stealthrock", "superpower"], - "preferredTypes": ["Fighting"] + "movepool": ["extremespeed", "knockoff", "psychoboost", "superpower"], + "abilities": ["Pressure"] + }, + { + "role": "Fast Attacker", + "movepool": ["icebeam", "knockoff", "psychoboost", "superpower"], + "abilities": ["Pressure"] } ] }, "deoxysattack": { - "level": 76, + "level": 74, "sets": [ { "role": "Wallbreaker", - "movepool": ["extremespeed", "firepunch", "icebeam", "knockoff", "psychoboost", "superpower"], - "preferredTypes": ["Fighting"] + "movepool": ["extremespeed", "knockoff", "psychoboost", "superpower"], + "abilities": ["Pressure"] + }, + { + "role": "Fast Attacker", + "movepool": ["icebeam", "knockoff", "psychoboost", "superpower"], + "abilities": ["Pressure"] } ] }, @@ -2844,16 +3349,29 @@ "sets": [ { "role": "Bulky Support", - "movepool": ["knockoff", "recover", "seismictoss", "spikes", "stealthrock", "taunt", "toxic"] + "movepool": ["knockoff", "recover", "seismictoss", "spikes", "stealthrock", "taunt", "toxic"], + "abilities": ["Pressure"] + }, + { + "role": "Bulky Setup", + "movepool": ["focusblast", "nastyplot", "psychic", "psyshock", "recover", "signalbeam"], + "abilities": ["Pressure"] } ] }, "deoxysspeed": { - "level": 82, + "level": 81, "sets": [ { "role": "Fast Support", - "movepool": ["knockoff", "psychoboost", "spikes", "stealthrock", "superpower", "taunt"] + "movepool": ["knockoff", "psychoboost", "spikes", "stealthrock", "superpower", "taunt"], + "abilities": ["Pressure"] + }, + { + "role": "Z-Move user", + "movepool": ["darkpulse", "focusblast", "nastyplot", "psychoboost"], + "abilities": ["Pressure"], + "preferredTypes": ["Psychic"] } ] }, @@ -2862,29 +3380,34 @@ "sets": [ { "role": "Bulky Support", - "movepool": ["earthquake", "stealthrock", "stoneedge", "synthesis", "woodhammer"] + "movepool": ["earthquake", "stealthrock", "stoneedge", "synthesis", "woodhammer"], + "abilities": ["Overgrow"] }, { "role": "Bulky Attacker", - "movepool": ["earthquake", "rockpolish", "stoneedge", "woodhammer"] + "movepool": ["earthquake", "rockpolish", "stoneedge", "woodhammer"], + "abilities": ["Overgrow"] } ] }, "infernape": { - "level": 82, + "level": 81, "sets": [ { - "role": "Wallbreaker", - "movepool": ["closecombat", "grassknot", "machpunch", "overheat", "stealthrock"] + "role": "Fast Attacker", + "movepool": ["closecombat", "grassknot", "machpunch", "overheat", "stealthrock"], + "abilities": ["Blaze", "Iron Fist"] }, { "role": "Z-Move user", "movepool": ["fireblast", "focusblast", "grassknot", "nastyplot", "vacuumwave"], + "abilities": ["Blaze"], "preferredTypes": ["Fighting"] }, { - "role": "Fast Attacker", - "movepool": ["closecombat", "flareblitz", "machpunch", "stoneedge", "swordsdance", "uturn"] + "role": "Fast Support", + "movepool": ["closecombat", "flareblitz", "machpunch", "stoneedge", "swordsdance", "uturn"], + "abilities": ["Blaze", "Iron Fist"] } ] }, @@ -2893,43 +3416,49 @@ "sets": [ { "role": "Staller", - "movepool": ["defog", "knockoff", "protect", "scald", "stealthrock", "toxic"] + "movepool": ["defog", "knockoff", "protect", "scald", "stealthrock", "toxic"], + "abilities": ["Torrent"] }, { "role": "Bulky Support", - "movepool": ["defog", "icebeam", "knockoff", "roar", "scald", "toxic"] + "movepool": ["defog", "icebeam", "knockoff", "roar", "scald", "toxic"], + "abilities": ["Torrent"] }, { "role": "Bulky Attacker", - "movepool": ["flashcannon", "grassknot", "hydropump", "icebeam", "knockoff", "scald"] + "movepool": ["flashcannon", "grassknot", "hydropump", "icebeam", "knockoff", "scald"], + "abilities": ["Torrent"] } ] }, "staraptor": { - "level": 81, + "level": 80, "sets": [ { "role": "Fast Attacker", "movepool": ["bravebird", "closecombat", "doubleedge", "quickattack", "uturn"], + "abilities": ["Reckless"], "preferredTypes": ["Fighting"] } ] }, "bibarel": { - "level": 88, + "level": 89, "sets": [ { "role": "Setup Sweeper", - "movepool": ["aquajet", "liquidation", "quickattack", "return", "swordsdance"] + "movepool": ["aquajet", "liquidation", "quickattack", "return", "swordsdance"], + "abilities": ["Simple"] } ] }, "kricketune": { - "level": 91, + "level": 96, "sets": [ { "role": "Fast Support", - "movepool": ["knockoff", "leechlife", "stickyweb", "taunt", "toxic"] + "movepool": ["knockoff", "leechlife", "stickyweb", "taunt", "toxic"], + "abilities": ["Swarm"] } ] }, @@ -2938,12 +3467,13 @@ "sets": [ { "role": "Wallbreaker", - "movepool": ["crunch", "facade", "icefang", "superpower", "wildcharge"], - "preferredTypes": ["Fighting"] + "movepool": ["crunch", "facade", "superpower", "wildcharge"], + "abilities": ["Guts"] }, { "role": "AV Pivot", "movepool": ["crunch", "icefang", "superpower", "voltswitch", "wildcharge"], + "abilities": ["Intimidate"], "preferredTypes": ["Fighting"] } ] @@ -2953,7 +3483,8 @@ "sets": [ { "role": "Fast Support", - "movepool": ["gigadrain", "hiddenpowerfire", "leafstorm", "sleeppowder", "sludgebomb", "spikes", "synthesis", "toxicspikes"] + "movepool": ["gigadrain", "hiddenpowerground", "leafstorm", "sleeppowder", "sludgebomb", "spikes", "synthesis", "toxicspikes"], + "abilities": ["Natural Cure", "Technician"] } ] }, @@ -2961,79 +3492,105 @@ "level": 88, "sets": [ { - "role": "Wallbreaker", - "movepool": ["crunch", "earthquake", "firepunch", "rockpolish", "rockslide"] + "role": "Setup Sweeper", + "movepool": ["earthquake", "firepunch", "rockpolish", "rockslide", "zenheadbutt"], + "abilities": ["Sheer Force"] }, { - "role": "Bulky Attacker", - "movepool": ["crunch", "earthquake", "firepunch", "headsmash", "superpower"] + "role": "Fast Attacker", + "movepool": ["earthquake", "firepunch", "headsmash", "rockslide"], + "abilities": ["Sheer Force"] } ] }, "bastiodon": { - "level": 88, + "level": 92, "sets": [ { "role": "Bulky Support", - "movepool": ["metalburst", "roar", "rockblast", "stealthrock", "toxic"] + "movepool": ["metalburst", "roar", "rockblast", "stealthrock", "toxic"], + "abilities": ["Sturdy"] }, { "role": "Staller", - "movepool": ["metalburst", "protect", "roar", "rockblast", "stealthrock", "toxic"] + "movepool": ["metalburst", "protect", "roar", "rockblast", "stealthrock", "toxic"], + "abilities": ["Sturdy"] } ] }, "wormadam": { - "level": 98, + "level": 100, "sets": [ { "role": "Setup Sweeper", - "movepool": ["bugbuzz", "gigadrain", "hiddenpowerground", "hiddenpowerrock", "leafstorm", "quiverdance"] + "movepool": ["bugbuzz", "energyball", "gigadrain", "hiddenpowerground", "hiddenpowerrock", "quiverdance"], + "abilities": ["Anticipation", "Overcoat"] + }, + { + "role": "Wallbreaker", + "movepool": ["bugbuzz", "hiddenpowerground", "hiddenpowerrock", "leafstorm", "psychic"], + "abilities": ["Anticipation", "Overcoat"] + }, + { + "role": "Staller", + "movepool": ["gigadrain", "hiddenpowerground", "protect", "toxic"], + "abilities": ["Anticipation", "Overcoat"] } ] }, "wormadamsandy": { - "level": 88, + "level": 90, "sets": [ { "role": "Staller", - "movepool": ["earthquake", "protect", "stealthrock", "toxic"] + "movepool": ["earthquake", "infestation", "protect", "stealthrock", "toxic"], + "abilities": ["Overcoat"] } ] }, "wormadamtrash": { - "level": 87, + "level": 86, "sets": [ { "role": "Staller", - "movepool": ["flashcannon", "protect", "stealthrock", "toxic"] + "movepool": ["flashcannon", "infestation", "protect", "stealthrock", "toxic"], + "abilities": ["Overcoat"] } ] }, "mothim": { - "level": 93, + "level": 94, "sets": [ { "role": "Setup Sweeper", - "movepool": ["airslash", "bugbuzz", "energyball", "quiverdance"] + "movepool": ["airslash", "bugbuzz", "energyball", "quiverdance"], + "abilities": ["Tinted Lens"] + }, + { + "role": "Z-Move user", + "movepool": ["airslash", "bugbuzz", "energyball", "quiverdance"], + "abilities": ["Tinted Lens"], + "preferredTypes": ["Bug"] } ] }, "vespiquen": { - "level": 95, + "level": 100, "sets": [ { "role": "Staller", - "movepool": ["airslash", "defog", "roost", "toxic", "uturn"] + "movepool": ["airslash", "defog", "roost", "toxic", "uturn"], + "abilities": ["Pressure"] } ] }, "pachirisu": { - "level": 92, + "level": 95, "sets": [ { "role": "Bulky Support", - "movepool": ["nuzzle", "superfang", "thunderbolt", "toxic", "uturn"] + "movepool": ["nuzzle", "superfang", "thunderbolt", "toxic", "uturn"], + "abilities": ["Volt Absorb"] } ] }, @@ -3042,22 +3599,36 @@ "sets": [ { "role": "Setup Sweeper", - "movepool": ["aquajet", "bulkup", "icepunch", "liquidation", "lowkick", "substitute", "taunt"], + "movepool": ["bulkup", "icepunch", "liquidation", "lowkick", "substitute"], + "abilities": ["Water Veil"], "preferredTypes": ["Ice"] }, { "role": "Fast Attacker", "movepool": ["aquajet", "crunch", "icepunch", "liquidation", "lowkick"], + "abilities": ["Water Veil"], + "preferredTypes": ["Ice"] + }, + { + "role": "Z-Move user", + "movepool": ["bulkup", "icepunch", "liquidation", "lowkick"], + "abilities": ["Water Veil"], "preferredTypes": ["Fighting"] } ] }, "cherrim": { - "level": 95, + "level": 99, "sets": [ { - "role": "Fast Attacker", - "movepool": ["dazzlinggleam", "energyball", "healingwish", "hiddenpowerfire", "hiddenpowerground", "hiddenpowerrock", "synthesis"] + "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"] } ] }, @@ -3066,16 +3637,18 @@ "sets": [ { "role": "Bulky Attacker", - "movepool": ["clearsmog", "earthquake", "icebeam", "recover", "scald", "toxic"] + "movepool": ["clearsmog", "earthquake", "icebeam", "recover", "scald", "toxic"], + "abilities": ["Storm Drain"] } ] }, "ambipom": { - "level": 86, + "level": 85, "sets": [ { "role": "Fast Attacker", - "movepool": ["fakeout", "knockoff", "lowkick", "return", "seedbomb", "switcheroo", "uturn"], + "movepool": ["fakeout", "knockoff", "lowkick", "return", "uturn"], + "abilities": ["Technician"], "preferredTypes": ["Dark"] } ] @@ -3085,30 +3658,39 @@ "sets": [ { "role": "Fast Support", - "movepool": ["acrobatics", "defog", "destinybond", "shadowball", "substitute", "willowisp"] + "movepool": ["acrobatics", "defog", "destinybond", "shadowball", "substitute", "willowisp"], + "abilities": ["Unburden"] }, { "role": "Bulky Support", - "movepool": ["acrobatics", "hex", "substitute", "willowisp"] + "movepool": ["acrobatics", "hex", "substitute", "willowisp"], + "abilities": ["Unburden"] } ] }, "lopunny": { - "level": 88, + "level": 87, "sets": [ { "role": "Wallbreaker", - "movepool": ["healingwish", "highjumpkick", "icepunch", "return", "switcheroo"] + "movepool": ["brutalswing", "healingwish", "highjumpkick", "return", "switcheroo"], + "abilities": ["Limber"] + }, + { + "role": "Z-Move user", + "movepool": ["brutalswing", "highjumpkick", "return", "splash"], + "abilities": ["Limber"], + "preferredTypes": ["Normal"] } ] }, "lopunnymega": { - "level": 78, + "level": 77, "sets": [ { "role": "Fast Attacker", - "movepool": ["fakeout", "highjumpkick", "icepunch", "poweruppunch", "return", "substitute"], - "preferredTypes": ["Normal"] + "movepool": ["encore", "fakeout", "highjumpkick", "poweruppunch", "return", "substitute"], + "abilities": ["Limber"] } ] }, @@ -3117,11 +3699,14 @@ "sets": [ { "role": "Bulky Attacker", - "movepool": ["dazzlinggleam", "painsplit", "shadowball", "taunt", "willowisp"] + "movepool": ["dazzlinggleam", "painsplit", "shadowball", "taunt", "willowisp"], + "abilities": ["Levitate"] }, { "role": "Wallbreaker", - "movepool": ["dazzlinggleam", "mysticalfire", "nastyplot", "shadowball", "thunderbolt", "trick"] + "movepool": ["dazzlinggleam", "mysticalfire", "nastyplot", "shadowball", "thunderbolt", "trick"], + "abilities": ["Levitate"], + "preferredTypes": ["Fairy"] } ] }, @@ -3130,16 +3715,18 @@ "sets": [ { "role": "Wallbreaker", - "movepool": ["bravebird", "heatwave", "pursuit", "roost", "suckerpunch", "superpower"] + "movepool": ["bravebird", "heatwave", "pursuit", "roost", "suckerpunch", "superpower"], + "abilities": ["Moxie"] } ] }, "purugly": { - "level": 87, + "level": 90, "sets": [ { "role": "Fast Attacker", - "movepool": ["fakeout", "knockoff", "quickattack", "return", "stompingtantrum", "suckerpunch", "uturn"], + "movepool": ["fakeout", "knockoff", "return", "stompingtantrum", "uturn"], + "abilities": ["Defiant", "Thick Fat"], "preferredTypes": ["Dark"] } ] @@ -3149,7 +3736,8 @@ "sets": [ { "role": "Bulky Attacker", - "movepool": ["crunch", "defog", "fireblast", "poisonjab", "pursuit", "suckerpunch", "taunt"] + "movepool": ["crunch", "defog", "fireblast", "poisonjab", "pursuit", "suckerpunch", "taunt"], + "abilities": ["Aftermath"] } ] }, @@ -3158,24 +3746,30 @@ "sets": [ { "role": "Bulky Support", - "movepool": ["earthquake", "ironhead", "lightscreen", "psychic", "reflect", "stealthrock", "toxic"] + "movepool": ["earthquake", "ironhead", "psychic", "stealthrock", "toxic"], + "abilities": ["Levitate"], + "preferredTypes": ["Ground"] }, { "role": "Staller", - "movepool": ["earthquake", "ironhead", "protect", "psychic", "toxic"] + "movepool": ["earthquake", "ironhead", "protect", "psychic", "toxic"], + "abilities": ["Levitate"], + "preferredTypes": ["Ground"] } ] }, "chatot": { - "level": 88, + "level": 89, "sets": [ { "role": "Wallbreaker", - "movepool": ["boomburst", "chatter", "heatwave", "hiddenpowerground", "uturn"] + "movepool": ["boomburst", "chatter", "heatwave", "hiddenpowerground", "uturn"], + "abilities": ["Tangled Feet"] }, { "role": "Setup Sweeper", - "movepool": ["boomburst", "chatter", "heatwave", "nastyplot", "substitute"] + "movepool": ["boomburst", "chatter", "heatwave", "nastyplot", "substitute"], + "abilities": ["Tangled Feet"] } ] }, @@ -3184,42 +3778,49 @@ "sets": [ { "role": "Bulky Setup", - "movepool": ["calmmind", "darkpulse", "rest", "sleeptalk"] + "movepool": ["calmmind", "darkpulse", "rest", "sleeptalk"], + "abilities": ["Infiltrator"] }, { "role": "Bulky Attacker", - "movepool": ["foulplay", "painsplit", "pursuit", "shadowsneak", "suckerpunch", "willowisp"] + "movepool": ["foulplay", "painsplit", "pursuit", "suckerpunch", "toxic", "willowisp"], + "abilities": ["Infiltrator"] } ] }, "garchomp": { - "level": 77, + "level": 75, "sets": [ { "role": "Fast Support", - "movepool": ["dragonclaw", "earthquake", "fireblast", "outrage", "stealthrock", "stoneedge", "toxic"] + "movepool": ["dragonclaw", "earthquake", "fireblast", "outrage", "stealthrock", "stoneedge", "toxic"], + "abilities": ["Rough Skin"] }, { "role": "Setup Sweeper", - "movepool": ["earthquake", "firefang", "outrage", "stoneedge", "swordsdance"] + "movepool": ["earthquake", "firefang", "outrage", "stoneedge", "swordsdance"], + "abilities": ["Rough Skin"] }, { "role": "Z-Move user", "movepool": ["earthquake", "firefang", "outrage", "stoneedge", "swordsdance"], + "abilities": ["Rough Skin"], "preferredTypes": ["Dragon"] } ] }, "garchompmega": { - "level": 78, + "level": 77, "sets": [ { "role": "Bulky Support", - "movepool": ["dracometeor", "earthquake", "fireblast", "stealthrock", "stoneedge"] + "movepool": ["dracometeor", "earthquake", "fireblast", "stealthrock", "stoneedge"], + "abilities": ["Rough Skin"] }, { "role": "Setup Sweeper", - "movepool": ["earthquake", "firefang", "outrage", "stoneedge", "swordsdance"] + "movepool": ["earthquake", "firefang", "outrage", "stoneedge", "swordsdance"], + "abilities": ["Rough Skin"] } ] }, @@ -3229,24 +3830,28 @@ { "role": "Fast Attacker", "movepool": ["closecombat", "crunch", "extremespeed", "meteormash", "swordsdance"], + "abilities": ["Justified"], "preferredTypes": ["Normal"] }, { "role": "Setup Sweeper", - "movepool": ["aurasphere", "darkpulse", "flashcannon", "nastyplot", "vacuumwave"] + "movepool": ["aurasphere", "flashcannon", "nastyplot", "vacuumwave"], + "abilities": ["Inner Focus"] } ] }, "lucariomega": { - "level": 76, + "level": 75, "sets": [ { "role": "Bulky Setup", - "movepool": ["closecombat", "extremespeed", "icepunch", "meteormash", "swordsdance"] + "movepool": ["closecombat", "extremespeed", "meteormash", "swordsdance"], + "abilities": ["Justified"] }, { "role": "Setup Sweeper", - "movepool": ["aurasphere", "flashcannon", "nastyplot", "vacuumwave"] + "movepool": ["aurasphere", "flashcannon", "nastyplot", "vacuumwave"], + "abilities": ["Justified"] } ] }, @@ -3255,21 +3860,24 @@ "sets": [ { "role": "Bulky Support", - "movepool": ["earthquake", "slackoff", "stealthrock", "stoneedge", "toxic", "whirlwind"] + "movepool": ["earthquake", "slackoff", "stealthrock", "stoneedge", "toxic", "whirlwind"], + "abilities": ["Sand Stream"] } ] }, "drapion": { - "level": 84, + "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"] + "movepool": ["earthquake", "knockoff", "poisonjab", "taunt", "toxicspikes", "whirlwind"], + "abilities": ["Battle Armor"] } ] }, @@ -3278,25 +3886,28 @@ "sets": [ { "role": "Setup Sweeper", - "movepool": ["drainpunch", "gunkshot", "icepunch", "substitute", "suckerpunch", "swordsdance"] + "movepool": ["drainpunch", "earthquake", "gunkshot", "knockoff", "substitute", "suckerpunch", "swordsdance"], + "abilities": ["Dry Skin"] } ] }, "carnivine": { - "level": 96, + "level": 99, "sets": [ { "role": "Bulky Support", - "movepool": ["defog", "knockoff", "powerwhip", "sleeppowder", "synthesis", "toxic"] + "movepool": ["defog", "knockoff", "powerwhip", "sleeppowder", "synthesis", "toxic"], + "abilities": ["Levitate"] } ] }, "lumineon": { - "level": 88, + "level": 91, "sets": [ { "role": "Bulky Support", - "movepool": ["defog", "icebeam", "scald", "toxic", "uturn"] + "movepool": ["defog", "icebeam", "scald", "toxic", "uturn"], + "abilities": ["Storm Drain"] } ] }, @@ -3305,17 +3916,20 @@ "sets": [ { "role": "Bulky Attacker", - "movepool": ["blizzard", "earthquake", "focusblast", "gigadrain", "iceshard", "woodhammer"], - "preferredTypes": ["Grass"] + "movepool": ["blizzard", "earthquake", "gigadrain", "iceshard", "woodhammer"], + "abilities": ["Snow Warning"], + "preferredTypes": ["Ground"] } ] }, "abomasnowmega": { - "level": 86, + "level": 84, "sets": [ { "role": "Bulky Attacker", - "movepool": ["blizzard", "earthquake", "focusblast", "gigadrain", "iceshard", "woodhammer"] + "movepool": ["blizzard", "earthquake", "gigadrain", "iceshard", "woodhammer"], + "abilities": ["Snow Warning"], + "preferredTypes": ["Ground"] } ] }, @@ -3324,34 +3938,44 @@ "sets": [ { "role": "Fast Attacker", - "movepool": ["iceshard", "iciclecrash", "knockoff", "lowkick", "pursuit", "swordsdance"] + "movepool": ["iceshard", "iciclecrash", "knockoff", "lowkick", "pursuit", "swordsdance"], + "abilities": ["Pickpocket"] } ] }, "magnezone": { - "level": 83, + "level": 84, "sets": [ { "role": "Fast Attacker", - "movepool": ["flashcannon", "hiddenpowerfire", "hiddenpowerice", "thunderbolt", "voltswitch"] + "movepool": ["flashcannon", "hiddenpowerground", "thunderbolt", "voltswitch"], + "abilities": ["Magnet Pull"] + }, + { + "role": "Staller", + "movepool": ["flashcannon", "protect", "thunderbolt", "toxic"], + "abilities": ["Analytic"] } ] }, "lickilicky": { - "level": 88, + "level": 89, "sets": [ { "role": "Bulky Support", - "movepool": ["bodyslam", "healbell", "knockoff", "protect", "wish"] + "movepool": ["bodyslam", "healbell", "knockoff", "protect", "wish"], + "abilities": ["Cloud Nine"] }, { "role": "AV Pivot", "movepool": ["bodyslam", "dragontail", "earthquake", "explosion", "knockoff", "powerwhip"], + "abilities": ["Cloud Nine"], "preferredTypes": ["Ground"] }, { "role": "Bulky Setup", "movepool": ["bodyslam", "earthquake", "explosion", "knockoff", "powerwhip", "return", "swordsdance"], + "abilities": ["Cloud Nine"], "preferredTypes": ["Dark"] } ] @@ -3361,43 +3985,49 @@ "sets": [ { "role": "Bulky Attacker", - "movepool": ["dragontail", "earthquake", "icepunch", "megahorn", "stoneedge"] + "movepool": ["dragontail", "earthquake", "icepunch", "megahorn", "stoneedge"], + "abilities": ["Solid Rock"] }, { "role": "Bulky Setup", - "movepool": ["earthquake", "icepunch", "megahorn", "rockpolish", "stoneedge"] + "movepool": ["earthquake", "icepunch", "megahorn", "rockpolish", "stoneedge"], + "abilities": ["Solid Rock"] } ] }, "tangrowth": { - "level": 88, + "level": 89, "sets": [ { "role": "Bulky Attacker", - "movepool": ["earthquake", "hiddenpowerfire", "knockoff", "leafstorm", "leechseed", "powerwhip", "rockslide", "sleeppowder", "synthesis"] + "movepool": ["earthquake", "knockoff", "leafstorm", "leechseed", "morningsun", "powerwhip", "rockslide", "sleeppowder", "sludgebomb"], + "abilities": ["Regenerator"] }, { "role": "AV Pivot", - "movepool": ["earthquake", "gigadrain", "knockoff", "powerwhip", "rockslide", "sludgebomb"] + "movepool": ["earthquake", "gigadrain", "knockoff", "powerwhip", "rockslide", "sludgebomb"], + "abilities": ["Regenerator"] } ] }, "electivire": { - "level": 85, + "level": 86, "sets": [ { "role": "Fast Attacker", "movepool": ["crosschop", "earthquake", "flamethrower", "icepunch", "voltswitch", "wildcharge"], + "abilities": ["Motor Drive"], "preferredTypes": ["Ice"] } ] }, "magmortar": { - "level": 87, + "level": 88, "sets": [ { "role": "Bulky Attacker", - "movepool": ["earthquake", "fireblast", "focusblast", "hiddenpowergrass", "hiddenpowerice", "substitute", "thunderbolt"], + "movepool": ["earthquake", "fireblast", "focusblast", "hiddenpowerice", "taunt", "thunderbolt"], + "abilities": ["Flame Body"], "preferredTypes": ["Electric"] } ] @@ -3407,98 +4037,110 @@ "sets": [ { "role": "Bulky Setup", - "movepool": ["airslash", "aurasphere", "nastyplot", "roost", "thunderwave"] + "movepool": ["airslash", "aurasphere", "nastyplot", "roost", "thunderwave"], + "abilities": ["Serene Grace"] }, { "role": "Bulky Attacker", - "movepool": ["airslash", "defog", "healbell", "roost", "thunderwave"] + "movepool": ["airslash", "defog", "healbell", "roost", "thunderwave"], + "abilities": ["Serene Grace"] }, { "role": "Fast Attacker", - "movepool": ["airslash", "aurasphere", "dazzlinggleam", "trick"] + "movepool": ["airslash", "aurasphere", "dazzlinggleam", "trick"], + "abilities": ["Serene Grace"] } ] }, "yanmega": { - "level": 84, + "level": 83, "sets": [ { "role": "Fast Attacker", - "movepool": ["airslash", "bugbuzz", "gigadrain", "protect"] + "movepool": ["airslash", "bugbuzz", "hiddenpowerground", "protect"], + "abilities": ["Speed Boost"] }, { "role": "Wallbreaker", - "movepool": ["airslash", "bugbuzz", "gigadrain", "uturn"] + "movepool": ["airslash", "bugbuzz", "gigadrain", "uturn"], + "abilities": ["Tinted Lens"] } ] }, "leafeon": { "level": 88, "sets": [ - { - "role": "Bulky Attacker", - "movepool": ["healbell", "knockoff", "leafblade", "synthesis", "toxic"] - }, { "role": "Setup Sweeper", "movepool": ["doubleedge", "knockoff", "leafblade", "swordsdance", "synthesis", "xscissor"], + "abilities": ["Chlorophyll"], "preferredTypes": ["Dark"] } ] }, "glaceon": { - "level": 89, + "level": 91, "sets": [ { "role": "Bulky Support", - "movepool": ["healbell", "hiddenpowerground", "icebeam", "protect", "wish"] + "movepool": ["healbell", "hiddenpowerground", "icebeam", "protect", "wish"], + "abilities": ["Ice Body"] }, { "role": "Staller", - "movepool": ["icebeam", "protect", "toxic", "wish"] + "movepool": ["icebeam", "protect", "toxic", "wish"], + "abilities": ["Ice Body"] + }, + { + "role": "Z-Move user", + "movepool": ["celebrate", "hiddenpowerground", "icebeam", "storedpower"], + "abilities": ["Ice Body"], + "preferredTypes": ["Normal"] } ] }, "gliscor": { - "level": 80, + "level": 78, "sets": [ { - "role": "Staller", - "movepool": ["earthquake", "protect", "substitute", "toxic"] + "role": "Bulky Support", + "movepool": ["earthquake", "protect", "substitute", "toxic"], + "abilities": ["Poison Heal"] }, { - "role": "Bulky Support", - "movepool": ["earthquake", "knockoff", "roost", "stealthrock", "taunt", "toxic", "uturn"] + "role": "Staller", + "movepool": ["defog", "earthquake", "knockoff", "roost", "stealthrock", "taunt", "toxic", "uturn"], + "abilities": ["Poison Heal"] }, { "role": "Setup Sweeper", - "movepool": ["earthquake", "facade", "knockoff", "roost", "swordsdance"] + "movepool": ["earthquake", "facade", "roost", "swordsdance"], + "abilities": ["Poison Heal"] } ] }, "mamoswine": { - "level": 81, + "level": 80, "sets": [ { "role": "Wallbreaker", - "movepool": ["earthquake", "iceshard", "iciclecrash", "stealthrock"] - }, - { - "role": "Fast Attacker", - "movepool": ["earthquake", "iceshard", "iciclecrash", "knockoff", "superpower"] + "movepool": ["earthquake", "iceshard", "iciclecrash", "knockoff", "stealthrock"], + "abilities": ["Thick Fat"] } ] }, "porygonz": { - "level": 82, + "level": 81, "sets": [ { "role": "Fast Attacker", - "movepool": ["icebeam", "nastyplot", "shadowball", "thunderbolt", "triattack", "trick"] + "movepool": ["icebeam", "nastyplot", "shadowball", "thunderbolt", "triattack", "trick"], + "abilities": ["Adaptability", "Download"] }, { "role": "Z-Move user", "movepool": ["conversion", "icebeam", "recover", "shadowball", "thunderbolt"], + "abilities": ["Adaptability"], "preferredTypes": ["Normal"] } ] @@ -3509,6 +4151,7 @@ { "role": "Fast Attacker", "movepool": ["closecombat", "icepunch", "knockoff", "shadowsneak", "swordsdance", "zenheadbutt"], + "abilities": ["Justified"], "preferredTypes": ["Dark"] } ] @@ -3518,34 +4161,50 @@ "sets": [ { "role": "Setup Sweeper", - "movepool": ["closecombat", "knockoff", "swordsdance", "zenheadbutt"] + "movepool": ["closecombat", "knockoff", "swordsdance", "zenheadbutt"], + "abilities": ["Justified"] } ] }, "probopass": { - "level": 88, + "level": 90, "sets": [ { "role": "Bulky Attacker", - "movepool": ["earthpower", "flashcannon", "stealthrock", "thunderwave", "toxic", "voltswitch"] + "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": 88, + "level": 89, "sets": [ { - "role": "Bulky Support", - "movepool": ["earthquake", "haze", "icepunch", "painsplit", "shadowsneak", "willowisp"] + "role": "Bulky Attacker", + "movepool": ["earthquake", "haze", "icepunch", "painsplit", "shadowsneak", "toxic", "willowisp"], + "abilities": ["Frisk", "Pressure"], + "preferredTypes": ["Ground"] + }, + { + "role": "Staller", + "movepool": ["earthquake", "protect", "shadowsneak", "toxic"], + "abilities": ["Frisk", "Pressure"] } ] }, "froslass": { - "level": 85, + "level": 87, "sets": [ { "role": "Fast Support", - "movepool": ["destinybond", "icebeam", "shadowball", "spikes", "taunt", "thunderwave", "willowisp"] + "movepool": ["destinybond", "icebeam", "shadowball", "spikes", "taunt", "thunderwave", "willowisp"], + "abilities": ["Cursed Body"] } ] }, @@ -3554,16 +4213,18 @@ "sets": [ { "role": "Fast Support", - "movepool": ["defog", "hiddenpowerice", "painsplit", "shadowball", "thunderbolt", "trick", "voltswitch", "willowisp"] + "movepool": ["defog", "hiddenpowerice", "painsplit", "shadowball", "thunderbolt", "trick", "voltswitch", "willowisp"], + "abilities": ["Levitate"] } ] }, "rotomheat": { - "level": 83, + "level": 84, "sets": [ { "role": "Bulky Attacker", - "movepool": ["hiddenpowerice", "overheat", "painsplit", "thunderbolt", "voltswitch", "willowisp"] + "movepool": ["hiddenpowerice", "overheat", "painsplit", "thunderbolt", "voltswitch", "willowisp"], + "abilities": ["Levitate"] } ] }, @@ -3572,7 +4233,8 @@ "sets": [ { "role": "Bulky Attacker", - "movepool": ["defog", "hydropump", "painsplit", "thunderbolt", "trick", "voltswitch", "willowisp"] + "movepool": ["defog", "hydropump", "painsplit", "thunderbolt", "trick", "voltswitch", "willowisp"], + "abilities": ["Levitate"] } ] }, @@ -3581,11 +4243,13 @@ "sets": [ { "role": "Bulky Attacker", - "movepool": ["blizzard", "painsplit", "thunderbolt", "trick", "voltswitch", "willowisp"] + "movepool": ["blizzard", "painsplit", "thunderbolt", "trick", "voltswitch", "willowisp"], + "abilities": ["Levitate"] }, { "role": "Z-Move user", "movepool": ["blizzard", "painsplit", "thunderbolt", "voltswitch", "willowisp"], + "abilities": ["Levitate"], "preferredTypes": ["Ice"] } ] @@ -3595,7 +4259,8 @@ "sets": [ { "role": "Bulky Support", - "movepool": ["airslash", "defog", "painsplit", "thunderbolt", "voltswitch", "willowisp"] + "movepool": ["airslash", "defog", "painsplit", "thunderbolt", "voltswitch", "willowisp"], + "abilities": ["Levitate"] } ] }, @@ -3604,16 +4269,18 @@ "sets": [ { "role": "Fast Support", - "movepool": ["defog", "hiddenpowerfire", "hiddenpowerice", "leafstorm", "thunderbolt", "trick", "voltswitch", "willowisp"] + "movepool": ["defog", "hiddenpowerice", "leafstorm", "thunderbolt", "trick", "voltswitch", "willowisp"], + "abilities": ["Levitate"] } ] }, "uxie": { - "level": 84, + "level": 82, "sets": [ { "role": "Bulky Support", - "movepool": ["healbell", "knockoff", "psychic", "stealthrock", "thunderwave", "toxic", "uturn", "yawn"] + "movepool": ["healbell", "knockoff", "psychic", "stealthrock", "thunderwave", "toxic", "uturn", "yawn"], + "abilities": ["Levitate"] } ] }, @@ -3622,11 +4289,14 @@ "sets": [ { "role": "Fast Attacker", - "movepool": ["calmmind", "energyball", "healingwish", "hiddenpowerfire", "icebeam", "psychic", "psyshock", "signalbeam", "thunderbolt", "uturn"] + "movepool": ["calmmind", "healingwish", "hiddenpowerfire", "psychic", "psyshock", "signalbeam", "thunderbolt", "uturn"], + "abilities": ["Levitate"], + "preferredTypes": ["Bug"] }, { "role": "Bulky Support", - "movepool": ["knockoff", "psychic", "stealthrock", "thunderwave", "toxic", "uturn"] + "movepool": ["knockoff", "psychic", "stealthrock", "thunderwave", "toxic", "uturn"], + "abilities": ["Levitate"] } ] }, @@ -3635,29 +4305,34 @@ "sets": [ { "role": "Fast Attacker", - "movepool": ["dazzlinggleam", "fireblast", "nastyplot", "psychic", "psyshock", "uturn"] + "movepool": ["dazzlinggleam", "fireblast", "nastyplot", "psychic", "psyshock", "uturn"], + "abilities": ["Levitate"] }, { "role": "Fast Support", - "movepool": ["explosion", "fireblast", "knockoff", "psychic", "stealthrock", "taunt", "uturn"] + "movepool": ["explosion", "fireblast", "knockoff", "psychic", "stealthrock", "taunt", "uturn"], + "abilities": ["Levitate"] } ] }, "dialga": { - "level": 75, + "level": 74, "sets": [ { "role": "Bulky Attacker", - "movepool": ["dracometeor", "dragontail", "fireblast", "flashcannon", "stealthrock", "thunderbolt", "toxic"] + "movepool": ["dracometeor", "dragontail", "fireblast", "flashcannon", "stealthrock", "thunderbolt", "toxic"], + "abilities": ["Pressure"], + "preferredTypes": ["Fire"] } ] }, "palkia": { - "level": 76, + "level": 75, "sets": [ { "role": "Bulky Attacker", "movepool": ["dracometeor", "fireblast", "hydropump", "spacialrend", "thunderwave"], + "abilities": ["Pressure"], "preferredTypes": ["Fire"] } ] @@ -3667,11 +4342,13 @@ "sets": [ { "role": "Bulky Attacker", - "movepool": ["earthpower", "flashcannon", "lavaplume", "magmastorm", "stealthrock", "taunt", "toxic"] + "movepool": ["earthpower", "flashcannon", "lavaplume", "magmastorm", "stealthrock", "taunt", "toxic"], + "abilities": ["Flash Fire"] }, { "role": "Staller", - "movepool": ["earthpower", "magmastorm", "protect", "toxic"] + "movepool": ["earthpower", "magmastorm", "protect", "toxic"], + "abilities": ["Flash Fire"] } ] }, @@ -3679,21 +4356,25 @@ "level": 86, "sets": [ { - "role": "Bulky Support", - "movepool": ["confuseray", "drainpunch", "knockoff", "return", "substitute", "thunderwave"] + "role": "Bulky Attacker", + "movepool": ["drainpunch", "knockoff", "return", "substitute", "thunderwave"], + "abilities": ["Slow Start"], + "preferredTypes": ["Dark"] } ] }, "giratinaorigin": { - "level": 76, + "level": 74, "sets": [ { "role": "Bulky Attacker", - "movepool": ["dracometeor", "hex", "shadowsneak", "thunderwave", "willowisp"] + "movepool": ["dracometeor", "hex", "shadowsneak", "thunderwave", "willowisp"], + "abilities": ["Levitate"] }, { "role": "Fast Attacker", - "movepool": ["defog", "dracometeor", "earthquake", "outrage", "shadowball", "shadowsneak", "willowisp"] + "movepool": ["defog", "dracometeor", "earthquake", "outrage", "shadowball", "shadowsneak", "willowisp"], + "abilities": ["Levitate"] } ] }, @@ -3702,15 +4383,18 @@ "sets": [ { "role": "Fast Support", - "movepool": ["dragontail", "rest", "shadowball", "sleeptalk", "willowisp"] + "movepool": ["dragontail", "rest", "shadowball", "sleeptalk", "willowisp"], + "abilities": ["Pressure"] }, { "role": "Bulky Setup", - "movepool": ["calmmind", "dragonpulse", "rest", "sleeptalk"] + "movepool": ["calmmind", "dragonpulse", "rest", "sleeptalk"], + "abilities": ["Pressure"] }, { "role": "Bulky Support", - "movepool": ["defog", "dragontail", "rest", "shadowball", "willowisp"] + "movepool": ["defog", "dragontail", "rest", "shadowball", "willowisp"], + "abilities": ["Pressure"] } ] }, @@ -3719,33 +4403,38 @@ "sets": [ { "role": "Bulky Setup", - "movepool": ["calmmind", "moonblast", "moonlight", "psyshock", "substitute"] + "movepool": ["calmmind", "moonblast", "moonlight", "psyshock"], + "abilities": ["Levitate"] }, { "role": "Bulky Support", - "movepool": ["moonblast", "moonlight", "psychic", "thunderwave", "toxic"] + "movepool": ["moonblast", "moonlight", "psychic", "thunderwave", "toxic"], + "abilities": ["Levitate"] } ] }, "phione": { - "level": 89, + "level": 91, "sets": [ { "role": "Bulky Support", - "movepool": ["healbell", "icebeam", "knockoff", "scald", "toxic", "uturn"] + "movepool": ["healbell", "icebeam", "knockoff", "scald", "toxic", "uturn"], + "abilities": ["Hydration"] } ] }, "manaphy": { - "level": 78, + "level": 77, "sets": [ { "role": "Bulky Setup", - "movepool": ["energyball", "icebeam", "surf", "tailglow"] + "movepool": ["energyball", "icebeam", "surf", "tailglow"], + "abilities": ["Hydration"] }, { "role": "Z-Move user", "movepool": ["energyball", "icebeam", "surf", "tailglow"], + "abilities": ["Hydration"], "preferredTypes": ["Water"] } ] @@ -3756,11 +4445,13 @@ { "role": "Z-Move user", "movepool": ["darkpulse", "focusblast", "hypnosis", "nastyplot", "sludgebomb"], + "abilities": ["Bad Dreams"], "preferredTypes": ["Dark"] }, { "role": "Setup Sweeper", "movepool": ["darkpulse", "focusblast", "hypnosis", "nastyplot", "sludgebomb", "substitute"], + "abilities": ["Bad Dreams"], "preferredTypes": ["Poison"] } ] @@ -3770,17 +4461,19 @@ "sets": [ { "role": "Fast Support", - "movepool": ["airslash", "earthpower", "leechseed", "rest", "seedflare", "substitute"], + "movepool": ["airslash", "earthpower", "leechseed", "seedflare", "substitute", "synthesis"], + "abilities": ["Natural Cure"], "preferredTypes": ["Flying"] } ] }, "shayminsky": { - "level": 75, + "level": 73, "sets": [ { "role": "Fast Attacker", - "movepool": ["airslash", "earthpower", "hiddenpowerice", "leechseed", "seedflare", "substitute"] + "movepool": ["airslash", "earthpower", "hiddenpowerice", "leechseed", "seedflare", "substitute"], + "abilities": ["Serene Grace"] } ] }, @@ -3789,7 +4482,8 @@ "sets": [ { "role": "Setup Sweeper", - "movepool": ["earthquake", "extremespeed", "recover", "shadowclaw", "swordsdance"] + "movepool": ["earthquake", "extremespeed", "recover", "shadowclaw", "swordsdance"], + "abilities": ["Multitype"] } ] }, @@ -3798,11 +4492,13 @@ "sets": [ { "role": "Bulky Setup", - "movepool": ["calmmind", "earthpower", "fireblast", "judgment", "recover"] + "movepool": ["calmmind", "earthpower", "fireblast", "judgment", "recover"], + "abilities": ["Multitype"] }, { "role": "Setup Sweeper", - "movepool": ["calmmind", "earthpower", "icebeam", "judgment"] + "movepool": ["calmmind", "earthpower", "icebeam", "judgment"], + "abilities": ["Multitype"] } ] }, @@ -3811,7 +4507,8 @@ "sets": [ { "role": "Bulky Attacker", - "movepool": ["calmmind", "defog", "fireblast", "judgment", "recover", "sludgebomb", "toxic", "willowisp"] + "movepool": ["calmmind", "defog", "fireblast", "judgment", "recover", "sludgebomb", "toxic", "willowisp"], + "abilities": ["Multitype"] } ] }, @@ -3820,11 +4517,13 @@ "sets": [ { "role": "Bulky Support", - "movepool": ["defog", "earthquake", "fireblast", "judgment", "recover", "willowisp"] + "movepool": ["defog", "earthquake", "fireblast", "judgment", "recover", "willowisp"], + "abilities": ["Multitype"] }, { "role": "Z-Move user", "movepool": ["earthquake", "extremespeed", "outrage", "recover", "swordsdance"], + "abilities": ["Multitype"], "preferredTypes": ["Ground"] } ] @@ -3834,7 +4533,8 @@ "sets": [ { "role": "Setup Sweeper", - "movepool": ["calmmind", "icebeam", "judgment", "recover"] + "movepool": ["calmmind", "icebeam", "judgment", "recover"], + "abilities": ["Multitype"] } ] }, @@ -3843,11 +4543,13 @@ "sets": [ { "role": "Bulky Attacker", - "movepool": ["defog", "earthquake", "judgment", "recover", "toxic", "willowisp"] + "movepool": ["defog", "earthquake", "judgment", "recover", "toxic", "willowisp"], + "abilities": ["Multitype"] }, { "role": "Bulky Setup", - "movepool": ["calmmind", "earthpower", "judgment", "recover"] + "movepool": ["calmmind", "earthpower", "judgment", "recover"], + "abilities": ["Multitype"] } ] }, @@ -3856,7 +4558,8 @@ "sets": [ { "role": "Bulky Setup", - "movepool": ["calmmind", "icebeam", "judgment", "recover", "shadowball"] + "movepool": ["calmmind", "icebeam", "judgment", "recover", "shadowball"], + "abilities": ["Multitype"] } ] }, @@ -3864,12 +4567,14 @@ "level": 72, "sets": [ { - "role": "Setup Sweeper", - "movepool": ["calmmind", "earthpower", "icebeam", "judgment", "recover", "thunderbolt"] + "role": "Bulky Setup", + "movepool": ["calmmind", "earthpower", "energyball", "judgment", "recover"], + "abilities": ["Multitype"] }, { "role": "Z-Move user", - "movepool": ["calmmind", "earthpower", "fireblast", "icebeam", "recover", "thunderbolt"] + "movepool": ["calmmind", "earthpower", "energyball", "fireblast", "recover"], + "abilities": ["Multitype"] } ] }, @@ -3878,11 +4583,13 @@ "sets": [ { "role": "Bulky Setup", - "movepool": ["calmmind", "earthpower", "judgment", "recover"] + "movepool": ["calmmind", "earthpower", "judgment", "recover"], + "abilities": ["Multitype"] }, { "role": "Bulky Attacker", - "movepool": ["defog", "earthquake", "judgment", "recover", "toxic", "willowisp"] + "movepool": ["defog", "earthquake", "judgment", "recover", "toxic", "willowisp"], + "abilities": ["Multitype"] } ] }, @@ -3891,11 +4598,13 @@ "sets": [ { "role": "Bulky Attacker", - "movepool": ["calmmind", "defog", "focusblast", "judgment", "recover", "toxic", "willowisp"] + "movepool": ["calmmind", "defog", "focusblast", "judgment", "recover", "toxic", "willowisp"], + "abilities": ["Multitype"] }, { "role": "Z-Move user", - "movepool": ["brickbreak", "extremespeed", "shadowforce", "swordsdance"] + "movepool": ["brickbreak", "extremespeed", "shadowforce", "swordsdance"], + "abilities": ["Multitype"] } ] }, @@ -3904,11 +4613,13 @@ "sets": [ { "role": "Bulky Setup", - "movepool": ["calmmind", "fireblast", "judgment", "recover"] + "movepool": ["calmmind", "fireblast", "judgment", "recover"], + "abilities": ["Multitype"] }, { "role": "Setup Sweeper", - "movepool": ["calmmind", "earthpower", "icebeam", "judgment"] + "movepool": ["calmmind", "earthpower", "icebeam", "judgment"], + "abilities": ["Multitype"] } ] }, @@ -3918,11 +4629,13 @@ { "role": "Z-Move user", "movepool": ["earthquake", "extremespeed", "recover", "stoneedge", "swordsdance"], + "abilities": ["Multitype"], "preferredTypes": ["Rock"] }, { "role": "Bulky Attacker", - "movepool": ["calmmind", "icebeam", "judgment", "recover", "toxic"] + "movepool": ["calmmind", "icebeam", "judgment", "recover", "toxic"], + "abilities": ["Multitype"] } ] }, @@ -3931,7 +4644,8 @@ "sets": [ { "role": "Bulky Setup", - "movepool": ["calmmind", "earthpower", "judgment", "recover", "thunderbolt"] + "movepool": ["calmmind", "earthpower", "judgment", "recover", "thunderbolt"], + "abilities": ["Multitype"] } ] }, @@ -3940,15 +4654,21 @@ "sets": [ { "role": "Bulky Attacker", - "movepool": ["defog", "earthquake", "fireblast", "icebeam", "recover", "sludgebomb"] + "movepool": ["defog", "earthquake", "icebeam", "recover", "sludgebomb"], + "abilities": ["Multitype"], + "preferredTypes": ["Ground"] }, { "role": "Setup Sweeper", - "movepool": ["calmmind", "earthpower", "fireblast", "icebeam", "recover", "sludgebomb"] + "movepool": ["calmmind", "earthpower", "icebeam", "recover", "sludgebomb"], + "abilities": ["Multitype"], + "preferredTypes": ["Ground"] }, { "role": "Z-Move user", - "movepool": ["calmmind", "earthpower", "fireblast", "icebeam", "recover", "sludgebomb"] + "movepool": ["calmmind", "earthpower", "icebeam", "recover", "sludgebomb"], + "abilities": ["Multitype"], + "preferredTypes": ["Ground"] } ] }, @@ -3957,11 +4677,13 @@ "sets": [ { "role": "Bulky Setup", - "movepool": ["calmmind", "earthpower", "fireblast", "judgment", "recover"] + "movepool": ["calmmind", "earthpower", "fireblast", "judgment", "recover"], + "abilities": ["Multitype"] }, { "role": "Bulky Attacker", - "movepool": ["defog", "earthquake", "fireblast", "judgment", "recover", "toxic", "willowisp"] + "movepool": ["defog", "earthquake", "fireblast", "judgment", "recover", "toxic", "willowisp"], + "abilities": ["Multitype"] } ] }, @@ -3970,11 +4692,13 @@ "sets": [ { "role": "Bulky Attacker", - "movepool": ["defog", "earthquake", "judgment", "recover", "toxic", "willowisp"] + "movepool": ["defog", "earthquake", "judgment", "recover", "toxic", "willowisp"], + "abilities": ["Multitype"] }, { "role": "Z-Move user", "movepool": ["earthquake", "extremespeed", "recover", "stoneedge", "swordsdance"], + "abilities": ["Multitype"], "preferredTypes": ["Ground"] } ] @@ -3984,11 +4708,13 @@ "sets": [ { "role": "Bulky Attacker", - "movepool": ["defog", "earthquake", "judgment", "recover", "toxic", "willowisp"] + "movepool": ["defog", "earthquake", "judgment", "recover", "toxic", "willowisp"], + "abilities": ["Multitype"] }, { "role": "Z-Move user", "movepool": ["earthquake", "ironhead", "recover", "stoneedge", "swordsdance"], + "abilities": ["Multitype"], "preferredTypes": ["Ground"] } ] @@ -3998,24 +4724,29 @@ "sets": [ { "role": "Bulky Attacker", - "movepool": ["calmmind", "defog", "icebeam", "judgment", "recover", "toxic", "willowisp"] + "movepool": ["calmmind", "icebeam", "judgment", "recover", "toxic"], + "abilities": ["Multitype"] } ] }, "victini": { - "level": 78, + "level": 77, "sets": [ { "role": "Fast Attacker", - "movepool": ["boltstrike", "uturn", "vcreate", "zenheadbutt"] + "movepool": ["boltstrike", "uturn", "vcreate", "zenheadbutt"], + "abilities": ["Victory Star"] }, { "role": "AV Pivot", - "movepool": ["boltstrike", "energyball", "focusblast", "psychic", "uturn", "vcreate"] + "movepool": ["boltstrike", "energyball", "focusblast", "glaciate", "psychic", "uturn", "vcreate"], + "abilities": ["Victory Star"], + "preferredTypes": ["Electric"] }, { "role": "Z-Move user", "movepool": ["blueflare", "boltstrike", "celebrate", "storedpower"], + "abilities": ["Victory Star"], "preferredTypes": ["Normal"] } ] @@ -4025,62 +4756,64 @@ "sets": [ { "role": "Fast Support", - "movepool": ["defog", "dragonpulse", "glare", "hiddenpowerfire", "leafstorm", "leechseed", "substitute"] - }, - { - "role": "Z-Move user", - "movepool": ["glare", "hiddenpowerfire", "hyperbeam", "leafstorm"], - "preferredTypes": ["Normal"] + "movepool": ["defog", "dragonpulse", "glare", "hiddenpowerfire", "leafstorm", "leechseed", "substitute"], + "abilities": ["Contrary"] } ] }, "emboar": { - "level": 86, + "level": 85, "sets": [ { "role": "Bulky Attacker", - "movepool": ["flareblitz", "headsmash", "suckerpunch", "superpower", "wildcharge"] + "movepool": ["flareblitz", "headsmash", "suckerpunch", "superpower", "wildcharge"], + "abilities": ["Reckless"] }, { "role": "AV Pivot", - "movepool": ["fireblast", "grassknot", "suckerpunch", "superpower", "wildcharge"] + "movepool": ["flareblitz", "grassknot", "suckerpunch", "superpower", "wildcharge"], + "abilities": ["Reckless"] } ] }, "samurott": { - "level": 87, + "level": 88, "sets": [ { "role": "AV Pivot", - "movepool": ["aquajet", "grassknot", "hydropump", "icebeam", "knockoff", "megahorn", "sacredsword"] + "movepool": ["aquajet", "grassknot", "hydropump", "icebeam", "knockoff", "megahorn", "sacredsword", "scald"], + "abilities": ["Torrent"] }, { "role": "Fast Attacker", - "movepool": ["aquajet", "knockoff", "liquidation", "megahorn", "sacredsword", "swordsdance"] + "movepool": ["aquajet", "knockoff", "liquidation", "megahorn", "sacredsword", "swordsdance"], + "abilities": ["Torrent"] } ] }, "watchog": { - "level": 93, + "level": 95, "sets": [ { "role": "Bulky Attacker", - "movepool": ["hypnosis", "knockoff", "return", "superfang"] + "movepool": ["hypnosis", "knockoff", "return", "superfang"], + "abilities": ["Analytic"] }, { "role": "Setup Sweeper", "movepool": ["hypnosis", "knockoff", "return", "stompingtantrum", "swordsdance"], + "abilities": ["Analytic"], "preferredTypes": ["Dark"] } ] }, "stoutland": { - "level": 88, + "level": 87, "sets": [ { "role": "Fast Attacker", - "movepool": ["crunch", "playrough", "return", "superpower", "wildcharge"], - "preferredTypes": ["Fighting"] + "movepool": ["crunch", "facade", "return", "superpower"], + "abilities": ["Scrappy"] } ] }, @@ -4089,7 +4822,13 @@ "sets": [ { "role": "Fast Support", - "movepool": ["copycat", "encore", "knockoff", "substitute", "thunderwave", "uturn"] + "movepool": ["copycat", "encore", "knockoff", "substitute", "thunderwave", "uturn"], + "abilities": ["Prankster"] + }, + { + "role": "Fast Attacker", + "movepool": ["gunkshot", "knockoff", "playrough", "thunderwave"], + "abilities": ["Prankster"] } ] }, @@ -4099,29 +4838,33 @@ { "role": "Fast Attacker", "movepool": ["gunkshot", "hiddenpowerice", "knockoff", "leafstorm", "rockslide", "superpower"], + "abilities": ["Overgrow"], "preferredTypes": ["Fighting"] }, { "role": "Setup Sweeper", - "movepool": ["focusblast", "gigadrain", "hiddenpowerice", "nastyplot", "substitute"] + "movepool": ["focusblast", "gigadrain", "hiddenpowerice", "nastyplot", "substitute"], + "abilities": ["Overgrow"] } ] }, "simisear": { - "level": 88, + "level": 90, "sets": [ { "role": "Setup Sweeper", - "movepool": ["fireblast", "focusblast", "grassknot", "hiddenpowerrock", "nastyplot", "substitute"] + "movepool": ["fireblast", "focusblast", "grassknot", "hiddenpowerrock", "nastyplot", "substitute"], + "abilities": ["Blaze"] } ] }, "simipour": { - "level": 87, + "level": 88, "sets": [ { "role": "Setup Sweeper", - "movepool": ["focusblast", "hydropump", "icebeam", "nastyplot", "substitute"], + "movepool": ["grassknot", "hydropump", "icebeam", "nastyplot", "substitute"], + "abilities": ["Torrent"], "preferredTypes": ["Ice"] } ] @@ -4131,11 +4874,13 @@ "sets": [ { "role": "Bulky Setup", - "movepool": ["calmmind", "moonlight", "psyshock", "shadowball", "signalbeam"] + "movepool": ["calmmind", "moonlight", "psyshock", "shadowball", "signalbeam"], + "abilities": ["Synchronize"] }, { "role": "Bulky Support", - "movepool": ["healbell", "moonlight", "psychic", "signalbeam", "thunderwave", "toxic"] + "movepool": ["healbell", "moonlight", "psychic", "signalbeam", "thunderwave", "toxic"], + "abilities": ["Synchronize"] } ] }, @@ -4144,7 +4889,8 @@ "sets": [ { "role": "Bulky Attacker", - "movepool": ["defog", "nightslash", "pluck", "return", "roost", "toxic", "uturn"] + "movepool": ["defog", "nightslash", "pluck", "return", "roost", "toxic", "uturn"], + "abilities": ["Super Luck"] } ] }, @@ -4153,7 +4899,13 @@ "sets": [ { "role": "Fast Attacker", - "movepool": ["hiddenpowergrass", "hiddenpowerice", "overheat", "thunderbolt", "voltswitch", "wildcharge"] + "movepool": ["hiddenpowerice", "overheat", "voltswitch", "wildcharge"], + "abilities": ["Sap Sipper"] + }, + { + "role": "Wallbreaker", + "movepool": ["hiddenpowerice", "overheat", "thunderbolt", "voltswitch"], + "abilities": ["Lightning Rod"] } ] }, @@ -4162,7 +4914,9 @@ "sets": [ { "role": "Bulky Attacker", - "movepool": ["earthquake", "explosion", "stealthrock", "stoneedge", "superpower"] + "movepool": ["earthquake", "explosion", "stealthrock", "stoneedge", "superpower", "toxic"], + "abilities": ["Sand Stream"], + "preferredTypes": ["Ground"] } ] }, @@ -4170,12 +4924,14 @@ "level": 87, "sets": [ { - "role": "Bulky Setup", - "movepool": ["calmmind", "heatwave", "roost", "storedpower"] + "role": "Bulky Attacker", + "movepool": ["calmmind", "heatwave", "roost", "storedpower"], + "abilities": ["Simple"] }, { "role": "Setup Sweeper", - "movepool": ["airslash", "calmmind", "heatwave", "roost", "storedpower"] + "movepool": ["airslash", "calmmind", "heatwave", "roost", "storedpower"], + "abilities": ["Simple"] } ] }, @@ -4184,7 +4940,8 @@ "sets": [ { "role": "Fast Attacker", - "movepool": ["earthquake", "ironhead", "rapidspin", "rockslide", "swordsdance"] + "movepool": ["earthquake", "ironhead", "rapidspin", "rockslide", "swordsdance"], + "abilities": ["Mold Breaker", "Sand Rush"] } ] }, @@ -4193,7 +4950,8 @@ "sets": [ { "role": "Bulky Support", - "movepool": ["knockoff", "protect", "toxic", "wish"] + "movepool": ["knockoff", "protect", "toxic", "wish"], + "abilities": ["Regenerator"] } ] }, @@ -4201,25 +4959,24 @@ "level": 92, "sets": [ { - "role": "Bulky Support", - "movepool": ["dazzlinggleam", "healbell", "protect", "toxic", "wish"] - }, - { - "role": "Bulky Attacker", - "movepool": ["dazzlinggleam", "fireblast", "knockoff", "protect", "wish"] + "role": "Staller", + "movepool": ["dazzlinggleam", "protect", "toxic", "wish"], + "abilities": ["Regenerator"] }, { - "role": "Bulky Setup", - "movepool": ["calmmind", "dazzlinggleam", "protect", "wish"] + "role": "Bulky Support", + "movepool": ["calmmind", "dazzlinggleam", "fireblast", "protect", "wish"], + "abilities": ["Regenerator"] } ] }, "gurdurr": { - "level": 88, + "level": 87, "sets": [ { "role": "Bulky Setup", - "movepool": ["bulkup", "drainpunch", "knockoff", "machpunch"] + "movepool": ["bulkup", "drainpunch", "knockoff", "machpunch"], + "abilities": ["Guts"] } ] }, @@ -4228,42 +4985,53 @@ "sets": [ { "role": "Wallbreaker", - "movepool": ["drainpunch", "facade", "knockoff", "machpunch"] + "movepool": ["drainpunch", "facade", "knockoff", "machpunch"], + "abilities": ["Guts"] } ] }, "seismitoad": { - "level": 86, + "level": 85, "sets": [ { "role": "Setup Sweeper", - "movepool": ["earthquake", "hydropump", "knockoff", "raindance", "sludgewave"] + "movepool": ["earthquake", "hydropump", "knockoff", "raindance", "sludgewave"], + "abilities": ["Swift Swim"] }, { "role": "Bulky Support", - "movepool": ["earthquake", "knockoff", "scald", "stealthrock", "toxic"] + "movepool": ["earthquake", "knockoff", "scald", "stealthrock", "toxic"], + "abilities": ["Water Absorb"] + }, + { + "role": "Staller", + "movepool": ["earthquake", "protect", "scald", "toxic"], + "abilities": ["Water Absorb"] } ] }, "throh": { - "level": 88, + "level": 89, "sets": [ { "role": "Bulky Setup", - "movepool": ["bulkup", "facade", "knockoff", "stormthrow"] + "movepool": ["bulkup", "facade", "knockoff", "stormthrow"], + "abilities": ["Guts"] }, { "role": "Bulky Support", - "movepool": ["bulkup", "circlethrow", "knockoff", "rest", "sleeptalk"] + "movepool": ["bulkup", "circlethrow", "knockoff", "rest", "sleeptalk"], + "abilities": ["Guts"] } ] }, "sawk": { - "level": 87, + "level": 86, "sets": [ { "role": "Fast Attacker", - "movepool": ["bulkup", "closecombat", "earthquake", "icepunch", "knockoff", "poisonjab", "stoneedge"], + "movepool": ["bulkup", "closecombat", "earthquake", "knockoff", "poisonjab", "stoneedge"], + "abilities": ["Mold Breaker", "Sturdy"], "preferredTypes": ["Dark"] } ] @@ -4271,26 +5039,25 @@ "leavanny": { "level": 88, "sets": [ - { - "role": "Setup Sweeper", - "movepool": ["knockoff", "leafblade", "swordsdance", "xscissor"] - }, { "role": "Fast Support", - "movepool": ["healbell", "knockoff", "leafblade", "stickyweb", "xscissor"] + "movepool": ["knockoff", "leafblade", "stickyweb", "toxic", "xscissor"], + "abilities": ["Chlorophyll", "Swarm"] } ] }, "scolipede": { - "level": 82, + "level": 81, "sets": [ { "role": "Fast Support", - "movepool": ["earthquake", "megahorn", "poisonjab", "protect", "spikes", "toxicspikes"] + "movepool": ["earthquake", "megahorn", "poisonjab", "spikes", "toxicspikes"], + "abilities": ["Speed Boost"] }, { "role": "Setup Sweeper", - "movepool": ["earthquake", "megahorn", "poisonjab", "protect", "swordsdance"] + "movepool": ["earthquake", "megahorn", "poisonjab", "swordsdance"], + "abilities": ["Speed Boost"] } ] }, @@ -4299,11 +5066,13 @@ "sets": [ { "role": "Fast Support", - "movepool": ["defog", "encore", "energyball", "moonblast", "stunspore", "taunt", "toxic", "uturn"] + "movepool": ["defog", "encore", "energyball", "moonblast", "stunspore", "taunt", "toxic", "uturn"], + "abilities": ["Prankster"] }, { "role": "Staller", - "movepool": ["leechseed", "moonblast", "protect", "substitute"] + "movepool": ["leechseed", "moonblast", "protect", "substitute"], + "abilities": ["Prankster"] } ] }, @@ -4312,56 +5081,58 @@ "sets": [ { "role": "Setup Sweeper", - "movepool": ["gigadrain", "hiddenpowerfire", "hiddenpowerrock", "petaldance", "quiverdance", "sleeppowder"] - } - ] - }, - "basculin": { - "level": 86, - "sets": [ + "movepool": ["gigadrain", "hiddenpowerfire", "hiddenpowerrock", "quiverdance", "sleeppowder"], + "abilities": ["Chlorophyll"] + }, { - "role": "Bulky Attacker", - "movepool": ["aquajet", "crunch", "headsmash", "liquidation", "superpower"] + "role": "Fast Attacker", + "movepool": ["hiddenpowerfire", "hiddenpowerrock", "petaldance", "quiverdance", "sleeppowder"], + "abilities": ["Own Tempo"] } ] }, - "basculinbluestriped": { + "basculin": { "level": 86, "sets": [ { "role": "Bulky Attacker", - "movepool": ["aquajet", "crunch", "headsmash", "liquidation", "superpower"] + "movepool": ["aquajet", "crunch", "headsmash", "liquidation", "superpower"], + "abilities": ["Adaptability"] } ] }, "krookodile": { - "level": 81, + "level": 80, "sets": [ { "role": "Fast Attacker", - "movepool": ["earthquake", "knockoff", "pursuit", "stealthrock", "stoneedge", "superpower"] + "movepool": ["earthquake", "knockoff", "pursuit", "stealthrock", "stoneedge", "superpower"], + "abilities": ["Intimidate"] } ] }, "darmanitan": { - "level": 83, + "level": 82, "sets": [ { "role": "Wallbreaker", - "movepool": ["earthquake", "flareblitz", "rockslide", "superpower", "uturn"] + "movepool": ["earthquake", "flareblitz", "rockslide", "superpower", "uturn"], + "abilities": ["Sheer Force"] } ] }, "maractus": { - "level": 95, + "level": 99, "sets": [ { "role": "Fast Support", - "movepool": ["gigadrain", "hiddenpowerfire", "knockoff", "spikes", "suckerpunch", "toxic"] + "movepool": ["gigadrain", "hiddenpowerfire", "knockoff", "spikes", "synthesis", "toxic"], + "abilities": ["Storm Drain", "Water Absorb"] }, { "role": "Staller", - "movepool": ["gigadrain", "leechseed", "spikyshield", "toxic"] + "movepool": ["gigadrain", "hiddenpowerfire", "hiddenpowerice", "leechseed", "spikyshield"], + "abilities": ["Storm Drain", "Water Absorb"] } ] }, @@ -4371,6 +5142,7 @@ { "role": "Setup Sweeper", "movepool": ["earthquake", "knockoff", "shellsmash", "stoneedge", "xscissor"], + "abilities": ["Sturdy"], "preferredTypes": ["Ground"] } ] @@ -4380,25 +5152,34 @@ "sets": [ { "role": "Setup Sweeper", - "movepool": ["dragondance", "highjumpkick", "icepunch", "knockoff", "poisonjab"] + "movepool": ["dragondance", "highjumpkick", "ironhead", "knockoff"], + "abilities": ["Intimidate", "Moxie"] }, { "role": "Bulky Setup", - "movepool": ["bulkup", "drainpunch", "highjumpkick", "knockoff", "rest"] + "movepool": ["bulkup", "drainpunch", "knockoff", "rest"], + "abilities": ["Shed Skin"] } ] }, "sigilyph": { - "level": 86, + "level": 85, "sets": [ { "role": "Bulky Attacker", - "movepool": ["airslash", "calmmind", "defog", "heatwave", "psyshock", "roost"] + "movepool": ["airslash", "calmmind", "defog", "heatwave", "psyshock", "roost"], + "abilities": ["Magic Guard"] }, { "role": "Wallbreaker", "movepool": ["airslash", "energyball", "heatwave", "icebeam", "psychic", "psyshock"], + "abilities": ["Tinted Lens"], "preferredTypes": ["Psychic"] + }, + { + "role": "Bulky Setup", + "movepool": ["airslash", "cosmicpower", "roost", "storedpower"], + "abilities": ["Magic Guard"] } ] }, @@ -4407,11 +5188,13 @@ "sets": [ { "role": "Bulky Support", - "movepool": ["haze", "painsplit", "shadowball", "toxicspikes", "willowisp"] + "movepool": ["haze", "painsplit", "shadowball", "toxicspikes", "willowisp"], + "abilities": ["Mummy"] }, { "role": "Bulky Setup", - "movepool": ["hiddenpowerfighting", "nastyplot", "shadowball", "trickroom"] + "movepool": ["hiddenpowerfighting", "nastyplot", "shadowball", "trickroom"], + "abilities": ["Mummy"] } ] }, @@ -4420,20 +5203,18 @@ "sets": [ { "role": "Setup Sweeper", - "movepool": ["aquajet", "earthquake", "liquidation", "shellsmash", "stoneedge"] + "movepool": ["aquajet", "earthquake", "icebeam", "liquidation", "shellsmash", "stoneedge"], + "abilities": ["Solid Rock", "Sturdy", "Swift Swim"] } ] }, "archeops": { - "level": 84, + "level": 83, "sets": [ { - "role": "Fast Support", - "movepool": ["acrobatics", "defog", "earthquake", "roost", "stoneedge", "uturn"] - }, - { - "role": "Wallbreaker", - "movepool": ["aquatail", "earthquake", "headsmash", "knockoff", "stealthrock", "stoneedge", "uturn"], + "role": "Fast Attacker", + "movepool": ["acrobatics", "defog", "earthquake", "knockoff", "roost", "stealthrock", "stoneedge", "uturn"], + "abilities": ["Defeatist"], "preferredTypes": ["Ground"] } ] @@ -4442,8 +5223,9 @@ "level": 88, "sets": [ { - "role": "Bulky Support", - "movepool": ["gunkshot", "haze", "painsplit", "spikes", "stompingtantrum", "toxic", "toxicspikes"] + "role": "Bulky Attacker", + "movepool": ["gunkshot", "haze", "painsplit", "spikes", "stompingtantrum", "toxic", "toxicspikes"], + "abilities": ["Aftermath"] } ] }, @@ -4451,27 +5233,30 @@ "level": 84, "sets": [ { - "role": "Fast Attacker", + "role": "Wallbreaker", "movepool": ["darkpulse", "flamethrower", "focusblast", "nastyplot", "sludgebomb", "trick", "uturn"], + "abilities": ["Illusion"], "preferredTypes": ["Poison"] } ] }, "cinccino": { - "level": 85, + "level": 84, "sets": [ { "role": "Fast Attacker", - "movepool": ["bulletseed", "knockoff", "rockblast", "tailslap", "uturn"] + "movepool": ["bulletseed", "knockoff", "rockblast", "tailslap", "uturn"], + "abilities": ["Skill Link"] } ] }, "gothitelle": { - "level": 88, + "level": 90, "sets": [ { "role": "Bulky Attacker", - "movepool": ["calmmind", "hiddenpowerfighting", "psychic", "shadowball", "signalbeam", "thunderbolt", "trick"] + "movepool": ["calmmind", "hiddenpowerfighting", "psychic", "shadowball", "signalbeam", "thunderbolt", "trick"], + "abilities": ["Shadow Tag"] } ] }, @@ -4479,16 +5264,9 @@ "level": 87, "sets": [ { - "role": "Bulky Attacker", - "movepool": ["calmmind", "focusblast", "psychic", "psyshock", "recover", "shadowball", "trickroom"] - }, - { - "role": "Wallbreaker", - "movepool": ["focusblast", "psychic", "psyshock", "shadowball", "trickroom"] - }, - { - "role": "AV Pivot", - "movepool": ["focusblast", "futuresight", "knockoff", "psychic", "shadowball"] + "role": "Bulky Setup", + "movepool": ["calmmind", "focusblast", "psychic", "psyshock", "recover", "signalbeam"], + "abilities": ["Magic Guard"] } ] }, @@ -4497,11 +5275,13 @@ "sets": [ { "role": "Bulky Attacker", - "movepool": ["bravebird", "defog", "icebeam", "roost", "scald"] + "movepool": ["bravebird", "defog", "roost", "scald", "toxic"], + "abilities": ["Hydration"] }, { "role": "Z-Move user", - "movepool": ["hurricane", "icebeam", "raindance", "rest", "scald"], + "movepool": ["hurricane", "raindance", "rest", "scald"], + "abilities": ["Hydration"], "preferredTypes": ["Water"] } ] @@ -4511,11 +5291,15 @@ "sets": [ { "role": "Setup Sweeper", - "movepool": ["autotomize", "blizzard", "explosion", "flashcannon", "freezedry", "hiddenpowerground"] + "movepool": ["autotomize", "blizzard", "explosion", "flashcannon", "freezedry", "hiddenpowerground"], + "abilities": ["Snow Warning"], + "preferredTypes": ["Ground"] }, { "role": "AV Pivot", - "movepool": ["blizzard", "explosion", "flashcannon", "freezedry", "hiddenpowerground"] + "movepool": ["blizzard", "explosion", "flashcannon", "freezedry", "hiddenpowerground"], + "abilities": ["Snow Warning"], + "preferredTypes": ["Ground"] } ] }, @@ -4524,7 +5308,8 @@ "sets": [ { "role": "Setup Sweeper", - "movepool": ["hornleech", "jumpkick", "return", "substitute", "swordsdance"], + "movepool": ["headbutt", "hornleech", "jumpkick", "return", "substitute", "swordsdance"], + "abilities": ["Sap Sipper", "Serene Grace"], "preferredTypes": ["Normal"] } ] @@ -4534,7 +5319,8 @@ "sets": [ { "role": "Bulky Attacker", - "movepool": ["acrobatics", "defog", "encore", "knockoff", "roost", "thunderbolt", "toxic", "uturn"] + "movepool": ["acrobatics", "defog", "encore", "knockoff", "roost", "thunderbolt", "toxic", "uturn"], + "abilities": ["Motor Drive"] } ] }, @@ -4543,7 +5329,8 @@ "sets": [ { "role": "Bulky Attacker", - "movepool": ["drillrun", "ironhead", "knockoff", "megahorn", "pursuit", "swordsdance"] + "movepool": ["drillrun", "ironhead", "knockoff", "megahorn", "pursuit", "swordsdance"], + "abilities": ["Overcoat", "Swarm"] } ] }, @@ -4552,11 +5339,13 @@ "sets": [ { "role": "Bulky Attacker", - "movepool": ["clearsmog", "foulplay", "gigadrain", "hiddenpowerfire", "sludgebomb", "spore"] + "movepool": ["clearsmog", "foulplay", "gigadrain", "sludgebomb", "spore", "stompingtantrum"], + "abilities": ["Regenerator"] }, { "role": "Bulky Support", - "movepool": ["gigadrain", "sludgebomb", "spore", "synthesis"] + "movepool": ["gigadrain", "sludgebomb", "spore", "synthesis"], + "abilities": ["Regenerator"] } ] }, @@ -4565,43 +5354,49 @@ "sets": [ { "role": "Bulky Attacker", - "movepool": ["icebeam", "recover", "scald", "shadowball", "taunt"] + "movepool": ["icebeam", "recover", "scald", "shadowball", "taunt"], + "abilities": ["Water Absorb"] }, { "role": "Bulky Support", - "movepool": ["hex", "recover", "scald", "toxic", "willowisp"] + "movepool": ["hex", "recover", "scald", "toxic", "willowisp"], + "abilities": ["Water Absorb"] } ] }, "alomomola": { - "level": 86, + "level": 87, "sets": [ { "role": "Bulky Support", - "movepool": ["knockoff", "protect", "scald", "toxic", "wish"] + "movepool": ["knockoff", "protect", "scald", "toxic", "wish"], + "abilities": ["Regenerator"] } ] }, "galvantula": { - "level": 82, + "level": 81, "sets": [ { - "role": "Fast Attacker", - "movepool": ["bugbuzz", "gigadrain", "hiddenpowerice", "stickyweb", "thunder", "voltswitch"], + "role": "Wallbreaker", + "movepool": ["bugbuzz", "gigadrain", "stickyweb", "thunder", "voltswitch"], + "abilities": ["Compound Eyes"], "preferredTypes": ["Bug"] } ] }, "ferrothorn": { - "level": 76, + "level": 73, "sets": [ { "role": "Bulky Attacker", - "movepool": ["gyroball", "leechseed", "powerwhip", "spikes", "stealthrock"] + "movepool": ["gyroball", "leechseed", "powerwhip", "spikes", "stealthrock"], + "abilities": ["Iron Barbs"] }, { "role": "Bulky Support", - "movepool": ["knockoff", "powerwhip", "spikes", "stealthrock", "thunderwave", "toxic"] + "movepool": ["knockoff", "powerwhip", "spikes", "stealthrock", "thunderwave", "toxic"], + "abilities": ["Iron Barbs"] } ] }, @@ -4610,11 +5405,13 @@ "sets": [ { "role": "Setup Sweeper", - "movepool": ["geargrind", "return", "shiftgear", "substitute", "wildcharge"] + "movepool": ["geargrind", "return", "shiftgear", "substitute", "wildcharge"], + "abilities": ["Clear Body"] }, { "role": "Z-Move user", "movepool": ["geargrind", "return", "shiftgear", "substitute", "wildcharge"], + "abilities": ["Clear Body"], "preferredTypes": ["Electric", "Normal", "Steel"] } ] @@ -4624,53 +5421,61 @@ "sets": [ { "role": "AV Pivot", - "movepool": ["acidspray", "flamethrower", "gigadrain", "hiddenpowerice", "knockoff", "superpower", "thunderbolt", "uturn"] + "movepool": ["discharge", "flamethrower", "gigadrain", "hiddenpowerice", "knockoff", "superpower", "uturn"], + "abilities": ["Levitate"] } ] }, "beheeyem": { - "level": 89, + "level": 93, "sets": [ { "role": "Wallbreaker", - "movepool": ["hiddenpowerfighting", "nastyplot", "psychic", "psyshock", "signalbeam", "thunderbolt", "trick", "trickroom"] + "movepool": ["hiddenpowerfighting", "psychic", "psyshock", "recover", "signalbeam", "thunderbolt", "trick", "trickroom"], + "abilities": ["Analytic"], + "preferredTypes": ["Bug"] } ] }, "chandelure": { - "level": 83, + "level": 84, "sets": [ { "role": "Fast Attacker", - "movepool": ["energyball", "fireblast", "shadowball", "trick"] + "movepool": ["energyball", "fireblast", "shadowball", "trick"], + "abilities": ["Flash Fire"] }, { "role": "Bulky Setup", - "movepool": ["calmmind", "fireblast", "shadowball", "substitute"] + "movepool": ["calmmind", "fireblast", "shadowball", "substitute"], + "abilities": ["Flame Body", "Flash Fire"] } ] }, "haxorus": { - "level": 78, + "level": 75, "sets": [ { "role": "Setup Sweeper", - "movepool": ["dragondance", "earthquake", "outrage", "poisonjab", "swordsdance", "taunt"], + "movepool": ["dragondance", "earthquake", "outrage", "poisonjab", "taunt"], + "abilities": ["Mold Breaker"], "preferredTypes": ["Ground"] }, { "role": "Z-Move user", - "movepool": ["dragondance", "earthquake", "outrage", "poisonjab", "swordsdance"], + "movepool": ["dragondance", "earthquake", "outrage", "poisonjab"], + "abilities": ["Mold Breaker"], "preferredTypes": ["Dragon"] } ] }, "beartic": { - "level": 89, + "level": 91, "sets": [ { "role": "Wallbreaker", "movepool": ["aquajet", "iciclecrash", "stoneedge", "superpower", "swordsdance"], + "abilities": ["Slush Rush", "Swift Swim"], "preferredTypes": ["Fighting"] } ] @@ -4680,29 +5485,33 @@ "sets": [ { "role": "Bulky Support", - "movepool": ["freezedry", "haze", "hiddenpowerground", "rapidspin", "recover", "toxic"] + "movepool": ["freezedry", "haze", "hiddenpowerground", "rapidspin", "recover", "toxic"], + "abilities": ["Levitate"] } ] }, "accelgor": { - "level": 89, + "level": 90, "sets": [ { "role": "Fast Support", - "movepool": ["bugbuzz", "encore", "energyball", "focusblast", "hiddenpowerrock", "spikes", "toxicspikes", "yawn"] + "movepool": ["bugbuzz", "encore", "focusblast", "hiddenpowerground", "hiddenpowerrock", "spikes", "toxicspikes", "uturn"], + "abilities": ["Hydration", "Sticky Hold"] } ] }, "stunfisk": { - "level": 88, + "level": 89, "sets": [ { "role": "Bulky Attacker", - "movepool": ["discharge", "earthpower", "rest", "scald", "sleeptalk", "stealthrock", "toxic"] + "movepool": ["discharge", "earthpower", "rest", "scald", "sleeptalk", "stealthrock", "toxic"], + "abilities": ["Static"] }, { "role": "AV Pivot", - "movepool": ["discharge", "earthpower", "foulplay", "scald", "sludgebomb"] + "movepool": ["discharge", "earthpower", "foulplay", "scald", "sludgebomb"], + "abilities": ["Static"] } ] }, @@ -4710,13 +5519,15 @@ "level": 84, "sets": [ { - "role": "Fast Attacker", + "role": "Wallbreaker", "movepool": ["highjumpkick", "knockoff", "poisonjab", "stoneedge", "swordsdance", "uturn"], + "abilities": ["Reckless"], "preferredTypes": ["Dark"] }, { "role": "AV Pivot", - "movepool": ["fakeout", "highjumpkick", "knockoff", "uturn"] + "movepool": ["fakeout", "highjumpkick", "knockoff", "uturn"], + "abilities": ["Regenerator"] } ] }, @@ -4726,11 +5537,13 @@ { "role": "Wallbreaker", "movepool": ["firepunch", "glare", "gunkshot", "outrage", "suckerpunch"], + "abilities": ["Sheer Force"], "preferredTypes": ["Poison"] }, { "role": "Bulky Support", - "movepool": ["dragontail", "earthquake", "glare", "gunkshot", "outrage", "stealthrock", "suckerpunch"] + "movepool": ["dragontail", "earthquake", "glare", "gunkshot", "outrage", "stealthrock", "suckerpunch"], + "abilities": ["Rough Skin"] } ] }, @@ -4740,11 +5553,13 @@ { "role": "Wallbreaker", "movepool": ["dynamicpunch", "earthquake", "icepunch", "rockpolish", "stealthrock", "stoneedge"], + "abilities": ["No Guard"], "preferredTypes": ["Fighting"] }, { "role": "Setup Sweeper", - "movepool": ["earthquake", "icepunch", "rockpolish", "shadowpunch"] + "movepool": ["earthquake", "icepunch", "rockpolish", "shadowpunch"], + "abilities": ["Iron Fist"] } ] }, @@ -4753,7 +5568,8 @@ "sets": [ { "role": "Fast Attacker", - "movepool": ["ironhead", "knockoff", "pursuit", "suckerpunch", "swordsdance"] + "movepool": ["ironhead", "knockoff", "pursuit", "suckerpunch", "swordsdance"], + "abilities": ["Defiant"] } ] }, @@ -4762,20 +5578,23 @@ "sets": [ { "role": "Bulky Attacker", - "movepool": ["earthquake", "headcharge", "stoneedge", "superpower", "swordsdance"] + "movepool": ["earthquake", "headcharge", "stoneedge", "superpower", "swordsdance"], + "abilities": ["Reckless", "Sap Sipper"] } ] }, "braviary": { - "level": 86, + "level": 83, "sets": [ { "role": "Bulky Attacker", - "movepool": ["bravebird", "bulkup", "roost", "superpower"] + "movepool": ["bravebird", "bulkup", "roost", "superpower"], + "abilities": ["Defiant"] }, { "role": "Fast Attacker", - "movepool": ["bravebird", "return", "superpower", "uturn"] + "movepool": ["bravebird", "return", "superpower", "uturn"], + "abilities": ["Defiant"] } ] }, @@ -4784,29 +5603,34 @@ "sets": [ { "role": "Bulky Attacker", - "movepool": ["bravebird", "defog", "foulplay", "knockoff", "roost", "taunt", "toxic", "uturn"] + "movepool": ["bravebird", "defog", "foulplay", "knockoff", "roost", "taunt", "toxic", "uturn"], + "abilities": ["Overcoat"] }, { "role": "Bulky Support", - "movepool": ["defog", "foulplay", "roost", "taunt", "toxic", "uturn"] + "movepool": ["defog", "foulplay", "roost", "taunt", "toxic", "uturn"], + "abilities": ["Overcoat"] } ] }, "heatmor": { - "level": 89, + "level": 92, "sets": [ { "role": "Wallbreaker", - "movepool": ["fireblast", "firelash", "gigadrain", "knockoff", "suckerpunch", "superpower"] + "movepool": ["fireblast", "firelash", "gigadrain", "knockoff", "suckerpunch", "superpower"], + "abilities": ["Flash Fire"] } ] }, "durant": { - "level": 82, + "level": 81, "sets": [ { - "role": "Fast Attacker", - "movepool": ["honeclaws", "ironhead", "rockslide", "superpower", "xscissor"] + "role": "Setup Sweeper", + "movepool": ["honeclaws", "ironhead", "rockslide", "superpower", "xscissor"], + "abilities": ["Hustle"], + "preferredTypes": ["Fighting"] } ] }, @@ -4815,63 +5639,72 @@ "sets": [ { "role": "Fast Attacker", - "movepool": ["darkpulse", "dracometeor", "earthpower", "fireblast", "flashcannon", "roost", "uturn"] + "movepool": ["darkpulse", "dracometeor", "earthpower", "fireblast", "flashcannon", "roost", "uturn"], + "abilities": ["Levitate"] }, { "role": "Bulky Attacker", - "movepool": ["darkpulse", "defog", "dracometeor", "fireblast", "roost", "uturn"] + "movepool": ["darkpulse", "defog", "dracometeor", "fireblast", "roost", "uturn"], + "abilities": ["Levitate"] }, { "role": "AV Pivot", "movepool": ["darkpulse", "dracometeor", "flashcannon", "superpower", "uturn"], + "abilities": ["Levitate"], "preferredTypes": ["Fighting"] } ] }, "volcarona": { - "level": 77, + "level": 76, "sets": [ { "role": "Setup Sweeper", - "movepool": ["bugbuzz", "fierydance", "fireblast", "gigadrain", "hiddenpowerrock", "quiverdance", "roost"] + "movepool": ["bugbuzz", "fierydance", "fireblast", "gigadrain", "hiddenpowerrock", "quiverdance", "roost"], + "abilities": ["Flame Body", "Swarm"] }, { "role": "Z-Move user", - "movepool": ["bugbuzz", "fireblast", "gigadrain", "hurricane", "quiverdance", "roost"], - "preferredTypes": ["Bug", "Fire", "Flying"] + "movepool": ["bugbuzz", "fireblast", "gigadrain", "quiverdance", "roost"], + "abilities": ["Flame Body", "Swarm"], + "preferredTypes": ["Bug", "Fire"] } ] }, "cobalion": { - "level": 80, + "level": 78, "sets": [ { "role": "Bulky Attacker", - "movepool": ["closecombat", "ironhead", "stealthrock", "stoneedge", "swordsdance", "voltswitch"], - "preferredTypes": ["Steel"] + "movepool": ["closecombat", "ironhead", "stealthrock", "stoneedge", "swordsdance"], + "abilities": ["Justified"] }, { "role": "Z-Move user", "movepool": ["closecombat", "ironhead", "stoneedge", "swordsdance"], + "abilities": ["Justified"], "preferredTypes": ["Fighting", "Steel"] } ] }, "terrakion": { - "level": 79, + "level": 78, "sets": [ { "role": "Fast Attacker", "movepool": ["closecombat", "earthquake", "quickattack", "stealthrock", "stoneedge"], + "abilities": ["Justified"], "preferredTypes": ["Ground"] }, { "role": "Setup Sweeper", - "movepool": ["closecombat", "earthquake", "stoneedge", "swordsdance"] + "movepool": ["closecombat", "earthquake", "stoneedge", "swordsdance"], + "abilities": ["Justified"] }, { "role": "Z-Move user", "movepool": ["closecombat", "earthquake", "stoneedge", "swordsdance"], + "abilities": ["Justified"], "preferredTypes": ["Fighting", "Rock"] } ] @@ -4881,11 +5714,13 @@ "sets": [ { "role": "Fast Attacker", - "movepool": ["closecombat", "leafblade", "stoneedge", "swordsdance"] + "movepool": ["closecombat", "leafblade", "stoneedge", "swordsdance"], + "abilities": ["Justified"] }, { "role": "Z-Move user", - "movepool": ["calmmind", "focusblast", "gigadrain", "hiddenpowerrock"], + "movepool": ["closecombat", "leafblade", "stoneedge", "swordsdance"], + "abilities": ["Justified"], "preferredTypes": ["Fighting"] } ] @@ -4895,11 +5730,13 @@ "sets": [ { "role": "Fast Support", - "movepool": ["defog", "heatwave", "hurricane", "knockoff", "superpower", "taunt", "uturn"] + "movepool": ["defog", "heatwave", "hurricane", "knockoff", "superpower", "taunt", "uturn"], + "abilities": ["Defiant", "Prankster"] }, { "role": "Setup Sweeper", "movepool": ["acrobatics", "bulkup", "knockoff", "superpower", "taunt"], + "abilities": ["Defiant"], "preferredTypes": ["Fighting"] } ] @@ -4909,7 +5746,8 @@ "sets": [ { "role": "Fast Support", - "movepool": ["defog", "heatwave", "hurricane", "knockoff", "superpower", "taunt", "uturn"] + "movepool": ["defog", "heatwave", "hurricane", "knockoff", "superpower", "taunt", "uturn"], + "abilities": ["Regenerator"] } ] }, @@ -4918,46 +5756,53 @@ "sets": [ { "role": "Setup Sweeper", - "movepool": ["focusblast", "hiddenpowerflying", "hiddenpowerice", "nastyplot", "substitute", "thunderbolt"] + "movepool": ["focusblast", "hiddenpowerflying", "hiddenpowerice", "nastyplot", "substitute", "thunderbolt"], + "abilities": ["Prankster"] }, { "role": "Fast Attacker", - "movepool": ["focusblast", "hiddenpowerflying", "hiddenpowerice", "knockoff", "taunt", "thunderbolt", "thunderwave"] + "movepool": ["hiddenpowerflying", "hiddenpowerice", "knockoff", "superpower", "taunt", "thunderbolt", "thunderwave"], + "abilities": ["Prankster"] } ] }, "thundurustherian": { - "level": 81, + "level": 80, "sets": [ { "role": "Fast Attacker", - "movepool": ["focusblast", "hiddenpowerflying", "hiddenpowerice", "nastyplot", "thunderbolt", "voltswitch"] + "movepool": ["focusblast", "hiddenpowerflying", "hiddenpowerice", "nastyplot", "thunderbolt", "voltswitch"], + "abilities": ["Volt Absorb"] } ] }, "reshiram": { - "level": 76, + "level": 75, "sets": [ { "role": "Bulky Attacker", - "movepool": ["blueflare", "defog", "dracometeor", "roost", "toxic"] + "movepool": ["blueflare", "defog", "dracometeor", "roost", "toxic"], + "abilities": ["Turboblaze"] } ] }, "zekrom": { - "level": 75, + "level": 74, "sets": [ { "role": "Setup Sweeper", - "movepool": ["boltstrike", "honeclaws", "outrage", "roost", "substitute"] + "movepool": ["boltstrike", "honeclaws", "outrage", "roost", "substitute"], + "abilities": ["Teravolt"] }, { "role": "AV Pivot", - "movepool": ["boltstrike", "dracometeor", "outrage", "voltswitch"] + "movepool": ["boltstrike", "dracometeor", "outrage", "voltswitch"], + "abilities": ["Teravolt"] }, { "role": "Z-Move user", "movepool": ["boltstrike", "honeclaws", "outrage", "roost"], + "abilities": ["Teravolt"], "preferredTypes": ["Dragon"] } ] @@ -4967,30 +5812,36 @@ "sets": [ { "role": "Wallbreaker", - "movepool": ["earthpower", "focusblast", "knockoff", "psychic", "rockpolish", "rockslide", "sludgewave", "stealthrock"] + "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": 78, + "level": 76, "sets": [ { "role": "Bulky Attacker", - "movepool": ["defog", "earthquake", "knockoff", "stealthrock", "stoneedge", "toxic", "uturn"] + "movepool": ["defog", "earthquake", "knockoff", "stealthrock", "stoneedge", "toxic", "uturn"], + "abilities": ["Intimidate"] }, { "role": "Setup Sweeper", "movepool": ["earthquake", "knockoff", "rockpolish", "stoneedge", "superpower", "swordsdance"], + "abilities": ["Intimidate"], "preferredTypes": ["Rock"] }, { "role": "Z-Move user", "movepool": ["earthquake", "fly", "rockpolish", "stoneedge", "swordsdance"], + "abilities": ["Intimidate"], "preferredTypes": ["Flying"] } ] @@ -5000,38 +5851,44 @@ "sets": [ { "role": "Staller", - "movepool": ["earthpower", "icebeam", "roost", "substitute"] + "movepool": ["earthpower", "icebeam", "roost", "substitute"], + "abilities": ["Pressure"] }, { "role": "Bulky Support", - "movepool": ["dracometeor", "earthpower", "icebeam", "outrage", "roost", "substitute"] + "movepool": ["dracometeor", "earthpower", "icebeam", "outrage", "roost", "substitute"], + "abilities": ["Pressure"] }, { "role": "Bulky Attacker", - "movepool": ["dracometeor", "earthpower", "focusblast", "icebeam", "outrage"] + "movepool": ["dracometeor", "earthpower", "focusblast", "icebeam", "outrage"], + "abilities": ["Pressure"] } ] }, "kyuremblack": { - "level": 79, + "level": 78, "sets": [ { "role": "Bulky Attacker", - "movepool": ["earthpower", "fusionbolt", "icebeam", "outrage", "roost", "substitute"] + "movepool": ["earthpower", "fusionbolt", "icebeam", "outrage", "roost", "substitute"], + "abilities": ["Teravolt"] }, { "role": "Z-Move user", "movepool": ["freezeshock", "fusionbolt", "honeclaws", "outrage", "roost"], + "abilities": ["Teravolt"], "preferredTypes": ["Ice"] } ] }, "kyuremwhite": { - "level": 77, + "level": 76, "sets": [ { "role": "Fast Attacker", - "movepool": ["dracometeor", "earthpower", "fusionflare", "icebeam", "roost"] + "movepool": ["dracometeor", "earthpower", "fusionflare", "icebeam", "roost"], + "abilities": ["Turboblaze"] } ] }, @@ -5039,67 +5896,76 @@ "level": 80, "sets": [ { - "role": "Fast Attacker", - "movepool": ["calmmind", "hiddenpowerelectric", "hiddenpowerflying", "hydropump", "icywind", "scald", "secretsword"] + "role": "Setup Sweeper", + "movepool": ["calmmind", "hiddenpowerelectric", "hiddenpowerflying", "hydropump", "icywind", "scald", "secretsword"], + "abilities": ["Justified"] }, { "role": "Bulky Setup", - "movepool": ["calmmind", "hydropump", "scald", "secretsword", "substitute"] + "movepool": ["calmmind", "scald", "secretsword", "substitute"], + "abilities": ["Justified"] + }, + { + "role": "Fast Attacker", + "movepool": ["focusblast", "hydropump", "scald", "secretsword"], + "abilities": ["Justified"] } ] }, "meloetta": { - "level": 83, + "level": 81, "sets": [ { "role": "Fast Attacker", - "movepool": ["calmmind", "focusblast", "hypervoice", "psyshock", "uturn"] - } - ] - }, - "meloettapirouette": { - "level": 83, - "sets": [ + "movepool": ["calmmind", "focusblast", "hypervoice", "psyshock", "uturn"], + "abilities": ["Serene Grace"] + }, { - "role": "AV Pivot", - "movepool": ["closecombat", "knockoff", "relicsong", "return"] + "role": "Wallbreaker", + "movepool": ["closecombat", "knockoff", "relicsong", "return"], + "abilities": ["Serene Grace"] + }, + { + "role": "Z-Move user", + "movepool": ["celebrate", "focusblast", "hypervoice", "psyshock"], + "abilities": ["Serene Grace"], + "preferredTypes": ["Normal"] } ] }, "genesect": { - "level": 76, + "level": 74, "sets": [ { "role": "Setup Sweeper", - "movepool": ["blazekick", "extremespeed", "ironhead", "shiftgear", "thunderbolt", "xscissor"] + "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"] } ] }, - "genesectdouse": { - "level": 76, - "sets": [ - { - "role": "Wallbreaker", - "movepool": ["bugbuzz", "extremespeed", "flamethrower", "icebeam", "ironhead", "technoblast", "thunderbolt", "uturn"], - "preferredTypes": ["Water"] - } - ] - }, "chesnaught": { - "level": 87, + "level": 89, "sets": [ { "role": "Bulky Support", - "movepool": ["drainpunch", "leechseed", "spikes", "synthesis", "woodhammer"] + "movepool": ["bulkup", "drainpunch", "spikes", "synthesis", "toxic", "woodhammer"], + "abilities": ["Bulletproof"] }, { "role": "Staller", - "movepool": ["drainpunch", "leechseed", "spikyshield", "woodhammer"] + "movepool": ["drainpunch", "leechseed", "spikyshield", "woodhammer"], + "abilities": ["Bulletproof"] } ] }, @@ -5108,7 +5974,8 @@ "sets": [ { "role": "Fast Attacker", - "movepool": ["calmmind", "dazzlinggleam", "fireblast", "grassknot", "psyshock", "switcheroo"] + "movepool": ["calmmind", "dazzlinggleam", "fireblast", "grassknot", "psyshock", "switcheroo"], + "abilities": ["Blaze"] } ] }, @@ -5117,7 +5984,9 @@ "sets": [ { "role": "Fast Attacker", - "movepool": ["gunkshot", "hydropump", "icebeam", "spikes", "taunt", "toxicspikes", "uturn"] + "movepool": ["grassknot", "gunkshot", "hydropump", "icebeam", "spikes", "taunt", "toxicspikes", "uturn"], + "abilities": ["Protean"], + "preferredTypes": ["Poison"] } ] }, @@ -5126,21 +5995,24 @@ "sets": [ { "role": "Fast Attacker", - "movepool": ["darkpulse", "hydropump", "icebeam", "uturn", "watershuriken"] + "movepool": ["darkpulse", "hydropump", "icebeam", "uturn", "watershuriken"], + "abilities": ["Battle Bond"] } ] }, "diggersby": { - "level": 84, + "level": 83, "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"] } ] @@ -5150,11 +6022,13 @@ "sets": [ { "role": "Bulky Attacker", - "movepool": ["bravebird", "defog", "overheat", "roost", "uturn", "willowisp"] + "movepool": ["bravebird", "defog", "overheat", "roost", "uturn", "willowisp"], + "abilities": ["Flame Body"] }, { "role": "Z-Move user", "movepool": ["bravebird", "flareblitz", "roost", "swordsdance"], + "abilities": ["Gale Wings"], "preferredTypes": ["Flying"] } ] @@ -5164,7 +6038,13 @@ "sets": [ { "role": "Bulky Setup", - "movepool": ["energyball", "hurricane", "quiverdance", "sleeppowder", "substitute"] + "movepool": ["energyball", "hurricane", "quiverdance", "sleeppowder"], + "abilities": ["Compound Eyes"] + }, + { + "role": "Bulky Attacker", + "movepool": ["bugbuzz", "hurricane", "quiverdance", "sleeppowder"], + "abilities": ["Compound Eyes"] } ] }, @@ -5173,12 +6053,13 @@ "sets": [ { "role": "Fast Attacker", - "movepool": ["darkpulse", "fireblast", "hypervoice", "solarbeam", "sunnyday", "willowisp"], - "preferredTypes": ["Normal"] + "movepool": ["darkpulse", "fireblast", "hypervoice", "solarbeam", "sunnyday", "willowisp", "workup"], + "abilities": ["Unnerve"] }, { "role": "Z-Move user", "movepool": ["darkpulse", "fireblast", "hypervoice", "solarbeam", "willowisp"], + "abilities": ["Unnerve"], "preferredTypes": ["Grass"] } ] @@ -5188,7 +6069,8 @@ "sets": [ { "role": "Fast Attacker", - "movepool": ["hiddenpowerfire", "hiddenpowerground", "lightofruin", "moonblast", "psychic"] + "movepool": ["hiddenpowerfire", "hiddenpowerground", "lightofruin", "moonblast", "psychic"], + "abilities": ["Flower Veil"] } ] }, @@ -5197,29 +6079,38 @@ "sets": [ { "role": "Bulky Support", - "movepool": ["aromatherapy", "defog", "moonblast", "synthesis", "toxic"] + "movepool": ["aromatherapy", "defog", "moonblast", "synthesis", "toxic"], + "abilities": ["Flower Veil"] }, { "role": "Staller", - "movepool": ["moonblast", "protect", "toxic", "wish"] + "movepool": ["moonblast", "protect", "toxic", "wish"], + "abilities": ["Flower Veil"] + }, + { + "role": "Bulky Setup", + "movepool": ["calmmind", "hiddenpowerground", "moonblast", "synthesis"], + "abilities": ["Flower Veil"] } ] }, "gogoat": { - "level": 89, + "level": 90, "sets": [ { - "role": "Bulky Setup", - "movepool": ["bulkup", "earthquake", "hornleech", "milkdrink"] + "role": "Bulky Attacker", + "movepool": ["bulkup", "earthquake", "hornleech", "milkdrink", "toxic"], + "abilities": ["Sap Sipper"] } ] }, "pangoro": { - "level": 86, + "level": 87, "sets": [ { "role": "Wallbreaker", "movepool": ["bulletpunch", "drainpunch", "gunkshot", "icepunch", "knockoff", "partingshot", "superpower", "swordsdance"], + "abilities": ["Iron Fist", "Scrappy"], "preferredTypes": ["Poison"] } ] @@ -5229,42 +6120,44 @@ "sets": [ { "role": "Bulky Support", - "movepool": ["rest", "return", "suckerpunch", "thunderwave", "toxic", "uturn"] + "movepool": ["darkpulse", "rest", "return", "thunderwave", "toxic", "uturn"], + "abilities": ["Fur Coat"] }, { "role": "Staller", - "movepool": ["cottonguard", "rest", "return", "substitute", "toxic"] + "movepool": ["cottonguard", "rest", "return", "substitute", "toxic"], + "abilities": ["Fur Coat"] } ] }, "meowstic": { - "level": 88, + "level": 90, "sets": [ { "role": "Bulky Support", - "movepool": ["healbell", "lightscreen", "psychic", "reflect", "thunderwave", "toxic", "yawn"] + "movepool": ["healbell", "lightscreen", "psychic", "reflect", "signalbeam", "thunderwave", "toxic", "yawn"], + "abilities": ["Prankster"] } ] }, "meowsticf": { - "level": 88, + "level": 90, "sets": [ { "role": "Fast Attacker", - "movepool": ["calmmind", "energyball", "psychic", "psyshock", "shadowball", "signalbeam", "thunderbolt"] + "movepool": ["calmmind", "darkpulse", "psychic", "psyshock", "signalbeam", "thunderbolt"], + "abilities": ["Competitive"], + "preferredTypes": ["Bug"] } ] }, "doublade": { - "level": 84, + "level": 85, "sets": [ { "role": "Bulky Setup", - "movepool": ["ironhead", "sacredsword", "shadowclaw", "shadowsneak", "swordsdance"] - }, - { - "role": "Staller", - "movepool": ["ironhead", "sacredsword", "shadowclaw", "shadowsneak", "toxic"] + "movepool": ["ironhead", "sacredsword", "shadowclaw", "shadowsneak", "swordsdance"], + "abilities": ["No Guard"] } ] }, @@ -5273,16 +6166,14 @@ "sets": [ { "role": "Staller", - "movepool": ["ironhead", "kingsshield", "shadowball", "substitute", "toxic"] - } - ] - }, - "aegislashblade": { - "level": 78, - "sets": [ + "movepool": ["ironhead", "kingsshield", "shadowball", "substitute", "toxic"], + "abilities": ["Stance Change"] + }, { "role": "Setup Sweeper", - "movepool": ["ironhead", "kingsshield", "sacredsword", "shadowclaw", "shadowsneak", "swordsdance"] + "movepool": ["ironhead", "kingsshield", "sacredsword", "shadowclaw", "shadowsneak", "swordsdance"], + "abilities": ["Stance Change"], + "preferredTypes": ["Steel"] } ] }, @@ -5291,7 +6182,8 @@ "sets": [ { "role": "Bulky Support", - "movepool": ["calmmind", "moonblast", "protect", "toxic", "wish"] + "movepool": ["calmmind", "moonblast", "protect", "toxic", "wish"], + "abilities": ["Aroma Veil"] } ] }, @@ -5300,39 +6192,49 @@ "sets": [ { "role": "Setup Sweeper", - "movepool": ["bellydrum", "drainpunch", "playrough", "return"] + "movepool": ["bellydrum", "drainpunch", "playrough", "return"], + "abilities": ["Unburden"] } ] }, "malamar": { - "level": 82, + "level": 81, "sets": [ { - "role": "Bulky Attacker", - "movepool": ["knockoff", "rest", "sleeptalk", "superpower"] + "role": "Bulky Setup", + "movepool": ["knockoff", "rest", "sleeptalk", "superpower"], + "abilities": ["Contrary"] }, { "role": "Z-Move user", "movepool": ["happyhour", "knockoff", "psychocut", "superpower"], + "abilities": ["Contrary"], "preferredTypes": ["Normal"] } ] }, "barbaracle": { - "level": 82, + "level": 81, "sets": [ { "role": "Setup Sweeper", - "movepool": ["earthquake", "liquidation", "lowkick", "shellsmash", "stoneedge"] + "movepool": ["earthquake", "liquidation", "lowkick", "shellsmash", "stoneedge"], + "abilities": ["Tough Claws"] } ] }, "dragalge": { - "level": 86, + "level": 87, "sets": [ { "role": "Bulky Attacker", - "movepool": ["dracometeor", "focusblast", "hiddenpowerfire", "scald", "sludgewave", "toxicspikes"] + "movepool": ["dracometeor", "focusblast", "sludgewave", "toxicspikes"], + "abilities": ["Adaptability"] + }, + { + "role": "Wallbreaker", + "movepool": ["dracometeor", "dragonpulse", "focusblast", "sludgewave"], + "abilities": ["Adaptability"] } ] }, @@ -5341,7 +6243,8 @@ "sets": [ { "role": "Wallbreaker", - "movepool": ["aurasphere", "darkpulse", "icebeam", "scald", "uturn", "waterpulse"] + "movepool": ["aurasphere", "darkpulse", "icebeam", "scald", "uturn", "waterpulse"], + "abilities": ["Mega Launcher"] } ] }, @@ -5350,26 +6253,29 @@ "sets": [ { "role": "Fast Attacker", - "movepool": ["darkpulse", "glare", "hiddenpowerice", "hypervoice", "surf", "thunderbolt", "voltswitch"], - "preferredTypes": ["Normal"] + "movepool": ["darkpulse", "glare", "hypervoice", "surf", "thunderbolt", "voltswitch"], + "abilities": ["Dry Skin"] }, { "role": "Setup Sweeper", - "movepool": ["hypervoice", "raindance", "surf", "thunder"] + "movepool": ["hypervoice", "raindance", "surf", "thunder"], + "abilities": ["Dry Skin"] } ] }, "tyrantrum": { - "level": 84, + "level": 82, "sets": [ { "role": "Fast Attacker", - "movepool": ["dragondance", "earthquake", "headsmash", "outrage", "stealthrock", "superpower"], + "movepool": ["dragondance", "earthquake", "headsmash", "outrage", "superpower"], + "abilities": ["Rock Head"], "preferredTypes": ["Ground"] }, { "role": "Z-Move user", "movepool": ["dragondance", "earthquake", "headsmash", "outrage"], + "abilities": ["Rock Head"], "preferredTypes": ["Dragon", "Rock"] } ] @@ -5379,11 +6285,9 @@ "sets": [ { "role": "Bulky Attacker", - "movepool": ["ancientpower", "blizzard", "earthpower", "freezedry", "stealthrock"] - }, - { - "role": "Bulky Support", - "movepool": ["earthpower", "freezedry", "haze", "hypervoice", "stealthrock", "thunderwave"] + "movepool": ["ancientpower", "blizzard", "earthpower", "freezedry", "stealthrock", "thunderwave"], + "abilities": ["Snow Warning"], + "preferredTypes": ["Ground"] } ] }, @@ -5392,82 +6296,98 @@ "sets": [ { "role": "Bulky Attacker", - "movepool": ["calmmind", "hiddenpowerground", "hypervoice", "protect", "psyshock", "wish"] + "movepool": ["calmmind", "hiddenpowerground", "hypervoice", "protect", "psyshock", "wish"], + "abilities": ["Pixilate"] }, { "role": "Bulky Setup", - "movepool": ["calmmind", "hypervoice", "protect", "wish"] + "movepool": ["calmmind", "hypervoice", "protect", "wish"], + "abilities": ["Pixilate"] } ] }, "hawlucha": { - "level": 79, + "level": 78, "sets": [ { "role": "Setup Sweeper", - "movepool": ["acrobatics", "highjumpkick", "skyattack", "substitute", "swordsdance"] + "movepool": ["acrobatics", "highjumpkick", "skyattack", "substitute", "swordsdance"], + "abilities": ["Unburden"] } ] }, "dedenne": { - "level": 88, + "level": 90, "sets": [ + { + "role": "Bulky Support", + "movepool": ["protect", "recycle", "thunderbolt", "toxic"], + "abilities": ["Cheek Pouch"] + }, { "role": "Staller", - "movepool": ["protect", "recycle", "thunderbolt", "toxic"] + "movepool": ["recycle", "substitute", "superfang", "thunderbolt", "toxic", "uturn"], + "abilities": ["Cheek Pouch"] } ] }, "carbink": { - "level": 88, + "level": 90, "sets": [ { "role": "Bulky Support", - "movepool": ["lightscreen", "moonblast", "powergem", "reflect", "stealthrock", "toxic"] + "movepool": ["lightscreen", "moonblast", "powergem", "reflect", "stealthrock", "toxic"], + "abilities": ["Sturdy"] } ] }, "goodra": { - "level": 84, + "level": 85, "sets": [ { - "role": "Bulky Attacker", - "movepool": ["dracometeor", "dragontail", "earthquake", "fireblast", "powerwhip", "sludgebomb", "thunderbolt"] + "role": "AV Pivot", + "movepool": ["dracometeor", "dragontail", "earthquake", "fireblast", "powerwhip", "sludgebomb"], + "abilities": ["Sap Sipper"] } ] }, "klefki": { - "level": 85, + "level": 84, "sets": [ { "role": "Bulky Support", - "movepool": ["dazzlinggleam", "foulplay", "spikes", "thunderwave", "toxic"] + "movepool": ["dazzlinggleam", "foulplay", "spikes", "thunderwave"], + "abilities": ["Prankster"] }, { "role": "Bulky Attacker", - "movepool": ["magnetrise", "playrough", "spikes", "thunderwave"] + "movepool": ["magnetrise", "playrough", "spikes", "thunderwave"], + "abilities": ["Prankster"] } ] }, "trevenant": { - "level": 89, + "level": 90, "sets": [ { "role": "Wallbreaker", - "movepool": ["earthquake", "hornleech", "rockslide", "shadowclaw", "trickroom", "woodhammer"] + "movepool": ["earthquake", "hornleech", "rockslide", "shadowclaw", "trickroom", "woodhammer"], + "abilities": ["Natural Cure"] }, { "role": "Staller", - "movepool": ["leechseed", "protect", "shadowclaw", "substitute"] + "movepool": ["earthquake", "hornleech", "protect", "toxic"], + "abilities": ["Harvest"] } ] }, "gourgeistsmall": { - "level": 88, + "level": 90, "sets": [ { "role": "Bulky Support", - "movepool": ["seedbomb", "shadowsneak", "synthesis", "willowisp"] + "movepool": ["seedbomb", "shadowsneak", "synthesis", "willowisp"], + "abilities": ["Frisk"] } ] }, @@ -5476,56 +6396,63 @@ "sets": [ { "role": "Bulky Support", - "movepool": ["seedbomb", "shadowsneak", "synthesis", "willowisp"] + "movepool": ["seedbomb", "shadowsneak", "synthesis", "willowisp"], + "abilities": ["Frisk"] } ] }, "gourgeist": { - "level": 89, + "level": 91, "sets": [ { "role": "Bulky Support", - "movepool": ["seedbomb", "shadowsneak", "synthesis", "willowisp"] + "movepool": ["seedbomb", "shadowsneak", "synthesis", "willowisp"], + "abilities": ["Frisk"] } ] }, "gourgeistsuper": { - "level": 88, + "level": 89, "sets": [ { "role": "Bulky Support", - "movepool": ["seedbomb", "shadowsneak", "synthesis", "willowisp"] + "movepool": ["seedbomb", "shadowsneak", "synthesis", "willowisp"], + "abilities": ["Frisk"] } ] }, "avalugg": { - "level": 88, + "level": 90, "sets": [ { "role": "Bulky Support", - "movepool": ["avalanche", "earthquake", "rapidspin", "recover", "roar", "toxic"] + "movepool": ["avalanche", "curse", "earthquake", "rapidspin", "recover"], + "abilities": ["Sturdy"] } ] }, "noivern": { - "level": 84, + "level": 83, "sets": [ { "role": "Fast Attacker", - "movepool": ["boomburst", "dracometeor", "flamethrower", "hurricane", "roost", "switcheroo"] + "movepool": ["boomburst", "dracometeor", "flamethrower", "hurricane", "roost", "switcheroo"], + "abilities": ["Infiltrator"] }, { "role": "Fast Support", - "movepool": ["defog", "dracometeor", "flamethrower", "hurricane", "roost", "uturn"] + "movepool": ["defog", "dracometeor", "flamethrower", "hurricane", "roost", "uturn"], + "abilities": ["Infiltrator"] } ] }, "xerneas": { - "level": 66, + "level": 64, "sets": [ { "role": "Setup Sweeper", - "movepool": ["focusblast", "geomancy", "hiddenpowerfire", "moonblast", "psyshock", "thunder"] + "movepool": ["focusblast", "geomancy", "moonblast", "psyshock"], + "abilities": ["Fairy Aura"] } ] }, @@ -5534,11 +6461,8 @@ "sets": [ { "role": "Bulky Support", - "movepool": ["foulplay", "knockoff", "oblivionwing", "roost", "suckerpunch", "taunt", "toxic", "uturn"] - }, - { - "role": "Bulky Attacker", - "movepool": ["darkpulse", "focusblast", "knockoff", "oblivionwing", "suckerpunch", "uturn"] + "movepool": ["knockoff", "oblivionwing", "roost", "suckerpunch", "taunt", "toxic", "uturn"], + "abilities": ["Dark Aura"] } ] }, @@ -5547,47 +6471,54 @@ "sets": [ { "role": "Setup Sweeper", - "movepool": ["dragondance", "extremespeed", "outrage", "substitute", "thousandarrows"] + "movepool": ["dragondance", "extremespeed", "outrage", "substitute", "thousandarrows"], + "abilities": ["Power Construct"] }, { "role": "Bulky Setup", - "movepool": ["coil", "rest", "sleeptalk", "thousandarrows"] + "movepool": ["coil", "rest", "sleeptalk", "thousandarrows"], + "abilities": ["Power Construct"] } ] }, "zygarde10": { - "level": 83, + "level": 82, "sets": [ { "role": "Bulky Attacker", - "movepool": ["coil", "extremespeed", "irontail", "outrage", "thousandarrows"] + "movepool": ["extremespeed", "irontail", "outrage", "thousandarrows"], + "abilities": ["Aura Break"] + }, + { + "role": "Setup Sweeper", + "movepool": ["coil", "extremespeed", "irontail", "outrage", "thousandarrows"], + "abilities": ["Aura Break"] }, { "role": "Z-Move user", - "movepool": ["coil", "extremespeed", "outrage", "thousandarrows"], + "movepool": ["coil", "extremespeed", "irontail", "outrage", "thousandarrows"], + "abilities": ["Aura Break"], "preferredTypes": ["Dragon"] } ] }, "diancie": { - "level": 84, + "level": 81, "sets": [ { "role": "Bulky Support", - "movepool": ["diamondstorm", "earthpower", "healbell", "lightscreen", "moonblast", "reflect", "stealthrock", "toxic"] + "movepool": ["diamondstorm", "earthpower", "healbell", "moonblast", "stealthrock", "toxic"], + "abilities": ["Clear Body"] } ] }, "dianciemega": { - "level": 77, + "level": 75, "sets": [ { "role": "Fast Attacker", - "movepool": ["diamondstorm", "earthpower", "hiddenpowerfire", "moonblast", "stealthrock"] - }, - { - "role": "Setup Sweeper", - "movepool": ["calmmind", "earthpower", "hiddenpowerfire", "moonblast", "powergem"] + "movepool": ["calmmind", "diamondstorm", "earthpower", "moonblast", "stealthrock"], + "abilities": ["Clear Body"] } ] }, @@ -5596,31 +6527,35 @@ "sets": [ { "role": "Fast Attacker", - "movepool": ["focusblast", "nastyplot", "psyshock", "shadowball", "trick"] + "movepool": ["focusblast", "nastyplot", "psychic", "psyshock", "shadowball", "trick"], + "abilities": ["Magician"] } ] }, "hoopaunbound": { - "level": 82, + "level": 81, "sets": [ { "role": "Wallbreaker", - "movepool": ["drainpunch", "gunkshot", "hyperspacefury", "icepunch", "trick", "zenheadbutt"], + "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": 82, + "level": 81, "sets": [ { "role": "Bulky Attacker", - "movepool": ["defog", "earthpower", "fireblast", "sludgebomb", "steameruption", "substitute", "superpower"] + "movepool": ["defog", "earthpower", "fireblast", "sludgebomb", "steameruption", "superpower", "toxic"], + "abilities": ["Water Absorb"] } ] }, @@ -5629,20 +6564,28 @@ "sets": [ { "role": "Bulky Attacker", - "movepool": ["defog", "leafstorm", "roost", "spiritshackle", "uturn"] + "movepool": ["defog", "leafstorm", "roost", "spiritshackle", "uturn"], + "abilities": ["Overgrow"] }, { "role": "Z-Move user", - "movepool": ["leafblade", "shadowsneak", "spiritshackle", "swordsdance"] + "movepool": ["leafblade", "shadowsneak", "spiritshackle", "swordsdance"], + "abilities": ["Overgrow"] } ] }, "incineroar": { - "level": 84, + "level": 83, "sets": [ { "role": "AV Pivot", - "movepool": ["darkestlariat", "earthquake", "fakeout", "flareblitz", "knockoff", "overheat", "uturn"] + "movepool": ["darkestlariat", "earthquake", "fakeout", "flareblitz", "knockoff", "overheat", "uturn"], + "abilities": ["Intimidate"] + }, + { + "role": "Z-Move user", + "movepool": ["darkestlariat", "flamecharge", "flareblitz", "swordsdance"], + "abilities": ["Intimidate"] } ] }, @@ -5651,29 +6594,33 @@ "sets": [ { "role": "Bulky Attacker", - "movepool": ["hydropump", "moonblast", "psychic", "scald"] + "movepool": ["hydropump", "moonblast", "psychic", "scald"], + "abilities": ["Torrent"] } ] }, "toucannon": { - "level": 87, + "level": 88, "sets": [ { "role": "Wallbreaker", - "movepool": ["beakblast", "boomburst", "brickbreak", "bulletseed", "roost"] + "movepool": ["beakblast", "boomburst", "brickbreak", "bulletseed", "roost"], + "abilities": ["Keen Eye", "Skill Link"] }, { "role": "Bulky Attacker", - "movepool": ["bravebird", "brickbreak", "bulletseed", "knockoff", "rockblast", "swordsdance", "uturn"] + "movepool": ["bravebird", "brickbreak", "bulletseed", "knockoff", "rockblast", "swordsdance", "uturn"], + "abilities": ["Keen Eye", "Skill Link"] } ] }, "gumshoos": { - "level": 90, + "level": 93, "sets": [ { "role": "Wallbreaker", - "movepool": ["crunch", "earthquake", "firepunch", "return", "uturn"] + "movepool": ["crunch", "earthquake", "return", "uturn"], + "abilities": ["Adaptability", "Stakeout"] } ] }, @@ -5682,31 +6629,39 @@ "sets": [ { "role": "Wallbreaker", - "movepool": ["agility", "bugbuzz", "energyball", "hiddenpowerice", "thunderbolt", "voltswitch"], - "preferredTypes": ["Bug"] + "movepool": ["agility", "bugbuzz", "energyball", "thunderbolt", "voltswitch"], + "abilities": ["Levitate"] }, { "role": "Bulky Attacker", - "movepool": ["bugbuzz", "energyball", "roost", "thunderbolt", "voltswitch"], + "movepool": ["bugbuzz", "discharge", "energyball", "roost", "toxic", "voltswitch"], + "abilities": ["Levitate"], "preferredTypes": ["Bug"] } ] }, "crabominable": { - "level": 88, + "level": 91, "sets": [ { "role": "Wallbreaker", - "movepool": ["closecombat", "drainpunch", "earthquake", "icehammer", "stoneedge"] + "movepool": ["closecombat", "drainpunch", "earthquake", "icehammer", "stoneedge"], + "abilities": ["Iron Fist"] + }, + { + "role": "AV Pivot", + "movepool": ["drainpunch", "earthquake", "icehammer", "thunderpunch"], + "abilities": ["Iron Fist"] } ] }, "oricorio": { - "level": 88, + "level": 89, "sets": [ { "role": "Bulky Attacker", - "movepool": ["calmmind", "defog", "hurricane", "revelationdance", "roost", "toxic"] + "movepool": ["calmmind", "defog", "hurricane", "revelationdance", "roost", "toxic"], + "abilities": ["Dancer"] } ] }, @@ -5715,25 +6670,28 @@ "sets": [ { "role": "Bulky Attacker", - "movepool": ["calmmind", "defog", "hurricane", "revelationdance", "roost", "toxic"] + "movepool": ["calmmind", "defog", "hurricane", "revelationdance", "roost", "toxic"], + "abilities": ["Dancer"] } ] }, "oricoriopau": { - "level": 90, + "level": 91, "sets": [ { "role": "Bulky Attacker", - "movepool": ["calmmind", "defog", "hurricane", "revelationdance", "roost", "toxic"] + "movepool": ["calmmind", "defog", "hurricane", "revelationdance", "roost", "toxic"], + "abilities": ["Dancer"] } ] }, "oricoriosensu": { - "level": 88, + "level": 89, "sets": [ { "role": "Bulky Attacker", - "movepool": ["calmmind", "defog", "hurricane", "revelationdance", "roost", "toxic"] + "movepool": ["calmmind", "defog", "hurricane", "revelationdance", "roost", "toxic"], + "abilities": ["Dancer"] } ] }, @@ -5742,11 +6700,13 @@ "sets": [ { "role": "Setup Sweeper", - "movepool": ["bugbuzz", "hiddenpowerground", "moonblast", "quiverdance", "roost"] + "movepool": ["bugbuzz", "hiddenpowerground", "moonblast", "quiverdance", "roost"], + "abilities": ["Shield Dust"] }, { "role": "Fast Support", - "movepool": ["aromatherapy", "moonblast", "roost", "stickyweb", "stunspore", "uturn"] + "movepool": ["aromatherapy", "moonblast", "roost", "stickyweb", "stunspore", "uturn"], + "abilities": ["Shield Dust"] } ] }, @@ -5755,12 +6715,14 @@ "sets": [ { "role": "Fast Attacker", - "movepool": ["accelerock", "drillrun", "firefang", "stoneedge", "swordsdance"], + "movepool": ["accelerock", "drillrun", "stoneedge", "swordsdance", "zenheadbutt"], + "abilities": ["Sand Rush"], "preferredTypes": ["Ground"] }, { "role": "Z-Move user", - "movepool": ["accelerock", "drillrun", "firefang", "stoneedge", "swordsdance"], + "movepool": ["accelerock", "drillrun", "stoneedge", "swordsdance", "zenheadbutt"], + "abilities": ["Sand Rush"], "preferredTypes": ["Ground"] } ] @@ -5770,11 +6732,13 @@ "sets": [ { "role": "Fast Attacker", - "movepool": ["firepunch", "stealthrock", "stoneedge", "suckerpunch", "swordsdance"] + "movepool": ["stealthrock", "stompingtantrum", "stoneedge", "suckerpunch", "swordsdance"], + "abilities": ["No Guard"] }, { "role": "Z-Move user", - "movepool": ["firepunch", "stoneedge", "suckerpunch", "swordsdance"] + "movepool": ["stompingtantrum", "stoneedge", "suckerpunch", "swordsdance"], + "abilities": ["No Guard"] } ] }, @@ -5783,81 +6747,93 @@ "sets": [ { "role": "Fast Attacker", - "movepool": ["accelerock", "drillrun", "firefang", "return", "stoneedge", "swordsdance"], + "movepool": ["accelerock", "drillrun", "return", "stoneedge", "swordsdance", "zenheadbutt"], + "abilities": ["Tough Claws"], "preferredTypes": ["Ground"] }, { "role": "Z-Move user", - "movepool": ["accelerock", "drillrun", "firefang", "return", "stoneedge", "swordsdance"], + "movepool": ["accelerock", "drillrun", "return", "stoneedge", "swordsdance", "zenheadbutt"], + "abilities": ["Tough Claws"], "preferredTypes": ["Ground"] } ] }, - "wishiwashischool": { - "level": 87, + "wishiwashi": { + "level": 89, "sets": [ { "role": "AV Pivot", "movepool": ["earthquake", "hiddenpowergrass", "hydropump", "icebeam", "scald", "uturn"], + "abilities": ["Schooling"], "preferredTypes": ["Ice"] }, { "role": "Wallbreaker", - "movepool": ["hiddenpowergrass", "hydropump", "icebeam", "scald"] + "movepool": ["hiddenpowergrass", "hydropump", "icebeam", "scald"], + "abilities": ["Schooling"] } ] }, "toxapex": { - "level": 81, + "level": 80, "sets": [ { "role": "Bulky Support", - "movepool": ["haze", "recover", "scald", "toxic", "toxicspikes"] + "movepool": ["haze", "recover", "scald", "toxic", "toxicspikes"], + "abilities": ["Regenerator"] }, { "role": "Staller", - "movepool": ["banefulbunker", "recover", "scald", "toxic"] + "movepool": ["banefulbunker", "recover", "scald", "toxic"], + "abilities": ["Regenerator"] } ] }, "mudsdale": { - "level": 84, + "level": 83, "sets": [ { "role": "Bulky Attacker", - "movepool": ["closecombat", "earthquake", "heavyslam", "rockslide", "stealthrock"] + "movepool": ["closecombat", "earthquake", "heavyslam", "rockslide", "stealthrock", "toxic"], + "abilities": ["Stamina"], + "preferredTypes": ["Rock"] } ] }, "araquanid": { - "level": 82, + "level": 81, "sets": [ { "role": "Bulky Support", - "movepool": ["leechlife", "liquidation", "mirrorcoat", "stickyweb", "toxic"] + "movepool": ["leechlife", "liquidation", "mirrorcoat", "stickyweb", "toxic"], + "abilities": ["Water Bubble"] } ] }, "lurantis": { - "level": 91, + "level": 90, "sets": [ { "role": "Bulky Attacker", "movepool": ["defog", "hiddenpowerice", "knockoff", "leafstorm", "superpower", "synthesis"], + "abilities": ["Contrary"], "preferredTypes": ["Fighting"] }, { "role": "AV Pivot", - "movepool": ["hiddenpowerice", "hiddenpowerrock", "knockoff", "leafstorm", "superpower"] + "movepool": ["hiddenpowerice", "hiddenpowerrock", "knockoff", "leafstorm", "superpower"], + "abilities": ["Contrary"] } ] }, "shiinotic": { - "level": 89, + "level": 91, "sets": [ { "role": "Bulky Support", - "movepool": ["gigadrain", "leechseed", "moonblast", "spore", "strengthsap"] + "movepool": ["gigadrain", "hiddenpowerground", "leechseed", "moonblast", "spore", "strengthsap"], + "abilities": ["Effect Spore"] } ] }, @@ -5867,21 +6843,33 @@ { "role": "Z-Move user", "movepool": ["dragonpulse", "fireblast", "hiddenpowergrass", "nastyplot", "sludgewave"], + "abilities": ["Corrosion"], "preferredTypes": ["Dragon", "Fire"] }, { "role": "Staller", - "movepool": ["flamethrower", "protect", "substitute", "toxic"] + "movepool": ["flamethrower", "protect", "substitute", "toxic"], + "abilities": ["Corrosion"] } ] }, "bewear": { - "level": 85, + "level": 84, "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["doubleedge", "return", "shadowclaw", "superpower", "swordsdance"], + "abilities": ["Fluffy"] + }, { "role": "Fast Attacker", - "movepool": ["doubleedge", "icepunch", "return", "shadowclaw", "superpower", "swordsdance"], - "preferredTypes": ["Normal"] + "movepool": ["doubleedge", "drainpunch", "shadowclaw", "superpower"], + "abilities": ["Fluffy"] + }, + { + "role": "Bulky Setup", + "movepool": ["bulkup", "doubleedge", "drainpunch", "return", "shadowclaw"], + "abilities": ["Fluffy"] } ] }, @@ -5891,6 +6879,7 @@ { "role": "Fast Support", "movepool": ["highjumpkick", "knockoff", "powerwhip", "rapidspin", "synthesis", "uturn"], + "abilities": ["Queenly Majesty"], "preferredTypes": ["Fighting"] } ] @@ -5900,30 +6889,45 @@ "sets": [ { "role": "Bulky Support", - "movepool": ["aromatherapy", "defog", "drainingkiss", "synthesis", "toxic", "uturn"] + "movepool": ["aromatherapy", "defog", "drainingkiss", "synthesis", "toxic", "uturn"], + "abilities": ["Triage"] + }, + { + "role": "Bulky Setup", + "movepool": ["calmmind", "drainingkiss", "gigadrain", "hiddenpowerground"], + "abilities": ["Triage"] }, { "role": "Setup Sweeper", - "movepool": ["calmmind", "drainingkiss", "gigadrain", "hiddenpowerground"] + "movepool": ["calmmind", "drainingkiss", "gigadrain", "hiddenpowerground", "synthesis"], + "abilities": ["Triage"], + "preferredTypes": ["Ground"] } ] }, "oranguru": { - "level": 90, + "level": 93, "sets": [ { "role": "Wallbreaker", - "movepool": ["focusblast", "nastyplot", "psyshock", "thunderbolt", "trickroom"] + "movepool": ["focusblast", "nastyplot", "naturepower", "psychic", "psyshock", "thunderbolt", "trick"], + "abilities": ["Inner Focus"] } ] }, "passimian": { - "level": 85, + "level": 84, "sets": [ { "role": "Fast Attacker", "movepool": ["closecombat", "earthquake", "gunkshot", "knockoff", "rockslide", "uturn"], + "abilities": ["Defiant"], "preferredTypes": ["Dark"] + }, + { + "role": "Bulky Setup", + "movepool": ["bulkup", "drainpunch", "gunkshot", "knockoff"], + "abilities": ["Defiant"] } ] }, @@ -5932,7 +6936,8 @@ "sets": [ { "role": "Bulky Attacker", - "movepool": ["firstimpression", "knockoff", "leechlife", "liquidation", "spikes"] + "movepool": ["firstimpression", "knockoff", "leechlife", "liquidation", "spikes"], + "abilities": ["Emergency Exit"] } ] }, @@ -5941,42 +6946,38 @@ "sets": [ { "role": "Bulky Attacker", - "movepool": ["earthpower", "shadowball", "shoreup", "stealthrock", "toxic"] + "movepool": ["earthpower", "shadowball", "shoreup", "stealthrock", "toxic"], + "abilities": ["Water Compaction"] } ] }, "pyukumuku": { - "level": 88, + "level": 91, "sets": [ { "role": "Bulky Support", - "movepool": ["block", "recover", "soak", "toxic"] + "movepool": ["block", "recover", "soak", "toxic"], + "abilities": ["Unaware"] } ] }, "typenull": { "level": 85, "sets": [ - { - "role": "Bulky Setup", - "movepool": ["rest", "return", "sleeptalk", "swordsdance"] - }, { "role": "Bulky Support", - "movepool": ["payback", "rest", "return", "sleeptalk", "uturn"] + "movepool": ["payback", "rest", "return", "sleeptalk", "swordsdance"], + "abilities": ["Battle Armor"] } ] }, "silvally": { "level": 87, "sets": [ - { - "role": "Bulky Attacker", - "movepool": ["crunch", "explosion", "flamethrower", "icebeam", "return", "surf", "uturn"] - }, { "role": "Setup Sweeper", "movepool": ["crunch", "doubleedge", "explosion", "flamecharge", "ironhead", "return", "swordsdance"], + "abilities": ["RKS System"], "preferredTypes": ["Dark"] } ] @@ -5986,7 +6987,8 @@ "sets": [ { "role": "Fast Support", - "movepool": ["defog", "flamethrower", "icebeam", "thunderbolt", "uturn"] + "movepool": ["defog", "flamethrower", "icebeam", "thunderbolt", "toxic", "uturn"], + "abilities": ["RKS System"] } ] }, @@ -5995,7 +6997,8 @@ "sets": [ { "role": "Setup Sweeper", - "movepool": ["flamecharge", "ironhead", "multiattack", "swordsdance"] + "movepool": ["flamecharge", "ironhead", "multiattack", "swordsdance"], + "abilities": ["RKS System"] } ] }, @@ -6004,11 +7007,13 @@ "sets": [ { "role": "Fast Support", - "movepool": ["defog", "dracometeor", "flamethrower", "ironhead", "partingshot"] + "movepool": ["defog", "dracometeor", "flamethrower", "ironhead", "partingshot", "toxic", "uturn"], + "abilities": ["RKS System"] }, { "role": "Setup Sweeper", - "movepool": ["flamecharge", "ironhead", "multiattack", "swordsdance"] + "movepool": ["flamecharge", "ironhead", "outrage", "swordsdance"], + "abilities": ["RKS System"] } ] }, @@ -6017,7 +7022,8 @@ "sets": [ { "role": "Fast Support", - "movepool": ["defog", "flamethrower", "icebeam", "multiattack", "partingshot", "toxic"], + "movepool": ["defog", "flamethrower", "icebeam", "multiattack", "partingshot", "toxic", "uturn"], + "abilities": ["RKS System"], "preferredTypes": ["Ice"] } ] @@ -6027,7 +7033,8 @@ "sets": [ { "role": "Fast Support", - "movepool": ["defog", "flamethrower", "multiattack", "partingshot", "rockslide", "thunderwave"] + "movepool": ["defog", "flamethrower", "multiattack", "partingshot", "surf", "toxic", "uturn"], + "abilities": ["RKS System"] } ] }, @@ -6036,12 +7043,14 @@ "sets": [ { "role": "Fast Support", - "movepool": ["defog", "flamethrower", "icebeam", "multiattack", "partingshot", "shadowball", "toxic"] + "movepool": ["defog", "flamethrower", "icebeam", "multiattack", "partingshot", "shadowball", "toxic", "uturn"], + "abilities": ["RKS System"] }, { "role": "Setup Sweeper", - "movepool": ["flamecharge", "ironhead", "multiattack", "shadowclaw", "swordsdance"], - "preferredTypes": ["Ghost"] + "movepool": ["crunch", "flamecharge", "ironhead", "multiattack", "rockslide", "swordsdance"], + "abilities": ["RKS System"], + "preferredTypes": ["Dark"] } ] }, @@ -6050,7 +7059,8 @@ "sets": [ { "role": "Fast Support", - "movepool": ["defog", "icebeam", "multiattack", "surf", "thunderbolt", "toxic", "uturn"] + "movepool": ["defog", "icebeam", "multiattack", "partingshot", "surf", "thunderbolt", "toxic", "uturn"], + "abilities": ["RKS System"] } ] }, @@ -6059,7 +7069,8 @@ "sets": [ { "role": "Fast Support", - "movepool": ["defog", "flamethrower", "ironhead", "multiattack", "partingshot", "thunderwave"] + "movepool": ["defog", "flamethrower", "ironhead", "multiattack", "partingshot", "toxic", "uturn"], + "abilities": ["RKS System"] } ] }, @@ -6068,11 +7079,13 @@ "sets": [ { "role": "Fast Support", - "movepool": ["defog", "flamethrower", "icebeam", "multiattack", "partingshot", "toxic"] + "movepool": ["defog", "flamethrower", "icebeam", "multiattack", "partingshot", "toxic", "uturn"], + "abilities": ["RKS System"] }, { "role": "Setup Sweeper", - "movepool": ["explosion", "multiattack", "swordsdance", "xscissor"] + "movepool": ["explosion", "multiattack", "swordsdance", "xscissor"], + "abilities": ["RKS System"] } ] }, @@ -6081,7 +7094,8 @@ "sets": [ { "role": "Fast Support", - "movepool": ["defog", "flamethrower", "icebeam", "multiattack", "partingshot", "toxic"] + "movepool": ["defog", "flamethrower", "icebeam", "multiattack", "partingshot", "toxic", "uturn"], + "abilities": ["RKS System"] } ] }, @@ -6090,11 +7104,13 @@ "sets": [ { "role": "Fast Support", - "movepool": ["defog", "flamethrower", "icebeam", "multiattack", "partingshot", "toxic"] + "movepool": ["defog", "flamethrower", "icebeam", "multiattack", "partingshot", "toxic", "uturn"], + "abilities": ["RKS System"] }, { "role": "Setup Sweeper", - "movepool": ["flamecharge", "multiattack", "rockslide", "swordsdance"] + "movepool": ["flamecharge", "multiattack", "rockslide", "swordsdance"], + "abilities": ["RKS System"] } ] }, @@ -6103,7 +7119,8 @@ "sets": [ { "role": "Fast Support", - "movepool": ["defog", "flamethrower", "multiattack", "thunderbolt", "toxic", "uturn"], + "movepool": ["defog", "flamethrower", "multiattack", "partingshot", "thunderbolt", "toxic", "uturn"], + "abilities": ["RKS System"], "preferredTypes": ["Electric"] } ] @@ -6113,7 +7130,8 @@ "sets": [ { "role": "Fast Support", - "movepool": ["defog", "flamethrower", "grasspledge", "multiattack", "partingshot", "surf", "toxic"] + "movepool": ["defog", "flamethrower", "multiattack", "partingshot", "surf", "toxic", "uturn"], + "abilities": ["RKS System"] } ] }, @@ -6122,7 +7140,8 @@ "sets": [ { "role": "Fast Support", - "movepool": ["defog", "flamethrower", "multiattack", "toxic", "uturn"] + "movepool": ["defog", "flamethrower", "multiattack", "partingshot", "toxic", "uturn"], + "abilities": ["RKS System"] } ] }, @@ -6131,7 +7150,8 @@ "sets": [ { "role": "Fast Support", - "movepool": ["defog", "flamethrower", "grasspledge", "multiattack", "partingshot", "toxic"] + "movepool": ["defog", "flamethrower", "grasspledge", "multiattack", "partingshot", "toxic", "uturn"], + "abilities": ["RKS System"] } ] }, @@ -6140,7 +7160,8 @@ "sets": [ { "role": "Fast Support", - "movepool": ["defog", "flamethrower", "multiattack", "partingshot", "thunderbolt", "toxic"] + "movepool": ["defog", "flamethrower", "multiattack", "partingshot", "thunderbolt", "toxic", "uturn"], + "abilities": ["RKS System"] } ] }, @@ -6149,16 +7170,18 @@ "sets": [ { "role": "Fast Support", - "movepool": ["defog", "icebeam", "multiattack", "partingshot", "thunderbolt"] + "movepool": ["defog", "icebeam", "multiattack", "partingshot", "thunderbolt", "toxic", "uturn"], + "abilities": ["RKS System"] } ] }, "minior": { - "level": 81, + "level": 79, "sets": [ { "role": "Setup Sweeper", - "movepool": ["acrobatics", "earthquake", "powergem", "shellsmash"] + "movepool": ["acrobatics", "earthquake", "powergem", "shellsmash"], + "abilities": ["Shields Down"] } ] }, @@ -6168,20 +7191,23 @@ { "role": "Bulky Attacker", "movepool": ["earthquake", "knockoff", "rapidspin", "return", "suckerpunch", "superpower", "uturn", "woodhammer"], + "abilities": ["Comatose"], "preferredTypes": ["Dark"] } ] }, "turtonator": { - "level": 87, + "level": 88, "sets": [ { "role": "AV Pivot", - "movepool": ["dracometeor", "dragontail", "earthquake", "explosion", "fireblast"] + "movepool": ["dracometeor", "dragontail", "earthquake", "explosion", "fireblast"], + "abilities": ["Shell Armor"] }, { "role": "Setup Sweeper", - "movepool": ["dracometeor", "dragonpulse", "earthquake", "fireblast", "shellsmash"] + "movepool": ["dracometeor", "dragonpulse", "earthquake", "fireblast", "shellsmash"], + "abilities": ["Shell Armor"] } ] }, @@ -6190,76 +7216,92 @@ "sets": [ { "role": "Bulky Support", - "movepool": ["ironhead", "nuzzle", "spikyshield", "uturn", "wish"] + "movepool": ["ironhead", "nuzzle", "spikyshield", "uturn", "wish"], + "abilities": ["Iron Barbs", "Lightning Rod", "Sturdy"] }, { "role": "Fast Support", - "movepool": ["ironhead", "spikyshield", "uturn", "wish", "zingzap"] + "movepool": ["ironhead", "spikyshield", "uturn", "wish", "zingzap"], + "abilities": ["Iron Barbs", "Lightning Rod", "Sturdy"] }, { "role": "AV Pivot", "movepool": ["ironhead", "nuzzle", "superfang", "uturn", "zingzap"], + "abilities": ["Iron Barbs", "Lightning Rod", "Sturdy"], "preferredTypes": ["Steel"] } ] }, "mimikyu": { - "level": 75, + "level": 73, "sets": [ { "role": "Setup Sweeper", - "movepool": ["drainpunch", "playrough", "shadowclaw", "shadowsneak", "swordsdance", "taunt"] + "movepool": ["drainpunch", "playrough", "shadowclaw", "shadowsneak", "swordsdance"], + "abilities": ["Disguise"] }, { "role": "Z-Move user", - "movepool": ["drainpunch", "playrough", "shadowclaw", "shadowsneak", "swordsdance", "taunt"] + "movepool": ["drainpunch", "playrough", "shadowclaw", "shadowsneak", "swordsdance"], + "abilities": ["Disguise"] } ] }, "bruxish": { - "level": 86, + "level": 85, "sets": [ { "role": "Fast Attacker", - "movepool": ["aquajet", "crunch", "icefang", "liquidation", "psychicfangs", "swordsdance"] + "movepool": ["aquajet", "crunch", "icefang", "liquidation", "psychicfangs", "swordsdance"], + "abilities": ["Strong Jaw"], + "preferredTypes": ["Dark"] } ] }, "drampa": { - "level": 92, + "level": 91, "sets": [ { "role": "Wallbreaker", - "movepool": ["dracometeor", "fireblast", "hypervoice", "roost", "thunderbolt"], - "preferredTypes": ["Fire"] + "movepool": ["dracometeor", "fireblast", "hypervoice", "thunderbolt"], + "abilities": ["Sap Sipper"] + }, + { + "role": "Fast Attacker", + "movepool": ["dracometeor", "fireblast", "hypervoice", "roost"], + "abilities": ["Berserk"] }, { "role": "Bulky Attacker", - "movepool": ["defog", "dracometeor", "fireblast", "glare", "hypervoice", "roost"] + "movepool": ["dracometeor", "fireblast", "glare", "hypervoice", "roost"], + "abilities": ["Berserk"] } ] }, "dhelmise": { - "level": 89, + "level": 90, "sets": [ { "role": "Fast Support", "movepool": ["anchorshot", "earthquake", "knockoff", "powerwhip", "rapidspin", "synthesis"], + "abilities": ["Steelworker"], "preferredTypes": ["Steel"] } ] }, "kommoo": { - "level": 76, + "level": 75, "sets": [ { "role": "Z-Move user", - "movepool": ["clangingscales", "closecombat", "dragondance", "poisonjab"], + "movepool": ["clangingscales", "closecombat", "dragondance", "ironhead"], + "abilities": ["Bulletproof", "Soundproof"], "preferredTypes": ["Dragon"] }, { "role": "Setup Sweeper", - "movepool": ["closecombat", "dragondance", "outrage", "poisonjab"] + "movepool": ["closecombat", "dragondance", "ironhead", "outrage"], + "abilities": ["Bulletproof", "Soundproof"] } ] }, @@ -6268,21 +7310,29 @@ "sets": [ { "role": "Fast Support", - "movepool": ["bravebird", "dazzlinggleam", "defog", "naturesmadness", "uturn", "wildcharge"] + "movepool": ["bravebird", "dazzlinggleam", "defog", "naturesmadness", "uturn", "wildcharge"], + "abilities": ["Electric Surge"] }, { "role": "Z-Move user", "movepool": ["calmmind", "dazzlinggleam", "grassknot", "roost", "thunderbolt"], + "abilities": ["Electric Surge"], "preferredTypes": ["Electric"] } ] }, "tapulele": { - "level": 78, + "level": 77, "sets": [ { "role": "Fast Attacker", - "movepool": ["calmmind", "focusblast", "hiddenpowerfire", "moonblast", "psychic", "psyshock"] + "movepool": ["focusblast", "moonblast", "psychic", "psyshock"], + "abilities": ["Psychic Surge"] + }, + { + "role": "Setup Sweeper", + "movepool": ["calmmind", "focusblast", "moonblast", "psychic", "psyshock"], + "abilities": ["Psychic Surge"] } ] }, @@ -6291,7 +7341,8 @@ "sets": [ { "role": "Bulky Attacker", - "movepool": ["bulkup", "hornleech", "megahorn", "stoneedge", "superpower", "woodhammer"] + "movepool": ["bulkup", "hornleech", "megahorn", "stoneedge", "superpower", "woodhammer"], + "abilities": ["Grassy Surge"] } ] }, @@ -6300,37 +7351,46 @@ "sets": [ { "role": "Bulky Setup", - "movepool": ["calmmind", "hydropump", "icebeam", "moonblast", "scald", "taunt"] + "movepool": ["calmmind", "hydropump", "icebeam", "moonblast", "surf", "taunt"], + "abilities": ["Misty Surge"] } ] }, "solgaleo": { - "level": 75, + "level": 74, "sets": [ { "role": "Bulky Attacker", - "movepool": ["earthquake", "flareblitz", "knockoff", "morningsun", "stoneedge", "sunsteelstrike", "zenheadbutt"] + "movepool": ["earthquake", "flareblitz", "knockoff", "morningsun", "stoneedge", "sunsteelstrike", "zenheadbutt"], + "abilities": ["Full Metal Body"], + "preferredTypes": ["Ground"] }, { "role": "Fast Attacker", - "movepool": ["earthquake", "flareblitz", "knockoff", "stoneedge", "sunsteelstrike", "zenheadbutt"] + "movepool": ["earthquake", "flareblitz", "knockoff", "stoneedge", "sunsteelstrike", "zenheadbutt"], + "abilities": ["Full Metal Body"], + "preferredTypes": ["Ground"] }, { "role": "Bulky Setup", - "movepool": ["earthquake", "flamecharge", "knockoff", "psychic", "sunsteelstrike"] + "movepool": ["earthquake", "flamecharge", "knockoff", "psychic", "sunsteelstrike"], + "abilities": ["Full Metal Body"], + "preferredTypes": ["Ground"] } ] }, "lunala": { - "level": 73, + "level": 72, "sets": [ { "role": "Bulky Attacker", - "movepool": ["calmmind", "moonblast", "moongeistbeam", "psyshock", "roost"] + "movepool": ["calmmind", "moonblast", "moongeistbeam", "roost"], + "abilities": ["Shadow Shield"] }, { "role": "Z-Move user", - "movepool": ["calmmind", "moonblast", "moongeistbeam", "psyshock", "roost"] + "movepool": ["calmmind", "moonblast", "moongeistbeam", "psyshock", "roost"], + "abilities": ["Shadow Shield"] } ] }, @@ -6339,7 +7399,9 @@ "sets": [ { "role": "Fast Support", - "movepool": ["grassknot", "hiddenpowerfire", "hiddenpowerground", "powergem", "sludgewave", "stealthrock", "thunderbolt", "toxicspikes"] + "movepool": ["grassknot", "hiddenpowerfire", "hiddenpowerground", "powergem", "sludgewave", "stealthrock", "thunderbolt", "toxicspikes"], + "abilities": ["Beast Boost"], + "preferredTypes": ["Rock"] } ] }, @@ -6348,11 +7410,13 @@ "sets": [ { "role": "Fast Attacker", - "movepool": ["drainpunch", "earthquake", "leechlife", "poisonjab", "stoneedge", "superpower"] + "movepool": ["drainpunch", "earthquake", "ironhead", "leechlife", "stoneedge", "superpower"], + "abilities": ["Beast Boost"] }, { "role": "Bulky Attacker", - "movepool": ["bulkup", "drainpunch", "leechlife", "roost", "stoneedge", "toxic"] + "movepool": ["bulkup", "drainpunch", "leechlife", "roost", "stoneedge", "toxic"], + "abilities": ["Beast Boost"] } ] }, @@ -6361,7 +7425,9 @@ "sets": [ { "role": "Fast Attacker", - "movepool": ["highjumpkick", "icebeam", "poisonjab", "throatchop", "uturn"] + "movepool": ["highjumpkick", "icebeam", "poisonjab", "throatchop", "uturn"], + "abilities": ["Beast Boost"], + "preferredTypes": ["Dark"] } ] }, @@ -6370,42 +7436,49 @@ "sets": [ { "role": "Fast Attacker", - "movepool": ["dazzlinggleam", "energyball", "hiddenpowerice", "tailglow", "thunderbolt", "voltswitch"] + "movepool": ["dazzlinggleam", "energyball", "hiddenpowerice", "tailglow", "thunderbolt", "voltswitch"], + "abilities": ["Beast Boost"] }, { "role": "Z-Move user", "movepool": ["dazzlinggleam", "electricterrain", "energyball", "hiddenpowerice", "thunderbolt"], + "abilities": ["Beast Boost"], "preferredTypes": ["Electric"] } ] }, "celesteela": { - "level": 80, + "level": 78, "sets": [ { "role": "AV Pivot", - "movepool": ["airslash", "earthquake", "fireblast", "heavyslam"] + "movepool": ["airslash", "earthquake", "fireblast", "heavyslam"], + "abilities": ["Beast Boost"] }, { "role": "Staller", - "movepool": ["airslash", "heavyslam", "leechseed", "protect"] + "movepool": ["airslash", "heavyslam", "leechseed", "protect"], + "abilities": ["Beast Boost"] }, { "role": "Bulky Setup", - "movepool": ["airslash", "autotomize", "earthquake", "fireblast", "flashcannon"] + "movepool": ["airslash", "autotomize", "earthquake", "fireblast", "heavyslam"], + "abilities": ["Beast Boost"] } ] }, "kartana": { - "level": 76, + "level": 74, "sets": [ { "role": "Fast Attacker", - "movepool": ["knockoff", "leafblade", "sacredsword", "smartstrike", "swordsdance"] + "movepool": ["knockoff", "leafblade", "sacredsword", "smartstrike", "swordsdance"], + "abilities": ["Beast Boost"] }, { "role": "Z-Move user", "movepool": ["knockoff", "leafblade", "sacredsword", "smartstrike", "swordsdance"], + "abilities": ["Beast Boost"], "preferredTypes": ["Fighting", "Grass", "Steel"] } ] @@ -6415,21 +7488,29 @@ "sets": [ { "role": "AV Pivot", - "movepool": ["dracometeor", "earthquake", "fireblast", "heavyslam", "knockoff"] + "movepool": ["dracometeor", "earthquake", "fireblast", "heavyslam", "knockoff"], + "abilities": ["Beast Boost"] } ] }, "necrozma": { - "level": 82, + "level": 81, "sets": [ { "role": "Bulky Attacker", - "movepool": ["calmmind", "heatwave", "moonlight", "photongeyser", "stealthrock"] + "movepool": ["calmmind", "heatwave", "moonlight", "photongeyser", "stealthrock"], + "abilities": ["Prism Armor"] }, { "role": "Z-Move user", "movepool": ["calmmind", "heatwave", "moonlight", "photongeyser"], + "abilities": ["Prism Armor"], "preferredTypes": ["Psychic"] + }, + { + "role": "Fast Attacker", + "movepool": ["earthquake", "knockoff", "photongeyser", "swordsdance"], + "abilities": ["Prism Armor"] } ] }, @@ -6439,11 +7520,13 @@ { "role": "Bulky Setup", "movepool": ["autotomize", "earthquake", "knockoff", "photongeyser", "sunsteelstrike", "swordsdance"], + "abilities": ["Prism Armor"], "preferredTypes": ["Ground"] }, { "role": "Z-Move user", "movepool": ["autotomize", "earthquake", "knockoff", "photongeyser", "sunsteelstrike", "swordsdance"], + "abilities": ["Prism Armor"], "preferredTypes": ["Psychic"] } ] @@ -6453,59 +7536,69 @@ "sets": [ { "role": "Setup Sweeper", - "movepool": ["autotomize", "calmmind", "heatwave", "moongeistbeam", "photongeyser", "powergem"] + "movepool": ["autotomize", "calmmind", "heatwave", "moongeistbeam", "photongeyser", "signalbeam"], + "abilities": ["Prism Armor"] }, { "role": "Z-Move user", - "movepool": ["autotomize", "calmmind", "heatwave", "moongeistbeam", "photongeyser", "powergem"] + "movepool": ["autotomize", "calmmind", "heatwave", "moongeistbeam", "photongeyser", "signalbeam"], + "abilities": ["Prism Armor"] } ] }, "magearna": { - "level": 78, + "level": 77, "sets": [ { "role": "Bulky Attacker", - "movepool": ["calmmind", "flashcannon", "fleurcannon", "shiftgear"] + "movepool": ["calmmind", "flashcannon", "fleurcannon", "shiftgear"], + "abilities": ["Soul-Heart"] }, { "role": "Bulky Support", - "movepool": ["aurasphere", "flashcannon", "fleurcannon", "healbell", "painsplit", "thunderwave", "voltswitch"] + "movepool": ["aurasphere", "flashcannon", "fleurcannon", "healbell", "painsplit", "thunderwave", "voltswitch"], + "abilities": ["Soul-Heart"] }, { "role": "Z-Move user", - "movepool": ["aurasphere", "fleurcannon", "ironhead", "shiftgear", "thunderbolt"], + "movepool": ["aurasphere", "fleurcannon", "ironhead", "shiftgear"], + "abilities": ["Soul-Heart"], "preferredTypes": ["Fairy", "Steel"] } ] }, "marshadow": { - "level": 71, + "level": 70, "sets": [ { "role": "Fast Attacker", - "movepool": ["bulkup", "closecombat", "icepunch", "rocktomb", "shadowsneak", "spectralthief"] + "movepool": ["bulkup", "closecombat", "rocktomb", "shadowsneak", "spectralthief"], + "abilities": ["Technician"] }, { "role": "Z-Move user", - "movepool": ["bulkup", "closecombat", "icepunch", "rocktomb", "shadowsneak", "spectralthief"] + "movepool": ["bulkup", "closecombat", "rocktomb", "shadowsneak", "spectralthief"], + "abilities": ["Technician"] } ] }, "naganadel": { - "level": 76, + "level": 74, "sets": [ { "role": "Fast Attacker", - "movepool": ["dracometeor", "fireblast", "sludgewave", "uturn"] + "movepool": ["dracometeor", "fireblast", "sludgewave", "uturn"], + "abilities": ["Beast Boost"] }, { "role": "Setup Sweeper", - "movepool": ["dracometeor", "fireblast", "nastyplot", "sludgewave"] + "movepool": ["dracometeor", "fireblast", "nastyplot", "sludgewave"], + "abilities": ["Beast Boost"] }, { "role": "Z-Move user", "movepool": ["dracometeor", "fireblast", "nastyplot", "sludgewave"], + "abilities": ["Beast Boost"], "preferredTypes": ["Dragon"] } ] @@ -6515,7 +7608,8 @@ "sets": [ { "role": "Wallbreaker", - "movepool": ["earthquake", "gyroball", "stoneedge", "superpower", "trickroom"] + "movepool": ["earthquake", "gyroball", "stoneedge", "superpower", "trickroom"], + "abilities": ["Beast Boost"] } ] }, @@ -6524,25 +7618,29 @@ "sets": [ { "role": "Fast Attacker", - "movepool": ["calmmind", "fireblast", "hiddenpowerice", "psyshock", "shadowball", "trick"] + "movepool": ["calmmind", "fireblast", "hiddenpowerice", "psyshock", "shadowball", "trick"], + "abilities": ["Beast Boost"] }, { "role": "Z-Move user", "movepool": ["calmmind", "fireblast", "hiddenpowerice", "psyshock", "shadowball"], + "abilities": ["Beast Boost"], "preferredTypes": ["Fire", "Ghost"] } ] }, "zeraora": { - "level": 79, + "level": 77, "sets": [ { "role": "Setup Sweeper", - "movepool": ["bulkup", "closecombat", "knockoff", "plasmafists"] + "movepool": ["bulkup", "closecombat", "knockoff", "plasmafists"], + "abilities": ["Volt Absorb"] }, { "role": "AV Pivot", "movepool": ["closecombat", "grassknot", "hiddenpowerice", "knockoff", "plasmafists", "voltswitch"], + "abilities": ["Volt Absorb"], "preferredTypes": ["Fighting"] } ] diff --git a/data/mods/gen7/random-teams.ts b/data/random-battles/gen7/teams.ts similarity index 79% rename from data/mods/gen7/random-teams.ts rename to data/random-battles/gen7/teams.ts index 6c2a3eff7bc1..60e8c427957d 100644 --- a/data/mods/gen7/random-teams.ts +++ b/data/random-battles/gen7/teams.ts @@ -1,6 +1,5 @@ -import {MoveCounter, TeamData, RandomGen8Teams} from '../gen8/random-teams'; +import {MoveCounter, TeamData, RandomGen8Teams} from '../gen8/teams'; import {PRNG, PRNGSeed} from '../../../sim/prng'; -import {Utils} from '../../../lib'; import {toID} from '../../../sim/dex'; export interface BattleFactorySpecies { @@ -62,9 +61,9 @@ const SETUP = [ // Moves that shouldn't be the only STAB moves: const NO_STAB = [ 'accelerock', 'aquajet', 'bulletpunch', 'clearsmog', 'dragontail', 'eruption', 'explosion', - 'fakeout', 'firstimpression', 'flamecharge', 'futuresight', 'iceshard', 'icywind', 'incinerate', 'machpunch', 'nuzzle', - 'pluck', 'poweruppunch', 'pursuit', 'quickattack', 'rapidspin', 'reversal', 'selfdestruct', 'shadowsneak', 'skyattack', - 'skydrop', 'snarl', 'suckerpunch', 'uturn', 'watershuriken', 'vacuumwave', 'voltswitch', 'waterspout', + 'fakeout', 'firstimpression', 'flamecharge', 'futuresight', 'iceshard', 'icywind', 'incinerate', 'infestation', 'machpunch', + 'nuzzle', 'pluck', 'poweruppunch', 'pursuit', 'quickattack', 'rapidspin', 'reversal', 'selfdestruct', 'shadowsneak', + 'skyattack', 'skydrop', 'snarl', 'suckerpunch', 'uturn', 'watershuriken', 'vacuumwave', 'voltswitch', 'waterspout', ]; // Hazard-setting moves const HAZARDS = [ @@ -92,14 +91,15 @@ const MOVE_PAIRS = [ /** Pokemon who always want priority STAB, and are fine with it as its only STAB move of that type */ const PRIORITY_POKEMON = [ - 'aegislashblade', 'banette', 'breloom', 'cacturne', 'doublade', 'dusknoir', 'golisopod', 'honchkrow', 'mimikyu', 'scizor', 'scizormega', 'shedinja', + 'aegislash', 'banette', 'breloom', 'cacturne', 'doublade', 'dusknoir', 'golisopod', 'honchkrow', 'mimikyu', 'scizor', 'scizormega', 'shedinja', ]; function sereneGraceBenefits(move: Move) { return move.secondary?.chance && move.secondary.chance >= 20 && move.secondary.chance < 100; } export class RandomGen7Teams extends RandomGen8Teams { - randomSets: {[species: string]: RandomTeamsTypes.RandomSpeciesData} = require('./random-sets.json'); + randomSets: {[species: string]: RandomTeamsTypes.RandomSpeciesData} = require('./sets.json'); + protected cachedStatusMoves: ID[]; constructor(format: Format | string, prng: PRNG | PRNGSeed | null) { super(format, prng); @@ -110,16 +110,16 @@ export class RandomGen7Teams extends RandomGen8Teams { this.moveEnforcementCheckers = { Bug: (movePool, moves, abilities, types, counter) => ( ['megahorn', 'pinmissile'].some(m => movePool.includes(m)) || - !counter.get('Bug') && (abilities.has('Tinted Lens') || abilities.has('Adaptability')) + !counter.get('Bug') && (abilities.includes('Tinted Lens') || abilities.includes('Adaptability')) ), Dark: (movePool, moves, abilities, types, counter) => !counter.get('Dark'), - Dragon: (movePool, moves, abilities, types, counter) => !counter.get('Dragon') && !abilities.has('Aerilate'), + Dragon: (movePool, moves, abilities, types, counter) => !counter.get('Dragon') && !abilities.includes('Aerilate'), Electric: (movePool, moves, abilities, types, counter) => !counter.get('Electric'), Fairy: (movePool, moves, abilities, types, counter) => !counter.get('Fairy'), Fighting: (movePool, moves, abilities, types, counter) => !counter.get('Fighting'), Fire: (movePool, moves, abilities, types, counter) => !counter.get('Fire'), Flying: (movePool, moves, abilities, types, counter, species) => ( - !counter.get('Flying') && !['aerodactylmega', 'charizardmegay', 'mantine'].includes(species.id) && + !counter.get('Flying') && !['aerodactyl', 'aerodactylmega', 'mantine'].includes(species.id) && !movePool.includes('hiddenpowerflying') ), Ghost: (movePool, moves, abilities, types, counter) => !counter.get('Ghost'), @@ -128,31 +128,31 @@ export class RandomGen7Teams extends RandomGen8Teams { ), Ground: (movePool, moves, abilities, types, counter) => !counter.get('Ground'), Ice: (movePool, moves, abilities, types, counter) => ( - !counter.get('Ice') || movePool.includes('blizzard') || - abilities.has('Refrigerate') && (movePool.includes('return') || movePool.includes('hypervoice')) + !counter.get('Ice') || (moves.has('icebeam') && movePool.includes('freezedry')) || + (abilities.includes('Refrigerate') && movePool.includes('return')) ), - Normal: movePool => movePool.includes('boomburst'), + Normal: movePool => (movePool.includes('boomburst') || movePool.includes('hypervoice')), Poison: (movePool, moves, abilities, types, counter) => !counter.get('Poison'), Psychic: (movePool, moves, abilities, types, counter) => ( !counter.get('Psychic') && ( types.has('Fighting') || movePool.includes('psychicfangs') || movePool.includes('calmmind') ) ), - Rock: (movePool, moves, abilities, types, counter, species) => ( - !counter.get('Rock') && (species.baseStats.atk >= 100 || abilities.has('Rock Head')) - ), - Steel: (movePool, moves, abilities, types, counter, species) => ( - !counter.get('Steel') && species.baseStats.atk >= 100 - ), + Rock: (movePool, moves, abilities, types, counter, species) => (!counter.get('Rock') && species.baseStats.atk >= 80), + Steel: (movePool, moves, abilities, types, counter, species) => (!counter.get('Steel') && species.baseStats.atk >= 100), Water: (movePool, moves, abilities, types, counter) => !counter.get('Water'), }; + // Nature Power is Tri Attack this gen + this.cachedStatusMoves = this.dex.moves.all() + .filter(move => move.category === 'Status' && move.id !== 'naturepower') + .map(move => move.id); } newQueryMoves( moves: Set | null, species: Species, preferredType: string, - abilities: Set = new Set(), + abilities: string[], ): MoveCounter { // This is primarily a helper function for random setbuilder functions. const counter = new MoveCounter(); @@ -166,6 +166,7 @@ export class RandomGen7Teams extends RandomGen8Teams { let move = this.dex.moves.get(moveid); // Nature Power calls Earthquake in Gen 5 if (this.gen === 5 && moveid === 'naturepower') move = this.dex.moves.get('earthquake'); + if (this.gen > 5 && moveid === 'naturepower') move = this.dex.moves.get('triattack'); const moveType = this.getMoveType(move, species, abilities, preferredType); if (move.damage || move.damageCallback) { @@ -195,9 +196,7 @@ export class RandomGen7Teams extends RandomGen8Teams { if (move.flags['bite']) counter.add('strongjaw'); if (move.flags['punch']) counter.add('ironfist'); if (move.flags['sound']) counter.add('sound'); - if (move.priority > 0 || (moveid === 'grassyglide' && abilities.has('Grassy Surge'))) { - counter.add('priority'); - } + if (move.priority > 0) counter.add('priority'); } // Moves with secondary effects: if (move.secondary || move.hasSheerForce) { @@ -229,13 +228,12 @@ export class RandomGen7Teams extends RandomGen8Teams { cullMovePool( types: string[], moves: Set, - abilities: Set, + abilities: string[], counter: MoveCounter, movePool: string[], teamDetails: RandomTeamsTypes.TeamDetails, species: Species, isLead: boolean, - isDoubles: boolean, preferredType: string, role: RandomTeamsTypes.Role, ): void { @@ -310,22 +308,26 @@ export class RandomGen7Teams extends RandomGen8Teams { if (movePool.includes('spikes')) this.fastPop(movePool, movePool.indexOf('spikes')); if (moves.size + movePool.length <= this.maxMoveCount) return; } + if (teamDetails.statusCure) { + if (movePool.includes('aromatherapy')) this.fastPop(movePool, movePool.indexOf('aromatherapy')); + if (movePool.includes('healbell')) this.fastPop(movePool, movePool.indexOf('healbell')); + if (moves.size + movePool.length <= this.maxMoveCount) return; + } // Develop additional move lists const badWithSetup = ['defog', 'dragontail', 'haze', 'healbell', 'nuzzle', 'pursuit', 'rapidspin', 'toxic']; - const statusMoves = this.dex.moves.all() - .filter(move => move.category === 'Status') - .map(move => move.id); + const statusMoves = this.cachedStatusMoves; // General incompatibilities const incompatiblePairs = [ // These moves don't mesh well with other aspects of the set [statusMoves, ['healingwish', 'memento', 'switcheroo', 'trick']], + [PIVOT_MOVES, PIVOT_MOVES], [SETUP, PIVOT_MOVES], [SETUP, HAZARDS], [SETUP, badWithSetup], [PHYSICAL_SETUP, PHYSICAL_SETUP], - [SPEED_SETUP, ['quickattack', 'suckerpunch']], + [SPEED_SETUP, 'quickattack'], ['defog', HAZARDS], [['fakeout', 'uturn'], ['switcheroo', 'trick']], ['substitute', PIVOT_MOVES], @@ -336,16 +338,15 @@ export class RandomGen7Teams extends RandomGen8Teams { // These attacks are redundant with each other ['psychic', 'psyshock'], - ['scald', ['hydropump', 'originpulse', 'waterpulse']], - ['return', ['bodyslam', 'doubleedge']], + [['scald', 'surf'], ['hydropump', 'originpulse', 'waterpulse']], + ['return', ['bodyslam', 'doubleedge', 'headbutt']], [['fierydance', 'firelash', 'lavaplume'], ['fireblast', 'magmastorm']], [['flamethrower', 'flareblitz'], ['fireblast', 'overheat']], ['hornleech', 'woodhammer'], - [['gigadrain', 'leafstorm'], ['leafstorm', 'petaldance', 'powerwhip']], + [['gigadrain', 'leafstorm'], ['energyball', 'leafstorm', 'petaldance', 'powerwhip']], ['wildcharge', 'thunderbolt'], ['gunkshot', 'poisonjab'], [['drainpunch', 'focusblast'], ['closecombat', 'highjumpkick', 'superpower']], - ['stoneedge', 'headsmash'], ['dracometeor', 'dragonpulse'], ['dragonclaw', 'outrage'], ['knockoff', ['darkestlariat', 'darkpulse', 'foulplay']], @@ -359,7 +360,7 @@ export class RandomGen7Teams extends RandomGen8Teams { // Lunatone ['moonlight', 'rockpolish'], // Smeargle - ['destinybond', 'whirlwind'], + ['nuzzle', 'whirlwind'], // Liepard ['copycat', 'uturn'], // Seviper @@ -375,13 +376,28 @@ export class RandomGen7Teams extends RandomGen8Teams { } const statusInflictingMoves = ['thunderwave', 'toxic', 'willowisp', 'yawn']; - if (!abilities.has('Prankster')) { + if (!abilities.includes('Prankster') && role !== 'Staller') { this.incompatibleMoves(moves, movePool, statusInflictingMoves, statusInflictingMoves); } + + if (abilities.includes('Guts')) this.incompatibleMoves(moves, movePool, 'protect', 'swordsdance'); + // Z-Conversion Porygon-Z if (species.id === 'porygonz') { this.incompatibleMoves(moves, movePool, 'shadowball', 'recover'); } + + // Cull filler moves for otherwise fixed set Stealth Rock users + if (!teamDetails.stealthRock) { + if (species.id === 'registeel' && role === 'Staller') { + if (movePool.includes('thunderwave')) this.fastPop(movePool, movePool.indexOf('thunderwave')); + if (moves.size + movePool.length <= this.maxMoveCount) return; + } + if (species.baseSpecies === 'Wormadam' && role === 'Staller') { + if (movePool.includes('infestation')) this.fastPop(movePool, movePool.indexOf('infestation')); + if (moves.size + movePool.length <= this.maxMoveCount) return; + } + } } // Checks for and removes incompatible moves, starting with the first move in movesA. @@ -419,11 +435,10 @@ export class RandomGen7Teams extends RandomGen8Teams { move: string, moves: Set, types: string[], - abilities: Set, + abilities: string[], teamDetails: RandomTeamsTypes.TeamDetails, species: Species, isLead: boolean, - isDoubles: boolean, movePool: string[], preferredType: string, role: RandomTeamsTypes.Role, @@ -431,22 +446,22 @@ export class RandomGen7Teams extends RandomGen8Teams { moves.add(move); this.fastPop(movePool, movePool.indexOf(move)); const counter = this.newQueryMoves(moves, species, preferredType, abilities); - this.cullMovePool(types, moves, abilities, counter, movePool, teamDetails, species, isLead, isDoubles, + this.cullMovePool(types, moves, abilities, counter, movePool, teamDetails, species, isLead, preferredType, role); return counter; } // Returns the type of a given move for STAB/coverage enforcement purposes - getMoveType(move: Move, species: Species, abilities: Set, preferredType: string): string { + getMoveType(move: Move, species: Species, abilities: string[], preferredType: string): string { if (['judgment', 'multiattack', 'revelationdance'].includes(move.id)) return species.types[0]; if (species.id === 'genesectdouse' && move.id === 'technoblast') return 'Water'; const moveType = move.type; if (moveType === 'Normal') { - if (abilities.has('Aerilate')) return 'Flying'; - if (abilities.has('Galvanize')) return 'Electric'; - if (abilities.has('Pixilate')) return 'Fairy'; - if (abilities.has('Refrigerate')) return 'Ice'; + if (abilities.includes('Aerilate')) return 'Flying'; + if (abilities.includes('Galvanize')) return 'Electric'; + if (abilities.includes('Pixilate')) return 'Fairy'; + if (abilities.includes('Refrigerate')) return 'Ice'; } return moveType; } @@ -454,18 +469,17 @@ export class RandomGen7Teams extends RandomGen8Teams { // Generate random moveset for a given species, role, preferred type. randomMoveset( types: string[], - abilities: Set, + abilities: string[], teamDetails: RandomTeamsTypes.TeamDetails, species: Species, isLead: boolean, - isDoubles: boolean, movePool: string[], preferredType: string, role: RandomTeamsTypes.Role, ): Set { const moves = new Set(); let counter = this.newQueryMoves(moves, species, preferredType, abilities); - this.cullMovePool(types, moves, abilities, counter, movePool, teamDetails, species, isLead, isDoubles, + this.cullMovePool(types, moves, abilities, counter, movePool, teamDetails, species, isLead, preferredType, role); // If there are only four moves, add all moves and return early @@ -473,7 +487,7 @@ export class RandomGen7Teams extends RandomGen8Teams { // Still need to ensure that multiple Hidden Powers are not added (if maxMoveCount is increased) while (movePool.length) { const moveid = this.sample(movePool); - counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles, + counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, movePool, preferredType, role); } return moves; @@ -489,52 +503,52 @@ export class RandomGen7Teams extends RandomGen8Teams { // 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, + counter = this.addMove(move, moves, types, abilities, teamDetails, species, isLead, movePool, preferredType, role); } // Add other moves you really want to have, e.g. STAB, recovery, setup. // Enforce Facade if Guts is a possible ability - if (movePool.includes('facade') && abilities.has('Guts')) { - counter = this.addMove('facade', moves, types, abilities, teamDetails, species, isLead, isDoubles, + if (movePool.includes('facade') && abilities.includes('Guts')) { + counter = this.addMove('facade', moves, types, abilities, teamDetails, species, isLead, movePool, preferredType, role); } - // Enforce Seismic Toss, Spore, and Sticky Web - for (const moveid of ['seismictoss', 'spore', 'stickyweb']) { + // Enforce Aurora Veil, Blizzard, Seismic Toss, Spore, and Sticky Web + for (const moveid of ['auroraveil', 'blizzard', 'seismictoss', 'spore', 'stickyweb']) { if (movePool.includes(moveid)) { - counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles, + counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, movePool, preferredType, role); } } // Enforce Thunder Wave on Prankster users - if (movePool.includes('thunderwave') && abilities.has('Prankster')) { - counter = this.addMove('thunderwave', moves, types, abilities, teamDetails, species, isLead, isDoubles, + if (movePool.includes('thunderwave') && abilities.includes('Prankster')) { + counter = this.addMove('thunderwave', moves, types, abilities, teamDetails, species, isLead, movePool, preferredType, role); } // Enforce Shadow Sneak on Kecleon if (movePool.includes('shadowsneak') && species.id === 'kecleon') { - counter = this.addMove('shadowsneak', moves, types, abilities, teamDetails, species, isLead, isDoubles, + counter = this.addMove('shadowsneak', moves, types, abilities, teamDetails, species, isLead, movePool, preferredType, 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, + counter = this.addMove('rapidspin', moves, types, abilities, teamDetails, species, isLead, movePool, preferredType, role); } if (movePool.includes('defog')) { - counter = this.addMove('defog', moves, types, abilities, teamDetails, species, isLead, isDoubles, + counter = this.addMove('defog', moves, types, abilities, teamDetails, species, isLead, movePool, preferredType, role); } } // Enforce STAB priority - if (['Bulky Attacker', 'Bulky Setup'].includes(role) || this.priorityPokemon.includes(species.id)) { + if (['Bulky Attacker', 'Bulky Setup', 'Wallbreaker'].includes(role) || this.priorityPokemon.includes(species.id)) { const priorityMoves = []; for (const moveid of movePool) { const move = this.dex.moves.get(moveid); @@ -545,7 +559,7 @@ export class RandomGen7Teams extends RandomGen8Teams { } if (priorityMoves.length) { const moveid = this.sample(priorityMoves); - counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles, + counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, movePool, preferredType, role); } } @@ -564,7 +578,7 @@ export class RandomGen7Teams extends RandomGen8Teams { while (runEnforcementChecker(type)) { if (!stabMoves.length) break; const moveid = this.sampleNoReplace(stabMoves); - counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles, + counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, movePool, preferredType, role); } } @@ -581,7 +595,7 @@ export class RandomGen7Teams extends RandomGen8Teams { } if (stabMoves.length) { const moveid = this.sample(stabMoves); - counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles, + counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, movePool, preferredType, role); } } @@ -598,12 +612,12 @@ export class RandomGen7Teams extends RandomGen8Teams { } if (stabMoves.length) { const moveid = this.sample(stabMoves); - counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles, + counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, movePool, preferredType, role); } else { // If they have no regular STAB move, enforce U-turn on Bug types. if (movePool.includes('uturn') && types.includes('Bug')) { - counter = this.addMove('uturn', moves, types, abilities, teamDetails, species, isLead, isDoubles, + counter = this.addMove('uturn', moves, types, abilities, teamDetails, species, isLead, movePool, preferredType, role); } } @@ -614,17 +628,17 @@ export class RandomGen7Teams extends RandomGen8Teams { 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, + counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, movePool, preferredType, role); } } // Enforce Staller moves if (role === 'Staller') { - const enforcedMoves = [...PROTECT_MOVES, 'toxic', 'wish']; + const enforcedMoves = [...PROTECT_MOVES, 'toxic']; for (const move of enforcedMoves) { if (movePool.includes(move)) { - counter = this.addMove(move, moves, types, abilities, teamDetails, species, isLead, isDoubles, + counter = this.addMove(move, moves, types, abilities, teamDetails, species, isLead, movePool, preferredType, role); } } @@ -636,11 +650,11 @@ export class RandomGen7Teams extends RandomGen8Teams { const setupMoves = movePool.filter(moveid => SETUP.includes(moveid) && moveid !== 'flamecharge'); if (setupMoves.length) { const moveid = this.sample(setupMoves); - counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles, + counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, movePool, preferredType, role); } else { if (movePool.includes('flamecharge')) { - counter = this.addMove('flamecharge', moves, types, abilities, teamDetails, species, isLead, isDoubles, + counter = this.addMove('flamecharge', moves, types, abilities, teamDetails, species, isLead, movePool, preferredType, role); } } @@ -656,7 +670,7 @@ export class RandomGen7Teams extends RandomGen8Teams { } if (attackingMoves.length) { const moveid = this.sample(attackingMoves); - counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles, + counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, movePool, preferredType, role); } } @@ -677,7 +691,7 @@ export class RandomGen7Teams extends RandomGen8Teams { } if (coverageMoves.length) { const moveid = this.sample(coverageMoves); - counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles, + counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, movePool, preferredType, role); } } @@ -686,15 +700,15 @@ export class RandomGen7Teams extends RandomGen8Teams { // Choose remaining moves randomly from movepool and add them to moves list: while (moves.size < this.maxMoveCount && movePool.length) { const moveid = this.sample(movePool); - counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles, + counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, movePool, preferredType, 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, + counter = this.addMove(pair[1], moves, types, abilities, teamDetails, species, isLead, movePool, preferredType, role); } if (moveid === pair[1] && movePool.includes(pair[0])) { - counter = this.addMove(pair[0], moves, types, abilities, teamDetails, species, isLead, isDoubles, + counter = this.addMove(pair[0], moves, types, abilities, teamDetails, species, isLead, movePool, preferredType, role); } } @@ -706,113 +720,33 @@ export class RandomGen7Teams extends RandomGen8Teams { ability: string, types: Set, moves: Set, - abilities: Set, + abilities: string[], counter: MoveCounter, movePool: string[], teamDetails: RandomTeamsTypes.TeamDetails, species: Species, - isDoubles: boolean, preferredType: string, role: RandomTeamsTypes.Role ): boolean { switch (ability) { - case 'Battle Bond': case 'Dazzling': case 'Flare Boost': case 'Gluttony': case 'Harvest': case 'Hyper Cutter': - case 'Ice Body': case 'Innards Out': case 'Liquid Voice': case 'Magician': case 'Moody': case 'Pressure': - case 'Sand Veil': case 'Snow Cloak': case 'Steadfast': case 'Weak Armor': - return true; - case 'Aerilate': case 'Galvanize': case 'Pixilate': case 'Refrigerate': - return ['doubleedge', 'hypervoice', 'return'].every(m => !moves.has(m)); - case 'Chlorophyll': - // Petal Dance is for Lilligant - return ( - species.baseStats.spe > 100 || moves.has('petaldance') || - (!moves.has('sunnyday') && !teamDetails.sun) - ); - case 'Competitive': - return !counter.get('Special'); - case 'Compound Eyes': case 'No Guard': - // Shadow Punch bit is for Golurk - return (!counter.get('inaccurate') || moves.has('shadowpunch')); - case 'Contrary': case 'Skill Link': case 'Strong Jaw': + case 'Chlorophyll': case 'Solar Power': + return !teamDetails.sun; + case 'Hydration': case 'Swift Swim': + return !teamDetails.rain; + case 'Iron Fist': case 'Skill Link': case 'Technician': return !counter.get(toID(ability)); - case 'Defiant': case 'Justified': case 'Moxie': - return !counter.get('Physical'); - case 'Guts': - return (!moves.has('facade') && !moves.has('sleeptalk')); - case 'Hustle': - return counter.get('Physical') < 2; - case 'Hydration': case 'Rain Dish': case 'Swift Swim': - return ( - species.baseStats.spe > 100 || !moves.has('raindance') && !teamDetails.rain || - !moves.has('raindance') && ['Rock Head', 'Water Absorb'].some(abil => abilities.has(abil)) - ); - case 'Intimidate': - // Slam part is for Tauros - return (moves.has('bodyslam') || species.id === 'staraptor'); - case 'Iron Fist': - // Dynamic Punch bit is for Golurk - return (!counter.get(toID(ability)) || moves.has('dynamicpunch')); - case 'Lightning Rod': - return ( - types.has('Ground') || species.id === 'marowakalola' || - ((!!teamDetails.rain || moves.has('raindance')) && species.id === 'seaking') - ); - case 'Magic Guard': case 'Speed Boost': - return (abilities.has('Tinted Lens') && role === 'Wallbreaker'); - case 'Mold Breaker': - return ( - species.baseSpecies === 'Basculin' || species.id === 'pangoro' || abilities.has('Sheer Force') - ); - case 'Oblivious': case 'Prankster': - return !counter.get('Status'); case 'Overgrow': return !counter.get('Grass'); - case 'Power Construct': - return species.forme === '10%'; - case 'Synchronize': - return (counter.get('Status') < 2 || !!counter.get('recoil') || !!species.isMega); - case 'Regenerator': - return species.id === 'mienshao' || species.id === 'reuniclus'; - case 'Reckless': case 'Rock Head': - return (!counter.get('recoil') || !!species.isMega); + case 'Prankster': + return !counter.get('Status'); + case 'Rock Head': + return !counter.get('recoil'); case 'Sand Force': case 'Sand Rush': return !teamDetails.sand; - case 'Scrappy': - return !types.has('Normal'); - case 'Serene Grace': - return !counter.get('serenegrace'); - case 'Sheer Force': - return ( - !counter.get('sheerforce') || - moves.has('doubleedge') || abilities.has('Guts') || - !!species.isMega || species.id === 'toucannon' - ); - case 'Simple': - return !counter.get('setup'); case 'Slush Rush': return !teamDetails.hail; - case 'Snow Warning': - // Aurorus - return moves.has('hypervoice'); - case 'Solar Power': - return (!counter.get('Special') || !teamDetails.sun || !!species.isMega); - case 'Sturdy': - return (!!counter.get('recoil') && !counter.get('recovery') || - (species.id === 'steelix' && role === 'Wallbreaker')); case 'Swarm': - return (!counter.get('Bug') || !!species.isMega); - case 'Technician': - return (!counter.get('technician') || moves.has('tailslap') || !!species.isMega || species.id === 'persianalola'); - case 'Tinted Lens': - return (['illumise', 'sigilyph', 'yanmega'].some(m => species.id === (m)) && role !== 'Wallbreaker'); - case 'Torrent': - return (!counter.get('Water') || !!species.isMega); - case 'Unaware': - return (role !== 'Bulky Support' && role !== 'Staller'); - case 'Unburden': - return (!!species.isMega || !counter.get('setup') && !moves.has('acrobatics')); - case 'Water Absorb': - return moves.has('raindance') || ['Drizzle', 'Unaware', 'Volt Absorb'].some(abil => abilities.has(abil)); + return !counter.get('Bug'); } return false; @@ -822,106 +756,48 @@ export class RandomGen7Teams extends RandomGen8Teams { getAbility( types: Set, moves: Set, - abilities: Set, + abilities: string[], counter: MoveCounter, movePool: string[], teamDetails: RandomTeamsTypes.TeamDetails, species: Species, - isDoubles: boolean, preferredType: string, role: RandomTeamsTypes.Role, ): string { - if (species.battleOnly && !species.requiredAbility) { - abilities = new Set(Object.values(this.dex.species.get(species.battleOnly as string).abilities)); - } - const abilityData = Array.from(abilities).map(a => this.dex.abilities.get(a)); - Utils.sortBy(abilityData, abil => -abil.rating); - - if (abilityData.length <= 1) return abilityData[0].name; + if (abilities.length <= 1) return abilities[0]; // Hard-code abilities here - if (species.id === 'gurdurr' || ( - abilities.has('Guts') && - !abilities.has('Quick Feet') && - (moves.has('facade') || (moves.has('sleeptalk') && moves.has('rest'))) - )) return 'Guts'; - - if (species.id === 'starmie') return role === 'Wallbreaker' ? 'Analytic' : 'Natural Cure'; - if (species.id === 'drampa' && moves.has('roost')) return 'Berserk'; - if (species.id === 'ninetales') return 'Drought'; - if (species.id === 'talonflame' && role === 'Z-Move user') return 'Gale Wings'; - if (species.id === 'golemalola' && moves.has('return')) return 'Galvanize'; - if (species.id === 'raticatealola') return 'Hustle'; - if (species.id === 'ninjask' || species.id === 'seviper') return 'Infiltrator'; - if (species.id === 'arcanine') return 'Intimidate'; - if (species.id === 'rampardos' && role === 'Bulky Attacker') return 'Mold Breaker'; - if (species.baseSpecies === 'Altaria') return 'Natural Cure'; - // If Ambipom doesn't qualify for Technician, Skill Link is useless on it - if (species.id === 'ambipom' && !counter.get('technician')) return 'Pickup'; - if ( - ['dusknoir', 'raikou', 'suicune', 'vespiquen', 'wailord'].includes(species.id) - ) return 'Pressure'; - if (species.id === 'tsareena') return 'Queenly Majesty'; - if (species.id === 'druddigon' && role === 'Bulky Support') return 'Rough Skin'; - if (species.id === 'pangoro' && !counter.get('ironfist')) return 'Scrappy'; - if (species.id === 'kommoo' && role === 'Z-Move user') return 'Soundproof'; - if (species.id === 'stunfisk') return 'Static'; - if (species.id === 'breloom') return 'Technician'; - if (species.id === 'zangoose') return 'Toxic Boost'; - if (species.id === 'porygon2') return 'Trace'; - - if (abilities.has('Gluttony') && (moves.has('recycle') || moves.has('bellydrum'))) return 'Gluttony'; - if (abilities.has('Harvest') && (role === 'Bulky Support' || role === 'Staller')) return 'Harvest'; - if (abilities.has('Moxie') && (counter.get('Physical') > 3 || moves.has('bounce'))) return 'Moxie'; - if (abilities.has('Regenerator') && role === 'AV Pivot') return 'Regenerator'; - if (abilities.has('Shed Skin') && moves.has('rest') && !moves.has('sleeptalk')) return 'Shed Skin'; - if (abilities.has('Sniper') && moves.has('focusenergy')) return 'Sniper'; - if (abilities.has('Unburden') && ['acrobatics', 'bellydrum', 'closecombat'].some(m => moves.has(m))) return 'Unburden'; - if (abilities.has('Weak Armor') && types.has('Water') && counter.get('setup')) return 'Weak Armor'; - - let abilityAllowed: Ability[] = []; + if (species.id === 'pangoro' && counter.get('ironfist')) return 'Iron Fist'; + if (species.id === 'tornadus' && counter.get('Status')) return 'Prankster'; + if (species.id === 'marowak' && counter.get('recoil')) return 'Rock Head'; + if (species.id === 'sawsbuck') return moves.has('headbutt') ? 'Serene Grace' : 'Sap Sipper'; + if (species.id === 'toucannon' && counter.get('skilllink')) return 'Skill Link'; + if (species.id === 'golduck' && teamDetails.rain) return 'Swift Swim'; + if (species.id === 'roserade' && counter.get('technician')) return 'Technician'; + + const abilityAllowed: string[] = []; // Obtain a list of abilities that are allowed (not culled) - for (const ability of abilityData) { - if (ability.rating >= 1 && !this.shouldCullAbility( - ability.name, types, moves, abilities, counter, movePool, teamDetails, species, isDoubles, preferredType, role + for (const ability of abilities) { + if (!this.shouldCullAbility( + ability, types, moves, abilities, counter, movePool, teamDetails, species, preferredType, role )) { abilityAllowed.push(ability); } } - // If all abilities are rejected, re-allow all abilities - if (!abilityAllowed.length) { - for (const ability of abilityData) { - if (ability.rating > 0) abilityAllowed.push(ability); - } - if (!abilityAllowed.length) abilityAllowed = abilityData; - } + // Pick a random allowed ability + if (abilityAllowed.length >= 1) return this.sample(abilityAllowed); - if (abilityAllowed.length === 1) return abilityAllowed[0].name; - // Sort abilities by rating with an element of randomness - // All three abilities can be chosen - if (abilityAllowed[2] && abilityAllowed[0].rating - 0.5 <= abilityAllowed[2].rating) { - if (abilityAllowed[1].rating <= abilityAllowed[2].rating) { - if (this.randomChance(1, 2)) [abilityAllowed[1], abilityAllowed[2]] = [abilityAllowed[2], abilityAllowed[1]]; - } else { - if (this.randomChance(1, 3)) [abilityAllowed[1], abilityAllowed[2]] = [abilityAllowed[2], abilityAllowed[1]]; - } - if (abilityAllowed[0].rating <= abilityAllowed[1].rating) { - if (this.randomChance(2, 3)) [abilityAllowed[0], abilityAllowed[1]] = [abilityAllowed[1], abilityAllowed[0]]; - } else { - if (this.randomChance(1, 2)) [abilityAllowed[0], abilityAllowed[1]] = [abilityAllowed[1], abilityAllowed[0]]; - } - } else { - // Third ability cannot be chosen - if (abilityAllowed[0].rating <= abilityAllowed[1].rating) { - if (this.randomChance(1, 2)) [abilityAllowed[0], abilityAllowed[1]] = [abilityAllowed[1], abilityAllowed[0]]; - } else if (abilityAllowed[0].rating - 0.5 <= abilityAllowed[1].rating) { - if (this.randomChance(1, 3)) [abilityAllowed[0], abilityAllowed[1]] = [abilityAllowed[1], abilityAllowed[0]]; - } + // 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); } - // After sorting, choose the first ability - return abilityAllowed[0].name; + // Pick a random ability + return this.sample(abilities); } getPriorityItem( @@ -941,6 +817,7 @@ export class RandomGen7Teams extends RandomGen8Teams { if (species.baseSpecies === 'Arceus' && species.requiredItems) return species.requiredItems[1]; if (species.name === 'Raichu-Alola') return 'Aloraichium Z'; if (species.name === 'Decidueye') return 'Decidium Z'; + if (species.name === 'Incineroar') return 'Incinium Z'; if (species.name === 'Kommo-o') return 'Kommonium Z'; if (species.name === 'Lunala') return 'Lunalium Z'; if (species.baseSpecies === 'Lycanroc') return 'Lycanium Z'; @@ -990,16 +867,16 @@ export class RandomGen7Teams extends RandomGen8Teams { return 'Sitrus Berry'; } } + if (moves.has('waterspout')) return 'Choice Scarf'; if (moves.has('geomancy') || moves.has('skyattack')) return 'Power Herb'; if (moves.has('shellsmash')) { return (ability === 'Solid Rock' && !!counter.get('priority')) ? 'Weakness Policy' : 'White Herb'; } - if ((ability === 'Guts' || moves.has('facade')) && !moves.has('sleeptalk')) { + if ((ability === 'Guts' || moves.has('facade')) && !moves.has('sleeptalk') && species.id !== 'stoutland') { return (types.includes('Fire') || ability === 'Quick Feet' || ability === 'Toxic Boost') ? 'Toxic Orb' : 'Flame Orb'; } - if (ability === 'Magic Guard' && role !== 'Bulky Support') { - return moves.has('counter') ? 'Focus Sash' : 'Life Orb'; - } + if (ability === 'Magic Guard') return moves.has('counter') ? 'Focus Sash' : 'Life Orb'; + if (species.id === 'rampardos' && role === 'Fast Attacker') return 'Choice Scarf'; if (ability === 'Sheer Force' && counter.get('sheerforce')) return 'Life Orb'; if (ability === 'Unburden') return moves.has('closecombat') ? 'White Herb' : 'Sitrus Berry'; if (moves.has('acrobatics')) return ''; @@ -1049,6 +926,7 @@ export class RandomGen7Teams extends RandomGen8Teams { if (ability === 'Sturdy' && moves.has('explosion') && !counter.get('speedsetup')) return 'Custap Berry'; if (types.includes('Normal') && moves.has('fakeout') && !!counter.get('Normal')) return 'Silk Scarf'; + if (species.id === 'latias' || species.id === 'latios') return 'Soul Dew'; if (role === 'Bulky Setup' && !!counter.get('speedsetup') && !moves.has('swordsdance')) { return 'Weakness Policy'; } @@ -1061,8 +939,14 @@ export class RandomGen7Teams extends RandomGen8Teams { } if (moves.has('outrage') && counter.get('setup')) return 'Lum Berry'; if ( - (ability === 'Rough Skin') || (species.id !== 'hooh' && - ability === 'Regenerator' && species.baseStats.hp + species.baseStats.def >= 180 && this.randomChance(1, 2)) + (ability === 'Rough Skin') || ( + species.id !== 'hooh' && + ability === 'Regenerator' && 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 (['kingsshield', 'protect', 'spikyshield', 'substitute'].some(m => moves.has(m))) return 'Leftovers'; if ( @@ -1073,8 +957,8 @@ export class RandomGen7Teams extends RandomGen8Teams { } if ( (role === 'Fast Support' || moves.has('stickyweb')) && isLead && defensiveStatTotal < 255 && - !counter.get('recovery') && !moves.has('defog') && (!counter.get('recoil') || ability === 'Rock Head') && - ability !== 'Regenerator' + !counter.get('recovery') && (counter.get('hazards') || counter.get('setup')) && + (!counter.get('recoil') || ability === 'Rock Head') ) return 'Focus Sash'; // Default Items @@ -1098,22 +982,45 @@ export class RandomGen7Teams extends RandomGen8Teams { return 'Leftovers'; } + getLevel(species: Species): number { + // level set by rules + if (this.adjustLevel) return this.adjustLevel; + if (this.gen >= 2) { + // Revamped generations use random-sets.json + const sets = this.randomSets[species.id]; + if (sets.level) return sets.level; + } else { + // Other generations use random-data.json + const data = this.randomData[species.id]; + if (data.level) return data.level; + } + // Gen 2 still uses tier-based levelling + if (this.gen === 2) { + const levelScale: {[k: string]: number} = { + ZU: 81, + ZUBL: 79, + PU: 77, + PUBL: 75, + NU: 73, + NUBL: 71, + UU: 69, + UUBL: 67, + OU: 65, + Uber: 61, + }; + if (levelScale[species.tier]) return levelScale[species.tier]; + } + // Default to 80 + return 80; + } + randomSet( species: string | Species, teamDetails: RandomTeamsTypes.TeamDetails = {}, - isLead = false, - isDoubles = false + isLead = false ): RandomTeamsTypes.RandomSet { species = this.dex.species.get(species); - let forme = species.name; - - if (typeof species.battleOnly === 'string') { - // Only change the forme. The species has custom moves, and may have different typing and requirements. - forme = species.battleOnly; - } - if (species.cosmeticFormes) { - forme = this.sample([species.name].concat(species.cosmeticFormes)); - } + const forme = this.getForme(species); const sets = this.randomSets[species.id]["sets"]; const possibleSets = []; // Check if the Pokemon has a Z-Move user set @@ -1141,17 +1048,18 @@ export class RandomGen7Teams extends RandomGen8Teams { const ivs = {hp: 31, atk: 31, def: 31, spa: 31, spd: 31, spe: 31}; const types = species.types; - const abilities = new Set(Object.values(species.abilities)); - if (species.unreleasedHidden) abilities.delete(species.abilities.H); + const baseAbilities = set.abilities!; + // Use the mega's ability for moveset generation + const abilities = (species.battleOnly && !species.requiredAbility) ? Object.values(species.abilities) : baseAbilities; // Get moves - const moves = this.randomMoveset(types, abilities, teamDetails, species, isLead, isDoubles, movePool, + const moves = this.randomMoveset(types, abilities, teamDetails, species, isLead, movePool, preferredType, role); const counter = this.newQueryMoves(moves, species, preferredType, abilities); // Get ability - ability = this.getAbility(new Set(types), moves, abilities, counter, movePool, teamDetails, species, - false, preferredType, role); + ability = this.getAbility(new Set(types), moves, baseAbilities, counter, movePool, teamDetails, species, + preferredType, role); // Get items item = this.getPriorityItem(ability, types, moves, counter, teamDetails, species, isLead, preferredType, role); @@ -1164,10 +1072,13 @@ export class RandomGen7Teams extends RandomGen8Teams { item = 'Black Sludge'; } - const level = this.adjustLevel || this.randomSets[species.id]["level"] || (species.nfe ? 90 : 80); + const level = this.getLevel(species); - // Minimize confusion damage - if (!counter.get('Physical') && !moves.has('copycat') && !moves.has('transform')) { + // Minimize confusion damage, including if Foul Play is its only physical attack + if ( + (!counter.get('Physical') || (counter.get('Physical') <= 1 && (moves.has('foulplay') || moves.has('rapidspin')))) && + !moves.has('copycat') && !moves.has('transform') + ) { evs.atk = 0; ivs.atk = 0; } @@ -1200,20 +1111,27 @@ export class RandomGen7Teams extends RandomGen8Teams { // Prepare optimal HP const srImmunity = ability === 'Magic Guard'; - let srWeakness = srImmunity ? 0 : this.dex.getEffectiveness('Rock', species); - // Crash damage move users want an odd HP to survive two misses - if (['highjumpkick', 'jumpkick'].some(m => moves.has(m))) srWeakness = 2; + const srWeakness = srImmunity ? 0 : this.dex.getEffectiveness('Rock', species); 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') && (item === 'Sitrus Berry' || (ability === 'Power Construct' && item !== 'Leftovers'))) { - // Two Substitutes should activate Sitrus Berry or Power Construct - if (hp % 4 === 0) break; + if (moves.has('substitute') && !['Black Sludge', 'Leftovers'].includes(item)) { + if (item === 'Sitrus Berry' || ability === 'Power Construct') { + // Two Substitutes should activate Sitrus Berry or Power Construct + if (hp % 4 === 0) break; + } else { + // Should be able to use Substitute four times from full HP without fainting + if (hp % 4 > 0) break; + } } else if (moves.has('bellydrum') && (item === 'Sitrus Berry' || ability === 'Gluttony')) { // Belly Drum should activate Sitrus Berry if (hp % 2 === 0) break; + } else if (['highjumpkick', 'jumpkick'].some(m => moves.has(m))) { + // Crash damage move users want an odd HP to survive two misses + if (hp % 2 > 0) break; } else { // Maximize number of Stealth Rock switch-ins - if (srWeakness <= 0 || ability === 'Regenerator' || ['Black Sludge', 'Leftovers', 'Life Orb'].includes(item)) break; + if (srWeakness <= 0 || ability === 'Regenerator') break; + if (srWeakness === 1 && ['Black Sludge', '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; @@ -1276,11 +1194,12 @@ export class RandomGen7Teams extends RandomGen8Teams { const baseFormes: {[k: string]: number} = {}; let hasMega = false; - const tierCount: {[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; // We make at most two passes through the potential Pokemon pool when creating a team - if the first pass doesn't // result in a team of six Pokemon we perform a second iteration relaxing as many restrictions as possible. @@ -1294,30 +1213,20 @@ export class RandomGen7Teams extends RandomGen8Teams { const currentSpeciesPool: Species[] = []; // Check if the base species has a mega forme available let canMega = false; - for (const poke of pokemonPool) { + for (const poke of pokemonPool[baseSpecies]) { const species = this.dex.species.get(poke); - if (!hasMega && species.baseSpecies === baseSpecies && species.isMega) canMega = true; + if (!hasMega && species.isMega) canMega = true; } - for (const poke of pokemonPool) { + for (const poke of pokemonPool[baseSpecies]) { const species = this.dex.species.get(poke); - if (species.baseSpecies === baseSpecies) { - // Prevent multiple megas - if (hasMega && species.isMega) continue; - // Prevent base forme, if a mega is available - if (canMega && !species.isMega) continue; - currentSpeciesPool.push(species); - } + // Prevent multiple megas + if (hasMega && species.isMega) continue; + // Prevent base forme, if a mega is available + if (canMega && !species.isMega) continue; + currentSpeciesPool.push(species); } const species = this.sample(currentSpeciesPool); - if (this.gen === 7) { - // If the team has a Z-Move user, reject Pokemon that only have the Z-Move user role - if ( - this.randomSets[species.id]["sets"].length === 1 && - this.randomSets[species.id]["sets"][0]["role"] === 'Z-Move user' && - teamDetails.zMove - ) continue; - } if (!species.exists) continue; // Limit to one of each species (Species Clause) @@ -1326,21 +1235,16 @@ export class RandomGen7Teams extends RandomGen8Teams { // Limit one Mega per team if (hasMega && species.isMega) continue; - const tier = species.tier; 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 (restrict) { - // Limit one Pokemon per tier, two for Monotype - if ( - (tierCount[tier] >= (isMonotype || this.forceMonotype ? 2 : 1) * limitFactor) && - !this.randomChance(1, Math.pow(5, tierCount[tier])) - ) { - continue; - } - if (!isMonotype && !this.forceMonotype) { // Limit two of any type let skip = false; @@ -1352,7 +1256,7 @@ export class RandomGen7Teams extends RandomGen8Teams { } if (skip) continue; - // Limit three weak to any type + // 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) { @@ -1362,19 +1266,45 @@ export class RandomGen7Teams extends RandomGen8Teams { break; } } + if (this.dex.getEffectiveness(typeName, species) > 0) { + if (!typeDoubleWeaknesses[typeName]) typeDoubleWeaknesses[typeName] = 0; + if (typeDoubleWeaknesses[typeName] >= 1 * 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; + } + + // Limit one level 100 Pokemon + if (!this.adjustLevel && (this.getLevel(species) === 100) && numMaxLevelPokemon >= limitFactor) { + continue; + } } - // Limit one of any type combination, three in Monotype - if (!this.forceMonotype && typeComboCount[typeCombo] >= (isMonotype ? 3 : 1) * limitFactor) continue; + // Limit three of any type combination in Monotype + if (!this.forceMonotype && isMonotype && (typeComboCount[typeCombo] >= 3 * limitFactor)) continue; } const set = this.randomSet( species, teamDetails, - pokemon.length === this.maxTeamSize - 1, - false + pokemon.length === this.maxTeamSize - 1 ); const item = this.dex.items.get(set.item); @@ -1394,13 +1324,6 @@ export class RandomGen7Teams extends RandomGen8Teams { // Now that our Pokemon has passed all checks, we can increment our counters baseFormes[species.baseSpecies] = 1; - // Increment tier counter - if (tierCount[tier]) { - tierCount[tier]++; - } else { - tierCount[tier] = 1; - } - // Increment type counters for (const typeName of types) { if (typeName in typeCount) { @@ -1421,7 +1344,18 @@ export class RandomGen7Teams extends RandomGen8Teams { 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 || species.name === 'Rayquaza-Mega') hasMega = true; @@ -1430,6 +1364,7 @@ export class RandomGen7Teams extends RandomGen8Teams { if (set.moves.includes('raindance') || set.ability === 'Drizzle' && !item.onPrimal) teamDetails.rain = 1; if (set.ability === 'Sand Stream') teamDetails.sand = 1; if (set.moves.includes('sunnyday') || set.ability === 'Drought' && !item.onPrimal) teamDetails.sun = 1; + if (set.moves.includes('aromatherapy') || set.moves.includes('healbell')) teamDetails.statusCure = 1; if (set.moves.includes('spikes')) teamDetails.spikes = (teamDetails.spikes || 0) + 1; if (set.moves.includes('stealthrock')) teamDetails.stealthRock = 1; if (set.moves.includes('stickyweb')) teamDetails.stickyWeb = 1; @@ -1484,19 +1419,33 @@ export class RandomGen7Teams extends RandomGen8Teams { // Build a pool of eligible sets, given the team partners // Also keep track of sets with moves the team requires - let effectivePool: {set: AnyObject, moveVariants?: number[]}[] = []; + let effectivePool: {set: AnyObject, moveVariants?: number[], item?: string, ability?: string}[] = []; const priorityPool = []; for (const curSet of setList) { if (this.forceMonotype && !species.types.includes(this.forceMonotype)) continue; - const item = this.dex.items.get(curSet.item); - if (teamData.megaCount && teamData.megaCount > 0 && item.megaStone) continue; // reject 2+ mega stones - if (teamData.zCount && teamData.zCount > 0 && item.zMove) continue; // reject 2+ Z stones - if (itemsMax[item.id] && teamData.has[item.id] >= itemsMax[item.id]) continue; - - const ability = this.dex.abilities.get(curSet.ability); - if (weatherAbilitiesRequire[ability.id] && teamData.weather !== weatherAbilitiesRequire[ability.id]) continue; - if (teamData.weather && weatherAbilities.includes(ability.id)) continue; // reject 2+ weather setters + // reject disallowed items + const allowedItems: string[] = []; + for (const itemString of curSet.item) { + const item = this.dex.items.get(itemString); + if (teamData.megaCount && teamData.megaCount > 0 && item.megaStone) continue; // reject 2+ mega stones + if (teamData.zCount && teamData.zCount > 0 && item.zMove) continue; // reject 2+ Z stones + if (itemsMax[item.id] && teamData.has[item.id] >= itemsMax[item.id]) continue; // reject 2+ same choice item + allowedItems.push(itemString); + } + if (allowedItems.length === 0) continue; + const curSetItem = this.sample(allowedItems); + + // reject bad weather abilities + const allowedAbilities: string[] = []; + for (const abilityString of curSet.ability) { + const ability = this.dex.abilities.get(abilityString); + if (weatherAbilitiesRequire[ability.id] && teamData.weather !== weatherAbilitiesRequire[ability.id]) continue; + if (teamData.weather && weatherAbilities.includes(ability.id)) continue; // reject 2+ weather setters + allowedAbilities.push(abilityString); + } + if (allowedAbilities.length === 0) continue; + const curSetAbility = this.sample(allowedAbilities); let reject = false; let hasRequiredMove = false; @@ -1514,8 +1463,10 @@ export class RandomGen7Teams extends RandomGen8Teams { curSetVariants.push(variantIndex); } if (reject) continue; - effectivePool.push({set: curSet, moveVariants: curSetVariants}); - if (hasRequiredMove) priorityPool.push({set: curSet, moveVariants: curSetVariants}); + + const fullSetSpec = {set: curSet, moveVariants: curSetVariants, item: curSetItem, ability: curSetAbility}; + effectivePool.push(fullSetSpec); + if (hasRequiredMove) priorityPool.push(fullSetSpec); } if (priorityPool.length) effectivePool = priorityPool; @@ -1533,8 +1484,8 @@ export class RandomGen7Teams extends RandomGen8Teams { } - const item = this.sampleIfArray(setData.set.item); - const ability = this.sampleIfArray(setData.set.ability); + const item = setData.item || this.sampleIfArray(setData.set.item); + const ability = setData.ability || this.sampleIfArray(setData.set.ability); const nature = this.sampleIfArray(setData.set.nature); const level = this.adjustLevel || setData.set.level || (tier === "LC" ? 5 : 100); diff --git a/data/mods/gen7letsgo/random-data.json b/data/random-battles/gen7letsgo/data.json similarity index 100% rename from data/mods/gen7letsgo/random-data.json rename to data/random-battles/gen7letsgo/data.json diff --git a/data/mods/gen7letsgo/random-teams.ts b/data/random-battles/gen7letsgo/teams.ts similarity index 97% rename from data/mods/gen7letsgo/random-teams.ts rename to data/random-battles/gen7letsgo/teams.ts index 22088aa2ae19..74cca6128fab 100644 --- a/data/mods/gen7letsgo/random-teams.ts +++ b/data/random-battles/gen7letsgo/teams.ts @@ -1,8 +1,8 @@ import type {PRNG} from '../../../sim'; -import {MoveCounter, RandomGen8Teams, OldRandomBattleSpecies} from '../gen8/random-teams'; +import {MoveCounter, RandomGen8Teams, OldRandomBattleSpecies} from '../gen8/teams'; export class RandomLetsGoTeams extends RandomGen8Teams { - randomData: {[species: string]: OldRandomBattleSpecies} = require('./random-data.json'); + randomData: {[species: string]: OldRandomBattleSpecies} = require('./data.json'); constructor(format: Format | string, prng: PRNG | PRNGSeed | null) { super(format, prng); @@ -24,7 +24,7 @@ export class RandomLetsGoTeams extends RandomGen8Teams { move: Move, types: Set, moves: Set, - abilities: Set, + abilities: string[], counter: MoveCounter, movePool: string[], teamDetails: RandomTeamsTypes.TeamDetails, @@ -140,13 +140,13 @@ export class RandomLetsGoTeams extends RandomGen8Teams { moves.add(moveid); } - counter = this.queryMoves(moves, species.types, new Set(), movePool); + counter = this.queryMoves(moves, species.types, [], movePool); // Iterate through the moves again, this time to cull them: for (const moveid of moves) { const move = this.dex.moves.get(moveid); - let {cull, isSetup} = this.shouldCullMove(move, types, moves, new Set(), counter, movePool, teamDetails); + let {cull, isSetup} = this.shouldCullMove(move, types, moves, [], counter, movePool, teamDetails); if ( !isSetup && @@ -184,7 +184,7 @@ export class RandomLetsGoTeams extends RandomGen8Teams { cull = true; } else { for (const type of types) { - if (this.moveEnforcementCheckers[type]?.(movePool, moves, new Set(), types, counter, species, teamDetails)) cull = true; + if (this.moveEnforcementCheckers[type]?.(movePool, moves, [], types, counter, species, teamDetails)) cull = true; } } } diff --git a/data/mods/gen8/bss-factory-sets.json b/data/random-battles/gen8/bss-factory-sets.json similarity index 100% rename from data/mods/gen8/bss-factory-sets.json rename to data/random-battles/gen8/bss-factory-sets.json diff --git a/data/mods/gen8/cap-1v1-sets.json b/data/random-battles/gen8/cap-1v1-sets.json similarity index 100% rename from data/mods/gen8/cap-1v1-sets.json rename to data/random-battles/gen8/cap-1v1-sets.json diff --git a/data/mods/gen8/random-data.json b/data/random-battles/gen8/data.json similarity index 96% rename from data/mods/gen8/random-data.json rename to data/random-battles/gen8/data.json index d3a7207e1aeb..10151c9cf079 100644 --- a/data/mods/gen8/random-data.json +++ b/data/random-battles/gen8/data.json @@ -1,6 +1,6 @@ { "venusaur": { - "level": 82, + "level": 83, "moves": ["gigadrain", "leechseed", "sleeppowder", "sludgebomb", "substitute"] }, "venusaurgmax": { @@ -8,7 +8,7 @@ "doublesMoves": ["earthpower", "energyball", "leechseed", "protect", "sleeppowder", "sludgebomb"] }, "charizard": { - "level": 82, + "level": 83, "moves": ["airslash", "earthquake", "fireblast", "focusblast", "roost"], "doublesLevel": 80, "doublesMoves": ["airslash", "heatwave", "overheat", "protect", "scorchingsands", "tailwind"], @@ -44,7 +44,7 @@ }, "pikachu": { "level": 92, - "moves": ["irontail", "knockoff", "surf", "voltswitch", "volttackle"], + "moves": ["knockoff", "playrough", "surf", "voltswitch", "volttackle"], "doublesLevel": 91, "doublesMoves": ["fakeout", "grassknot", "knockoff", "protect", "volttackle"] }, @@ -53,7 +53,7 @@ "doublesMoves": ["extremespeed", "fakeout", "knockoff", "surf", "volttackle"] }, "raichu": { - "level": 86, + "level": 87, "moves": ["focusblast", "grassknot", "nastyplot", "surf", "thunderbolt", "voltswitch"], "doublesLevel": 88, "doublesMoves": ["encore", "fakeout", "helpinghand", "nuzzle", "thunderbolt", "voltswitch"], @@ -72,13 +72,13 @@ "doublesMoves": ["drillrun", "knockoff", "protect", "stealthrock", "stoneedge", "swordsdance"] }, "sandslashalola": { - "level": 86, + "level": 87, "moves": ["earthquake", "ironhead", "knockoff", "rapidspin", "swordsdance", "tripleaxel"], "doublesLevel": 90, "doublesMoves": ["drillrun", "ironhead", "protect", "swordsdance", "tripleaxel"] }, "nidoqueen": { - "level": 83, + "level": 82, "moves": ["earthpower", "icebeam", "sludgewave", "stealthrock", "toxicspikes"], "doublesLevel": 84, "doublesMoves": ["earthpower", "icebeam", "protect", "sludgebomb", "stealthrock"] @@ -100,7 +100,7 @@ "doublesMoves": ["fireblast", "followme", "healpulse", "helpinghand", "moonblast", "protect", "thunderwave"] }, "ninetales": { - "level": 83, + "level": 82, "moves": ["fireblast", "nastyplot", "scorchingsands", "solarbeam", "willowisp"], "doublesLevel": 84, "doublesMoves": ["heatwave", "nastyplot", "protect", "scorchingsands", "solarbeam"] @@ -112,7 +112,7 @@ "doublesMoves": ["auroraveil", "blizzard", "encore", "freezedry", "moonblast"] }, "wigglytuff": { - "level": 92, + "level": 95, "moves": ["dazzlinggleam", "fireblast", "healbell", "lightscreen", "reflect", "stealthrock"], "doublesLevel": 90, "doublesMoves": ["dazzlinggleam", "healpulse", "helpinghand", "hypervoice", "thunderwave"] @@ -124,7 +124,7 @@ "doublesMoves": ["aromatherapy", "energyball", "pollenpuff", "sleeppowder", "sludgebomb", "strengthsap"] }, "dugtrio": { - "level": 82, + "level": 81, "moves": ["earthquake", "memento", "stoneedge", "suckerpunch"], "doublesLevel": 88, "doublesMoves": ["highhorsepower", "memento", "protect", "rockslide", "suckerpunch"] @@ -136,7 +136,7 @@ "doublesMoves": ["highhorsepower", "ironhead", "memento", "protect", "rockslide", "suckerpunch"] }, "persian": { - "level": 89, + "level": 90, "moves": ["doubleedge", "fakeout", "knockoff", "playrough", "uturn"], "doublesLevel": 90, "doublesMoves": ["doubleedge", "fakeout", "hypnosis", "icywind", "knockoff", "taunt"] @@ -148,8 +148,8 @@ "doublesMoves": ["fakeout", "foulplay", "icywind", "partingshot", "snarl", "taunt"] }, "golduck": { - "level": 86, - "moves": ["calmmind", "focusblast", "icebeam", "psyshock", "scald", "substitute"], + "level": 85, + "moves": ["calmmind", "focusblast", "icebeam", "scald", "substitute"], "doublesLevel": 88, "doublesMoves": ["calmmind", "encore", "icebeam", "muddywater", "protect"] }, @@ -160,7 +160,7 @@ "doublesMoves": ["closecombat", "extremespeed", "flareblitz", "morningsun", "protect", "snarl", "willowisp"] }, "poliwrath": { - "level": 85, + "level": 86, "moves": ["closecombat", "darkestlariat", "liquidation", "raindance"], "doublesLevel": 88, "doublesMoves": ["closecombat", "coaching", "helpinghand", "liquidation", "protect"] @@ -172,13 +172,13 @@ "doublesMoves": ["focusblast", "nastyplot", "protect", "psychic", "shadowball"] }, "machamp": { - "level": 82, + "level": 81, "moves": ["bulletpunch", "closecombat", "dynamicpunch", "facade", "knockoff", "stoneedge"], "doublesLevel": 88, "doublesMoves": ["bulletpunch", "closecombat", "facade", "knockoff", "protect"] }, "tentacruel": { - "level": 84, + "level": 83, "moves": ["haze", "knockoff", "rapidspin", "scald", "sludgebomb", "toxicspikes"], "doublesLevel": 87, "doublesMoves": ["acidspray", "icywind", "knockoff", "muddywater", "rapidspin", "sludgebomb"] @@ -190,7 +190,7 @@ "doublesMoves": ["flareblitz", "highhorsepower", "morningsun", "protect", "swordsdance", "wildcharge"] }, "rapidashgalar": { - "level": 84, + "level": 83, "moves": ["highhorsepower", "morningsun", "playrough", "swordsdance", "zenheadbutt"], "doublesLevel": 88, "doublesMoves": ["highhorsepower", "playrough", "protect", "swordsdance", "zenheadbutt"] @@ -202,20 +202,20 @@ "doublesMoves": ["calmmind", "fireblast", "icebeam", "psychic", "scald", "slackoff", "trickroom"] }, "slowbrogalar": { - "level": 86, + "level": 87, "moves": ["flamethrower", "psychic", "shellsidearm", "trick", "trickroom"], "doublesLevel": 85, "doublesMoves": ["fireblast", "healpulse", "protect", "psychic", "shellsidearm", "trickroom"] }, "farfetchd": { - "level": 90, + "level": 91, "moves": ["bravebird", "closecombat", "knockoff", "leafblade", "swordsdance"], "doublesLevel": 95, "doublesMoves": ["bravebird", "closecombat", "leafblade", "protect", "quickattack", "swordsdance"] }, "cloyster": { - "level": 80, - "moves": ["explosion", "hydropump", "iciclespear", "rockblast", "shellsmash"], + "level": 78, + "moves": ["hydropump", "iciclespear", "rockblast", "shellsmash"], "doublesLevel": 84, "doublesMoves": ["hydropump", "iciclespear", "protect", "rockblast", "shellsmash"], "noDynamaxMoves": ["hydropump", "iciclespear", "rockblast", "shellsmash"] @@ -239,55 +239,55 @@ "doublesMoves": ["knockoff", "liquidation", "protect", "superpower", "xscissor"] }, "exeggutor": { - "level": 87, + "level": 86, "moves": ["gigadrain", "leechseed", "psychic", "sleeppowder", "substitute"], "doublesLevel": 88, "doublesMoves": ["energyball", "protect", "psychic", "sleeppowder", "trickroom"] }, "exeggutoralola": { - "level": 87, + "level": 86, "moves": ["dracometeor", "flamethrower", "gigadrain", "leafstorm", "trickroom"], "doublesLevel": 88, "doublesMoves": ["dragonpulse", "energyball", "flamethrower", "protect", "trickroom"] }, "marowak": { - "level": 86, + "level": 87, "moves": ["doubleedge", "earthquake", "knockoff", "stealthrock", "stoneedge", "swordsdance"], "doublesLevel": 88, "doublesMoves": ["bonemerang", "knockoff", "protect", "stealthrock", "stoneedge"] }, "marowakalola": { - "level": 84, + "level": 83, "moves": ["earthquake", "flamecharge", "flareblitz", "poltergeist", "stealthrock", "stoneedge"], "doublesLevel": 83, "doublesMoves": ["bonemerang", "flamecharge", "flareblitz", "protect", "shadowbone"] }, "hitmonlee": { - "level": 84, + "level": 83, "moves": ["closecombat", "curse", "highjumpkick", "knockoff", "poisonjab", "stoneedge"], "doublesLevel": 86, "doublesMoves": ["closecombat", "fakeout", "knockoff", "poisonjab", "protect", "rockslide"] }, "hitmonchan": { - "level": 86, + "level": 87, "moves": ["bulkup", "drainpunch", "icepunch", "machpunch", "rapidspin", "throatchop"], "doublesLevel": 88, "doublesMoves": ["coaching", "drainpunch", "feint", "firepunch", "icepunch", "machpunch"] }, "weezing": { - "level": 86, + "level": 87, "moves": ["fireblast", "painsplit", "sludgebomb", "toxicspikes", "willowisp"], "doublesLevel": 88, "doublesMoves": ["fireblast", "painsplit", "sludgebomb", "toxicspikes", "willowisp"] }, "weezinggalar": { - "level": 86, + "level": 87, "moves": ["defog", "fireblast", "painsplit", "sludgebomb", "strangesteam", "toxicspikes", "willowisp"], "doublesLevel": 89, "doublesMoves": ["clearsmog", "defog", "fireblast", "painsplit", "strangesteam", "toxicspikes", "willowisp"] }, "rhydon": { - "level": 87, + "level": 85, "moves": ["earthquake", "megahorn", "stealthrock", "stoneedge", "toxic"] }, "chansey": { @@ -301,7 +301,7 @@ "doublesMoves": ["doubleedge", "drainpunch", "fakeout", "protect", "rockslide", "suckerpunch"] }, "seaking": { - "level": 88, + "level": 90, "moves": ["drillrun", "knockoff", "megahorn", "swordsdance", "waterfall"], "doublesLevel": 88, "doublesMoves": ["drillrun", "knockoff", "megahorn", "protect", "scaleshot", "swordsdance", "waterfall"] @@ -319,17 +319,17 @@ "doublesMoves": ["dazzlinggleam", "fakeout", "icywind", "lightscreen", "psychic", "reflect"] }, "mrmimegalar": { - "level": 85, + "level": 84, "moves": ["focusblast", "freezedry", "nastyplot", "psychic", "rapidspin"] }, "scyther": { - "level": 81, + "level": 82, "moves": ["brickbreak", "dualwingbeat", "knockoff", "roost", "swordsdance", "uturn"], "doublesLevel": 84, "doublesMoves": ["brickbreak", "bugbite", "dualwingbeat", "uturn"] }, "jynx": { - "level": 86, + "level": 85, "moves": ["focusblast", "icebeam", "lovelykiss", "nastyplot", "psyshock", "trick"], "doublesLevel": 86, "doublesMoves": ["focusblast", "icebeam", "lovelykiss", "nastyplot", "psychic"] @@ -342,18 +342,18 @@ }, "tauros": { "level": 81, - "moves": ["bodyslam", "closecombat", "rockslide", "throatchop", "zenheadbutt"], + "moves": ["bodyslam", "closecombat", "throatchop", "zenheadbutt"], "doublesLevel": 84, "doublesMoves": ["bodyslam", "closecombat", "lashout", "protect", "rockslide"] }, "gyarados": { - "level": 76, + "level": 75, "moves": ["bounce", "dragondance", "earthquake", "powerwhip", "waterfall"], "doublesLevel": 81, "doublesMoves": ["bounce", "dragondance", "icefang", "powerwhip", "protect", "waterfall"] }, "laprasgmax": { - "level": 86, + "level": 85, "moves": ["freezedry", "icebeam", "protect", "sparklingaria", "thunderbolt", "toxic"], "doublesLevel": 84, "doublesMoves": ["freezedry", "helpinghand", "hydropump", "icywind", "protect", "thunderbolt"] @@ -365,7 +365,7 @@ "doublesMoves": ["transform"] }, "vaporeon": { - "level": 84, + "level": 85, "moves": ["healbell", "icebeam", "protect", "scald", "toxic", "wish"], "doublesLevel": 88, "doublesMoves": ["helpinghand", "icywind", "protect", "scald", "toxic", "wish"] @@ -377,25 +377,25 @@ "doublesMoves": ["faketears", "helpinghand", "shadowball", "thunderbolt", "thunderwave"] }, "flareon": { - "level": 86, + "level": 87, "moves": ["facade", "flamecharge", "flareblitz", "quickattack", "superpower"], "doublesLevel": 88, "doublesMoves": ["facade", "flamecharge", "flareblitz", "protect", "quickattack", "superpower"] }, "omastar": { "level": 82, - "moves": ["earthpower", "hydropump", "icebeam", "shellsmash", "spikes", "stealthrock"], + "moves": ["earthpower", "hydropump", "icebeam", "shellsmash"], "doublesLevel": 86, "doublesMoves": ["earthpower", "icebeam", "muddywater", "shellsmash"] }, "kabutops": { - "level": 82, + "level": 83, "moves": ["aquajet", "knockoff", "liquidation", "rapidspin", "stoneedge", "swordsdance"], "doublesLevel": 86, "doublesMoves": ["aquajet", "protect", "stoneedge", "superpower", "swordsdance", "waterfall"] }, "aerodactyl": { - "level": 82, + "level": 83, "moves": ["aquatail", "dualwingbeat", "earthquake", "honeclaws", "stoneedge"], "doublesLevel": 82, "doublesMoves": ["aquatail", "dragondance", "dualwingbeat", "earthquake", "rockslide"] @@ -411,13 +411,13 @@ "doublesMoves": ["bodyslam", "curse", "darkestlariat", "highhorsepower", "recycle"] }, "articuno": { - "level": 84, + "level": 85, "moves": ["defog", "freezedry", "healbell", "roost", "toxic"], "doublesLevel": 86, "doublesMoves": ["freezedry", "healbell", "hurricane", "icebeam", "roost"] }, "articunogalar": { - "level": 80, + "level": 81, "moves": ["airslash", "calmmind", "freezingglare", "recover"], "doublesLevel": 81, "doublesMoves": ["calmmind", "freezingglare", "hurricane", "recover", "tailwind"], @@ -443,21 +443,21 @@ "noDynamaxMoves": ["defog", "fireblast", "hurricane", "roost", "uturn"] }, "moltresgalar": { - "level": 75, + "level": 73, "moves": ["fierywrath", "hurricane", "nastyplot", "rest"], "doublesLevel": 75, "doublesMoves": ["fierywrath", "hurricane", "nastyplot", "protect"], "noDynamaxMoves": ["agility", "fierywrath", "hurricane", "nastyplot", "rest"] }, "dragonite": { - "level": 75, + "level": 76, "moves": ["dragondance", "dualwingbeat", "earthquake", "extremespeed", "outrage"], "doublesLevel": 82, "doublesMoves": ["dragonclaw", "dragondance", "dualwingbeat", "extremespeed", "firepunch"], "noDynamaxMoves": ["dragondance", "dualwingbeat", "earthquake", "outrage", "roost"] }, "mewtwo": { - "level": 71, + "level": 70, "moves": ["fireblast", "nastyplot", "psystrike", "recover", "shadowball"], "doublesLevel": 74, "doublesMoves": ["aurasphere", "icebeam", "nastyplot", "psystrike", "recover"] @@ -495,7 +495,7 @@ "doublesMoves": ["airslash", "heatwave", "lightscreen", "psychic", "reflect", "roost", "tailwind"] }, "bellossom": { - "level": 82, + "level": 81, "moves": ["gigadrain", "moonblast", "quiverdance", "sleeppowder", "strengthsap"], "doublesLevel": 86, "doublesMoves": ["energyball", "moonblast", "quiverdance", "sleeppowder", "strengthsap"] @@ -507,7 +507,7 @@ "doublesMoves": ["aquajet", "knockoff", "liquidation", "playrough", "protect"] }, "sudowoodo": { - "level": 88, + "level": 89, "moves": ["earthquake", "headsmash", "stealthrock", "suckerpunch", "woodhammer"], "doublesLevel": 90, "doublesMoves": ["bodypress", "firepunch", "headsmash", "protect", "suckerpunch", "woodhammer"] @@ -531,13 +531,13 @@ "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"] }, "slowking": { - "level": 86, + "level": 87, "moves": ["fireblast", "futuresight", "psyshock", "scald", "slackoff", "teleport", "toxic", "trick"], "doublesLevel": 88, "doublesMoves": ["fireblast", "icebeam", "nastyplot", "psychic", "scald", "slackoff", "trickroom"] @@ -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"] @@ -575,7 +575,7 @@ "doublesMoves": ["liquidation", "poisonjab", "protect", "taunt", "thunderwave", "toxicspikes"] }, "scizor": { - "level": 80, + "level": 79, "moves": ["bulletpunch", "dualwingbeat", "knockoff", "roost", "superpower", "swordsdance", "uturn"], "doublesLevel": 80, "doublesMoves": ["bugbite", "bulletpunch", "dualwingbeat", "feint", "protect", "superpower", "swordsdance", "uturn"], @@ -588,13 +588,13 @@ "doublesMoves": ["acupressure", "guardsplit", "helpinghand", "infestation", "knockoff", "stealthrock", "stickyweb", "toxic"] }, "heracross": { - "level": 81, + "level": 82, "moves": ["closecombat", "facade", "knockoff", "megahorn"], "doublesLevel": 84, "doublesMoves": ["closecombat", "facade", "knockoff", "megahorn", "protect", "swordsdance"] }, "corsola": { - "level": 95, + "level": 97, "moves": ["powergem", "recover", "scald", "stealthrock", "toxic"], "doublesLevel": 95, "doublesMoves": ["icywind", "lifedew", "recover", "scald", "toxic"] @@ -604,10 +604,10 @@ "moves": ["haze", "nightshade", "stealthrock", "strengthsap", "willowisp"] }, "octillery": { - "level": 86, - "moves": ["energyball", "fireblast", "gunkshot", "hydropump", "icebeam", "protect"], - "doublesLevel": 84, - "doublesMoves": ["fireblast", "gunkshot", "hydropump", "icebeam", "protect", "substitute"] + "level": 90, + "moves": ["energyball", "fireblast", "gunkshot", "hydropump", "icebeam", "scald", "thunderwave"], + "doublesLevel": 90, + "doublesMoves": ["fireblast", "gunkshot", "hydropump", "icebeam", "protect", "thunderwave"] }, "delibird": { "level": 100, @@ -617,18 +617,18 @@ }, "mantine": { "level": 86, - "moves": ["defog", "hurricane", "icebeam", "roost", "scald", "toxic"], + "moves": ["defog", "hurricane", "roost", "scald", "toxic"], "doublesLevel": 88, "doublesMoves": ["haze", "helpinghand", "hurricane", "roost", "scald", "tailwind"] }, "skarmory": { - "level": 81, + "level": 80, "moves": ["bodypress", "bravebird", "roost", "spikes", "stealthrock", "whirlwind"], "doublesLevel": 84, "doublesMoves": ["bodypress", "bravebird", "irondefense", "roost"] }, "kingdra": { - "level": 83, + "level": 82, "moves": ["dracometeor", "flipturn", "hurricane", "hydropump", "raindance"], "doublesLevel": 82, "doublesMoves": ["dracometeor", "hurricane", "hydropump", "icebeam", "muddywater", "raindance"], @@ -641,7 +641,7 @@ "doublesMoves": ["icebeam", "recover", "thunderbolt", "toxic", "triattack", "trickroom"] }, "hitmontop": { - "level": 85, + "level": 86, "moves": ["closecombat", "earthquake", "rapidspin", "suckerpunch", "toxic", "tripleaxel"], "doublesLevel": 88, "doublesMoves": ["closecombat", "coaching", "fakeout", "helpinghand", "rapidspin", "suckerpunch", "tripleaxel"] @@ -653,7 +653,7 @@ "doublesMoves": ["bodypress", "bodyslam", "helpinghand", "icywind", "milkdrink", "protect", "rockslide"] }, "blissey": { - "level": 83, + "level": 84, "moves": ["seismictoss", "softboiled", "stealthrock", "teleport", "toxic"], "doublesLevel": 88, "doublesMoves": ["allyswitch", "healpulse", "helpinghand", "protect", "seismictoss", "softboiled", "thunderwave", "toxic"] @@ -671,7 +671,7 @@ "doublesMoves": ["extremespeed", "protect", "sacredfire", "snarl", "stompingtantrum", "stoneedge"] }, "suicune": { - "level": 80, + "level": 79, "moves": ["airslash", "calmmind", "icebeam", "rest", "scald", "sleeptalk"], "doublesLevel": 82, "doublesMoves": ["calmmind", "icebeam", "scald", "snarl", "tailwind"], @@ -690,13 +690,13 @@ "doublesMoves": ["aeroblast", "calmmind", "psyshock", "roost", "toxic"] }, "hooh": { - "level": 72, + "level": 70, "moves": ["bravebird", "defog", "earthquake", "roost", "sacredfire", "toxic"], "doublesLevel": 72, "doublesMoves": ["bravebird", "earthpower", "protect", "roost", "sacredfire", "tailwind"] }, "celebi": { - "level": 83, + "level": 80, "moves": ["earthpower", "gigadrain", "leafstorm", "nastyplot", "psychic", "recover", "stealthrock", "uturn"], "doublesLevel": 84, "doublesMoves": ["earthpower", "energyball", "nastyplot", "protect", "psychic", "recover"] @@ -720,7 +720,7 @@ "doublesMoves": ["highhorsepower", "icywind", "muddywater", "protect", "stealthrock", "wideguard"] }, "linoone": { - "level": 84, + "level": 85, "moves": ["bellydrum", "extremespeed", "stompingtantrum", "throatchop"], "doublesLevel": 90, "doublesMoves": ["bellydrum", "extremespeed", "protect", "throatchop"] @@ -757,26 +757,26 @@ "doublesMoves": ["acrobatics", "defog", "leechlife", "protect", "swordsdance"] }, "shedinja": { - "level": 90, + "level": 91, "moves": ["poltergeist", "shadowsneak", "swordsdance", "willowisp", "xscissor"], "doublesLevel": 95, "doublesMoves": ["poltergeist", "protect", "shadowsneak", "swordsdance", "willowisp", "xscissor"] }, "exploud": { - "level": 85, + "level": 84, "moves": ["boomburst", "fireblast", "focusblast", "surf"], "doublesLevel": 88, "doublesMoves": ["boomburst", "fireblast", "focusblast", "hypervoice", "icywind", "protect"] }, "sableye": { - "level": 88, + "level": 90, "moves": ["knockoff", "recover", "taunt", "toxic", "willowisp"], "doublesLevel": 88, "doublesMoves": ["disable", "encore", "fakeout", "foulplay", "knockoff", "quash", "recover", "willowisp"], "noDynamaxMoves": ["encore", "knockoff", "recover", "taunt", "toxic", "willowisp"] }, "mawile": { - "level": 87, + "level": 89, "moves": ["ironhead", "playrough", "stealthrock", "suckerpunch", "swordsdance"], "doublesLevel": 88, "doublesMoves": ["firefang", "ironhead", "playrough", "protect", "suckerpunch", "swordsdance"] @@ -800,13 +800,13 @@ "doublesMoves": ["closecombat", "crunch", "flipturn", "icebeam", "protect", "waterfall"] }, "wailord": { - "level": 90, + "level": 91, "moves": ["hydropump", "hypervoice", "icebeam", "waterspout"], "doublesLevel": 88, "doublesMoves": ["hydropump", "heavyslam", "icebeam", "waterspout"] }, "torkoal": { - "level": 86, + "level": 87, "moves": ["earthquake", "lavaplume", "rapidspin", "solarbeam", "stealthrock"], "doublesLevel": 84, "doublesMoves": ["bodypress", "earthpower", "fireblast", "heatwave", "protect", "solarbeam", "willowisp"] @@ -830,7 +830,7 @@ "doublesMoves": ["earthpower", "icebeam", "meteorbeam", "protect", "psychic", "trickroom"] }, "solrock": { - "level": 89, + "level": 91, "moves": ["earthquake", "explosion", "morningsun", "rockslide", "stealthrock", "willowisp"], "doublesLevel": 88, "doublesMoves": ["flareblitz", "helpinghand", "rockslide", "stoneedge", "willowisp"] @@ -842,32 +842,32 @@ "doublesMoves": ["dragondance", "earthquake", "liquidation", "protect", "stoneedge"] }, "crawdaunt": { - "level": 84, + "level": 85, "moves": ["aquajet", "closecombat", "crabhammer", "dragondance", "knockoff"], "doublesLevel": 86, "doublesMoves": ["aquajet", "closecombat", "crabhammer", "knockoff", "protect", "swordsdance"] }, "claydol": { - "level": 86, + "level": 87, "moves": ["earthquake", "icebeam", "psychic", "rapidspin", "stealthrock", "toxic"], "doublesLevel": 88, "doublesMoves": ["allyswitch", "earthpower", "icebeam", "psychic", "rapidspin"] }, "cradily": { - "level": 85, + "level": 86, "moves": ["powerwhip", "recover", "stealthrock", "stoneedge", "swordsdance", "toxic"], "doublesLevel": 88, "doublesMoves": ["powerwhip", "protect", "recover", "stealthrock", "stoneedge", "stringshot"] }, "armaldo": { - "level": 87, + "level": 89, "moves": ["earthquake", "knockoff", "liquidation", "rapidspin", "stealthrock", "stoneedge", "swordsdance"], "doublesLevel": 88, "doublesMoves": ["knockoff", "liquidation", "stoneedge", "superpower", "xscissor"], "noDynamaxMoves": ["earthquake", "knockoff", "rapidspin", "stealthrock", "stoneedge", "swordsdance"] }, "milotic": { - "level": 82, + "level": 81, "moves": ["haze", "icebeam", "recover", "scald", "toxic"], "doublesLevel": 80, "doublesMoves": ["coil", "hypnosis", "muddywater", "recover"] @@ -879,10 +879,10 @@ "doublesMoves": ["closecombat", "knockoff", "protect", "suckerpunch", "swordsdance"] }, "glalie": { - "level": 80, - "moves": ["disable", "earthquake", "freezedry", "protect", "substitute"], - "doublesLevel": 84, - "doublesMoves": ["disable", "earthquake", "freezedry", "protect", "substitute"] + "level": 94, + "moves": ["earthquake", "freezedry", "spikes", "superfang", "taunt"], + "doublesLevel": 94, + "doublesMoves": ["disable", "foulplay", "freezedry", "helpinghand", "icywind", "protect"] }, "walrein": { "level": 86, @@ -898,37 +898,37 @@ }, "salamence": { "level": 74, - "moves": ["dragondance", "dualwingbeat", "earthquake", "outrage", "roost"], + "moves": ["dragondance", "dualwingbeat", "earthquake", "outrage"], "doublesLevel": 79, "doublesMoves": ["dragonclaw", "fireblast", "hurricane", "protect", "tailwind"] }, "metagross": { - "level": 78, + "level": 79, "moves": ["agility", "bulletpunch", "earthquake", "explosion", "meteormash", "stealthrock", "thunderpunch"], "doublesLevel": 82, "doublesMoves": ["agility", "bulletpunch", "icepunch", "meteormash", "stompingtantrum", "trick", "zenheadbutt"] }, "regirock": { - "level": 85, + "level": 86, "moves": ["bodypress", "curse", "earthquake", "explosion", "rest", "rockslide", "stoneedge"], "doublesLevel": 86, "doublesMoves": ["bodypress", "curse", "rest", "rockslide"] }, "regice": { - "level": 84, + "level": 85, "moves": ["focusblast", "icebeam", "rest", "rockpolish", "sleeptalk", "thunderbolt"], "doublesLevel": 87, "doublesMoves": ["focusblast", "icebeam", "icywind", "rockpolish", "thunderbolt"] }, "registeel": { - "level": 83, + "level": 84, "moves": ["bodypress", "curse", "ironhead", "protect", "rest", "sleeptalk", "stealthrock", "toxic"], "doublesLevel": 86, "doublesMoves": ["bodypress", "curse", "ironhead", "rest", "toxic"] }, "latias": { - "level": 81, - "moves": ["calmmind", "dracometeor", "healingwish", "mysticalfire", "psychic", "roost"], + "level": 80, + "moves": ["calmmind", "dracometeor", "healingwish", "mysticalfire", "psyshock", "roost"], "doublesLevel": 82, "doublesMoves": ["calmmind", "dracometeor", "healpulse", "mysticalfire", "psyshock", "roost", "tailwind"] }, @@ -939,7 +939,7 @@ "doublesMoves": ["dracometeor", "mysticalfire", "psychic", "psyshock", "roost", "tailwind", "trick"] }, "kyogre": { - "level": 72, + "level": 70, "moves": ["calmmind", "icebeam", "originpulse", "thunder", "waterspout"], "doublesLevel": 69, "doublesMoves": ["icebeam", "originpulse", "thunder", "waterspout"] @@ -952,8 +952,8 @@ "noDynamaxMoves": ["heatcrash", "precipiceblades", "stealthrock", "stoneedge", "swordsdance", "thunderwave"] }, "rayquaza": { - "level": 74, - "moves": ["dracometeor", "dragonascent", "dragondance", "earthquake", "extremespeed", "swordsdance", "vcreate"], + "level": 73, + "moves": ["dragonascent", "dragondance", "earthquake", "extremespeed", "swordsdance", "vcreate"], "doublesLevel": 74, "doublesMoves": ["dracometeor", "dragonascent", "dragonclaw", "dragondance", "earthpower", "extremespeed", "vcreate"], "noDynamaxMoves": ["dracometeor", "dragonascent", "dragondance", "earthquake", "extremespeed", "vcreate"] @@ -965,7 +965,7 @@ "doublesMoves": ["firepunch", "followme", "ironhead", "lifedew", "protect", "thunderwave"] }, "luxray": { - "level": 84, + "level": 86, "moves": ["agility", "crunch", "facade", "superpower", "voltswitch", "wildcharge"], "doublesLevel": 84, "doublesMoves": ["playrough", "protect", "superpower", "voltswitch", "wildcharge"] @@ -999,7 +999,7 @@ "doublesMoves": ["clearsmog", "earthpower", "icywind", "recover", "scald", "yawn"] }, "drifblim": { - "level": 84, + "level": 85, "moves": ["calmmind", "shadowball", "strengthsap", "thunderbolt"], "doublesLevel": 84, "doublesMoves": ["calmmind", "icywind", "shadowball", "strengthsap"] @@ -1011,7 +1011,7 @@ "doublesMoves": ["closecombat", "fakeout", "switcheroo", "uturn"] }, "skuntank": { - "level": 85, + "level": 84, "moves": ["crunch", "defog", "fireblast", "poisonjab", "suckerpunch", "taunt", "toxic"], "doublesLevel": 88, "doublesMoves": ["crunch", "defog", "fireblast", "poisonjab", "suckerpunch", "taunt"] @@ -1041,25 +1041,25 @@ "doublesMoves": ["closecombat", "extremespeed", "icepunch", "meteormash", "protect", "swordsdance"] }, "hippowdon": { - "level": 80, + "level": 81, "moves": ["earthquake", "slackoff", "stealthrock", "stoneedge", "toxic", "whirlwind"], "doublesLevel": 88, "doublesMoves": ["highhorsepower", "slackoff", "stealthrock", "whirlwind", "yawn"] }, "drapion": { - "level": 82, + "level": 81, "moves": ["aquatail", "earthquake", "knockoff", "poisonjab", "swordsdance", "taunt", "toxicspikes"], "doublesLevel": 88, "doublesMoves": ["knockoff", "poisonjab", "protect", "swordsdance", "taunt"] }, "toxicroak": { - "level": 84, + "level": 85, "moves": ["drainpunch", "gunkshot", "icepunch", "knockoff", "substitute", "suckerpunch", "swordsdance"], "doublesLevel": 86, "doublesMoves": ["drainpunch", "fakeout", "gunkshot", "protect", "suckerpunch", "swordsdance", "taunt"] }, "abomasnow": { - "level": 82, + "level": 83, "moves": ["auroraveil", "blizzard", "earthquake", "iceshard", "woodhammer"], "doublesLevel": 88, "doublesMoves": ["auroraveil", "blizzard", "iceshard", "protect", "woodhammer"] @@ -1071,7 +1071,7 @@ "doublesMoves": ["fakeout", "iceshard", "knockoff", "lowkick", "tripleaxel"] }, "magnezone": { - "level": 84, + "level": 83, "moves": ["bodypress", "flashcannon", "mirrorcoat", "thunderbolt", "voltswitch"], "doublesLevel": 88, "doublesMoves": ["bodypress", "electroweb", "flashcannon", "protect", "thunderbolt", "voltswitch"] @@ -1083,7 +1083,7 @@ "doublesMoves": ["bodyslam", "explosion", "helpinghand", "icywind", "knockoff"] }, "rhyperior": { - "level": 81, + "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": 82, + "level": 81, "moves": ["crosschop", "earthquake", "flamethrower", "icepunch", "voltswitch", "wildcharge"], "doublesLevel": 88, "doublesMoves": ["crosschop", "flamethrower", "icepunch", "stompingtantrum", "wildcharge"] @@ -1113,13 +1113,13 @@ "doublesMoves": ["airslash", "dazzlinggleam", "followme", "helpinghand", "protect", "tailwind"] }, "leafeon": { - "level": 86, - "moves": ["doubleedge", "knockoff", "leafblade", "swordsdance", "synthesis", "xscissor"], + "level": 87, + "moves": ["doubleedge", "knockoff", "leafblade", "swordsdance", "synthesis"], "doublesLevel": 86, "doublesMoves": ["doubleedge", "knockoff", "leafblade", "protect", "swordsdance"] }, "glaceon": { - "level": 88, + "level": 90, "moves": ["freezedry", "protect", "toxic", "wish"], "doublesLevel": 88, "doublesMoves": ["blizzard", "freezedry", "helpinghand", "protect", "shadowball", "wish"] @@ -1144,7 +1144,7 @@ "doublesMoves": ["closecombat", "feint", "knockoff", "protect", "swordsdance", "tripleaxel", "zenheadbutt"] }, "dusknoir": { - "level": 87, + "level": 88, "moves": ["earthquake", "icepunch", "painsplit", "poltergeist", "shadowsneak", "trick", "willowisp"], "doublesLevel": 86, "doublesMoves": ["earthquake", "haze", "icepunch", "poltergeist", "shadowsneak", "trickroom", "willowisp"] @@ -1156,7 +1156,7 @@ "doublesMoves": ["destinybond", "icebeam", "icywind", "protect", "shadowball", "willowisp"] }, "rotom": { - "level": 84, + "level": 85, "moves": ["nastyplot", "shadowball", "thunderbolt", "voltswitch", "willowisp"], "doublesLevel": 88, "doublesMoves": ["electroweb", "protect", "shadowball", "thunderbolt", "voltswitch", "willowisp"] @@ -1174,7 +1174,7 @@ "doublesMoves": ["hydropump", "protect", "thunderbolt", "thunderwave", "voltswitch", "willowisp"] }, "rotomfrost": { - "level": 83, + "level": 82, "moves": ["blizzard", "nastyplot", "thunderbolt", "voltswitch", "willowisp"], "doublesLevel": 86, "doublesMoves": ["blizzard", "nastyplot", "protect", "thunderbolt", "willowisp"] @@ -1186,7 +1186,7 @@ "doublesMoves": ["airslash", "nastyplot", "protect", "thunderbolt"] }, "rotommow": { - "level": 85, + "level": 84, "moves": ["leafstorm", "nastyplot", "thunderbolt", "trick", "voltswitch", "willowisp"], "doublesLevel": 88, "doublesMoves": ["electroweb", "leafstorm", "protect", "thunderbolt", "voltswitch", "willowisp"] @@ -1195,7 +1195,7 @@ "level": 82, "moves": ["healbell", "knockoff", "psychic", "stealthrock", "uturn", "yawn"], "doublesLevel": 86, - "doublesMoves": ["helpinghand", "knockoff", "psychic", "stealthrock", "thunderwave", "u-turn", "yawn"] + "doublesMoves": ["helpinghand", "knockoff", "psychic", "stealthrock", "thunderwave", "uturn", "yawn"] }, "mesprit": { "level": 84, @@ -1210,13 +1210,13 @@ "doublesMoves": ["energyball", "fireblast", "nastyplot", "psychic", "shadowball", "uturn"] }, "dialga": { - "level": 74, + "level": 73, "moves": ["dracometeor", "fireblast", "flashcannon", "stealthrock", "thunderbolt", "toxic"], "doublesLevel": 74, "doublesMoves": ["dracometeor", "earthpower", "fireblast", "flashcannon", "protect", "thunderbolt", "thunderwave"] }, "palkia": { - "level": 74, + "level": 73, "moves": ["dracometeor", "fireblast", "hydropump", "spacialrend", "thunderwave"], "doublesLevel": 74, "doublesMoves": ["fireblast", "hydropump", "protect", "spacialrend", "thunderbolt", "thunderwave"] @@ -1234,7 +1234,7 @@ "doublesMoves": ["bodyslam", "knockoff", "protect", "thunderwave"] }, "giratinaorigin": { - "level": 74, + "level": 72, "moves": ["dualwingbeat", "honeclaws", "outrage", "poltergeist", "shadowsneak"], "doublesLevel": 74, "doublesMoves": ["dracometeor", "protect", "shadowball", "shadowsneak", "tailwind", "willowisp"], @@ -1259,19 +1259,19 @@ "doublesMoves": ["boltstrike", "glaciate", "protect", "uturn", "vcreate", "zenheadbutt"] }, "stoutland": { - "level": 86, + "level": 87, "moves": ["crunch", "facade", "playrough", "superpower", "wildcharge"], "doublesLevel": 90, "doublesMoves": ["facade", "helpinghand", "superpower", "thunderwave"] }, "liepard": { - "level": 87, + "level": 90, "moves": ["copycat", "encore", "knockoff", "playrough", "thunderwave", "uturn"], "doublesLevel": 88, "doublesMoves": ["copycat", "encore", "fakeout", "foulplay", "snarl", "taunt", "thunderwave"] }, "musharna": { - "level": 86, + "level": 87, "moves": ["calmmind", "moonblast", "moonlight", "psychic", "thunderwave"], "doublesLevel": 88, "doublesMoves": ["helpinghand", "hypnosis", "moonblast", "psychic", "trickroom"] @@ -1283,59 +1283,59 @@ "doublesMoves": ["bravebird", "nightslash", "quickattack", "tailwind", "uturn"] }, "gigalith": { - "level": 82, + "level": 83, "moves": ["earthquake", "explosion", "stealthrock", "stoneedge", "superpower"], "doublesLevel": 88, "doublesMoves": ["bodypress", "explosion", "protect", "rockslide", "stealthrock", "stompingtantrum", "stoneedge", "wideguard"] }, "swoobat": { - "level": 86, + "level": 89, "moves": ["airslash", "calmmind", "heatwave", "roost", "storedpower"], "doublesLevel": 86, "doublesMoves": ["airslash", "calmmind", "heatwave", "psychic"] }, "excadrill": { - "level": 78, + "level": 77, "moves": ["earthquake", "ironhead", "rapidspin", "rockslide", "swordsdance"], "doublesLevel": 80, "doublesMoves": ["highhorsepower", "ironhead", "protect", "rapidspin", "rockslide", "swordsdance"] }, "audino": { - "level": 91, + "level": 92, "moves": ["healbell", "knockoff", "protect", "toxic", "wish"], "doublesLevel": 90, "doublesMoves": ["bodyslam", "healpulse", "helpinghand", "knockoff", "protect", "thunderwave"] }, "gurdurr": { - "level": 83, + "level": 84, "moves": ["bulkup", "defog", "drainpunch", "knockoff", "machpunch"] }, "conkeldurr": { - "level": 79, + "level": 78, "moves": ["closecombat", "drainpunch", "facade", "knockoff", "machpunch"], "doublesLevel": 84, "doublesMoves": ["closecombat", "drainpunch", "icepunch", "knockoff", "machpunch", "protect"] }, "seismitoad": { - "level": 84, + "level": 83, "moves": ["earthquake", "liquidation", "raindance", "sludgebomb", "stealthrock"], "doublesLevel": 86, "doublesMoves": ["earthpower", "knockoff", "muddywater", "powerwhip", "protect", "raindance"] }, "throh": { - "level": 86, + "level": 85, "moves": ["bulkup", "circlethrow", "icepunch", "knockoff", "rest", "sleeptalk", "stormthrow"], "doublesLevel": 86, "doublesMoves": ["facade", "knockoff", "protect", "stormthrow", "wideguard"] }, "sawk": { - "level": 86, + "level": 85, "moves": ["bulkup", "closecombat", "knockoff", "poisonjab", "stoneedge"], "doublesLevel": 86, "doublesMoves": ["closecombat", "helpinghand", "knockoff", "poisonjab", "protect", "rockslide"] }, "scolipede": { - "level": 80, + "level": 79, "moves": ["earthquake", "megahorn", "poisonjab", "protect", "spikes", "swordsdance", "toxicspikes"], "doublesLevel": 84, "doublesMoves": ["megahorn", "poisonjab", "protect", "rockslide", "superpower", "swordsdance"] @@ -1359,12 +1359,6 @@ "doublesLevel": 86, "doublesMoves": ["flipturn", "liquidation", "muddywater", "protect", "superpower"] }, - "basculinbluestriped": { - "level": 86, - "moves": ["aquajet", "crunch", "flipturn", "liquidation", "psychicfangs", "superpower"], - "doublesLevel": 86, - "doublesMoves": ["flipturn", "liquidation", "muddywater", "protect", "superpower"] - }, "krookodile": { "level": 78, "moves": ["closecombat", "earthquake", "knockoff", "stealthrock", "stoneedge"], @@ -1372,19 +1366,19 @@ "doublesMoves": ["closecombat", "highhorsepower", "knockoff", "protect", "rockslide", "taunt"] }, "darmanitan": { - "level": 80, + "level": 79, "moves": ["earthquake", "flareblitz", "rockslide", "superpower", "uturn"], "doublesLevel": 82, "doublesMoves": ["earthquake", "flareblitz", "protect", "rockslide", "superpower", "uturn"] }, "darmanitangalar": { - "level": 78, + "level": 77, "moves": ["earthquake", "flareblitz", "iciclecrash", "superpower", "uturn"], "doublesLevel": 80, "doublesMoves": ["flareblitz", "iciclecrash", "rockslide", "superpower", "uturn"] }, "darmanitangalarzen": { - "level": 78, + "level": 77, "moves": ["bellydrum", "earthquake", "firepunch", "iciclecrash", "substitute"] }, "maractus": { @@ -1394,8 +1388,8 @@ "doublesMoves": ["acupressure", "helpinghand", "leafstorm", "leechseed", "spikyshield"] }, "crustle": { - "level": 83, - "moves": ["earthquake", "shellsmash", "spikes", "stealthrock", "stoneedge", "xscissor"], + "level": 82, + "moves": ["earthquake", "shellsmash", "stoneedge", "xscissor"], "doublesLevel": 84, "doublesMoves": ["knockoff", "protect", "rockslide", "shellsmash", "xscissor"] }, @@ -1406,25 +1400,25 @@ "doublesMoves": ["closecombat", "coaching", "drainpunch", "fakeout", "icepunch", "knockoff"] }, "sigilyph": { - "level": 82, + "level": 83, "moves": ["airslash", "defog", "energyball", "heatwave", "psychic"], "doublesLevel": 86, "doublesMoves": ["airslash", "heatwave", "protect", "psychic", "tailwind"] }, "cofagrigus": { - "level": 86, + "level": 87, "moves": ["bodypress", "memento", "shadowball", "toxicspikes", "willowisp"], "doublesLevel": 88, "doublesMoves": ["bodypress", "irondefense", "painsplit", "shadowball", "trickroom", "willowisp"] }, "carracosta": { - "level": 84, + "level": 83, "moves": ["aquajet", "hydropump", "shellsmash", "stoneedge", "superpower"], "doublesLevel": 88, "doublesMoves": ["aquajet", "liquidation", "shellsmash", "stoneedge", "superpower"] }, "archeops": { - "level": 83, + "level": 82, "moves": ["dualwingbeat", "earthquake", "roost", "stoneedge", "uturn"], "doublesLevel": 86, "doublesMoves": ["aquatail", "dualwingbeat", "earthquake", "protect", "rockslide", "uturn"] @@ -1436,7 +1430,7 @@ "doublesMoves": ["drainpunch", "explosion", "gunkshot", "protect", "toxicspikes"] }, "zoroark": { - "level": 84, + "level": 83, "moves": ["darkpulse", "flamethrower", "nastyplot", "sludgebomb", "trick"], "doublesLevel": 84, "doublesMoves": ["darkpulse", "flamethrower", "focusblast", "nastyplot", "protect", "sludgebomb"] @@ -1449,7 +1443,7 @@ }, "gothitelle": { "level": 87, - "moves": ["nastyplot", "psychic", "shadowball", "thunderbolt", "trick"], + "moves": ["darkpulse", "nastyplot", "psychic", "thunderbolt", "trick"], "doublesLevel": 83, "doublesMoves": ["fakeout", "healpulse", "helpinghand", "hypnosis", "protect", "psychic", "trickroom"] }, @@ -1478,19 +1472,19 @@ "doublesMoves": ["closecombat", "drillrun", "ironhead", "knockoff", "megahorn", "protect", "swordsdance"] }, "amoonguss": { - "level": 84, + "level": 83, "moves": ["gigadrain", "sludgebomb", "spore", "synthesis", "toxic"], "doublesLevel": 81, "doublesMoves": ["clearsmog", "pollenpuff", "protect", "ragepowder", "spore"] }, "jellicent": { - "level": 85, + "level": 86, "moves": ["icebeam", "recover", "scald", "shadowball", "toxic", "willowisp"], "doublesLevel": 84, "doublesMoves": ["scald", "shadowball", "strengthsap", "trickroom", "willowisp"] }, "galvantula": { - "level": 82, + "level": 81, "moves": ["bugbuzz", "gigadrain", "stickyweb", "thunder", "voltswitch"], "doublesLevel": 85, "doublesMoves": ["bugbuzz", "electroweb", "energyball", "protect", "stickyweb", "thunder"] @@ -1502,14 +1496,14 @@ "doublesMoves": ["bodypress", "gyroball", "leechseed", "powerwhip", "protect", "toxic"] }, "klinklang": { - "level": 84, + "level": 83, "moves": ["geargrind", "shiftgear", "substitute", "wildcharge"], "doublesLevel": 88, "doublesMoves": ["geargrind", "protect", "shiftgear", "wildcharge"] }, "beheeyem": { - "level": 87, - "moves": ["psychic", "shadowball", "thunderbolt", "trick", "trickroom"], + "level": 89, + "moves": ["darkpulse", "psychic", "thunderbolt", "trick", "trickroom"], "doublesLevel": 88, "doublesMoves": ["protect", "psychic", "shadowball", "thunderbolt", "trickroom"] }, @@ -1526,7 +1520,7 @@ "doublesMoves": ["closecombat", "dragonclaw", "dragondance", "poisonjab", "protect"] }, "beartic": { - "level": 85, + "level": 86, "moves": ["aquajet", "iciclecrash", "stoneedge", "superpower", "swordsdance"], "doublesLevel": 86, "doublesMoves": ["aquajet", "iciclecrash", "protect", "superpower", "swordsdance"] @@ -1538,14 +1532,14 @@ "doublesMoves": ["freezedry", "haze", "icebeam", "icywind", "rapidspin", "recover", "toxic"] }, "accelgor": { - "level": 87, - "moves": ["bugbuzz", "energyball", "focusblast", "sludgebomb", "spikes", "toxic", "yawn"], + "level": 90, + "moves": ["bugbuzz", "energyball", "focusblast", "sludgebomb", "spikes", "toxicspikes", "yawn"], "doublesLevel": 88, "doublesMoves": ["acidspray", "bugbuzz", "encore", "energyball", "focusblast"], "noDynamaxMoves": ["bugbuzz", "encore", "energyball", "focusblast", "spikes", "toxic"] }, "stunfisk": { - "level": 84, + "level": 83, "moves": ["discharge", "earthpower", "foulplay", "sludgebomb", "stealthrock"], "doublesLevel": 88, "doublesMoves": ["earthpower", "electroweb", "foulplay", "stealthrock", "thunderbolt"] @@ -1557,13 +1551,13 @@ "doublesMoves": ["earthquake", "stealthrock", "stoneedge", "thunderwave", "yawn"] }, "mienshao": { - "level": 82, + "level": 81, "moves": ["closecombat", "fakeout", "knockoff", "poisonjab", "stoneedge", "swordsdance", "uturn"], "doublesLevel": 84, "doublesMoves": ["closecombat", "fakeout", "knockoff", "poisonjab", "protect", "uturn"] }, "druddigon": { - "level": 84, + "level": 85, "moves": ["earthquake", "glare", "gunkshot", "outrage", "stealthrock", "suckerpunch", "superpower"], "doublesLevel": 87, "doublesMoves": ["dragonclaw", "firepunch", "glare", "gunkshot", "protect", "suckerpunch"] @@ -1587,19 +1581,19 @@ "doublesMoves": ["closecombat", "headcharge", "lashout", "protect", "wildcharge"] }, "braviary": { - "level": 81, + "level": 78, "moves": ["bravebird", "bulkup", "closecombat", "roost"], "doublesLevel": 82, "doublesMoves": ["bravebird", "bulkup", "closecombat", "roost", "tailwind"] }, "mandibuzz": { - "level": 82, - "moves": ["bravebird", "defog", "foulplay", "roost", "toxic"], + "level": 83, + "moves": ["bravebird", "defog", "foulplay", "roost", "toxic", "uturn"], "doublesLevel": 88, "doublesMoves": ["foulplay", "roost", "snarl", "tailwind", "taunt"] }, "heatmor": { - "level": 91, + "level": 92, "moves": ["firelash", "gigadrain", "knockoff", "substitute", "suckerpunch", "superpower"], "doublesLevel": 88, "doublesMoves": ["firelash", "gigadrain", "incinerate", "protect", "suckerpunch", "superpower"] @@ -1611,7 +1605,7 @@ "doublesMoves": ["firstimpression", "ironhead", "protect", "stompingtantrum", "superpower", "xscissor"] }, "hydreigon": { - "level": 79, + "level": 78, "moves": ["darkpulse", "dracometeor", "fireblast", "flashcannon", "nastyplot", "roost", "uturn"], "doublesLevel": 84, "doublesMoves": ["darkpulse", "dracometeor", "dragonpulse", "earthpower", "fireblast", "nastyplot", "protect", "tailwind"] @@ -1629,7 +1623,7 @@ "doublesMoves": ["closecombat", "ironhead", "protect", "stoneedge", "swordsdance", "thunderwave"] }, "terrakion": { - "level": 77, + "level": 78, "moves": ["closecombat", "earthquake", "quickattack", "stoneedge", "swordsdance"], "doublesLevel": 80, "doublesMoves": ["closecombat", "protect", "rockslide", "swordsdance"] @@ -1642,7 +1636,7 @@ "noDynamaxMoves": ["closecombat", "leafblade", "stoneedge", "swordsdance"] }, "tornadus": { - "level": 80, + "level": 79, "moves": ["defog", "grassknot", "heatwave", "hurricane", "nastyplot"], "doublesLevel": 80, "doublesMoves": ["heatwave", "hurricane", "nastyplot", "superpower", "tailwind", "taunt"] @@ -1654,13 +1648,13 @@ "doublesMoves": ["heatwave", "hurricane", "knockoff", "nastyplot", "protect", "uturn"] }, "thundurus": { - "level": 80, + "level": 81, "moves": ["grassknot", "knockoff", "nastyplot", "sludgewave", "superpower", "thunderbolt", "thunderwave"], "doublesLevel": 82, "doublesMoves": ["grassknot", "knockoff", "nastyplot", "protect", "sludgebomb", "thunderbolt", "thunderwave"] }, "thundurustherian": { - "level": 78, + "level": 79, "moves": ["focusblast", "grassknot", "nastyplot", "psychic", "thunderbolt", "voltswitch"], "doublesLevel": 82, "doublesMoves": ["agility", "focusblast", "grassknot", "nastyplot", "sludgebomb", "thunderbolt", "voltswitch"] @@ -1678,26 +1672,26 @@ "doublesMoves": ["boltstrike", "dragonclaw", "dragondance", "roost"] }, "landorus": { - "level": 75, + "level": 74, "moves": ["earthpower", "focusblast", "knockoff", "rockpolish", "rockslide", "sludgewave", "stealthrock"], "doublesLevel": 80, "doublesMoves": ["calmmind", "earthpower", "focusblast", "protect", "psychic", "sludgebomb"] }, "landorustherian": { - "level": 72, + "level": 73, "moves": ["earthquake", "fly", "stealthrock", "stoneedge", "swordsdance", "uturn"], "doublesLevel": 76, "doublesMoves": ["earthquake", "fly", "knockoff", "stoneedge", "swordsdance", "uturn"], "noDynamaxMoves": ["earthquake", "knockoff", "stealthrock", "stoneedge", "swordsdance", "uturn"] }, "kyurem": { - "level": 80, + "level": 79, "moves": ["dracometeor", "earthpower", "freezedry", "icebeam", "roost", "substitute"], "doublesLevel": 78, "doublesMoves": ["dracometeor", "earthpower", "freezedry", "glaciate", "protect", "roost"] }, "kyuremblack": { - "level": 71, + "level": 70, "moves": ["dragondance", "fusionbolt", "iciclespear", "outrage"], "doublesLevel": 75, "doublesMoves": ["dragonclaw", "dragondance", "fusionbolt", "iciclespear", "protect"] @@ -1715,13 +1709,13 @@ "doublesMoves": ["airslash", "calmmind", "icywind", "muddywater", "protect", "secretsword"] }, "genesect": { - "level": 74, + "level": 72, "moves": ["blazekick", "extremespeed", "ironhead", "leechlife", "shiftgear", "thunderbolt", "uturn"], "doublesLevel": 78, "doublesMoves": ["blazekick", "ironhead", "leechlife", "protect", "shiftgear", "thunderbolt", "uturn"] }, "genesectdouse": { - "level": 74, + "level": 72, "moves": ["bugbuzz", "extremespeed", "flamethrower", "icebeam", "ironhead", "technoblast", "thunderbolt", "uturn"] }, "diggersby": { @@ -1734,7 +1728,7 @@ "level": 81, "moves": ["bravebird", "defog", "flareblitz", "roost", "swordsdance", "uturn"], "doublesLevel": 86, - "doublesMoves": ["bravebird", "defog", "incinerate", "overheat", "tailwind", "u-turn", "willowisp"] + "doublesMoves": ["bravebird", "defog", "incinerate", "overheat", "tailwind", "uturn", "willowisp"] }, "pangoro": { "level": 84, @@ -1750,12 +1744,12 @@ }, "meowsticf": { "level": 86, - "moves": ["energyball", "nastyplot", "psychic", "shadowball", "thunderbolt"], + "moves": ["darkpulse", "energyball", "nastyplot", "psychic", "thunderbolt"], "doublesLevel": 88, "doublesMoves": ["fakeout", "nastyplot", "psychic", "shadowball", "thunderbolt"] }, "doublade": { - "level": 82, + "level": 81, "moves": ["closecombat", "ironhead", "shadowclaw", "shadowsneak", "swordsdance"] }, "aegislash": { @@ -1771,7 +1765,7 @@ "doublesMoves": ["closecombat", "ironhead", "kingsshield", "shadowclaw", "shadowsneak", "swordsdance"] }, "aromatisse": { - "level": 88, + "level": 89, "moves": ["calmmind", "moonblast", "protect", "toxic", "wish"], "doublesLevel": 86, "doublesMoves": ["healpulse", "moonblast", "protect", "trickroom", "wish"] @@ -1813,7 +1807,7 @@ "doublesMoves": ["glare", "grassknot", "hypervoice", "protect", "thunderbolt", "voltswitch"] }, "tyrantrum": { - "level": 82, + "level": 83, "moves": ["closecombat", "dragondance", "earthquake", "headsmash", "outrage"], "doublesLevel": 86, "doublesMoves": ["closecombat", "dragonclaw", "dragondance", "headsmash", "highhorsepower"] @@ -1831,13 +1825,13 @@ "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"] }, "dedenne": { - "level": 87, + "level": 90, "moves": ["protect", "recycle", "thunderbolt", "toxic"], "doublesLevel": 88, "doublesMoves": ["eerieimpulse", "helpinghand", "nuzzle", "recycle", "superfang", "thunderbolt"] @@ -1849,7 +1843,7 @@ "doublesMoves": ["bodypress", "irondefense", "moonblast", "stealthrock"] }, "goodra": { - "level": 82, + "level": 83, "moves": ["dracometeor", "earthquake", "fireblast", "powerwhip", "sludgebomb", "thunderbolt"], "doublesLevel": 85, "doublesMoves": ["breakingswipe", "dracometeor", "fireblast", "muddywater", "powerwhip", "protect", "sludgebomb", "thunderbolt"] @@ -1873,7 +1867,7 @@ "doublesMoves": ["leechseed", "poltergeist", "powerwhip", "substitute", "willowisp"] }, "gourgeistsmall": { - "level": 84, + "level": 83, "moves": ["leechseed", "poltergeist", "powerwhip", "substitute", "willowisp"], "doublesLevel": 88, "doublesMoves": ["leechseed", "poltergeist", "powerwhip", "substitute", "willowisp"] @@ -1885,7 +1879,7 @@ "doublesMoves": ["poltergeist", "powerwhip", "protect", "shadowsneak", "trickroom"] }, "gourgeistsuper": { - "level": 85, + "level": 84, "moves": ["poltergeist", "powerwhip", "rockslide", "shadowsneak", "trickroom"], "doublesLevel": 88, "doublesMoves": ["poltergeist", "powerwhip", "protect", "shadowsneak", "trickroom"] @@ -1904,7 +1898,7 @@ }, "xerneas": { "level": 67, - "moves": ["focusblast", "geomancy", "moonblast", "psyshock", "thunderbolt"], + "moves": ["focusblast", "geomancy", "moonblast", "psyshock"], "doublesLevel": 70, "doublesMoves": ["dazzlinggleam", "focusblast", "geomancy", "moonblast", "thunderbolt"] }, @@ -1915,13 +1909,13 @@ "doublesMoves": ["darkpulse", "heatwave", "knockoff", "oblivionwing", "roost", "suckerpunch", "tailwind"] }, "zygarde": { - "level": 70, + "level": 69, "moves": ["dragondance", "outrage", "substitute", "thousandarrows"], "doublesLevel": 72, "doublesMoves": ["coil", "dragondance", "extremespeed", "glare", "irontail", "thousandarrows"] }, "zygarde10": { - "level": 82, + "level": 81, "moves": ["coil", "extremespeed", "irontail", "outrage", "thousandarrows"], "doublesLevel": 77, "doublesMoves": ["dragondance", "extremespeed", "irontail", "protect", "stoneedge", "thousandarrows"] @@ -1952,8 +1946,8 @@ "doublesMoves": ["fakeout", "flareblitz", "knockoff", "partingshot", "uturn"] }, "primarina": { - "level": 81, - "moves": ["energyball", "hydropump", "moonblast", "psychic", "sparklingaria"], + "level": 80, + "moves": ["energyball", "hydropump", "moonblast", "psychic", "scald"], "doublesLevel": 82, "doublesMoves": ["dazzlinggleam", "flipturn", "hypervoice", "moonblast", "protect", "psychic"] }, @@ -1976,31 +1970,31 @@ "doublesMoves": ["accelerock", "closecombat", "drillrun", "protect", "rockslide", "swordsdance"] }, "lycanrocmidnight": { - "level": 83, + "level": 84, "moves": ["closecombat", "irontail", "stealthrock", "stoneedge", "suckerpunch", "swordsdance"], "doublesLevel": 88, "doublesMoves": ["closecombat", "irontail", "protect", "stoneedge", "suckerpunch", "swordsdance"] }, "lycanrocdusk": { - "level": 80, + "level": 79, "moves": ["accelerock", "closecombat", "psychicfangs", "stoneedge", "swordsdance"], "doublesLevel": 81, "doublesMoves": ["accelerock", "closecombat", "drillrun", "protect", "rockslide", "swordsdance"] }, - "wishiwashischool": { - "level": 85, + "wishiwashi": { + "level": 86, "moves": ["earthquake", "hydropump", "icebeam", "scald", "uturn"], "doublesLevel": 88, "doublesMoves": ["earthquake", "helpinghand", "hydropump", "icebeam", "muddywater", "protect"] }, "toxapex": { - "level": 82, + "level": 79, "moves": ["banefulbunker", "haze", "recover", "scald", "toxic", "toxicspikes"], "doublesLevel": 90, "doublesMoves": ["banefulbunker", "haze", "recover", "scald", "toxic", "toxicspikes"] }, "mudsdale": { - "level": 82, + "level": 83, "moves": ["bodypress", "earthquake", "heavyslam", "rockslide", "stealthrock"], "doublesLevel": 86, "doublesMoves": ["bodypress", "heavyslam", "highhorsepower", "protect", "rest", "rocktomb"] @@ -2012,31 +2006,31 @@ "doublesMoves": ["leechlife", "liquidation", "lunge", "protect", "stickyweb", "wideguard"] }, "lurantis": { - "level": 86, + "level": 88, "moves": ["defog", "knockoff", "leafstorm", "superpower", "synthesis"], "doublesLevel": 88, "doublesMoves": ["defog", "knockoff", "leafstorm", "protect", "superpower"] }, "shiinotic": { - "level": 88, + "level": 89, "moves": ["energyball", "leechseed", "moonblast", "spore", "strengthsap"], "doublesLevel": 88, "doublesMoves": ["energyball", "moonblast", "protect", "spore", "strengthsap"] }, "salazzle": { - "level": 82, + "level": 81, "moves": ["flamethrower", "protect", "substitute", "toxic"], "doublesLevel": 88, "doublesMoves": ["encore", "fakeout", "fireblast", "nastyplot", "protect", "sludgebomb"] }, "bewear": { - "level": 82, + "level": 83, "moves": ["closecombat", "darkestlariat", "doubleedge", "icepunch", "swordsdance"], "doublesLevel": 88, "doublesMoves": ["closecombat", "darkestlariat", "doubleedge", "drainpunch", "icepunch", "protect", "wideguard"] }, "tsareena": { - "level": 84, + "level": 85, "moves": ["highjumpkick", "knockoff", "powerwhip", "rapidspin", "synthesis", "tripleaxel", "uturn"], "doublesLevel": 88, "doublesMoves": ["highjumpkick", "knockoff", "playrough", "powerwhip", "rapidspin", "tripleaxel", "uturn"] @@ -2060,19 +2054,19 @@ "doublesMoves": ["closecombat", "gunkshot", "knockoff", "rockslide", "uturn"] }, "golisopod": { - "level": 84, + "level": 85, "moves": ["firstimpression", "knockoff", "leechlife", "liquidation", "spikes"], "doublesLevel": 88, "doublesMoves": ["aquajet", "firstimpression", "knockoff", "leechlife", "liquidation", "protect", "wideguard"] }, "palossand": { - "level": 86, + "level": 87, "moves": ["earthpower", "scorchingsands", "shadowball", "shoreup", "stealthrock", "toxic"], "doublesLevel": 88, "doublesMoves": ["hypnosis", "protect", "scorchingsands", "shadowball", "shoreup", "stealthrock"] }, "pyukumuku": { - "level": 84, + "level": 85, "moves": ["counter", "mirrorcoat", "recover", "toxic"], "doublesLevel": 100, "doublesMoves": ["helpinghand", "lightscreen", "memento", "reflect"] @@ -2161,7 +2155,7 @@ }, "silvallypoison": { "level": 83, - "moves": ["defog", "flamethrower", "grasspledge", "multiattack", "partingshot", "toxic"], + "moves": ["defog", "flamethrower", "multiattack", "partingshot", "surf", "toxic"], "doublesLevel": 88, "doublesMoves": ["flamethrower", "grasspledge", "multiattack", "partingshot", "snarl", "tailwind"] }, @@ -2202,7 +2196,7 @@ "doublesMoves": ["encore", "fakeout", "ironhead", "nuzzle", "spikyshield", "zingzap"] }, "mimikyu": { - "level": 76, + "level": 75, "moves": ["drainpunch", "playrough", "shadowclaw", "shadowsneak", "swordsdance"], "doublesLevel": 84, "doublesMoves": ["playrough", "shadowclaw", "shadowsneak", "swordsdance"] @@ -2214,7 +2208,7 @@ "doublesMoves": ["dracometeor", "dragonpulse", "heatwave", "hypervoice"] }, "dhelmise": { - "level": 86, + "level": 87, "moves": ["anchorshot", "earthquake", "poltergeist", "powerwhip", "rapidspin", "swordsdance"], "doublesLevel": 88, "doublesMoves": ["anchorshot", "knockoff", "powerwhip", "protect"] @@ -2238,13 +2232,13 @@ "doublesMoves": ["calmmind", "dazzlinggleam", "focusblast", "moonblast", "protect", "psyshock"] }, "tapubulu": { - "level": 81, + "level": 82, "moves": ["closecombat", "hornleech", "megahorn", "stoneedge", "swordsdance", "woodhammer"], "doublesLevel": 83, "doublesMoves": ["closecombat", "hornleech", "protect", "stoneedge", "swordsdance", "woodhammer"] }, "tapufini": { - "level": 78, + "level": 77, "moves": ["calmmind", "defog", "moonblast", "surf", "taunt"], "doublesLevel": 80, "doublesMoves": ["haze", "healpulse", "moonblast", "muddywater", "naturesmadness", "protect", "taunt"] @@ -2262,14 +2256,14 @@ "doublesMoves": ["calmmind", "moonblast", "moongeistbeam", "protect", "psyshock", "roost"] }, "nihilego": { - "level": 79, + "level": 78, "moves": ["grassknot", "powergem", "sludgewave", "stealthrock", "thunderbolt", "toxicspikes"], "doublesLevel": 81, "doublesMoves": ["grassknot", "meteorbeam", "protect", "sludgebomb", "thunderbolt"] }, "buzzwole": { - "level": 76, - "moves": ["closecombat", "darkestlariat", "dualwingbeat", "ironhead", "leechlife", "stoneedge"], + "level": 75, + "moves": ["closecombat", "darkestlariat", "dualwingbeat", "earthquake", "leechlife", "stoneedge"], "doublesLevel": 80, "doublesMoves": ["closecombat", "darkestlariat", "dualwingbeat", "ironhead", "leechlife", "stoneedge"], "noDynamaxMoves": ["bulkup", "closecombat", "darkestlariat", "leechlife", "poisonjab", "roost", "stoneedge"] @@ -2300,37 +2294,31 @@ "doublesMoves": ["knockoff", "leafblade", "sacredsword", "smartstrike", "swordsdance"] }, "guzzlord": { - "level": 84, + "level": 83, "moves": ["darkpulse", "dracometeor", "fireblast", "knockoff", "sludgebomb"], "doublesLevel": 88, "doublesMoves": ["dracometeor", "fireblast", "knockoff", "protect", "sludgebomb"] }, "necrozma": { - "level": 80, + "level": 81, "moves": ["calmmind", "heatwave", "moonlight", "photongeyser", "stealthrock"], "doublesLevel": 80, "doublesMoves": ["calmmind", "earthpower", "heatwave", "moonlight", "photongeyser", "protect"] }, "necrozmaduskmane": { - "level": 67, + "level": 65, "moves": ["dragondance", "earthquake", "morningsun", "photongeyser", "sunsteelstrike"], "doublesLevel": 72, "doublesMoves": ["dragondance", "photongeyser", "protect", "sunsteelstrike"] }, "necrozmadawnwings": { - "level": 76, + "level": 75, "moves": ["calmmind", "heatwave", "moongeistbeam", "photongeyser", "stealthrock"], "doublesLevel": 72, "doublesMoves": ["heatwave", "moongeistbeam", "photongeyser", "protect", "thunderwave"] }, "magearna": { - "level": 75, - "moves": ["agility", "calmmind", "flashcannon", "fleurcannon"], - "doublesLevel": 72, - "doublesMoves": ["agility", "aurasphere", "dazzlinggleam", "flashcannon", "fleurcannon", "protect", "trick"] - }, - "magearnaoriginal": { - "level": 75, + "level": 73, "moves": ["agility", "calmmind", "flashcannon", "fleurcannon"], "doublesLevel": 72, "doublesMoves": ["agility", "aurasphere", "dazzlinggleam", "flashcannon", "fleurcannon", "protect", "trick"] @@ -2342,7 +2330,7 @@ "doublesMoves": ["closecombat", "protect", "rocktomb", "shadowsneak", "spectralthief"] }, "naganadel": { - "level": 74, + "level": 72, "moves": ["airslash", "dracometeor", "fireblast", "nastyplot", "sludgewave"], "doublesLevel": 76, "doublesMoves": ["dracometeor", "flamethrower", "nastyplot", "sludgebomb", "uturn"], @@ -2367,29 +2355,29 @@ "doublesMoves": ["closecombat", "fakeout", "grassknot", "knockoff", "plasmafists", "snarl"] }, "melmetal": { - "level": 74, + "level": 73, "moves": ["doubleironbash", "earthquake", "superpower", "thunderpunch", "thunderwave"], "doublesLevel": 76, "doublesMoves": ["acidarmor", "bodypress", "doubleironbash", "protect", "thunderpunch", "thunderwave"] }, "rillaboom": { - "level": 76, + "level": 75, "moves": ["grassyglide", "highhorsepower", "knockoff", "uturn", "woodhammer"], "doublesLevel": 80, "doublesMoves": ["fakeout", "grassyglide", "highhorsepower", "protect", "uturn", "woodhammer"] }, "rillaboomgmax": { - "level": 76, + "level": 75, "moves": ["acrobatics", "grassyglide", "highhorsepower", "knockoff", "swordsdance"] }, "cinderace": { - "level": 74, + "level": 73, "moves": ["courtchange", "gunkshot", "highjumpkick", "pyroball", "uturn", "zenheadbutt"], "doublesLevel": 80, "doublesMoves": ["courtchange", "gunkshot", "highjumpkick", "protect", "pyroball", "suckerpunch", "uturn"] }, "cinderacegmax": { - "level": 74, + "level": 73, "moves": ["bulkup", "highjumpkick", "pyroball", "suckerpunch"] }, "inteleon": { @@ -2417,7 +2405,7 @@ "doublesMoves": ["bodypress", "bravebird", "bulkup", "roost", "tailwind"] }, "orbeetle": { - "level": 86, + "level": 87, "moves": ["bodypress", "bugbuzz", "calmmind", "psychic", "recover", "stickyweb", "uturn"] }, "orbeetlegmax": { @@ -2425,7 +2413,7 @@ "doublesMoves": ["helpinghand", "hypnosis", "lightscreen", "psychic", "reflect", "stickyweb", "strugglebug"] }, "thievul": { - "level": 88, + "level": 89, "moves": ["darkpulse", "foulplay", "grassknot", "nastyplot", "partingshot", "psychic"], "doublesLevel": 89, "doublesMoves": ["faketears", "foulplay", "partingshot", "snarl", "taunt"] @@ -2443,20 +2431,20 @@ "doublesMoves": ["doubleedge", "swordsdance", "thunderwave", "wildcharge", "zenheadbutt"] }, "drednaw": { - "level": 84, + "level": 82, "moves": ["liquidation", "stealthrock", "stoneedge", "superpower", "swordsdance"], "doublesLevel": 84, "doublesMoves": ["highhorsepower", "liquidation", "protect", "rockslide", "superpower", "swordsdance"], "noDynamaxMoves": ["liquidation", "raindance", "stealthrock", "stoneedge", "superpower"] }, "boltund": { - "level": 84, + "level": 85, "moves": ["bulkup", "crunch", "firefang", "playrough", "psychicfangs", "thunderfang", "voltswitch"], "doublesLevel": 86, "doublesMoves": ["crunch", "firefang", "nuzzle", "playrough", "protect", "psychicfangs", "snarl", "thunderfang"] }, "coalossalgmax": { - "level": 87, + "level": 88, "moves": ["overheat", "rapidspin", "spikes", "stealthrock", "stoneedge", "willowisp"], "doublesLevel": 85, "doublesMoves": ["fireblast", "incinerate", "protect", "stealthrock", "stoneedge", "willowisp"] @@ -2468,17 +2456,17 @@ "doublesMoves": ["acrobatics", "dragondance", "dragonrush", "gravapple", "protect"] }, "appletun": { - "level": 90, + "level": 91, "moves": ["appleacid", "dragonpulse", "leechseed", "recover"], "doublesLevel": 90, "doublesMoves": ["appleacid", "dragonpulse", "leechseed", "protect", "recover"] }, "appletungmax": { - "level": 90, + "level": 91, "moves": ["appleacid", "dracometeor", "leechseed", "recover"] }, "sandaconda": { - "level": 84, + "level": 83, "moves": ["coil", "earthquake", "glare", "rest", "stealthrock", "stoneedge"] }, "sandacondagmax": { @@ -2486,7 +2474,7 @@ "doublesMoves": ["coil", "glare", "highhorsepower", "protect", "stoneedge"] }, "cramorant": { - "level": 84, + "level": 85, "moves": ["bravebird", "defog", "roost", "superpower", "surf"], "doublesLevel": 88, "doublesMoves": ["bravebird", "icebeam", "protect", "roost", "surf", "tailwind"] @@ -2524,7 +2512,7 @@ "doublesMoves": ["coil", "firelash", "knockoff", "leechlife", "powerwhip", "protect"] }, "grapploct": { - "level": 86, + "level": 87, "moves": ["brutalswing", "bulkup", "drainpunch", "icepunch", "suckerpunch"], "doublesLevel": 88, "doublesMoves": ["closecombat", "coaching", "drainpunch", "icepunch", "octolock", "protect"] @@ -2542,11 +2530,11 @@ "doublesMoves": ["dazzlinggleam", "mysticalfire", "protect", "psychic", "trickroom"] }, "grimmsnarl": { - "level": 83, + "level": 84, "moves": ["lightscreen", "reflect", "spiritbreak", "taunt", "thunderwave"] }, "grimmsnarlgmax": { - "level": 83, + "level": 84, "moves": ["bulkup", "darkestlariat", "playrough", "rest", "suckerpunch", "trick"], "doublesLevel": 84, "doublesMoves": ["darkestlariat", "fakeout", "lightscreen", "reflect", "spiritbreak", "taunt", "thunderwave"] @@ -2558,19 +2546,19 @@ "doublesMoves": ["closecombat", "facade", "knockoff", "obstruct", "partingshot", "taunt"] }, "perrserker": { - "level": 86, + "level": 87, "moves": ["closecombat", "crunch", "fakeout", "ironhead", "uturn"], "doublesLevel": 88, "doublesMoves": ["closecombat", "fakeout", "ironhead", "lashout", "protect", "uturn"] }, "cursola": { - "level": 87, + "level": 88, "moves": ["earthpower", "hydropump", "icebeam", "shadowball", "stealthrock", "strengthsap"], "doublesLevel": 88, "doublesMoves": ["earthpower", "hydropump", "icebeam", "protect", "shadowball", "strengthsap"] }, "sirfetchd": { - "level": 82, + "level": 83, "moves": ["bravebird", "closecombat", "firstimpression", "knockoff", "swordsdance"], "doublesLevel": 85, "doublesMoves": ["bravebird", "closecombat", "firstimpression", "knockoff", "poisonjab", "protect", "swordsdance"], @@ -2596,7 +2584,7 @@ }, "falinks": { "level": 84, - "moves": ["closecombat", "noretreat", "poisonjab", "rockslide", "throatchop"], + "moves": ["closecombat", "ironhead", "noretreat", "rockslide", "throatchop"], "doublesLevel": 86, "doublesMoves": ["closecombat", "noretreat", "poisonjab", "rockslide", "throatchop"] }, @@ -2607,7 +2595,7 @@ "doublesMoves": ["acupressure", "protect", "risingvoltage", "scald", "suckerpunch"] }, "frosmoth": { - "level": 82, + "level": 83, "moves": ["bugbuzz", "gigadrain", "hurricane", "icebeam", "quiverdance"], "doublesLevel": 88, "doublesMoves": ["bugbuzz", "gigadrain", "hurricane", "icebeam", "protect", "quiverdance", "wideguard"] @@ -2625,13 +2613,13 @@ "doublesMoves": ["bellydrum", "iciclecrash", "liquidation", "protect"] }, "indeedee": { - "level": 83, + "level": 84, "moves": ["calmmind", "expandingforce", "hypervoice", "mysticalfire", "trick"], "doublesLevel": 80, "doublesMoves": ["encore", "expandingforce", "hypervoice", "mysticalfire", "protect", "trick"] }, "indeedeef": { - "level": 84, + "level": 85, "moves": ["calmmind", "expandingforce", "healingwish", "hypervoice", "mysticalfire"], "doublesLevel": 80, "doublesMoves": ["expandingforce", "followme", "healpulse", "helpinghand", "protect"] @@ -2643,13 +2631,13 @@ "doublesMoves": ["aurawheel", "fakeout", "partingshot", "protect", "rapidspin", "superfang"] }, "copperajah": { - "level": 84, + "level": 83, "moves": ["earthquake", "ironhead", "playrough", "rockslide", "stealthrock"], "doublesLevel": 88, "doublesMoves": ["heatcrash", "highhorsepower", "ironhead", "playrough", "powerwhip", "protect", "stoneedge"] }, "copperajahgmax": { - "level": 84, + "level": 83, "moves": ["earthquake", "heatcrash", "heavyslam", "powerwhip", "stoneedge"] }, "dracozolt": { @@ -2666,25 +2654,25 @@ "doublesMoves": ["blizzard", "boltbeak", "iciclecrash", "lowkick", "protect"] }, "dracovish": { - "level": 80, + "level": 79, "moves": ["crunch", "fishiousrend", "icefang", "lowkick", "psychicfangs"], "doublesLevel": 78, "doublesMoves": ["crunch", "dragonrush", "fishiousrend", "icefang", "psychicfangs"] }, "arctovish": { - "level": 86, + "level": 87, "moves": ["bodyslam", "fishiousrend", "freezedry", "iciclecrash", "psychicfangs"], "doublesLevel": 88, "doublesMoves": ["blizzard", "fishiousrend", "iciclecrash", "protect", "superfang"] }, "duraludon": { - "level": 84, + "level": 83, "moves": ["bodypress", "dracometeor", "flashcannon", "stealthrock", "thunderbolt"], "doublesLevel": 87, "doublesMoves": ["bodypress", "dracometeor", "dragonpulse", "flashcannon", "protect", "snarl", "thunderbolt"] }, "dragapult": { - "level": 78, + "level": 76, "moves": ["dracometeor", "fireblast", "shadowball", "thunderbolt", "uturn"], "doublesLevel": 80, "doublesMoves": ["dragondarts", "fireblast", "protect", "shadowball", "thunderbolt", "thunderwave"] @@ -2696,19 +2684,19 @@ "doublesMoves": ["closecombat", "crunch", "playrough", "protect", "psychicfangs", "swordsdance"] }, "zaciancrowned": { - "level": 62, - "moves": ["behemothblade", "closecombat", "crunch", "playrough", "psychicfangs", "swordsdance"], + "level": 61, + "moves": ["behemothblade", "closecombat", "playrough", "psychicfangs", "swordsdance"], "doublesLevel": 65, "doublesMoves": ["behemothblade", "closecombat", "playrough", "protect", "psychicfangs", "swordsdance"] }, "zamazenta": { - "level": 72, + "level": 71, "moves": ["closecombat", "crunch", "psychicfangs", "wildcharge"], "doublesLevel": 74, "doublesMoves": ["closecombat", "crunch", "playrough", "protect", "psychicfangs"] }, "zamazentacrowned": { - "level": 71, + "level": 69, "moves": ["behemothbash", "closecombat", "crunch", "howl", "psychicfangs"], "doublesLevel": 72, "doublesMoves": ["behemothbash", "closecombat", "crunch", "howl", "protect"] @@ -2726,7 +2714,7 @@ "doublesMoves": ["closecombat", "ironhead", "protect", "suckerpunch", "wickedblow"] }, "urshifurapidstrike": { - "level": 77, + "level": 76, "moves": ["bulkup", "drainpunch", "substitute", "surgingstrikes"], "doublesLevel": 80, "doublesMoves": ["aquajet", "closecombat", "icepunch", "protect", "surgingstrikes", "uturn"] @@ -2736,17 +2724,11 @@ "moves": ["bulkup", "drainpunch", "substitute", "wickedblow"] }, "urshifurapidstrikegmax": { - "level": 77, + "level": 76, "moves": ["bulkup", "closecombat", "icepunch", "surgingstrikes", "uturn"] }, "zarude": { - "level": 78, - "moves": ["bulkup", "closecombat", "darkestlariat", "junglehealing", "powerwhip", "uturn"], - "doublesLevel": 80, - "doublesMoves": ["closecombat", "darkestlariat", "junglehealing", "powerwhip", "protect"] - }, - "zarudedada": { - "level": 78, + "level": 77, "moves": ["bulkup", "closecombat", "darkestlariat", "junglehealing", "powerwhip", "uturn"], "doublesLevel": 80, "doublesMoves": ["closecombat", "darkestlariat", "junglehealing", "powerwhip", "protect"] @@ -2777,13 +2759,13 @@ "doublesMoves": ["darkpulse", "nastyplot", "protect", "shadowball"] }, "calyrex": { - "level": 88, + "level": 89, "moves": ["calmmind", "gigadrain", "leechseed", "psyshock", "substitute"], "doublesLevel": 94, "doublesMoves": ["helpinghand", "leafstorm", "pollenpuff", "protect"] }, "calyrexice": { - "level": 72, + "level": 71, "moves": ["agility", "closecombat", "glaciallance", "highhorsepower", "trickroom"], "doublesLevel": 72, "doublesMoves": ["closecombat", "glaciallance", "highhorsepower", "swordsdance", "trickroom"] diff --git a/data/mods/gen8/factory-sets.json b/data/random-battles/gen8/factory-sets.json similarity index 100% rename from data/mods/gen8/factory-sets.json rename to data/random-battles/gen8/factory-sets.json diff --git a/data/mods/gen8/random-teams.ts b/data/random-battles/gen8/teams.ts similarity index 90% rename from data/mods/gen8/random-teams.ts rename to data/random-battles/gen8/teams.ts index 999504ca1aec..210968ed3df2 100644 --- a/data/mods/gen8/random-teams.ts +++ b/data/random-battles/gen8/teams.ts @@ -47,14 +47,10 @@ export class MoveCounter extends Utils.Multiset { this.damagingMoves = new Set(); this.setupType = ''; } - - get(key: string): number { - return super.get(key) || 0; - } } type MoveEnforcementChecker = ( - movePool: string[], moves: Set, abilities: Set, types: Set, + movePool: string[], moves: Set, abilities: string[], types: Set, counter: MoveCounter, species: Species, teamDetails: RandomTeamsTypes.TeamDetails ) => boolean; @@ -99,7 +95,7 @@ function sereneGraceBenefits(move: Move) { } export class RandomGen8Teams { - dex: ModdedDex; + readonly dex: ModdedDex; gen: number; factoryTier: string; format: Format; @@ -111,7 +107,7 @@ export class RandomGen8Teams { readonly maxMoveCount: number; readonly forceMonotype: string | undefined; - randomData: {[species: string]: OldRandomBattleSpecies} = require('./random-data.json'); + randomData: {[species: string]: OldRandomBattleSpecies} = require('./data.json'); /** * Checkers for move enforcement based on a Pokémon's types or other factors @@ -120,6 +116,11 @@ export class RandomGen8Teams { */ moveEnforcementCheckers: {[k: string]: MoveEnforcementChecker}; + /** Used by .getPools() */ + private poolsCacheKey: [string | undefined, number | undefined, RuleTable | undefined, boolean] | undefined; + private cachedPool: number[] | undefined; + private cachedSpeciesPool: Species[] | undefined; + constructor(format: Format | string, prng: PRNG | PRNGSeed | null) { format = Dex.formats.get(format); this.dex = Dex.forFormat(format); @@ -209,10 +210,11 @@ export class RandomGen8Teams { Ice: (movePool, moves, abilities, types, counter) => { if (!counter.get('Ice')) return true; if (movePool.includes('iciclecrash')) return true; - return abilities.has('Snow Warning') && movePool.includes('blizzard'); + return abilities.includes('Snow Warning') && movePool.includes('blizzard'); }, Normal: (movePool, moves, abilities, types, counter) => ( - (abilities.has('Guts') && movePool.includes('facade')) || (abilities.has('Pixilate') && !counter.get('Normal')) + (abilities.includes('Guts') && movePool.includes('facade')) || + (abilities.includes('Pixilate') && !counter.get('Normal')) ), Poison: (movePool, moves, abilities, types, counter) => { if (counter.get('Poison')) return false; @@ -221,7 +223,7 @@ export class RandomGen8Teams { Psychic: (movePool, moves, abilities, types, counter) => { if (counter.get('Psychic')) return false; if (types.has('Ghost') || types.has('Steel')) return false; - return abilities.has('Psychic Surge') || !!counter.setupType || movePool.includes('psychicfangs'); + return abilities.includes('Psychic Surge') || !!counter.setupType || movePool.includes('psychicfangs'); }, Rock: (movePool, moves, abilities, types, counter, species) => !counter.get('Rock') && species.baseStats.atk >= 80, Steel: (movePool, moves, abilities, types, counter, species) => { @@ -232,9 +234,12 @@ export class RandomGen8Teams { Water: (movePool, moves, abilities, types, counter, species) => { if (!counter.get('Water') && !moves.has('hypervoice')) return true; if (['hypervoice', 'liquidation', 'surgingstrikes'].some(m => movePool.includes(m))) return true; - return abilities.has('Huge Power') && movePool.includes('aquajet'); + return abilities.includes('Huge Power') && movePool.includes('aquajet'); }, }; + this.poolsCacheKey = undefined; + this.cachedPool = undefined; + this.cachedSpeciesPool = undefined; } setSeed(prng?: PRNG | PRNGSeed) { @@ -521,7 +526,7 @@ export class RandomGen8Teams { }; if (this.gen === 9) { // Tera type - set.teraType = this.sample(this.dex.types.all()).name; + set.teraType = this.sample(this.dex.types.names()); } team.push(set); } @@ -529,19 +534,18 @@ export class RandomGen8Teams { return team; } - randomNPokemon(n: number, requiredType?: string, minSourceGen?: number, ruleTable?: RuleTable, requireMoves = false) { - // Picks `n` random pokemon--no repeats, even among formes - // Also need to either normalize for formes or select formes at random - // Unreleased are okay but no CAP - if (requiredType && !this.dex.types.get(requiredType).exists) { - throw new Error(`"${requiredType}" is not a valid type.`); - } - + private getPools(requiredType?: string, minSourceGen?: number, ruleTable?: RuleTable, requireMoves = false) { + // Memoize pool and speciesPool because, at least during tests, they are constructed with the same parameters + // hundreds of times and are expensive to compute. const isNotCustom = !ruleTable; - - const pool: number[] = []; + let pool: number[] = []; let speciesPool: Species[] = []; - if (isNotCustom) { + const ck = this.poolsCacheKey; + if (ck && this.cachedPool && this.cachedSpeciesPool && + ck[0] === requiredType && ck[1] === minSourceGen && ck[2] === ruleTable && ck[3] === requireMoves) { + speciesPool = this.cachedSpeciesPool.slice(); + pool = this.cachedPool.slice(); + } else if (isNotCustom) { speciesPool = [...this.dex.species.all()]; for (const species of speciesPool) { if (species.isNonstandard && species.isNonstandard !== 'Unobtainable') continue; @@ -555,6 +559,9 @@ export class RandomGen8Teams { if (num <= 0 || pool.includes(num)) continue; pool.push(num); } + this.poolsCacheKey = [requiredType, minSourceGen, ruleTable, requireMoves]; + this.cachedPool = pool.slice(); + this.cachedSpeciesPool = speciesPool.slice(); } else { const EXISTENCE_TAG = ['past', 'future', 'lgpe', 'unobtainable', 'cap', 'custom', 'nonexistent']; const nonexistentBanReason = ruleTable.check('nonexistent'); @@ -575,7 +582,7 @@ export class RandomGen8Teams { let tagBlacklisted = false; for (const ruleid of ruleTable.tagRules) { if (ruleid.startsWith('*')) continue; - const tagid = ruleid.slice(12); + const tagid = ruleid.slice(12) as ID; const tag = Tags[tagid]; if ((tag.speciesFilter || tag.genericFilter)!(species)) { const existenceTag = EXISTENCE_TAG.includes(tagid); @@ -599,8 +606,24 @@ export class RandomGen8Teams { if (pool.includes(num)) continue; pool.push(num); } + this.poolsCacheKey = [requiredType, minSourceGen, ruleTable, requireMoves]; + this.cachedPool = pool.slice(); + this.cachedSpeciesPool = speciesPool.slice(); + } + return {pool, speciesPool}; + } + + randomNPokemon(n: number, requiredType?: string, minSourceGen?: number, ruleTable?: RuleTable, requireMoves = false) { + // Picks `n` random pokemon--no repeats, even among formes + // Also need to either normalize for formes or select formes at random + // Unreleased are okay but no CAP + if (requiredType && !this.dex.types.get(requiredType).exists) { + throw new Error(`"${requiredType}" is not a valid type.`); } + const {pool, speciesPool} = this.getPools(requiredType, minSourceGen, ruleTable, requireMoves); + const isNotCustom = !ruleTable; + const hasDexNumber: {[k: string]: number} = {}; for (let i = 0; i < n; i++) { const num = this.sampleNoReplace(pool); @@ -870,7 +893,7 @@ export class RandomGen8Teams { }; if (this.gen === 9) { // Random Tera type - set.teraType = this.sample(this.dex.types.all()).name; + set.teraType = this.sample(this.dex.types.names()); } team.push(set); } @@ -881,7 +904,7 @@ export class RandomGen8Teams { queryMoves( moves: Set | null, types: string[], - abilities: Set = new Set(), + abilities: string[], movePool: string[] = [] ): MoveCounter { // This is primarily a helper function for random setbuilder functions. @@ -929,9 +952,9 @@ export class RandomGen8Teams { } } else if ( // Less obvious forms of STAB - (moveType === 'Normal' && (['Aerilate', 'Galvanize', 'Pixilate', 'Refrigerate'].some(abil => abilities.has(abil)))) || - (move.priority === 0 && (abilities.has('Libero') || abilities.has('Protean')) && !this.noStab.includes(moveid)) || - (moveType === 'Steel' && abilities.has('Steelworker')) + (moveType === 'Normal' && (['Aerilate', 'Galvanize', 'Pixilate', 'Refrigerate'].some(a => abilities.includes(a)))) || + (move.priority === 0 && (['Libero', 'Protean'].some(a => abilities.includes(a))) && !this.noStab.includes(moveid)) || + (moveType === 'Steel' && abilities.includes('Steelworker')) ) { counter.add('stab'); } @@ -939,7 +962,7 @@ export class RandomGen8Teams { if (move.flags['bite']) counter.add('strongjaw'); if (move.flags['punch']) counter.add('ironfist'); if (move.flags['sound']) counter.add('sound'); - if (move.priority !== 0 || (moveid === 'grassyglide' && abilities.has('Grassy Surge'))) { + if (move.priority !== 0 || (moveid === 'grassyglide' && abilities.includes('Grassy Surge'))) { counter.add('priority'); } counter.damagingMoves.add(move); @@ -1023,7 +1046,7 @@ export class RandomGen8Teams { move: Move, types: Set, moves: Set, - abilities: Set, + abilities: string[], counter: MoveCounter, movePool: string[], teamDetails: RandomTeamsTypes.TeamDetails, @@ -1060,7 +1083,7 @@ export class RandomGen8Teams { return {cull: movePool.includes('protect') || movePool.includes('wish')}; case 'fireblast': // Special case for Togekiss, which always wants Aura Sphere - return {cull: abilities.has('Serene Grace') && (!moves.has('trick') || counter.get('Status') > 1)}; + return {cull: abilities.includes('Serene Grace') && (!moves.has('trick') || counter.get('Status') > 1)}; case 'firepunch': // Special case for Darmanitan-Zen-Galar, which doesn't always want Fire Punch return {cull: movePool.includes('bellydrum') || (moves.has('earthquake') && movePool.includes('substitute'))}; @@ -1078,7 +1101,7 @@ export class RandomGen8Teams { return {cull: species.id !== 'registeel' && (movePool.includes('sleeptalk') || bulkySetup)}; case 'sleeptalk': if (!moves.has('rest')) return {cull: true}; - if (movePool.length > 1 && !abilities.has('Contrary')) { + if (movePool.length > 1 && !abilities.includes('Contrary')) { const rest = movePool.indexOf('rest'); if (rest >= 0) this.fastPop(movePool, rest); } @@ -1167,7 +1190,7 @@ export class RandomGen8Teams { if ( !isDoubles && counter.get('Status') < 2 && - ['Hunger Switch', 'Speed Boost', 'Moody'].every(m => !abilities.has(m)) + ['Hunger Switch', 'Speed Boost'].every(m => !abilities.includes(m)) ) return {cull: true}; if (movePool.includes('leechseed') || (movePool.includes('toxic') && !moves.has('wish'))) return {cull: true}; if (isDoubles && ( @@ -1320,8 +1343,8 @@ export class RandomGen8Teams { return { cull: moves.has('hydropump') || (counter.get('Physical') >= 4 && movePool.includes('uturn')) || - (moves.has('substitute') && !abilities.has('Contrary')), - isSetup: abilities.has('Contrary'), + (moves.has('substitute') && !abilities.includes('Contrary')), + isSetup: abilities.includes('Contrary'), }; case 'poisonjab': return {cull: !types.has('Poison') && counter.get('Status') >= 2}; @@ -1342,7 +1365,7 @@ export class RandomGen8Teams { return {cull: (species.id === 'naganadel' && moves.has('nastyplot')) || hasRestTalk || - (abilities.has('Simple') && !!counter.get('recovery')) || + (abilities.includes('Simple') && !!counter.get('recovery')) || counter.setupType === 'Physical', }; case 'bravebird': @@ -1363,7 +1386,7 @@ export class RandomGen8Teams { return {cull: moves.has('rapidspin')}; case 'psyshock': // Special case for Sylveon which only wants Psyshock if it gets a Choice item - const sylveonCase = abilities.has('Pixilate') && counter.get('Special') < 4; + const sylveonCase = abilities.includes('Pixilate') && counter.get('Special') < 4; return {cull: moves.has('psychic') || (!counter.setupType && sylveonCase) || (isDoubles && moves.has('psychic'))}; case 'bugbuzz': return {cull: moves.has('uturn') && !counter.setupType}; @@ -1374,7 +1397,7 @@ export class RandomGen8Teams { movePool.includes('spikes'), }; case 'stoneedge': - const gutsCullCondition = abilities.has('Guts') && (!moves.has('dynamicpunch') || moves.has('spikes')); + const gutsCullCondition = abilities.includes('Guts') && (!moves.has('dynamicpunch') || moves.has('spikes')); const rockSlidePlusStatusPossible = counter.get('Status') && movePool.includes('rockslide'); const otherRockMove = moves.has('rockblast') || moves.has('rockslide'); const lucarioCull = species.id === 'lucario' && !!counter.setupType; @@ -1386,7 +1409,7 @@ export class RandomGen8Teams { return {cull: (isDoubles && moves.has('phantomforce')) || // Special case for Sylveon, which never wants Shadow Ball as its only coverage move - (abilities.has('Pixilate') && (!!counter.setupType || counter.get('Status') > 1)) || + (abilities.includes('Pixilate') && (!!counter.setupType || counter.get('Status') > 1)) || (!types.has('Ghost') && movePool.includes('focusblast')), }; case 'shadowclaw': @@ -1472,18 +1495,18 @@ export class RandomGen8Teams { ability: string, types: Set, moves: Set, - abilities: Set, + abilities: string[], counter: MoveCounter, movePool: string[], teamDetails: RandomTeamsTypes.TeamDetails, species: Species, - isDoubles: boolean, preferredType: string, role: RandomTeamsTypes.Role, + isDoubles: boolean, isNoDynamax: boolean ): boolean { if ([ - 'Flare Boost', 'Hydration', 'Ice Body', 'Immunity', 'Innards Out', 'Insomnia', 'Misty Surge', + 'Flare Boost', 'Hydration', 'Ice Body', 'Immunity', 'Innards Out', 'Insomnia', 'Misty Surge', 'Moody', 'Perish Body', 'Quick Feet', 'Rain Dish', 'Snow Cloak', 'Steadfast', 'Steam Engine', ].includes(ability)) return true; @@ -1494,7 +1517,7 @@ export class RandomGen8Teams { case 'Analytic': return (moves.has('rapidspin') || species.nfe || isDoubles); case 'Blaze': - return (isDoubles && abilities.has('Solar Power')) || (!isDoubles && !isNoDynamax && species.id === 'charizard'); + return (isDoubles && abilities.includes('Solar Power')) || (!isDoubles && !isNoDynamax && species.id === 'charizard'); // case 'Bulletproof': case 'Overcoat': // return !!counter.setupType; case 'Chlorophyll': @@ -1506,7 +1529,7 @@ export class RandomGen8Teams { case 'Compound Eyes': case 'No Guard': return !counter.get('inaccurate'); case 'Cursed Body': - return abilities.has('Infiltrator'); + return abilities.includes('Infiltrator'); case 'Defiant': return !counter.get('Physical'); case 'Download': @@ -1514,24 +1537,24 @@ export class RandomGen8Teams { case 'Early Bird': return (types.has('Grass') && isDoubles); case 'Flash Fire': - return (this.dex.getEffectiveness('Fire', species) < -1 || abilities.has('Drought')); + return (this.dex.getEffectiveness('Fire', species) < -1 || abilities.includes('Drought')); case 'Gluttony': return !moves.has('bellydrum'); case 'Guts': return (!moves.has('facade') && !moves.has('sleeptalk') && !species.nfe); case 'Harvest': - return (abilities.has('Frisk') && !isDoubles); + return (abilities.includes('Frisk') && !isDoubles); case 'Hustle': case 'Inner Focus': - return (counter.get('Physical') < 2 || abilities.has('Iron Fist')); + return ((species.id !== 'glalie' && counter.get('Physical') < 2) || abilities.includes('Iron Fist')); case 'Infiltrator': - return (moves.has('rest') && moves.has('sleeptalk')) || (isDoubles && abilities.has('Clear Body')); + return (moves.has('rest') && moves.has('sleeptalk')) || (isDoubles && abilities.includes('Clear Body')); case 'Intimidate': if (species.id === 'salamence' && moves.has('dragondance')) return true; return ['bodyslam', 'bounce', 'tripleaxel'].some(m => moves.has(m)); case 'Iron Fist': return (counter.get('ironfist') < 2 || moves.has('dynamicpunch')); case 'Justified': - return (isDoubles && abilities.has('Inner Focus')); + return (isDoubles && abilities.includes('Inner Focus')); case 'Lightning Rod': return (species.types.includes('Ground') || (!isNoDynamax && counter.setupType === 'Physical')); case 'Limber': @@ -1540,11 +1563,11 @@ export class RandomGen8Teams { return !moves.has('hypervoice'); case 'Magic Guard': // For Sigilyph - return (abilities.has('Tinted Lens') && !counter.get('Status') && !isDoubles); + return (abilities.includes('Tinted Lens') && !counter.get('Status') && !isDoubles); case 'Mold Breaker': return ( - abilities.has('Adaptability') || abilities.has('Scrappy') || (abilities.has('Unburden') && !!counter.setupType) || - (abilities.has('Sheer Force') && !!counter.get('sheerforce')) + abilities.includes('Adaptability') || abilities.includes('Scrappy') || (abilities.includes('Unburden') && !!counter.setupType) || + (abilities.includes('Sheer Force') && !!counter.get('sheerforce')) ); case 'Moxie': return (counter.get('Physical') < 2 || moves.has('stealthrock') || moves.has('defog')); @@ -1562,7 +1585,7 @@ export class RandomGen8Teams { return !counter.get('Normal'); case 'Regenerator': // For Reuniclus - return abilities.has('Magic Guard'); + return abilities.includes('Magic Guard'); case 'Reckless': return !counter.get('recoil') || moves.has('curse'); case 'Rock Head': @@ -1582,11 +1605,11 @@ export class RandomGen8Teams { // For Scrafty return moves.has('dragondance'); case 'Sheer Force': - return (!counter.get('sheerforce') || abilities.has('Guts') || (species.id === 'druddigon' && !isDoubles)); + return (!counter.get('sheerforce') || abilities.includes('Guts') || (species.id === 'druddigon' && !isDoubles)); case 'Shell Armor': return (species.id === 'omastar' && (moves.has('spikes') || moves.has('stealthrock'))); case 'Slush Rush': - return (!teamDetails.hail && !abilities.has('Swift Swim')); + return (!teamDetails.hail && !abilities.includes('Swift Swim')); case 'Sniper': // Inteleon wants Torrent unless it is Gmax return (species.name === 'Inteleon' || (counter.get('Water') > 1 && !moves.has('focusenergy'))); @@ -1597,7 +1620,7 @@ export class RandomGen8Teams { case 'Steely Spirit': return (moves.has('fakeout') && !isDoubles); case 'Sturdy': - return (moves.has('bulkup') || !!counter.get('recoil') || (!isNoDynamax && abilities.has('Solid Rock'))); + return (moves.has('bulkup') || !!counter.get('recoil') || (!isNoDynamax && abilities.includes('Solid Rock'))); case 'Swarm': return (!counter.get('Bug') || !!counter.get('recovery')); case 'Sweet Veil': @@ -1606,15 +1629,15 @@ export class RandomGen8Teams { if (isNoDynamax) { const neverWantsSwim = !moves.has('raindance') && [ 'Intimidate', 'Rock Head', 'Water Absorb', - ].some(m => abilities.has(m)); + ].some(m => abilities.includes(m)); const noSwimIfNoRain = !moves.has('raindance') && [ 'Cloud Nine', 'Lightning Rod', 'Intimidate', 'Rock Head', 'Sturdy', 'Water Absorb', 'Weak Armor', - ].some(m => abilities.has(m)); + ].some(m => abilities.includes(m)); return teamDetails.rain ? neverWantsSwim : noSwimIfNoRain; } return (!moves.has('raindance') && ( - ['Intimidate', 'Rock Head', 'Slush Rush', 'Water Absorb'].some(abil => abilities.has(abil)) || - (abilities.has('Lightning Rod') && !counter.setupType) + ['Intimidate', 'Rock Head', 'Slush Rush', 'Water Absorb'].some(abil => abilities.includes(abil)) || + (abilities.includes('Lightning Rod') && !counter.setupType) )); case 'Synchronize': return counter.get('Status') < 3; @@ -1622,7 +1645,7 @@ export class RandomGen8Teams { return ( !counter.get('technician') || moves.has('tailslap') || - abilities.has('Punk Rock') || + abilities.includes('Punk Rock') || // For Doubles Alolan Persian movePool.includes('snarl') ); @@ -1631,7 +1654,7 @@ export class RandomGen8Teams { // For Sigilyph moves.has('defog') || // For Butterfree - (moves.has('hurricane') && abilities.has('Compound Eyes')) || + (moves.has('hurricane') && abilities.includes('Compound Eyes')) || (counter.get('Status') > 2 && !counter.setupType) ); case 'Torrent': @@ -1644,13 +1667,13 @@ export class RandomGen8Teams { // For Swoobat and Clefable return (!!counter.setupType || moves.has('fireblast')); case 'Unburden': - return (abilities.has('Prankster') || !counter.setupType && !isDoubles); + return (abilities.includes('Prankster') || !counter.setupType && !isDoubles); case 'Volt Absorb': return (this.dex.getEffectiveness('Electric', species) < -1); case 'Water Absorb': return ( moves.has('raindance') || - ['Drizzle', 'Strong Jaw', 'Unaware', 'Volt Absorb'].some(abil => abilities.has(abil)) + ['Drizzle', 'Strong Jaw', 'Unaware', 'Volt Absorb'].some(abil => abilities.includes(abil)) ); case 'Weak Armor': // The Speed less than 50 case is intended for Cursola, but could apply to any slow Pokémon. @@ -1668,14 +1691,14 @@ export class RandomGen8Teams { getAbility( types: Set, moves: Set, - abilities: Set, + abilities: string[], counter: MoveCounter, movePool: string[], teamDetails: RandomTeamsTypes.TeamDetails, species: Species, - isDoubles: boolean, preferredType: string, role: RandomTeamsTypes.Role, + isDoubles: boolean, isNoDynamax: boolean ): string { const abilityData = Array.from(abilities).map(a => this.dex.abilities.get(a)); @@ -1689,38 +1712,40 @@ export class RandomGen8Teams { // since paralysis would arguably be good for them. if (species.id === 'lopunny' && moves.has('facade')) return 'Cute Charm'; if (species.id === 'copperajahgmax') return 'Heavy Metal'; - if (abilities.has('Guts') && + if (abilities.includes('Guts') && // for Ursaring in BDSP - !abilities.has('Quick Feet') && ( + !abilities.includes('Quick Feet') && ( species.id === 'gurdurr' || species.id === 'throh' || moves.has('facade') || (moves.has('rest') && moves.has('sleeptalk')) )) return 'Guts'; - if (abilities.has('Moxie') && (counter.get('Physical') > 3 || moves.has('bounce')) && !isDoubles) return 'Moxie'; + if (abilities.includes('Moxie') && (counter.get('Physical') > 3 || moves.has('bounce')) && !isDoubles) return 'Moxie'; if (isDoubles) { - if (abilities.has('Competitive') && !abilities.has('Shadow Tag') && !abilities.has('Strong Jaw')) return 'Competitive'; - if (abilities.has('Friend Guard')) return 'Friend Guard'; - if (abilities.has('Gluttony') && moves.has('recycle')) return 'Gluttony'; - if (abilities.has('Guts')) return 'Guts'; - if (abilities.has('Harvest')) return 'Harvest'; - if (abilities.has('Healer') && ( - abilities.has('Natural Cure') || - (abilities.has('Aroma Veil') && this.randomChance(1, 2)) + if (abilities.includes('Competitive') && species.id !== 'boltund' && species.id !== 'gothitelle') return 'Competitive'; + if (abilities.includes('Friend Guard')) return 'Friend Guard'; + if (abilities.includes('Gluttony') && moves.has('recycle')) return 'Gluttony'; + if (abilities.includes('Guts')) return 'Guts'; + if (abilities.includes('Harvest')) return 'Harvest'; + if (abilities.includes('Healer') && ( + abilities.includes('Natural Cure') || + (abilities.includes('Aroma Veil') && this.randomChance(1, 2)) )) return 'Healer'; - if (abilities.has('Intimidate')) return 'Intimidate'; + if (abilities.includes('Intimidate')) return 'Intimidate'; if (species.id === 'lopunny') return 'Klutz'; - if (abilities.has('Magic Guard') && !abilities.has('Unaware')) return 'Magic Guard'; - if (abilities.has('Ripen')) return 'Ripen'; - if (abilities.has('Stalwart')) return 'Stalwart'; - if (abilities.has('Storm Drain')) return 'Storm Drain'; - if (abilities.has('Telepathy') && (abilities.has('Pressure') || abilities.has('Analytic'))) return 'Telepathy'; + if (abilities.includes('Magic Guard') && !abilities.includes('Unaware')) return 'Magic Guard'; + if (abilities.includes('Ripen')) return 'Ripen'; + if (abilities.includes('Stalwart')) return 'Stalwart'; + if (abilities.includes('Storm Drain')) return 'Storm Drain'; + if (abilities.includes('Telepathy') && ( + abilities.includes('Pressure') || abilities.includes('Analytic') + )) return 'Telepathy'; } let abilityAllowed: Ability[] = []; // Obtain a list of abilities that are allowed (not culled) for (const ability of abilityData) { if (ability.rating >= 1 && !this.shouldCullAbility( - ability.name, types, moves, abilities, counter, movePool, teamDetails, species, isDoubles, '', '', isNoDynamax + ability.name, types, moves, abilities, counter, movePool, teamDetails, species, '', '', isDoubles, isNoDynamax )) { abilityAllowed.push(ability); } @@ -1861,7 +1886,7 @@ export class RandomGen8Teams { ability: string, types: Set, moves: Set, - abilities: Set, + abilities: string[], counter: MoveCounter, teamDetails: RandomTeamsTypes.TeamDetails, species: Species, @@ -1879,7 +1904,7 @@ export class RandomGen8Teams { moves.has('flipturn') || moves.has('uturn') )) { return ( - !counter.get('priority') && !abilities.has('Speed Boost') && + !counter.get('priority') && !abilities.includes('Speed Boost') && species.baseStats.spe >= 60 && species.baseStats.spe <= 100 && this.randomChance(1, 2) ) ? 'Choice Scarf' : 'Choice Band'; @@ -1983,7 +2008,7 @@ export class RandomGen8Teams { if (counter.damagingMoves.size >= 4 && defensiveStatTotal >= 235) return 'Assault Vest'; if ( ['clearsmog', 'curse', 'haze', 'healbell', 'protect', 'sleeptalk', 'strangesteam'].some(m => moves.has(m)) && - (ability === 'Moody' || !isDoubles) + !isDoubles ) return 'Leftovers'; } @@ -1991,7 +2016,7 @@ export class RandomGen8Teams { ability: string, types: Set, moves: Set, - abilities: Set, + abilities: string[], counter: MoveCounter, teamDetails: RandomTeamsTypes.TeamDetails, species: Species, @@ -2020,12 +2045,11 @@ export class RandomGen8Teams { (!teamDetails.defog || ability === 'Intimidate' || moves.has('uturn') || moves.has('voltswitch')) ); const spinnerCase = (moves.has('rapidspin') && (ability === 'Regenerator' || !!counter.get('recovery'))); - // Glalie prefers Leftovers - if (!isDoubles && (rockWeaknessCase || spinnerCase) && species.id !== 'glalie') return 'Heavy-Duty Boots'; + if (!isDoubles && (rockWeaknessCase || spinnerCase)) return 'Heavy-Duty Boots'; if ( !isDoubles && this.dex.getEffectiveness('Ground', species) >= 2 && !types.has('Poison') && - ability !== 'Levitate' && !abilities.has('Iron Barbs') + ability !== 'Levitate' && !abilities.includes('Iron Barbs') ) return 'Air Balloon'; if ( !isDoubles && @@ -2088,8 +2112,8 @@ export class RandomGen8Teams { const customScale: {[k: string]: number} = { // These Pokemon are too strong and need a lower level zaciancrowned: 65, calyrexshadow: 68, xerneas: 70, necrozmaduskmane: 72, zacian: 72, kyogre: 73, eternatus: 73, - zekrom: 74, marshadow: 75, glalie: 78, urshifurapidstrike: 79, haxorus: 80, inteleon: 80, - cresselia: 83, octillery: 84, jolteon: 84, swoobat: 84, dugtrio: 84, slurpuff: 84, polteageist: 84, + zekrom: 74, marshadow: 75, urshifurapidstrike: 79, haxorus: 80, inteleon: 80, + cresselia: 83, jolteon: 84, swoobat: 84, dugtrio: 84, slurpuff: 84, polteageist: 84, wobbuffet: 86, scrafty: 86, // These Pokemon are too weak and need a higher level delibird: 100, vespiquen: 96, pikachu: 92, shedinja: 92, solrock: 90, arctozolt: 88, reuniclus: 87, @@ -2123,6 +2147,28 @@ export class RandomGen8Teams { return 80; } + 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)); + if (species.name.endsWith('-Gmax')) return species.name.slice(0, -5); + + // Consolidate mostly-cosmetic formes, at least for the purposes of Random Battles + if (['Magearna', 'Polteageist', '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 === 'Keldeo' && this.gen <= 7) return 'Keldeo' + this.sample(['', '-Resolute']); + if (species.baseSpecies === 'Pikachu' && this.dex.currentMod === 'gen8') { + return 'Pikachu' + this.sample( + ['', '-Original', '-Hoenn', '-Sinnoh', '-Unova', '-Kalos', '-Alola', '-Partner', '-World'] + ); + } + return species.name; + } + randomSet( species: string | Species, teamDetails: RandomTeamsTypes.TeamDetails = {}, @@ -2131,20 +2177,8 @@ export class RandomGen8Teams { isNoDynamax = false ): RandomTeamsTypes.RandomSet { species = this.dex.species.get(species); - let forme = species.name; - let gmax = false; - - if (typeof species.battleOnly === 'string') { - // Only change the forme. The species has custom moves, and may have different typing and requirements. - forme = species.battleOnly; - } - if (species.cosmeticFormes) { - forme = this.sample([species.name].concat(species.cosmeticFormes)); - } - if (species.name.endsWith('-Gmax')) { - forme = species.name.slice(0, -5); - gmax = true; - } + const forme = this.getForme(species); + const gmax = species.name.endsWith('-Gmax'); const data = this.randomData[species.id]; @@ -2153,7 +2187,7 @@ export class RandomGen8Teams { (isNoDynamax && data.noDynamaxMoves) || data.moves; const movePool: string[] = [...(randMoves || this.dex.species.getMovePool(species.id))]; - if (this.format.gameType === 'multi' || this.format.gameType === 'freeforall') { + if (this.format.playerCount > 2) { // Random Multi Battle uses doubles move pools, but Ally Switch fails in multi battles // Random Free-For-All also uses doubles move pools, for now const allySwitch = movePool.indexOf('allyswitch'); @@ -2174,8 +2208,9 @@ export class RandomGen8Teams { const ivs = {hp: 31, atk: 31, def: 31, spa: 31, spd: 31, spe: 31}; const types = new Set(species.types); - const abilities = new Set(Object.values(species.abilities)); - if (species.unreleasedHidden) abilities.delete(species.abilities.H); + const abilitiesSet = new Set(Object.values(species.abilities)); + if (species.unreleasedHidden) abilitiesSet.delete(species.abilities.H); + const abilities = Array.from(abilitiesSet); const moves = new Set(); let counter: MoveCounter; @@ -2230,7 +2265,7 @@ export class RandomGen8Teams { !(species.id === 'shuckle' && ['stealthrock', 'stickyweb'].includes(move.id)) && ( move.category === 'Status' || (!types.has(move.type) && move.id !== 'judgment') || - (isLowBP && !move.multihit && !abilities.has('Technician')) + (isLowBP && !move.multihit && !abilities.includes('Technician')) ) ); // Setup-supported moves should only be rejected under specific circumstances @@ -2252,7 +2287,7 @@ export class RandomGen8Teams { // Swords Dance Mew should have Brave Bird (moves.has('swordsdance') && species.id === 'mew' && runEnforcementChecker('Flying')) || // Dhelmise should have Anchor Shot - (abilities.has('Steelworker') && runEnforcementChecker('Steel')) || + (abilities.includes('Steelworker') && runEnforcementChecker('Steel')) || // Check for miscellaneous important moves (!isDoubles && runEnforcementChecker('recovery') && move.id !== 'stickyweb') || runEnforcementChecker('screens') || @@ -2314,7 +2349,7 @@ export class RandomGen8Teams { } ability = this.getAbility(types, moves, abilities, counter, movePool, teamDetails, species, - isDoubles, '', '', isNoDynamax); + '', '', isDoubles, isNoDynamax); if (species.requiredItems) { item = this.sample(species.requiredItems); @@ -2341,9 +2376,6 @@ export class RandomGen8Teams { if (item === 'Leftovers' && types.has('Poison')) { item = 'Black Sludge'; } - if (species.baseSpecies === 'Pikachu' && !gmax && this.dex.currentMod !== 'gen8bdsp') { - forme = 'Pikachu' + this.sample(['', '-Original', '-Hoenn', '-Sinnoh', '-Unova', '-Kalos', '-Alola', '-Partner', '-World']); - } const level: number = this.getLevel(species, isDoubles, isNoDynamax); @@ -2414,11 +2446,10 @@ export class RandomGen8Teams { pokemonToExclude: RandomTeamsTypes.RandomSet[] = [], isMonotype = false, pokemonList: string[] - ) { + ): [{[k: string]: string[]}, string[]] { const exclude = pokemonToExclude.map(p => toID(p.species)); - const pokemonPool = []; + const pokemonPool: {[k: string]: string[]} = {}; const baseSpeciesPool = []; - const baseSpeciesCount: {[k: string]: number} = {}; for (const pokemon of pokemonList) { let species = this.dex.species.get(pokemon); if (exclude.includes(species.id)) continue; @@ -2429,14 +2460,18 @@ export class RandomGen8Teams { if (!species.types.includes(type)) continue; } } - pokemonPool.push(pokemon); - baseSpeciesCount[species.baseSpecies] = (baseSpeciesCount[species.baseSpecies] || 0) + 1; + + if (species.baseSpecies in pokemonPool) { + pokemonPool[species.baseSpecies].push(pokemon); + } else { + pokemonPool[species.baseSpecies] = [pokemon]; + } } // Include base species 1x if 1-3 formes, 2x if 4-6 formes, 3x if 7+ formes - for (const baseSpecies of Object.keys(baseSpeciesCount)) { - for (let i = 0; i < Math.min(Math.ceil(baseSpeciesCount[baseSpecies] / 3), 3); i++) { - baseSpeciesPool.push(baseSpecies); - } + for (const baseSpecies of Object.keys(pokemonPool)) { + // Squawkabilly has 4 formes, but only 2 functionally different formes, so only include it 1x + const weight = (baseSpecies === 'Squawkabilly') ? 1 : Math.min(Math.ceil(pokemonPool[baseSpecies].length / 3), 3); + for (let i = 0; i < weight; i++) baseSpeciesPool.push(baseSpecies); } return [pokemonPool, baseSpeciesPool]; } @@ -2463,7 +2498,9 @@ export class RandomGen8Teams { 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 = []; for (const poke of Object.keys(this.randomData)) { @@ -2474,12 +2511,7 @@ export class RandomGen8Teams { const [pokemonPool, baseSpeciesPool] = this.getPokemonPool(type, pokemon, isMonotype, pokemonList); while (baseSpeciesPool.length && pokemon.length < this.maxTeamSize) { const baseSpecies = this.sampleNoReplace(baseSpeciesPool); - const currentSpeciesPool: Species[] = []; - for (const poke of pokemonPool) { - const species = this.dex.species.get(poke); - if (species.baseSpecies === baseSpecies) currentSpeciesPool.push(species); - } - let 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) @@ -2499,6 +2531,10 @@ export class RandomGen8Teams { 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; @@ -2514,7 +2550,7 @@ export class RandomGen8Teams { } if (skip) continue; - // Limit three weak to any type + // 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) { @@ -2524,12 +2560,40 @@ export class RandomGen8Teams { break; } } + if (this.dex.getEffectiveness(typeName, species) > 1) { + if (!typeDoubleWeaknesses[typeName]) typeDoubleWeaknesses[typeName] = 0; + if (typeDoubleWeaknesses[typeName] >= 1 * 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; + } + + // Limit one level 100 Pokemon + if ( + !this.adjustLevel && numMaxLevelPokemon >= limitFactor && + (this.getLevel(species, isDoubles, this.dex.formats.getRuleTable(this.format).has('dynamaxclause')) === 100) + ) continue; } - // Limit one of any type combination, three in Monotype - if (!this.forceMonotype && typeComboCount[typeCombo] >= (isMonotype ? 3 : 1) * 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; @@ -2565,7 +2629,18 @@ export class RandomGen8Teams { 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; @@ -2652,16 +2727,30 @@ export class RandomGen8Teams { // Build a pool of eligible sets, given the team partners // Also keep track of sets with moves the team requires - let effectivePool: {set: AnyObject, moveVariants?: number[]}[] = []; + let effectivePool: {set: AnyObject, moveVariants?: number[], item?: string, ability?: string}[] = []; const priorityPool = []; for (const curSet of setList) { // if (this.forceMonotype && !species.types.includes(this.forceMonotype)) continue; - const item = this.dex.items.get(curSet.item); - if (itemsMax[item.id] && teamData.has[item.id] >= itemsMax[item.id]) continue; + // reject disallowed items, specifically a second of any given choice item + const allowedItems: string[] = []; + for (const itemString of curSet.item) { + const item = this.dex.items.get(itemString); + if (itemsMax[item.id] && teamData.has[item.id] >= itemsMax[item.id]) continue; + allowedItems.push(itemString); + } + if (allowedItems.length === 0) continue; + const curSetItem = this.sample(allowedItems); - const ability = this.dex.abilities.get(curSet.ability); - if (teamData.weather && weatherAbilities.includes(ability.id)) continue; // reject 2+ weather setters + // reject 2+ weather setters + const allowedAbilities: string[] = []; + for (const abilityString of curSet.ability) { + const ability = this.dex.abilities.get(abilityString); + if (teamData.weather && weatherAbilities.includes(ability.id)) continue; + allowedAbilities.push(abilityString); + } + if (allowedAbilities.length === 0) continue; + const curSetAbility = this.sample(allowedAbilities); let reject = false; let hasRequiredMove = false; @@ -2679,8 +2768,10 @@ export class RandomGen8Teams { curSetVariants.push(variantIndex); } if (reject) continue; - effectivePool.push({set: curSet, moveVariants: curSetVariants}); - if (hasRequiredMove) priorityPool.push({set: curSet, moveVariants: curSetVariants}); + + const fullSetSpec = {set: curSet, moveVariants: curSetVariants, item: curSetItem, ability: curSetAbility}; + effectivePool.push(fullSetSpec); + if (hasRequiredMove) priorityPool.push(fullSetSpec); } if (priorityPool.length) effectivePool = priorityPool; @@ -2698,8 +2789,8 @@ export class RandomGen8Teams { } - const item = this.sampleIfArray(setData.set.item); - const ability = this.sampleIfArray(setData.set.ability); + const item = setData.item || this.sampleIfArray(setData.set.item); + const ability = setData.ability || this.sampleIfArray(setData.set.ability); const nature = this.sampleIfArray(setData.set.nature); const level = this.adjustLevel || setData.set.level || (tier === "LC" ? 5 : 100); diff --git a/data/mods/gen8bdsp/random-data.json b/data/random-battles/gen8bdsp/data.json similarity index 99% rename from data/mods/gen8bdsp/random-data.json rename to data/random-battles/gen8bdsp/data.json index e900fabee420..d4a11460f768 100644 --- a/data/mods/gen8bdsp/random-data.json +++ b/data/random-battles/gen8bdsp/data.json @@ -123,7 +123,7 @@ "moves": ["agility", "razorshell", "rockslide", "swordsdance", "xscissor"] }, "electrode": { - "moves": ["explosion", "lightscreen", "taunt", "thunderbolt", "voltswitch"] + "moves": ["explosion", "taunt", "thunderbolt", "voltswitch"] }, "exeggutor": { "moves": ["gigadrain", "leechseed", "psychic", "sleeppowder", "substitute"] @@ -261,7 +261,7 @@ "moves": ["acrobatics", "leechseed", "sleeppowder", "strengthsap", "substitute"] }, "sunflora": { - "moves": ["energyball", "lightscreen", "sludgebomb", "synthesis"] + "moves": ["energyball", "leechseed", "sludgebomb", "synthesis"] }, "quagsire": { "moves": ["earthquake", "recover", "scald", "toxic"] diff --git a/data/mods/gen8bdsp/random-teams.ts b/data/random-battles/gen8bdsp/teams.ts similarity index 93% rename from data/mods/gen8bdsp/random-teams.ts rename to data/random-battles/gen8bdsp/teams.ts index 2cbcaf52cbb1..c083ff6c54d2 100644 --- a/data/mods/gen8bdsp/random-teams.ts +++ b/data/random-battles/gen8bdsp/teams.ts @@ -1,10 +1,10 @@ // BDSP team generation logic is currently largely shared with Swsh import {PRNG, PRNGSeed} from '../../../sim/prng'; -import {MoveCounter, RandomGen8Teams, OldRandomBattleSpecies} from '../gen8/random-teams'; +import {MoveCounter, RandomGen8Teams, OldRandomBattleSpecies} from '../gen8/teams'; export class RandomBDSPTeams extends RandomGen8Teams { - randomData: {[species: string]: OldRandomBattleSpecies} = require('./random-data.json'); + randomData: {[species: string]: OldRandomBattleSpecies} = require('./data.json'); constructor(format: Format | string, prng: PRNG | PRNGSeed | null) { super(format, prng); @@ -133,7 +133,7 @@ export class RandomBDSPTeams extends RandomGen8Teams { ability: string, types: Set, moves: Set, - abilities: Set, + abilities: string[], counter: MoveCounter, teamDetails: RandomTeamsTypes.TeamDetails, species: Species, @@ -181,7 +181,7 @@ export class RandomBDSPTeams extends RandomGen8Teams { move: Move, types: Set, moves: Set, - abilities: Set, + abilities: string[], counter: MoveCounter, movePool: string[], teamDetails: RandomTeamsTypes.TeamDetails, @@ -213,7 +213,7 @@ export class RandomBDSPTeams extends RandomGen8Teams { return {cull: movePool.includes('protect') || movePool.includes('wish')}; case 'fireblast': // Special case for Togekiss, which always wants Aura Sphere - return {cull: abilities.has('Serene Grace') && (!moves.has('trick') || counter.get('Status') > 1)}; + return {cull: abilities.includes('Serene Grace') && (!moves.has('trick') || counter.get('Status') > 1)}; case 'firepunch': // Special case for Darmanitan-Zen-Galar, which doesn't always want Fire Punch return {cull: moves.has('earthquake') && movePool.includes('substitute')}; @@ -229,7 +229,7 @@ export class RandomBDSPTeams extends RandomGen8Teams { // Milotic always wants RestTalk if (species.id === 'milotic') return {cull: false}; if (moves.has('stealthrock') || !moves.has('rest')) return {cull: true}; - if (movePool.length > 1 && !abilities.has('Contrary')) { + if (movePool.length > 1 && !abilities.includes('Contrary')) { const rest = movePool.indexOf('rest'); if (rest >= 0) this.fastPop(movePool, rest); } @@ -313,7 +313,7 @@ export class RandomBDSPTeams extends RandomGen8Teams { if ( !isDoubles && counter.get('Status') < 2 && - ['Guts', 'Quick Feet', 'Speed Boost', 'Moody'].every(m => !abilities.has(m)) + ['Guts', 'Quick Feet', 'Speed Boost', 'Moody'].every(m => !abilities.includes(m)) ) return {cull: true}; if (movePool.includes('leechseed') || (movePool.includes('toxic') && !moves.has('wish'))) return {cull: true}; if (isDoubles && ( @@ -361,7 +361,7 @@ export class RandomBDSPTeams extends RandomGen8Teams { return {cull: ( !!counter.get('speedsetup') || (counter.setupType && !bugSwordsDanceCase) || - (abilities.has('Speed Boost') && moves.has('protect')) || + (abilities.includes('Speed Boost') && moves.has('protect')) || (isDoubles && moves.has('leechlife')) )}; @@ -416,7 +416,7 @@ export class RandomBDSPTeams extends RandomGen8Teams { return {cull: moves.has('closecombat') || (!types.has('Fighting') && movePool.includes('swordsdance'))}; case 'facade': // Prefer Dynamic Punch when it can be a guaranteed-hit STAB move (mostly for Machamp) - return {cull: moves.has('dynamicpunch') && species.types.includes('Fighting') && abilities.has('No Guard')}; + return {cull: moves.has('dynamicpunch') && species.types.includes('Fighting') && abilities.includes('No Guard')}; case 'focusblast': // Special cases for Blastoise and Regice; Blastoise wants Shell Smash, and Regice wants Thunderbolt return {cull: movePool.includes('shellsmash') || hasRestTalk}; @@ -424,8 +424,8 @@ export class RandomBDSPTeams extends RandomGen8Teams { return { cull: moves.has('hydropump') || (counter.get('Physical') >= 4 && movePool.includes('uturn')) || - (moves.has('substitute') && !abilities.has('Contrary')), - isSetup: abilities.has('Contrary'), + (moves.has('substitute') && !abilities.includes('Contrary')), + isSetup: abilities.includes('Contrary'), }; case 'poisonjab': return {cull: !types.has('Poison') && counter.get('Status') >= 2}; @@ -444,7 +444,7 @@ export class RandomBDSPTeams extends RandomGen8Teams { case 'psyshock': return {cull: moves.has('psychic')}; case 'bugbuzz': - return {cull: moves.has('uturn') && !counter.setupType && !abilities.has('Tinted Lens')}; + return {cull: moves.has('uturn') && !counter.setupType && !abilities.includes('Tinted Lens')}; case 'leechlife': return {cull: (isDoubles && moves.has('lunge')) || @@ -509,7 +509,7 @@ export class RandomBDSPTeams extends RandomGen8Teams { species.id !== 'breloom' && ['bulkup', 'nastyplot', 'painsplit', 'roost', 'swordsdance'].some(m => movePool.includes(m)) ); - const shayminCase = abilities.has('Serene Grace') && movePool.includes('airslash') && !moves.has('airslash'); + const shayminCase = abilities.includes('Serene Grace') && movePool.includes('airslash') && !moves.has('airslash'); return {cull: moves.has('rest') || moveBasedCull || shayminCase}; case 'helpinghand': // Special case for Shuckle in Doubles, which doesn't want sets with no method to harm foes @@ -528,11 +528,13 @@ export class RandomBDSPTeams extends RandomGen8Teams { ability: string, types: Set, moves: Set, - abilities: Set, + abilities: string[], counter: MoveCounter, movePool: string[], teamDetails: RandomTeamsTypes.TeamDetails, species: Species, + preferredType: string, + role: RandomTeamsTypes.Role, isDoubles: boolean, ): boolean { if ([ @@ -547,7 +549,7 @@ export class RandomBDSPTeams extends RandomGen8Teams { case 'Analytic': return (moves.has('rapidspin') || species.nfe || isDoubles); case 'Blaze': - return (isDoubles && abilities.has('Solar Power')) || (!isDoubles && species.id === 'charizard'); + return (isDoubles && abilities.includes('Solar Power')) || (!isDoubles && species.id === 'charizard'); case 'Chlorophyll': return (species.baseStats.spe > 100 || !counter.get('Fire') && !moves.has('sunnyday') && !teamDetails.sun); case 'Cloud Nine': @@ -557,7 +559,7 @@ export class RandomBDSPTeams extends RandomGen8Teams { case 'Compound Eyes': case 'No Guard': return !counter.get('inaccurate'); case 'Cursed Body': - return abilities.has('Infiltrator'); + return abilities.includes('Infiltrator'); case 'Defiant': return !counter.get('Physical'); case 'Download': @@ -565,36 +567,36 @@ export class RandomBDSPTeams extends RandomGen8Teams { case 'Early Bird': return (types.has('Grass') && isDoubles); case 'Flash Fire': - return (this.dex.getEffectiveness('Fire', species) < -1 || abilities.has('Drought')); + return (this.dex.getEffectiveness('Fire', species) < -1 || abilities.includes('Drought')); case 'Gluttony': return !moves.has('bellydrum'); case 'Guts': return (!moves.has('facade') && !moves.has('sleeptalk') && !species.nfe || - abilities.has('Quick Feet') && !!counter.setupType); + abilities.includes('Quick Feet') && !!counter.setupType); case 'Harvest': - return (abilities.has('Frisk') && !isDoubles); + return (abilities.includes('Frisk') && !isDoubles); case 'Hustle': case 'Inner Focus': - return (counter.get('Physical') < 2 || abilities.has('Iron Fist')); + return (counter.get('Physical') < 2 || abilities.includes('Iron Fist')); case 'Infiltrator': - return (moves.has('rest') && moves.has('sleeptalk')) || (isDoubles && abilities.has('Clear Body')); + return (moves.has('rest') && moves.has('sleeptalk')) || (isDoubles && abilities.includes('Clear Body')); case 'Intimidate': if (species.id === 'salamence' && moves.has('dragondance')) return true; return ['bodyslam', 'bounce', 'rockclimb', 'tripleaxel'].some(m => moves.has(m)); case 'Iron Fist': return (counter.get('ironfist') < 2 || moves.has('dynamicpunch')); case 'Justified': - return (isDoubles && abilities.has('Inner Focus')); + return (isDoubles && abilities.includes('Inner Focus')); case 'Lightning Rod': return (species.types.includes('Ground') || counter.setupType === 'Physical'); case 'Limber': return species.types.includes('Electric') || moves.has('facade'); case 'Mold Breaker': return ( - abilities.has('Adaptability') || abilities.has('Scrappy') || (abilities.has('Unburden') && !!counter.setupType) || - (abilities.has('Sheer Force') && !!counter.get('sheerforce')) + abilities.includes('Adaptability') || abilities.includes('Scrappy') || (abilities.includes('Unburden') && !!counter.setupType) || + (abilities.includes('Sheer Force') && !!counter.get('sheerforce')) ); case 'Moody': - return !!counter.setupType && abilities.has('Simple'); + return !!counter.setupType && abilities.includes('Simple'); case 'Moxie': return (counter.get('Physical') < 2 || moves.has('stealthrock') || moves.has('defog')); case 'Overgrow': @@ -618,26 +620,26 @@ export class RandomBDSPTeams extends RandomGen8Teams { case 'Scrappy': return (moves.has('earthquake') && species.id === 'miltank'); case 'Sheer Force': - return (!counter.get('sheerforce') || abilities.has('Guts')); + return (!counter.get('sheerforce') || abilities.includes('Guts')); case 'Shell Armor': return (species.id === 'omastar' && (moves.has('spikes') || moves.has('stealthrock'))); case 'Sniper': return counter.get('Water') > 1 && !moves.has('focusenergy'); case 'Solar Power': - return (!teamDetails.sun || abilities.has('Harvest')); + return (!teamDetails.sun || abilities.includes('Harvest')); case 'Speed Boost': return moves.has('uturn'); case 'Sturdy': - return (moves.has('bulkup') || !!counter.get('recoil') || abilities.has('Solid Rock')); + return (moves.has('bulkup') || !!counter.get('recoil') || abilities.includes('Solid Rock')); case 'Swarm': return (!counter.get('Bug') || !!counter.get('recovery')); case 'Swift Swim': const neverWantsSwim = !moves.has('raindance') && [ 'Intimidate', 'Rock Head', 'Water Absorb', - ].some(m => abilities.has(m)); + ].some(m => abilities.includes(m)); const noSwimIfNoRain = !moves.has('raindance') && [ 'Cloud Nine', 'Lightning Rod', 'Intimidate', 'Rock Head', 'Sturdy', 'Water Absorb', 'Water Veil', 'Weak Armor', - ].some(m => abilities.has(m)); + ].some(m => abilities.includes(m)); return teamDetails.rain ? neverWantsSwim : noSwimIfNoRain; case 'Synchronize': return counter.get('Status') < 3; @@ -645,12 +647,12 @@ export class RandomBDSPTeams extends RandomGen8Teams { return ( !counter.get('technician') || moves.has('tailslap') || - abilities.has('Punk Rock') + abilities.includes('Punk Rock') ); case 'Tinted Lens': return ( // For Butterfree - (moves.has('hurricane') && abilities.has('Compound Eyes')) || + (moves.has('hurricane') && abilities.includes('Compound Eyes')) || (counter.get('Status') > 2 && !counter.setupType) || // For Yanmega moves.has('protect') @@ -659,9 +661,9 @@ export class RandomBDSPTeams extends RandomGen8Teams { return species.id === 'bibarel'; case 'Unburden': return ( - abilities.has('Prankster') || + abilities.includes('Prankster') || // intended for Hitmonlee - abilities.has('Reckless') || + abilities.includes('Reckless') || !counter.setupType && !isDoubles ); case 'Volt Absorb': @@ -669,7 +671,7 @@ export class RandomBDSPTeams extends RandomGen8Teams { case 'Water Absorb': return ( moves.has('raindance') || - ['Drizzle', 'Strong Jaw', 'Unaware', 'Volt Absorb'].some(abil => abilities.has(abil)) + ['Drizzle', 'Strong Jaw', 'Unaware', 'Volt Absorb'].some(abil => abilities.includes(abil)) ); case 'Weak Armor': return ( diff --git a/data/random-battles/gen9/bss-factory-sets.json b/data/random-battles/gen9/bss-factory-sets.json new file mode 100644 index 000000000000..04e58010b4de --- /dev/null +++ b/data/random-battles/gen9/bss-factory-sets.json @@ -0,0 +1,6192 @@ +{ + "chienpao": { + "weight": 10, + "sets": [ + { + "species": "Chien-Pao", + "weight": 35, + "moves": [ + ["Icicle Crash"], + ["Sucker Punch"], + ["Sacred Sword"], + ["Crunch", "Sheer Cold"] + ], + "item": ["Focus Sash"], + "nature": "Jolly", + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "teraType": ["Ghost"], + "ability": ["Sword of Ruin"] + }, + { + "species": "Chien-Pao", + "weight": 15, + "moves": [ + ["Icicle Crash"], + ["Sucker Punch"], + ["Sacred Sword"], + ["Tera Blast"] + ], + "item": ["Focus Sash"], + "nature": "Jolly", + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "teraType": ["Electric"], + "wantsTera": true, + "ability": ["Sword of Ruin"] + }, + { + "species": "Chien-Pao", + "weight": 5, + "moves": [ + ["Tera Blast"], + ["Sacred Sword", "Sheer Cold"], + ["Icicle Crash"], + ["Sucker Punch"] + ], + "item": ["Assault Vest"], + "nature": "Adamant", + "evs": {"hp": 140, "atk": 236, "def": 4, "spd": 12, "spe": 116}, + "teraType": ["Electric", "Fairy", "Grass"], + "wantsTera": true, + "ability": ["Sword of Ruin"] + }, + { + "species": "Chien-Pao", + "weight": 5, + "moves": [ + ["Ice Spinner", "Icicle Crash"], + ["Tera Blast"], + ["Crunch"], + ["Sacred Sword"] + ], + "item": ["Choice Scarf"], + "nature": "Jolly", + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "teraType": ["Electric", "Fairy", "Grass"], + "wantsTera": true, + "ability": ["Sword of Ruin"] + }, + { + "species": "Chien-Pao", + "weight": 10, + "moves": [ + ["Ice Spinner", "Icicle Crash"], + ["Crunch", "Throat Chop"], + ["Ice Shard", "Sucker Punch"], + ["Sacred Sword"] + ], + "item": ["Choice Band"], + "nature": "Jolly", + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "teraType": ["Dark"], + "ability": ["Sword of Ruin"] + }, + { + "species": "Chien-Pao", + "weight": 10, + "moves": [ + ["Ice Spinner", "Icicle Crash"], + ["Tera Blast"], + ["Ice Shard", "Sucker Punch"], + ["Sacred Sword"] + ], + "item": ["Choice Band"], + "nature": "Jolly", + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "teraType": ["Electric", "Fairy", "Grass"], + "wantsTera": true, + "ability": ["Sword of Ruin"] + }, + { + "species": "Chien-Pao", + "weight": 5, + "moves": [ + ["Icicle Crash"], + ["Recover"], + ["Ice Shard", "Sucker Punch"], + ["Sacred Sword"] + ], + "item": ["Rocky Helmet"], + "nature": "Jolly", + "evs": {"hp": 252, "atk": 68, "def": 180, "spd": 4, "spe": 4}, + "teraType": ["Fairy", "Poison"], + "wantsTera": true, + "ability": ["Sword of Ruin"] + }, + { + "species": "Chien-Pao", + "weight": 15, + "moves": [ + ["Swords Dance"], + ["Icicle Crash"], + ["Tera Blast"], + ["Ice Shard", "Sucker Punch"] + ], + "item": ["Lum Berry"], + "nature": "Jolly", + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "teraType": ["Electric"], + "wantsTera": true, + "ability": ["Sword of Ruin"] + } + ] + }, + "dragonite": { + "weight": 10, + "sets": [ + { + "species": "Dragonite", + "weight": 40, + "moves": [ + ["Extreme Speed"], + ["Earthquake"], + ["Dragon Dance", "Encore"], + ["Roost"] + ], + "item": ["Heavy-Duty Boots", "Leftovers", "Rocky Helmet"], + "nature": "Adamant", + "evs": {"hp": 196, "atk": 204, "def": 4, "spd": 4, "spe": 100}, + "teraType": ["Normal"], + "wantsTera": true, + "ability": ["Multiscale"] + }, + { + "species": "Dragonite", + "weight": 10, + "moves": [ + ["Tera Blast"], + ["Earthquake"], + ["Dragon Dance"], + ["Roost"] + ], + "item": ["Heavy-Duty Boots", "Leftovers", "Lum Berry", "Rocky Helmet"], + "nature": "Adamant", + "evs": {"hp": 196, "atk": 204, "def": 4, "spd": 4, "spe": 100}, + "teraType": ["Fairy", "Fire", "Flying"], + "wantsTera": true, + "ability": ["Multiscale"] + }, + { + "species": "Dragonite", + "weight": 5, + "moves": [ + ["Outrage"], + ["Extreme Speed"], + ["Earthquake"], + ["Iron Head"] + ], + "item": ["Choice Band"], + "nature": "Adamant", + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "teraType": ["Normal", "Steel"], + "wantsTera": true, + "ability": ["Multiscale"] + }, + { + "species": "Dragonite", + "weight": 15, + "moves": [ + ["Outrage"], + ["Extreme Speed"], + ["Earthquake"], + ["Tera Blast"] + ], + "item": ["Choice Band"], + "nature": "Adamant", + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "teraType": ["Flying"], + "wantsTera": true, + "ability": ["Multiscale"] + }, + { + "species": "Dragonite", + "weight": 5, + "moves": [ + ["Air Slash"], + ["Encore", "Substitute"], + ["Thunder Wave"], + ["Roost"] + ], + "item": ["Rocky Helmet"], + "nature": "Bold", + "evs": {"hp": 244, "def": 148, "spe": 116}, + "ivs": {"atk": 0}, + "teraType": ["Fairy", "Poison", "Water"], + "wantsTera": true, + "ability": ["Multiscale"] + }, + { + "species": "Dragonite", + "weight": 20, + "moves": [ + ["Scale Shot"], + ["Iron Head"], + ["Earthquake", "Low Kick"], + ["Dragon Dance"] + ], + "item": ["Loaded Dice"], + "nature": "Jolly", + "evs": {"hp": 4, "atk": 252, "spe": 252}, + "teraType": ["Steel"], + "wantsTera": true, + "ability": ["Multiscale"] + }, + { + "species": "Dragonite", + "weight": 5, + "moves": [ + ["Fire Spin"], + ["Earthquake", "Thunder Wave"], + ["Roost"], + ["Encore"] + ], + "item": ["Leftovers"], + "nature": "Careful", + "evs": {"hp": 244, "atk": 12, "spd": 252}, + "teraType": ["Fairy", "Poison", "Steel"], + "wantsTera": true, + "ability": ["Multiscale"] + } + ] + }, + "fluttermane": { + "weight": 10, + "sets": [ + { + "species": "Flutter Mane", + "weight": 20, + "moves": [ + ["Moonblast"], + ["Calm Mind", "Shadow Ball"], + ["Charm"], + ["Pain Split"] + ], + "item": ["Booster Energy"], + "nature": "Timid", + "evs": {"hp": 252, "def": 252, "spa": 4}, + "ivs": {"atk": 0}, + "teraType": ["Fairy", "Water"], + "ability": ["Protosynthesis"] + }, + { + "species": "Flutter Mane", + "weight": 5, + "moves": [ + ["Draining Kiss"], + ["Shadow Ball"], + ["Charm"], + ["Calm Mind"] + ], + "item": ["Booster Energy"], + "nature": "Timid", + "evs": {"hp": 252, "def": 252, "spa": 4}, + "ivs": {"atk": 0}, + "teraType": ["Fairy", "Water"], + "ability": ["Protosynthesis"] + }, + { + "species": "Flutter Mane", + "weight": 15, + "moves": [ + ["Moonblast"], + ["Shadow Ball"], + ["Mystical Fire", "Pain Split", "Substitute"], + ["Calm Mind"] + ], + "item": ["Booster Energy"], + "nature": "Timid", + "evs": {"hp": 4, "def": 132, "spa": 116, "spd": 4, "spe": 252}, + "ivs": {"atk": 0}, + "teraType": ["Fairy", "Water"], + "ability": ["Protosynthesis"] + }, + { + "species": "Flutter Mane", + "weight": 5, + "moves": [ + ["Moonblast"], + ["Shadow Ball", "Substitute"], + ["Tera Blast"], + ["Calm Mind"] + ], + "item": ["Booster Energy"], + "nature": "Timid", + "evs": {"hp": 4, "def": 132, "spa": 116, "spd": 4, "spe": 252}, + "ivs": {"atk": 0}, + "teraType": ["Ground", "Water"], + "wantsTera": true, + "ability": ["Protosynthesis"] + }, + { + "species": "Flutter Mane", + "weight": 10, + "moves": [ + ["Moonblast"], + ["Hex"], + ["Pain Split", "Taunt"], + ["Thunder Wave"] + ], + "item": ["Booster Energy"], + "nature": "Bold", + "evs": {"hp": 228, "def": 252, "spe": 28}, + "ivs": {"atk": 0}, + "teraType": ["Water"], + "ability": ["Protosynthesis"] + }, + { + "species": "Flutter Mane", + "weight": 5, + "moves": [ + ["Moonblast"], + ["Shadow Ball"], + ["Hyper Voice", "Power Gem", "Thunderbolt"], + ["Perish Song"] + ], + "item": ["Choice Scarf"], + "nature": "Modest", + "evs": {"hp": 20, "def": 44, "spa": 204, "spd": 4, "spe": 236}, + "ivs": {"atk": 0}, + "teraType": ["Fairy"], + "ability": ["Protosynthesis"] + }, + { + "species": "Flutter Mane", + "weight": 25, + "moves": [ + ["Moonblast"], + ["Shadow Ball"], + ["Hyper Voice", "Mystical Fire", "Power Gem", "Psyshock", "Thunderbolt"], + ["Perish Song"] + ], + "item": ["Choice Specs"], + "nature": "Timid", + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "ivs": {"atk": 0}, + "teraType": ["Fairy"], + "ability": ["Protosynthesis"] + }, + { + "species": "Flutter Mane", + "weight": 10, + "moves": [ + ["Moonblast"], + ["Hex", "Shadow Ball"], + ["Thunder Wave"], + ["Taunt"] + ], + "item": ["Focus Sash"], + "nature": "Timid", + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "ivs": {"atk": 0}, + "teraType": ["Normal"], + "ability": ["Protosynthesis"] + }, + { + "species": "Flutter Mane", + "weight": 2, + "moves": [ + ["Moonblast"], + ["Shadow Ball"], + ["Psyshock"], + ["Energy Ball"] + ], + "item": ["Assault Vest"], + "nature": "Modest", + "evs": {"hp": 164, "def": 28, "spa": 196, "spd": 4, "spe": 116}, + "ivs": {"atk": 0}, + "teraType": ["Grass"], + "ability": ["Protosynthesis"] + }, + { + "species": "Flutter Mane", + "weight": 3, + "moves": [ + ["Moonblast"], + ["Shadow Ball"], + ["Psyshock"], + ["Mystical Fire"] + ], + "item": ["Assault Vest"], + "nature": "Modest", + "evs": {"hp": 164, "def": 28, "spa": 196, "spd": 4, "spe": 116}, + "ivs": {"atk": 0}, + "teraType": ["Fire"], + "ability": ["Protosynthesis"] + } + ] + }, + "urshifurapidstrike": { + "weight": 10, + "sets": [ + { + "species": "Urshifu-Rapid-Strike", + "weight": 40, + "moves": [ + ["Surging Strikes"], + ["Close Combat", "Drain Punch"], + ["Aqua Jet", "Substitute"], + ["Swords Dance"] + ], + "item": ["Punching Glove"], + "nature": "Jolly", + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "teraType": ["Grass", "Poison", "Water"], + "wantsTera": true, + "ability": ["Unseen Fist"] + }, + { + "species": "Urshifu-Rapid-Strike", + "weight": 25, + "moves": [ + ["Surging Strikes"], + ["Close Combat"], + ["U-turn"], + ["Ice Punch"] + ], + "item": ["Choice Scarf"], + "nature": "Jolly", + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "teraType": ["Water"], + "ability": ["Unseen Fist"] + }, + { + "species": "Urshifu-Rapid-Strike", + "weight": 15, + "moves": [ + ["Surging Strikes"], + ["Close Combat"], + ["U-turn"], + ["Aqua Jet"] + ], + "item": ["Choice Band"], + "nature": "Jolly", + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "teraType": ["Grass", "Poison", "Water"], + "ability": ["Unseen Fist"] + }, + { + "species": "Urshifu-Rapid-Strike", + "weight": 20, + "moves": [ + ["Surging Strikes"], + ["Close Combat"], + ["Aqua Jet"], + ["Counter", "Ice Punch"] + ], + "item": ["Focus Sash"], + "nature": "Jolly", + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "teraType": ["Ghost", "Water"], + "ability": ["Unseen Fist"] + } + ] + }, + "ogerponhearthflame": { + "weight": 10, + "sets": [ + { + "species": "Ogerpon-Hearthflame", + "weight": 40, + "moves": [ + ["Ivy Cudgel"], + ["Knock Off", "Play Rough"], + ["Encore", "Swords Dance"], + ["Horn Leech", "Trailblaze"] + ], + "gender": "F", + "item": ["Hearthflame Mask"], + "nature": "Jolly", + "evs": {"hp": 4, "atk": 252, "spe": 252}, + "teraType": ["Fire"], + "ability": ["Mold Breaker"] + }, + { + "species": "Ogerpon-Hearthflame", + "weight": 40, + "moves": [ + ["Ivy Cudgel"], + ["Horn Leech"], + ["Swords Dance"], + ["Play Rough", "Substitute", "Trailblaze"] + ], + "gender": "F", + "item": ["Hearthflame Mask"], + "nature": "Jolly", + "evs": {"hp": 156, "atk": 36, "def": 4, "spd": 60, "spe": 252}, + "teraType": ["Fire"], + "ability": ["Mold Breaker"] + }, + { + "species": "Ogerpon-Hearthflame", + "weight": 20, + "moves": [ + ["Ivy Cudgel"], + ["Substitute"], + ["Leech Seed"], + ["Encore", "Horn Leech", "Play Rough"] + ], + "item": ["Hearthflame Mask"], + "nature": "Jolly", + "evs": {"hp": 156, "atk": 36, "def": 4, "spd": 60, "spe": 252}, + "teraType": ["Fire"], + "ability": ["Mold Breaker"] + } + ] + }, + "ursalunabloodmoon": { + "weight": 10, + "sets": [ + { + "species": "Ursaluna-Bloodmoon", + "weight": 15, + "moves": [ + ["Blood Moon"], + ["Earth Power"], + ["Vacuum Wave"], + ["Body Press"] + ], + "item": ["Rocky Helmet"], + "nature": "Bold", + "evs": {"hp": 116, "def": 236, "spa": 4, "spd": 116, "spe": 36}, + "ivs": {"atk": 0}, + "teraType": ["Fairy", "Poison"], + "ability": ["Mind's Eye"] + }, + { + "species": "Ursaluna-Bloodmoon", + "weight": 25, + "moves": [ + ["Blood Moon", "Hyper Voice"], + ["Moonlight"], + ["Calm Mind"], + ["Yawn"] + ], + "item": ["Covert Cloak", "Leftovers"], + "nature": "Modest", + "evs": {"hp": 100, "def": 4, "spa": 236, "spd": 12, "spe": 156}, + "ivs": {"atk": 0}, + "teraType": ["Fairy", "Poison"], + "ability": ["Mind's Eye"] + }, + { + "species": "Ursaluna-Bloodmoon", + "weight": 60, + "moves": [ + ["Blood Moon"], + ["Vacuum Wave"], + ["Earth Power"], + ["Hyper Voice"] + ], + "item": ["Assault Vest"], + "nature": "Modest", + "evs": {"hp": 4, "spa": 252, "spd": 252}, + "ivs": {"atk": 0}, + "teraType": ["Fairy", "Normal"], + "ability": ["Mind's Eye"] + } + ] + }, + "ironbundle": { + "weight": 9, + "sets": [ + { + "species": "Iron Bundle", + "weight": 10, + "moves": [ + ["Flip Turn"], + ["Freeze-Dry"], + ["Hydro Pump"], + ["Encore"] + ], + "item": ["Focus Sash"], + "nature": "Timid", + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "teraType": ["Ghost"], + "ability": ["Quark Drive"] + }, + { + "species": "Iron Bundle", + "weight": 70, + "moves": [ + ["Substitute"], + ["Encore"], + ["Hydro Pump"], + ["Freeze-Dry"] + ], + "item": ["Booster Energy"], + "nature": "Timid", + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "ivs": {"atk": 0}, + "teraType": ["Ghost", "Steel", "Water"], + "ability": ["Quark Drive"] + }, + { + "species": "Iron Bundle", + "weight": 10, + "moves": [ + ["Ice Beam"], + ["Hydro Pump"], + ["Freeze-Dry"], + ["Tera Blast"] + ], + "item": ["Choice Specs"], + "nature": "Timid", + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "ivs": {"atk": 0}, + "teraType": ["Fairy"], + "ability": ["Quark Drive"] + }, + { + "species": "Iron Bundle", + "weight": 10, + "moves": [ + ["Ice Beam"], + ["Hydro Pump"], + ["Freeze-Dry"], + ["Flip Turn"] + ], + "item": ["Choice Specs"], + "nature": "Timid", + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "teraType": ["Water"], + "ability": ["Quark Drive"] + } + ] + }, + "urshifu": { + "weight": 9, + "sets": [ + { + "species": "Urshifu", + "weight": 55, + "moves": [ + ["Swords Dance"], + ["Wicked Blow"], + ["Close Combat", "Drain Punch"], + ["Sucker Punch"] + ], + "item": ["Focus Sash"], + "nature": "Jolly", + "evs": {"atk": 252, "def": 4, "spe": 252}, + "teraType": ["Dark", "Ghost"], + "ability": ["Unseen Fist"] + }, + { + "species": "Urshifu", + "weight": 25, + "moves": [ + ["Swords Dance"], + ["Wicked Blow"], + ["Close Combat", "Drain Punch"], + ["Sucker Punch"] + ], + "item": ["Black Glasses"], + "nature": "Jolly", + "evs": {"atk": 252, "def": 4, "spe": 252}, + "teraType": ["Dark", "Ghost", "Poison"], + "ability": ["Unseen Fist"] + }, + { + "species": "Urshifu", + "weight": 5, + "moves": [ + ["Counter"], + ["Wicked Blow"], + ["Close Combat", "Drain Punch"], + ["Sucker Punch"] + ], + "item": ["Focus Sash"], + "nature": "Jolly", + "evs": {"atk": 252, "def": 4, "spe": 252}, + "teraType": ["Dark", "Ghost"], + "ability": ["Unseen Fist"] + }, + { + "species": "Urshifu", + "weight": 5, + "moves": [ + ["Wicked Blow"], + ["Close Combat", "Drain Punch"], + ["Sucker Punch"], + ["U-turn"] + ], + "item": ["Choice Band"], + "nature": "Jolly", + "evs": {"atk": 252, "def": 4, "spe": 252}, + "teraType": ["Dark", "Ghost", "Poison"], + "ability": ["Unseen Fist"] + }, + { + "species": "Urshifu", + "weight": 5, + "moves": [ + ["Wicked Blow"], + ["Close Combat", "Drain Punch"], + ["Sucker Punch"], + ["Iron Head"] + ], + "item": ["Choice Band"], + "nature": "Jolly", + "evs": {"atk": 252, "def": 4, "spe": 252}, + "teraType": ["Steel"], + "wantsTera": true, + "ability": ["Unseen Fist"] + }, + { + "species": "Urshifu", + "weight": 5, + "moves": [ + ["Wicked Blow"], + ["Close Combat"], + ["Sucker Punch"], + ["U-turn"] + ], + "item": ["Choice Scarf"], + "nature": "Jolly", + "evs": {"atk": 252, "def": 4, "spe": 252}, + "teraType": ["Dark"], + "ability": ["Unseen Fist"] + } + ] + }, + "tinglu": { + "weight": 9, + "sets": [ + { + "species": "Ting-Lu", + "weight": 65, + "moves": [ + ["Stealth Rock"], + ["Ruination"], + ["Earthquake", "Heavy Slam"], + ["Whirlwind"] + ], + "item": ["Sitrus Berry"], + "nature": "Impish", + "evs": {"hp": 244, "atk": 20, "def": 116, "spd": 124, "spe": 4}, + "teraType": ["Fairy", "Poison", "Water"], + "ability": ["Vessel of Ruin"] + }, + { + "species": "Ting-Lu", + "weight": 15, + "moves": [ + ["Stealth Rock"], + ["Spikes"], + ["Earthquake", "Heavy Slam"], + ["Whirlwind"] + ], + "item": ["Sitrus Berry"], + "nature": "Impish", + "evs": {"hp": 244, "atk": 20, "def": 116, "spd": 124, "spe": 4}, + "teraType": ["Fairy", "Poison", "Water"], + "ability": ["Vessel of Ruin"] + }, + { + "species": "Ting-Lu", + "weight": 5, + "moves": [ + ["Earthquake"], + ["Heavy Slam"], + ["Fissure", "Stone Edge"], + ["Ruination"] + ], + "item": ["Assault Vest"], + "nature": "Adamant", + "evs": {"hp": 4, "atk": 252, "def": 4, "spd": 108, "spe": 140}, + "teraType": ["Steel"], + "ability": ["Vessel of Ruin"] + }, + { + "species": "Ting-Lu", + "weight": 5, + "moves": [ + ["Earthquake"], + ["Heavy Slam"], + ["Tera Blast"], + ["Ruination"] + ], + "item": ["Assault Vest"], + "nature": "Adamant", + "evs": {"hp": 4, "atk": 252, "def": 4, "spd": 108, "spe": 140}, + "teraType": ["Electric", "Fairy"], + "wantsTera": true, + "ability": ["Vessel of Ruin"] + }, + { + "species": "Ting-Lu", + "weight": 10, + "moves": [ + ["Earthquake"], + ["Heavy Slam"], + ["Rock Tomb"], + ["Ruination"] + ], + "item": ["Sitrus Berry"], + "nature": "Impish", + "evs": {"hp": 244, "atk": 76, "def": 116, "spd": 68, "spe": 4}, + "teraType": ["Steel"], + "ability": ["Vessel of Ruin"] + } + ] + }, + "gholdengo": { + "weight": 9, + "sets": [ + { + "species": "Gholdengo", + "weight": 25, + "moves": [ + ["Make It Rain"], + ["Shadow Ball"], + ["Focus Blast", "Recover", "Thunderbolt"], + ["Trick"] + ], + "item": ["Choice Specs"], + "nature": "Timid", + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "ivs": {"atk": 0}, + "teraType": ["Flying", "Steel", "Water"], + "ability": ["Good as Gold"] + }, + { + "species": "Gholdengo", + "weight": 30, + "moves": [ + ["Make It Rain"], + ["Shadow Ball"], + ["Focus Blast", "Recover", "Thunderbolt"], + ["Trick"] + ], + "item": ["Choice Scarf"], + "nature": "Timid", + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "ivs": {"atk": 0}, + "teraType": ["Flying", "Normal", "Steel", "Water"], + "ability": ["Good as Gold"] + }, + { + "species": "Gholdengo", + "weight": 15, + "moves": [ + ["Focus Blast", "Make It Rain"], + ["Hex"], + ["Thunder Wave"], + ["Recover"] + ], + "item": ["Rocky Helmet"], + "nature": "Bold", + "evs": {"hp": 252, "def": 252, "spa": 4}, + "ivs": {"atk": 0}, + "teraType": ["Flying", "Water"], + "ability": ["Good as Gold"] + }, + { + "species": "Gholdengo", + "weight": 20, + "moves": [ + ["Make It Rain"], + ["Shadow Ball"], + ["Nasty Plot"], + ["Recover"] + ], + "item": ["Covert Cloak"], + "nature": "Modest", + "evs": {"hp": 164, "def": 156, "spa": 36, "spd": 4, "spe": 148}, + "ivs": {"atk": 0}, + "teraType": ["Flying"], + "ability": ["Good as Gold"] + }, + { + "species": "Gholdengo", + "weight": 5, + "moves": [ + ["Tera Blast"], + ["Shadow Ball"], + ["Nasty Plot"], + ["Recover"] + ], + "item": ["Covert Cloak"], + "nature": "Modest", + "evs": {"hp": 164, "def": 156, "spa": 36, "spd": 4, "spe": 148}, + "ivs": {"atk": 0}, + "teraType": ["Fighting", "Water"], + "wantsTera": true, + "ability": ["Good as Gold"] + }, + { + "species": "Gholdengo", + "weight": 5, + "moves": [ + ["Make It Rain"], + ["Shadow Ball"], + ["Nasty Plot"], + ["Psyshock", "Recover", "Substitute"] + ], + "item": ["Air Balloon"], + "nature": "Timid", + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "ivs": {"atk": 0}, + "teraType": ["Flying"], + "ability": ["Good as Gold"] + } + ] + }, + "chiyu": { + "weight": 9, + "sets": [ + { + "species": "Chi-Yu", + "weight": 20, + "moves": [ + ["Overheat"], + ["Dark Pulse"], + ["Tera Blast"], + ["Flamethrower"] + ], + "item": ["Choice Scarf"], + "nature": "Modest", + "evs": {"hp": 116, "def": 84, "spa": 156, "spd": 4, "spe": 148}, + "ivs": {"atk": 0}, + "teraType": ["Fairy", "Grass"], + "wantsTera": true, + "ability": ["Beads of Ruin"] + }, + { + "species": "Chi-Yu", + "weight": 35, + "moves": [ + ["Overheat"], + ["Lava Plume"], + ["Dark Pulse"], + ["Psychic"] + ], + "item": ["Choice Scarf"], + "nature": "Modest", + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "ivs": {"atk": 0}, + "teraType": ["Fire", "Ghost"], + "ability": ["Beads of Ruin"] + }, + { + "species": "Chi-Yu", + "weight": 10, + "moves": [ + ["Flame Charge", "Ruination"], + ["Overheat"], + ["Dark Pulse"], + ["Tera Blast"] + ], + "item": ["Assault Vest"], + "nature": "Calm", + "evs": {"hp": 252, "def": 4, "spa": 76, "spd": 156, "spe": 20}, + "ivs": {"atk": 0}, + "teraType": ["Fairy", "Ghost", "Grass", "Water"], + "wantsTera": true, + "ability": ["Beads of Ruin"] + }, + { + "species": "Chi-Yu", + "weight": 5, + "moves": [ + ["Lava Plume"], + ["Ruination"], + ["Taunt"], + ["Dark Pulse"] + ], + "item": ["Focus Sash"], + "nature": "Timid", + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "ivs": {"atk": 0}, + "teraType": ["Ghost"], + "ability": ["Beads of Ruin"] + }, + { + "species": "Chi-Yu", + "weight": 20, + "moves": [ + ["Overheat"], + ["Flamethrower"], + ["Dark Pulse"], + ["Psychic"] + ], + "item": ["Choice Specs"], + "nature": "Timid", + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "ivs": {"atk": 0}, + "teraType": ["Fire"], + "ability": ["Beads of Ruin"] + }, + { + "species": "Chi-Yu", + "weight": 10, + "moves": [ + ["Overheat"], + ["Flamethrower"], + ["Dark Pulse"], + ["Tera Blast"] + ], + "item": ["Choice Specs"], + "nature": "Timid", + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "ivs": {"atk": 0}, + "teraType": ["Fairy", "Ghost", "Water"], + "wantsTera": true, + "ability": ["Beads of Ruin"] + } + ] + }, + "garganacl": { + "weight": 9, + "sets": [ + { + "species": "Garganacl", + "weight": 45, + "moves": [ + ["Salt Cure"], + ["Protect"], + ["Recover"], + ["Fissure", "Stealth Rock", "Substitute"] + ], + "item": ["Leftovers"], + "nature": "Impish", + "evs": {"hp": 252, "atk": 4, "def": 252}, + "teraType": ["Fairy", "Poison", "Water"], + "wantsTera": true, + "ability": ["Purifying Salt"] + }, + { + "species": "Garganacl", + "weight": 20, + "moves": [ + ["Salt Cure"], + ["Recover"], + ["Curse"], + ["Earthquake", "Protect", "Substitute"] + ], + "item": ["Leftovers"], + "nature": "Careful", + "evs": {"hp": 252, "atk": 4, "spd": 252}, + "teraType": ["Ghost"], + "wantsTera": true, + "ability": ["Purifying Salt"] + }, + { + "species": "Garganacl", + "weight": 35, + "moves": [ + ["Salt Cure"], + ["Recover"], + ["Iron Defense"], + ["Body Press"] + ], + "item": ["Leftovers"], + "nature": "Careful", + "evs": {"hp": 252, "def": 4, "spd": 252}, + "teraType": ["Fairy", "Poison", "Water"], + "wantsTera": true, + "ability": ["Purifying Salt"] + } + ] + }, + "garchomp": { + "weight": 8, + "sets": [ + { + "species": "Garchomp", + "weight": 45, + "moves": [ + ["Scale Shot"], + ["Earthquake"], + ["Iron Head", "Substitute"], + ["Swords Dance"] + ], + "item": ["Loaded Dice"], + "nature": "Jolly", + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "teraType": ["Steel"], + "wantsTera": true, + "ability": ["Rough Skin"] + }, + { + "species": "Garchomp", + "weight": 25, + "moves": [ + ["Stealth Rock"], + ["Spikes"], + ["Earthquake"], + ["Dragon Tail"] + ], + "item": ["Sitrus Berry"], + "nature": "Impish", + "evs": {"hp": 180, "atk": 4, "def": 36, "spd": 172, "spe": 116}, + "teraType": ["Steel"], + "wantsTera": true, + "ability": ["Rough Skin"] + }, + { + "species": "Garchomp", + "weight": 10, + "moves": [ + ["Outrage", "Scale Shot"], + ["Earthquake"], + ["Rock Tomb"], + ["Iron Head"] + ], + "item": ["Choice Band", "Choice Scarf"], + "nature": "Jolly", + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "teraType": ["Steel"], + "wantsTera": true, + "ability": ["Rough Skin"] + }, + { + "species": "Garchomp", + "weight": 5, + "moves": [ + ["Earthquake"], + ["Iron Head"], + ["Scale Shot"], + ["Dragon Tail"] + ], + "item": ["Assault Vest"], + "nature": "Jolly", + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "teraType": ["Steel"], + "ability": ["Rough Skin"] + }, + { + "species": "Garchomp", + "weight": 10, + "moves": [ + ["Outrage", "Scale Shot"], + ["Earthquake"], + ["Rock Tomb"], + ["Tera Blast"] + ], + "item": ["Choice Band", "Choice Scarf"], + "nature": "Jolly", + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "teraType": ["Fairy", "Fire"], + "wantsTera": true, + "ability": ["Rough Skin"] + }, + { + "species": "Garchomp", + "weight": 5, + "moves": [ + ["Earthquake"], + ["Tera Blast"], + ["Scale Shot"], + ["Dragon Tail"] + ], + "item": ["Assault Vest"], + "nature": "Jolly", + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "teraType": ["Fairy"], + "wantsTera": true, + "ability": ["Rough Skin"] + } + ] + }, + "landorustherian": { + "weight": 8, + "sets": [ + { + "species": "Landorus-Therian", + "weight": 30, + "moves": [ + ["Stealth Rock"], + ["Earthquake"], + ["Rock Tomb", "Taunt"], + ["U-turn"] + ], + "item": ["Leftovers", "Rocky Helmet", "Sitrus Berry"], + "nature": "Impish", + "evs": {"hp": 252, "def": 252, "spd": 4}, + "teraType": ["Fairy", "Steel", "Water"], + "ability": ["Intimidate"] + }, + { + "species": "Landorus-Therian", + "weight": 45, + "moves": [ + ["Earthquake"], + ["U-turn"], + ["Tera Blast"], + ["Rock Tomb", "Stone Edge"] + ], + "item": ["Choice Scarf"], + "nature": "Jolly", + "evs": {"atk": 252, "def": 4, "spe": 252}, + "teraType": ["Flying"], + "wantsTera": true, + "ability": ["Intimidate"] + }, + { + "species": "Landorus-Therian", + "weight": 15, + "moves": [ + ["Earthquake"], + ["U-turn"], + ["Tera Blast"], + ["Rock Tomb", "Stone Edge"] + ], + "item": ["Choice Band", "Choice Scarf"], + "nature": "Jolly", + "evs": {"atk": 252, "def": 4, "spe": 252}, + "teraType": ["Fairy", "Flying"], + "wantsTera": true, + "ability": ["Intimidate"] + }, + { + "species": "Landorus-Therian", + "weight": 5, + "moves": [ + ["Earthquake"], + ["U-turn"], + ["Fissure", "Tera Blast"], + ["Rock Tomb", "Smack Down"] + ], + "item": ["Assault Vest"], + "nature": "Adamant", + "evs": {"hp": 252, "atk": 4, "spd": 252}, + "teraType": ["Steel"], + "wantsTera": true, + "ability": ["Intimidate"] + }, + { + "species": "Landorus-Therian", + "weight": 5, + "moves": [ + ["Earthquake"], + ["Rock Tomb"], + ["U-turn"], + ["Tera Blast"] + ], + "item": ["Assault Vest"], + "nature": "Adamant", + "evs": {"hp": 252, "atk": 252, "def": 4}, + "teraType": ["Flying", "Water"], + "wantsTera": true, + "ability": ["Intimidate"] + } + ] + }, + "scizor": { + "weight": 8, + "sets": [ + { + "species": "Scizor", + "weight": 15, + "moves": [ + ["Swords Dance"], + ["Bullet Punch"], + ["Close Combat"], + ["Knock Off", "Tera Blast", "U-turn"] + ], + "item": ["Sitrus Berry"], + "nature": "Adamant", + "evs": {"hp": 252, "atk": 28, "def": 204, "spd": 20, "spe": 4}, + "teraType": ["Water"], + "wantsTera": true, + "ability": ["Technician"] + }, + { + "species": "Scizor", + "weight": 20, + "moves": [ + ["Swords Dance"], + ["Bullet Punch"], + ["Close Combat", "U-turn"], + ["Knock Off"] + ], + "item": ["Sitrus Berry"], + "nature": "Adamant", + "evs": {"hp": 252, "atk": 28, "def": 204, "spd": 20, "spe": 4}, + "teraType": ["Flying", "Steel"], + "wantsTera": true, + "ability": ["Technician"] + }, + { + "species": "Scizor", + "weight": 50, + "moves": [ + ["Bullet Punch"], + ["U-turn"], + ["Knock Off"], + ["Close Combat"] + ], + "item": ["Assault Vest", "Choice Band"], + "nature": "Adamant", + "evs": {"hp": 236, "atk": 244, "def": 20, "spd": 4, "spe": 4}, + "teraType": ["Steel", "Water"], + "wantsTera": true, + "ability": ["Technician"] + }, + { + "species": "Scizor", + "weight": 15, + "moves": [ + ["Bullet Punch"], + ["U-turn"], + ["Knock Off", "Tera Blast"], + ["Close Combat"] + ], + "item": ["Assault Vest"], + "nature": "Adamant", + "evs": {"hp": 236, "atk": 244, "def": 20, "spd": 4, "spe": 4}, + "teraType": ["Water"], + "wantsTera": true, + "ability": ["Technician"] + } + ] + }, + "toxapex": { + "weight": 8, + "sets": [ + { + "species": "Toxapex", + "weight": 40, + "moves": [ + ["Toxic"], + ["Baneful Bunker", "Toxic Spikes"], + ["Recover"], + ["Haze"] + ], + "item": ["Black Sludge", "Mental Herb"], + "nature": "Bold", + "evs": {"hp": 252, "def": 252, "spd": 4}, + "ivs": {"atk": 0}, + "teraType": ["Poison"], + "ability": ["Regenerator"] + }, + { + "species": "Toxapex", + "weight": 60, + "moves": [ + ["Toxic"], + ["Liquidation"], + ["Recover"], + ["Haze"] + ], + "item": ["Leftovers", "Rocky Helmet"], + "nature": "Impish", + "evs": {"hp": 252, "def": 252, "spd": 4}, + "teraType": ["Fairy", "Poison"], + "ability": ["Regenerator"] + } + ] + }, + "roaringmoon": { + "weight": 8, + "sets": [ + { + "species": "Roaring Moon", + "weight": 40, + "moves": [ + ["Dragon Dance"], + ["Acrobatics"], + ["Earthquake", "Roost", "Taunt"], + ["Knock Off"] + ], + "item": ["Booster Energy"], + "nature": "Jolly", + "evs": {"atk": 220, "def": 36, "spe": 252}, + "teraType": ["Flying"], + "wantsTera": true, + "ability": ["Protosynthesis"] + }, + { + "species": "Roaring Moon", + "weight": 10, + "moves": [ + ["Dragon Dance"], + ["Iron Head"], + ["Earthquake", "Roost", "Taunt"], + ["Knock Off"] + ], + "item": ["Booster Energy"], + "nature": "Jolly", + "evs": {"atk": 220, "def": 36, "spe": 252}, + "teraType": ["Steel"], + "wantsTera": true, + "ability": ["Protosynthesis"] + }, + { + "species": "Roaring Moon", + "weight": 5, + "moves": [ + ["Jaw Lock"], + ["Roost"], + ["Taunt"], + ["Dragon Dance"] + ], + "item": ["Leftovers", "Shed Shell"], + "nature": "Impish", + "evs": {"hp": 244, "atk": 4, "def": 196, "spd": 36, "spe": 28}, + "teraType": ["Fairy", "Poison"], + "wantsTera": true, + "ability": ["Protosynthesis"] + }, + { + "species": "Roaring Moon", + "weight": 10, + "moves": [ + ["Knock Off"], + ["U-turn"], + ["Earthquake", "Scale Shot"], + ["Tera Blast"] + ], + "item": ["Choice Band", "Choice Scarf"], + "nature": "Jolly", + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "teraType": ["Fairy", "Fire"], + "wantsTera": true, + "ability": ["Protosynthesis"] + }, + { + "species": "Roaring Moon", + "weight": 25, + "moves": [ + ["Knock Off"], + ["Earthquake", "U-turn"], + ["Iron Head"], + ["Outrage"] + ], + "item": ["Choice Band"], + "nature": "Jolly", + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "teraType": ["Dark", "Steel"], + "wantsTera": true, + "ability": ["Protosynthesis"] + }, + { + "species": "Roaring Moon", + "weight": 10, + "moves": [ + ["Dragon Dance"], + ["Knock Off"], + ["Earthquake"], + ["Scale Shot"] + ], + "item": ["Loaded Dice"], + "nature": "Jolly", + "evs": {"hp": 4, "atk": 252, "spe": 252}, + "teraType": ["Steel"], + "wantsTera": true, + "ability": ["Protosynthesis"] + } + ] + }, + "dragapult": { + "weight": 8, + "sets": [ + { + "species": "Dragapult", + "weight": 30, + "moves": [ + ["Dragon Darts"], + ["U-turn"], + ["Sucker Punch"], + ["Phantom Force"] + ], + "item": ["Choice Band"], + "nature": "Jolly", + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "teraType": ["Dragon", "Steel"], + "ability": ["Infiltrator"] + }, + { + "species": "Dragapult", + "weight": 5, + "moves": [ + ["Dragon Darts"], + ["U-turn"], + ["Sucker Punch"], + ["Tera Blast"] + ], + "item": ["Choice Band"], + "nature": "Jolly", + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "teraType": ["Fairy", "Fire", "Ghost", "Steel"], + "wantsTera": true, + "ability": ["Infiltrator"] + }, + { + "species": "Dragapult", + "weight": 15, + "moves": [ + ["Reflect"], + ["Light Screen"], + ["Curse"], + ["Shadow Ball", "Will-O-Wisp"] + ], + "item": ["Light Clay"], + "nature": "Timid", + "evs": {"hp": 244, "def": 12, "spe": 252}, + "ivs": {"atk": 0}, + "teraType": ["Ghost", "Normal"], + "ability": ["Cursed Body"] + }, + { + "species": "Dragapult", + "weight": 10, + "moves": [ + ["Dragon Darts"], + ["Baton Pass", "Tera Blast"], + ["Substitute"], + ["Dragon Dance"] + ], + "item": ["Life Orb"], + "nature": "Jolly", + "evs": {"atk": 252, "def": 4, "spe": 252}, + "teraType": ["Fire"], + "wantsTera": true, + "ability": ["Clear Body"] + }, + { + "species": "Dragapult", + "weight": 25, + "moves": [ + ["Draco Meteor"], + ["Hex", "Shadow Ball"], + ["Will-O-Wisp"], + ["Thunder Wave"] + ], + "item": ["Focus Sash"], + "nature": "Timid", + "evs": {"def": 4, "spa": 252, "spe": 252}, + "ivs": {"atk": 0}, + "teraType": ["Ghost", "Normal"], + "ability": ["Cursed Body"] + }, + { + "species": "Dragapult", + "weight": 15, + "moves": [ + ["Shadow Ball"], + ["Draco Meteor"], + ["Thunderbolt"], + ["Flamethrower", "U-turn"] + ], + "item": ["Choice Specs"], + "nature": "Timid", + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "teraType": ["Electric", "Fighting", "Fire", "Ghost"], + "ability": ["Infiltrator"] + } + ] + }, + "baxcalibur": { + "weight": 8, + "sets": [ + { + "species": "Baxcalibur", + "weight": 5, + "moves": [ + ["Glaive Rush", "Scale Shot"], + ["Earthquake"], + ["Ice Shard"], + ["Icicle Spear", "Swords Dance"] + ], + "item": ["Focus Sash", "Life Orb"], + "nature": "Jolly", + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "teraType": ["Dragon", "Ghost"], + "wantsTera": true, + "ability": ["Thermal Exchange"] + }, + { + "species": "Baxcalibur", + "weight": 75, + "moves": [ + ["Ice Shard", "Scale Shot"], + ["Icicle Spear"], + ["Earthquake"], + ["Dragon Dance", "Swords Dance"] + ], + "item": ["Loaded Dice"], + "nature": "Jolly", + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "teraType": ["Ghost", "Ground", "Ice"], + "wantsTera": true, + "ability": ["Thermal Exchange"] + }, + { + "species": "Baxcalibur", + "weight": 10, + "moves": [ + ["Icicle Crash", "Icicle Spear"], + ["Ice Shard"], + ["Glaive Rush"], + ["Earthquake"] + ], + "item": ["Assault Vest"], + "nature": "Adamant", + "evs": {"hp": 252, "atk": 252, "spd": 4}, + "teraType": ["Ground"], + "wantsTera": true, + "ability": ["Thermal Exchange"] + }, + { + "species": "Baxcalibur", + "weight": 5, + "moves": [ + ["Icicle Spear"], + ["Ice Shard"], + ["Tera Blast"], + ["Earthquake"] + ], + "item": ["Assault Vest"], + "nature": "Adamant", + "evs": {"hp": 252, "atk": 252, "spd": 4}, + "teraType": ["Electric", "Fairy", "Fire"], + "wantsTera": true, + "ability": ["Thermal Exchange"] + }, + { + "species": "Baxcalibur", + "weight": 5, + "moves": [ + ["Glaive Rush", "Scale Shot"], + ["Earthquake"], + ["Ice Shard"], + ["Icicle Spear"] + ], + "item": ["Choice Band"], + "nature": "Jolly", + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "teraType": ["Dragon", "Ice"], + "wantsTera": true, + "ability": ["Thermal Exchange"] + } + ] + }, + "ninetalesalola": { + "weight": 8, + "sets": [ + { + "species": "Ninetales-Alola", + "weight": 80, + "moves": [ + ["Aurora Veil"], + ["Moonblast"], + ["Encore"], + ["Blizzard", "Freeze-Dry"] + ], + "item": ["Light Clay"], + "nature": "Timid", + "evs": {"hp": 4, "spa": 252, "spe": 252}, + "teraType": ["Fire", "Ice", "Water"], + "ability": ["Snow Warning"] + }, + { + "species": "Ninetales-Alola", + "weight": 10, + "moves": [ + ["Aurora Veil"], + ["Moonblast"], + ["Encore"], + ["Disable"] + ], + "item": ["Light Clay", "Rocky Helmet"], + "nature": "Timid", + "evs": {"hp": 4, "spa": 252, "spe": 252}, + "teraType": ["Fire", "Water"], + "ability": ["Snow Warning"] + }, + { + "species": "Ninetales-Alola", + "weight": 10, + "moves": [ + ["Aurora Veil"], + ["Moonblast"], + ["Encore"], + ["Tera Blast"] + ], + "item": ["Light Clay"], + "nature": "Timid", + "evs": {"hp": 4, "spa": 252, "spe": 252}, + "teraType": ["Fire", "Water"], + "wantsTera": true, + "ability": ["Snow Warning"] + } + ] + }, + "ogerponcornerstone": { + "weight": 8, + "sets": [ + { + "species": "Ogerpon-Cornerstone", + "weight": 100, + "moves": [ + ["Ivy Cudgel"], + ["Horn Leech"], + ["Encore", "Knock Off"], + ["Quick Attack", "Rock Tomb", "Swords Dance"] + ], + "gender": "F", + "item": ["Cornerstone Mask"], + "nature": "Jolly", + "evs": {"hp": 4, "atk": 252, "spe": 252}, + "teraType": ["Rock"], + "ability": ["Sturdy"] + } + ] + }, + "ogerponwellspring": { + "weight": 8, + "sets": [ + { + "species": "Ogerpon-Wellspring", + "weight": 60, + "moves": [ + ["Ivy Cudgel"], + ["Horn Leech", "Leech Seed"], + ["Encore", "Substitute"], + ["Synthesis"] + ], + "gender": "F", + "item": ["Wellspring Mask"], + "nature": "Careful", + "evs": {"hp": 252, "atk": 4, "def": 4, "spd": 188, "spe": 60}, + "teraType": ["Water"], + "ability": ["Water Absorb"] + }, + { + "species": "Ogerpon-Wellspring", + "weight": 40, + "moves": [ + ["Ivy Cudgel"], + ["Horn Leech"], + ["Knock Off", "Play Rough"], + ["Leech Seed", "Swords Dance"] + ], + "gender": "F", + "item": ["Wellspring Mask"], + "nature": "Jolly", + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "teraType": ["Water"], + "ability": ["Water Absorb"] + } + ] + }, + "glimmora": { + "weight": 8, + "sets": [ + { + "species": "Glimmora", + "weight": 30, + "moves": [ + ["Power Gem"], + ["Energy Ball"], + ["Stealth Rock"], + ["Endure"] + ], + "item": ["Red Card"], + "nature": "Calm", + "evs": {"hp": 252, "spd": 124, "spe": 132}, + "ivs": {"atk": 0}, + "teraType": ["Grass"], + "ability": ["Toxic Debris"] + }, + { + "species": "Glimmora", + "weight": 30, + "moves": [ + ["Stealth Rock"], + ["Energy Ball", "Power Gem", "Sludge Wave"], + ["Earth Power", "Mud Shot"], + ["Mortal Spin"] + ], + "item": ["Focus Sash"], + "nature": "Timid", + "evs": {"hp": 4, "spa": 252, "spe": 252}, + "teraType": ["Flying", "Grass"], + "ability": ["Toxic Debris"] + }, + { + "species": "Glimmora", + "weight": 5, + "moves": [ + ["Mortal Spin"], + ["Stealth Rock", "Toxic Spikes"], + ["Mud Shot"], + ["Power Gem", "Sludge Bomb"] + ], + "item": ["Air Balloon", "Leftovers"], + "nature": "Bold", + "evs": {"hp": 244, "def": 76, "spd": 188}, + "teraType": ["Flying", "Grass"], + "ability": ["Toxic Debris"] + }, + { + "species": "Glimmora", + "weight": 20, + "moves": [ + ["Mortal Spin", "Sludge Wave"], + ["Earth Power"], + ["Energy Ball"], + ["Dazzling Gleam", "Power Gem"] + ], + "item": ["Assault Vest"], + "nature": "Modest", + "evs": {"hp": 252, "spa": 252, "spd": 4}, + "teraType": ["Fairy", "Grass", "Ground"], + "ability": ["Toxic Debris"] + }, + { + "species": "Glimmora", + "weight": 15, + "moves": [ + ["Sludge Wave"], + ["Earth Power"], + ["Energy Ball"], + ["Dazzling Gleam", "Power Gem"] + ], + "item": ["Choice Scarf"], + "nature": "Timid", + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "teraType": ["Fairy", "Grass", "Ground"], + "ability": ["Toxic Debris"] + } + ] + }, + "annihilape": { + "weight": 7, + "sets": [ + { + "species": "Annihilape", + "weight": 35, + "moves": [ + ["Drain Punch"], + ["Rage Fist"], + ["Bulk Up"], + ["Encore", "Taunt"] + ], + "item": ["Leftovers", "Sitrus Berry"], + "nature": "Jolly", + "evs": {"hp": 252, "def": 4, "spe": 252}, + "teraType": ["Fire", "Poison", "Steel"], + "ability": ["Vital Spirit"] + }, + { + "species": "Annihilape", + "weight": 25, + "moves": [ + ["Stealth Rock"], + ["Rage Fist"], + ["Drain Punch"], + ["Final Gambit", "Rock Tomb", "Taunt"] + ], + "item": ["Sitrus Berry"], + "nature": "Impish", + "evs": {"hp": 244, "def": 244, "spe": 20}, + "teraType": ["Fire", "Normal", "Steel"], + "ability": ["Vital Spirit"] + }, + { + "species": "Annihilape", + "weight": 25, + "moves": [ + ["Stealth Rock"], + ["Rage Fist"], + ["Close Combat", "Drain Punch"], + ["Final Gambit", "Rock Tomb", "Taunt"] + ], + "item": ["Focus Sash", "Roseli Berry"], + "nature": "Jolly", + "evs": {"hp": 252, "atk": 4, "spe": 252}, + "teraType": ["Fire", "Normal", "Steel"], + "ability": ["Vital Spirit"] + }, + { + "species": "Annihilape", + "weight": 15, + "moves": [ + ["U-turn"], + ["Close Combat"], + ["Rage Fist", "Shadow Claw"], + ["Final Gambit"] + ], + "item": ["Choice Scarf"], + "nature": "Jolly", + "evs": {"hp": 252, "atk": 4, "spe": 252}, + "teraType": ["Ghost", "Normal"], + "ability": ["Defiant"] + } + ] + }, + "heatran": { + "weight": 7, + "sets": [ + { + "species": "Heatran", + "weight": 35, + "moves": [ + ["Magma Storm"], + ["Taunt"], + ["Protect"], + ["Earth Power", "Substitute", "Tera Blast"] + ], + "item": ["Leftovers"], + "nature": "Calm", + "evs": {"hp": 252, "def": 4, "spd": 252}, + "ivs": {"atk": 0}, + "teraType": ["Grass"], + "wantsTera": true, + "ability": ["Flash Fire"] + }, + { + "species": "Heatran", + "weight": 40, + "moves": [ + ["Magma Storm"], + ["Earth Power"], + ["Flash Cannon"], + ["Tera Blast"] + ], + "item": ["Assault Vest"], + "nature": "Modest", + "evs": {"hp": 252, "def": 4, "spa": 252}, + "ivs": {"atk": 0}, + "teraType": ["Fairy", "Grass"], + "wantsTera": true, + "ability": ["Flash Fire"] + }, + { + "species": "Heatran", + "weight": 25, + "moves": [ + ["Magma Storm"], + ["Flash Cannon"], + ["Stealth Rock", "Tera Blast"], + ["Will-O-Wisp"] + ], + "item": ["Rocky Helmet", "Sitrus Berry"], + "nature": "Bold", + "evs": {"hp": 252, "def": 252, "spa": 4}, + "teraType": ["Fairy", "Grass"], + "wantsTera": true, + "ability": ["Flame Body"] + } + ] + }, + "breloom": { + "weight": 7, + "sets": [ + { + "species": "Breloom", + "weight": 85, + "moves": [ + ["Bullet Seed"], + ["Mach Punch"], + ["Bulldoze", "Rock Tomb"], + ["Spore"] + ], + "item": ["Focus Sash"], + "nature": "Adamant", + "evs": {"hp": 4, "atk": 252, "spe": 252}, + "teraType": ["Fighting", "Grass", "Ground"], + "ability": ["Technician"] + }, + { + "species": "Breloom", + "weight": 15, + "moves": [ + ["Bullet Seed"], + ["Mach Punch"], + ["Tera Blast"], + ["Spore", "Swords Dance"] + ], + "item": ["Loaded Dice"], + "nature": "Adamant", + "evs": {"hp": 4, "atk": 252, "spe": 252}, + "teraType": ["Fire"], + "wantsTera": true, + "ability": ["Technician"] + } + ] + }, + "cresselia": { + "weight": 7, + "sets": [ + { + "species": "Cresselia", + "weight": 60, + "moves": [ + ["Stored Power"], + ["Moonblast"], + ["Calm Mind"], + ["Moonlight"] + ], + "item": ["Covert Cloak", "Leftovers"], + "nature": "Bold", + "evs": {"hp": 252, "def": 116, "spe": 140}, + "ivs": {"atk": 0}, + "teraType": ["Electric", "Poison"], + "wantsTera": true, + "ability": ["Levitate"] + }, + { + "species": "Cresselia", + "weight": 40, + "moves": [ + ["Ice Beam", "Moonblast"], + ["Thunder Wave", "Trick Room"], + ["Moonlight"], + ["Lunar Dance"] + ], + "item": ["Mental Herb", "Rocky Helmet"], + "nature": "Bold", + "evs": {"hp": 252, "def": 252, "spa": 4}, + "ivs": {"atk": 0}, + "teraType": ["Steel"], + "ability": ["Levitate"] + } + ] + }, + "dondozo": { + "weight": 7, + "sets": [ + { + "species": "Dondozo", + "weight": 60, + "moves": [ + ["Fissure"], + ["Heavy Slam", "Wave Crash"], + ["Protect", "Rest"], + ["Yawn"] + ], + "item": ["Leftovers"], + "nature": "Impish", + "evs": {"hp": 244, "def": 148, "spd": 116}, + "teraType": ["Fairy", "Grass", "Steel"], + "ability": ["Unaware"] + }, + { + "species": "Dondozo", + "weight": 20, + "moves": [ + ["Fissure"], + ["Body Press", "Wave Crash"], + ["Protect", "Rest"], + ["Yawn"] + ], + "item": ["Leftovers"], + "nature": "Impish", + "evs": {"hp": 244, "def": 252, "spd": 12}, + "teraType": ["Fairy", "Grass", "Steel"], + "ability": ["Unaware"] + }, + { + "species": "Dondozo", + "weight": 10, + "moves": [ + ["Avalanche", "Body Press", "Earthquake", "Fissure"], + ["Wave Crash"], + ["Rest"], + ["Sleep Talk", "Yawn"] + ], + "item": ["Rocky Helmet"], + "nature": "Impish", + "evs": {"hp": 244, "def": 252, "spd": 12}, + "teraType": ["Fairy", "Grass", "Steel"], + "ability": ["Unaware"] + }, + { + "species": "Dondozo", + "weight": 5, + "moves": [ + ["Wave Crash"], + ["Avalanche"], + ["Body Press", "Earthquake", "Heavy Slam"], + ["Fissure"] + ], + "item": ["Assault Vest"], + "nature": "Careful", + "evs": {"hp": 44, "atk": 212, "spd": 252}, + "teraType": ["Fairy", "Grass", "Ground", "Steel"], + "ability": ["Unaware"] + }, + { + "species": "Dondozo", + "weight": 5, + "moves": [ + ["Curse"], + ["Rest"], + ["Wave Crash"], + ["Fissure"] + ], + "item": ["Chesto Berry"], + "nature": "Careful", + "evs": {"hp": 252, "def": 4, "spd": 252}, + "teraType": ["Fairy", "Grass", "Steel"], + "ability": ["Unaware"] + } + ] + }, + "hippowdon": { + "weight": 7, + "sets": [ + { + "species": "Hippowdon", + "weight": 100, + "moves": [ + ["Stealth Rock"], + ["Yawn"], + ["Earthquake"], + ["Slack Off", "Whirlwind"] + ], + "item": ["Leftovers", "Sitrus Berry"], + "nature": "Careful", + "evs": {"hp": 252, "def": 4, "spd": 252}, + "teraType": ["Steel", "Water"], + "ability": ["Sand Stream"] + } + ] + }, + "mimikyu": { + "weight": 7, + "sets": [ + { + "species": "Mimikyu", + "weight": 25, + "moves": [ + ["Play Rough"], + ["Shadow Sneak"], + ["Curse"], + ["Pain Split"] + ], + "item": ["Life Orb"], + "nature": "Jolly", + "evs": {"hp": 4, "atk": 156, "def": 92, "spd": 4, "spe": 252}, + "teraType": ["Fairy", "Ghost"], + "ability": ["Disguise"] + }, + { + "species": "Mimikyu", + "weight": 15, + "moves": [ + ["Play Rough"], + ["Shadow Sneak"], + ["Curse"], + ["Trick Room"] + ], + "item": ["Life Orb"], + "nature": "Adamant", + "evs": {"hp": 36, "atk": 236, "def": 180, "spd": 4, "spe": 52}, + "teraType": ["Fairy", "Ghost"], + "ability": ["Disguise"] + }, + { + "species": "Mimikyu", + "weight": 25, + "moves": [ + ["Play Rough"], + ["Shadow Sneak"], + ["Drain Punch", "Shadow Claw"], + ["Swords Dance"] + ], + "item": ["Life Orb"], + "nature": "Jolly", + "evs": {"hp": 4, "atk": 156, "def": 92, "spd": 4, "spe": 252}, + "teraType": ["Fairy", "Ghost"], + "ability": ["Disguise"] + }, + { + "species": "Mimikyu", + "weight": 15, + "moves": [ + ["Play Rough"], + ["Shadow Claw"], + ["Will-O-Wisp"], + ["Trick"] + ], + "item": ["Choice Scarf"], + "nature": "Jolly", + "evs": {"hp": 4, "atk": 252, "spe": 252}, + "teraType": ["Fairy", "Ghost"], + "ability": ["Disguise"] + }, + { + "species": "Mimikyu", + "weight": 5, + "moves": [ + ["Play Rough"], + ["Shadow Sneak"], + ["Pain Split", "Shadow Claw"], + ["Curse"] + ], + "item": ["Covert Cloak"], + "nature": "Jolly", + "evs": {"hp": 36, "atk": 220, "spe": 252}, + "teraType": ["Fairy", "Ghost"], + "ability": ["Disguise"] + }, + { + "species": "Mimikyu", + "weight": 5, + "moves": [ + ["Play Rough"], + ["Shadow Sneak"], + ["Wood Hammer"], + ["Curse"] + ], + "item": ["Life Orb"], + "nature": "Jolly", + "evs": {"hp": 4, "atk": 156, "def": 92, "spd": 4, "spe": 252}, + "teraType": ["Grass"], + "ability": ["Disguise"] + }, + { + "species": "Mimikyu", + "weight": 5, + "moves": [ + ["Play Rough"], + ["Curse"], + ["Trick Room"], + ["Shadow Sneak"] + ], + "item": ["Covert Cloak"], + "nature": "Adamant", + "evs": {"hp": 36, "atk": 236, "def": 180, "spd": 4, "spe": 52}, + "teraType": ["Fairy", "Ghost"], + "ability": ["Disguise"] + }, + { + "species": "Mimikyu", + "weight": 5, + "moves": [ + ["Shadow Claw", "Shadow Sneak"], + ["Substitute"], + ["Curse"], + ["Pain Split"] + ], + "item": ["Figy Berry"], + "nature": "Jolly", + "evs": {"hp": 4, "def": 252, "spe": 252}, + "teraType": ["Ghost"], + "ability": ["Disguise"] + } + ] + }, + "rotomwash": { + "weight": 7, + "sets": [ + { + "species": "Rotom-Wash", + "weight": 35, + "moves": [ + ["Hydro Pump"], + ["Volt Switch"], + ["Trick"], + ["Will-O-Wisp"] + ], + "item": ["Choice Scarf"], + "nature": "Timid", + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "ivs": {"atk": 0}, + "teraType": ["Ghost", "Steel"], + "ability": ["Levitate"] + }, + { + "species": "Rotom-Wash", + "weight": 15, + "moves": [ + ["Hydro Pump"], + ["Thunderbolt"], + ["Volt Switch"], + ["Trick"] + ], + "item": ["Choice Specs"], + "nature": "Timid", + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "ivs": {"atk": 0}, + "teraType": ["Electric"], + "ability": ["Levitate"] + }, + { + "species": "Rotom-Wash", + "weight": 45, + "moves": [ + ["Hydro Pump"], + ["Volt Switch"], + ["Foul Play"], + ["Will-O-Wisp"] + ], + "item": ["Rocky Helmet", "Sitrus Berry"], + "nature": "Bold", + "evs": {"hp": 252, "def": 252, "spa": 4}, + "ivs": {"atk": 0}, + "teraType": ["Fairy", "Ghost", "Steel"], + "ability": ["Levitate"] + }, + { + "species": "Rotom-Wash", + "weight": 5, + "moves": [ + ["Discharge", "Thunderbolt"], + ["Tera Blast"], + ["Nasty Plot"], + ["Substitute"] + ], + "item": ["Leftovers"], + "nature": "Timid", + "evs": {"hp": 252, "spa": 4, "spe": 252}, + "ivs": {"atk": 0}, + "teraType": ["Steel"], + "wantsTera": true, + "ability": ["Levitate"] + } + ] + }, + "basculegion": { + "weight": 7, + "sets": [ + { + "species": "Basculegion", + "weight": 20, + "moves": [ + ["Last Respects"], + ["Wave Crash"], + ["Aqua Jet", "Sleep Talk"], + ["Flip Turn"] + ], + "gender": "M", + "item": ["Choice Scarf"], + "nature": "Adamant", + "evs": {"atk": 252, "spa": 4, "spe": 252}, + "teraType": ["Fairy", "Fighting", "Ghost", "Normal", "Water"], + "ability": ["Adaptability"] + }, + { + "species": "Basculegion", + "weight": 10, + "moves": [ + ["Last Respects"], + ["Wave Crash"], + ["Flip Turn"], + ["Tera Blast"] + ], + "gender": "M", + "item": ["Choice Scarf"], + "nature": "Adamant", + "evs": {"atk": 252, "spa": 4, "spe": 252}, + "teraType": ["Fairy", "Fighting"], + "wantsTera": true, + "ability": ["Adaptability"] + }, + { + "species": "Basculegion", + "weight": 40, + "moves": [ + ["Wave Crash"], + ["Aqua Jet"], + ["Agility", "Endeavor"], + ["Last Respects"] + ], + "gender": "M", + "item": ["Focus Sash"], + "nature": "Adamant", + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "teraType": ["Ghost", "Normal", "Water"], + "ability": ["Adaptability"] + }, + { + "species": "Basculegion", + "weight": 20, + "moves": [ + ["Wave Crash"], + ["Aqua Jet"], + ["Agility", "Tera Blast"], + ["Last Respects"] + ], + "gender": "M", + "item": ["Focus Sash"], + "nature": "Adamant", + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "teraType": ["Fairy"], + "wantsTera": true, + "ability": ["Adaptability"] + }, + { + "species": "Basculegion", + "weight": 10, + "moves": [ + ["Wave Crash"], + ["Aqua Jet"], + ["Substitute"], + ["Last Respects"] + ], + "gender": "M", + "item": ["Bright Powder"], + "nature": "Adamant", + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "teraType": ["Ghost", "Normal", "Water"], + "ability": ["Adaptability"] + } + ] + }, + "corviknight": { + "weight": 6, + "sets": [ + { + "species": "Corviknight", + "weight": 50, + "moves": [ + ["U-turn"], + ["Roost"], + ["Body Press", "Iron Head"], + ["Brave Bird", "Taunt"] + ], + "item": ["Leftovers", "Rocky Helmet"], + "nature": "Impish", + "evs": {"hp": 252, "def": 252, "spd": 4}, + "teraType": ["Dragon", "Fighting", "Water"], + "ability": ["Mirror Armor"] + }, + { + "species": "Corviknight", + "weight": 40, + "moves": [ + ["Iron Defense"], + ["Body Press"], + ["Roost"], + ["Iron Head", "Taunt", "U-turn"] + ], + "item": ["Covert Cloak", "Rocky Helmet", "Safety Goggles", "Sitrus Berry"], + "nature": "Impish", + "evs": {"hp": 252, "def": 252, "spd": 4}, + "teraType": ["Dragon", "Fighting", "Water"], + "ability": ["Mirror Armor"] + }, + { + "species": "Corviknight", + "weight": 10, + "moves": [ + ["Bulk Up"], + ["Taunt"], + ["Roost"], + ["Brave Bird", "Iron Head"] + ], + "item": ["Covert Cloak", "Rocky Helmet", "Safety Goggles", "Sitrus Berry"], + "nature": "Impish", + "evs": {"hp": 252, "def": 252, "spd": 4}, + "teraType": ["Dragon", "Water"], + "ability": ["Mirror Armor"] + } + ] + }, + "zapdos": { + "weight": 6, + "sets": [ + { + "species": "Zapdos", + "weight": 75, + "moves": [ + ["Volt Switch"], + ["Roost"], + ["Hurricane"], + ["Discharge"] + ], + "item": ["Heavy-Duty Boots", "Rocky Helmet", "Sitrus Berry"], + "nature": "Bold", + "evs": {"hp": 252, "def": 252, "spd": 4}, + "ivs": {"atk": 0}, + "teraType": ["Steel", "Water"], + "ability": ["Static"] + }, + { + "species": "Zapdos", + "weight": 10, + "moves": [ + ["Volt Switch"], + ["Roost"], + ["Hurricane"], + ["Tera Blast"] + ], + "item": ["Heavy-Duty Boots", "Rocky Helmet", "Sitrus Berry"], + "nature": "Bold", + "evs": {"hp": 252, "def": 252, "spd": 4}, + "ivs": {"atk": 0}, + "teraType": ["Ice"], + "wantsTera": true, + "ability": ["Static"] + }, + { + "species": "Zapdos", + "weight": 10, + "moves": [ + ["Thunderbolt"], + ["Hurricane"], + ["Volt Switch"], + ["Tera Blast"] + ], + "item": ["Choice Scarf"], + "nature": "Timid", + "evs": {"def": 4, "spa": 252, "spe": 252}, + "ivs": {"atk": 0}, + "teraType": ["Fairy", "Ice"], + "wantsTera": true, + "ability": ["Static"] + }, + { + "species": "Zapdos", + "weight": 5, + "moves": [ + ["Thunderbolt"], + ["Hurricane"], + ["Volt Switch"], + ["Heat Wave"] + ], + "item": ["Choice Scarf", "Choice Specs"], + "nature": "Timid", + "evs": {"def": 4, "spa": 252, "spe": 252}, + "ivs": {"atk": 0}, + "teraType": ["Electric"], + "ability": ["Static"] + } + ] + }, + "ursaluna": { + "weight": 6, + "sets": [ + { + "species": "Ursaluna", + "weight": 85, + "moves": [ + ["Facade"], + ["Earthquake"], + ["Trailblaze"], + ["Swords Dance"] + ], + "item": ["Flame Orb"], + "nature": "Jolly", + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "teraType": ["Grass", "Normal", "Water"], + "ability": ["Guts"] + }, + { + "species": "Ursaluna", + "weight": 15, + "moves": [ + ["Earthquake"], + ["Avalanche"], + ["Yawn"], + ["Protect"] + ], + "item": ["Leftovers"], + "nature": "Impish", + "evs": {"hp": 156, "def": 252, "spd": 100}, + "teraType": ["Fairy", "Water"], + "ability": ["Bulletproof"] + } + ] + }, + "goodrahisui": { + "weight": 6, + "sets": [ + { + "species": "Goodra-Hisui", + "weight": 60, + "moves": [ + ["Flash Cannon", "Heavy Slam"], + ["Draco Meteor", "Ice Beam"], + ["Acid Spray", "Flamethrower", "Thunderbolt"], + ["Earthquake"] + ], + "item": ["Assault Vest"], + "nature": "Quiet", + "evs": {"hp": 252, "spa": 252, "spd": 4}, + "teraType": ["Fairy", "Flying", "Water"], + "ability": ["Sap Sipper"] + }, + { + "species": "Goodra-Hisui", + "weight": 40, + "moves": [ + ["Acid Armor"], + ["Body Press"], + ["Heavy Slam"], + ["Draco Meteor", "Ice Beam", "Protect"] + ], + "item": ["Leftovers"], + "nature": "Careful", + "evs": {"hp": 252, "def": 4, "spd": 252}, + "teraType": ["Fairy", "Flying"], + "ability": ["Shell Armor"] + } + ] + }, + "magnezone": { + "weight": 6, + "sets": [ + { + "species": "Magnezone", + "weight": 70, + "moves": [ + ["Thunderbolt"], + ["Flash Cannon"], + ["Volt Switch"], + ["Tera Blast"] + ], + "item": ["Assault Vest"], + "nature": "Modest", + "evs": {"hp": 252, "spa": 4, "spd": 252}, + "ivs": {"atk": 0}, + "teraType": ["Fairy", "Water"], + "wantsTera": true, + "ability": ["Analytic"] + }, + { + "species": "Magnezone", + "weight": 20, + "moves": [ + ["Thunderbolt"], + ["Flash Cannon"], + ["Volt Switch"], + ["Tera Blast"] + ], + "item": ["Choice Specs"], + "nature": "Modest", + "evs": {"hp": 252, "spa": 4, "spd": 252}, + "ivs": {"atk": 0}, + "teraType": ["Fairy", "Water"], + "wantsTera": true, + "ability": ["Sturdy"] + }, + { + "species": "Magnezone", + "weight": 10, + "moves": [ + ["Thunderbolt"], + ["Flash Cannon", "Steel Beam"], + ["Volt Switch"], + ["Mirror Coat"] + ], + "item": ["Custap Berry"], + "nature": "Modest", + "evs": {"hp": 252, "spa": 4, "spd": 252}, + "ivs": {"atk": 0}, + "teraType": ["Flying", "Water"], + "wantsTera": true, + "ability": ["Sturdy"] + } + ] + }, + "ogerpon": { + "weight": 6, + "sets": [ + { + "species": "Ogerpon", + "weight": 100, + "moves": [ + ["Ivy Cudgel"], + ["U-turn"], + ["Play Rough"], + ["Knock Off", "Stomping Tantrum"] + ], + "item": ["Choice Band", "Focus Sash"], + "nature": "Jolly", + "evs": {"atk": 252, "def": 4, "spe": 252}, + "teraType": ["Grass"], + "ability": ["Defiant"] + } + ] + }, + "gliscor": { + "weight": 6, + "sets": [ + { + "species": "Gliscor", + "weight": 100, + "moves": [ + ["Substitute"], + ["Toxic"], + ["Protect"], + ["Earthquake"] + ], + "item": ["Toxic Orb"], + "nature": "Impish", + "evs": {"hp": 244, "def": 108, "spe": 156}, + "teraType": ["Water"], + "wantsTera": true, + "ability": ["Poison Heal"] + } + ] + }, + "ironmoth": { + "weight": 6, + "sets": [ + { + "species": "Iron Moth", + "weight": 20, + "moves": [ + ["Fiery Dance"], + ["Sludge Wave"], + ["Energy Ball"], + ["Dazzling Gleam", "Overheat", "Psychic"] + ], + "item": ["Assault Vest", "Booster Energy", "Choice Specs"], + "nature": "Timid", + "evs": {"hp": 4, "spa": 252, "spe": 252}, + "teraType": ["Fairy", "Fire", "Grass", "Water"], + "ability": ["Quark Drive"] + }, + { + "species": "Iron Moth", + "weight": 20, + "moves": [ + ["Fiery Dance"], + ["Sludge Wave"], + ["Energy Ball"], + ["Dazzling Gleam", "Overheat", "Psychic", "Tera Blast"] + ], + "item": ["Assault Vest", "Booster Energy", "Choice Specs"], + "nature": "Timid", + "evs": {"hp": 4, "spa": 252, "spe": 252}, + "teraType": ["Fairy", "Water"], + "wantsTera": true, + "ability": ["Quark Drive"] + }, + { + "species": "Iron Moth", + "weight": 20, + "moves": [ + ["Toxic Spikes"], + ["Fiery Dance"], + ["Morning Sun"], + ["Sludge Wave", "Tera Blast", "Whirlwind"] + ], + "item": ["Booster Energy", "Covert Cloak", "Passho Berry", "Sitrus Berry"], + "nature": "Timid", + "evs": {"hp": 244, "def": 52, "spa": 4, "spd": 12, "spe": 196}, + "ivs": {"atk": 0}, + "teraType": ["Fairy", "Grass", "Water"], + "ability": ["Quark Drive"] + }, + { + "species": "Iron Moth", + "weight": 10, + "moves": [ + ["Toxic Spikes"], + ["Fiery Dance"], + ["Morning Sun"], + ["Whirlwind"] + ], + "item": ["Black Sludge", "Heavy-Duty Boots"], + "nature": "Calm", + "evs": {"hp": 196, "spd": 132, "spe": 180}, + "ivs": {"atk": 0}, + "teraType": ["Poison"], + "ability": ["Quark Drive"] + }, + { + "species": "Iron Moth", + "weight": 10, + "moves": [ + ["Toxic Spikes"], + ["Fiery Dance"], + ["Morning Sun"], + ["Whirlwind"] + ], + "item": ["Heavy-Duty Boots", "Leftovers"], + "nature": "Calm", + "evs": {"hp": 196, "spd": 132, "spe": 180}, + "ivs": {"atk": 0}, + "teraType": ["Grass"], + "ability": ["Quark Drive"] + }, + { + "species": "Iron Moth", + "weight": 10, + "moves": [ + ["Fiery Dance"], + ["Acid Spray", "Sludge Wave"], + ["Energy Ball", "Psychic"], + ["Dazzling Gleam", "Tera Blast"] + ], + "item": ["Booster Energy"], + "nature": "Timid", + "evs": {"def": 124, "spa": 132, "spe": 252}, + "teraType": ["Water"], + "wantsTera": true, + "ability": ["Quark Drive"] + }, + { + "species": "Iron Moth", + "weight": 10, + "moves": [ + ["Fiery Dance"], + ["Acid Spray", "Sludge Wave"], + ["Energy Ball"], + ["Dazzling Gleam", "Psychic"] + ], + "item": ["Booster Energy"], + "nature": "Timid", + "evs": {"def": 124, "spa": 132, "spe": 252}, + "teraType": ["Fire", "Grass", "Poison"], + "ability": ["Quark Drive"] + } + ] + }, + "rillaboom": { + "weight": 6, + "sets": [ + { + "species": "Rillaboom", + "weight": 50, + "moves": [ + ["Grassy Glide"], + ["Knock Off"], + ["Drum Beating", "Wood Hammer"], + ["Tera Blast"] + ], + "item": ["Assault Vest", "Choice Band"], + "nature": "Jolly", + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "teraType": ["Rock"], + "wantsTera": true, + "ability": ["Grassy Surge"] + }, + { + "species": "Rillaboom", + "weight": 20, + "moves": [ + ["Grassy Glide"], + ["Knock Off"], + ["Drum Beating", "Wood Hammer"], + ["High Horsepower", "U-turn"] + ], + "item": ["Assault Vest"], + "nature": "Jolly", + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "teraType": ["Grass", "Poison"], + "ability": ["Grassy Surge"] + }, + { + "species": "Rillaboom", + "weight": 10, + "moves": [ + ["Grassy Glide"], + ["Knock Off"], + ["Drum Beating", "Wood Hammer"], + ["High Horsepower", "U-turn"] + ], + "item": ["Choice Band"], + "nature": "Jolly", + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "teraType": ["Grass"], + "ability": ["Grassy Surge"] + }, + { + "species": "Rillaboom", + "weight": 20, + "moves": [ + ["Grassy Glide"], + ["High Horsepower"], + ["Tera Blast"], + ["Swords Dance"] + ], + "item": ["Grassy Seed"], + "nature": "Adamant", + "evs": {"hp": 252, "atk": 252, "def": 4}, + "teraType": ["Fairy", "Rock"], + "wantsTera": true, + "ability": ["Grassy Surge"] + } + ] + }, + "sneasler": { + "weight": 5, + "sets": [ + { + "species": "Sneasler", + "weight": 30, + "moves": [ + ["Dire Claw"], + ["Close Combat"], + ["Fake Out"], + ["Toxic Spikes"] + ], + "item": ["Air Balloon", "Focus Sash", "Normal Gem", "Red Card", "Sitrus Berry"], + "nature": "Adamant", + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "teraType": ["Fighting", "Flying"], + "ability": ["Unburden"] + }, + { + "species": "Sneasler", + "weight": 10, + "moves": [ + ["Dire Claw"], + ["Close Combat"], + ["Fake Out"], + ["Toxic Spikes"] + ], + "item": ["Air Balloon", "Focus Sash", "Sitrus Berry"], + "nature": "Jolly", + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "teraType": ["Fighting", "Flying"], + "ability": ["Poison Touch"] + }, + { + "species": "Sneasler", + "weight": 60, + "moves": [ + ["Dire Claw"], + ["Close Combat"], + ["Shadow Claw"], + ["Toxic Spikes"] + ], + "item": ["Air Balloon", "Focus Sash", "Red Card", "Sitrus Berry"], + "nature": "Adamant", + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "teraType": ["Ghost"], + "ability": ["Unburden"] + } + ] + }, + "clodsire": { + "weight": 5, + "sets": [ + { + "species": "Clodsire", + "weight": 50, + "moves": [ + ["Earthquake"], + ["Toxic", "Yawn"], + ["Counter", "Haze", "Stealth Rock"], + ["Recover"] + ], + "item": ["Leftovers", "Sitrus Berry"], + "nature": "Impish", + "evs": {"hp": 156, "def": 252, "spd": 100}, + "teraType": ["Dark", "Electric", "Fire", "Water"], + "ability": ["Water Absorb"] + }, + { + "species": "Clodsire", + "weight": 50, + "moves": [ + ["Earthquake"], + ["Toxic", "Yawn"], + ["Counter", "Haze", "Stealth Rock"], + ["Recover"] + ], + "item": ["Leftovers", "Sitrus Berry"], + "nature": "Impish", + "evs": {"hp": 156, "def": 252, "spd": 100}, + "teraType": ["Dark", "Electric", "Fire", "Water"], + "ability": ["Unaware"] + } + ] + }, + "meowscarada": { + "weight": 5, + "sets": [ + { + "species": "Meowscarada", + "weight": 25, + "moves": [ + ["Flower Trick"], + ["Knock Off"], + ["Trick", "U-turn"], + ["Low Kick", "Play Rough", "Sucker Punch"] + ], + "item": ["Choice Scarf"], + "nature": "Jolly", + "evs": {"hp": 4, "atk": 252, "spe": 252}, + "teraType": ["Dark", "Grass"], + "ability": ["Protean"] + }, + { + "species": "Meowscarada", + "weight": 10, + "moves": [ + ["Flower Trick"], + ["Knock Off"], + ["Trick", "U-turn"], + ["Tera Blast"] + ], + "item": ["Choice Scarf"], + "nature": "Jolly", + "evs": {"hp": 4, "atk": 252, "spe": 252}, + "teraType": ["Ghost", "Rock"], + "wantsTera": true, + "ability": ["Protean"] + }, + { + "species": "Meowscarada", + "weight": 30, + "moves": [ + ["Flower Trick"], + ["Knock Off"], + ["Sucker Punch", "Taunt"], + ["Toxic Spikes"] + ], + "item": ["Focus Sash"], + "nature": "Jolly", + "evs": {"atk": 252, "def": 4, "spe": 252}, + "teraType": ["Grass"], + "ability": ["Overgrow"] + }, + { + "species": "Meowscarada", + "weight": 20, + "moves": [ + ["Flower Trick"], + ["Knock Off"], + ["Tera Blast"], + ["Sucker Punch", "Toxic Spikes"] + ], + "item": ["Focus Sash"], + "nature": "Jolly", + "evs": {"atk": 252, "def": 4, "spe": 252}, + "teraType": ["Ghost", "Rock"], + "wantsTera": true, + "ability": ["Overgrow"] + }, + { + "species": "Meowscarada", + "weight": 10, + "moves": [ + ["Flower Trick"], + ["Knock Off"], + ["Trick", "U-turn"], + ["Sucker Punch"] + ], + "item": ["Choice Band"], + "nature": "Jolly", + "evs": {"hp": 4, "atk": 252, "spe": 252}, + "teraType": ["Grass"], + "ability": ["Protean"] + }, + { + "species": "Meowscarada", + "weight": 5, + "moves": [ + ["Flower Trick"], + ["Knock Off"], + ["Sucker Punch", "Trick", "U-turn"], + ["Tera Blast"] + ], + "item": ["Choice Band"], + "nature": "Jolly", + "evs": {"hp": 4, "atk": 252, "spe": 252}, + "teraType": ["Ghost", "Rock"], + "wantsTera": true, + "ability": ["Protean"] + } + ] + }, + "azumarill": { + "weight": 5, + "sets": [ + { + "species": "Azumarill", + "weight": 45, + "moves": [ + ["Aqua Jet"], + ["Play Rough"], + ["Liquidation"], + ["Superpower"] + ], + "item": ["Assault Vest"], + "nature": "Adamant", + "evs": {"hp": 252, "atk": 252, "spd": 4}, + "teraType": ["Fairy", "Water"], + "ability": ["Huge Power"] + }, + { + "species": "Azumarill", + "weight": 10, + "moves": [ + ["Aqua Jet"], + ["Play Rough"], + ["Liquidation"], + ["Tera Blast"] + ], + "item": ["Assault Vest", "Choice Band"], + "nature": "Adamant", + "evs": {"hp": 252, "atk": 252, "spd": 4}, + "teraType": ["Electric", "Fairy", "Fire", "Grass"], + "wantsTera": true, + "ability": ["Huge Power"] + }, + { + "species": "Azumarill", + "weight": 25, + "moves": [ + ["Belly Drum"], + ["Aqua Jet"], + ["Play Rough"], + ["Encore", "Liquidation"] + ], + "item": ["Sitrus Berry"], + "nature": "Adamant", + "evs": {"hp": 244, "atk": 252, "def": 12}, + "teraType": ["Water"], + "ability": ["Huge Power"] + }, + { + "species": "Azumarill", + "weight": 10, + "moves": [ + ["Belly Drum"], + ["Aqua Jet"], + ["Play Rough"], + ["Bulldoze"] + ], + "item": ["Sitrus Berry"], + "nature": "Adamant", + "evs": {"hp": 244, "atk": 252, "def": 12}, + "teraType": ["Steel"], + "ability": ["Huge Power"] + }, + { + "species": "Azumarill", + "weight": 5, + "moves": [ + ["Belly Drum"], + ["Aqua Jet"], + ["Play Rough"], + ["Tera Blast"] + ], + "item": ["Sitrus Berry"], + "nature": "Adamant", + "evs": {"hp": 244, "atk": 252, "def": 12}, + "teraType": ["Fire"], + "wantsTera": true, + "ability": ["Huge Power"] + }, + { + "species": "Azumarill", + "weight": 5, + "moves": [ + ["Substitute"], + ["Encore"], + ["Play Rough"], + ["Aqua Jet", "Liquidation"] + ], + "item": ["Leftovers"], + "nature": "Adamant", + "evs": {"hp": 252, "atk": 252, "def": 4}, + "teraType": ["Water"], + "ability": ["Huge Power"] + } + ] + }, + "ironvaliant": { + "weight": 5, + "sets": [ + { + "species": "Iron Valiant", + "weight": 35, + "moves": [ + ["Spirit Break"], + ["Encore", "Reflect"], + ["Close Combat"], + ["Destiny Bond", "Knock Off"] + ], + "item": ["Booster Energy"], + "nature": "Jolly", + "evs": {"hp": 92, "atk": 204, "def": 4, "spd": 4, "spe": 204}, + "teraType": ["Ghost", "Steel"], + "ability": ["Quark Drive"] + }, + { + "species": "Iron Valiant", + "weight": 25, + "moves": [ + ["Moonblast"], + ["Encore", "Shadow Ball", "Shadow Sneak"], + ["Aura Sphere", "Close Combat"], + ["Destiny Bond"] + ], + "item": ["Booster Energy", "Focus Sash"], + "nature": "Naive", + "evs": {"atk": 4, "spa": 252, "spe": 252}, + "teraType": ["Fairy", "Ghost", "Steel"], + "ability": ["Quark Drive"] + }, + { + "species": "Iron Valiant", + "weight": 20, + "moves": [ + ["Moonblast"], + ["Close Combat"], + ["Encore", "Shadow Ball"], + ["Psychic", "Psyshock", "Thunderbolt"] + ], + "item": ["Booster Energy", "Life Orb"], + "nature": "Naive", + "evs": {"atk": 4, "spa": 252, "spe": 252}, + "teraType": ["Electric", "Fairy", "Ghost", "Steel"], + "ability": ["Quark Drive"] + }, + { + "species": "Iron Valiant", + "weight": 20, + "moves": [ + ["Swords Dance"], + ["Close Combat", "Encore"], + ["Spirit Break"], + ["Knock Off", "Shadow Sneak"] + ], + "item": ["Booster Energy", "Focus Sash"], + "nature": "Jolly", + "evs": {"atk": 252, "def": 4, "spe": 252}, + "teraType": ["Fairy", "Ghost", "Steel"], + "ability": ["Quark Drive"] + } + ] + }, + "kingambit": { + "weight": 5, + "sets": [ + { + "species": "Kingambit", + "weight": 25, + "moves": [ + ["Kowtow Cleave"], + ["Sucker Punch"], + ["Iron Head"], + ["Guillotine"] + ], + "item": ["Assault Vest"], + "nature": "Adamant", + "evs": {"hp": 252, "atk": 252, "spd": 4}, + "teraType": ["Dark", "Flying"], + "ability": ["Defiant"] + }, + { + "species": "Kingambit", + "weight": 20, + "moves": [ + ["Kowtow Cleave"], + ["Sucker Punch"], + ["Iron Head"], + ["Guillotine"] + ], + "item": ["Assault Vest"], + "nature": "Adamant", + "evs": {"hp": 252, "atk": 252, "spd": 4}, + "teraType": ["Dark", "Flying"], + "ability": ["Supreme Overlord"] + }, + { + "species": "Kingambit", + "weight": 10, + "moves": [ + ["Kowtow Cleave"], + ["Guillotine", "Sucker Punch"], + ["Iron Head"], + ["Tera Blast"] + ], + "item": ["Assault Vest"], + "nature": "Adamant", + "evs": {"hp": 252, "atk": 252, "spd": 4}, + "teraType": ["Fairy"], + "wantsTera": true, + "ability": ["Defiant"] + }, + { + "species": "Kingambit", + "weight": 10, + "moves": [ + ["Kowtow Cleave"], + ["Guillotine", "Sucker Punch"], + ["Iron Head"], + ["Tera Blast"] + ], + "item": ["Assault Vest"], + "nature": "Adamant", + "evs": {"hp": 252, "atk": 252, "spd": 4}, + "teraType": ["Fairy"], + "wantsTera": true, + "ability": ["Supreme Overlord"] + }, + { + "species": "Kingambit", + "weight": 15, + "moves": [ + ["Kowtow Cleave"], + ["Sucker Punch"], + ["Iron Head"], + ["Swords Dance"] + ], + "item": ["Black Glasses", "Sitrus Berry"], + "nature": "Adamant", + "evs": {"hp": 252, "atk": 252, "spd": 4}, + "teraType": ["Dark", "Flying"], + "ability": ["Supreme Overlord"] + }, + { + "species": "Kingambit", + "weight": 10, + "moves": [ + ["Kowtow Cleave"], + ["Sucker Punch"], + ["Iron Head"], + ["Swords Dance"] + ], + "item": ["Black Glasses", "Sitrus Berry"], + "nature": "Adamant", + "evs": {"hp": 252, "atk": 252, "spd": 4}, + "teraType": ["Dark", "Flying"], + "ability": ["Defiant"] + }, + { + "species": "Kingambit", + "weight": 5, + "moves": [ + ["Stealth Rock"], + ["Kowtow Cleave"], + ["Guillotine", "Iron Head"], + ["Sucker Punch", "Thunder Wave"] + ], + "item": ["Focus Sash"], + "nature": "Adamant", + "evs": {"hp": 252, "atk": 252, "spd": 4}, + "teraType": ["Dark", "Fairy", "Flying"], + "ability": ["Defiant", "Supreme Overlord"] + }, + { + "species": "Kingambit", + "weight": 5, + "moves": [ + ["Stealth Rock"], + ["Kowtow Cleave"], + ["Guillotine", "Iron Head"], + ["Sucker Punch", "Thunder Wave"] + ], + "item": ["Sitrus Berry"], + "nature": "Adamant", + "evs": {"hp": 244, "atk": 252, "spd": 12}, + "teraType": ["Dark", "Fairy", "Flying"], + "ability": ["Defiant", "Supreme Overlord"] + } + ] + }, + "volcarona": { + "weight": 5, + "sets": [ + { + "species": "Volcarona", + "weight": 55, + "moves": [ + ["Quiver Dance"], + ["Fiery Dance"], + ["Morning Sun"], + ["Giga Drain", "Substitute", "Will-O-Wisp"] + ], + "item": ["Heavy-Duty Boots", "Sitrus Berry"], + "nature": "Timid", + "evs": {"hp": 244, "def": 204, "spa": 12, "spd": 4, "spe": 44}, + "teraType": ["Fairy", "Grass"], + "wantsTera": true, + "ability": ["Flame Body"] + }, + { + "species": "Volcarona", + "weight": 25, + "moves": [ + ["Quiver Dance"], + ["Fiery Dance"], + ["Morning Sun"], + ["Tera Blast"] + ], + "item": ["Heavy-Duty Boots", "Sitrus Berry"], + "nature": "Timid", + "evs": {"hp": 244, "def": 204, "spa": 12, "spd": 4, "spe": 44}, + "teraType": ["Water"], + "wantsTera": true, + "ability": ["Flame Body"] + }, + { + "species": "Volcarona", + "weight": 20, + "moves": [ + ["Quiver Dance"], + ["Fiery Dance"], + ["Bug Buzz", "Giga Drain", "Psychic"], + ["Tera Blast"] + ], + "item": ["Heavy-Duty Boots", "Lum Berry", "Sitrus Berry"], + "nature": "Timid", + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "teraType": ["Rock", "Water"], + "wantsTera": true, + "ability": ["Flame Body"] + } + ] + }, + "wochien": { + "weight": 5, + "sets": [ + { + "species": "Wo-Chien", + "weight": 90, + "moves": [ + ["Leech Seed"], + ["Protect"], + ["Dark Pulse", "Foul Play", "Knock Off"], + ["Giga Drain", "Ruination", "Substitute", "Taunt"] + ], + "item": ["Leftovers"], + "nature": "Bold", + "evs": {"hp": 252, "def": 252, "spd": 4}, + "teraType": ["Fairy", "Fire", "Poison", "Water"], + "wantsTera": true, + "ability": ["Tablets of Ruin"] + }, + { + "species": "Wo-Chien", + "weight": 10, + "moves": [ + ["Leech Seed"], + ["Protect"], + ["Tera Blast"], + ["Giga Drain", "Ruination", "Substitute", "Taunt"] + ], + "item": ["Leftovers"], + "nature": "Bold", + "evs": {"hp": 252, "def": 252, "spd": 4}, + "teraType": ["Fire"], + "wantsTera": true, + "ability": ["Tablets of Ruin"] + } + ] + }, + "empoleon": { + "weight": 5, + "sets": [ + { + "species": "Empoleon", + "weight": 100, + "moves": [ + ["Stealth Rock"], + ["Roar", "Yawn"], + ["Flash Cannon", "Ice Beam"], + ["Flip Turn", "Roost", "Surf"] + ], + "item": ["Air Balloon", "Leftovers", "Sitrus Berry"], + "nature": "Calm", + "evs": {"hp": 252, "def": 4, "spd": 252}, + "teraType": ["Fairy", "Flying", "Grass"], + "ability": ["Competitive"] + } + ] + }, + "kommoo": { + "weight": 5, + "sets": [ + { + "species": "Kommo-o", + "weight": 50, + "moves": [ + ["Clangorous Soul"], + ["Clanging Scales"], + ["Aura Sphere", "Vacuum Wave"], + ["Flash Cannon"] + ], + "item": ["Throat Spray"], + "nature": "Timid", + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "ivs": {"atk": 0}, + "teraType": ["Steel"], + "wantsTera": true, + "ability": ["Bulletproof"] + }, + { + "species": "Kommo-o", + "weight": 50, + "moves": [ + ["Clangorous Soul"], + ["Drain Punch"], + ["Iron Head"], + ["Earthquake", "Substitute"] + ], + "item": ["Leftovers", "Sitrus Berry"], + "nature": "Jolly", + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "teraType": ["Steel"], + "wantsTera": true, + "ability": ["Bulletproof"] + } + ] + }, + "sinistcha": { + "weight": 5, + "sets": [ + { + "species": "Sinistcha", + "weight": 100, + "moves": [ + ["Strength Sap"], + ["Matcha Gotcha"], + ["Hex", "Shadow Ball"], + ["Calm Mind", "Scald"] + ], + "item": ["Covert Cloak", "Leftovers", "Rocky Helmet"], + "nature": "Bold", + "evs": {"hp": 252, "def": 252, "spd": 4}, + "ivs": {"atk": 0}, + "teraType": ["Fairy", "Normal", "Water"], + "wantsTera": true, + "ability": ["Heatproof"] + } + ] + }, + "vikavolt": { + "weight": 5, + "sets": [ + { + "species": "Vikavolt", + "weight": 100, + "moves": [ + ["Discharge", "Thunderbolt", "Thunder Wave", "Volt Switch"], + ["Bug Buzz"], + ["Sticky Web"], + ["Guillotine"] + ], + "item": ["Sitrus Berry"], + "nature": "Modest", + "evs": {"hp": 244, "def": 212, "spd": 52}, + "ivs": {"atk": 0}, + "teraType": ["Steel"], + "ability": ["Levitate"] + } + ] + }, + "skeledirge": { + "weight": 5, + "sets": [ + { + "species": "Skeledirge", + "weight": 30, + "moves": [ + ["Torch Song"], + ["Slack Off"], + ["Will-O-Wisp", "Yawn"], + ["Earth Power", "Hex", "Shadow Ball", "Tera Blast"] + ], + "item": ["Covert Cloak", "Heavy-Duty Boots", "Leftovers", "Sitrus Berry"], + "nature": "Bold", + "evs": {"hp": 252, "def": 252, "spd": 4}, + "teraType": ["Fairy", "Water"], + "wantsTera": true, + "ability": ["Unaware"] + }, + { + "species": "Skeledirge", + "weight": 60, + "moves": [ + ["Torch Song"], + ["Slack Off"], + ["Will-O-Wisp", "Yawn"], + ["Earth Power", "Hex", "Shadow Ball"] + ], + "item": ["Covert Cloak", "Heavy-Duty Boots", "Leftovers", "Sitrus Berry"], + "nature": "Bold", + "evs": {"hp": 252, "def": 252, "spd": 4}, + "teraType": ["Fairy", "Normal"], + "ability": ["Unaware"] + }, + { + "species": "Skeledirge", + "weight": 5, + "moves": [ + ["Sing"], + ["Torch Song"], + ["Slack Off"], + ["Earth Power", "Shadow Ball", "Tera Blast"] + ], + "item": ["Blunder Policy"], + "nature": "Modest", + "evs": {"hp": 204, "def": 4, "spa": 132, "spd": 4, "spe": 164}, + "teraType": ["Fairy", "Water"], + "wantsTera": true, + "ability": ["Unaware"] + }, + { + "species": "Skeledirge", + "weight": 5, + "moves": [ + ["Sing"], + ["Torch Song"], + ["Slack Off"], + ["Earth Power", "Shadow Ball"] + ], + "item": ["Blunder Policy"], + "nature": "Modest", + "evs": {"hp": 204, "def": 4, "spa": 132, "spd": 4, "spe": 164}, + "teraType": ["Fire"], + "ability": ["Unaware"] + } + ] + }, + "blissey": { + "weight": 4, + "sets": [ + { + "species": "Blissey", + "weight": 10, + "moves": [ + ["Soft-Boiled"], + ["Flamethrower"], + ["Ice Beam"], + ["Thunderbolt"] + ], + "item": ["Expert Belt"], + "nature": "Bold", + "evs": {"hp": 4, "def": 252, "spa": 252}, + "teraType": ["Dark", "Fire"], + "ability": ["Natural Cure"] + }, + { + "species": "Blissey", + "weight": 13, + "moves": [ + ["Calm Mind"], + ["Soft-Boiled"], + ["Shadow Ball"], + ["Flamethrower"] + ], + "item": ["Leftovers"], + "nature": "Calm", + "evs": {"hp": 4, "def": 252, "spd": 252}, + "teraType": ["Dark", "Fire", "Ghost"], + "ability": ["Natural Cure"] + }, + { + "species": "Blissey", + "weight": 13, + "moves": [ + ["Calm Mind"], + ["Soft-Boiled"], + ["Shadow Ball"], + ["Stealth Rock"] + ], + "item": ["Leftovers"], + "nature": "Calm", + "evs": {"hp": 4, "def": 252, "spd": 252}, + "teraType": ["Dark", "Ghost"], + "ability": ["Natural Cure"] + }, + { + "species": "Blissey", + "weight": 14, + "moves": [ + ["Calm Mind"], + ["Soft-Boiled"], + ["Shadow Ball"], + ["Tera Blast"] + ], + "item": ["Leftovers"], + "nature": "Calm", + "evs": {"hp": 4, "def": 252, "spd": 252}, + "teraType": ["Fighting", "Fire"], + "wantsTera": true, + "ability": ["Natural Cure"] + }, + { + "species": "Blissey", + "weight": 50, + "moves": [ + ["Calm Mind"], + ["Soft-Boiled"], + ["Flamethrower", "Shadow Ball"], + ["Fling"] + ], + "item": ["Flame Orb", "Poison Barb"], + "nature": "Calm", + "evs": {"hp": 4, "def": 252, "spd": 252}, + "teraType": ["Dark", "Fire"], + "ability": ["Natural Cure"] + } + ] + }, + "ceruledge": { + "weight": 4, + "sets": [ + { + "species": "Ceruledge", + "weight": 25, + "moves": [ + ["Bitter Blade"], + ["Bulk Up"], + ["Taunt"], + ["Flame Charge", "Shadow Sneak", "Tera Blast", "Will-O-Wisp"] + ], + "item": ["Leftovers"], + "nature": "Impish", + "evs": {"hp": 252, "atk": 4, "def": 252}, + "teraType": ["Fairy", "Grass"], + "ability": ["Flash Fire"] + }, + { + "species": "Ceruledge", + "weight": 65, + "moves": [ + ["Bitter Blade"], + ["Close Combat", "Shadow Claw"], + ["Shadow Sneak"], + ["Destiny Bond", "Swords Dance"] + ], + "item": ["Focus Sash"], + "nature": "Adamant", + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "teraType": ["Fighting", "Fire", "Normal"], + "ability": ["Weak Armor"] + }, + { + "species": "Ceruledge", + "weight": 10, + "moves": [ + ["Bitter Blade"], + ["Flare Blitz"], + ["Shadow Sneak"], + ["Tera Blast"] + ], + "item": ["Choice Band"], + "nature": "Adamant", + "evs": {"hp": 100, "atk": 252, "def": 156}, + "teraType": ["Fairy"], + "wantsTera": true, + "ability": ["Weak Armor"] + } + ] + }, + "chansey": { + "weight": 4, + "sets": [ + { + "species": "Chansey", + "weight": 70, + "moves": [ + ["Seismic Toss"], + ["Shadow Ball"], + ["Calm Mind"], + ["Soft-Boiled"] + ], + "item": ["Eviolite"], + "nature": "Bold", + "evs": {"hp": 12, "def": 252, "spd": 244}, + "ivs": {"atk": 0}, + "teraType": ["Dark", "Ghost"], + "ability": ["Natural Cure"] + }, + { + "species": "Chansey", + "weight": 30, + "moves": [ + ["Seismic Toss"], + ["Stealth Rock"], + ["Thunder Wave"], + ["Soft-Boiled"] + ], + "item": ["Eviolite"], + "nature": "Bold", + "evs": {"hp": 12, "def": 252, "spd": 244}, + "ivs": {"atk": 0}, + "teraType": ["Dark", "Ghost"], + "ability": ["Natural Cure"] + } + ] + }, + "espathra": { + "weight": 4, + "sets": [ + { + "species": "Espathra", + "weight": 35, + "moves": [ + ["Calm Mind"], + ["Stored Power"], + ["Tera Blast"], + ["Protect", "Roost", "Substitute"] + ], + "item": ["Leftovers", "Lum Berry"], + "nature": "Bold", + "evs": {"hp": 244, "def": 252, "spe": 12}, + "teraType": ["Fighting", "Fire"], + "wantsTera": true, + "ability": ["Speed Boost"] + }, + { + "species": "Espathra", + "weight": 20, + "moves": [ + ["Calm Mind"], + ["Stored Power"], + ["Dazzling Gleam"], + ["Protect", "Roost", "Substitute"] + ], + "item": ["Leftovers", "Lum Berry"], + "nature": "Bold", + "evs": {"hp": 244, "def": 252, "spe": 12}, + "teraType": ["Fairy", "Water"], + "ability": ["Speed Boost"] + }, + { + "species": "Espathra", + "weight": 30, + "moves": [ + ["Lumina Crash"], + ["Baton Pass"], + ["Dazzling Gleam", "Protect", "Reflect"], + ["Calm Mind", "Substitute"] + ], + "item": ["Focus Sash", "Leftovers", "Sitrus Berry"], + "nature": "Timid", + "evs": {"hp": 252, "def": 4, "spe": 252}, + "teraType": ["Ghost", "Normal", "Water"], + "ability": ["Speed Boost"] + }, + { + "species": "Espathra", + "weight": 10, + "moves": [ + ["Lumina Crash"], + ["Energy Ball"], + ["Shadow Ball"], + ["Baton Pass", "Hypnosis"] + ], + "item": ["Focus Sash"], + "nature": "Timid", + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "ivs": {"atk": 0}, + "teraType": ["Ghost", "Grass", "Normal"], + "ability": ["Speed Boost"] + }, + { + "species": "Espathra", + "weight": 5, + "moves": [ + ["Light Screen"], + ["Reflect"], + ["Lumina Crash", "Protect"], + ["Baton Pass"] + ], + "item": ["Light Clay"], + "nature": "Timid", + "evs": {"hp": 252, "spa": 4, "spe": 252}, + "ivs": {"atk": 0}, + "teraType": ["Fairy"], + "ability": ["Speed Boost"] + } + ] + }, + "grimmsnarl": { + "weight": 4, + "sets": [ + { + "species": "Grimmsnarl", + "weight": 90, + "moves": [ + ["Reflect"], + ["Light Screen"], + ["Taunt", "Thunder Wave"], + ["Parting Shot", "Spirit Break"] + ], + "item": ["Light Clay"], + "nature": "Careful", + "evs": {"hp": 248, "def": 8, "spd": 252}, + "teraType": ["Poison", "Steel"], + "ability": ["Prankster"] + }, + { + "species": "Grimmsnarl", + "weight": 10, + "moves": [ + ["Play Rough", "Spirit Break"], + ["Crunch", "Sucker Punch"], + ["Hammer Arm", "Low Kick", "Taunt"], + ["Thunder Wave"] + ], + "item": ["Focus Sash"], + "nature": "Adamant", + "evs": {"atk": 252, "def": 4, "spe": 252}, + "teraType": ["Dark", "Fairy", "Ghost"], + "ability": ["Prankster"] + } + ] + }, + "ironhands": { + "weight": 4, + "sets": [ + { + "species": "Iron Hands", + "weight": 70, + "moves": [ + ["Drain Punch"], + ["Thunder Punch", "Wild Charge"], + ["Earthquake", "Heavy Slam", "Ice Punch"], + ["Fake Out", "Volt Switch"] + ], + "item": ["Assault Vest"], + "nature": "Adamant", + "evs": {"atk": 252, "spd": 204, "spe": 52}, + "teraType": ["Fairy", "Grass", "Ground", "Water"], + "ability": ["Quark Drive"] + }, + { + "species": "Iron Hands", + "weight": 30, + "moves": [ + ["Drain Punch"], + ["Thunder Punch"], + ["Substitute"], + ["Swords Dance"] + ], + "item": ["Leftovers", "Punching Glove"], + "nature": "Impish", + "evs": {"hp": 92, "atk": 12, "def": 172, "spd": 212, "spe": 20}, + "teraType": ["Fairy", "Grass", "Water"], + "ability": ["Quark Drive"] + } + ] + }, + "hydreigon": { + "weight": 4, + "sets": [ + { + "species": "Hydreigon", + "weight": 45, + "moves": [ + ["Dark Pulse"], + ["Draco Meteor"], + ["Flash Cannon"], + ["Fire Blast", "Flamethrower", "U-turn"] + ], + "item": ["Choice Scarf", "Choice Specs"], + "nature": "Timid", + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "teraType": ["Steel"], + "wantsTera": true, + "ability": ["Levitate"] + }, + { + "species": "Hydreigon", + "weight": 25, + "moves": [ + ["Dark Pulse"], + ["Draco Meteor"], + ["Flash Cannon", "U-turn"], + ["Fire Blast", "Flamethrower"] + ], + "item": ["Choice Specs"], + "nature": "Timid", + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "teraType": ["Fire", "Poison"], + "wantsTera": true, + "ability": ["Levitate"] + }, + { + "species": "Hydreigon", + "weight": 10, + "moves": [ + ["Stealth Rock"], + ["Dark Pulse"], + ["Taunt"], + ["Draco Meteor", "Flash Cannon", "Thunder Wave"] + ], + "item": ["Focus Sash"], + "nature": "Timid", + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "teraType": ["Poison", "Steel"], + "wantsTera": true, + "ability": ["Levitate"] + }, + { + "species": "Hydreigon", + "weight": 20, + "moves": [ + ["Dark Pulse"], + ["Flash Cannon"], + ["Nasty Plot"], + ["Draco Meteor", "Earth Power", "Flamethrower", "Substitute", "Taunt"] + ], + "item": ["Leftovers", "Life Orb"], + "nature": "Timid", + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "teraType": ["Steel"], + "wantsTera": true, + "ability": ["Levitate"] + } + ] + }, + "kleavor": { + "weight": 4, + "sets": [ + { + "species": "Kleavor", + "weight": 28, + "moves": [ + ["Stone Axe"], + ["Night Slash"], + ["Feint", "Trailblaze"], + ["Close Combat", "U-turn", "X-Scissor"] + ], + "item": ["Focus Sash"], + "nature": "Jolly", + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "teraType": ["Grass", "Water"], + "ability": ["Sharpness"] + }, + { + "species": "Kleavor", + "weight": 27, + "moves": [ + ["Stone Axe"], + ["Night Slash"], + ["Feint", "Trailblaze"], + ["U-turn", "X-Scissor"] + ], + "item": ["Focus Sash"], + "nature": "Jolly", + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "teraType": ["Bug", "Grass", "Water"], + "ability": ["Sharpness"] + }, + { + "species": "Kleavor", + "weight": 5, + "moves": [ + ["Stone Axe"], + ["Night Slash"], + ["Feint", "Trailblaze"], + ["Close Combat", "U-turn", "X-Scissor"] + ], + "item": ["Assault Vest"], + "nature": "Adamant", + "evs": {"hp": 140, "atk": 52, "def": 4, "spd": 244, "spe": 68}, + "teraType": ["Grass", "Water"], + "ability": ["Sharpness"] + }, + { + "species": "Kleavor", + "weight": 5, + "moves": [ + ["Stone Axe"], + ["Night Slash"], + ["Feint", "Trailblaze"], + ["U-turn", "X-Scissor"] + ], + "item": ["Assault Vest"], + "nature": "Adamant", + "evs": {"hp": 140, "atk": 52, "def": 4, "spd": 244, "spe": 68}, + "teraType": ["Bug", "Grass", "Water"], + "ability": ["Sharpness"] + }, + { + "species": "Kleavor", + "weight": 18, + "moves": [ + ["Stone Axe"], + ["U-turn"], + ["Night Slash"], + ["Close Combat", "X-Scissor"] + ], + "item": ["Choice Scarf"], + "nature": "Jolly", + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "teraType": ["Grass"], + "ability": ["Sharpness"] + }, + { + "species": "Kleavor", + "weight": 17, + "moves": [ + ["Stone Axe"], + ["U-turn"], + ["Night Slash"], + ["X-Scissor"] + ], + "item": ["Choice Scarf"], + "nature": "Jolly", + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "teraType": ["Bug", "Grass"], + "ability": ["Sharpness"] + } + ] + }, + "screamtail": { + "weight": 4, + "sets": [ + { + "species": "Scream Tail", + "weight": 80, + "moves": [ + ["Stealth Rock"], + ["Thunder Wave", "Trick Room"], + ["Encore", "Perish Song", "Roar"], + ["Misty Explosion"] + ], + "item": ["Booster Energy", "Mental Herb", "Sitrus Berry"], + "nature": "Calm", + "evs": {"hp": 180, "spd": 156, "spe": 172}, + "teraType": ["Normal"], + "ability": ["Protosynthesis"] + }, + { + "species": "Scream Tail", + "weight": 10, + "moves": [ + ["Reflect"], + ["Light Screen"], + ["Encore"], + ["Dazzling Gleam", "Misty Explosion", "Perish Song", "Stealth Rock"] + ], + "item": ["Light Clay", "Mental Herb"], + "nature": "Timid", + "evs": {"hp": 252, "spd": 4, "spe": 252}, + "teraType": ["Normal"], + "ability": ["Protosynthesis"] + }, + { + "species": "Scream Tail", + "weight": 5, + "moves": [ + ["Baton Pass"], + ["Bulk Up", "Calm Mind"], + ["Encore"], + ["Dazzling Gleam", "Play Rough", "Substitute"] + ], + "item": ["Mental Herb", "Sitrus Berry"], + "nature": "Careful", + "evs": {"hp": 220, "def": 220, "spd": 68}, + "teraType": ["Normal"], + "ability": ["Protosynthesis"] + }, + { + "species": "Scream Tail", + "weight": 5, + "moves": [ + ["Baton Pass"], + ["Bulk Up", "Calm Mind"], + ["Sing"], + ["Play Rough", "Substitute"] + ], + "item": ["Blunder Policy"], + "nature": "Careful", + "evs": {"hp": 220, "def": 220, "spd": 68}, + "teraType": ["Normal"], + "ability": ["Protosynthesis"] + } + ] + }, + "milotic": { + "weight": 4, + "sets": [ + { + "species": "Milotic", + "weight": 67, + "moves": [ + ["Scald"], + ["Recover"], + ["Haze", "Mirror Coat"], + ["Draining Kiss", "Ice Beam"] + ], + "item": ["Flame Orb"], + "nature": "Bold", + "evs": {"hp": 252, "def": 252, "spd": 4}, + "ivs": {"atk": 0}, + "teraType": ["Fairy", "Fire"], + "ability": ["Marvel Scale"] + }, + { + "species": "Milotic", + "weight": 33, + "moves": [ + ["Scald"], + ["Recover"], + ["Haze", "Mirror Coat"], + ["Flip Turn"] + ], + "item": ["Flame Orb"], + "nature": "Bold", + "evs": {"hp": 252, "def": 252, "spd": 4}, + "teraType": ["Fairy", "Fire"], + "ability": ["Marvel Scale"] + } + ] + }, + "okidogi": { + "weight": 4, + "sets": [ + { + "species": "Okidogi", + "weight": 15, + "moves": [ + ["Bulk Up"], + ["Drain Punch"], + ["Knock Off"], + ["Poison Jab"] + ], + "item": ["Black Sludge", "Rocky Helmet"], + "nature": "Adamant", + "evs": {"hp": 252, "atk": 156, "spe": 100}, + "teraType": ["Poison"], + "ability": ["Toxic Chain"] + }, + { + "species": "Okidogi", + "weight": 25, + "moves": [ + ["Bulk Up"], + ["Drain Punch"], + ["Knock Off"], + ["Ice Punch", "Poison Jab", "Substitute", "Taunt"] + ], + "item": ["Leftovers", "Rocky Helmet"], + "nature": "Adamant", + "evs": {"hp": 252, "atk": 156, "spe": 100}, + "teraType": ["Flying", "Water"], + "ability": ["Toxic Chain"] + }, + { + "species": "Okidogi", + "weight": 35, + "moves": [ + ["Bulk Up"], + ["Drain Punch"], + ["Knock Off"], + ["Ice Punch", "Poison Jab", "Substitute", "Taunt"] + ], + "item": ["Black Sludge", "Leftovers", "Rocky Helmet"], + "nature": "Adamant", + "evs": {"hp": 252, "atk": 156, "spe": 100}, + "teraType": ["Flying", "Poison", "Water"], + "ability": ["Guard Dog"] + }, + { + "species": "Okidogi", + "weight": 15, + "moves": [ + ["Drain Punch"], + ["Knock Off"], + ["Poison Fang", "Poison Jab"], + ["Ice Punch"] + ], + "item": ["Assault Vest"], + "nature": "Adamant", + "evs": {"hp": 252, "atk": 252, "spd": 4}, + "teraType": ["Flying", "Poison", "Water"], + "ability": ["Guard Dog"] + }, + { + "species": "Okidogi", + "weight": 10, + "moves": [ + ["Drain Punch"], + ["Knock Off"], + ["Poison Fang", "Poison Jab"], + ["Ice Punch"] + ], + "item": ["Assault Vest"], + "nature": "Adamant", + "evs": {"hp": 252, "atk": 252, "spd": 4}, + "teraType": ["Flying", "Poison", "Water"], + "ability": ["Toxic Chain"] + } + ] + }, + "arcaninehisui": { + "weight": 4, + "sets": [ + { + "species": "Arcanine-Hisui", + "weight": 45, + "moves": [ + ["Head Smash"], + ["Flare Blitz"], + ["Extreme Speed"], + ["Stealth Rock", "Tera Blast"] + ], + "item": ["Focus Sash"], + "nature": "Jolly", + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "teraType": ["Grass"], + "wantsTera": true, + "ability": ["Rock Head"] + }, + { + "species": "Arcanine-Hisui", + "weight": 50, + "moves": [ + ["Head Smash"], + ["Flare Blitz"], + ["Extreme Speed"], + ["Flame Charge", "Stealth Rock", "Wild Charge"] + ], + "item": ["Choice Band", "Focus Sash"], + "nature": "Jolly", + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "teraType": ["Normal", "Rock"], + "wantsTera": true, + "ability": ["Rock Head"] + }, + { + "species": "Arcanine-Hisui", + "weight": 5, + "moves": [ + ["Rock Blast"], + ["Flare Blitz"], + ["Extreme Speed"], + ["Tera Blast"] + ], + "item": ["Loaded Dice"], + "nature": "Adamant", + "evs": {"hp": 212, "atk": 252, "def": 4, "spd": 4, "spe": 36}, + "teraType": ["Fairy"], + "wantsTera": true, + "ability": ["Intimidate"] + } + ] + }, + "snorlax": { + "weight": 4, + "sets": [ + { + "species": "Snorlax", + "weight": 60, + "moves": [ + ["Heavy Slam"], + ["Earthquake", "Fissure"], + ["Body Slam", "Protect"], + ["Yawn"] + ], + "item": ["Leftovers"], + "nature": "Careful", + "evs": {"hp": 252, "def": 92, "spd": 164}, + "teraType": ["Fairy", "Ghost"], + "ability": ["Thick Fat"] + }, + { + "species": "Snorlax", + "weight": 20, + "moves": [ + ["Heavy Slam"], + ["Earthquake", "Heat Crash"], + ["Body Slam", "Double-Edge"], + ["Fissure"] + ], + "item": ["Assault Vest"], + "nature": "Adamant", + "evs": {"atk": 252, "def": 252, "spd": 4}, + "teraType": ["Ghost", "Steel"], + "ability": ["Thick Fat"] + }, + { + "species": "Snorlax", + "weight": 20, + "moves": [ + ["Heavy Slam"], + ["Earthquake", "Heat Crash"], + ["Body Slam", "Double-Edge"], + ["Fissure", "Tera Blast"] + ], + "item": ["Assault Vest"], + "nature": "Adamant", + "evs": {"atk": 252, "def": 252, "spd": 4}, + "teraType": ["Fairy"], + "ability": ["Thick Fat"] + } + ] + }, + "alomomola": { + "weight": 4, + "sets": [ + { + "species": "Alomomola", + "weight": 100, + "moves": [ + ["Scald"], + ["Flip Turn"], + ["Mirror Coat"], + ["Icy Wind"] + ], + "item": ["Assault Vest"], + "nature": "Sassy", + "evs": {"hp": 4, "def": 252, "spd": 252}, + "teraType": ["Poison"], + "ability": ["Regenerator"] + } + ] + }, + "umbreon": { + "weight": 4, + "sets": [ + { + "species": "Umbreon", + "weight": 100, + "moves": [ + ["Foul Play"], + ["Protect"], + ["Wish"], + ["Yawn"] + ], + "item": ["Leftovers"], + "nature": "Bold", + "evs": {"hp": 252, "def": 252, "spd": 4}, + "teraType": ["Fairy", "Poison"], + "ability": ["Inner Focus"] + } + ] + }, + "cloyster": { + "weight": 3, + "sets": [ + { + "species": "Cloyster", + "weight": 60, + "moves": [ + ["Shell Smash"], + ["Icicle Spear"], + ["Drill Run", "Ice Shard", "Tera Blast"], + ["Rock Blast"] + ], + "item": ["Focus Sash", "King's Rock"], + "nature": "Adamant", + "evs": {"atk": 252, "def": 4, "spe": 252}, + "teraType": ["Ghost"], + "ability": ["Skill Link"] + }, + { + "species": "Cloyster", + "weight": 15, + "moves": [ + ["Shell Smash"], + ["Icicle Spear"], + ["Tera Blast"], + ["Rock Blast"] + ], + "item": ["Focus Sash", "Life Orb", "Lum Berry"], + "nature": "Adamant", + "evs": {"atk": 252, "def": 4, "spe": 252}, + "teraType": ["Electric"], + "wantsTera": true, + "ability": ["Skill Link"] + }, + { + "species": "Cloyster", + "weight": 25, + "moves": [ + ["Shell Smash"], + ["Icicle Spear"], + ["Drill Run", "Ice Shard"], + ["Rock Blast"] + ], + "item": ["Focus Sash"], + "nature": "Adamant", + "evs": {"atk": 252, "def": 4, "spe": 252}, + "teraType": ["Ice"], + "ability": ["Skill Link"] + } + ] + }, + "tinkaton": { + "weight": 3, + "sets": [ + { + "species": "Tinkaton", + "weight": 100, + "moves": [ + ["Gigaton Hammer", "Knock Off"], + ["Encore"], + ["Stealth Rock"], + ["Thunder Wave"] + ], + "item": ["Air Balloon"], + "nature": "Careful", + "evs": {"hp": 244, "atk": 4, "def": 164, "spd": 20, "spe": 76}, + "teraType": ["Flying", "Ground", "Water"], + "ability": ["Mold Breaker"] + } + ] + }, + "fezandipiti": { + "weight": 3, + "sets": [ + { + "species": "Fezandipiti", + "weight": 50, + "moves": [ + ["Calm Mind", "Charm", "Heat Wave", "Tailwind", "Taunt"], + ["Moonblast"], + ["Roost"], + ["U-turn"] + ], + "item": ["Covert Cloak", "Leftovers", "Sitrus Berry"], + "nature": "Bold", + "evs": {"hp": 252, "def": 220, "spe": 36}, + "teraType": ["Flying", "Water"], + "ability": ["Toxic Chain"] + }, + { + "species": "Fezandipiti", + "weight": 50, + "moves": [ + ["Roost"], + ["Taunt", "Toxic"], + ["U-turn"], + ["Play Rough"] + ], + "item": ["Leftovers"], + "nature": "Careful", + "evs": {"hp": 252, "spd": 220, "spe": 36}, + "teraType": ["Flying", "Water"], + "ability": ["Toxic Chain"] + } + ] + }, + "pelipper": { + "weight": 3, + "sets": [ + { + "species": "Pelipper", + "weight": 100, + "moves": [ + ["U-turn"], + ["Hydro Pump"], + ["Ice Beam"], + ["Hurricane"] + ], + "item": ["Choice Specs"], + "nature": "Modest", + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "teraType": ["Flying", "Grass", "Ground", "Steel", "Water"], + "ability": ["Drizzle"] + } + ] +}, + "rotomheat": { + "weight": 3, + "sets": [ + { + "species": "Rotom-Heat", + "weight": 20, + "moves": [ + ["Volt Switch"], + ["Overheat"], + ["Trick"], + ["Thunderbolt"] + ], + "item": ["Choice Scarf", "Choice Specs"], + "nature": "Timid", + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "teraType": ["Electric"], + "ability": ["Levitate"] + }, + { + "species": "Rotom-Heat", + "weight": 20, + "moves": [ + ["Volt Switch"], + ["Overheat"], + ["Trick"], + ["Tera Blast"] + ], + "item": ["Choice Scarf", "Choice Specs"], + "nature": "Timid", + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "teraType": ["Fairy"], + "wantsTera": true, + "ability": ["Levitate"] + }, + { + "species": "Rotom-Heat", + "weight": 60, + "moves": [ + ["Volt Switch"], + ["Foul Play"], + ["Overheat"], + ["Thunder Wave", "Will-O-Wisp"] + ], + "item": ["Rocky Helmet", "Sitrus Berry"], + "nature": "Bold", + "evs": {"hp": 252, "def": 252, "spd": 4}, + "teraType": ["Fairy", "Ghost", "Steel"], + "ability": ["Levitate"] + } + ] + }, + "taurospaldeablaze": { + "weight": 3, + "sets": [ + { + "species": "Tauros-Paldea-Blaze", + "weight": 50, + "moves": [ + ["Raging Bull"], + ["Body Press"], + ["Will-O-Wisp"], + ["Bulk Up", "Earthquake", "Rock Tomb"] + ], + "item": ["Rocky Helmet", "Sitrus Berry"], + "nature": "Impish", + "evs": {"hp": 252, "def": 252, "spd": 4}, + "teraType": ["Fairy"], + "ability": ["Intimidate"] + }, + { + "species": "Tauros-Paldea-Blaze", + "weight": 50, + "moves": [ + ["Close Combat"], + ["Flare Blitz", "Raging Bull"], + ["Flame Charge", "Rock Tomb"], + ["Bulk Up", "Earthquake", "Tera Blast"] + ], + "item": ["Eject Pack"], + "nature": "Jolly", + "evs": {"hp": 4, "atk": 252, "spe": 252}, + "teraType": ["Fairy", "Grass"], + "wantsTera": true, + "ability": ["Intimidate"] + } + ] + }, + "torkoal": { + "weight": 3, + "sets": [ + { + "species": "Torkoal", + "weight": 100, + "moves": [ + ["Overheat"], + ["Yawn"], + ["Stealth Rock"], + ["Body Press", "Clear Smog", "Fissure", "Solar Beam"] + ], + "item": ["Eject Pack"], + "nature": "Bold", + "evs": {"hp": 252, "def": 252, "spd": 4}, + "teraType": ["Fire", "Grass"], + "ability": ["Drought"] + } + ] + }, + "amoonguss": { + "weight": 3, + "sets": [ + { + "species": "Amoonguss", + "weight": 45, + "moves": [ + ["Spore"], + ["Leaf Storm"], + ["Foul Play"], + ["Clear Smog", "Sludge Bomb"] + ], + "item": ["Eject Pack"], + "nature": "Bold", + "evs": {"hp": 252, "def": 156, "spd": 100}, + "ivs": {"atk": 0}, + "teraType": ["Water"], + "ability": ["Regenerator"] + }, + { + "species": "Amoonguss", + "weight": 35, + "moves": [ + ["Spore"], + ["Clear Smog", "Giga Drain", "Sludge Bomb"], + ["Foul Play", "Stomping Tantrum"], + ["Synthesis"] + ], + "item": ["Leftovers", "Rocky Helmet"], + "nature": "Relaxed", + "evs": {"hp": 252, "def": 156, "spd": 100}, + "teraType": ["Fairy", "Water"], + "ability": ["Regenerator"] + }, + { + "species": "Amoonguss", + "weight": 20, + "moves": [ + ["Spore"], + ["Clear Smog", "Giga Drain", "Sludge Bomb"], + ["Foul Play", "Stomping Tantrum"], + ["Synthesis"] + ], + "item": ["Black Sludge"], + "nature": "Relaxed", + "evs": {"hp": 252, "def": 156, "spd": 100}, + "teraType": ["Poison"], + "ability": ["Regenerator"] + } + ] + }, + "greattusk": { + "weight": 3, + "sets": [ + { + "species": "Great Tusk", + "weight": 45, + "moves": [ + ["Close Combat"], + ["Earthquake", "Headlong Rush"], + ["Ice Spinner"], + ["Knock Off", "Rapid Spin", "Stealth Rock"] + ], + "item": ["Booster Energy", "Focus Sash"], + "nature": "Jolly", + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "teraType": ["Ground", "Steel", "Water"], + "ability": ["Protosynthesis"] + }, + { + "species": "Great Tusk", + "weight": 15, + "moves": [ + ["Close Combat"], + ["Earthquake", "Headlong Rush"], + ["Ice Spinner"], + ["Knock Off", "Rapid Spin"] + ], + "item": ["Assault Vest"], + "nature": "Jolly", + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "teraType": ["Ground", "Steel", "Water"], + "ability": ["Protosynthesis"] + }, + { + "species": "Great Tusk", + "weight": 25, + "moves": [ + ["Bulk Up"], + ["Earthquake"], + ["Ice Spinner"], + ["Substitute", "Taunt"] + ], + "item": ["Booster Energy", "Leftovers"], + "nature": "Jolly", + "evs": {"hp": 4, "spd": 252, "spe": 252}, + "teraType": ["Steel", "Water"], + "ability": ["Protosynthesis"] + }, + { + "species": "Great Tusk", + "weight": 15, + "moves": [ + ["Close Combat"], + ["Earthquake", "Headlong Rush"], + ["Ice Spinner"], + ["Knock Off"] + ], + "item": ["Choice Band", "Choice Scarf"], + "nature": "Jolly", + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "teraType": ["Fighting", "Ground", "Steel"], + "ability": ["Protosynthesis"] + } + ] + }, + "thundurustherian": { + "weight": 3, + "sets": [ + { + "species": "Thundurus-Therian", + "weight": 45, + "moves": [ + ["Volt Switch"], + ["Thunderbolt"], + ["Tera Blast"], + ["Focus Blast", "Grass Knot", "Sludge Bomb"] + ], + "item": ["Choice Scarf"], + "nature": "Timid", + "evs": {"hp": 4, "spa": 252, "spe": 252}, + "ivs": {"atk": 0}, + "teraType": ["Flying", "Ice"], + "wantsTera": true, + "ability": ["Volt Absorb"] + }, + { + "species": "Thundurus-Therian", + "weight": 45, + "moves": [ + ["Volt Switch"], + ["Thunderbolt"], + ["Tera Blast"], + ["Focus Blast", "Grass Knot", "Sludge Bomb"] + ], + "item": ["Assault Vest", "Choice Specs"], + "nature": "Timid", + "evs": {"hp": 4, "spa": 252, "spe": 252}, + "ivs": {"atk": 0}, + "teraType": ["Flying", "Ice", "Water"], + "wantsTera": true, + "ability": ["Volt Absorb"] + }, + { + "species": "Thundurus-Therian", + "weight": 10, + "moves": [ + ["Nasty Plot"], + ["Thunderbolt"], + ["Grass Knot", "Substitute"], + ["Tera Blast"] + ], + "item": ["Life Orb", "Sitrus Berry"], + "nature": "Timid", + "evs": {"def": 4, "spa": 252, "spe": 252}, + "ivs": {"atk": 0}, + "teraType": ["Flying", "Ice", "Water"], + "wantsTera": true, + "ability": ["Volt Absorb"] + } + ] + }, + "arcanine": { + "weight": 3, + "sets": [ + { + "species": "Arcanine", + "weight": 50, + "moves": [ + ["Flare Blitz"], + ["Morning Sun"], + ["Will-O-Wisp"], + ["Extreme Speed"] + ], + "item": ["Heavy-Duty Boots", "Leftovers", "Rocky Helmet"], + "nature": "Impish", + "evs": {"hp": 236, "def": 212, "spe": 60}, + "teraType": ["Normal"], + "ability": ["Intimidate"] + }, + { + "species": "Arcanine", + "weight": 50, + "moves": [ + ["Flare Blitz", "Roar"], + ["Morning Sun"], + ["Will-O-Wisp"], + ["Bulldoze", "Extreme Speed", "Snarl"] + ], + "item": ["Heavy-Duty Boots", "Leftovers", "Rocky Helmet"], + "nature": "Impish", + "evs": {"hp": 236, "def": 212, "spe": 60}, + "teraType": ["Fairy", "Grass"], + "ability": ["Intimidate"] + } + ] + }, + "gyarados": { + "weight": 3, + "sets": [ + { + "species": "Gyarados", + "weight": 50, + "moves": [ + ["Taunt"], + ["Iron Head", "Waterfall"], + ["Earthquake"], + ["Thunder Wave"] + ], + "item": ["Rocky Helmet"], + "nature": "Impish", + "evs": {"hp": 228, "atk": 4, "def": 220, "spd": 4, "spe": 52}, + "teraType": ["Ground"], + "ability": ["Intimidate"] + }, + { + "species": "Gyarados", + "weight": 50, + "moves": [ + ["Taunt"], + ["Iron Head", "Waterfall"], + ["Earthquake", "Ice Fang"], + ["Thunder Wave"] + ], + "item": ["Rocky Helmet"], + "nature": "Impish", + "evs": {"hp": 228, "atk": 4, "def": 220, "spd": 4, "spe": 52}, + "teraType": ["Steel"], + "ability": ["Intimidate"] + } + ] + }, + "pawmot": { + "weight": 3, + "sets": [ + { + "species": "Pawmot", + "weight": 33, + "moves": [ + ["Double Shock"], + ["Close Combat"], + ["Ice Punch", "Mach Punch", "Nuzzle"], + ["Encore", "Revival Blessing"] + ], + "item": ["Focus Sash"], + "nature": "Jolly", + "evs": {"hp": 4, "atk": 252, "spe": 252}, + "teraType": ["Electric"], + "ability": ["Iron Fist"] + }, + { + "species": "Pawmot", + "weight": 33, + "moves": [ + ["Double Shock"], + ["Close Combat"], + ["Ice Punch", "Mach Punch", "Nuzzle"], + ["Encore", "Revival Blessing"] + ], + "item": ["Focus Sash"], + "nature": "Jolly", + "evs": {"hp": 4, "atk": 252, "spe": 252}, + "teraType": ["Electric"], + "ability": ["Volt Absorb"] + }, + { + "species": "Pawmot", + "weight": 33, + "moves": [ + ["Double Shock"], + ["Close Combat"], + ["Ice Punch", "Mach Punch", "Nuzzle"], + ["Encore", "Revival Blessing"] + ], + "item": ["Focus Sash"], + "nature": "Jolly", + "evs": {"hp": 4, "atk": 252, "spe": 252}, + "teraType": ["Electric"], + "ability": ["Natural Cure"] + } + ] + }, + "zoroarkhisui": { + "weight": 3, + "sets": [ + { + "species": "Zoroark-Hisui", + "weight": 60, + "moves": [ + ["Bitter Malice"], + ["Will-O-Wisp"], + ["Shadow Sneak"], + ["Curse", "Tera Blast"] + ], + "item": ["Focus Sash"], + "nature": "Timid", + "evs": {"def": 4, "spa": 252, "spe": 252}, + "teraType": ["Fairy", "Fighting"], + "wantsTera": true, + "ability": ["Illusion"] + }, + { + "species": "Zoroark-Hisui", + "weight": 40, + "moves": [ + ["Bitter Malice"], + ["Curse"], + ["Will-O-Wisp"], + ["Trick"] + ], + "item": ["Choice Scarf"], + "nature": "Timid", + "evs": {"hp": 252, "spa": 4, "spe": 252}, + "ivs": {"atk": 0}, + "teraType": ["Fairy", "Ghost"], + "ability": ["Illusion"] + } + ] + }, + "drifblim": { + "weight": 2, + "sets": [ + { + "species": "Drifblim", + "weight": 100, + "moves": [ + ["Minimize"], + ["Substitute"], + ["Baton Pass"], + ["Air Slash", "Shadow Ball", "Stockpile", "Strength Sap", "Will-O-Wisp"] + ], + "item": ["Kee Berry", "Sitrus Berry"], + "nature": "Timid", + "evs": {"def": 164, "spd": 92, "spe": 252}, + "ivs": {"atk": 0}, + "teraType": ["Dark", "Normal", "Water"], + "ability": ["Unburden"] + } + ] + }, + "hatterene": { + "weight": 2, + "sets": [ + { + "species": "Hatterene", + "weight": 30, + "moves": [ + ["Draining Kiss"], + ["Psyshock"], + ["Calm Mind"], + ["Baton Pass", "Mystical Fire", "Trick Room"] + ], + "item": ["Sitrus Berry", "Wiki Berry"], + "nature": "Bold", + "evs": {"hp": 244, "def": 252, "spa": 12}, + "ivs": {"atk": 0}, + "teraType": ["Fire", "Normal", "Water"], + "ability": ["Magic Bounce"] + }, + { + "species": "Hatterene", + "weight": 35, + "moves": [ + ["Dazzling Gleam", "Draining Kiss"], + ["Psyshock"], + ["Calm Mind", "Healing Wish"], + ["Trick Room"] + ], + "item": ["Sitrus Berry", "Wiki Berry"], + "nature": "Bold", + "evs": {"hp": 244, "def": 252, "spa": 12}, + "ivs": {"atk": 0}, + "teraType": ["Normal", "Water"], + "ability": ["Magic Bounce"] + }, + { + "species": "Hatterene", + "weight": 35, + "moves": [ + ["Dazzling Gleam"], + ["Psyshock"], + ["Calm Mind", "Healing Wish"], + ["Trick Room"] + ], + "item": ["Focus Sash"], + "nature": "Quiet", + "evs": {"hp": 252, "def": 4, "spa": 252}, + "ivs": {"atk": 0}, + "teraType": ["Fairy", "Normal", "Water"], + "ability": ["Magic Bounce"] + } + ] + }, + "orthworm": { + "weight": 2, + "sets": [ + { + "species": "Orthworm", + "weight": 60, + "moves": [ + ["Iron Defense"], + ["Body Press"], + ["Iron Head", "Stealth Rock"], + ["Shed Tail"] + ], + "item": ["Rocky Helmet", "Sitrus Berry"], + "nature": "Impish", + "evs": {"hp": 252, "def": 252, "spd": 4}, + "teraType": ["Fairy", "Ghost", "Poison"], + "ability": ["Earth Eater"] + }, + { + "species": "Orthworm", + "weight": 40, + "moves": [ + ["Iron Defense"], + ["Body Press"], + ["Iron Head", "Stealth Rock"], + ["Rest"] + ], + "item": ["Chesto Berry", "Rocky Helmet"], + "nature": "Impish", + "evs": {"hp": 252, "def": 252, "spd": 4}, + "teraType": ["Fairy", "Ghost", "Poison"], + "ability": ["Earth Eater"] + } + ] + }, + "sandyshocks": { + "weight": 2, + "sets": [ + { + "species": "Sandy Shocks", + "weight": 10, + "moves": [ + ["Stealth Rock"], + ["Thunderbolt"], + ["Earth Power"], + ["Mirror Coat", "Thunder Wave"] + ], + "item": ["Focus Sash"], + "nature": "Timid", + "evs": {"hp": 4, "spa": 252, "spe": 252}, + "teraType": ["Electric", "Ground"], + "ability": ["Protosynthesis"] + }, + { + "species": "Sandy Shocks", + "weight": 10, + "moves": [ + ["Mirror Coat", "Stealth Rock"], + ["Thunderbolt"], + ["Earth Power"], + ["Tera Blast"] + ], + "item": ["Focus Sash"], + "nature": "Timid", + "evs": {"hp": 4, "spa": 252, "spe": 252}, + "teraType": ["Ice"], + "wantsTera": true, + "ability": ["Protosynthesis"] + }, + { + "species": "Sandy Shocks", + "weight": 60, + "moves": [ + ["Thunderbolt"], + ["Earth Power"], + ["Tera Blast"], + ["Flash Cannon", "Stealth Rock"] + ], + "item": ["Booster Energy"], + "nature": "Timid", + "evs": {"hp": 52, "spa": 204, "spe": 252}, + "teraType": ["Fairy", "Ice"], + "wantsTera": true, + "ability": ["Protosynthesis"] + }, + { + "species": "Sandy Shocks", + "weight": 10, + "moves": [ + ["Thunderbolt"], + ["Volt Switch"], + ["Earth Power"], + ["Tera Blast"] + ], + "item": ["Choice Scarf"], + "nature": "Timid", + "evs": {"hp": 4, "spa": 252, "spe": 252}, + "teraType": ["Fairy", "Ice"], + "wantsTera": true, + "ability": ["Protosynthesis"] + }, + { + "species": "Sandy Shocks", + "weight": 10, + "moves": [ + ["Mirror Coat", "Thunderbolt"], + ["Volt Switch"], + ["Earth Power"], + ["Tera Blast"] + ], + "item": ["Assault Vest"], + "nature": "Timid", + "evs": {"hp": 4, "spa": 252, "spe": 252}, + "teraType": ["Fairy", "Ice"], + "wantsTera": true, + "ability": ["Protosynthesis"] + } + ] + }, + "greninja": { + "weight": 2, + "sets": [ + { + "species": "Greninja", + "weight": 50, + "moves": [ + ["Ice Beam"], + ["Dark Pulse", "Grass Knot"], + ["Water Shuriken"], + ["Counter", "Toxic Spikes"] + ], + "item": ["Focus Sash"], + "nature": "Timid", + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "ivs": {"atk": 0}, + "teraType": ["Ghost", "Water"], + "ability": ["Protean"] + }, + { + "species": "Greninja", + "weight": 50, + "moves": [ + ["Ice Beam"], + ["Dark Pulse", "Grass Knot"], + ["Water Shuriken"], + ["Counter", "Toxic Spikes"] + ], + "item": ["Focus Sash"], + "nature": "Timid", + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "ivs": {"atk": 0}, + "teraType": ["Ghost", "Water"], + "ability": ["Torrent"] + } + ] + }, + "palafin": { + "weight": 2, + "sets": [ + { + "species": "Palafin", + "weight": 40, + "moves": [ + ["Jet Punch"], + ["Wave Crash"], + ["Flip Turn"], + ["Close Combat", "Drain Punch", "Ice Punch"] + ], + "item": ["Choice Band"], + "nature": "Jolly", + "evs": {"hp": 4, "atk": 252, "spe": 252}, + "teraType": ["Water"], + "ability": ["Zero to Hero"] + }, + { + "species": "Palafin", + "weight": 30, + "moves": [ + ["Jet Punch"], + ["Wave Crash"], + ["Flip Turn"], + ["Close Combat", "Drain Punch"] + ], + "item": ["Assault Vest", "Choice Scarf", "Mystic Water"], + "nature": "Jolly", + "evs": {"hp": 4, "atk": 252, "spe": 252}, + "teraType": ["Fighting", "Water"], + "ability": ["Zero to Hero"] + }, + { + "species": "Palafin", + "weight": 20, + "moves": [ + ["Bulk Up"], + ["Jet Punch"], + ["Drain Punch"], + ["Substitute", "Taunt"] + ], + "item": ["Leftovers", "Punching Glove"], + "nature": "Jolly", + "evs": {"hp": 252, "def": 4, "spe": 252}, + "teraType": ["Fighting", "Water"], + "ability": ["Zero to Hero"] + }, + { + "species": "Palafin", + "weight": 10, + "moves": [ + ["Bulk Up"], + ["Jet Punch"], + ["Tera Blast"], + ["Substitute", "Taunt"] + ], + "item": ["Leftovers"], + "nature": "Jolly", + "evs": {"hp": 252, "def": 4, "spe": 252}, + "teraType": ["Fairy"], + "wantsTera": true, + "ability": ["Zero to Hero"] + } + ] + }, + "regieleki": { + "weight": 2, + "sets": [ + { + "species": "Regieleki", + "weight": 25, + "moves": [ + ["Thunderbolt"], + ["Tera Blast"], + ["Extreme Speed"], + ["Thunder Wave", "Volt Switch", "Wild Charge"] + ], + "item": ["Focus Sash", "Life Orb"], + "nature": "Hasty", + "evs": {"atk": 4, "spa": 252, "spe": 252}, + "teraType": ["Ice"], + "wantsTera": true, + "ability": ["Transistor"] + }, + { + "species": "Regieleki", + "weight": 20, + "moves": [ + ["Thunderbolt"], + ["Volt Switch"], + ["Extreme Speed"], + ["Wild Charge"] + ], + "item": ["Life Orb"], + "nature": "Hasty", + "evs": {"atk": 4, "spa": 252, "spe": 252}, + "teraType": ["Electric"], + "ability": ["Transistor"] + }, + { + "species": "Regieleki", + "weight": 25, + "moves": [ + ["Thunderbolt"], + ["Tera Blast"], + ["Volt Switch"], + ["Extreme Speed", "Thunder Cage"] + ], + "item": ["Choice Specs"], + "nature": "Timid", + "evs": {"hp": 4, "spa": 252, "spe": 252}, + "teraType": ["Ice"], + "wantsTera": true, + "ability": ["Transistor"] + }, + { + "species": "Regieleki", + "weight": 15, + "moves": [ + ["Thunderbolt", "Thunder Cage"], + ["Reflect"], + ["Light Screen"], + ["Tera Blast"] + ], + "item": ["Light Clay"], + "nature": "Timid", + "evs": {"hp": 252, "spa": 4, "spe": 252}, + "teraType": ["Ice"], + "wantsTera": true, + "ability": ["Transistor"] + }, + { + "species": "Regieleki", + "weight": 15, + "moves": [ + ["Thunderbolt", "Thunder Cage"], + ["Reflect"], + ["Light Screen"], + ["Explosion", "Thunder Wave"] + ], + "item": ["Light Clay"], + "nature": "Timid", + "evs": {"hp": 252, "spa": 4, "spe": 252}, + "teraType": ["Ghost", "Normal"], + "ability": ["Transistor"] + } + ] + }, + "avalugg": { + "weight": 2, + "sets": [ + { + "species": "Avalugg", + "weight": 100, + "moves": [ + ["Iron Defense"], + ["Body Press"], + ["Recover"], + ["Avalanche", "Icicle Crash"] + ], + "item": ["Heavy-Duty Boots", "Rocky Helmet"], + "nature": "Impish", + "evs": {"hp": 252, "def": 252, "spd": 4}, + "teraType": ["Fighting"], + "wantsTera": true, + "ability": ["Sturdy"] + } + ] + }, + "landorus": { + "weight": 2, + "sets": [ + { + "species": "Landorus", + "weight": 45, + "moves": [ + ["Earth Power"], + ["Sludge Bomb"], + ["Focus Blast", "Psychic"], + ["Nasty Plot", "Substitute"] + ], + "item": ["Life Orb"], + "nature": "Timid", + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "ivs": {"atk": 0}, + "teraType": ["Poison", "Steel", "Water"], + "wantsTera": true, + "ability": ["Sheer Force"] + }, + { + "species": "Landorus", + "weight": 55, + "moves": [ + ["Earth Power"], + ["Sludge Bomb"], + ["Focus Blast", "Nasty Plot", "Substitute"], + ["Tera Blast"] + ], + "item": ["Life Orb"], + "nature": "Timid", + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "ivs": {"atk": 0}, + "teraType": ["Flying", "Ice"], + "wantsTera": true, + "ability": ["Sheer Force"] + } + ] + }, + "quaquaval": { + "weight": 2, + "sets": [ + { + "species": "Quaquaval", + "weight": 65, + "moves": [ + ["Aqua Step"], + ["Close Combat"], + ["Aqua Jet"], + ["Encore", "Ice Spinner", "Swords Dance"] + ], + "item": ["Focus Sash", "Mystic Water"], + "nature": "Jolly", + "evs": {"hp": 4, "atk": 252, "spe": 252}, + "teraType": ["Steel", "Water"], + "ability": ["Moxie"] + }, + { + "species": "Quaquaval", + "weight": 10, + "moves": [ + ["Aqua Step"], + ["Close Combat"], + ["Aqua Jet"], + ["Tera Blast"] + ], + "item": ["Focus Sash", "Mystic Water"], + "nature": "Jolly", + "evs": {"hp": 4, "atk": 252, "spe": 252}, + "teraType": ["Electric", "Steel"], + "wantsTera": true, + "ability": ["Moxie"] + }, + { + "species": "Quaquaval", + "weight": 25, + "moves": [ + ["Aqua Step"], + ["Roost"], + ["Bulk Up"], + ["Encore", "Substitute", "Taunt"] + ], + "item": ["Covert Cloak", "Leftovers", "Rocky Helmet"], + "nature": "Jolly", + "evs": {"hp": 252, "spd": 156, "spe": 100}, + "teraType": ["Steel"], + "ability": ["Moxie"] + } + ] + }, + "articuno": { + "weight": 1, + "sets": [ + { + "species": "Articuno", + "weight": 100, + "moves": [ + ["Substitute"], + ["Freeze-Dry", "Protect"], + ["Roost"], + ["Sheer Cold"] + ], + "item": ["Leftovers"], + "nature": "Bold", + "evs": {"hp": 220, "def": 228, "spe": 60}, + "ivs": {"atk": 0}, + "teraType": ["Ghost", "Steel"], + "ability": ["Pressure"] + } + ] + }, + "haxorus": { + "weight": 1, + "sets": [ + { + "species": "Haxorus", + "weight": 65, + "moves": [ + ["Dragon Dance"], + ["Iron Head"], + ["Outrage"], + ["Earthquake"] + ], + "item": ["Focus Sash", "Life Orb", "Lum Berry"], + "nature": "Jolly", + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "teraType": ["Steel"], + "wantsTera": true, + "ability": ["Mold Breaker"] + }, + { + "species": "Haxorus", + "weight": 10, + "moves": [ + ["Dragon Dance"], + ["Tera Blast"], + ["Outrage"], + ["Earthquake"] + ], + "item": ["Focus Sash", "Life Orb", "Lum Berry"], + "nature": "Jolly", + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "teraType": ["Electric"], + "wantsTera": true, + "ability": ["Mold Breaker"] + }, + { + "species": "Haxorus", + "weight": 25, + "moves": [ + ["Scale Shot"], + ["Iron Head"], + ["Earthquake"], + ["Dragon Dance", "Swords Dance"] + ], + "item": ["Loaded Dice"], + "nature": "Jolly", + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "teraType": ["Steel"], + "wantsTera": true, + "ability": ["Mold Breaker"] + } + ] + }, + "lucario": { + "weight": 1, + "sets": [ + { + "species": "Lucario", + "weight": 80, + "moves": [ + ["Extreme Speed"], + ["Close Combat"], + ["Bullet Punch"], + ["Counter", "Earthquake", "Swords Dance"] + ], + "item": ["Focus Sash", "Life Orb"], + "nature": "Jolly", + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "teraType": ["Normal", "Steel"], + "ability": ["Inner Focus"] + }, + { + "species": "Lucario", + "weight": 20, + "moves": [ + ["Vacuum Wave"], + ["Aura Sphere"], + ["Steel Beam"], + ["Dark Pulse"] + ], + "item": ["Focus Sash", "Life Orb"], + "nature": "Timid", + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "teraType": ["Dark", "Fighting", "Steel"], + "ability": ["Inner Focus"] + } + ] + }, + "mesprit": { + "weight": 1, + "sets": [ + { + "species": "Mesprit", + "weight": 100, + "moves": [ + ["Dazzling Gleam"], + ["Trick Room"], + ["Healing Wish"], + ["Encore"] + ], + "item": ["Sitrus Berry"], + "nature": "Bold", + "evs": {"hp": 252, "def": 252, "spa": 4}, + "ivs": {"atk": 0}, + "teraType": ["Fairy"], + "ability": ["Levitate"] + } + ] + }, + "moltresgalar": { + "weight": 1, + "sets": [ + { + "species": "Moltres-Galar", + "weight": 100, + "moves": [ + ["Fiery Wrath"], + ["Air Slash", "Hurricane"], + ["Nasty Plot"], + ["Agility"] + ], + "item": ["Sitrus Berry", "Weakness Policy"], + "nature": "Timid", + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "ivs": {"atk": 0}, + "teraType": ["Dark", "Flying", "Steel"], + "ability": ["Berserk"] + } + ] + }, + "sableye": { + "weight": 1, + "sets": [ + { + "species": "Sableye", + "weight": 30, + "moves": [ + ["Foul Play", "Knock Off"], + ["Encore"], + ["Disable", "Metal Burst"], + ["Thunder Wave", "Will-O-Wisp"] + ], + "item": ["Focus Sash"], + "nature": "Adamant", + "evs": {"hp": 252, "atk": 252, "spd": 4}, + "teraType": ["Poison", "Steel"], + "ability": ["Prankster"] + }, + { + "species": "Sableye", + "weight": 30, + "moves": [ + ["Substitute"], + ["Encore"], + ["Disable"], + ["Night Shade"] + ], + "item": ["Leftovers"], + "nature": "Bold", + "evs": {"hp": 252, "def": 252, "spd": 4}, + "ivs": {"atk": 0}, + "teraType": ["Poison", "Steel"], + "ability": ["Prankster"] + }, + { + "species": "Sableye", + "weight": 20, + "moves": [ + ["Reflect"], + ["Light Screen"], + ["Encore", "Taunt", "Will-O-Wisp"], + ["Foul Play"] + ], + "item": ["Light Clay"], + "nature": "Bold", + "evs": {"hp": 252, "def": 252, "spd": 4}, + "ivs": {"atk": 0}, + "teraType": ["Poison", "Steel"], + "ability": ["Prankster"] + }, + { + "species": "Sableye", + "weight": 20, + "moves": [ + ["Reflect"], + ["Light Screen"], + ["Encore", "Taunt", "Will-O-Wisp"], + ["Knock Off"] + ], + "item": ["Light Clay"], + "nature": "Impish", + "evs": {"hp": 252, "def": 252, "spd": 4}, + "teraType": ["Poison", "Steel"], + "ability": ["Prankster"] + } + ] + }, + "uxie": { + "weight": 1, + "sets": [ + { + "species": "Uxie", + "weight": 100, + "moves": [ + ["U-turn"], + ["Yawn"], + ["Encore"], + ["Stealth Rock"] + ], + "item": ["Sitrus Berry"], + "nature": "Impish", + "evs": {"hp": 244, "def": 252, "spd": 12}, + "teraType": ["Fairy"], + "ability": ["Levitate"] + } + ] + }, + "brutebonnet": { + "weight": 1, + "sets": [ + { + "species": "Brute Bonnet", + "weight": 85, + "moves": [ + ["Spore"], + ["Trailblaze"], + ["Crunch", "Tera Blast"], + ["Substitute"] + ], + "item": ["Leftovers"], + "nature": "Jolly", + "evs": {"hp": 52, "atk": 204, "spe": 252}, + "teraType": ["Fire", "Water"], + "wantsTera": true, + "ability": ["Protosynthesis"] + }, + { + "species": "Brute Bonnet", + "weight": 15, + "moves": [ + ["Spore"], + ["Sucker Punch"], + ["Bullet Seed"], + ["Substitute", "Tera Blast"] + ], + "item": ["Loaded Dice"], + "nature": "Adamant", + "evs": {"hp": 252, "atk": 252, "spd": 4}, + "teraType": ["Fire", "Water"], + "wantsTera": true, + "ability": ["Protosynthesis"] + } + ] + }, + "samurotthisui": { + "weight": 1, + "sets": [ + { + "species": "Samurott-Hisui", + "weight": 70, + "moves": [ + ["Ceaseless Edge"], + ["Aqua Cutter", "Razor Shell"], + ["Aqua Jet", "Sucker Punch"], + ["Encore", "Sacred Sword"] + ], + "item": ["Focus Sash"], + "nature": "Jolly", + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "teraType": ["Dark", "Ghost", "Water"], + "ability": ["Sharpness"] + }, + { + "species": "Samurott-Hisui", + "weight": 15, + "moves": [ + ["Ceaseless Edge"], + ["Aqua Cutter", "Razor Shell"], + ["Aqua Jet", "Sucker Punch"], + ["Sacred Sword"] + ], + "item": ["Assault Vest"], + "nature": "Jolly", + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "teraType": ["Water"], + "ability": ["Sharpness"] + }, + { + "species": "Samurott-Hisui", + "weight": 15, + "moves": [ + ["Ceaseless Edge"], + ["Aqua Cutter", "Razor Shell"], + ["Aqua Jet", "Sucker Punch"], + ["Tera Blast"] + ], + "item": ["Assault Vest"], + "nature": "Jolly", + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "teraType": ["Fairy"], + "ability": ["Sharpness"] + } + ] + }, + "slowkinggalar": { + "weight": 1, + "sets": [ + { + "species": "Slowking-Galar", + "weight": 60, + "moves": [ + ["Flamethrower"], + ["Grass Knot"], + ["Eerie Spell", "Psychic"], + ["Sludge Bomb"] + ], + "item": ["Assault Vest"], + "nature": "Modest", + "evs": {"hp": 252, "spa": 252, "spd": 4}, + "ivs": {"atk": 0}, + "teraType": ["Normal", "Poison"], + "ability": ["Regenerator"] + }, + { + "species": "Slowking-Galar", + "weight": 40, + "moves": [ + ["Eerie Spell", "Sludge Bomb"], + ["Toxic", "Yawn"], + ["Slack Off", "Trick Room"], + ["Chilly Reception"] + ], + "item": ["Black Sludge"], + "nature": "Relaxed", + "evs": {"hp": 244, "def": 252, "spd": 12}, + "ivs": {"atk": 0}, + "teraType": ["Poison"], + "ability": ["Regenerator"] + } + ] + }, + "basculegionf": { + "weight": 1, + "sets": [ + { + "species": "Basculegion-F", + "weight": 70, + "moves": [ + ["Shadow Ball"], + ["Aqua Jet"], + ["Hydro Pump", "Surf"], + ["Endeavor"] + ], + "gender": "F", + "item": ["Focus Sash"], + "nature": "Rash", + "evs": {"atk": 4, "spa": 252, "spe": 252}, + "teraType": ["Water"], + "ability": ["Adaptability"] + }, + { + "species": "Basculegion-F", + "weight": 30, + "moves": [ + ["Shadow Ball"], + ["Aqua Jet"], + ["Hydro Pump", "Surf"], + ["Endeavor", "Tera Blast"] + ], + "gender": "F", + "item": ["Focus Sash"], + "nature": "Rash", + "evs": {"atk": 4, "spa": 252, "spe": 252}, + "teraType": ["Fairy"], + "wantsTera": true, + "ability": ["Adaptability"] + } + ] + }, + "irontreads": { + "weight": 1, + "sets": [ + { + "species": "Iron Treads", + "weight": 15, + "moves": [ + ["Earthquake"], + ["Heavy Slam", "Iron Head"], + ["Ice Spinner", "Rapid Spin", "Volt Switch"], + ["Knock Off"] + ], + "item": ["Assault Vest"], + "nature": "Jolly", + "evs": {"hp": 252, "atk": 4, "spd": 252}, + "teraType": ["Fairy", "Flying", "Grass", "Water"], + "ability": ["Quark Drive"] + }, + { + "species": "Iron Treads", + "weight": 60, + "moves": [ + ["Earthquake", "Endeavor"], + ["Iron Head"], + ["Rapid Spin", "Stealth Rock", "Substitute"], + ["Ice Spinner", "Knock Off"] + ], + "item": ["Booster Energy"], + "nature": "Jolly", + "evs": {"hp": 4, "atk": 252, "spe": 252}, + "teraType": ["Fairy", "Grass", "Ground", "Water"], + "ability": ["Quark Drive"] + }, + { + "species": "Iron Treads", + "weight": 25, + "moves": [ + ["Earthquake", "Endeavor"], + ["Iron Head"], + ["Rapid Spin", "Stealth Rock", "Substitute"], + ["Tera Blast"] + ], + "item": ["Booster Energy"], + "nature": "Jolly", + "evs": {"hp": 4, "atk": 252, "spe": 252}, + "teraType": ["Fairy", "Grass", "Water"], + "wantsTera": true, + "ability": ["Quark Drive"] + } + ] + }, + "overqwil": { + "weight": 1, + "sets": [ + { + "species": "Overqwil", + "weight": 60, + "moves": [ + ["Crunch"], + ["Barb Barrage", "Toxic"], + ["Minimize"], + ["Substitute"] + ], + "item": ["Leftovers"], + "nature": "Jolly", + "evs": {"hp": 252, "spd": 4, "spe": 252}, + "teraType": ["Dark", "Water"], + "ability": ["Poison Point"] + }, + { + "species": "Overqwil", + "weight": 40, + "moves": [ + ["Crunch"], + ["Barb Barrage", "Toxic"], + ["Minimize"], + ["Substitute"] + ], + "item": ["Black Sludge"], + "nature": "Jolly", + "evs": {"hp": 252, "spd": 4, "spe": 252}, + "teraType": ["Poison"], + "ability": ["Poison Point"] + } + ] + }, + "spectrier": { + "weight": 1, + "sets": [ + { + "species": "Spectrier", + "weight": 100, + "moves": [ + ["Shadow Ball"], + ["Draining Kiss"], + ["Will-O-Wisp"], + ["Calm Mind"] + ], + "item": ["Leftovers", "Sitrus Berry"], + "nature": "Timid", + "evs": {"hp": 252, "spa": 4, "spe": 252}, + "ivs": {"atk": 0}, + "teraType": ["Fairy"], + "wantsTera": true, + "ability": ["Grim Neigh"] + } + ] + }, + "maushold": { + "weight": 1, + "sets": [ + { + "species": "Maushold", + "weight": 100, + "moves": [ + ["Population Bomb"], + ["Bite", "Mud Shot"], + ["Encore"], + ["Thunder Wave", "Tidy Up"] + ], + "item": ["King's Rock", "Wide Lens"], + "nature": "Jolly", + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "teraType": ["Ghost", "Normal", "Poison"], + "ability": ["Technician"] + } + ] + }, + "polteageist": { + "weight": 1, + "sets": [ + { + "species": "Polteageist", + "weight": 50, + "moves": [ + ["Shell Smash"], + ["Strength Sap"], + ["Stored Power"], + ["Tera Blast"] + ], + "item": ["Focus Sash"], + "nature": "Bold", + "evs": {"hp": 108, "def": 196, "spe": 204}, + "ivs": {"atk": 0}, + "teraType": ["Fighting", "Water"], + "wantsTera": true, + "ability": ["Weak Armor"] + }, + { + "species": "Polteageist", + "weight": 50, + "moves": [ + ["Shell Smash"], + ["Strength Sap"], + ["Stored Power"], + ["Tera Blast"] + ], + "item": ["Focus Sash", "White Herb"], + "nature": "Bold", + "evs": {"hp": 108, "def": 196, "spe": 204}, + "ivs": {"atk": 0}, + "teraType": ["Fighting", "Water"], + "wantsTera": true, + "ability": ["Cursed Body"] + } + ] + }, + "taurospaldeaaqua": { + "weight": 1, + "sets": [ + { + "species": "Tauros-Paldea-Aqua", + "weight": 100, + "moves": [ + ["Wave Crash"], + ["Close Combat"], + ["Aqua Jet", "Trailblaze"], + ["Endeavor"] + ], + "item": ["Rocky Helmet"], + "nature": "Adamant", + "evs": {"hp": 252, "atk": 4, "def": 108, "spd": 4, "spe": 140}, + "teraType": ["Steel", "Water"], + "ability": ["Intimidate"] + } + ] + }, + "forretress": { + "weight": 1, + "sets": [ + { + "species": "Forretress", + "weight": 50, + "moves": [ + ["Body Press"], + ["Volt Switch"], + ["Stealth Rock"], + ["Toxic Spikes"] + ], + "item": ["Rocky Helmet"], + "nature": "Relaxed", + "evs": {"hp": 252, "def": 252, "spd": 4}, + "ivs": {"atk": 0, "spe": 0}, + "teraType": ["Fighting", "Water"], + "ability": ["Sturdy"] + }, + { + "species": "Forretress", + "weight": 50, + "moves": [ + ["Body Press"], + ["Volt Switch"], + ["Stealth Rock"], + ["Gyro Ball"] + ], + "item": ["Rocky Helmet"], + "nature": "Relaxed", + "evs": {"hp": 252, "def": 252, "spd": 4}, + "ivs": {"spe": 0}, + "teraType": ["Fighting", "Water"], + "ability": ["Sturdy"] + } + ] + }, + "glastrier": { + "weight": 1, + "sets": [ + { + "species": "Glastrier", + "weight": 80, + "moves": [ + ["Icicle Crash"], + ["Heavy Slam"], + ["Tera Blast"], + ["Close Combat", "High Horsepower"] + ], + "item": ["Assault Vest"], + "nature": "Adamant", + "evs": {"hp": 252, "atk": 252, "spd": 4}, + "teraType": ["Electric", "Water"], + "wantsTera": true, + "ability": ["Chilling Neigh"] + }, + { + "species": "Glastrier", + "weight": 20, + "moves": [ + ["Icicle Crash"], + ["Heavy Slam"], + ["Close Combat"], + ["High Horsepower"] + ], + "item": ["Assault Vest"], + "nature": "Adamant", + "evs": {"hp": 252, "atk": 252, "spd": 4}, + "teraType": ["Ghost"], + "wantsTera": true, + "ability": ["Chilling Neigh"] + } + ] + }, + "gothitelle": { + "weight": 1, + "sets": [ + { + "species": "Gothitelle", + "weight": 65, + "moves": [ + ["Trick"], + ["Calm Mind"], + ["Rest"], + ["Stored Power", "Tera Blast"] + ], + "item": ["Choice Scarf"], + "nature": "Bold", + "evs": {"hp": 236, "def": 196, "spa": 4, "spd": 4, "spe": 68}, + "ivs": {"atk": 0}, + "teraType": ["Fairy", "Flying"], + "ability": ["Shadow Tag"] + }, + { + "species": "Gothitelle", + "weight": 35, + "moves": [ + ["Charm"], + ["Calm Mind"], + ["Rest"], + ["Stored Power", "Tera Blast"] + ], + "item": ["Covert Cloak", "Leftovers"], + "nature": "Bold", + "evs": {"hp": 236, "def": 196, "spa": 4, "spd": 4, "spe": 68}, + "ivs": {"atk": 0}, + "teraType": ["Fairy"], + "wantsTera": true, + "ability": ["Shadow Tag"] + } + ] + } +} diff --git a/data/random-doubles-sets.json b/data/random-battles/gen9/doubles-sets.json similarity index 60% rename from data/random-doubles-sets.json rename to data/random-battles/gen9/doubles-sets.json index 537c8fdc1d3b..9daab113a906 100644 --- a/data/random-doubles-sets.json +++ b/data/random-battles/gen9/doubles-sets.json @@ -1,11 +1,40 @@ { + "venusaur": { + "level": 86, + "sets": [ + { + "role": "Offensive Protect", + "movepool": ["Earth Power", "Giga Drain", "Knock Off", "Leaf Storm", "Protect", "Sludge Bomb"], + "abilities": ["Chlorophyll", "Overgrow"], + "teraTypes": ["Dark", "Water"] + } + ] + }, "charizard": { + "level": 82, + "sets": [ + { + "role": "Offensive Protect", + "movepool": ["Heat Wave", "Hurricane", "Protect", "Scorching Sands", "Will-O-Wisp"], + "abilities": ["Blaze", "Solar Power"], + "teraTypes": ["Dragon", "Fire", "Ground"] + } + ] + }, + "blastoise": { "level": 83, "sets": [ { - "role": "Doubles Support", - "movepool": ["Heat Wave", "Hurricane", "Protect", "Will-O-Wisp"], - "teraTypes": ["Fire", "Ground"] + "role": "Doubles Bulky Attacker", + "movepool": ["Fake Out", "Flip Turn", "Icy Wind", "Life Dew", "Wave Crash", "Yawn"], + "abilities": ["Torrent"], + "teraTypes": ["Dragon", "Grass"] + }, + { + "role": "Doubles Setup Sweeper", + "movepool": ["Dragon Pulse", "Muddy Water", "Protect", "Shell Smash"], + "abilities": ["Torrent"], + "teraTypes": ["Dragon", "Water"] } ] }, @@ -15,21 +44,24 @@ { "role": "Bulky Protect", "movepool": ["Coil", "Gunk Shot", "Knock Off", "Protect", "Stomping Tantrum"], + "abilities": ["Intimidate"], "teraTypes": ["Dark", "Ground"] }, { "role": "Doubles Bulky Attacker", "movepool": ["Dragon Tail", "Glare", "Gunk Shot", "Knock Off", "Toxic Spikes"], + "abilities": ["Intimidate"], "teraTypes": ["Dark"] } ] }, "pikachu": { - "level": 92, + "level": 94, "sets": [ { "role": "Doubles Support", "movepool": ["Encore", "Fake Out", "Grass Knot", "Knock Off", "Protect", "Volt Tackle"], + "abilities": ["Lightning Rod"], "teraTypes": ["Electric", "Grass"] } ] @@ -40,66 +72,75 @@ { "role": "Doubles Support", "movepool": ["Encore", "Fake Out", "Grass Knot", "Knock Off", "Nuzzle", "Thunderbolt"], + "abilities": ["Lightning Rod"], "teraTypes": ["Electric", "Grass"] }, { "role": "Tera Blast user", "movepool": ["Nasty Plot", "Protect", "Tera Blast", "Thunderbolt"], + "abilities": ["Lightning Rod"], "teraTypes": ["Ice"] } ] }, "raichualola": { - "level": 87, + "level": 89, "sets": [ { "role": "Choice Item user", - "movepool": ["Focus Blast", "Grass Knot", "Psychic", "Psyshock", "Thunderbolt", "Volt Switch"], - "teraTypes": ["Electric", "Fighting", "Grass"] + "movepool": ["Alluring Voice", "Focus Blast", "Grass Knot", "Psychic", "Psyshock", "Thunderbolt", "Volt Switch"], + "abilities": ["Surge Surfer"], + "teraTypes": ["Electric", "Fairy", "Fighting", "Grass"] }, { "role": "Doubles Setup Sweeper", "movepool": ["Nasty Plot", "Protect", "Psychic", "Psyshock", "Thunderbolt"], + "abilities": ["Surge Surfer"], "teraTypes": ["Dark", "Electric", "Flying"] } ] }, "sandslash": { - "level": 90, + "level": 92, "sets": [ { "role": "Doubles Setup Sweeper", - "movepool": ["High Horsepower", "Knock Off", "Leech Life", "Protect", "Stone Edge", "Swords Dance"], - "teraTypes": ["Bug", "Dark", "Rock"] + "movepool": ["Gunk Shot", "High Horsepower", "Knock Off", "Protect", "Rapid Spin", "Stone Edge", "Swords Dance"], + "abilities": ["Sand Rush"], + "teraTypes": ["Poison", "Rock"] }, { "role": "Doubles Bulky Attacker", "movepool": ["High Horsepower", "Knock Off", "Rapid Spin", "Rock Slide", "Super Fang"], + "abilities": ["Sand Rush"], "teraTypes": ["Grass", "Water"] } ] }, "sandslashalola": { - "level": 89, + "level": 90, "sets": [ { "role": "Doubles Wallbreaker", - "movepool": ["Drill Run", "Ice Shard", "Ice Spinner", "Iron Head", "Knock Off"], + "movepool": ["Drill Run", "Ice Shard", "Iron Head", "Knock Off", "Triple Axel"], + "abilities": ["Slush Rush"], "teraTypes": ["Flying", "Water"] }, { - "role": "Doubles Setup Sweeper", - "movepool": ["Ice Shard", "Iron Head", "Protect", "Swords Dance"], - "teraTypes": ["Ice"] + "role": "Doubles Bulky Attacker", + "movepool": ["Drill Run", "Ice Shard", "Iron Head", "Triple Axel"], + "abilities": ["Slush Rush"], + "teraTypes": ["Flying", "Water"] } ] }, "clefairy": { - "level": 96, + "level": 97, "sets": [ { "role": "Doubles Support", "movepool": ["Follow Me", "Heal Pulse", "Helping Hand", "Life Dew", "Moonblast"], + "abilities": ["Friend Guard"], "teraTypes": ["Fire", "Steel", "Water"] } ] @@ -110,31 +151,35 @@ { "role": "Doubles Bulky Attacker", "movepool": ["Heal Pulse", "Icy Wind", "Knock Off", "Life Dew", "Moonblast", "Thunder Wave"], + "abilities": ["Magic Guard", "Unaware"], "teraTypes": ["Fire", "Steel", "Water"] }, { "role": "Doubles Support", "movepool": ["Encore", "Fire Blast", "Follow Me", "Heal Pulse", "Helping Hand", "Life Dew", "Moonblast"], + "abilities": ["Unaware"], "teraTypes": ["Fire", "Steel", "Water"] } ] }, "ninetales": { - "level": 82, + "level": 80, "sets": [ { "role": "Doubles Wallbreaker", - "movepool": ["Flamethrower", "Heat Wave", "Overheat", "Protect", "Solar Beam"], + "movepool": ["Flamethrower", "Heat Wave", "Overheat", "Protect", "Scorching Sands", "Solar Beam"], + "abilities": ["Drought"], "teraTypes": ["Fire", "Grass"] } ] }, "ninetalesalola": { - "level": 77, + "level": 75, "sets": [ { "role": "Doubles Support", "movepool": ["Aurora Veil", "Blizzard", "Moonblast", "Protect"], + "abilities": ["Snow Warning"], "teraTypes": ["Ice", "Steel", "Water"] } ] @@ -145,47 +190,63 @@ { "role": "Doubles Support", "movepool": ["Dazzling Gleam", "Disable", "Encore", "Fire Blast", "Heal Pulse", "Helping Hand", "Icy Wind", "Thunder Wave"], + "abilities": ["Competitive"], "teraTypes": ["Fire", "Steel"] } ] }, + "vileplume": { + "level": 89, + "sets": [ + { + "role": "Doubles Support", + "movepool": ["Pollen Puff", "Sludge Bomb", "Strength Sap", "Stun Spore"], + "abilities": ["Effect Spore"], + "teraTypes": ["Steel", "Water"] + } + ] + }, "venomoth": { - "level": 88, + "level": 90, "sets": [ { "role": "Doubles Setup Sweeper", "movepool": ["Bug Buzz", "Protect", "Quiver Dance", "Sleep Powder", "Sludge Bomb"], + "abilities": ["Tinted Lens"], "teraTypes": ["Bug", "Steel", "Water"] } ] }, "dugtrio": { - "level": 88, + "level": 90, "sets": [ { "role": "Offensive Protect", "movepool": ["Helping Hand", "Protect", "Rock Slide", "Stomping Tantrum", "Sucker Punch"], + "abilities": ["Arena Trap"], "teraTypes": ["Fire", "Ghost", "Ground"] } ] }, "dugtrioalola": { - "level": 88, + "level": 89, "sets": [ { "role": "Offensive Protect", "movepool": ["Iron Head", "Protect", "Rock Slide", "Stomping Tantrum", "Sucker Punch"], + "abilities": ["Sand Force", "Tangling Hair"], "teraTypes": ["Fire", "Steel", "Water"] } ] }, "persian": { - "level": 91, + "level": 93, "sets": [ { "role": "Doubles Support", - "movepool": ["Covet", "Fake Out", "Feint", "Foul Play", "Helping Hand", "Hypnosis", "Icy Wind", "Snarl", "Taunt", "U-turn"], - "teraTypes": ["Dark"] + "movepool": ["Double-Edge", "Fake Out", "Helping Hand", "Icy Wind", "Knock Off", "Taunt", "U-turn"], + "abilities": ["Technician"], + "teraTypes": ["Ghost", "Normal"] } ] }, @@ -194,22 +255,25 @@ "sets": [ { "role": "Doubles Support", - "movepool": ["Fake Out", "Foul Play", "Helping Hand", "Hypnosis", "Knock Off", "Parting Shot", "Quash", "Snarl", "Taunt", "Thunder Wave"], + "movepool": ["Fake Out", "Foul Play", "Helping Hand", "Icy Wind", "Knock Off", "Parting Shot", "Snarl", "Taunt", "Thunder Wave"], + "abilities": ["Fur Coat"], "teraTypes": ["Poison"] } ] }, "golduck": { - "level": 90, + "level": 91, "sets": [ { "role": "Doubles Fast Attacker", "movepool": ["Encore", "Grass Knot", "Hydro Pump", "Ice Beam", "Icy Wind", "Protect", "Psyshock"], + "abilities": ["Cloud Nine", "Swift Swim"], "teraTypes": ["Grass", "Water"] }, { "role": "Offensive Protect", "movepool": ["Grass Knot", "Hydro Pump", "Ice Beam", "Protect", "Psyshock"], + "abilities": ["Cloud Nine", "Swift Swim"], "teraTypes": ["Grass", "Water"] } ] @@ -220,11 +284,13 @@ { "role": "Bulky Protect", "movepool": ["Bulk Up", "Drain Punch", "Protect", "Rage Fist"], + "abilities": ["Defiant"], "teraTypes": ["Fire", "Steel", "Water"] }, { "role": "Choice Item user", "movepool": ["Close Combat", "Final Gambit", "Rage Fist", "U-turn"], + "abilities": ["Defiant"], "teraTypes": ["Fighting"] } ] @@ -235,31 +301,35 @@ { "role": "Doubles Bulky Attacker", "movepool": ["Close Combat", "Extreme Speed", "Flare Blitz", "Howl", "Morning Sun", "Snarl", "Will-O-Wisp"], + "abilities": ["Intimidate"], "teraTypes": ["Fighting", "Normal", "Steel", "Water"] } ] }, "arcaninehisui": { - "level": 82, + "level": 79, "sets": [ { "role": "Choice Item user", "movepool": ["Extreme Speed", "Flare Blitz", "Rock Slide", "Stone Edge"], + "abilities": ["Intimidate"], "teraTypes": ["Normal", "Rock"] }, { "role": "Bulky Protect", "movepool": ["Flare Blitz", "Morning Sun", "Protect", "Rock Slide", "Will-O-Wisp"], + "abilities": ["Intimidate"], "teraTypes": ["Fairy", "Grass"] } ] }, "poliwrath": { - "level": 88, + "level": 90, "sets": [ { "role": "Doubles Bulky Attacker", - "movepool": ["Circle Throw", "Close Combat", "Icy Wind", "Knock Off", "Liquidation"], + "movepool": ["Circle Throw", "Close Combat", "Coaching", "Icy Wind", "Knock Off", "Liquidation"], + "abilities": ["Water Absorb"], "teraTypes": ["Dragon", "Fire", "Ground", "Steel"] } ] @@ -270,17 +340,30 @@ { "role": "Offensive Protect", "movepool": ["Knock Off", "Power Whip", "Protect", "Sludge Bomb", "Sucker Punch"], + "abilities": ["Chlorophyll"], "teraTypes": ["Dark", "Grass"] } ] }, + "tentacruel": { + "level": 85, + "sets": [ + { + "role": "Doubles Bulky Attacker", + "movepool": ["Acid Spray", "Hydro Pump", "Icy Wind", "Knock Off", "Muddy Water", "Sludge Bomb", "Toxic Spikes"], + "abilities": ["Clear Body"], + "teraTypes": ["Grass"] + } + ] + }, "golem": { "level": 87, "sets": [ { "role": "Doubles Wallbreaker", "movepool": ["Fire Punch", "High Horsepower", "Rock Slide", "Stone Edge"], - "teraTypes": ["Fire", "Grass"] + "abilities": ["Sturdy"], + "teraTypes": ["Grass"] } ] }, @@ -290,11 +373,13 @@ { "role": "Bulky Protect", "movepool": ["Double-Edge", "High Horsepower", "Protect", "Rock Slide", "Thunder Wave"], + "abilities": ["Galvanize"], "teraTypes": ["Grass", "Ground"] }, { "role": "Doubles Wallbreaker", "movepool": ["Double-Edge", "Explosion", "High Horsepower", "Rock Slide"], + "abilities": ["Galvanize"], "teraTypes": ["Grass", "Ground"] } ] @@ -304,12 +389,14 @@ "sets": [ { "role": "Doubles Support", - "movepool": ["Fire Blast", "Heal Pulse", "Helping Hand", "Psyshock", "Scald", "Slack Off", "Trick Room"], + "movepool": ["Fire Blast", "Heal Pulse", "Helping Hand", "Psyshock", "Scald", "Trick Room"], + "abilities": ["Regenerator"], "teraTypes": ["Dark", "Grass"] }, { "role": "Doubles Wallbreaker", "movepool": ["Fire Blast", "Hydro Pump", "Ice Beam", "Psyshock", "Scald", "Trick Room"], + "abilities": ["Regenerator"], "teraTypes": ["Dark", "Fire", "Water"] } ] @@ -320,36 +407,68 @@ { "role": "Doubles Wallbreaker", "movepool": ["Fire Blast", "Psychic", "Shell Side Arm", "Trick Room"], + "abilities": ["Regenerator"], "teraTypes": ["Dark", "Fire", "Poison"] } ] }, - "muk": { - "level": 88, + "dodrio": { + "level": 85, + "sets": [ + { + "role": "Doubles Wallbreaker", + "movepool": ["Brave Bird", "Double-Edge", "Drill Run", "Knock Off", "Quick Attack"], + "abilities": ["Early Bird"], + "teraTypes": ["Ground", "Normal"] + }, + { + "role": "Offensive Protect", + "movepool": ["Brave Bird", "Drill Run", "Protect", "Quick Attack", "Swords Dance"], + "abilities": ["Early Bird"], + "teraTypes": ["Ground"] + } + ] + }, + "dewgong": { + "level": 91, "sets": [ { "role": "Doubles Support", + "movepool": ["Encore", "Fake Out", "Hydro Pump", "Icy Wind"], + "abilities": ["Thick Fat"], + "teraTypes": ["Grass"] + } + ] + }, + "muk": { + "level": 86, + "sets": [ + { + "role": "Doubles Bulky Attacker", "movepool": ["Drain Punch", "Gunk Shot", "Haze", "Helping Hand", "Ice Punch", "Knock Off", "Poison Gas", "Poison Jab", "Shadow Sneak"], + "abilities": ["Poison Touch"], "teraTypes": ["Dark"] } ] }, "mukalola": { - "level": 84, + "level": 82, "sets": [ { "role": "Doubles Support", - "movepool": ["Drain Punch", "Gunk Shot", "Helping Hand", "Ice Punch", "Knock Off", "Poison Jab", "Protect", "Rock Tomb", "Snarl"], + "movepool": ["Drain Punch", "Gunk Shot", "Helping Hand", "Ice Punch", "Knock Off", "Poison Jab", "Protect", "Snarl"], + "abilities": ["Poison Touch"], "teraTypes": ["Flying"] } ] }, "cloyster": { - "level": 85, + "level": 87, "sets": [ { "role": "Doubles Setup Sweeper", "movepool": ["Hydro Pump", "Icicle Spear", "Protect", "Rock Blast", "Shell Smash"], + "abilities": ["Skill Link"], "teraTypes": ["Fire", "Ice", "Rock", "Water"] } ] @@ -360,11 +479,13 @@ { "role": "Offensive Protect", "movepool": ["Encore", "Protect", "Shadow Ball", "Sludge Bomb"], + "abilities": ["Cursed Body"], "teraTypes": ["Ghost"] }, { "role": "Doubles Fast Attacker", "movepool": ["Focus Blast", "Protect", "Shadow Ball", "Sludge Bomb", "Trick"], + "abilities": ["Cursed Body"], "teraTypes": ["Fighting", "Ghost"] } ] @@ -375,21 +496,24 @@ { "role": "Doubles Support", "movepool": ["Encore", "Helping Hand", "Knock Off", "Low Sweep", "Poison Gas", "Psychic"], + "abilities": ["Inner Focus"], "teraTypes": ["Dark"] } ] }, "electrode": { - "level": 88, + "level": 89, "sets": [ { "role": "Doubles Support", - "movepool": ["Foul Play", "Helping Hand", "Light Screen", "Taunt", "Thunder Wave", "Thunderbolt", "Volt Switch"], + "movepool": ["Electroweb", "Foul Play", "Helping Hand", "Taunt", "Thunderbolt", "Volt Switch"], + "abilities": ["Aftermath", "Soundproof", "Static"], "teraTypes": ["Flying"] }, { "role": "Tera Blast user", "movepool": ["Protect", "Tera Blast", "Thunderbolt", "Volt Switch"], + "abilities": ["Aftermath", "Soundproof", "Static"], "teraTypes": ["Ice"] } ] @@ -399,122 +523,237 @@ "sets": [ { "role": "Doubles Support", - "movepool": ["Energy Ball", "Leaf Storm", "Reflect", "Taunt", "Thunder Wave", "Thunderbolt", "Volt Switch"], + "movepool": ["Electroweb", "Energy Ball", "Leaf Storm", "Taunt", "Thunderbolt", "Volt Switch"], + "abilities": ["Aftermath", "Soundproof", "Static"], "teraTypes": ["Steel"] }, { "role": "Offensive Protect", "movepool": ["Foul Play", "Leaf Storm", "Protect", "Thunderbolt", "Volt Switch"], + "abilities": ["Aftermath", "Soundproof", "Static"], "teraTypes": ["Dark", "Electric", "Grass", "Steel"] } ] }, - "weezing": { + "exeggutor": { + "level": 88, + "sets": [ + { + "role": "Doubles Wallbreaker", + "movepool": ["Energy Ball", "Leaf Storm", "Protect", "Psychic", "Trick Room"], + "abilities": ["Harvest"], + "teraTypes": ["Fire", "Poison", "Steel"] + } + ] + }, + "exeggutoralola": { "level": 88, + "sets": [ + { + "role": "Doubles Bulky Attacker", + "movepool": ["Draco Meteor", "Flamethrower", "Protect", "Trick Room", "Wood Hammer"], + "abilities": ["Harvest"], + "teraTypes": ["Fire"] + } + ] + }, + "hitmonlee": { + "level": 86, + "sets": [ + { + "role": "Offensive Protect", + "movepool": ["Close Combat", "Fake Out", "Knock Off", "Poison Jab", "Protect"], + "abilities": ["Unburden"], + "teraTypes": ["Dark", "Poison"] + } + ] + }, + "hitmonchan": { + "level": 90, + "sets": [ + { + "role": "Doubles Bulky Attacker", + "movepool": ["Close Combat", "Coaching", "Fake Out", "Knock Off", "Poison Jab"], + "abilities": ["Inner Focus"], + "teraTypes": ["Dark", "Poison"] + } + ] + }, + "weezing": { + "level": 90, "sets": [ { "role": "Doubles Support", "movepool": ["Clear Smog", "Fire Blast", "Gunk Shot", "Poison Gas", "Protect", "Taunt", "Will-O-Wisp"], + "abilities": ["Levitate", "Neutralizing Gas"], "teraTypes": ["Dark"] } ] }, "weezinggalar": { - "level": 87, + "level": 88, "sets": [ { "role": "Doubles Bulky Attacker", "movepool": ["Fire Blast", "Gunk Shot", "Haze", "Poison Gas", "Protect", "Strange Steam", "Taunt", "Will-O-Wisp"], + "abilities": ["Levitate", "Neutralizing Gas"], "teraTypes": ["Dark", "Steel"] } ] }, + "rhydon": { + "level": 86, + "sets": [ + { + "role": "Bulky Protect", + "movepool": ["Helping Hand", "High Horsepower", "Protect", "Rock Slide", "Stealth Rock", "Stone Edge"], + "abilities": ["Lightning Rod"], + "teraTypes": ["Flying", "Grass", "Water"] + } + ] + }, "scyther": { - "level": 81, + "level": 80, "sets": [ { "role": "Bulky Protect", "movepool": ["Bug Bite", "Dual Wingbeat", "Protect", "Tailwind"], + "abilities": ["Technician"], "teraTypes": ["Flying", "Steel"] } ] }, + "electabuzz": { + "level": 84, + "sets": [ + { + "role": "Doubles Support", + "movepool": ["Electroweb", "Follow Me", "Knock Off", "Protect", "Thunderbolt"], + "abilities": ["Static"], + "teraTypes": ["Flying", "Grass"] + } + ] + }, + "magmar": { + "level": 84, + "sets": [ + { + "role": "Doubles Support", + "movepool": ["Follow Me", "Heat Wave", "Knock Off", "Protect", "Will-O-Wisp"], + "abilities": ["Flame Body"], + "teraTypes": ["Grass"] + } + ] + }, "tauros": { - "level": 83, + "level": 82, "sets": [ { "role": "Choice Item user", - "movepool": ["Close Combat", "Double-Edge", "High Horsepower", "Lash Out", "Stone Edge"], + "movepool": ["Close Combat", "Double-Edge", "High Horsepower", "Lash Out", "Stone Edge", "Throat Chop"], + "abilities": ["Intimidate"], "teraTypes": ["Fighting", "Normal"] } ] }, "taurospaldeacombat": { - "level": 83, + "level": 82, "sets": [ { "role": "Bulky Protect", "movepool": ["Bulk Up", "Protect", "Raging Bull", "Stone Edge"], + "abilities": ["Intimidate"], "teraTypes": ["Steel"] + }, + { + "role": "Doubles Wallbreaker", + "movepool": ["Close Combat", "High Horsepower", "Iron Head", "Rock Slide", "Stone Edge", "Throat Chop"], + "abilities": ["Intimidate"], + "teraTypes": ["Dark", "Fighting", "Steel"] } ] }, "taurospaldeablaze": { - "level": 80, + "level": 79, "sets": [ { "role": "Bulky Protect", "movepool": ["Bulk Up", "Close Combat", "Protect", "Raging Bull", "Will-O-Wisp"], + "abilities": ["Intimidate"], "teraTypes": ["Fighting", "Fire", "Water"] }, { "role": "Doubles Wallbreaker", "movepool": ["Close Combat", "Flare Blitz", "Rock Slide", "Stone Edge", "Wild Charge"], + "abilities": ["Intimidate"], "teraTypes": ["Fighting", "Fire", "Water"] } ] }, "taurospaldeaaqua": { - "level": 82, + "level": 81, "sets": [ { "role": "Bulky Protect", "movepool": ["Aqua Jet", "Bulk Up", "Close Combat", "Liquidation", "Protect"], + "abilities": ["Intimidate"], "teraTypes": ["Fire", "Steel", "Water"] }, { "role": "Doubles Wallbreaker", "movepool": ["Aqua Jet", "Close Combat", "Wave Crash", "Wild Charge", "Zen Headbutt"], + "abilities": ["Intimidate"], "teraTypes": ["Fire", "Steel", "Water"] } ] }, "gyarados": { - "level": 82, + "level": 81, "sets": [ { "role": "Doubles Setup Sweeper", - "movepool": ["Dragon Dance", "Earthquake", "Protect", "Taunt", "Waterfall"], + "movepool": ["Dragon Dance", "Earthquake", "Protect", "Temper Flare", "Waterfall"], + "abilities": ["Intimidate"], "teraTypes": ["Ground"] }, { "role": "Tera Blast user", "movepool": ["Dragon Dance", "Protect", "Tera Blast", "Waterfall"], + "abilities": ["Intimidate"], "teraTypes": ["Flying"] }, { "role": "Doubles Support", - "movepool": ["Dragon Tail", "Helping Hand", "Icy Wind", "Taunt", "Thunder Wave", "Waterfall"], + "movepool": ["Helping Hand", "Icy Wind", "Taunt", "Thunder Wave", "Waterfall"], + "abilities": ["Intimidate"], "teraTypes": ["Ground", "Water"] } ] }, + "lapras": { + "level": 83, + "sets": [ + { + "role": "Doubles Support", + "movepool": ["Freeze-Dry", "Icy Wind", "Life Dew", "Muddy Water", "Protect"], + "abilities": ["Water Absorb"], + "teraTypes": ["Ground"] + } + ] + }, "ditto": { - "level": 92, + "level": 97, "sets": [ { "role": "Choice Item user", "movepool": ["Transform"], + "abilities": ["Imposter"], + "teraTypes": ["Bug", "Dark", "Dragon", "Electric", "Fairy", "Fighting", "Fire", "Flying", "Ghost", "Grass", "Ground", "Ice", "Normal", "Poison", "Psychic", "Rock", "Steel", "Water"] + }, + { + "role": "Doubles Bulky Attacker", + "movepool": ["Transform"], + "abilities": ["Imposter"], "teraTypes": ["Bug", "Dark", "Dragon", "Electric", "Fairy", "Fighting", "Fire", "Flying", "Ghost", "Grass", "Ground", "Ice", "Normal", "Poison", "Psychic", "Rock", "Steel", "Water"] } ] @@ -525,6 +764,7 @@ { "role": "Doubles Support", "movepool": ["Helping Hand", "Icy Wind", "Muddy Water", "Protect", "Scald", "Wish", "Yawn"], + "abilities": ["Water Absorb"], "teraTypes": ["Dragon", "Fire", "Ground"] } ] @@ -533,13 +773,15 @@ "level": 84, "sets": [ { - "role": "Doubles Support", - "movepool": ["Fake Tears", "Helping Hand", "Protect", "Shadow Ball", "Thunder Wave", "Thunderbolt"], - "teraTypes": ["Flying", "Ghost"] + "role": "Offensive Protect", + "movepool": ["Alluring Voice", "Helping Hand", "Protect", "Thunder Wave", "Thunderbolt"], + "abilities": ["Volt Absorb"], + "teraTypes": ["Fairy"] }, { "role": "Tera Blast user", "movepool": ["Calm Mind", "Protect", "Tera Blast", "Thunderbolt"], + "abilities": ["Volt Absorb"], "teraTypes": ["Ice"] } ] @@ -550,91 +792,102 @@ { "role": "Offensive Protect", "movepool": ["Facade", "Flare Blitz", "Protect", "Quick Attack"], + "abilities": ["Guts"], "teraTypes": ["Normal"] } ] }, "snorlax": { - "level": 83, + "level": 84, "sets": [ { "role": "Doubles Wallbreaker", "movepool": ["Crunch", "Double-Edge", "Hammer Arm", "Heat Crash", "High Horsepower"], + "abilities": ["Thick Fat"], "teraTypes": ["Fire", "Ghost", "Ground"] }, { "role": "Doubles Bulky Attacker", "movepool": ["Body Slam", "Encore", "Helping Hand", "High Horsepower", "Icy Wind", "Recycle", "Yawn"], + "abilities": ["Gluttony"], "teraTypes": ["Ghost", "Ground"] }, { "role": "Doubles Bulky Setup", "movepool": ["Body Slam", "Crunch", "Curse", "High Horsepower", "Protect", "Recycle"], + "abilities": ["Gluttony"], "teraTypes": ["Ground", "Poison"] } ] }, "articuno": { - "level": 84, + "level": 83, "sets": [ { "role": "Doubles Support", - "movepool": ["Brave Bird", "Freeze-Dry", "Ice Beam", "Protect", "Roost", "Tailwind"], + "movepool": ["Brave Bird", "Freeze-Dry", "Ice Beam", "Icy Wind", "Protect", "Roost", "Tailwind"], + "abilities": ["Pressure"], "teraTypes": ["Ground", "Steel"] } ] }, "articunogalar": { - "level": 83, + "level": 82, "sets": [ { "role": "Doubles Fast Attacker", "movepool": ["Freezing Glare", "Hurricane", "Protect", "Recover", "Tailwind"], + "abilities": ["Competitive"], "teraTypes": ["Flying", "Ground", "Steel"] } ] }, "zapdos": { - "level": 78, + "level": 77, "sets": [ { "role": "Doubles Support", "movepool": ["Hurricane", "Protect", "Roost", "Tailwind", "Thunderbolt"], + "abilities": ["Static"], "teraTypes": ["Electric", "Steel"] }, { "role": "Doubles Fast Attacker", "movepool": ["Heat Wave", "Hurricane", "Protect", "Tailwind", "Thunderbolt"], + "abilities": ["Static"], "teraTypes": ["Electric", "Fire"] } ] }, "zapdosgalar": { - "level": 79, + "level": 77, "sets": [ { "role": "Doubles Fast Attacker", "movepool": ["Brave Bird", "Close Combat", "Knock Off", "Protect", "Tailwind", "Thunderous Kick", "U-turn"], + "abilities": ["Defiant"], "teraTypes": ["Fighting"] } ] }, "moltres": { - "level": 80, + "level": 79, "sets": [ { "role": "Doubles Support", - "movepool": ["Brave Bird", "Fire Blast", "Heat Wave", "Protect", "Roost", "Tailwind"], + "movepool": ["Brave Bird", "Fire Blast", "Heat Wave", "Protect", "Scorching Sands", "Tailwind"], + "abilities": ["Flame Body"], "teraTypes": ["Fire", "Ground"] } ] }, "moltresgalar": { - "level": 76, + "level": 75, "sets": [ { "role": "Doubles Bulky Setup", "movepool": ["Fiery Wrath", "Hurricane", "Nasty Plot", "Protect", "Tailwind"], + "abilities": ["Berserk"], "teraTypes": ["Dark"] } ] @@ -644,12 +897,14 @@ "sets": [ { "role": "Choice Item user", - "movepool": ["Dragon Claw", "Extreme Speed", "Fire Punch", "Iron Head", "Low Kick", "Scale Shot", "Stomping Tantrum"], + "movepool": ["Dragon Claw", "Extreme Speed", "Fire Punch", "Iron Head", "Low Kick", "Stomping Tantrum"], + "abilities": ["Inner Focus"], "teraTypes": ["Normal"] }, { "role": "Tera Blast user", - "movepool": ["Draco Meteor", "Fire Punch", "Low Kick", "Roost", "Tailwind", "Tera Blast"], + "movepool": ["Draco Meteor", "Fire Punch", "Low Kick", "Tailwind", "Tera Blast"], + "abilities": ["Inner Focus"], "teraTypes": ["Flying"] } ] @@ -659,8 +914,15 @@ "sets": [ { "role": "Doubles Fast Attacker", - "movepool": ["Aura Sphere", "Dark Pulse", "Fire Blast", "Nasty Plot", "Protect", "Psystrike", "Recover"], + "movepool": ["Aura Sphere", "Dark Pulse", "Fire Blast", "Protect", "Psystrike"], + "abilities": ["Unnerve"], "teraTypes": ["Dark", "Fighting", "Fire", "Psychic"] + }, + { + "role": "Doubles Bulky Setup", + "movepool": ["Aura Sphere", "Nasty Plot", "Psystrike", "Recover"], + "abilities": ["Unnerve"], + "teraTypes": ["Fighting"] } ] }, @@ -669,22 +931,42 @@ "sets": [ { "role": "Doubles Support", - "movepool": ["Encore", "Helping Hand", "Pollen Puff", "Tailwind", "Thunder Wave", "Toxic Spikes", "Will-O-Wisp"], + "movepool": ["Coaching", "Encore", "Pollen Puff", "Tailwind", "Thunder Wave", "Will-O-Wisp"], + "abilities": ["Synchronize"], "teraTypes": ["Fairy", "Steel"] }, { "role": "Doubles Setup Sweeper", "movepool": ["Baton Pass", "Fire Blast", "Nasty Plot", "Pollen Puff", "Psychic"], + "abilities": ["Synchronize"], + "teraTypes": ["Fairy", "Steel"] + }, + { + "role": "Doubles Bulky Attacker", + "movepool": ["Coaching", "Imprison", "Pollen Puff", "Transform"], + "abilities": ["Synchronize"], "teraTypes": ["Fairy", "Steel"] } ] }, + "meganium": { + "level": 91, + "sets": [ + { + "role": "Doubles Bulky Attacker", + "movepool": ["Encore", "Energy Ball", "Heal Pulse", "Knock Off", "Leech Seed"], + "abilities": ["Overgrow"], + "teraTypes": ["Poison", "Steel", "Water"] + } + ] + }, "typhlosion": { - "level": 80, + "level": 79, "sets": [ { "role": "Choice Item user", - "movepool": ["Eruption", "Fire Blast", "Focus Blast", "Heat Wave"], + "movepool": ["Eruption", "Fire Blast", "Heat Wave", "Scorching Sands"], + "abilities": ["Flash Fire"], "teraTypes": ["Fire"] } ] @@ -695,21 +977,41 @@ { "role": "Choice Item user", "movepool": ["Eruption", "Focus Blast", "Heat Wave", "Shadow Ball"], + "abilities": ["Blaze", "Frisk"], "teraTypes": ["Fire"] } ] }, + "feraligatr": { + "level": 82, + "sets": [ + { + "role": "Offensive Protect", + "movepool": ["Dragon Dance", "Ice Punch", "Liquidation", "Protect"], + "abilities": ["Sheer Force"], + "teraTypes": ["Fire", "Water"] + }, + { + "role": "Doubles Setup Sweeper", + "movepool": ["Aqua Jet", "Ice Punch", "Liquidation", "Swords Dance"], + "abilities": ["Sheer Force"], + "teraTypes": ["Dragon", "Water"] + } + ] + }, "furret": { - "level": 95, + "level": 98, "sets": [ { "role": "Doubles Setup Sweeper", "movepool": ["Double-Edge", "Knock Off", "Protect", "Tidy Up"], + "abilities": ["Frisk"], "teraTypes": ["Normal"] }, { "role": "Doubles Support", "movepool": ["Body Slam", "Follow Me", "Helping Hand", "Knock Off", "Protect", "U-turn"], + "abilities": ["Frisk"], "teraTypes": ["Ghost"] } ] @@ -720,76 +1022,107 @@ { "role": "Offensive Protect", "movepool": ["Hurricane", "Hyper Voice", "Protect", "Tailwind"], + "abilities": ["Tinted Lens"], "teraTypes": ["Flying"] } ] }, "ariados": { - "level": 95, + "level": 100, "sets": [ { "role": "Doubles Support", "movepool": ["Megahorn", "Protect", "Rage Powder", "Sticky Web"], + "abilities": ["Insomnia", "Swarm"], "teraTypes": ["Dark", "Steel", "Water"] } ] }, - "ampharos": { + "lanturn": { "level": 87, "sets": [ { "role": "Doubles Support", - "movepool": ["Dragon Tail", "Electroweb", "Focus Blast", "Helping Hand", "Thunder Wave", "Thunderbolt"], + "movepool": ["Electroweb", "Protect", "Scald", "Thunderbolt"], + "abilities": ["Volt Absorb"], + "teraTypes": ["Flying"] + }, + { + "role": "Doubles Bulky Attacker", + "movepool": ["Electroweb", "Ice Beam", "Scald", "Volt Switch"], + "abilities": ["Volt Absorb"], "teraTypes": ["Flying"] } ] }, - "azumarill": { - "level": 82, + "ampharos": { + "level": 86, "sets": [ { - "role": "Doubles Wallbreaker", - "movepool": ["Aqua Jet", "Ice Spinner", "Knock Off", "Liquidation", "Play Rough", "Superpower"], - "teraTypes": ["Water"] + "role": "Doubles Support", + "movepool": ["Dragon Tail", "Electroweb", "Focus Blast", "Helping Hand", "Thunder Wave", "Thunderbolt"], + "abilities": ["Static"], + "teraTypes": ["Flying"] + } + ] + }, + "bellossom": { + "level": 87, + "sets": [ + { + "role": "Doubles Bulky Setup", + "movepool": ["Baton Pass", "Giga Drain", "Protect", "Quiver Dance", "Strength Sap"], + "abilities": ["Healer"], + "teraTypes": ["Poison", "Water"] + } + ] + }, + "azumarill": { + "level": 82, + "sets": [ + { + "role": "Doubles Wallbreaker", + "movepool": ["Aqua Jet", "Ice Spinner", "Knock Off", "Liquidation", "Play Rough", "Superpower"], + "abilities": ["Huge Power"], + "teraTypes": ["Water"] } ] }, "sudowoodo": { - "level": 92, + "level": 94, "sets": [ { "role": "Doubles Wallbreaker", "movepool": ["Head Smash", "High Horsepower", "Protect", "Sucker Punch", "Wood Hammer"], - "teraTypes": ["Grass", "Steel"] + "abilities": ["Rock Head"], + "teraTypes": ["Grass"] } ] }, "politoed": { - "level": 84, + "level": 82, "sets": [ { "role": "Choice Item user", "movepool": ["Hydro Pump", "Ice Beam", "Muddy Water", "Weather Ball"], + "abilities": ["Drizzle"], "teraTypes": ["Water"] }, { "role": "Doubles Support", "movepool": ["Encore", "Helping Hand", "Hypnosis", "Icy Wind", "Muddy Water"], + "abilities": ["Drizzle"], "teraTypes": ["Grass", "Steel"] } ] }, "jumpluff": { - "level": 89, + "level": 93, "sets": [ { "role": "Doubles Support", - "movepool": ["Encore", "Helping Hand", "Pollen Puff", "Rage Powder", "Sleep Powder", "Strength Sap", "Tailwind"], - "teraTypes": ["Steel"] - }, - { - "role": "Bulky Protect", - "movepool": ["Acrobatics", "Protect", "Sleep Powder", "Tailwind"], + "movepool": ["Acrobatics", "Encore", "Helping Hand", "Pollen Puff", "Rage Powder", "Sleep Powder", "Strength Sap", "Tailwind"], + "abilities": ["Infiltrator"], "teraTypes": ["Steel"] } ] @@ -800,16 +1133,18 @@ { "role": "Offensive Protect", "movepool": ["Dazzling Gleam", "Earth Power", "Leaf Storm", "Protect", "Sludge Bomb"], + "abilities": ["Chlorophyll"], "teraTypes": ["Fairy", "Ground", "Poison"] } ] }, "quagsire": { - "level": 89, + "level": 91, "sets": [ { "role": "Doubles Bulky Attacker", - "movepool": ["Helping Hand", "High Horsepower", "Liquidation", "Stealth Rock", "Yawn"], + "movepool": ["Helping Hand", "High Horsepower", "Icy Wind", "Liquidation", "Recover", "Yawn"], + "abilities": ["Unaware"], "teraTypes": ["Fire", "Poison", "Steel"] } ] @@ -818,8 +1153,9 @@ "level": 87, "sets": [ { - "role": "Doubles Support", + "role": "Doubles Bulky Attacker", "movepool": ["Gunk Shot", "Helping Hand", "High Horsepower", "Recover", "Toxic Spikes"], + "abilities": ["Unaware", "Water Absorb"], "teraTypes": ["Flying", "Ground", "Steel"] } ] @@ -829,7 +1165,8 @@ "sets": [ { "role": "Offensive Protect", - "movepool": ["Dazzling Gleam", "Protect", "Psychic", "Shadow Ball"], + "movepool": ["Alluring Voice", "Dazzling Gleam", "Protect", "Psychic", "Shadow Ball"], + "abilities": ["Magic Bounce"], "teraTypes": ["Fairy"] } ] @@ -840,31 +1177,35 @@ { "role": "Doubles Support", "movepool": ["Foul Play", "Helping Hand", "Moonlight", "Snarl", "Thunder Wave"], + "abilities": ["Synchronize"], "teraTypes": ["Poison"] } ] }, "murkrow": { - "level": 88, + "level": 89, "sets": [ { "role": "Doubles Support", "movepool": ["Brave Bird", "Haze", "Protect", "Tailwind", "Taunt"], + "abilities": ["Prankster"], "teraTypes": ["Ghost", "Steel"] } ] }, "slowking": { - "level": 88, + "level": 89, "sets": [ { "role": "Doubles Support", - "movepool": ["Chilly Reception", "Fire Blast", "Heal Pulse", "Helping Hand", "Psyshock", "Scald", "Slack Off", "Trick Room"], + "movepool": ["Fire Blast", "Heal Pulse", "Helping Hand", "Psyshock", "Scald", "Trick Room"], + "abilities": ["Regenerator"], "teraTypes": ["Dark", "Grass", "Steel"] }, { "role": "Doubles Wallbreaker", "movepool": ["Fire Blast", "Hydro Pump", "Ice Beam", "Psyshock", "Scald", "Trick Room"], + "abilities": ["Regenerator"], "teraTypes": ["Fire", "Water"] } ] @@ -875,6 +1216,7 @@ { "role": "Doubles Wallbreaker", "movepool": ["Fire Blast", "Protect", "Psyshock", "Sludge Bomb", "Trick Room"], + "abilities": ["Regenerator"], "teraTypes": ["Dark", "Poison"] } ] @@ -885,26 +1227,46 @@ { "role": "Choice Item user", "movepool": ["Body Press", "Explosion", "Iron Head", "Lunge"], + "abilities": ["Sturdy"], + "teraTypes": ["Fighting", "Fire"] + }, + { + "role": "Doubles Bulky Setup", + "movepool": ["Body Press", "Iron Defense", "Iron Head", "Rest", "Thunder Wave"], + "abilities": ["Sturdy"], "teraTypes": ["Fighting", "Fire"] } ] }, + "granbull": { + "level": 88, + "sets": [ + { + "role": "Doubles Bulky Attacker", + "movepool": ["Close Combat", "Play Rough", "Stomping Tantrum", "Super Fang"], + "abilities": ["Intimidate"], + "teraTypes": ["Steel"] + } + ] + }, "qwilfish": { "level": 87, "sets": [ { "role": "Doubles Support", "movepool": ["Flip Turn", "Gunk Shot", "Icy Wind", "Taunt", "Thunder Wave", "Toxic Spikes"], + "abilities": ["Intimidate"], "teraTypes": ["Grass"] } ] }, "qwilfishhisui": { - "level": 84, + "level": 83, "sets": [ { "role": "Doubles Bulky Attacker", - "movepool": ["Crunch", "Gunk Shot", "Icy Wind", "Toxic Spikes"], + "movepool": ["Crunch", "Gunk Shot", "Icy Wind", "Throat Chop", "Toxic Spikes"], + "abilities": ["Intimidate"], "teraTypes": ["Flying"] } ] @@ -914,27 +1276,31 @@ "sets": [ { "role": "Doubles Fast Attacker", - "movepool": ["Crunch", "Gunk Shot", "Liquidation", "Protect", "Swords Dance"], + "movepool": ["Crunch", "Gunk Shot", "Liquidation", "Protect", "Swords Dance", "Throat Chop"], + "abilities": ["Intimidate"], "teraTypes": ["Dark", "Flying", "Poison", "Water"] } ] }, "scizor": { - "level": 81, + "level": 80, "sets": [ { "role": "Doubles Support", "movepool": ["Bullet Punch", "Close Combat", "Tailwind", "U-turn"], + "abilities": ["Technician"], "teraTypes": ["Fire", "Water"] }, { "role": "Doubles Bulky Setup", "movepool": ["Bug Bite", "Bullet Punch", "Close Combat", "Protect", "Swords Dance"], + "abilities": ["Technician"], "teraTypes": ["Steel"] }, { "role": "Choice Item user", "movepool": ["Bug Bite", "Bullet Punch", "Close Combat", "Knock Off"], + "abilities": ["Technician"], "teraTypes": ["Fighting", "Steel", "Water"] } ] @@ -945,21 +1311,24 @@ { "role": "Doubles Wallbreaker", "movepool": ["Close Combat", "Facade", "Knock Off", "Protect"], + "abilities": ["Guts"], "teraTypes": ["Normal"] }, { "role": "Choice Item user", "movepool": ["Close Combat", "Knock Off", "Megahorn", "Rock Slide"], + "abilities": ["Moxie"], "teraTypes": ["Bug", "Fighting", "Rock"] } ] }, "magcargo": { - "level": 91, + "level": 93, "sets": [ { "role": "Doubles Setup Sweeper", "movepool": ["Heat Wave", "Power Gem", "Protect", "Shell Smash"], + "abilities": ["Weak Armor"], "teraTypes": ["Fairy", "Fire", "Grass"] } ] @@ -970,22 +1339,53 @@ { "role": "Doubles Support", "movepool": ["Brave Bird", "Fake Out", "Helping Hand", "Icy Wind", "Tailwind"], - "teraTypes": ["Steel"] + "abilities": ["Insomnia", "Vital Spirit"], + "teraTypes": ["Ground", "Steel"] }, { "role": "Doubles Wallbreaker", "movepool": ["Brave Bird", "Drill Run", "Foul Play", "Ice Shard", "Ice Spinner"], + "abilities": ["Hustle"], "teraTypes": ["Dark", "Flying", "Ground", "Ice"] } ] }, + "skarmory": { + "level": 85, + "sets": [ + { + "role": "Doubles Bulky Setup", + "movepool": ["Body Press", "Brave Bird", "Iron Defense", "Protect", "Roost", "Tailwind"], + "abilities": ["Sturdy"], + "teraTypes": ["Fighting"] + } + ] + }, "houndoom": { - "level": 87, + "level": 86, "sets": [ { "role": "Doubles Fast Attacker", "movepool": ["Dark Pulse", "Heat Wave", "Nasty Plot", "Protect", "Sucker Punch"], - "teraTypes": ["Dark", "Fire", "Ghost", "Water"] + "abilities": ["Flash Fire", "Unnerve"], + "teraTypes": ["Dark", "Fire", "Ghost", "Grass"] + } + ] + }, + "kingdra": { + "level": 85, + "sets": [ + { + "role": "Offensive Protect", + "movepool": ["Draco Meteor", "Muddy Water", "Protect", "Rain Dance"], + "abilities": ["Swift Swim"], + "teraTypes": ["Water"] + }, + { + "role": "Doubles Setup Sweeper", + "movepool": ["Draco Meteor", "Protect", "Rain Dance", "Wave Crash"], + "abilities": ["Swift Swim"], + "teraTypes": ["Water"] } ] }, @@ -995,41 +1395,209 @@ { "role": "Doubles Support", "movepool": ["High Horsepower", "Ice Shard", "Knock Off", "Rapid Spin", "Stone Edge"], + "abilities": ["Sturdy"], "teraTypes": ["Dragon", "Water"] } ] }, + "porygon2": { + "level": 82, + "sets": [ + { + "role": "Doubles Support", + "movepool": ["Ice Beam", "Recover", "Thunderbolt", "Trick Room"], + "abilities": ["Download"], + "teraTypes": ["Electric", "Ghost"] + }, + { + "role": "Doubles Bulky Attacker", + "movepool": ["Icy Wind", "Recover", "Thunderbolt", "Tri Attack"], + "abilities": ["Download"], + "teraTypes": ["Electric", "Ghost"] + }, + { + "role": "Tera Blast user", + "movepool": ["Recover", "Shadow Ball", "Tera Blast", "Trick Room"], + "abilities": ["Download"], + "teraTypes": ["Fairy", "Fighting"] + } + ] + }, + "smeargle": { + "level": 100, + "sets": [ + { + "role": "Doubles Setup Sweeper", + "movepool": ["Baton Pass", "No Retreat", "Population Bomb", "Spiky Shield"], + "abilities": ["Technician"], + "teraTypes": ["Ghost"] + }, + { + "role": "Doubles Support", + "movepool": ["Decorate", "Fake Out", "Follow Me", "Tailwind"], + "abilities": ["Technician"], + "teraTypes": ["Ghost"] + } + ] + }, + "hitmontop": { + "level": 88, + "sets": [ + { + "role": "Doubles Support", + "movepool": ["Close Combat", "Coaching", "Fake Out", "Helping Hand", "Sucker Punch", "Triple Axel", "Wide Guard"], + "abilities": ["Intimidate"], + "teraTypes": ["Steel"] + } + ] + }, "blissey": { - "level": 91, + "level": 96, "sets": [ { "role": "Doubles Support", - "movepool": ["Heal Pulse", "Helping Hand", "Seismic Toss", "Soft-Boiled", "Thunder Wave"], + "movepool": ["Heal Pulse", "Helping Hand", "Hyper Voice", "Protect", "Seismic Toss", "Soft-Boiled", "Thunder Wave"], + "abilities": ["Healer"], "teraTypes": ["Fairy", "Ghost", "Poison"] } ] }, + "raikou": { + "level": 81, + "sets": [ + { + "role": "Offensive Protect", + "movepool": ["Calm Mind", "Protect", "Scald", "Shadow Ball", "Thunderbolt", "Volt Switch"], + "abilities": ["Inner Focus"], + "teraTypes": ["Water"] + }, + { + "role": "Bulky Protect", + "movepool": ["Electroweb", "Protect", "Scald", "Snarl", "Thunder Wave", "Thunderbolt", "Volt Switch"], + "abilities": ["Inner Focus"], + "teraTypes": ["Water"] + } + ] + }, + "entei": { + "level": 77, + "sets": [ + { + "role": "Choice Item user", + "movepool": ["Extreme Speed", "Flare Blitz", "Sacred Fire", "Stomping Tantrum"], + "abilities": ["Inner Focus"], + "teraTypes": ["Normal"] + } + ] + }, + "suicune": { + "level": 80, + "sets": [ + { + "role": "Doubles Support", + "movepool": ["Ice Beam", "Protect", "Scald", "Snarl", "Tailwind"], + "abilities": ["Inner Focus"], + "teraTypes": ["Dragon", "Grass"] + }, + { + "role": "Bulky Protect", + "movepool": ["Calm Mind", "Ice Beam", "Protect", "Scald"], + "abilities": ["Inner Focus"], + "teraTypes": ["Dragon", "Grass"] + } + ] + }, "tyranitar": { "level": 81, "sets": [ { "role": "Doubles Bulky Setup", "movepool": ["Dragon Dance", "High Horsepower", "Knock Off", "Protect", "Rock Slide", "Stone Edge"], + "abilities": ["Sand Stream"], "teraTypes": ["Ghost", "Rock", "Steel"] }, { "role": "Doubles Support", - "movepool": ["Fire Blast", "High Horsepower", "Icy Wind", "Knock Off", "Protect", "Rock Slide", "Stone Edge"], + "movepool": ["Fire Blast", "High Horsepower", "Icy Wind", "Knock Off", "Protect", "Rock Slide", "Stone Edge", "Thunder Wave"], + "abilities": ["Sand Stream"], "teraTypes": ["Flying", "Steel"] } ] }, + "lugia": { + "level": 72, + "sets": [ + { + "role": "Bulky Protect", + "movepool": ["Aeroblast", "Calm Mind", "Earth Power", "Recover"], + "abilities": ["Multiscale"], + "teraTypes": ["Ground"] + } + ] + }, + "hooh": { + "level": 72, + "sets": [ + { + "role": "Doubles Support", + "movepool": ["Brave Bird", "Earth Power", "Protect", "Recover", "Sacred Fire", "Tailwind"], + "abilities": ["Regenerator"], + "teraTypes": ["Ground"] + } + ] + }, + "sceptile": { + "level": 88, + "sets": [ + { + "role": "Doubles Support", + "movepool": ["Focus Blast", "Leaf Storm", "Protect", "Shed Tail"], + "abilities": ["Overgrow"], + "teraTypes": ["Steel", "Water"] + }, + { + "role": "Offensive Protect", + "movepool": ["Breaking Swipe", "Focus Blast", "Leaf Storm", "Protect"], + "abilities": ["Unburden"], + "teraTypes": ["Steel", "Water"] + } + ] + }, + "blaziken": { + "level": 79, + "sets": [ + { + "role": "Offensive Protect", + "movepool": ["Close Combat", "Knock Off", "Overheat", "Protect", "Stone Edge"], + "abilities": ["Speed Boost"], + "teraTypes": ["Stellar"] + }, + { + "role": "Doubles Wallbreaker", + "movepool": ["Close Combat", "Heat Wave", "Protect", "Vacuum Wave"], + "abilities": ["Speed Boost"], + "teraTypes": ["Fighting"] + } + ] + }, + "swampert": { + "level": 82, + "sets": [ + { + "role": "Doubles Bulky Attacker", + "movepool": ["Flip Turn", "High Horsepower", "Ice Beam", "Icy Wind", "Knock Off", "Muddy Water"], + "abilities": ["Torrent"], + "teraTypes": ["Fire", "Steel"] + } + ] + }, "mightyena": { - "level": 93, + "level": 94, "sets": [ { "role": "Doubles Setup Sweeper", - "movepool": ["Crunch", "Howl", "Play Rough", "Sucker Punch"], + "movepool": ["Crunch", "Howl", "Play Rough", "Sucker Punch", "Throat Chop"], + "abilities": ["Intimidate"], "teraTypes": ["Dark", "Fairy"] } ] @@ -1039,12 +1607,14 @@ "sets": [ { "role": "Offensive Protect", - "movepool": ["Energy Ball", "Hydro Pump", "Protect", "Rain Dance"], + "movepool": ["Energy Ball", "Muddy Water", "Protect", "Rain Dance"], + "abilities": ["Swift Swim"], "teraTypes": ["Water"] }, { "role": "Doubles Support", "movepool": ["Fake Out", "Hydro Pump", "Ice Beam", "Icy Wind", "Leaf Storm"], + "abilities": ["Swift Swim"], "teraTypes": ["Poison", "Steel"] } ] @@ -1055,11 +1625,13 @@ { "role": "Doubles Fast Attacker", "movepool": ["Fake Out", "Knock Off", "Leaf Blade", "Tailwind"], + "abilities": ["Wind Rider"], "teraTypes": ["Ghost"] }, { "role": "Offensive Protect", "movepool": ["Knock Off", "Leaf Blade", "Protect", "Tailwind"], + "abilities": ["Wind Rider"], "teraTypes": ["Ghost"] } ] @@ -1069,67 +1641,86 @@ "sets": [ { "role": "Doubles Bulky Attacker", - "movepool": ["Hurricane", "Hydro Pump", "Roost", "Tailwind", "Wide Guard"], - "teraTypes": ["Ground"] + "movepool": ["Hurricane", "Hydro Pump", "Muddy Water", "Protect", "Tailwind", "Wide Guard"], + "abilities": ["Drizzle"], + "teraTypes": ["Ground", "Steel"] } ] }, "gardevoir": { - "level": 84, + "level": 83, "sets": [ { "role": "Choice Item user", "movepool": ["Dazzling Gleam", "Moonblast", "Mystical Fire", "Psychic", "Psyshock", "Trick"], + "abilities": ["Trace"], "teraTypes": ["Fairy", "Fire", "Steel"] } ] }, "masquerain": { - "level": 88, + "level": 90, "sets": [ { "role": "Doubles Setup Sweeper", "movepool": ["Baton Pass", "Bug Buzz", "Hurricane", "Hydro Pump", "Quiver Dance"], + "abilities": ["Intimidate"], "teraTypes": ["Water"] }, { "role": "Doubles Support", - "movepool": ["Bug Buzz", "Hurricane", "Sticky Web", "Tailwind"], + "movepool": ["Bug Buzz", "Hurricane", "Protect", "Tailwind"], + "abilities": ["Intimidate"], "teraTypes": ["Ground"] } ] }, "breloom": { - "level": 83, + "level": 84, "sets": [ { "role": "Doubles Fast Attacker", "movepool": ["Bullet Seed", "Close Combat", "Mach Punch", "Protect", "Rock Tomb", "Spore"], + "abilities": ["Technician"], "teraTypes": ["Fighting"] } ] }, + "vigoroth": { + "level": 91, + "sets": [ + { + "role": "Doubles Bulky Attacker", + "movepool": ["After You", "Double-Edge", "Encore", "Icy Wind", "Knock Off", "Slack Off", "Thunder Wave"], + "abilities": ["Vital Spirit"], + "teraTypes": ["Ghost"] + } + ] + }, "slaking": { - "level": 87, + "level": 88, "sets": [ { "role": "Doubles Wallbreaker", - "movepool": ["Body Slam", "Giga Impact", "High Horsepower", "Knock Off"], + "movepool": ["Double-Edge", "Giga Impact", "High Horsepower", "Knock Off"], + "abilities": ["Truant"], "teraTypes": ["Ghost", "Normal"] } ] }, "hariyama": { - "level": 86, + "level": 85, "sets": [ { "role": "Doubles Wallbreaker", "movepool": ["Bullet Punch", "Close Combat", "Facade", "Fake Out", "Headlong Rush", "Knock Off"], + "abilities": ["Guts"], "teraTypes": ["Normal"] }, { "role": "Doubles Bulky Attacker", "movepool": ["Bullet Punch", "Close Combat", "Fake Out", "Feint", "Heavy Slam", "Knock Off"], + "abilities": ["Thick Fat"], "teraTypes": ["Steel"] } ] @@ -1140,6 +1731,7 @@ { "role": "Doubles Support", "movepool": ["Disable", "Encore", "Fake Out", "Foul Play", "Knock Off", "Quash", "Recover", "Will-O-Wisp"], + "abilities": ["Prankster"], "teraTypes": ["Steel"] } ] @@ -1150,31 +1742,63 @@ { "role": "Choice Item user", "movepool": ["Bullet Punch", "Close Combat", "Ice Punch", "Poison Jab", "Zen Headbutt"], + "abilities": ["Pure Power"], "teraTypes": ["Fighting", "Fire"] }, { "role": "Doubles Fast Attacker", "movepool": ["Bullet Punch", "Close Combat", "Ice Punch", "Protect", "Zen Headbutt"], + "abilities": ["Pure Power"], "teraTypes": ["Fighting", "Fire"] } ] }, - "volbeat": { + "plusle": { + "level": 92, + "sets": [ + { + "role": "Doubles Fast Attacker", + "movepool": ["Alluring Voice", "Nasty Plot", "Protect", "Thunderbolt"], + "abilities": ["Lightning Rod"], + "teraTypes": ["Flying"] + }, + { + "role": "Doubles Support", + "movepool": ["Encore", "Nuzzle", "Super Fang", "Thunderbolt"], + "abilities": ["Lightning Rod"], + "teraTypes": ["Flying"] + } + ] + }, + "minun": { "level": 91, + "sets": [ + { + "role": "Doubles Support", + "movepool": ["Encore", "Nuzzle", "Super Fang", "Thunderbolt"], + "abilities": ["Volt Absorb"], + "teraTypes": ["Flying"] + } + ] + }, + "volbeat": { + "level": 83, "sets": [ { "role": "Doubles Support", "movepool": ["Encore", "Lunge", "Tailwind", "Thunder Wave"], + "abilities": ["Prankster"], "teraTypes": ["Steel", "Water"] } ] }, "illumise": { - "level": 88, + "level": 84, "sets": [ { "role": "Doubles Support", "movepool": ["Bug Buzz", "Encore", "Tailwind", "Thunder Wave"], + "abilities": ["Prankster"], "teraTypes": ["Steel", "Water"] } ] @@ -1185,6 +1809,7 @@ { "role": "Doubles Bulky Attacker", "movepool": ["Encore", "Gunk Shot", "Helping Hand", "Knock Off", "Poison Gas", "Thunder Wave", "Toxic Spikes"], + "abilities": ["Gluttony"], "teraTypes": ["Dark"] } ] @@ -1195,51 +1820,68 @@ { "role": "Doubles Support", "movepool": ["Earth Power", "Heat Wave", "Helping Hand", "Protect", "Stealth Rock"], + "abilities": ["Solid Rock"], "teraTypes": ["Water"] } ] }, "torkoal": { - "level": 85, + "level": 86, "sets": [ { "role": "Doubles Bulky Attacker", "movepool": ["Body Press", "Fire Blast", "Heat Wave", "Protect", "Solar Beam", "Will-O-Wisp"], + "abilities": ["Drought"], "teraTypes": ["Dragon", "Grass"] } ] }, "grumpig": { - "level": 90, + "level": 91, "sets": [ { "role": "Doubles Setup Sweeper", "movepool": ["Dazzling Gleam", "Earth Power", "Nasty Plot", "Psychic", "Psyshock"], + "abilities": ["Thick Fat"], "teraTypes": ["Fairy", "Ground"] } ] }, + "flygon": { + "level": 83, + "sets": [ + { + "role": "Doubles Support", + "movepool": ["Breaking Swipe", "Earth Power", "Protect", "Tailwind"], + "abilities": ["Levitate"], + "teraTypes": ["Steel"] + } + ] + }, "cacturne": { "level": 91, "sets": [ { "role": "Offensive Protect", "movepool": ["Knock Off", "Leaf Storm", "Spiky Shield", "Sucker Punch"], + "abilities": ["Water Absorb"], "teraTypes": ["Dark", "Poison"] } ] }, "altaria": { - "level": 89, + "level": 91, "sets": [ { "role": "Doubles Support", "movepool": ["Brave Bird", "Draco Meteor", "Fire Blast", "Helping Hand", "Roost", "Tailwind", "Will-O-Wisp"], + "abilities": ["Cloud Nine"], "teraTypes": ["Steel"] }, { "role": "Bulky Protect", "movepool": ["Brave Bird", "Protect", "Roost", "Will-O-Wisp"], + "abilities": ["Cloud Nine"], "teraTypes": ["Steel"] } ] @@ -1250,16 +1892,18 @@ { "role": "Offensive Protect", "movepool": ["Close Combat", "Facade", "Knock Off", "Protect", "Quick Attack"], + "abilities": ["Toxic Boost"], "teraTypes": ["Normal"] } ] }, "seviper": { - "level": 94, + "level": 95, "sets": [ { "role": "Offensive Protect", "movepool": ["Flamethrower", "Glare", "Gunk Shot", "Knock Off", "Protect"], + "abilities": ["Infiltrator"], "teraTypes": ["Dark", "Fire", "Poison"] } ] @@ -1269,22 +1913,25 @@ "sets": [ { "role": "Doubles Bulky Attacker", - "movepool": ["Helping Hand", "High Horsepower", "Icy Wind", "Muddy Water", "Stealth Rock"], + "movepool": ["Helping Hand", "High Horsepower", "Icy Wind", "Muddy Water", "Protect"], + "abilities": ["Oblivious"], "teraTypes": ["Fire", "Steel"] } ] }, "crawdaunt": { - "level": 85, + "level": 86, "sets": [ { "role": "Choice Item user", "movepool": ["Aqua Jet", "Close Combat", "Crabhammer", "Knock Off"], + "abilities": ["Adaptability"], "teraTypes": ["Fighting"] }, { "role": "Doubles Wallbreaker", "movepool": ["Aqua Jet", "Crabhammer", "Knock Off", "Protect"], + "abilities": ["Adaptability"], "teraTypes": ["Water"] } ] @@ -1292,44 +1939,43 @@ "milotic": { "level": 82, "sets": [ - { - "role": "Bulky Protect", - "movepool": ["Coil", "Hypnosis", "Recover", "Scald"], - "teraTypes": ["Dragon", "Grass", "Steel"] - }, { "role": "Doubles Support", "movepool": ["Dragon Tail", "Icy Wind", "Protect", "Recover", "Scald"], + "abilities": ["Competitive"], "teraTypes": ["Dragon", "Grass", "Steel"] } ] }, "banette": { - "level": 92, + "level": 94, "sets": [ { "role": "Doubles Wallbreaker", "movepool": ["Gunk Shot", "Poltergeist", "Protect", "Shadow Sneak"], + "abilities": ["Frisk"], "teraTypes": ["Ghost", "Poison"] } ] }, "tropius": { - "level": 92, + "level": 94, "sets": [ { "role": "Doubles Support", - "movepool": ["Helping Hand", "Hurricane", "Leaf Storm", "Tailwind", "Wide Guard"], + "movepool": ["Helping Hand", "Hurricane", "Leaf Storm", "Protect", "Tailwind", "Wide Guard"], + "abilities": ["Harvest"], "teraTypes": ["Steel"] } ] }, "chimecho": { - "level": 94, + "level": 95, "sets": [ { "role": "Doubles Support", - "movepool": ["Disable", "Encore", "Helping Hand", "Icy Wind", "Knock Off", "Protect", "Psychic", "Snarl", "Taunt"], + "movepool": ["Encore", "Heal Pulse", "Helping Hand", "Icy Wind", "Protect", "Psychic", "Snarl", "Thunder Wave"], + "abilities": ["Levitate"], "teraTypes": ["Dark", "Steel"] } ] @@ -1340,6 +1986,7 @@ { "role": "Doubles Support", "movepool": ["Disable", "Foul Play", "Freeze-Dry", "Helping Hand", "Icy Wind", "Protect"], + "abilities": ["Inner Focus"], "teraTypes": ["Poison", "Steel"] } ] @@ -1349,7 +1996,8 @@ "sets": [ { "role": "Doubles Support", - "movepool": ["Charm", "Flip Turn", "Hydro Pump", "Icy Wind"], + "movepool": ["Charm", "Endeavor", "Hydro Pump", "Icy Wind"], + "abilities": ["Swift Swim"], "teraTypes": ["Dragon"] } ] @@ -1360,31 +2008,125 @@ { "role": "Doubles Fast Attacker", "movepool": ["Draco Meteor", "Dual Wingbeat", "Fire Blast", "Protect", "Tailwind"], + "abilities": ["Intimidate"], "teraTypes": ["Dragon", "Fire", "Flying", "Steel"] } ] }, + "metagross": { + "level": 81, + "sets": [ + { + "role": "Doubles Bulky Attacker", + "movepool": ["Bullet Punch", "Hammer Arm", "Heavy Slam", "Knock Off", "Psychic Fangs", "Stomping Tantrum"], + "abilities": ["Clear Body"], + "teraTypes": ["Dark", "Steel", "Water"] + }, + { + "role": "Doubles Bulky Setup", + "movepool": ["Agility", "Brick Break", "Heavy Slam", "Knock Off", "Protect", "Psychic Fangs"], + "abilities": ["Clear Body"], + "teraTypes": ["Dragon"] + } + ] + }, + "regirock": { + "level": 83, + "sets": [ + { + "role": "Doubles Bulky Setup", + "movepool": ["Body Press", "Curse", "Iron Defense", "Rest", "Rock Slide", "Stone Edge"], + "abilities": ["Clear Body"], + "teraTypes": ["Fighting"] + }, + { + "role": "Doubles Bulky Attacker", + "movepool": ["Body Press", "Iron Defense", "Rock Slide", "Stone Edge", "Thunder Wave"], + "abilities": ["Clear Body"], + "teraTypes": ["Fighting"] + } + ] + }, + "regice": { + "level": 84, + "sets": [ + { + "role": "Doubles Bulky Attacker", + "movepool": ["Blizzard", "Icy Wind", "Protect", "Thunderbolt"], + "abilities": ["Clear Body"], + "teraTypes": ["Electric", "Water"] + } + ] + }, + "registeel": { + "level": 78, + "sets": [ + { + "role": "Doubles Bulky Setup", + "movepool": ["Body Press", "Iron Defense", "Iron Head", "Thunder Wave"], + "abilities": ["Clear Body"], + "teraTypes": ["Fighting"] + } + ] + }, + "latias": { + "level": 80, + "sets": [ + { + "role": "Doubles Bulky Attacker", + "movepool": ["Draco Meteor", "Mist Ball", "Protect", "Recover", "Tailwind"], + "abilities": ["Levitate"], + "teraTypes": ["Steel"] + }, + { + "role": "Offensive Protect", + "movepool": ["Aura Sphere", "Calm Mind", "Dragon Pulse", "Mist Ball", "Protect"], + "abilities": ["Levitate"], + "teraTypes": ["Steel"] + } + ] + }, + "latios": { + "level": 79, + "sets": [ + { + "role": "Doubles Bulky Attacker", + "movepool": ["Draco Meteor", "Luster Purge", "Protect", "Tailwind"], + "abilities": ["Levitate"], + "teraTypes": ["Steel"] + }, + { + "role": "Doubles Wallbreaker", + "movepool": ["Aura Sphere", "Draco Meteor", "Luster Purge", "Protect", "Trick"], + "abilities": ["Levitate"], + "teraTypes": ["Dragon", "Steel"] + } + ] + }, "kyogre": { "level": 65, "sets": [ { "role": "Choice Item user", "movepool": ["Ice Beam", "Origin Pulse", "Thunder", "Water Spout"], + "abilities": ["Drizzle"], "teraTypes": ["Water"] } ] }, "groudon": { - "level": 70, + "level": 69, "sets": [ { "role": "Doubles Bulky Attacker", "movepool": ["Heat Crash", "Precipice Blades", "Protect", "Stone Edge", "Thunder Wave"], + "abilities": ["Drought"], "teraTypes": ["Fire"] }, { "role": "Doubles Bulky Setup", - "movepool": ["Heat Crash", "Precipice Blades", "Stone Edge", "Swords Dance"], + "movepool": ["Heat Crash", "Precipice Blades", "Protect", "Stone Edge", "Swords Dance"], + "abilities": ["Drought"], "teraTypes": ["Fire"] } ] @@ -1395,76 +2137,136 @@ { "role": "Doubles Setup Sweeper", "movepool": ["Dragon Ascent", "Dragon Dance", "Earthquake", "Extreme Speed", "Swords Dance"], + "abilities": ["Air Lock"], "teraTypes": ["Normal"] }, { "role": "Offensive Protect", "movepool": ["Draco Meteor", "Dragon Ascent", "Earth Power", "Fire Blast", "Protect"], + "abilities": ["Air Lock"], "teraTypes": ["Fire", "Flying", "Ground"] } ] }, "jirachi": { - "level": 79, + "level": 80, "sets": [ { "role": "Doubles Support", "movepool": ["Iron Head", "Life Dew", "Protect", "Thunder Wave", "U-turn"], + "abilities": ["Serene Grace"], "teraTypes": ["Dark", "Water"] }, { "role": "Choice Item user", "movepool": ["Iron Head", "Psychic", "Thunderbolt", "Trick", "U-turn"], + "abilities": ["Serene Grace"], "teraTypes": ["Steel"] } ] }, + "deoxys": { + "level": 79, + "sets": [ + { + "role": "Offensive Protect", + "movepool": ["Extreme Speed", "Knock Off", "Protect", "Psycho Boost", "Superpower"], + "abilities": ["Pressure"], + "teraTypes": ["Ghost", "Stellar"] + } + ] + }, + "deoxysattack": { + "level": 78, + "sets": [ + { + "role": "Offensive Protect", + "movepool": ["Extreme Speed", "Knock Off", "Protect", "Psycho Boost", "Superpower"], + "abilities": ["Pressure"], + "teraTypes": ["Ghost", "Stellar"] + } + ] + }, + "deoxysdefense": { + "level": 88, + "sets": [ + { + "role": "Doubles Support", + "movepool": ["Icy Wind", "Knock Off", "Night Shade", "Spikes", "Thunder Wave"], + "abilities": ["Pressure"], + "teraTypes": ["Fairy", "Steel"] + } + ] + }, + "deoxysspeed": { + "level": 84, + "sets": [ + { + "role": "Doubles Support", + "movepool": ["Icy Wind", "Psycho Boost", "Superpower", "Taunt"], + "abilities": ["Pressure"], + "teraTypes": ["Fighting", "Ghost", "Psychic"] + }, + { + "role": "Doubles Wallbreaker", + "movepool": ["Psycho Boost", "Superpower", "Taunt", "Thunder Wave"], + "abilities": ["Pressure"], + "teraTypes": ["Fighting", "Psychic"] + } + ] + }, "torterra": { "level": 81, "sets": [ { "role": "Doubles Setup Sweeper", "movepool": ["Headlong Rush", "Protect", "Shell Smash", "Wood Hammer"], + "abilities": ["Overgrow"], "teraTypes": ["Fire", "Ground"] } ] }, "infernape": { - "level": 83, + "level": 82, "sets": [ { "role": "Doubles Fast Attacker", "movepool": ["Close Combat", "Fake Out", "Knock Off", "Overheat", "Protect"], + "abilities": ["Blaze"], "teraTypes": ["Dark", "Fighting", "Fire"] } ] }, "empoleon": { - "level": 81, + "level": 82, "sets": [ { - "role": "Offensive Protect", - "movepool": ["Flash Cannon", "Hydro Pump", "Ice Beam", "Protect"], + "role": "Doubles Support", + "movepool": ["Flash Cannon", "Hydro Pump", "Ice Beam", "Icy Wind", "Protect", "Yawn"], + "abilities": ["Competitive"], "teraTypes": ["Flying", "Grass"] }, { "role": "Doubles Bulky Attacker", - "movepool": ["Flash Cannon", "Flip Turn", "Hydro Pump", "Ice Beam", "Icy Wind", "Knock Off"], + "movepool": ["Flash Cannon", "Hydro Pump", "Ice Beam", "Icy Wind", "Knock Off"], + "abilities": ["Competitive"], "teraTypes": ["Flying", "Grass"] } ] }, "staraptor": { - "level": 80, + "level": 81, "sets": [ { "role": "Offensive Protect", "movepool": ["Brave Bird", "Close Combat", "Double-Edge", "Protect", "Quick Attack"], + "abilities": ["Intimidate"], "teraTypes": ["Fighting", "Flying"] }, { "role": "Choice Item user", "movepool": ["Brave Bird", "Close Combat", "Double-Edge", "Final Gambit"], + "abilities": ["Intimidate"], "teraTypes": ["Fighting", "Flying", "Normal"] } ] @@ -1473,8 +2275,9 @@ "level": 100, "sets": [ { - "role": "Doubles Support", + "role": "Doubles Bulky Attacker", "movepool": ["Bug Bite", "Helping Hand", "Knock Off", "Sticky Web", "Taunt"], + "abilities": ["Technician"], "teraTypes": ["Bug", "Steel"] } ] @@ -1484,17 +2287,41 @@ "sets": [ { "role": "Doubles Bulky Attacker", - "movepool": ["Crunch", "Play Rough", "Snarl", "Volt Switch", "Wild Charge"], + "movepool": ["Crunch", "Play Rough", "Snarl", "Throat Chop", "Volt Switch", "Wild Charge"], + "abilities": ["Intimidate"], "teraTypes": ["Dark", "Fairy", "Flying"] } ] }, + "rampardos": { + "level": 87, + "sets": [ + { + "role": "Choice Item user", + "movepool": ["Fire Punch", "Head Smash", "Rock Slide", "Stomping Tantrum"], + "abilities": ["Sheer Force"], + "teraTypes": ["Rock"] + } + ] + }, + "bastiodon": { + "level": 89, + "sets": [ + { + "role": "Doubles Bulky Setup", + "movepool": ["Body Press", "Foul Play", "Iron Defense", "Rest", "Wide Guard"], + "abilities": ["Sturdy"], + "teraTypes": ["Fighting", "Flying"] + } + ] + }, "vespiquen": { - "level": 99, + "level": 100, "sets": [ { - "role": "Doubles Support", + "role": "Doubles Bulky Attacker", "movepool": ["Helping Hand", "Hurricane", "Pollen Puff", "Roost", "Toxic Spikes"], + "abilities": ["Unnerve"], "teraTypes": ["Steel"] } ] @@ -1505,6 +2332,7 @@ { "role": "Doubles Support", "movepool": ["Encore", "Follow Me", "Helping Hand", "Nuzzle", "Super Fang", "Thunderbolt"], + "abilities": ["Volt Absorb"], "teraTypes": ["Flying", "Water"] } ] @@ -1515,16 +2343,18 @@ { "role": "Doubles Wallbreaker", "movepool": ["Aqua Jet", "Crunch", "Ice Spinner", "Protect", "Wave Crash"], + "abilities": ["Water Veil"], "teraTypes": ["Water"] } ] }, "gastrodon": { - "level": 84, + "level": 82, "sets": [ { "role": "Doubles Bulky Attacker", "movepool": ["Clear Smog", "Earth Power", "Helping Hand", "Icy Wind", "Muddy Water", "Recover"], + "abilities": ["Storm Drain"], "teraTypes": ["Fire"] } ] @@ -1534,47 +2364,52 @@ "sets": [ { "role": "Doubles Fast Attacker", - "movepool": ["Double Hit", "Fake Out", "Knock Off", "Protect"], + "movepool": ["Double-Edge", "Fake Out", "Knock Off", "Protect"], + "abilities": ["Technician"], "teraTypes": ["Normal"] } ] }, "drifblim": { - "level": 86, + "level": 85, "sets": [ { "role": "Doubles Support", "movepool": ["Shadow Ball", "Strength Sap", "Tailwind", "Will-O-Wisp"], + "abilities": ["Unburden"], "teraTypes": ["Fairy", "Ghost", "Ground"] } ] }, "mismagius": { - "level": 86, + "level": 88, "sets": [ { "role": "Doubles Wallbreaker", "movepool": ["Dazzling Gleam", "Mystical Fire", "Protect", "Shadow Ball", "Taunt", "Thunderbolt", "Trick", "Will-O-Wisp"], + "abilities": ["Levitate"], "teraTypes": ["Electric", "Fairy"] } ] }, "honchkrow": { - "level": 86, + "level": 85, "sets": [ { "role": "Offensive Protect", "movepool": ["Brave Bird", "Heat Wave", "Protect", "Sucker Punch", "Tailwind"], + "abilities": ["Moxie"], "teraTypes": ["Dark", "Fire", "Flying"] } ] }, "skuntank": { - "level": 87, + "level": 85, "sets": [ { "role": "Doubles Fast Attacker", "movepool": ["Fire Blast", "Gunk Shot", "Knock Off", "Poison Gas", "Protect", "Sucker Punch", "Taunt", "Toxic Spikes"], + "abilities": ["Aftermath"], "teraTypes": ["Dark", "Flying"] } ] @@ -1583,8 +2418,15 @@ "level": 87, "sets": [ { - "role": "Doubles Support", + "role": "Doubles Bulky Attacker", "movepool": ["Body Press", "Iron Defense", "Iron Head", "Trick Room"], + "abilities": ["Levitate"], + "teraTypes": ["Fighting"] + }, + { + "role": "Doubles Bulky Setup", + "movepool": ["Body Press", "Iron Defense", "Psychic Noise", "Trick Room"], + "abilities": ["Levitate"], "teraTypes": ["Fighting"] } ] @@ -1595,47 +2437,53 @@ { "role": "Doubles Support", "movepool": ["Foul Play", "Helping Hand", "Icy Wind", "Shadow Sneak", "Will-O-Wisp"], + "abilities": ["Infiltrator"], "teraTypes": ["Steel"] }, { "role": "Doubles Bulky Attacker", "movepool": ["Foul Play", "Snarl", "Trick Room", "Will-O-Wisp"], + "abilities": ["Infiltrator"], "teraTypes": ["Steel"] } ] }, "garchomp": { - "level": 79, + "level": 77, "sets": [ { "role": "Doubles Setup Sweeper", - "movepool": ["Earthquake", "Protect", "Rock Slide", "Scale Shot", "Swords Dance"], + "movepool": ["Earthquake", "Protect", "Scale Shot", "Swords Dance"], + "abilities": ["Rough Skin"], "teraTypes": ["Dragon", "Fire"] } ] }, "lucario": { - "level": 86, + "level": 87, "sets": [ { "role": "Offensive Protect", - "movepool": ["Close Combat", "Extreme Speed", "Meteor Mash", "Protect"], + "movepool": ["Close Combat", "Extreme Speed", "Flash Cannon", "Protect"], + "abilities": ["Inner Focus"], "teraTypes": ["Normal"] }, { - "role": "Doubles Setup Sweeper", - "movepool": ["Aura Sphere", "Flash Cannon", "Nasty Plot", "Protect", "Vacuum Wave"], - "teraTypes": ["Fighting", "Steel"] + "role": "Doubles Wallbreaker", + "movepool": ["Close Combat", "Extreme Speed", "Meteor Mash", "Rock Slide"], + "abilities": ["Inner Focus"], + "teraTypes": ["Normal"] } ] }, "hippowdon": { - "level": 85, + "level": 86, "sets": [ { "role": "Doubles Support", "movepool": ["Helping Hand", "High Horsepower", "Slack Off", "Stealth Rock", "Stone Edge", "Whirlwind"], - "teraTypes": ["Rock", "Steel"] + "abilities": ["Sand Stream"], + "teraTypes": ["Dragon", "Rock", "Steel", "Water"] } ] }, @@ -1645,46 +2493,51 @@ { "role": "Doubles Fast Attacker", "movepool": ["Close Combat", "Fake Out", "Gunk Shot", "Protect", "Sucker Punch", "Swords Dance"], + "abilities": ["Dry Skin"], "teraTypes": ["Dark", "Fighting", "Poison"] } ] }, "lumineon": { - "level": 90, + "level": 92, "sets": [ { "role": "Doubles Support", "movepool": ["Encore", "Helping Hand", "Hydro Pump", "Icy Wind", "Tailwind", "Tickle"], + "abilities": ["Storm Drain"], "teraTypes": ["Fire", "Ground"] } ] }, "abomasnow": { - "level": 83, + "level": 81, "sets": [ { "role": "Doubles Bulky Attacker", "movepool": ["Aurora Veil", "Blizzard", "Ice Shard", "Protect", "Wood Hammer"], + "abilities": ["Snow Warning"], "teraTypes": ["Ice", "Water"] } ] }, "weavile": { - "level": 83, + "level": 82, "sets": [ { "role": "Doubles Wallbreaker", - "movepool": ["Fake Out", "Ice Shard", "Ice Spinner", "Knock Off", "Low Kick", "Protect"], + "movepool": ["Fake Out", "Ice Shard", "Knock Off", "Low Kick", "Protect", "Triple Axel"], + "abilities": ["Pickpocket"], "teraTypes": ["Dark", "Fighting", "Ghost", "Ice"] } ] }, "sneasler": { - "level": 79, + "level": 77, "sets": [ { "role": "Doubles Wallbreaker", "movepool": ["Close Combat", "Dire Claw", "Fake Out", "Gunk Shot", "Switcheroo", "U-turn"], + "abilities": ["Poison Touch"], "teraTypes": ["Dark", "Fighting", "Poison"] } ] @@ -1695,21 +2548,69 @@ { "role": "Doubles Bulky Attacker", "movepool": ["Body Press", "Electroweb", "Flash Cannon", "Protect", "Thunderbolt", "Volt Switch"], + "abilities": ["Sturdy"], + "teraTypes": ["Flying"] + } + ] + }, + "rhyperior": { + "level": 82, + "sets": [ + { + "role": "Doubles Bulky Setup", + "movepool": ["High Horsepower", "Protect", "Rock Polish", "Rock Slide"], + "abilities": ["Solid Rock"], + "teraTypes": ["Dragon", "Flying", "Ghost", "Ground"] + }, + { + "role": "Doubles Bulky Attacker", + "movepool": ["Dragon Tail", "Heat Crash", "High Horsepower", "Ice Punch", "Megahorn", "Protect", "Rock Slide"], + "abilities": ["Solid Rock"], + "teraTypes": ["Dragon", "Flying", "Water"] + } + ] + }, + "electivire": { + "level": 85, + "sets": [ + { + "role": "Doubles Fast Attacker", + "movepool": ["Cross Chop", "Flamethrower", "Ice Punch", "Protect", "Volt Switch", "Wild Charge"], + "abilities": ["Motor Drive"], + "teraTypes": ["Flying"] + }, + { + "role": "Doubles Bulky Attacker", + "movepool": ["Cross Chop", "Flamethrower", "Ice Punch", "Knock Off", "Volt Switch", "Wild Charge"], + "abilities": ["Motor Drive"], "teraTypes": ["Flying"] } ] }, + "magmortar": { + "level": 84, + "sets": [ + { + "role": "Doubles Bulky Attacker", + "movepool": ["Fire Blast", "Heat Wave", "Knock Off", "Protect", "Thunderbolt"], + "abilities": ["Flame Body"], + "teraTypes": ["Fire", "Grass"] + } + ] + }, "yanmega": { "level": 84, "sets": [ { "role": "Doubles Wallbreaker", "movepool": ["Air Slash", "Bug Buzz", "Giga Drain", "U-turn"], + "abilities": ["Tinted Lens"], "teraTypes": ["Bug"] }, { "role": "Tera Blast user", "movepool": ["Air Slash", "Bug Buzz", "Protect", "Tera Blast"], + "abilities": ["Speed Boost"], "teraTypes": ["Ground"] } ] @@ -1720,6 +2621,7 @@ { "role": "Doubles Setup Sweeper", "movepool": ["Double-Edge", "Knock Off", "Leaf Blade", "Protect", "Swords Dance", "Synthesis"], + "abilities": ["Chlorophyll"], "teraTypes": ["Normal"] } ] @@ -1728,49 +2630,78 @@ "level": 87, "sets": [ { - "role": "Doubles Setup Sweeper", - "movepool": ["Blizzard", "Calm Mind", "Freeze-Dry", "Shadow Ball"], - "teraTypes": ["Ghost", "Ice"] + "role": "Doubles Wallbreaker", + "movepool": ["Blizzard", "Freeze-Dry", "Mud Shot", "Protect"], + "abilities": ["Ice Body"], + "teraTypes": ["Ground"] }, { - "role": "Tera Blast user", - "movepool": ["Blizzard", "Calm Mind", "Freeze-Dry", "Tera Blast"], - "teraTypes": ["Fire", "Ground"] + "role": "Doubles Setup Sweeper", + "movepool": ["Blizzard", "Calm Mind", "Freeze-Dry", "Mud Shot"], + "abilities": ["Ice Body"], + "teraTypes": ["Ground"] } ] }, "gliscor": { - "level": 82, + "level": 81, "sets": [ { "role": "Bulky Protect", - "movepool": ["Dual Wingbeat", "High Horsepower", "Knock Off", "Protect", "Toxic", "Toxic Spikes"], + "movepool": ["Dual Wingbeat", "High Horsepower", "Knock Off", "Protect", "Tailwind", "Toxic", "Toxic Spikes"], + "abilities": ["Poison Heal"], "teraTypes": ["Water"] }, { "role": "Doubles Bulky Setup", "movepool": ["Earthquake", "Facade", "Protect", "Swords Dance"], + "abilities": ["Poison Heal"], "teraTypes": ["Normal"] } ] }, "mamoswine": { - "level": 83, + "level": 82, "sets": [ { "role": "Offensive Protect", "movepool": ["High Horsepower", "Ice Shard", "Icicle Crash", "Protect"], + "abilities": ["Thick Fat"], "teraTypes": ["Ground", "Ice", "Water"] } ] }, + "porygonz": { + "level": 84, + "sets": [ + { + "role": "Doubles Wallbreaker", + "movepool": ["Shadow Ball", "Swift", "Tri Attack", "Trick"], + "abilities": ["Adaptability"], + "teraTypes": ["Ghost"] + }, + { + "role": "Tera Blast user", + "movepool": ["Nasty Plot", "Protect", "Shadow Ball", "Tera Blast"], + "abilities": ["Adaptability"], + "teraTypes": ["Fighting"] + } + ] + }, "gallade": { - "level": 82, + "level": 80, "sets": [ { "role": "Doubles Wallbreaker", "movepool": ["Leaf Blade", "Night Slash", "Protect", "Psycho Cut", "Sacred Sword", "Swords Dance"], + "abilities": ["Sharpness"], "teraTypes": ["Dark", "Fighting", "Grass"] + }, + { + "role": "Choice Item user", + "movepool": ["Night Slash", "Psycho Cut", "Sacred Sword", "Trick"], + "abilities": ["Sharpness"], + "teraTypes": ["Dark", "Fighting"] } ] }, @@ -1780,16 +2711,30 @@ { "role": "Doubles Bulky Setup", "movepool": ["Body Press", "Flash Cannon", "Iron Defense", "Rest", "Thunder Wave"], + "abilities": ["Magnet Pull"], + "teraTypes": ["Fighting"] + }, + { + "role": "Doubles Setup Sweeper", + "movepool": ["Body Press", "Iron Defense", "Power Gem", "Rest", "Thunder Wave"], + "abilities": ["Magnet Pull"], "teraTypes": ["Fighting"] } ] }, "dusknoir": { - "level": 88, + "level": 89, "sets": [ { - "role": "Doubles Support", - "movepool": ["Leech Life", "Poltergeist", "Trick Room", "Will-O-Wisp"], + "role": "Doubles Wallbreaker", + "movepool": ["Leech Life", "Poltergeist", "Shadow Sneak", "Will-O-Wisp"], + "abilities": ["Frisk"], + "teraTypes": ["Dark"] + }, + { + "role": "Doubles Setup Sweeper", + "movepool": ["Leech Life", "Poltergeist", "Protect", "Trick Room"], + "abilities": ["Frisk"], "teraTypes": ["Dark"] } ] @@ -1799,27 +2744,30 @@ "sets": [ { "role": "Doubles Support", - "movepool": ["Destiny Bond", "Ice Beam", "Icy Wind", "Poltergeist", "Spikes", "Taunt", "Will-O-Wisp"], + "movepool": ["Icy Wind", "Poltergeist", "Protect", "Spikes", "Taunt", "Triple Axel", "Will-O-Wisp"], + "abilities": ["Cursed Body"], "teraTypes": ["Ghost", "Water"] } ] }, "rotom": { - "level": 88, + "level": 89, "sets": [ { "role": "Offensive Protect", "movepool": ["Nasty Plot", "Protect", "Shadow Ball", "Thunderbolt", "Volt Switch", "Will-O-Wisp"], + "abilities": ["Levitate"], "teraTypes": ["Electric"] } ] }, "rotomwash": { - "level": 84, + "level": 83, "sets": [ { "role": "Bulky Protect", - "movepool": ["Hydro Pump", "Protect", "Thunderbolt", "Volt Switch", "Will-O-Wisp"], + "movepool": ["Electroweb", "Hydro Pump", "Protect", "Thunderbolt", "Volt Switch", "Will-O-Wisp"], + "abilities": ["Levitate"], "teraTypes": ["Electric"] } ] @@ -1829,7 +2777,8 @@ "sets": [ { "role": "Bulky Protect", - "movepool": ["Overheat", "Protect", "Thunderbolt", "Volt Switch", "Will-O-Wisp"], + "movepool": ["Electroweb", "Overheat", "Protect", "Thunderbolt", "Volt Switch", "Will-O-Wisp"], + "abilities": ["Levitate"], "teraTypes": ["Electric", "Steel"] } ] @@ -1840,16 +2789,18 @@ { "role": "Doubles Setup Sweeper", "movepool": ["Blizzard", "Nasty Plot", "Protect", "Thunderbolt", "Will-O-Wisp"], + "abilities": ["Levitate"], "teraTypes": ["Electric", "Ice"] } ] }, "rotomfan": { - "level": 84, + "level": 85, "sets": [ { "role": "Bulky Protect", - "movepool": ["Air Slash", "Protect", "Thunderbolt", "Volt Switch", "Will-O-Wisp"], + "movepool": ["Air Slash", "Electroweb", "Protect", "Thunderbolt", "Volt Switch", "Will-O-Wisp"], + "abilities": ["Levitate"], "teraTypes": ["Electric", "Steel"] } ] @@ -1859,7 +2810,8 @@ "sets": [ { "role": "Bulky Protect", - "movepool": ["Leaf Storm", "Protect", "Thunderbolt", "Volt Switch", "Will-O-Wisp"], + "movepool": ["Electroweb", "Leaf Storm", "Protect", "Thunderbolt", "Volt Switch", "Will-O-Wisp"], + "abilities": ["Levitate"], "teraTypes": ["Electric", "Poison", "Steel"] } ] @@ -1869,7 +2821,8 @@ "sets": [ { "role": "Doubles Support", - "movepool": ["Encore", "Helping Hand", "Knock Off", "Mystical Power", "Stealth Rock", "Thunder Wave", "U-turn"], + "movepool": ["Encore", "Helping Hand", "Knock Off", "Mystical Power", "Stealth Rock", "Thunder Wave"], + "abilities": ["Levitate"], "teraTypes": ["Dark", "Poison", "Steel"] } ] @@ -1880,26 +2833,30 @@ { "role": "Doubles Setup Sweeper", "movepool": ["Dazzling Gleam", "Nasty Plot", "Protect", "Psychic", "Thunderbolt"], + "abilities": ["Levitate"], "teraTypes": ["Electric", "Fairy", "Psychic"] }, { "role": "Choice Item user", - "movepool": ["Ice Beam", "Mystical Power", "Psychic", "Thunderbolt", "U-turn"], + "movepool": ["Ice Beam", "Psychic", "Thunderbolt", "U-turn"], + "abilities": ["Levitate"], "teraTypes": ["Electric", "Psychic"] } ] }, "azelf": { - "level": 82, + "level": 83, "sets": [ { "role": "Doubles Fast Attacker", "movepool": ["Dazzling Gleam", "Energy Ball", "Fire Blast", "Nasty Plot", "Psychic", "Psyshock", "U-turn"], + "abilities": ["Levitate"], "teraTypes": ["Fairy", "Fire"] }, { "role": "Offensive Protect", "movepool": ["Dazzling Gleam", "Fire Blast", "Nasty Plot", "Protect", "Psychic", "Psyshock", "Thunderbolt"], + "abilities": ["Levitate"], "teraTypes": ["Electric", "Fairy", "Fire"] } ] @@ -1910,6 +2867,7 @@ { "role": "Doubles Bulky Attacker", "movepool": ["Draco Meteor", "Fire Blast", "Heavy Slam", "Protect", "Thunder Wave"], + "abilities": ["Telepathy"], "teraTypes": ["Dragon", "Fire", "Flying", "Steel"] } ] @@ -1920,6 +2878,7 @@ { "role": "Doubles Bulky Attacker", "movepool": ["Draco Meteor", "Fire Blast", "Flash Cannon", "Protect", "Thunder Wave"], + "abilities": ["Telepathy"], "teraTypes": ["Dragon", "Fire", "Flying"] } ] @@ -1930,11 +2889,13 @@ { "role": "Doubles Wallbreaker", "movepool": ["Draco Meteor", "Fire Blast", "Hydro Pump", "Spacial Rend"], + "abilities": ["Telepathy"], "teraTypes": ["Dragon", "Fire", "Steel", "Water"] }, { "role": "Doubles Fast Attacker", "movepool": ["Fire Blast", "Hydro Pump", "Protect", "Spacial Rend", "Thunder Wave"], + "abilities": ["Telepathy"], "teraTypes": ["Dragon", "Fire", "Steel", "Water"] } ] @@ -1945,6 +2906,7 @@ { "role": "Doubles Fast Attacker", "movepool": ["Fire Blast", "Hydro Pump", "Protect", "Spacial Rend", "Thunder Wave"], + "abilities": ["Telepathy"], "teraTypes": ["Dragon", "Fire", "Steel", "Water"] } ] @@ -1954,13 +2916,38 @@ "sets": [ { "role": "Bulky Protect", - "movepool": ["Earth Power", "Flash Cannon", "Heat Wave", "Protect"], - "teraTypes": ["Fire", "Grass", "Steel"] + "movepool": ["Earth Power", "Magma Storm", "Protect", "Will-O-Wisp"], + "abilities": ["Flash Fire"], + "teraTypes": ["Fairy", "Grass"] }, { "role": "Tera Blast user", "movepool": ["Earth Power", "Flash Cannon", "Heat Wave", "Protect", "Tera Blast"], + "abilities": ["Flash Fire"], "teraTypes": ["Grass"] + }, + { + "role": "Offensive Protect", + "movepool": ["Earth Power", "Flash Cannon", "Heat Wave", "Protect"], + "abilities": ["Flash Fire"], + "teraTypes": ["Fairy", "Grass"] + } + ] + }, + "regigigas": { + "level": 86, + "sets": [ + { + "role": "Bulky Protect", + "movepool": ["Body Slam", "Knock Off", "Protect", "Substitute"], + "abilities": ["Slow Start"], + "teraTypes": ["Fairy", "Ghost"] + }, + { + "role": "Doubles Bulky Attacker", + "movepool": ["Double-Edge", "Knock Off", "Protect", "Thunder Wave"], + "abilities": ["Slow Start"], + "teraTypes": ["Fairy"] } ] }, @@ -1970,22 +2957,25 @@ { "role": "Bulky Protect", "movepool": ["Aura Sphere", "Calm Mind", "Protect", "Shadow Ball"], + "abilities": ["Telepathy"], "teraTypes": ["Fairy", "Fighting"] }, { "role": "Doubles Support", - "movepool": ["Dragon Tail", "Icy Wind", "Rest", "Shadow Ball", "Will-O-Wisp"], + "movepool": ["Breaking Swipe", "Icy Wind", "Rest", "Shadow Ball", "Thunder Wave", "Will-O-Wisp"], + "abilities": ["Telepathy"], "teraTypes": ["Fairy"] } ] }, "giratinaorigin": { - "level": 76, + "level": 75, "sets": [ { - "role": "Doubles Bulky Attacker", - "movepool": ["Aura Sphere", "Draco Meteor", "Poltergeist", "Shadow Force", "Will-O-Wisp"], - "teraTypes": ["Dragon", "Fairy", "Ghost", "Poison"] + "role": "Doubles Fast Attacker", + "movepool": ["Draco Meteor", "Poltergeist", "Shadow Force", "Shadow Sneak", "Will-O-Wisp"], + "abilities": ["Levitate"], + "teraTypes": ["Dragon", "Fairy", "Ghost", "Poison", "Steel"] } ] }, @@ -1995,6 +2985,7 @@ { "role": "Doubles Support", "movepool": ["Helping Hand", "Icy Wind", "Lunar Blessing", "Psychic", "Thunder Wave"], + "abilities": ["Levitate"], "teraTypes": ["Electric", "Fire", "Poison", "Steel"] } ] @@ -2005,6 +2996,7 @@ { "role": "Bulky Protect", "movepool": ["Ice Beam", "Protect", "Scald", "Take Heart"], + "abilities": ["Hydration"], "teraTypes": ["Dragon", "Grass", "Steel"] } ] @@ -2015,31 +3007,35 @@ { "role": "Bulky Protect", "movepool": ["Ice Beam", "Protect", "Scald", "Tail Glow"], + "abilities": ["Hydration"], "teraTypes": ["Grass", "Steel", "Water"] }, { "role": "Doubles Bulky Setup", "movepool": ["Energy Ball", "Hydro Pump", "Ice Beam", "Protect", "Scald", "Tail Glow"], + "abilities": ["Hydration"], "teraTypes": ["Grass"] } ] }, "darkrai": { - "level": 79, + "level": 80, "sets": [ { "role": "Offensive Protect", "movepool": ["Dark Pulse", "Focus Blast", "Protect", "Sludge Bomb"], + "abilities": ["Bad Dreams"], "teraTypes": ["Poison"] } ] }, "shaymin": { - "level": 82, + "level": 81, "sets": [ { "role": "Doubles Bulky Attacker", "movepool": ["Earth Power", "Protect", "Seed Flare", "Synthesis", "Tailwind"], + "abilities": ["Natural Cure"], "teraTypes": ["Grass", "Ground", "Steel"] } ] @@ -2050,6 +3046,7 @@ { "role": "Offensive Protect", "movepool": ["Air Slash", "Earth Power", "Protect", "Seed Flare", "Tailwind"], + "abilities": ["Serene Grace"], "teraTypes": ["Flying", "Steel", "Water"] } ] @@ -2060,26 +3057,29 @@ { "role": "Doubles Setup Sweeper", "movepool": ["Extreme Speed", "Flare Blitz", "Phantom Force", "Swords Dance"], + "abilities": ["Multitype"], "teraTypes": ["Ghost", "Normal"] } ] }, "arceusbug": { - "level": 72, + "level": 73, "sets": [ { "role": "Doubles Setup Sweeper", "movepool": ["Extreme Speed", "Stomping Tantrum", "Swords Dance", "X-Scissor"], + "abilities": ["Multitype"], "teraTypes": ["Normal"] } ] }, "arceusdark": { - "level": 71, + "level": 72, "sets": [ { "role": "Doubles Bulky Attacker", "movepool": ["Gunk Shot", "Judgment", "Recover", "Tailwind"], + "abilities": ["Multitype"], "teraTypes": ["Poison"] } ] @@ -2089,8 +3089,9 @@ "sets": [ { "role": "Doubles Setup Sweeper", - "movepool": ["Aura Sphere", "Calm Mind", "Earth Power", "Fire Blast", "Judgment", "Recover", "Sludge Bomb"], - "teraTypes": ["Poison"] + "movepool": ["Calm Mind", "Fire Blast", "Judgment", "Recover", "Sludge Bomb"], + "abilities": ["Multitype"], + "teraTypes": ["Fire", "Poison"] } ] }, @@ -2100,31 +3101,35 @@ { "role": "Doubles Bulky Setup", "movepool": ["Calm Mind", "Ice Beam", "Judgment", "Recover"], + "abilities": ["Multitype"], "teraTypes": ["Electric", "Ice"] } ] }, "arceusfairy": { - "level": 72, + "level": 70, "sets": [ { "role": "Doubles Bulky Setup", "movepool": ["Calm Mind", "Dazzling Gleam", "Earth Power", "Fire Blast", "Recover"], + "abilities": ["Multitype"], "teraTypes": ["Fairy", "Fire", "Ground"] }, { "role": "Doubles Support", "movepool": ["Icy Wind", "Judgment", "Recover", "Snarl", "Tailwind", "Taunt", "Will-O-Wisp"], + "abilities": ["Multitype"], "teraTypes": ["Steel"] } ] }, "arceusfighting": { - "level": 72, + "level": 70, "sets": [ { "role": "Doubles Bulky Setup", "movepool": ["Body Press", "Iron Defense", "Recover", "Snarl"], + "abilities": ["Multitype"], "teraTypes": ["Steel"] } ] @@ -2135,27 +3140,36 @@ { "role": "Doubles Setup Sweeper", "movepool": ["Extreme Speed", "Flare Blitz", "Liquidation", "Protect", "Swords Dance"], + "abilities": ["Multitype"], "teraTypes": ["Fire", "Normal", "Water"] } ] }, "arceusflying": { - "level": 72, + "level": 70, "sets": [ { "role": "Doubles Setup Sweeper", "movepool": ["Calm Mind", "Earth Power", "Fire Blast", "Judgment", "Recover"], + "abilities": ["Multitype"], "teraTypes": ["Flying", "Ground"] } ] }, "arceusghost": { - "level": 73, + "level": 72, "sets": [ { "role": "Doubles Setup Sweeper", "movepool": ["Brick Break", "Extreme Speed", "Phantom Force", "Swords Dance"], + "abilities": ["Multitype"], "teraTypes": ["Ghost", "Normal"] + }, + { + "role": "Doubles Bulky Setup", + "movepool": ["Calm Mind", "Dazzling Gleam", "Focus Blast", "Judgment", "Recover"], + "abilities": ["Multitype"], + "teraTypes": ["Fairy", "Fighting"] } ] }, @@ -2165,6 +3179,7 @@ { "role": "Doubles Support", "movepool": ["Icy Wind", "Judgment", "Recover", "Snarl", "Tailwind", "Taunt", "Will-O-Wisp"], + "abilities": ["Multitype"], "teraTypes": ["Fire", "Steel"] } ] @@ -2175,11 +3190,13 @@ { "role": "Doubles Bulky Setup", "movepool": ["Calm Mind", "Fire Blast", "Ice Beam", "Judgment", "Recover"], + "abilities": ["Multitype"], "teraTypes": ["Ground", "Ice"] }, { "role": "Doubles Setup Sweeper", "movepool": ["Earthquake", "Extreme Speed", "Stone Edge", "Swords Dance"], + "abilities": ["Multitype"], "teraTypes": ["Normal"] } ] @@ -2190,6 +3207,7 @@ { "role": "Doubles Bulky Setup", "movepool": ["Calm Mind", "Earth Power", "Judgment", "Recover", "Thunderbolt"], + "abilities": ["Multitype"], "teraTypes": ["Electric", "Ground"] } ] @@ -2200,16 +3218,18 @@ { "role": "Doubles Setup Sweeper", "movepool": ["Extreme Speed", "Flare Blitz", "Gunk Shot", "Liquidation", "Swords Dance"], + "abilities": ["Multitype"], "teraTypes": ["Fire", "Normal", "Poison"] } ] }, "arceuspsychic": { - "level": 73, + "level": 72, "sets": [ { "role": "Doubles Support", "movepool": ["Icy Wind", "Judgment", "Recover", "Snarl", "Tailwind", "Taunt", "Will-O-Wisp"], + "abilities": ["Multitype"], "teraTypes": ["Steel"] } ] @@ -2220,116 +3240,216 @@ { "role": "Doubles Setup Sweeper", "movepool": ["Calm Mind", "Earth Power", "Fire Blast", "Judgment", "Recover"], + "abilities": ["Multitype"], "teraTypes": ["Ground"] } ] }, "arceussteel": { - "level": 72, + "level": 73, "sets": [ { "role": "Doubles Support", "movepool": ["Icy Wind", "Judgment", "Recover", "Snarl", "Tailwind", "Taunt", "Will-O-Wisp"], + "abilities": ["Multitype"], "teraTypes": ["Ghost"] } ] }, "arceuswater": { - "level": 72, + "level": 73, "sets": [ { "role": "Doubles Support", "movepool": ["Icy Wind", "Judgment", "Recover", "Snarl", "Tailwind", "Taunt", "Will-O-Wisp"], + "abilities": ["Multitype"], "teraTypes": ["Steel"] }, { "role": "Doubles Setup Sweeper", "movepool": ["Extreme Speed", "Flare Blitz", "Liquidation", "Swords Dance"], + "abilities": ["Multitype"], "teraTypes": ["Fire", "Normal"] } ] }, + "serperior": { + "level": 80, + "sets": [ + { + "role": "Offensive Protect", + "movepool": ["Dragon Pulse", "Glare", "Knock Off", "Leaf Storm", "Protect"], + "abilities": ["Contrary"], + "teraTypes": ["Dragon", "Grass"] + }, + { + "role": "Tera Blast user", + "movepool": ["Glare", "Leaf Storm", "Protect", "Tera Blast"], + "abilities": ["Contrary"], + "teraTypes": ["Fire", "Rock"] + } + ] + }, + "emboar": { + "level": 85, + "sets": [ + { + "role": "Choice Item user", + "movepool": ["Close Combat", "Flare Blitz", "Head Smash", "Knock Off", "Wild Charge"], + "abilities": ["Reckless"], + "teraTypes": ["Dark", "Electric", "Rock"] + } + ] + }, "samurott": { - "level": 88, + "level": 89, "sets": [ { "role": "Doubles Bulky Attacker", "movepool": ["Aqua Jet", "Flip Turn", "Hydro Pump", "Ice Beam", "Knock Off", "Megahorn", "Sacred Sword"], + "abilities": ["Torrent"], "teraTypes": ["Dark", "Fire", "Water"] }, { "role": "Doubles Setup Sweeper", "movepool": ["Aqua Jet", "Knock Off", "Liquidation", "Protect", "Sacred Sword", "Swords Dance"], + "abilities": ["Torrent"], "teraTypes": ["Dark", "Fire", "Water"] } ] }, "samurotthisui": { - "level": 84, + "level": 83, "sets": [ { "role": "Offensive Protect", "movepool": ["Aqua Jet", "Ceaseless Edge", "Protect", "Razor Shell", "Sacred Sword", "Sucker Punch"], + "abilities": ["Sharpness"], "teraTypes": ["Dark", "Fire", "Water"] }, { "role": "Choice Item user", "movepool": ["Ceaseless Edge", "Flip Turn", "Razor Shell", "Sacred Sword", "Sucker Punch"], + "abilities": ["Sharpness"], "teraTypes": ["Dark", "Fire", "Water"] } ] }, + "zebstrika": { + "level": 87, + "sets": [ + { + "role": "Offensive Protect", + "movepool": ["High Horsepower", "Overheat", "Protect", "Wild Charge"], + "abilities": ["Sap Sipper"], + "teraTypes": ["Ground"] + }, + { + "role": "Doubles Fast Attacker", + "movepool": ["High Horsepower", "Overheat", "Protect", "Thunderbolt"], + "abilities": ["Lightning Rod"], + "teraTypes": ["Flying", "Water"] + } + ] + }, + "excadrill": { + "level": 82, + "sets": [ + { + "role": "Doubles Bulky Attacker", + "movepool": ["High Horsepower", "Iron Head", "Rapid Spin", "Rock Slide"], + "abilities": ["Mold Breaker", "Sand Rush"], + "teraTypes": ["Flying", "Water"] + }, + { + "role": "Doubles Setup Sweeper", + "movepool": ["High Horsepower", "Iron Head", "Protect", "Swords Dance"], + "abilities": ["Mold Breaker", "Sand Rush"], + "teraTypes": ["Flying", "Ground", "Water"] + } + ] + }, "conkeldurr": { "level": 81, "sets": [ { "role": "Doubles Wallbreaker", "movepool": ["Close Combat", "Knock Off", "Mach Punch", "Protect"], + "abilities": ["Guts"], "teraTypes": ["Dark", "Fighting"] }, { "role": "Doubles Bulky Attacker", - "movepool": ["Drain Punch", "Knock Off", "Mach Punch", "Poison Jab"], - "teraTypes": ["Dark", "Poison"] + "movepool": ["Drain Punch", "Ice Punch", "Knock Off", "Mach Punch"], + "abilities": ["Iron Fist"], + "teraTypes": ["Dark", "Fighting", "Steel"] } ] }, "leavanny": { - "level": 89, + "level": 90, "sets": [ { "role": "Doubles Support", "movepool": ["Knock Off", "Leaf Blade", "Pollen Puff", "Sticky Web"], + "abilities": ["Chlorophyll", "Swarm"], "teraTypes": ["Rock", "Water"] }, { "role": "Offensive Protect", "movepool": ["Leaf Blade", "Lunge", "Protect", "Sticky Web"], + "abilities": ["Chlorophyll", "Swarm"], "teraTypes": ["Rock", "Water"] } ] }, + "whimsicott": { + "level": 80, + "sets": [ + { + "role": "Doubles Support", + "movepool": ["Encore", "Moonblast", "Stun Spore", "Tailwind"], + "abilities": ["Prankster"], + "teraTypes": ["Fire", "Ghost", "Steel"] + }, + { + "role": "Doubles Bulky Attacker", + "movepool": ["Encore", "Moonblast", "Tailwind", "Taunt"], + "abilities": ["Prankster"], + "teraTypes": ["Fire", "Ghost", "Steel"] + }, + { + "role": "Doubles Bulky Setup", + "movepool": ["Encore", "Helping Hand", "Moonblast", "Tailwind"], + "abilities": ["Prankster"], + "teraTypes": ["Fire", "Ghost", "Steel"] + } + ] + }, "lilligant": { "level": 87, "sets": [ { "role": "Tera Blast user", - "movepool": ["Giga Drain", "Quiver Dance", "Sleep Powder", "Tera Blast"], + "movepool": ["Giga Drain", "Protect", "Quiver Dance", "Tera Blast"], + "abilities": ["Chlorophyll"], "teraTypes": ["Fire", "Rock"] }, { "role": "Doubles Setup Sweeper", - "movepool": ["Energy Ball", "Pollen Puff", "Quiver Dance", "Sleep Powder"], + "movepool": ["Alluring Voice", "Energy Ball", "Pollen Puff", "Quiver Dance", "Sleep Powder"], + "abilities": ["Chlorophyll"], "teraTypes": ["Steel"] } ] }, "lilliganthisui": { - "level": 83, + "level": 84, "sets": [ { "role": "Doubles Setup Sweeper", - "movepool": ["Close Combat", "Leaf Blade", "Sleep Powder", "Victory Dance"], + "movepool": ["Close Combat", "Leaf Blade", "Protect", "Sleep Powder", "Victory Dance"], + "abilities": ["Hustle"], "teraTypes": ["Fighting", "Steel"] } ] @@ -2339,17 +3459,14 @@ "sets": [ { "role": "Doubles Wallbreaker", - "movepool": ["Aqua Jet", "Crunch", "Protect", "Psychic Fangs", "Wave Crash"], + "movepool": ["Aqua Jet", "Flip Turn", "Psychic Fangs", "Wave Crash"], + "abilities": ["Adaptability"], "teraTypes": ["Water"] - } - ] - }, - "basculinbluestriped": { - "level": 87, - "sets": [ + }, { - "role": "Doubles Wallbreaker", - "movepool": ["Aqua Jet", "Crunch", "Protect", "Psychic Fangs", "Wave Crash"], + "role": "Offensive Protect", + "movepool": ["Aqua Jet", "Flip Turn", "Protect", "Wave Crash"], + "abilities": ["Adaptability"], "teraTypes": ["Water"] } ] @@ -2360,6 +3477,7 @@ { "role": "Choice Item user", "movepool": ["Aqua Jet", "Flip Turn", "Last Respects", "Wave Crash"], + "abilities": ["Adaptability"], "teraTypes": ["Ghost"] } ] @@ -2369,118 +3487,182 @@ "sets": [ { "role": "Choice Item user", - "movepool": ["Flip Turn", "Hydro Pump", "Last Respects", "Wave Crash"], + "movepool": ["Flip Turn", "Last Respects", "Muddy Water", "Wave Crash"], + "abilities": ["Adaptability"], "teraTypes": ["Ghost"] } ] }, "krookodile": { - "level": 81, + "level": 80, "sets": [ { "role": "Offensive Protect", "movepool": ["Gunk Shot", "High Horsepower", "Knock Off", "Protect", "Stone Edge", "Taunt"], + "abilities": ["Intimidate"], "teraTypes": ["Dark", "Ground", "Poison"] }, { "role": "Choice Item user", "movepool": ["Gunk Shot", "High Horsepower", "Knock Off", "Rock Slide"], + "abilities": ["Intimidate"], "teraTypes": ["Dark", "Ground", "Poison"] } ] }, + "scrafty": { + "level": 83, + "sets": [ + { + "role": "Doubles Support", + "movepool": ["Close Combat", "Coaching", "Fake Out", "Knock Off", "Poison Jab", "Snarl"], + "abilities": ["Intimidate"], + "teraTypes": ["Poison"] + } + ] + }, "zoroark": { "level": 84, "sets": [ { "role": "Doubles Wallbreaker", "movepool": ["Dark Pulse", "Flamethrower", "Focus Blast", "Protect", "Sludge Bomb"], + "abilities": ["Illusion"], "teraTypes": ["Poison"] }, { "role": "Offensive Protect", "movepool": ["Flamethrower", "Focus Blast", "Knock Off", "Protect", "Sludge Bomb"], + "abilities": ["Illusion"], "teraTypes": ["Poison"] } ] }, "zoroarkhisui": { - "level": 79, + "level": 80, "sets": [ { "role": "Doubles Wallbreaker", "movepool": ["Bitter Malice", "Flamethrower", "Focus Blast", "Hyper Voice", "Nasty Plot", "Protect"], + "abilities": ["Illusion"], "teraTypes": ["Normal"] }, { "role": "Tera Blast user", "movepool": ["Bitter Malice", "Hyper Voice", "Protect", "Tera Blast"], + "abilities": ["Illusion"], "teraTypes": ["Fairy"] } ] }, + "cinccino": { + "level": 85, + "sets": [ + { + "role": "Offensive Protect", + "movepool": ["Bullet Seed", "Knock Off", "Protect", "Tail Slap", "Triple Axel"], + "abilities": ["Technician"], + "teraTypes": ["Grass", "Ice", "Normal"] + } + ] + }, "gothitelle": { - "level": 88, + "level": 90, "sets": [ { "role": "Doubles Support", "movepool": ["Fake Out", "Heal Pulse", "Helping Hand", "Protect", "Psychic", "Trick Room"], + "abilities": ["Shadow Tag"], "teraTypes": ["Dark", "Steel"] } ] }, + "reuniclus": { + "level": 84, + "sets": [ + { + "role": "Doubles Wallbreaker", + "movepool": ["Focus Blast", "Protect", "Psychic", "Shadow Ball", "Trick Room"], + "abilities": ["Magic Guard"], + "teraTypes": ["Fighting"] + } + ] + }, "swanna": { - "level": 88, + "level": 87, "sets": [ { "role": "Doubles Support", "movepool": ["Brave Bird", "Hydro Pump", "Knock Off", "Protect", "Tailwind"], + "abilities": ["Hydration"], "teraTypes": ["Ground"] }, { "role": "Offensive Protect", "movepool": ["Brave Bird", "Hydro Pump", "Protect", "Tailwind"], + "abilities": ["Hydration"], "teraTypes": ["Ground"] } ] }, "sawsbuck": { - "level": 90, + "level": 91, "sets": [ { "role": "Doubles Setup Sweeper", "movepool": ["Double-Edge", "High Horsepower", "Horn Leech", "Protect", "Swords Dance"], + "abilities": ["Sap Sipper"], "teraTypes": ["Normal"] } ] }, "amoonguss": { - "level": 84, + "level": 86, "sets": [ { "role": "Doubles Support", "movepool": ["Clear Smog", "Pollen Puff", "Protect", "Rage Powder", "Spore"], + "abilities": ["Regenerator"], + "teraTypes": ["Steel", "Water"] + }, + { + "role": "Doubles Support", + "movepool": ["Pollen Puff", "Rage Powder", "Sludge Bomb", "Spore"], + "abilities": ["Regenerator"], "teraTypes": ["Steel", "Water"] } ] }, "alomomola": { - "level": 93, + "level": 95, "sets": [ { "role": "Doubles Support", "movepool": ["Helping Hand", "Icy Wind", "Scald", "Wide Guard"], + "abilities": ["Regenerator"], "teraTypes": ["Steel"] } ] }, + "galvantula": { + "level": 85, + "sets": [ + { + "role": "Doubles Support", + "movepool": ["Bug Buzz", "Protect", "Sticky Web", "Thunder", "Volt Switch"], + "abilities": ["Compound Eyes"], + "teraTypes": ["Electric"] + } + ] + }, "eelektross": { "level": 86, "sets": [ { "role": "Doubles Bulky Attacker", - "movepool": ["Acid Spray", "Close Combat", "Flamethrower", "Giga Drain", "Knock Off", "Thunderbolt", "U-turn"], - "teraTypes": ["Poison"] + "movepool": ["Close Combat", "Electroweb", "Flamethrower", "Giga Drain", "Knock Off", "Thunderbolt", "U-turn"], + "abilities": ["Levitate"], + "teraTypes": ["Electric", "Poison"] } ] }, @@ -2490,31 +3672,35 @@ { "role": "Doubles Fast Attacker", "movepool": ["Energy Ball", "Heat Wave", "Protect", "Shadow Ball", "Trick"], + "abilities": ["Flash Fire"], "teraTypes": ["Fire", "Grass"] } ] }, "haxorus": { - "level": 83, + "level": 84, "sets": [ { "role": "Doubles Setup Sweeper", "movepool": ["Close Combat", "Iron Head", "Protect", "Scale Shot", "Swords Dance"], + "abilities": ["Unnerve"], "teraTypes": ["Dragon", "Fighting", "Steel"] }, { "role": "Offensive Protect", "movepool": ["Close Combat", "Dragon Claw", "First Impression", "Iron Head", "Protect"], + "abilities": ["Unnerve"], "teraTypes": ["Fighting", "Steel"] } ] }, "beartic": { - "level": 90, + "level": 91, "sets": [ { "role": "Offensive Protect", "movepool": ["Aqua Jet", "Close Combat", "Icicle Crash", "Protect"], + "abilities": ["Slush Rush", "Swift Swim"], "teraTypes": ["Fighting", "Water"] } ] @@ -2525,6 +3711,7 @@ { "role": "Doubles Bulky Attacker", "movepool": ["Flash Cannon", "Freeze-Dry", "Haze", "Icy Wind", "Rapid Spin", "Recover"], + "abilities": ["Levitate"], "teraTypes": ["Steel"] } ] @@ -2534,22 +3721,42 @@ "sets": [ { "role": "Doubles Fast Attacker", - "movepool": ["Close Combat", "Fake Out", "Knock Off", "U-turn"], + "movepool": ["Close Combat", "Fake Out", "Knock Off", "Triple Axel", "U-turn"], + "abilities": ["Regenerator"], "teraTypes": ["Dark"] }, { "role": "Doubles Bulky Attacker", "movepool": ["Close Combat", "Fake Out", "Knock Off", "U-turn"], + "abilities": ["Regenerator"], "teraTypes": ["Dark", "Steel"] } ] }, + "golurk": { + "level": 86, + "sets": [ + { + "role": "Offensive Protect", + "movepool": ["Dynamic Punch", "High Horsepower", "Poltergeist", "Protect"], + "abilities": ["No Guard"], + "teraTypes": ["Fighting"] + }, + { + "role": "Doubles Bulky Attacker", + "movepool": ["Dynamic Punch", "High Horsepower", "Poltergeist", "Stone Edge"], + "abilities": ["No Guard"], + "teraTypes": ["Dragon", "Fairy", "Fighting"] + } + ] + }, "braviary": { "level": 82, "sets": [ { "role": "Offensive Protect", "movepool": ["Brave Bird", "Close Combat", "Protect", "Tailwind"], + "abilities": ["Defiant"], "teraTypes": ["Fighting", "Flying"] } ] @@ -2560,11 +3767,13 @@ { "role": "Doubles Wallbreaker", "movepool": ["Heat Wave", "Hurricane", "Psychic", "Tailwind"], + "abilities": ["Sheer Force"], "teraTypes": ["Fire", "Psychic", "Steel"] }, { "role": "Bulky Protect", "movepool": ["Calm Mind", "Esper Wing", "Hurricane", "Protect"], + "abilities": ["Tinted Lens"], "teraTypes": ["Psychic", "Steel"] } ] @@ -2575,11 +3784,7 @@ { "role": "Doubles Support", "movepool": ["Foul Play", "Knock Off", "Roost", "Snarl", "Tailwind", "Taunt", "Toxic", "U-turn"], - "teraTypes": ["Steel"] - }, - { - "role": "Doubles Bulky Attacker", - "movepool": ["Defog", "Foul Play", "Knock Off", "Taunt", "Toxic"], + "abilities": ["Overcoat"], "teraTypes": ["Steel"] } ] @@ -2590,11 +3795,13 @@ { "role": "Offensive Protect", "movepool": ["Dark Pulse", "Draco Meteor", "Protect", "Snarl", "Tailwind"], + "abilities": ["Levitate"], "teraTypes": ["Dragon", "Poison"] }, { "role": "Doubles Fast Attacker", "movepool": ["Dark Pulse", "Draco Meteor", "Heat Wave", "Protect"], + "abilities": ["Levitate"], "teraTypes": ["Fire"] } ] @@ -2605,111 +3812,255 @@ { "role": "Doubles Setup Sweeper", "movepool": ["Bug Buzz", "Heat Wave", "Protect", "Quiver Dance"], + "abilities": ["Flame Body", "Swarm"], "teraTypes": ["Fire", "Ground", "Water"] }, { "role": "Doubles Support", "movepool": ["Heat Wave", "Rage Powder", "Struggle Bug", "Tailwind"], + "abilities": ["Flame Body"], "teraTypes": ["Steel", "Water"] } ] }, + "cobalion": { + "level": 79, + "sets": [ + { + "role": "Doubles Support", + "movepool": ["Body Press", "Coaching", "Iron Head", "Thunder Wave", "Volt Switch"], + "abilities": ["Justified"], + "teraTypes": ["Flying", "Water"] + }, + { + "role": "Bulky Protect", + "movepool": ["Body Press", "Iron Defense", "Iron Head", "Protect"], + "abilities": ["Justified"], + "teraTypes": ["Flying", "Water"] + } + ] + }, + "terrakion": { + "level": 79, + "sets": [ + { + "role": "Doubles Wallbreaker", + "movepool": ["Close Combat", "High Horsepower", "Rock Slide", "Stone Edge"], + "abilities": ["Justified"], + "teraTypes": ["Fighting", "Ghost", "Rock"] + }, + { + "role": "Offensive Protect", + "movepool": ["Close Combat", "High Horsepower", "Protect", "Rock Slide"], + "abilities": ["Justified"], + "teraTypes": ["Fighting", "Ghost", "Rock"] + } + ] + }, + "virizion": { + "level": 86, + "sets": [ + { + "role": "Doubles Support", + "movepool": ["Close Combat", "Coaching", "Leaf Storm", "Protect", "Stone Edge"], + "abilities": ["Justified"], + "teraTypes": ["Fire", "Rock", "Steel"] + } + ] + }, "tornadus": { "level": 77, "sets": [ { "role": "Doubles Support", "movepool": ["Bleakwind Storm", "Heat Wave", "Knock Off", "Protect", "Tailwind", "Taunt"], + "abilities": ["Prankster"], "teraTypes": ["Steel"] } ] }, "tornadustherian": { - "level": 78, + "level": 77, "sets": [ { "role": "Doubles Setup Sweeper", "movepool": ["Bleakwind Storm", "Grass Knot", "Heat Wave", "Nasty Plot", "Protect"], + "abilities": ["Regenerator"], "teraTypes": ["Fire", "Flying"] }, { "role": "Choice Item user", "movepool": ["Bleakwind Storm", "Focus Blast", "Grass Knot", "Heat Wave", "U-turn"], + "abilities": ["Regenerator"], "teraTypes": ["Fire", "Flying"] } ] }, "thundurus": { - "level": 80, + "level": 79, "sets": [ - { - "role": "Doubles Setup Sweeper", - "movepool": ["Grass Knot", "Nasty Plot", "Protect", "Wildbolt Storm"], - "teraTypes": ["Electric", "Grass"] - }, { "role": "Bulky Protect", "movepool": ["Grass Knot", "Knock Off", "Protect", "Snarl", "Taunt", "Thunder Wave", "Thunderbolt"], + "abilities": ["Prankster"], "teraTypes": ["Steel"] + }, + { + "role": "Offensive Protect", + "movepool": ["Acrobatics", "Grass Knot", "Knock Off", "Protect", "Snarl", "Wildbolt Storm"], + "abilities": ["Defiant"], + "teraTypes": ["Electric", "Flying", "Steel"] + }, + { + "role": "Tera Blast user", + "movepool": ["Nasty Plot", "Protect", "Tera Blast", "Wildbolt Storm"], + "abilities": ["Defiant"], + "teraTypes": ["Flying", "Ice"] } ] }, "thundurustherian": { - "level": 79, + "level": 78, "sets": [ { "role": "Doubles Fast Attacker", "movepool": ["Grass Knot", "Protect", "Sludge Bomb", "Volt Switch", "Wildbolt Storm"], + "abilities": ["Volt Absorb"], "teraTypes": ["Electric", "Poison"] }, { "role": "Tera Blast user", "movepool": ["Nasty Plot", "Protect", "Tera Blast", "Wildbolt Storm"], + "abilities": ["Volt Absorb"], "teraTypes": ["Flying", "Ice"] } ] }, + "reshiram": { + "level": 72, + "sets": [ + { + "role": "Doubles Wallbreaker", + "movepool": ["Blue Flare", "Draco Meteor", "Heat Wave", "Protect", "Tailwind"], + "abilities": ["Turboblaze"], + "teraTypes": ["Fire"] + } + ] + }, + "zekrom": { + "level": 73, + "sets": [ + { + "role": "Doubles Wallbreaker", + "movepool": ["Bolt Strike", "Dragon Claw", "Dragon Dance", "Protect"], + "abilities": ["Teravolt"], + "teraTypes": ["Dragon", "Electric", "Fire", "Grass"] + } + ] + }, "landorus": { "level": 76, "sets": [ { "role": "Doubles Wallbreaker", - "movepool": ["Earth Power", "Nasty Plot", "Protect", "Psychic", "Sandsear Storm", "Sludge Bomb"], + "movepool": ["Earth Power", "Nasty Plot", "Protect", "Psychic", "Rock Slide", "Sandsear Storm", "Sludge Bomb"], + "abilities": ["Sheer Force"], "teraTypes": ["Ground", "Poison", "Psychic"] - }, - { - "role": "Tera Blast user", - "movepool": ["Nasty Plot", "Protect", "Sandsear Storm", "Tera Blast"], - "teraTypes": ["Flying", "Ice"] } ] }, "landorustherian": { - "level": 78, + "level": 77, "sets": [ { "role": "Doubles Support", - "movepool": ["Rock Slide", "Stealth Rock", "Stomping Tantrum", "Taunt", "U-turn"], + "movepool": ["Protect", "Rock Slide", "Stomping Tantrum", "Stone Edge", "Taunt", "U-turn"], + "abilities": ["Intimidate"], "teraTypes": ["Steel", "Water"] }, { "role": "Tera Blast user", - "movepool": ["Earthquake", "Protect", "Swords Dance", "Tera Blast"], + "movepool": ["Rock Slide", "Stomping Tantrum", "Stone Edge", "Tera Blast", "U-turn"], + "abilities": ["Intimidate"], "teraTypes": ["Flying"] } ] }, + "kyurem": { + "level": 77, + "sets": [ + { + "role": "Offensive Protect", + "movepool": ["Earth Power", "Icicle Spear", "Protect", "Scale Shot"], + "abilities": ["Pressure"], + "teraTypes": ["Fairy", "Steel"] + }, + { + "role": "Doubles Fast Attacker", + "movepool": ["Draco Meteor", "Earth Power", "Glaciate", "Protect"], + "abilities": ["Pressure"], + "teraTypes": ["Fairy", "Steel"] + } + ] + }, + "kyuremwhite": { + "level": 72, + "sets": [ + { + "role": "Doubles Wallbreaker", + "movepool": ["Draco Meteor", "Earth Power", "Fusion Flare", "Ice Beam", "Protect"], + "abilities": ["Turboblaze"], + "teraTypes": ["Fire"] + }, + { + "role": "Doubles Fast Attacker", + "movepool": ["Blizzard", "Earth Power", "Freeze-Dry", "Fusion Flare", "Protect"], + "abilities": ["Turboblaze"], + "teraTypes": ["Fire", "Ground"] + } + ] + }, + "kyuremblack": { + "level": 75, + "sets": [ + { + "role": "Offensive Protect", + "movepool": ["Dragon Dance", "Fusion Bolt", "Icicle Spear", "Protect"], + "abilities": ["Teravolt"], + "teraTypes": ["Electric"] + } + ] + }, + "keldeoresolute": { + "level": 78, + "sets": [ + { + "role": "Doubles Wallbreaker", + "movepool": ["Hydro Pump", "Muddy Water", "Secret Sword", "Vacuum Wave"], + "abilities": ["Justified"], + "teraTypes": ["Fighting", "Steel", "Water"] + }, + { + "role": "Offensive Protect", + "movepool": ["Hydro Pump", "Muddy Water", "Protect", "Secret Sword", "Vacuum Wave"], + "abilities": ["Justified"], + "teraTypes": ["Fighting", "Steel", "Water"] + } + ] + }, "meloetta": { - "level": 81, + "level": 80, "sets": [ { "role": "Doubles Wallbreaker", "movepool": ["Calm Mind", "Focus Blast", "Hyper Voice", "Protect", "Psychic", "U-turn"], + "abilities": ["Serene Grace"], "teraTypes": ["Fighting", "Normal", "Psychic"] }, { "role": "Tera Blast user", "movepool": ["Close Combat", "Psychic", "Relic Song", "Tera Blast"], + "abilities": ["Serene Grace"], "teraTypes": ["Normal"] } ] @@ -2719,12 +4070,14 @@ "sets": [ { "role": "Bulky Protect", - "movepool": ["Body Press", "Knock Off", "Leech Seed", "Spiky Shield", "Wood Hammer"], + "movepool": ["Body Press", "Coaching", "Knock Off", "Leech Seed", "Spiky Shield", "Wood Hammer"], + "abilities": ["Bulletproof"], "teraTypes": ["Fire", "Rock", "Steel", "Water"] }, { "role": "Doubles Bulky Setup", - "movepool": ["Body Press", "Iron Defense", "Synthesis", "Wood Hammer"], + "movepool": ["Body Press", "Iron Defense", "Leech Seed", "Spiky Shield"], + "abilities": ["Bulletproof"], "teraTypes": ["Fire", "Rock", "Steel", "Water"] } ] @@ -2735,16 +4088,18 @@ { "role": "Doubles Setup Sweeper", "movepool": ["Fire Blast", "Heat Wave", "Nasty Plot", "Protect", "Psyshock"], + "abilities": ["Blaze"], "teraTypes": ["Fire"] } ] }, "greninjabond": { - "level": 82, + "level": 83, "sets": [ { "role": "Offensive Protect", "movepool": ["Dark Pulse", "Gunk Shot", "Hydro Pump", "Ice Beam", "Protect", "Taunt"], + "abilities": ["Battle Bond"], "teraTypes": ["Dark", "Poison", "Water"] } ] @@ -2755,16 +4110,18 @@ { "role": "Doubles Bulky Attacker", "movepool": ["Brave Bird", "Overheat", "Protect", "Tailwind", "U-turn", "Will-O-Wisp"], + "abilities": ["Gale Wings"], "teraTypes": ["Flying", "Ground"] } ] }, "vivillon": { - "level": 87, + "level": 88, "sets": [ { "role": "Doubles Support", "movepool": ["Hurricane", "Pollen Puff", "Protect", "Sleep Powder"], + "abilities": ["Compound Eyes"], "teraTypes": ["Flying", "Steel"] } ] @@ -2775,21 +4132,24 @@ { "role": "Offensive Protect", "movepool": ["Fire Blast", "Heat Wave", "Hyper Voice", "Protect", "Taunt", "Will-O-Wisp"], + "abilities": ["Unnerve"], "teraTypes": ["Fire", "Normal", "Water"] }, { "role": "Tera Blast user", "movepool": ["Fire Blast", "Hyper Voice", "Protect", "Tera Blast"], + "abilities": ["Unnerve"], "teraTypes": ["Grass"] } ] }, "florges": { - "level": 85, + "level": 84, "sets": [ { "role": "Bulky Protect", "movepool": ["Calm Mind", "Dazzling Gleam", "Moonblast", "Protect", "Synthesis"], + "abilities": ["Flower Veil"], "teraTypes": ["Steel"] } ] @@ -2800,16 +4160,57 @@ { "role": "Doubles Bulky Attacker", "movepool": ["Double-Edge", "High Horsepower", "Horn Leech", "Leaf Storm"], + "abilities": ["Sap Sipper"], "teraTypes": ["Ground", "Normal"] } ] }, + "meowstic": { + "level": 87, + "sets": [ + { + "role": "Doubles Bulky Attacker", + "movepool": ["Fake Out", "Fake Tears", "Helping Hand", "Light Screen", "Psychic", "Reflect"], + "abilities": ["Prankster"], + "teraTypes": ["Dark", "Steel"] + }, + { + "role": "Doubles Support", + "movepool": ["Fake Out", "Helping Hand", "Psychic", "Thunder Wave"], + "abilities": ["Prankster"], + "teraTypes": ["Dark", "Steel"] + } + ] + }, + "meowsticf": { + "level": 88, + "sets": [ + { + "role": "Offensive Protect", + "movepool": ["Alluring Voice", "Dark Pulse", "Protect", "Psychic", "Thunderbolt"], + "abilities": ["Competitive"], + "teraTypes": ["Dark", "Electric", "Fairy"] + } + ] + }, + "malamar": { + "level": 80, + "sets": [ + { + "role": "Bulky Protect", + "movepool": ["Knock Off", "Protect", "Psycho Cut", "Superpower", "Trick Room"], + "abilities": ["Contrary"], + "teraTypes": ["Fighting"] + } + ] + }, "dragalge": { "level": 88, "sets": [ { "role": "Doubles Wallbreaker", "movepool": ["Draco Meteor", "Hydro Pump", "Protect", "Sludge Bomb"], + "abilities": ["Adaptability"], "teraTypes": ["Water"] } ] @@ -2820,11 +4221,13 @@ { "role": "Choice Item user", "movepool": ["Aura Sphere", "Dark Pulse", "Dragon Pulse", "Muddy Water", "U-turn"], + "abilities": ["Mega Launcher"], "teraTypes": ["Dark", "Dragon", "Fighting"] }, { "role": "Doubles Bulky Attacker", "movepool": ["Aura Sphere", "Dark Pulse", "Heal Pulse", "Muddy Water", "Protect"], + "abilities": ["Mega Launcher"], "teraTypes": ["Dark", "Fighting"] } ] @@ -2835,11 +4238,13 @@ { "role": "Bulky Protect", "movepool": ["Calm Mind", "Hyper Voice", "Protect", "Substitute"], + "abilities": ["Pixilate"], "teraTypes": ["Steel"] }, { "role": "Tera Blast user", "movepool": ["Hyper Voice", "Protect", "Quick Attack", "Tera Blast"], + "abilities": ["Pixilate"], "teraTypes": ["Fire", "Ground"] } ] @@ -2850,26 +4255,29 @@ { "role": "Doubles Setup Sweeper", "movepool": ["Brave Bird", "Close Combat", "Protect", "Swords Dance"], + "abilities": ["Unburden"], "teraTypes": ["Fighting", "Fire", "Flying"] } ] }, "dedenne": { - "level": 87, + "level": 86, "sets": [ { "role": "Doubles Support", "movepool": ["Dazzling Gleam", "Helping Hand", "Nuzzle", "Super Fang", "Thunderbolt"], + "abilities": ["Cheek Pouch"], "teraTypes": ["Electric", "Flying"] } ] }, "carbink": { - "level": 90, + "level": 88, "sets": [ { "role": "Doubles Bulky Setup", "movepool": ["Body Press", "Iron Defense", "Moonblast", "Trick Room"], + "abilities": ["Clear Body"], "teraTypes": ["Fighting"] } ] @@ -2879,47 +4287,52 @@ "sets": [ { "role": "Doubles Bulky Attacker", - "movepool": ["Draco Meteor", "Fire Blast", "Power Whip", "Protect", "Scald", "Sludge Bomb", "Thunderbolt"], + "movepool": ["Breaking Swipe", "Draco Meteor", "Fire Blast", "Power Whip", "Protect", "Scald", "Sludge Bomb", "Thunderbolt"], + "abilities": ["Sap Sipper"], "teraTypes": ["Electric", "Fire", "Grass", "Poison", "Water"] } ] }, "goodrahisui": { - "level": 84, + "level": 83, "sets": [ { "role": "Doubles Bulky Attacker", "movepool": ["Draco Meteor", "Dragon Tail", "Fire Blast", "Heavy Slam", "Hydro Pump", "Thunderbolt"], + "abilities": ["Sap Sipper"], "teraTypes": ["Electric", "Fire", "Water"] } ] }, "klefki": { - "level": 83, + "level": 82, "sets": [ { "role": "Doubles Support", "movepool": ["Dazzling Gleam", "Foul Play", "Light Screen", "Reflect", "Spikes", "Thunder Wave"], + "abilities": ["Prankster"], "teraTypes": ["Flying", "Water"] } ] }, "trevenant": { - "level": 87, + "level": 88, "sets": [ { "role": "Doubles Bulky Attacker", "movepool": ["Poltergeist", "Protect", "Trick Room", "Wood Hammer"], + "abilities": ["Harvest"], "teraTypes": ["Dark", "Water"] } ] }, "avalugg": { - "level": 90, + "level": 91, "sets": [ { "role": "Bulky Protect", "movepool": ["Avalanche", "Body Press", "Protect", "Recover"], + "abilities": ["Sturdy"], "teraTypes": ["Fighting", "Poison", "Water"] } ] @@ -2930,6 +4343,7 @@ { "role": "Bulky Protect", "movepool": ["Body Press", "Mountain Gale", "Protect", "Rock Slide"], + "abilities": ["Sturdy"], "teraTypes": ["Fighting", "Flying", "Poison"] } ] @@ -2939,12 +4353,14 @@ "sets": [ { "role": "Doubles Fast Attacker", - "movepool": ["Boomburst", "Draco Meteor", "Flamethrower", "Hurricane", "Protect", "Tailwind"], - "teraTypes": ["Normal"] + "movepool": ["Draco Meteor", "Flamethrower", "Hurricane", "Protect", "Tailwind"], + "abilities": ["Frisk"], + "teraTypes": ["Dragon", "Fire", "Steel"] }, { "role": "Doubles Bulky Attacker", "movepool": ["Draco Meteor", "Flamethrower", "Hurricane", "Protect", "Tailwind"], + "abilities": ["Frisk"], "teraTypes": ["Dragon", "Fire", "Steel"] } ] @@ -2955,21 +4371,24 @@ { "role": "Doubles Bulky Attacker", "movepool": ["Body Press", "Diamond Storm", "Protect", "Trick Room"], + "abilities": ["Clear Body"], "teraTypes": ["Fighting"] }, { "role": "Bulky Protect", "movepool": ["Diamond Storm", "Moonblast", "Protect", "Trick Room"], + "abilities": ["Clear Body"], "teraTypes": ["Grass", "Steel"] } ] }, "hoopa": { - "level": 84, + "level": 85, "sets": [ { "role": "Doubles Fast Attacker", "movepool": ["Focus Blast", "Hyperspace Hole", "Protect", "Shadow Ball", "Trick"], + "abilities": ["Magician"], "teraTypes": ["Dark", "Fighting", "Psychic"] } ] @@ -2980,11 +4399,13 @@ { "role": "Choice Item user", "movepool": ["Drain Punch", "Gunk Shot", "Hyperspace Fury", "Trick", "Zen Headbutt"], + "abilities": ["Magician"], "teraTypes": ["Dark", "Fighting", "Poison"] }, { "role": "Doubles Bulky Attacker", "movepool": ["Focus Blast", "Gunk Shot", "Hyperspace Fury", "Protect", "Psychic", "Trick"], + "abilities": ["Magician"], "teraTypes": ["Dark", "Fighting", "Poison"] } ] @@ -2995,6 +4416,7 @@ { "role": "Doubles Bulky Attacker", "movepool": ["Earth Power", "Heat Wave", "Protect", "Sludge Bomb", "Steam Eruption"], + "abilities": ["Water Absorb"], "teraTypes": ["Ground"] } ] @@ -3005,6 +4427,7 @@ { "role": "Doubles Bulky Attacker", "movepool": ["Knock Off", "Leaf Storm", "Protect", "Spirit Shackle", "Tailwind"], + "abilities": ["Overgrow"], "teraTypes": ["Dark", "Ghost", "Water"] } ] @@ -3015,17 +4438,58 @@ { "role": "Doubles Bulky Attacker", "movepool": ["Knock Off", "Leaf Blade", "Protect", "Tailwind", "Triple Arrows"], + "abilities": ["Scrappy"], "teraTypes": ["Dark", "Fighting", "Steel"] } ] }, + "incineroar": { + "level": 78, + "sets": [ + { + "role": "Doubles Bulky Attacker", + "movepool": ["Fake Out", "Flare Blitz", "Knock Off", "Parting Shot"], + "abilities": ["Intimidate"], + "teraTypes": ["Water"] + } + ] + }, + "primarina": { + "level": 79, + "sets": [ + { + "role": "Doubles Wallbreaker", + "movepool": ["Flip Turn", "Hydro Pump", "Hyper Voice", "Moonblast"], + "abilities": ["Liquid Voice"], + "teraTypes": ["Water"] + } + ] + }, + "toucannon": { + "level": 87, + "sets": [ + { + "role": "Doubles Bulky Attacker", + "movepool": ["Brave Bird", "Bullet Seed", "Protect", "Tailwind"], + "abilities": ["Skill Link"], + "teraTypes": ["Grass", "Steel"] + }, + { + "role": "Bulky Protect", + "movepool": ["Beak Blast", "Bullet Seed", "Knock Off", "Protect"], + "abilities": ["Skill Link"], + "teraTypes": ["Grass", "Steel"] + } + ] + }, "gumshoos": { - "level": 92, + "level": 93, "sets": [ { "role": "Choice Item user", - "movepool": ["Body Slam", "Crunch", "Fire Fang", "Psychic Fangs", "U-turn"], - "teraTypes": ["Psychic"] + "movepool": ["Double-Edge", "Knock Off", "Stomping Tantrum", "U-turn"], + "abilities": ["Adaptability"], + "teraTypes": ["Normal"] } ] }, @@ -3033,18 +4497,20 @@ "level": 83, "sets": [ { - "role": "Doubles Bulky Attacker", - "movepool": ["Bug Buzz", "Protect", "Sticky Web", "Thunderbolt"], + "role": "Bulky Protect", + "movepool": ["Bug Buzz", "Electroweb", "Protect", "Sticky Web", "Thunderbolt"], + "abilities": ["Levitate"], "teraTypes": ["Electric"] } ] }, "crabominable": { - "level": 88, + "level": 89, "sets": [ { "role": "Doubles Wallbreaker", "movepool": ["Drain Punch", "Gunk Shot", "Ice Hammer", "Protect", "Wide Guard"], + "abilities": ["Iron Fist"], "teraTypes": ["Fire", "Poison"] } ] @@ -3055,6 +4521,7 @@ { "role": "Bulky Protect", "movepool": ["Hurricane", "Protect", "Quiver Dance", "Revelation Dance", "Tailwind"], + "abilities": ["Dancer"], "teraTypes": ["Ground"] } ] @@ -3065,81 +4532,90 @@ { "role": "Bulky Protect", "movepool": ["Hurricane", "Protect", "Quiver Dance", "Revelation Dance", "Tailwind"], + "abilities": ["Dancer"], "teraTypes": ["Ground"] } ] }, "oricoriopau": { - "level": 87, + "level": 89, "sets": [ { "role": "Bulky Protect", "movepool": ["Hurricane", "Protect", "Quiver Dance", "Revelation Dance", "Tailwind"], + "abilities": ["Dancer"], "teraTypes": ["Fighting", "Ground"] } ] }, "oricoriosensu": { - "level": 85, + "level": 86, "sets": [ { "role": "Bulky Protect", "movepool": ["Hurricane", "Protect", "Quiver Dance", "Revelation Dance", "Tailwind"], + "abilities": ["Dancer"], "teraTypes": ["Fighting", "Ground"] } ] }, "ribombee": { - "level": 85, + "level": 86, "sets": [ { "role": "Doubles Support", - "movepool": ["Pollen Puff", "Protect", "Sticky Web", "Tailwind", "U-turn"], - "teraTypes": ["Dark"] + "movepool": ["Moonblast", "Pollen Puff", "Protect", "Tailwind"], + "abilities": ["Shield Dust"], + "teraTypes": ["Steel"] }, { "role": "Tera Blast user", "movepool": ["Dazzling Gleam", "Moonblast", "Protect", "Quiver Dance", "Tera Blast"], + "abilities": ["Shield Dust"], "teraTypes": ["Ground"] } ] }, "lycanroc": { - "level": 86, + "level": 85, "sets": [ { "role": "Offensive Protect", "movepool": ["Accelerock", "Close Combat", "Drill Run", "Protect", "Rock Slide", "Swords Dance"], + "abilities": ["Sand Rush"], "teraTypes": ["Fighting"] } ] }, "lycanrocmidnight": { - "level": 85, + "level": 84, "sets": [ { "role": "Choice Item user", "movepool": ["Close Combat", "Knock Off", "Rock Slide", "Stone Edge"], + "abilities": ["No Guard"], "teraTypes": ["Fighting", "Rock", "Water"] } ] }, "lycanrocdusk": { - "level": 83, + "level": 82, "sets": [ { "role": "Offensive Protect", "movepool": ["Accelerock", "Close Combat", "Protect", "Psychic Fangs", "Rock Slide", "Swords Dance"], + "abilities": ["Tough Claws"], "teraTypes": ["Fighting"] } ] }, "toxapex": { - "level": 96, + "level": 94, "sets": [ { "role": "Bulky Protect", - "movepool": ["Acid Spray", "Baneful Bunker", "Recover", "Toxic", "Toxic Spikes"], + "movepool": ["Baneful Bunker", "Infestation", "Recover", "Toxic"], + "abilities": ["Regenerator"], "teraTypes": ["Grass", "Steel"] } ] @@ -3150,17 +4626,54 @@ { "role": "Doubles Bulky Attacker", "movepool": ["Body Press", "Heavy Slam", "High Horsepower", "Rest", "Stone Edge"], + "abilities": ["Stamina"], "teraTypes": ["Fighting"] } ] }, + "araquanid": { + "level": 85, + "sets": [ + { + "role": "Doubles Bulky Setup", + "movepool": ["Liquidation", "Lunge", "Protect", "Sticky Web", "Wide Guard"], + "abilities": ["Water Bubble"], + "teraTypes": ["Water"] + }, + { + "role": "Doubles Support", + "movepool": ["Leech Life", "Liquidation", "Protect", "Sticky Web", "Wide Guard"], + "abilities": ["Water Bubble"], + "teraTypes": ["Water"] + }, + { + "role": "Doubles Bulky Attacker", + "movepool": ["Hydro Pump", "Liquidation", "Protect", "Sticky Web", "Wide Guard"], + "abilities": ["Water Bubble"], + "teraTypes": ["Water"] + } + ] + }, "lurantis": { - "level": 87, + "level": 86, "sets": [ { "role": "Doubles Bulky Attacker", "movepool": ["Leaf Blade", "Leaf Storm", "Pollen Puff", "Superpower"], + "abilities": ["Contrary"], + "teraTypes": ["Fighting"] + }, + { + "role": "Bulky Protect", + "movepool": ["Knock Off", "Leaf Blade", "Pollen Puff", "Protect", "Superpower"], + "abilities": ["Contrary"], "teraTypes": ["Fighting"] + }, + { + "role": "Tera Blast user", + "movepool": ["Knock Off", "Leaf Storm", "Superpower", "Tera Blast"], + "abilities": ["Contrary"], + "teraTypes": ["Stellar"] } ] }, @@ -3170,6 +4683,7 @@ { "role": "Doubles Fast Attacker", "movepool": ["Encore", "Fake Out", "Fire Blast", "Heat Wave", "Incinerate", "Poison Gas", "Protect", "Sludge Bomb"], + "abilities": ["Corrosion"], "teraTypes": ["Fire", "Flying", "Water"] } ] @@ -3179,8 +4693,20 @@ "sets": [ { "role": "Doubles Bulky Attacker", - "movepool": ["High Jump Kick", "Knock Off", "Play Rough", "Power Whip", "Rapid Spin", "U-turn"], - "teraTypes": ["Fairy", "Fighting"] + "movepool": ["High Jump Kick", "Knock Off", "Power Whip", "Rapid Spin", "Triple Axel"], + "abilities": ["Queenly Majesty"], + "teraTypes": ["Fighting", "Fire"] + } + ] + }, + "comfey": { + "level": 89, + "sets": [ + { + "role": "Doubles Support", + "movepool": ["Draining Kiss", "Floral Healing", "Helping Hand", "Tailwind"], + "abilities": ["Triage"], + "teraTypes": ["Fairy", "Steel"] } ] }, @@ -3190,37 +4716,52 @@ { "role": "Doubles Support", "movepool": ["Hyper Voice", "Instruct", "Psyshock", "Trick Room"], + "abilities": ["Telepathy"], "teraTypes": ["Fairy"] } ] }, "passimian": { - "level": 83, + "level": 82, "sets": [ { "role": "Choice Item user", "movepool": ["Close Combat", "Gunk Shot", "Knock Off", "Rock Slide", "U-turn"], + "abilities": ["Defiant"], "teraTypes": ["Dark", "Poison"] } ] }, "palossand": { - "level": 89, + "level": 90, "sets": [ { "role": "Doubles Support", - "movepool": ["Earth Power", "Hypnosis", "Protect", "Shadow Ball", "Shore Up", "Stealth Rock"], + "movepool": ["Earth Power", "Protect", "Shadow Ball", "Shore Up", "Stealth Rock"], + "abilities": ["Water Compaction"], "teraTypes": ["Grass", "Water"] } ] }, + "minior": { + "level": 82, + "sets": [ + { + "role": "Doubles Setup Sweeper", + "movepool": ["Acrobatics", "Protect", "Rock Slide", "Shell Smash"], + "abilities": ["Shields Down"], + "teraTypes": ["Flying", "Rock", "Steel"] + } + ] + }, "komala": { - "level": 90, + "level": 92, "sets": [ { "role": "Doubles Bulky Attacker", - "movepool": ["Body Slam", "Knock Off", "Play Rough", "Rapid Spin", "Sucker Punch", "Superpower", "U-turn", "Wood Hammer"], - "teraTypes": ["Fairy", "Fighting", "Grass"] + "movepool": ["Double-Edge", "Knock Off", "Rapid Spin", "Sucker Punch", "Superpower", "U-turn", "Wood Hammer"], + "abilities": ["Comatose"], + "teraTypes": ["Fighting", "Grass"] } ] }, @@ -3229,8 +4770,9 @@ "sets": [ { "role": "Doubles Setup Sweeper", - "movepool": ["Drain Punch", "Play Rough", "Protect", "Shadow Claw", "Shadow Sneak", "Swords Dance"], - "teraTypes": ["Fighting", "Ghost"] + "movepool": ["Play Rough", "Protect", "Shadow Claw", "Shadow Sneak", "Swords Dance"], + "abilities": ["Disguise"], + "teraTypes": ["Ghost"] } ] }, @@ -3240,12 +4782,111 @@ { "role": "Offensive Protect", "movepool": ["Crunch", "Protect", "Psychic Fangs", "Wave Crash"], + "abilities": ["Strong Jaw"], "teraTypes": ["Dark", "Psychic"] }, { "role": "Choice Item user", "movepool": ["Aqua Jet", "Crunch", "Flip Turn", "Ice Fang", "Psychic Fangs", "Wave Crash"], + "abilities": ["Strong Jaw"], + "teraTypes": ["Dark"] + } + ] + }, + "solgaleo": { + "level": 74, + "sets": [ + { + "role": "Doubles Bulky Attacker", + "movepool": ["Close Combat", "Flare Blitz", "Knock Off", "Psychic Fangs", "Sunsteel Strike"], + "abilities": ["Full Metal Body"], + "teraTypes": ["Dark", "Fighting", "Fire"] + }, + { + "role": "Doubles Bulky Setup", + "movepool": ["Close Combat", "Flame Charge", "Protect", "Sunsteel Strike"], + "abilities": ["Full Metal Body"], + "teraTypes": ["Fighting", "Fire"] + } + ] + }, + "lunala": { + "level": 72, + "sets": [ + { + "role": "Doubles Support", + "movepool": ["Icy Wind", "Moongeist Beam", "Moonlight", "Tailwind", "Wide Guard", "Will-O-Wisp"], + "abilities": ["Shadow Shield"], + "teraTypes": ["Dark"] + }, + { + "role": "Offensive Protect", + "movepool": ["Meteor Beam", "Moonblast", "Moongeist Beam", "Protect"], + "abilities": ["Shadow Shield"], + "teraTypes": ["Fairy"] + }, + { + "role": "Bulky Protect", + "movepool": ["Calm Mind", "Moonblast", "Moongeist Beam", "Protect"], + "abilities": ["Shadow Shield"], + "teraTypes": ["Fairy"] + } + ] + }, + "necrozma": { + "level": 80, + "sets": [ + { + "role": "Doubles Setup Sweeper", + "movepool": ["Brick Break", "Dragon Dance", "Knock Off", "Photon Geyser"], + "abilities": ["Prism Armor"], + "teraTypes": ["Dark", "Fighting"] + }, + { + "role": "Offensive Protect", + "movepool": ["Earth Power", "Meteor Beam", "Photon Geyser", "Protect"], + "abilities": ["Prism Armor"], + "teraTypes": ["Dark", "Steel"] + }, + { + "role": "Bulky Protect", + "movepool": ["Calm Mind", "Earth Power", "Photon Geyser", "Protect"], + "abilities": ["Prism Armor"], + "teraTypes": ["Dark", "Steel"] + } + ] + }, + "necrozmaduskmane": { + "level": 71, + "sets": [ + { + "role": "Doubles Setup Sweeper", + "movepool": ["Dragon Dance", "Earthquake", "Photon Geyser", "Protect", "Sunsteel Strike"], + "abilities": ["Prism Armor"], + "teraTypes": ["Dark", "Steel", "Water"] + }, + { + "role": "Doubles Wallbreaker", + "movepool": ["Earthquake", "Photon Geyser", "Protect", "Sunsteel Strike", "Trick Room"], + "abilities": ["Prism Armor"], + "teraTypes": ["Dark", "Steel", "Water"] + } + ] + }, + "necrozmadawnwings": { + "level": 74, + "sets": [ + { + "role": "Doubles Wallbreaker", + "movepool": ["Moongeist Beam", "Photon Geyser", "Protect", "Trick Room"], + "abilities": ["Prism Armor"], "teraTypes": ["Dark"] + }, + { + "role": "Tera Blast user", + "movepool": ["Moongeist Beam", "Photon Geyser", "Tera Blast", "Trick Room"], + "abilities": ["Prism Armor"], + "teraTypes": ["Fairy", "Fighting"] } ] }, @@ -3255,11 +4896,13 @@ { "role": "Doubles Setup Sweeper", "movepool": ["Clanging Scales", "Clangorous Soul", "Drain Punch", "Iron Head"], + "abilities": ["Soundproof"], "teraTypes": ["Steel"] }, { "role": "Doubles Bulky Setup", "movepool": ["Clanging Scales", "Clangorous Soul", "Iron Head", "Protect"], + "abilities": ["Soundproof"], "teraTypes": ["Steel"] } ] @@ -3270,11 +4913,13 @@ { "role": "Doubles Wallbreaker", "movepool": ["Dazzling Gleam", "Flash Cannon", "Fleur Cannon", "Protect", "Trick Room"], + "abilities": ["Soul-Heart"], "teraTypes": ["Fairy", "Water"] }, { "role": "Doubles Bulky Attacker", "movepool": ["Aura Sphere", "Dazzling Gleam", "Flash Cannon", "Fleur Cannon"], + "abilities": ["Soul-Heart"], "teraTypes": ["Fairy", "Fighting", "Water"] } ] @@ -3283,13 +4928,15 @@ "level": 82, "sets": [ { - "role": "Doubles Wallbreaker", - "movepool": ["Grassy Glide", "High Horsepower", "Knock Off", "U-turn", "Wood Hammer"], - "teraTypes": ["Fire", "Grass"] + "role": "Doubles Bulky Attacker", + "movepool": ["Fake Out", "Grassy Glide", "High Horsepower", "Wood Hammer"], + "abilities": ["Grassy Surge"], + "teraTypes": ["Fire", "Grass", "Steel"] }, { "role": "Doubles Support", "movepool": ["Fake Out", "Grassy Glide", "U-turn", "Wood Hammer"], + "abilities": ["Grassy Surge"], "teraTypes": ["Fire", "Grass", "Steel"] } ] @@ -3300,16 +4947,18 @@ { "role": "Offensive Protect", "movepool": ["Court Change", "Gunk Shot", "High Jump Kick", "Protect", "Pyro Ball", "Sucker Punch", "U-turn"], + "abilities": ["Blaze"], "teraTypes": ["Fighting", "Fire", "Poison"] } ] }, "inteleon": { - "level": 82, + "level": 78, "sets": [ { "role": "Choice Item user", - "movepool": ["Hydro Pump", "Ice Beam", "Scald", "U-turn"], + "movepool": ["Hydro Pump", "Ice Beam", "Muddy Water", "Scald"], + "abilities": ["Torrent"], "teraTypes": ["Water"] } ] @@ -3319,17 +4968,19 @@ "sets": [ { "role": "Doubles Bulky Setup", - "movepool": ["Body Slam", "High Horsepower", "Knock Off", "Protect", "Swords Dance"], + "movepool": ["Double-Edge", "High Horsepower", "Knock Off", "Protect", "Swords Dance"], + "abilities": ["Cheek Pouch"], "teraTypes": ["Fairy", "Ghost", "Ground"] } ] }, "corviknight": { - "level": 82, + "level": 81, "sets": [ { "role": "Doubles Bulky Attacker", - "movepool": ["Brave Bird", "Defog", "Iron Head", "Roost", "Tailwind", "U-turn"], + "movepool": ["Brave Bird", "Iron Head", "Roost", "Tailwind", "U-turn"], + "abilities": ["Mirror Armor"], "teraTypes": ["Dragon"] } ] @@ -3339,32 +4990,42 @@ "sets": [ { "role": "Doubles Setup Sweeper", - "movepool": ["Crunch", "Liquidation", "Protect", "Rock Slide", "Shell Smash"], - "teraTypes": ["Dark", "Water"] + "movepool": ["Crunch", "Liquidation", "Rock Slide", "Shell Smash"], + "abilities": ["Strong Jaw"], + "teraTypes": ["Dark"] + }, + { + "role": "Doubles Bulky Setup", + "movepool": ["Liquidation", "Protect", "Rock Slide", "Shell Smash"], + "abilities": ["Shell Armor", "Swift Swim"], + "teraTypes": ["Water"] } ] }, "coalossal": { - "level": 89, + "level": 90, "sets": [ { "role": "Doubles Bulky Attacker", "movepool": ["Fire Blast", "Heat Wave", "Incinerate", "Protect", "Rapid Spin", "Stealth Rock", "Stone Edge", "Will-O-Wisp"], + "abilities": ["Flame Body"], "teraTypes": ["Water"] } ] }, "flapple": { - "level": 92, + "level": 94, "sets": [ { "role": "Doubles Bulky Attacker", "movepool": ["Dragon Dance", "Dragon Rush", "Grav Apple", "Protect", "Sucker Punch"], + "abilities": ["Ripen"], "teraTypes": ["Fire", "Grass", "Steel"] }, { "role": "Tera Blast user", "movepool": ["Dragon Dance", "Grav Apple", "Protect", "Tera Blast"], + "abilities": ["Hustle"], "teraTypes": ["Dragon", "Fire"] } ] @@ -3375,6 +5036,7 @@ { "role": "Doubles Bulky Attacker", "movepool": ["Apple Acid", "Dragon Pulse", "Leech Seed", "Protect"], + "abilities": ["Ripen", "Thick Fat"], "teraTypes": ["Steel"] } ] @@ -3385,31 +5047,35 @@ { "role": "Doubles Bulky Setup", "movepool": ["Coil", "High Horsepower", "Rest", "Stone Edge"], + "abilities": ["Shed Skin"], "teraTypes": ["Dragon", "Steel"] }, { "role": "Doubles Support", "movepool": ["Glare", "High Horsepower", "Rest", "Stealth Rock", "Stone Edge"], + "abilities": ["Shed Skin"], "teraTypes": ["Dragon", "Steel"] } ] }, "cramorant": { - "level": 87, + "level": 86, "sets": [ { "role": "Bulky Protect", "movepool": ["Brave Bird", "Protect", "Roost", "Surf", "Tailwind"], + "abilities": ["Gulp Missile"], "teraTypes": ["Ground"] } ] }, "barraskewda": { - "level": 83, + "level": 84, "sets": [ { "role": "Doubles Wallbreaker", "movepool": ["Close Combat", "Poison Jab", "Protect", "Psychic Fangs", "Waterfall"], + "abilities": ["Propeller Tail"], "teraTypes": ["Fighting"] } ] @@ -3420,7 +5086,14 @@ { "role": "Choice Item user", "movepool": ["Overdrive", "Sludge Bomb", "Snarl", "Volt Switch"], + "abilities": ["Punk Rock"], "teraTypes": ["Dark", "Electric", "Flying"] + }, + { + "role": "Doubles Wallbreaker", + "movepool": ["Overdrive", "Psychic Noise", "Sludge Bomb", "Volt Switch"], + "abilities": ["Punk Rock"], + "teraTypes": ["Electric", "Flying", "Psychic"] } ] }, @@ -3430,7 +5103,14 @@ { "role": "Choice Item user", "movepool": ["Overdrive", "Sludge Bomb", "Snarl", "Volt Switch"], + "abilities": ["Punk Rock"], "teraTypes": ["Dark", "Electric", "Flying"] + }, + { + "role": "Doubles Wallbreaker", + "movepool": ["Overdrive", "Psychic Noise", "Sludge Bomb", "Volt Switch"], + "abilities": ["Punk Rock"], + "teraTypes": ["Electric", "Flying", "Psychic"] } ] }, @@ -3440,11 +5120,13 @@ { "role": "Tera Blast user", "movepool": ["Protect", "Shadow Ball", "Shell Smash", "Tera Blast"], + "abilities": ["Cursed Body"], "teraTypes": ["Fighting"] }, { "role": "Doubles Setup Sweeper", "movepool": ["Baton Pass", "Protect", "Shadow Ball", "Shell Smash"], + "abilities": ["Cursed Body"], "teraTypes": ["Dark", "Normal"] } ] @@ -3455,6 +5137,7 @@ { "role": "Doubles Wallbreaker", "movepool": ["Dazzling Gleam", "Mystical Fire", "Protect", "Psychic", "Trick Room"], + "abilities": ["Magic Bounce"], "teraTypes": ["Fairy", "Fire", "Psychic", "Steel"] } ] @@ -3465,11 +5148,13 @@ { "role": "Doubles Bulky Attacker", "movepool": ["Fake Out", "Light Screen", "Parting Shot", "Reflect", "Spirit Break"], + "abilities": ["Prankster"], "teraTypes": ["Steel"] }, { "role": "Doubles Support", "movepool": ["Fake Out", "Parting Shot", "Spirit Break", "Sucker Punch", "Taunt", "Thunder Wave"], + "abilities": ["Prankster"], "teraTypes": ["Steel"] } ] @@ -3480,31 +5165,46 @@ { "role": "Doubles Bulky Attacker", "movepool": ["Close Combat", "Fake Out", "Helping Hand", "Iron Head", "Knock Off", "U-turn"], + "abilities": ["Steely Spirit", "Tough Claws"], "teraTypes": ["Fighting", "Steel"] }, { "role": "Choice Item user", "movepool": ["Close Combat", "Iron Head", "Knock Off", "U-turn"], + "abilities": ["Steely Spirit", "Tough Claws"], "teraTypes": ["Fighting", "Steel"] } ] }, + "alcremie": { + "level": 89, + "sets": [ + { + "role": "Doubles Support", + "movepool": ["Alluring Voice", "Dazzling Gleam", "Decorate", "Encore", "Protect"], + "abilities": ["Aroma Veil"], + "teraTypes": ["Steel"] + } + ] + }, "falinks": { - "level": 86, + "level": 87, "sets": [ { "role": "Doubles Setup Sweeper", - "movepool": ["Close Combat", "Iron Head", "Knock Off", "No Retreat"], - "teraTypes": ["Dark", "Fighting", "Steel"] + "movepool": ["Close Combat", "Iron Head", "Knock Off", "No Retreat", "Protect", "Rock Slide"], + "abilities": ["Defiant"], + "teraTypes": ["Dark", "Steel"] } ] }, "pincurchin": { - "level": 99, + "level": 97, "sets": [ { "role": "Doubles Support", - "movepool": ["Acupressure", "Recover", "Thunderbolt", "Toxic Spikes"], + "movepool": ["Electroweb", "Recover", "Thunderbolt", "Toxic Spikes"], + "abilities": ["Electric Surge"], "teraTypes": ["Grass"] } ] @@ -3515,37 +5215,65 @@ { "role": "Doubles Setup Sweeper", "movepool": ["Bug Buzz", "Ice Beam", "Protect", "Quiver Dance"], + "abilities": ["Ice Scales"], "teraTypes": ["Ground", "Water"] + }, + { + "role": "Tera Blast user", + "movepool": ["Ice Beam", "Protect", "Quiver Dance", "Tera Blast"], + "abilities": ["Ice Scales"], + "teraTypes": ["Ground"] } ] }, "stonjourner": { - "level": 89, + "level": 88, "sets": [ { "role": "Doubles Fast Attacker", "movepool": ["Heat Crash", "High Horsepower", "Protect", "Rock Polish", "Stone Edge"], + "abilities": ["Power Spot"], + "teraTypes": ["Fire", "Rock"] + }, + { + "role": "Choice Item user", + "movepool": ["Heat Crash", "High Horsepower", "Rock Slide", "Stone Edge"], + "abilities": ["Power Spot"], "teraTypes": ["Fire", "Rock"] } ] }, "eiscue": { - "level": 88, + "level": 89, "sets": [ { "role": "Doubles Bulky Setup", "movepool": ["Belly Drum", "Ice Spinner", "Liquidation", "Protect"], + "abilities": ["Ice Face"], "teraTypes": ["Water"] } ] }, "indeedee": { - "level": 88, + "level": 79, "sets": [ { - "role": "Doubles Fast Attacker", - "movepool": ["Encore", "Hyper Voice", "Protect", "Psychic", "Psyshock", "Shadow Ball", "Trick"], + "role": "Offensive Protect", + "movepool": ["Encore", "Expanding Force", "Hyper Voice", "Protect", "Shadow Ball"], + "abilities": ["Psychic Surge"], "teraTypes": ["Fairy", "Psychic"] + }, + { + "role": "Doubles Wallbreaker", + "movepool": ["Expanding Force", "Hyper Voice", "Psyshock", "Trick"], + "abilities": ["Psychic Surge"], + "teraTypes": ["Psychic"] + }, + { + "role": "Tera Blast user", + "movepool": ["Encore", "Expanding Force", "Protect", "Shadow Ball", "Tera Blast", "Trick"], + "abilities": ["Psychic Surge"], + "teraTypes": ["Fairy", "Fighting"] } ] }, @@ -3555,21 +5283,24 @@ { "role": "Doubles Support", "movepool": ["Follow Me", "Heal Pulse", "Helping Hand", "Protect", "Psychic"], + "abilities": ["Psychic Surge"], "teraTypes": ["Fairy"] } ] }, "morpeko": { - "level": 87, + "level": 88, "sets": [ { - "role": "Doubles Support", - "movepool": ["Aura Wheel", "Fake Out", "Knock Off", "Protect"], + "role": "Bulky Protect", + "movepool": ["Aura Wheel", "Electroweb", "Fake Out", "Knock Off", "Protect"], + "abilities": ["Hunger Switch"], "teraTypes": ["Electric"] }, { "role": "Offensive Protect", "movepool": ["Aura Wheel", "Knock Off", "Parting Shot", "Protect", "Volt Switch"], + "abilities": ["Hunger Switch"], "teraTypes": ["Electric"] } ] @@ -3580,26 +5311,47 @@ { "role": "Offensive Protect", "movepool": ["High Horsepower", "Iron Head", "Play Rough", "Protect", "Rock Slide"], + "abilities": ["Sheer Force"], "teraTypes": ["Fairy", "Rock"] }, { "role": "Doubles Bulky Attacker", "movepool": ["Heat Crash", "Heavy Slam", "High Horsepower", "Stone Edge"], + "abilities": ["Heavy Metal"], "teraTypes": ["Fire"] } ] }, + "duraludon": { + "level": 84, + "sets": [ + { + "role": "Doubles Bulky Attacker", + "movepool": ["Body Press", "Draco Meteor", "Flash Cannon", "Iron Defense"], + "abilities": ["Stalwart"], + "teraTypes": ["Fighting"] + }, + { + "role": "Doubles Bulky Setup", + "movepool": ["Body Press", "Flash Cannon", "Iron Defense", "Protect", "Snarl", "Thunder Wave"], + "abilities": ["Stalwart"], + "teraTypes": ["Fighting"] + } + ] + }, "dragapult": { "level": 79, "sets": [ { "role": "Offensive Protect", "movepool": ["Draco Meteor", "Dragon Darts", "Fire Blast", "Protect", "Shadow Ball"], + "abilities": ["Clear Body"], "teraTypes": ["Dragon"] }, { "role": "Choice Item user", "movepool": ["Dragon Claw", "Dragon Darts", "Phantom Force", "U-turn"], + "abilities": ["Clear Body"], "teraTypes": ["Dragon"] } ] @@ -3610,6 +5362,7 @@ { "role": "Doubles Setup Sweeper", "movepool": ["Close Combat", "Play Rough", "Protect", "Psychic Fangs", "Swords Dance"], + "abilities": ["Intrepid Sword"], "teraTypes": ["Fighting"] } ] @@ -3620,6 +5373,7 @@ { "role": "Doubles Setup Sweeper", "movepool": ["Behemoth Blade", "Close Combat", "Play Rough", "Protect", "Swords Dance"], + "abilities": ["Intrepid Sword"], "teraTypes": ["Fairy", "Fighting", "Fire", "Steel"] } ] @@ -3629,68 +5383,71 @@ "sets": [ { "role": "Doubles Wallbreaker", - "movepool": ["Close Combat", "Crunch", "Howl", "Iron Head", "Psychic Fangs", "Stone Edge"], + "movepool": ["Close Combat", "Coaching", "Crunch", "Howl", "Iron Head", "Psychic Fangs", "Stone Edge"], + "abilities": ["Dauntless Shield"], "teraTypes": ["Dark", "Fighting", "Steel"] }, { "role": "Bulky Protect", "movepool": ["Body Press", "Crunch", "Iron Defense", "Protect"], + "abilities": ["Dauntless Shield"], "teraTypes": ["Fighting", "Fire", "Steel"] } ] }, "zamazentacrowned": { - "level": 70, + "level": 68, "sets": [ - { - "role": "Doubles Bulky Setup", - "movepool": ["Behemoth Bash", "Body Press", "Crunch", "Iron Defense", "Protect", "Stone Edge"], - "teraTypes": ["Fighting", "Fire"] - }, { "role": "Doubles Setup Sweeper", - "movepool": ["Behemoth Bash", "Close Combat", "Howl", "Protect"], + "movepool": ["Body Press", "Coaching", "Heavy Slam", "Iron Defense", "Protect", "Snarl", "Wide Guard"], + "abilities": ["Dauntless Shield"], "teraTypes": ["Fighting", "Fire", "Steel"] - }, - { - "role": "Doubles Bulky Attacker", - "movepool": ["Body Press", "Iron Defense", "Protect", "Snarl", "Wide Guard"], - "teraTypes": ["Fighting", "Fire"] } ] }, "eternatus": { - "level": 71, + "level": 70, "sets": [ { "role": "Doubles Bulky Setup", "movepool": ["Cosmic Power", "Dynamax Cannon", "Flamethrower", "Recover"], + "abilities": ["Pressure"], "teraTypes": ["Dragon", "Water"] }, { "role": "Doubles Bulky Attacker", "movepool": ["Dynamax Cannon", "Fire Blast", "Recover", "Sludge Bomb", "Toxic Spikes"], + "abilities": ["Pressure"], + "teraTypes": ["Dragon", "Water"] + }, + { + "role": "Offensive Protect", + "movepool": ["Dynamax Cannon", "Fire Blast", "Meteor Beam", "Protect"], + "abilities": ["Pressure"], "teraTypes": ["Dragon", "Water"] } ] }, "urshifu": { - "level": 77, + "level": 75, "sets": [ { - "role": "Doubles Fast Attacker", - "movepool": ["Close Combat", "Protect", "Sucker Punch", "Swords Dance", "Wicked Blow"], + "role": "Doubles Wallbreaker", + "movepool": ["Close Combat", "Poison Jab", "Protect", "Sucker Punch", "Wicked Blow"], + "abilities": ["Unseen Fist"], "teraTypes": ["Dark", "Poison"] } ] }, "urshifurapidstrike": { - "level": 78, + "level": 76, "sets": [ { - "role": "Doubles Fast Attacker", - "movepool": ["Aqua Jet", "Close Combat", "Protect", "Surging Strikes", "Swords Dance"], - "teraTypes": ["Fire", "Steel", "Water"] + "role": "Doubles Wallbreaker", + "movepool": ["Aqua Jet", "Close Combat", "Ice Spinner", "Protect", "Surging Strikes", "U-turn"], + "abilities": ["Unseen Fist"], + "teraTypes": ["Water"] } ] }, @@ -3700,6 +5457,7 @@ { "role": "Offensive Protect", "movepool": ["Close Combat", "Jungle Healing", "Knock Off", "Power Whip", "Protect"], + "abilities": ["Leaf Guard"], "teraTypes": ["Poison"] } ] @@ -3710,11 +5468,13 @@ { "role": "Doubles Fast Attacker", "movepool": ["Electroweb", "Protect", "Thunderbolt", "Volt Switch"], + "abilities": ["Transistor"], "teraTypes": ["Electric"] }, { "role": "Tera Blast user", "movepool": ["Electroweb", "Protect", "Tera Blast", "Thunderbolt"], + "abilities": ["Transistor"], "teraTypes": ["Ice"] } ] @@ -3725,31 +5485,41 @@ { "role": "Choice Item user", "movepool": ["Draco Meteor", "Dragon Claw", "Dragon Energy", "Earth Power"], + "abilities": ["Dragon's Maw"], "teraTypes": ["Dragon"] } ] }, "glastrier": { - "level": 81, + "level": 80, "sets": [ { "role": "Doubles Bulky Attacker", "movepool": ["Close Combat", "Heavy Slam", "High Horsepower", "Icicle Crash", "Protect"], + "abilities": ["Chilling Neigh"], "teraTypes": ["Fighting", "Ground", "Steel"] } ] }, "spectrier": { - "level": 78, + "level": 77, "sets": [ { "role": "Offensive Protect", - "movepool": ["Dark Pulse", "Nasty Plot", "Protect", "Shadow Ball", "Will-O-Wisp"], + "movepool": ["Draining Kiss", "Nasty Plot", "Protect", "Shadow Ball"], + "abilities": ["Grim Neigh"], + "teraTypes": ["Fairy"] + }, + { + "role": "Doubles Setup Sweeper", + "movepool": ["Dark Pulse", "Nasty Plot", "Protect", "Shadow Ball"], + "abilities": ["Grim Neigh"], "teraTypes": ["Dark"] }, { "role": "Tera Blast user", "movepool": ["Nasty Plot", "Protect", "Shadow Ball", "Tera Blast"], + "abilities": ["Grim Neigh"], "teraTypes": ["Fighting"] } ] @@ -3759,27 +5529,30 @@ "sets": [ { "role": "Doubles Support", - "movepool": ["Encore", "Helping Hand", "Leaf Storm", "Pollen Puff"], + "movepool": ["Encore", "Giga Drain", "Helping Hand", "Leaf Storm", "Leech Seed", "Pollen Puff", "Psychic"], + "abilities": ["Unnerve"], "teraTypes": ["Steel"] } ] }, "calyrexice": { - "level": 67, + "level": 65, "sets": [ { "role": "Doubles Wallbreaker", "movepool": ["Glacial Lance", "High Horsepower", "Protect", "Trick Room"], + "abilities": ["As One (Glastrier)"], "teraTypes": ["Ground", "Ice"] } ] }, "calyrexshadow": { - "level": 63, + "level": 62, "sets": [ { "role": "Offensive Protect", - "movepool": ["Astral Barrage", "Nasty Plot", "Pollen Puff", "Protect", "Psyshock"], + "movepool": ["Astral Barrage", "Encore", "Nasty Plot", "Pollen Puff", "Protect", "Psyshock"], + "abilities": ["As One (Spectrier)"], "teraTypes": ["Dark", "Ghost"] } ] @@ -3790,7 +5563,14 @@ { "role": "Doubles Bulky Attacker", "movepool": ["Body Slam", "Double-Edge", "Earth Power", "Protect", "Psychic", "Thunder Wave", "Thunderbolt"], + "abilities": ["Intimidate"], "teraTypes": ["Fairy"] + }, + { + "role": "Doubles Wallbreaker", + "movepool": ["Double-Edge", "Earth Power", "Psychic", "Trick Room"], + "abilities": ["Intimidate"], + "teraTypes": ["Fairy", "Ground"] } ] }, @@ -3799,7 +5579,8 @@ "sets": [ { "role": "Offensive Protect", - "movepool": ["Close Combat", "Protect", "Stone Axe", "U-turn", "X-Scissor"], + "movepool": ["Close Combat", "Protect", "Stone Axe", "Tailwind", "U-turn", "X-Scissor"], + "abilities": ["Sharpness"], "teraTypes": ["Bug", "Fighting", "Rock", "Steel"] } ] @@ -3810,6 +5591,7 @@ { "role": "Doubles Wallbreaker", "movepool": ["Crunch", "Earthquake", "Facade", "Headlong Rush", "Protect"], + "abilities": ["Guts"], "teraTypes": ["Normal"] } ] @@ -3820,46 +5602,64 @@ { "role": "Bulky Protect", "movepool": ["Blood Moon", "Earth Power", "Hyper Voice", "Protect"], - "teraTypes": ["Ghost", "Normal", "Water"] + "abilities": ["Mind's Eye"], + "teraTypes": ["Ghost", "Normal", "Poison", "Water"] + }, + { + "role": "Doubles Bulky Attacker", + "movepool": ["Blood Moon", "Earth Power", "Hyper Voice", "Vacuum Wave"], + "abilities": ["Mind's Eye"], + "teraTypes": ["Ghost", "Normal", "Poison", "Water"] } ] }, "enamorus": { - "level": 80, + "level": 79, "sets": [ { "role": "Doubles Setup Sweeper", "movepool": ["Play Rough", "Protect", "Superpower", "Tailwind"], + "abilities": ["Contrary"], "teraTypes": ["Fighting"] }, { "role": "Offensive Protect", "movepool": ["Earth Power", "Protect", "Springtide Storm", "Tailwind"], + "abilities": ["Contrary"], "teraTypes": ["Ground"] + }, + { + "role": "Tera Blast user", + "movepool": ["Protect", "Springtide Storm", "Superpower", "Tera Blast"], + "abilities": ["Contrary"], + "teraTypes": ["Stellar"] } ] }, "enamorustherian": { - "level": 83, + "level": 82, "sets": [ { "role": "Doubles Bulky Attacker", "movepool": ["Earth Power", "Moonblast", "Mystical Fire", "Protect", "Springtide Storm"], + "abilities": ["Overcoat"], "teraTypes": ["Fairy", "Ground"] } ] }, "meowscarada": { - "level": 81, + "level": 80, "sets": [ { "role": "Choice Item user", - "movepool": ["Flower Trick", "Knock Off", "Play Rough", "Sucker Punch", "U-turn"], - "teraTypes": ["Dark", "Fairy", "Grass"] + "movepool": ["Flower Trick", "Knock Off", "Sucker Punch", "Triple Axel", "U-turn"], + "abilities": ["Protean"], + "teraTypes": ["Dark", "Grass"] }, { "role": "Offensive Protect", - "movepool": ["Flower Trick", "Knock Off", "Pollen Puff", "Protect", "Sucker Punch", "Taunt"], + "movepool": ["Flower Trick", "Knock Off", "Protect", "Sucker Punch", "Taunt"], + "abilities": ["Overgrow"], "teraTypes": ["Poison"] } ] @@ -3870,6 +5670,7 @@ { "role": "Bulky Protect", "movepool": ["Protect", "Shadow Ball", "Slack Off", "Torch Song"], + "abilities": ["Unaware"], "teraTypes": ["Fairy", "Water"] } ] @@ -3879,7 +5680,8 @@ "sets": [ { "role": "Offensive Protect", - "movepool": ["Aqua Jet", "Aqua Step", "Close Combat", "Ice Spinner", "Knock Off", "Protect"], + "movepool": ["Aqua Jet", "Aqua Step", "Close Combat", "Knock Off", "Protect", "Triple Axel"], + "abilities": ["Moxie"], "teraTypes": ["Fire", "Steel", "Water"] } ] @@ -3890,12 +5692,14 @@ { "role": "Doubles Support", "movepool": ["Double-Edge", "Helping Hand", "Lash Out", "Protect", "Yawn"], + "abilities": ["Gluttony"], "teraTypes": ["Ghost", "Normal"] }, { "role": "Doubles Wallbreaker", "movepool": ["Double-Edge", "High Horsepower", "Lash Out", "Play Rough"], - "teraTypes": ["Ghost", "Normal"] + "abilities": ["Thick Fat"], + "teraTypes": ["Fairy", "Ground", "Normal"] } ] }, @@ -3905,11 +5709,13 @@ { "role": "Doubles Support", "movepool": ["Double-Edge", "Helping Hand", "Lash Out", "Protect", "Yawn"], - "teraTypes": ["Fairy", "Ground", "Normal"] + "abilities": ["Gluttony"], + "teraTypes": ["Ghost", "Normal"] }, { "role": "Doubles Wallbreaker", "movepool": ["Double-Edge", "High Horsepower", "Lash Out", "Play Rough"], + "abilities": ["Thick Fat"], "teraTypes": ["Fairy", "Ground", "Normal"] } ] @@ -3919,68 +5725,54 @@ "sets": [ { "role": "Doubles Support", - "movepool": ["Bug Bite", "Circle Throw", "Knock Off", "Sticky Web", "String Shot", "U-turn"], + "movepool": ["Circle Throw", "Knock Off", "Lunge", "Sticky Web", "String Shot", "U-turn"], + "abilities": ["Stakeout"], "teraTypes": ["Water"] } ] }, "lokix": { - "level": 86, + "level": 87, "sets": [ { "role": "Offensive Protect", "movepool": ["First Impression", "Protect", "Sucker Punch", "U-turn"], + "abilities": ["Tinted Lens"], "teraTypes": ["Bug"] }, { "role": "Doubles Fast Attacker", "movepool": ["First Impression", "Leech Life", "Protect", "Sucker Punch"], + "abilities": ["Tinted Lens"], "teraTypes": ["Bug"] } ] }, "pawmot": { - "level": 81, + "level": 80, "sets": [ { "role": "Doubles Wallbreaker", "movepool": ["Close Combat", "Double Shock", "Fake Out", "Protect", "Revival Blessing"], + "abilities": ["Volt Absorb"], "teraTypes": ["Electric"] - }, - { - "role": "Doubles Support", - "movepool": ["Close Combat", "Encore", "Fake Out", "Knock Off", "Nuzzle", "Revival Blessing"], - "teraTypes": ["Fighting"] } ] }, "maushold": { - "level": 80, - "sets": [ - { - "role": "Doubles Setup Sweeper", - "movepool": ["Encore", "Population Bomb", "Protect", "Tidy Up"], - "teraTypes": ["Normal"] - }, - { - "role": "Doubles Support", - "movepool": ["Encore", "Follow Me", "Helping Hand", "Population Bomb", "Protect", "Taunt", "Thunder Wave", "U-turn"], - "teraTypes": ["Ghost"] - } - ] - }, - "mausholdfour": { - "level": 80, + "level": 79, "sets": [ { "role": "Doubles Setup Sweeper", "movepool": ["Encore", "Population Bomb", "Protect", "Tidy Up"], + "abilities": ["Technician"], "teraTypes": ["Normal"] }, { "role": "Doubles Support", - "movepool": ["Encore", "Follow Me", "Helping Hand", "Population Bomb", "Protect", "Taunt", "Thunder Wave", "U-turn"], - "teraTypes": ["Ghost"] + "movepool": ["Encore", "Follow Me", "Population Bomb", "Protect", "Taunt", "Thunder Wave", "U-turn"], + "abilities": ["Technician"], + "teraTypes": ["Ghost", "Normal"] } ] }, @@ -3990,6 +5782,7 @@ { "role": "Doubles Support", "movepool": ["Body Press", "Helping Hand", "Howl", "Play Rough", "Snarl", "Yawn"], + "abilities": ["Well-Baked Body"], "teraTypes": ["Steel"] } ] @@ -4000,72 +5793,86 @@ { "role": "Doubles Wallbreaker", "movepool": ["Earth Power", "Energy Ball", "Hyper Voice", "Pollen Puff", "Protect", "Strength Sap"], + "abilities": ["Seed Sower"], "teraTypes": ["Grass"] } ] }, "squawkabilly": { - "level": 88, + "level": 89, "sets": [ { "role": "Offensive Protect", "movepool": ["Brave Bird", "Double-Edge", "Parting Shot", "Protect", "Quick Attack"], + "abilities": ["Intimidate"], "teraTypes": ["Flying", "Normal", "Steel"] } ] }, "squawkabillywhite": { - "level": 88, + "level": 89, "sets": [ { "role": "Offensive Protect", "movepool": ["Brave Bird", "Double-Edge", "Parting Shot", "Protect", "Quick Attack"], + "abilities": ["Intimidate"], "teraTypes": ["Flying", "Normal", "Steel"] } ] }, "squawkabillyblue": { - "level": 88, + "level": 89, "sets": [ { "role": "Offensive Protect", "movepool": ["Brave Bird", "Double-Edge", "Parting Shot", "Protect", "Quick Attack"], + "abilities": ["Intimidate"], "teraTypes": ["Flying", "Normal", "Steel"] } ] }, "squawkabillyyellow": { - "level": 88, + "level": 89, "sets": [ { "role": "Offensive Protect", "movepool": ["Brave Bird", "Double-Edge", "Parting Shot", "Protect", "Quick Attack"], + "abilities": ["Intimidate"], "teraTypes": ["Flying", "Normal", "Steel"] } ] }, "garganacl": { - "level": 80, + "level": 81, "sets": [ { - "role": "Doubles Bulky Setup", - "movepool": ["Protect", "Recover", "Salt Cure", "Wide Guard"], + "role": "Bulky Protect", + "movepool": ["Protect", "Recover", "Salt Cure", "Stealth Rock", "Wide Guard"], + "abilities": ["Purifying Salt"], "teraTypes": ["Ghost"] } ] }, "armarouge": { - "level": 82, + "level": 81, "sets": [ { "role": "Doubles Wallbreaker", "movepool": ["Armor Cannon", "Aura Sphere", "Energy Ball", "Heat Wave", "Psyshock"], + "abilities": ["Flash Fire"], "teraTypes": ["Fighting", "Fire", "Grass"] }, { "role": "Offensive Protect", "movepool": ["Heat Wave", "Protect", "Psychic", "Trick Room"], - "teraTypes": ["Grass"] + "abilities": ["Flash Fire"], + "teraTypes": ["Dark", "Grass"] + }, + { + "role": "Doubles Setup Sweeper", + "movepool": ["Heat Wave", "Meteor Beam", "Protect", "Psychic", "Psyshock"], + "abilities": ["Weak Armor"], + "teraTypes": ["Dark", "Grass"] } ] }, @@ -4074,27 +5881,30 @@ "sets": [ { "role": "Doubles Setup Sweeper", - "movepool": ["Bitter Blade", "Close Combat", "Poltergeist", "Protect", "Shadow Sneak", "Swords Dance"], - "teraTypes": ["Fighting", "Fire", "Ghost", "Grass"] + "movepool": ["Bitter Blade", "Poltergeist", "Protect", "Shadow Sneak", "Swords Dance"], + "abilities": ["Weak Armor"], + "teraTypes": ["Fire", "Ghost", "Grass"] } ] }, "bellibolt": { - "level": 82, + "level": 81, "sets": [ { "role": "Doubles Bulky Attacker", - "movepool": ["Acid Spray", "Muddy Water", "Slack Off", "Thunder Wave", "Thunderbolt", "Volt Switch"], + "movepool": ["Electroweb", "Muddy Water", "Slack Off", "Thunder Wave", "Thunderbolt", "Volt Switch"], + "abilities": ["Electromorphosis"], "teraTypes": ["Water"] } ] }, "kilowattrel": { - "level": 82, + "level": 80, "sets": [ { "role": "Doubles Fast Attacker", "movepool": ["Hurricane", "Protect", "Tailwind", "Thunderbolt"], + "abilities": ["Competitive"], "teraTypes": ["Flying", "Steel"] } ] @@ -4105,6 +5915,7 @@ { "role": "Doubles Wallbreaker", "movepool": ["Crunch", "Fire Fang", "Play Rough", "Psychic Fangs", "Wild Charge"], + "abilities": ["Intimidate"], "teraTypes": ["Fairy"] } ] @@ -4115,11 +5926,13 @@ { "role": "Doubles Bulky Attacker", "movepool": ["Encore", "Gunk Shot", "Knock Off", "Parting Shot", "Protect", "Taunt"], + "abilities": ["Prankster"], "teraTypes": ["Dark"] }, { "role": "Doubles Support", "movepool": ["Gunk Shot", "Knock Off", "Super Fang", "U-turn"], + "abilities": ["Poison Touch"], "teraTypes": ["Dark"] } ] @@ -4130,11 +5943,13 @@ { "role": "Offensive Protect", "movepool": ["Poltergeist", "Power Whip", "Protect", "Shadow Sneak"], + "abilities": ["Wind Rider"], "teraTypes": ["Fairy", "Ghost", "Grass", "Steel", "Water"] }, { "role": "Doubles Support", "movepool": ["Disable", "Poltergeist", "Power Whip", "Protect", "Rapid Spin", "Strength Sap"], + "abilities": ["Wind Rider"], "teraTypes": ["Fairy", "Steel", "Water"] } ] @@ -4145,6 +5960,7 @@ { "role": "Doubles Support", "movepool": ["Earth Power", "Giga Drain", "Knock Off", "Rage Powder", "Spore"], + "abilities": ["Mycelium Might"], "teraTypes": ["Water"] } ] @@ -4155,11 +5971,13 @@ { "role": "Offensive Protect", "movepool": ["Crabhammer", "High Horsepower", "Knock Off", "Protect", "Rock Slide"], + "abilities": ["Regenerator"], "teraTypes": ["Dark", "Ground", "Water"] }, { "role": "Choice Item user", "movepool": ["Crabhammer", "High Horsepower", "Knock Off", "Rock Slide"], + "abilities": ["Regenerator"], "teraTypes": ["Dark", "Ground", "Water"] } ] @@ -4169,17 +5987,31 @@ "sets": [ { "role": "Choice Item user", - "movepool": ["Energy Ball", "Fire Blast", "Flamethrower", "Leaf Storm"], + "movepool": ["Burning Jealousy", "Energy Ball", "Fire Blast", "Leaf Storm"], + "abilities": ["Chlorophyll"], + "teraTypes": ["Fire", "Grass", "Steel"] + }, + { + "role": "Doubles Support", + "movepool": ["Energy Ball", "Fire Blast", "Protect", "Rage Powder", "Will-O-Wisp"], + "abilities": ["Chlorophyll"], "teraTypes": ["Fire", "Grass", "Steel"] } ] }, "rabsca": { - "level": 87, + "level": 88, "sets": [ { "role": "Doubles Support", "movepool": ["Psychic", "Revival Blessing", "Struggle Bug", "Trick Room"], + "abilities": ["Synchronize"], + "teraTypes": ["Steel"] + }, + { + "role": "Doubles Bulky Attacker", + "movepool": ["Bug Buzz", "Psychic", "Revival Blessing", "Trick Room"], + "abilities": ["Synchronize"], "teraTypes": ["Steel"] } ] @@ -4190,6 +6022,7 @@ { "role": "Offensive Protect", "movepool": ["Baton Pass", "Dazzling Gleam", "Lumina Crash", "Protect", "Shadow Ball"], + "abilities": ["Speed Boost"], "teraTypes": ["Fairy"] } ] @@ -4200,16 +6033,18 @@ { "role": "Doubles Support", "movepool": ["Encore", "Fake Out", "Gigaton Hammer", "Knock Off", "Play Rough", "Stealth Rock", "Thunder Wave"], + "abilities": ["Mold Breaker"], "teraTypes": ["Steel", "Water"] } ] }, "wugtrio": { - "level": 90, + "level": 92, "sets": [ { "role": "Choice Item user", - "movepool": ["Aqua Jet", "Liquidation", "Memento", "Stomping Tantrum", "Throat Chop"], + "movepool": ["Aqua Jet", "Liquidation", "Stomping Tantrum", "Throat Chop"], + "abilities": ["Gooey"], "teraTypes": ["Dark", "Ground"] } ] @@ -4220,11 +6055,13 @@ { "role": "Choice Item user", "movepool": ["Brave Bird", "Knock Off", "Rock Slide", "Sucker Punch"], + "abilities": ["Rocky Payload"], "teraTypes": ["Rock"] }, { "role": "Offensive Protect", "movepool": ["Brave Bird", "Knock Off", "Protect", "Rock Slide"], + "abilities": ["Rocky Payload"], "teraTypes": ["Rock"] } ] @@ -4235,7 +6072,14 @@ { "role": "Choice Item user", "movepool": ["Close Combat", "Flip Turn", "Jet Punch", "Wave Crash"], + "abilities": ["Zero to Hero"], "teraTypes": ["Fighting", "Water"] + }, + { + "role": "Offensive Protect", + "movepool": ["Flip Turn", "Jet Punch", "Protect", "Wave Crash"], + "abilities": ["Zero to Hero"], + "teraTypes": ["Water"] } ] }, @@ -4243,28 +6087,32 @@ "level": 84, "sets": [ { - "role": "Doubles Bulky Attacker", - "movepool": ["Gunk Shot", "Haze", "Iron Head", "Parting Shot", "Poison Gas", "Taunt"], + "role": "Offensive Protect", + "movepool": ["Gunk Shot", "Iron Head", "Parting Shot", "Protect"], + "abilities": ["Filter"], "teraTypes": ["Flying", "Water"] }, { "role": "Doubles Fast Attacker", "movepool": ["Gunk Shot", "High Horsepower", "Iron Head", "Protect", "Shift Gear"], + "abilities": ["Filter"], "teraTypes": ["Ground"] } ] }, "cyclizar": { - "level": 85, + "level": 87, "sets": [ { "role": "Doubles Support", "movepool": ["Breaking Swipe", "Double-Edge", "Knock Off", "Shed Tail", "Taunt"], + "abilities": ["Regenerator"], "teraTypes": ["Dragon", "Poison"] }, { "role": "Doubles Fast Attacker", "movepool": ["Double-Edge", "Draco Meteor", "Knock Off", "Shed Tail"], + "abilities": ["Regenerator"], "teraTypes": ["Dragon", "Fire", "Normal", "Poison"] } ] @@ -4274,52 +6122,64 @@ "sets": [ { "role": "Bulky Protect", - "movepool": ["Body Press", "Iron Defense", "Iron Head", "Protect"], + "movepool": ["Body Press", "Heavy Slam", "Iron Defense", "Protect"], + "abilities": ["Earth Eater"], "teraTypes": ["Electric", "Fighting"] }, { "role": "Doubles Bulky Attacker", - "movepool": ["Body Press", "Helping Hand", "Iron Head", "Protect", "Shed Tail", "Stealth Rock"], + "movepool": ["Body Press", "Heavy Slam", "Helping Hand", "Protect", "Shed Tail"], + "abilities": ["Earth Eater"], "teraTypes": ["Electric", "Poison"] } ] }, "glimmora": { - "level": 80, + "level": 77, "sets": [ { "role": "Bulky Protect", "movepool": ["Earth Power", "Mortal Spin", "Power Gem", "Sludge Bomb", "Spiky Shield", "Stealth Rock"], + "abilities": ["Toxic Debris"], "teraTypes": ["Grass", "Water"] + }, + { + "role": "Offensive Protect", + "movepool": ["Earth Power", "Meteor Beam", "Sludge Bomb", "Spiky Shield"], + "abilities": ["Toxic Debris"], + "teraTypes": ["Ground"] } ] }, "houndstone": { - "level": 74, + "level": 73, "sets": [ { "role": "Choice Item user", "movepool": ["Body Press", "Last Respects", "Shadow Sneak", "Trick"], + "abilities": ["Fluffy"], "teraTypes": ["Ghost"] } ] }, "flamigo": { - "level": 85, + "level": 84, "sets": [ { "role": "Choice Item user", "movepool": ["Brave Bird", "Close Combat", "Throat Chop", "U-turn"], + "abilities": ["Scrappy"], "teraTypes": ["Fighting", "Fire", "Flying"] } ] }, "cetitan": { - "level": 84, + "level": 83, "sets": [ { "role": "Doubles Wallbreaker", "movepool": ["High Horsepower", "Ice Shard", "Icicle Crash", "Liquidation", "Protect"], + "abilities": ["Sheer Force"], "teraTypes": ["Ground", "Water"] } ] @@ -4330,6 +6190,7 @@ { "role": "Choice Item user", "movepool": ["Aqua Cutter", "Aqua Jet", "Night Slash", "Psycho Cut"], + "abilities": ["Sharpness"], "teraTypes": ["Dark", "Psychic", "Water"] } ] @@ -4340,6 +6201,7 @@ { "role": "Doubles Bulky Attacker", "movepool": ["Avalanche", "Body Press", "Heavy Slam", "Wave Crash"], + "abilities": ["Unaware"], "teraTypes": ["Dragon", "Grass", "Steel"] } ] @@ -4350,16 +6212,19 @@ { "role": "Doubles Bulky Attacker", "movepool": ["Draco Meteor", "Icy Wind", "Muddy Water", "Rapid Spin"], + "abilities": ["Storm Drain"], "teraTypes": ["Fire", "Steel"] }, { "role": "Doubles Setup Sweeper", "movepool": ["Draco Meteor", "Muddy Water", "Nasty Plot", "Protect"], + "abilities": ["Storm Drain"], "teraTypes": ["Dragon", "Fire", "Water"] }, { "role": "Choice Item user", "movepool": ["Draco Meteor", "Hydro Pump", "Icy Wind", "Muddy Water"], + "abilities": ["Storm Drain"], "teraTypes": ["Dragon", "Fire", "Water"] } ] @@ -4370,6 +6235,7 @@ { "role": "Doubles Wallbreaker", "movepool": ["Hyper Voice", "Nasty Plot", "Protect", "Psychic", "Psyshock", "Trick Room"], + "abilities": ["Armor Tail"], "teraTypes": ["Fairy"] } ] @@ -4379,37 +6245,37 @@ "sets": [ { "role": "Bulky Protect", - "movepool": ["Boomburst", "Earth Power", "Glare", "Hyper Drill", "Protect", "Tailwind"], + "movepool": ["Earth Power", "Glare", "Hyper Drill", "Protect", "Tailwind"], + "abilities": ["Rattled"], "teraTypes": ["Ghost", "Ground", "Normal"] - } - ] - }, - "dudunsparcethreesegment": { - "level": 86, - "sets": [ + }, { - "role": "Bulky Protect", - "movepool": ["Boomburst", "Earth Power", "Glare", "Hyper Drill", "Protect", "Tailwind"], + "role": "Doubles Bulky Attacker", + "movepool": ["Boomburst", "Earth Power", "Helping Hand", "Protect", "Tailwind"], + "abilities": ["Rattled"], "teraTypes": ["Ghost", "Ground", "Normal"] } ] }, "kingambit": { - "level": 78, + "level": 77, "sets": [ { "role": "Doubles Bulky Setup", "movepool": ["Iron Head", "Protect", "Sucker Punch", "Swords Dance"], + "abilities": ["Defiant"], "teraTypes": ["Dark", "Fire", "Flying"] }, { "role": "Bulky Protect", "movepool": ["Iron Head", "Kowtow Cleave", "Protect", "Sucker Punch"], + "abilities": ["Defiant"], "teraTypes": ["Dark", "Fire", "Flying"] }, { "role": "Tera Blast user", "movepool": ["Iron Head", "Kowtow Cleave", "Sucker Punch", "Tera Blast"], + "abilities": ["Defiant"], "teraTypes": ["Fairy", "Fire", "Flying"] } ] @@ -4420,41 +6286,46 @@ { "role": "Doubles Bulky Attacker", "movepool": ["Close Combat", "Headlong Rush", "Ice Spinner", "Knock Off", "Protect", "Rapid Spin", "Rock Slide"], + "abilities": ["Protosynthesis"], "teraTypes": ["Fire", "Ground"] } ] }, "brutebonnet": { - "level": 79, + "level": 80, "sets": [ { "role": "Doubles Bulky Attacker", "movepool": ["Close Combat", "Crunch", "Protect", "Rage Powder", "Seed Bomb", "Spore", "Sucker Punch"], + "abilities": ["Protosynthesis"], "teraTypes": ["Dark", "Poison"] } ] }, "sandyshocks": { - "level": 80, + "level": 79, "sets": [ { "role": "Doubles Fast Attacker", - "movepool": ["Earth Power", "Protect", "Stealth Rock", "Thunderbolt", "Volt Switch"], + "movepool": ["Earth Power", "Electroweb", "Protect", "Stealth Rock", "Thunderbolt", "Volt Switch"], + "abilities": ["Protosynthesis"], "teraTypes": ["Electric", "Grass", "Ground"] }, { "role": "Tera Blast user", "movepool": ["Earth Power", "Protect", "Tera Blast", "Volt Switch"], + "abilities": ["Protosynthesis"], "teraTypes": ["Flying", "Ice"] } ] }, "screamtail": { - "level": 84, + "level": 83, "sets": [ { "role": "Doubles Support", "movepool": ["Disable", "Encore", "Helping Hand", "Howl", "Play Rough", "Stealth Rock", "Thunder Wave"], + "abilities": ["Protosynthesis"], "teraTypes": ["Steel"] } ] @@ -4465,11 +6336,13 @@ { "role": "Offensive Protect", "movepool": ["Dazzling Gleam", "Moonblast", "Protect", "Shadow Ball"], + "abilities": ["Protosynthesis"], "teraTypes": ["Fairy"] }, { "role": "Choice Item user", "movepool": ["Dazzling Gleam", "Moonblast", "Mystical Fire", "Shadow Ball"], + "abilities": ["Protosynthesis"], "teraTypes": ["Fairy"] } ] @@ -4480,6 +6353,7 @@ { "role": "Doubles Wallbreaker", "movepool": ["Close Combat", "First Impression", "Flare Blitz", "U-turn", "Wild Charge"], + "abilities": ["Protosynthesis"], "teraTypes": ["Bug", "Electric", "Fighting", "Fire"] } ] @@ -4490,11 +6364,13 @@ { "role": "Doubles Fast Attacker", "movepool": ["Acrobatics", "Breaking Swipe", "Knock Off", "Protect", "Tailwind"], + "abilities": ["Protosynthesis"], "teraTypes": ["Flying"] }, { "role": "Doubles Setup Sweeper", "movepool": ["Dragon Claw", "Dragon Dance", "Knock Off", "Protect"], + "abilities": ["Protosynthesis"], "teraTypes": ["Dark", "Fire"] } ] @@ -4505,6 +6381,7 @@ { "role": "Doubles Bulky Attacker", "movepool": ["High Horsepower", "Iron Head", "Knock Off", "Rapid Spin", "Stealth Rock", "Stone Edge"], + "abilities": ["Quark Drive"], "teraTypes": ["Fire", "Ground", "Steel"] } ] @@ -4515,11 +6392,13 @@ { "role": "Offensive Protect", "movepool": ["Energy Ball", "Fiery Dance", "Heat Wave", "Protect", "Sludge Wave"], + "abilities": ["Quark Drive"], "teraTypes": ["Fire", "Grass"] }, { "role": "Doubles Bulky Attacker", - "movepool": ["Acid Spray", "Energy Ball", "Fire Blast", "Heat Wave", "Protect"], + "movepool": ["Acid Spray", "Energy Ball", "Heat Wave", "Protect"], + "abilities": ["Quark Drive"], "teraTypes": ["Poison"] } ] @@ -4530,11 +6409,13 @@ { "role": "Doubles Bulky Attacker", "movepool": ["Close Combat", "Drain Punch", "Fake Out", "Ice Punch", "Volt Switch", "Wild Charge"], - "teraTypes": ["Electric", "Fighting", "Fire"] + "abilities": ["Quark Drive"], + "teraTypes": ["Electric", "Fire"] }, { "role": "Bulky Protect", "movepool": ["Drain Punch", "Protect", "Swords Dance", "Thunder Punch"], + "abilities": ["Quark Drive"], "teraTypes": ["Fire"] } ] @@ -4545,6 +6426,7 @@ { "role": "Doubles Fast Attacker", "movepool": ["Dark Pulse", "Earth Power", "Hurricane", "Protect", "Tailwind", "Taunt"], + "abilities": ["Quark Drive"], "teraTypes": ["Flying", "Ground", "Steel"] } ] @@ -4554,12 +6436,14 @@ "sets": [ { "role": "Doubles Bulky Attacker", - "movepool": ["High Horsepower", "Protect", "Rock Slide", "Stealth Rock", "Thunder Punch", "Thunder Wave", "Volt Switch"], + "movepool": ["Electroweb", "High Horsepower", "Protect", "Rock Slide", "Stealth Rock", "Thunder Punch", "Thunder Wave", "Volt Switch"], + "abilities": ["Quark Drive"], "teraTypes": ["Flying", "Grass"] }, { "role": "Doubles Setup Sweeper", "movepool": ["Dragon Dance", "High Horsepower", "Ice Punch", "Protect", "Rock Slide", "Wild Charge"], + "abilities": ["Quark Drive"], "teraTypes": ["Grass", "Rock"] } ] @@ -4570,31 +6454,35 @@ { "role": "Doubles Fast Attacker", "movepool": ["Encore", "Freeze-Dry", "Hydro Pump", "Icy Wind", "Protect"], + "abilities": ["Quark Drive"], "teraTypes": ["Dragon", "Water"] } ] }, "ironvaliant": { - "level": 80, + "level": 79, "sets": [ { "role": "Offensive Protect", - "movepool": ["Close Combat", "Dazzling Gleam", "Knock Off", "Moonblast", "Protect", "Taunt"], + "movepool": ["Close Combat", "Dazzling Gleam", "Encore", "Knock Off", "Moonblast", "Protect"], + "abilities": ["Quark Drive"], "teraTypes": ["Dark", "Fairy", "Fighting"] } ] }, "baxcalibur": { - "level": 79, + "level": 78, "sets": [ { "role": "Choice Item user", "movepool": ["Glaive Rush", "High Horsepower", "Ice Shard", "Icicle Crash"], + "abilities": ["Thermal Exchange"], "teraTypes": ["Dragon", "Ground"] }, { "role": "Doubles Setup Sweeper", "movepool": ["Icicle Spear", "Protect", "Scale Shot", "Swords Dance"], + "abilities": ["Thermal Exchange"], "teraTypes": ["Dragon", "Steel"] } ] @@ -4604,33 +6492,49 @@ "sets": [ { "role": "Choice Item user", - "movepool": ["Dazzling Gleam", "Focus Blast", "Make It Rain", "Psychic", "Shadow Ball", "Thunderbolt", "Trick"], + "movepool": ["Dazzling Gleam", "Focus Blast", "Make It Rain", "Shadow Ball", "Thunderbolt", "Trick"], + "abilities": ["Good as Gold"], "teraTypes": ["Fairy", "Steel"] }, { "role": "Doubles Bulky Setup", "movepool": ["Make It Rain", "Nasty Plot", "Protect", "Shadow Ball"], + "abilities": ["Good as Gold"], "teraTypes": ["Steel", "Water"] + }, + { + "role": "Offensive Protect", + "movepool": ["Dazzling Gleam", "Focus Blast", "Make It Rain", "Protect", "Shadow Ball"], + "abilities": ["Good as Gold"], + "teraTypes": ["Fairy", "Steel"] } ] }, "tinglu": { - "level": 81, + "level": 82, "sets": [ { "role": "Doubles Bulky Attacker", "movepool": ["Body Press", "Protect", "Ruination", "Spikes", "Stealth Rock", "Stomping Tantrum", "Throat Chop"], + "abilities": ["Vessel of Ruin"], "teraTypes": ["Fairy", "Water"] } ] }, "chienpao": { - "level": 76, + "level": 75, "sets": [ { "role": "Offensive Protect", - "movepool": ["Ice Spinner", "Protect", "Sacred Sword", "Sucker Punch", "Throat Chop"], - "teraTypes": ["Dark", "Fighting", "Ghost"] + "movepool": ["Icicle Crash", "Lash Out", "Protect", "Sucker Punch", "Throat Chop"], + "abilities": ["Sword of Ruin"], + "teraTypes": ["Dark", "Ghost"] + }, + { + "role": "Doubles Wallbreaker", + "movepool": ["Icicle Crash", "Protect", "Sacred Sword", "Sucker Punch"], + "abilities": ["Sword of Ruin"], + "teraTypes": ["Fighting", "Ghost"] } ] }, @@ -4640,6 +6544,7 @@ { "role": "Bulky Protect", "movepool": ["Knock Off", "Leech Seed", "Pollen Puff", "Protect", "Ruination"], + "abilities": ["Tablets of Ruin"], "teraTypes": ["Poison"] } ] @@ -4650,21 +6555,24 @@ { "role": "Doubles Setup Sweeper", "movepool": ["Dark Pulse", "Heat Wave", "Nasty Plot", "Protect"], + "abilities": ["Beads of Ruin"], "teraTypes": ["Dark", "Fire", "Water"] }, { "role": "Choice Item user", "movepool": ["Dark Pulse", "Heat Wave", "Overheat", "Snarl"], + "abilities": ["Beads of Ruin"], "teraTypes": ["Fire", "Water"] } ] }, "koraidon": { - "level": 67, + "level": 66, "sets": [ { "role": "Choice Item user", "movepool": ["Collision Course", "Dragon Claw", "Flare Blitz", "U-turn"], + "abilities": ["Orichalcum Pulse"], "teraTypes": ["Fire"] } ] @@ -4675,21 +6583,24 @@ { "role": "Offensive Protect", "movepool": ["Draco Meteor", "Dragon Pulse", "Electro Drift", "Overheat", "Protect", "Volt Switch"], + "abilities": ["Hadron Engine"], "teraTypes": ["Electric"] }, { "role": "Choice Item user", "movepool": ["Draco Meteor", "Electro Drift", "Overheat", "Volt Switch"], + "abilities": ["Hadron Engine"], "teraTypes": ["Electric"] } ] }, "walkingwake": { - "level": 78, + "level": 77, "sets": [ { "role": "Doubles Wallbreaker", "movepool": ["Draco Meteor", "Flamethrower", "Flip Turn", "Hydro Pump", "Protect"], + "abilities": ["Protosynthesis"], "teraTypes": ["Fire"] } ] @@ -4697,40 +6608,51 @@ "ironleaves": { "level": 81, "sets": [ + { + "role": "Doubles Setup Sweeper", + "movepool": ["Close Combat", "Leaf Blade", "Protect", "Swords Dance"], + "abilities": ["Quark Drive"], + "teraTypes": ["Fighting", "Fire", "Poison"] + }, { "role": "Offensive Protect", - "movepool": ["Close Combat", "Leaf Blade", "Protect", "Psyblade", "Swords Dance"], + "movepool": ["Close Combat", "Leaf Blade", "Protect", "Psyblade"], + "abilities": ["Quark Drive"], "teraTypes": ["Fighting", "Fire", "Psychic"] }, { "role": "Doubles Wallbreaker", "movepool": ["Close Combat", "Leaf Blade", "Psyblade", "Wild Charge"], - "teraTypes": ["Fighting", "Fire", "Poison"] + "abilities": ["Quark Drive"], + "teraTypes": ["Fighting", "Fire", "Psychic"] } ] }, "dipplin": { - "level": 88, + "level": 91, "sets": [ { "role": "Doubles Bulky Attacker", "movepool": ["Dragon Pulse", "Pollen Puff", "Recover", "Syrup Bomb"], + "abilities": ["Sticky Hold"], "teraTypes": ["Steel"] } ] }, "sinistcha": { - "level": 80, + "level": 81, "sets": [ { "role": "Doubles Support", "movepool": ["Matcha Gotcha", "Rage Powder", "Shadow Ball", "Trick Room"], - "teraTypes": ["Grass", "Water"] + "abilities": ["Hospitality"], + "teraTypes": ["Fairy"] }, { "role": "Bulky Protect", "movepool": ["Calm Mind", "Matcha Gotcha", "Protect", "Shadow Ball"], - "teraTypes": ["Grass", "Water"] + "abilities": ["Hospitality"], + "teraTypes": ["Fairy"] } ] }, @@ -4740,6 +6662,7 @@ { "role": "Doubles Bulky Attacker", "movepool": ["Bulk Up", "Drain Punch", "Gunk Shot", "Knock Off", "Snarl"], + "abilities": ["Toxic Chain"], "teraTypes": ["Dark"] } ] @@ -4750,11 +6673,13 @@ { "role": "Doubles Fast Attacker", "movepool": ["Focus Blast", "Protect", "Psyshock", "Sludge Bomb", "U-turn"], + "abilities": ["Toxic Chain"], "teraTypes": ["Fighting", "Poison"] }, { "role": "Doubles Support", "movepool": ["Fake Out", "Focus Blast", "Psyshock", "Sludge Bomb", "U-turn"], + "abilities": ["Toxic Chain"], "teraTypes": ["Fighting", "Poison"] } ] @@ -4764,12 +6689,14 @@ "sets": [ { "role": "Doubles Support", - "movepool": ["Gunk Shot", "Icy Wind", "Roost", "Taunt"], + "movepool": ["Gunk Shot", "Icy Wind", "Play Rough", "Roost"], + "abilities": ["Toxic Chain"], "teraTypes": ["Dark", "Steel", "Water"] }, { "role": "Doubles Bulky Attacker", "movepool": ["Gunk Shot", "Icy Wind", "Play Rough", "U-turn"], + "abilities": ["Toxic Chain"], "teraTypes": ["Dark", "Steel", "Water"] } ] @@ -4780,11 +6707,13 @@ { "role": "Doubles Wallbreaker", "movepool": ["Ivy Cudgel", "Knock Off", "Spiky Shield", "Superpower", "U-turn"], + "abilities": ["Defiant"], "teraTypes": ["Grass"] }, { "role": "Doubles Support", - "movepool": ["Follow Me", "Horn Leech", "Knock Off", "Spiky Shield"], + "movepool": ["Follow Me", "Ivy Cudgel", "Knock Off", "Spiky Shield"], + "abilities": ["Defiant"], "teraTypes": ["Grass"] } ] @@ -4795,43 +6724,209 @@ { "role": "Doubles Support", "movepool": ["Follow Me", "Horn Leech", "Ivy Cudgel", "Spiky Shield"], + "abilities": ["Water Absorb"], "teraTypes": ["Water"] }, { "role": "Doubles Setup Sweeper", "movepool": ["Horn Leech", "Ivy Cudgel", "Power Whip", "Spiky Shield", "Swords Dance"], + "abilities": ["Water Absorb"], "teraTypes": ["Water"] } ] }, "ogerponhearthflame": { - "level": 75, + "level": 74, "sets": [ { "role": "Doubles Support", "movepool": ["Follow Me", "Horn Leech", "Ivy Cudgel", "Spiky Shield"], + "abilities": ["Mold Breaker"], "teraTypes": ["Fire"] }, { "role": "Doubles Setup Sweeper", "movepool": ["Horn Leech", "Ivy Cudgel", "Power Whip", "Spiky Shield", "Swords Dance"], + "abilities": ["Mold Breaker"], "teraTypes": ["Fire"] } ] }, "ogerponcornerstone": { - "level": 76, + "level": 75, "sets": [ { "role": "Doubles Support", "movepool": ["Follow Me", "Horn Leech", "Ivy Cudgel", "Spiky Shield"], + "abilities": ["Sturdy"], "teraTypes": ["Rock"] }, { "role": "Doubles Setup Sweeper", "movepool": ["Horn Leech", "Ivy Cudgel", "Power Whip", "Spiky Shield", "Swords Dance"], + "abilities": ["Sturdy"], "teraTypes": ["Rock"] } ] + }, + "archaludon": { + "level": 77, + "sets": [ + { + "role": "Offensive Protect", + "movepool": ["Dragon Pulse", "Electro Shot", "Flash Cannon", "Protect"], + "abilities": ["Stamina"], + "teraTypes": ["Fairy", "Flying"] + }, + { + "role": "Doubles Bulky Attacker", + "movepool": ["Body Press", "Draco Meteor", "Dragon Pulse", "Flash Cannon", "Snarl"], + "abilities": ["Stamina"], + "teraTypes": ["Fairy", "Fighting", "Flying"] + }, + { + "role": "Doubles Wallbreaker", + "movepool": ["Aura Sphere", "Draco Meteor", "Flash Cannon", "Thunderbolt"], + "abilities": ["Stamina"], + "teraTypes": ["Dragon", "Electric", "Fairy", "Fighting", "Flying"] + } + ] + }, + "hydrapple": { + "level": 85, + "sets": [ + { + "role": "Bulky Protect", + "movepool": ["Fickle Beam", "Giga Drain", "Leaf Storm", "Pollen Puff", "Protect"], + "abilities": ["Regenerator"], + "teraTypes": ["Fire", "Steel"] + }, + { + "role": "Doubles Wallbreaker", + "movepool": ["Draco Meteor", "Earth Power", "Giga Drain", "Leaf Storm"], + "abilities": ["Regenerator"], + "teraTypes": ["Fire", "Grass", "Steel"] + }, + { + "role": "Doubles Bulky Attacker", + "movepool": ["Earth Power", "Fickle Beam", "Giga Drain", "Leaf Storm", "Pollen Puff"], + "abilities": ["Regenerator"], + "teraTypes": ["Steel"] + } + ] + }, + "gougingfire": { + "level": 75, + "sets": [ + { + "role": "Doubles Setup Sweeper", + "movepool": ["Burning Bulwark", "Dragon Claw", "Dragon Dance", "Heat Crash"], + "abilities": ["Protosynthesis"], + "teraTypes": ["Fire"] + } + ] + }, + "ragingbolt": { + "level": 77, + "sets": [ + { + "role": "Doubles Wallbreaker", + "movepool": ["Draco Meteor", "Protect", "Thunderbolt", "Thunderclap"], + "abilities": ["Protosynthesis"], + "teraTypes": ["Electric", "Fairy", "Grass"] + }, + { + "role": "Doubles Bulky Attacker", + "movepool": ["Draco Meteor", "Electroweb", "Snarl", "Thunderbolt", "Thunderclap"], + "abilities": ["Protosynthesis"], + "teraTypes": ["Electric", "Fairy", "Grass"] + }, + { + "role": "Bulky Protect", + "movepool": ["Calm Mind", "Dragon Pulse", "Protect", "Thunderclap"], + "abilities": ["Protosynthesis"], + "teraTypes": ["Electric", "Fairy", "Grass"] + } + ] + }, + "ironboulder": { + "level": 77, + "sets": [ + { + "role": "Doubles Setup Sweeper", + "movepool": ["Close Combat", "Mighty Cleave", "Protect", "Swords Dance"], + "abilities": ["Quark Drive"], + "teraTypes": ["Fighting"] + }, + { + "role": "Offensive Protect", + "movepool": ["Close Combat", "Mighty Cleave", "Protect", "Zen Headbutt"], + "abilities": ["Quark Drive"], + "teraTypes": ["Fighting"] + } + ] + }, + "ironcrown": { + "level": 78, + "sets": [ + { + "role": "Offensive Protect", + "movepool": ["Focus Blast", "Protect", "Psychic", "Psyshock", "Tachyon Cutter"], + "abilities": ["Quark Drive"], + "teraTypes": ["Fighting", "Water"] + }, + { + "role": "Doubles Wallbreaker", + "movepool": ["Focus Blast", "Psychic", "Psyshock", "Tachyon Cutter", "Volt Switch"], + "abilities": ["Quark Drive"], + "teraTypes": ["Fighting", "Water"] + }, + { + "role": "Doubles Bulky Setup", + "movepool": ["Agility", "Focus Blast", "Protect", "Psychic", "Psyshock", "Tachyon Cutter"], + "abilities": ["Quark Drive"], + "teraTypes": ["Fighting", "Psychic", "Steel"] + } + ] + }, + "terapagos": { + "level": 73, + "sets": [ + { + "role": "Doubles Bulky Setup", + "movepool": ["Calm Mind", "Earth Power", "Protect", "Tera Starstorm"], + "abilities": ["Tera Shift"], + "teraTypes": ["Stellar"] + }, + { + "role": "Doubles Wallbreaker", + "movepool": ["Dark Pulse", "Earth Power", "Tera Starstorm", "Tri Attack"], + "abilities": ["Tera Shift"], + "teraTypes": ["Stellar"] + }, + { + "role": "Doubles Setup Sweeper", + "movepool": ["Dark Pulse", "Meteor Beam", "Protect", "Tera Starstorm"], + "abilities": ["Tera Shift"], + "teraTypes": ["Stellar"] + } + ] + }, + "pecharunt": { + "level": 78, + "sets": [ + { + "role": "Doubles Setup Sweeper", + "movepool": ["Malignant Chain", "Nasty Plot", "Protect", "Recover", "Shadow Ball"], + "abilities": ["Poison Puppeteer"], + "teraTypes": ["Dark"] + }, + { + "role": "Doubles Bulky Attacker", + "movepool": ["Malignant Chain", "Parting Shot", "Poison Gas", "Protect", "Shadow Ball"], + "abilities": ["Poison Puppeteer"], + "teraTypes": ["Dark"] + } + ] } } diff --git a/data/random-sets.json b/data/random-battles/gen9/sets.json similarity index 71% rename from data/random-sets.json rename to data/random-battles/gen9/sets.json index a0f5a5fe0edf..3fe54281d101 100644 --- a/data/random-sets.json +++ b/data/random-battles/gen9/sets.json @@ -2,60 +2,74 @@ "venusaur": { "level": 84, "sets": [ - { - "role": "Setup Sweeper", - "movepool": ["Power Whip", "Sludge Bomb", "Sunny Day", "Weather Ball"], - "teraTypes": ["Fire"] - }, { "role": "Bulky Support", "movepool": ["Giga Drain", "Leech Seed", "Sleep Powder", "Sludge Bomb", "Substitute"], + "abilities": ["Chlorophyll", "Overgrow"], "teraTypes": ["Steel", "Water"] }, { "role": "Bulky Attacker", "movepool": ["Earth Power", "Energy Ball", "Knock Off", "Sleep Powder", "Sludge Bomb", "Synthesis", "Toxic"], + "abilities": ["Chlorophyll", "Overgrow"], "teraTypes": ["Dark", "Steel", "Water"] } ] }, "charizard": { - "level": 84, + "level": 85, "sets": [ { "role": "Fast Attacker", "movepool": ["Earthquake", "Flamethrower", "Focus Blast", "Hurricane", "Will-O-Wisp"], - "teraTypes": ["Fire", "Ground", "Water"] + "abilities": ["Blaze"], + "teraTypes": ["Dragon", "Fire", "Ground"] }, { "role": "Setup Sweeper", "movepool": ["Dragon Dance", "Earthquake", "Flare Blitz", "Outrage", "Swords Dance"], + "abilities": ["Blaze"], "teraTypes": ["Dragon", "Ground"] } ] }, "blastoise": { - "level": 83, + "level": 80, "sets": [ { "role": "Setup Sweeper", "movepool": ["Earthquake", "Hydro Pump", "Ice Beam", "Shell Smash"], + "abilities": ["Torrent"], "teraTypes": ["Ground", "Steel", "Water"] + }, + { + "role": "Tera Blast user", + "movepool": ["Hydro Pump", "Ice Beam", "Shell Smash", "Tera Blast"], + "abilities": ["Torrent"], + "teraTypes": ["Electric", "Grass"] } ] }, "arbok": { - "level": 88, + "level": 87, "sets": [ { "role": "Fast Support", "movepool": ["Earthquake", "Glare", "Gunk Shot", "Knock Off", "Sucker Punch", "Toxic Spikes"], + "abilities": ["Intimidate"], "teraTypes": ["Dark", "Ground"] }, { "role": "Setup Sweeper", - "movepool": ["Coil", "Earthquake", "Gunk Shot", "Sucker Punch", "Trailblaze"], - "teraTypes": ["Ground"] + "movepool": ["Coil", "Earthquake", "Gunk Shot", "Trailblaze"], + "abilities": ["Intimidate"], + "teraTypes": ["Grass", "Ground"] + }, + { + "role": "Fast Bulky Setup", + "movepool": ["Coil", "Earthquake", "Gunk Shot", "Sucker Punch"], + "abilities": ["Intimidate"], + "teraTypes": ["Dark", "Ground"] } ] }, @@ -65,6 +79,7 @@ { "role": "Fast Attacker", "movepool": ["Fake Out", "Knock Off", "Play Rough", "Surf", "Volt Switch", "Volt Tackle"], + "abilities": ["Lightning Rod"], "teraTypes": ["Water"] } ] @@ -74,12 +89,14 @@ "sets": [ { "role": "Fast Support", - "movepool": ["Encore", "Focus Blast", "Grass Knot", "Nasty Plot", "Nuzzle", "Surf", "Thunderbolt", "Volt Switch"], + "movepool": ["Alluring Voice", "Encore", "Focus Blast", "Grass Knot", "Knock Off", "Nasty Plot", "Nuzzle", "Surf", "Thunderbolt", "Volt Switch"], + "abilities": ["Lightning Rod"], "teraTypes": ["Grass", "Water"] }, { "role": "Tera Blast user", "movepool": ["Encore", "Focus Blast", "Nasty Plot", "Surf", "Tera Blast", "Thunderbolt"], + "abilities": ["Lightning Rod"], "teraTypes": ["Ice"] } ] @@ -89,8 +106,15 @@ "sets": [ { "role": "Fast Attacker", - "movepool": ["Focus Blast", "Grass Knot", "Nasty Plot", "Psychic", "Psyshock", "Surf", "Thunderbolt", "Volt Switch"], - "teraTypes": ["Fighting", "Grass", "Water"] + "movepool": ["Alluring Voice", "Focus Blast", "Grass Knot", "Psychic", "Psyshock", "Surf", "Thunderbolt", "Volt Switch"], + "abilities": ["Surge Surfer"], + "teraTypes": ["Fairy", "Fighting", "Grass", "Water"] + }, + { + "role": "Setup Sweeper", + "movepool": ["Alluring Voice", "Focus Blast", "Grass Knot", "Nasty Plot", "Psyshock", "Surf", "Thunderbolt"], + "abilities": ["Surge Surfer"], + "teraTypes": ["Fairy", "Fighting", "Grass", "Water"] } ] }, @@ -100,6 +124,7 @@ { "role": "Bulky Support", "movepool": ["Earthquake", "Knock Off", "Rapid Spin", "Spikes", "Stone Edge", "Swords Dance"], + "abilities": ["Sand Rush"], "teraTypes": ["Dragon", "Steel", "Water"] } ] @@ -110,11 +135,13 @@ { "role": "Bulky Support", "movepool": ["Earthquake", "Iron Head", "Knock Off", "Rapid Spin", "Spikes", "Triple Axel"], + "abilities": ["Slush Rush"], "teraTypes": ["Flying", "Water"] }, { "role": "Setup Sweeper", "movepool": ["Earthquake", "Ice Shard", "Knock Off", "Rapid Spin", "Swords Dance", "Triple Axel"], + "abilities": ["Slush Rush"], "teraTypes": ["Ground"] } ] @@ -124,13 +151,15 @@ "sets": [ { "role": "Bulky Support", - "movepool": ["Flamethrower", "Knock Off", "Moonblast", "Moonlight", "Stealth Rock", "Thunder Wave"], + "movepool": ["Fire Blast", "Knock Off", "Moonblast", "Moonlight", "Stealth Rock", "Thunder Wave"], + "abilities": ["Magic Guard", "Unaware"], "teraTypes": ["Poison", "Steel"] }, { - "role": "Setup Sweeper", + "role": "Bulky Setup", "movepool": ["Calm Mind", "Fire Blast", "Moonblast", "Moonlight"], - "teraTypes": ["Fire"] + "abilities": ["Magic Guard", "Unaware"], + "teraTypes": ["Fire", "Steel"] } ] }, @@ -140,27 +169,25 @@ { "role": "Setup Sweeper", "movepool": ["Fire Blast", "Nasty Plot", "Scorching Sands", "Solar Beam"], + "abilities": ["Drought"], "teraTypes": ["Fire", "Grass"] } ] }, "ninetalesalola": { - "level": 79, + "level": 78, "sets": [ { "role": "Fast Support", - "movepool": ["Aurora Veil", "Blizzard", "Encore", "Moonblast"], + "movepool": ["Aurora Veil", "Blizzard", "Encore", "Moonblast", "Nasty Plot"], + "abilities": ["Snow Warning"], "teraTypes": ["Steel", "Water"] }, { - "role": "Fast Bulky Setup", - "movepool": ["Aurora Veil", "Blizzard", "Moonblast", "Nasty Plot"], + "role": "Fast Attacker", + "movepool": ["Aurora Veil", "Blizzard", "Freeze-Dry", "Moonblast", "Nasty Plot"], + "abilities": ["Snow Warning"], "teraTypes": ["Steel", "Water"] - }, - { - "role": "Tera Blast user", - "movepool": ["Blizzard", "Moonblast", "Nasty Plot", "Tera Blast"], - "teraTypes": ["Ground"] } ] }, @@ -169,27 +196,30 @@ "sets": [ { "role": "Bulky Support", - "movepool": ["Alluring Voice", "Fire Blast", "Knock Off", "Protect", "Stealth Rock", "Thunder Wave", "Wish"], + "movepool": ["Alluring Voice", "Dazzling Gleam", "Fire Blast", "Knock Off", "Protect", "Thunder Wave", "Wish"], + "abilities": ["Competitive"], "teraTypes": ["Poison", "Steel"] } ] }, "vileplume": { - "level": 87, + "level": 86, "sets": [ { "role": "Bulky Attacker", "movepool": ["Giga Drain", "Leech Seed", "Sleep Powder", "Sludge Bomb", "Strength Sap"], + "abilities": ["Effect Spore"], "teraTypes": ["Steel", "Water"] } ] }, "venomoth": { - "level": 85, + "level": 84, "sets": [ { "role": "Setup Sweeper", - "movepool": ["Bug Buzz", "Quiver Dance", "Sleep Powder", "Sludge Wave", "Substitute"], + "movepool": ["Bug Buzz", "Quiver Dance", "Sleep Powder", "Sludge Wave"], + "abilities": ["Tinted Lens"], "teraTypes": ["Bug", "Poison", "Steel", "Water"] } ] @@ -199,33 +229,43 @@ "sets": [ { "role": "Fast Support", - "movepool": ["Earthquake", "Stealth Rock", "Stone Edge", "Sucker Punch", "Swords Dance"], + "movepool": ["Earthquake", "Stone Edge", "Sucker Punch", "Swords Dance"], + "abilities": ["Arena Trap"], "teraTypes": ["Dark", "Fairy", "Flying", "Ghost", "Ground"] }, { "role": "Wallbreaker", "movepool": ["Earthquake", "Stone Edge", "Sucker Punch", "Throat Chop"], + "abilities": ["Arena Trap"], "teraTypes": ["Dark", "Fairy", "Flying", "Ghost", "Ground"] } ] }, "dugtrioalola": { - "level": 85, + "level": 84, "sets": [ { "role": "Fast Attacker", "movepool": ["Earthquake", "Iron Head", "Stealth Rock", "Stone Edge", "Sucker Punch", "Swords Dance"], + "abilities": ["Sand Force", "Tangling Hair"], "teraTypes": ["Ground", "Steel"] } ] }, "persian": { - "level": 93, + "level": 92, "sets": [ + { + "role": "Wallbreaker", + "movepool": ["Double-Edge", "Gunk Shot", "Knock Off", "Switcheroo", "U-turn"], + "abilities": ["Limber"], + "teraTypes": ["Normal", "Poison"] + }, { "role": "Fast Attacker", - "movepool": ["Aerial Ace", "Double-Edge", "Fake Out", "Gunk Shot", "Knock Off", "Switcheroo", "U-turn"], - "teraTypes": ["Flying", "Normal", "Poison"] + "movepool": ["Double-Edge", "Fake Out", "Knock Off", "U-turn"], + "abilities": ["Technician"], + "teraTypes": ["Normal"] } ] }, @@ -235,7 +275,14 @@ { "role": "Fast Bulky Setup", "movepool": ["Dark Pulse", "Hypnosis", "Nasty Plot", "Power Gem", "Thunderbolt"], + "abilities": ["Fur Coat"], "teraTypes": ["Dark", "Electric"] + }, + { + "role": "Tera Blast user", + "movepool": ["Dark Pulse", "Nasty Plot", "Tera Blast", "Thunderbolt"], + "abilities": ["Fur Coat"], + "teraTypes": ["Fairy", "Poison"] } ] }, @@ -244,12 +291,14 @@ "sets": [ { "role": "Fast Bulky Setup", - "movepool": ["Encore", "Grass Knot", "Hydro Pump", "Ice Beam", "Nasty Plot", "Psyshock"], + "movepool": ["Encore", "Grass Knot", "Hydro Pump", "Ice Beam", "Nasty Plot"], + "abilities": ["Cloud Nine", "Swift Swim"], "teraTypes": ["Water"] }, { "role": "Fast Attacker", "movepool": ["Flip Turn", "Grass Knot", "Hydro Pump", "Ice Beam", "Nasty Plot"], + "abilities": ["Cloud Nine", "Swift Swim"], "teraTypes": ["Grass", "Water"] } ] @@ -257,14 +306,10 @@ "annihilape": { "level": 76, "sets": [ - { - "role": "Fast Bulky Setup", - "movepool": ["Bulk Up", "Drain Punch", "Rage Fist", "Rest"], - "teraTypes": ["Fairy", "Ghost", "Steel", "Water"] - }, { "role": "Bulky Setup", - "movepool": ["Bulk Up", "Drain Punch", "Gunk Shot", "Rage Fist", "Stone Edge", "Taunt"], + "movepool": ["Bulk Up", "Drain Punch", "Gunk Shot", "Rage Fist", "Rest", "Taunt"], + "abilities": ["Defiant"], "teraTypes": ["Fairy", "Ghost", "Steel", "Water"] } ] @@ -274,23 +319,32 @@ "sets": [ { "role": "Bulky Attacker", - "movepool": ["Close Combat", "Extreme Speed", "Flare Blitz", "Morning Sun", "Roar", "Wild Charge", "Will-O-Wisp"], + "movepool": ["Close Combat", "Extreme Speed", "Flare Blitz", "Morning Sun", "Roar", "Will-O-Wisp"], + "abilities": ["Intimidate"], "teraTypes": ["Fighting", "Normal"] }, { "role": "Fast Attacker", "movepool": ["Close Combat", "Extreme Speed", "Flare Blitz", "Morning Sun", "Wild Charge"], + "abilities": ["Intimidate"], "teraTypes": ["Fighting", "Normal"] } ] }, "arcaninehisui": { - "level": 82, + "level": 81, "sets": [ { "role": "Fast Attacker", - "movepool": ["Close Combat", "Extreme Speed", "Flare Blitz", "Head Smash", "Morning Sun", "Wild Charge"], - "teraTypes": ["Rock"] + "movepool": ["Close Combat", "Extreme Speed", "Flare Blitz", "Head Smash", "Wild Charge"], + "abilities": ["Rock Head"], + "teraTypes": ["Fire", "Normal", "Rock"] + }, + { + "role": "Bulky Attacker", + "movepool": ["Extreme Speed", "Flare Blitz", "Head Smash", "Morning Sun"], + "abilities": ["Rock Head"], + "teraTypes": ["Fire", "Grass", "Normal", "Rock"] } ] }, @@ -300,16 +354,19 @@ { "role": "Setup Sweeper", "movepool": ["Close Combat", "Knock Off", "Liquidation", "Rain Dance"], + "abilities": ["Swift Swim"], "teraTypes": ["Dark", "Fighting", "Water"] }, { "role": "AV Pivot", "movepool": ["Circle Throw", "Close Combat", "Knock Off", "Liquidation"], + "abilities": ["Water Absorb"], "teraTypes": ["Dark", "Fighting", "Steel"] }, { "role": "Bulky Setup", "movepool": ["Bulk Up", "Drain Punch", "Ice Punch", "Knock Off", "Liquidation", "Poison Jab"], + "abilities": ["Water Absorb"], "teraTypes": ["Fighting", "Steel", "Water"] } ] @@ -320,26 +377,30 @@ { "role": "Setup Sweeper", "movepool": ["Poison Jab", "Power Whip", "Sucker Punch", "Swords Dance"], + "abilities": ["Chlorophyll"], "teraTypes": ["Dark", "Grass"] }, { "role": "Wallbreaker", "movepool": ["Knock Off", "Power Whip", "Sleep Powder", "Sludge Wave", "Strength Sap", "Sucker Punch"], + "abilities": ["Chlorophyll"], "teraTypes": ["Grass", "Steel"] }, { "role": "Fast Attacker", "movepool": ["Power Whip", "Sludge Wave", "Sunny Day", "Weather Ball"], + "abilities": ["Chlorophyll"], "teraTypes": ["Fire"] } ] }, "tentacruel": { - "level": 85, + "level": 84, "sets": [ { "role": "Bulky Support", "movepool": ["Flip Turn", "Haze", "Knock Off", "Rapid Spin", "Sludge Bomb", "Surf", "Toxic", "Toxic Spikes"], + "abilities": ["Liquid Ooze"], "teraTypes": ["Flying", "Grass"] } ] @@ -347,45 +408,51 @@ "golem": { "level": 87, "sets": [ - { - "role": "Bulky Setup", - "movepool": ["Earthquake", "Explosion", "Rock Polish", "Stone Edge"], - "teraTypes": ["Grass", "Ground", "Steel"] - }, { "role": "Bulky Attacker", - "movepool": ["Earthquake", "Explosion", "Stealth Rock", "Stone Edge"], - "teraTypes": ["Grass"] + "movepool": ["Earthquake", "Explosion", "Rock Polish", "Stealth Rock", "Stone Edge"], + "abilities": ["Sturdy"], + "teraTypes": ["Grass", "Ground", "Steel"] } ] }, "golemalola": { - "level": 91, + "level": 93, "sets": [ { - "role": "Bulky Attacker", - "movepool": ["Earthquake", "Stealth Rock", "Stone Edge", "Volt Switch", "Wild Charge"], - "teraTypes": ["Ground"] + "role": "Setup Sweeper", + "movepool": ["Double-Edge", "Earthquake", "Rock Polish", "Stone Edge"], + "abilities": ["Galvanize"], + "teraTypes": ["Flying", "Grass"] }, { "role": "Wallbreaker", - "movepool": ["Double-Edge", "Earthquake", "Explosion", "Rock Polish", "Stone Edge"], - "teraTypes": ["Ground"] + "movepool": ["Double-Edge", "Earthquake", "Explosion", "Stone Edge"], + "abilities": ["Galvanize"], + "teraTypes": ["Electric", "Grass", "Ground"] } ] }, "slowbro": { - "level": 84, + "level": 85, "sets": [ { "role": "Bulky Attacker", "movepool": ["Calm Mind", "Psychic Noise", "Psyshock", "Scald", "Slack Off", "Thunder Wave"], + "abilities": ["Regenerator"], "teraTypes": ["Fairy", "Water"] }, { "role": "AV Pivot", "movepool": ["Body Press", "Fire Blast", "Future Sight", "Ice Beam", "Psychic Noise", "Scald"], + "abilities": ["Regenerator"], "teraTypes": ["Fairy", "Fighting"] + }, + { + "role": "Bulky Setup", + "movepool": ["Body Press", "Iron Defense", "Scald", "Slack Off"], + "abilities": ["Regenerator"], + "teraTypes": ["Fighting"] } ] }, @@ -395,56 +462,64 @@ { "role": "AV Pivot", "movepool": ["Earthquake", "Fire Blast", "Foul Play", "Psychic", "Shell Side Arm", "Surf"], + "abilities": ["Regenerator"], "teraTypes": ["Dark", "Ground", "Poison", "Water"] }, { "role": "Wallbreaker", - "movepool": ["Fire Blast", "Psyshock", "Sludge Bomb", "Trick", "Trick Room"], + "movepool": ["Fire Blast", "Psychic", "Shell Side Arm", "Trick Room"], + "abilities": ["Regenerator"], "teraTypes": ["Poison", "Psychic"] }, { "role": "Bulky Attacker", "movepool": ["Earthquake", "Fire Blast", "Psychic", "Shell Side Arm", "Slack Off", "Thunder Wave"], + "abilities": ["Regenerator"], "teraTypes": ["Dark", "Ground", "Poison"] } ] }, "dodrio": { - "level": 84, + "level": 86, "sets": [ { "role": "Setup Sweeper", "movepool": ["Brave Bird", "Double-Edge", "Drill Run", "Knock Off", "Swords Dance"], + "abilities": ["Early Bird"], "teraTypes": ["Flying", "Ground", "Normal"] } ] }, "dewgong": { - "level": 90, + "level": 94, "sets": [ { - "role": "Fast Support", + "role": "Bulky Attacker", "movepool": ["Encore", "Flip Turn", "Knock Off", "Surf", "Triple Axel"], + "abilities": ["Thick Fat"], "teraTypes": ["Dragon", "Grass", "Ground", "Poison", "Steel"] }, { - "role": "Bulky Attacker", + "role": "Bulky Support", "movepool": ["Encore", "Flip Turn", "Hydro Pump", "Ice Beam", "Knock Off", "Surf"], + "abilities": ["Thick Fat"], "teraTypes": ["Dragon", "Grass", "Ground", "Poison", "Steel"] } ] }, "muk": { - "level": 87, + "level": 86, "sets": [ { "role": "Bulky Attacker", - "movepool": ["Drain Punch", "Gunk Shot", "Haze", "Ice Punch", "Knock Off", "Poison Jab", "Shadow Sneak", "Toxic", "Toxic Spikes"], + "movepool": ["Drain Punch", "Gunk Shot", "Haze", "Ice Punch", "Knock Off", "Poison Jab", "Shadow Sneak", "Toxic Spikes"], + "abilities": ["Poison Touch"], "teraTypes": ["Dark"] }, { "role": "AV Pivot", "movepool": ["Drain Punch", "Gunk Shot", "Ice Punch", "Knock Off", "Poison Jab", "Shadow Sneak"], + "abilities": ["Poison Touch"], "teraTypes": ["Dark"] } ] @@ -455,21 +530,24 @@ { "role": "AV Pivot", "movepool": ["Drain Punch", "Gunk Shot", "Ice Punch", "Knock Off", "Poison Jab", "Shadow Sneak"], + "abilities": ["Poison Touch"], "teraTypes": ["Dark"] } ] }, "cloyster": { - "level": 79, + "level": 80, "sets": [ { "role": "Fast Attacker", "movepool": ["Drill Run", "Icicle Spear", "Rock Blast", "Shell Smash"], + "abilities": ["Skill Link"], "teraTypes": ["Ground"] }, { "role": "Setup Sweeper", "movepool": ["Hydro Pump", "Icicle Spear", "Rock Blast", "Shell Smash"], + "abilities": ["Skill Link"], "teraTypes": ["Ice", "Rock"] } ] @@ -480,12 +558,14 @@ { "role": "Wallbreaker", "movepool": ["Focus Blast", "Nasty Plot", "Shadow Ball", "Sludge Wave", "Trick"], - "teraTypes": ["Fighting", "Ghost"] + "abilities": ["Cursed Body"], + "teraTypes": ["Dark", "Fighting", "Ghost"] }, { "role": "Fast Attacker", "movepool": ["Encore", "Focus Blast", "Shadow Ball", "Sludge Wave", "Toxic Spikes", "Will-O-Wisp"], - "teraTypes": ["Ghost"] + "abilities": ["Cursed Body"], + "teraTypes": ["Dark", "Fighting", "Ghost"] } ] }, @@ -495,11 +575,13 @@ { "role": "Bulky Support", "movepool": ["Encore", "Knock Off", "Psychic Noise", "Thunder Wave", "Toxic"], - "teraTypes": ["Dark", "Steel"] + "abilities": ["Insomnia"], + "teraTypes": ["Dark", "Fairy", "Steel"] }, { "role": "Bulky Attacker", "movepool": ["Focus Blast", "Protect", "Psychic Noise", "Toxic"], + "abilities": ["Insomnia"], "teraTypes": ["Dark", "Fighting", "Steel"] } ] @@ -510,11 +592,13 @@ { "role": "Fast Support", "movepool": ["Explosion", "Foul Play", "Taunt", "Thunder Wave", "Thunderbolt", "Volt Switch"], + "abilities": ["Aftermath", "Soundproof", "Static"], "teraTypes": ["Dark", "Electric"] }, { "role": "Tera Blast user", "movepool": ["Taunt", "Tera Blast", "Thunderbolt", "Volt Switch"], + "abilities": ["Aftermath", "Soundproof", "Static"], "teraTypes": ["Ice"] } ] @@ -524,27 +608,37 @@ "sets": [ { "role": "Fast Attacker", - "movepool": ["Energy Ball", "Leaf Storm", "Taunt", "Thunder Wave", "Thunderbolt", "Volt Switch"], - "teraTypes": ["Grass"] + "movepool": ["Giga Drain", "Leaf Storm", "Taunt", "Thunder Wave", "Thunderbolt", "Volt Switch"], + "abilities": ["Aftermath", "Soundproof", "Static"], + "teraTypes": ["Electric", "Grass"] }, { "role": "Fast Support", "movepool": ["Giga Drain", "Leech Seed", "Substitute", "Thunderbolt"], + "abilities": ["Soundproof"], "teraTypes": ["Poison"] } ] }, "exeggutor": { - "level": 87, + "level": 89, "sets": [ { "role": "Bulky Support", - "movepool": ["Leech Seed", "Psychic Noise", "Sleep Powder", "Sludge Bomb", "Substitute"], + "movepool": ["Leech Seed", "Psychic", "Psychic Noise", "Sleep Powder", "Sludge Bomb", "Substitute"], + "abilities": ["Harvest"], "teraTypes": ["Steel"] }, { "role": "Bulky Attacker", "movepool": ["Leech Seed", "Protect", "Psychic Noise", "Substitute"], + "abilities": ["Harvest"], + "teraTypes": ["Steel"] + }, + { + "role": "Bulky Setup", + "movepool": ["Calm Mind", "Giga Drain", "Psychic", "Psyshock", "Substitute"], + "abilities": ["Harvest"], "teraTypes": ["Steel"] } ] @@ -555,26 +649,36 @@ { "role": "Wallbreaker", "movepool": ["Draco Meteor", "Flamethrower", "Giga Drain", "Leaf Storm"], + "abilities": ["Frisk"], "teraTypes": ["Fire"] }, { - "role": "AV Pivot", - "movepool": ["Draco Meteor", "Flamethrower", "Giga Drain", "Knock Off"], + "role": "Fast Attacker", + "movepool": ["Draco Meteor", "Dragon Tail", "Flamethrower", "Knock Off", "Moonlight", "Sleep Powder", "Stun Spore", "Wood Hammer"], + "abilities": ["Harvest"], + "teraTypes": ["Fire"] + }, + { + "role": "Bulky Setup", + "movepool": ["Calm Mind", "Dragon Pulse", "Flamethrower", "Giga Drain"], + "abilities": ["Harvest"], "teraTypes": ["Fire", "Steel"] } ] }, "hitmonlee": { - "level": 84, + "level": 85, "sets": [ { "role": "Fast Attacker", "movepool": ["High Jump Kick", "Knock Off", "Mach Punch", "Poison Jab", "Stone Edge"], + "abilities": ["Reckless"], "teraTypes": ["Fighting"] }, { "role": "Setup Sweeper", "movepool": ["Close Combat", "Knock Off", "Poison Jab", "Stone Edge", "Swords Dance"], + "abilities": ["Unburden"], "teraTypes": ["Dark", "Fighting", "Poison"] } ] @@ -585,21 +689,24 @@ { "role": "Setup Sweeper", "movepool": ["Close Combat", "Drain Punch", "Ice Punch", "Knock Off", "Mach Punch", "Rapid Spin", "Swords Dance"], + "abilities": ["Inner Focus", "Iron Fist"], "teraTypes": ["Dark", "Fighting"] }, { "role": "Bulky Setup", "movepool": ["Bulk Up", "Drain Punch", "Knock Off", "Poison Jab", "Rapid Spin"], + "abilities": ["Iron Fist"], "teraTypes": ["Dark", "Poison", "Steel"] } ] }, "weezing": { - "level": 87, + "level": 88, "sets": [ { "role": "Bulky Attacker", "movepool": ["Fire Blast", "Gunk Shot", "Pain Split", "Sludge Bomb", "Toxic Spikes", "Will-O-Wisp"], + "abilities": ["Levitate"], "teraTypes": ["Steel"] } ] @@ -610,16 +717,18 @@ { "role": "Bulky Support", "movepool": ["Defog", "Fire Blast", "Gunk Shot", "Pain Split", "Strange Steam", "Will-O-Wisp"], + "abilities": ["Levitate"], "teraTypes": ["Steel"] } ] }, "rhydon": { - "level": 86, + "level": 85, "sets": [ { "role": "Bulky Attacker", "movepool": ["Earthquake", "Megahorn", "Stealth Rock", "Stone Edge", "Swords Dance"], + "abilities": ["Lightning Rod"], "teraTypes": ["Dragon", "Fairy", "Flying", "Grass", "Water"] } ] @@ -630,37 +739,42 @@ { "role": "Setup Sweeper", "movepool": ["Bug Bite", "Close Combat", "Dual Wingbeat", "Swords Dance"], + "abilities": ["Technician"], "teraTypes": ["Fighting"] }, { "role": "Fast Support", "movepool": ["Close Combat", "Defog", "Dual Wingbeat", "U-turn"], + "abilities": ["Technician"], "teraTypes": ["Fighting"] } ] }, "tauros": { - "level": 84, + "level": 82, "sets": [ { "role": "Fast Attacker", "movepool": ["Body Slam", "Close Combat", "Earthquake", "Throat Chop"], + "abilities": ["Sheer Force"], "teraTypes": ["Fighting", "Ground", "Normal"] + }, + { + "role": "Wallbreaker", + "movepool": ["Body Slam", "Close Combat", "Throat Chop", "Zen Headbutt"], + "abilities": ["Sheer Force"], + "teraTypes": ["Fighting", "Normal", "Psychic"] } ] }, "taurospaldeacombat": { - "level": 84, + "level": 82, "sets": [ - { - "role": "Fast Bulky Setup", - "movepool": ["Bulk Up", "Raging Bull", "Stone Edge", "Substitute"], - "teraTypes": ["Fighting", "Steel"] - }, { "role": "Wallbreaker", "movepool": ["Bulk Up", "Close Combat", "Earthquake", "Iron Head", "Stone Edge", "Throat Chop"], - "teraTypes": ["Fighting"] + "abilities": ["Intimidate"], + "teraTypes": ["Dark", "Fighting", "Steel"] } ] }, @@ -670,11 +784,13 @@ { "role": "Fast Bulky Setup", "movepool": ["Bulk Up", "Close Combat", "Raging Bull", "Substitute"], + "abilities": ["Cud Chew"], "teraTypes": ["Water"] }, { "role": "Wallbreaker", "movepool": ["Close Combat", "Flare Blitz", "Stone Edge", "Wild Charge"], + "abilities": ["Intimidate"], "teraTypes": ["Fighting"] } ] @@ -685,11 +801,19 @@ { "role": "Fast Bulky Setup", "movepool": ["Bulk Up", "Close Combat", "Liquidation", "Substitute"], + "abilities": ["Cud Chew"], "teraTypes": ["Steel", "Water"] }, { "role": "Wallbreaker", - "movepool": ["Aqua Jet", "Bulk Up", "Close Combat", "Liquidation", "Stone Edge", "Wave Crash"], + "movepool": ["Aqua Jet", "Close Combat", "Stone Edge", "Wave Crash"], + "abilities": ["Intimidate"], + "teraTypes": ["Water"] + }, + { + "role": "Setup Sweeper", + "movepool": ["Aqua Jet", "Bulk Up", "Close Combat", "Liquidation"], + "abilities": ["Intimidate"], "teraTypes": ["Water"] } ] @@ -700,27 +824,37 @@ { "role": "Setup Sweeper", "movepool": ["Dragon Dance", "Earthquake", "Stone Edge", "Temper Flare", "Waterfall"], + "abilities": ["Intimidate", "Moxie"], "teraTypes": ["Ground"] }, { "role": "Tera Blast user", "movepool": ["Dragon Dance", "Earthquake", "Tera Blast", "Waterfall"], + "abilities": ["Intimidate", "Moxie"], "teraTypes": ["Flying"] } ] }, "lapras": { - "level": 88, + "level": 87, "sets": [ { "role": "Wallbreaker", "movepool": ["Freeze-Dry", "Hydro Pump", "Ice Beam", "Sparkling Aria"], + "abilities": ["Water Absorb"], "teraTypes": ["Ice", "Water"] }, { "role": "Bulky Attacker", "movepool": ["Freeze-Dry", "Rest", "Sleep Talk", "Sparkling Aria"], + "abilities": ["Water Absorb"], "teraTypes": ["Dragon", "Ghost", "Ground", "Poison", "Steel"] + }, + { + "role": "Setup Sweeper", + "movepool": ["Dragon Dance", "Earthquake", "Icicle Spear", "Waterfall"], + "abilities": ["Water Absorb"], + "teraTypes": ["Ground"] } ] }, @@ -730,22 +864,25 @@ { "role": "Fast Support", "movepool": ["Transform"], + "abilities": ["Imposter"], "teraTypes": ["Bug", "Dark", "Dragon", "Electric", "Fairy", "Fighting", "Fire", "Flying", "Ghost", "Grass", "Ground", "Ice", "Normal", "Poison", "Psychic", "Rock", "Steel", "Water"] } ] }, "vaporeon": { - "level": 85, + "level": 86, "sets": [ { "role": "Bulky Support", "movepool": ["Flip Turn", "Ice Beam", "Protect", "Scald", "Wish"], - "teraTypes": ["Ghost", "Ground"] + "abilities": ["Water Absorb"], + "teraTypes": ["Ghost", "Ground", "Poison"] }, { "role": "Bulky Setup", "movepool": ["Calm Mind", "Protect", "Scald", "Wish"], - "teraTypes": ["Ghost", "Ground"] + "abilities": ["Water Absorb"], + "teraTypes": ["Ghost", "Ground", "Poison"] } ] }, @@ -755,11 +892,13 @@ { "role": "Fast Attacker", "movepool": ["Alluring Voice", "Calm Mind", "Shadow Ball", "Thunderbolt", "Volt Switch"], + "abilities": ["Volt Absorb"], "teraTypes": ["Electric", "Fairy"] }, { "role": "Tera Blast user", "movepool": ["Calm Mind", "Substitute", "Tera Blast", "Thunderbolt"], + "abilities": ["Volt Absorb"], "teraTypes": ["Ice"] } ] @@ -770,6 +909,7 @@ { "role": "Wallbreaker", "movepool": ["Facade", "Flare Blitz", "Quick Attack", "Trailblaze", "Will-O-Wisp"], + "abilities": ["Guts"], "teraTypes": ["Normal"] } ] @@ -780,11 +920,13 @@ { "role": "Bulky Attacker", "movepool": ["Body Slam", "Curse", "Rest", "Sleep Talk"], + "abilities": ["Thick Fat"], "teraTypes": ["Fairy", "Poison"] }, { "role": "Bulky Setup", "movepool": ["Body Slam", "Crunch", "Curse", "Earthquake", "Rest"], + "abilities": ["Thick Fat"], "teraTypes": ["Ground", "Poison"] } ] @@ -795,16 +937,18 @@ { "role": "Bulky Support", "movepool": ["Brave Bird", "Freeze-Dry", "Haze", "Roost", "Substitute", "U-turn"], + "abilities": ["Pressure"], "teraTypes": ["Ground", "Steel"] } ] }, "articunogalar": { - "level": 83, + "level": 84, "sets": [ { "role": "Fast Bulky Setup", "movepool": ["Calm Mind", "Freezing Glare", "Hurricane", "Recover"], + "abilities": ["Competitive"], "teraTypes": ["Steel"] } ] @@ -814,7 +958,8 @@ "sets": [ { "role": "Bulky Attacker", - "movepool": ["Discharge", "Heat Wave", "Hurricane", "Roost", "U-turn"], + "movepool": ["Discharge", "Heat Wave", "Hurricane", "Roost", "Thunderbolt", "U-turn"], + "abilities": ["Static"], "teraTypes": ["Electric", "Steel"] } ] @@ -825,7 +970,8 @@ { "role": "Fast Attacker", "movepool": ["Brave Bird", "Bulk Up", "Close Combat", "Knock Off", "U-turn"], - "teraTypes": ["Fighting"] + "abilities": ["Defiant"], + "teraTypes": ["Dark", "Fighting", "Steel"] } ] }, @@ -835,17 +981,19 @@ { "role": "Bulky Attacker", "movepool": ["Brave Bird", "Fire Blast", "Roost", "Scorching Sands", "U-turn", "Will-O-Wisp"], + "abilities": ["Flame Body"], "teraTypes": ["Dragon", "Ground", "Steel"] } ] }, "moltresgalar": { - "level": 80, + "level": 79, "sets": [ { "role": "Bulky Setup", "movepool": ["Agility", "Fiery Wrath", "Hurricane", "Nasty Plot", "Rest"], - "teraTypes": ["Dark"] + "abilities": ["Berserk"], + "teraTypes": ["Dark", "Steel"] } ] }, @@ -853,18 +1001,21 @@ "level": 74, "sets": [ { - "role": "Bulky Attacker", - "movepool": ["Dragon Dance", "Earthquake", "Extreme Speed", "Fire Punch", "Outrage"], - "teraTypes": ["Normal"] + "role": "Bulky Setup", + "movepool": ["Dragon Dance", "Earthquake", "Outrage", "Roost"], + "abilities": ["Multiscale"], + "teraTypes": ["Ground", "Steel"] }, { - "role": "Bulky Setup", + "role": "Setup Sweeper", "movepool": ["Dragon Dance", "Earthquake", "Iron Head", "Outrage"], + "abilities": ["Multiscale"], "teraTypes": ["Steel"] }, { "role": "Tera Blast user", "movepool": ["Dragon Dance", "Earthquake", "Outrage", "Tera Blast"], + "abilities": ["Multiscale"], "teraTypes": ["Flying"] } ] @@ -875,6 +1026,7 @@ { "role": "Fast Attacker", "movepool": ["Aura Sphere", "Dark Pulse", "Fire Blast", "Nasty Plot", "Psystrike", "Recover"], + "abilities": ["Unnerve"], "teraTypes": ["Dark", "Fighting", "Fire", "Psychic"] } ] @@ -884,18 +1036,21 @@ "sets": [ { "role": "Bulky Support", - "movepool": ["Encore", "Knock Off", "Psychic", "Stealth Rock", "Taunt", "Toxic Spikes", "U-turn", "Will-O-Wisp"], - "teraTypes": ["Fairy", "Steel"] + "movepool": ["Encore", "Knock Off", "Psychic", "Psychic Noise", "Stealth Rock", "Toxic Spikes", "U-turn", "Will-O-Wisp"], + "abilities": ["Synchronize"], + "teraTypes": ["Dark", "Fairy", "Steel"] }, { "role": "Setup Sweeper", - "movepool": ["Brave Bird", "Close Combat", "Flare Blitz", "Knock Off", "Leech Life", "Psychic Fangs", "Swords Dance"], + "movepool": ["Close Combat", "Knock Off", "Leech Life", "Psychic Fangs", "Swords Dance"], + "abilities": ["Synchronize"], "teraTypes": ["Fighting"] }, { "role": "Fast Bulky Setup", - "movepool": ["Alluring Voice", "Aura Sphere", "Dark Pulse", "Earth Power", "Fire Blast", "Hydro Pump", "Nasty Plot", "Psychic", "Psyshock"], - "teraTypes": ["Dark", "Fairy", "Fighting", "Fire", "Ground", "Psychic", "Water"] + "movepool": ["Aura Sphere", "Bug Buzz", "Dark Pulse", "Earth Power", "Fire Blast", "Hydro Pump", "Nasty Plot", "Psychic", "Psyshock"], + "abilities": ["Synchronize"], + "teraTypes": ["Dark", "Fighting", "Fire", "Ground", "Psychic", "Water"] } ] }, @@ -905,7 +1060,14 @@ { "role": "Bulky Attacker", "movepool": ["Dragon Tail", "Encore", "Energy Ball", "Knock Off", "Leech Seed", "Synthesis"], + "abilities": ["Overgrow"], "teraTypes": ["Poison", "Steel", "Water"] + }, + { + "role": "Setup Sweeper", + "movepool": ["Earthquake", "Knock Off", "Petal Blizzard", "Swords Dance"], + "abilities": ["Overgrow"], + "teraTypes": ["Ground", "Steel", "Water"] } ] }, @@ -915,6 +1077,7 @@ { "role": "Fast Attacker", "movepool": ["Eruption", "Fire Blast", "Focus Blast", "Scorching Sands"], + "abilities": ["Blaze", "Flash Fire"], "teraTypes": ["Fire"] } ] @@ -925,62 +1088,70 @@ { "role": "Fast Bulky Setup", "movepool": ["Calm Mind", "Fire Blast", "Focus Blast", "Shadow Ball", "Substitute", "Will-O-Wisp"], + "abilities": ["Blaze"], "teraTypes": ["Fighting", "Fire", "Ghost"] }, { "role": "Fast Attacker", "movepool": ["Eruption", "Fire Blast", "Focus Blast", "Shadow Ball"], + "abilities": ["Blaze"], "teraTypes": ["Fire"] } ] }, "feraligatr": { - "level": 80, + "level": 79, "sets": [ { - "role": "Bulky Setup", - "movepool": ["Aqua Jet", "Earthquake", "Ice Punch", "Liquidation", "Swords Dance"], - "teraTypes": ["Water"] + "role": "Fast Bulky Setup", + "movepool": ["Crunch", "Dragon Dance", "Ice Punch", "Liquidation"], + "abilities": ["Sheer Force"], + "teraTypes": ["Dark", "Dragon", "Steel", "Water"] }, { "role": "Setup Sweeper", "movepool": ["Dragon Dance", "Ice Punch", "Liquidation", "Trailblaze"], + "abilities": ["Sheer Force"], "teraTypes": ["Grass", "Water"] } ] }, "furret": { - "level": 93, + "level": 94, "sets": [ { "role": "Wallbreaker", "movepool": ["Double-Edge", "Knock Off", "Trick", "U-turn"], + "abilities": ["Frisk"], "teraTypes": ["Ghost", "Normal"] }, { "role": "Setup Sweeper", "movepool": ["Brick Break", "Double-Edge", "Knock Off", "Tidy Up"], + "abilities": ["Frisk"], "teraTypes": ["Ghost", "Normal"] } ] }, "noctowl": { - "level": 94, + "level": 95, "sets": [ { "role": "Bulky Attacker", - "movepool": ["Calm Mind", "Defog", "Hurricane", "Hyper Voice", "Roost"], + "movepool": ["Calm Mind", "Defog", "Hurricane", "Hyper Voice", "Nasty Plot", "Roost"], + "abilities": ["Tinted Lens"], "teraTypes": ["Ground", "Normal", "Steel"] } ] }, "ariados": { - "level": 92, + "level": 95, "sets": [ { "role": "Fast Support", "movepool": ["Knock Off", "Megahorn", "Poison Jab", "Sticky Web", "Sucker Punch", "Toxic Spikes"], - "teraTypes": ["Ghost", "Steel"] + "abilities": ["Insomnia", "Swarm"], + "teraTypes": ["Ghost"] } ] }, @@ -990,11 +1161,13 @@ { "role": "Fast Support", "movepool": ["Scald", "Thunder Wave", "Thunderbolt", "Volt Switch"], + "abilities": ["Volt Absorb"], "teraTypes": ["Flying"] }, { "role": "Bulky Attacker", "movepool": ["Ice Beam", "Scald", "Thunder Wave", "Thunderbolt", "Volt Switch"], + "abilities": ["Volt Absorb"], "teraTypes": ["Flying", "Water"] } ] @@ -1005,26 +1178,36 @@ { "role": "Wallbreaker", "movepool": ["Agility", "Dazzling Gleam", "Focus Blast", "Thunderbolt", "Volt Switch"], + "abilities": ["Static"], "teraTypes": ["Electric", "Fairy"] + }, + { + "role": "AV Pivot", + "movepool": ["Dazzling Gleam", "Discharge", "Focus Blast", "Thunderbolt", "Volt Switch"], + "abilities": ["Static"], + "teraTypes": ["Fairy"] } ] }, "bellossom": { - "level": 87, + "level": 84, "sets": [ { "role": "Fast Bulky Setup", "movepool": ["Giga Drain", "Quiver Dance", "Sleep Powder", "Strength Sap"], + "abilities": ["Chlorophyll"], "teraTypes": ["Poison", "Steel", "Water"] }, { "role": "Bulky Setup", "movepool": ["Giga Drain", "Moonblast", "Quiver Dance", "Sludge Bomb", "Strength Sap"], + "abilities": ["Chlorophyll"], "teraTypes": ["Fairy", "Poison"] }, { "role": "Tera Blast user", "movepool": ["Giga Drain", "Quiver Dance", "Strength Sap", "Tera Blast"], + "abilities": ["Chlorophyll"], "teraTypes": ["Fire", "Rock"] } ] @@ -1034,22 +1217,19 @@ "sets": [ { "role": "Bulky Attacker", - "movepool": ["Aqua Jet", "Ice Spinner", "Knock Off", "Liquidation", "Play Rough", "Superpower"], - "teraTypes": ["Water"] - }, - { - "role": "Bulky Setup", - "movepool": ["Aqua Jet", "Belly Drum", "Liquidation", "Play Rough"], + "movepool": ["Aqua Jet", "Belly Drum", "Ice Spinner", "Knock Off", "Liquidation", "Play Rough", "Superpower"], + "abilities": ["Huge Power"], "teraTypes": ["Water"] } ] }, "sudowoodo": { - "level": 93, + "level": 94, "sets": [ { "role": "Bulky Attacker", "movepool": ["Earthquake", "Head Smash", "Stealth Rock", "Sucker Punch", "Wood Hammer"], + "abilities": ["Rock Head"], "teraTypes": ["Grass", "Rock"] } ] @@ -1060,7 +1240,14 @@ { "role": "Bulky Attacker", "movepool": ["Encore", "Haze", "Hydro Pump", "Hypnosis", "Ice Beam", "Rest", "Surf"], + "abilities": ["Drizzle"], "teraTypes": ["Steel", "Water"] + }, + { + "role": "Fast Attacker", + "movepool": ["Focus Blast", "Hydro Pump", "Ice Beam", "Weather Ball"], + "abilities": ["Drizzle"], + "teraTypes": ["Water"] } ] }, @@ -1070,11 +1257,13 @@ { "role": "Bulky Support", "movepool": ["Acrobatics", "Leech Seed", "Strength Sap", "Substitute"], + "abilities": ["Infiltrator"], "teraTypes": ["Steel"] }, { "role": "Fast Support", "movepool": ["Acrobatics", "Encore", "Sleep Powder", "Strength Sap", "U-turn"], + "abilities": ["Infiltrator"], "teraTypes": ["Steel"] } ] @@ -1085,11 +1274,13 @@ { "role": "Wallbreaker", "movepool": ["Dazzling Gleam", "Earth Power", "Leaf Storm", "Sludge Bomb"], + "abilities": ["Chlorophyll"], "teraTypes": ["Fairy", "Grass", "Ground", "Poison"] }, { "role": "Setup Sweeper", "movepool": ["Earth Power", "Solar Beam", "Sunny Day", "Weather Ball"], + "abilities": ["Chlorophyll"], "teraTypes": ["Fire"] } ] @@ -1100,11 +1291,7 @@ { "role": "Bulky Support", "movepool": ["Earthquake", "Ice Beam", "Recover", "Spikes", "Toxic"], - "teraTypes": ["Fairy", "Poison", "Steel"] - }, - { - "role": "Bulky Attacker", - "movepool": ["Earthquake", "Liquidation", "Recover", "Spikes", "Toxic"], + "abilities": ["Unaware"], "teraTypes": ["Fairy", "Poison", "Steel"] } ] @@ -1112,15 +1299,11 @@ "clodsire": { "level": 81, "sets": [ - { - "role": "Bulky Setup", - "movepool": ["Curse", "Earthquake", "Gunk Shot", "Recover"], - "teraTypes": ["Flying", "Ground"] - }, { "role": "Bulky Support", - "movepool": ["Earthquake", "Poison Jab", "Recover", "Stealth Rock", "Toxic", "Toxic Spikes"], - "teraTypes": ["Flying", "Ground", "Steel"] + "movepool": ["Curse", "Earthquake", "Gunk Shot", "Poison Jab", "Recover", "Stealth Rock", "Toxic", "Toxic Spikes"], + "abilities": ["Unaware", "Water Absorb"], + "teraTypes": ["Flying", "Steel"] } ] }, @@ -1129,7 +1312,8 @@ "sets": [ { "role": "Fast Attacker", - "movepool": ["Alluring Voice", "Calm Mind", "Morning Sun", "Psychic", "Shadow Ball", "Trick"], + "movepool": ["Alluring Voice", "Calm Mind", "Morning Sun", "Psychic", "Psyshock", "Shadow Ball", "Trick"], + "abilities": ["Magic Bounce"], "teraTypes": ["Fairy", "Psychic"] } ] @@ -1140,27 +1324,25 @@ { "role": "Bulky Support", "movepool": ["Foul Play", "Protect", "Toxic", "Wish"], + "abilities": ["Synchronize"], "teraTypes": ["Poison"] } ] }, "slowking": { - "level": 87, + "level": 88, "sets": [ { - "role": "Bulky Support", + "role": "Bulky Attacker", "movepool": ["Chilly Reception", "Psychic Noise", "Psyshock", "Scald", "Slack Off", "Thunder Wave"], - "teraTypes": ["Dragon", "Fairy", "Water"] - }, - { - "role": "Wallbreaker", - "movepool": ["Fire Blast", "Hydro Pump", "Ice Beam", "Psychic", "Psyshock", "Trick Room"], - "teraTypes": ["Psychic", "Water"] + "abilities": ["Regenerator"], + "teraTypes": ["Dragon", "Fairy"] }, { "role": "Fast Support", "movepool": ["Chilly Reception", "Future Sight", "Scald", "Slack Off"], - "teraTypes": ["Dragon", "Fairy", "Water"] + "abilities": ["Regenerator"], + "teraTypes": ["Dragon", "Fairy"] } ] }, @@ -1168,14 +1350,16 @@ "level": 85, "sets": [ { - "role": "Bulky Support", - "movepool": ["Chilly Reception", "Fire Blast", "Psychic Noise", "Psyshock", "Slack Off", "Sludge Bomb", "Thunder Wave"], + "role": "Bulky Attacker", + "movepool": ["Chilly Reception", "Fire Blast", "Psychic Noise", "Psyshock", "Slack Off", "Sludge Bomb", "Thunder Wave", "Toxic Spikes"], + "abilities": ["Regenerator"], "teraTypes": ["Dark", "Poison"] }, { "role": "AV Pivot", - "movepool": ["Fire Blast", "Future Sight", "Ice Beam", "Psychic Noise", "Sludge Bomb"], - "teraTypes": ["Poison", "Psychic"] + "movepool": ["Fire Blast", "Future Sight", "Psychic Noise", "Sludge Bomb", "Surf"], + "abilities": ["Regenerator"], + "teraTypes": ["Poison", "Psychic", "Water"] } ] }, @@ -1185,6 +1369,7 @@ { "role": "Bulky Setup", "movepool": ["Calm Mind", "Draining Kiss", "Shadow Ball", "Will-O-Wisp"], + "abilities": ["Levitate"], "teraTypes": ["Fairy"] } ] @@ -1195,11 +1380,13 @@ { "role": "Bulky Setup", "movepool": ["Dazzling Gleam", "Nasty Plot", "Psychic", "Psyshock", "Shadow Ball", "Thunderbolt"], + "abilities": ["Sap Sipper"], "teraTypes": ["Electric", "Fairy", "Psychic"] }, { "role": "Fast Bulky Setup", "movepool": ["Hyper Voice", "Nasty Plot", "Psyshock", "Thunderbolt"], + "abilities": ["Sap Sipper"], "teraTypes": ["Electric", "Normal"] } ] @@ -1210,11 +1397,13 @@ { "role": "Bulky Support", "movepool": ["Iron Head", "Rapid Spin", "Stealth Rock", "Toxic Spikes", "Volt Switch"], + "abilities": ["Sturdy"], "teraTypes": ["Water"] }, { "role": "Bulky Attacker", "movepool": ["Body Press", "Iron Head", "Rapid Spin", "Spikes", "Stealth Rock"], + "abilities": ["Sturdy"], "teraTypes": ["Fighting", "Water"] } ] @@ -1225,7 +1414,8 @@ { "role": "Bulky Setup", "movepool": ["Body Slam", "Coil", "Earthquake", "Roost"], - "teraTypes": ["Ground"] + "abilities": ["Serene Grace"], + "teraTypes": ["Ghost", "Ground"] } ] }, @@ -1235,6 +1425,13 @@ { "role": "Bulky Attacker", "movepool": ["Earthquake", "Encore", "Play Rough", "Thunder Wave"], + "abilities": ["Intimidate"], + "teraTypes": ["Ground"] + }, + { + "role": "Bulky Support", + "movepool": ["Earthquake", "Play Rough", "Roar", "Thunder Wave"], + "abilities": ["Intimidate"], "teraTypes": ["Ground"] } ] @@ -1243,18 +1440,26 @@ "level": 86, "sets": [ { - "role": "Fast Support", + "role": "Bulky Support", "movepool": ["Destiny Bond", "Gunk Shot", "Spikes", "Taunt", "Thunder Wave", "Toxic Spikes", "Waterfall"], - "teraTypes": ["Dark", "Water"] + "abilities": ["Intimidate"], + "teraTypes": ["Dark", "Grass"] + }, + { + "role": "Fast Support", + "movepool": ["Flip Turn", "Gunk Shot", "Pain Split", "Thunder Wave", "Toxic", "Toxic Spikes"], + "abilities": ["Intimidate"], + "teraTypes": ["Dark", "Grass"] } ] }, "qwilfishhisui": { - "level": 84, + "level": 83, "sets": [ { "role": "Bulky Support", "movepool": ["Crunch", "Gunk Shot", "Spikes", "Taunt", "Toxic Spikes"], + "abilities": ["Intimidate"], "teraTypes": ["Flying", "Poison"] } ] @@ -1265,7 +1470,13 @@ { "role": "Fast Attacker", "movepool": ["Aqua Jet", "Crunch", "Gunk Shot", "Liquidation", "Swords Dance"], + "abilities": ["Intimidate"], "teraTypes": ["Water"] + }, { + "role": "Setup Sweeper", + "movepool": ["Crunch", "Gunk Shot", "Scale Shot", "Swords Dance"], + "abilities": ["Intimidate"], + "teraTypes": ["Dragon"] } ] }, @@ -1275,16 +1486,19 @@ { "role": "Bulky Support", "movepool": ["Bullet Punch", "Close Combat", "Defog", "Knock Off", "U-turn"], + "abilities": ["Technician"], "teraTypes": ["Dragon", "Steel"] }, { "role": "Setup Sweeper", "movepool": ["Bug Bite", "Bullet Punch", "Close Combat", "Knock Off", "Swords Dance"], + "abilities": ["Technician"], "teraTypes": ["Steel"] }, { "role": "Wallbreaker", "movepool": ["Bullet Punch", "Close Combat", "Knock Off", "U-turn"], + "abilities": ["Technician"], "teraTypes": ["Steel"] } ] @@ -1295,11 +1509,13 @@ { "role": "Setup Sweeper", "movepool": ["Close Combat", "Facade", "Knock Off", "Trailblaze"], + "abilities": ["Guts"], "teraTypes": ["Normal"] }, { "role": "Fast Attacker", "movepool": ["Close Combat", "Earthquake", "Knock Off", "Megahorn", "Stone Edge"], + "abilities": ["Moxie"], "teraTypes": ["Bug", "Fighting", "Rock"] } ] @@ -1310,36 +1526,58 @@ { "role": "Bulky Attacker", "movepool": ["Body Slam", "Earthquake", "Rest", "Sleep Talk", "Throat Chop"], + "abilities": ["Guts"], "teraTypes": ["Ghost", "Ground"] + }, + { + "role": "Setup Sweeper", + "movepool": ["Close Combat", "Crunch", "Facade", "Swords Dance", "Throat Chop"], + "abilities": ["Quick Feet"], + "teraTypes": ["Normal"] } ] }, "magcargo": { - "level": 93, + "level": 95, "sets": [ { "role": "Setup Sweeper", "movepool": ["Earth Power", "Fire Blast", "Power Gem", "Shell Smash"], + "abilities": ["Weak Armor"], "teraTypes": ["Dragon", "Grass"] }, { "role": "Bulky Support", "movepool": ["Lava Plume", "Power Gem", "Recover", "Stealth Rock", "Yawn"], + "abilities": ["Flame Body"], "teraTypes": ["Dragon", "Grass"] } ] }, + "piloswine": { + "level": 85, + "sets": [ + { + "role": "Bulky Support", + "movepool": ["Earthquake", "Ice Shard", "Icicle Crash", "Roar", "Stealth Rock"], + "abilities": ["Thick Fat"], + "teraTypes": ["Dragon", "Poison"] + } + ] + }, "delibird": { "level": 100, "sets": [ { - "role": "Wallbreaker", - "movepool": ["Brave Bird", "Drill Run", "Ice Shard", "Ice Spinner"], + "role": "Fast Attacker", + "movepool": ["Brave Bird", "Drill Run", "Ice Shard", "Ice Spinner", "Spikes"], + "abilities": ["Hustle"], "teraTypes": ["Flying", "Ground", "Ice"] }, { "role": "Fast Support", "movepool": ["Brave Bird", "Freeze-Dry", "Rapid Spin", "Spikes"], + "abilities": ["Insomnia", "Vital Spirit"], "teraTypes": ["Ghost"] } ] @@ -1350,47 +1588,54 @@ { "role": "Bulky Setup", "movepool": ["Body Press", "Brave Bird", "Iron Defense", "Roost"], + "abilities": ["Sturdy"], "teraTypes": ["Fighting"] }, { "role": "Bulky Attacker", "movepool": ["Body Press", "Brave Bird", "Roost", "Spikes", "Stealth Rock"], + "abilities": ["Sturdy"], "teraTypes": ["Dragon", "Fighting"] }, { "role": "Bulky Support", "movepool": ["Brave Bird", "Roost", "Spikes", "Stealth Rock", "Whirlwind"], + "abilities": ["Sturdy"], "teraTypes": ["Dragon"] } ] }, "houndoom": { - "level": 86, + "level": 87, "sets": [ { "role": "Fast Attacker", "movepool": ["Dark Pulse", "Fire Blast", "Nasty Plot", "Sludge Bomb", "Sucker Punch"], + "abilities": ["Flash Fire"], "teraTypes": ["Dark", "Fire", "Poison"] } ] }, "kingdra": { - "level": 86, + "level": 84, "sets": [ { "role": "Fast Attacker", "movepool": ["Draco Meteor", "Hurricane", "Rain Dance", "Wave Crash"], + "abilities": ["Swift Swim"], "teraTypes": ["Water"] }, { "role": "Setup Sweeper", "movepool": ["Dragon Dance", "Outrage", "Waterfall", "Wave Crash"], - "teraTypes": ["Dragon", "Water"] + "abilities": ["Sniper", "Swift Swim"], + "teraTypes": ["Water"] }, { "role": "Fast Bulky Setup", "movepool": ["Dragon Dance", "Iron Head", "Outrage", "Wave Crash"], - "teraTypes": ["Dragon", "Steel", "Water"] + "abilities": ["Sniper", "Swift Swim"], + "teraTypes": ["Steel"] } ] }, @@ -1399,47 +1644,59 @@ "sets": [ { "role": "Bulky Support", - "movepool": ["Earthquake", "Ice Spinner", "Knock Off", "Rapid Spin", "Stealth Rock"], + "movepool": ["Earthquake", "Ice Shard", "Ice Spinner", "Knock Off", "Rapid Spin", "Stealth Rock"], + "abilities": ["Sturdy"], "teraTypes": ["Ghost", "Grass"] - }, - { - "role": "Bulky Attacker", - "movepool": ["Earthquake", "Ice Shard", "Ice Spinner", "Knock Off", "Rapid Spin", "Stone Edge"], - "teraTypes": ["Dark", "Ice"] } ] }, "porygon2": { - "level": 84, + "level": 82, "sets": [ { "role": "Bulky Support", "movepool": ["Discharge", "Ice Beam", "Recover", "Tri Attack"], + "abilities": ["Download"], "teraTypes": ["Electric", "Ghost", "Poison"] + }, + { + "role": "Tera Blast user", + "movepool": ["Recover", "Shadow Ball", "Tera Blast", "Thunder Wave"], + "abilities": ["Download"], + "teraTypes": ["Fairy", "Fighting"] } ] }, "smeargle": { - "level": 88, + "level": 95, "sets": [ { "role": "Fast Support", - "movepool": ["Ceaseless Edge", "Lunar Dance", "Shed Tail", "Spore", "Sticky Web", "Stone Axe"], + "movepool": ["Ceaseless Edge", "Spore", "Stealth Rock", "Sticky Web", "Whirlwind"], + "abilities": ["Own Tempo"], "teraTypes": ["Ghost"] + }, + { + "role": "Setup Sweeper", + "movepool": ["Population Bomb", "Power Trip", "Shell Smash", "Spore"], + "abilities": ["Technician"], + "teraTypes": ["Normal"] } ] }, "hitmontop": { - "level": 89, + "level": 88, "sets": [ { "role": "Bulky Support", "movepool": ["Close Combat", "Earthquake", "Rapid Spin", "Stone Edge", "Sucker Punch"], + "abilities": ["Intimidate"], "teraTypes": ["Steel"] }, { "role": "Bulky Setup", "movepool": ["Bulk Up", "Close Combat", "Rapid Spin", "Triple Axel"], + "abilities": ["Technician"], "teraTypes": ["Ice"] } ] @@ -1450,6 +1707,7 @@ { "role": "Bulky Support", "movepool": ["Heal Bell", "Seismic Toss", "Soft-Boiled", "Stealth Rock", "Thunder Wave"], + "abilities": ["Natural Cure"], "teraTypes": ["Fairy", "Ghost", "Poison", "Steel"] } ] @@ -1460,36 +1718,41 @@ { "role": "Bulky Support", "movepool": ["Heal Bell", "Seismic Toss", "Soft-Boiled", "Stealth Rock", "Thunder Wave"], + "abilities": ["Natural Cure"], "teraTypes": ["Fairy", "Ghost", "Poison", "Steel"] } ] }, "raikou": { - "level": 80, + "level": 81, "sets": [ { "role": "Bulky Setup", "movepool": ["Calm Mind", "Scald", "Substitute", "Thunderbolt"], + "abilities": ["Pressure"], "teraTypes": ["Water"] }, { - "role": "Fast Attacker", + "role": "Bulky Attacker", "movepool": ["Calm Mind", "Scald", "Shadow Ball", "Thunderbolt", "Volt Switch"], + "abilities": ["Pressure"], "teraTypes": ["Electric", "Water"] } ] }, "entei": { - "level": 80, + "level": 78, "sets": [ { "role": "Wallbreaker", "movepool": ["Extreme Speed", "Flare Blitz", "Sacred Fire", "Stomping Tantrum"], + "abilities": ["Inner Focus"], "teraTypes": ["Fire", "Normal"] }, { "role": "Fast Attacker", "movepool": ["Extreme Speed", "Flare Blitz", "Sacred Fire", "Stone Edge"], + "abilities": ["Inner Focus"], "teraTypes": ["Fire", "Normal"] } ] @@ -1500,16 +1763,19 @@ { "role": "Bulky Attacker", "movepool": ["Calm Mind", "Rest", "Scald", "Sleep Talk"], + "abilities": ["Pressure"], "teraTypes": ["Dragon", "Steel"] }, { "role": "Bulky Setup", - "movepool": ["Calm Mind", "Ice Beam", "Rest", "Scald", "Substitute"], + "movepool": ["Calm Mind", "Ice Beam", "Scald", "Substitute"], + "abilities": ["Pressure"], "teraTypes": ["Dragon", "Steel"] }, { "role": "Fast Support", "movepool": ["Calm Mind", "Protect", "Scald", "Substitute"], + "abilities": ["Pressure"], "teraTypes": ["Steel"] } ] @@ -1519,33 +1785,37 @@ "sets": [ { "role": "Bulky Setup", - "movepool": ["Dragon Dance", "Earthquake", "Fire Punch", "Knock Off", "Stone Edge"], + "movepool": ["Dragon Dance", "Earthquake", "Ice Punch", "Knock Off", "Stone Edge"], + "abilities": ["Sand Stream"], "teraTypes": ["Ghost", "Rock"] }, { "role": "Bulky Support", - "movepool": ["Earthquake", "Fire Blast", "Ice Beam", "Knock Off", "Stealth Rock", "Stone Edge", "Thunder Wave"], - "teraTypes": ["Poison", "Rock"] + "movepool": ["Dragon Tail", "Earthquake", "Ice Beam", "Knock Off", "Stealth Rock", "Stone Edge", "Thunder Wave"], + "abilities": ["Sand Stream"], + "teraTypes": ["Ghost", "Rock"] } ] }, "lugia": { - "level": 76, + "level": 72, "sets": [ { "role": "Bulky Setup", "movepool": ["Aeroblast", "Calm Mind", "Earth Power", "Recover"], + "abilities": ["Multiscale"], "teraTypes": ["Ground", "Steel"] } ] }, "hooh": { - "level": 73, + "level": 71, "sets": [ { "role": "Bulky Attacker", "movepool": ["Brave Bird", "Earthquake", "Recover", "Sacred Fire"], - "teraTypes": ["Ground"] + "abilities": ["Regenerator"], + "teraTypes": ["Ground", "Steel"] } ] }, @@ -1555,12 +1825,20 @@ { "role": "Fast Attacker", "movepool": ["Earthquake", "Focus Blast", "Giga Drain", "Leaf Storm", "Rock Slide", "Shed Tail"], + "abilities": ["Overgrow"], "teraTypes": ["Grass", "Ground", "Steel"] }, { "role": "Fast Support", "movepool": ["Focus Blast", "Giga Drain", "Leech Seed", "Substitute"], + "abilities": ["Overgrow"], "teraTypes": ["Steel"] + }, + { + "role": "Setup Sweeper", + "movepool": ["Earthquake", "Leaf Blade", "Rock Slide", "Swords Dance"], + "abilities": ["Overgrow"], + "teraTypes": ["Rock"] } ] }, @@ -1570,12 +1848,8 @@ { "role": "Setup Sweeper", "movepool": ["Close Combat", "Flare Blitz", "Knock Off", "Protect", "Stone Edge", "Swords Dance"], + "abilities": ["Speed Boost"], "teraTypes": ["Dark", "Fighting"] - }, - { - "role": "Fast Attacker", - "movepool": ["Close Combat", "Fire Blast", "Knock Off", "Protect"], - "teraTypes": ["Dark", "Fighting", "Fire"] } ] }, @@ -1584,7 +1858,8 @@ "sets": [ { "role": "Bulky Support", - "movepool": ["Earthquake", "Flip Turn", "Ice Beam", "Knock Off", "Roar", "Stealth Rock"], + "movepool": ["Earthquake", "Flip Turn", "Ice Beam", "Knock Off", "Roar", "Stealth Rock", "Yawn"], + "abilities": ["Damp", "Torrent"], "teraTypes": ["Poison", "Steel"] } ] @@ -1593,8 +1868,15 @@ "level": 95, "sets": [ { - "role": "Wallbreaker", - "movepool": ["Play Rough", "Poison Fang", "Sucker Punch", "Taunt", "Throat Chop"], + "role": "Bulky Attacker", + "movepool": ["Crunch", "Play Rough", "Poison Fang", "Sucker Punch", "Taunt", "Throat Chop"], + "abilities": ["Intimidate"], + "teraTypes": ["Fairy", "Poison"] + }, + { + "role": "AV Pivot", + "movepool": ["Crunch", "Play Rough", "Poison Fang", "Sucker Punch", "Super Fang", "Throat Chop"], + "abilities": ["Intimidate"], "teraTypes": ["Fairy", "Poison"] } ] @@ -1605,46 +1887,53 @@ { "role": "Setup Sweeper", "movepool": ["Giga Drain", "Hydro Pump", "Ice Beam", "Rain Dance"], + "abilities": ["Swift Swim"], "teraTypes": ["Grass", "Steel", "Water"] }, { "role": "Fast Attacker", "movepool": ["Giga Drain", "Hydro Pump", "Ice Beam", "Leaf Storm"], + "abilities": ["Swift Swim"], "teraTypes": ["Grass", "Water"] } ] }, "shiftry": { - "level": 88, + "level": 89, "sets": [ { "role": "Fast Support", "movepool": ["Defog", "Knock Off", "Leaf Storm", "Sucker Punch", "Will-O-Wisp"], + "abilities": ["Wind Rider"], "teraTypes": ["Dark", "Poison"] }, { "role": "Fast Bulky Setup", - "movepool": ["Dark Pulse", "Giga Drain", "Heat Wave", "Leaf Storm", "Nasty Plot", "Vacuum Wave"], - "teraTypes": ["Fire", "Grass"] + "movepool": ["Knock Off", "Leaf Blade", "Sucker Punch", "Swords Dance"], + "abilities": ["Wind Rider"], + "teraTypes": ["Dark", "Poison"] }, { "role": "Setup Sweeper", "movepool": ["Knock Off", "Leaf Blade", "Low Kick", "Tailwind"], + "abilities": ["Wind Rider"], "teraTypes": ["Dark", "Fighting"] } ] }, "pelipper": { - "level": 85, + "level": 86, "sets": [ { "role": "Bulky Attacker", - "movepool": ["Hurricane", "Hydro Pump", "Ice Beam", "Knock Off", "Roost", "Surf", "U-turn"], + "movepool": ["Hurricane", "Hydro Pump", "Knock Off", "Roost", "Surf", "U-turn"], + "abilities": ["Drizzle"], "teraTypes": ["Ground", "Water"] }, { "role": "Wallbreaker", - "movepool": ["Hurricane", "Hydro Pump", "Ice Beam", "Surf", "U-turn"], + "movepool": ["Hurricane", "Hydro Pump", "U-turn", "Weather Ball"], + "abilities": ["Drizzle"], "teraTypes": ["Flying", "Water"] } ] @@ -1655,6 +1944,7 @@ { "role": "Fast Attacker", "movepool": ["Calm Mind", "Focus Blast", "Healing Wish", "Moonblast", "Mystical Fire", "Psychic", "Psyshock", "Trick"], + "abilities": ["Trace"], "teraTypes": ["Fairy", "Fighting", "Fire"] } ] @@ -1665,12 +1955,14 @@ { "role": "Setup Sweeper", "movepool": ["Bug Buzz", "Hurricane", "Hydro Pump", "Quiver Dance"], + "abilities": ["Intimidate"], "teraTypes": ["Water"] }, { "role": "Fast Support", - "movepool": ["Bug Buzz", "Hurricane", "Hydro Pump", "Ice Beam", "Sticky Web", "Stun Spore", "U-turn"], - "teraTypes": ["Ground", "Steel"] + "movepool": ["Bug Buzz", "Hurricane", "Hydro Pump", "Sticky Web", "Stun Spore", "U-turn"], + "abilities": ["Intimidate"], + "teraTypes": ["Ground", "Steel", "Water"] } ] }, @@ -1680,6 +1972,7 @@ { "role": "Fast Attacker", "movepool": ["Bullet Seed", "Mach Punch", "Rock Tomb", "Spore", "Swords Dance"], + "abilities": ["Technician"], "teraTypes": ["Fighting", "Rock"] } ] @@ -1690,11 +1983,13 @@ { "role": "Bulky Setup", "movepool": ["Body Slam", "Bulk Up", "Knock Off", "Slack Off"], + "abilities": ["Vital Spirit"], "teraTypes": ["Ghost"] }, { "role": "Bulky Attacker", "movepool": ["Body Slam", "Bulk Up", "Earthquake", "Slack Off"], + "abilities": ["Vital Spirit"], "teraTypes": ["Ground"] } ] @@ -1705,6 +2000,7 @@ { "role": "Fast Attacker", "movepool": ["Double-Edge", "Earthquake", "Giga Impact", "Knock Off"], + "abilities": ["Truant"], "teraTypes": ["Ghost", "Ground", "Normal"] } ] @@ -1714,12 +2010,14 @@ "sets": [ { "role": "Wallbreaker", - "movepool": ["Bullet Punch", "Close Combat", "Facade", "Headlong Rush", "Knock Off"], + "movepool": ["Bullet Punch", "Close Combat", "Facade", "Fake Out", "Headlong Rush", "Knock Off"], + "abilities": ["Guts"], "teraTypes": ["Normal"] }, { "role": "AV Pivot", - "movepool": ["Bullet Punch", "Close Combat", "Headlong Rush", "Heavy Slam", "Knock Off"], + "movepool": ["Bullet Punch", "Close Combat", "Headlong Rush", "Heavy Slam", "Knock Off", "Stone Edge"], + "abilities": ["Thick Fat"], "teraTypes": ["Steel"] } ] @@ -1729,7 +2027,8 @@ "sets": [ { "role": "Bulky Support", - "movepool": ["Encore", "Foul Play", "Knock Off", "Recover", "Taunt", "Thunder Wave", "Will-O-Wisp"], + "movepool": ["Encore", "Knock Off", "Recover", "Thunder Wave", "Will-O-Wisp"], + "abilities": ["Prankster"], "teraTypes": ["Steel"] } ] @@ -1740,26 +2039,29 @@ { "role": "Fast Attacker", "movepool": ["Bullet Punch", "Close Combat", "Ice Punch", "Poison Jab", "Zen Headbutt"], + "abilities": ["Pure Power"], "teraTypes": ["Fighting"] } ] }, "plusle": { - "level": 93, + "level": 95, "sets": [ { "role": "Setup Sweeper", "movepool": ["Alluring Voice", "Encore", "Grass Knot", "Nasty Plot", "Thunderbolt"], + "abilities": ["Lightning Rod"], "teraTypes": ["Electric", "Fairy", "Grass"] } ] }, "minun": { - "level": 93, + "level": 95, "sets": [ { "role": "Setup Sweeper", "movepool": ["Alluring Voice", "Encore", "Grass Knot", "Nasty Plot", "Thunderbolt"], + "abilities": ["Volt Absorb"], "teraTypes": ["Electric", "Fairy", "Grass"] } ] @@ -1770,26 +2072,24 @@ { "role": "Bulky Support", "movepool": ["Encore", "Roost", "Thunder Wave", "U-turn"], + "abilities": ["Prankster"], "teraTypes": ["Steel", "Water"] }, { "role": "Bulky Attacker", "movepool": ["Encore", "Lunge", "Roost", "Thunder Wave"], + "abilities": ["Prankster"], "teraTypes": ["Steel", "Water"] } ] }, "illumise": { - "level": 92, + "level": 91, "sets": [ { "role": "Bulky Support", - "movepool": ["Encore", "Roost", "Thunder Wave", "U-turn"], - "teraTypes": ["Steel", "Water"] - }, - { - "role": "Bulky Attacker", "movepool": ["Bug Buzz", "Encore", "Roost", "Thunder Wave"], + "abilities": ["Prankster"], "teraTypes": ["Steel", "Water"] } ] @@ -1800,26 +2100,30 @@ { "role": "Bulky Attacker", "movepool": ["Clear Smog", "Earthquake", "Encore", "Ice Beam", "Knock Off", "Pain Split", "Sludge Bomb", "Toxic Spikes"], + "abilities": ["Liquid Ooze"], "teraTypes": ["Dark"] }, { "role": "Bulky Support", "movepool": ["Earthquake", "Protect", "Sludge Bomb", "Toxic"], + "abilities": ["Liquid Ooze"], "teraTypes": ["Ground"] }, { "role": "Bulky Setup", "movepool": ["Earthquake", "Gunk Shot", "Knock Off", "Swords Dance"], - "teraTypes": ["Dark", "Ground", "Poison"] + "abilities": ["Liquid Ooze"], + "teraTypes": ["Dark", "Ground"] } ] }, "camerupt": { - "level": 90, + "level": 91, "sets": [ { "role": "Bulky Support", - "movepool": ["Earthquake", "Lava Plume", "Roar", "Stealth Rock"], + "movepool": ["Earthquake", "Overheat", "Roar", "Stealth Rock", "Will-O-Wisp"], + "abilities": ["Solid Rock"], "teraTypes": ["Grass", "Water"] } ] @@ -1828,8 +2132,15 @@ "level": 88, "sets": [ { - "role": "Fast Support", + "role": "Wallbreaker", "movepool": ["Earthquake", "Lava Plume", "Rapid Spin", "Solar Beam", "Stealth Rock", "Yawn"], + "abilities": ["Drought"], + "teraTypes": ["Grass"] + }, + { + "role": "Bulky Support", + "movepool": ["Lava Plume", "Rapid Spin", "Solar Beam", "Stealth Rock", "Yawn"], + "abilities": ["Drought"], "teraTypes": ["Dragon", "Grass"] } ] @@ -1840,11 +2151,13 @@ { "role": "Bulky Setup", "movepool": ["Dazzling Gleam", "Earth Power", "Nasty Plot", "Psychic", "Psyshock", "Shadow Ball"], + "abilities": ["Thick Fat"], "teraTypes": ["Fairy", "Ghost", "Ground", "Psychic"] }, { "role": "Bulky Attacker", "movepool": ["Earth Power", "Focus Blast", "Psychic", "Psyshock", "Shadow Ball", "Trick"], + "abilities": ["Thick Fat"], "teraTypes": ["Fighting", "Ghost", "Ground", "Psychic"] } ] @@ -1855,6 +2168,7 @@ { "role": "Fast Attacker", "movepool": ["Dragon Dance", "Earthquake", "Outrage", "Stone Edge", "U-turn"], + "abilities": ["Levitate"], "teraTypes": ["Ground", "Rock", "Steel"] } ] @@ -1865,12 +2179,14 @@ { "role": "Wallbreaker", "movepool": ["Focus Blast", "Knock Off", "Leaf Storm", "Spikes", "Sucker Punch", "Toxic Spikes"], + "abilities": ["Water Absorb"], "teraTypes": ["Dark", "Grass", "Poison"] }, { "role": "Setup Sweeper", - "movepool": ["Drain Punch", "Seed Bomb", "Sucker Punch", "Swords Dance"], - "teraTypes": ["Dark", "Fighting"] + "movepool": ["Drain Punch", "Knock Off", "Seed Bomb", "Sucker Punch", "Swords Dance"], + "abilities": ["Water Absorb"], + "teraTypes": ["Dark", "Poison"] } ] }, @@ -1880,21 +2196,24 @@ { "role": "Bulky Support", "movepool": ["Brave Bird", "Defog", "Earthquake", "Haze", "Roost", "Will-O-Wisp"], + "abilities": ["Natural Cure"], "teraTypes": ["Steel"] }, { "role": "Bulky Setup", "movepool": ["Brave Bird", "Dragon Dance", "Earthquake", "Roost"], + "abilities": ["Natural Cure"], "teraTypes": ["Ground", "Steel"] } ] }, "zangoose": { - "level": 86, + "level": 85, "sets": [ { "role": "Fast Attacker", "movepool": ["Close Combat", "Facade", "Knock Off", "Quick Attack", "Swords Dance"], + "abilities": ["Toxic Boost"], "teraTypes": ["Normal"] } ] @@ -1905,7 +2224,14 @@ { "role": "Fast Attacker", "movepool": ["Earthquake", "Flamethrower", "Giga Drain", "Glare", "Gunk Shot", "Knock Off", "Switcheroo"], + "abilities": ["Infiltrator"], "teraTypes": ["Dark", "Fire", "Grass", "Ground", "Poison"] + }, + { + "role": "Setup Sweeper", + "movepool": ["Earthquake", "Gunk Shot", "Swords Dance", "Trailblaze"], + "abilities": ["Infiltrator"], + "teraTypes": ["Grass", "Ground"] } ] }, @@ -1915,11 +2241,13 @@ { "role": "Bulky Support", "movepool": ["Earthquake", "Hydro Pump", "Ice Beam", "Spikes", "Stealth Rock"], + "abilities": ["Oblivious"], "teraTypes": ["Poison", "Steel"] }, { "role": "Setup Sweeper", "movepool": ["Dragon Dance", "Earthquake", "Liquidation", "Stone Edge"], + "abilities": ["Oblivious"], "teraTypes": ["Ground", "Steel"] } ] @@ -1930,11 +2258,13 @@ { "role": "Fast Attacker", "movepool": ["Aqua Jet", "Close Combat", "Crabhammer", "Dragon Dance", "Knock Off"], + "abilities": ["Adaptability"], "teraTypes": ["Fighting"] }, { "role": "Setup Sweeper", - "movepool": ["Aqua Jet", "Crabhammer", "Knock Off", "Swords Dance"], + "movepool": ["Aqua Jet", "Crabhammer", "Dragon Dance", "Knock Off"], + "abilities": ["Adaptability"], "teraTypes": ["Water"] } ] @@ -1945,6 +2275,7 @@ { "role": "Bulky Attacker", "movepool": ["Dragon Tail", "Flip Turn", "Haze", "Ice Beam", "Recover", "Scald"], + "abilities": ["Competitive"], "teraTypes": ["Dragon", "Steel"] } ] @@ -1954,18 +2285,26 @@ "sets": [ { "role": "Wallbreaker", - "movepool": ["Gunk Shot", "Poltergeist", "Shadow Sneak", "Swords Dance", "Thunder Wave", "Will-O-Wisp"], + "movepool": ["Gunk Shot", "Poltergeist", "Shadow Sneak", "Swords Dance", "Thunder Wave"], + "abilities": ["Cursed Body", "Frisk"], "teraTypes": ["Ghost", "Poison"] } ] }, "tropius": { - "level": 90, + "level": 91, "sets": [ { "role": "Bulky Support", "movepool": ["Air Slash", "Leech Seed", "Protect", "Substitute"], + "abilities": ["Harvest"], "teraTypes": ["Steel"] + }, + { + "role": "Setup Sweeper", + "movepool": ["Dragon Dance", "Dual Wingbeat", "Earthquake", "Leaf Blade", "Synthesis"], + "abilities": ["Harvest"], + "teraTypes": ["Ground"] } ] }, @@ -1975,22 +2314,31 @@ { "role": "Bulky Support", "movepool": ["Encore", "Heal Bell", "Knock Off", "Psychic Noise", "Recover", "Thunder Wave"], + "abilities": ["Levitate"], "teraTypes": ["Dark", "Electric", "Poison", "Steel"] }, { "role": "Bulky Setup", - "movepool": ["Calm Mind", "Dazzling Gleam", "Psychic", "Psychic Noise", "Psyshock", "Recover"], - "teraTypes": ["Electric", "Fairy"] + "movepool": ["Calm Mind", "Dazzling Gleam", "Psychic Noise", "Psyshock", "Recover"], + "abilities": ["Levitate"], + "teraTypes": ["Electric", "Fairy", "Poison", "Steel"] + }, + { + "role": "Bulky Attacker", + "movepool": ["Cosmic Power", "Dazzling Gleam", "Recover", "Stored Power"], + "abilities": ["Levitate"], + "teraTypes": ["Steel"] } ] }, "glalie": { - "level": 95, + "level": 96, "sets": [ { "role": "Fast Support", "movepool": ["Disable", "Earthquake", "Freeze-Dry", "Spikes", "Taunt"], - "teraTypes": ["Ground", "Poison", "Steel", "Water"] + "abilities": ["Inner Focus"], + "teraTypes": ["Ghost", "Ground", "Water"] } ] }, @@ -1998,9 +2346,10 @@ "level": 100, "sets": [ { - "role": "Bulky Support", - "movepool": ["Charm", "Flip Turn", "Ice Beam", "Protect", "Surf", "Wish"], - "teraTypes": ["Dragon", "Ghost", "Poison"] + "role": "Fast Support", + "movepool": ["Endeavor", "Substitute", "Surf", "Whirlpool"], + "abilities": ["Swift Swim"], + "teraTypes": ["Ghost", "Ground"] } ] }, @@ -2010,86 +2359,97 @@ { "role": "Setup Sweeper", "movepool": ["Dragon Dance", "Dual Wingbeat", "Earthquake", "Outrage", "Roost"], + "abilities": ["Intimidate", "Moxie"], "teraTypes": ["Dragon", "Ground", "Steel"] } ] }, "metagross": { - "level": 80, + "level": 79, "sets": [ { "role": "Bulky Setup", - "movepool": ["Agility", "Earthquake", "Knock Off", "Meteor Mash", "Psychic Fangs"], + "movepool": ["Agility", "Earthquake", "Heavy Slam", "Knock Off", "Psychic Fangs"], + "abilities": ["Clear Body"], "teraTypes": ["Ground"] }, { "role": "Bulky Support", - "movepool": ["Bullet Punch", "Earthquake", "Knock Off", "Meteor Mash", "Psychic Fangs", "Stealth Rock"], + "movepool": ["Bullet Punch", "Earthquake", "Heavy Slam", "Knock Off", "Psychic Fangs", "Stealth Rock"], + "abilities": ["Clear Body"], "teraTypes": ["Water"] } ] }, "regirock": { - "level": 86, + "level": 83, "sets": [ { "role": "Bulky Attacker", - "movepool": ["Body Press", "Iron Defense", "Rest", "Stealth Rock", "Stone Edge", "Thunder Wave"], + "movepool": ["Body Press", "Iron Defense", "Stealth Rock", "Stone Edge", "Thunder Wave"], + "abilities": ["Clear Body"], "teraTypes": ["Fighting"] }, { "role": "Bulky Setup", - "movepool": ["Body Press", "Curse", "Rest", "Stone Edge"], + "movepool": ["Body Press", "Curse", "Iron Defense", "Rest", "Stone Edge"], + "abilities": ["Clear Body"], "teraTypes": ["Fighting"] } ] }, "regice": { - "level": 87, + "level": 88, "sets": [ { "role": "Bulky Attacker", "movepool": ["Body Press", "Ice Beam", "Rest", "Sleep Talk", "Thunder Wave", "Thunderbolt"], + "abilities": ["Clear Body"], "teraTypes": ["Electric"] } ] }, "registeel": { - "level": 85, + "level": 81, "sets": [ { "role": "Bulky Setup", - "movepool": ["Body Press", "Curse", "Iron Defense", "Iron Head", "Rest"], + "movepool": ["Body Press", "Iron Defense", "Iron Head", "Rest"], + "abilities": ["Clear Body"], "teraTypes": ["Fighting"] }, { "role": "Bulky Support", "movepool": ["Body Press", "Iron Defense", "Iron Head", "Stealth Rock", "Thunder Wave"], + "abilities": ["Clear Body"], "teraTypes": ["Fighting"] } ] }, "latias": { - "level": 80, + "level": 79, "sets": [ { "role": "Fast Bulky Setup", - "movepool": ["Aura Sphere", "Calm Mind", "Draco Meteor", "Psyshock", "Recover"], + "movepool": ["Calm Mind", "Draco Meteor", "Psyshock", "Recover"], + "abilities": ["Levitate"], "teraTypes": ["Steel"] } ] }, "latios": { - "level": 79, + "level": 78, "sets": [ { "role": "Bulky Setup", "movepool": ["Calm Mind", "Draco Meteor", "Psyshock", "Recover"], + "abilities": ["Levitate"], "teraTypes": ["Steel"] }, { "role": "Fast Attacker", "movepool": ["Aura Sphere", "Calm Mind", "Draco Meteor", "Flip Turn", "Luster Purge"], + "abilities": ["Levitate"], "teraTypes": ["Dragon", "Psychic", "Steel"] } ] @@ -2098,9 +2458,16 @@ "level": 71, "sets": [ { - "role": "Bulky Attacker", - "movepool": ["Calm Mind", "Ice Beam", "Origin Pulse", "Thunder", "Water Spout"], + "role": "Fast Attacker", + "movepool": ["Ice Beam", "Origin Pulse", "Thunder", "Water Spout"], + "abilities": ["Drizzle"], "teraTypes": ["Water"] + }, + { + "role": "Bulky Setup", + "movepool": ["Calm Mind", "Ice Beam", "Origin Pulse", "Thunder"], + "abilities": ["Drizzle"], + "teraTypes": ["Dragon", "Electric", "Steel"] } ] }, @@ -2110,11 +2477,13 @@ { "role": "Bulky Attacker", "movepool": ["Heat Crash", "Precipice Blades", "Roar", "Spikes", "Stealth Rock", "Stone Edge", "Thunder Wave", "Will-O-Wisp"], + "abilities": ["Drought"], "teraTypes": ["Fire"] }, { "role": "Bulky Setup", "movepool": ["Heat Crash", "Precipice Blades", "Stone Edge", "Swords Dance", "Thunder Wave"], + "abilities": ["Drought"], "teraTypes": ["Fire"] } ] @@ -2125,17 +2494,20 @@ { "role": "Setup Sweeper", "movepool": ["Dragon Ascent", "Dragon Dance", "Earthquake", "Outrage"], - "teraTypes": ["Flying"] + "abilities": ["Air Lock"], + "teraTypes": ["Flying", "Steel"] }, { "role": "Fast Attacker", "movepool": ["Dragon Ascent", "Earthquake", "Extreme Speed", "Swords Dance", "U-turn"], + "abilities": ["Air Lock"], "teraTypes": ["Normal"] }, { "role": "Fast Bulky Setup", "movepool": ["Dragon Ascent", "Earthquake", "Scale Shot", "Swords Dance"], - "teraTypes": ["Dragon", "Flying"] + "abilities": ["Air Lock"], + "teraTypes": ["Dragon", "Flying", "Steel"] } ] }, @@ -2144,17 +2516,20 @@ "sets": [ { "role": "Fast Support", - "movepool": ["Body Slam", "Doom Desire", "Iron Head", "Protect", "Wish"], + "movepool": ["Body Slam", "Iron Head", "Protect", "Wish"], + "abilities": ["Serene Grace"], "teraTypes": ["Water"] }, { "role": "Bulky Attacker", "movepool": ["Body Slam", "Drain Punch", "Iron Head", "Stealth Rock", "U-turn"], + "abilities": ["Serene Grace"], "teraTypes": ["Fighting", "Water"] }, { "role": "Bulky Support", - "movepool": ["Fire Punch", "Healing Wish", "Iron Head", "Protect", "U-turn", "Wish"], + "movepool": ["Healing Wish", "Iron Head", "Protect", "Psychic", "U-turn", "Wish"], + "abilities": ["Serene Grace"], "teraTypes": ["Water"] } ] @@ -2165,11 +2540,13 @@ { "role": "Fast Attacker", "movepool": ["Extreme Speed", "Knock Off", "Psycho Boost", "Superpower"], + "abilities": ["Pressure"], "teraTypes": ["Fighting", "Normal", "Psychic"] }, { "role": "Wallbreaker", "movepool": ["Ice Beam", "Knock Off", "Psycho Boost", "Superpower"], + "abilities": ["Pressure"], "teraTypes": ["Fighting", "Psychic"] } ] @@ -2180,56 +2557,64 @@ { "role": "Fast Attacker", "movepool": ["Extreme Speed", "Knock Off", "Psycho Boost", "Superpower"], + "abilities": ["Pressure"], "teraTypes": ["Fighting", "Normal", "Psychic"] }, { "role": "Wallbreaker", "movepool": ["Ice Beam", "Knock Off", "Psycho Boost", "Superpower"], + "abilities": ["Pressure"], "teraTypes": ["Fighting", "Psychic"] } ] }, "deoxysdefense": { - "level": 88, + "level": 84, "sets": [ { "role": "Bulky Attacker", - "movepool": ["Night Shade", "Recover", "Spikes", "Stealth Rock", "Taunt"], + "movepool": ["Cosmic Power", "Night Shade", "Recover", "Stored Power"], + "abilities": ["Pressure"], "teraTypes": ["Steel"] }, { "role": "Bulky Support", "movepool": ["Knock Off", "Psychic Noise", "Recover", "Spikes", "Stealth Rock", "Teleport"], - "teraTypes": ["Steel"] + "abilities": ["Pressure"], + "teraTypes": ["Dark", "Fairy", "Steel"] }, { "role": "Bulky Setup", - "movepool": ["Calm Mind", "Dark Pulse", "Focus Blast", "Psychic", "Psychic Noise", "Psyshock", "Recover"], - "teraTypes": ["Dark", "Steel"] + "movepool": ["Calm Mind", "Focus Blast", "Psychic Noise", "Psyshock", "Recover"], + "abilities": ["Pressure"], + "teraTypes": ["Fighting", "Steel"] } ] }, "deoxysspeed": { - "level": 78, + "level": 82, "sets": [ { "role": "Fast Support", - "movepool": ["Knock Off", "Psycho Boost", "Spikes", "Stealth Rock", "Taunt"], - "teraTypes": ["Dark", "Ghost", "Steel"] + "movepool": ["Knock Off", "Psycho Boost", "Spikes", "Stealth Rock", "Superpower", "Taunt"], + "abilities": ["Pressure"], + "teraTypes": ["Dark", "Fighting", "Ghost", "Steel"] }, { "role": "Setup Sweeper", "movepool": ["Dark Pulse", "Focus Blast", "Nasty Plot", "Psycho Boost"], + "abilities": ["Pressure"], "teraTypes": ["Dark", "Fighting", "Psychic"] } ] }, "torterra": { - "level": 79, + "level": 78, "sets": [ { "role": "Setup Sweeper", "movepool": ["Bullet Seed", "Headlong Rush", "Rock Blast", "Shell Smash"], + "abilities": ["Overgrow"], "teraTypes": ["Grass", "Ground", "Rock", "Water"] } ] @@ -2240,21 +2625,24 @@ { "role": "Fast Attacker", "movepool": ["Close Combat", "Grass Knot", "Gunk Shot", "Knock Off", "Mach Punch", "Overheat", "Stone Edge"], + "abilities": ["Blaze", "Iron Fist"], "teraTypes": ["Dark", "Fighting", "Fire"] }, { "role": "Fast Support", "movepool": ["Close Combat", "Flare Blitz", "Gunk Shot", "Knock Off", "Mach Punch", "Stone Edge", "Swords Dance", "U-turn"], + "abilities": ["Blaze", "Iron Fist"], "teraTypes": ["Dark", "Fighting", "Fire"] } ] }, "empoleon": { - "level": 83, + "level": 84, "sets": [ { "role": "Bulky Support", - "movepool": ["Flip Turn", "Ice Beam", "Knock Off", "Roost", "Stealth Rock", "Surf", "Yawn"], + "movepool": ["Flip Turn", "Ice Beam", "Knock Off", "Roar", "Roost", "Stealth Rock", "Surf", "Yawn"], + "abilities": ["Competitive"], "teraTypes": ["Flying", "Grass"] } ] @@ -2265,6 +2653,7 @@ { "role": "Fast Attacker", "movepool": ["Brave Bird", "Close Combat", "Double-Edge", "Quick Attack", "U-turn"], + "abilities": ["Reckless"], "teraTypes": ["Fighting", "Flying"] } ] @@ -2274,7 +2663,8 @@ "sets": [ { "role": "Fast Support", - "movepool": ["Knock Off", "Pounce", "Sticky Web", "Taunt"], + "movepool": ["Knock Off", "Pounce", "Sticky Web", "Swords Dance", "Taunt"], + "abilities": ["Technician"], "teraTypes": ["Ghost"] } ] @@ -2283,38 +2673,43 @@ "level": 88, "sets": [ { - "role": "Wallbreaker", + "role": "Setup Sweeper", "movepool": ["Facade", "Play Rough", "Supercell Slam", "Throat Chop", "Trailblaze"], + "abilities": ["Guts"], "teraTypes": ["Normal"] }, { "role": "AV Pivot", "movepool": ["Ice Fang", "Play Rough", "Throat Chop", "Volt Switch", "Wild Charge"], + "abilities": ["Intimidate"], "teraTypes": ["Electric", "Fairy"] } ] }, "rampardos": { - "level": 89, + "level": 90, "sets": [ { - "role": "Wallbreaker", + "role": "Fast Attacker", "movepool": ["Earthquake", "Fire Punch", "Head Smash", "Rock Slide"], + "abilities": ["Sheer Force"], "teraTypes": ["Ground", "Rock"] }, { - "role": "Fast Attacker", - "movepool": ["Crunch", "Earthquake", "Fire Punch", "Rock Slide"], - "teraTypes": ["Dark", "Rock"] + "role": "Wallbreaker", + "movepool": ["Earthquake", "Fire Punch", "Rock Slide", "Zen Headbutt"], + "abilities": ["Sheer Force"], + "teraTypes": ["Psychic", "Rock"] } ] }, "bastiodon": { - "level": 87, + "level": 89, "sets": [ { "role": "Bulky Setup", - "movepool": ["Body Press", "Iron Defense", "Rest", "Stone Edge"], + "movepool": ["Body Press", "Foul Play", "Iron Defense", "Rest"], + "abilities": ["Soundproof"], "teraTypes": ["Fighting"] } ] @@ -2325,21 +2720,24 @@ { "role": "Bulky Support", "movepool": ["Air Slash", "Hurricane", "Roost", "Spikes", "Toxic", "Toxic Spikes", "U-turn"], + "abilities": ["Pressure"], "teraTypes": ["Steel"] } ] }, "pachirisu": { - "level": 95, + "level": 96, "sets": [ { "role": "AV Pivot", "movepool": ["Nuzzle", "Super Fang", "Thunderbolt", "U-turn"], + "abilities": ["Volt Absorb"], "teraTypes": ["Flying"] }, { "role": "Fast Support", - "movepool": ["Encore", "Super Fang", "Thunderbolt", "U-turn"], + "movepool": ["Discharge", "Encore", "Super Fang", "U-turn"], + "abilities": ["Volt Absorb"], "teraTypes": ["Flying"] } ] @@ -2349,37 +2747,48 @@ "sets": [ { "role": "Wallbreaker", - "movepool": ["Crunch", "Flip Turn", "Ice Spinner", "Low Kick", "Wave Crash"], + "movepool": ["Crunch", "Flip Turn", "Ice Spinner", "Wave Crash"], + "abilities": ["Water Veil"], "teraTypes": ["Water"] }, { "role": "Bulky Setup", - "movepool": ["Bulk Up", "Crunch", "Ice Spinner", "Low Kick", "Wave Crash"], - "teraTypes": ["Dark", "Fighting", "Ice", "Steel", "Water"] + "movepool": ["Bulk Up", "Crunch", "Ice Spinner", "Wave Crash"], + "abilities": ["Water Veil"], + "teraTypes": ["Dark", "Steel", "Water"] } ] }, "gastrodon": { - "level": 85, + "level": 86, "sets": [ { "role": "Bulky Attacker", - "movepool": ["Clear Smog", "Earthquake", "Ice Beam", "Recover", "Stealth Rock", "Surf"], + "movepool": ["Clear Smog", "Earthquake", "Ice Beam", "Recover", "Spikes", "Stealth Rock", "Surf"], + "abilities": ["Storm Drain"], "teraTypes": ["Poison", "Steel"] + }, + { + "role": "Bulky Support", + "movepool": ["Earthquake", "Recover", "Sludge Bomb", "Stealth Rock", "Surf"], + "abilities": ["Storm Drain"], + "teraTypes": ["Poison"] } ] }, "ambipom": { - "level": 86, + "level": 84, "sets": [ { "role": "Fast Attacker", - "movepool": ["Double-Edge", "Knock Off", "Low Kick", "Switcheroo", "Triple Axel", "U-turn"], - "teraTypes": ["Ice", "Normal"] + "movepool": ["Double-Edge", "Knock Off", "Low Kick", "Triple Axel", "U-turn"], + "abilities": ["Technician"], + "teraTypes": ["Ice"] }, { "role": "Wallbreaker", "movepool": ["Double-Edge", "Fake Out", "Knock Off", "Low Kick", "U-turn"], + "abilities": ["Technician"], "teraTypes": ["Normal"] } ] @@ -2388,13 +2797,9 @@ "level": 86, "sets": [ { - "role": "Bulky Support", - "movepool": ["Air Slash", "Defog", "Shadow Ball", "Strength Sap", "Will-O-Wisp"], - "teraTypes": ["Fairy", "Ghost"] - }, - { - "role": "Fast Bulky Setup", - "movepool": ["Air Slash", "Calm Mind", "Shadow Ball", "Strength Sap"], + "role": "Bulky Attacker", + "movepool": ["Air Slash", "Calm Mind", "Defog", "Shadow Ball", "Strength Sap"], + "abilities": ["Aftermath", "Unburden"], "teraTypes": ["Fairy", "Ghost"] } ] @@ -2404,8 +2809,21 @@ "sets": [ { "role": "Wallbreaker", - "movepool": ["Dazzling Gleam", "Energy Ball", "Mystical Fire", "Nasty Plot", "Shadow Ball", "Thunderbolt", "Trick"], + "movepool": ["Dazzling Gleam", "Energy Ball", "Mystical Fire", "Shadow Ball", "Thunderbolt", "Trick"], + "abilities": ["Levitate"], "teraTypes": ["Electric", "Fairy", "Fire", "Ghost"] + }, + { + "role": "Setup Sweeper", + "movepool": ["Dazzling Gleam", "Mystical Fire", "Nasty Plot", "Shadow Ball", "Substitute", "Thunderbolt"], + "abilities": ["Levitate"], + "teraTypes": ["Electric", "Fairy"] + }, + { + "role": "Tera Blast user", + "movepool": ["Nasty Plot", "Shadow Ball", "Substitute", "Tera Blast"], + "abilities": ["Levitate"], + "teraTypes": ["Fighting"] } ] }, @@ -2413,8 +2831,15 @@ "level": 86, "sets": [ { - "role": "Wallbreaker", + "role": "Fast Attacker", "movepool": ["Brave Bird", "Heat Wave", "Sucker Punch", "U-turn"], + "abilities": ["Moxie"], + "teraTypes": ["Dark", "Flying"] + }, + { + "role": "Wallbreaker", + "movepool": ["Brave Bird", "Heat Wave", "Lash Out", "Sucker Punch", "Thunder Wave"], + "abilities": ["Moxie"], "teraTypes": ["Dark", "Flying"] } ] @@ -2425,6 +2850,7 @@ { "role": "Fast Support", "movepool": ["Fire Blast", "Gunk Shot", "Knock Off", "Sucker Punch", "Taunt", "Toxic Spikes"], + "abilities": ["Aftermath"], "teraTypes": ["Dark", "Poison"] } ] @@ -2434,28 +2860,26 @@ "sets": [ { "role": "Bulky Support", - "movepool": ["Earthquake", "Hypnosis", "Iron Head", "Psychic Noise", "Stealth Rock"], + "movepool": ["Earthquake", "Hypnosis", "Iron Head", "Psychic", "Psychic Noise", "Stealth Rock"], + "abilities": ["Levitate"], "teraTypes": ["Electric", "Water"] }, { "role": "Bulky Setup", "movepool": ["Body Press", "Iron Defense", "Iron Head", "Psychic Noise", "Rest"], + "abilities": ["Levitate"], "teraTypes": ["Fighting"] } ] }, "spiritomb": { - "level": 90, + "level": 89, "sets": [ { - "role": "Bulky Attacker", - "movepool": ["Foul Play", "Pain Split", "Poltergeist", "Shadow Sneak", "Sucker Punch", "Will-O-Wisp"], + "role": "Bulky Support", + "movepool": ["Foul Play", "Pain Split", "Poltergeist", "Shadow Sneak", "Sucker Punch", "Toxic", "Will-O-Wisp"], + "abilities": ["Infiltrator"], "teraTypes": ["Dark", "Ghost"] - }, - { - "role": "Bulky Setup", - "movepool": ["Calm Mind", "Dark Pulse", "Rest", "Sleep Talk"], - "teraTypes": ["Steel"] } ] }, @@ -2464,13 +2888,15 @@ "sets": [ { "role": "Fast Support", - "movepool": ["Earthquake", "Fire Blast", "Outrage", "Spikes", "Stealth Rock", "Stone Edge"], + "movepool": ["Earthquake", "Outrage", "Spikes", "Stealth Rock", "Stone Edge"], + "abilities": ["Rough Skin"], "teraTypes": ["Ground", "Steel"] }, { "role": "Setup Sweeper", - "movepool": ["Earthquake", "Fire Fang", "Scale Shot", "Stone Edge", "Swords Dance"], - "teraTypes": ["Dragon", "Ground"] + "movepool": ["Earthquake", "Fire Fang", "Iron Head", "Scale Shot", "Stone Edge", "Swords Dance"], + "abilities": ["Rough Skin"], + "teraTypes": ["Fire", "Ground", "Steel"] } ] }, @@ -2480,11 +2906,13 @@ { "role": "Fast Attacker", "movepool": ["Close Combat", "Extreme Speed", "Meteor Mash", "Stone Edge", "Swords Dance"], + "abilities": ["Justified"], "teraTypes": ["Normal"] }, { "role": "Setup Sweeper", - "movepool": ["Aura Sphere", "Dark Pulse", "Flash Cannon", "Focus Blast", "Nasty Plot", "Vacuum Wave"], + "movepool": ["Aura Sphere", "Flash Cannon", "Focus Blast", "Nasty Plot", "Vacuum Wave"], + "abilities": ["Inner Focus"], "teraTypes": ["Fighting"] } ] @@ -2494,67 +2922,81 @@ "sets": [ { "role": "Bulky Support", - "movepool": ["Earthquake", "Roar", "Slack Off", "Stealth Rock", "Stone Edge"], + "movepool": ["Earthquake", "Slack Off", "Stealth Rock", "Stone Edge", "Whirlwind"], + "abilities": ["Sand Stream"], "teraTypes": ["Dragon", "Rock", "Steel"] + }, + { + "role": "Bulky Setup", + "movepool": ["Curse", "Earthquake", "Slack Off", "Stone Edge"], + "abilities": ["Sand Stream"], + "teraTypes": ["Rock", "Steel"] } ] }, "toxicroak": { - "level": 85, + "level": 84, "sets": [ { "role": "Fast Attacker", - "movepool": ["Close Combat", "Gunk Shot", "Ice Punch", "Knock Off", "Sucker Punch", "Swords Dance"], + "movepool": ["Close Combat", "Earthquake", "Gunk Shot", "Knock Off", "Sucker Punch", "Swords Dance"], + "abilities": ["Dry Skin"], "teraTypes": ["Dark"] }, { "role": "Setup Sweeper", - "movepool": ["Close Combat", "Gunk Shot", "Ice Punch", "Sucker Punch", "Swords Dance"], - "teraTypes": ["Dark", "Fighting"] + "movepool": ["Close Combat", "Earthquake", "Gunk Shot", "Sucker Punch", "Swords Dance"], + "abilities": ["Dry Skin"], + "teraTypes": ["Dark", "Fighting", "Ground"] } ] }, "lumineon": { - "level": 92, + "level": 93, "sets": [ { "role": "Fast Support", "movepool": ["Alluring Voice", "Encore", "Hydro Pump", "Ice Beam", "U-turn"], + "abilities": ["Storm Drain"], "teraTypes": ["Fairy", "Water"] } ] }, "abomasnow": { - "level": 86, + "level": 85, "sets": [ { "role": "Bulky Support", "movepool": ["Aurora Veil", "Blizzard", "Earthquake", "Ice Shard", "Wood Hammer"], + "abilities": ["Snow Warning"], "teraTypes": ["Ice", "Water"] } ] }, "weavile": { - "level": 80, + "level": 79, "sets": [ { "role": "Fast Attacker", "movepool": ["Ice Shard", "Knock Off", "Low Kick", "Swords Dance", "Triple Axel"], + "abilities": ["Pickpocket"], "teraTypes": ["Dark", "Fighting", "Ice"] } ] }, "sneasler": { - "level": 75, + "level": 74, "sets": [ { "role": "Fast Attacker", "movepool": ["Close Combat", "Dire Claw", "Gunk Shot", "Throat Chop", "U-turn"], + "abilities": ["Poison Touch"], "teraTypes": ["Dark", "Fighting"] }, { "role": "Setup Sweeper", "movepool": ["Acrobatics", "Close Combat", "Gunk Shot", "Swords Dance"], + "abilities": ["Unburden"], "teraTypes": ["Flying"] } ] @@ -2563,48 +3005,72 @@ "level": 85, "sets": [ { - "role": "Bulky Support", - "movepool": ["Body Press", "Flash Cannon", "Mirror Coat", "Thunderbolt", "Volt Switch"], - "teraTypes": ["Electric", "Flying", "Water"] + "role": "Fast Attacker", + "movepool": ["Body Press", "Flash Cannon", "Thunderbolt", "Volt Switch"], + "abilities": ["Magnet Pull"], + "teraTypes": ["Electric", "Fighting", "Flying", "Water"] + }, + { + "role": "AV Pivot", + "movepool": ["Discharge", "Flash Cannon", "Mirror Coat", "Thunderbolt", "Volt Switch"], + "abilities": ["Analytic", "Magnet Pull"], + "teraTypes": ["Flying", "Water"] + }, + { + "role": "Bulky Setup", + "movepool": ["Body Press", "Discharge", "Flash Cannon", "Iron Defense", "Thunderbolt"], + "abilities": ["Magnet Pull"], + "teraTypes": ["Fighting"] } ] }, "rhyperior": { - "level": 84, + "level": 82, "sets": [ { "role": "Bulky Setup", "movepool": ["Earthquake", "Ice Punch", "Megahorn", "Rock Polish", "Stone Edge"], - "teraTypes": ["Ground", "Rock"] + "abilities": ["Solid Rock"], + "teraTypes": ["Bug", "Ground", "Rock"] + }, + { + "role": "Bulky Attacker", + "movepool": ["Dragon Tail", "Earthquake", "Ice Punch", "Megahorn", "Stone Edge"], + "abilities": ["Solid Rock"], + "teraTypes": ["Bug", "Dragon", "Grass", "Steel"] } ] }, "electivire": { - "level": 85, + "level": 84, "sets": [ { "role": "Fast Attacker", - "movepool": ["Earthquake", "Flamethrower", "Ice Punch", "Knock Off", "Volt Switch", "Wild Charge"], + "movepool": ["Earthquake", "Flamethrower", "Ice Punch", "Knock Off", "Supercell Slam", "Volt Switch"], + "abilities": ["Motor Drive"], "teraTypes": ["Dark", "Electric", "Ground"] }, { "role": "Setup Sweeper", "movepool": ["Bulk Up", "Earthquake", "Ice Punch", "Supercell Slam"], - "teraTypes": ["Ground"] + "abilities": ["Motor Drive"], + "teraTypes": ["Flying", "Ground"] } ] }, "magmortar": { - "level": 87, + "level": 88, "sets": [ { "role": "Wallbreaker", "movepool": ["Fire Blast", "Focus Blast", "Knock Off", "Scorching Sands", "Taunt", "Thunderbolt"], + "abilities": ["Flame Body"], "teraTypes": ["Electric", "Fighting", "Water"] }, { "role": "Fast Attacker", "movepool": ["Earthquake", "Fire Blast", "Focus Blast", "Knock Off", "Thunderbolt", "Will-O-Wisp"], + "abilities": ["Flame Body"], "teraTypes": ["Electric", "Fighting", "Water"] } ] @@ -2615,11 +3081,13 @@ { "role": "Wallbreaker", "movepool": ["Air Slash", "Bug Buzz", "Giga Drain", "U-turn"], + "abilities": ["Tinted Lens"], "teraTypes": ["Bug"] }, { "role": "Tera Blast user", "movepool": ["Air Slash", "Bug Buzz", "Protect", "Tera Blast"], + "abilities": ["Speed Boost"], "teraTypes": ["Ground"] } ] @@ -2630,6 +3098,7 @@ { "role": "Setup Sweeper", "movepool": ["Double-Edge", "Knock Off", "Leaf Blade", "Substitute", "Swords Dance", "Synthesis"], + "abilities": ["Chlorophyll"], "teraTypes": ["Dark", "Normal"] } ] @@ -2638,9 +3107,16 @@ "level": 94, "sets": [ { - "role": "Bulky Support", - "movepool": ["Calm Mind", "Freeze-Dry", "Protect", "Wish", "Yawn"], + "role": "Bulky Setup", + "movepool": ["Calm Mind", "Freeze-Dry", "Protect", "Wish"], + "abilities": ["Ice Body"], "teraTypes": ["Water"] + }, + { + "role": "Bulky Attacker", + "movepool": ["Freeze-Dry", "Mud Shot", "Protect", "Wish"], + "abilities": ["Ice Body"], + "teraTypes": ["Ground"] } ] }, @@ -2650,16 +3126,13 @@ { "role": "Fast Support", "movepool": ["Earthquake", "Protect", "Substitute", "Toxic"], + "abilities": ["Poison Heal"], "teraTypes": ["Water"] }, - { - "role": "Fast Bulky Setup", - "movepool": ["Dual Wingbeat", "Earthquake", "Facade", "Swords Dance"], - "teraTypes": ["Normal"] - }, { "role": "Bulky Support", - "movepool": ["Earthquake", "Knock Off", "Protect", "Spikes", "Toxic Spikes", "U-turn"], + "movepool": ["Earthquake", "Knock Off", "Protect", "Toxic", "Toxic Spikes", "U-turn"], + "abilities": ["Poison Heal"], "teraTypes": ["Water"] } ] @@ -2670,67 +3143,76 @@ { "role": "Wallbreaker", "movepool": ["Earthquake", "Ice Shard", "Icicle Crash", "Knock Off", "Stealth Rock"], + "abilities": ["Thick Fat"], "teraTypes": ["Ground", "Ice"] } ] }, "porygonz": { - "level": 81, + "level": 83, "sets": [ { "role": "Tera Blast user", "movepool": ["Agility", "Nasty Plot", "Shadow Ball", "Tera Blast"], + "abilities": ["Adaptability"], "teraTypes": ["Fighting"] }, { "role": "Fast Attacker", - "movepool": ["Ice Beam", "Nasty Plot", "Shadow Ball", "Thunderbolt", "Tri Attack"], + "movepool": ["Ice Beam", "Nasty Plot", "Shadow Ball", "Thunderbolt", "Tri Attack", "Trick"], + "abilities": ["Adaptability", "Download"], "teraTypes": ["Electric", "Ghost"] } ] }, "gallade": { - "level": 82, + "level": 81, "sets": [ { "role": "Fast Attacker", "movepool": ["Leaf Blade", "Night Slash", "Psycho Cut", "Sacred Sword", "Swords Dance"], + "abilities": ["Sharpness"], "teraTypes": ["Dark", "Fighting", "Grass"] }, { "role": "Setup Sweeper", "movepool": ["Agility", "Night Slash", "Psycho Cut", "Sacred Sword"], + "abilities": ["Sharpness"], "teraTypes": ["Dark", "Fighting"] } ] }, "probopass": { - "level": 91, + "level": 92, "sets": [ { "role": "Bulky Setup", - "movepool": ["Body Press", "Flash Cannon", "Iron Defense", "Power Gem", "Rest"], - "teraTypes": ["Fighting"] - }, - { - "role": "Bulky Attacker", - "movepool": ["Body Press", "Flash Cannon", "Power Gem", "Stealth Rock", "Thunder Wave", "Volt Switch"], + "movepool": ["Body Press", "Flash Cannon", "Iron Defense", "Power Gem", "Rest", "Thunder Wave"], + "abilities": ["Magnet Pull"], "teraTypes": ["Fighting"] } ] }, "dusknoir": { - "level": 88, + "level": 89, "sets": [ { "role": "Wallbreaker", - "movepool": ["Earthquake", "Ice Punch", "Leech Life", "Pain Split", "Poltergeist", "Shadow Sneak", "Trick"], - "teraTypes": ["Dark", "Ghost", "Ground"] + "movepool": ["Earthquake", "Leech Life", "Pain Split", "Poltergeist", "Shadow Sneak", "Trick"], + "abilities": ["Frisk"], + "teraTypes": ["Ghost", "Ground"] }, { "role": "Bulky Support", "movepool": ["Earthquake", "Pain Split", "Poltergeist", "Shadow Sneak", "Will-O-Wisp"], + "abilities": ["Frisk"], "teraTypes": ["Dark", "Fairy"] + }, + { + "role": "Bulky Attacker", + "movepool": ["Focus Punch", "Pain Split", "Poltergeist", "Substitute"], + "abilities": ["Frisk"], + "teraTypes": ["Fighting"] } ] }, @@ -2740,16 +3222,18 @@ { "role": "Fast Support", "movepool": ["Destiny Bond", "Poltergeist", "Spikes", "Taunt", "Triple Axel", "Will-O-Wisp"], - "teraTypes": ["Ghost"] + "abilities": ["Cursed Body"], + "teraTypes": ["Ghost", "Ice"] } ] }, "rotom": { - "level": 87, + "level": 88, "sets": [ { "role": "Fast Attacker", "movepool": ["Nasty Plot", "Shadow Ball", "Thunderbolt", "Trick", "Volt Switch", "Will-O-Wisp"], + "abilities": ["Levitate"], "teraTypes": ["Electric", "Ghost"] } ] @@ -2760,26 +3244,29 @@ { "role": "Bulky Attacker", "movepool": ["Hydro Pump", "Nasty Plot", "Pain Split", "Thunderbolt", "Trick", "Volt Switch", "Will-O-Wisp"], + "abilities": ["Levitate"], "teraTypes": ["Electric", "Water"] } ] }, "rotomheat": { - "level": 82, + "level": 83, "sets": [ { "role": "Bulky Attacker", "movepool": ["Nasty Plot", "Overheat", "Pain Split", "Thunderbolt", "Trick", "Volt Switch", "Will-O-Wisp"], + "abilities": ["Levitate"], "teraTypes": ["Electric", "Fire"] } ] }, "rotomfrost": { - "level": 86, + "level": 87, "sets": [ { "role": "Fast Attacker", "movepool": ["Blizzard", "Nasty Plot", "Thunderbolt", "Volt Switch", "Will-O-Wisp"], + "abilities": ["Levitate"], "teraTypes": ["Electric"] } ] @@ -2790,7 +3277,8 @@ { "role": "Bulky Attacker", "movepool": ["Air Slash", "Nasty Plot", "Thunderbolt", "Volt Switch", "Will-O-Wisp"], - "teraTypes": ["Electric"] + "abilities": ["Levitate"], + "teraTypes": ["Electric", "Steel"] } ] }, @@ -2800,6 +3288,7 @@ { "role": "Fast Attacker", "movepool": ["Leaf Storm", "Nasty Plot", "Thunderbolt", "Trick", "Volt Switch", "Will-O-Wisp"], + "abilities": ["Levitate"], "teraTypes": ["Electric", "Grass"] } ] @@ -2809,7 +3298,8 @@ "sets": [ { "role": "Bulky Support", - "movepool": ["Encore", "Knock Off", "Light Screen", "Psychic", "Psychic Noise", "Reflect", "Stealth Rock", "Thunder Wave", "U-turn", "Yawn"], + "movepool": ["Encore", "Knock Off", "Psychic Noise", "Stealth Rock", "Thunder Wave", "U-turn", "Yawn"], + "abilities": ["Levitate"], "teraTypes": ["Dark", "Electric", "Steel"] } ] @@ -2819,17 +3309,20 @@ "sets": [ { "role": "Fast Attacker", - "movepool": ["Dazzling Gleam", "Energy Ball", "Healing Wish", "Ice Beam", "Nasty Plot", "Psychic", "Thunderbolt", "U-turn"], - "teraTypes": ["Electric", "Fairy", "Psychic"] + "movepool": ["Dazzling Gleam", "Healing Wish", "Ice Beam", "Nasty Plot", "Psychic", "Shadow Ball", "Thunderbolt", "U-turn"], + "abilities": ["Levitate"], + "teraTypes": ["Electric", "Fairy"] }, { "role": "Bulky Support", "movepool": ["Encore", "Knock Off", "Psychic Noise", "Stealth Rock", "Thunder Wave", "U-turn"], + "abilities": ["Levitate"], "teraTypes": ["Dark", "Electric", "Steel"] }, { "role": "Bulky Attacker", "movepool": ["Drain Punch", "Ice Beam", "Knock Off", "Psychic Noise", "Thunder Wave", "Thunderbolt", "U-turn"], + "abilities": ["Levitate"], "teraTypes": ["Dark", "Fighting"] } ] @@ -2840,32 +3333,48 @@ { "role": "Fast Support", "movepool": ["Encore", "Explosion", "Fire Blast", "Knock Off", "Psychic", "Stealth Rock", "Taunt", "U-turn"], + "abilities": ["Levitate"], "teraTypes": ["Dark", "Fire"] }, { "role": "Fast Attacker", "movepool": ["Dazzling Gleam", "Fire Blast", "Nasty Plot", "Psychic", "Psyshock", "Thunderbolt", "Trick", "U-turn"], + "abilities": ["Levitate"], "teraTypes": ["Electric", "Fairy", "Fire", "Psychic"] } ] }, "dialga": { - "level": 74, + "level": 73, "sets": [ { "role": "Bulky Attacker", - "movepool": ["Draco Meteor", "Fire Blast", "Heavy Slam", "Stealth Rock", "Thunder Wave", "Thunderbolt"], - "teraTypes": ["Dragon", "Fire", "Steel"] + "movepool": ["Draco Meteor", "Fire Blast", "Heavy Slam", "Stealth Rock", "Thunder Wave"], + "abilities": ["Pressure"], + "teraTypes": ["Dragon", "Flying", "Steel"] + }, + { + "role": "AV Pivot", + "movepool": ["Draco Meteor", "Dragon Tail", "Fire Blast", "Heavy Slam"], + "abilities": ["Pressure"], + "teraTypes": ["Dragon", "Flying", "Steel"] } ] }, "dialgaorigin": { "level": 73, "sets": [ + { + "role": "Fast Attacker", + "movepool": ["Draco Meteor", "Fire Blast", "Flash Cannon", "Heavy Slam", "Stealth Rock", "Thunder Wave"], + "abilities": ["Pressure"], + "teraTypes": ["Dragon", "Flying", "Steel"] + }, { "role": "Bulky Attacker", - "movepool": ["Draco Meteor", "Fire Blast", "Flash Cannon", "Stealth Rock", "Thunder Wave"], - "teraTypes": ["Dragon", "Fire", "Steel"] + "movepool": ["Draco Meteor", "Dragon Tail", "Fire Blast", "Flash Cannon", "Heavy Slam", "Stealth Rock"], + "abilities": ["Pressure"], + "teraTypes": ["Dragon", "Flying", "Steel"] } ] }, @@ -2875,12 +3384,14 @@ { "role": "Fast Attacker", "movepool": ["Draco Meteor", "Fire Blast", "Hydro Pump", "Spacial Rend"], - "teraTypes": ["Dragon", "Water"] + "abilities": ["Pressure"], + "teraTypes": ["Dragon", "Fire", "Water"] }, { "role": "Bulky Attacker", "movepool": ["Draco Meteor", "Fire Blast", "Hydro Pump", "Spacial Rend", "Thunder Wave"], - "teraTypes": ["Dragon", "Water"] + "abilities": ["Pressure"], + "teraTypes": ["Dragon", "Fire", "Water"] } ] }, @@ -2890,7 +3401,8 @@ { "role": "Bulky Attacker", "movepool": ["Draco Meteor", "Fire Blast", "Hydro Pump", "Spacial Rend", "Thunder Wave"], - "teraTypes": ["Dragon", "Water"] + "abilities": ["Pressure"], + "teraTypes": ["Dragon", "Fire", "Water"] } ] }, @@ -2899,43 +3411,49 @@ "sets": [ { "role": "Bulky Support", - "movepool": ["Earth Power", "Flash Cannon", "Lava Plume", "Magma Storm", "Stealth Rock"], + "movepool": ["Earth Power", "Flash Cannon", "Heavy Slam", "Lava Plume", "Magma Storm", "Stealth Rock"], + "abilities": ["Flash Fire"], "teraTypes": ["Flying", "Grass", "Steel"] } ] }, "regigigas": { - "level": 86, + "level": 84, "sets": [ { "role": "Bulky Support", - "movepool": ["Body Slam", "Double-Edge", "Knock Off", "Rest", "Sleep Talk"], + "movepool": ["Body Slam", "Knock Off", "Rest", "Sleep Talk"], + "abilities": ["Slow Start"], "teraTypes": ["Ghost"] }, { "role": "Bulky Attacker", "movepool": ["Body Slam", "Knock Off", "Protect", "Substitute"], + "abilities": ["Slow Start"], "teraTypes": ["Ghost", "Poison"] } ] }, "giratina": { - "level": 74, + "level": 75, "sets": [ { "role": "Fast Support", "movepool": ["Dragon Tail", "Rest", "Shadow Ball", "Sleep Talk", "Will-O-Wisp"], - "teraTypes": ["Fairy", "Ghost"] + "abilities": ["Pressure"], + "teraTypes": ["Fairy"] }, { "role": "Bulky Setup", "movepool": ["Calm Mind", "Dragon Pulse", "Rest", "Sleep Talk"], - "teraTypes": ["Dragon", "Fairy"] + "abilities": ["Pressure"], + "teraTypes": ["Fairy"] }, { "role": "Bulky Support", "movepool": ["Defog", "Dragon Tail", "Rest", "Shadow Ball", "Will-O-Wisp"], - "teraTypes": ["Fairy", "Ghost"] + "abilities": ["Pressure"], + "teraTypes": ["Fairy"] } ] }, @@ -2944,8 +3462,9 @@ "sets": [ { "role": "Fast Attacker", - "movepool": ["Defog", "Draco Meteor", "Dragon Tail", "Earthquake", "Poltergeist", "Shadow Sneak", "Will-O-Wisp"], - "teraTypes": ["Dragon", "Ghost"] + "movepool": ["Defog", "Draco Meteor", "Dragon Tail", "Poltergeist", "Shadow Sneak", "Will-O-Wisp"], + "abilities": ["Levitate"], + "teraTypes": ["Dragon", "Fairy", "Ghost", "Steel"] } ] }, @@ -2955,21 +3474,24 @@ { "role": "Bulky Setup", "movepool": ["Calm Mind", "Moonblast", "Moonlight", "Psyshock", "Thunderbolt"], + "abilities": ["Levitate"], "teraTypes": ["Electric", "Fairy", "Poison", "Steel"] } ] }, "phione": { - "level": 90, + "level": 91, "sets": [ { "role": "Bulky Setup", "movepool": ["Rest", "Scald", "Sleep Talk", "Take Heart"], + "abilities": ["Hydration"], "teraTypes": ["Dragon", "Steel"] }, { "role": "Bulky Attacker", "movepool": ["Grass Knot", "Ice Beam", "Scald", "Take Heart"], + "abilities": ["Hydration"], "teraTypes": ["Grass", "Steel"] } ] @@ -2980,31 +3502,35 @@ { "role": "Bulky Setup", "movepool": ["Energy Ball", "Hydro Pump", "Ice Beam", "Surf", "Tail Glow"], + "abilities": ["Hydration"], "teraTypes": ["Grass", "Water"] } ] }, "darkrai": { - "level": 76, + "level": 77, "sets": [ { "role": "Setup Sweeper", "movepool": ["Dark Pulse", "Focus Blast", "Hypnosis", "Nasty Plot", "Sludge Bomb", "Substitute"], + "abilities": ["Bad Dreams"], "teraTypes": ["Poison"] } ] }, "shaymin": { - "level": 83, + "level": 82, "sets": [ { "role": "Bulky Attacker", - "movepool": ["Air Slash", "Earth Power", "Rest", "Seed Flare"], - "teraTypes": ["Grass", "Ground", "Steel"] + "movepool": ["Air Slash", "Earth Power", "Seed Flare", "Synthesis"], + "abilities": ["Natural Cure"], + "teraTypes": ["Ground", "Steel"] }, { "role": "Bulky Support", "movepool": ["Air Slash", "Leech Seed", "Seed Flare", "Substitute"], + "abilities": ["Natural Cure"], "teraTypes": ["Steel"] } ] @@ -3013,49 +3539,61 @@ "level": 73, "sets": [ { - "role": "Bulky Attacker", + "role": "Fast Attacker", "movepool": ["Air Slash", "Dazzling Gleam", "Earth Power", "Seed Flare"], + "abilities": ["Serene Grace"], "teraTypes": ["Flying", "Grass"] }, { "role": "Bulky Support", "movepool": ["Air Slash", "Leech Seed", "Seed Flare", "Substitute"], + "abilities": ["Serene Grace"], "teraTypes": ["Steel"] + }, + { + "role": "Bulky Attacker", + "movepool": ["Air Slash", "Earth Power", "Seed Flare", "Synthesis"], + "abilities": ["Serene Grace"], + "teraTypes": ["Steel", "Water"] } ] }, "arceus": { - "level": 69, + "level": 68, "sets": [ { - "role": "Setup Sweeper", + "role": "Fast Bulky Setup", "movepool": ["Earthquake", "Extreme Speed", "Recover", "Shadow Claw", "Swords Dance"], + "abilities": ["Multitype"], + "teraTypes": ["Ghost"] + }, + { + "role": "Setup Sweeper", + "movepool": ["Earthquake", "Extreme Speed", "Recover", "Swords Dance"], + "abilities": ["Multitype"], "teraTypes": ["Normal"] } ] }, "arceusbug": { - "level": 72, + "level": 73, "sets": [ - { - "role": "Setup Sweeper", - "movepool": ["Calm Mind", "Earth Power", "Ice Beam", "Judgment"], - "teraTypes": ["Ground"] - }, { "role": "Bulky Setup", - "movepool": ["Calm Mind", "Fire Blast", "Judgment", "Recover"], - "teraTypes": ["Fire"] + "movepool": ["Calm Mind", "Earth Power", "Fire Blast", "Judgment", "Recover"], + "abilities": ["Multitype"], + "teraTypes": ["Fire", "Ground"] } ] }, "arceusdark": { - "level": 70, + "level": 71, "sets": [ { "role": "Bulky Setup", - "movepool": ["Calm Mind", "Fire Blast", "Judgment", "Recover", "Sludge Bomb"], - "teraTypes": ["Fire", "Ghost", "Poison"] + "movepool": ["Calm Mind", "Dazzling Gleam", "Judgment", "Recover", "Sludge Bomb"], + "abilities": ["Multitype"], + "teraTypes": ["Fairy", "Poison"] } ] }, @@ -3064,22 +3602,31 @@ "sets": [ { "role": "Setup Sweeper", - "movepool": ["Earthquake", "Extreme Speed", "Gunk Shot", "Outrage", "Swords Dance"], - "teraTypes": ["Ground"] + "movepool": ["Extreme Speed", "Flare Blitz", "Heavy Slam", "Outrage", "Swords Dance"], + "abilities": ["Multitype"], + "teraTypes": ["Fire"] }, { "role": "Bulky Setup", - "movepool": ["Calm Mind", "Fire Blast", "Judgment", "Sludge Bomb"], + "movepool": ["Dragon Dance", "Flare Blitz", "Heavy Slam", "Outrage"], + "abilities": ["Multitype"], + "teraTypes": ["Fire", "Steel"] + }, + { + "role": "Fast Bulky Setup", + "movepool": ["Calm Mind", "Fire Blast", "Judgment", "Recover", "Sludge Bomb"], + "abilities": ["Multitype"], "teraTypes": ["Fire"] } ] }, "arceuselectric": { - "level": 69, + "level": 70, "sets": [ { "role": "Bulky Setup", "movepool": ["Calm Mind", "Ice Beam", "Judgment", "Recover"], + "abilities": ["Multitype"], "teraTypes": ["Electric", "Ice"] } ] @@ -3089,18 +3636,26 @@ "sets": [ { "role": "Bulky Setup", - "movepool": ["Calm Mind", "Earth Power", "Fire Blast", "Judgment", "Recover"], - "teraTypes": ["Fire", "Ground", "Steel"] + "movepool": ["Calm Mind", "Earth Power", "Judgment", "Recover"], + "abilities": ["Multitype"], + "teraTypes": ["Ground", "Steel"] } ] }, "arceusfighting": { - "level": 69, + "level": 70, "sets": [ { - "role": "Bulky Setup", + "role": "Fast Bulky Setup", "movepool": ["Body Press", "Cosmic Power", "Recover", "Stored Power"], - "teraTypes": ["Psychic", "Steel"] + "abilities": ["Multitype"], + "teraTypes": ["Steel"] + }, + { + "role": "Bulky Setup", + "movepool": ["Body Press", "Iron Defense", "Recover", "Shadow Ball"], + "abilities": ["Multitype"], + "teraTypes": ["Steel"] } ] }, @@ -3109,13 +3664,21 @@ "sets": [ { "role": "Setup Sweeper", - "movepool": ["Earthquake", "Extreme Speed", "Flare Blitz", "Liquidation", "Recover", "Swords Dance"], - "teraTypes": ["Fire", "Ground", "Water"] + "movepool": ["Earthquake", "Extreme Speed", "Flare Blitz", "Recover", "Swords Dance"], + "abilities": ["Multitype"], + "teraTypes": ["Fire", "Ground"] }, { "role": "Fast Bulky Setup", - "movepool": ["Calm Mind", "Earth Power", "Ice Beam", "Judgment", "Recover", "Thunderbolt"], - "teraTypes": ["Electric", "Ground"] + "movepool": ["Dragon Dance", "Earthquake", "Flare Blitz", "Recover"], + "abilities": ["Multitype"], + "teraTypes": ["Fire", "Ground"] + }, + { + "role": "Bulky Setup", + "movepool": ["Calm Mind", "Earth Power", "Energy Ball", "Judgment", "Recover"], + "abilities": ["Multitype"], + "teraTypes": ["Grass", "Ground"] } ] }, @@ -3125,21 +3688,24 @@ { "role": "Bulky Setup", "movepool": ["Calm Mind", "Earth Power", "Judgment", "Recover"], + "abilities": ["Multitype"], "teraTypes": ["Ground", "Steel"] } ] }, "arceusghost": { - "level": 70, + "level": 69, "sets": [ { "role": "Bulky Support", "movepool": ["Focus Blast", "Judgment", "Recover", "Will-O-Wisp"], + "abilities": ["Multitype"], "teraTypes": ["Fighting", "Normal"] }, { "role": "Bulky Setup", "movepool": ["Calm Mind", "Focus Blast", "Judgment", "Recover"], + "abilities": ["Multitype"], "teraTypes": ["Fighting", "Ghost", "Normal"] } ] @@ -3150,11 +3716,13 @@ { "role": "Setup Sweeper", "movepool": ["Calm Mind", "Earth Power", "Ice Beam", "Judgment"], + "abilities": ["Multitype"], "teraTypes": ["Ground"] }, { "role": "Bulky Setup", "movepool": ["Calm Mind", "Fire Blast", "Judgment", "Recover"], + "abilities": ["Multitype"], "teraTypes": ["Fire"] } ] @@ -3165,12 +3733,20 @@ { "role": "Bulky Setup", "movepool": ["Calm Mind", "Fire Blast", "Ice Beam", "Judgment", "Recover"], + "abilities": ["Multitype"], "teraTypes": ["Dragon", "Ground"] }, { "role": "Setup Sweeper", "movepool": ["Earthquake", "Extreme Speed", "Stone Edge", "Swords Dance"], + "abilities": ["Multitype"], "teraTypes": ["Normal"] + }, + { + "role": "Fast Bulky Setup", + "movepool": ["Dragon Dance", "Earthquake", "Recover", "Stone Edge"], + "abilities": ["Multitype"], + "teraTypes": ["Ground", "Steel"] } ] }, @@ -3180,17 +3756,25 @@ { "role": "Bulky Setup", "movepool": ["Calm Mind", "Earth Power", "Judgment", "Recover", "Thunderbolt"], + "abilities": ["Multitype"], "teraTypes": ["Electric", "Ground"] } ] }, "arceuspoison": { - "level": 72, + "level": 70, "sets": [ { "role": "Setup Sweeper", "movepool": ["Dragon Dance", "Earthquake", "Flare Blitz", "Gunk Shot", "Liquidation", "Recover", "Swords Dance"], - "teraTypes": ["Fire", "Ground", "Water"] + "abilities": ["Multitype"], + "teraTypes": ["Ground"] + }, + { + "role": "Fast Bulky Setup", + "movepool": ["Earthquake", "Extreme Speed", "Gunk Shot", "Swords Dance"], + "abilities": ["Multitype"], + "teraTypes": ["Ground", "Normal"] } ] }, @@ -3200,26 +3784,41 @@ { "role": "Bulky Setup", "movepool": ["Body Press", "Cosmic Power", "Recover", "Stored Power"], + "abilities": ["Multitype"], "teraTypes": ["Steel"] } ] }, "arceusrock": { - "level": 73, + "level": 74, "sets": [ { "role": "Bulky Setup", "movepool": ["Calm Mind", "Earth Power", "Fire Blast", "Judgment", "Recover"], + "abilities": ["Multitype"], "teraTypes": ["Dragon", "Ground"] + }, + { + "role": "Setup Sweeper", + "movepool": ["Dragon Dance", "Earthquake", "Recover", "Stone Edge", "Swords Dance"], + "abilities": ["Multitype"], + "teraTypes": ["Ground"] } ] }, "arceussteel": { - "level": 69, + "level": 70, "sets": [ { "role": "Bulky Support", - "movepool": ["Calm Mind", "Earth Power", "Judgment", "Recover", "Will-O-Wisp"], + "movepool": ["Earthquake", "Judgment", "Recover", "Will-O-Wisp"], + "abilities": ["Multitype"], + "teraTypes": ["Ghost"] + }, + { + "role": "Bulky Setup", + "movepool": ["Calm Mind", "Earth Power", "Judgment", "Recover"], + "abilities": ["Multitype"], "teraTypes": ["Ghost"] } ] @@ -3229,42 +3828,48 @@ "sets": [ { "role": "Bulky Support", - "movepool": ["Ice Beam", "Judgment", "Recover", "Taunt", "Will-O-Wisp"], + "movepool": ["Calm Mind", "Ice Beam", "Judgment", "Recover", "Will-O-Wisp"], + "abilities": ["Multitype"], "teraTypes": ["Steel"] } ] }, "serperior": { - "level": 80, + "level": 79, "sets": [ { "role": "Tera Blast user", - "movepool": ["Glare", "Knock Off", "Leaf Storm", "Leech Seed", "Substitute", "Synthesis", "Tera Blast"], - "teraTypes": ["Stellar"] + "movepool": ["Glare", "Leaf Storm", "Leech Seed", "Substitute", "Synthesis", "Tera Blast"], + "abilities": ["Contrary"], + "teraTypes": ["Fire", "Rock"] }, { "role": "Fast Attacker", "movepool": ["Dragon Pulse", "Glare", "Leaf Storm", "Leech Seed", "Substitute", "Synthesis"], + "abilities": ["Contrary"], "teraTypes": ["Dragon", "Grass", "Water"] } ] }, "emboar": { - "level": 85, + "level": 84, "sets": [ { "role": "AV Pivot", - "movepool": ["Close Combat", "Flare Blitz", "Knock Off", "Scald", "Wild Charge"], + "movepool": ["Close Combat", "Flare Blitz", "Knock Off", "Scald", "Sucker Punch", "Wild Charge"], + "abilities": ["Reckless"], "teraTypes": ["Dark", "Electric", "Fire", "Water"] }, { "role": "Fast Attacker", "movepool": ["Close Combat", "Flare Blitz", "Head Smash", "Knock Off", "Wild Charge"], + "abilities": ["Reckless"], "teraTypes": ["Fire"] }, { - "role": "Fast Bulky Setup", + "role": "Setup Sweeper", "movepool": ["Bulk Up", "Drain Punch", "Flare Blitz", "Trailblaze"], + "abilities": ["Reckless"], "teraTypes": ["Fighting", "Grass"] } ] @@ -3275,11 +3880,13 @@ { "role": "AV Pivot", "movepool": ["Aqua Jet", "Flip Turn", "Grass Knot", "Hydro Pump", "Ice Beam", "Knock Off", "Megahorn", "Sacred Sword"], - "teraTypes": ["Dark", "Water"] + "abilities": ["Torrent"], + "teraTypes": ["Dark", "Grass", "Water"] }, { "role": "Setup Sweeper", "movepool": ["Aqua Jet", "Knock Off", "Liquidation", "Megahorn", "Sacred Sword", "Swords Dance"], + "abilities": ["Torrent"], "teraTypes": ["Dark", "Water"] } ] @@ -3290,16 +3897,18 @@ { "role": "Fast Attacker", "movepool": ["Ceaseless Edge", "Flip Turn", "Razor Shell", "Sacred Sword", "Sucker Punch", "Swords Dance"], - "teraTypes": ["Dark", "Water"] + "abilities": ["Sharpness"], + "teraTypes": ["Dark", "Poison", "Water"] } ] }, "zebstrika": { - "level": 88, + "level": 87, "sets": [ { "role": "Fast Attacker", - "movepool": ["High Horsepower", "Overheat", "Volt Switch", "Wild Charge"], + "movepool": ["High Horsepower", "Overheat", "Supercell Slam", "Volt Switch"], + "abilities": ["Sap Sipper"], "teraTypes": ["Ground"] } ] @@ -3308,9 +3917,16 @@ "level": 80, "sets": [ { - "role": "Setup Sweeper", - "movepool": ["Earthquake", "Iron Head", "Rapid Spin", "Rock Slide", "Swords Dance"], + "role": "Bulky Setup", + "movepool": ["Earthquake", "Iron Head", "Rapid Spin", "Swords Dance"], + "abilities": ["Mold Breaker", "Sand Rush"], "teraTypes": ["Grass", "Ground", "Water"] + }, + { + "role": "AV Pivot", + "movepool": ["Earthquake", "Iron Head", "Rapid Spin", "Rock Slide"], + "abilities": ["Mold Breaker", "Sand Rush"], + "teraTypes": ["Grass", "Water"] } ] }, @@ -3320,6 +3936,7 @@ { "role": "Bulky Attacker", "movepool": ["Bulk Up", "Defog", "Drain Punch", "Knock Off", "Mach Punch"], + "abilities": ["Guts"], "teraTypes": ["Steel"] } ] @@ -3330,36 +3947,35 @@ { "role": "Wallbreaker", "movepool": ["Close Combat", "Facade", "Knock Off", "Mach Punch"], - "teraTypes": ["Fighting", "Normal"] + "abilities": ["Guts"], + "teraTypes": ["Normal"] } ] }, "leavanny": { - "level": 88, + "level": 86, "sets": [ { "role": "Fast Support", "movepool": ["Knock Off", "Leaf Blade", "Lunge", "Sticky Web", "Swords Dance"], + "abilities": ["Chlorophyll", "Swarm"], "teraTypes": ["Ghost", "Rock"] - }, - { - "role": "Setup Sweeper", - "movepool": ["Knock Off", "Leaf Blade", "Lunge", "Swords Dance", "Triple Axel"], - "teraTypes": ["Dark", "Rock"] } ] }, "whimsicott": { - "level": 87, + "level": 85, "sets": [ { "role": "Fast Support", - "movepool": ["Encore", "Giga Drain", "Moonblast", "Stun Spore", "Taunt", "U-turn"], + "movepool": ["Encore", "Giga Drain", "Moonblast", "Stun Spore", "U-turn"], + "abilities": ["Prankster"], "teraTypes": ["Poison", "Steel"] }, { "role": "Bulky Support", - "movepool": ["Hurricane", "Leech Seed", "Moonblast", "Substitute"], + "movepool": ["Encore", "Hurricane", "Leech Seed", "Moonblast", "Substitute"], + "abilities": ["Prankster"], "teraTypes": ["Steel"] } ] @@ -3369,72 +3985,64 @@ "sets": [ { "role": "Tera Blast user", - "movepool": ["Giga Drain", "Pollen Puff", "Quiver Dance", "Sleep Powder", "Tera Blast"], + "movepool": ["Giga Drain", "Quiver Dance", "Sleep Powder", "Tera Blast"], + "abilities": ["Chlorophyll"], "teraTypes": ["Fire", "Rock"] }, { "role": "Setup Sweeper", "movepool": ["Alluring Voice", "Petal Dance", "Quiver Dance", "Sleep Powder"], - "teraTypes": ["Grass"] + "abilities": ["Own Tempo"], + "teraTypes": ["Fairy", "Grass"] } ] }, "lilliganthisui": { - "level": 80, + "level": 79, "sets": [ { "role": "Setup Sweeper", "movepool": ["Close Combat", "Ice Spinner", "Leaf Blade", "Sleep Powder", "Victory Dance"], - "teraTypes": ["Fighting"] - }, - { - "role": "Fast Support", - "movepool": ["Close Combat", "Defog", "Ice Spinner", "Leaf Blade", "Sleep Powder"], - "teraTypes": ["Fighting"] + "abilities": ["Hustle"], + "teraTypes": ["Fighting", "Steel"] } ] }, "basculin": { - "level": 87, - "sets": [ - { - "role": "Wallbreaker", - "movepool": ["Aqua Jet", "Double-Edge", "Flip Turn", "Wave Crash"], - "teraTypes": ["Water"] - } - ] - }, - "basculinbluestriped": { - "level": 87, + "level": 86, "sets": [ { "role": "Wallbreaker", "movepool": ["Aqua Jet", "Double-Edge", "Flip Turn", "Wave Crash"], + "abilities": ["Adaptability"], "teraTypes": ["Water"] } ] }, "basculegion": { - "level": 83, + "level": 81, "sets": [ { "role": "AV Pivot", "movepool": ["Aqua Jet", "Flip Turn", "Shadow Ball", "Wave Crash"], + "abilities": ["Adaptability"], "teraTypes": ["Water"] } ] }, "basculegionf": { - "level": 84, + "level": 83, "sets": [ { "role": "Wallbreaker", "movepool": ["Flip Turn", "Hydro Pump", "Ice Beam", "Shadow Ball"], + "abilities": ["Adaptability"], "teraTypes": ["Water"] }, { "role": "AV Pivot", "movepool": ["Flip Turn", "Hydro Pump", "Shadow Ball", "Wave Crash"], + "abilities": ["Adaptability"], "teraTypes": ["Water"] } ] @@ -3445,21 +4053,24 @@ { "role": "Fast Attacker", "movepool": ["Bulk Up", "Earthquake", "Gunk Shot", "Knock Off", "Stealth Rock", "Stone Edge"], + "abilities": ["Intimidate"], "teraTypes": ["Ground", "Poison"] } ] }, "scrafty": { - "level": 85, + "level": 84, "sets": [ { "role": "Bulky Setup", "movepool": ["Bulk Up", "Drain Punch", "Knock Off", "Rest"], + "abilities": ["Shed Skin"], "teraTypes": ["Poison"] }, { "role": "Setup Sweeper", "movepool": ["Close Combat", "Dragon Dance", "Knock Off", "Poison Jab"], + "abilities": ["Intimidate"], "teraTypes": ["Poison"] } ] @@ -3468,34 +4079,32 @@ "level": 84, "sets": [ { - "role": "Fast Attacker", + "role": "Wallbreaker", "movepool": ["Dark Pulse", "Flamethrower", "Focus Blast", "Nasty Plot", "Psychic", "Sludge Bomb", "Trick", "U-turn"], + "abilities": ["Illusion"], "teraTypes": ["Poison"] } ] }, "zoroarkhisui": { - "level": 79, + "level": 80, "sets": [ { "role": "Wallbreaker", "movepool": ["Bitter Malice", "Flamethrower", "Focus Blast", "Hyper Voice", "Nasty Plot", "Trick", "U-turn"], + "abilities": ["Illusion"], "teraTypes": ["Fighting", "Normal"] } ] }, "cinccino": { - "level": 84, + "level": 83, "sets": [ { - "role": "Setup Sweeper", - "movepool": ["Bullet Seed", "Tail Slap", "Tidy Up", "Triple Axel"], + "role": "Fast Attacker", + "movepool": ["Bullet Seed", "Tail Slap", "Tidy Up", "Triple Axel", "U-turn"], + "abilities": ["Technician"], "teraTypes": ["Grass", "Ice", "Normal"] - }, - { - "role": "Wallbreaker", - "movepool": ["Bullet Seed", "Knock Off", "Tail Slap", "Triple Axel", "U-turn"], - "teraTypes": ["Grass", "Normal"] } ] }, @@ -3505,27 +4114,25 @@ { "role": "Bulky Setup", "movepool": ["Calm Mind", "Dark Pulse", "Focus Blast", "Psychic Noise", "Thunderbolt"], - "teraTypes": ["Dark", "Electric", "Fairy", "Fighting", "Flying", "Ghost", "Ground", "Psychic", "Steel"] + "abilities": ["Shadow Tag"], + "teraTypes": ["Dark", "Electric", "Fairy", "Fighting", "Flying", "Ghost", "Ground", "Steel"] }, { "role": "Fast Attacker", "movepool": ["Dark Pulse", "Focus Blast", "Psychic", "Trick"], + "abilities": ["Shadow Tag"], "teraTypes": ["Dark", "Fairy", "Fighting", "Flying", "Ghost", "Ground", "Psychic", "Steel"] } ] }, "reuniclus": { - "level": 84, + "level": 88, "sets": [ { "role": "Bulky Setup", "movepool": ["Calm Mind", "Focus Blast", "Psychic", "Psyshock", "Recover", "Shadow Ball"], + "abilities": ["Magic Guard"], "teraTypes": ["Fighting", "Steel"] - }, - { - "role": "AV Pivot", - "movepool": ["Focus Blast", "Future Sight", "Knock Off", "Psychic Noise", "Shadow Ball"], - "teraTypes": ["Steel"] } ] }, @@ -3535,6 +4142,7 @@ { "role": "Bulky Support", "movepool": ["Brave Bird", "Defog", "Hydro Pump", "Knock Off", "Roost"], + "abilities": ["Hydration"], "teraTypes": ["Ground"] } ] @@ -3545,11 +4153,13 @@ { "role": "Setup Sweeper", "movepool": ["Double-Edge", "High Horsepower", "Horn Leech", "Swords Dance"], + "abilities": ["Sap Sipper"], "teraTypes": ["Ground", "Normal"] }, { "role": "Fast Attacker", "movepool": ["Headbutt", "High Horsepower", "Horn Leech", "Swords Dance"], + "abilities": ["Serene Grace"], "teraTypes": ["Normal"] } ] @@ -3560,6 +4170,13 @@ { "role": "Bulky Support", "movepool": ["Clear Smog", "Giga Drain", "Sludge Bomb", "Spore", "Toxic"], + "abilities": ["Regenerator"], + "teraTypes": ["Steel", "Water"] + }, + { + "role": "Bulky Attacker", + "movepool": ["Giga Drain", "Sludge Bomb", "Spore", "Stomping Tantrum"], + "abilities": ["Regenerator"], "teraTypes": ["Steel", "Water"] } ] @@ -3570,6 +4187,13 @@ { "role": "Bulky Support", "movepool": ["Flip Turn", "Protect", "Scald", "Wish"], + "abilities": ["Regenerator"], + "teraTypes": ["Steel"] + }, + { + "role": "Fast Support", + "movepool": ["Flip Turn", "Protect", "Scald", "Wish"], + "abilities": ["Regenerator"], "teraTypes": ["Steel"] } ] @@ -3580,6 +4204,7 @@ { "role": "Fast Support", "movepool": ["Bug Buzz", "Giga Drain", "Sticky Web", "Thunder", "Volt Switch"], + "abilities": ["Compound Eyes"], "teraTypes": ["Electric"] } ] @@ -3589,13 +4214,15 @@ "sets": [ { "role": "Bulky Setup", - "movepool": ["Coil", "Drain Punch", "Fire Punch", "Knock Off", "Liquidation", "Supercell Slam"], + "movepool": ["Coil", "Drain Punch", "Fire Punch", "Knock Off", "Supercell Slam"], + "abilities": ["Levitate"], "teraTypes": ["Fighting"] }, { "role": "AV Pivot", - "movepool": ["Acid Spray", "Close Combat", "Flamethrower", "Giga Drain", "Knock Off", "Thunderbolt", "U-turn"], - "teraTypes": ["Poison"] + "movepool": ["Close Combat", "Discharge", "Flamethrower", "Giga Drain", "Knock Off", "U-turn"], + "abilities": ["Levitate"], + "teraTypes": ["Poison", "Steel"] } ] }, @@ -3605,11 +4232,13 @@ { "role": "Fast Bulky Setup", "movepool": ["Calm Mind", "Energy Ball", "Fire Blast", "Pain Split", "Shadow Ball", "Substitute", "Will-O-Wisp"], + "abilities": ["Flame Body", "Flash Fire"], "teraTypes": ["Fire", "Ghost", "Grass"] }, { "role": "Fast Attacker", "movepool": ["Energy Ball", "Fire Blast", "Shadow Ball", "Trick"], + "abilities": ["Flash Fire"], "teraTypes": ["Fire", "Ghost", "Grass"] } ] @@ -3620,36 +4249,41 @@ { "role": "Setup Sweeper", "movepool": ["Close Combat", "Dragon Dance", "Earthquake", "Iron Head", "Outrage"], - "teraTypes": ["Fighting", "Ground", "Steel"] + "abilities": ["Mold Breaker"], + "teraTypes": ["Steel"] }, { "role": "Fast Bulky Setup", "movepool": ["Close Combat", "Earthquake", "Iron Head", "Scale Shot", "Swords Dance"], - "teraTypes": ["Fighting", "Ground", "Steel"] + "abilities": ["Mold Breaker"], + "teraTypes": ["Steel"] } ] }, "beartic": { - "level": 90, + "level": 91, "sets": [ { "role": "Wallbreaker", "movepool": ["Aqua Jet", "Close Combat", "Earthquake", "Icicle Crash", "Snowscape", "Swords Dance"], - "teraTypes": ["Fighting", "Ground", "Ice"] + "abilities": ["Slush Rush", "Swift Swim"], + "teraTypes": ["Fighting", "Ground"] } ] }, "cryogonal": { - "level": 88, + "level": 89, "sets": [ { "role": "Bulky Support", "movepool": ["Flash Cannon", "Freeze-Dry", "Haze", "Rapid Spin", "Recover"], + "abilities": ["Levitate"], "teraTypes": ["Poison", "Steel"] }, { "role": "Tera Blast user", "movepool": ["Ice Beam", "Rapid Spin", "Recover", "Tera Blast"], + "abilities": ["Levitate"], "teraTypes": ["Electric"] } ] @@ -3659,27 +4293,31 @@ "sets": [ { "role": "Wallbreaker", - "movepool": ["High Jump Kick", "Knock Off", "Poison Jab", "Triple Axel", "U-turn"], + "movepool": ["High Jump Kick", "Knock Off", "Poison Jab", "Stone Edge", "U-turn"], + "abilities": ["Reckless"], "teraTypes": ["Fighting"] }, { "role": "AV Pivot", "movepool": ["Close Combat", "Fake Out", "Knock Off", "U-turn"], + "abilities": ["Regenerator"], "teraTypes": ["Dark", "Steel"] }, { "role": "Setup Sweeper", "movepool": ["Close Combat", "Knock Off", "Poison Jab", "Swords Dance", "Triple Axel"], + "abilities": ["Regenerator"], "teraTypes": ["Dark", "Fighting", "Poison"] } ] }, "golurk": { - "level": 89, + "level": 87, "sets": [ { "role": "Wallbreaker", "movepool": ["Dynamic Punch", "Earthquake", "Poltergeist", "Stealth Rock", "Stone Edge"], + "abilities": ["No Guard"], "teraTypes": ["Fighting", "Ghost", "Ground"] } ] @@ -3690,36 +4328,47 @@ { "role": "Fast Bulky Setup", "movepool": ["Brave Bird", "Bulk Up", "Close Combat", "Roost"], - "teraTypes": ["Fighting", "Flying"] + "abilities": ["Defiant"], + "teraTypes": ["Fighting", "Steel"] } ] }, "braviaryhisui": { - "level": 84, + "level": 85, "sets": [ { "role": "Setup Sweeper", "movepool": ["Agility", "Heat Wave", "Hurricane", "Psychic"], + "abilities": ["Sheer Force"], "teraTypes": ["Fairy", "Fire", "Psychic", "Steel"] }, { "role": "Wallbreaker", - "movepool": ["Calm Mind", "Defog", "Esper Wing", "Heat Wave", "Hurricane", "U-turn"], + "movepool": ["Esper Wing", "Hurricane", "U-turn", "Vacuum Wave"], + "abilities": ["Tinted Lens"], + "teraTypes": ["Fairy", "Fighting", "Psychic", "Steel"] + }, + { + "role": "Bulky Attacker", + "movepool": ["Calm Mind", "Defog", "Esper Wing", "Hurricane", "Roost"], + "abilities": ["Tinted Lens"], "teraTypes": ["Fairy", "Psychic", "Steel"] } ] }, "mandibuzz": { - "level": 84, + "level": 85, "sets": [ { "role": "Bulky Support", "movepool": ["Defog", "Foul Play", "Roost", "Toxic", "U-turn"], + "abilities": ["Overcoat"], "teraTypes": ["Steel"] }, { "role": "Bulky Attacker", "movepool": ["Brave Bird", "Defog", "Foul Play", "Knock Off", "Roost", "Toxic"], + "abilities": ["Overcoat"], "teraTypes": ["Steel"] } ] @@ -3730,6 +4379,7 @@ { "role": "Fast Attacker", "movepool": ["Dark Pulse", "Draco Meteor", "Fire Blast", "Flash Cannon", "Nasty Plot", "U-turn"], + "abilities": ["Levitate"], "teraTypes": ["Dark", "Dragon", "Fire", "Steel"] } ] @@ -3740,56 +4390,64 @@ { "role": "Fast Bulky Setup", "movepool": ["Bug Buzz", "Fiery Dance", "Fire Blast", "Giga Drain", "Morning Sun", "Quiver Dance"], - "teraTypes": ["Fire", "Grass", "Water"] + "abilities": ["Flame Body", "Swarm"], + "teraTypes": ["Fire", "Grass", "Steel"] }, { "role": "Tera Blast user", "movepool": ["Bug Buzz", "Fiery Dance", "Fire Blast", "Giga Drain", "Quiver Dance", "Tera Blast"], + "abilities": ["Flame Body", "Swarm"], "teraTypes": ["Ground", "Water"] } ] }, "cobalion": { - "level": 82, + "level": 80, "sets": [ { "role": "Fast Bulky Setup", "movepool": ["Close Combat", "Iron Head", "Stone Edge", "Swords Dance", "Taunt"], + "abilities": ["Justified"], "teraTypes": ["Fighting"] }, { "role": "Bulky Setup", "movepool": ["Aura Sphere", "Calm Mind", "Flash Cannon", "Vacuum Wave"], - "teraTypes": ["Fighting"] + "abilities": ["Justified"], + "teraTypes": ["Fighting", "Ghost", "Water"] }, { "role": "Bulky Support", "movepool": ["Body Press", "Iron Defense", "Iron Head", "Stealth Rock", "Stone Edge", "Thunder Wave", "Volt Switch"], + "abilities": ["Justified"], "teraTypes": ["Ghost", "Water"] } ] }, "terrakion": { - "level": 80, + "level": 79, "sets": [ { "role": "Setup Sweeper", "movepool": ["Close Combat", "Earthquake", "Stone Edge", "Swords Dance"], + "abilities": ["Justified"], "teraTypes": ["Fighting", "Ground"] }, { "role": "Wallbreaker", "movepool": ["Close Combat", "Earthquake", "Quick Attack", "Stone Edge"], + "abilities": ["Justified"], "teraTypes": ["Fighting", "Ground"] } ] }, "virizion": { - "level": 84, + "level": 82, "sets": [ { "role": "Setup Sweeper", "movepool": ["Close Combat", "Leaf Blade", "Stone Edge", "Swords Dance"], + "abilities": ["Justified"], "teraTypes": ["Rock"] } ] @@ -3800,7 +4458,8 @@ { "role": "Fast Attacker", "movepool": ["Bleakwind Storm", "Focus Blast", "Grass Knot", "Heat Wave", "Nasty Plot", "U-turn"], - "teraTypes": ["Fire", "Flying"] + "abilities": ["Defiant", "Prankster"], + "teraTypes": ["Fighting", "Fire", "Flying"] } ] }, @@ -3810,12 +4469,14 @@ { "role": "Fast Attacker", "movepool": ["Bleakwind Storm", "Focus Blast", "Grass Knot", "Heat Wave", "Nasty Plot", "U-turn"], - "teraTypes": ["Fire", "Flying"] + "abilities": ["Regenerator"], + "teraTypes": ["Fighting", "Fire", "Flying"] }, { "role": "AV Pivot", "movepool": ["Bleakwind Storm", "Heat Wave", "Knock Off", "U-turn"], - "teraTypes": ["Dark", "Fire", "Flying"] + "abilities": ["Regenerator"], + "teraTypes": ["Dark", "Steel"] } ] }, @@ -3825,12 +4486,20 @@ { "role": "Fast Attacker", "movepool": ["Focus Blast", "Grass Knot", "Knock Off", "Nasty Plot", "Sludge Wave", "Taunt", "Thunder Wave", "Thunderbolt", "U-turn"], - "teraTypes": ["Electric", "Grass"] + "abilities": ["Defiant", "Prankster"], + "teraTypes": ["Electric", "Grass", "Steel"] }, { "role": "Tera Blast user", "movepool": ["Focus Blast", "Nasty Plot", "Tera Blast", "Thunderbolt"], + "abilities": ["Defiant"], "teraTypes": ["Flying"] + }, + { + "role": "Wallbreaker", + "movepool": ["Acrobatics", "Focus Blast", "Grass Knot", "Knock Off", "Taunt", "Thunder Wave", "Thunderbolt", "U-turn"], + "abilities": ["Defiant", "Prankster"], + "teraTypes": ["Electric", "Flying", "Grass", "Steel"] } ] }, @@ -3840,11 +4509,13 @@ { "role": "Fast Attacker", "movepool": ["Focus Blast", "Grass Knot", "Nasty Plot", "Psychic", "Sludge Wave", "Thunderbolt", "Volt Switch"], + "abilities": ["Volt Absorb"], "teraTypes": ["Electric", "Poison", "Psychic"] }, { "role": "Tera Blast user", "movepool": ["Focus Blast", "Nasty Plot", "Tera Blast", "Thunderbolt"], + "abilities": ["Volt Absorb"], "teraTypes": ["Flying"] } ] @@ -3854,48 +4525,48 @@ "sets": [ { "role": "Fast Attacker", - "movepool": ["Blue Flare", "Draco Meteor", "Earth Power", "Roar", "Will-O-Wisp"], - "teraTypes": ["Fire"] + "movepool": ["Blue Flare", "Draco Meteor", "Dragon Tail", "Earth Power", "Will-O-Wisp"], + "abilities": ["Turboblaze"], + "teraTypes": ["Fire", "Ground"] }, { "role": "Setup Sweeper", "movepool": ["Dragon Dance", "Flare Blitz", "Outrage", "Stone Edge"], + "abilities": ["Turboblaze"], "teraTypes": ["Dragon", "Fire"] } ] }, "zekrom": { - "level": 74, + "level": 71, "sets": [ { "role": "Setup Sweeper", "movepool": ["Bolt Strike", "Dragon Dance", "Outrage", "Substitute"], - "teraTypes": ["Electric"] + "abilities": ["Teravolt"], + "teraTypes": ["Electric", "Steel"] } ] }, "landorus": { - "level": 76, + "level": 75, "sets": [ { "role": "Fast Attacker", "movepool": ["Earth Power", "Focus Blast", "Nasty Plot", "Psychic", "Rock Slide", "Sludge Wave", "Stealth Rock"], + "abilities": ["Sheer Force"], "teraTypes": ["Ground", "Poison", "Psychic"] } ] }, "landorustherian": { - "level": 77, + "level": 76, "sets": [ { "role": "Bulky Support", "movepool": ["Earthquake", "Stealth Rock", "Stone Edge", "Taunt", "U-turn"], + "abilities": ["Intimidate"], "teraTypes": ["Ground", "Water"] - }, - { - "role": "Tera Blast user", - "movepool": ["Earthquake", "Stone Edge", "Swords Dance", "Tera Blast"], - "teraTypes": ["Flying"] } ] }, @@ -3904,52 +4575,65 @@ "sets": [ { "role": "Tera Blast user", - "movepool": ["Dragon Dance", "Icicle Spear", "Scale Shot", "Tera Blast"], + "movepool": ["Dragon Dance", "Icicle Spear", "Scale Shot", "Tera Blast"], + "abilities": ["Pressure"], "teraTypes": ["Ground"] }, { "role": "Wallbreaker", "movepool": ["Draco Meteor", "Earth Power", "Freeze-Dry", "Ice Beam", "Outrage"], + "abilities": ["Pressure"], "teraTypes": ["Ground"] } ] }, "kyuremwhite": { - "level": 77, + "level": 73, "sets": [ { "role": "Fast Attacker", "movepool": ["Draco Meteor", "Earth Power", "Freeze-Dry", "Fusion Flare"], + "abilities": ["Turboblaze"], "teraTypes": ["Dragon", "Fire"] + }, + { + "role": "Bulky Attacker", + "movepool": ["Draco Meteor", "Freeze-Dry", "Fusion Flare", "Ice Beam"], + "abilities": ["Turboblaze"], + "teraTypes": ["Dragon", "Fire", "Ice"] } ] }, "kyuremblack": { - "level": 73, + "level": 71, "sets": [ { "role": "Setup Sweeper", "movepool": ["Dragon Dance", "Fusion Bolt", "Icicle Spear", "Scale Shot"], + "abilities": ["Teravolt"], "teraTypes": ["Electric"] }, { "role": "Tera Blast user", "movepool": ["Dragon Dance", "Icicle Spear", "Scale Shot", "Tera Blast"], + "abilities": ["Teravolt"], "teraTypes": ["Ground"] } ] }, "keldeoresolute": { - "level": 80, + "level": 79, "sets": [ { "role": "Fast Attacker", "movepool": ["Air Slash", "Calm Mind", "Flip Turn", "Hydro Pump", "Secret Sword", "Vacuum Wave"], + "abilities": ["Justified"], "teraTypes": ["Fighting", "Water"] }, { "role": "Bulky Setup", "movepool": ["Calm Mind", "Hydro Pump", "Secret Sword", "Substitute", "Surf"], + "abilities": ["Justified"], "teraTypes": ["Steel"] } ] @@ -3960,7 +4644,14 @@ { "role": "Fast Attacker", "movepool": ["Calm Mind", "Focus Blast", "Hyper Voice", "Psyshock", "U-turn"], + "abilities": ["Serene Grace"], "teraTypes": ["Fighting", "Normal", "Psychic"] + }, + { + "role": "Wallbreaker", + "movepool": ["Close Combat", "Knock Off", "Relic Song", "Triple Axel"], + "abilities": ["Serene Grace"], + "teraTypes": ["Dark", "Fighting"] } ] }, @@ -3970,11 +4661,13 @@ { "role": "Bulky Support", "movepool": ["Body Press", "Knock Off", "Spikes", "Synthesis", "Wood Hammer"], + "abilities": ["Bulletproof"], "teraTypes": ["Steel", "Water"] }, { "role": "Fast Bulky Setup", "movepool": ["Body Press", "Iron Defense", "Synthesis", "Trailblaze"], + "abilities": ["Bulletproof"], "teraTypes": ["Steel"] } ] @@ -3985,6 +4678,7 @@ { "role": "Fast Attacker", "movepool": ["Fire Blast", "Focus Blast", "Grass Knot", "Nasty Plot", "Psyshock"], + "abilities": ["Blaze"], "teraTypes": ["Fighting", "Fire", "Grass", "Psychic"] } ] @@ -3995,6 +4689,7 @@ { "role": "Fast Attacker", "movepool": ["Dark Pulse", "Grass Knot", "Gunk Shot", "Hydro Pump", "Ice Beam", "Toxic Spikes", "U-turn"], + "abilities": ["Protean"], "teraTypes": ["Dark", "Poison", "Water"] } ] @@ -4005,6 +4700,7 @@ { "role": "Fast Attacker", "movepool": ["Dark Pulse", "Gunk Shot", "Hydro Pump", "Ice Beam"], + "abilities": ["Battle Bond"], "teraTypes": ["Poison", "Water"] } ] @@ -4015,26 +4711,30 @@ { "role": "Bulky Attacker", "movepool": ["Brave Bird", "Defog", "Overheat", "Roost", "Taunt", "U-turn", "Will-O-Wisp"], - "teraTypes": ["Ground", "Water"] + "abilities": ["Flame Body"], + "teraTypes": ["Dragon", "Ground"] }, { "role": "Tera Blast user", "movepool": ["Brave Bird", "Flare Blitz", "Swords Dance", "Tera Blast"], + "abilities": ["Flame Body"], "teraTypes": ["Ground"] } ] }, "vivillon": { - "level": 86, + "level": 84, "sets": [ { "role": "Fast Bulky Setup", - "movepool": ["Bug Buzz", "Energy Ball", "Hurricane", "Quiver Dance", "Sleep Powder", "Substitute"], + "movepool": ["Bug Buzz", "Hurricane", "Quiver Dance", "Sleep Powder"], + "abilities": ["Compound Eyes"], "teraTypes": ["Flying"] }, { "role": "Tera Blast user", - "movepool": ["Hurricane", "Quiver Dance", "Sleep Powder", "Substitute", "Tera Blast"], + "movepool": ["Hurricane", "Quiver Dance", "Sleep Powder", "Tera Blast"], + "abilities": ["Compound Eyes"], "teraTypes": ["Ground"] } ] @@ -4045,6 +4745,7 @@ { "role": "Fast Attacker", "movepool": ["Dark Pulse", "Fire Blast", "Hyper Voice", "Will-O-Wisp", "Work Up"], + "abilities": ["Unnerve"], "teraTypes": ["Fire"] } ] @@ -4055,11 +4756,13 @@ { "role": "Bulky Setup", "movepool": ["Calm Mind", "Moonblast", "Protect", "Wish"], + "abilities": ["Flower Veil"], "teraTypes": ["Steel"] }, { "role": "Tera Blast user", "movepool": ["Calm Mind", "Moonblast", "Synthesis", "Tera Blast"], + "abilities": ["Flower Veil"], "teraTypes": ["Ground"] } ] @@ -4069,72 +4772,86 @@ "sets": [ { "role": "Bulky Setup", - "movepool": ["Bulk Up", "Earthquake", "Horn Leech", "Milk Drink"], - "teraTypes": ["Ground"] + "movepool": ["Bulk Up", "Earthquake", "Horn Leech", "Milk Drink", "Rock Slide"], + "abilities": ["Sap Sipper"], + "teraTypes": ["Ground", "Water"] } ] }, "meowstic": { - "level": 88, + "level": 89, "sets": [ { "role": "Bulky Support", "movepool": ["Alluring Voice", "Light Screen", "Psychic Noise", "Reflect", "Thunder Wave", "Yawn"], + "abilities": ["Prankster"], "teraTypes": ["Fairy"] } ] }, "meowsticf": { - "level": 88, + "level": 89, "sets": [ { "role": "Setup Sweeper", "movepool": ["Alluring Voice", "Dark Pulse", "Nasty Plot", "Psychic", "Psyshock", "Thunderbolt"], + "abilities": ["Competitive"], "teraTypes": ["Dark", "Electric", "Fairy"] } ] }, "malamar": { - "level": 84, + "level": 82, "sets": [ { "role": "Bulky Setup", "movepool": ["Knock Off", "Rest", "Sleep Talk", "Superpower"], + "abilities": ["Contrary"], "teraTypes": ["Fighting", "Poison", "Steel"] }, { "role": "Fast Bulky Setup", "movepool": ["Knock Off", "Psycho Cut", "Rest", "Superpower"], + "abilities": ["Contrary"], "teraTypes": ["Fighting", "Poison", "Steel"] } ] }, "dragalge": { - "level": 87, + "level": 88, "sets": [ { "role": "Bulky Attacker", - "movepool": ["Draco Meteor", "Flip Turn", "Focus Blast", "Hydro Pump", "Sludge Bomb", "Toxic", "Toxic Spikes"], - "teraTypes": ["Water"] + "movepool": ["Draco Meteor", "Dragon Tail", "Flip Turn", "Focus Blast", "Sludge Wave", "Toxic", "Toxic Spikes"], + "abilities": ["Adaptability"], + "teraTypes": ["Fighting"] } ] }, "clawitzer": { - "level": 86, + "level": 87, "sets": [ { "role": "Wallbreaker", "movepool": ["Aura Sphere", "Dark Pulse", "Dragon Pulse", "U-turn", "Water Pulse"], + "abilities": ["Mega Launcher"], "teraTypes": ["Dark", "Dragon", "Fighting"] + }, + { + "role": "AV Pivot", + "movepool": ["Aura Sphere", "Dark Pulse", "Dragon Pulse", "U-turn", "Water Pulse"], + "abilities": ["Mega Launcher"], + "teraTypes": ["Dragon"] } ] }, "sylveon": { - "level": 84, + "level": 85, "sets": [ { "role": "Bulky Setup", "movepool": ["Calm Mind", "Hyper Voice", "Protect", "Wish"], + "abilities": ["Pixilate"], "teraTypes": ["Steel"] } ] @@ -4145,6 +4862,7 @@ { "role": "Setup Sweeper", "movepool": ["Acrobatics", "Brave Bird", "Close Combat", "Encore", "Stone Edge", "Swords Dance", "Throat Chop"], + "abilities": ["Unburden"], "teraTypes": ["Fighting", "Flying"] } ] @@ -4155,6 +4873,7 @@ { "role": "Fast Support", "movepool": ["Dazzling Gleam", "Nuzzle", "Super Fang", "Thunderbolt", "U-turn"], + "abilities": ["Cheek Pouch"], "teraTypes": ["Electric", "Flying"] } ] @@ -4162,14 +4881,10 @@ "carbink": { "level": 90, "sets": [ - { - "role": "Bulky Attacker", - "movepool": ["Body Press", "Moonblast", "Power Gem", "Spikes", "Stealth Rock"], - "teraTypes": ["Fighting"] - }, { "role": "Fast Bulky Setup", "movepool": ["Body Press", "Iron Defense", "Moonblast", "Rest", "Rock Polish"], + "abilities": ["Clear Body", "Sturdy"], "teraTypes": ["Fighting"] } ] @@ -4179,18 +4894,20 @@ "sets": [ { "role": "AV Pivot", - "movepool": ["Draco Meteor", "Earthquake", "Fire Blast", "Knock Off", "Power Whip", "Scald", "Sludge Bomb", "Thunderbolt"], - "teraTypes": ["Electric", "Fire", "Grass", "Ground", "Poison", "Water"] + "movepool": ["Draco Meteor", "Earthquake", "Fire Blast", "Knock Off", "Power Whip", "Scald", "Sludge Bomb"], + "abilities": ["Sap Sipper"], + "teraTypes": ["Fire", "Grass", "Ground", "Poison", "Water"] } ] }, "goodrahisui": { - "level": 84, + "level": 82, "sets": [ { "role": "AV Pivot", "movepool": ["Draco Meteor", "Dragon Tail", "Earthquake", "Fire Blast", "Heavy Slam", "Hydro Pump", "Knock Off", "Thunderbolt"], - "teraTypes": ["Electric", "Fire", "Ground", "Water"] + "abilities": ["Sap Sipper"], + "teraTypes": ["Dragon", "Flying", "Ground", "Water"] } ] }, @@ -4200,11 +4917,13 @@ { "role": "Bulky Support", "movepool": ["Magnet Rise", "Play Rough", "Spikes", "Thunder Wave"], + "abilities": ["Prankster"], "teraTypes": ["Water"] }, { "role": "Bulky Attacker", "movepool": ["Dazzling Gleam", "Foul Play", "Spikes", "Thunder Wave"], + "abilities": ["Prankster"], "teraTypes": ["Flying", "Water"] } ] @@ -4214,22 +4933,25 @@ "sets": [ { "role": "Wallbreaker", - "movepool": ["Drain Punch", "Horn Leech", "Poltergeist", "Rest", "Trick Room", "Wood Hammer"], + "movepool": ["Drain Punch", "Horn Leech", "Poltergeist", "Rest", "Trick Room", "Will-O-Wisp", "Wood Hammer"], + "abilities": ["Natural Cure"], "teraTypes": ["Fighting"] }, { "role": "Bulky Support", "movepool": ["Drain Punch", "Poltergeist", "Protect", "Toxic"], + "abilities": ["Harvest"], "teraTypes": ["Dark", "Fairy", "Fighting", "Steel"] } ] }, "avalugg": { - "level": 86, + "level": 88, "sets": [ { "role": "Bulky Support", "movepool": ["Avalanche", "Body Press", "Curse", "Rapid Spin", "Recover"], + "abilities": ["Sturdy"], "teraTypes": ["Fighting"] } ] @@ -4240,6 +4962,7 @@ { "role": "Bulky Attacker", "movepool": ["Avalanche", "Body Press", "Rapid Spin", "Recover", "Stone Edge"], + "abilities": ["Sturdy"], "teraTypes": ["Flying", "Ghost", "Poison"] } ] @@ -4250,11 +4973,13 @@ { "role": "Fast Attacker", "movepool": ["Boomburst", "Draco Meteor", "Flamethrower", "Hurricane", "Roost", "U-turn"], + "abilities": ["Infiltrator"], "teraTypes": ["Normal"] }, { "role": "Fast Support", "movepool": ["Defog", "Draco Meteor", "Flamethrower", "Hurricane", "Roost", "U-turn"], + "abilities": ["Infiltrator"], "teraTypes": ["Fire"] } ] @@ -4264,12 +4989,14 @@ "sets": [ { "role": "Bulky Attacker", - "movepool": ["Body Press", "Diamond Storm", "Earth Power", "Moonblast", "Stealth Rock"], + "movepool": ["Body Press", "Diamond Storm", "Earth Power", "Moonblast", "Rock Polish", "Stealth Rock"], + "abilities": ["Clear Body"], "teraTypes": ["Fighting"] }, { "role": "Bulky Setup", "movepool": ["Calm Mind", "Diamond Storm", "Draining Kiss", "Earth Power"], + "abilities": ["Clear Body"], "teraTypes": ["Fairy", "Water"] } ] @@ -4279,7 +5006,8 @@ "sets": [ { "role": "Fast Attacker", - "movepool": ["Focus Blast", "Nasty Plot", "Psyshock", "Shadow Ball", "Trick"], + "movepool": ["Focus Blast", "Nasty Plot", "Psychic", "Psyshock", "Shadow Ball", "Trick"], + "abilities": ["Magician"], "teraTypes": ["Fighting", "Ghost", "Psychic"] } ] @@ -4290,11 +5018,13 @@ { "role": "Wallbreaker", "movepool": ["Drain Punch", "Gunk Shot", "Hyperspace Fury", "Trick", "Zen Headbutt"], + "abilities": ["Magician"], "teraTypes": ["Dark", "Fighting", "Poison"] }, { "role": "Bulky Attacker", "movepool": ["Focus Blast", "Gunk Shot", "Hyperspace Fury", "Psychic", "Trick"], + "abilities": ["Magician"], "teraTypes": ["Fighting", "Poison"] } ] @@ -4305,6 +5035,7 @@ { "role": "Bulky Attacker", "movepool": ["Earth Power", "Flame Charge", "Flamethrower", "Haze", "Sludge Bomb", "Steam Eruption"], + "abilities": ["Water Absorb"], "teraTypes": ["Fire", "Ground", "Water"] } ] @@ -4315,77 +5046,82 @@ { "role": "Fast Support", "movepool": ["Defog", "Knock Off", "Leaf Storm", "Roost", "Spirit Shackle", "U-turn"], + "abilities": ["Overgrow"], "teraTypes": ["Dark", "Ghost", "Grass"] }, { "role": "Setup Sweeper", "movepool": ["Leaf Blade", "Poltergeist", "Shadow Sneak", "Swords Dance"], + "abilities": ["Overgrow"], "teraTypes": ["Ghost"] } ] }, "decidueyehisui": { - "level": 88, + "level": 87, "sets": [ { "role": "Bulky Attacker", "movepool": ["Defog", "Knock Off", "Leaf Blade", "Roost", "Sucker Punch", "Swords Dance", "Triple Arrows", "U-turn"], - "teraTypes": ["Steel"] + "abilities": ["Scrappy"], + "teraTypes": ["Steel", "Water"] } ] }, "incineroar": { - "level": 84, + "level": 82, "sets": [ { "role": "AV Pivot", "movepool": ["Close Combat", "Fake Out", "Knock Off", "Overheat", "U-turn"], + "abilities": ["Intimidate"], "teraTypes": ["Fighting", "Water"] }, { "role": "Fast Attacker", - "movepool": ["Close Combat", "Earthquake", "Knock Off", "Overheat", "Parting Shot", "Will-O-Wisp"], + "movepool": ["Close Combat", "Earthquake", "Flare Blitz", "Knock Off", "Parting Shot", "Will-O-Wisp"], + "abilities": ["Intimidate"], "teraTypes": ["Fighting", "Water"] }, { "role": "Setup Sweeper", - "movepool": ["Bulk Up", "Flare Blitz", "Knock Off", "Trailblaze"], + "movepool": ["Flare Blitz", "Knock Off", "Swords Dance", "Trailblaze"], + "abilities": ["Intimidate"], "teraTypes": ["Grass"] } ] }, "primarina": { - "level": 82, + "level": 83, "sets": [ { "role": "Wallbreaker", "movepool": ["Flip Turn", "Hydro Pump", "Moonblast", "Psychic"], + "abilities": ["Torrent"], "teraTypes": ["Water"] }, { "role": "Bulky Setup", - "movepool": ["Calm Mind", "Draining Kiss", "Moonblast", "Sparkling Aria"], - "teraTypes": ["Fairy", "Poison"] + "movepool": ["Calm Mind", "Draining Kiss", "Moonblast", "Psychic Noise"], + "abilities": ["Liquid Voice"], + "teraTypes": ["Fairy", "Poison", "Steel"] }, { "role": "Bulky Attacker", "movepool": ["Calm Mind", "Draining Kiss", "Psychic", "Sparkling Aria"], - "teraTypes": ["Fairy", "Poison"] + "abilities": ["Torrent"], + "teraTypes": ["Fairy", "Poison", "Steel"] } ] }, "toucannon": { - "level": 87, + "level": 88, "sets": [ { "role": "Bulky Support", "movepool": ["Beak Blast", "Boomburst", "Bullet Seed", "Knock Off", "Roost", "U-turn"], + "abilities": ["Keen Eye", "Skill Link"], "teraTypes": ["Steel"] - }, - { - "role": "Bulky Attacker", - "movepool": ["Beak Blast", "Boomburst", "Flash Cannon", "Heat Wave", "Roost"], - "teraTypes": ["Normal"] } ] }, @@ -4395,21 +5131,24 @@ { "role": "Wallbreaker", "movepool": ["Double-Edge", "Earthquake", "Knock Off", "U-turn"], - "teraTypes": ["Ground", "Normal"] + "abilities": ["Stakeout"], + "teraTypes": ["Normal"] + }, + { + "role": "Fast Attacker", + "movepool": ["Double-Edge", "Earthquake", "Knock Off", "U-turn"], + "abilities": ["Adaptability", "Stakeout"], + "teraTypes": ["Ground"] } ] }, "vikavolt": { - "level": 84, + "level": 83, "sets": [ - { - "role": "Wallbreaker", - "movepool": ["Agility", "Bug Buzz", "Energy Ball", "Thunderbolt", "Volt Switch"], - "teraTypes": ["Electric"] - }, { "role": "Bulky Support", - "movepool": ["Bug Buzz", "Energy Ball", "Sticky Web", "Thunderbolt", "Volt Switch"], + "movepool": ["Bug Buzz", "Discharge", "Energy Ball", "Sticky Web", "Thunderbolt", "Volt Switch"], + "abilities": ["Levitate"], "teraTypes": ["Electric"] } ] @@ -4420,7 +5159,14 @@ { "role": "Wallbreaker", "movepool": ["Close Combat", "Drain Punch", "Earthquake", "Gunk Shot", "Ice Hammer", "Knock Off"], + "abilities": ["Iron Fist"], "teraTypes": ["Fighting", "Ground"] + }, + { + "role": "AV Pivot", + "movepool": ["Drain Punch", "Earthquake", "Ice Hammer", "Knock Off"], + "abilities": ["Iron Fist"], + "teraTypes": ["Fighting", "Ground", "Water"] } ] }, @@ -4430,16 +5176,18 @@ { "role": "Setup Sweeper", "movepool": ["Hurricane", "Quiver Dance", "Revelation Dance", "Roost"], + "abilities": ["Dancer"], "teraTypes": ["Ground"] } ] }, "oricoriopompom": { - "level": 83, + "level": 82, "sets": [ { - "role": "Bulky Attacker", - "movepool": ["Defog", "Hurricane", "Quiver Dance", "Revelation Dance", "Roost"], + "role": "Setup Sweeper", + "movepool": ["Hurricane", "Quiver Dance", "Revelation Dance", "Roost"], + "abilities": ["Dancer"], "teraTypes": ["Ground"] } ] @@ -4450,6 +5198,7 @@ { "role": "Setup Sweeper", "movepool": ["Hurricane", "Quiver Dance", "Revelation Dance", "Roost"], + "abilities": ["Dancer"], "teraTypes": ["Fighting", "Ground"] } ] @@ -4460,6 +5209,7 @@ { "role": "Setup Sweeper", "movepool": ["Hurricane", "Quiver Dance", "Revelation Dance", "Roost"], + "abilities": ["Dancer"], "teraTypes": ["Fighting", "Ghost"] } ] @@ -4469,12 +5219,14 @@ "sets": [ { "role": "Fast Support", - "movepool": ["Moonblast", "Sticky Web", "Stun Spore", "U-turn"], + "movepool": ["Bug Buzz", "Moonblast", "Sticky Web", "Stun Spore", "U-turn"], + "abilities": ["Shield Dust"], "teraTypes": ["Ghost"] }, { "role": "Tera Blast user", "movepool": ["Bug Buzz", "Moonblast", "Quiver Dance", "Tera Blast"], + "abilities": ["Shield Dust"], "teraTypes": ["Ground"] } ] @@ -4484,7 +5236,8 @@ "sets": [ { "role": "Fast Attacker", - "movepool": ["Accelerock", "Close Combat", "Crunch", "Drill Run", "Psychic Fangs", "Stealth Rock", "Stone Edge", "Swords Dance", "Taunt"], + "movepool": ["Accelerock", "Close Combat", "Crunch", "Psychic Fangs", "Stealth Rock", "Stone Edge", "Swords Dance"], + "abilities": ["Sand Rush"], "teraTypes": ["Fighting"] } ] @@ -4495,6 +5248,7 @@ { "role": "Fast Attacker", "movepool": ["Close Combat", "Knock Off", "Stealth Rock", "Stone Edge", "Sucker Punch", "Swords Dance"], + "abilities": ["No Guard"], "teraTypes": ["Fighting"] } ] @@ -4505,6 +5259,7 @@ { "role": "Fast Attacker", "movepool": ["Accelerock", "Close Combat", "Psychic Fangs", "Stone Edge", "Swords Dance", "Throat Chop"], + "abilities": ["Tough Claws"], "teraTypes": ["Fighting"] } ] @@ -4515,6 +5270,7 @@ { "role": "Bulky Support", "movepool": ["Haze", "Liquidation", "Recover", "Toxic", "Toxic Spikes"], + "abilities": ["Regenerator"], "teraTypes": ["Fairy", "Flying", "Grass", "Steel"] } ] @@ -4525,6 +5281,7 @@ { "role": "Bulky Attacker", "movepool": ["Body Press", "Earthquake", "Heavy Slam", "Stealth Rock", "Stone Edge"], + "abilities": ["Stamina"], "teraTypes": ["Fighting"] } ] @@ -4534,33 +5291,43 @@ "sets": [ { "role": "Bulky Attacker", - "movepool": ["Hydro Pump", "Leech Life", "Liquidation", "Sticky Web"], - "teraTypes": ["Water"] + "movepool": ["Hydro Pump", "Leech Life", "Liquidation", "Mirror Coat", "Sticky Web"], + "abilities": ["Water Bubble"], + "teraTypes": ["Ground", "Steel", "Water"] } ] }, "lurantis": { - "level": 88, + "level": 87, "sets": [ { "role": "Bulky Attacker", "movepool": ["Defog", "Knock Off", "Leaf Storm", "Superpower", "Synthesis"], + "abilities": ["Contrary"], "teraTypes": ["Fighting"] }, { "role": "AV Pivot", "movepool": ["Knock Off", "Leaf Storm", "Leech Life", "Superpower"], - "teraTypes": ["Fighting"] + "abilities": ["Contrary"], + "teraTypes": ["Fighting", "Steel", "Water"] } ] }, "salazzle": { - "level": 82, + "level": 83, "sets": [ { "role": "Fast Support", "movepool": ["Flamethrower", "Protect", "Substitute", "Toxic"], - "teraTypes": ["Flying", "Water"] + "abilities": ["Corrosion"], + "teraTypes": ["Flying", "Grass"] + }, + { + "role": "Tera Blast user", + "movepool": ["Fire Blast", "Nasty Plot", "Sludge Wave", "Tera Blast"], + "abilities": ["Corrosion"], + "teraTypes": ["Grass"] } ] }, @@ -4570,21 +5337,24 @@ { "role": "Fast Support", "movepool": ["High Jump Kick", "Knock Off", "Power Whip", "Rapid Spin", "Synthesis", "Triple Axel", "U-turn"], + "abilities": ["Queenly Majesty"], "teraTypes": ["Fighting", "Steel"] } ] }, "comfey": { - "level": 88, + "level": 85, "sets": [ { "role": "Bulky Setup", "movepool": ["Calm Mind", "Draining Kiss", "Giga Drain", "Stored Power"], + "abilities": ["Triage"], "teraTypes": ["Fairy", "Poison", "Steel"] }, { "role": "Tera Blast user", - "movepool": ["Calm Mind", "Draining Kiss", "Giga Drain", "Tera Blast"], + "movepool": ["Calm Mind", "Draining Kiss", "Giga Drain", "Synthesis", "Tera Blast"], + "abilities": ["Triage"], "teraTypes": ["Ground"] } ] @@ -4595,12 +5365,14 @@ { "role": "Bulky Attacker", "movepool": ["Focus Blast", "Nasty Plot", "Psychic", "Psyshock", "Thunderbolt"], + "abilities": ["Inner Focus"], "teraTypes": ["Electric", "Fighting", "Psychic"] }, { "role": "Wallbreaker", "movepool": ["Focus Blast", "Hyper Voice", "Nasty Plot", "Psyshock", "Thunderbolt", "Trick"], - "teraTypes": ["Electric", "Fighting", "Psychic"] + "abilities": ["Inner Focus"], + "teraTypes": ["Electric", "Fighting", "Normal", "Psychic"] } ] }, @@ -4610,31 +5382,35 @@ { "role": "Fast Attacker", "movepool": ["Close Combat", "Earthquake", "Gunk Shot", "Knock Off", "Rock Slide", "U-turn"], + "abilities": ["Defiant"], "teraTypes": ["Dark", "Fighting", "Poison"] }, { "role": "Bulky Setup", "movepool": ["Bulk Up", "Drain Punch", "Gunk Shot", "Knock Off"], + "abilities": ["Defiant"], "teraTypes": ["Dark", "Poison", "Steel"] } ] }, "palossand": { - "level": 88, + "level": 89, "sets": [ { "role": "Bulky Support", - "movepool": ["Earth Power", "Hypnosis", "Shadow Ball", "Shore Up", "Stealth Rock"], - "teraTypes": ["Water"] + "movepool": ["Earth Power", "Shadow Ball", "Shore Up", "Sludge Bomb", "Stealth Rock"], + "abilities": ["Water Compaction"], + "teraTypes": ["Poison", "Water"] } ] }, "minior": { - "level": 81, + "level": 79, "sets": [ { "role": "Setup Sweeper", "movepool": ["Acrobatics", "Earthquake", "Power Gem", "Shell Smash"], + "abilities": ["Shields Down"], "teraTypes": ["Flying", "Ground", "Steel", "Water"] } ] @@ -4643,9 +5419,16 @@ "level": 89, "sets": [ { - "role": "Wallbreaker", - "movepool": ["Body Slam", "Double-Edge", "Earthquake", "Knock Off", "Play Rough", "Rapid Spin", "Sucker Punch", "Superpower", "U-turn", "Wood Hammer"], - "teraTypes": ["Dark", "Fairy", "Fighting", "Grass", "Ground"] + "role": "Fast Attacker", + "movepool": ["Double-Edge", "Earthquake", "Knock Off", "Superpower", "U-turn", "Wood Hammer"], + "abilities": ["Comatose"], + "teraTypes": ["Fighting", "Grass", "Ground"] + }, + { + "role": "Bulky Support", + "movepool": ["Body Slam", "Earthquake", "Knock Off", "Rapid Spin", "U-turn"], + "abilities": ["Comatose"], + "teraTypes": ["Ghost"] } ] }, @@ -4654,8 +5437,15 @@ "sets": [ { "role": "Setup Sweeper", - "movepool": ["Drain Punch", "Play Rough", "Shadow Claw", "Shadow Sneak", "Swords Dance", "Wood Hammer"], - "teraTypes": ["Fairy", "Fighting", "Ghost", "Grass"] + "movepool": ["Drain Punch", "Play Rough", "Shadow Sneak", "Swords Dance", "Wood Hammer"], + "abilities": ["Disguise"], + "teraTypes": ["Fairy", "Fighting", "Grass"] + }, + { + "role": "Fast Bulky Setup", + "movepool": ["Play Rough", "Shadow Claw", "Shadow Sneak", "Swords Dance"], + "abilities": ["Disguise"], + "teraTypes": ["Fairy", "Ghost"] } ] }, @@ -4665,6 +5455,7 @@ { "role": "Fast Attacker", "movepool": ["Aqua Jet", "Crunch", "Flip Turn", "Ice Fang", "Psychic Fangs", "Swords Dance", "Wave Crash"], + "abilities": ["Strong Jaw"], "teraTypes": ["Dark", "Psychic"] } ] @@ -4675,11 +5466,13 @@ { "role": "Fast Bulky Setup", "movepool": ["Boomburst", "Clanging Scales", "Clangorous Soul", "Close Combat", "Iron Head"], + "abilities": ["Soundproof"], "teraTypes": ["Normal", "Steel"] }, { "role": "Setup Sweeper", "movepool": ["Close Combat", "Iron Head", "Scale Shot", "Swords Dance"], + "abilities": ["Soundproof"], "teraTypes": ["Steel"] } ] @@ -4690,61 +5483,64 @@ { "role": "Bulky Setup", "movepool": ["Close Combat", "Flame Charge", "Knock Off", "Psychic", "Sunsteel Strike"], - "teraTypes": ["Dark", "Fighting"] - }, - { - "role": "Fast Attacker", - "movepool": ["Close Combat", "Flare Blitz", "Knock Off", "Psychic Fangs", "Sunsteel Strike"], + "abilities": ["Full Metal Body"], "teraTypes": ["Dark", "Fighting"] }, { "role": "Bulky Attacker", "movepool": ["Close Combat", "Flare Blitz", "Knock Off", "Morning Sun", "Psychic Fangs", "Sunsteel Strike"], + "abilities": ["Full Metal Body"], "teraTypes": ["Water"] } ] }, "lunala": { - "level": 73, + "level": 70, "sets": [ { "role": "Bulky Setup", "movepool": ["Calm Mind", "Moonblast", "Moongeist Beam", "Moonlight"], + "abilities": ["Shadow Shield"], "teraTypes": ["Fairy"] }, { "role": "Fast Bulky Setup", "movepool": ["Calm Mind", "Moongeist Beam", "Moonlight", "Psyshock"], + "abilities": ["Shadow Shield"], "teraTypes": ["Dark", "Fairy"] } ] }, "necrozma": { - "level": 81, + "level": 80, "sets": [ { "role": "Setup Sweeper", "movepool": ["Dragon Dance", "Earthquake", "Knock Off", "Photon Geyser", "Swords Dance"], + "abilities": ["Prism Armor"], "teraTypes": ["Dark", "Ground", "Steel"] }, { "role": "Bulky Setup", "movepool": ["Calm Mind", "Earth Power", "Heat Wave", "Moonlight", "Photon Geyser"], + "abilities": ["Prism Armor"], "teraTypes": ["Fairy", "Ground", "Steel"] } ] }, "necrozmaduskmane": { - "level": 68, + "level": 69, "sets": [ { "role": "Bulky Setup", - "movepool": ["Dragon Dance", "Earthquake", "Moonlight", "Sunsteel Strike"], + "movepool": ["Dragon Dance", "Earthquake", "Morning Sun", "Sunsteel Strike"], + "abilities": ["Prism Armor"], "teraTypes": ["Ground", "Steel", "Water"] }, { "role": "Setup Sweeper", "movepool": ["Dragon Dance", "Earthquake", "Photon Geyser", "Sunsteel Strike"], + "abilities": ["Prism Armor"], "teraTypes": ["Ground", "Steel", "Water"] } ] @@ -4752,44 +5548,56 @@ "necrozmadawnwings": { "level": 76, "sets": [ - { - "role": "Tera Blast user", - "movepool": ["Moongeist Beam", "Photon Geyser", "Tera Blast", "Trick Room"], - "teraTypes": ["Fairy"] - }, { "role": "Bulky Setup", "movepool": ["Calm Mind", "Moongeist Beam", "Moonlight", "Photon Geyser"], + "abilities": ["Prism Armor"], "teraTypes": ["Dark", "Fairy"] + }, + { + "role": "Setup Sweeper", + "movepool": ["Brick Break", "Dragon Dance", "Moongeist Beam", "Photon Geyser"], + "abilities": ["Prism Armor"], + "teraTypes": ["Fighting"] } ] }, "magearna": { - "level": 78, + "level": 77, "sets": [ { "role": "Bulky Attacker", "movepool": ["Aura Sphere", "Flash Cannon", "Fleur Cannon", "Pain Split", "Spikes", "Thunder Wave", "Volt Switch"], + "abilities": ["Soul-Heart"], "teraTypes": ["Fairy", "Fighting", "Water"] }, { "role": "Bulky Setup", "movepool": ["Calm Mind", "Flash Cannon", "Fleur Cannon", "Shift Gear"], + "abilities": ["Soul-Heart"], "teraTypes": ["Fairy", "Flying", "Steel", "Water"] }, { "role": "Tera Blast user", "movepool": ["Fleur Cannon", "Iron Head", "Shift Gear", "Tera Blast"], + "abilities": ["Soul-Heart"], "teraTypes": ["Ground"] } ] }, "rillaboom": { - "level": 80, + "level": 79, "sets": [ { "role": "Wallbreaker", - "movepool": ["Grassy Glide", "High Horsepower", "Knock Off", "Swords Dance", "U-turn", "Wood Hammer"], + "movepool": ["Grassy Glide", "Knock Off", "Swords Dance", "U-turn", "Wood Hammer"], + "abilities": ["Grassy Surge"], + "teraTypes": ["Grass"] + }, + { + "role": "Fast Attacker", + "movepool": ["Grassy Glide", "High Horsepower", "Swords Dance", "U-turn", "Wood Hammer"], + "abilities": ["Grassy Surge"], "teraTypes": ["Grass"] } ] @@ -4797,10 +5605,23 @@ "cinderace": { "level": 77, "sets": [ + { + "role": "Wallbreaker", + "movepool": ["Gunk Shot", "High Jump Kick", "Pyro Ball", "U-turn"], + "abilities": ["Libero"], + "teraTypes": ["Fire"] + }, + { + "role": "Fast Support", + "movepool": ["Court Change", "High Jump Kick", "Pyro Ball", "Sucker Punch"], + "abilities": ["Libero"], + "teraTypes": ["Fighting", "Fire"] + }, { "role": "Fast Attacker", - "movepool": ["Court Change", "Gunk Shot", "High Jump Kick", "Pyro Ball", "Sucker Punch", "U-turn"], - "teraTypes": ["Fighting", "Fire", "Poison"] + "movepool": ["Court Change", "Gunk Shot", "High Jump Kick", "Pyro Ball", "U-turn"], + "abilities": ["Libero"], + "teraTypes": ["Fighting"] } ] }, @@ -4810,22 +5631,25 @@ { "role": "Fast Attacker", "movepool": ["Dark Pulse", "Hydro Pump", "Ice Beam", "U-turn"], + "abilities": ["Torrent"], "teraTypes": ["Water"] }, { "role": "Wallbreaker", "movepool": ["Hydro Pump", "Ice Beam", "Scald", "U-turn"], + "abilities": ["Torrent"], "teraTypes": ["Water"] } ] }, "greedent": { - "level": 87, + "level": 86, "sets": [ { "role": "Bulky Setup", - "movepool": ["Body Slam", "Double-Edge", "Earthquake", "Knock Off", "Psychic Fangs", "Swords Dance"], - "teraTypes": ["Ground", "Psychic"] + "movepool": ["Body Slam", "Double-Edge", "Earthquake", "Knock Off", "Swords Dance"], + "abilities": ["Cheek Pouch"], + "teraTypes": ["Ghost", "Ground"] } ] }, @@ -4835,26 +5659,35 @@ { "role": "Bulky Support", "movepool": ["Body Press", "Brave Bird", "Defog", "Roost", "U-turn"], + "abilities": ["Mirror Armor", "Pressure"], "teraTypes": ["Dragon"] } ] }, "drednaw": { - "level": 80, + "level": 81, "sets": [ { "role": "Setup Sweeper", - "movepool": ["Crunch", "Earthquake", "Liquidation", "Shell Smash", "Stone Edge"], - "teraTypes": ["Dark", "Ground", "Water"] + "movepool": ["Crunch", "Liquidation", "Shell Smash", "Stone Edge"], + "abilities": ["Strong Jaw"], + "teraTypes": ["Dark"] + }, + { + "role": "Fast Bulky Setup", + "movepool": ["Earthquake", "Liquidation", "Shell Smash", "Stone Edge"], + "abilities": ["Shell Armor", "Swift Swim"], + "teraTypes": ["Ground", "Water"] } ] }, "coalossal": { - "level": 88, + "level": 89, "sets": [ { "role": "Bulky Support", - "movepool": ["Overheat", "Rapid Spin", "Spikes", "Stealth Rock", "Stone Edge", "Will-O-Wisp"], + "movepool": ["Flamethrower", "Overheat", "Rapid Spin", "Spikes", "Stealth Rock", "Stone Edge", "Will-O-Wisp"], + "abilities": ["Flame Body"], "teraTypes": ["Ghost", "Grass", "Water"] } ] @@ -4865,11 +5698,13 @@ { "role": "Fast Attacker", "movepool": ["Dragon Dance", "Grav Apple", "Outrage", "Sucker Punch", "U-turn"], + "abilities": ["Hustle"], "teraTypes": ["Dragon", "Grass"] }, { "role": "Tera Blast user", "movepool": ["Dragon Dance", "Grav Apple", "Outrage", "Tera Blast"], + "abilities": ["Hustle"], "teraTypes": ["Fire"] } ] @@ -4880,7 +5715,8 @@ { "role": "Bulky Support", "movepool": ["Apple Acid", "Draco Meteor", "Dragon Pulse", "Leech Seed", "Recover"], - "teraTypes": ["Grass", "Steel"] + "abilities": ["Thick Fat"], + "teraTypes": ["Steel"] } ] }, @@ -4890,16 +5726,19 @@ { "role": "Bulky Setup", "movepool": ["Coil", "Earthquake", "Glare", "Rest", "Stone Edge"], + "abilities": ["Shed Skin"], "teraTypes": ["Dragon", "Steel"] }, { - "role": "Bulky Support", + "role": "Bulky Attacker", "movepool": ["Earthquake", "Glare", "Rest", "Stealth Rock", "Stone Edge"], + "abilities": ["Shed Skin"], "teraTypes": ["Dragon", "Water"] }, { "role": "Fast Bulky Setup", "movepool": ["Coil", "Earthquake", "Rock Blast", "Scale Shot"], + "abilities": ["Shed Skin"], "teraTypes": ["Dragon"] } ] @@ -4910,17 +5749,19 @@ { "role": "Bulky Support", "movepool": ["Brave Bird", "Defog", "Roost", "Surf"], + "abilities": ["Gulp Missile"], "teraTypes": ["Ground"] } ] }, "barraskewda": { - "level": 82, + "level": 81, "sets": [ { "role": "Wallbreaker", "movepool": ["Close Combat", "Flip Turn", "Poison Jab", "Psychic Fangs", "Throat Chop", "Waterfall"], - "teraTypes": ["Fighting"] + "abilities": ["Swift Swim"], + "teraTypes": ["Fighting", "Water"] } ] }, @@ -4929,12 +5770,14 @@ "sets": [ { "role": "Fast Attacker", - "movepool": ["Boomburst", "Overdrive", "Sludge Wave", "Toxic Spikes", "Volt Switch"], + "movepool": ["Boomburst", "Overdrive", "Sludge Wave", "Volt Switch"], + "abilities": ["Punk Rock"], "teraTypes": ["Normal"] }, { "role": "Setup Sweeper", "movepool": ["Boomburst", "Gunk Shot", "Overdrive", "Shift Gear"], + "abilities": ["Punk Rock"], "teraTypes": ["Normal"] } ] @@ -4944,27 +5787,31 @@ "sets": [ { "role": "Tera Blast user", - "movepool": ["Giga Drain", "Shadow Ball", "Shell Smash", "Stored Power", "Strength Sap", "Tera Blast"], + "movepool": ["Shadow Ball", "Shell Smash", "Stored Power", "Strength Sap", "Tera Blast"], + "abilities": ["Cursed Body"], "teraTypes": ["Fighting"] }, { "role": "Setup Sweeper", "movepool": ["Giga Drain", "Shadow Ball", "Shell Smash", "Stored Power", "Strength Sap"], + "abilities": ["Cursed Body"], "teraTypes": ["Psychic"] } ] }, "hatterene": { - "level": 86, + "level": 85, "sets": [ { "role": "Bulky Setup", "movepool": ["Calm Mind", "Draining Kiss", "Mystical Fire", "Psychic", "Psyshock"], + "abilities": ["Magic Bounce"], "teraTypes": ["Fairy", "Steel"] }, { "role": "AV Pivot", "movepool": ["Draining Kiss", "Mystical Fire", "Nuzzle", "Psychic", "Psychic Noise"], + "abilities": ["Magic Bounce"], "teraTypes": ["Fairy", "Steel"] } ] @@ -4975,76 +5822,92 @@ { "role": "Bulky Support", "movepool": ["Light Screen", "Parting Shot", "Reflect", "Spirit Break", "Thunder Wave"], - "teraTypes": ["Fairy"] - }, - { - "role": "Fast Bulky Setup", - "movepool": ["Bulk Up", "Rest", "Spirit Break", "Sucker Punch", "Throat Chop", "Thunder Wave"], - "teraTypes": ["Dark"] + "abilities": ["Prankster"], + "teraTypes": ["Poison", "Steel"] }, { "role": "Bulky Attacker", "movepool": ["Parting Shot", "Spirit Break", "Sucker Punch", "Taunt", "Thunder Wave"], - "teraTypes": ["Fairy"] + "abilities": ["Prankster"], + "teraTypes": ["Poison", "Steel"] } ] }, "perrserker": { - "level": 88, + "level": 89, "sets": [ + { + "role": "Fast Attacker", + "movepool": ["Close Combat", "Iron Head", "Knock Off", "Stealth Rock", "U-turn"], + "abilities": ["Tough Claws"], + "teraTypes": ["Fighting"] + }, { "role": "Wallbreaker", "movepool": ["Close Combat", "Iron Head", "Knock Off", "Stealth Rock", "U-turn"], - "teraTypes": ["Fighting", "Steel"] + "abilities": ["Steely Spirit"], + "teraTypes": ["Steel"] } ] }, "alcremie": { - "level": 88, + "level": 90, "sets": [ { "role": "Bulky Setup", "movepool": ["Alluring Voice", "Calm Mind", "Psychic", "Psyshock", "Recover"], + "abilities": ["Aroma Veil"], "teraTypes": ["Poison", "Steel"] }, { "role": "Tera Blast user", "movepool": ["Alluring Voice", "Calm Mind", "Recover", "Tera Blast"], + "abilities": ["Aroma Veil"], "teraTypes": ["Ground"] } ] }, "falinks": { - "level": 85, + "level": 84, "sets": [ { "role": "Setup Sweeper", "movepool": ["Close Combat", "Iron Head", "Knock Off", "No Retreat"], - "teraTypes": ["Dark", "Fighting", "Ghost", "Steel"] + "abilities": ["Defiant"], + "teraTypes": ["Dark", "Steel"] } ] }, "pincurchin": { - "level": 97, + "level": 100, "sets": [ { "role": "Bulky Attacker", - "movepool": ["Recover", "Scald", "Spikes", "Thunderbolt", "Toxic Spikes"], + "movepool": ["Discharge", "Recover", "Scald", "Spikes", "Thunderbolt", "Toxic Spikes"], + "abilities": ["Electric Surge"], "teraTypes": ["Water"] + }, + { + "role": "Bulky Setup", + "movepool": ["Curse", "Liquidation", "Recover", "Zing Zap"], + "abilities": ["Electric Surge"], + "teraTypes": ["Grass", "Water"] } ] }, "frosmoth": { - "level": 83, + "level": 82, "sets": [ { "role": "Tera Blast user", - "movepool": ["Bug Buzz", "Giga Drain", "Hurricane", "Ice Beam", "Quiver Dance", "Tera Blast"], + "movepool": ["Bug Buzz", "Giga Drain", "Ice Beam", "Quiver Dance", "Tera Blast"], + "abilities": ["Ice Scales"], "teraTypes": ["Ground"] }, { "role": "Setup Sweeper", "movepool": ["Bug Buzz", "Giga Drain", "Hurricane", "Ice Beam", "Quiver Dance"], + "abilities": ["Ice Scales"], "teraTypes": ["Water"] } ] @@ -5055,31 +5918,35 @@ { "role": "Fast Attacker", "movepool": ["Earthquake", "Heat Crash", "Rock Polish", "Stealth Rock", "Stone Edge"], + "abilities": ["Power Spot"], "teraTypes": ["Fire", "Ground"] } ] }, "eiscue": { - "level": 86, + "level": 88, "sets": [ { "role": "Setup Sweeper", "movepool": ["Belly Drum", "Ice Spinner", "Iron Head", "Liquidation", "Substitute", "Zen Headbutt"], + "abilities": ["Ice Face"], "teraTypes": ["Water"] }, { "role": "Tera Blast user", "movepool": ["Belly Drum", "Ice Spinner", "Liquidation", "Substitute", "Tera Blast"], - "teraTypes": ["Ground"] + "abilities": ["Ice Face"], + "teraTypes": ["Electric", "Ground"] } ] }, "indeedee": { - "level": 88, + "level": 84, "sets": [ { "role": "Fast Attacker", "movepool": ["Calm Mind", "Dazzling Gleam", "Expanding Force", "Healing Wish", "Hyper Voice", "Shadow Ball"], + "abilities": ["Psychic Surge"], "teraTypes": ["Psychic"] } ] @@ -5090,21 +5957,24 @@ { "role": "Fast Attacker", "movepool": ["Calm Mind", "Dazzling Gleam", "Healing Wish", "Hyper Voice", "Psychic", "Psyshock", "Shadow Ball"], + "abilities": ["Psychic Surge"], "teraTypes": ["Fairy", "Psychic"] } ] }, "morpeko": { - "level": 87, + "level": 88, "sets": [ { "role": "Fast Support", "movepool": ["Aura Wheel", "Parting Shot", "Protect", "Rapid Spin"], - "teraTypes": ["Dark", "Electric"] + "abilities": ["Hunger Switch"], + "teraTypes": ["Electric"] }, { "role": "Bulky Attacker", "movepool": ["Aura Wheel", "Knock Off", "Protect", "Rapid Spin"], + "abilities": ["Hunger Switch"], "teraTypes": ["Electric"] } ] @@ -5115,11 +5985,13 @@ { "role": "Wallbreaker", "movepool": ["Earthquake", "Iron Head", "Play Rough", "Rock Slide", "Stealth Rock", "Superpower"], - "teraTypes": ["Fairy", "Steel"] + "abilities": ["Sheer Force"], + "teraTypes": ["Fairy"] }, { "role": "Bulky Attacker", "movepool": ["Earthquake", "Heat Crash", "Heavy Slam", "Knock Off", "Stone Edge", "Supercell Slam", "Superpower"], + "abilities": ["Heavy Metal"], "teraTypes": ["Fire", "Steel"] } ] @@ -5129,13 +6001,9 @@ "sets": [ { "role": "Bulky Attacker", - "movepool": ["Body Press", "Draco Meteor", "Flash Cannon", "Iron Defense", "Stealth Rock", "Thunder Wave"], + "movepool": ["Body Press", "Draco Meteor", "Dragon Tail", "Flash Cannon", "Iron Defense", "Stealth Rock", "Thunder Wave"], + "abilities": ["Light Metal"], "teraTypes": ["Fighting"] - }, - { - "role": "Bulky Support", - "movepool": ["Dragon Tail", "Flash Cannon", "Rest", "Sleep Talk"], - "teraTypes": ["Fairy", "Water"] } ] }, @@ -5145,12 +6013,20 @@ { "role": "Fast Attacker", "movepool": ["Draco Meteor", "Fire Blast", "Shadow Ball", "Thunderbolt", "U-turn"], + "abilities": ["Infiltrator"], "teraTypes": ["Dragon", "Fire", "Ghost"] }, { "role": "Tera Blast user", "movepool": ["Dragon Dance", "Dragon Darts", "Fire Blast", "Tera Blast"], + "abilities": ["Clear Body"], "teraTypes": ["Ghost"] + }, + { + "role": "Fast Support", + "movepool": ["Dragon Darts", "Hex", "U-turn", "Will-O-Wisp"], + "abilities": ["Cursed Body", "Infiltrator"], + "teraTypes": ["Dragon", "Fairy"] } ] }, @@ -5160,6 +6036,7 @@ { "role": "Fast Attacker", "movepool": ["Close Combat", "Crunch", "Play Rough", "Psychic Fangs", "Swords Dance", "Wild Charge"], + "abilities": ["Intrepid Sword"], "teraTypes": ["Fighting"] } ] @@ -5170,32 +6047,36 @@ { "role": "Setup Sweeper", "movepool": ["Behemoth Blade", "Close Combat", "Play Rough", "Swords Dance"], + "abilities": ["Intrepid Sword"], "teraTypes": ["Fighting"] } ] }, "zamazenta": { - "level": 72, + "level": 71, "sets": [ { "role": "Bulky Attacker", - "movepool": ["Close Combat", "Crunch", "Iron Head", "Psychic Fangs", "Stone Edge", "Wild Charge"], + "movepool": ["Close Combat", "Crunch", "Iron Head", "Psychic Fangs", "Stone Edge"], + "abilities": ["Dauntless Shield"], "teraTypes": ["Dark", "Fighting", "Steel"] }, { "role": "Bulky Setup", "movepool": ["Body Press", "Crunch", "Iron Defense", "Iron Head", "Rest", "Stone Edge"], + "abilities": ["Dauntless Shield"], "teraTypes": ["Fighting", "Steel"] } ] }, "zamazentacrowned": { - "level": 69, + "level": 68, "sets": [ { "role": "Bulky Setup", - "movepool": ["Behemoth Bash", "Body Press", "Crunch", "Iron Defense", "Stone Edge"], - "teraTypes": ["Fighting"] + "movepool": ["Body Press", "Crunch", "Heavy Slam", "Iron Defense", "Stone Edge", "Substitute"], + "abilities": ["Dauntless Shield"], + "teraTypes": ["Fighting", "Ghost"] } ] }, @@ -5205,12 +6086,20 @@ { "role": "Bulky Attacker", "movepool": ["Dynamax Cannon", "Fire Blast", "Recover", "Sludge Bomb"], + "abilities": ["Pressure"], "teraTypes": ["Dragon", "Fire"] }, { "role": "Bulky Support", "movepool": ["Dynamax Cannon", "Flamethrower", "Recover", "Toxic", "Toxic Spikes"], + "abilities": ["Pressure"], "teraTypes": ["Dragon", "Water"] + }, + { + "role": "Setup Sweeper", + "movepool": ["Dynamax Cannon", "Fire Blast", "Meteor Beam", "Sludge Bomb"], + "abilities": ["Pressure"], + "teraTypes": ["Dragon", "Fire", "Poison"] } ] }, @@ -5220,7 +6109,8 @@ { "role": "Fast Attacker", "movepool": ["Close Combat", "Poison Jab", "Sucker Punch", "Swords Dance", "U-turn", "Wicked Blow"], - "teraTypes": ["Dark", "Fighting"] + "abilities": ["Unseen Fist"], + "teraTypes": ["Dark", "Fighting", "Poison"] } ] }, @@ -5230,6 +6120,7 @@ { "role": "Fast Attacker", "movepool": ["Aqua Jet", "Close Combat", "Ice Spinner", "Surging Strikes", "Swords Dance", "U-turn"], + "abilities": ["Unseen Fist"], "teraTypes": ["Water"] } ] @@ -5240,26 +6131,30 @@ { "role": "Fast Bulky Setup", "movepool": ["Close Combat", "Knock Off", "Power Whip", "Swords Dance", "Synthesis"], + "abilities": ["Leaf Guard"], "teraTypes": ["Dark", "Fighting", "Grass"] }, { "role": "Fast Attacker", "movepool": ["Close Combat", "Knock Off", "Power Whip", "U-turn"], + "abilities": ["Leaf Guard"], "teraTypes": ["Dark", "Fighting", "Grass"] } ] }, "regieleki": { - "level": 78, + "level": 79, "sets": [ { "role": "Fast Support", "movepool": ["Explosion", "Rapid Spin", "Thunderbolt", "Volt Switch"], + "abilities": ["Transistor"], "teraTypes": ["Electric"] }, { "role": "Tera Blast user", "movepool": ["Rapid Spin", "Tera Blast", "Thunderbolt", "Volt Switch"], + "abilities": ["Transistor"], "teraTypes": ["Ice"] } ] @@ -5268,18 +6163,21 @@ "level": 77, "sets": [ { - "role": "Bulky Attacker", - "movepool": ["Draco Meteor", "Dragon Dance", "Earthquake", "Fire Fang", "Outrage"], + "role": "Setup Sweeper", + "movepool": ["Draco Meteor", "Dragon Dance", "Earthquake", "Outrage"], + "abilities": ["Dragon's Maw"], "teraTypes": ["Dragon"] }, { "role": "Tera Blast user", "movepool": ["Dragon Claw", "Dragon Dance", "Earthquake", "Tera Blast"], + "abilities": ["Dragon's Maw"], "teraTypes": ["Steel"] }, { "role": "Fast Attacker", "movepool": ["Draco Meteor", "Dragon Energy", "Earthquake", "Outrage"], + "abilities": ["Dragon's Maw"], "teraTypes": ["Dragon"] } ] @@ -5290,6 +6188,7 @@ { "role": "Bulky Attacker", "movepool": ["Close Combat", "Heavy Slam", "High Horsepower", "Icicle Crash", "Swords Dance"], + "abilities": ["Chilling Neigh"], "teraTypes": ["Fighting", "Ground", "Steel"] } ] @@ -5300,11 +6199,13 @@ { "role": "Setup Sweeper", "movepool": ["Dark Pulse", "Draining Kiss", "Nasty Plot", "Shadow Ball", "Substitute", "Will-O-Wisp"], + "abilities": ["Grim Neigh"], "teraTypes": ["Dark", "Fairy"] }, { "role": "Tera Blast user", "movepool": ["Nasty Plot", "Shadow Ball", "Substitute", "Tera Blast", "Will-O-Wisp"], + "abilities": ["Grim Neigh"], "teraTypes": ["Fighting"] } ] @@ -5313,9 +6214,16 @@ "level": 93, "sets": [ { - "role": "Bulky Support", + "role": "Bulky Setup", "movepool": ["Calm Mind", "Encore", "Giga Drain", "Leech Seed", "Psychic", "Psyshock"], + "abilities": ["Unnerve"], "teraTypes": ["Steel"] + }, + { + "role": "Bulky Attacker", + "movepool": ["Body Press", "Encore", "Giga Drain", "Leech Seed", "Psychic", "Psyshock"], + "abilities": ["Unnerve"], + "teraTypes": ["Fighting", "Steel"] } ] }, @@ -5325,11 +6233,13 @@ { "role": "Bulky Setup", "movepool": ["Agility", "Close Combat", "Glacial Lance", "High Horsepower"], + "abilities": ["As One (Glastrier)"], "teraTypes": ["Fighting", "Ground"] }, { "role": "Wallbreaker", "movepool": ["Close Combat", "Glacial Lance", "High Horsepower", "Trick Room"], + "abilities": ["As One (Glastrier)"], "teraTypes": ["Fighting", "Ground"] } ] @@ -5340,6 +6250,7 @@ { "role": "Fast Attacker", "movepool": ["Astral Barrage", "Nasty Plot", "Pollen Puff", "Psyshock", "Trick"], + "abilities": ["As One (Spectrier)"], "teraTypes": ["Dark", "Ghost"] } ] @@ -5350,6 +6261,7 @@ { "role": "Bulky Attacker", "movepool": ["Body Slam", "Earthquake", "Megahorn", "Psychic Noise", "Thunder Wave", "Thunderbolt"], + "abilities": ["Intimidate"], "teraTypes": ["Ground"] } ] @@ -5360,6 +6272,7 @@ { "role": "Bulky Attacker", "movepool": ["Close Combat", "Defog", "Stone Axe", "Swords Dance", "U-turn", "X-Scissor"], + "abilities": ["Sharpness"], "teraTypes": ["Bug", "Fighting", "Rock"] } ] @@ -5369,7 +6282,8 @@ "sets": [ { "role": "Bulky Attacker", - "movepool": ["Facade", "Headlong Rush", "Swords Dance", "Throat Chop", "Trailblaze"], + "movepool": ["Crunch", "Facade", "Headlong Rush", "Swords Dance", "Throat Chop", "Trailblaze"], + "abilities": ["Guts"], "teraTypes": ["Normal"] } ] @@ -5380,7 +6294,14 @@ { "role": "Bulky Attacker", "movepool": ["Blood Moon", "Calm Mind", "Earth Power", "Moonlight"], + "abilities": ["Mind's Eye"], "teraTypes": ["Ghost", "Normal", "Poison"] + }, + { + "role": "Bulky Setup", + "movepool": ["Blood Moon", "Calm Mind", "Moonlight", "Vacuum Wave"], + "abilities": ["Mind's Eye"], + "teraTypes": ["Fighting", "Ghost", "Normal", "Poison"] } ] }, @@ -5388,13 +6309,15 @@ "level": 79, "sets": [ { - "role": "Tera Blast user", - "movepool": ["Play Rough", "Superpower", "Tera Blast", "Zen Headbutt"], - "teraTypes": ["Flying"] + "role": "Setup Sweeper", + "movepool": ["Play Rough", "Substitute", "Superpower", "Taunt", "Zen Headbutt"], + "abilities": ["Contrary"], + "teraTypes": ["Fighting"] }, { "role": "Fast Bulky Setup", "movepool": ["Calm Mind", "Earth Power", "Moonblast", "Mystical Fire", "Substitute"], + "abilities": ["Cute Charm"], "teraTypes": ["Ground"] } ] @@ -5405,17 +6328,14 @@ { "role": "Bulky Attacker", "movepool": ["Earth Power", "Moonblast", "Mystical Fire", "Psychic", "Superpower"], + "abilities": ["Overcoat"], "teraTypes": ["Fairy", "Ground"] }, { "role": "Bulky Setup", "movepool": ["Agility", "Earth Power", "Moonblast", "Mystical Fire", "Superpower"], + "abilities": ["Overcoat"], "teraTypes": ["Ground"] - }, - { - "role": "Setup Sweeper", - "movepool": ["Calm Mind", "Draining Kiss", "Earth Power", "Iron Defense"], - "teraTypes": ["Fairy", "Ground", "Steel"] } ] }, @@ -5425,6 +6345,7 @@ { "role": "Fast Support", "movepool": ["Flower Trick", "Knock Off", "Toxic Spikes", "Triple Axel", "U-turn"], + "abilities": ["Protean"], "teraTypes": ["Dark", "Grass"] } ] @@ -5435,12 +6356,14 @@ { "role": "Bulky Attacker", "movepool": ["Flame Charge", "Shadow Ball", "Slack Off", "Torch Song"], - "teraTypes": ["Fire", "Water"] + "abilities": ["Unaware"], + "teraTypes": ["Fairy", "Water"] }, { "role": "Bulky Support", "movepool": ["Hex", "Slack Off", "Torch Song", "Will-O-Wisp"], - "teraTypes": ["Ghost", "Water"] + "abilities": ["Unaware"], + "teraTypes": ["Fairy", "Water"] } ] }, @@ -5450,11 +6373,13 @@ { "role": "Fast Support", "movepool": ["Aqua Step", "Close Combat", "Knock Off", "Rapid Spin", "Roost", "Triple Axel", "U-turn"], + "abilities": ["Moxie"], "teraTypes": ["Fighting", "Water"] }, { "role": "Setup Sweeper", "movepool": ["Aqua Step", "Close Combat", "Knock Off", "Roost", "Swords Dance", "Triple Axel"], + "abilities": ["Moxie"], "teraTypes": ["Fighting", "Water"] } ] @@ -5465,16 +6390,18 @@ { "role": "Bulky Setup", "movepool": ["Body Slam", "Curse", "Double-Edge", "High Horsepower", "Lash Out"], + "abilities": ["Thick Fat"], "teraTypes": ["Ground"] } ] }, "oinkolognef": { - "level": 93, + "level": 92, "sets": [ { "role": "Bulky Setup", "movepool": ["Body Slam", "Curse", "Double-Edge", "High Horsepower", "Lash Out"], + "abilities": ["Thick Fat"], "teraTypes": ["Ground"] } ] @@ -5485,6 +6412,7 @@ { "role": "Bulky Support", "movepool": ["Circle Throw", "Knock Off", "Spikes", "Sticky Web", "Toxic Spikes", "U-turn"], + "abilities": ["Stakeout"], "teraTypes": ["Ghost"] } ] @@ -5494,17 +6422,20 @@ "sets": [ { "role": "Wallbreaker", - "movepool": ["Axe Kick", "First Impression", "Leech Life", "Sucker Punch"], - "teraTypes": ["Bug", "Fighting"] + "movepool": ["First Impression", "Knock Off", "Leech Life", "Sucker Punch"], + "abilities": ["Tinted Lens"], + "teraTypes": ["Bug"] }, { "role": "Fast Attacker", "movepool": ["First Impression", "Knock Off", "Sucker Punch", "U-turn"], + "abilities": ["Tinted Lens"], "teraTypes": ["Bug"] }, { "role": "Setup Sweeper", "movepool": ["Knock Off", "Leech Life", "Sucker Punch", "Swords Dance"], + "abilities": ["Tinted Lens"], "teraTypes": ["Dark"] } ] @@ -5514,13 +6445,15 @@ "sets": [ { "role": "Fast Attacker", - "movepool": ["Close Combat", "Double Shock", "Ice Punch", "Revival Blessing", "Volt Switch"], + "movepool": ["Close Combat", "Double Shock", "Knock Off", "Nuzzle", "Revival Blessing"], + "abilities": ["Volt Absorb"], "teraTypes": ["Electric"] }, { - "role": "Fast Support", - "movepool": ["Close Combat", "Ice Punch", "Knock Off", "Nuzzle", "Revival Blessing", "Thunder Punch"], - "teraTypes": ["Fighting"] + "role": "Wallbreaker", + "movepool": ["Close Combat", "Double Shock", "Ice Punch", "Revival Blessing"], + "abilities": ["Iron Fist"], + "teraTypes": ["Electric"] } ] }, @@ -5530,51 +6463,46 @@ { "role": "Setup Sweeper", "movepool": ["Bite", "Encore", "Population Bomb", "Tidy Up"], - "teraTypes": ["Normal"] - } - ] - }, - "mausholdfour": { - "level": 76, - "sets": [ - { - "role": "Setup Sweeper", - "movepool": ["Bite", "Encore", "Population Bomb", "Tidy Up"], - "teraTypes": ["Normal"] + "abilities": ["Technician"], + "teraTypes": ["Ghost", "Normal"] } ] }, "dachsbun": { - "level": 90, + "level": 92, "sets": [ { "role": "Bulky Support", - "movepool": ["Body Press", "Play Rough", "Protect", "Wish"], + "movepool": ["Body Press", "Play Rough", "Protect", "Stomping Tantrum", "Wish"], + "abilities": ["Well-Baked Body"], "teraTypes": ["Steel"] } ] }, "arboliva": { - "level": 90, + "level": 91, "sets": [ { "role": "Bulky Attacker", - "movepool": ["Dazzling Gleam", "Earth Power", "Energy Ball", "Hyper Voice", "Strength Sap"], - "teraTypes": ["Fairy", "Grass", "Ground"] + "movepool": ["Earth Power", "Energy Ball", "Hyper Voice", "Strength Sap"], + "abilities": ["Seed Sower"], + "teraTypes": ["Grass", "Ground", "Poison"] }, { "role": "Bulky Support", "movepool": ["Hyper Voice", "Leech Seed", "Protect", "Substitute"], - "teraTypes": ["Water"] + "abilities": ["Harvest"], + "teraTypes": ["Poison", "Water"] } ] }, "squawkabilly": { - "level": 86, + "level": 85, "sets": [ { "role": "Wallbreaker", "movepool": ["Brave Bird", "Facade", "Protect", "Quick Attack", "U-turn"], + "abilities": ["Guts"], "teraTypes": ["Normal"] } ] @@ -5585,16 +6513,18 @@ { "role": "Wallbreaker", "movepool": ["Brave Bird", "Double-Edge", "Foul Play", "Parting Shot", "Quick Attack"], - "teraTypes": ["Dark", "Flying", "Normal"] + "abilities": ["Hustle"], + "teraTypes": ["Flying", "Normal"] } ] }, "squawkabillyblue": { - "level": 86, + "level": 85, "sets": [ { "role": "Wallbreaker", "movepool": ["Brave Bird", "Facade", "Protect", "Quick Attack", "U-turn"], + "abilities": ["Guts"], "teraTypes": ["Normal"] } ] @@ -5605,37 +6535,48 @@ { "role": "Wallbreaker", "movepool": ["Brave Bird", "Double-Edge", "Foul Play", "Parting Shot", "Quick Attack"], - "teraTypes": ["Dark", "Flying", "Normal"] + "abilities": ["Hustle"], + "teraTypes": ["Flying", "Normal"] } ] }, "garganacl": { - "level": 81, + "level": 80, "sets": [ - { - "role": "Bulky Setup", - "movepool": ["Body Press", "Curse", "Earthquake", "Recover", "Stone Edge"], - "teraTypes": ["Dragon", "Fairy"] - }, { "role": "Bulky Attacker", - "movepool": ["Earthquake", "Protect", "Recover", "Salt Cure"], + "movepool": ["Earthquake", "Protect", "Recover", "Salt Cure", "Stealth Rock"], + "abilities": ["Purifying Salt"], "teraTypes": ["Dragon", "Ghost"] }, { "role": "Bulky Support", - "movepool": ["Body Press", "Iron Defense", "Recover", "Salt Cure", "Stealth Rock"], + "movepool": ["Body Press", "Protect", "Recover", "Salt Cure", "Stealth Rock"], + "abilities": ["Purifying Salt"], + "teraTypes": ["Dragon", "Ghost"] + }, + { + "role": "Bulky Setup", + "movepool": ["Body Press", "Iron Defense", "Recover", "Salt Cure"], + "abilities": ["Purifying Salt"], "teraTypes": ["Dragon", "Ghost"] } ] }, "armarouge": { - "level": 81, + "level": 80, "sets": [ { "role": "Wallbreaker", "movepool": ["Armor Cannon", "Aura Sphere", "Energy Ball", "Focus Blast", "Psyshock"], + "abilities": ["Weak Armor"], "teraTypes": ["Fighting", "Fire", "Grass", "Psychic"] + }, + { + "role": "Setup Sweeper", + "movepool": ["Armor Cannon", "Energy Ball", "Meteor Beam", "Psyshock"], + "abilities": ["Weak Armor"], + "teraTypes": ["Fire", "Grass"] } ] }, @@ -5645,6 +6586,7 @@ { "role": "Setup Sweeper", "movepool": ["Bitter Blade", "Close Combat", "Poltergeist", "Shadow Sneak", "Swords Dance"], + "abilities": ["Weak Armor"], "teraTypes": ["Fighting", "Fire", "Ghost"] } ] @@ -5655,6 +6597,7 @@ { "role": "Bulky Attacker", "movepool": ["Muddy Water", "Slack Off", "Thunderbolt", "Toxic", "Volt Switch"], + "abilities": ["Electromorphosis"], "teraTypes": ["Electric", "Water"] } ] @@ -5665,16 +6608,18 @@ { "role": "Fast Support", "movepool": ["Hurricane", "Roost", "Thunder Wave", "Thunderbolt", "U-turn"], - "teraTypes": ["Electric", "Flying"] + "abilities": ["Volt Absorb"], + "teraTypes": ["Electric", "Flying", "Steel", "Water"] } ] }, "mabosstiff": { - "level": 85, + "level": 86, "sets": [ { "role": "Bulky Attacker", - "movepool": ["Crunch", "Fire Fang", "Play Rough", "Psychic Fangs", "Wild Charge"], + "movepool": ["Crunch", "Play Rough", "Psychic Fangs", "Wild Charge"], + "abilities": ["Stakeout"], "teraTypes": ["Dark", "Fairy"] } ] @@ -5685,16 +6630,19 @@ { "role": "AV Pivot", "movepool": ["Gunk Shot", "Knock Off", "Super Fang", "U-turn"], + "abilities": ["Poison Touch"], "teraTypes": ["Dark"] }, { "role": "Fast Support", "movepool": ["Encore", "Gunk Shot", "Knock Off", "Parting Shot"], + "abilities": ["Prankster"], "teraTypes": ["Dark"] }, { "role": "Setup Sweeper", "movepool": ["Gunk Shot", "Knock Off", "Low Kick", "Swords Dance"], + "abilities": ["Poison Touch"], "teraTypes": ["Dark"] } ] @@ -5704,12 +6652,8 @@ "sets": [ { "role": "Fast Support", - "movepool": ["Poltergeist", "Power Whip", "Rapid Spin", "Spikes", "Strength Sap"], - "teraTypes": ["Fairy", "Steel", "Water"] - }, - { - "role": "Bulky Support", - "movepool": ["Leech Seed", "Poltergeist", "Power Whip", "Substitute"], + "movepool": ["Leech Seed", "Poltergeist", "Power Whip", "Rapid Spin", "Spikes", "Strength Sap", "Substitute"], + "abilities": ["Wind Rider"], "teraTypes": ["Fairy", "Steel", "Water"] } ] @@ -5718,8 +6662,9 @@ "level": 87, "sets": [ { - "role": "Bulky Attacker", + "role": "Bulky Support", "movepool": ["Earth Power", "Giga Drain", "Knock Off", "Leaf Storm", "Rapid Spin", "Spore", "Toxic"], + "abilities": ["Mycelium Might"], "teraTypes": ["Water"] } ] @@ -5730,11 +6675,13 @@ { "role": "Fast Attacker", "movepool": ["Crabhammer", "High Horsepower", "Knock Off", "Stealth Rock", "Stone Edge"], + "abilities": ["Regenerator"], "teraTypes": ["Dark", "Ground", "Rock", "Water"] }, { "role": "Setup Sweeper", "movepool": ["Crabhammer", "High Horsepower", "Knock Off", "Stone Edge", "Swords Dance"], + "abilities": ["Anger Shell"], "teraTypes": ["Dark", "Ground", "Rock", "Water"] } ] @@ -5745,26 +6692,30 @@ { "role": "Bulky Attacker", "movepool": ["Flamethrower", "Leech Seed", "Protect", "Substitute"], - "teraTypes": ["Steel", "Water"] + "abilities": ["Chlorophyll"], + "teraTypes": ["Steel"] }, { "role": "Fast Attacker", "movepool": ["Energy Ball", "Flamethrower", "Leaf Storm", "Overheat"], + "abilities": ["Chlorophyll"], "teraTypes": ["Fire", "Grass"] }, { "role": "Wallbreaker", "movepool": ["Energy Ball", "Fire Blast", "Stomping Tantrum", "Sunny Day"], + "abilities": ["Chlorophyll"], "teraTypes": ["Fire", "Grass", "Ground"] } ] }, "rabsca": { - "level": 90, + "level": 91, "sets": [ { - "role": "Bulky Support", - "movepool": ["Bug Buzz", "Earth Power", "Psychic", "Revival Blessing", "Trick Room"], + "role": "Wallbreaker", + "movepool": ["Bug Buzz", "Earth Power", "Psychic", "Recover", "Revival Blessing", "Trick Room"], + "abilities": ["Synchronize"], "teraTypes": ["Steel"] } ] @@ -5775,11 +6726,13 @@ { "role": "Wallbreaker", "movepool": ["Dazzling Gleam", "Lumina Crash", "Shadow Ball", "U-turn"], - "teraTypes": ["Fairy", "Ghost", "Psychic"] + "abilities": ["Speed Boost"], + "teraTypes": ["Fairy", "Psychic"] }, { "role": "Fast Bulky Setup", "movepool": ["Calm Mind", "Dazzling Gleam", "Protect", "Roost", "Stored Power", "Substitute"], + "abilities": ["Speed Boost"], "teraTypes": ["Fairy"] } ] @@ -5790,11 +6743,13 @@ { "role": "Bulky Attacker", "movepool": ["Encore", "Gigaton Hammer", "Knock Off", "Play Rough", "Stealth Rock", "Thunder Wave"], + "abilities": ["Mold Breaker"], "teraTypes": ["Water"] }, { "role": "Setup Sweeper", "movepool": ["Gigaton Hammer", "Knock Off", "Play Rough", "Swords Dance"], + "abilities": ["Mold Breaker"], "teraTypes": ["Steel"] } ] @@ -5804,7 +6759,8 @@ "sets": [ { "role": "Fast Attacker", - "movepool": ["Aqua Jet", "Liquidation", "Stomping Tantrum", "Sucker Punch", "Throat Chop"], + "movepool": ["Aqua Jet", "Liquidation", "Stomping Tantrum", "Throat Chop"], + "abilities": ["Gooey"], "teraTypes": ["Dark", "Ground", "Water"] } ] @@ -5814,8 +6770,15 @@ "sets": [ { "role": "Fast Attacker", - "movepool": ["Brave Bird", "Hone Claws", "Knock Off", "Stone Edge", "Sucker Punch", "U-turn"], + "movepool": ["Brave Bird", "Knock Off", "Roost", "Stone Edge", "Sucker Punch", "U-turn"], + "abilities": ["Rocky Payload"], "teraTypes": ["Rock"] + }, + { + "role": "Bulky Support", + "movepool": ["Brave Bird", "Knock Off", "Roost", "Stealth Rock", "Sucker Punch", "U-turn"], + "abilities": ["Big Pecks"], + "teraTypes": ["Dark", "Steel"] } ] }, @@ -5823,18 +6786,26 @@ "level": 77, "sets": [ { - "role": "Bulky Attacker", - "movepool": ["Bulk Up", "Close Combat", "Flip Turn", "Ice Punch", "Jet Punch", "Wave Crash"], + "role": "Wallbreaker", + "movepool": ["Close Combat", "Flip Turn", "Jet Punch", "Wave Crash"], + "abilities": ["Zero to Hero"], "teraTypes": ["Fighting", "Water"] + }, + { + "role": "Bulky Setup", + "movepool": ["Bulk Up", "Drain Punch", "Ice Punch", "Jet Punch", "Wave Crash"], + "abilities": ["Zero to Hero"], + "teraTypes": ["Dragon", "Steel"] } ] }, "revavroom": { - "level": 80, + "level": 79, "sets": [ { "role": "Fast Attacker", "movepool": ["Gunk Shot", "High Horsepower", "Iron Head", "Shift Gear"], + "abilities": ["Filter"], "teraTypes": ["Ground"] } ] @@ -5845,7 +6816,8 @@ { "role": "Fast Support", "movepool": ["Draco Meteor", "Knock Off", "Rapid Spin", "Shed Tail", "Taunt"], - "teraTypes": ["Dragon", "Ghost", "Steel"] + "abilities": ["Regenerator"], + "teraTypes": ["Dragon", "Fairy", "Ghost", "Steel"] } ] }, @@ -5855,22 +6827,31 @@ { "role": "Bulky Setup", "movepool": ["Body Press", "Coil", "Iron Tail", "Rest"], + "abilities": ["Earth Eater"], "teraTypes": ["Electric", "Fighting"] }, { - "role": "Bulky Support", - "movepool": ["Body Press", "Iron Head", "Rest", "Shed Tail", "Spikes", "Stealth Rock"], - "teraTypes": ["Electric", "Poison"] + "role": "Bulky Attacker", + "movepool": ["Body Press", "Heavy Slam", "Rest", "Shed Tail", "Spikes", "Stealth Rock"], + "abilities": ["Earth Eater"], + "teraTypes": ["Electric", "Fighting", "Ghost", "Poison"] } ] }, "glimmora": { - "level": 76, + "level": 75, "sets": [ { "role": "Fast Support", - "movepool": ["Earth Power", "Energy Ball", "Mortal Spin", "Power Gem", "Sludge Wave", "Spikes", "Stealth Rock", "Toxic"], + "movepool": ["Earth Power", "Mortal Spin", "Power Gem", "Sludge Wave", "Spikes", "Stealth Rock"], + "abilities": ["Toxic Debris"], "teraTypes": ["Ground"] + }, + { + "role": "Setup Sweeper", + "movepool": ["Earth Power", "Energy Ball", "Meteor Beam", "Sludge Wave"], + "abilities": ["Toxic Debris"], + "teraTypes": ["Grass"] } ] }, @@ -5879,33 +6860,38 @@ "sets": [ { "role": "Bulky Attacker", - "movepool": ["Body Press", "Poltergeist", "Roar", "Shadow Sneak", "Trick", "Will-O-Wisp"], + "movepool": ["Body Press", "Play Rough", "Poltergeist", "Roar", "Shadow Sneak", "Trick", "Will-O-Wisp"], + "abilities": ["Fluffy"], "teraTypes": ["Fighting"] }, { "role": "Bulky Support", "movepool": ["Body Press", "Poltergeist", "Rest", "Sleep Talk"], + "abilities": ["Fluffy"], "teraTypes": ["Fighting"] }, { "role": "AV Pivot", "movepool": ["Body Press", "Play Rough", "Poltergeist", "Shadow Sneak"], + "abilities": ["Fluffy"], "teraTypes": ["Fairy", "Fighting"] } ] }, "flamigo": { - "level": 83, + "level": 82, "sets": [ { "role": "Fast Attacker", "movepool": ["Brave Bird", "Close Combat", "Throat Chop", "U-turn"], + "abilities": ["Scrappy"], "teraTypes": ["Fighting"] }, { "role": "Setup Sweeper", "movepool": ["Brave Bird", "Close Combat", "Roost", "Swords Dance", "Throat Chop"], - "teraTypes": ["Fighting"] + "abilities": ["Scrappy"], + "teraTypes": ["Fighting", "Steel"] } ] }, @@ -5914,12 +6900,14 @@ "sets": [ { "role": "Wallbreaker", - "movepool": ["Earthquake", "Ice Shard", "Icicle Crash", "Liquidation", "Play Rough"], - "teraTypes": ["Fairy", "Water"] + "movepool": ["Earthquake", "Ice Shard", "Icicle Crash", "Liquidation", "Superpower"], + "abilities": ["Sheer Force"], + "teraTypes": ["Water"] }, { "role": "Bulky Setup", "movepool": ["Belly Drum", "Earthquake", "Ice Shard", "Ice Spinner"], + "abilities": ["Slush Rush", "Thick Fat"], "teraTypes": ["Ice"] } ] @@ -5930,11 +6918,13 @@ { "role": "Fast Attacker", "movepool": ["Aqua Cutter", "Aqua Jet", "Flip Turn", "Night Slash", "Psycho Cut"], - "teraTypes": ["Water"] + "abilities": ["Sharpness"], + "teraTypes": ["Dark", "Water"] }, { "role": "Setup Sweeper", "movepool": ["Aqua Cutter", "Fillet Away", "Night Slash", "Psycho Cut"], + "abilities": ["Sharpness"], "teraTypes": ["Dark", "Psychic", "Water"] } ] @@ -5945,61 +6935,58 @@ { "role": "Bulky Setup", "movepool": ["Curse", "Rest", "Sleep Talk", "Wave Crash"], + "abilities": ["Unaware"], "teraTypes": ["Dragon", "Fairy"] } ] }, "tatsugiri": { - "level": 86, + "level": 87, "sets": [ { "role": "Fast Support", "movepool": ["Draco Meteor", "Hydro Pump", "Nasty Plot", "Rapid Spin", "Surf"], + "abilities": ["Storm Drain"], "teraTypes": ["Water"] } ] }, "farigiraf": { - "level": 92, + "level": 91, "sets": [ { "role": "Bulky Support", "movepool": ["Body Slam", "Protect", "Psychic Noise", "Wish"], + "abilities": ["Sap Sipper"], "teraTypes": ["Fairy", "Ground", "Water"] }, { "role": "Bulky Attacker", "movepool": ["Future Sight", "Hyper Voice", "Protect", "Wish"], + "abilities": ["Sap Sipper"], "teraTypes": ["Fairy", "Ground", "Water"] } ] }, "dudunsparce": { - "level": 82, + "level": 83, "sets": [ { - "role": "Bulky Attacker", + "role": "Bulky Support", "movepool": ["Earthquake", "Glare", "Headbutt", "Roost"], + "abilities": ["Serene Grace"], "teraTypes": ["Ghost", "Ground"] }, - { - "role": "Bulky Support", - "movepool": ["Boomburst", "Calm Mind", "Earth Power", "Roost", "Shadow Ball"], - "teraTypes": ["Ghost"] - } - ] - }, - "dudunsparcethreesegment": { - "level": 82, - "sets": [ { "role": "Bulky Attacker", - "movepool": ["Earthquake", "Glare", "Headbutt", "Roost"], - "teraTypes": ["Ghost", "Ground"] + "movepool": ["Boomburst", "Calm Mind", "Earth Power", "Roost"], + "abilities": ["Rattled"], + "teraTypes": ["Fairy", "Ghost"] }, { - "role": "Bulky Support", - "movepool": ["Boomburst", "Calm Mind", "Earth Power", "Roost", "Shadow Ball"], + "role": "Bulky Setup", + "movepool": ["Boomburst", "Calm Mind", "Roost", "Shadow Ball"], + "abilities": ["Rattled"], "teraTypes": ["Ghost"] } ] @@ -6010,6 +6997,7 @@ { "role": "Bulky Attacker", "movepool": ["Iron Head", "Kowtow Cleave", "Sucker Punch", "Swords Dance"], + "abilities": ["Supreme Overlord"], "teraTypes": ["Dark", "Flying"] } ] @@ -6017,14 +7005,22 @@ "greattusk": { "level": 77, "sets": [ + { + "role": "Fast Bulky Setup", + "movepool": ["Bulk Up", "Close Combat", "Earthquake", "Rapid Spin", "Stone Edge"], + "abilities": ["Protosynthesis"], + "teraTypes": ["Ground", "Steel"] + }, { "role": "Bulky Setup", - "movepool": ["Bulk Up", "Close Combat", "Earthquake", "Ice Spinner", "Rapid Spin"], + "movepool": ["Bulk Up", "Close Combat", "Earthquake", "Rapid Spin", "Stone Edge"], + "abilities": ["Protosynthesis"], "teraTypes": ["Ground", "Steel"] }, { "role": "Bulky Support", - "movepool": ["Close Combat", "Headlong Rush", "Ice Spinner", "Knock Off", "Rapid Spin", "Stealth Rock"], + "movepool": ["Close Combat", "Headlong Rush", "Ice Spinner", "Knock Off", "Rapid Spin", "Stealth Rock", "Stone Edge"], + "abilities": ["Protosynthesis"], "teraTypes": ["Ground", "Steel"] } ] @@ -6034,8 +7030,21 @@ "sets": [ { "role": "Bulky Attacker", - "movepool": ["Close Combat", "Crunch", "Seed Bomb", "Spore", "Sucker Punch"], - "teraTypes": ["Dark", "Fighting"] + "movepool": ["Close Combat", "Seed Bomb", "Spore", "Sucker Punch"], + "abilities": ["Protosynthesis"], + "teraTypes": ["Fighting", "Poison"] + }, + { + "role": "Bulky Support", + "movepool": ["Crunch", "Seed Bomb", "Spore", "Sucker Punch"], + "abilities": ["Protosynthesis"], + "teraTypes": ["Dark", "Poison"] + }, + { + "role": "Wallbreaker", + "movepool": ["Close Combat", "Crunch", "Seed Bomb", "Sucker Punch"], + "abilities": ["Protosynthesis"], + "teraTypes": ["Dark", "Fighting", "Poison"] } ] }, @@ -6045,6 +7054,7 @@ { "role": "Fast Support", "movepool": ["Earth Power", "Spikes", "Stealth Rock", "Thunder Wave", "Thunderbolt", "Volt Switch"], + "abilities": ["Protosynthesis"], "teraTypes": ["Electric", "Grass", "Ground"] } ] @@ -6055,6 +7065,13 @@ { "role": "Bulky Support", "movepool": ["Encore", "Play Rough", "Protect", "Thunder Wave", "Wish"], + "abilities": ["Protosynthesis"], + "teraTypes": ["Poison", "Steel"] + }, + { + "role": "Bulky Attacker", + "movepool": ["Dazzling Gleam", "Encore", "Protect", "Thunder Wave", "Wish"], + "abilities": ["Protosynthesis"], "teraTypes": ["Poison", "Steel"] } ] @@ -6065,36 +7082,47 @@ { "role": "Fast Attacker", "movepool": ["Calm Mind", "Moonblast", "Mystical Fire", "Psyshock", "Shadow Ball", "Thunderbolt"], + "abilities": ["Protosynthesis"], "teraTypes": ["Electric", "Fairy", "Fire", "Ghost", "Psychic"] } ] }, "slitherwing": { - "level": 82, + "level": 81, "sets": [ { - "role": "Bulky Setup", + "role": "Fast Bulky Setup", "movepool": ["Bulk Up", "Close Combat", "Earthquake", "Flame Charge", "Leech Life", "Wild Charge"], + "abilities": ["Protosynthesis"], "teraTypes": ["Electric", "Fighting"] }, { - "role": "Fast Attacker", - "movepool": ["Close Combat", "Earthquake", "First Impression", "Flare Blitz", "U-turn", "Wild Charge"], - "teraTypes": ["Bug", "Electric", "Fighting"] + "role": "Fast Support", + "movepool": ["Close Combat", "Earthquake", "First Impression", "Flare Blitz", "Morning Sun", "U-turn", "Wild Charge"], + "abilities": ["Protosynthesis"], + "teraTypes": ["Bug", "Electric", "Fighting", "Fire"] } ] }, "roaringmoon": { - "level": 73, + "level": 72, "sets": [ { "role": "Setup Sweeper", "movepool": ["Dragon Dance", "Earthquake", "Iron Head", "Knock Off", "Outrage", "Roost"], - "teraTypes": ["Dark", "Dragon", "Ground", "Steel"] + "abilities": ["Protosynthesis"], + "teraTypes": ["Dark", "Dragon", "Ground", "Poison", "Steel"] + }, + { + "role": "Fast Bulky Setup", + "movepool": ["Acrobatics", "Dragon Dance", "Iron Head", "Knock Off", "Outrage"], + "abilities": ["Protosynthesis"], + "teraTypes": ["Flying", "Steel"] }, { "role": "Bulky Attacker", "movepool": ["Iron Head", "Knock Off", "Outrage", "U-turn"], + "abilities": ["Protosynthesis"], "teraTypes": ["Dark", "Dragon", "Steel"] } ] @@ -6105,11 +7133,13 @@ { "role": "Wallbreaker", "movepool": ["Draco Meteor", "Flamethrower", "Flip Turn", "Hydro Pump"], + "abilities": ["Protosynthesis"], "teraTypes": ["Fire", "Water"] }, { "role": "Fast Attacker", "movepool": ["Draco Meteor", "Flamethrower", "Hydro Steam", "Sunny Day"], + "abilities": ["Protosynthesis"], "teraTypes": ["Fire"] } ] @@ -6120,6 +7150,7 @@ { "role": "Bulky Support", "movepool": ["Earthquake", "Iron Head", "Knock Off", "Rapid Spin", "Stealth Rock", "Volt Switch"], + "abilities": ["Quark Drive"], "teraTypes": ["Ground", "Steel"] } ] @@ -6129,12 +7160,8 @@ "sets": [ { "role": "Fast Attacker", - "movepool": ["Discharge", "Energy Ball", "Fiery Dance", "Fire Blast", "Sludge Wave", "U-turn"], - "teraTypes": ["Fire", "Grass"] - }, - { - "role": "Fast Support", - "movepool": ["Energy Ball", "Fiery Dance", "Morning Sun", "Sludge Wave", "Toxic Spikes", "U-turn"], + "movepool": ["Energy Ball", "Fiery Dance", "Fire Blast", "Morning Sun", "Sludge Wave", "Toxic Spikes", "U-turn"], + "abilities": ["Quark Drive"], "teraTypes": ["Fire", "Grass"] } ] @@ -6145,11 +7172,13 @@ { "role": "AV Pivot", "movepool": ["Close Combat", "Drain Punch", "Fake Out", "Heavy Slam", "Ice Punch", "Thunder Punch", "Volt Switch", "Wild Charge"], + "abilities": ["Quark Drive"], "teraTypes": ["Electric", "Fighting"] }, { "role": "Bulky Attacker", "movepool": ["Drain Punch", "Ice Punch", "Swords Dance", "Thunder Punch", "Wild Charge"], + "abilities": ["Quark Drive"], "teraTypes": ["Fighting", "Flying", "Steel"] } ] @@ -6160,6 +7189,7 @@ { "role": "Fast Attacker", "movepool": ["Dark Pulse", "Earth Power", "Fire Blast", "Hurricane", "Hydro Pump", "U-turn"], + "abilities": ["Quark Drive"], "teraTypes": ["Dark", "Flying", "Ground"] } ] @@ -6169,38 +7199,49 @@ "sets": [ { "role": "Fast Support", - "movepool": ["Earthquake", "Spikes", "Stealth Rock", "Stone Edge", "Thunder Punch", "Volt Switch"], - "teraTypes": ["Grass", "Water"] + "movepool": ["Earthquake", "Ice Punch", "Spikes", "Stealth Rock", "Stone Edge", "Volt Switch", "Wild Charge"], + "abilities": ["Quark Drive"], + "teraTypes": ["Flying", "Grass", "Water"] }, { - "role": "Bulky Setup", + "role": "Fast Bulky Setup", "movepool": ["Dragon Dance", "Earthquake", "Ice Punch", "Stone Edge", "Wild Charge"], - "teraTypes": ["Grass", "Ground", "Rock"] + "abilities": ["Quark Drive"], + "teraTypes": ["Flying", "Grass", "Ground", "Rock"] } ] }, "ironbundle": { - "level": 76, + "level": 77, "sets": [ { "role": "Fast Attacker", "movepool": ["Encore", "Flip Turn", "Freeze-Dry", "Hydro Pump", "Ice Beam", "Substitute"], + "abilities": ["Quark Drive"], "teraTypes": ["Ice", "Water"] } ] }, "ironvaliant": { - "level": 79, + "level": 78, "sets": [ { "role": "Setup Sweeper", "movepool": ["Close Combat", "Knock Off", "Spirit Break", "Swords Dance"], + "abilities": ["Quark Drive"], "teraTypes": ["Dark", "Fighting"] }, { "role": "Fast Attacker", "movepool": ["Calm Mind", "Close Combat", "Moonblast", "Psychic"], - "teraTypes": ["Fairy", "Fighting"] + "abilities": ["Quark Drive"], + "teraTypes": ["Fairy", "Fighting", "Steel"] + }, + { + "role": "Wallbreaker", + "movepool": ["Close Combat", "Encore", "Knock Off", "Moonblast"], + "abilities": ["Quark Drive"], + "teraTypes": ["Dark", "Fairy", "Fighting", "Steel"] } ] }, @@ -6210,6 +7251,7 @@ { "role": "Wallbreaker", "movepool": ["Close Combat", "Leaf Blade", "Megahorn", "Psyblade", "Swords Dance"], + "abilities": ["Quark Drive"], "teraTypes": ["Fighting"] } ] @@ -6220,16 +7262,19 @@ { "role": "Fast Attacker", "movepool": ["Earthquake", "Glaive Rush", "Ice Shard", "Icicle Crash"], + "abilities": ["Thermal Exchange"], "teraTypes": ["Dragon", "Ground"] }, { "role": "Setup Sweeper", "movepool": ["Dragon Dance", "Earthquake", "Glaive Rush", "Icicle Crash"], + "abilities": ["Thermal Exchange"], "teraTypes": ["Dragon", "Ground"] }, { "role": "Bulky Setup", "movepool": ["Earthquake", "Icicle Spear", "Scale Shot", "Swords Dance"], + "abilities": ["Thermal Exchange"], "teraTypes": ["Dragon", "Ground"] } ] @@ -6238,13 +7283,15 @@ "level": 77, "sets": [ { - "role": "Fast Attacker", - "movepool": ["Focus Blast", "Make It Rain", "Nasty Plot", "Recover", "Shadow Ball", "Trick"], - "teraTypes": ["Ghost", "Steel"] + "role": "Bulky Attacker", + "movepool": ["Focus Blast", "Make It Rain", "Nasty Plot", "Shadow Ball", "Trick"], + "abilities": ["Good as Gold"], + "teraTypes": ["Fighting", "Ghost", "Steel"] }, { - "role": "Bulky Attacker", - "movepool": ["Make It Rain", "Recover", "Shadow Ball", "Thunder Wave"], + "role": "Bulky Support", + "movepool": ["Make It Rain", "Nasty Plot", "Recover", "Shadow Ball", "Thunder Wave"], + "abilities": ["Good as Gold"], "teraTypes": ["Dark", "Steel", "Water"] } ] @@ -6254,13 +7301,15 @@ "sets": [ { "role": "Bulky Support", - "movepool": ["Earthquake", "Ruination", "Spikes", "Stealth Rock", "Throat Chop", "Whirlwind"], - "teraTypes": ["Ghost", "Ground", "Poison"] + "movepool": ["Earthquake", "Spikes", "Stealth Rock", "Throat Chop", "Whirlwind"], + "abilities": ["Vessel of Ruin"], + "teraTypes": ["Ghost", "Poison"] }, { - "role": "AV Pivot", - "movepool": ["Body Press", "Earthquake", "Heavy Slam", "Ruination", "Stone Edge", "Throat Chop"], - "teraTypes": ["Fighting", "Ground", "Poison", "Steel"] + "role": "Bulky Attacker", + "movepool": ["Earthquake", "Heavy Slam", "Payback", "Ruination", "Spikes", "Stealth Rock"], + "abilities": ["Vessel of Ruin"], + "teraTypes": ["Ghost", "Poison", "Steel"] } ] }, @@ -6268,8 +7317,15 @@ "level": 72, "sets": [ { - "role": "Fast Attacker", + "role": "Wallbreaker", + "movepool": ["Crunch", "Ice Shard", "Icicle Crash", "Sacred Sword", "Throat Chop"], + "abilities": ["Sword of Ruin"], + "teraTypes": ["Dark", "Fighting", "Ice"] + }, + { + "role": "Setup Sweeper", "movepool": ["Ice Shard", "Icicle Crash", "Sacred Sword", "Sucker Punch", "Swords Dance", "Throat Chop"], + "abilities": ["Sword of Ruin"], "teraTypes": ["Dark", "Fighting", "Ice"] } ] @@ -6280,6 +7336,7 @@ { "role": "Bulky Support", "movepool": ["Giga Drain", "Knock Off", "Leech Seed", "Protect", "Ruination", "Stun Spore"], + "abilities": ["Tablets of Ruin"], "teraTypes": ["Poison"] } ] @@ -6290,11 +7347,13 @@ { "role": "Setup Sweeper", "movepool": ["Dark Pulse", "Fire Blast", "Nasty Plot", "Psychic", "Will-O-Wisp"], + "abilities": ["Beads of Ruin"], "teraTypes": ["Dark", "Fire"] }, { "role": "Fast Attacker", "movepool": ["Dark Pulse", "Flamethrower", "Overheat", "Psychic"], + "abilities": ["Beads of Ruin"], "teraTypes": ["Dark", "Fire"] } ] @@ -6304,12 +7363,14 @@ "sets": [ { "role": "Fast Attacker", - "movepool": ["Collision Course", "Flare Blitz", "Outrage", "U-turn"], + "movepool": ["Close Combat", "Flare Blitz", "Outrage", "U-turn"], + "abilities": ["Orichalcum Pulse"], "teraTypes": ["Fire"] }, { "role": "Setup Sweeper", "movepool": ["Collision Course", "Flare Blitz", "Scale Shot", "Swords Dance"], + "abilities": ["Orichalcum Pulse"], "teraTypes": ["Fire"] } ] @@ -6320,11 +7381,13 @@ { "role": "Fast Bulky Setup", "movepool": ["Calm Mind", "Draco Meteor", "Electro Drift", "Substitute"], + "abilities": ["Hadron Engine"], "teraTypes": ["Electric"] }, { "role": "Fast Attacker", "movepool": ["Draco Meteor", "Electro Drift", "Overheat", "Volt Switch"], + "abilities": ["Hadron Engine"], "teraTypes": ["Electric"] } ] @@ -6335,6 +7398,7 @@ { "role": "Bulky Attacker", "movepool": ["Dragon Pulse", "Dragon Tail", "Giga Drain", "Recover", "Sucker Punch"], + "abilities": ["Sticky Hold"], "teraTypes": ["Steel"] } ] @@ -6345,6 +7409,7 @@ { "role": "Bulky Setup", "movepool": ["Calm Mind", "Matcha Gotcha", "Shadow Ball", "Strength Sap"], + "abilities": ["Heatproof"], "teraTypes": ["Steel"] } ] @@ -6355,6 +7420,13 @@ { "role": "Bulky Setup", "movepool": ["Bulk Up", "Drain Punch", "Gunk Shot", "Knock Off"], + "abilities": ["Toxic Chain"], + "teraTypes": ["Dark"] + }, + { + "role": "AV Pivot", + "movepool": ["Drain Punch", "Gunk Shot", "High Horsepower", "Knock Off", "Psychic Fangs"], + "abilities": ["Toxic Chain"], "teraTypes": ["Dark"] } ] @@ -6365,31 +7437,36 @@ { "role": "Fast Attacker", "movepool": ["Focus Blast", "Nasty Plot", "Psyshock", "Sludge Wave", "U-turn"], + "abilities": ["Toxic Chain"], "teraTypes": ["Fighting", "Poison"] }, { "role": "AV Pivot", "movepool": ["Fake Out", "Psychic Noise", "Sludge Wave", "U-turn"], + "abilities": ["Toxic Chain"], "teraTypes": ["Dark"] } ] }, "fezandipiti": { - "level": 81, + "level": 82, "sets": [ { "role": "AV Pivot", "movepool": ["Beat Up", "Gunk Shot", "Heat Wave", "Play Rough", "U-turn"], + "abilities": ["Toxic Chain"], "teraTypes": ["Dark", "Steel", "Water"] }, { "role": "Bulky Attacker", "movepool": ["Beat Up", "Gunk Shot", "Play Rough", "Roost", "U-turn"], + "abilities": ["Toxic Chain"], "teraTypes": ["Dark", "Steel", "Water"] }, { "role": "Tera Blast user", "movepool": ["Gunk Shot", "Play Rough", "Swords Dance", "Tera Blast"], + "abilities": ["Toxic Chain"], "teraTypes": ["Ground"] } ] @@ -6399,12 +7476,14 @@ "sets": [ { "role": "Fast Support", - "movepool": ["Ivy Cudgel", "Knock Off", "Spikes", "Superpower", "Synthesis", "U-turn"], + "movepool": ["Encore", "Ivy Cudgel", "Knock Off", "Spikes", "Superpower", "Synthesis", "U-turn"], + "abilities": ["Defiant"], "teraTypes": ["Grass"] }, { "role": "Setup Sweeper", "movepool": ["Ivy Cudgel", "Knock Off", "Superpower", "Swords Dance"], + "abilities": ["Defiant"], "teraTypes": ["Grass"] } ] @@ -6415,21 +7494,24 @@ { "role": "Bulky Attacker", "movepool": ["Encore", "Ivy Cudgel", "Spikes", "Synthesis", "U-turn", "Wood Hammer"], + "abilities": ["Water Absorb"], "teraTypes": ["Water"] }, { "role": "Setup Sweeper", "movepool": ["Horn Leech", "Ivy Cudgel", "Knock Off", "Play Rough", "Power Whip", "Swords Dance"], + "abilities": ["Water Absorb"], "teraTypes": ["Water"] } ] }, "ogerponhearthflame": { - "level": 75, + "level": 74, "sets": [ { "role": "Setup Sweeper", "movepool": ["Horn Leech", "Ivy Cudgel", "Knock Off", "Power Whip", "Stomping Tantrum", "Swords Dance"], + "abilities": ["Mold Breaker"], "teraTypes": ["Fire"] } ] @@ -6440,126 +7522,149 @@ { "role": "Bulky Attacker", "movepool": ["Encore", "Ivy Cudgel", "Power Whip", "Spikes", "Superpower", "Synthesis"], + "abilities": ["Sturdy"], "teraTypes": ["Rock"] }, { "role": "Setup Sweeper", "movepool": ["Horn Leech", "Ivy Cudgel", "Power Whip", "Superpower", "Swords Dance"], + "abilities": ["Sturdy"], "teraTypes": ["Rock"] } ] }, "archaludon": { - "level": 82, + "level": 78, "sets": [ { - "role": "Setup Sweeper", + "role": "Bulky Setup", "movepool": ["Earthquake", "Iron Head", "Outrage", "Swords Dance"], + "abilities": ["Stamina"], "teraTypes": ["Ground"] }, { "role": "Bulky Attacker", "movepool": ["Body Press", "Draco Meteor", "Dragon Tail", "Flash Cannon", "Stealth Rock", "Thunder Wave", "Thunderbolt"], + "abilities": ["Stamina"], "teraTypes": ["Fighting"] - }, - { - "role": "Fast Attacker", - "movepool": ["Aura Sphere", "Draco Meteor", "Flash Cannon", "Thunderbolt"], - "teraTypes": ["Dragon", "Electric", "Fighting"] } ] }, "hydrapple": { - "level": 82, + "level": 83, "sets": [ { "role": "AV Pivot", - "movepool": ["Dragon Tail", "Earth Power", "Fickle Beam", "Leaf Storm"], + "movepool": ["Dragon Tail", "Earth Power", "Fickle Beam", "Giga Drain", "Leaf Storm"], + "abilities": ["Regenerator"], "teraTypes": ["Steel"] }, { "role": "Fast Bulky Setup", "movepool": ["Earth Power", "Fickle Beam", "Giga Drain", "Nasty Plot", "Recover"], + "abilities": ["Regenerator"], "teraTypes": ["Steel"] }, { "role": "Wallbreaker", "movepool": ["Draco Meteor", "Earth Power", "Fickle Beam", "Leaf Storm"], - "teraTypes": ["Dragon"] + "abilities": ["Regenerator"], + "teraTypes": ["Dragon", "Steel"] } ] }, "gougingfire": { - "level": 78, + "level": 74, "sets": [ { "role": "Setup Sweeper", "movepool": ["Dragon Dance", "Earthquake", "Heat Crash", "Outrage"], + "abilities": ["Protosynthesis"], "teraTypes": ["Ground"] + }, + { + "role": "Bulky Setup", + "movepool": ["Dragon Dance", "Heat Crash", "Morning Sun", "Outrage"], + "abilities": ["Protosynthesis"], + "teraTypes": ["Fairy"] } ] }, "ragingbolt": { - "level": 80, + "level": 78, "sets": [ { "role": "AV Pivot", - "movepool": ["Draco Meteor", "Thunderbolt", "Thunderclap", "Volt Switch"], + "movepool": ["Discharge", "Draco Meteor", "Thunderbolt", "Thunderclap", "Volt Switch"], + "abilities": ["Protosynthesis"], "teraTypes": ["Electric"] }, { - "role": "Bulky Attacker", + "role": "Bulky Setup", "movepool": ["Calm Mind", "Dragon Pulse", "Thunderbolt", "Thunderclap"], - "teraTypes": ["Electric"] + "abilities": ["Protosynthesis"], + "teraTypes": ["Electric", "Fairy"] } ] }, "ironboulder": { - "level": 78, + "level": 77, "sets": [ { "role": "Setup Sweeper", "movepool": ["Close Combat", "Mighty Cleave", "Swords Dance", "Zen Headbutt"], + "abilities": ["Quark Drive"], "teraTypes": ["Fighting"] }, { - "role": "Bulky Setup", + "role": "Fast Bulky Setup", "movepool": ["Close Combat", "Mighty Cleave", "Swords Dance", "Zen Headbutt"], + "abilities": ["Quark Drive"], "teraTypes": ["Fighting"] } ] }, "ironcrown": { - "level": 80, + "level": 79, "sets": [ { - "role": "Bulky Attacker", - "movepool": ["Calm Mind", "Focus Blast", "Psyshock", "Tachyon Cutter", "Volt Switch"], + "role": "Bulky Setup", + "movepool": ["Calm Mind", "Focus Blast", "Psyshock", "Tachyon Cutter"], + "abilities": ["Quark Drive"], + "teraTypes": ["Fighting", "Steel"] + }, + { + "role": "Wallbreaker", + "movepool": ["Focus Blast", "Psyshock", "Tachyon Cutter", "Volt Switch"], + "abilities": ["Quark Drive"], "teraTypes": ["Fighting", "Steel"] } ] }, "terapagos": { - "level": 73, + "level": 76, "sets": [ { - "role": "Bulky Support", - "movepool": ["Calm Mind","Rapid Spin", "Tera Starstorm", "Tri Attack"], + "role": "Setup Sweeper", + "movepool": ["Calm Mind", "Dark Pulse", "Rapid Spin", "Rest", "Tera Starstorm"], + "abilities": ["Tera Shift"], "teraTypes": ["Stellar"] }, { - "role": "Bulky Setup", - "movepool": ["Calm Mind", "Rest", "Sleep Talk", "Tera Starstorm"], + "role": "Fast Bulky Setup", + "movepool": ["Calm Mind", "Earth Power", "Rapid Spin", "Rest", "Tera Starstorm"], + "abilities": ["Tera Shift"], "teraTypes": ["Stellar"] } ] }, "pecharunt": { - "level": 80, + "level": 77, "sets": [ { "role": "Bulky Attacker", "movepool": ["Malignant Chain", "Nasty Plot", "Parting Shot", "Recover", "Shadow Ball"], + "abilities": ["Poison Puppeteer"], "teraTypes": ["Dark"] } ] diff --git a/data/random-teams.ts b/data/random-battles/gen9/teams.ts similarity index 70% rename from data/random-teams.ts rename to data/random-battles/gen9/teams.ts index 0b29141bd331..c332973bcaca 100644 --- a/data/random-teams.ts +++ b/data/random-battles/gen9/teams.ts @@ -1,8 +1,8 @@ -import {Dex, toID} from '../sim/dex'; -import {Utils} from '../lib'; -import {PRNG, PRNGSeed} from '../sim/prng'; -import {RuleTable} from '../sim/dex-formats'; -import {Tags} from './tags'; +import {Dex, toID} from '../../../sim/dex'; +import {Utils} from '../../../lib'; +import {PRNG, PRNGSeed} from '../../../sim/prng'; +import {RuleTable} from '../../../sim/dex-formats'; +import {Tags} from './../../tags'; export interface TeamData { typeCount: {[k: string]: number}; @@ -10,6 +10,7 @@ export interface TeamData { baseFormes: {[k: string]: number}; megaCount?: number; zCount?: number; + wantsTeraCount?: number; has: {[k: string]: number}; forceResult: boolean; weaknesses: {[k: string]: number}; @@ -31,23 +32,30 @@ interface BattleFactorySet { evs?: Partial; ivs?: Partial; } +interface BSSFactorySet { + species: string; + weight: number; + item: string[]; + ability: string; + nature: string; + moves: string[][]; + teraType: string[]; + gender?: string; + wantsTera?: boolean; + evs: number[]; + ivs?: number[]; +} export class MoveCounter extends Utils.Multiset { damagingMoves: Set; - ironFist: number; constructor() { super(); this.damagingMoves = new Set(); - this.ironFist = 0; - } - - get(key: string): number { - return super.get(key) || 0; } } type MoveEnforcementChecker = ( - movePool: string[], moves: Set, abilities: Set, types: string[], + movePool: string[], moves: Set, abilities: string[], types: string[], counter: MoveCounter, species: Species, teamDetails: RandomTeamsTypes.TeamDetails, isLead: boolean, isDoubles: boolean, teraType: string, role: RandomTeamsTypes.Role, ) => boolean; @@ -66,7 +74,7 @@ const PHYSICAL_SETUP = [ ]; // Moves which boost Special Attack: const SPECIAL_SETUP = [ - 'calmmind', 'chargebeam', 'geomancy', 'nastyplot', 'quiverdance', 'tailglow', 'torchsong', + 'calmmind', 'chargebeam', 'geomancy', 'nastyplot', 'quiverdance', 'tailglow', 'takeheart', 'torchsong', ]; // Moves that boost Attack AND Special Attack: const MIXED_SETUP = [ @@ -78,20 +86,20 @@ const SPEED_SETUP = [ ]; // Conglomerate for ease of access const SETUP = [ - 'acidarmor', 'agility', 'autotomize', 'bellydrum', 'bulkup', 'calmmind', 'clangoroussoul', 'coil', 'curse', 'dragondance', + 'acidarmor', 'agility', 'autotomize', 'bellydrum', 'bulkup', 'calmmind', 'clangoroussoul', 'coil', 'cosmicpower', 'curse', 'dragondance', 'flamecharge', 'growth', 'honeclaws', 'howl', 'irondefense', 'meditate', 'nastyplot', 'noretreat', 'poweruppunch', 'quiverdance', - 'rockpolish', 'shellsmash', 'shiftgear', 'swordsdance', 'tailglow', 'tidyup', 'trailblaze', 'workup', 'victorydance', + 'rockpolish', 'shellsmash', 'shiftgear', 'swordsdance', 'tailglow', 'takeheart', 'tidyup', 'trailblaze', 'workup', 'victorydance', ]; const SPEED_CONTROL = [ - 'electroweb', 'glare', 'icywind', 'lowsweep', 'quash', 'rocktomb', 'stringshot', 'tailwind', 'thunderwave', 'trickroom', + 'electroweb', 'glare', 'icywind', 'lowsweep', 'quash', 'stringshot', 'tailwind', 'thunderwave', 'trickroom', ]; // Moves that shouldn't be the only STAB moves: const NO_STAB = [ - 'accelerock', 'aquajet', 'beakblast', 'bounce', 'breakingswipe', 'bulletpunch', 'chatter', 'chloroblast', 'clearsmog', 'covet', + 'accelerock', 'aquajet', 'bounce', 'breakingswipe', 'bulletpunch', 'chatter', 'chloroblast', 'circlethrow', 'clearsmog', 'covet', 'dragontail', 'doomdesire', 'electroweb', 'eruption', 'explosion', 'fakeout', 'feint', 'flamecharge', 'flipturn', 'futuresight', - 'grassyglide', 'iceshard', 'icywind', 'incinerate', 'machpunch', 'meteorbeam', 'mortalspin', 'nuzzle', 'pluck', 'pursuit', 'quickattack', - 'rapidspin', 'reversal', 'selfdestruct', 'shadowsneak', 'skydrop', 'snarl', 'strugglebug', 'suckerpunch', 'uturn', 'watershuriken', - 'vacuumwave', 'voltswitch', 'waterspout', + 'grassyglide', 'iceshard', 'icywind', 'incinerate', 'infestation', 'machpunch', 'meteorbeam', 'mortalspin', 'nuzzle', 'pluck', 'pursuit', + 'quickattack', 'rapidspin', 'reversal', 'selfdestruct', 'shadowsneak', 'skydrop', 'snarl', 'strugglebug', 'suckerpunch', 'uturn', + 'vacuumwave', 'voltswitch', 'watershuriken', 'waterspout', ]; // Hazard-setting moves const HAZARDS = [ @@ -99,7 +107,7 @@ const HAZARDS = [ ]; // Protect and its variants const PROTECT_MOVES = [ - 'banefulbunker', 'protect', 'spikyshield', + 'banefulbunker', 'burningbulwark', 'protect', 'silktrap', 'spikyshield', ]; // Moves that switch the user out const PIVOT_MOVES = [ @@ -117,7 +125,7 @@ const MOVE_PAIRS = [ /** Pokemon who always want priority STAB, and are fine with it as its only STAB move of that type */ const PRIORITY_POKEMON = [ - 'breloom', 'brutebonnet', 'honchkrow', 'mimikyu', 'scizor', + 'breloom', 'brutebonnet', 'cacturne', 'honchkrow', 'mimikyu', 'ragingbolt', 'scizor', ]; /** Pokemon who should never be in the lead slot */ @@ -125,11 +133,11 @@ const NO_LEAD_POKEMON = [ 'Zacian', 'Zamazenta', ]; const DOUBLES_NO_LEAD_POKEMON = [ - 'Basculegion', 'Houndstone', 'Roaring Moon', 'Zacian', 'Zamazenta', + 'Basculegion', 'Houndstone', 'Iron Bundle', 'Roaring Moon', 'Zacian', 'Zamazenta', ]; const DEFENSIVE_TERA_BLAST_USERS = [ - 'alcremie', 'bellossom', 'comfey', 'florges', + 'alcremie', 'bellossom', 'comfey', 'fezandipiti', 'florges', 'raikou', ]; function sereneGraceBenefits(move: Move) { @@ -137,7 +145,7 @@ function sereneGraceBenefits(move: Move) { } export class RandomTeams { - dex: ModdedDex; + readonly dex: ModdedDex; gen: number; factoryTier: string; format: Format; @@ -147,6 +155,7 @@ export class RandomTeams { readonly adjustLevel: number | null; readonly maxMoveCount: number; readonly forceMonotype: string | undefined; + readonly forceTeraType: string | undefined; /** * Checkers for move enforcement based on types or other factors @@ -155,6 +164,12 @@ export class RandomTeams { */ moveEnforcementCheckers: {[k: string]: MoveEnforcementChecker}; + /** Used by .getPools() */ + private poolsCacheKey: [string | undefined, number | undefined, RuleTable | undefined, boolean] | undefined; + private cachedPool: number[] | undefined; + private cachedSpeciesPool: Species[] | undefined; + protected cachedStatusMoves: ID[]; + constructor(format: Format | string, prng: PRNG | PRNGSeed | null) { format = Dex.formats.get(format); this.dex = Dex.forFormat(format); @@ -168,6 +183,9 @@ export class RandomTeams { const forceMonotype = ruleTable.valueRules.get('forcemonotype'); this.forceMonotype = forceMonotype && this.dex.types.get(forceMonotype).exists ? this.dex.types.get(forceMonotype).name : undefined; + const forceTeraType = ruleTable.valueRules.get('forceteratype'); + this.forceTeraType = forceTeraType && this.dex.types.get(forceTeraType).exists ? + this.dex.types.get(forceTeraType).name : undefined; this.factoryTier = ''; this.format = format; @@ -176,9 +194,16 @@ export class RandomTeams { this.moveEnforcementCheckers = { Bug: (movePool, moves, abilities, types, counter) => ( movePool.includes('megahorn') || movePool.includes('xscissor') || - (!counter.get('Bug') && types.includes('Electric')) + (!counter.get('Bug') && (types.includes('Electric') || types.includes('Psychic'))) ), - Dark: (movePool, moves, abilities, types, counter) => !counter.get('Dark'), + Dark: ( + movePool, moves, abilities, types, counter, species, teamDetails, isLead, isDoubles, teraType, role + ) => { + if ( + counter.get('Dark') < 2 && PRIORITY_POKEMON.includes(species.id) && role === 'Wallbreaker' + ) return true; + return !counter.get('Dark'); + }, Dragon: (movePool, moves, abilities, types, counter) => !counter.get('Dragon'), Electric: (movePool, moves, abilities, types, counter) => !counter.get('Electric'), Fairy: (movePool, moves, abilities, types, counter) => !counter.get('Fairy'), @@ -189,20 +214,23 @@ export class RandomTeams { Grass: (movePool, moves, abilities, types, counter, species) => ( !counter.get('Grass') && ( movePool.includes('leafstorm') || species.baseStats.atk >= 100 || - types.includes('Electric') || abilities.has('Seed Sower') + types.includes('Electric') || abilities.includes('Seed Sower') ) ), Ground: (movePool, moves, abilities, types, counter) => !counter.get('Ground'), - Ice: (movePool, moves, abilities, types, counter) => (movePool.includes('freezedry') || !counter.get('Ice')), + Ice: (movePool, moves, abilities, types, counter) => ( + movePool.includes('freezedry') || movePool.includes('blizzard') || !counter.get('Ice') + ), Normal: (movePool, moves, types, counter) => (movePool.includes('boomburst') || movePool.includes('hypervoice')), Poison: (movePool, moves, abilities, types, counter) => { if (types.includes('Ground')) return false; return !counter.get('Poison'); }, - Psychic: (movePool, moves, abilities, types, counter) => { - if (counter.get('Psychic')) return false; - if (movePool.includes('calmmind') || abilities.has('Strong Jaw')) return true; - return abilities.has('Psychic Surge') || ['Electric', 'Fighting', 'Fire', 'Grass', 'Poison'].some(m => types.includes(m)); + Psychic: (movePool, moves, abilities, types, counter, species, teamDetails, isLead, isDoubles) => { + if ((isDoubles || species.id === 'bruxish') && movePool.includes('psychicfangs')) return true; + if (species.id === 'hoopaunbound' && movePool.includes('psychic')) return true; + if (['Dark', 'Steel', 'Water'].some(m => types.includes(m))) return false; + return !counter.get('Psychic'); }, Rock: (movePool, moves, abilities, types, counter, species) => !counter.get('Rock') && species.baseStats.atk >= 80, Steel: (movePool, moves, abilities, types, counter, species, teamDetails, isLead, isDoubles) => ( @@ -211,6 +239,10 @@ export class RandomTeams { ), Water: (movePool, moves, abilities, types, counter) => (!counter.get('Water') && !types.includes('Ground')), }; + this.poolsCacheKey = undefined; + this.cachedPool = undefined; + this.cachedSpeciesPool = undefined; + this.cachedStatusMoves = this.dex.moves.all().filter(move => move.category === 'Status').map(move => move.id); } setSeed(prng?: PRNG | PRNGSeed) { @@ -294,6 +326,7 @@ export class RandomTeams { * Doesn't count bans nested inside other formats/rules. */ private hasDirectCustomBanlistChanges() { + if (this.format.ruleTable?.has('+pokemontag:cap')) return false; if (this.format.banlist.length || this.format.restricted.length || this.format.unbanlist.length) return true; if (!this.format.customRules) return false; for (const rule of this.format.customRules) { @@ -342,7 +375,7 @@ export class RandomTeams { moves: Set | null, species: Species, teraType: string, - abilities: Set = new Set(), + abilities: string[], ): MoveCounter { // This is primarily a helper function for random setbuilder functions. const counter = new MoveCounter(); @@ -381,9 +414,9 @@ export class RandomTeams { counter.damagingMoves.add(move); } if (move.flags['bite']) counter.add('strongjaw'); - if (move.flags['punch']) counter.ironFist++; + if (move.flags['punch']) counter.add('ironfist'); if (move.flags['sound']) counter.add('sound'); - if (move.priority > 0 || (moveid === 'grassyglide' && abilities.has('Grassy Surge'))) { + if (move.priority > 0 || (moveid === 'grassyglide' && abilities.includes('Grassy Surge'))) { counter.add('priority'); } } @@ -417,7 +450,7 @@ export class RandomTeams { cullMovePool( types: string[], moves: Set, - abilities: Set, + abilities: string[], counter: MoveCounter, movePool: string[], teamDetails: RandomTeamsTypes.TeamDetails, @@ -453,15 +486,15 @@ export class RandomTeams { } // Develop additional move lists - const statusMoves = this.dex.moves.all() - .filter(move => move.category === 'Status') - .map(move => move.id); + 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.screens) { + if (movePool.includes('auroraveil')) this.fastPop(movePool, movePool.indexOf('auroraveil')); + if (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 (teamDetails.stickyWeb) { if (movePool.includes('stickyweb')) this.fastPop(movePool, movePool.indexOf('stickyweb')); @@ -476,7 +509,7 @@ export class RandomTeams { if (movePool.includes('rapidspin')) this.fastPop(movePool, movePool.indexOf('rapidspin')); if (moves.size + movePool.length <= this.maxMoveCount) return; } - if (teamDetails.toxicSpikes && teamDetails.toxicSpikes >= 2) { + if (teamDetails.toxicSpikes) { if (movePool.includes('toxicspikes')) this.fastPop(movePool, movePool.indexOf('toxicspikes')); if (moves.size + movePool.length <= this.maxMoveCount) return; } @@ -484,6 +517,10 @@ export class RandomTeams { 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 = [ @@ -499,12 +536,13 @@ export class RandomTeams { [RECOVERY_MOVES, 'healpulse'], ['lifedew', 'healpulse'], ['haze', 'icywind'], - [['muddywater', 'hydropump'], 'scald'], + [['hydropump', 'muddywater'], ['muddywater', 'scald']], ['disable', 'encore'], ['freezedry', 'icebeam'], ['energyball', 'leafstorm'], + ['wildcharge', 'thunderbolt'], ['earthpower', 'sandsearstorm'], - ['boomburst', 'hyperdrill'], + ['coaching', ['helpinghand', 'howl']], ]; for (const pair of doublesIncompatiblePairs) this.incompatibleMoves(moves, movePool, pair[0], pair[1]); @@ -518,13 +556,14 @@ export class RandomTeams { [statusMoves, ['healingwish', 'switcheroo', 'trick']], [SETUP, PIVOT_MOVES], [SETUP, HAZARDS], - [SETUP, ['defog', 'nuzzle', 'toxic', 'waterspout', 'yawn', 'haze']], + [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'], + ['yawn', 'roar'], // These attacks are redundant with each other [['psychic', 'psychicnoise'], ['psyshock', 'psychicnoise']], @@ -535,19 +574,23 @@ export class RandomTeams { ['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'], ['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'], - ['toxic', ['willowisp', 'thunderwave']], + [['thunderwave', 'toxic'], ['thunderwave', 'willowisp']], [['thunderwave', 'toxic', 'willowisp'], 'toxicspikes'], // This space reserved for assorted hardcodes that otherwise make little sense out of context @@ -555,35 +598,35 @@ export class RandomTeams { ['nastyplot', ['rockslide', 'knockoff']], // Persian ['switcheroo', 'fakeout'], - // Beartic - ['snowscape', 'swordsdance'], - // Magnezone - ['bodypress', 'mirrorcoat'], // Amoonguss, though this can work well as a general rule later ['toxic', 'clearsmog'], // Chansey and Blissey ['healbell', 'stealthrock'], // Azelf and Zoroarks ['trick', 'uturn'], + // Araquanid + ['mirrorcoat', 'hydropump'], ]; 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 (!isDoubles) this.incompatibleMoves(moves, movePool, 'taunt', 'encore'); if (!types.includes('Dark') && teraType !== 'Dark') this.incompatibleMoves(moves, movePool, 'knockoff', 'suckerpunch'); - if (!abilities.has('Prankster')) this.incompatibleMoves(moves, movePool, 'thunderwave', 'yawn'); + 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 === 'luvdisc') { - this.incompatibleMoves(moves, movePool, ['charm', 'flipturn', 'icebeam'], ['charm', 'flipturn']); + if (species.id === 'barraskewda') { + this.incompatibleMoves(moves, movePool, ['psychicfangs', 'throatchop'], ['poisonjab', 'throatchop']); } - if (species.id === "cyclizar") this.incompatibleMoves(moves, movePool, 'taunt', 'knockoff'); - if (species.baseSpecies === 'Dudunsparce') this.incompatibleMoves(moves, movePool, 'earthpower', 'shadowball'); + if (species.id === 'cyclizar') this.incompatibleMoves(moves, movePool, 'taunt', 'knockoff'); if (species.id === 'mesprit') this.incompatibleMoves(moves, movePool, 'healingwish', 'uturn'); + if (species.id === 'camerupt') this.incompatibleMoves(moves, movePool, 'roar', 'willowisp'); + if (species.id === 'coalossal') this.incompatibleMoves(moves, movePool, 'flamethrower', 'overheat'); + if (!isDoubles && species.id === 'jumpluff') this.incompatibleMoves(moves, movePool, 'encore', 'strengthsap'); } // Checks for and removes incompatible moves, starting with the first move in movesA. @@ -621,7 +664,7 @@ export class RandomTeams { move: string, moves: Set, types: string[], - abilities: Set, + abilities: string[], teamDetails: RandomTeamsTypes.TeamDetails, species: Species, isLead: boolean, @@ -638,7 +681,7 @@ export class RandomTeams { } // Returns the type of a given move for STAB/coverage enforcement purposes - getMoveType(move: Move, species: Species, abilities: Set, teraType: string): string { + getMoveType(move: Move, species: Species, abilities: string[], teraType: string): string { if (move.id === 'terablast') return teraType; if (['judgment', 'revelationdance'].includes(move.id)) return species.types[0]; @@ -656,10 +699,10 @@ export class RandomTeams { const moveType = move.type; if (moveType === 'Normal') { - if (abilities.has('Aerilate')) return 'Flying'; - if (abilities.has('Galvanize')) return 'Electric'; - if (abilities.has('Pixilate')) return 'Fairy'; - if (abilities.has('Refrigerate')) return 'Ice'; + if (abilities.includes('Aerilate')) return 'Flying'; + if (abilities.includes('Galvanize')) return 'Electric'; + if (abilities.includes('Pixilate')) return 'Fairy'; + if (abilities.includes('Refrigerate')) return 'Ice'; } return moveType; } @@ -667,7 +710,7 @@ export class RandomTeams { // Generate random moveset for a given species, role, tera type. randomMoveset( types: string[], - abilities: Set, + abilities: string[], teamDetails: RandomTeamsTypes.TeamDetails, species: Species, isLead: boolean, @@ -709,7 +752,7 @@ export class RandomTeams { // Add other moves you really want to have, e.g. STAB, recovery, setup. // Enforce Facade if Guts is a possible ability - if (movePool.includes('facade') && abilities.has('Guts')) { + if (movePool.includes('facade') && abilities.includes('Guts')) { counter = this.addMove('facade', moves, types, abilities, teamDetails, species, isLead, isDoubles, movePool, teraType, role); } @@ -740,6 +783,12 @@ export class RandomTeams { } } + // Enforce Aurora Veil if the team doesn't already have screens + if (!teamDetails.screens && movePool.includes('auroraveil')) { + counter = this.addMove('auroraveil', 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')) { @@ -748,14 +797,6 @@ export class RandomTeams { } } - // Enforce Flip Turn on pure Water-type Wallbreakers - if (types.length === 1 && types.includes('Water') && role === 'Wallbreaker') { - if (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')) { @@ -766,7 +807,7 @@ export class RandomTeams { // Enforce moves in doubles if (isDoubles) { - const doublesEnforcedMoves = ['auroraveil', 'mortalspin', 'spore']; + const doublesEnforcedMoves = ['mortalspin', 'spore']; for (const moveid of doublesEnforcedMoves) { if (movePool.includes(moveid)) { counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles, @@ -779,12 +820,12 @@ export class RandomTeams { movePool, teraType, role); } // Enforce Tailwind on Prankster and Gale Wings users - if (movePool.includes('tailwind') && (abilities.has('Prankster') || abilities.has('Gale Wings'))) { + 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.has('Prankster')) { + if (movePool.includes('thunderwave') && abilities.includes('Prankster')) { counter = this.addMove('thunderwave', moves, types, abilities, teamDetails, species, isLead, isDoubles, movePool, teraType, role); } @@ -800,7 +841,7 @@ export class RandomTeams { 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.has('Grassy Surge'))) && + types.includes(moveType) && (move.priority > 0 || (moveid === 'grassyglide' && abilities.includes('Grassy Surge'))) && (move.basePower || move.basePowerCallback) ) { priorityMoves.push(moveid); @@ -895,23 +936,18 @@ export class RandomTeams { } } - // Enforce redirecting moves, or Fake Out if no redirecting move + // Enforce redirecting moves and Fake Out on Doubles Support if (role === 'Doubles Support') { - const redirectMoves = movePool.filter(moveid => ['followme', 'ragepowder'].includes(moveid)); - if (redirectMoves.length) { - const moveid = this.sample(redirectMoves); - counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles, - movePool, teraType, role); - } else { - if (movePool.includes('fakeout')) { - counter = this.addMove('fakeout', moves, types, abilities, teamDetails, species, isLead, isDoubles, + 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') || species.id === 'gliscor') { + if (role.includes('Protect')) { const protectMoves = movePool.filter(moveid => PROTECT_MOVES.includes(moveid)); if (protectMoves.length) { const moveid = this.sample(protectMoves); @@ -989,7 +1025,7 @@ export class RandomTeams { ability: string, types: string[], moves: Set, - abilities: Set, + abilities: string[], counter: MoveCounter, teamDetails: RandomTeamsTypes.TeamDetails, species: Species, @@ -998,120 +1034,28 @@ export class RandomTeams { teraType: string, role: RandomTeamsTypes.Role, ): boolean { - if ([ - 'Armor Tail', 'Battle Bond', 'Early Bird', 'Flare Boost', 'Galvanize', 'Gluttony', 'Harvest', 'Hydration', 'Ice Body', 'Immunity', - 'Liquid Voice', 'Marvel Scale', 'Misty Surge', 'Moody', 'Own Tempo', 'Pressure', 'Quick Feet', 'Rain Dish', 'Sand Veil', 'Shed Skin', - 'Sniper', 'Snow Cloak', 'Steadfast', 'Steam Engine', - ].includes(ability)) return true; - switch (ability) { - // Abilities which are primarily useful for certain moves - case 'Contrary': case 'Serene Grace': case 'Skill Link': case 'Strong Jaw': - return !counter.get(toID(ability)); - case 'Chlorophyll': - return (!moves.has('sunnyday') && !teamDetails.sun && species.id !== 'lilligant'); - case 'Cloud Nine': - return (species.id !== 'golduck'); - case 'Competitive': - return (species.id === 'kilowattrel' && !isDoubles); - case 'Compound Eyes': case 'No Guard': - return !counter.get('inaccurate'); - case 'Cursed Body': - return abilities.has('Infiltrator'); + // Abilities which are primarily useful for certain moves or with team support + case 'Chlorophyll': case 'Solar Power': + return !teamDetails.sun; case 'Defiant': - return (!counter.get('Physical') || (abilities.has('Prankster') && (moves.has('thunderwave') || moves.has('taunt')))); - case 'Flame Body': - return (species.id === 'magcargo' && moves.has('shellsmash')); - case 'Flash Fire': - return ( - ['Drought', 'Flame Body', 'Intimidate', 'Rock Head', 'Weak Armor'].some(m => abilities.has(m)) && - this.dex.getEffectiveness('Fire', species) < 0 - ); - case 'Guts': - return (!moves.has('facade') && !moves.has('sleeptalk')); - case 'Hustle': - // some of this is just for Delibird in singles/doubles - return (counter.get('Physical') < 2 || moves.has('fakeout') || moves.has('rapidspin')); - case 'Infiltrator': - return (isDoubles && abilities.has('Clear Body')); - case 'Insomnia': - return (role === 'Wallbreaker'); - case 'Intimidate': - if (abilities.has('Hustle')) return true; - if (abilities.has('Sheer Force') && !!counter.get('sheerforce')) return true; - if (species.id === 'hitmontop' && moves.has('tripleaxel')) return true; - return (abilities.has('Stakeout')); - case 'Iron Fist': - return !counter.ironFist || moves.has('dynamicpunch'); - case 'Justified': - return !counter.get('Physical'); - case 'Libero': case 'Protean': - return role === 'Offensive Protect' || (species.id === 'meowscarada' && role === 'Fast Attacker'); - case 'Lightning Rod': - return species.id === 'rhyperior'; - case 'Mold Breaker': - return (abilities.has('Sharpness') || abilities.has('Unburden') || abilities.has('Sheer Force')); - case 'Moxie': - return (!counter.get('Physical') || moves.has('stealthrock')); - case 'Natural Cure': - return species.id === 'pawmot'; - case 'Neutralizing Gas': - return !isDoubles; - case 'Overcoat': case 'Sweet Veil': - return types.includes('Grass'); + 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') || (species.id === 'grafaiai' && role === 'Setup Sweeper')); - case 'Reckless': - return !counter.get('recoil'); - case 'Regenerator': - return (species.id === 'mienshao' && role === 'Wallbreaker'); - case 'Rock Head': - return !counter.get('recoil'); + return !counter.get('Status'); case 'Sand Force': case 'Sand Rush': return !teamDetails.sand; - case 'Sap Sipper': - return species.id === 'wyrdeer'; - case 'Seed Sower': - return role === 'Bulky Support'; - case 'Sheer Force': - const braviaryCase = (species.id === 'braviaryhisui' && (role === 'Wallbreaker' || role === 'Bulky Protect')); - const abilitiesCase = (abilities.has('Guts') || abilities.has('Sharpness')); - return (!counter.get('sheerforce') || moves.has('bellydrum') || braviaryCase || abilitiesCase); case 'Slush Rush': return !teamDetails.snow; - case 'Solar Power': - return (!teamDetails.sun || !counter.get('Special')); - case 'Speed Boost': - return (species.id === 'yanmega' && !moves.has('protect')); - case 'Sticky Hold': - return (species.id === 'muk'); - case 'Sturdy': - return (!!counter.get('recoil') && species.id !== 'skarmory'); case 'Swarm': - return (!counter.get('Bug') || !!counter.get('recovery')); - case 'Swift Swim': - return (abilities.has('Intimidate') || (!moves.has('raindance') && !teamDetails.rain)); - case 'Synchronize': - return (species.id !== 'umbreon' && species.id !== 'rabsca'); - case 'Technician': - return (!counter.get('technician') || abilities.has('Punk Rock') || abilities.has('Fur Coat')); - case 'Tinted Lens': - const hbraviaryCase = (species.id === 'braviaryhisui' && (role === 'Setup Sweeper' || role === 'Doubles Wallbreaker')); - const yanmegaCase = (species.id === 'yanmega' && moves.has('protect')); - return (yanmegaCase || hbraviaryCase || species.id === 'illumise'); - case 'Unaware': - return (species.id === 'clefable' && role !== 'Bulky Support'); - case 'Unburden': - return (abilities.has('Prankster') || !counter.get('setup')); - case 'Volt Absorb': - if (abilities.has('Iron Fist') && counter.ironFist >= 2) return true; - return (this.dex.getEffectiveness('Electric', species) < -1); - case 'Water Absorb': - return (['lanturn', 'politoed', 'quagsire'].includes(species.id) || moves.has('raindance')); - case 'Weak Armor': - return (moves.has('shellsmash') && species.id !== 'magcargo'); + return !counter.get('Bug'); + case 'Torrent': + return (!counter.get('Water') && !moves.has('flipturn')); } return false; @@ -1121,7 +1065,7 @@ export class RandomTeams { getAbility( types: string[], moves: Set, - abilities: Set, + abilities: string[], counter: MoveCounter, teamDetails: RandomTeamsTypes.TeamDetails, species: Species, @@ -1130,134 +1074,54 @@ export class RandomTeams { teraType: string, role: RandomTeamsTypes.Role, ): string { - const abilityData = Array.from(abilities).map(a => this.dex.abilities.get(a)); - Utils.sortBy(abilityData, abil => -abil.rating); - - if (abilityData.length <= 1) return abilityData[0].name; - - // Hard-code abilities here - if (species.id === 'florges') return 'Flower Veil'; - if (species.id === 'scovillain') return 'Chlorophyll'; - if (species.id === 'empoleon') return 'Competitive'; - if (species.id === 'dodrio') return 'Early Bird'; - if (species.id === 'chandelure') return 'Flash Fire'; - if (species.id === 'golemalola' && moves.has('doubleedge')) return 'Galvanize'; - if (abilities.has('Guts') && (moves.has('facade') || moves.has('sleeptalk') || species.id === 'gurdurr')) return 'Guts'; - if (species.id === 'copperajah' && moves.has('heavyslam')) return 'Heavy Metal'; - if (species.id === 'jumpluff') return 'Infiltrator'; - if (species.id === 'toucannon' && !counter.get('sheerforce') && !counter.get('skilllink')) return 'Keen Eye'; - if (species.id === 'reuniclus') return (role === 'AV Pivot') ? 'Regenerator' : 'Magic Guard'; - if (species.id === 'smeargle') return 'Own Tempo'; - // If Ambipom doesn't qualify for Technician, Skill Link is useless on it - if (species.id === 'ambipom' && !counter.get('technician')) return 'Pickup'; - if (species.id === 'sandaconda' || (species.id === 'scrafty' && moves.has('rest'))) return 'Shed Skin'; - if (species.id === 'cetitan' && (role === 'Wallbreaker' || isDoubles)) return 'Sheer Force'; - if (species.id === 'ribombee') return 'Shield Dust'; - if (species.id === 'dipplin') return 'Sticky Hold'; - if (species.id === 'breloom') return 'Technician'; - if (species.id === 'porygon2') return 'Trace'; - if (species.id === 'shiftry' && moves.has('tailwind')) return 'Wind Rider'; - - // singles - if (!isDoubles) { - if (species.id === 'hypno') return 'Insomnia'; - if (species.id === 'staraptor') return 'Reckless'; - if (species.id === 'arcaninehisui') return 'Rock Head'; - if (['raikou', 'suicune', 'vespiquen'].includes(species.id)) return 'Pressure'; - if (species.id === 'enamorus' && moves.has('calmmind')) return 'Cute Charm'; - if (species.id === 'klawf' && role === 'Setup Sweeper') return 'Anger Shell'; - if (abilities.has('Cud Chew') && moves.has('substitute')) return 'Cud Chew'; - if (abilities.has('Harvest') && (moves.has('protect') || moves.has('substitute'))) return 'Harvest'; - if (abilities.has('Serene Grace') && moves.has('headbutt')) return 'Serene Grace'; - if (abilities.has('Own Tempo') && moves.has('petaldance')) return 'Own Tempo'; - if (species.id === 'zebstrika') return 'Sap Sipper'; - if (abilities.has('Slush Rush') && moves.has('snowscape')) return 'Slush Rush'; - if (abilities.has('Soundproof') && (moves.has('substitute') || counter.get('setup'))) return 'Soundproof'; - if (species.id === 'cinccino') return (role === 'Setup Sweeper') ? 'Technician' : 'Skill Link'; - } - - // doubles, multi, and ffa - if (isDoubles) { - if (species.id === 'farigiraf') return 'Armor Tail'; - if (species.id === 'dragapult') return 'Clear Body'; - if (species.id === 'altaria') return 'Cloud Nine'; - if (species.id === 'armarouge') return 'Flash Fire'; - if (species.id === 'talonflame') return 'Gale Wings'; - if ( - ['oinkologne', 'oinkolognef', 'snorlax', 'swalot'].includes(species.id) && role !== 'Doubles Wallbreaker' - ) return 'Gluttony'; - if (species.id === 'conkeldurr' && role === 'Doubles Wallbreaker') return 'Guts'; - if (species.id === 'tropius' || species.id === 'trevenant') return 'Harvest'; - if (species.id === 'dragonite' || species.id === 'lucario') return 'Inner Focus'; - if (species.id === 'ariados') return 'Insomnia'; - if (species.id === 'kommoo') return this.sample(['Overcoat', 'Soundproof']); - if (species.id === 'barraskewda') return 'Propeller Tail'; - if (species.id === 'flapple' || (species.id === 'appletun' && this.randomChance(1, 2))) return 'Ripen'; - if (species.id === 'gumshoos') return 'Strong Jaw'; - if (species.id === 'magnezone') return 'Sturdy'; - if (species.id === 'clefable' && role === 'Doubles Support') return 'Unaware'; - if (species.id === 'drifblim') return 'Unburden'; - if (abilities.has('Intimidate')) return 'Intimidate'; - - if (this.randomChance(1, 2) && species.id === 'kingambit') return 'Defiant'; - - // just doubles and multi - if (this.format.gameType !== 'freeforall') { - if ( - species.id === 'clefairy' || - (species.baseSpecies === 'Maushold' && role === 'Doubles Support') - ) return 'Friend Guard'; - if (species.id === 'blissey') return 'Healer'; - if (species.id === 'sinistcha') return 'Hospitality'; - if (species.id === 'oranguru' || abilities.has('Pressure') && abilities.has('Telepathy')) return 'Telepathy'; - - if (this.randomChance(1, 2) && species.id === 'mukalola') return 'Power of Alchemy'; + // ffa abilities that differ from doubles + if (this.format.gameType === 'freeforall') { + if (species.id === 'bellossom') return 'Chlorophyll'; + if (species.id === 'sinistcha') return 'Heatproof'; + if (abilities.length === 1 && abilities[0] === 'Telepathy') { + return species.id === 'oranguru' ? 'Inner Focus' : 'Pressure'; } + if (species.id === 'duraludon') return 'Light Metal'; + if (species.id === 'clefairy') return 'Magic Guard'; + if (species.id === 'blissey') return 'Natural Cure'; + if (species.id === 'barraskewda') return 'Swift Swim'; } - let abilityAllowed: Ability[] = []; + 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 === 'hitmonchan' && counter.get('ironfist')) return 'Iron Fist'; + 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 abilityData) { - if (ability.rating >= 1 && !this.shouldCullAbility( - ability.name, types, moves, abilities, counter, teamDetails, species, isLead, isDoubles, teraType, role + for (const ability of abilities) { + if (!this.shouldCullAbility( + ability, types, moves, abilities, counter, teamDetails, species, isLead, isDoubles, teraType, role )) { abilityAllowed.push(ability); } } - // If all abilities are rejected, re-allow all abilities - if (!abilityAllowed.length) { - for (const ability of abilityData) { - if (ability.rating > 0) abilityAllowed.push(ability); - } - if (!abilityAllowed.length) abilityAllowed = abilityData; - } + // Pick a random allowed ability + if (abilityAllowed.length >= 1) return this.sample(abilityAllowed); - if (abilityAllowed.length === 1) return abilityAllowed[0].name; - // Sort abilities by rating with an element of randomness - // All three abilities can be chosen - if (abilityAllowed[2] && abilityAllowed[0].rating - 0.5 <= abilityAllowed[2].rating) { - if (abilityAllowed[1].rating <= abilityAllowed[2].rating) { - if (this.randomChance(1, 2)) [abilityAllowed[1], abilityAllowed[2]] = [abilityAllowed[2], abilityAllowed[1]]; - } else { - if (this.randomChance(1, 3)) [abilityAllowed[1], abilityAllowed[2]] = [abilityAllowed[2], abilityAllowed[1]]; - } - if (abilityAllowed[0].rating <= abilityAllowed[1].rating) { - if (this.randomChance(2, 3)) [abilityAllowed[0], abilityAllowed[1]] = [abilityAllowed[1], abilityAllowed[0]]; - } else { - if (this.randomChance(1, 2)) [abilityAllowed[0], abilityAllowed[1]] = [abilityAllowed[1], abilityAllowed[0]]; - } - } else { - // Third ability cannot be chosen - if (abilityAllowed[0].rating <= abilityAllowed[1].rating) { - if (this.randomChance(1, 2)) [abilityAllowed[0], abilityAllowed[1]] = [abilityAllowed[1], abilityAllowed[0]]; - } else if (abilityAllowed[0].rating - 0.5 <= abilityAllowed[1].rating) { - if (this.randomChance(1, 3)) [abilityAllowed[0], abilityAllowed[1]] = [abilityAllowed[1], abilityAllowed[0]]; - } + // 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); } - // After sorting, choose the first ability - return abilityAllowed[0].name; + // Pick a random ability + return this.sample(abilities); } getPriorityItem( @@ -1273,17 +1137,12 @@ export class RandomTeams { role: RandomTeamsTypes.Role, ) { if (!isDoubles) { - if ( - !isLead && role === 'Bulky Setup' && - (ability === 'Quark Drive' || ability === 'Protosynthesis') - ) { + 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.id === 'froslass') return 'Wide Lens'; - if (species.id === 'necrozmaduskmane') return 'Weakness Policy'; } if (species.requiredItems) { // Z-Crystals aren't available in Gen 9, so require Plates @@ -1295,19 +1154,30 @@ export class RandomTeams { 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'; + 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' && !isDoubles) return 'Focus Sash'; if (moves.has('clangoroussoul') || (species.id === 'toxtricity' && moves.has('shiftgear'))) return 'Throat Spray'; - if (species.baseSpecies === 'Magearna' && role === 'Tera Blast user') return 'Weakness Policy'; - if (moves.has('lastrespects') || moves.has('dragonenergy')) return 'Choice Scarf'; if ( - ability === 'Imposter' || - (species.id === 'magnezone' && moves.has('bodypress') && !isDoubles) + (species.baseSpecies === 'Magearna' && role === 'Tera Blast user') || + species.id === 'necrozmaduskmane' || (species.id === 'calyrexice' && 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 === 'Wallbreaker') return 'Choice Band'; - if (species.id === 'reuniclus' && ability === 'Magic Guard') return 'Life Orb'; + if (species.id === 'rampardos' && (role === 'Fast Attacker' || isDoubles)) return 'Choice Scarf'; + if (species.id === 'palkia' && counter.get('Special') < 4) return 'Lustrous Orb'; + if ( + moves.has('courtchange') || + !isDoubles && (species.id === 'luvdisc' || (species.id === 'terapagos' && !moves.has('rest'))) + ) return 'Heavy-Duty Boots'; if (moves.has('bellydrum') && moves.has('substitute')) return 'Salac Berry'; if ( - ['Cheek Pouch', 'Cud Chew', 'Harvest'].some(m => ability === m) || + ['Cheek Pouch', 'Cud Chew', 'Harvest', 'Ripen'].some(m => ability === m) || moves.has('bellydrum') || moves.has('filletaway') ) { return 'Sitrus Berry'; @@ -1322,22 +1192,22 @@ export class RandomTeams { 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 === 'Poison Heal') return 'Toxic Orb'; if ((ability === 'Guts' || moves.has('facade')) && !moves.has('sleeptalk')) { return (types.includes('Fire') || ability === 'Toxic Boost') ? 'Toxic Orb' : 'Flame Orb'; } - if (ability === 'Sheer Force' && counter.get('sheerforce')) return 'Life Orb'; + if (ability === 'Magic Guard' || (ability === 'Sheer Force' && counter.get('sheerforce'))) return 'Life Orb'; if (ability === 'Anger Shell') return this.sample(['Rindo Berry', 'Passho Berry', 'Scope Lens', 'Sitrus Berry']); - if (moves.has('courtchange')) return 'Heavy-Duty Boots'; - if (moves.has('populationbomb')) return 'Wide Lens'; - if ( - (moves.has('scaleshot') && role !== 'Choice Item user') || - (counter.get('setup') && ((species.id === 'torterra' && !isDoubles) || species.id === 'cinccino')) - ) return 'Loaded Dice'; - if (ability === 'Unburden') return moves.has('closecombat') ? 'White Herb' : '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`; @@ -1374,17 +1244,20 @@ export class RandomTeams { ['Doubles Fast Attacker', 'Doubles Wallbreaker', 'Doubles Setup Sweeper', 'Offensive Protect'].some(m => role === m) ); - if (species.id === 'ursalunabloodmoon') return 'Silk Scarf'; - if (moves.has('covet')) return 'Normal Gem'; - if (species.id === 'calyrexice') return 'Weakness Policy'; - if (moves.has('waterspout')) return 'Choice Scarf'; + if (species.id === 'ursalunabloodmoon' && moves.has('protect')) return 'Silk Scarf'; + if ( + moves.has('flipturn') && moves.has('protect') && (moves.has('aquajet') || (moves.has('jetpunch'))) + ) return 'Mystic Water'; + if (counter.get('speedsetup') && role === 'Doubles Bulky Setup') return 'Weakness Policy'; + if (species.id === 'toxapex') return 'Binding Band'; + if (moves.has('blizzard') && ability !== 'Snow Warning' && !teamDetails.snow) return 'Blunder Policy'; + if (role === 'Choice Item user') { if (scarfReqs || (counter.get('Physical') < 4 && counter.get('Special') < 3 && !moves.has('memento'))) { return 'Choice Scarf'; } return (counter.get('Physical') >= 3) ? 'Choice Band' : 'Choice Specs'; } - if (moves.has('blizzard') && ability !== 'Snow Warning' && !teamDetails.snow) return 'Blunder Policy'; if (counter.get('Physical') >= 4 && ['fakeout', 'feint', 'firstimpression', 'rapidspin', 'suckerpunch'].every(m => !moves.has(m)) && (moves.has('flipturn') || moves.has('uturn') || role === 'Doubles Wallbreaker') @@ -1394,24 +1267,25 @@ export class RandomTeams { if ( ((counter.get('Special') >= 4 && (moves.has('voltswitch') || role === 'Doubles Wallbreaker')) || ( counter.get('Special') >= 3 && (moves.has('uturn') || moves.has('flipturn')) - )) && !moves.has('acidspray') && !moves.has('electroweb') + )) && !moves.has('electroweb') ) { return (scarfReqs) ? 'Choice Scarf' : 'Choice Specs'; } if ( - (role === 'Bulky Protect' && counter.get('setup')) || moves.has('substitute') || - species.id === 'eternatus' || species.id === 'toxapex' + (role === 'Bulky Protect' && counter.get('setup')) || moves.has('substitute') || moves.has('irondefense') || + moves.has('coil') || species.id === 'eternatus' || species.id === 'regigigas' ) return 'Leftovers'; if (species.id === 'sylveon') return 'Pixie Plate'; + if (ability === 'Intimidate' && this.dex.getEffectiveness('Rock', species) >= 1) return 'Heavy-Duty Boots'; if ( - (offensiveRole || (role === 'Tera Blast user' && species.baseStats.spe >= 80 && !moves.has('trickroom'))) && + (offensiveRole || (role === 'Tera Blast user' && (species.baseStats.spe >= 80 || moves.has('trickroom')))) && (!moves.has('fakeout') || species.id === 'ambipom') && !moves.has('incinerate') && - (!moves.has('uturn') || types.includes('Bug') || species.baseStats.atk >= 120 || ability === 'Libero') && - (!moves.has('icywind') || species.id === 'ironbundle') + (!moves.has('uturn') || types.includes('Bug') || ability === 'Libero') && + ((!moves.has('icywind') && !moves.has('electroweb')) || species.id === 'ironbundle') ) { return ( - (ability === 'Quark Drive' || ability === 'Protosynthesis') && - ['firstimpression', 'uturn', 'voltswitch'].every(m => !moves.has(m)) && species.id !== 'ironvaliant' + (ability === 'Quark Drive' || ability === 'Protosynthesis') && !isLead && species.id !== 'ironvaliant' && + ['dracometeor', 'firstimpression', 'uturn', 'voltswitch'].every(m => !moves.has(m)) ) ? 'Booster Energy' : 'Life Orb'; } if (isLead && (species.id === 'glimmora' || @@ -1425,7 +1299,6 @@ export class RandomTeams { return (this.dex.getEffectiveness('Rock', species) >= 1) ? 'Heavy-Duty Boots' : 'Clear Amulet'; } if (!counter.get('Status')) return 'Assault Vest'; - if (species.id === 'pawmot') return 'Leppa Berry'; return 'Sitrus Berry'; } @@ -1440,10 +1313,9 @@ export class RandomTeams { teraType: string, role: RandomTeamsTypes.Role, ): string { - if (types.includes('Normal') && moves.has('fakeout')) return 'Silk Scarf'; if ( species.id !== 'jirachi' && (counter.get('Physical') >= 4) && - ['fakeout', 'firstimpression', 'flamecharge', 'rapidspin', 'ruination', 'superfang'].every(m => !moves.has(m)) + ['dragontail', 'fakeout', 'firstimpression', 'flamecharge', 'rapidspin'].every(m => !moves.has(m)) ) { const scarfReqs = ( role !== 'Wallbreaker' && @@ -1455,28 +1327,29 @@ export class RandomTeams { } if ( (counter.get('Special') >= 4) || - (counter.get('Special') >= 3 && ['flipturn', 'partingshot', 'uturn'].some(m => moves.has(m))) + (counter.get('Special') >= 3 && ['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' && !counter.get('Physical') + 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') && role === 'Bulky Setup') return 'Weakness Policy'; if ( !counter.get('Status') && - (moves.has('rapidspin') || !['Fast Attacker', 'Wallbreaker', 'Tera Blast user'].includes(role)) + !['Fast Attacker', 'Wallbreaker', 'Tera Blast user'].includes(role) ) { return 'Assault Vest'; } - if (species.id === 'golem') return 'Custap Berry'; - if (species.id === 'urshifurapidstrike') return 'Punching Glove'; - if (species.id === 'palkia') return 'Lustrous Orb'; + if (species.id === 'golem') return (counter.get('speedsetup')) ? 'Weakness Policy' : 'Custap Berry'; if (moves.has('substitute')) return 'Leftovers'; - if (moves.has('stickyweb') && species.id !== 'araquanid' && isLead) return 'Focus Sash'; + 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 'Heavy-Duty Boots'; if ( (moves.has('chillyreception') || ( @@ -1488,28 +1361,27 @@ export class RandomTeams { // Low Priority if ( - (species.id === 'garchomp' && role === 'Fast Support') || ( + 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 (moves.has('outrage')) return 'Lum Berry'; + 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') && !moves.has('protect') && + 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 ( - !['Fast Attacker', 'Wallbreaker', 'Tera Blast user'].includes(role) && ability !== 'Levitate' && - this.dex.getEffectiveness('Ground', species) >= 2 + !counter.get('setup') && ability !== 'Levitate' && this.dex.getEffectiveness('Ground', species) >= 2 ) return 'Air Balloon'; if (['Bulky Attacker', 'Bulky Support', 'Bulky Setup'].some(m => role === (m))) return 'Leftovers'; if (species.id === 'pawmot' && moves.has('nuzzle')) return 'Leppa Berry'; - if ( - ['Fast Bulky Setup', 'Fast Attacker', 'Setup Sweeper', 'Wallbreaker'].some(m => role === m) && - types.includes('Dark') && moves.has('suckerpunch') && !PRIORITY_POKEMON.includes(species.id) && - counter.get('physicalsetup') && counter.get('Dark') - ) return 'Black Glasses'; if (role === 'Fast Support' || role === 'Fast Bulky Setup') { return (counter.get('Physical') + counter.get('Special') >= 3 && !moves.has('nuzzle')) ? 'Life Orb' : 'Leftovers'; } @@ -1546,6 +1418,26 @@ export class RandomTeams { return tierScale[tier] || 80; } + 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', 'Magearna', '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 === 'Pikachu') { + return 'Pikachu' + this.sample( + ['', '-Original', '-Hoenn', '-Sinnoh', '-Unova', '-Kalos', '-Alola', '-Partner', '-World'] + ); + } + return species.name; + } + randomSet( s: string | Species, teamDetails: RandomTeamsTypes.TeamDetails = {}, @@ -1553,21 +1445,19 @@ export class RandomTeams { isDoubles = false ): RandomTeamsTypes.RandomSet { const species = this.dex.species.get(s); - let forme = species.name; - - if (typeof species.battleOnly === 'string') { - // Only change the forme. The species has custom moves, and may have different typing and requirements. - forme = species.battleOnly; - } - if (species.cosmeticFormes) { - forme = this.sample([species.name].concat(species.cosmeticFormes)); - } - const sets = (this as any)[`random${isDoubles ? 'Doubles' : ''}Sets`][species.id]["sets"]; - const possibleSets = []; + const forme = this.getForme(species); + const sets = this[`random${isDoubles ? 'Doubles' : ''}Sets`][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; @@ -1580,8 +1470,8 @@ export class RandomTeams { for (const movename of set.movepool) { movePool.push(this.dex.moves.get(movename).id); } - const teraTypes = set.teraTypes; - const teraType = this.sampleIfArray(teraTypes); + const teraTypes = set.teraTypes!; + let teraType = this.sampleIfArray(teraTypes); let ability = ''; let item = undefined; @@ -1590,8 +1480,7 @@ export class RandomTeams { const ivs = {hp: 31, atk: 31, def: 31, spa: 31, spd: 31, spe: 31}; const types = species.types; - const abilities = new Set(Object.values(species.abilities)); - if (species.unreleasedHidden) abilities.delete(species.abilities.H); + const abilities = set.abilities!; // Get moves const moves = this.randomMoveset(types, abilities, teamDetails, species, isLead, isDoubles, movePool, teraType, role); @@ -1611,10 +1500,6 @@ export class RandomTeams { } } - if (species.baseSpecies === 'Pikachu') { - forme = 'Pikachu' + this.sample(['', '-Original', '-Hoenn', '-Sinnoh', '-Unova', '-Kalos', '-Alola', '-Partner', '-World']); - } - // Get level const level = this.getLevel(species, isDoubles); @@ -1622,21 +1507,27 @@ export class RandomTeams { 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; + 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', 'Salac Berry'].includes(item))) { - // Two Substitutes should activate Sitrus Berry + if ((moves.has('substitute') && ['Sitrus Berry', 'Salac 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')) && (item === 'Sitrus Berry' || ability === 'Gluttony')) { + } 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 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; + if (!isDoubles && item === 'Sitrus Berry' && hp % (4 / srWeakness) === 0) break; } evs.hp -= 4; } @@ -1646,9 +1537,10 @@ export class RandomTeams { 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 + // Physical Tera Blast if ( - move.id === 'terablast' && (moves.has('shiftgear') || species.baseStats.atk > species.baseStats.spa) + 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'; }); @@ -1662,6 +1554,9 @@ export class RandomTeams { 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); @@ -1686,11 +1581,10 @@ export class RandomTeams { pokemonToExclude: RandomTeamsTypes.RandomSet[] = [], isMonotype = false, pokemonList: string[] - ) { + ): [{[k: string]: string[]}, string[]] { const exclude = pokemonToExclude.map(p => toID(p.species)); - const pokemonPool = []; + const pokemonPool: {[k: string]: string[]} = {}; const baseSpeciesPool = []; - const baseSpeciesCount: {[k: string]: number} = {}; for (const pokemon of pokemonList) { let species = this.dex.species.get(pokemon); if (exclude.includes(species.id)) continue; @@ -1701,22 +1595,24 @@ export class RandomTeams { if (!species.types.includes(type)) continue; } } - pokemonPool.push(pokemon); - baseSpeciesCount[species.baseSpecies] = (baseSpeciesCount[species.baseSpecies] || 0) + 1; + + if (species.baseSpecies in pokemonPool) { + pokemonPool[species.baseSpecies].push(pokemon); + } else { + pokemonPool[species.baseSpecies] = [pokemon]; + } } // Include base species 1x if 1-3 formes, 2x if 4-6 formes, 3x if 7+ formes - for (const baseSpecies of Object.keys(baseSpeciesCount)) { - for (let i = 0; i < Math.min(Math.ceil(baseSpeciesCount[baseSpecies] / 3), 3); i++) { - baseSpeciesPool.push(baseSpecies); - // Squawkabilly has 4 formes, but only 2 functionally different formes, so only include it 1x - if (baseSpecies === 'Squawkabilly') break; - } + for (const baseSpecies of Object.keys(pokemonPool)) { + // Squawkabilly has 4 formes, but only 2 functionally different formes, so only include it 1x + const weight = (baseSpecies === 'Squawkabilly') ? 1 : Math.min(Math.ceil(pokemonPool[baseSpecies].length / 3), 3); + for (let i = 0; i < weight; i++) baseSpeciesPool.push(baseSpecies); } return [pokemonPool, baseSpeciesPool]; } - randomSets: {[species: string]: RandomTeamsTypes.RandomSpeciesData} = require('./random-sets.json'); - randomDoublesSets: {[species: string]: RandomTeamsTypes.RandomSpeciesData} = require('./random-doubles-sets.json'); + randomSets: {[species: string]: RandomTeamsTypes.RandomSpeciesData} = require('./sets.json'); + randomDoublesSets: {[species: string]: RandomTeamsTypes.RandomSpeciesData} = require('./doubles-sets.json'); randomTeam() { this.enforceNoDirectCustomBanlistChanges(); @@ -1740,7 +1636,9 @@ export class RandomTeams { 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 = isDoubles ? Object.keys(this.randomDoublesSets) : Object.keys(this.randomSets); const [pokemonPool, baseSpeciesPool] = this.getPokemonPool(type, pokemon, isMonotype, pokemonList); @@ -1748,25 +1646,24 @@ export class RandomTeams { let leadsRemaining = this.format.gameType === 'doubles' ? 2 : 1; while (baseSpeciesPool.length && pokemon.length < this.maxTeamSize) { const baseSpecies = this.sampleNoReplace(baseSpeciesPool); - const currentSpeciesPool: Species[] = []; - for (const poke of pokemonPool) { - const species = this.dex.species.get(poke); - if (species.baseSpecies === baseSpecies) currentSpeciesPool.push(species); - } - let 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; // 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; + 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; @@ -1782,7 +1679,7 @@ export class RandomTeams { } if (skip) continue; - // Limit three weak to any type + // 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) { @@ -1792,12 +1689,39 @@ export class RandomTeams { break; } } + if (this.dex.getEffectiveness(typeName, species) > 1) { + if (!typeDoubleWeaknesses[typeName]) typeDoubleWeaknesses[typeName] = 0; + if (typeDoubleWeaknesses[typeName] >= 1 * 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; + } + + // Limit one level 100 Pokemon + if (!this.adjustLevel && (this.getLevel(species, isDoubles) === 100) && numMaxLevelPokemon >= limitFactor) { + continue; + } } - // Limit one of any type combination, three in Monotype - if (!this.forceMonotype && typeComboCount[typeCombo] >= (isMonotype ? 3 : 1) * 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; @@ -1848,7 +1772,18 @@ export class RandomTeams { 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; @@ -1859,12 +1794,11 @@ export class RandomTeams { 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 = (teamDetails.toxicSpikes || 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; @@ -1872,7 +1806,7 @@ export class RandomTeams { 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") { + if (set.role === 'Tera Blast user' || ['ogerpon', 'ogerponhearthflame', 'terapagos'].includes(species.id)) { teamDetails.teraBlast = 1; } } @@ -1983,6 +1917,8 @@ export class RandomTeams { let stats = species.baseStats; // If Wishiwashi, use the school-forme's much higher stats if (species.baseSpecies === 'Wishiwashi') stats = Dex.species.get('wishiwashischool').baseStats; + // If Terapagos, use Terastal-forme's stats + if (species.baseSpecies === 'Terapagos') stats = Dex.species.get('terapagosterastal').baseStats; // Modified base stat total assumes 31 IVs, 85 EVs in every stat let mbst = (stats["hp"] * 2 + 31 + 21 + 100) + 10; @@ -2034,7 +1970,11 @@ export class RandomTeams { }; if (this.gen === 9) { // Tera type - set.teraType = this.sample(this.dex.types.all()).name; + if (this.forceTeraType) { + set.teraType = this.forceTeraType; + } else { + set.teraType = this.sample(this.dex.types.names()); + } } team.push(set); } @@ -2042,19 +1982,18 @@ export class RandomTeams { return team; } - randomNPokemon(n: number, requiredType?: string, minSourceGen?: number, ruleTable?: RuleTable, requireMoves = false) { - // Picks `n` random pokemon--no repeats, even among formes - // Also need to either normalize for formes or select formes at random - // Unreleased are okay but no CAP - if (requiredType && !this.dex.types.get(requiredType).exists) { - throw new Error(`"${requiredType}" is not a valid type.`); - } - + private getPools(requiredType?: string, minSourceGen?: number, ruleTable?: RuleTable, requireMoves = false) { + // Memoize pool and speciesPool because, at least during tests, they are constructed with the same parameters + // hundreds of times and are expensive to compute. const isNotCustom = !ruleTable; - - const pool: number[] = []; + let pool: number[] = []; let speciesPool: Species[] = []; - if (isNotCustom) { + const ck = this.poolsCacheKey; + if (ck && this.cachedPool && this.cachedSpeciesPool && + ck[0] === requiredType && ck[1] === minSourceGen && ck[2] === ruleTable && ck[3] === requireMoves) { + speciesPool = this.cachedSpeciesPool.slice(); + pool = this.cachedPool.slice(); + } else if (isNotCustom) { speciesPool = [...this.dex.species.all()]; for (const species of speciesPool) { if (species.isNonstandard && species.isNonstandard !== 'Unobtainable') continue; @@ -2068,6 +2007,9 @@ export class RandomTeams { if (num <= 0 || pool.includes(num)) continue; pool.push(num); } + this.poolsCacheKey = [requiredType, minSourceGen, ruleTable, requireMoves]; + this.cachedPool = pool.slice(); + this.cachedSpeciesPool = speciesPool.slice(); } else { const EXISTENCE_TAG = ['past', 'future', 'lgpe', 'unobtainable', 'cap', 'custom', 'nonexistent']; const nonexistentBanReason = ruleTable.check('nonexistent'); @@ -2088,7 +2030,7 @@ export class RandomTeams { let tagBlacklisted = false; for (const ruleid of ruleTable.tagRules) { if (ruleid.startsWith('*')) continue; - const tagid = ruleid.slice(12); + const tagid = ruleid.slice(12) as ID; const tag = Tags[tagid]; if ((tag.speciesFilter || tag.genericFilter)!(species)) { const existenceTag = EXISTENCE_TAG.includes(tagid); @@ -2112,8 +2054,24 @@ export class RandomTeams { if (pool.includes(num)) continue; pool.push(num); } + this.poolsCacheKey = [requiredType, minSourceGen, ruleTable, requireMoves]; + this.cachedPool = pool.slice(); + this.cachedSpeciesPool = speciesPool.slice(); + } + return {pool, speciesPool}; + } + + randomNPokemon(n: number, requiredType?: string, minSourceGen?: number, ruleTable?: RuleTable, requireMoves = false) { + // Picks `n` random pokemon--no repeats, even among formes + // Also need to either normalize for formes or select formes at random + // Unreleased are okay but no CAP + if (requiredType && !this.dex.types.get(requiredType).exists) { + throw new Error(`"${requiredType}" is not a valid type.`); } + const {pool, speciesPool} = this.getPools(requiredType, minSourceGen, ruleTable, requireMoves); + const isNotCustom = !ruleTable; + const hasDexNumber: {[k: string]: number} = {}; for (let i = 0; i < n; i++) { const num = this.sampleNoReplace(pool); @@ -2386,13 +2344,299 @@ export class RandomTeams { }; if (this.gen === 9) { // Random Tera type - set.teraType = this.sample(this.dex.types.all()).name; + if (this.forceTeraType) { + set.teraType = this.forceTeraType; + } else { + set.teraType = this.sample(this.dex.types.names()); + } } team.push(set); } return team; } + + randomBSSFactorySets: AnyObject = require("./bss-factory-sets.json"); + + randomBSSFactorySet( + species: Species, teamData: RandomTeamsTypes.FactoryTeamDetails + ): RandomTeamsTypes.RandomFactorySet | null { + const id = toID(species.name); + const setList = this.randomBSSFactorySets[id].sets; + + const movesMax: {[k: string]: number} = { + batonpass: 1, + stealthrock: 1, + toxicspikes: 1, + trickroom: 1, + auroraveil: 1, + }; + const weatherAbilities = ['drizzle', 'drought', 'snowwarning', 'sandstream']; + const terrainAbilities: {[k: string]: string} = { + electricsurge: "electric", + psychicsurge: "psychic", + grassysurge: "grassy", + seedsower: "grassy", + mistysurge: "misty", + }; + const terrainItemsRequire: {[k: string]: string} = { + electricseed: "electric", + psychicseed: "psychic", + grassyseed: "grassy", + mistyseed: "misty", + }; + + const maxWantsTera = 2; + + // Build a pool of eligible sets, given the team partners + // Also keep track of sets with moves the team requires + const effectivePool: { + set: BSSFactorySet, moveVariants?: number[], itemVariants?: number, abilityVariants?: number, + }[] = []; + + for (const curSet of setList) { + let reject = false; + + // limit to 2 dedicated tera users per team + if (curSet.wantsTera && teamData.wantsTeraCount && teamData.wantsTeraCount >= maxWantsTera) { + continue; + } + + // reject 2+ weather setters + if (teamData.weather && weatherAbilities.includes(curSet.ability)) { + continue; + } + + if (terrainAbilities[curSet.ability]) { + if (!teamData.terrain) teamData.terrain = []; + teamData.terrain.push(terrainAbilities[curSet.ability]); + } + + for (const item of curSet.item) { + if (terrainItemsRequire[item] && !teamData.terrain?.includes(terrainItemsRequire[item])) { + reject = true; // reject any sets with a seed item possible and no terrain setter to activate it + break; + } + } + + const curSetMoveVariants = []; + for (const move of curSet.moves) { + const variantIndex = this.random(move.length); + const moveId = toID(move[variantIndex]); + if (movesMax[moveId] && teamData.has[moveId] >= movesMax[moveId]) { + reject = true; + break; + } + curSetMoveVariants.push(variantIndex); + } + if (reject) continue; + const set = {set: curSet, moveVariants: curSetMoveVariants}; + effectivePool.push(set); + } + + if (!effectivePool.length) { + if (!teamData.forceResult) return null; + for (const curSet of setList) { + effectivePool.push({set: curSet}); + } + } + + // Sets have individual weight, choose one with weighted random selection + + let setData = this.sample(effectivePool); // Init with unweighted random set as fallback + + const total = effectivePool.reduce((a, b) => a + b.set.weight, 0); + const setRand = this.random(total); + + let cur = 0; + for (const set of effectivePool) { + cur += set.set.weight; + if (cur > setRand) { + setData = set; // Bingo! + break; + } + } + + const moves = []; + for (const [i, moveSlot] of setData.set.moves.entries()) { + moves.push(setData.moveVariants ? moveSlot[setData.moveVariants[i]] : this.sample(moveSlot)); + } + + return { + name: setData.set.species || species.baseSpecies, + species: setData.set.species, + teraType: (this.sampleIfArray(setData.set.teraType)), + gender: setData.set.gender || species.gender || (this.randomChance(1, 2) ? "M" : "F"), + item: this.sampleIfArray(setData.set.item) || "", + ability: this.sampleIfArray(setData.set.ability), + shiny: this.randomChance(1, 1024), + level: 50, + happiness: 255, + evs: {hp: 0, atk: 0, def: 0, spa: 0, spd: 0, spe: 0, ...setData.set.evs}, + ivs: {hp: 31, atk: 31, def: 31, spa: 31, spd: 31, spe: 31, ...setData.set.ivs}, + nature: setData.set.nature || "Serious", + moves, + wantsTera: setData.set.wantsTera, + }; + } + + + randomBSSFactoryTeam(side: PlayerOptions, depth = 0): RandomTeamsTypes.RandomFactorySet[] { + this.enforceNoDirectCustomBanlistChanges(); + + const forceResult = depth >= 4; + + const pokemon = []; + + const pokemonPool = Object.keys(this.randomBSSFactorySets); + + const teamData: TeamData = { + typeCount: {}, + typeComboCount: {}, + baseFormes: {}, + has: {}, + wantsTeraCount: 0, + forceResult: forceResult, + weaknesses: {}, + resistances: {}, + }; + const weatherAbilitiesSet: {[k: string]: string} = { + drizzle: "raindance", + drought: "sunnyday", + snowwarning: "hail", + sandstream: "sandstorm", + }; + const resistanceAbilities: {[k: string]: string[]} = { + waterabsorb: ["Water"], + flashfire: ["Fire"], + lightningrod: ["Electric"], + voltabsorb: ["Electric"], + thickfat: ["Ice", "Fire"], + levitate: ["Ground"], + }; + const limitFactor = Math.ceil(this.maxTeamSize / 6); + /** + * Weighted random shuffle + * Uses the fact that for two uniform variables x1 and x2, x1^(1/w1) is larger than x2^(1/w2) + * with probability equal to w1/(w1+w2), which is what we want. See e.g. here https://arxiv.org/pdf/1012.0256.pdf, + * original paper is behind a paywall. + */ + const shuffledSpecies = []; + for (const speciesName of pokemonPool) { + const sortObject = { + speciesName, + score: Math.pow(this.prng.next(), 1 / this.randomBSSFactorySets[speciesName].weight), + }; + shuffledSpecies.push(sortObject); + } + shuffledSpecies.sort((a, b) => a.score - b.score); + + while (shuffledSpecies.length && pokemon.length < this.maxTeamSize) { + // repeated popping from weighted shuffle is equivalent to repeated weighted sampling without replacement + const species = this.dex.species.get(shuffledSpecies.pop()!.speciesName); + if (!species.exists) continue; + + if (this.forceMonotype && !species.types.includes(this.forceMonotype)) continue; + + // Limit to one of each species (Species Clause) + if (teamData.baseFormes[species.baseSpecies]) continue; + + // Limit 2 of any type (most of the time) + const types = species.types; + let skip = false; + if (!this.forceMonotype) { + for (const type of types) { + if (teamData.typeCount[type] >= 2 * limitFactor && this.randomChance(4, 5)) { + skip = true; + break; + } + } + } + if (skip) continue; + + const set = this.randomBSSFactorySet(species, teamData); + if (!set) continue; + + // Limit 1 of any type combination + let typeCombo = types.slice().sort().join(); + if (set.ability === "Drought" || set.ability === "Drizzle") { + // Drought and Drizzle don't count towards the type combo limit + typeCombo = set.ability; + } + if (!this.forceMonotype && teamData.typeComboCount[typeCombo] >= limitFactor) continue; + + const itemData = this.dex.items.get(set.item); + if (teamData.has[itemData.id]) continue; // Item Clause + + // Okay, the set passes, add it to our team + pokemon.push(set); + + // Now that our Pokemon has passed all checks, we can update team data: + for (const type of types) { + if (type in teamData.typeCount) { + teamData.typeCount[type]++; + } else { + teamData.typeCount[type] = 1; + } + } + if (typeCombo in teamData.typeComboCount) { + teamData.typeComboCount[typeCombo]++; + } else { + teamData.typeComboCount[typeCombo] = 1; + } + + teamData.baseFormes[species.baseSpecies] = 1; + + teamData.has[itemData.id] = 1; + + if (set.wantsTera) { + if (!teamData.wantsTeraCount) teamData.wantsTeraCount = 0; + teamData.wantsTeraCount++; + } + + const abilityState = this.dex.abilities.get(set.ability); + if (abilityState.id in weatherAbilitiesSet) { + teamData.weather = weatherAbilitiesSet[abilityState.id]; + } + + for (const move of set.moves) { + const moveId = toID(move); + if (moveId in teamData.has) { + teamData.has[moveId]++; + } else { + teamData.has[moveId] = 1; + } + } + + for (const typeName of this.dex.types.names()) { + // Cover any major weakness (3+) with at least one resistance + if (teamData.resistances[typeName] >= 1) continue; + if (resistanceAbilities[abilityState.id]?.includes(typeName) || !this.dex.getImmunity(typeName, types)) { + // Heuristic: assume that Pokémon with these abilities don't have (too) negative typing. + teamData.resistances[typeName] = (teamData.resistances[typeName] || 0) + 1; + if (teamData.resistances[typeName] >= 1) teamData.weaknesses[typeName] = 0; + continue; + } + const typeMod = this.dex.getEffectiveness(typeName, types); + if (typeMod < 0) { + teamData.resistances[typeName] = (teamData.resistances[typeName] || 0) + 1; + if (teamData.resistances[typeName] >= 1) teamData.weaknesses[typeName] = 0; + } else if (typeMod > 0) { + teamData.weaknesses[typeName] = (teamData.weaknesses[typeName] || 0) + 1; + } + } + } + if (!teamData.forceResult && pokemon.length < this.maxTeamSize) return this.randomBSSFactoryTeam(side, ++depth); + + // Quality control we cannot afford for monotype + if (!teamData.forceResult && !this.forceMonotype) { + for (const type in teamData.weaknesses) { + if (teamData.weaknesses[type] >= 3 * limitFactor) return this.randomBSSFactoryTeam(side, ++depth); + } + } + + return pokemon; + } } export default RandomTeams; diff --git a/data/random-battles/gen9baby/sets.json b/data/random-battles/gen9baby/sets.json new file mode 100644 index 000000000000..c93eb3da46a6 --- /dev/null +++ b/data/random-battles/gen9baby/sets.json @@ -0,0 +1,3364 @@ +{ + "aipom": { + "level": 6, + "sets": [ + { + "role": "Wallbreaker", + "movepool": ["Brick Break", "Double-Edge", "Fake Out", "Fire Punch", "Gunk Shot", "Knock Off", "U-turn"], + "abilities": ["Pickup"], + "teraTypes": ["Dark", "Normal"] + } + ] + }, + "arrokuda": { + "level": 7, + "sets": [ + { + "role": "Wallbreaker", + "movepool": ["Close Combat", "Crunch", "Flip Turn", "Psychic Fangs", "Waterfall"], + "abilities": ["Swift Swim"], + "teraTypes": ["Fighting"] + } + ] + }, + "axew": { + "level": 6, + "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["Dragon Claw", "Dragon Dance", "Iron Head", "Outrage", "Stomping Tantrum"], + "abilities": ["Mold Breaker"], + "teraTypes": ["Ground", "Steel"] + }, + { + "role": "Bulky Setup", + "movepool": ["Iron Head", "Scale Shot", "Stomping Tantrum", "Swords Dance"], + "abilities": ["Mold Breaker"], + "teraTypes": ["Ground", "Steel"] + } + ] + }, + "azurill": { + "level": 7, + "sets": [ + { + "role": "Bulky Setup", + "movepool": ["Aqua Jet", "Belly Drum", "Body Slam", "Facade"], + "abilities": ["Huge Power"], + "teraTypes": ["Water"] + } + ] + }, + "bagon": { + "level": 6, + "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["Dragon Claw", "Dragon Dance", "Fire Fang", "Iron Head", "Outrage"], + "abilities": ["Sheer Force"], + "teraTypes": ["Fire", "Steel"] + } + ] + }, + "barboach": { + "level": 7, + "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["Dragon Dance", "Earthquake", "Stone Edge", "Waterfall"], + "abilities": ["Oblivious"], + "teraTypes": ["Ground", "Steel"] + } + ] + }, + "basculinwhitestriped": { + "level": 5, + "sets": [ + { + "role": "Fast Attacker", + "movepool": ["Flip Turn", "Hydro Pump", "Ice Beam", "Wave Crash"], + "abilities": ["Adaptability"], + "teraTypes": ["Water"] + }, + { + "role": "Wallbreaker", + "movepool": ["Aqua Jet", "Flip Turn", "Ice Beam", "Wave Crash"], + "abilities": ["Adaptability"], + "teraTypes": ["Water"] + } + ] + }, + "bellsprout": { + "level": 7, + "sets": [ + { + "role": "Bulky Setup", + "movepool": ["Poison Jab", "Power Whip", "Sucker Punch", "Swords Dance"], + "abilities": ["Chlorophyll"], + "teraTypes": ["Dark", "Grass"] + }, + { + "role": "Bulky Attacker", + "movepool": ["Knock Off", "Power Whip", "Sleep Powder", "Sludge Bomb", "Strength Sap", "Sucker Punch"], + "abilities": ["Chlorophyll"], + "teraTypes": ["Dark", "Steel"] + }, + { + "role": "Setup Sweeper", + "movepool": ["Power Whip", "Sludge Bomb", "Sunny Day", "Weather Ball"], + "abilities": ["Chlorophyll"], + "teraTypes": ["Fire"] + } + ] + }, + "bergmite": { + "level": 7, + "sets": [ + { + "role": "Bulky Support", + "movepool": ["Curse", "Icicle Spear", "Rapid Spin", "Recover", "Stone Edge"], + "abilities": ["Sturdy"], + "teraTypes": ["Steel", "Water"] + } + ] + }, + "blitzle": { + "level": 7, + "sets": [ + { + "role": "Wallbreaker", + "movepool": ["Body Slam", "Double-Edge", "Flame Charge", "Supercell Slam", "Thunder Wave", "Trailblaze", "Volt Switch"], + "abilities": ["Sap Sipper"], + "teraTypes": ["Electric", "Fire", "Grass", "Normal"] + } + ] + }, + "bonsly": { + "level": 7, + "sets": [ + { + "role": "Bulky Support", + "movepool": ["Earthquake", "Rock Blast", "Spikes", "Stealth Rock", "Stone Edge", "Sucker Punch"], + "abilities": ["Sturdy"], + "teraTypes": ["Dragon", "Fairy"] + } + ] + }, + "bounsweet": { + "level": 9, + "sets": [ + { + "role": "Bulky Support", + "movepool": ["Dazzling Gleam", "Giga Drain", "Rapid Spin", "Synthesis", "Zen Headbutt"], + "abilities": ["Oblivious"], + "teraTypes": ["Steel", "Water"] + } + ] + }, + "bramblin": { + "level": 6, + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["Poltergeist", "Power Whip", "Rapid Spin", "Spikes", "Strength Sap"], + "abilities": ["Wind Rider"], + "teraTypes": ["Fairy", "Steel", "Water"] + } + ] + }, + "bronzor": { + "level": 7, + "sets": [ + { + "role": "Bulky Support", + "movepool": ["Earthquake", "Flash Cannon", "Hypnosis", "Psychic", "Stealth Rock"], + "abilities": ["Levitate"], + "teraTypes": ["Electric", "Water"] + }, + { + "role": "Bulky Setup", + "movepool": ["Calm Mind", "Flash Cannon", "Psychic", "Shadow Ball"], + "abilities": ["Levitate"], + "teraTypes": ["Electric", "Water"] + } + ] + }, + "buizel": { + "level": 6, + "sets": [ + { + "role": "Wallbreaker", + "movepool": ["Crunch", "Flip Turn", "Ice Spinner", "Wave Crash"], + "abilities": ["Swift Swim", "Water Veil"], + "teraTypes": ["Ice", "Water"] + }, + { + "role": "Bulky Setup", + "movepool": ["Bulk Up", "Crunch", "Ice Spinner", "Wave Crash"], + "abilities": ["Swift Swim", "Water Veil"], + "teraTypes": ["Ice", "Water"] + } + ] + }, + "bulbasaur": { + "level": 6, + "sets": [ + { + "role": "Bulky Support", + "movepool": ["Giga Drain", "Knock Off", "Power Whip", "Sleep Powder", "Sludge Bomb", "Synthesis"], + "abilities": ["Chlorophyll", "Overgrow"], + "teraTypes": ["Dark", "Water"] + }, + { + "role": "Setup Sweeper", + "movepool": ["Power Whip", "Sludge Bomb", "Sunny Day", "Weather Ball"], + "abilities": ["Chlorophyll"], + "teraTypes": ["Fire"] + } + ] + }, + "cacnea": { + "level": 6, + "sets": [ + { + "role": "Bulky Support", + "movepool": ["Drain Punch", "Giga Drain", "Leaf Storm", "Poison Jab", "Spikes", "Sucker Punch", "Toxic Spikes"], + "abilities": ["Water Absorb"], + "teraTypes": ["Poison", "Steel"] + }, + { + "role": "Bulky Setup", + "movepool": ["Bullet Seed", "Drain Punch", "Sucker Punch", "Swords Dance", "Thunder Punch"], + "abilities": ["Water Absorb"], + "teraTypes": ["Dark", "Electric", "Fighting", "Grass"] + } + ] + }, + "capsakid": { + "level": 7, + "sets": [ + { + "role": "Wallbreaker", + "movepool": ["Bullet Seed", "Crunch", "Leaf Storm", "Stomping Tantrum"], + "abilities": ["Chlorophyll"], + "teraTypes": ["Dark", "Ground"] + }, + { + "role": "Fast Support", + "movepool": ["Giga Drain", "Leaf Storm", "Stomping Tantrum", "Super Fang", "Thief"], + "abilities": ["Chlorophyll"], + "teraTypes": ["Poison", "Water"] + } + ] + }, + "cetoddle": { + "level": 7, + "sets": [ + { + "role": "Wallbreaker", + "movepool": ["Earthquake", "Ice Shard", "Icicle Crash", "Knock Off", "Liquidation", "Play Rough", "Yawn"], + "abilities": ["Sheer Force"], + "teraTypes": ["Fairy", "Water"] + }, + { + "role": "Bulky Setup", + "movepool": ["Belly Drum", "Earthquake", "Ice Shard", "Icicle Spear"], + "abilities": ["Thick Fat"], + "teraTypes": ["Ground", "Ice"] + } + ] + }, + "charcadet": { + "level": 8, + "sets": [ + { + "role": "Fast Support", + "movepool": ["Clear Smog", "Flame Charge", "Lava Plume", "Will-O-Wisp"], + "abilities": ["Flame Body", "Flash Fire"], + "teraTypes": ["Dragon"] + } + ] + }, + "charmander": { + "level": 7, + "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["Brick Break", "Dragon Dance", "Flare Blitz", "Outrage", "Thunder Punch"], + "abilities": ["Blaze"], + "teraTypes": ["Dragon", "Electric", "Fighting"] + } + ] + }, + "chespin": { + "level": 7, + "sets": [ + { + "role": "Bulky Support", + "movepool": ["Bullet Seed", "Drain Punch", "Rock Slide", "Spikes", "Synthesis"], + "abilities": ["Bulletproof"], + "teraTypes": ["Poison", "Steel"] + } + ] + }, + "chewtle": { + "level": 7, + "sets": [ + { + "role": "Bulky Setup", + "movepool": ["Crunch", "Ice Fang", "Liquidation", "Shell Smash"], + "abilities": ["Strong Jaw"], + "teraTypes": ["Dark", "Ice", "Steel"] + } + ] + }, + "chikorita": { + "level": 7, + "sets": [ + { + "role": "Bulky Setup", + "movepool": ["Body Slam", "Bullet Seed", "Double-Edge", "Swords Dance", "Synthesis"], + "abilities": ["Overgrow"], + "teraTypes": ["Grass", "Normal", "Steel"] + } + ] + }, + "chimchar": { + "level": 7, + "sets": [ + { + "role": "Bulky Setup", + "movepool": ["Bulk Up", "Flare Blitz", "Knock Off", "Slack Off"], + "abilities": ["Blaze"], + "teraTypes": ["Dark", "Dragon"] + }, + { + "role": "Fast Attacker", + "movepool": ["Flare Blitz", "Gunk Shot", "Knock Off", "Swords Dance", "Thunder Punch", "U-turn"], + "abilities": ["Blaze", "Iron Fist"], + "teraTypes": ["Dark", "Electric", "Fire", "Poison"] + }, + { + "role": "Bulky Attacker", + "movepool": ["Encore", "Flamethrower", "Knock Off", "Slack Off", "Stealth Rock", "U-turn", "Will-O-Wisp"], + "abilities": ["Blaze"], + "teraTypes": ["Dragon", "Fairy"] + } + ] + }, + "chinchou": { + "level": 7, + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["Discharge", "Ice Beam", "Scald", "Thunder Wave", "Volt Switch"], + "abilities": ["Volt Absorb"], + "teraTypes": ["Flying", "Water"] + }, + { + "role": "Fast Support", + "movepool": ["Discharge", "Flip Turn", "Scald", "Volt Switch"], + "abilities": ["Volt Absorb"], + "teraTypes": ["Flying"] + } + ] + }, + "chingling": { + "level": 7, + "sets": [ + { + "role": "Bulky Support", + "movepool": ["Knock Off", "Psychic", "Recover", "Thunder Wave"], + "abilities": ["Levitate"], + "teraTypes": ["Fairy", "Steel"] + }, + { + "role": "Bulky Setup", + "movepool": ["Calm Mind", "Dazzling Gleam", "Psychic", "Recover"], + "abilities": ["Levitate"], + "teraTypes": ["Fairy", "Steel"] + } + ] + }, + "clauncher": { + "level": 7, + "sets": [ + { + "role": "Fast Attacker", + "movepool": ["Aura Sphere", "Dark Pulse", "Dragon Pulse", "Flip Turn", "Ice Beam", "Water Pulse"], + "abilities": ["Mega Launcher"], + "teraTypes": ["Dark", "Dragon", "Fighting", "Water"] + }, + { + "role": "Bulky Attacker", + "movepool": ["Aura Sphere", "Dark Pulse", "Dragon Pulse", "Flip Turn", "Ice Beam", "Water Pulse"], + "abilities": ["Mega Launcher"], + "teraTypes": ["Dark", "Dragon", "Fighting", "Water"] + } + ] + }, + "cleffa": { + "level": 9, + "sets": [ + { + "role": "Bulky Setup", + "movepool": ["Calm Mind", "Draining Kiss", "Fire Blast", "Psyshock"], + "abilities": ["Magic Guard"], + "teraTypes": ["Fire"] + }, + { + "role": "Bulky Support", + "movepool": ["Alluring Voice", "Draining Kiss", "Encore", "Protect", "Thunder Wave", "Wish"], + "abilities": ["Magic Guard"], + "teraTypes": ["Poison", "Steel"] + } + ] + }, + "corphish": { + "level": 6, + "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["Aqua Jet", "Crabhammer", "Dragon Dance", "Knock Off"], + "abilities": ["Adaptability"], + "teraTypes": ["Water"] + } + ] + }, + "cottonee": { + "level": 7, + "sets": [ + { + "role": "Fast Support", + "movepool": ["Dazzling Gleam", "Encore", "Giga Drain", "Stun Spore", "Taunt"], + "abilities": ["Prankster"], + "teraTypes": ["Poison", "Steel"] + } + ] + }, + "crabrawler": { + "level": 6, + "sets": [ + { + "role": "Bulky Setup", + "movepool": ["Bulk Up", "Drain Punch", "Earthquake", "Gunk Shot", "Ice Punch", "Knock Off", "Thunder Punch"], + "abilities": ["Iron Fist"], + "teraTypes": ["Dark", "Electric", "Ground", "Poison"] + } + ] + }, + "cranidos": { + "level": 6, + "sets": [ + { + "role": "Fast Attacker", + "movepool": ["Earthquake", "Fire Punch", "Head Smash", "Rock Slide", "Zen Headbutt"], + "abilities": ["Sheer Force"], + "teraTypes": ["Psychic", "Rock"] + }, + { + "role": "Wallbreaker", + "movepool": ["Earthquake", "Fire Punch", "Rock Slide", "Swords Dance", "Zen Headbutt"], + "abilities": ["Sheer Force"], + "teraTypes": ["Ground", "Rock"] + } + ] + }, + "croagunk": { + "level": 7, + "sets": [ + { + "role": "Bulky Setup", + "movepool": ["Bulk Up", "Drain Punch", "Earthquake", "Gunk Shot", "Knock Off", "Sucker Punch"], + "abilities": ["Dry Skin"], + "teraTypes": ["Dark", "Fighting", "Ground"] + } + ] + }, + "cubchoo": { + "level": 7, + "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["Blizzard", "Liquidation", "Play Rough", "Snowscape", "Surf"], + "abilities": ["Slush Rush"], + "teraTypes": ["Ice", "Water"] + } + ] + }, + "cufant": { + "level": 7, + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["Earthquake", "Iron Head", "Play Rough", "Rock Slide", "Stealth Rock", "Superpower"], + "abilities": ["Sheer Force"], + "teraTypes": ["Fairy"] + } + ] + }, + "cutiefly": { + "level": 5, + "sets": [ + { + "role": "Fast Support", + "movepool": ["Bug Buzz", "Moonblast", "Sticky Web", "Stun Spore", "U-turn"], + "abilities": ["Shield Dust"], + "teraTypes": ["Ghost"] + }, + { + "role": "Tera Blast user", + "movepool": ["Bug Buzz", "Moonblast", "Quiver Dance", "Tera Blast"], + "abilities": ["Shield Dust"], + "teraTypes": ["Ground"] + } + ] + }, + "cyndaquil": { + "level": 7, + "sets": [ + { + "role": "Fast Attacker", + "movepool": ["Eruption", "Extrasensory", "Fire Blast", "Play Rough"], + "abilities": ["Flash Fire"], + "teraTypes": ["Fire"] + } + ] + }, + "deerling": { + "level": 6, + "sets": [ + { + "role": "Fast Support", + "movepool": ["Bullet Seed", "Headbutt", "Synthesis", "Thunder Wave"], + "abilities": ["Serene Grace"], + "teraTypes": ["Ghost", "Normal"] + } + ] + }, + "deino": { + "level": 7, + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["Crunch", "Outrage", "Thunder Wave", "Work Up"], + "abilities": ["Hustle"], + "teraTypes": ["Poison"] + }, + { + "role": "Bulky Support", + "movepool": ["Crunch", "Outrage", "Roar", "Thunder Wave"], + "abilities": ["Hustle"], + "teraTypes": ["Poison"] + } + ] + }, + "dewpider": { + "level": 6, + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["Giga Drain", "Ice Beam", "Leech Life", "Liquidation", "Sticky Web", "Surf"], + "abilities": ["Water Bubble"], + "teraTypes": ["Water"] + } + ] + }, + "diglett": { + "level": 6, + "sets": [ + { + "role": "Wallbreaker", + "movepool": ["Earthquake", "Stealth Rock", "Stone Edge", "Sucker Punch", "Swords Dance"], + "abilities": ["Arena Trap"], + "teraTypes": ["Ground", "Rock"] + } + ] + }, + "diglettalola": { + "level": 6, + "sets": [ + { + "role": "Wallbreaker", + "movepool": ["Earthquake", "Iron Head", "Stealth Rock", "Stone Edge", "Swords Dance"], + "abilities": ["Sand Force", "Tangling Hair"], + "teraTypes": ["Ground", "Rock", "Steel"] + } + ] + }, + "doduo": { + "level": 6, + "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["Body Slam", "Brave Bird", "Double-Edge", "Knock Off", "Swords Dance"], + "abilities": ["Early Bird"], + "teraTypes": ["Dark", "Flying", "Normal"] + } + ] + }, + "dratini": { + "level": 7, + "sets": [ + { + "role": "Bulky Setup", + "movepool": ["Dragon Dance", "Extreme Speed", "Iron Head", "Outrage", "Rest"], + "abilities": ["Shed Skin"], + "teraTypes": ["Steel"] + } + ] + }, + "drifloon": { + "level": 7, + "sets": [ + { + "role": "Bulky Support", + "movepool": ["Defog", "Knock Off", "Pain Split", "Shadow Ball", "Thunder Wave", "Will-O-Wisp"], + "abilities": ["Aftermath"], + "teraTypes": ["Fairy"] + }, + { + "role": "Fast Support", + "movepool": ["Acrobatics", "Defog", "Knock Off", "Pain Split", "Shadow Ball", "Thunder Wave", "Will-O-Wisp"], + "abilities": ["Unburden"], + "teraTypes": ["Fairy", "Flying"] + } + ] + }, + "drilbur": { + "level": 6, + "sets": [ + { + "role": "Bulky Setup", + "movepool": ["Earthquake", "Rapid Spin", "Rock Slide", "Swords Dance"], + "abilities": ["Mold Breaker", "Sand Rush"], + "teraTypes": ["Ground", "Rock"] + }, + { + "role": "Bulky Support", + "movepool": ["Earthquake", "Poison Jab", "Rapid Spin", "Swords Dance"], + "abilities": ["Mold Breaker", "Sand Rush"], + "teraTypes": ["Ground", "Poison"] + } + ] + }, + "drowzee": { + "level": 7, + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["Drain Punch", "Encore", "Knock Off", "Psychic", "Thunder Wave"], + "abilities": ["Inner Focus", "Insomnia"], + "teraTypes": ["Dark", "Fighting"] + }, + { + "role": "Bulky Setup", + "movepool": ["Calm Mind", "Draining Kiss", "Encore", "Knock Off", "Psychic", "Thunder Wave"], + "abilities": ["Inner Focus", "Insomnia"], + "teraTypes": ["Fairy"] + } + ] + }, + "ducklett": { + "level": 7, + "sets": [ + { + "role": "Bulky Support", + "movepool": ["Aqua Jet", "Brave Bird", "Defog", "Roost", "Surf"], + "abilities": ["Hydration"], + "teraTypes": ["Ground"] + } + ] + }, + "dunsparce": { + "level": 5, + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["Body Slam", "Coil", "Earthquake", "Roost"], + "abilities": ["Serene Grace"], + "teraTypes": ["Ground", "Poison"] + }, + { + "role": "Bulky Support", + "movepool": ["Earthquake", "Glare", "Headbutt", "Roost"], + "abilities": ["Serene Grace"], + "teraTypes": ["Ghost", "Ground"] + }, + { + "role": "Bulky Setup", + "movepool": ["Calm Mind", "Earth Power", "Hyper Voice", "Roost", "Shadow Ball"], + "abilities": ["Rattled"], + "teraTypes": ["Fairy", "Ghost"] + } + ] + }, + "duraludon": { + "level": 5, + "sets": [ + { + "role": "Bulky Setup", + "movepool": ["Body Press", "Draco Meteor", "Dragon Pulse", "Flash Cannon", "Iron Defense"], + "abilities": ["Light Metal"], + "teraTypes": ["Fairy", "Fighting"] + }, + { + "role": "Wallbreaker", + "movepool": ["Body Press", "Draco Meteor", "Flash Cannon", "Thunderbolt"], + "abilities": ["Light Metal"], + "teraTypes": ["Dragon", "Electric", "Fighting", "Steel"] + }, + { + "role": "Bulky Attacker", + "movepool": ["Body Press", "Draco Meteor", "Dragon Pulse", "Flash Cannon", "Stealth Rock", "Thunder Wave"], + "abilities": ["Light Metal"], + "teraTypes": ["Fighting"] + } + ] + }, + "duskull": { + "level": 7, + "sets": [ + { + "role": "Bulky Support", + "movepool": ["Leech Life", "Pain Split", "Poltergeist", "Shadow Sneak", "Will-O-Wisp"], + "abilities": ["Levitate"], + "teraTypes": ["Fairy", "Steel", "Water"] + } + ] + }, + "eevee": { + "level": 7, + "sets": [ + { + "role": "Bulky Support", + "movepool": ["Body Slam", "Double-Edge", "Protect", "Shadow Ball", "Wish"], + "abilities": ["Adaptability"], + "teraTypes": ["Ghost", "Normal"] + }, + { + "role": "Tera Blast user", + "movepool": ["Calm Mind", "Protect", "Tera Blast", "Wish"], + "abilities": ["Adaptability"], + "teraTypes": ["Ghost"] + } + ] + }, + "ekans": { + "level": 6, + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["Earthquake", "Glare", "Gunk Shot", "Knock Off", "Toxic Spikes"], + "abilities": ["Intimidate"], + "teraTypes": ["Dark", "Ground"] + }, + { + "role": "Bulky Setup", + "movepool": ["Coil", "Earthquake", "Gunk Shot", "Trailblaze"], + "abilities": ["Intimidate"], + "teraTypes": ["Dark", "Grass", "Ground"] + } + ] + }, + "elekid": { + "level": 6, + "sets": [ + { + "role": "Wallbreaker", + "movepool": ["Cross Chop", "Ice Punch", "Knock Off", "Psychic", "Supercell Slam", "Taunt", "Volt Switch"], + "abilities": ["Static", "Vital Spirit"], + "teraTypes": ["Dark", "Electric", "Fighting", "Ice"] + } + ] + }, + "espurr": { + "level": 6, + "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["Dark Pulse", "Nasty Plot", "Psychic", "Thunderbolt"], + "abilities": ["Infiltrator"], + "teraTypes": ["Dark", "Electric", "Psychic"] + }, + { + "role": "Fast Support", + "movepool": ["Dark Pulse", "Nasty Plot", "Psychic", "Thunder Wave", "Thunderbolt", "Trick"], + "abilities": ["Infiltrator"], + "teraTypes": ["Dark", "Electric", "Psychic"] + } + ] + }, + "exeggcute": { + "level": 7, + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["Giga Drain", "Moonlight", "Psychic", "Sleep Powder", "Stun Spore"], + "abilities": ["Harvest"], + "teraTypes": ["Poison", "Steel"] + } + ] + }, + "feebas": { + "level": 8, + "sets": [ + { + "role": "Fast Support", + "movepool": ["Haze", "Hypnosis", "Ice Beam", "Scale Shot", "Waterfall"], + "abilities": ["Adaptability"], + "teraTypes": ["Dragon", "Ice"] + } + ] + }, + "fennekin": { + "level": 6, + "sets": [ + { + "role": "Bulky Setup", + "movepool": ["Calm Mind", "Encore", "Flamethrower", "Mud Shot", "Psychic", "Will-O-Wisp"], + "abilities": ["Blaze"], + "teraTypes": ["Dragon", "Fairy", "Ground"] + } + ] + }, + "fidough": { + "level": 7, + "sets": [ + { + "role": "Bulky Support", + "movepool": ["Play Rough", "Protect", "Stomping Tantrum", "Wish"], + "abilities": ["Own Tempo"], + "teraTypes": ["Ground", "Steel"] + } + ] + }, + "finizen": { + "level": 7, + "sets": [ + { + "role": "Wallbreaker", + "movepool": ["Agility", "Boomburst", "Encore", "Ice Beam", "Surf"], + "abilities": ["Water Veil"], + "teraTypes": ["Normal"] + } + ] + }, + "finneon": { + "level": 7, + "sets": [ + { + "role": "Fast Support", + "movepool": ["Alluring Voice", "Ice Beam", "Surf", "Thief", "U-turn"], + "abilities": ["Storm Drain", "Swift Swim"], + "teraTypes": ["Fairy"] + } + ] + }, + "flabebe": { + "level": 7, + "sets": [ + { + "role": "Bulky Setup", + "movepool": ["Calm Mind", "Moonblast", "Psychic", "Synthesis"], + "abilities": ["Flower Veil"], + "teraTypes": ["Poison", "Steel"] + }, + { + "role": "Tera Blast user", + "movepool": ["Calm Mind", "Moonblast", "Synthesis", "Tera Blast"], + "abilities": ["Flower Veil"], + "teraTypes": ["Ground"] + } + ] + }, + "fletchling": { + "level": 6, + "sets": [ + { + "role": "Tera Blast user", + "movepool": ["Acrobatics", "Flare Blitz", "Swords Dance", "Tera Blast"], + "abilities": ["Gale Wings"], + "teraTypes": ["Ground"] + }, + { + "role": "Bulky Support", + "movepool": ["Brave Bird", "Defog", "Double-Edge", "Heat Wave", "Roost", "Taunt", "U-turn"], + "abilities": ["Gale Wings"], + "teraTypes": ["Steel"] + } + ] + }, + "flittle": { + "level": 5, + "sets": [ + { + "role": "Bulky Setup", + "movepool": ["Calm Mind", "Protect", "Stored Power", "Substitute"], + "abilities": ["Speed Boost"], + "teraTypes": ["Fairy"] + }, + { + "role": "Tera Blast user", + "movepool": ["Calm Mind", "Protect", "Stored Power", "Substitute", "Tera Blast"], + "abilities": ["Speed Boost"], + "teraTypes": ["Fairy", "Fighting"] + } + ] + }, + "fomantis": { + "level": 7, + "sets": [ + { + "role": "Bulky Support", + "movepool": ["Defog", "Leaf Storm", "Superpower", "Synthesis"], + "abilities": ["Contrary"], + "teraTypes": ["Fighting", "Steel"] + } + ] + }, + "foongus": { + "level": 7, + "sets": [ + { + "role": "Bulky Support", + "movepool": ["Clear Smog", "Foul Play", "Giga Drain", "Leaf Storm", "Sludge Bomb", "Spore", "Stun Spore"], + "abilities": ["Regenerator"], + "teraTypes": ["Steel", "Water"] + }, + { + "role": "Bulky Attacker", + "movepool": ["Giga Drain", "Sludge Bomb", "Spore", "Synthesis"], + "abilities": ["Regenerator"], + "teraTypes": ["Steel", "Water"] + } + ] + }, + "frigibax": { + "level": 6, + "sets": [ + { + "role": "Bulky Setup", + "movepool": ["Crunch", "Icicle Spear", "Outrage", "Swords Dance"], + "abilities": ["Thermal Exchange"], + "teraTypes": ["Dragon", "Fairy", "Ice"] + } + ] + }, + "froakie": { + "level": 6, + "sets": [ + { + "role": "Fast Support", + "movepool": ["Ice Beam", "Spikes", "Surf", "Toxic Spikes", "U-turn"], + "abilities": ["Protean"], + "teraTypes": ["Ice", "Water"] + } + ] + }, + "fuecoco": { + "level": 7, + "sets": [ + { + "role": "Bulky Support", + "movepool": ["Encore", "Flamethrower", "Roar", "Slack Off", "Stomping Tantrum", "Will-O-Wisp"], + "abilities": ["Unaware"], + "teraTypes": ["Dragon", "Fairy"] + } + ] + }, + "gastly": { + "level": 6, + "sets": [ + { + "role": "Fast Attacker", + "movepool": ["Dazzling Gleam", "Nasty Plot", "Shadow Ball", "Sludge Bomb", "Trick", "Will-O-Wisp"], + "abilities": ["Levitate"], + "teraTypes": ["Fairy", "Ghost", "Poison"] + }, + { + "role": "Wallbreaker", + "movepool": ["Dazzling Gleam", "Nasty Plot", "Shadow Ball", "Sludge Bomb", "Thunderbolt"], + "abilities": ["Levitate"], + "teraTypes": ["Electric", "Fairy", "Ghost", "Poison"] + } + ] + }, + "geodude": { + "level": 7, + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["Earthquake", "Explosion", "Rock Blast", "Rock Polish", "Stealth Rock", "Stone Edge"], + "abilities": ["Sturdy"], + "teraTypes": ["Grass"] + } + ] + }, + "geodudealola": { + "level": 7, + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["Double-Edge", "Earthquake", "Explosion", "Rock Blast", "Rock Polish", "Stealth Rock", "Stone Edge", "Thunder Wave", "Volt Switch"], + "abilities": ["Galvanize"], + "teraTypes": ["Grass", "Ground"] + } + ] + }, + "gible": { + "level": 7, + "sets": [ + { + "role": "Bulky Setup", + "movepool": ["Earthquake", "Iron Head", "Scale Shot", "Swords Dance"], + "abilities": ["Rough Skin"], + "teraTypes": ["Ground", "Steel"] + }, + { + "role": "Fast Attacker", + "movepool": ["Dragon Claw", "Earthquake", "Iron Head", "Outrage", "Stealth Rock", "Stone Edge"], + "abilities": ["Rough Skin"], + "teraTypes": ["Dragon", "Ground", "Steel"] + } + ] + }, + "gimmighoul": { + "level": 7, + "sets": [ + { + "role": "Bulky Support", + "movepool": ["Nasty Plot", "Power Gem", "Rest", "Shadow Ball", "Sleep Talk"], + "abilities": ["Rattled"], + "teraTypes": ["Fairy"] + }, + { + "role": "Tera Blast user", + "movepool": ["Nasty Plot", "Power Gem", "Shadow Ball", "Tera Blast"], + "abilities": ["Rattled"], + "teraTypes": ["Fairy", "Fighting"] + } + ] + }, + "gimmighoulroaming": { + "level": 6, + "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["Nasty Plot", "Power Gem", "Shadow Ball", "Substitute"], + "abilities": ["Run Away"], + "teraTypes": ["Ghost", "Rock"] + }, + { + "role": "Tera Blast user", + "movepool": ["Nasty Plot", "Shadow Ball", "Substitute", "Tera Blast"], + "abilities": ["Run Away"], + "teraTypes": ["Fairy", "Fighting"] + } + ] + }, + "girafarig": { + "level": 5, + "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["Dazzling Gleam", "Nasty Plot", "Psychic", "Shadow Ball", "Thunderbolt"], + "abilities": ["Sap Sipper"], + "teraTypes": ["Electric", "Fairy", "Ghost"] + }, + { + "role": "Bulky Setup", + "movepool": ["Hyper Voice", "Nasty Plot", "Psychic", "Psyshock", "Thunderbolt"], + "abilities": ["Sap Sipper"], + "teraTypes": ["Normal"] + } + ] + }, + "gligar": { + "level": 5, + "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["Dual Wingbeat", "Earthquake", "Knock Off", "Swords Dance"], + "abilities": ["Immunity"], + "teraTypes": ["Steel", "Water"] + }, + { + "role": "Fast Support", + "movepool": ["Earthquake", "Knock Off", "Spikes", "Stealth Rock", "Toxic Spikes", "U-turn"], + "abilities": ["Immunity"], + "teraTypes": ["Steel", "Water"] + } + ] + }, + "glimmet": { + "level": 6, + "sets": [ + { + "role": "Fast Support", + "movepool": ["Mud Shot", "Power Gem", "Sludge Wave", "Spikes", "Stealth Rock"], + "abilities": ["Toxic Debris"], + "teraTypes": ["Ghost", "Grass"] + } + ] + }, + "golett": { + "level": 7, + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["Dynamic Punch", "Earthquake", "Poltergeist", "Rock Tomb", "Stealth Rock"], + "abilities": ["No Guard"], + "teraTypes": ["Fighting"] + } + ] + }, + "goomy": { + "level": 7, + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["Dragon Pulse", "Rest", "Sleep Talk", "Sludge Bomb", "Thunderbolt"], + "abilities": ["Sap Sipper"], + "teraTypes": ["Electric", "Poison", "Water"] + } + ] + }, + "gothita": { + "level": 7, + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["Dark Pulse", "Nasty Plot", "Psychic", "Thunderbolt", "Trick"], + "abilities": ["Shadow Tag"], + "teraTypes": ["Dark", "Electric", "Fairy"] + } + ] + }, + "greavard": { + "level": 7, + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["Pain Split", "Play Rough", "Poltergeist", "Roar", "Shadow Sneak", "Yawn"], + "abilities": ["Fluffy"], + "teraTypes": ["Fairy"] + } + ] + }, + "grimer": { + "level": 6, + "sets": [ + { + "role": "Bulky Setup", + "movepool": ["Curse", "Drain Punch", "Gunk Shot", "Poison Jab", "Shadow Sneak"], + "abilities": ["Poison Touch"], + "teraTypes": ["Dark", "Fighting"] + } + ] + }, + "grimeralola": { + "level": 6, + "sets": [ + { + "role": "Bulky Setup", + "movepool": ["Curse", "Drain Punch", "Gunk Shot", "Knock Off", "Poison Jab"], + "abilities": ["Poison Touch"], + "teraTypes": ["Dark", "Fighting"] + } + ] + }, + "grookey": { + "level": 6, + "sets": [ + { + "role": "Wallbreaker", + "movepool": ["Drain Punch", "Grassy Glide", "Knock Off", "Swords Dance", "U-turn", "Wood Hammer"], + "abilities": ["Grassy Surge"], + "teraTypes": ["Grass"] + }, + { + "role": "Bulky Attacker", + "movepool": ["Grassy Glide", "Knock Off", "U-turn", "Wood Hammer"], + "abilities": ["Grassy Surge"], + "teraTypes": ["Grass"] + } + ] + }, + "growlithe": { + "level": 7, + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["Close Combat", "Flamethrower", "Morning Sun", "Roar", "Wild Charge", "Will-O-Wisp"], + "abilities": ["Intimidate"], + "teraTypes": ["Dragon", "Fairy", "Fighting"] + } + ] + }, + "growlithehisui": { + "level": 6, + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["Close Combat", "Flare Blitz", "Head Smash", "Morning Sun", "Stealth Rock", "Wild Charge", "Will-O-Wisp"], + "abilities": ["Rock Head"], + "teraTypes": ["Dragon", "Fairy"] + }, + { + "role": "Fast Attacker", + "movepool": ["Close Combat", "Flare Blitz", "Head Smash", "Wild Charge"], + "abilities": ["Rock Head"], + "teraTypes": ["Fighting", "Fire", "Rock"] + } + ] + }, + "grubbin": { + "level": 7, + "sets": [ + { + "role": "Bulky Support", + "movepool": ["Lunge", "Sticky Web", "Thunder Wave", "Volt Switch", "Wild Charge"], + "abilities": ["Swarm"], + "teraTypes": ["Electric"] + } + ] + }, + "gulpin": { + "level": 7, + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["Encore", "Fire Punch", "Giga Drain", "Pain Split", "Sludge Bomb", "Thunder Wave", "Toxic Spikes"], + "abilities": ["Sticky Hold"], + "teraTypes": ["Dark", "Grass"] + }, + { + "role": "Setup Sweeper", + "movepool": ["Bullet Seed", "Fire Punch", "Gunk Shot", "Swords Dance"], + "abilities": ["Sticky Hold"], + "teraTypes": ["Fire", "Grass", "Poison"] + } + ] + }, + "happiny": { + "level": 8, + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["Hyper Voice", "Rest", "Shadow Ball", "Thunder Wave"], + "abilities": ["Natural Cure"], + "teraTypes": ["Ghost"] + }, + { + "role": "Bulky Support", + "movepool": ["Heal Bell", "Hyper Voice", "Rest", "Thunder Wave"], + "abilities": ["Natural Cure"], + "teraTypes": ["Ghost"] + } + ] + }, + "hatenna": { + "level": 7, + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["Draining Kiss", "Mystical Fire", "Nuzzle", "Psychic"], + "abilities": ["Magic Bounce"], + "teraTypes": ["Electric", "Fairy"] + }, + { + "role": "Bulky Setup", + "movepool": ["Calm Mind", "Draining Kiss", "Mystical Fire", "Psychic"], + "abilities": ["Magic Bounce"], + "teraTypes": ["Fairy", "Steel"] + } + ] + }, + "hippopotas": { + "level": 7, + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["Curse", "Earthquake", "Slack Off", "Stealth Rock", "Stone Edge", "Whirlwind", "Yawn"], + "abilities": ["Sand Stream"], + "teraTypes": ["Dragon", "Rock", "Steel"] + } + ] + }, + "hoothoot": { + "level": 7, + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["Calm Mind", "Defog", "Hurricane", "Hyper Voice", "Nasty Plot", "Roost"], + "abilities": ["Tinted Lens"], + "teraTypes": ["Fairy", "Steel"] + } + ] + }, + "hoppip": { + "level": 8, + "sets": [ + { + "role": "Bulky Support", + "movepool": ["Acrobatics", "Encore", "Sleep Powder", "Strength Sap", "Stun Spore", "U-turn"], + "abilities": ["Chlorophyll", "Infiltrator"], + "teraTypes": ["Steel"] + } + ] + }, + "horsea": { + "level": 7, + "sets": [ + { + "role": "Wallbreaker", + "movepool": ["Dragon Pulse", "Flip Turn", "Ice Beam", "Surf"], + "abilities": ["Sniper", "Swift Swim"], + "teraTypes": ["Dragon", "Water"] + }, + { + "role": "Setup Sweeper", + "movepool": ["Dragon Pulse", "Ice Beam", "Rain Dance", "Surf"], + "abilities": ["Swift Swim"], + "teraTypes": ["Dragon", "Water"] + } + ] + }, + "houndour": { + "level": 6, + "sets": [ + { + "role": "Bulky Setup", + "movepool": ["Dark Pulse", "Flamethrower", "Nasty Plot", "Sludge Bomb", "Sucker Punch"], + "abilities": ["Flash Fire"], + "teraTypes": ["Dark", "Fire", "Poison"] + } + ] + }, + "igglybuff": { + "level": 8, + "sets": [ + { + "role": "Bulky Support", + "movepool": ["Alluring Voice", "Encore", "Flamethrower", "Protect", "Thunder Wave", "Wish"], + "abilities": ["Competitive"], + "teraTypes": ["Poison", "Steel"] + }, + { + "role": "Bulky Attacker", + "movepool": ["Body Slam", "Draining Kiss", "Protect", "Wish"], + "abilities": ["Competitive"], + "teraTypes": ["Poison", "Steel"] + } + ] + }, + "impidimp": { + "level": 7, + "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["Burning Jealousy", "Dark Pulse", "Dazzling Gleam", "Nasty Plot", "Thunder Wave"], + "abilities": ["Prankster"], + "teraTypes": ["Dark", "Fairy", "Fire"] + }, + { + "role": "Fast Support", + "movepool": ["Dazzling Gleam", "Draining Kiss", "Light Screen", "Parting Shot", "Reflect", "Taunt", "Thunder Wave"], + "abilities": ["Prankster"], + "teraTypes": ["Poison", "Steel"] + }, + { + "role": "Bulky Support", + "movepool": ["Dark Pulse", "Dazzling Gleam", "Draining Kiss", "Parting Shot", "Sucker Punch", "Taunt", "Thunder Wave"], + "abilities": ["Prankster"], + "teraTypes": ["Poison", "Steel"] + } + ] + }, + "inkay": { + "level": 6, + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["Hypnosis", "Knock Off", "Psycho Cut", "Rest", "Sleep Talk", "Superpower"], + "abilities": ["Contrary"], + "teraTypes": ["Fighting", "Steel"] + }, + { + "role": "Fast Attacker", + "movepool": ["Knock Off", "Psycho Cut", "Superpower", "Trick", "Trick Room"], + "abilities": ["Contrary"], + "teraTypes": ["Fighting", "Steel"] + } + ] + }, + "jangmoo": { + "level": 6, + "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["Dragon Dance", "Earthquake", "Iron Head", "Outrage"], + "abilities": ["Bulletproof"], + "teraTypes": ["Ground", "Steel"] + }, + { + "role": "Bulky Setup", + "movepool": ["Earthquake", "Iron Head", "Scale Shot", "Swords Dance"], + "abilities": ["Bulletproof"], + "teraTypes": ["Ground", "Steel"] + } + ] + }, + "joltik": { + "level": 7, + "sets": [ + { + "role": "Fast Support", + "movepool": ["Giga Drain", "Leech Life", "Thunder", "Thunder Wave", "Volt Switch"], + "abilities": ["Compound Eyes"], + "teraTypes": ["Electric"] + } + ] + }, + "koffing": { + "level": 7, + "sets": [ + { + "role": "Bulky Support", + "movepool": ["Flamethrower", "Pain Split", "Sludge Bomb", "Toxic Spikes", "Will-O-Wisp"], + "abilities": ["Levitate"], + "teraTypes": ["Steel"] + } + ] + }, + "kubfu": { + "level": 6, + "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["Close Combat", "Ice Punch", "Iron Head", "Swords Dance"], + "abilities": ["Inner Focus"], + "teraTypes": ["Fighting", "Steel"] + }, + { + "role": "Fast Attacker", + "movepool": ["Close Combat", "Ice Punch", "Iron Head", "Swords Dance", "U-turn"], + "abilities": ["Inner Focus"], + "teraTypes": ["Fighting", "Steel"] + } + ] + }, + "larvesta": { + "level": 6, + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["Flare Blitz", "Leech Life", "Morning Sun", "U-turn", "Wild Charge", "Will-O-Wisp"], + "abilities": ["Flame Body"], + "teraTypes": ["Steel", "Water"] + } + ] + }, + "larvitar": { + "level": 6, + "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["Dragon Dance", "Earthquake", "Facade", "Rock Blast", "Stone Edge"], + "abilities": ["Guts"], + "teraTypes": ["Normal"] + } + ] + }, + "lechonk": { + "level": 7, + "sets": [ + { + "role": "Bulky Setup", + "movepool": ["Body Slam", "Bulldoze", "Curse", "Play Rough"], + "abilities": ["Thick Fat"], + "teraTypes": ["Fairy", "Ground"] + }, + { + "role": "Bulky Attacker", + "movepool": ["Body Slam", "Bullet Seed", "Double-Edge", "Play Rough", "Thief", "Yawn"], + "abilities": ["Thick Fat"], + "teraTypes": ["Fairy", "Grass"] + } + ] + }, + "litleo": { + "level": 7, + "sets": [ + { + "role": "Bulky Setup", + "movepool": ["Flamethrower", "Hyper Voice", "Will-O-Wisp", "Work Up"], + "abilities": ["Unnerve"], + "teraTypes": ["Fire", "Normal"] + }, + { + "role": "Setup Sweeper", + "movepool": ["Flamethrower", "Hyper Voice", "Solar Beam", "Sunny Day"], + "abilities": ["Unnerve"], + "teraTypes": ["Fire", "Grass", "Normal"] + } + ] + }, + "litten": { + "level": 6, + "sets": [ + { + "role": "Bulky Setup", + "movepool": ["Flare Blitz", "Leech Life", "Swords Dance", "Trailblaze"], + "abilities": ["Intimidate"], + "teraTypes": ["Bug", "Fire", "Grass"] + }, + { + "role": "Bulky Attacker", + "movepool": ["Leech Life", "Overheat", "Parting Shot", "Will-O-Wisp"], + "abilities": ["Intimidate"], + "teraTypes": ["Dragon", "Fairy"] + } + ] + }, + "litwick": { + "level": 7, + "sets": [ + { + "role": "Bulky Setup", + "movepool": ["Calm Mind", "Energy Ball", "Flamethrower", "Pain Split", "Shadow Ball", "Will-O-Wisp"], + "abilities": ["Flame Body", "Flash Fire"], + "teraTypes": ["Fairy", "Ghost", "Grass"] + }, + { + "role": "Bulky Attacker", + "movepool": ["Flamethrower", "Hex", "Pain Split", "Will-O-Wisp"], + "abilities": ["Flame Body", "Flash Fire"], + "teraTypes": ["Fairy", "Grass"] + } + ] + }, + "lotad": { + "level": 8, + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["Giga Drain", "Ice Beam", "Surf", "Synthesis"], + "abilities": ["Swift Swim"], + "teraTypes": ["Steel", "Water"] + }, + { + "role": "Setup Sweeper", + "movepool": ["Giga Drain", "Ice Beam", "Rain Dance", "Surf"], + "abilities": ["Swift Swim"], + "teraTypes": ["Grass", "Water"] + } + ] + }, + "magby": { + "level": 6, + "sets": [ + { + "role": "Bulky Setup", + "movepool": ["Belly Drum", "Cross Chop", "Fire Punch", "Mach Punch", "Thunder Punch"], + "abilities": ["Flame Body", "Vital Spirit"], + "teraTypes": ["Fighting"] + }, + { + "role": "Fast Attacker", + "movepool": ["Cross Chop", "Fire Blast", "Flare Blitz", "Thunder Punch", "Will-O-Wisp"], + "abilities": ["Flame Body", "Vital Spirit"], + "teraTypes": ["Electric", "Fire", "Grass"] + }, + { + "role": "Wallbreaker", + "movepool": ["Cross Chop", "Flare Blitz", "Overheat", "Thunder Punch"], + "abilities": ["Flame Body", "Vital Spirit"], + "teraTypes": ["Electric", "Fighting", "Fire"] + } + ] + }, + "magnemite": { + "level": 6, + "sets": [ + { + "role": "Bulky Support", + "movepool": ["Flash Cannon", "Thunder Wave", "Thunderbolt", "Volt Switch"], + "abilities": ["Analytic", "Magnet Pull"], + "teraTypes": ["Flying"] + } + ] + }, + "makuhita": { + "level": 7, + "sets": [ + { + "role": "Bulky Setup", + "movepool": ["Bulk Up", "Bullet Punch", "Drain Punch", "Earthquake", "Heavy Slam", "Knock Off", "Stone Edge"], + "abilities": ["Guts", "Thick Fat"], + "teraTypes": ["Dark", "Ground", "Steel"] + } + ] + }, + "mankey": { + "level": 6, + "sets": [ + { + "role": "Wallbreaker", + "movepool": ["Close Combat", "Earthquake", "Gunk Shot", "Stone Edge", "Throat Chop", "U-turn"], + "abilities": ["Defiant"], + "teraTypes": ["Dark", "Fighting", "Ground", "Poison", "Rock"] + }, + { + "role": "Bulky Setup", + "movepool": ["Bulk Up", "Drain Punch", "Earthquake", "Stone Edge", "Throat Chop"], + "abilities": ["Defiant"], + "teraTypes": ["Fighting", "Ground", "Rock"] + }, + { + "role": "Fast Attacker", + "movepool": ["Bulk Up", "Close Combat", "Earthquake", "Gunk Shot", "Stone Edge", "Throat Chop", "U-turn"], + "abilities": ["Defiant"], + "teraTypes": ["Dark", "Fighting", "Ground", "Poison", "Rock"] + } + ] + }, + "mareanie": { + "level": 6, + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["Gunk Shot", "Liquidation", "Poison Jab", "Recover", "Toxic Spikes"], + "abilities": ["Regenerator"], + "teraTypes": ["Fairy", "Flying", "Grass", "Steel"] + } + ] + }, + "mareep": { + "level": 7, + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["Dazzling Gleam", "Thunder Wave", "Thunderbolt", "Volt Switch"], + "abilities": ["Static"], + "teraTypes": ["Fairy"] + }, + { + "role": "Tera Blast user", + "movepool": ["Agility", "Dazzling Gleam", "Tera Blast", "Thunderbolt"], + "abilities": ["Static"], + "teraTypes": ["Ice"] + } + ] + }, + "maschiff": { + "level": 7, + "sets": [ + { + "role": "Bulky Setup", + "movepool": ["Crunch", "Hone Claws", "Play Rough", "Trailblaze"], + "abilities": ["Stakeout"], + "teraTypes": ["Fairy"] + } + ] + }, + "meditite": { + "level": 5, + "sets": [ + { + "role": "Bulky Setup", + "movepool": ["Bulk Up", "Drain Punch", "Trailblaze", "Zen Headbutt"], + "abilities": ["Pure Power"], + "teraTypes": ["Fighting", "Psychic", "Steel"] + }, + { + "role": "Fast Attacker", + "movepool": ["Close Combat", "Ice Punch", "Poison Jab", "Zen Headbutt"], + "abilities": ["Pure Power"], + "teraTypes": ["Fighting", "Poison", "Psychic"] + } + ] + }, + "meowth": { + "level": 6, + "sets": [ + { + "role": "Wallbreaker", + "movepool": ["Double-Edge", "Fake Out", "Knock Off", "Play Rough", "Thunder Wave", "U-turn"], + "abilities": ["Technician"], + "teraTypes": ["Normal"] + } + ] + }, + "meowthalola": { + "level": 6, + "sets": [ + { + "role": "Fast Support", + "movepool": ["Gunk Shot", "Knock Off", "Parting Shot", "Play Rough", "Thunder Wave"], + "abilities": ["Rattled"], + "teraTypes": ["Fairy", "Poison"] + }, + { + "role": "Setup Sweeper", + "movepool": ["Dark Pulse", "Hypnosis", "Nasty Plot", "Power Gem", "Thunderbolt"], + "abilities": ["Rattled"], + "teraTypes": ["Dark", "Electric"] + } + ] + }, + "meowthgalar": { + "level": 7, + "sets": [ + { + "role": "Bulky Setup", + "movepool": ["Iron Head", "Knock Off", "Swords Dance", "Trailblaze"], + "abilities": ["Tough Claws"], + "teraTypes": ["Fairy", "Steel"] + }, + { + "role": "Bulky Support", + "movepool": ["Iron Head", "Knock Off", "Play Rough", "Stealth Rock", "U-turn"], + "abilities": ["Tough Claws"], + "teraTypes": ["Fairy", "Water"] + } + ] + }, + "mienfoo": { + "level": 6, + "sets": [ + { + "role": "Bulky Setup", + "movepool": ["High Jump Kick", "Knock Off", "Poison Jab", "Stone Edge", "Swords Dance"], + "abilities": ["Regenerator"], + "teraTypes": ["Dark", "Fighting", "Poison"] + }, + { + "role": "Fast Support", + "movepool": ["Fake Out", "High Jump Kick", "Knock Off", "U-turn"], + "abilities": ["Regenerator"], + "teraTypes": ["Dark", "Steel"] + }, + { + "role": "Fast Attacker", + "movepool": ["High Jump Kick", "Knock Off", "Poison Jab", "Stone Edge", "Swords Dance", "U-turn"], + "abilities": ["Regenerator"], + "teraTypes": ["Dark", "Fighting", "Poison"] + } + ] + }, + "milcery": { + "level": 8, + "sets": [ + { + "role": "Bulky Setup", + "movepool": ["Acid Armor", "Dazzling Gleam", "Draining Kiss", "Recover", "Stored Power"], + "abilities": ["Aroma Veil"], + "teraTypes": ["Poison", "Steel"] + } + ] + }, + "minccino": { + "level": 6, + "sets": [ + { + "role": "Bulky Setup", + "movepool": ["Bullet Seed", "Knock Off", "Tail Slap", "Tidy Up"], + "abilities": ["Skill Link"], + "teraTypes": ["Grass", "Normal"] + } + ] + }, + "misdreavus": { + "level": 5, + "sets": [ + { + "role": "Bulky Setup", + "movepool": ["Calm Mind", "Draining Kiss", "Shadow Ball", "Will-O-Wisp"], + "abilities": ["Levitate"], + "teraTypes": ["Fairy"] + }, + { + "role": "Bulky Attacker", + "movepool": ["Dazzling Gleam", "Nasty Plot", "Pain Split", "Shadow Ball", "Thunder Wave", "Thunderbolt", "Trick", "Will-O-Wisp"], + "abilities": ["Levitate"], + "teraTypes": ["Fairy"] + } + ] + }, + "mudbray": { + "level": 6, + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["Close Combat", "Earthquake", "Heavy Slam", "Stealth Rock", "Stone Edge"], + "abilities": ["Stamina"], + "teraTypes": ["Fighting", "Steel"] + } + ] + }, + "mudkip": { + "level": 7, + "sets": [ + { + "role": "Bulky Support", + "movepool": ["Body Slam", "Ice Beam", "Liquidation", "Rest", "Roar", "Sleep Talk", "Sludge Wave", "Yawn"], + "abilities": ["Torrent"], + "teraTypes": ["Poison", "Steel"] + } + ] + }, + "munchlax": { + "level": 6, + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["Body Slam", "Crunch", "Earthquake", "Rest", "Sleep Talk"], + "abilities": ["Thick Fat"], + "teraTypes": ["Fairy", "Ground"] + }, + { + "role": "Bulky Setup", + "movepool": ["Body Slam", "Curse", "Rest", "Sleep Talk"], + "abilities": ["Thick Fat"], + "teraTypes": ["Fairy", "Poison"] + } + ] + }, + "murkrow": { + "level": 5, + "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["Dark Pulse", "Heat Wave", "Hurricane", "Nasty Plot", "Sucker Punch"], + "abilities": ["Super Luck"], + "teraTypes": ["Dark", "Fairy", "Flying", "Steel"] + }, + { + "role": "Fast Support", + "movepool": ["Brave Bird", "Sucker Punch", "Thunder Wave", "U-turn"], + "abilities": ["Prankster"], + "teraTypes": ["Fairy", "Steel"] + } + ] + }, + "nacli": { + "level": 7, + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["Curse", "Earthquake", "Recover", "Stealth Rock", "Stone Edge"], + "abilities": ["Purifying Salt"], + "teraTypes": ["Dragon", "Fairy"] + } + ] + }, + "noibat": { + "level": 8, + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["Defog", "Draco Meteor", "Heat Wave", "Hurricane", "Roost", "U-turn"], + "abilities": ["Infiltrator"], + "teraTypes": ["Fairy", "Steel"] + } + ] + }, + "nosepass": { + "level": 6, + "sets": [ + { + "role": "Bulky Setup", + "movepool": ["Body Press", "Iron Defense", "Pain Split", "Power Gem", "Thunder Wave"], + "abilities": ["Magnet Pull"], + "teraTypes": ["Fighting"] + }, + { + "role": "Bulky Attacker", + "movepool": ["Body Press", "Pain Split", "Power Gem", "Stealth Rock", "Thunder Wave", "Volt Switch"], + "abilities": ["Magnet Pull"], + "teraTypes": ["Fighting"] + } + ] + }, + "numel": { + "level": 6, + "sets": [ + { + "role": "Bulky Setup", + "movepool": ["Earthquake", "Fire Blast", "Growth", "Trailblaze"], + "abilities": ["Simple"], + "teraTypes": ["Grass"] + } + ] + }, + "nymble": { + "level": 6, + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["First Impression", "Leech Life", "Sucker Punch", "U-turn"], + "abilities": ["Tinted Lens"], + "teraTypes": ["Bug"] + } + ] + }, + "oddish": { + "level": 6, + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["Giga Drain", "Sleep Powder", "Sludge Bomb", "Strength Sap", "Stun Spore"], + "abilities": ["Chlorophyll"], + "teraTypes": ["Steel", "Water"] + } + ] + }, + "oshawott": { + "level": 7, + "sets": [ + { + "role": "Fast Support", + "movepool": ["Aqua Jet", "Encore", "Flip Turn", "Ice Beam", "Knock Off", "Sacred Sword", "Surf", "X-Scissor"], + "abilities": ["Torrent"], + "teraTypes": ["Dark", "Fighting", "Water"] + }, + { + "role": "Bulky Setup", + "movepool": ["Aqua Jet", "Knock Off", "Liquidation", "Sacred Sword", "Swords Dance"], + "abilities": ["Torrent"], + "teraTypes": ["Dark", "Fighting", "Water"] + } + ] + }, + "pawmi": { + "level": 8, + "sets": [ + { + "role": "Fast Support", + "movepool": ["Discharge", "Encore", "Nuzzle", "Play Rough", "Super Fang", "Volt Switch"], + "abilities": ["Natural Cure", "Static"], + "teraTypes": ["Electric", "Fairy", "Grass"] + } + ] + }, + "pawniard": { + "level": 6, + "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["Iron Head", "Night Slash", "Sucker Punch", "Swords Dance"], + "abilities": ["Defiant"], + "teraTypes": ["Dark", "Fairy", "Steel"] + } + ] + }, + "petilil": { + "level": 7, + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["Encore", "Giga Drain", "Leaf Storm", "Pollen Puff", "Sleep Powder", "Stun Spore", "Synthesis"], + "abilities": ["Chlorophyll"], + "teraTypes": ["Poison", "Steel", "Water"] + }, + { + "role": "Tera Blast user", + "movepool": ["Giga Drain", "Leaf Storm", "Stun Spore", "Synthesis", "Tera Blast"], + "abilities": ["Chlorophyll"], + "teraTypes": ["Fire", "Rock"] + } + ] + }, + "phanpy": { + "level": 7, + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["Earthquake", "Gunk Shot", "Ice Shard", "Knock Off", "Stealth Rock", "Stone Edge"], + "abilities": ["Pickup"], + "teraTypes": ["Dark", "Poison"] + } + ] + }, + "phantump": { + "level": 7, + "sets": [ + { + "role": "Bulky Support", + "movepool": ["Horn Leech", "Poltergeist", "Rest", "Will-O-Wisp"], + "abilities": ["Natural Cure"], + "teraTypes": ["Fairy", "Water"] + }, + { + "role": "Bulky Attacker", + "movepool": ["Horn Leech", "Poltergeist", "Protect", "Will-O-Wisp"], + "abilities": ["Harvest"], + "teraTypes": ["Fairy", "Water"] + } + ] + }, + "pichu": { + "level": 8, + "sets": [ + { + "role": "Fast Support", + "movepool": ["Encore", "Nuzzle", "Play Rough", "Surf", "Volt Switch", "Volt Tackle"], + "abilities": ["Lightning Rod"], + "teraTypes": ["Water"] + }, + { + "role": "Tera Blast user", + "movepool": ["Encore", "Nasty Plot", "Surf", "Tera Blast", "Thunderbolt"], + "abilities": ["Lightning Rod"], + "teraTypes": ["Ice"] + } + ] + }, + "pikipek": { + "level": 6, + "sets": [ + { + "role": "Fast Attacker", + "movepool": ["Brave Bird", "Bullet Seed", "Knock Off", "Roost", "Swords Dance", "U-turn"], + "abilities": ["Pickup", "Skill Link"], + "teraTypes": ["Flying", "Grass", "Steel"] + } + ] + }, + "pineco": { + "level": 7, + "sets": [ + { + "role": "Bulky Support", + "movepool": ["Lunge", "Rapid Spin", "Rock Blast", "Spikes", "Stealth Rock", "Toxic Spikes"], + "abilities": ["Sturdy"], + "teraTypes": ["Ghost"] + } + ] + }, + "piplup": { + "level": 7, + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["Flip Turn", "Haze", "Ice Beam", "Roost", "Surf", "Yawn"], + "abilities": ["Competitive"], + "teraTypes": ["Fairy", "Steel"] + } + ] + }, + "poliwag": { + "level": 6, + "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["Belly Drum", "Body Slam", "Encore", "Hypnosis", "Waterfall"], + "abilities": ["Swift Swim", "Water Absorb"], + "teraTypes": ["Dragon", "Normal", "Water"] + }, + { + "role": "Tera Blast user", + "movepool": ["Belly Drum", "Body Slam", "Tera Blast", "Waterfall"], + "abilities": ["Swift Swim", "Water Absorb"], + "teraTypes": ["Dragon", "Fire", "Ground"] + } + ] + }, + "poltchageist": { + "level": 7, + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["Calm Mind", "Giga Drain", "Scald", "Shadow Ball", "Stun Spore"], + "abilities": ["Heatproof"], + "teraTypes": ["Fairy", "Steel", "Water"] + } + ] + }, + "poochyena": { + "level": 8, + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["Crunch", "Play Rough", "Poison Fang", "Sucker Punch", "Super Fang", "Taunt", "Yawn"], + "abilities": ["Rattled"], + "teraTypes": ["Fairy", "Poison"] + } + ] + }, + "popplio": { + "level": 7, + "sets": [ + { + "role": "Fast Attacker", + "movepool": ["Encore", "Flip Turn", "Moonblast", "Surf", "Triple Axel"], + "abilities": ["Torrent"], + "teraTypes": ["Fairy", "Ice", "Steel", "Water"] + } + ] + }, + "porygon": { + "level": 6, + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["Discharge", "Ice Beam", "Recover", "Tri Attack"], + "abilities": ["Download"], + "teraTypes": ["Electric", "Ghost", "Poison"] + }, + { + "role": "Tera Blast user", + "movepool": ["Agility", "Recover", "Shadow Ball", "Tera Blast"], + "abilities": ["Download"], + "teraTypes": ["Fairy", "Fighting"] + } + ] + }, + "psyduck": { + "level": 7, + "sets": [ + { + "role": "Fast Attacker", + "movepool": ["Encore", "Flip Turn", "Ice Beam", "Knock Off", "Surf", "Yawn"], + "abilities": ["Cloud Nine", "Swift Swim"], + "teraTypes": ["Dark", "Fairy", "Steel"] + }, + { + "role": "Bulky Setup", + "movepool": ["Ice Beam", "Nasty Plot", "Surf", "Trailblaze"], + "abilities": ["Cloud Nine", "Swift Swim"], + "teraTypes": ["Grass", "Steel", "Water"] + } + ] + }, + "quaxly": { + "level": 6, + "sets": [ + { + "role": "Bulky Support", + "movepool": ["Brave Bird", "Encore", "Liquidation", "Rapid Spin", "Roost"], + "abilities": ["Moxie"], + "teraTypes": ["Dragon", "Steel"] + } + ] + }, + "qwilfishhisui": { + "level": 5, + "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["Crunch", "Gunk Shot", "Liquidation", "Swords Dance"], + "abilities": ["Intimidate"], + "teraTypes": ["Dark", "Poison", "Water"] + }, + { + "role": "Bulky Attacker", + "movepool": ["Crunch", "Gunk Shot", "Spikes", "Taunt", "Toxic Spikes"], + "abilities": ["Intimidate"], + "teraTypes": ["Dark", "Poison"] + } + ] + }, + "ralts": { + "level": 8, + "sets": [ + { + "role": "Bulky Support", + "movepool": ["Draining Kiss", "Knock Off", "Psychic", "Thunder Wave", "Will-O-Wisp"], + "abilities": ["Trace"], + "teraTypes": ["Steel"] + }, + { + "role": "Bulky Setup", + "movepool": ["Calm Mind", "Draining Kiss", "Mystical Fire", "Psychic"], + "abilities": ["Trace"], + "teraTypes": ["Fairy", "Steel"] + } + ] + }, + "rellor": { + "level": 7, + "sets": [ + { + "role": "Bulky Setup", + "movepool": ["Cosmic Power", "Gunk Shot", "Leech Life", "Recover"], + "abilities": ["Shed Skin"], + "teraTypes": ["Poison", "Steel"] + } + ] + }, + "rhyhorn": { + "level": 6, + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["Earthquake", "Megahorn", "Rock Blast", "Rock Polish", "Stealth Rock", "Stone Edge", "Swords Dance"], + "abilities": ["Lightning Rod"], + "teraTypes": ["Dragon", "Fairy", "Flying", "Grass", "Water"] + } + ] + }, + "riolu": { + "level": 6, + "sets": [ + { + "role": "Bulky Setup", + "movepool": ["Close Combat", "Crunch", "Earthquake", "Ice Punch", "Swords Dance"], + "abilities": ["Inner Focus"], + "teraTypes": ["Dark", "Fighting", "Ground"] + }, + { + "role": "Fast Attacker", + "movepool": ["Close Combat", "Copycat", "Crunch", "Ice Punch"], + "abilities": ["Prankster"], + "teraTypes": ["Dark", "Fighting"] + } + ] + }, + "rockruff": { + "level": 7, + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["Play Rough", "Stealth Rock", "Stomping Tantrum", "Stone Edge", "Sucker Punch", "Swords Dance"], + "abilities": ["Vital Spirit"], + "teraTypes": ["Fairy", "Ground", "Rock"] + } + ] + }, + "rolycoly": { + "level": 8, + "sets": [ + { + "role": "Bulky Support", + "movepool": ["Power Gem", "Rapid Spin", "Spikes", "Stealth Rock", "Temper Flare", "Will-O-Wisp"], + "abilities": ["Flash Fire"], + "teraTypes": ["Ghost", "Steel"] + } + ] + }, + "rookidee": { + "level": 7, + "sets": [ + { + "role": "Bulky Support", + "movepool": ["Brave Bird", "Defog", "Roost", "Taunt", "U-turn"], + "abilities": ["Unnerve"], + "teraTypes": ["Steel"] + } + ] + }, + "rowlet": { + "level": 7, + "sets": [ + { + "role": "Bulky Setup", + "movepool": ["Brave Bird", "Leaf Blade", "Roost", "Swords Dance"], + "abilities": ["Overgrow"], + "teraTypes": ["Steel", "Water"] + }, + { + "role": "Bulky Support", + "movepool": ["Brave Bird", "Defog", "Giga Drain", "Knock Off", "Roost"], + "abilities": ["Long Reach", "Overgrow"], + "teraTypes": ["Steel", "Water"] + } + ] + }, + "rufflet": { + "level": 5, + "sets": [ + { + "role": "Bulky Setup", + "movepool": ["Aerial Ace", "Bulk Up", "Close Combat", "Roost"], + "abilities": ["Hustle"], + "teraTypes": ["Fighting"] + } + ] + }, + "salandit": { + "level": 6, + "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["Dragon Pulse", "Flamethrower", "Nasty Plot", "Sludge Bomb"], + "abilities": ["Corrosion"], + "teraTypes": ["Dragon", "Fire", "Poison"] + }, + { + "role": "Fast Support", + "movepool": ["Flamethrower", "Knock Off", "Sludge Bomb", "Thunder Wave", "Toxic Spikes", "Will-O-Wisp"], + "abilities": ["Corrosion"], + "teraTypes": ["Flying", "Water"] + } + ] + }, + "sandile": { + "level": 7, + "sets": [ + { + "role": "Fast Attacker", + "movepool": ["Crunch", "Earthquake", "Fire Fang", "Stealth Rock", "Stone Edge"], + "abilities": ["Intimidate"], + "teraTypes": ["Dark", "Flying", "Ground"] + } + ] + }, + "sandshrew": { + "level": 6, + "sets": [ + { + "role": "Bulky Support", + "movepool": ["Earthquake", "Knock Off", "Rapid Spin", "Spikes", "Stone Edge", "Swords Dance"], + "abilities": ["Sand Rush"], + "teraTypes": ["Dragon", "Steel", "Water"] + } + ] + }, + "sandshrewalola": { + "level": 6, + "sets": [ + { + "role": "Bulky Setup", + "movepool": ["Earthquake", "Ice Shard", "Rapid Spin", "Swords Dance", "Triple Axel"], + "abilities": ["Slush Rush"], + "teraTypes": ["Ground"] + }, + { + "role": "Bulky Support", + "movepool": ["Earthquake", "Iron Head", "Knock Off", "Rapid Spin", "Stealth Rock", "Triple Axel"], + "abilities": ["Slush Rush"], + "teraTypes": ["Flying", "Water"] + } + ] + }, + "sandygast": { + "level": 7, + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["Earth Power", "Giga Drain", "Shadow Ball", "Shore Up", "Sludge Bomb", "Stealth Rock"], + "abilities": ["Water Compaction"], + "teraTypes": ["Fairy", "Poison", "Water"] + } + ] + }, + "scorbunny": { + "level": 6, + "sets": [ + { + "role": "Wallbreaker", + "movepool": ["Flare Blitz", "Gunk Shot", "High Jump Kick", "Sucker Punch", "U-turn"], + "abilities": ["Libero"], + "teraTypes": ["Fighting", "Fire"] + }, + { + "role": "Fast Attacker", + "movepool": ["Flare Blitz", "Gunk Shot", "High Jump Kick", "U-turn"], + "abilities": ["Libero"], + "teraTypes": ["Fire"] + } + ] + }, + "scraggy": { + "level": 6, + "sets": [ + { + "role": "Bulky Setup", + "movepool": ["Bulk Up", "Drain Punch", "Knock Off", "Rest"], + "abilities": ["Shed Skin"], + "teraTypes": ["Poison"] + }, + { + "role": "Bulky Attacker", + "movepool": ["Close Combat", "Dragon Dance", "Knock Off", "Poison Jab"], + "abilities": ["Intimidate", "Moxie"], + "teraTypes": ["Poison"] + } + ] + }, + "scyther": { + "level": 5, + "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["Bug Bite", "Close Combat", "Dual Wingbeat", "Swords Dance"], + "abilities": ["Technician"], + "teraTypes": ["Fighting"] + }, + { + "role": "Fast Support", + "movepool": ["Close Combat", "Defog", "Dual Wingbeat", "U-turn"], + "abilities": ["Technician"], + "teraTypes": ["Fighting"] + } + ] + }, + "seedot": { + "level": 8, + "sets": [ + { + "role": "Bulky Support", + "movepool": ["Body Slam", "Bullet Seed", "Defog", "Sucker Punch", "Synthesis"], + "abilities": ["Chlorophyll", "Pickpocket"], + "teraTypes": ["Steel", "Water"] + } + ] + }, + "seel": { + "level": 7, + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["Encore", "Flip Turn", "Haze", "Icicle Spear", "Surf", "Thief"], + "abilities": ["Thick Fat"], + "teraTypes": ["Poison", "Steel"] + }, + { + "role": "Fast Support", + "movepool": ["Aqua Jet", "Fake Out", "Icicle Spear", "Surf"], + "abilities": ["Thick Fat"], + "teraTypes": ["Poison", "Steel", "Water"] + } + ] + }, + "sentret": { + "level": 8, + "sets": [ + { + "role": "Bulky Setup", + "movepool": ["Body Slam", "Brick Break", "Double-Edge", "Knock Off", "Tidy Up"], + "abilities": ["Frisk"], + "teraTypes": ["Ghost", "Normal"] + } + ] + }, + "sewaddle": { + "level": 7, + "sets": [ + { + "role": "Bulky Support", + "movepool": ["Giga Drain", "Iron Defense", "Lunge", "Sticky Web", "Synthesis"], + "abilities": ["Chlorophyll", "Swarm"], + "teraTypes": ["Ghost"] + } + ] + }, + "shellder": { + "level": 6, + "sets": [ + { + "role": "Bulky Setup", + "movepool": ["Icicle Spear", "Liquidation", "Rock Blast", "Shell Smash"], + "abilities": ["Skill Link"], + "teraTypes": ["Ice", "Rock", "Steel", "Water"] + } + ] + }, + "shellos": { + "level": 7, + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["Clear Smog", "Ice Beam", "Recover", "Stealth Rock", "Surf", "Yawn"], + "abilities": ["Storm Drain"], + "teraTypes": ["Poison", "Steel"] + } + ] + }, + "shieldon": { + "level": 7, + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["Earth Power", "Flash Cannon", "Ice Beam", "Rock Blast", "Stealth Rock"], + "abilities": ["Sturdy"], + "teraTypes": ["Fairy", "Flying", "Ground"] + } + ] + }, + "shinx": { + "level": 7, + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["Crunch", "Ice Fang", "Play Rough", "Roar", "Thunder Wave", "Volt Switch", "Wild Charge"], + "abilities": ["Intimidate"], + "teraTypes": ["Fairy"] + }, + { + "role": "Setup Sweeper", + "movepool": ["Crunch", "Facade", "Play Rough", "Trailblaze", "Wild Charge"], + "abilities": ["Guts"], + "teraTypes": ["Normal"] + } + ] + }, + "shroodle": { + "level": 7, + "sets": [ + { + "role": "Fast Support", + "movepool": ["Encore", "Gunk Shot", "Knock Off", "Parting Shot"], + "abilities": ["Prankster"], + "teraTypes": ["Dark"] + }, + { + "role": "Setup Sweeper", + "movepool": ["Double-Edge", "Gunk Shot", "Knock Off", "Swords Dance"], + "abilities": ["Pickpocket"], + "teraTypes": ["Dark", "Normal", "Poison"] + } + ] + }, + "shroomish": { + "level": 8, + "sets": [ + { + "role": "Bulky Support", + "movepool": ["Drain Punch", "Giga Drain", "Sludge Bomb", "Spore", "Stun Spore"], + "abilities": ["Effect Spore"], + "teraTypes": ["Poison", "Steel", "Water"] + } + ] + }, + "shuppet": { + "level": 7, + "sets": [ + { + "role": "Bulky Support", + "movepool": ["Dazzling Gleam", "Gunk Shot", "Pain Split", "Poltergeist", "Shadow Sneak", "Thunder Wave", "Trick", "Will-O-Wisp"], + "abilities": ["Cursed Body", "Insomnia"], + "teraTypes": ["Fairy"] + }, + { + "role": "Bulky Setup", + "movepool": ["Dazzling Gleam", "Nasty Plot", "Shadow Ball", "Thunderbolt", "Will-O-Wisp"], + "abilities": ["Cursed Body", "Insomnia"], + "teraTypes": ["Electric", "Fairy"] + } + ] + }, + "silicobra": { + "level": 6, + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["Coil", "Earthquake", "Glare", "Rest", "Rock Blast", "Stealth Rock", "Stone Edge"], + "abilities": ["Shed Skin"], + "teraTypes": ["Dragon", "Steel"] + } + ] + }, + "sinistea": { + "level": 6, + "sets": [ + { + "role": "Bulky Setup", + "movepool": ["Giga Drain", "Shadow Ball", "Shell Smash", "Stored Power", "Will-O-Wisp"], + "abilities": ["Cursed Body"], + "teraTypes": ["Fairy", "Psychic"] + }, + { + "role": "Tera Blast user", + "movepool": ["Giga Drain", "Shadow Ball", "Shell Smash", "Tera Blast", "Will-O-Wisp"], + "abilities": ["Cursed Body"], + "teraTypes": ["Fairy", "Fighting"] + } + ] + }, + "skiddo": { + "level": 7, + "sets": [ + { + "role": "Bulky Setup", + "movepool": ["Bulk Up", "Horn Leech", "Milk Drink", "Rock Slide", "Stomping Tantrum"], + "abilities": ["Sap Sipper"], + "teraTypes": ["Ground", "Water"] + } + ] + }, + "skrelp": { + "level": 6, + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["Flip Turn", "Gunk Shot", "Hydro Pump", "Sludge Bomb", "Toxic Spikes"], + "abilities": ["Adaptability"], + "teraTypes": ["Poison", "Water"] + } + ] + }, + "skwovet": { + "level": 7, + "sets": [ + { + "role": "Bulky Setup", + "movepool": ["Belly Drum", "Body Slam", "Crunch", "Trailblaze"], + "abilities": ["Cheek Pouch"], + "teraTypes": ["Ghost"] + } + ] + }, + "slakoth": { + "level": 9, + "sets": [ + { + "role": "Wallbreaker", + "movepool": ["Body Slam", "Gunk Shot", "Hammer Arm", "Ice Punch", "Play Rough", "Slack Off", "Throat Chop"], + "abilities": ["Truant"], + "teraTypes": ["Fairy", "Fighting", "Normal"] + } + ] + }, + "slowpoke": { + "level": 6, + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["Curse", "Liquidation", "Slack Off", "Thunder Wave", "Zen Headbutt"], + "abilities": ["Regenerator"], + "teraTypes": ["Fairy", "Poison"] + } + ] + }, + "slowpokegalar": { + "level": 6, + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["Curse", "Earthquake", "Slack Off", "Thunder Wave", "Zen Headbutt"], + "abilities": ["Regenerator"], + "teraTypes": ["Fairy", "Ground"] + } + ] + }, + "smoliv": { + "level": 7, + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["Earth Power", "Giga Drain", "Protect", "Strength Sap"], + "abilities": ["Harvest"], + "teraTypes": ["Steel", "Water"] + }, + { + "role": "Tera Blast user", + "movepool": ["Earth Power", "Giga Drain", "Leaf Storm", "Strength Sap", "Tera Blast"], + "abilities": ["Harvest"], + "teraTypes": ["Fairy", "Poison"] + } + ] + }, + "slugma": { + "level": 7, + "sets": [ + { + "role": "Bulky Support", + "movepool": ["Earth Power", "Lava Plume", "Recover", "Stealth Rock", "Will-O-Wisp", "Yawn"], + "abilities": ["Flame Body"], + "teraTypes": ["Dragon", "Grass"] + } + ] + }, + "sneasel": { + "level": 5, + "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["Brick Break", "Ice Shard", "Knock Off", "Swords Dance", "Triple Axel"], + "abilities": ["Inner Focus", "Pickpocket"], + "teraTypes": ["Dark", "Fighting", "Ice"] + } + ] + }, + "sneaselhisui": { + "level": 5, + "sets": [ + { + "role": "Fast Attacker", + "movepool": ["Close Combat", "Gunk Shot", "Swords Dance", "Throat Chop", "Toxic Spikes"], + "abilities": ["Inner Focus", "Pickpocket"], + "teraTypes": ["Dark", "Fighting", "Poison"] + } + ] + }, + "snivy": { + "level": 6, + "sets": [ + { + "role": "Fast Attacker", + "movepool": ["Glare", "Knock Off", "Leaf Storm", "Substitute", "Synthesis"], + "abilities": ["Contrary"], + "teraTypes": ["Grass", "Poison", "Water"] + }, + { + "role": "Tera Blast user", + "movepool": ["Glare", "Knock Off", "Leaf Storm", "Substitute", "Synthesis", "Tera Blast"], + "abilities": ["Contrary"], + "teraTypes": ["Fire", "Rock"] + } + ] + }, + "snom": { + "level": 8, + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["Bug Buzz", "Icy Wind", "Rest", "Sleep Talk"], + "abilities": ["Ice Scales"], + "teraTypes": ["Steel", "Water"] + } + ] + }, + "snorunt": { + "level": 7, + "sets": [ + { + "role": "Fast Support", + "movepool": ["Crunch", "Ice Shard", "Icicle Spear", "Spikes"], + "abilities": ["Inner Focus"], + "teraTypes": ["Steel", "Water"] + } + ] + }, + "snover": { + "level": 7, + "sets": [ + { + "role": "Bulky Setup", + "movepool": ["Bullet Seed", "Ice Shard", "Icicle Spear", "Swords Dance"], + "abilities": ["Snow Warning"], + "teraTypes": ["Grass", "Ice", "Water"] + }, + { + "role": "Bulky Support", + "movepool": ["Blizzard", "Bullet Seed", "Giga Drain", "Ice Shard", "Trailblaze"], + "abilities": ["Snow Warning"], + "teraTypes": ["Ice", "Water"] + } + ] + }, + "snubbull": { + "level": 7, + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["Earthquake", "Encore", "Play Rough", "Thunder Wave"], + "abilities": ["Intimidate"], + "teraTypes": ["Ground"] + }, + { + "role": "Bulky Setup", + "movepool": ["Bulk Up", "Earthquake", "Play Rough", "Trailblaze"], + "abilities": ["Intimidate"], + "teraTypes": ["Ground"] + } + ] + }, + "sobble": { + "level": 7, + "sets": [ + { + "role": "Fast Support", + "movepool": ["Haze", "Hydro Pump", "Light Screen", "Reflect", "Surf", "U-turn"], + "abilities": ["Torrent"], + "teraTypes": ["Water"] + } + ] + }, + "solosis": { + "level": 6, + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["Calm Mind", "Psychic", "Recover", "Shadow Ball", "Thunder Wave"], + "abilities": ["Magic Guard"], + "teraTypes": ["Fairy", "Steel"] + } + ] + }, + "spinarak": { + "level": 7, + "sets": [ + { + "role": "Bulky Support", + "movepool": ["Knock Off", "Leech Life", "Poison Jab", "Sticky Web", "Sucker Punch", "Toxic Spikes"], + "abilities": ["Insomnia", "Swarm"], + "teraTypes": ["Dark", "Ghost", "Steel"] + } + ] + }, + "spoink": { + "level": 7, + "sets": [ + { + "role": "Fast Support", + "movepool": ["Calm Mind", "Dazzling Gleam", "Psychic", "Shadow Ball", "Thunder Wave", "Trick"], + "abilities": ["Thick Fat"], + "teraTypes": ["Fairy", "Ghost", "Psychic"] + } + ] + }, + "sprigatito": { + "level": 7, + "sets": [ + { + "role": "Wallbreaker", + "movepool": ["Bullet Seed", "Play Rough", "Shadow Claw", "Sucker Punch", "U-turn"], + "abilities": ["Protean"], + "teraTypes": ["Grass"] + } + ] + }, + "squirtle": { + "level": 6, + "sets": [ + { + "role": "Bulky Support", + "movepool": ["Flip Turn", "Ice Beam", "Rapid Spin", "Surf", "Yawn"], + "abilities": ["Torrent"], + "teraTypes": ["Poison", "Steel"] + }, + { + "role": "Tera Blast user", + "movepool": ["Ice Beam", "Shell Smash", "Surf", "Tera Blast"], + "abilities": ["Torrent"], + "teraTypes": ["Electric", "Grass"] + } + ] + }, + "stantler": { + "level": 5, + "sets": [ + { + "role": "Fast Attacker", + "movepool": ["Double-Edge", "Earthquake", "Hypnosis", "Megahorn", "Shadow Ball", "Thunder Wave", "Trick"], + "abilities": ["Intimidate"], + "teraTypes": ["Bug", "Ghost", "Ground"] + }, + { + "role": "Tera Blast user", + "movepool": ["Calm Mind", "Earth Power", "Shadow Ball", "Tera Blast", "Thunderbolt"], + "abilities": ["Intimidate"], + "teraTypes": ["Fairy"] + } + ] + }, + "starly": { + "level": 7, + "sets": [ + { + "role": "Fast Attacker", + "movepool": ["Brave Bird", "Double-Edge", "Heat Wave", "U-turn"], + "abilities": ["Reckless"], + "teraTypes": ["Flying", "Normal"] + } + ] + }, + "stunky": { + "level": 6, + "sets": [ + { + "role": "Fast Support", + "movepool": ["Fire Blast", "Gunk Shot", "Knock Off", "Sucker Punch", "Taunt", "Toxic Spikes"], + "abilities": ["Aftermath"], + "teraTypes": ["Dark", "Poison"] + } + ] + }, + "sunkern": { + "level": 8, + "sets": [ + { + "role": "Wallbreaker", + "movepool": ["Earth Power", "Solar Beam", "Sunny Day", "Weather Ball"], + "abilities": ["Chlorophyll"], + "teraTypes": ["Fire"] + } + ] + }, + "surskit": { + "level": 6, + "sets": [ + { + "role": "Fast Support", + "movepool": ["Bug Buzz", "Giga Drain", "Hydro Pump", "Ice Beam", "Sticky Web"], + "abilities": ["Swift Swim"], + "teraTypes": ["Ghost", "Ground", "Steel", "Water"] + } + ] + }, + "swablu": { + "level": 7, + "sets": [ + { + "role": "Bulky Support", + "movepool": ["Body Slam", "Brave Bird", "Defog", "Haze", "Heat Wave", "Roost"], + "abilities": ["Natural Cure"], + "teraTypes": ["Steel"] + } + ] + }, + "swinub": { + "level": 7, + "sets": [ + { + "role": "Bulky Support", + "movepool": ["Earthquake", "Freeze-Dry", "Ice Shard", "Icicle Spear", "Stealth Rock"], + "abilities": ["Thick Fat"], + "teraTypes": ["Ground", "Water"] + }, + { + "role": "Wallbreaker", + "movepool": ["Earthquake", "Freeze-Dry", "Ice Shard", "Icicle Spear", "Stealth Rock"], + "abilities": ["Thick Fat"], + "teraTypes": ["Ground", "Ice"] + } + ] + }, + "tadbulb": { + "level": 8, + "sets": [ + { + "role": "Fast Support", + "movepool": ["Acid Spray", "Discharge", "Muddy Water", "Thunder Wave", "Volt Switch"], + "abilities": ["Static"], + "teraTypes": ["Water"] + }, + { + "role": "Setup Sweeper", + "movepool": ["Rain Dance", "Thunder", "Volt Switch", "Weather Ball"], + "abilities": ["Static"], + "teraTypes": ["Water"] + } + ] + }, + "tandemaus": { + "level": 7, + "sets": [ + { + "role": "Fast Support", + "movepool": ["Crunch", "Double-Edge", "Encore", "Low Sweep", "Switcheroo", "Thunder Wave", "U-turn"], + "abilities": ["Own Tempo", "Pickup"], + "teraTypes": ["Ghost"] + } + ] + }, + "tarountula": { + "level": 7, + "sets": [ + { + "role": "Bulky Support", + "movepool": ["Circle Throw", "Knock Off", "Leech Life", "Spikes", "Sticky Web", "Toxic Spikes"], + "abilities": ["Stakeout"], + "teraTypes": ["Ghost"] + } + ] + }, + "teddiursa": { + "level": 6, + "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["Crunch", "Earthquake", "Facade", "Swords Dance"], + "abilities": ["Quick Feet"], + "teraTypes": ["Normal"] + } + ] + }, + "tentacool": { + "level": 6, + "sets": [ + { + "role": "Bulky Support", + "movepool": ["Flip Turn", "Ice Beam", "Knock Off", "Rapid Spin", "Sludge Bomb", "Surf", "Toxic Spikes"], + "abilities": ["Clear Body", "Liquid Ooze"], + "teraTypes": ["Grass"] + } + ] + }, + "tepig": { + "level": 7, + "sets": [ + { + "role": "Fast Attacker", + "movepool": ["Flare Blitz", "Head Smash", "Superpower", "Wild Charge"], + "abilities": ["Blaze"], + "teraTypes": ["Electric", "Fighting", "Fire", "Rock"] + } + ] + }, + "timburr": { + "level": 7, + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["Bulk Up", "Defog", "Drain Punch", "Knock Off", "Stone Edge"], + "abilities": ["Guts"], + "teraTypes": ["Dark", "Steel"] + }, + { + "role": "Fast Support", + "movepool": ["Bulk Up", "Defog", "Drain Punch", "Knock Off", "Mach Punch"], + "abilities": ["Guts"], + "teraTypes": ["Dark", "Steel"] + } + ] + }, + "tinkatink": { + "level": 7, + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["Encore", "Knock Off", "Play Rough", "Stealth Rock", "Thunder Wave"], + "abilities": ["Pickpocket"], + "teraTypes": ["Water"] + } + ] + }, + "toedscool": { + "level": 6, + "sets": [ + { + "role": "Bulky Support", + "movepool": ["Earth Power", "Giga Drain", "Knock Off", "Leaf Storm", "Rapid Spin", "Spikes", "Spore", "Toxic Spikes"], + "abilities": ["Mycelium Might"], + "teraTypes": ["Water"] + } + ] + }, + "torchic": { + "level": 6, + "sets": [ + { + "role": "Bulky Setup", + "movepool": ["Flare Blitz", "Protect", "Rock Slide", "Swords Dance"], + "abilities": ["Speed Boost"], + "teraTypes": ["Dragon", "Fire", "Rock"] + }, + { + "role": "Wallbreaker", + "movepool": ["Flare Blitz", "Overheat", "Protect", "Rock Slide"], + "abilities": ["Speed Boost"], + "teraTypes": ["Dragon", "Fire", "Rock"] + }, + { + "role": "Tera Blast user", + "movepool": ["Flare Blitz", "Protect", "Swords Dance", "Tera Blast"], + "abilities": ["Speed Boost"], + "teraTypes": ["Fighting", "Grass", "Ground"] + } + ] + }, + "totodile": { + "level": 6, + "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["Dragon Dance", "Ice Punch", "Liquidation", "Trailblaze"], + "abilities": ["Sheer Force"], + "teraTypes": ["Grass", "Water"] + } + ] + }, + "trapinch": { + "level": 6, + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["Earthquake", "First Impression", "Stone Edge", "Superpower"], + "abilities": ["Arena Trap"], + "teraTypes": ["Bug", "Fighting"] + } + ] + }, + "treecko": { + "level": 6, + "sets": [ + { + "role": "Wallbreaker", + "movepool": ["Drain Punch", "Giga Drain", "Leaf Storm", "Rock Slide", "Synthesis", "Thunder Punch"], + "abilities": ["Overgrow"], + "teraTypes": ["Electric", "Fighting", "Grass", "Rock"] + }, + { + "role": "Setup Sweeper", + "movepool": ["Acrobatics", "Bullet Seed", "Drain Punch", "Swords Dance"], + "abilities": ["Unburden"], + "teraTypes": ["Flying"] + } + ] + }, + "turtwig": { + "level": 6, + "sets": [ + { + "role": "Bulky Setup", + "movepool": ["Body Slam", "Bullet Seed", "Crunch", "Earth Power", "Shell Smash"], + "abilities": ["Overgrow"], + "teraTypes": ["Grass", "Ground"] + } + ] + }, + "tynamo": { + "level": 7, + "sets": [ + { + "role": "Tera Blast user", + "movepool": ["Knock Off", "Spark", "Tera Blast", "Thunder Wave"], + "abilities": ["Levitate"], + "teraTypes": ["Ground", "Ice"] + }, + { + "role": "Fast Support", + "movepool": ["Charge Beam", "Knock Off", "Spark", "Thunder Wave"], + "abilities": ["Levitate"], + "teraTypes": ["Electric", "Steel"] + } + ] + }, + "tyrogue": { + "level": 9, + "sets": [ + { + "role": "Bulky Setup", + "movepool": ["Bulk Up", "High Jump Kick", "Rapid Spin", "Rock Slide"], + "abilities": ["Guts"], + "teraTypes": ["Fighting", "Rock"] + } + ] + }, + "varoom": { + "level": 6, + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["Gunk Shot", "Iron Head", "Parting Shot", "Taunt", "Toxic Spikes"], + "abilities": ["Overcoat"], + "teraTypes": ["Water"] + } + ] + }, + "venonat": { + "level": 7, + "sets": [ + { + "role": "Bulky Support", + "movepool": ["Leech Life", "Morning Sun", "Sleep Powder", "Stun Spore", "Toxic Spikes"], + "abilities": ["Tinted Lens"], + "teraTypes": ["Steel", "Water"] + } + ] + }, + "voltorb": { + "level": 7, + "sets": [ + { + "role": "Fast Support", + "movepool": ["Explosion", "Foul Play", "Thief", "Thunder Wave", "Thunderbolt", "Volt Switch"], + "abilities": ["Aftermath", "Static"], + "teraTypes": ["Dark", "Electric"] + }, + { + "role": "Tera Blast user", + "movepool": ["Tera Blast", "Thunder Wave", "Thunderbolt", "Volt Switch"], + "abilities": ["Aftermath", "Static"], + "teraTypes": ["Ice"] + } + ] + }, + "voltorbhisui": { + "level": 7, + "sets": [ + { + "role": "Fast Support", + "movepool": ["Giga Drain", "Leaf Storm", "Taunt", "Thief", "Thunder Wave", "Thunderbolt", "Volt Switch"], + "abilities": ["Aftermath", "Static"], + "teraTypes": ["Electric", "Grass"] + }, + { + "role": "Wallbreaker", + "movepool": ["Giga Drain", "Leaf Storm", "Thunderbolt", "Volt Switch"], + "abilities": ["Aftermath", "Static"], + "teraTypes": ["Electric", "Grass"] + } + ] + }, + "vullaby": { + "level": 6, + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["Brave Bird", "Defog", "Knock Off", "Roost", "U-turn"], + "abilities": ["Overcoat"], + "teraTypes": ["Steel"] + } + ] + }, + "vulpix": { + "level": 6, + "sets": [ + { + "role": "Fast Attacker", + "movepool": ["Encore", "Energy Ball", "Extrasensory", "Fire Blast", "Healing Wish", "Hypnosis", "Nasty Plot", "Will-O-Wisp"], + "abilities": ["Drought"], + "teraTypes": ["Grass"] + }, + { + "role": "Tera Blast user", + "movepool": ["Energy Ball", "Fire Blast", "Nasty Plot", "Tera Blast"], + "abilities": ["Drought"], + "teraTypes": ["Rock"] + } + ] + }, + "vulpixalola": { + "level": 6, + "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["Aurora Veil", "Blizzard", "Freeze-Dry", "Nasty Plot"], + "abilities": ["Snow Warning"], + "teraTypes": ["Steel", "Water"] + }, + { + "role": "Tera Blast user", + "movepool": ["Aurora Veil", "Blizzard", "Nasty Plot", "Tera Blast"], + "abilities": ["Snow Warning"], + "teraTypes": ["Ground"] + } + ] + }, + "wattrel": { + "level": 7, + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["Hurricane", "Roost", "Thunder Wave", "Thunderbolt", "U-turn"], + "abilities": ["Volt Absorb"], + "teraTypes": ["Steel"] + } + ] + }, + "wiglett": { + "level": 7, + "sets": [ + { + "role": "Wallbreaker", + "movepool": ["Aqua Jet", "Ice Beam", "Liquidation", "Stomping Tantrum", "Throat Chop"], + "abilities": ["Gooey"], + "teraTypes": ["Dark", "Ground", "Water"] + } + ] + }, + "wingull": { + "level": 6, + "sets": [ + { + "role": "Fast Support", + "movepool": ["Hurricane", "Knock Off", "Roost", "Surf"], + "abilities": ["Hydration"], + "teraTypes": ["Ground"] + } + ] + }, + "wooper": { + "level": 7, + "sets": [ + { + "role": "Bulky Support", + "movepool": ["Earthquake", "Liquidation", "Recover", "Spikes", "Stealth Rock"], + "abilities": ["Unaware", "Water Absorb"], + "teraTypes": ["Poison", "Steel"] + }, + { + "role": "Bulky Setup", + "movepool": ["Curse", "Earthquake", "Liquidation", "Recover"], + "abilities": ["Unaware"], + "teraTypes": ["Poison", "Steel"] + } + ] + }, + "wooperpaldea": { + "level": 7, + "sets": [ + { + "role": "Bulky Setup", + "movepool": ["Curse", "Earthquake", "Gunk Shot", "Poison Jab", "Recover"], + "abilities": ["Unaware", "Water Absorb"], + "teraTypes": ["Flying", "Steel"] + }, + { + "role": "Bulky Support", + "movepool": ["Earthquake", "Gunk Shot", "Poison Jab", "Recover", "Spikes", "Stealth Rock", "Toxic Spikes"], + "abilities": ["Unaware", "Water Absorb"], + "teraTypes": ["Flying", "Steel"] + } + ] + }, + "yanma": { + "level": 5, + "sets": [ + { + "role": "Fast Support", + "movepool": ["Air Slash", "Bug Buzz", "Giga Drain", "Hypnosis", "Protect", "U-turn"], + "abilities": ["Speed Boost"], + "teraTypes": ["Bug", "Flying", "Grass"] + }, + { + "role": "Tera Blast user", + "movepool": ["Double-Edge", "Leech Life", "Protect", "Swords Dance", "Tera Blast"], + "abilities": ["Speed Boost"], + "teraTypes": ["Ground"] + } + ] + }, + "yungoos": { + "level": 7, + "sets": [ + { + "role": "Fast Attacker", + "movepool": ["Crunch", "Double-Edge", "Stomping Tantrum", "U-turn", "Yawn"], + "abilities": ["Adaptability", "Stakeout"], + "teraTypes": ["Normal"] + } + ] + }, + "zorua": { + "level": 7, + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["Burning Jealousy", "Encore", "Extrasensory", "Knock Off", "Sludge Bomb", "Trick", "U-turn"], + "abilities": ["Illusion"], + "teraTypes": ["Poison"] + }, + { + "role": "Setup Sweeper", + "movepool": ["Dark Pulse", "Extrasensory", "Nasty Plot", "Sludge Bomb"], + "abilities": ["Illusion"], + "teraTypes": ["Poison"] + } + ] + }, + "zoruahisui": { + "level": 6, + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["Bitter Malice", "Burning Jealousy", "Knock Off", "Trick", "U-turn", "Will-O-Wisp"], + "abilities": ["Illusion"], + "teraTypes": ["Fairy", "Ghost"] + }, + { + "role": "Tera Blast user", + "movepool": ["Bitter Malice", "Burning Jealousy", "Nasty Plot", "Tera Blast", "Will-O-Wisp"], + "abilities": ["Illusion"], + "teraTypes": ["Fairy", "Fighting"] + } + ] + } +} diff --git a/data/random-battles/gen9baby/teams.ts b/data/random-battles/gen9baby/teams.ts new file mode 100644 index 000000000000..30a3dd032e74 --- /dev/null +++ b/data/random-battles/gen9baby/teams.ts @@ -0,0 +1,815 @@ +import {PRNG, PRNGSeed} from "../../../sim/prng"; +import {RandomTeams, MoveCounter} from "../gen9/teams"; +import {Utils} from '../../../lib'; + +// First, some lists of moves that can be used for rules throughout set generation. Taken from regular gen9. + +// Moves that drop stats: +const CONTRARY_MOVES = [ + 'armorcannon', 'closecombat', 'leafstorm', 'makeitrain', 'overheat', 'spinout', 'superpower', 'vcreate', +]; + +// Hazard-setting moves +const HAZARDS = [ + 'spikes', 'stealthrock', 'stickyweb', 'toxicspikes', +]; + +// Moves that switch the user out +const PIVOT_MOVES = [ + 'chillyreception', 'flipturn', 'partingshot', 'shedtail', 'teleport', 'uturn', 'voltswitch', +]; + +// Moves that boost Attack: +const PHYSICAL_SETUP = [ + 'bellydrum', 'bulkup', 'coil', 'curse', 'dragondance', 'honeclaws', 'howl', 'meditate', 'poweruppunch', 'swordsdance', 'tidyup', 'victorydance', +]; + +// Moves that restore HP: +const RECOVERY_MOVES = [ + 'healorder', 'milkdrink', 'moonlight', 'morningsun', 'recover', 'roost', 'shoreup', 'slackoff', 'softboiled', 'strengthsap', 'synthesis', +]; + +// Setup (stat-boosting) moves +const SETUP = [ + 'acidarmor', 'agility', 'autotomize', 'bellydrum', 'bulkup', 'calmmind', 'clangoroussoul', 'coil', 'cosmicpower', 'curse', + 'dragondance', 'flamecharge', 'growth', 'honeclaws', 'howl', 'irondefense', 'meditate', 'nastyplot', 'noretreat', 'poweruppunch', + 'quiverdance', 'raindance', 'rockpolish', 'shellsmash', 'shiftgear', 'snowscape', 'sunnyday', 'swordsdance', 'tailglow', 'tidyup', + 'trailblaze', 'workup', 'victorydance', +]; + +// Some moves that only boost Speed: +const SPEED_SETUP = [ + 'agility', 'autotomize', 'flamecharge', 'rockpolish', 'trailblaze', +]; + +// Moves that would want to generate together +const MOVE_PAIRS = [ + ['lightscreen', 'reflect'], + ['sleeptalk', 'rest'], + ['protect', 'wish'], +]; + +export class RandomBabyTeams extends RandomTeams { + constructor(format: Format | string, prng: PRNG | PRNGSeed | null) { + super(format, prng); + + // Overwrite enforcementcheckers where needed here + this.moveEnforcementCheckers['Bug'] = (movePool, moves, abilities, types, counter) => ( + !counter.get('Bug') + ); + this.moveEnforcementCheckers['Grass'] = (movePool, moves, abilities, types, counter, species) => ( + !counter.get('Grass') && species.id !== 'rowlet' + ); + } + + + 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 isn't room for 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])); + } + } + } + + // Create list of all status moves to be used later + 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; + } + + // General incompatibilities + const incompatiblePairs = [ + // These moves don't mesh well with other aspects of the set + [SETUP, 'defog'], + [SETUP, PIVOT_MOVES], + [SETUP, HAZARDS], + [PHYSICAL_SETUP, PHYSICAL_SETUP], + [statusMoves, ['destinybond', 'healingwish', 'switcheroo', 'trick']], + ['curse', 'rapidspin'], + + // These moves are redundant with each other + [ + ['alluringvoice', 'dazzlinggleam', 'drainingkiss', 'moonblast'], + ['alluringvoice', 'dazzlinggleam', 'drainingkiss', 'moonblast'], + ], + [['bulletseed', 'gigadrain', 'leafstorm', 'seedbomb'], ['bulletseed', 'gigadrain', 'leafstorm', 'seedbomb']], + [['hypnosis', 'thunderwave', 'toxic', 'willowisp', 'yawn'], ['hypnosis', 'thunderwave', 'toxic', 'willowisp', 'yawn']], + ['roar', 'yawn'], + ['dragonclaw', 'outrage'], + ['dracometeor', 'dragonpulse'], + ['toxic', 'toxicspikes'], + ['rockblast', 'stoneedge'], + ['bodyslam', 'doubleedge'], + ['gunkshot', 'poisonjab'], + [['hydropump', 'liquidation'], 'surf'], + ]; + + for (const pair of incompatiblePairs) this.incompatibleMoves(moves, movePool, pair[0], pair[1]); + } + + // Generate random moveset for a given species, role, tera type. + 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; + } + + // Helper function for (STAB-)move enforcement later on + 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. + + // 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 Sticky Web + if (movePool.includes('stickyweb')) { + counter = this.addMove('stickyweb', 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 + if (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 STAB priority + if (role === 'Wallbreaker') { + 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 STAB + for (const type of types) { + // 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 + if (!counter.get('stabtera') && role !== 'Bulky Support') { + 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 + if (!counter.get('stab')) { + 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 contrary moves + if (abilities.includes('Contrary')) { + const contraryMoves = movePool.filter(moveid => CONTRARY_MOVES.includes(moveid)); + for (const moveid of contraryMoves) { + 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 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 (!['Fast Support', 'Bulky Support'].includes(role) || species.id === 'magnemite') { + 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; + } + + 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 === 'rowlet' && counter.get('Grass')) return 'Overgrow'; + if (species.id === 'riolu') return moves.has('copycat') ? 'Prankster' : 'Inner Focus'; + if (species.id === 'pikipek' && counter.get('skilllink')) return 'Skill Link'; + if (species.id === 'psyduck' && 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); + } + + getPriorityItem( + ability: string, + types: string[], + moves: Set, + counter: MoveCounter, + teamDetails: RandomTeamsTypes.TeamDetails, + species: Species, + isLead: boolean, + isDoubles: boolean, + teraType: string, + role: RandomTeamsTypes.Role, + ) { + if (species.requiredItems) { + return this.sample(species.requiredItems); + } + + if (moves.has('focusenergy')) return 'Scope Lens'; + if (moves.has('thief')) return ''; + if (moves.has('trick') || moves.has('switcheroo')) return 'Choice Scarf'; + + if (moves.has('acrobatics')) return ability === 'Unburden' ? 'Oran Berry' : ''; + if (moves.has('auroraveil') || moves.has('lightscreen') && moves.has('reflect')) return 'Light Clay'; + + if (ability === 'Guts' && moves.has('facade')) return 'Flame Orb'; + if (ability === 'Quick Feet') return 'Toxic Orb'; + + if (['Harvest', 'Ripen', 'Unburden'].includes(ability) || moves.has('bellydrum')) return 'Oran Berry'; + } + + getItem( + ability: string, + types: string[], + moves: Set, + counter: MoveCounter, + teamDetails: RandomTeamsTypes.TeamDetails, + species: Species, + isLead: boolean, + teraType: string, + role: RandomTeamsTypes.Role, + ): string { + if (role === 'Fast Attacker' && (!counter.get('Status') || (counter.get('Status') === 1 && moves.has('destinybond')))) { + return 'Choice Scarf'; + } + if (['Setup Sweeper', 'Wallbreaker'].includes(role)) { + return 'Life Orb'; + } + return 'Eviolite'; + } + + getLevel( + species: Species, + ): number { + if (this.adjustLevel) return this.adjustLevel; + // This should frankly always work, but 10 is the default level in case something bad happens + return this.randomSets[species.id]?.level || 10; + } + + 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 (['Poltchageist', 'Sinistea'].includes(species.baseSpecies)) { + return this.sample([species.name].concat(species.otherFormes!)); + } + return species.name; + } + + 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 = []; + + const ruleTable = this.dex.formats.getRuleTable(this.format); + + for (const set of sets) { + // 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 for Belly Drum and Life Orb + let hp = Math.floor(Math.floor(2 * species.baseStats.hp + ivs.hp + Math.floor(evs.hp / 4) + 100) * level / 100 + 10); + let targetHP = hp; + const minimumHP = Math.floor(Math.floor(2 * species.baseStats.hp + 100) * level / 100 + 10); + if (item === "Life Orb") { + targetHP = Math.floor(hp / 10) * 10 - 1; + } else if (moves.has("bellydrum")) { + targetHP = Math.floor(hp / 2) * 2; + } + // If the difference is too extreme, don't adjust HP + if (hp > targetHP && hp - targetHP <= 3 && targetHP >= minimumHP) { + // If setting evs to 0 is sufficient, decrement evs, otherwise decrement ivs with evs set to 0 + if (Math.floor(Math.floor(2 * species.baseStats.hp + ivs.hp + 100) * level / 100 + 10) >= targetHP) { + evs.hp = 0; + hp = Math.floor(Math.floor(2 * species.baseStats.hp + ivs.hp + Math.floor(evs.hp / 4) + 100) * level / 100 + 10); + while (hp > targetHP) { + ivs.hp -= 1; + hp = Math.floor(Math.floor(2 * species.baseStats.hp + ivs.hp + Math.floor(evs.hp / 4) + 100) * level / 100 + 10); + } + } else { + while (hp > targetHP) { + evs.hp -= 4; + hp = Math.floor(Math.floor(2 * species.baseStats.hp + ivs.hp + Math.floor(evs.hp / 4) + 100) * level / 100 + 10); + } + } + } + + // 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; + if (move.id === 'terablast' && ( + species.id === 'porygon' || species.baseStats.atk > species.baseStats.spa) + ) return false; + return move.category !== 'Physical' || move.id === 'bodypress' || move.id === 'foulplay'; + }); + + if (noAttackStatMoves) { + 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.gender, + shiny: this.randomChance(1, 1024), + level, + moves: shuffledMoves, + ability, + evs, + ivs, + item, + teraType, + role, + }; + } + + randomSets: {[species: string]: RandomTeamsTypes.RandomSpeciesData} = require('./sets.json'); + + randomBabyTeam() { + this.enforceNoDirectCustomBanlistChanges(); + + const seed = this.prng.seed; + const ruleTable = this.dex.formats.getRuleTable(this.format); + const pokemon: RandomTeamsTypes.RandomSet[] = []; + + // For Monotype + const isMonotype = !!this.forceMonotype || ruleTable.has('sametypeclause'); + const typePool = this.dex.types.names().filter(name => name !== "Stellar"); + const type = this.forceMonotype || this.sample(typePool); + + const baseFormes = new Set(); + + const typeCount = new Utils.Multiset(); + const typeComboCount = new Utils.Multiset(); + const typeWeaknesses = new Utils.Multiset(); + const typeDoubleWeaknesses = new Utils.Multiset(); + const teamDetails: RandomTeamsTypes.TeamDetails = {}; + + const pokemonList = Object.keys(this.randomSets); + const [pokemonPool, baseSpeciesPool] = this.getPokemonPool(type, pokemon, isMonotype, pokemonList); + + while (baseSpeciesPool.length && pokemon.length < this.maxTeamSize) { + const baseSpecies = this.sampleNoReplace(baseSpeciesPool); + const species = this.dex.species.get(this.sample(pokemonPool[baseSpecies])); + if (!species.exists) continue; + + // Limit to one of each species (Species Clause) + if (baseFormes.has(species.baseSpecies)) continue; + + // Illusion shouldn't be on the last slot + if (species.baseSpecies === 'Zorua' && 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.get(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.get(typeName) >= 3 * limitFactor) { + skip = true; + break; + } + } + if (this.dex.getEffectiveness(typeName, species) > 1) { + if (typeDoubleWeaknesses.get(typeName) >= 1 * 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 && + typeWeaknesses.get('Fire') >= 3 * limitFactor + ) continue; + + // Limit four weak to Freeze-Dry + if (weakToFreezeDry) { + if (typeWeaknesses.get('Freeze-Dry') >= 4 * limitFactor) continue; + } + } + + // Limit three of any type combination in Monotype + if (!this.forceMonotype && isMonotype && typeComboCount.get(typeCombo) >= 3 * limitFactor) continue; + + const set: RandomTeamsTypes.RandomSet = this.randomSet(species, teamDetails, false, 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.add(species.baseSpecies); + + // Increment type counters + for (const typeName of types) { + typeCount.add(typeName); + } + typeComboCount.add(typeCombo); + + // 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.add(typeName); + } + if (this.dex.getEffectiveness(typeName, species) > 1) { + typeDoubleWeaknesses.add(typeName); + } + } + // Count Dry Skin/Fluffy as Fire weaknesses + if (['Dry Skin', 'Fluffy'].includes(set.ability) && this.dex.getEffectiveness('Fire', species) === 0) { + typeWeaknesses.add('Fire'); + } + if (weakToFreezeDry) typeWeaknesses.add('Freeze-Dry'); + + // Track what the team has + if (set.ability === 'Drizzle' || set.moves.includes('raindance')) teamDetails.rain = 1; + if (set.ability === 'Drought' || 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('spikes')) { + teamDetails.spikes = (teamDetails.spikes || 0) + 1; + } + if (set.moves.includes('stealthrock')) teamDetails.stealthRock = 1; + if (set.moves.includes('stickyweb')) teamDetails.stickyWeb = 1; + if (set.moves.includes('toxicspikes') || set.ability === 'Toxic Debris') teamDetails.toxicSpikes = 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') { + teamDetails.teraBlast = 1; + } + } + // large teams sometimes cannot be built, and monotype is also at user's own risk + if (pokemon.length < this.maxTeamSize && pokemon.length < 12 && !isMonotype) { + throw new Error(`Could not build a random team for ${this.format} (seed=${seed})`); + } + + return pokemon; + } +} + +export default RandomBabyTeams; diff --git a/data/random-battles/gen9cap/sets.json b/data/random-battles/gen9cap/sets.json new file mode 100644 index 000000000000..9fcf0fe604bc --- /dev/null +++ b/data/random-battles/gen9cap/sets.json @@ -0,0 +1,589 @@ +{ + "syclant": { + "level": 78, + "sets": [ + { + "role": "Fast Attacker", + "movepool": ["Earth Power", "Focus Blast", "Spikes", "Triple Axel", "U-turn"], + "abilities": ["Compound Eyes"], + "teraTypes": ["Fighting", "Ground"] + }, + { + "role": "Fast Bulky Setup", + "movepool": ["Close Combat", "Earthquake", "Leech Life", "Swords Dance", "Triple Axel"], + "abilities": ["Compound Eyes"], + "teraTypes": ["Fighting", "Ground"] + }, + { + "role": "Setup Sweeper", + "movepool": ["Bug Buzz", "Earth Power", "Ice Beam", "Tail Glow"], + "abilities": ["Mountaineer"], + "teraTypes": ["Ground"] + } + ] + }, + "revenankh": { + "level": 77, + "sets": [ + { + "role": "Bulky Setup", + "movepool": ["Bulk Up", "Drain Punch", "Moonlight", "Poltergeist"], + "abilities": ["Triage"], + "teraTypes": ["Fairy", "Fighting", "Steel", "Water"] + }, + { + "role": "Bulky Attacker", + "movepool": ["Bulk Up", "Drain Punch", "Poltergeist", "Shadow Sneak"], + "abilities": ["Triage"], + "teraTypes": ["Fairy", "Fighting", "Steel", "Water"] + } + ] + }, + "pyroak": { + "level": 85, + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["Earth Power", "Energy Ball", "Overheat", "Synthesis"], + "abilities": ["Contrary"], + "teraTypes": ["Fire", "Ground"] + }, + { + "role": "AV Pivot", + "movepool": ["Dragon Tail", "Earth Power", "Giga Drain", "Overheat"], + "abilities": ["Contrary"], + "teraTypes": ["Fire", "Ground"] + } + ] + }, + "fidgit": { + "level": 86, + "sets": [ + { + "role": "Fast Support", + "movepool": ["Earth Power", "Encore", "Rapid Spin", "Sludge Bomb", "Spikes", "Stealth Rock", "Tailwind", "Toxic Spikes", "U-turn"], + "abilities": ["Frisk", "Persistent"], + "teraTypes": ["Flying", "Steel"] + } + ] + }, + "stratagem": { + "level": 79, + "sets": [ + { + "role": "Wallbreaker", + "movepool": ["Energy Ball", "Fire Blast", "Paleo Wave", "Trick"], + "abilities": ["Levitate"], + "teraTypes": ["Fire", "Grass", "Rock"] + }, + { + "role": "Setup Sweeper", + "movepool": ["Energy Ball", "Fire Blast", "Meteor Beam", "Paleo Wave"], + "abilities": ["Levitate"], + "teraTypes": ["Fire", "Grass", "Rock"] + } + ] + }, + "arghonaut": { + "level": 80, + "sets": [ + { + "role": "Bulky Setup", + "movepool": ["Bulk Up", "Drain Punch", "Recover", "Waterfall"], + "abilities": ["Unaware"], + "teraTypes": ["Steel"] + }, + { + "role": "Bulky Support", + "movepool": ["Circle Throw", "Knock Off", "Recover", "Spikes"], + "abilities": ["Unaware"], + "teraTypes": ["Dark", "Steel"] + } + ] + }, + "kitsunoh": { + "level": 78, + "sets": [ + { + "role": "Fast Attacker", + "movepool": ["Close Combat", "Defog", "Encore", "Meteor Mash", "Poltergeist", "Strength Sap", "Trick", "U-turn", "Will-O-Wisp"], + "abilities": ["Trace"], + "teraTypes": ["Fighting"] + }, + { + "role": "Bulky Attacker", + "movepool": ["Defog", "Encore", "Meteor Mash", "Poltergeist", "Strength Sap", "U-turn", "Will-O-Wisp"], + "abilities": ["Trace"], + "teraTypes": ["Dark", "Water"] + } + ] + }, + "cyclohm": { + "level": 79, + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["Defog", "Discharge", "Draco Meteor", "Fire Blast", "Ice Beam", "Slack Off", "Thunderbolt", "Volt Switch"], + "abilities": ["Shield Dust", "Static"], + "teraTypes": ["Electric", "Fairy", "Steel"] + }, + { + "role": "AV Pivot", + "movepool": ["Discharge", "Draco Meteor", "Fire Blast", "Ice Beam", "Thunderbolt", "Volt Switch"], + "abilities": ["Shield Dust", "Static"], + "teraTypes": ["Electric", "Fairy", "Steel"] + } + ] + }, + "colossoil": { + "level": 78, + "sets": [ + { + "role": "Fast Attacker", + "movepool": ["Facade", "Headlong Rush", "Knock Off", "Rapid Spin", "Sucker Punch", "U-turn"], + "abilities": ["Guts"], + "teraTypes": ["Normal"] + } + ] + }, + "krilowatt": { + "level": 84, + "sets": [ + { + "role": "Fast Attacker", + "movepool": ["Ice Beam", "Surf", "Volt Switch", "Wild Charge"], + "abilities": ["Magic Guard"], + "teraTypes": ["Electric", "Flying"] + } + ] + }, + "voodoom": { + "level": 81, + "sets": [ + { + "role": "Fast Attacker", + "movepool": ["Aura Sphere", "Dark Pulse", "Flash Cannon", "Focus Blast", "Nasty Plot", "Vacuum Wave", "Volt Switch"], + "abilities": ["Lightning Rod", "Volt Absorb"], + "teraTypes": ["Steel"] + } + ] + }, + "tomohawk": { + "level": 82, + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["Aura Sphere", "Haze", "Hurricane", "Rapid Spin", "Roost"], + "abilities": ["Intimidate", "Prankster"], + "teraTypes": ["Steel"] + } + ] + }, + "necturna": { + "level": 80, + "sets": [ + { + "role": "Bulky Setup", + "movepool": ["Horn Leech", "Shadow Claw", "Stone Edge", "Victory Dance"], + "abilities": ["Forewarn"], + "teraTypes": ["Fairy", "Rock", "Water"] + }, + { + "role": "Bulky Attacker", + "movepool": ["Horn Leech", "Pain Split", "Rage Fist", "Toxic Spikes", "Will-O-Wisp"], + "abilities": ["Forewarn"], + "teraTypes": ["Fairy", "Water"] + }, + { + "role": "Bulky Support", + "movepool": ["Horn Leech", "Pain Split", "Power Whip", "Shadow Claw", "Shadow Sneak", "Sticky Web", "Toxic Spikes", "Will-O-Wisp"], + "abilities": ["Forewarn"], + "teraTypes": ["Fairy", "Water"] + } + ] + }, + "mollux": { + "level": 84, + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["Hydro Pump", "Lava Plume", "Rapid Spin", "Recover", "Sludge Bomb", "Thunder Wave"], + "abilities": ["Dry Skin"], + "teraTypes": ["Grass", "Water"] + }, + { + "role": "Fast Attacker", + "movepool": ["Eruption", "Hydro Pump", "Sludge Wave", "Trick"], + "abilities": ["Dry Skin"], + "teraTypes": ["Fire"] + } + ] + }, + "aurumoth": { + "level": 78, + "sets": [ + { + "role": "Bulky Setup", + "movepool": ["Bug Buzz", "Focus Blast", "Psyshock", "Tail Glow"], + "abilities": ["No Guard", "Weak Armor"], + "teraTypes": ["Fighting"] + }, + { + "role": "Wallbreaker", + "movepool": ["Blizzard", "Bug Buzz", "Focus Blast", "Hydro Pump", "Overheat", "Psychic", "Psyshock", "Thunder"], + "abilities": ["No Guard"], + "teraTypes": ["Fighting", "Fire"] + }, + { + "role": "Setup Sweeper", + "movepool": ["Close Combat", "Dragon Dance", "Megahorn", "Zen Headbutt"], + "abilities": ["No Guard"], + "teraTypes": ["Fighting"] + } + ] + }, + "malaconda": { + "level": 85, + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["Glare", "Knock Off", "Parting Shot", "Rapid Spin", "Solar Blade", "Synthesis", "Temper Flare"], + "abilities": ["Drought"], + "teraTypes": ["Poison", "Water"] + }, + { + "role": "Bulky Support", + "movepool": ["Knock Off", "Solar Blade", "Sucker Punch", "Synthesis"], + "abilities": ["Drought"], + "teraTypes": ["Poison", "Water"] + }, + { + "role": "AV Pivot", + "movepool": ["Knock Off", "Rapid Spin", "Solar Blade", "Sucker Punch", "Temper Flare", "U-turn"], + "abilities": ["Drought"], + "teraTypes": ["Fire", "Poison"] + } + ] + }, + "cawmodore": { + "level": 75, + "sets": [ + { + "role": "Bulky Support", + "movepool": ["Acrobatics", "Belly Drum", "Bullet Punch", "Drain Punch"], + "abilities": ["Volt Absorb"], + "teraTypes": ["Flying", "Water"] + } + ] + }, + "volkraken": { + "level": 82, + "sets": [ + { + "role": "Fast Attacker", + "movepool": ["Flamethrower", "Hydro Pump", "Overheat", "U-turn"], + "abilities": ["Analytic"], + "teraTypes": ["Fire", "Water"] + }, + { + "role": "Wallbreaker", + "movepool": ["Fire Blast", "Hydro Pump", "Scald", "U-turn"], + "abilities": ["Analytic"], + "teraTypes": ["Fire", "Water"] + } + ] + }, + "plasmanta": { + "level": 86, + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["Discharge", "Encore", "Sludge Bomb", "Surf", "Taunt", "Thunderbolt"], + "abilities": ["Storm Drain"], + "teraTypes": ["Water"] + } + ] + }, + "naviathan": { + "level": 79, + "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["Dragon Dance", "Facade", "Heavy Slam", "Wave Crash"], + "abilities": ["Guts"], + "teraTypes": ["Grass", "Normal"] + } + ] + }, + "crucibelle": { + "level": 86, + "sets": [ + { + "role": "AV Pivot", + "movepool": ["Gunk Shot", "Knock Off", "Poison Jab", "Stone Edge", "U-turn", "Wood Hammer"], + "abilities": ["Regenerator"], + "teraTypes": ["Grass"] + }, + { + "role": "Fast Support", + "movepool": ["Gunk Shot", "Knock Off", "Stealth Rock", "Stone Edge", "Toxic Spikes"], + "abilities": ["Regenerator"], + "teraTypes": ["Dark", "Grass"] + }, + { + "role": "Bulky Setup", + "movepool": ["Coil", "Gunk Shot", "Stone Edge", "Wood Hammer"], + "abilities": ["Regenerator"], + "teraTypes": ["Grass"] + } + ] + }, + "kerfluffle": { + "level": 82, + "sets": [ + { + "role": "Fast Support", + "movepool": ["Aura Sphere", "Encore", "Focus Blast", "Moonblast", "Parting Shot", "Psychic", "Vacuum Wave"], + "abilities": ["Natural Cure"], + "teraTypes": ["Steel"] + } + ] + }, + "pajantom": { + "level": 80, + "sets": [ + { + "role": "Fast Attacker", + "movepool": ["Earthquake", "Leech Life", "Outrage", "Spirit Shackle", "Taunt", "Toxic Spikes"], + "abilities": ["Comatose"], + "teraTypes": ["Fairy", "Ghost"] + } + ] + }, + "jumbao": { + "level": 83, + "sets": [ + { + "role": "Fast Support", + "movepool": ["Focus Blast", "Healing Wish", "Moonblast", "Solar Beam", "Synthesis"], + "abilities": ["Drought"], + "teraTypes": ["Poison", "Water"] + }, + { + "role": "Tera Blast user", + "movepool": ["Healing Wish", "Moonblast", "Solar Beam", "Synthesis", "Tera Blast"], + "abilities": ["Drought"], + "teraTypes": ["Fire", "Ground"] + } + ] + }, + "caribolt": { + "level": 81, + "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["Horn Leech", "Hyper Drill", "Knock Off", "Quick Attack", "Swords Dance"], + "abilities": ["Galvanize"], + "teraTypes": ["Electric"] + }, + { + "role": "Bulky Setup", + "movepool": ["Double-Edge", "Horn Leech", "Rapid Spin", "Swords Dance"], + "abilities": ["Galvanize"], + "teraTypes": ["Electric"] + } + ] + }, + "smokomodo": { + "level": 83, + "sets": [ + { + "role": "Fast Bulky Setup", + "movepool": ["Bone Rush", "Bulk Up", "Flame Charge", "Morning Sun"], + "abilities": ["Technician"], + "teraTypes": ["Grass", "Ground"] + }, + { + "role": "Setup Sweeper", + "movepool": ["Bone Rush", "Bulk Up", "Flame Wheel", "Scale Shot"], + "abilities": ["Technician"], + "teraTypes": ["Dragon"] + }, + { + "role": "Fast Support", + "movepool": ["Bone Rush", "Clear Smog", "Defog", "Flame Wheel", "Morning Sun", "Stealth Rock", "Taunt", "Toxic", "Will-O-Wisp"], + "abilities": ["Technician"], + "teraTypes": ["Grass", "Ground", "Water"] + } + ] + }, + "snaelstrom": { + "level": 80, + "sets": [ + { + "role": "Bulky Support", + "movepool": ["Liquidation", "Rapid Spin", "Stealth Rock", "Sticky Web", "Toxic", "U-turn"], + "abilities": ["Poison Heal"], + "teraTypes": ["Electric", "Ground"] + }, + { + "role": "Bulky Attacker", + "movepool": ["Liquidation", "Recover", "Spiky Shield", "Toxic"], + "abilities": ["Poison Heal"], + "teraTypes": ["Electric", "Ground"] + } + ] + }, + "equilibra": { + "level": 84, + "sets": [ + { + "role": "Bulky Support", + "movepool": ["Doom Desire", "Earth Power", "Flash Cannon", "Pain Split", "Rapid Spin"], + "abilities": ["Levitate"], + "teraTypes": ["Electric", "Steel", "Water"] + } + ] + }, + "astrolotl": { + "level": 79, + "sets": [ + { + "role": "Fast Support", + "movepool": ["Defog", "Draco Meteor", "Encore", "Fire Lash", "Spikes", "Thunder Wave", "Will-O-Wisp"], + "abilities": ["Regenerator"], + "teraTypes": ["Fairy", "Steel"] + } + ] + }, + "miasmaw": { + "level": 79, + "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["Earthquake", "Megahorn", "Scale Shot", "Swords Dance"], + "abilities": ["Compound Eyes"], + "teraTypes": ["Dragon", "Steel"] + }, + { + "role": "Fast Bulky Setup", + "movepool": ["Close Combat", "Earthquake", "Gunk Shot", "Scale Shot", "Swords Dance"], + "abilities": ["Compound Eyes"], + "teraTypes": ["Poison"] + }, + { + "role": "Fast Attacker", + "movepool": ["Dragon Rush", "Earthquake", "First Impression", "U-turn"], + "abilities": ["Compound Eyes"], + "teraTypes": ["Bug", "Steel"] + } + ] + }, + "chromera": { + "level": 82, + "sets": [ + { + "role": "Wallbreaker", + "movepool": ["Boomburst", "Dark Pulse", "Recover", "Switcheroo", "Thunderbolt", "Toxic Spikes"], + "abilities": ["Color Change"], + "teraTypes": ["Normal"] + }, + { + "role": "Bulky Setup", + "movepool": ["Boomburst", "Calm Mind", "Dark Pulse", "Recover"], + "abilities": ["Color Change"], + "teraTypes": ["Normal"] + } + ] + }, + "venomicon": { + "level": 82, + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["Air Slash", "Body Press", "Hurricane", "Roost", "Sludge Bomb"], + "abilities": ["Stamina"], + "teraTypes": ["Fighting", "Steel"] + }, + { + "role": "Bulky Support", + "movepool": ["Air Slash", "Body Press", "Hurricane", "Knock Off", "Roost"], + "abilities": ["Stamina"], + "teraTypes": ["Fighting", "Steel"] + } + ] + }, + "venomiconepilogue": { + "level": 82, + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["Brave Bird", "Coil", "Gunk Shot", "Roost", "Toxic Spikes"], + "abilities": ["Tinted Lens"], + "teraTypes": ["Flying", "Poison", "Steel"] + } + ] + }, + "saharaja": { + "level": 80, + "sets": [ + { + "role": "AV Pivot", + "movepool": ["Body Press", "Diamond Storm", "Earthquake", "Rapid Spin"], + "abilities": ["Serene Grace", "Water Absorb"], + "teraTypes": ["Fighting"] + }, + { + "role": "Bulky Attacker", + "movepool": ["Body Press", "Diamond Storm", "Earthquake", "Pain Split"], + "abilities": ["Serene Grace", "Water Absorb"], + "teraTypes": ["Fighting"] + }, + { + "role": "Bulky Setup", + "movepool": ["Diamond Storm", "Earthquake", "Pain Split", "Rapid Spin", "Swords Dance"], + "abilities": ["Serene Grace", "Water Absorb"], + "teraTypes": ["Rock", "Steel"] + } + ] + }, + "hemogoblin": { + "level": 78, + "sets": [ + { + "role": "Bulky Setup", + "movepool": ["Bulk Up", "Extreme Speed", "Flare Blitz", "Moonlight"], + "abilities": ["Pixilate"], + "teraTypes": ["Fairy", "Water"] + }, + { + "role": "Wallbreaker", + "movepool": ["Explosion", "Extreme Speed", "Overheat", "Spikes", "Will-O-Wisp"], + "abilities": ["Pixilate"], + "teraTypes": ["Fairy", "Water"] + } + ] + }, + "cresceidon": { + "level": 81, + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["Encore", "Moonblast", "Recover", "Scald", "Thunder Wave"], + "abilities": ["Multiscale", "Rough Skin"], + "teraTypes": ["Poison", "Steel"] + } + ] + }, + "chuggalong": { + "level": 78, + "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["Clanging Scales", "Clangorous Soul", "Flamethrower", "Sludge Wave", "Surf"], + "abilities": ["Armor Tail"], + "teraTypes": ["Fire", "Water"] + } + ] + } +} diff --git a/data/random-battles/gen9cap/teams.ts b/data/random-battles/gen9cap/teams.ts new file mode 100644 index 000000000000..d17bf8b5105b --- /dev/null +++ b/data/random-battles/gen9cap/teams.ts @@ -0,0 +1,389 @@ +import {RandomTeams, MoveCounter} from "../gen9/teams"; + +/** Pokemon who should never be in the lead slot */ +const NO_LEAD_POKEMON = [ + 'Zacian', 'Zamazenta', +]; + +export class RandomCAPTeams extends RandomTeams { + getCAPAbility( + types: string[], + moves: Set, + abilities: string[], + counter: MoveCounter, + teamDetails: RandomTeamsTypes.TeamDetails, + species: Species, + isLead: boolean, + teraType: string, + role: RandomTeamsTypes.Role, + ): string { + // Hard-code abilities here + if (species.id === 'fidgit') return moves.has('tailwind') ? 'Persistent' : 'Frisk'; + if (species.id === 'tomohawk') return moves.has('haze') ? 'Prankster' : 'Intimidate'; + // Default to regular ability selection + return this.getAbility(types, moves, abilities, counter, teamDetails, species, isLead, false, teraType, role); + } + + getCAPPriorityItem( + ability: string, + types: string[], + moves: Set, + counter: MoveCounter, + teamDetails: RandomTeamsTypes.TeamDetails, + species: Species, + isLead: boolean, + teraType: string, + role: RandomTeamsTypes.Role, + ) { + if (ability === 'Mountaineer') return 'Life Orb'; + } + + getLevel( + species: Species, + isDoubles: boolean, + ): number { + if (this.adjustLevel) return this.adjustLevel; + return (species.num > 0 ? this.randomSets[species.id]["level"] : this.randomCAPSets[species.id]["level"]) || 80; + } + + randomCAPSet( + s: string | Species, + teamDetails: RandomTeamsTypes.TeamDetails = {}, + isLead = false, + isDoubles = false + ): RandomTeamsTypes.RandomSet { + const species = this.dex.species.get(s); + // Generate Non-CAP Pokemon using the regular randomSet() method + if (species.num > 0) return this.randomSet(s, teamDetails, isLead, isDoubles); + const forme = this.getForme(species); + const sets = this.randomCAPSets[species.id]["sets"]; + const possibleSets = []; + + 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 = new Set(Object.values(species.abilities)); + if (isLead && (abilities.has('Protosynthesis') || abilities.has('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.getCAPAbility(types, moves, abilities, counter, teamDetails, species, isLead, teraType!, role); + + // Get items + // First, the priority items + item = this.getCAPPriorityItem(ability, types, moves, counter, teamDetails, species, isLead, teraType!, role); + if (item === undefined) { + 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, 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'; + }); + if (noAttackStatMoves && !moves.has('transform') && this.format.mod !== 'partnersincrime') { + 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, + shiny: this.randomChance(1, 1024), + level, + moves: shuffledMoves, + ability, + evs, + ivs, + item, + teraType, + role, + }; + } + + randomCAPSets: {[species: string]: RandomTeamsTypes.RandomSpeciesData} = require('./sets.json'); + + randomTeam() { + this.enforceNoDirectCustomBanlistChanges(); + + const seed = this.prng.seed; + const ruleTable = this.dex.formats.getRuleTable(this.format); + const pokemon: RandomTeamsTypes.RandomSet[] = []; + + // For Monotype + const isMonotype = !!this.forceMonotype || ruleTable.has('sametypeclause'); + const isDoubles = false; + const typePool = this.dex.types.names().filter(name => name !== "Stellar"); + const type = this.forceMonotype || this.sample(typePool); + + 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 capPokemonList = Object.keys(this.randomCAPSets); + + const [pokemonPool, baseSpeciesPool] = this.getPokemonPool(type, pokemon, isMonotype, pokemonList); + const [capPokemonPool, capBaseSpeciesPool] = this.getPokemonPool(type, pokemon, isMonotype, capPokemonList); + + let leadsRemaining = 1; + while (baseSpeciesPool.length && pokemon.length < this.maxTeamSize) { + let baseSpecies, species; + // Always generate a CAP Pokemon in slot 2; other slots can randomly generate CAP Pokemon. + if ((pokemon.length === 1 || this.randomChance(1, 5)) && capBaseSpeciesPool.length) { + baseSpecies = this.sampleNoReplace(capBaseSpeciesPool); + species = this.dex.species.get(this.sample(capPokemonPool[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 ((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; + + 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] >= 1 * 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; + } + + // 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; + + let set: RandomTeamsTypes.RandomSet; + + if (leadsRemaining) { + if (NO_LEAD_POKEMON.includes(species.baseSpecies)) { + if (pokemon.length + leadsRemaining === this.maxTeamSize) continue; + set = this.randomCAPSet(species, teamDetails, false, isDoubles); + pokemon.push(set); + } else { + set = this.randomCAPSet(species, teamDetails, true, isDoubles); + pokemon.unshift(set); + leadsRemaining--; + } + } else { + set = this.randomCAPSet(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' || 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 RandomCAPTeams; diff --git a/data/mods/randomroulette/random-teams.ts b/data/random-battles/randomroulette/teams.ts similarity index 69% rename from data/mods/randomroulette/random-teams.ts rename to data/random-battles/randomroulette/teams.ts index b3934e245d9d..47379682cddb 100644 --- a/data/mods/randomroulette/random-teams.ts +++ b/data/random-battles/randomroulette/teams.ts @@ -1,4 +1,4 @@ -import RandomTeams from '../../random-teams'; +import RandomTeams from '../gen9/teams'; export class RandomRandomRouletteTeams extends RandomTeams {} diff --git a/data/mods/sharedpower/random-teams.ts b/data/random-battles/sharedpower/teams.ts similarity index 68% rename from data/mods/sharedpower/random-teams.ts rename to data/random-battles/sharedpower/teams.ts index db19a3c76ce9..0163a1bef994 100644 --- a/data/mods/sharedpower/random-teams.ts +++ b/data/random-battles/sharedpower/teams.ts @@ -1,4 +1,4 @@ -import RandomTeams from '../../random-teams'; +import RandomTeams from '../gen9/teams'; export class RandomSharedPowerTeams extends RandomTeams {} diff --git a/data/rulesets.ts b/data/rulesets.ts index e08a7dfceec5..9a0ad202c4f9 100644 --- a/data/rulesets.ts +++ b/data/rulesets.ts @@ -1,11 +1,9 @@ // Note: These are the rules that formats use -import {Utils} from "../lib"; import type {Learnset} from "../sim/dex-species"; -import {Pokemon} from "../sim/pokemon"; // The list of formats is stored in config/formats.js -export const Rulesets: {[k: string]: FormatData} = { +export const Rulesets: import('../sim/dex-formats').FormatDataTable = { // Rulesets /////////////////////////////////////////////////////////////////// @@ -31,8 +29,8 @@ export const Rulesets: {[k: string]: FormatData} = { flatrules: { effectType: 'ValidatorRule', name: 'Flat Rules', - desc: "The in-game Flat Rules: Adjust Level Down 50, Species Clause, Item Clause, -Mythical, -Restricted Legendary, Bring 6 Pick 3-6 depending on game type.", - ruleset: ['Obtainable', 'Team Preview', 'Species Clause', 'Nickname Clause', 'Item Clause', 'Adjust Level Down = 50', 'Picked Team Size = Auto', 'Cancel Mod'], + 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', 'Item Clause = 1', 'Adjust Level Down = 50', 'Picked Team Size = Auto', 'Cancel Mod'], banlist: ['Mythical', 'Restricted Legendary', 'Greninja-Bond'], }, limittworestricted: { @@ -80,7 +78,7 @@ export const Rulesets: {[k: string]: FormatData} = { desc: "The standard ruleset for all Smogon OMs (Almost Any Ability, STABmons, etc.)", ruleset: [ 'Obtainable', 'Team Preview', 'Species Clause', 'Nickname Clause', 'OHKO Clause', 'Evasion Moves Clause', 'Endless Battle Clause', 'HP Percentage Mod', 'Cancel Mod', 'Overflow Stat Mod', - // 'Min Source Gen = 9', - crashes for some reason + 'Min Source Gen = 9', ], }, standardnatdex: { @@ -139,9 +137,9 @@ export const Rulesets: {[k: string]: FormatData} = { } }, }, - draft: { + standarddraft: { effectType: 'ValidatorRule', - name: 'Draft', + name: 'Standard Draft', desc: "The custom Draft League ruleset", ruleset: [ 'Obtainable', '+Unreleased', '+CAP', 'Sketch Post-Gen 7 Moves', 'Team Preview', 'Sleep Clause Mod', 'OHKO Clause', 'Evasion Clause', 'Endless Battle Clause', 'HP Percentage Mod', 'Cancel Mod', @@ -443,7 +441,7 @@ export const Rulesets: {[k: string]: FormatData} = { banlist: [ 'Wooper-Paldea', 'Raichu-Alola', 'Vulpix-Alola', 'Ninetales-Alola', 'Growlithe-Hisui', 'Arcanine-Hisui', 'Geodude-Alola', 'Graveler-Alola', 'Golem-Alola', 'Sandshrew-Alola', 'Sandslash-Alola', 'Weezing-Galar', - 'Sneasel-Hisui', 'Sliggoo-Hisui', 'Goodra-Hisui', 'Basculin-Base', 'Basculin-Blue-Striped', 'Ursaluna-Base', + 'Sneasel-Hisui', 'Sliggoo-Hisui', 'Goodra-Hisui', 'Basculin-Red-Striped', 'Basculin-Blue-Striped', 'Ursaluna-Base', ], onValidateSet(set, format) { const kitakamiDex = [ @@ -456,6 +454,26 @@ export const Rulesets: {[k: string]: FormatData} = { } }, }, + blueberrypokedex: { + effectType: 'ValidatorRule', + name: 'Blueberry Pokedex', + desc: "Only allows Pokémon native to the Blueberry Academy (SV DLC2)", + banlist: [ + 'Diglett-Base', 'Dugtrio-Base', 'Grimer-Base', 'Muk-Base', 'Slowpoke-Base', 'Slowbro-Base', 'Slowking-Base', + 'Geodude-Base', 'Graveler-Base', 'Golem-Base', 'Qwilfish-Base', 'Sandshrew-Base', 'Sandslash-Base', + 'Vulpix-Base', 'Ninetales-Base', 'Typhlosion-Hisui', 'Samurott-Hisui', 'Greninja-Bond', 'Decidueye-Hisui', + ], + onValidateSet(set, format) { + const blueberryDex = [ + "Doduo", "Dodrio", "Exeggcute", "Exeggutor", "Rhyhorn", "Rhydon", "Rhyperior", "Venonat", "Venomoth", "Elekid", "Electabuzz", "Electivire", "Magby", "Magmar", "Magmortar", "Happiny", "Chansey", "Blissey", "Scyther", "Scizor", "Kleavor", "Tauros", "Blitzle", "Zebstrika", "Girafarig", "Farigiraf", "Sandile", "Krokorok", "Krookodile", "Rellor", "Rabsca", "Rufflet", "Braviary", "Vullaby", "Mandibuzz", "Litleo", "Pyroar", "Deerling", "Sawsbuck", "Smeargle", "Rotom", "Milcery", "Alcremie", "Trapinch", "Vibrava", "Flygon", "Pikipek", "Trumbeak", "Toucannon", "Tentacool", "Tentacruel", "Horsea", "Seadra", "Kingdra", "Bruxish", "Cottonee", "Whimsicott", "Comfey", "Slakoth", "Vigoroth", "Slaking", "Oddish", "Gloom", "Vileplume", "Bellossom", "Diglett", "Dugtrio", "Grimer", "Muk", "Zangoose", "Seviper", "Crabrawler", "Crabominable", "Oricorio", "Slowpoke", "Slowbro", "Slowking", "Chinchou", "Lanturn", "Inkay", "Malamar", "Luvdisc", "Finneon", "Lumineon", "Alomomola", "Torkoal", "Fletchling", "Fletchinder", "Talonflame", "Dewpider", "Araquanid", "Tyrogue", "Hitmonlee", "Hitmonchan", "Hitmontop", "Geodude", "Graveler", "Golem", "Drilbur", "Excadrill", "Gothita", "Gothorita", "Gothitelle", "Espurr", "Meowstic", "Minior", "Cranidos", "Rampardos", "Shieldon", "Bastiodon", "Minccino", "Cinccino", "Skarmory", "Swablu", "Altaria", "Magnemite", "Magneton", "Magnezone", "Plusle", "Minun", "Scraggy", "Scrafty", "Golett", "Golurk", "Numel", "Camerupt", "Sinistea", "Polteageist", "Porygon", "Porygon2", "Porygon-Z", "Joltik", "Galvantula", "Tynamo", "Eelektrik", "Eelektross", "Beldum", "Metang", "Metagross", "Axew", "Fraxure", "Haxorus", "Seel", "Dewgong", "Lapras", "Qwilfish", "Overqwil", "Solosis", "Duosion", "Reuniclus", "Snubbull", "Granbull", "Cubchoo", "Beartic", "Sandshrew", "Sandslash", "Vulpix", "Ninetales", "Snover", "Abomasnow", "Duraludon", "Archaludon", "Hydrapple", "Bulbasaur", "Ivysaur", "Venusaur", "Charmander", "Charmeleon", "Charizard", "Squirtle", "Wartortle", "Blastoise", "Chikorita", "Bayleef", "Meganium", "Cyndaquil", "Quilava", "Typhlosion", "Totodile", "Croconaw", "Feraligatr", "Treecko", "Grovyle", "Sceptile", "Torchic", "Combusken", "Blaziken", "Mudkip", "Marshtomp", "Swampert", "Turtwig", "Grotle", "Torterra", "Chimchar", "Monferno", "Infernape", "Piplup", "Prinplup", "Empoleon", "Snivy", "Servine", "Serperior", "Tepig", "Pignite", "Emboar", "Oshawott", "Dewott", "Samurott", "Chespin", "Quilladin", "Chesnaught", "Fennekin", "Braixen", "Delphox", "Froakie", "Frogadier", "Greninja", "Rowlet", "Dartrix", "Decidueye", "Litten", "Torracat", "Incineroar", "Popplio", "Brionne", "Primarina", "Grookey", "Thwackey", "Rillaboom", "Scorbunny", "Raboot", "Cinderace", "Sobble", "Drizzile", "Inteleon", "Gouging Fire", "Raging Bolt", "Iron Crown", "Iron Boulder", "Terapagos", "Walking Wake", "Iron Leaves", + ]; + const species = this.dex.species.get(set.species || set.name); + if (!blueberryDex.includes(species.baseSpecies) && !blueberryDex.includes(species.name) && + !this.ruleTable.has('+' + species.id)) { + return [`${species.baseSpecies} is not in the Blueberry Pokédex.`]; + } + }, + }, potd: { effectType: 'Rule', name: 'PotD', @@ -484,6 +502,7 @@ export const Rulesets: {[k: string]: FormatData} = { if (type.name === 'Stellar') { throw new Error(`There are no Stellar-type Pok\u00e9mon.`); } + return type.name; }, onValidateSet(set) { const species = this.dex.species.get(set.species); @@ -493,6 +512,51 @@ export const Rulesets: {[k: string]: FormatData} = { } }, }, + forcemonocolor: { + effectType: 'ValidatorRule', + name: 'Force Monocolor', + desc: `Forces all teams to have Pokémon of the same color. Usage: Force Monocolor = [Color], e.g. "Force Monocolor = Blue"`, + hasValue: true, + onValidateRule(value) { + const validColors = ["Black", "Blue", "Brown", "Gray", "Green", "Pink", "Purple", "Red", "White", "Yellow"]; + if (!validColors.map(this.dex.toID).includes(this.dex.toID(value))) { + throw new Error(`Invalid color "${value}"`); + } + }, + onValidateSet(set) { + const color = this.toID(this.ruleTable.valueRules.get('forcemonocolor')); + let dex = this.dex; + if (dex.gen < 5) { + dex = dex.forGen(5); + } + const species = dex.species.get(set.species); + if (this.toID(species.color) !== color) { + return [`${set.species} must be the color ${color}.`]; + } + }, + }, + forceteratype: { + effectType: 'ValidatorRule', + name: 'Force Tera Type', + desc: `Forces all Pokémon to have the same Tera Type. Usage: Force Tera Type = [Type], e.g. "Force Tera Type = Dragon"`, + hasValue: true, + onValidateRule(value) { + if (this.dex.gen !== 9) { + throw new Error(`Terastallization doesn't exist outside of Generation 9.`); + } + const type = this.dex.types.get(value); + if (!type.exists) throw new Error(`Misspelled type "${value}"`); + if (type.isNonstandard) { + throw new Error(`Invalid type "${type.name}" in Generation ${this.dex.gen}.`); + } + }, + onValidateSet(set) { + const type = this.dex.types.get(this.ruleTable.valueRules.get('forceteratype')!); + if (this.toID(set.teraType) !== type.id) { + return [`${set.species} must have its Tera Type set to ${type.name}.`]; + } + }, + }, forceselect: { effectType: 'ValidatorRule', name: 'Force Select', @@ -567,12 +631,11 @@ export const Rulesets: {[k: string]: FormatData} = { onTeamPreview() { this.add('clearpoke'); for (const pokemon of this.getAllPokemon()) { - let details = pokemon.details.replace(', shiny', ''); + let details = pokemon.details.replace(', shiny', '') + .replace(/(Zacian|Zamazenta)(?!-Crowned)/g, '$1-*'); // Hacked-in Crowned formes will be revealed if (!this.ruleTable.has('speciesrevealclause')) { details = details - .replace(/(Greninja|Gourgeist|Pumpkaboo|Xerneas|Silvally|Urshifu|Dudunsparce)(-[a-zA-Z?-]+)?/g, '$1-*') - // Still here for National Dex BH - .replace(/(Zacian|Zamazenta)(?!-Crowned)/g, '$1-*'); // Hacked-in Crowned formes will be revealed + .replace(/(Greninja|Gourgeist|Pumpkaboo|Xerneas|Silvally|Urshifu|Dudunsparce)(-[a-zA-Z?-]+)?/g, '$1-*'); } this.add('poke', pokemon.side.id, details, ''); } @@ -627,25 +690,88 @@ export const Rulesets: {[k: string]: FormatData} = { } }, }, + timerstarting: { + effectType: 'Rule', + name: 'Timer Starting', + desc: "Amount of time given at the start of the battle in seconds", + hasValue: 'positive-integer', + // hardcoded in server/room-battle.ts + }, + dctimer: { + effectType: 'Rule', + name: 'DC Timer', + desc: "Enables or disables the disconnection timer", + // hardcoded in server/room-battle.ts + }, + dctimerbank: { + effectType: 'Rule', + name: 'DC Timer Bank', + desc: "Enables or disables the disconnection timer bank", + // hardcoded in server/room-battle.ts + }, + timergrace: { + effectType: 'Rule', + name: 'Timer Grace', + desc: "Grace period between timer activation and when total time starts ticking down.", + hasValue: 'positive-integer', + // hardcoded in server/room-battle.ts + }, + timeraddperturn: { + effectType: 'Rule', + name: 'Timer Add Per Turn', + desc: "Amount of additional time given per turn in seconds", + hasValue: 'integer', + // hardcoded in server/room-battle.ts + }, + timermaxperturn: { + effectType: 'Rule', + name: 'Timer Max Per Turn', + desc: "Maximum amount of time allowed per turn in seconds", + hasValue: 'positive-integer', + // hardcoded in server/room-battle.ts + }, + timermaxfirstturn: { + effectType: 'Rule', + name: 'Timer Max First Turn', + desc: "Maximum amount of time allowed for the first turn in seconds", + hasValue: 'positive-integer', + // hardcoded in server/room-battle.ts + }, + timeoutautochoose: { + effectType: 'Rule', + name: 'Timeout Auto Choose', + desc: "Enables or disables automatic selection of moves when a player times out", + // hardcoded in server/room-battle.ts + }, + timeraccelerate: { + effectType: 'Rule', + name: 'Timer Accelerate', + desc: "Enables or disables timer acceleration", + // hardcoded in server/room-battle.ts + }, blitz: { effectType: 'Rule', name: 'Blitz', // THIS 100% INTENTIONALLY SAYS TEN SECONDS PER TURN - // IGNORE maxPerTurn. addPerTurn IS 5, TRANSLATING TO AN INCREMENT OF 10. + // IGNORE Max Per Turn. Add Per Turn IS 5, TRANSLATING TO AN INCREMENT OF 10. desc: "Super-fast 'Blitz' timer giving 30 second Team Preview and 10 seconds per turn.", onBegin() { this.add('rule', 'Blitz: Super-fast timer'); }, - timer: {starting: 15, addPerTurn: 5, maxPerTurn: 15, maxFirstTurn: 40, grace: 30}, + ruleset: [ + 'Timer Starting = 15', 'Timer Grace = 30', + 'Timer Add Per Turn = 5', 'Timer Max Per Turn = 15', 'Timer Max First Turn = 40', + ], }, vgctimer: { effectType: 'Rule', name: 'VGC Timer', desc: "VGC's timer: 90 second Team Preview, 7 minutes Your Time, 1 minute per turn", - timer: { - starting: 7 * 60, addPerTurn: 0, maxPerTurn: 55, maxFirstTurn: 90, - grace: 90, timeoutAutoChoose: true, dcTimerBank: false, - }, + ruleset: [ + 'Timer Starting = 420', 'Timer Grace = 90', + 'Timer Add Per Turn = 0', 'Timer Max Per Turn = 55', 'Timer Max First Turn = 90', + 'Timeout Auto Choose', 'DC Timer Bank', + ], }, speciesclause: { effectType: 'ValidatorRule', @@ -689,47 +815,31 @@ export const Rulesets: {[k: string]: FormatData} = { effectType: 'ValidatorRule', name: 'Item Clause', desc: "Prevents teams from having more than one Pokémon with the same item", + hasValue: 'positive-integer', onBegin() { - this.add('rule', 'Item Clause: Limit one of each item'); + this.add('rule', `Item Clause: Limit ${this.ruleTable.valueRules.get('itemclause') || 1} of each item`); }, - onValidateTeam(team) { - const itemTable = new Set(); - for (const set of team) { - const item = this.toID(set.item); - if (!item) continue; - if (itemTable.has(item)) { - return [ - `You are limited to one of each item by Item Clause.`, - `(You have more than one ${this.dex.items.get(item).name})`, - ]; - } - itemTable.add(item); + onValidateRule(value) { + const num = Number(value); + if (num < 1 || num > this.ruleTable.maxTeamSize) { + throw new Error(`Item Clause must be between 1 and ${this.ruleTable.maxTeamSize}.`); } - }, - }, - doubleitemclause: { - effectType: 'ValidatorRule', - name: 'Double Item Clause', - desc: "Prevents teams from having more than two Pokémon with the same item", - onBegin() { - this.add('rule', 'Double Item Clause: Limit two of each item'); + return value; }, onValidateTeam(team) { - const itemTable: {[k: string]: number} = {}; + const itemTable = new this.dex.Multiset(); for (const set of team) { const item = this.toID(set.item); if (!item) continue; - if (item in itemTable) { - if (itemTable[item] >= 2) { - return [ - `You are limited to two of each item by Double Item Clause.`, - `(You have more than two ${this.dex.items.get(item).name})`, - ]; - } - itemTable[item]++; - } else { - itemTable[item] = 1; - } + itemTable.add(item); + } + const itemLimit = Number(this.ruleTable.valueRules.get('itemclause') || 1); + for (const [itemid, num] of itemTable) { + if (num <= itemLimit) continue; + return [ + `You are limited to ${itemLimit} of each item by Item Clause.`, + `(You have more than ${itemLimit} ${this.dex.items.get(itemid).name})`, + ]; } }, }, @@ -748,7 +858,7 @@ export const Rulesets: {[k: string]: FormatData} = { }, onValidateTeam(team) { if (this.format.id === 'gen8multibility') return; - const abilityTable = new Map(); + const abilityTable = new this.dex.Multiset(); const base: {[k: string]: string} = { airlock: 'cloudnine', armortail: 'queenlymajesty', @@ -774,13 +884,13 @@ export const Rulesets: {[k: string]: FormatData} = { let ability = this.toID(set.ability); if (!ability) continue; if (ability in base) ability = base[ability] as ID; - if ((abilityTable.get(ability) || 0) >= num) { + if (abilityTable.get(ability) >= num) { return [ `You are limited to ${num} of each ability by Ability Clause.`, `(You have more than ${num} ${this.dex.abilities.get(ability).name} variant${num === 1 ? '' : 's'})`, ]; } - abilityTable.set(ability, (abilityTable.get(ability) || 0) + 1); + abilityTable.add(ability); } }, }, @@ -823,7 +933,7 @@ export const Rulesets: {[k: string]: FormatData} = { evasionitemsclause: { effectType: 'ValidatorRule', name: 'Evasion Items Clause', - desc: "Bans moves that lower the accuracy of moves used against the user", + desc: "Bans items that lower the accuracy of moves used against the user", banlist: ['Bright Powder', 'Lax Incense'], onBegin() { this.add('rule', 'Evasion Items Clause: Evasion items are banned'); @@ -862,7 +972,7 @@ export const Rulesets: {[k: string]: FormatData} = { if (set.moves) { for (const id of set.moves) { const move = this.dex.moves.get(id); - if (move.status && move.status === 'slp') problems.push(move.name + ' is banned by Sleep Moves Clause.'); + if (move.status === 'slp') problems.push(move.name + ' is banned by Sleep Moves Clause.'); } } return problems; @@ -889,7 +999,7 @@ export const Rulesets: {[k: string]: FormatData} = { // but false if the move's accuracy is 100% (yet can be lowered). const hasMissChanceOrNeverMisses = move.accuracy === true || move.accuracy < 100; - if (move.status && move.status === 'slp' && hasMissChanceOrNeverMisses) { + if (move.status === 'slp' && hasMissChanceOrNeverMisses) { hasSleepMove = true; } } @@ -929,6 +1039,13 @@ export const Rulesets: {[k: string]: FormatData} = { this.add('rule', 'Swagger Clause: Swagger is banned'); }, }, + drypassclause: { + effectType: 'ValidatorRule', + name: 'DryPass Clause', + desc: "Stops teams from bringing Pokémon with Baton Pass + any form of trapping, residual recovery, boosting, or Substitute.", + ruleset: ['Baton Pass Stat Clause', 'Baton Pass Stat Trap Clause'], + banlist: ['Baton Pass + Substitute', 'Baton Pass + Ingrain', 'Baton Pass + Aqua Ring', 'Baton Pass + Block', 'Baton Pass + Mean Look', 'Baton Pass + Spider Web', 'Baton Pass + Jaw Lock'], + }, batonpassclause: { effectType: 'ValidatorRule', name: 'Baton Pass Clause', @@ -1058,22 +1175,25 @@ export const Rulesets: {[k: string]: FormatData} = { const boostingEffects = [ 'absorbbulb', 'acidarmor', 'acupressure', 'agility', 'amnesia', 'ancientpower', 'angerpoint', 'apicotberry', 'autotomize', 'barrier', 'bellydrum', 'bulkup', 'calmmind', 'cellbattery', 'chargebeam', 'coil', 'cosmicpower', 'cottonguard', 'curse', - 'defendorder', 'defiant', 'download', 'dragondance', 'fierydance', 'flamecharge', 'ganlonberry', 'growth', 'harden', - 'honeclaws', 'howl', 'irondefense', 'justified', 'liechiberry', 'lightningrod', 'meditate', 'metalclaw', 'meteormash', - 'motordrive', 'moxie', 'nastyplot', 'ominouswind', 'petayaberry', 'quiverdance', 'rage', 'rattled', 'rockpolish', - 'salacberry', 'sapsipper', 'sharpen', 'shellsmash', 'shiftgear', 'silverwind', 'skullbash', 'speedboost', 'starfberry', - 'steadfast', 'steelwing', 'stockpile', 'stormdrain', 'swordsdance', 'tailglow', 'weakarmor', 'withdraw', 'workup', + 'defendorder', 'defiant', 'download', 'dragondance', 'fierydance', 'flamecharge', 'focusenergy', 'ganlonberry', 'growth', + 'harden', 'honeclaws', 'howl', 'irondefense', 'justified', 'liechiberry', 'lightningrod', 'meditate', 'metalclaw', + 'meteormash', 'motordrive', 'moxie', 'nastyplot', 'ominouswind', 'petayaberry', 'quiverdance', 'rage', 'rattled', + 'rockpolish', 'salacberry', 'sapsipper', 'sharpen', 'shellsmash', 'shiftgear', 'silverwind', 'skullbash', 'speedboost', + 'starfberry', 'steadfast', 'steelwing', 'stockpile', 'stormdrain', 'swordsdance', 'tailglow', 'weakarmor', 'withdraw', + 'workup', ]; for (const set of team) { - if (!set.moves.map(this.toID).includes('batonpass' as ID)) continue; + const moves = set.moves.map(this.toID); + if (!moves.includes('batonpass' as ID)) continue; let passableBoosts = false; const item = this.toID(set.item); const ability = this.toID(set.ability); - for (const move of set.moves) { - if (boostingEffects.includes(this.toID(move))) passableBoosts = true; + if ( + moves.some(m => boostingEffects.includes(m)) || boostingEffects.includes(item) || + boostingEffects.includes(ability) + ) { + passableBoosts = true; } - if (boostingEffects.includes(item)) passableBoosts = true; - if (boostingEffects.includes(ability)) passableBoosts = true; if (passableBoosts) { return [ `${set.name || set.species} has Baton Pass and a way to boost its stats, which is banned by Baton Pass Stat Clause.`, @@ -1095,7 +1215,8 @@ export const Rulesets: {[k: string]: FormatData} = { 'Charge Beam', 'Cosmic Power', 'Curse', 'Defend Order', 'Defense Curl', 'Dragon Dance', 'Growth', 'Guard Swap', 'Harden', 'Heart Swap', 'Howl', 'Iron Defense', 'Ingrain', 'Mean Look', 'Meteor Mash', 'Meditate', 'Metal Claw', 'Nasty Plot', 'Ominous Wind', 'Power Trick', 'Psych Up', 'Rage', 'Rock Polish', 'Sharpen', 'Silver Wind', 'Skull Bash', 'Spider Web', 'Steel Wing', 'Stockpile', 'Swords Dance', 'Tail Glow', 'Withdraw', 'Speed Boost', - 'Apicot Berry', 'Ganlon Berry', 'Liechi Berry', 'Petaya Berry', 'Salac Berry', 'Starf Berry', + 'Apicot Berry', 'Ganlon Berry', 'Liechi Berry', 'Petaya Berry', 'Salac Berry', 'Starf Berry', 'Kee Berry', 'Maranga Berry', 'Weakness Policy', + 'Blunder Policy', 'Luminiscent Moss', 'Snowball', 'Throat Spray', 'Mirror Herb', 'Adrenaline Orb', ].map(this.toID); for (const set of team) { if (!set.moves.map(this.toID).includes('batonpass' as ID)) continue; @@ -1221,7 +1342,7 @@ export const Rulesets: {[k: string]: FormatData} = { if (status.id === 'slp') { for (const pokemon of target.side.pokemon) { if (pokemon.hp && pokemon.status === 'slp') { - this.add('-message', "Sleep Clause activated. (In Nintendo formats, Sleep Clause activates if any of the opponent's Pokemon are asleep, even if self-inflicted from Rest)"); + this.add('-message', "Sleep Clause activated. (In official formats, Sleep Clause activates if any of the opponent's Pokemon are asleep, even if self-inflicted from Rest)"); return false; } } @@ -1405,7 +1526,8 @@ export const Rulesets: {[k: string]: FormatData} = { // The effectiveness of Freeze Dry on Water isn't reverted if (move && move.id === 'freezedry' && type === 'Water') return; if (move && !this.dex.getImmunity(move, type)) return 1; - return -typeMod; + // Ignore normal effectiveness, prevents bug with Tera Shell + if (typeMod) return -typeMod; }, }, @@ -1445,7 +1567,8 @@ export const Rulesets: {[k: string]: FormatData} = { const speciesTypes: string[] = []; const moveTypes: string[] = []; // BDSP can't import Pokemon from Home, so it shouldn't grant moves from archaic species types - const minObtainableSpeciesGen = this.dex.currentMod === 'gen8bdsp' || this.dex.gen === 9 ? + const minObtainableSpeciesGen = this.dex.currentMod === 'gen8bdsp' || + (this.dex.gen === 9 && !this.ruleTable.has('standardnatdex')) ? this.dex.gen : species.gen; for (let i = this.dex.gen; i >= minObtainableSpeciesGen && i >= move.gen; i--) { const dex = this.dex.forGen(i); @@ -1522,7 +1645,7 @@ export const Rulesets: {[k: string]: FormatData} = { return null; }, onValidateTeam(team) { - const sketches = new Utils.Multiset(); + const sketches = new this.dex.Multiset(); for (const set of team) { if ((set as any).sketchMove) { sketches.add((set as any).sketchMove); @@ -1799,7 +1922,8 @@ export const Rulesets: {[k: string]: FormatData} = { } const problems = []; for (const move of set.moves) { - if (moveSources[this.toID(move)]?.every(learned => learned.includes('S'))) { + const sources = moveSources[this.toID(move)]; + if (sources?.length && sources.every(learned => learned.includes('S'))) { problems.push(`${species.name}'s move ${move} is obtainable only through events.`); } } @@ -1947,9 +2071,9 @@ export const Rulesets: {[k: string]: FormatData} = { desc: "Bans items that are not usable in Pokemon Stadium 2.", banlist: ['Fast Ball', 'Friend Ball', 'Great Ball', 'Heavy Ball', 'Level Ball', 'Love Ball', 'Lure Ball', 'Master Ball', 'Moon Ball', 'Park Ball', 'Poke Ball', 'Safari Ball', 'Ultra Ball', 'Fire Stone', 'Leaf Stone', 'Moon Stone', 'Sun Stone', 'Thunder Stone', 'Upgrade', 'Water Stone', 'Mail'], }, - nintendocup2000movelegality: { + nc2000movelegality: { effectType: 'ValidatorRule', - name: "Nintendo Cup 2000 Move Legality", + name: "NC 2000 Move Legality", desc: "Prevents Pok\u00e9mon from having moves that would only be obtainable in Pok\u00e9mon Crystal.", // Implemented in mods/gen2/rulesets.ts }, @@ -1959,10 +2083,10 @@ export const Rulesets: {[k: string]: FormatData} = { desc: "Bans the combination of Agility and partial trapping moves like Wrap.", banlist: ['Agility + Wrap', 'Agility + Fire Spin', 'Agility + Bind', 'Agility + Clamp'], }, - nintendocup1997movelegality: { + nc1997movelegality: { effectType: 'ValidatorRule', - name: "Nintendo Cup 1997 Move Legality", - desc: "Bans move combinations on Pok\u00e9mon that weren't legal in Nintendo Cup 1997.", + name: "NC 1997 Move Legality", + desc: "Bans move combinations on Pok\u00e9mon that weren't legal in NC 1997.", // Implemented in mods/gen1jpn/rulesets.ts }, noswitching: { @@ -1986,8 +2110,7 @@ export const Rulesets: {[k: string]: FormatData} = { } const ruleTable = this.ruleTable; const maxTeamSize = ruleTable.pickedTeamSize || ruleTable.maxTeamSize; - const numPlayers = (this.format.gameType === 'freeforall' || this.format.gameType === 'multi') ? 4 : 2; - const potentialMaxTeamSize = maxTeamSize * numPlayers; + const potentialMaxTeamSize = maxTeamSize * this.format.playerCount; if (potentialMaxTeamSize > 24) { throw new Error(`Crazyhouse Rule cannot be added because a team can potentially have ${potentialMaxTeamSize} Pokemon on one team, which is more than the server limit of 24.`); } @@ -2002,53 +2125,37 @@ export const Rulesets: {[k: string]: FormatData} = { } }, onFaint(target, source, effect) { - if (!target.m.numSwaps) { - target.m.numSwaps = 0; - } + target.m.numSwaps ||= 0; target.m.numSwaps++; - if (effect && effect.effectType === 'Move' && source.side.pokemon.length < 24 && - source.side !== target.side && target.m.numSwaps < 4) { - const hpCost = this.clampIntRange(Math.floor((target.baseMaxhp * target.m.numSwaps) / 4), 1); - // Just in case(tm) and for Shedinja - if (hpCost === target.baseMaxhp) { - target.m.outofplay = true; - return; - } - source.side.pokemonLeft++; - source.side.pokemon.length++; - - // A new Pokemon is created and stuff gets aside akin to a deep clone. - // This is because deepClone crashes when side is called recursively. - // Until a refactor is made to prevent it, this is the best option to prevent crashes. - const newPoke = new Pokemon(target.set, source.side); - const newPos = source.side.pokemon.length - 1; + if (effect?.effectType !== 'Move' || source.side.pokemon.length >= 24 || + source.side === target.side || target.m.numSwaps >= 4) { + target.m.outofplay = true; + return; + } - const doNotCarryOver = [ - 'fullname', 'side', 'fainted', 'status', 'hp', 'illusion', - 'transformed', 'position', 'isActive', 'faintQueued', - 'subFainted', 'getHealth', 'getDetails', 'moveSlots', 'ability', - ]; - for (const [key, value] of Object.entries(target)) { - if (doNotCarryOver.includes(key)) continue; - // @ts-ignore - newPoke[key] = value; - } - newPoke.maxhp = newPoke.baseMaxhp; // for dynamax - newPoke.hp = newPoke.baseMaxhp - hpCost; - newPoke.clearVolatile(); - newPoke.position = newPos; - source.side.pokemon[newPos] = newPoke; - this.add('poke', source.side.pokemon[newPos].side.id, source.side.pokemon[newPos].details, ''); - this.add('-message', `${target.name} was captured by ${newPoke.side.name}!`); - } else { + const hpCost = this.clampIntRange(Math.floor((target.baseMaxhp * target.m.numSwaps) / 4), 1); + // Just in case(tm) and for Shedinja + if (hpCost >= target.baseMaxhp) { target.m.outofplay = true; + return; } + + const newPoke = source.side.addPokemon({...target.set, item: target.item})!; + + // copy PP over + (newPoke as any).baseMoveSlots = target.baseMoveSlots; + + newPoke.hp = this.clampIntRange(newPoke.maxhp - hpCost, 1); + newPoke.clearVolatile(); + + this.add('poke', newPoke.side.id, newPoke.details, ''); + this.add('-message', `${target.name} was captured by ${newPoke.side.name}!`); }, }, chimera1v1rule: { effectType: 'Rule', name: 'Chimera 1v1 Rule', - desc: "Validation and battle effects for Chimera 1v1.", + desc: "Merges a team of six into a single Pok\u00e9mon depending on the order chosen at team preview: It gains the typing of the first, item of the second, ability of the third, stats of the fourth, the first two moves of the fifth, and the last two moves of the sixth.", ruleset: ['Team Preview', 'Picked Team Size = 6'], onValidateSet(set) { if (!set.item) return; @@ -2211,7 +2318,9 @@ export const Rulesets: {[k: string]: FormatData} = { }, onModifySpecies(species, target) { const newSpecies = this.dex.deepClone(species); - const baseSpecies = this.dex.species.get(species.baseSpecies); + const baseSpecies = this.dex.species.get( + (Array.isArray(species.battleOnly) ? species.battleOnly[0] : species.battleOnly) || species.changesFrom || species.name + ); if (!newSpecies.prevo) { if (!baseSpecies.prevo) return; const prevoSpecies = this.dex.species.get(baseSpecies.prevo); @@ -2627,7 +2736,7 @@ export const Rulesets: {[k: string]: FormatData} = { } }, onValidateTeam(team, format) { - const donors = new Utils.Multiset(); + const donors = new this.dex.Multiset(); for (const set of team) { const species = this.dex.species.get(set.species); const fusion = this.dex.species.get(set.name); @@ -2675,14 +2784,16 @@ export const Rulesets: {[k: string]: FormatData} = { proteanpalacemod: { effectType: 'Rule', name: "Protean Palace Mod", - desc: `Each Pokémon innately has Protean.`, + desc: `Pokémon become the type of the move they use.`, onBegin() { - this.add('rule', 'Protean Palace Mod: Every Pok\u00e9mon innately has Protean.'); + this.add('rule', 'Protean Palace Mod: Pok\u00e9mon become the type of the move they use.'); }, - onSwitchIn(pokemon) { - if (!pokemon.hasAbility(['libero', 'protean'])) { - const effect = 'ability:protean'; - pokemon.addVolatile(effect); + onPrepareHit(source, target, move) { + if (move.hasBounced || move.flags['futuremove'] || move.sourceEffect === 'snatch') 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'); } }, }, @@ -2711,9 +2822,119 @@ export const Rulesets: {[k: string]: FormatData} = { }, // Implemented in Pokemon#getDetails }, - uselessmovesclause: { + allowedpokemoves: { effectType: 'ValidatorRule', - name: 'Useless Moves Clause', - // implemented in /mods/moderngen1/rulesets.ts + name: "Allowed Pokemoves", + desc: "Allows players to define the amount of Pokemoves allowed per set.", + hasValue: 'positive-integer', + onValidateRule(value) { + const num = Number(value); + if (num > this.ruleTable.maxMoveCount || num < 1) { + throw new Error(`Allowed Pokemoves must be between 1 and ${this.ruleTable.maxMoveCount}.`); + } + return value; + }, + // Validation in the Pokemoves format + }, + uniquepokemoves: { + effectType: 'ValidatorRule', + name: "Unique Pokemoves", + desc: "Allows players to define how many times a Pokemon can be used as a Pokemove per team.", + hasValue: 'positive-integer', + onValidateRule(value) { + const num = Number(value); + if (num > this.ruleTable.maxMoveCount || num < 1) { + throw new Error(`Unique Pokemoves must be between 1 and ${this.ruleTable.maxMoveCount}.`); + } + return value; + }, + onValidateTeam(team, format, teamHas) { + const pokemoves = new this.dex.Multiset(); + for (const set of team) { + if (set.moves?.length) { + for (const moveid of set.moves) { + const pokemove = this.dex.species.get(moveid); + if (!pokemove.exists) continue; + pokemoves.add(pokemove.id); + } + } + } + const problems: string[] = []; + const uniquePokemoves = Number(this.ruleTable.valueRules.get('uniquepokemoveclause') || 1); + for (const [moveid, num] of pokemoves) { + if (num <= uniquePokemoves) continue; + problems.push( + `You have ${num} Pok\u00e9mon with ${this.dex.species.get(moveid).name} as a Pokemove.`, + `(Each Pok\u00e9mon can only be used as a Pokemove ${uniquePokemoves} time${uniquePokemoves === 1 ? '' : 's'} per team.)` + ); + } + return problems; + }, + }, + ferventimpersonationmod: { + effectType: 'Rule', + name: "Fervent Impersonation Mod", + 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.`, + onValidateTeam(team, format, teamHas) { + const exhaustedSpecies = new Set(); + for (const set of team) { + const species = this.dex.species.get(set.species); + const impersonation = this.dex.species.get(set.name); + if (exhaustedSpecies.has(species.baseSpecies) || + (exhaustedSpecies.has(impersonation.baseSpecies) && impersonation.baseSpecies !== species.baseSpecies)) { + return [`You have more than one Pok\u00e9mon nicknamed after ${impersonation.baseSpecies}.`]; + } + exhaustedSpecies.add(species.baseSpecies); + if (impersonation.exists && impersonation.baseSpecies !== species.baseSpecies) { + exhaustedSpecies.add(impersonation.baseSpecies); + } + } + }, + onValidateSet(set) { + const species = this.dex.species.get(set.species); + const impersonation = this.dex.species.get(set.name); + if (this.ruleTable.isRestrictedSpecies(species)) { + return [ + `${species.name} can't be used as a base species.`, + `(Restricted Pok\u00e9mon can only be used as impersonations.)`, + ]; + } + const rt = this.ruleTable; + if ((this.toID(set.name) !== species.id && this.toID(set.name) !== impersonation.id) || + (impersonation.isNonstandard && !(rt.has(`+pokemontag:${this.toID(impersonation.isNonstandard)}`) || + rt.has(`+pokemon:${impersonation.id}`) || rt.has(`+basepokemon:${this.toID(impersonation.baseSpecies)}`)))) { + return [`All Pok\u00e9mon must either have no nickname or must be nicknamed after a Pok\u00e9mon.`]; + } + }, + checkCanLearn(move, species, setSources, set) { + const impersonation = this.dex.species.get(set.name); + const baseCheckCanLearn = this.checkCanLearn(move, species, setSources, set); + if (baseCheckCanLearn) return baseCheckCanLearn; + return this.checkCanLearn(move, impersonation, setSources, set); + }, + onResidualOrder: 29, + onResidual(pokemon) { + if (pokemon.transformed || !pokemon.hp) return; + const oldAbilityName = pokemon.getAbility().name; + const oldPokemon = pokemon.species; + const impersonation = this.dex.species.get(pokemon.set.name); + if (pokemon.species.baseSpecies === impersonation.baseSpecies || pokemon.hp > pokemon.maxhp / 2) return; + this.add('-activate', pokemon, 'ability: Power Construct'); + pokemon.formeChange(impersonation.name, this.effect, true); + pokemon.baseMaxhp = Math.floor(Math.floor( + 2 * pokemon.species.baseStats['hp'] + pokemon.set.ivs['hp'] + Math.floor(pokemon.set.evs['hp'] / 4) + 100 + ) * pokemon.level / 100 + 10); + const newMaxHP = pokemon.volatiles['dynamax'] ? (2 * pokemon.baseMaxhp) : pokemon.baseMaxhp; + pokemon.hp = this.clampIntRange(newMaxHP - (pokemon.maxhp - pokemon.hp), 1, newMaxHP); + pokemon.maxhp = newMaxHP; + this.add('-heal', pokemon, pokemon.getHealth, '[silent]'); + const oldAbilityKey: string = Object.keys(oldPokemon.abilities).find(x => ( + (oldPokemon.abilities as any)[x] === oldAbilityName + )) || "0"; + const newAbility: string = (impersonation.abilities as any)[oldAbilityKey] || impersonation.abilities["0"]; + pokemon.setAbility(newAbility, null, true); + // Ability persists through switching + pokemon.baseAbility = pokemon.ability; + }, }, }; diff --git a/data/tags.ts b/data/tags.ts index 9e9f7dbd60b8..0913068277b7 100644 --- a/data/tags.ts +++ b/data/tags.ts @@ -9,7 +9,7 @@ interface TagData { genericNumCol?: (thing: Species | Move | Item | Ability) => number; } -export const Tags: {[id: string]: TagData} = { +export const Tags: {[id: IDEntry]: TagData} = { // Categories // ---------- physical: { @@ -46,6 +46,10 @@ export const Tags: {[id: string]: TagData} = { name: "Restricted Legendary", speciesFilter: species => species.tags.includes("Restricted Legendary"), }, + ultrabeast: { + name: "Ultra Beast", + speciesFilter: species => species.tags.includes("Ultra Beast"), + }, paradox: { name: "Paradox", speciesFilter: species => species.tags.includes("Paradox"), @@ -254,6 +258,14 @@ export const Tags: {[id: string]: TagData} = { name: "ND RU", speciesFilter: species => species.natDexTier === 'RU', }, + ndnfe: { + name: "ND NFE", + speciesFilter: species => species.natDexTier === 'NFE', + }, + ndlc: { + name: "ND LC", + speciesFilter: species => species.natDexTier === 'LC', + }, // Legality tags past: { diff --git a/data/text/abilities.ts b/data/text/abilities.ts index 7d5c23adfba8..e83c7eff6b96 100644 --- a/data/text/abilities.ts +++ b/data/text/abilities.ts @@ -1,4 +1,4 @@ -export const AbilitiesText: {[k: string]: AbilityText} = { +export const AbilitiesText: {[id: IDEntry]: AbilityText} = { noability: { name: "No Ability", shortDesc: "Does nothing.", @@ -727,6 +727,7 @@ export const AbilitiesText: {[k: string]: AbilityText} = { desc: "Prevents other Pokemon from lowering this Pokemon's accuracy stat stage. This Pokemon ignores a target's evasiveness stat stage.", shortDesc: "This Pokemon's accuracy can't be lowered by others; ignores their evasiveness stat.", gen8: { + desc: "No competitive use.", shortDesc: "No competitive use.", }, }, @@ -898,8 +899,11 @@ export const AbilitiesText: {[k: string]: AbilityText} = { }, lingeringaroma: { name: "Lingering Aroma", - desc: "Pokemon making contact with this Pokemon have their Ability changed to Lingering Aroma. Does not affect Pokemon with the As One, Battle Bond, Comatose, Commander, Disguise, Gulp Missile, Hadron Engine, Ice Face, Lingering Aroma, Multitype, Orichalcum Pulse, Power Construct, Protosynthesis, Quark Drive, RKS System, Schooling, Shields Down, Stance Change, Zen Mode, or Zero to Hero Abilities.", + desc: "Pokemon making contact with this Pokemon have their Ability changed to Lingering Aroma. Does not affect Pokemon with the As One, Battle Bond, Comatose, Disguise, Gulp Missile, Ice Face, Lingering Aroma, Multitype, Power Construct, RKS System, Schooling, Shields Down, Stance Change, Tera Shift, Zen Mode, or Zero to Hero Abilities.", shortDesc: "Making contact with this Pokemon has the attacker's Ability become Lingering Aroma.", + gen8: { + desc: "Pokemon making contact with this Pokemon have their Ability changed to Lingering Aroma. Does not affect Pokemon with the As One, Battle Bond, Comatose, Disguise, Gulp Missile, Ice Face, Lingering Aroma, Multitype, Power Construct, RKS System, Schooling, Shields Down, Stance Change, or Zen Mode Abilities.", + }, changeAbility: " A lingering aroma clings to [TARGET]!", }, @@ -1019,8 +1023,11 @@ export const AbilitiesText: {[k: string]: AbilityText} = { }, moldbreaker: { name: "Mold Breaker", - desc: "This Pokemon's moves and their effects ignore certain Abilities of other Pokemon. The Abilities that can be negated are Aroma Veil, Aura Break, Battle Armor, Big Pecks, Bulletproof, Clear Body, Contrary, Damp, Dazzling, Disguise, Dry Skin, Filter, Flash Fire, Flower Gift, Flower Veil, Fluffy, Friend Guard, Fur Coat, Grass Pelt, Heatproof, Heavy Metal, Hyper Cutter, Ice Face, Ice Scales, Immunity, Inner Focus, Insomnia, Keen Eye, Leaf Guard, Levitate, Light Metal, Lightning Rod, Limber, Magic Bounce, Magma Armor, Marvel Scale, Mirror Armor, Motor Drive, Multiscale, Oblivious, Overcoat, Own Tempo, Pastel Veil, Punk Rock, Queenly Majesty, Sand Veil, Sap Sipper, Shell Armor, Shield Dust, Simple, Snow Cloak, Solid Rock, Soundproof, Sticky Hold, Storm Drain, Sturdy, Suction Cups, Sweet Veil, Tangled Feet, Telepathy, Thick Fat, Unaware, Vital Spirit, Volt Absorb, Water Absorb, Water Bubble, Water Veil, White Smoke, Wonder Guard, and Wonder Skin. This affects every other Pokemon on the field, whether or not it is a target of this Pokemon's move, and whether or not their Ability is beneficial to this Pokemon.", + desc: "This Pokemon's moves and their effects ignore certain Abilities of other Pokemon. The Abilities that can be negated are Armor Tail, Aroma Veil, Aura Break, Battle Armor, Big Pecks, Bulletproof, Clear Body, Contrary, Damp, Dazzling, Disguise, Dry Skin, Earth Eater, Filter, Flash Fire, Flower Gift, Flower Veil, Fluffy, Friend Guard, Fur Coat, Good as Gold, Grass Pelt, Guard Dog, Heatproof, Heavy Metal, Hyper Cutter, Ice Face, Ice Scales, Illuminate, Immunity, Inner Focus, Insomnia, Keen Eye, Leaf Guard, Levitate, Light Metal, Lightning Rod, Limber, Magic Bounce, Magma Armor, Marvel Scale, Mind's Eye, Mirror Armor, Motor Drive, Multiscale, Oblivious, Overcoat, Own Tempo, Pastel Veil, Punk Rock, Purifying Salt, Queenly Majesty, Sand Veil, Sap Sipper, Shell Armor, Shield Dust, Simple, Snow Cloak, Solid Rock, Soundproof, Sticky Hold, Storm Drain, Sturdy, Suction Cups, Sweet Veil, Tangled Feet, Telepathy, Tera Shell, Thermal Exchange, Thick Fat, Unaware, Vital Spirit, Volt Absorb, Water Absorb, Water Bubble, Water Veil, Well-Baked Body, White Smoke, Wind Rider, Wonder Guard, and Wonder Skin. This affects every other Pokemon on the field, whether or not it is a target of this Pokemon's move, and whether or not their Ability is beneficial to this Pokemon.", shortDesc: "This Pokemon's moves and their effects ignore the Abilities of other Pokemon.", + gen8: { + desc: "This Pokemon's moves and their effects ignore certain Abilities of other Pokemon. The Abilities that can be negated are Aroma Veil, Aura Break, Battle Armor, Big Pecks, Bulletproof, Clear Body, Contrary, Damp, Dazzling, Disguise, Dry Skin, Filter, Flash Fire, Flower Gift, Flower Veil, Fluffy, Friend Guard, Fur Coat, Grass Pelt, Heatproof, Heavy Metal, Hyper Cutter, Ice Face, Ice Scales, Immunity, Inner Focus, Insomnia, Keen Eye, Leaf Guard, Levitate, Light Metal, Lightning Rod, Limber, Magic Bounce, Magma Armor, Marvel Scale, Mirror Armor, Motor Drive, Multiscale, Oblivious, Overcoat, Own Tempo, Pastel Veil, Punk Rock, Queenly Majesty, Sand Veil, Sap Sipper, Shell Armor, Shield Dust, Simple, Snow Cloak, Solid Rock, Soundproof, Sticky Hold, Storm Drain, Sturdy, Suction Cups, Sweet Veil, Tangled Feet, Telepathy, Thick Fat, Unaware, Vital Spirit, Volt Absorb, Water Absorb, Water Bubble, Water Veil, White Smoke, Wonder Guard, and Wonder Skin. This affects every other Pokemon on the field, whether or not it is a target of this Pokemon's move, and whether or not their Ability is beneficial to this Pokemon.", + }, gen7: { desc: "This Pokemon's moves and their effects ignore certain Abilities of other Pokemon. The Abilities that can be negated are Aroma Veil, Aura Break, Battle Armor, Big Pecks, Bulletproof, Clear Body, Contrary, Damp, Dark Aura, Dazzling, Disguise, Dry Skin, Fairy Aura, Filter, Flash Fire, Flower Gift, Flower Veil, Fluffy, Friend Guard, Fur Coat, Grass Pelt, Heatproof, Heavy Metal, Hyper Cutter, Immunity, Inner Focus, Insomnia, Keen Eye, Leaf Guard, Levitate, Light Metal, Lightning Rod, Limber, Magic Bounce, Magma Armor, Marvel Scale, Motor Drive, Multiscale, Oblivious, Overcoat, Own Tempo, Queenly Majesty, Sand Veil, Sap Sipper, Shell Armor, Shield Dust, Simple, Snow Cloak, Solid Rock, Soundproof, Sticky Hold, Storm Drain, Sturdy, Suction Cups, Sweet Veil, Tangled Feet, Telepathy, Thick Fat, Unaware, Vital Spirit, Volt Absorb, Water Absorb, Water Bubble, Water Veil, White Smoke, Wonder Guard, and Wonder Skin. This affects every other Pokemon on the field, whether or not it is a target of this Pokemon's move, and whether or not their Ability is beneficial to this Pokemon.", }, @@ -1074,7 +1081,7 @@ export const AbilitiesText: {[k: string]: AbilityText} = { }, mummy: { name: "Mummy", - desc: "Pokemon making contact with this Pokemon have their Ability changed to Mummy. Does not affect Pokemon with the As One, Battle Bond, Comatose, Commander, Disguise, Gulp Missile, Hadron Engine, Ice Face, Multitype, Mummy, Orichalcum Pulse, Power Construct, Protosynthesis, Quark Drive, RKS System, Schooling, Shields Down, Stance Change, Zen Mode, or Zero to Hero Abilities.", + desc: "Pokemon making contact with this Pokemon have their Ability changed to Mummy. Does not affect Pokemon with the As One, Battle Bond, Comatose, Disguise, Gulp Missile, Ice Face, Multitype, Mummy, Power Construct, RKS System, Schooling, Shields Down, Stance Change, Tera Shift, Zen Mode, or Zero to Hero Abilities.", shortDesc: "Pokemon making contact with this Pokemon have their Ability changed to Mummy.", gen8: { desc: "Pokemon making contact with this Pokemon have their Ability changed to Mummy. Does not affect Pokemon with the As One, Battle Bond, Comatose, Disguise, Gulp Missile, Ice Face, Multitype, Mummy, Power Construct, RKS System, Schooling, Shields Down, Stance Change, or Zen Mode Abilities.", @@ -1109,8 +1116,11 @@ export const AbilitiesText: {[k: string]: AbilityText} = { }, neutralizinggas: { name: "Neutralizing Gas", - desc: "While this Pokemon is active, Abilities have no effect. This Ability activates before hazards and other Abilities take effect. Does not affect the As One, Battle Bond, Comatose, Disguise, Gulp Missile, Ice Face, Multitype, Power Construct, Protosynthesis, Quark Drive, RKS System, Schooling, Shields Down, Stance Change, Zen Mode or Zero to Hero Abilities.", + desc: "While this Pokemon is active, Abilities have no effect. This Ability activates before hazards and other Abilities take effect. Does not affect the As One, Battle Bond, Comatose, Disguise, Gulp Missile, Ice Face, Multitype, Neutralizing Gas, Power Construct, RKS System, Schooling, Shields Down, Stance Change, Tera Shift, Zen Mode, or Zero to Hero Abilities.", shortDesc: "While this Pokemon is active, Abilities have no effect.", + gen8: { + desc: "While this Pokemon is active, Abilities have no effect. This Ability activates before hazards and other Abilities take effect. Does not affect the As One, Battle Bond, Comatose, Disguise, Gulp Missile, Ice Face, Multitype, Neutralizing Gas, Power Construct, RKS System, Schooling, Shields Down, Stance Change, or Zen Mode Abilities.", + }, start: " Neutralizing gas filled the area!", end: " The effects of the neutralizing gas wore off!", @@ -1220,7 +1230,11 @@ export const AbilitiesText: {[k: string]: AbilityText} = { }, pickup: { name: "Pickup", + desc: "At the end of each turn, if this Pokemon is not holding an item and at least one adjacent Pokemon used an item during this turn, one of those Pokemon is selected at random and this Pokemon obtains that Pokemon's last used item. An item is not considered the last used if it was a popped Air Balloon, if the item was picked up by another Pokemon with this Ability, or if the item was lost to Bug Bite, Corrosive Gas, Covet, Incinerate, Knock Off, Pluck, or Thief. Items thrown with Fling can be picked up.", shortDesc: "If this Pokemon has no item, it finds one used by an adjacent Pokemon this turn.", + gen7: { + desc: "At the end of each turn, if this Pokemon is not holding an item and at least one adjacent Pokemon used an item during this turn, one of those Pokemon is selected at random and this Pokemon obtains that Pokemon's last used item. An item is not considered the last used if it was a popped Air Balloon, if the item was picked up by another Pokemon with this Ability, or if the item was lost to Bug Bite, Covet, Incinerate, Knock Off, Pluck, or Thief. Items thrown with Fling can be picked up.", + }, gen4: { desc: "No competitive use.", shortDesc: "No competitive use.", @@ -1268,7 +1282,8 @@ export const AbilitiesText: {[k: string]: AbilityText} = { }, poisonpuppeteer: { name: "Poison Puppeteer", - shortDesc: "If this Pokemon poisons or badly poisons a target, the target also becomes confused.", + desc: "If this Pokemon is a Pecharunt and poisons or badly poisons a target, the target also becomes confused.", + shortDesc: "Pecharunt: If this Pokemon poisons a target, the target also becomes confused.", }, poisontouch: { name: "Poison Touch", @@ -1285,7 +1300,7 @@ export const AbilitiesText: {[k: string]: AbilityText} = { }, powerofalchemy: { name: "Power of Alchemy", - desc: "This Pokemon copies the Ability of an ally that faints. Abilities that cannot be copied are As One, Battle Bond, Comatose, Commander, Disguise, Flower Gift, Forecast, Gulp Missile, Hadron Engine, Hunger Switch, Ice Face, Illusion, Imposter, Multitype, Neutralizing Gas, Orichalcum Pulse, Power Construct, Power of Alchemy, Protosynthesis, Quark Drive, Receiver, RKS System, Schooling, Shields Down, Stance Change, Trace, Wonder Guard, Zen Mode, and Zero to Hero.", + desc: "This Pokemon copies the Ability of an ally that faints. Abilities that cannot be copied are As One, Battle Bond, Comatose, Commander, Disguise, Embody Aspect, Flower Gift, Forecast, Hunger Switch, Ice Face, Illusion, Imposter, Multitype, Neutralizing Gas, Poison Puppeteer, Power Construct, Power of Alchemy, Protosynthesis, Quark Drive, Receiver, RKS System, Schooling, Shields Down, Stance Change, Tera Shell, Tera Shift, Teraform Zero, Trace, Wonder Guard, Zen Mode, and Zero to Hero.", shortDesc: "This Pokemon copies the Ability of an ally that faints.", gen8: { desc: "This Pokemon copies the Ability of an ally that faints. Abilities that cannot be copied are As One, Battle Bond, Comatose, Disguise, Flower Gift, Forecast, Gulp Missile, Hunger Switch, Ice Face, Illusion, Imposter, Multitype, Neutralizing Gas, Power Construct, Power of Alchemy, Receiver, RKS System, Schooling, Shields Down, Stance Change, Trace, Wonder Guard, and Zen Mode.", @@ -1427,7 +1442,7 @@ export const AbilitiesText: {[k: string]: AbilityText} = { }, receiver: { name: "Receiver", - desc: "This Pokemon copies the Ability of an ally that faints. Abilities that cannot be copied are As One, Battle Bond, Comatose, Commander, Disguise, Flower Gift, Forecast, Gulp Missile, Hadron Engine, Hunger Switch, Ice Face, Illusion, Imposter, Multitype, Neutralizing Gas, Orichalcum Pulse, Power Construct, Power of Alchemy, Protosynthesis, Quark Drive, Receiver, RKS System, Schooling, Shields Down, Stance Change, Trace, Wonder Guard, Zen Mode, and Zero to Hero.", + desc: "This Pokemon copies the Ability of an ally that faints. Abilities that cannot be copied are As One, Battle Bond, Comatose, Commander, Disguise, Embody Aspect, Flower Gift, Forecast, Hunger Switch, Ice Face, Illusion, Imposter, Multitype, Neutralizing Gas, Poison Puppeteer, Power Construct, Power of Alchemy, Protosynthesis, Quark Drive, Receiver, RKS System, Schooling, Shields Down, Stance Change, Tera Shell, Tera Shift, Teraform Zero, Trace, Wonder Guard, Zen Mode, and Zero to Hero.", shortDesc: "This Pokemon copies the Ability of an ally that faints.", gen8: { desc: "This Pokemon copies the Ability of an ally that faints. Abilities that cannot be copied are As One, Battle Bond, Comatose, Disguise, Flower Gift, Forecast, Gulp Missile, Hunger Switch, Ice Face, Illusion, Imposter, Multitype, Neutralizing Gas, Power Construct, Power of Alchemy, Receiver, RKS System, Schooling, Shields Down, Stance Change, Trace, Wonder Guard, and Zen Mode.", @@ -1943,7 +1958,7 @@ export const AbilitiesText: {[k: string]: AbilityText} = { terashell: { name: "Tera Shell", desc: "If this Pokemon is a Terapagos at full HP, the effectiveness of attacks against it is changed to 0.5 unless this Pokemon is immune to the move. Multi-hit moves retain the same effectiveness throughout the attack.", - shortDesc: "If full HP, attacks taken have effectiveness changed to 0.5 unless naturally immune.", + shortDesc: "Terapagos: If full HP, attacks taken have 0.5x effectiveness unless naturally immune.", activate: " [POKEMON] made its shell gleam! It's distorting type matchups!", }, @@ -1955,8 +1970,11 @@ export const AbilitiesText: {[k: string]: AbilityText} = { }, teravolt: { name: "Teravolt", - desc: "This Pokemon's moves and their effects ignore certain Abilities of other Pokemon. The Abilities that can be negated are Aroma Veil, Aura Break, Battle Armor, Big Pecks, Bulletproof, Clear Body, Contrary, Damp, Dazzling, Disguise, Dry Skin, Filter, Flash Fire, Flower Gift, Flower Veil, Fluffy, Friend Guard, Fur Coat, Grass Pelt, Heatproof, Heavy Metal, Hyper Cutter, Ice Face, Ice Scales, Immunity, Inner Focus, Insomnia, Keen Eye, Leaf Guard, Levitate, Light Metal, Lightning Rod, Limber, Magic Bounce, Magma Armor, Marvel Scale, Mirror Armor, Motor Drive, Multiscale, Oblivious, Overcoat, Own Tempo, Pastel Veil, Punk Rock, Queenly Majesty, Sand Veil, Sap Sipper, Shell Armor, Shield Dust, Simple, Snow Cloak, Solid Rock, Soundproof, Sticky Hold, Storm Drain, Sturdy, Suction Cups, Sweet Veil, Tangled Feet, Telepathy, Thick Fat, Unaware, Vital Spirit, Volt Absorb, Water Absorb, Water Bubble, Water Veil, White Smoke, Wonder Guard, and Wonder Skin. This affects every other Pokemon on the field, whether or not it is a target of this Pokemon's move, and whether or not their Ability is beneficial to this Pokemon.", + desc: "This Pokemon's moves and their effects ignore certain Abilities of other Pokemon. The Abilities that can be negated are Armor Tail, Aroma Veil, Aura Break, Battle Armor, Big Pecks, Bulletproof, Clear Body, Contrary, Damp, Dazzling, Disguise, Dry Skin, Earth Eater, Filter, Flash Fire, Flower Gift, Flower Veil, Fluffy, Friend Guard, Fur Coat, Good as Gold, Grass Pelt, Guard Dog, Heatproof, Heavy Metal, Hyper Cutter, Ice Face, Ice Scales, Illuminate, Immunity, Inner Focus, Insomnia, Keen Eye, Leaf Guard, Levitate, Light Metal, Lightning Rod, Limber, Magic Bounce, Magma Armor, Marvel Scale, Mind's Eye, Mirror Armor, Motor Drive, Multiscale, Oblivious, Overcoat, Own Tempo, Pastel Veil, Punk Rock, Purifying Salt, Queenly Majesty, Sand Veil, Sap Sipper, Shell Armor, Shield Dust, Simple, Snow Cloak, Solid Rock, Soundproof, Sticky Hold, Storm Drain, Sturdy, Suction Cups, Sweet Veil, Tangled Feet, Telepathy, Tera Shell, Thermal Exchange, Thick Fat, Unaware, Vital Spirit, Volt Absorb, Water Absorb, Water Bubble, Water Veil, Well-Baked Body, White Smoke, Wind Rider, Wonder Guard, and Wonder Skin. This affects every other Pokemon on the field, whether or not it is a target of this Pokemon's move, and whether or not their Ability is beneficial to this Pokemon.", shortDesc: "This Pokemon's moves and their effects ignore the Abilities of other Pokemon.", + gen8: { + desc: "This Pokemon's moves and their effects ignore certain Abilities of other Pokemon. The Abilities that can be negated are Aroma Veil, Aura Break, Battle Armor, Big Pecks, Bulletproof, Clear Body, Contrary, Damp, Dazzling, Disguise, Dry Skin, Filter, Flash Fire, Flower Gift, Flower Veil, Fluffy, Friend Guard, Fur Coat, Grass Pelt, Heatproof, Heavy Metal, Hyper Cutter, Ice Face, Ice Scales, Immunity, Inner Focus, Insomnia, Keen Eye, Leaf Guard, Levitate, Light Metal, Lightning Rod, Limber, Magic Bounce, Magma Armor, Marvel Scale, Mirror Armor, Motor Drive, Multiscale, Oblivious, Overcoat, Own Tempo, Pastel Veil, Punk Rock, Queenly Majesty, Sand Veil, Sap Sipper, Shell Armor, Shield Dust, Simple, Snow Cloak, Solid Rock, Soundproof, Sticky Hold, Storm Drain, Sturdy, Suction Cups, Sweet Veil, Tangled Feet, Telepathy, Thick Fat, Unaware, Vital Spirit, Volt Absorb, Water Absorb, Water Bubble, Water Veil, White Smoke, Wonder Guard, and Wonder Skin. This affects every other Pokemon on the field, whether or not it is a target of this Pokemon's move, and whether or not their Ability is beneficial to this Pokemon.", + }, gen7: { desc: "This Pokemon's moves and their effects ignore certain Abilities of other Pokemon. The Abilities that can be negated are Aroma Veil, Aura Break, Battle Armor, Big Pecks, Bulletproof, Clear Body, Contrary, Damp, Dark Aura, Dazzling, Disguise, Dry Skin, Fairy Aura, Filter, Flash Fire, Flower Gift, Flower Veil, Fluffy, Friend Guard, Fur Coat, Grass Pelt, Heatproof, Heavy Metal, Hyper Cutter, Immunity, Inner Focus, Insomnia, Keen Eye, Leaf Guard, Levitate, Light Metal, Lightning Rod, Limber, Magic Bounce, Magma Armor, Marvel Scale, Motor Drive, Multiscale, Oblivious, Overcoat, Own Tempo, Queenly Majesty, Sand Veil, Sap Sipper, Shell Armor, Shield Dust, Simple, Snow Cloak, Solid Rock, Soundproof, Sticky Hold, Storm Drain, Sturdy, Suction Cups, Sweet Veil, Tangled Feet, Telepathy, Thick Fat, Unaware, Vital Spirit, Volt Absorb, Water Absorb, Water Bubble, Water Veil, White Smoke, Wonder Guard, and Wonder Skin. This affects every other Pokemon on the field, whether or not it is a target of this Pokemon's move, and whether or not their Ability is beneficial to this Pokemon.", }, @@ -1966,6 +1984,9 @@ export const AbilitiesText: {[k: string]: AbilityText} = { gen5: { desc: "This Pokemon's moves and their effects ignore certain Abilities of other Pokemon. The Abilities that can be negated are Battle Armor, Big Pecks, Clear Body, Contrary, Damp, Dry Skin, Filter, Flash Fire, Flower Gift, Friend Guard, Heatproof, Heavy Metal, Hyper Cutter, Immunity, Inner Focus, Insomnia, Keen Eye, Leaf Guard, Levitate, Light Metal, Lightning Rod, Limber, Magic Bounce, Magma Armor, Marvel Scale, Motor Drive, Multiscale, Oblivious, Own Tempo, Sand Veil, Sap Sipper, Shell Armor, Shield Dust, Simple, Snow Cloak, Solid Rock, Soundproof, Sticky Hold, Storm Drain, Sturdy, Suction Cups, Tangled Feet, Telepathy, Thick Fat, Unaware, Vital Spirit, Volt Absorb, Water Absorb, Water Veil, White Smoke, Wonder Guard, and Wonder Skin. This affects every other Pokemon on the field, whether or not it is a target of this Pokemon's move, and whether or not their Ability is beneficial to this Pokemon.", }, + gen4: { + desc: "This Pokemon's moves and their effects ignore certain Abilities of other Pokemon. The Abilities that can be negated are Battle Armor, Clear Body, Damp, Dry Skin, Filter, Flash Fire, Flower Gift, Heatproof, Hyper Cutter, Immunity, Inner Focus, Insomnia, Keen Eye, Leaf Guard, Levitate, Lightning Rod, Limber, Magma Armor, Marvel Scale, Motor Drive, Oblivious, Own Tempo, Sand Veil, Shell Armor, Shield Dust, Simple, Snow Cloak, Solid Rock, Soundproof, Sticky Hold, Storm Drain, Sturdy, Suction Cups, Tangled Feet, Thick Fat, Unaware, Vital Spirit, Volt Absorb, Water Absorb, Water Veil, White Smoke, and Wonder Guard. This affects every other Pokemon on the field, whether or not it is a target of this Pokemon's move. The Attack modifier from an ally's Flower Gift Ability is not negated.", + }, start: " [POKEMON] is radiating a bursting aura!", }, @@ -2020,7 +2041,7 @@ export const AbilitiesText: {[k: string]: AbilityText} = { }, trace: { name: "Trace", - desc: "On switch-in, this Pokemon copies a random opposing Pokemon's Ability. Abilities that cannot be copied are As One, Battle Bond, Comatose, Commander, Disguise, Flower Gift, Forecast, Gulp Missile, Hadron Engine, Hunger Switch, Ice Face, Illusion, Imposter, Multitype, Neutralizing Gas, Orichalcum Pulse, Power Construct, Power of Alchemy, Protosynthesis, Quark Drive, Receiver, RKS System, Schooling, Shields Down, Stance Change, Trace, Zen Mode, and Zero to Hero. If no opposing Pokemon has an Ability that can be copied, this Ability will activate as soon as one does.", + desc: "On switch-in, this Pokemon copies a random opposing Pokemon's Ability. Abilities that cannot be copied are As One, Battle Bond, Comatose, Commander, Disguise, Embody Aspect, Flower Gift, Forecast, Hunger Switch, Ice Face, Illusion, Imposter, Multitype, Neutralizing Gas, Poison Puppeteer, Power Construct, Power of Alchemy, Protosynthesis, Quark Drive, Receiver, RKS System, Schooling, Shields Down, Stance Change, Teraform Zero, Tera Shell, Tera Shift, Trace, Zen Mode, and Zero to Hero. If no opposing Pokemon has an Ability that can be copied, this Ability will activate as soon as one does.", shortDesc: "On switch-in, or when it can, this Pokemon copies a random adjacent foe's Ability.", gen8: { desc: "On switch-in, this Pokemon copies a random opposing Pokemon's Ability. Abilities that cannot be copied are As One, Battle Bond, Comatose, Disguise, Flower Gift, Forecast, Gulp Missile, Hunger Switch, Ice Face, Illusion, Imposter, Multitype, Neutralizing Gas, Power Construct, Power of Alchemy, Receiver, RKS System, Schooling, Shields Down, Stance Change, Trace, and Zen Mode. If no opposing Pokemon has an Ability that can be copied, this Ability will activate as soon as one does.", @@ -2065,8 +2086,11 @@ export const AbilitiesText: {[k: string]: AbilityText} = { }, turboblaze: { name: "Turboblaze", - desc: "This Pokemon's moves and their effects ignore certain Abilities of other Pokemon. The Abilities that can be negated are Aroma Veil, Aura Break, Battle Armor, Big Pecks, Bulletproof, Clear Body, Contrary, Damp, Dazzling, Disguise, Dry Skin, Filter, Flash Fire, Flower Gift, Flower Veil, Fluffy, Friend Guard, Fur Coat, Grass Pelt, Heatproof, Heavy Metal, Hyper Cutter, Ice Face, Ice Scales, Immunity, Inner Focus, Insomnia, Keen Eye, Leaf Guard, Levitate, Light Metal, Lightning Rod, Limber, Magic Bounce, Magma Armor, Marvel Scale, Mirror Armor, Motor Drive, Multiscale, Oblivious, Overcoat, Own Tempo, Pastel Veil, Punk Rock, Queenly Majesty, Sand Veil, Sap Sipper, Shell Armor, Shield Dust, Simple, Snow Cloak, Solid Rock, Soundproof, Sticky Hold, Storm Drain, Sturdy, Suction Cups, Sweet Veil, Tangled Feet, Telepathy, Thick Fat, Unaware, Vital Spirit, Volt Absorb, Water Absorb, Water Bubble, Water Veil, White Smoke, Wonder Guard, and Wonder Skin. This affects every other Pokemon on the field, whether or not it is a target of this Pokemon's move, and whether or not their Ability is beneficial to this Pokemon.", + desc: "This Pokemon's moves and their effects ignore certain Abilities of other Pokemon. The Abilities that can be negated are Armor Tail, Aroma Veil, Aura Break, Battle Armor, Big Pecks, Bulletproof, Clear Body, Contrary, Damp, Dazzling, Disguise, Dry Skin, Earth Eater, Filter, Flash Fire, Flower Gift, Flower Veil, Fluffy, Friend Guard, Fur Coat, Good as Gold, Grass Pelt, Guard Dog, Heatproof, Heavy Metal, Hyper Cutter, Ice Face, Ice Scales, Illuminate, Immunity, Inner Focus, Insomnia, Keen Eye, Leaf Guard, Levitate, Light Metal, Lightning Rod, Limber, Magic Bounce, Magma Armor, Marvel Scale, Mind's Eye, Mirror Armor, Motor Drive, Multiscale, Oblivious, Overcoat, Own Tempo, Pastel Veil, Punk Rock, Purifying Salt, Queenly Majesty, Sand Veil, Sap Sipper, Shell Armor, Shield Dust, Simple, Snow Cloak, Solid Rock, Soundproof, Sticky Hold, Storm Drain, Sturdy, Suction Cups, Sweet Veil, Tangled Feet, Telepathy, Tera Shell, Thermal Exchange, Thick Fat, Unaware, Vital Spirit, Volt Absorb, Water Absorb, Water Bubble, Water Veil, Well-Baked Body, White Smoke, Wind Rider, Wonder Guard, and Wonder Skin. This affects every other Pokemon on the field, whether or not it is a target of this Pokemon's move, and whether or not their Ability is beneficial to this Pokemon.", shortDesc: "This Pokemon's moves and their effects ignore the Abilities of other Pokemon.", + gen8: { + desc: "This Pokemon's moves and their effects ignore certain Abilities of other Pokemon. The Abilities that can be negated are Aroma Veil, Aura Break, Battle Armor, Big Pecks, Bulletproof, Clear Body, Contrary, Damp, Dazzling, Disguise, Dry Skin, Filter, Flash Fire, Flower Gift, Flower Veil, Fluffy, Friend Guard, Fur Coat, Grass Pelt, Heatproof, Heavy Metal, Hyper Cutter, Ice Face, Ice Scales, Immunity, Inner Focus, Insomnia, Keen Eye, Leaf Guard, Levitate, Light Metal, Lightning Rod, Limber, Magic Bounce, Magma Armor, Marvel Scale, Mirror Armor, Motor Drive, Multiscale, Oblivious, Overcoat, Own Tempo, Pastel Veil, Punk Rock, Queenly Majesty, Sand Veil, Sap Sipper, Shell Armor, Shield Dust, Simple, Snow Cloak, Solid Rock, Soundproof, Sticky Hold, Storm Drain, Sturdy, Suction Cups, Sweet Veil, Tangled Feet, Telepathy, Thick Fat, Unaware, Vital Spirit, Volt Absorb, Water Absorb, Water Bubble, Water Veil, White Smoke, Wonder Guard, and Wonder Skin. This affects every other Pokemon on the field, whether or not it is a target of this Pokemon's move, and whether or not their Ability is beneficial to this Pokemon.", + }, gen7: { desc: "This Pokemon's moves and their effects ignore certain Abilities of other Pokemon. The Abilities that can be negated are Aroma Veil, Aura Break, Battle Armor, Big Pecks, Bulletproof, Clear Body, Contrary, Damp, Dark Aura, Dazzling, Disguise, Dry Skin, Fairy Aura, Filter, Flash Fire, Flower Gift, Flower Veil, Fluffy, Friend Guard, Fur Coat, Grass Pelt, Heatproof, Heavy Metal, Hyper Cutter, Immunity, Inner Focus, Insomnia, Keen Eye, Leaf Guard, Levitate, Light Metal, Lightning Rod, Limber, Magic Bounce, Magma Armor, Marvel Scale, Motor Drive, Multiscale, Oblivious, Overcoat, Own Tempo, Queenly Majesty, Sand Veil, Sap Sipper, Shell Armor, Shield Dust, Simple, Snow Cloak, Solid Rock, Soundproof, Sticky Hold, Storm Drain, Sturdy, Suction Cups, Sweet Veil, Tangled Feet, Telepathy, Thick Fat, Unaware, Vital Spirit, Volt Absorb, Water Absorb, Water Bubble, Water Veil, White Smoke, Wonder Guard, and Wonder Skin. This affects every other Pokemon on the field, whether or not it is a target of this Pokemon's move, and whether or not their Ability is beneficial to this Pokemon.", }, @@ -2076,6 +2100,9 @@ export const AbilitiesText: {[k: string]: AbilityText} = { gen5: { desc: "This Pokemon's moves and their effects ignore certain Abilities of other Pokemon. The Abilities that can be negated are Battle Armor, Big Pecks, Clear Body, Contrary, Damp, Dry Skin, Filter, Flash Fire, Flower Gift, Friend Guard, Heatproof, Heavy Metal, Hyper Cutter, Immunity, Inner Focus, Insomnia, Keen Eye, Leaf Guard, Levitate, Light Metal, Lightning Rod, Limber, Magic Bounce, Magma Armor, Marvel Scale, Motor Drive, Multiscale, Oblivious, Own Tempo, Sand Veil, Sap Sipper, Shell Armor, Shield Dust, Simple, Snow Cloak, Solid Rock, Soundproof, Sticky Hold, Storm Drain, Sturdy, Suction Cups, Tangled Feet, Telepathy, Thick Fat, Unaware, Vital Spirit, Volt Absorb, Water Absorb, Water Veil, White Smoke, Wonder Guard, and Wonder Skin. This affects every other Pokemon on the field, whether or not it is a target of this Pokemon's move, and whether or not their Ability is beneficial to this Pokemon.", }, + gen4: { + desc: "This Pokemon's moves and their effects ignore certain Abilities of other Pokemon. The Abilities that can be negated are Battle Armor, Clear Body, Damp, Dry Skin, Filter, Flash Fire, Flower Gift, Heatproof, Hyper Cutter, Immunity, Inner Focus, Insomnia, Keen Eye, Leaf Guard, Levitate, Lightning Rod, Limber, Magma Armor, Marvel Scale, Motor Drive, Oblivious, Own Tempo, Sand Veil, Shell Armor, Shield Dust, Simple, Snow Cloak, Solid Rock, Soundproof, Sticky Hold, Storm Drain, Sturdy, Suction Cups, Tangled Feet, Thick Fat, Unaware, Vital Spirit, Volt Absorb, Water Absorb, Water Veil, White Smoke, and Wonder Guard. This affects every other Pokemon on the field, whether or not it is a target of this Pokemon's move. The Attack modifier from an ally's Flower Gift Ability is not negated.", + }, start: " [POKEMON] is radiating a blazing aura!", }, @@ -2125,10 +2152,10 @@ export const AbilitiesText: {[k: string]: AbilityText} = { }, wanderingspirit: { name: "Wandering Spirit", - desc: "Pokemon making contact with this Pokemon have their Ability swapped with this one. Does not affect Pokemon with the As One, Battle Bond, Comatose, Commander, Disguise, Gulp Missile, Hadron Engine, Hunger Switch, Ice Face, Illusion, Multitype, Neutralizing Gas, Orichalcum Pulse, Power Construct, Protosynthesis, Quark Drive, RKS System, Schooling, Shields Down, Stance Change, Wonder Guard, Zen Mode, or Zero to Hero Abilities.", + desc: "Pokemon making contact with this Pokemon have their Ability swapped with this one. Does not affect Pokemon with the Abilities As One, Battle Bond, Comatose, Commander, Disguise, Embody Aspect, Hunger Switch, Ice Face, Illusion, Multitype, Neutralizing Gas, Poison Puppeteer, Power Construct, Protosynthesis, Quark Drive, RKS System, Schooling, Shields Down, Stance Change, Tera Shell, Tera Shift, Teraform Zero, Wonder Guard, Zen Mode, or Zero to Hero.", shortDesc: "Pokemon making contact with this Pokemon have their Ability swapped with this one.", gen8: { - desc: "Pokemon making contact with this Pokemon have their Ability swapped with this one. Does not affect Pokemon with the As One, Battle Bond, Comatose, Disguise, Gulp Missile, Hunger Switch, Ice Face, Illusion, Multitype, Neutralizing Gas, Power Construct, RKS System, Schooling, Shields Down, Stance Change, Wonder Guard, or Zen Mode Abilities.", + desc: "Pokemon making contact with this Pokemon have their Ability swapped with this one. Does not affect Pokemon with the Abilities As One, Battle Bond, Comatose, Disguise, Gulp Missile, Hunger Switch, Ice Face, Illusion, Multitype, Neutralizing Gas, Power Construct, RKS System, Schooling, Shields Down, Stance Change, Wonder Guard, or Zen Mode.", }, activate: "#skillswap", diff --git a/data/text/default.ts b/data/text/default.ts index 6054a6de1b0a..d71689cd597d 100644 --- a/data/text/default.ts +++ b/data/text/default.ts @@ -1,4 +1,4 @@ -export const DefaultText: {[k: string]: DefaultText} = { +export const DefaultText: {[id: IDEntry]: DefaultText} = { default: { startBattle: "Battle started between [TRAINER] and [TRAINER]!", winBattle: "**[TRAINER]** won the battle!", diff --git a/data/text/items.ts b/data/text/items.ts index 643acf47ec12..0fcbda76f457 100644 --- a/data/text/items.ts +++ b/data/text/items.ts @@ -1,349 +1,349 @@ -export const ItemsText: {[k: string]: ItemText} = { +export const ItemsText: {[id: IDEntry]: ItemText} = { abilityshield: { name: "Ability Shield", - desc: "Holder's Ability cannot be changed by any effect.", + shortDesc: "Holder's Ability cannot be changed by any effect.", block: " [POKEMON]'s Ability is protected by the effects of its Ability Shield!", }, abomasite: { name: "Abomasite", - desc: "If held by an Abomasnow, this item allows it to Mega Evolve in battle.", + shortDesc: "If held by an Abomasnow, this item allows it to Mega Evolve in battle.", }, absolite: { name: "Absolite", - desc: "If held by an Absol, this item allows it to Mega Evolve in battle.", + shortDesc: "If held by an Absol, this item allows it to Mega Evolve in battle.", }, absorbbulb: { name: "Absorb Bulb", - desc: "Raises holder's Sp. Atk by 1 stage if hit by a Water-type attack. Single use.", + shortDesc: "Raises holder's Sp. Atk by 1 stage if hit by a Water-type attack. Single use.", }, adamantcrystal: { name: "Adamant Crystal", - desc: "If held by a Dialga, its Steel- and Dragon-type attacks have 1.2x power.", + shortDesc: "If held by a Dialga, its Steel- and Dragon-type attacks have 1.2x power.", }, adamantorb: { name: "Adamant Orb", - desc: "If held by a Dialga, its Steel- and Dragon-type attacks have 1.2x power.", + shortDesc: "If held by a Dialga, its Steel- and Dragon-type attacks have 1.2x power.", }, adrenalineorb: { name: "Adrenaline Orb", - desc: "Raises holder's Speed by 1 stage if it gets affected by Intimidate. Single use.", + shortDesc: "Raises holder's Speed by 1 stage if it gets affected by Intimidate. Single use.", }, aerodactylite: { name: "Aerodactylite", - desc: "If held by an Aerodactyl, this item allows it to Mega Evolve in battle.", + shortDesc: "If held by an Aerodactyl, this item allows it to Mega Evolve in battle.", }, aggronite: { name: "Aggronite", - desc: "If held by an Aggron, this item allows it to Mega Evolve in battle.", + shortDesc: "If held by an Aggron, this item allows it to Mega Evolve in battle.", }, aguavberry: { name: "Aguav Berry", - desc: "Restores 1/3 max HP at 1/4 max HP or less; confuses if -SpD Nature. Single use.", + shortDesc: "Restores 1/3 max HP at 1/4 max HP or less; confuses if -SpD Nature. Single use.", gen7: { - desc: "Restores 1/2 max HP at 1/4 max HP or less; confuses if -SpD Nature. Single use.", + shortDesc: "Restores 1/2 max HP at 1/4 max HP or less; confuses if -SpD Nature. Single use.", }, gen6: { - desc: "Restores 1/8 max HP at 1/2 max HP or less; confuses if -SpD Nature. Single use.", + shortDesc: "Restores 1/8 max HP at 1/2 max HP or less; confuses if -SpD Nature. Single use.", }, }, airballoon: { name: "Air Balloon", - desc: "Holder is immune to Ground-type attacks. Pops when holder is hit.", + shortDesc: "Holder is immune to Ground-type attacks. Pops when holder is hit.", start: " [POKEMON] floats in the air with its Air Balloon!", end: " [POKEMON]'s Air Balloon popped!", }, alakazite: { name: "Alakazite", - desc: "If held by an Alakazam, this item allows it to Mega Evolve in battle.", + shortDesc: "If held by an Alakazam, this item allows it to Mega Evolve in battle.", }, aloraichiumz: { name: "Aloraichium Z", - desc: "If held by an Alolan Raichu with Thunderbolt, it can use Stoked Sparksurfer.", + shortDesc: "If held by an Alolan Raichu with Thunderbolt, it can use Stoked Sparksurfer.", }, altarianite: { name: "Altarianite", - desc: "If held by an Altaria, this item allows it to Mega Evolve in battle.", + shortDesc: "If held by an Altaria, this item allows it to Mega Evolve in battle.", }, ampharosite: { name: "Ampharosite", - desc: "If held by an Ampharos, this item allows it to Mega Evolve in battle.", + shortDesc: "If held by an Ampharos, this item allows it to Mega Evolve in battle.", }, apicotberry: { name: "Apicot Berry", - desc: "Raises holder's Sp. Def by 1 stage when at 1/4 max HP or less. Single use.", + shortDesc: "Raises holder's Sp. Def by 1 stage when at 1/4 max HP or less. Single use.", }, armorfossil: { name: "Armor Fossil", - desc: "Can be revived into Shieldon.", + shortDesc: "Can be revived into Shieldon.", }, aspearberry: { name: "Aspear Berry", - desc: "Holder is cured if it is frozen. Single use.", + shortDesc: "Holder is cured if it is frozen. Single use.", }, assaultvest: { name: "Assault Vest", - desc: "Holder's Sp. Def is 1.5x, but it can only select damaging moves.", + shortDesc: "Holder's Sp. Def is 1.5x, but it can only select damaging moves.", }, audinite: { name: "Audinite", - desc: "If held by an Audino, this item allows it to Mega Evolve in battle.", + shortDesc: "If held by an Audino, this item allows it to Mega Evolve in battle.", }, auspiciousarmor: { name: "Auspicious Armor", - desc: "Evolves Charcadet into Armarouge when used.", + shortDesc: "Evolves Charcadet into Armarouge when used.", }, babiriberry: { name: "Babiri Berry", - desc: "Halves damage taken from a supereffective Steel-type attack. Single use.", + shortDesc: "Halves damage taken from a supereffective Steel-type attack. Single use.", }, banettite: { name: "Banettite", - desc: "If held by a Banette, this item allows it to Mega Evolve in battle.", + shortDesc: "If held by a Banette, this item allows it to Mega Evolve in battle.", }, beastball: { name: "Beast Ball", - desc: "A special Poke Ball designed to catch Ultra Beasts.", + shortDesc: "A special Poke Ball designed to catch Ultra Beasts.", }, beedrillite: { name: "Beedrillite", - desc: "If held by a Beedrill, this item allows it to Mega Evolve in battle.", + shortDesc: "If held by a Beedrill, this item allows it to Mega Evolve in battle.", }, belueberry: { name: "Belue Berry", - desc: "Cannot be eaten by the holder. No effect when eaten with Bug Bite or Pluck.", + shortDesc: "Cannot be eaten by the holder. No effect when eaten with Bug Bite or Pluck.", }, berryjuice: { name: "Berry Juice", - desc: "Restores 20 HP when at 1/2 max HP or less. Single use.", + shortDesc: "Restores 20 HP when at 1/2 max HP or less. Single use.", }, berrysweet: { name: "Berry Sweet", - desc: "Evolves Milcery into Alcremie when held and spun around.", + shortDesc: "Evolves Milcery into Alcremie when held and spun around.", }, bignugget: { name: "Big Nugget", - desc: "A big nugget of pure gold that gives off a lustrous gleam.", + shortDesc: "A big nugget of pure gold that gives off a lustrous gleam.", }, bigroot: { name: "Big Root", - desc: "Holder gains 1.3x HP from draining/Aqua Ring/Ingrain/Leech Seed/Strength Sap.", + shortDesc: "Holder gains 1.3x HP from draining/Aqua Ring/Ingrain/Leech Seed/Strength Sap.", gen6: { - desc: "Holder gains 1.3x HP from draining moves, Aqua Ring, Ingrain, and Leech Seed.", + shortDesc: "Holder gains 1.3x HP from draining moves, Aqua Ring, Ingrain, and Leech Seed.", }, }, bindingband: { name: "Binding Band", - desc: "Holder's partial-trapping moves deal 1/6 max HP per turn instead of 1/8.", + shortDesc: "Holder's partial-trapping moves deal 1/6 max HP per turn instead of 1/8.", }, blackbelt: { name: "Black Belt", - desc: "Holder's Fighting-type attacks have 1.2x power.", + shortDesc: "Holder's Fighting-type attacks have 1.2x power.", gen3: { - desc: "Holder's Fighting-type attacks have 1.1x power.", + shortDesc: "Holder's Fighting-type attacks have 1.1x power.", }, }, blacksludge: { name: "Black Sludge", - desc: "Each turn, if holder is a Poison type, restores 1/16 max HP; loses 1/8 if not.", + shortDesc: "Each turn, if holder is a Poison type, restores 1/16 max HP; loses 1/8 if not.", heal: " [POKEMON] restored a little HP using its Black Sludge!", }, blackglasses: { name: "Black Glasses", - desc: "Holder's Dark-type attacks have 1.2x power.", + shortDesc: "Holder's Dark-type attacks have 1.2x power.", gen3: { - desc: "Holder's Dark-type attacks have 1.1x power.", + shortDesc: "Holder's Dark-type attacks have 1.1x power.", }, }, blastoisinite: { name: "Blastoisinite", - desc: "If held by a Blastoise, this item allows it to Mega Evolve in battle.", + shortDesc: "If held by a Blastoise, this item allows it to Mega Evolve in battle.", }, blazikenite: { name: "Blazikenite", - desc: "If held by a Blaziken, this item allows it to Mega Evolve in battle.", + shortDesc: "If held by a Blaziken, this item allows it to Mega Evolve in battle.", }, blueorb: { name: "Blue Orb", - desc: "If held by a Kyogre, this item triggers its Primal Reversion in battle.", + shortDesc: "If held by a Kyogre, this item triggers its Primal Reversion in battle.", }, blukberry: { name: "Bluk Berry", - desc: "Cannot be eaten by the holder. No effect when eaten with Bug Bite or Pluck.", + shortDesc: "Cannot be eaten by the holder. No effect when eaten with Bug Bite or Pluck.", }, blunderpolicy: { name: "Blunder Policy", - desc: "If the holder misses due to accuracy, its Speed is raised by 2 stages. Single use.", + shortDesc: "If the holder misses due to accuracy, its Speed is raised by 2 stages. Single use.", }, boosterenergy: { name: "Booster Energy", - desc: "Activates the Protosynthesis or Quark Drive Abilities. Single use.", + shortDesc: "Activates the Protosynthesis or Quark Drive Abilities. Single use.", }, bottlecap: { name: "Bottle Cap", - desc: "Used for Hyper Training. One of a Pokemon's stats is calculated with an IV of 31.", + shortDesc: "Used for Hyper Training. One of a Pokemon's stats is calculated with an IV of 31.", }, brightpowder: { name: "Bright Powder", - desc: "The accuracy of attacks against the holder is 0.9x.", + shortDesc: "The accuracy of attacks against the holder is 0.9x.", gen2: { - desc: "An attack against the holder has its accuracy out of 255 lowered by 20.", + shortDesc: "An attack against the holder has its accuracy out of 255 lowered by 20.", }, }, buggem: { name: "Bug Gem", - desc: "Holder's first successful Bug-type attack will have 1.3x power. Single use.", + shortDesc: "Holder's first successful Bug-type attack will have 1.3x power. Single use.", gen5: { - desc: "Holder's first successful Bug-type attack will have 1.5x power. Single use.", + shortDesc: "Holder's first successful Bug-type attack will have 1.5x power. Single use.", }, }, bugmemory: { name: "Bug Memory", - desc: "Holder's Multi-Attack is Bug type.", + shortDesc: "Holder's Multi-Attack is Bug type.", }, buginiumz: { name: "Buginium Z", - desc: "If holder has a Bug move, this item allows it to use a Bug Z-Move.", + shortDesc: "If holder has a Bug move, this item allows it to use a Bug Z-Move.", }, burndrive: { name: "Burn Drive", - desc: "Holder's Techno Blast is Fire type.", + shortDesc: "Holder's Techno Blast is Fire type.", }, cameruptite: { name: "Cameruptite", - desc: "If held by a Camerupt, this item allows it to Mega Evolve in battle.", + shortDesc: "If held by a Camerupt, this item allows it to Mega Evolve in battle.", }, cellbattery: { name: "Cell Battery", - desc: "Raises holder's Attack by 1 if hit by an Electric-type attack. Single use.", + shortDesc: "Raises holder's Attack by 1 if hit by an Electric-type attack. Single use.", }, charcoal: { name: "Charcoal", - desc: "Holder's Fire-type attacks have 1.2x power.", + shortDesc: "Holder's Fire-type attacks have 1.2x power.", gen3: { - desc: "Holder's Fire-type attacks have 1.1x power.", + shortDesc: "Holder's Fire-type attacks have 1.1x power.", }, }, charizarditex: { name: "Charizardite X", - desc: "If held by a Charizard, this item allows it to Mega Evolve in battle.", + shortDesc: "If held by a Charizard, this item allows it to Mega Evolve in battle.", }, charizarditey: { name: "Charizardite Y", - desc: "If held by a Charizard, this item allows it to Mega Evolve in battle.", + shortDesc: "If held by a Charizard, this item allows it to Mega Evolve in battle.", }, chartiberry: { name: "Charti Berry", - desc: "Halves damage taken from a supereffective Rock-type attack. Single use.", + shortDesc: "Halves damage taken from a supereffective Rock-type attack. Single use.", }, cheriberry: { name: "Cheri Berry", - desc: "Holder cures itself if it is paralyzed. Single use.", + shortDesc: "Holder cures itself if it is paralyzed. Single use.", }, cherishball: { name: "Cherish Ball", - desc: "A rare Poke Ball that has been crafted to commemorate an occasion.", + shortDesc: "A rare Poke Ball that has been crafted to commemorate an occasion.", }, chestoberry: { name: "Chesto Berry", - desc: "Holder wakes up if it is asleep. Single use.", + shortDesc: "Holder wakes up if it is asleep. Single use.", }, chilanberry: { name: "Chilan Berry", - desc: "Halves damage taken from a Normal-type attack. Single use.", + shortDesc: "Halves damage taken from a Normal-type attack. Single use.", }, chilldrive: { name: "Chill Drive", - desc: "Holder's Techno Blast is Ice type.", + shortDesc: "Holder's Techno Blast is Ice type.", }, chippedpot: { name: "Chipped Pot", - desc: "Evolves Sinistea-Antique into Polteageist-Antique when used.", + shortDesc: "Evolves Sinistea-Antique into Polteageist-Antique when used.", }, choiceband: { name: "Choice Band", - desc: "Holder's Attack is 1.5x, but it can only select the first move it executes.", + shortDesc: "Holder's Attack is 1.5x, but it can only select the first move it executes.", }, choicescarf: { name: "Choice Scarf", - desc: "Holder's Speed is 1.5x, but it can only select the first move it executes.", + shortDesc: "Holder's Speed is 1.5x, but it can only select the first move it executes.", }, choicespecs: { name: "Choice Specs", - desc: "Holder's Sp. Atk is 1.5x, but it can only select the first move it executes.", + shortDesc: "Holder's Sp. Atk is 1.5x, but it can only select the first move it executes.", }, chopleberry: { name: "Chople Berry", - desc: "Halves damage taken from a supereffective Fighting-type attack. Single use.", + shortDesc: "Halves damage taken from a supereffective Fighting-type attack. Single use.", }, clawfossil: { name: "Claw Fossil", - desc: "Can be revived into Anorith.", + shortDesc: "Can be revived into Anorith.", }, clearamulet: { name: "Clear Amulet", - desc: "Prevents other Pokemon from lowering the holder's stat stages.", + shortDesc: "Prevents other Pokemon from lowering the holder's stat stages.", block: " The effects of [POKEMON]'s Clear Amulet prevent its stats from being lowered!", }, cloversweet: { name: "Clover Sweet", - desc: "Evolves Milcery into Alcremie when held and spun around.", + shortDesc: "Evolves Milcery into Alcremie when held and spun around.", }, cobaberry: { name: "Coba Berry", - desc: "Halves damage taken from a supereffective Flying-type attack. Single use.", + shortDesc: "Halves damage taken from a supereffective Flying-type attack. Single use.", }, colburberry: { name: "Colbur Berry", - desc: "Halves damage taken from a supereffective Dark-type attack. Single use.", + shortDesc: "Halves damage taken from a supereffective Dark-type attack. Single use.", }, cornerstonemask: { name: "Cornerstone Mask", - desc: "Ogerpon-Cornerstone: 1.2x power attacks; Terastallize to gain Embody Aspect.", + shortDesc: "Ogerpon-Cornerstone: 1.2x power attacks; Terastallize to gain Embody Aspect.", }, cornnberry: { name: "Cornn Berry", - desc: "Cannot be eaten by the holder. No effect when eaten with Bug Bite or Pluck.", + shortDesc: "Cannot be eaten by the holder. No effect when eaten with Bug Bite or Pluck.", }, coverfossil: { name: "Cover Fossil", - desc: "Can be revived into Tirtouga.", + shortDesc: "Can be revived into Tirtouga.", }, covertcloak: { name: "Covert Cloak", - desc: "Holder is not affected by the secondary effect of another Pokemon's attack.", + shortDesc: "Holder is not affected by the secondary effect of another Pokemon's attack.", }, crackedpot: { name: "Cracked Pot", - desc: "Evolves Sinistea into Polteageist when used.", + shortDesc: "Evolves Sinistea into Polteageist when used.", }, custapberry: { name: "Custap Berry", - desc: "Holder moves first in its priority bracket when at 1/4 max HP or less. Single use.", + shortDesc: "Holder moves first in its priority bracket when at 1/4 max HP or less. Single use.", activate: " [POKEMON] can act faster than normal, thanks to its Custap Berry!", }, damprock: { name: "Damp Rock", - desc: "Holder's use of Rain Dance lasts 8 turns instead of 5.", + shortDesc: "Holder's use of Rain Dance lasts 8 turns instead of 5.", }, darkgem: { name: "Dark Gem", - desc: "Holder's first successful Dark-type attack will have 1.3x power. Single use.", + shortDesc: "Holder's first successful Dark-type attack will have 1.3x power. Single use.", gen5: { - desc: "Holder's first successful Dark-type attack will have 1.5x power. Single use.", + shortDesc: "Holder's first successful Dark-type attack will have 1.5x power. Single use.", }, }, darkmemory: { name: "Dark Memory", - desc: "Holder's Multi-Attack is Dark type.", + shortDesc: "Holder's Multi-Attack is Dark type.", }, darkiniumz: { name: "Darkinium Z", - desc: "If holder has a Dark move, this item allows it to use a Dark Z-Move.", + shortDesc: "If holder has a Dark move, this item allows it to use a Dark Z-Move.", }, dawnstone: { name: "Dawn Stone", @@ -352,7 +352,7 @@ export const ItemsText: {[k: string]: ItemText} = { }, decidiumz: { name: "Decidium Z", - desc: "If held by a Decidueye with Spirit Shackle, it can use Sinister Arrow Raid.", + shortDesc: "If held by a Decidueye with Spirit Shackle, it can use Sinister Arrow Raid.", }, deepseascale: { name: "Deep Sea Scale", @@ -366,82 +366,82 @@ export const ItemsText: {[k: string]: ItemText} = { }, destinyknot: { name: "Destiny Knot", - desc: "If holder becomes infatuated, the other Pokemon also becomes infatuated.", + shortDesc: "If holder becomes infatuated, the other Pokemon also becomes infatuated.", }, diancite: { name: "Diancite", - desc: "If held by a Diancie, this item allows it to Mega Evolve in battle.", + shortDesc: "If held by a Diancie, this item allows it to Mega Evolve in battle.", }, diveball: { name: "Dive Ball", - desc: "A Poke Ball that works especially well on Pokemon that live underwater.", + shortDesc: "A Poke Ball that works especially well on Pokemon that live underwater.", }, domefossil: { name: "Dome Fossil", - desc: "Can be revived into Kabuto.", + shortDesc: "Can be revived into Kabuto.", }, dousedrive: { name: "Douse Drive", - desc: "Holder's Techno Blast is Water type.", + shortDesc: "Holder's Techno Blast is Water type.", }, dracoplate: { name: "Draco Plate", - desc: "Holder's Dragon-type attacks have 1.2x power. Judgment is Dragon type.", + shortDesc: "Holder's Dragon-type attacks have 1.2x power. Judgment is Dragon type.", }, dragonfang: { name: "Dragon Fang", - desc: "Holder's Dragon-type attacks have 1.2x power.", + shortDesc: "Holder's Dragon-type attacks have 1.2x power.", gen3: { - desc: "Holder's Dragon-type attacks have 1.1x power.", + shortDesc: "Holder's Dragon-type attacks have 1.1x power.", }, gen2: { - desc: "No competitive use.", + shortDesc: "No competitive use.", }, }, dragongem: { name: "Dragon Gem", - desc: "Holder's first successful Dragon-type attack will have 1.3x power. Single use.", + shortDesc: "Holder's first successful Dragon-type attack will have 1.3x power. Single use.", gen5: { - desc: "Holder's first successful Dragon-type attack will have 1.5x power. Single use.", + shortDesc: "Holder's first successful Dragon-type attack will have 1.5x power. Single use.", }, }, dragonmemory: { name: "Dragon Memory", - desc: "Holder's Multi-Attack is Dragon type.", + shortDesc: "Holder's Multi-Attack is Dragon type.", }, dragonscale: { name: "Dragon Scale", - desc: "Evolves Seadra into Kingdra when traded.", + shortDesc: "Evolves Seadra into Kingdra when traded.", gen2: { - desc: "Holder's Dragon-type attacks have 1.1x power. Evolves Seadra (trade).", + shortDesc: "Holder's Dragon-type attacks have 1.1x power. Evolves Seadra (trade).", }, }, dragoniumz: { name: "Dragonium Z", - desc: "If holder has a Dragon move, this item allows it to use a Dragon Z-Move.", + shortDesc: "If holder has a Dragon move, this item allows it to use a Dragon Z-Move.", }, dreadplate: { name: "Dread Plate", - desc: "Holder's Dark-type attacks have 1.2x power. Judgment is Dark type.", + shortDesc: "Holder's Dark-type attacks have 1.2x power. Judgment is Dark type.", }, dreamball: { name: "Dream Ball", - desc: "A Poke Ball that makes it easier to catch wild Pokémon while they're asleep.", + shortDesc: "A Poke Ball that makes it easier to catch wild Pokémon while they're asleep.", gen7: { - desc: "A special Poke Ball that appears out of nowhere in a bag at the Entree Forest.", + shortDesc: "A special Poke Ball that appears out of nowhere in a bag at the Entree Forest.", }, }, dubiousdisc: { name: "Dubious Disc", - desc: "Evolves Porygon2 into Porygon-Z when traded.", + shortDesc: "Evolves Porygon2 into Porygon-Z when traded.", }, durinberry: { name: "Durin Berry", - desc: "Cannot be eaten by the holder. No effect when eaten with Bug Bite or Pluck.", + shortDesc: "Cannot be eaten by the holder. No effect when eaten with Bug Bite or Pluck.", }, duskball: { name: "Dusk Ball", - desc: "A Poke Ball that makes it easier to catch wild Pokemon at night or in caves.", + shortDesc: "A Poke Ball that makes it easier to catch wild Pokemon at night or in caves.", }, duskstone: { name: "Dusk Stone", @@ -450,117 +450,117 @@ export const ItemsText: {[k: string]: ItemText} = { }, earthplate: { name: "Earth Plate", - desc: "Holder's Ground-type attacks have 1.2x power. Judgment is Ground type.", + shortDesc: "Holder's Ground-type attacks have 1.2x power. Judgment is Ground type.", }, eeviumz: { name: "Eevium Z", - desc: "If held by an Eevee with Last Resort, it can use Extreme Evoboost.", + shortDesc: "If held by an Eevee with Last Resort, it can use Extreme Evoboost.", }, ejectbutton: { name: "Eject Button", - desc: "If holder survives a hit, it immediately switches out to a chosen ally. Single use.", + shortDesc: "If holder survives a hit, it immediately switches out to a chosen ally. Single use.", end: " [POKEMON] is switched out with the Eject Button!", }, ejectpack: { name: "Eject Pack", - desc: "If the holder's stat stages are lowered, it switches to a chosen ally. Single use.", + shortDesc: "If the holder's stat stages are lowered, it switches to a chosen ally. Single use.", end: " [POKEMON] is switched out by the Eject Pack!", }, electirizer: { name: "Electirizer", - desc: "Evolves Electabuzz into Electivire when traded.", + shortDesc: "Evolves Electabuzz into Electivire when traded.", }, electricgem: { name: "Electric Gem", - desc: "Holder's first successful Electric-type attack will have 1.3x power. Single use.", + shortDesc: "Holder's first successful Electric-type attack will have 1.3x power. Single use.", gen5: { - desc: "Holder's first successful Electric-type attack will have 1.5x power. Single use.", + shortDesc: "Holder's first successful Electric-type attack will have 1.5x power. Single use.", }, }, electricmemory: { name: "Electric Memory", - desc: "Holder's Multi-Attack is Electric type.", + shortDesc: "Holder's Multi-Attack is Electric type.", }, electricseed: { name: "Electric Seed", - desc: "If the terrain is Electric Terrain, raises holder's Defense by 1 stage. Single use.", + shortDesc: "If the terrain is Electric Terrain, raises holder's Defense by 1 stage. Single use.", }, electriumz: { name: "Electrium Z", - desc: "If holder has an Electric move, this item allows it to use an Electric Z-Move.", + shortDesc: "If holder has an Electric move, this item allows it to use an Electric Z-Move.", }, enigmaberry: { name: "Enigma Berry", - desc: "Restores 1/4 max HP after holder is hit by a supereffective move. Single use.", + shortDesc: "Restores 1/4 max HP after holder is hit by a supereffective move. Single use.", gen3: { - desc: "No competitive use.", + shortDesc: "No competitive use.", }, }, eviolite: { name: "Eviolite", - desc: "If holder's species can evolve, its Defense and Sp. Def are 1.5x.", + shortDesc: "If holder's species can evolve, its Defense and Sp. Def are 1.5x.", }, expertbelt: { name: "Expert Belt", - desc: "Holder's attacks that are super effective against the target do 1.2x damage.", + shortDesc: "Holder's attacks that are super effective against the target do 1.2x damage.", }, fairiumz: { name: "Fairium Z", - desc: "If holder has a Fairy move, this item allows it to use a Fairy Z-Move.", + shortDesc: "If holder has a Fairy move, this item allows it to use a Fairy Z-Move.", }, fairyfeather: { name: "Fairy Feather", - desc: "Holder's Fairy-type attacks have 1.2x power.", + shortDesc: "Holder's Fairy-type attacks have 1.2x power.", }, fairygem: { name: "Fairy Gem", - desc: "Holder's first successful Fairy-type attack will have 1.3x power. Single use.", + shortDesc: "Holder's first successful Fairy-type attack will have 1.3x power. Single use.", }, fairymemory: { name: "Fairy Memory", - desc: "Holder's Multi-Attack is Fairy type.", + shortDesc: "Holder's Multi-Attack is Fairy type.", }, fastball: { name: "Fast Ball", - desc: "A Poke Ball that makes it easier to catch Pokemon which are quick to run away.", + shortDesc: "A Poke Ball that makes it easier to catch Pokemon which are quick to run away.", }, fightinggem: { name: "Fighting Gem", - desc: "Holder's first successful Fighting-type attack will have 1.3x power. Single use.", + shortDesc: "Holder's first successful Fighting-type attack will have 1.3x power. Single use.", gen5: { - desc: "Holder's first successful Fighting-type attack will have 1.5x power. Single use.", + shortDesc: "Holder's first successful Fighting-type attack will have 1.5x power. Single use.", }, }, fightingmemory: { name: "Fighting Memory", - desc: "Holder's Multi-Attack is Fighting type.", + shortDesc: "Holder's Multi-Attack is Fighting type.", }, fightiniumz: { name: "Fightinium Z", - desc: "If holder has a Fighting move, this item allows it to use a Fighting Z-Move.", + shortDesc: "If holder has a Fighting move, this item allows it to use a Fighting Z-Move.", }, figyberry: { name: "Figy Berry", - desc: "Restores 1/3 max HP at 1/4 max HP or less; confuses if -Atk Nature. Single use.", + shortDesc: "Restores 1/3 max HP at 1/4 max HP or less; confuses if -Atk Nature. Single use.", gen7: { - desc: "Restores 1/2 max HP at 1/4 max HP or less; confuses if -Atk Nature. Single use.", + shortDesc: "Restores 1/2 max HP at 1/4 max HP or less; confuses if -Atk Nature. Single use.", }, gen6: { - desc: "Restores 1/8 max HP at 1/2 max HP or less; confuses if -Atk Nature. Single use.", + shortDesc: "Restores 1/8 max HP at 1/2 max HP or less; confuses if -Atk Nature. Single use.", }, }, firegem: { name: "Fire Gem", - desc: "Holder's first successful Fire-type attack will have 1.3x power. Single use.", + shortDesc: "Holder's first successful Fire-type attack will have 1.3x power. Single use.", gen5: { - desc: "Holder's first successful Fire-type attack will have 1.5x power. Single use.", + shortDesc: "Holder's first successful Fire-type attack will have 1.5x power. Single use.", }, }, firememory: { name: "Fire Memory", - desc: "Holder's Multi-Attack is Fire type.", + shortDesc: "Holder's Multi-Attack is Fire type.", }, firestone: { name: "Fire Stone", @@ -569,264 +569,264 @@ export const ItemsText: {[k: string]: ItemText} = { }, firiumz: { name: "Firium Z", - desc: "If holder has a Fire move, this item allows it to use a Fire Z-Move.", + shortDesc: "If holder has a Fire move, this item allows it to use a Fire Z-Move.", }, fistplate: { name: "Fist Plate", - desc: "Holder's Fighting-type attacks have 1.2x power. Judgment is Fighting type.", + shortDesc: "Holder's Fighting-type attacks have 1.2x power. Judgment is Fighting type.", }, flameorb: { name: "Flame Orb", - desc: "At the end of every turn, this item attempts to burn the holder.", + shortDesc: "At the end of every turn, this item attempts to burn the holder.", }, flameplate: { name: "Flame Plate", - desc: "Holder's Fire-type attacks have 1.2x power. Judgment is Fire type.", + shortDesc: "Holder's Fire-type attacks have 1.2x power. Judgment is Fire type.", }, floatstone: { name: "Float Stone", - desc: "Holder's weight is halved.", + shortDesc: "Holder's weight is halved.", }, flowersweet: { name: "Flower Sweet", - desc: "Evolves Milcery into Alcremie when held and spun around.", + shortDesc: "Evolves Milcery into Alcremie when held and spun around.", }, flyinggem: { name: "Flying Gem", - desc: "Holder's first successful Flying-type attack will have 1.3x power. Single use.", + shortDesc: "Holder's first successful Flying-type attack will have 1.3x power. Single use.", gen5: { - desc: "Holder's first successful Flying-type attack will have 1.5x power. Single use.", + shortDesc: "Holder's first successful Flying-type attack will have 1.5x power. Single use.", }, }, flyingmemory: { name: "Flying Memory", - desc: "Holder's Multi-Attack is Flying type.", + shortDesc: "Holder's Multi-Attack is Flying type.", }, flyiniumz: { name: "Flyinium Z", - desc: "If holder has a Flying move, this item allows it to use a Flying Z-Move.", + shortDesc: "If holder has a Flying move, this item allows it to use a Flying Z-Move.", }, focusband: { name: "Focus Band", - desc: "Holder has a 10% chance to survive an attack that would KO it with 1 HP.", + shortDesc: "Holder has a 10% chance to survive an attack that would KO it with 1 HP.", gen2: { - desc: "Holder has a ~11.7% chance to survive an attack that would KO it with 1 HP.", + shortDesc: "Holder has a ~11.7% chance to survive an attack that would KO it with 1 HP.", }, activate: " [POKEMON] hung on using its Focus Band!", }, focussash: { name: "Focus Sash", - desc: "If holder's HP is full, will survive an attack that would KO it with 1 HP. Single use.", + shortDesc: "If holder's HP is full, will survive an attack that would KO it with 1 HP. Single use.", gen4: { - desc: "If holder's HP is full, survives all hits of one attack with at least 1 HP. Single use.", + shortDesc: "If holder's HP is full, survives all hits of one attack with at least 1 HP. Single use.", }, end: " [POKEMON] hung on using its Focus Sash!", }, fossilizedbird: { name: "Fossilized Bird", - desc: "Can revive into Dracozolt with Fossilized Drake or Arctozolt with Fossilized Dino.", + shortDesc: "Can revive into Dracozolt with Fossilized Drake or Arctozolt with Fossilized Dino.", }, fossilizeddino: { name: "Fossilized Dino", - desc: "Can revive into Arctovish with Fossilized Fish or Arctozolt with Fossilized Bird.", + shortDesc: "Can revive into Arctovish with Fossilized Fish or Arctozolt with Fossilized Bird.", }, fossilizeddrake: { name: "Fossilized Drake", - desc: "Can revive into Dracozolt with Fossilized Bird or Dracovish with Fossilized Fish.", + shortDesc: "Can revive into Dracozolt with Fossilized Bird or Dracovish with Fossilized Fish.", }, fossilizedfish: { name: "Fossilized Fish", - desc: "Can revive into Dracovish with Fossilized Drake or Arctovish with Fossilized Dino.", + shortDesc: "Can revive into Dracovish with Fossilized Drake or Arctovish with Fossilized Dino.", }, friendball: { name: "Friend Ball", - desc: "A Poke Ball that makes caught Pokemon more friendly.", + shortDesc: "A Poke Ball that makes caught Pokemon more friendly.", }, fullincense: { name: "Full Incense", - desc: "Holder moves last in its priority bracket.", + shortDesc: "Holder moves last in its priority bracket.", }, galaricacuff: { name: "Galarica Cuff", - desc: "Evolves Galarian Slowpoke into Galarian Slowbro when used.", + shortDesc: "Evolves Galarian Slowpoke into Galarian Slowbro when used.", }, galaricawreath: { name: "Galarica Wreath", - desc: "Evolves Galarian Slowpoke into Galarian Slowking when used.", + shortDesc: "Evolves Galarian Slowpoke into Galarian Slowking when used.", }, galladite: { name: "Galladite", - desc: "If held by a Gallade, this item allows it to Mega Evolve in battle.", + shortDesc: "If held by a Gallade, this item allows it to Mega Evolve in battle.", }, ganlonberry: { name: "Ganlon Berry", - desc: "Raises holder's Defense by 1 stage when at 1/4 max HP or less. Single use.", + shortDesc: "Raises holder's Defense by 1 stage when at 1/4 max HP or less. Single use.", }, garchompite: { name: "Garchompite", - desc: "If held by a Garchomp, this item allows it to Mega Evolve in battle.", + shortDesc: "If held by a Garchomp, this item allows it to Mega Evolve in battle.", }, gardevoirite: { name: "Gardevoirite", - desc: "If held by a Gardevoir, this item allows it to Mega Evolve in battle.", + shortDesc: "If held by a Gardevoir, this item allows it to Mega Evolve in battle.", }, gengarite: { name: "Gengarite", - desc: "If held by a Gengar, this item allows it to Mega Evolve in battle.", + shortDesc: "If held by a Gengar, this item allows it to Mega Evolve in battle.", }, ghostgem: { name: "Ghost Gem", - desc: "Holder's first successful Ghost-type attack will have 1.3x power. Single use.", + shortDesc: "Holder's first successful Ghost-type attack will have 1.3x power. Single use.", gen5: { - desc: "Holder's first successful Ghost-type attack will have 1.5x power. Single use.", + shortDesc: "Holder's first successful Ghost-type attack will have 1.5x power. Single use.", }, }, ghostmemory: { name: "Ghost Memory", - desc: "Holder's Multi-Attack is Ghost type.", + shortDesc: "Holder's Multi-Attack is Ghost type.", }, ghostiumz: { name: "Ghostium Z", - desc: "If holder has a Ghost move, this item allows it to use a Ghost Z-Move.", + shortDesc: "If holder has a Ghost move, this item allows it to use a Ghost Z-Move.", }, glalitite: { name: "Glalitite", - desc: "If held by a Glalie, this item allows it to Mega Evolve in battle.", + shortDesc: "If held by a Glalie, this item allows it to Mega Evolve in battle.", }, goldbottlecap: { name: "Gold Bottle Cap", - desc: "Used for Hyper Training. All of a Pokemon's stats are calculated with an IV of 31.", + shortDesc: "Used for Hyper Training. All of a Pokemon's stats are calculated with an IV of 31.", }, grassgem: { name: "Grass Gem", - desc: "Holder's first successful Grass-type attack will have 1.3x power. Single use.", + shortDesc: "Holder's first successful Grass-type attack will have 1.3x power. Single use.", gen5: { - desc: "Holder's first successful Grass-type attack will have 1.5x power. Single use.", + shortDesc: "Holder's first successful Grass-type attack will have 1.5x power. Single use.", }, }, grassmemory: { name: "Grass Memory", - desc: "Holder's Multi-Attack is Grass type.", + shortDesc: "Holder's Multi-Attack is Grass type.", }, grassiumz: { name: "Grassium Z", - desc: "If holder has a Grass move, this item allows it to use a Grass Z-Move.", + shortDesc: "If holder has a Grass move, this item allows it to use a Grass Z-Move.", }, grassyseed: { name: "Grassy Seed", - desc: "If the terrain is Grassy Terrain, raises holder's Defense by 1 stage. Single use.", + shortDesc: "If the terrain is Grassy Terrain, raises holder's Defense by 1 stage. Single use.", }, greatball: { name: "Great Ball", - desc: "A high-performance Ball that provides a higher catch rate than a Poke Ball.", + shortDesc: "A high-performance Ball that provides a higher catch rate than a Poke Ball.", }, grepaberry: { name: "Grepa Berry", - desc: "Cannot be eaten by the holder. No effect when eaten with Bug Bite or Pluck.", + shortDesc: "Cannot be eaten by the holder. No effect when eaten with Bug Bite or Pluck.", }, gripclaw: { name: "Grip Claw", - desc: "Holder's partial-trapping moves always last 7 turns.", + shortDesc: "Holder's partial-trapping moves always last 7 turns.", }, griseouscore: { name: "Griseous Core", - desc: "If held by a Giratina, its Ghost- and Dragon-type attacks have 1.2x power.", + shortDesc: "If held by a Giratina, its Ghost- and Dragon-type attacks have 1.2x power.", }, griseousorb: { name: "Griseous Orb", - desc: "If held by a Giratina, its Ghost- and Dragon-type attacks have 1.2x power.", + shortDesc: "If held by a Giratina, its Ghost- and Dragon-type attacks have 1.2x power.", gen4: { - desc: "Can only be held by Giratina. Its Ghost- & Dragon-type attacks have 1.2x power.", + shortDesc: "Can only be held by Giratina. Its Ghost- & Dragon-type attacks have 1.2x power.", }, }, groundgem: { name: "Ground Gem", - desc: "Holder's first successful Ground-type attack will have 1.3x power. Single use.", + shortDesc: "Holder's first successful Ground-type attack will have 1.3x power. Single use.", gen5: { - desc: "Holder's first successful Ground-type attack will have 1.5x power. Single use.", + shortDesc: "Holder's first successful Ground-type attack will have 1.5x power. Single use.", }, }, groundmemory: { name: "Ground Memory", - desc: "Holder's Multi-Attack is Ground type.", + shortDesc: "Holder's Multi-Attack is Ground type.", }, groundiumz: { name: "Groundium Z", - desc: "If holder has a Ground move, this item allows it to use a Ground Z-Move.", + shortDesc: "If holder has a Ground move, this item allows it to use a Ground Z-Move.", }, gyaradosite: { name: "Gyaradosite", - desc: "If held by a Gyarados, this item allows it to Mega Evolve in battle.", + shortDesc: "If held by a Gyarados, this item allows it to Mega Evolve in battle.", }, habanberry: { name: "Haban Berry", - desc: "Halves damage taken from a supereffective Dragon-type attack. Single use.", + shortDesc: "Halves damage taken from a supereffective Dragon-type attack. Single use.", }, hardstone: { name: "Hard Stone", - desc: "Holder's Rock-type attacks have 1.2x power.", + shortDesc: "Holder's Rock-type attacks have 1.2x power.", gen3: { - desc: "Holder's Rock-type attacks have 1.1x power.", + shortDesc: "Holder's Rock-type attacks have 1.1x power.", }, }, healball: { name: "Heal Ball", - desc: "A remedial Poke Ball that restores the caught Pokemon's HP and status problem.", + shortDesc: "A remedial Poke Ball that restores the caught Pokemon's HP and status problem.", }, hearthflamemask: { name: "Hearthflame Mask", - desc: "Ogerpon-Hearthflame: 1.2x power attacks; Terastallize to gain Embody Aspect.", + shortDesc: "Ogerpon-Hearthflame: 1.2x power attacks; Terastallize to gain Embody Aspect.", }, heatrock: { name: "Heat Rock", - desc: "Holder's use of Sunny Day lasts 8 turns instead of 5.", + shortDesc: "Holder's use of Sunny Day lasts 8 turns instead of 5.", }, heavyball: { name: "Heavy Ball", - desc: "A Poke Ball for catching very heavy Pokemon.", + shortDesc: "A Poke Ball for catching very heavy Pokemon.", }, heavydutyboots: { name: "Heavy-Duty Boots", - desc: "When switching in, the holder is unaffected by hazards on its side of the field.", + shortDesc: "When switching in, the holder is unaffected by hazards on its side of the field.", }, helixfossil: { name: "Helix Fossil", - desc: "Can be revived into Omanyte.", + shortDesc: "Can be revived into Omanyte.", }, heracronite: { name: "Heracronite", - desc: "If held by a Heracross, this item allows it to Mega Evolve in battle.", + shortDesc: "If held by a Heracross, this item allows it to Mega Evolve in battle.", }, hondewberry: { name: "Hondew Berry", - desc: "Cannot be eaten by the holder. No effect when eaten with Bug Bite or Pluck.", + shortDesc: "Cannot be eaten by the holder. No effect when eaten with Bug Bite or Pluck.", }, houndoominite: { name: "Houndoominite", - desc: "If held by a Houndoom, this item allows it to Mega Evolve in battle.", + shortDesc: "If held by a Houndoom, this item allows it to Mega Evolve in battle.", }, iapapaberry: { name: "Iapapa Berry", - desc: "Restores 1/3 max HP at 1/4 max HP or less; confuses if -Def Nature. Single use.", + shortDesc: "Restores 1/3 max HP at 1/4 max HP or less; confuses if -Def Nature. Single use.", gen7: { - desc: "Restores 1/2 max HP at 1/4 max HP or less; confuses if -Def Nature. Single use.", + shortDesc: "Restores 1/2 max HP at 1/4 max HP or less; confuses if -Def Nature. Single use.", }, gen6: { - desc: "Restores 1/8 max HP at 1/2 max HP or less; confuses if -Def Nature. Single use.", + shortDesc: "Restores 1/8 max HP at 1/2 max HP or less; confuses if -Def Nature. Single use.", }, }, icegem: { name: "Ice Gem", - desc: "Holder's first successful Ice-type attack will have 1.3x power. Single use.", + shortDesc: "Holder's first successful Ice-type attack will have 1.3x power. Single use.", gen5: { - desc: "Holder's first successful Ice-type attack will have 1.5x power. Single use.", + shortDesc: "Holder's first successful Ice-type attack will have 1.5x power. Single use.", }, }, icememory: { name: "Ice Memory", - desc: "Holder's Multi-Attack is Ice type.", + shortDesc: "Holder's Multi-Attack is Ice type.", }, icestone: { name: "Ice Stone", @@ -838,62 +838,62 @@ export const ItemsText: {[k: string]: ItemText} = { }, icicleplate: { name: "Icicle Plate", - desc: "Holder's Ice-type attacks have 1.2x power. Judgment is Ice type.", + shortDesc: "Holder's Ice-type attacks have 1.2x power. Judgment is Ice type.", }, iciumz: { name: "Icium Z", - desc: "If holder has an Ice move, this item allows it to use an Ice Z-Move.", + shortDesc: "If holder has an Ice move, this item allows it to use an Ice Z-Move.", }, icyrock: { name: "Icy Rock", - desc: "Holder's use of Hail lasts 8 turns instead of 5.", + shortDesc: "Holder's use of Hail lasts 8 turns instead of 5.", }, inciniumz: { name: "Incinium Z", - desc: "If held by an Incineroar with Darkest Lariat, it can use Malicious Moonsault.", + shortDesc: "If held by an Incineroar with Darkest Lariat, it can use Malicious Moonsault.", }, insectplate: { name: "Insect Plate", - desc: "Holder's Bug-type attacks have 1.2x power. Judgment is Bug type.", + shortDesc: "Holder's Bug-type attacks have 1.2x power. Judgment is Bug type.", }, ironball: { name: "Iron Ball", - desc: "Holder is grounded, Speed halved. If Flying type, takes neutral Ground damage.", + shortDesc: "Holder is grounded, Speed halved. If Flying type, takes neutral Ground damage.", gen4: { - desc: "Holder's Speed is halved and it becomes grounded.", + shortDesc: "Holder's Speed is halved and it becomes grounded.", }, }, ironplate: { name: "Iron Plate", - desc: "Holder's Steel-type attacks have 1.2x power. Judgment is Steel type.", + shortDesc: "Holder's Steel-type attacks have 1.2x power. Judgment is Steel type.", }, jabocaberry: { name: "Jaboca Berry", - desc: "If holder is hit by a physical move, attacker loses 1/8 of its max HP. Single use.", + shortDesc: "If holder is hit by a physical move, attacker loses 1/8 of its max HP. Single use.", }, jawfossil: { name: "Jaw Fossil", - desc: "Can be revived into Tyrunt.", + shortDesc: "Can be revived into Tyrunt.", }, kasibberry: { name: "Kasib Berry", - desc: "Halves damage taken from a supereffective Ghost-type attack. Single use.", + shortDesc: "Halves damage taken from a supereffective Ghost-type attack. Single use.", }, kebiaberry: { name: "Kebia Berry", - desc: "Halves damage taken from a supereffective Poison-type attack. Single use.", + shortDesc: "Halves damage taken from a supereffective Poison-type attack. Single use.", }, keeberry: { name: "Kee Berry", - desc: "Raises holder's Defense by 1 stage after it is hit by a physical attack. Single use.", + shortDesc: "Raises holder's Defense by 1 stage after it is hit by a physical attack. Single use.", }, kelpsyberry: { name: "Kelpsy Berry", - desc: "Cannot be eaten by the holder. No effect when eaten with Bug Bite or Pluck.", + shortDesc: "Cannot be eaten by the holder. No effect when eaten with Bug Bite or Pluck.", }, kangaskhanite: { name: "Kangaskhanite", - desc: "If held by a Kangaskhan, this item allows it to Mega Evolve in battle.", + shortDesc: "If held by a Kangaskhan, this item allows it to Mega Evolve in battle.", }, kingsrock: { name: "King's Rock", @@ -902,29 +902,29 @@ export const ItemsText: {[k: string]: ItemText} = { }, kommoniumz: { name: "Kommonium Z", - desc: "If held by a Kommo-o with Clanging Scales, it can use Clangorous Soulblaze.", + shortDesc: "If held by a Kommo-o with Clanging Scales, it can use Clangorous Soulblaze.", }, laggingtail: { name: "Lagging Tail", - desc: "Holder moves last in its priority bracket.", + shortDesc: "Holder moves last in its priority bracket.", }, lansatberry: { name: "Lansat Berry", - desc: "Holder gains the Focus Energy effect when at 1/4 max HP or less. Single use.", + shortDesc: "Holder gains the Focus Energy effect when at 1/4 max HP or less. Single use.", }, latiasite: { name: "Latiasite", - desc: "If held by a Latias, this item allows it to Mega Evolve in battle.", + shortDesc: "If held by a Latias, this item allows it to Mega Evolve in battle.", }, latiosite: { name: "Latiosite", - desc: "If held by a Latios, this item allows it to Mega Evolve in battle.", + shortDesc: "If held by a Latios, this item allows it to Mega Evolve in battle.", }, laxincense: { name: "Lax Incense", - desc: "The accuracy of attacks against the holder is 0.9x.", + shortDesc: "The accuracy of attacks against the holder is 0.9x.", gen3: { - desc: "The accuracy of attacks against the holder is 0.95x.", + shortDesc: "The accuracy of attacks against the holder is 0.95x.", }, }, leafstone: { @@ -937,193 +937,193 @@ export const ItemsText: {[k: string]: ItemText} = { }, leek: { name: "Leek", - desc: "If held by a Farfetch’d or Sirfetch’d, its critical hit ratio is raised by 2 stages.", + shortDesc: "If held by a Farfetch’d or Sirfetch’d, its critical hit ratio is raised by 2 stages.", }, leftovers: { name: "Leftovers", - desc: "At the end of every turn, holder restores 1/16 of its max HP.", + shortDesc: "At the end of every turn, holder restores 1/16 of its max HP.", heal: " [POKEMON] restored a little HP using its Leftovers!", }, leppaberry: { name: "Leppa Berry", - desc: "Restores 10 PP to the first of the holder's moves to reach 0 PP. Single use.", + shortDesc: "Restores 10 PP to the first of the holder's moves to reach 0 PP. Single use.", activate: " [POKEMON] restored PP to its move [MOVE] using its Leppa Berry!", }, levelball: { name: "Level Ball", - desc: "A Poke Ball for catching Pokemon that are a lower level than your own.", + shortDesc: "A Poke Ball for catching Pokemon that are a lower level than your own.", }, liechiberry: { name: "Liechi Berry", - desc: "Raises holder's Attack by 1 stage when at 1/4 max HP or less. Single use.", + shortDesc: "Raises holder's Attack by 1 stage when at 1/4 max HP or less. Single use.", }, lifeorb: { name: "Life Orb", - desc: "Holder's attacks do 1.3x damage, and it loses 1/10 its max HP after the attack.", + shortDesc: "Holder's attacks do 1.3x damage, and it loses 1/10 its max HP after the attack.", damage: " [POKEMON] lost some of its HP!", }, lightball: { name: "Light Ball", - desc: "If held by a Pikachu, its Attack and Sp. Atk are doubled.", + shortDesc: "If held by a Pikachu, its Attack and Sp. Atk are doubled.", gen4: { - desc: "If held by a Pikachu, its attacks have their power doubled.", + shortDesc: "If held by a Pikachu, its attacks have their power doubled.", }, gen3: { - desc: "If held by a Pikachu, its Special Attack is doubled.", + shortDesc: "If held by a Pikachu, its Special Attack is doubled.", }, }, lightclay: { name: "Light Clay", - desc: "Holder's use of Aurora Veil, Light Screen, or Reflect lasts 8 turns instead of 5.", + shortDesc: "Holder's use of Aurora Veil, Light Screen, or Reflect lasts 8 turns instead of 5.", gen6: { - desc: "Holder's use of Light Screen or Reflect lasts 8 turns instead of 5.", + shortDesc: "Holder's use of Light Screen or Reflect lasts 8 turns instead of 5.", }, }, loadeddice: { name: "Loaded Dice", - desc: "Holder's moves that hit 2-5 times hit 4-5 times; Population Bomb hits 4-10 times.", + shortDesc: "Holder's moves that hit 2-5 times hit 4-5 times; Population Bomb hits 4-10 times.", }, lopunnite: { name: "Lopunnite", - desc: "If held by a Lopunny, this item allows it to Mega Evolve in battle.", + shortDesc: "If held by a Lopunny, this item allows it to Mega Evolve in battle.", }, loveball: { name: "Love Ball", - desc: "Poke Ball for catching Pokemon that are the opposite gender of your Pokemon.", + shortDesc: "Poke Ball for catching Pokemon that are the opposite gender of your Pokemon.", }, lovesweet: { name: "Love Sweet", - desc: "Evolves Milcery into Alcremie when held and spun around.", + shortDesc: "Evolves Milcery into Alcremie when held and spun around.", }, lucarionite: { name: "Lucarionite", - desc: "If held by a Lucario, this item allows it to Mega Evolve in battle.", + shortDesc: "If held by a Lucario, this item allows it to Mega Evolve in battle.", }, luckypunch: { name: "Lucky Punch", - desc: "If held by a Chansey, its critical hit ratio is raised by 2 stages.", + shortDesc: "If held by a Chansey, its critical hit ratio is raised by 2 stages.", gen2: { - desc: "If held by a Chansey, its critical hit ratio is always at stage 2. (25% crit rate)", + shortDesc: "If held by a Chansey, its critical hit ratio is always at stage 2. (25% crit rate)", }, }, lumberry: { name: "Lum Berry", - desc: "Holder cures itself if it has a non-volatile status or is confused. Single use.", + shortDesc: "Holder cures itself if it has a non-volatile status or is confused. Single use.", }, luminousmoss: { name: "Luminous Moss", - desc: "Raises holder's Sp. Def by 1 stage if hit by a Water-type attack. Single use.", + shortDesc: "Raises holder's Sp. Def by 1 stage if hit by a Water-type attack. Single use.", }, lunaliumz: { name: "Lunalium Z", - desc: "Lunala or Dawn Wings Necrozma with Moongeist Beam can use a special Z-Move.", + shortDesc: "Lunala or Dawn Wings Necrozma with Moongeist Beam can use a special Z-Move.", }, lureball: { name: "Lure Ball", - desc: "A Poke Ball for catching Pokemon hooked by a Rod when fishing.", + shortDesc: "A Poke Ball for catching Pokemon hooked by a Rod when fishing.", }, lustrousglobe: { name: "Lustrous Globe", - desc: "If held by a Palkia, its Water- and Dragon-type attacks have 1.2x power.", + shortDesc: "If held by a Palkia, its Water- and Dragon-type attacks have 1.2x power.", }, lustrousorb: { name: "Lustrous Orb", - desc: "If held by a Palkia, its Water- and Dragon-type attacks have 1.2x power.", + shortDesc: "If held by a Palkia, its Water- and Dragon-type attacks have 1.2x power.", }, luxuryball: { name: "Luxury Ball", - desc: "A comfortable Poke Ball that makes a caught wild Pokemon quickly grow friendly.", + shortDesc: "A comfortable Poke Ball that makes a caught wild Pokemon quickly grow friendly.", }, lycaniumz: { name: "Lycanium Z", - desc: "If held by a Lycanroc forme with Stone Edge, it can use Splintered Stormshards.", + shortDesc: "If held by a Lycanroc forme with Stone Edge, it can use Splintered Stormshards.", }, machobrace: { name: "Macho Brace", - desc: "Holder's Speed is halved. The Klutz Ability does not ignore this effect.", + shortDesc: "Holder's Speed is halved. The Klutz Ability does not ignore this effect.", }, magmarizer: { name: "Magmarizer", - desc: "Evolves Magmar into Magmortar when traded.", + shortDesc: "Evolves Magmar into Magmortar when traded.", }, magnet: { name: "Magnet", - desc: "Holder's Electric-type attacks have 1.2x power.", + shortDesc: "Holder's Electric-type attacks have 1.2x power.", gen3: { - desc: "Holder's Electric-type attacks have 1.1x power.", + shortDesc: "Holder's Electric-type attacks have 1.1x power.", }, }, magoberry: { name: "Mago Berry", - desc: "Restores 1/3 max HP at 1/4 max HP or less; confuses if -Spe Nature. Single use.", + shortDesc: "Restores 1/3 max HP at 1/4 max HP or less; confuses if -Spe Nature. Single use.", gen7: { - desc: "Restores 1/2 max HP at 1/4 max HP or less; confuses if -Spe Nature. Single use.", + shortDesc: "Restores 1/2 max HP at 1/4 max HP or less; confuses if -Spe Nature. Single use.", }, gen6: { - desc: "Restores 1/8 max HP at 1/2 max HP or less; confuses if -Spe Nature. Single use.", + shortDesc: "Restores 1/8 max HP at 1/2 max HP or less; confuses if -Spe Nature. Single use.", }, }, magostberry: { name: "Magost Berry", - desc: "Cannot be eaten by the holder. No effect when eaten with Bug Bite or Pluck.", + shortDesc: "Cannot be eaten by the holder. No effect when eaten with Bug Bite or Pluck.", }, mail: { name: "Mail", - desc: "Cannot be given to or taken from a Pokemon, except by Covet/Knock Off/Thief.", + shortDesc: "Cannot be given to or taken from a Pokemon, except by Covet/Knock Off/Thief.", }, maliciousarmor: { name: "Malicious Armor", - desc: "Evolves Charcadet into Ceruledge when used.", + shortDesc: "Evolves Charcadet into Ceruledge when used.", }, manectite: { name: "Manectite", - desc: "If held by a Manectric, this item allows it to Mega Evolve in battle.", + shortDesc: "If held by a Manectric, this item allows it to Mega Evolve in battle.", }, marangaberry: { name: "Maranga Berry", - desc: "Raises holder's Sp. Def by 1 stage after it is hit by a special attack. Single use.", + shortDesc: "Raises holder's Sp. Def by 1 stage after it is hit by a special attack. Single use.", }, marshadiumz: { name: "Marshadium Z", - desc: "If held by Marshadow with Spectral Thief, it can use Soul-Stealing 7-Star Strike.", + shortDesc: "If held by Marshadow with Spectral Thief, it can use Soul-Stealing 7-Star Strike.", }, masterball: { name: "Master Ball", - desc: "The best Ball with the ultimate performance. It will catch any wild Pokemon.", + shortDesc: "The best Ball with the ultimate performance. It will catch any wild Pokemon.", }, masterpieceteacup: { name: "Masterpiece Teacup", - desc: "Evolves Poltchageist-Artisan into Sinistcha-Masterpiece when used.", + shortDesc: "Evolves Poltchageist-Artisan into Sinistcha-Masterpiece when used.", }, mawilite: { name: "Mawilite", - desc: "If held by a Mawile, this item allows it to Mega Evolve in battle.", + shortDesc: "If held by a Mawile, this item allows it to Mega Evolve in battle.", }, meadowplate: { name: "Meadow Plate", - desc: "Holder's Grass-type attacks have 1.2x power. Judgment is Grass type.", + shortDesc: "Holder's Grass-type attacks have 1.2x power. Judgment is Grass type.", }, medichamite: { name: "Medichamite", - desc: "If held by a Medicham, this item allows it to Mega Evolve in battle.", + shortDesc: "If held by a Medicham, this item allows it to Mega Evolve in battle.", }, mentalherb: { name: "Mental Herb", - desc: "Cures holder of Attract, Disable, Encore, Heal Block, Taunt, Torment. Single use.", + shortDesc: "Cures holder of Attract, Disable, Encore, Heal Block, Taunt, Torment. Single use.", gen4: { - desc: "Holder is cured if it is infatuated. Single use.", + shortDesc: "Holder is cured if it is infatuated. Single use.", }, }, metagrossite: { name: "Metagrossite", - desc: "If held by a Metagross, this item allows it to Mega Evolve in battle.", + shortDesc: "If held by a Metagross, this item allows it to Mega Evolve in battle.", }, metalalloy: { name: "Metal Alloy", - desc: "Evolves Duraludon into Archaludon when used.", + shortDesc: "Evolves Duraludon into Archaludon when used.", }, metalcoat: { name: "Metal Coat", @@ -1136,62 +1136,62 @@ export const ItemsText: {[k: string]: ItemText} = { }, metalpowder: { name: "Metal Powder", - desc: "If held by a Ditto that hasn't Transformed, its Defense is doubled.", + shortDesc: "If held by a Ditto that hasn't Transformed, its Defense is doubled.", gen2: { - desc: "If held by a Ditto, its Defense and Sp. Def are 1.5x, even while Transformed.", + shortDesc: "If held by a Ditto, its Defense and Sp. Def are 1.5x, even while Transformed.", }, }, metronome: { name: "Metronome", - desc: "Damage of moves used on consecutive turns is increased. Max 2x after 5 turns.", + shortDesc: "Damage of moves used on consecutive turns is increased. Max 2x after 5 turns.", gen4: { - desc: "Damage of moves used on consecutive turns is increased. Max 2x after 10 turns.", + shortDesc: "Damage of moves used on consecutive turns is increased. Max 2x after 10 turns.", }, }, mewniumz: { name: "Mewnium Z", - desc: "If held by a Mew with Psychic, it can use Genesis Supernova.", + shortDesc: "If held by a Mew with Psychic, it can use Genesis Supernova.", }, mewtwonitex: { name: "Mewtwonite X", - desc: "If held by a Mewtwo, this item allows it to Mega Evolve in battle.", + shortDesc: "If held by a Mewtwo, this item allows it to Mega Evolve in battle.", }, mewtwonitey: { name: "Mewtwonite Y", - desc: "If held by a Mewtwo, this item allows it to Mega Evolve in battle.", + shortDesc: "If held by a Mewtwo, this item allows it to Mega Evolve in battle.", }, micleberry: { name: "Micle Berry", - desc: "Holder's next move has 1.2x accuracy when at 1/4 max HP or less. Single use.", + shortDesc: "Holder's next move has 1.2x accuracy when at 1/4 max HP or less. Single use.", }, mimikiumz: { name: "Mimikium Z", - desc: "If held by a Mimikyu with Play Rough, it can use Let's Snuggle Forever.", + shortDesc: "If held by a Mimikyu with Play Rough, it can use Let's Snuggle Forever.", }, mindplate: { name: "Mind Plate", - desc: "Holder's Psychic-type attacks have 1.2x power. Judgment is Psychic type.", + shortDesc: "Holder's Psychic-type attacks have 1.2x power. Judgment is Psychic type.", }, miracleseed: { name: "Miracle Seed", - desc: "Holder's Grass-type attacks have 1.2x power.", + shortDesc: "Holder's Grass-type attacks have 1.2x power.", gen3: { - desc: "Holder's Grass-type attacks have 1.1x power.", + shortDesc: "Holder's Grass-type attacks have 1.1x power.", }, }, mirrorherb: { name: "Mirror Herb", - desc: "When an opposing Pokemon raises a stat stage, the holder copies it. Single use.", + shortDesc: "When an opposing Pokemon raises a stat stage, the holder copies it. Single use.", activate: " [POKEMON] used its Mirror Herb to mirror its opponent's stat changes!", }, mistyseed: { name: "Misty Seed", - desc: "If the terrain is Misty Terrain, raises holder's Sp. Def by 1 stage. Single use.", + shortDesc: "If the terrain is Misty Terrain, raises holder's Sp. Def by 1 stage. Single use.", }, moonball: { name: "Moon Ball", - desc: "A Poke Ball for catching Pokemon that evolve using the Moon Stone.", + shortDesc: "A Poke Ball for catching Pokemon that evolve using the Moon Stone.", }, moonstone: { name: "Moon Stone", @@ -1200,262 +1200,262 @@ export const ItemsText: {[k: string]: ItemText} = { }, muscleband: { name: "Muscle Band", - desc: "Holder's physical attacks have 1.1x power.", + shortDesc: "Holder's physical attacks have 1.1x power.", }, mysticwater: { name: "Mystic Water", - desc: "Holder's Water-type attacks have 1.2x power.", + shortDesc: "Holder's Water-type attacks have 1.2x power.", gen3: { - desc: "Holder's Water-type attacks have 1.1x power.", + shortDesc: "Holder's Water-type attacks have 1.1x power.", }, }, nanabberry: { name: "Nanab Berry", - desc: "Cannot be eaten by the holder. No effect when eaten with Bug Bite or Pluck.", + shortDesc: "Cannot be eaten by the holder. No effect when eaten with Bug Bite or Pluck.", }, nestball: { name: "Nest Ball", - desc: "A Poke Ball that works especially well on weaker Pokemon in the wild.", + shortDesc: "A Poke Ball that works especially well on weaker Pokemon in the wild.", }, netball: { name: "Net Ball", - desc: "A Poke Ball that works especially well on Water- and Bug-type Pokemon.", + shortDesc: "A Poke Ball that works especially well on Water- and Bug-type Pokemon.", }, nevermeltice: { name: "Never-Melt Ice", - desc: "Holder's Ice-type attacks have 1.2x power.", + shortDesc: "Holder's Ice-type attacks have 1.2x power.", gen3: { - desc: "Holder's Ice-type attacks have 1.1x power.", + shortDesc: "Holder's Ice-type attacks have 1.1x power.", }, }, nomelberry: { name: "Nomel Berry", - desc: "Cannot be eaten by the holder. No effect when eaten with Bug Bite or Pluck.", + shortDesc: "Cannot be eaten by the holder. No effect when eaten with Bug Bite or Pluck.", }, normalgem: { name: "Normal Gem", - desc: "Holder's first successful Normal-type attack will have 1.3x power. Single use.", + shortDesc: "Holder's first successful Normal-type attack will have 1.3x power. Single use.", gen5: { - desc: "Holder's first successful Normal-type attack will have 1.5x power. Single use.", + shortDesc: "Holder's first successful Normal-type attack will have 1.5x power. Single use.", }, }, normaliumz: { name: "Normalium Z", - desc: "If holder has a Normal move, this item allows it to use a Normal Z-Move.", + shortDesc: "If holder has a Normal move, this item allows it to use a Normal Z-Move.", }, occaberry: { name: "Occa Berry", - desc: "Halves damage taken from a supereffective Fire-type attack. Single use.", + shortDesc: "Halves damage taken from a supereffective Fire-type attack. Single use.", }, oddincense: { name: "Odd Incense", - desc: "Holder's Psychic-type attacks have 1.2x power.", + shortDesc: "Holder's Psychic-type attacks have 1.2x power.", }, oldamber: { name: "Old Amber", - desc: "Can be revived into Aerodactyl.", + shortDesc: "Can be revived into Aerodactyl.", }, oranberry: { name: "Oran Berry", - desc: "Restores 10 HP when at 1/2 max HP or less. Single use.", + shortDesc: "Restores 10 HP when at 1/2 max HP or less. Single use.", }, ovalstone: { name: "Oval Stone", - desc: "Evolves Happiny into Chansey when held and leveled up during the day.", + shortDesc: "Evolves Happiny into Chansey when held and leveled up during the day.", }, pamtreberry: { name: "Pamtre Berry", - desc: "Cannot be eaten by the holder. No effect when eaten with Bug Bite or Pluck.", + shortDesc: "Cannot be eaten by the holder. No effect when eaten with Bug Bite or Pluck.", }, parkball: { name: "Park Ball", - desc: "A special Poke Ball for the Pal Park.", + shortDesc: "A special Poke Ball for the Pal Park.", }, passhoberry: { name: "Passho Berry", - desc: "Halves damage taken from a supereffective Water-type attack. Single use.", + shortDesc: "Halves damage taken from a supereffective Water-type attack. Single use.", }, payapaberry: { name: "Payapa Berry", - desc: "Halves damage taken from a supereffective Psychic-type attack. Single use.", + shortDesc: "Halves damage taken from a supereffective Psychic-type attack. Single use.", }, pechaberry: { name: "Pecha Berry", - desc: "Holder is cured if it is poisoned. Single use.", + shortDesc: "Holder is cured if it is poisoned. Single use.", }, persimberry: { name: "Persim Berry", - desc: "Holder is cured if it is confused. Single use.", + shortDesc: "Holder is cured if it is confused. Single use.", }, petayaberry: { name: "Petaya Berry", - desc: "Raises holder's Sp. Atk by 1 stage when at 1/4 max HP or less. Single use.", + shortDesc: "Raises holder's Sp. Atk by 1 stage when at 1/4 max HP or less. Single use.", }, pidgeotite: { name: "Pidgeotite", - desc: "If held by a Pidgeot, this item allows it to Mega Evolve in battle.", + shortDesc: "If held by a Pidgeot, this item allows it to Mega Evolve in battle.", }, pikaniumz: { name: "Pikanium Z", - desc: "If held by a Pikachu with Volt Tackle, it can use Catastropika.", + shortDesc: "If held by a Pikachu with Volt Tackle, it can use Catastropika.", }, pikashuniumz: { name: "Pikashunium Z", - desc: "If held by cap Pikachu with Thunderbolt, it can use 10,000,000 Volt Thunderbolt.", + shortDesc: "If held by cap Pikachu with Thunderbolt, it can use 10,000,000 Volt Thunderbolt.", }, pinapberry: { name: "Pinap Berry", - desc: "Cannot be eaten by the holder. No effect when eaten with Bug Bite or Pluck.", + shortDesc: "Cannot be eaten by the holder. No effect when eaten with Bug Bite or Pluck.", }, pinsirite: { name: "Pinsirite", - desc: "If held by a Pinsir, this item allows it to Mega Evolve in battle.", + shortDesc: "If held by a Pinsir, this item allows it to Mega Evolve in battle.", }, pixieplate: { name: "Pixie Plate", - desc: "Holder's Fairy-type attacks have 1.2x power. Judgment is Fairy type.", + shortDesc: "Holder's Fairy-type attacks have 1.2x power. Judgment is Fairy type.", }, plumefossil: { name: "Plume Fossil", - desc: "Can be revived into Archen.", + shortDesc: "Can be revived into Archen.", }, poisonbarb: { name: "Poison Barb", - desc: "Holder's Poison-type attacks have 1.2x power.", + shortDesc: "Holder's Poison-type attacks have 1.2x power.", gen3: { - desc: "Holder's Poison-type attacks have 1.1x power.", + shortDesc: "Holder's Poison-type attacks have 1.1x power.", }, }, poisongem: { name: "Poison Gem", - desc: "Holder's first successful Poison-type attack will have 1.3x power. Single use.", + shortDesc: "Holder's first successful Poison-type attack will have 1.3x power. Single use.", gen5: { - desc: "Holder's first successful Poison-type attack will have 1.5x power. Single use.", + shortDesc: "Holder's first successful Poison-type attack will have 1.5x power. Single use.", }, }, poisonmemory: { name: "Poison Memory", - desc: "Holder's Multi-Attack is Poison type.", + shortDesc: "Holder's Multi-Attack is Poison type.", }, poisoniumz: { name: "Poisonium Z", - desc: "If holder has a Poison move, this item allows it to use a Poison Z-Move.", + shortDesc: "If holder has a Poison move, this item allows it to use a Poison Z-Move.", }, pokeball: { name: "Poke Ball", - desc: "A device for catching wild Pokemon. It is designed as a capsule system.", + shortDesc: "A device for catching wild Pokemon. It is designed as a capsule system.", }, pomegberry: { name: "Pomeg Berry", - desc: "Cannot be eaten by the holder. No effect when eaten with Bug Bite or Pluck.", + shortDesc: "Cannot be eaten by the holder. No effect when eaten with Bug Bite or Pluck.", }, poweranklet: { name: "Power Anklet", - desc: "Holder's Speed is halved. The Klutz Ability does not ignore this effect.", + shortDesc: "Holder's Speed is halved. The Klutz Ability does not ignore this effect.", }, powerband: { name: "Power Band", - desc: "Holder's Speed is halved. The Klutz Ability does not ignore this effect.", + shortDesc: "Holder's Speed is halved. The Klutz Ability does not ignore this effect.", }, powerbelt: { name: "Power Belt", - desc: "Holder's Speed is halved. The Klutz Ability does not ignore this effect.", + shortDesc: "Holder's Speed is halved. The Klutz Ability does not ignore this effect.", }, powerbracer: { name: "Power Bracer", - desc: "Holder's Speed is halved. The Klutz Ability does not ignore this effect.", + shortDesc: "Holder's Speed is halved. The Klutz Ability does not ignore this effect.", }, powerherb: { name: "Power Herb", - desc: "Holder's two-turn moves complete in one turn (except Sky Drop). Single use.", + shortDesc: "Holder's two-turn moves complete in one turn (except Sky Drop). Single use.", end: " [POKEMON] became fully charged due to its Power Herb!", }, powerlens: { name: "Power Lens", - desc: "Holder's Speed is halved. The Klutz Ability does not ignore this effect.", + shortDesc: "Holder's Speed is halved. The Klutz Ability does not ignore this effect.", }, powerweight: { name: "Power Weight", - desc: "Holder's Speed is halved. The Klutz Ability does not ignore this effect.", + shortDesc: "Holder's Speed is halved. The Klutz Ability does not ignore this effect.", }, premierball: { name: "Premier Ball", - desc: "A rare Poke Ball that has been crafted to commemorate an event.", + shortDesc: "A rare Poke Ball that has been crafted to commemorate an event.", }, primariumz: { name: "Primarium Z", - desc: "If held by a Primarina with Sparkling Aria, it can use Oceanic Operetta.", + shortDesc: "If held by a Primarina with Sparkling Aria, it can use Oceanic Operetta.", }, prismscale: { name: "Prism Scale", - desc: "Evolves Feebas into Milotic when traded.", + shortDesc: "Evolves Feebas into Milotic when traded.", }, protectivepads: { name: "Protective Pads", - desc: "Holder's moves are protected from adverse contact effects, except Pickpocket.", + shortDesc: "Holder's moves are protected from adverse contact effects, except Pickpocket.", block: " [POKEMON] protected itself with its Protective Pads!", }, protector: { name: "Protector", - desc: "Evolves Rhydon into Rhyperior when traded.", + shortDesc: "Evolves Rhydon into Rhyperior when traded.", }, psychicgem: { name: "Psychic Gem", - desc: "Holder's first successful Psychic-type attack will have 1.3x power. Single use.", + shortDesc: "Holder's first successful Psychic-type attack will have 1.3x power. Single use.", gen5: { - desc: "Holder's first successful Psychic-type attack will have 1.5x power. Single use.", + shortDesc: "Holder's first successful Psychic-type attack will have 1.5x power. Single use.", }, }, psychicmemory: { name: "Psychic Memory", - desc: "Holder's Multi-Attack is Psychic type.", + shortDesc: "Holder's Multi-Attack is Psychic type.", }, psychicseed: { name: "Psychic Seed", - desc: "If the terrain is Psychic Terrain, raises holder's Sp. Def by 1 stage. Single use.", + shortDesc: "If the terrain is Psychic Terrain, raises holder's Sp. Def by 1 stage. Single use.", }, psychiumz: { name: "Psychium Z", - desc: "If holder has a Psychic move, this item allows it to use a Psychic Z-Move.", + shortDesc: "If holder has a Psychic move, this item allows it to use a Psychic Z-Move.", }, punchingglove: { name: "Punching Glove", - desc: "Holder's punch-based attacks have 1.1x power and do not make contact.", + shortDesc: "Holder's punch-based attacks have 1.1x power and do not make contact.", }, qualotberry: { name: "Qualot Berry", - desc: "Cannot be eaten by the holder. No effect when eaten with Bug Bite or Pluck.", + shortDesc: "Cannot be eaten by the holder. No effect when eaten with Bug Bite or Pluck.", }, quickball: { name: "Quick Ball", - desc: "A Poke Ball that provides a better catch rate at the start of a wild encounter.", + shortDesc: "A Poke Ball that provides a better catch rate at the start of a wild encounter.", }, quickclaw: { name: "Quick Claw", - desc: "Each turn, holder has a 20% chance to move first in its priority bracket.", + shortDesc: "Each turn, holder has a 20% chance to move first in its priority bracket.", gen2: { - desc: "Each turn, holder has a ~23.4% chance to move first in its priority bracket.", + shortDesc: "Each turn, holder has a ~23.4% chance to move first in its priority bracket.", }, activate: " [POKEMON] can act faster than normal, thanks to its Quick Claw!", }, quickpowder: { name: "Quick Powder", - desc: "If held by a Ditto that hasn't Transformed, its Speed is doubled.", + shortDesc: "If held by a Ditto that hasn't Transformed, its Speed is doubled.", }, rabutaberry: { name: "Rabuta Berry", - desc: "Cannot be eaten by the holder. No effect when eaten with Bug Bite or Pluck.", + shortDesc: "Cannot be eaten by the holder. No effect when eaten with Bug Bite or Pluck.", }, rarebone: { name: "Rare Bone", - desc: "No competitive use other than when used with Fling.", + shortDesc: "No competitive use other than when used with Fling.", }, rawstberry: { name: "Rawst Berry", - desc: "Holder is cured if it is burned. Single use.", + shortDesc: "Holder is cured if it is burned. Single use.", }, razorclaw: { name: "Razor Claw", @@ -1469,158 +1469,158 @@ export const ItemsText: {[k: string]: ItemText} = { }, razzberry: { name: "Razz Berry", - desc: "Cannot be eaten by the holder. No effect when eaten with Bug Bite or Pluck.", + shortDesc: "Cannot be eaten by the holder. No effect when eaten with Bug Bite or Pluck.", }, reapercloth: { name: "Reaper Cloth", - desc: "Evolves Dusclops into Dusknoir when traded.", + shortDesc: "Evolves Dusclops into Dusknoir when traded.", }, redcard: { name: "Red Card", - desc: "If holder survives a hit, attacker is forced to switch to a random ally. Single use.", + shortDesc: "If holder survives a hit, attacker is forced to switch to a random ally. Single use.", end: " [POKEMON] held up its Red Card against [TARGET]!", }, redorb: { name: "Red Orb", - desc: "If held by a Groudon, this item triggers its Primal Reversion in battle.", + shortDesc: "If held by a Groudon, this item triggers its Primal Reversion in battle.", }, repeatball: { name: "Repeat Ball", - desc: "A Poke Ball that works well on Pokemon species that were previously caught.", + shortDesc: "A Poke Ball that works well on Pokemon species that were previously caught.", }, ribbonsweet: { name: "Ribbon Sweet", - desc: "Evolves Milcery into Alcremie when held and spun around.", + shortDesc: "Evolves Milcery into Alcremie when held and spun around.", }, rindoberry: { name: "Rindo Berry", - desc: "Halves damage taken from a supereffective Grass-type attack. Single use.", + shortDesc: "Halves damage taken from a supereffective Grass-type attack. Single use.", }, ringtarget: { name: "Ring Target", - desc: "The holder's type immunities granted solely by its typing are negated.", + shortDesc: "The holder's type immunities granted solely by its typing are negated.", }, rockgem: { name: "Rock Gem", - desc: "Holder's first successful Rock-type attack will have 1.3x power. Single use.", + shortDesc: "Holder's first successful Rock-type attack will have 1.3x power. Single use.", gen5: { - desc: "Holder's first successful Rock-type attack will have 1.5x power. Single use.", + shortDesc: "Holder's first successful Rock-type attack will have 1.5x power. Single use.", }, }, rockincense: { name: "Rock Incense", - desc: "Holder's Rock-type attacks have 1.2x power.", + shortDesc: "Holder's Rock-type attacks have 1.2x power.", }, rockmemory: { name: "Rock Memory", - desc: "Holder's Multi-Attack is Rock type.", + shortDesc: "Holder's Multi-Attack is Rock type.", }, rockiumz: { name: "Rockium Z", - desc: "If holder has a Rock move, this item allows it to use a Rock Z-Move.", + shortDesc: "If holder has a Rock move, this item allows it to use a Rock Z-Move.", }, rockyhelmet: { name: "Rocky Helmet", - desc: "If holder is hit by a contact move, the attacker loses 1/6 of its max HP.", + shortDesc: "If holder is hit by a contact move, the attacker loses 1/6 of its max HP.", damage: " [POKEMON] was hurt by the Rocky Helmet!", }, roomservice: { name: "Room Service", - desc: "If Trick Room is active, the holder's Speed is lowered by 1 stage. Single use.", + shortDesc: "If Trick Room is active, the holder's Speed is lowered by 1 stage. Single use.", }, rootfossil: { name: "Root Fossil", - desc: "Can be revived into Lileep.", + shortDesc: "Can be revived into Lileep.", }, roseincense: { name: "Rose Incense", - desc: "Holder's Grass-type attacks have 1.2x power.", + shortDesc: "Holder's Grass-type attacks have 1.2x power.", }, roseliberry: { name: "Roseli Berry", - desc: "Halves damage taken from a supereffective Fairy-type attack. Single use.", + shortDesc: "Halves damage taken from a supereffective Fairy-type attack. Single use.", }, rowapberry: { name: "Rowap Berry", - desc: "If holder is hit by a special move, attacker loses 1/8 of its max HP. Single use.", + shortDesc: "If holder is hit by a special move, attacker loses 1/8 of its max HP. Single use.", }, rustedshield: { name: "Rusted Shield", - desc: "If held by a Zamazenta, this item changes its forme to Crowned Shield.", + shortDesc: "If held by a Zamazenta, this item changes its forme to Crowned Shield.", }, rustedsword: { name: "Rusted Sword", - desc: "If held by a Zacian, this item changes its forme to Crowned Sword.", + shortDesc: "If held by a Zacian, this item changes its forme to Crowned Sword.", }, sablenite: { name: "Sablenite", - desc: "If held by a Sableye, this item allows it to Mega Evolve in battle.", + shortDesc: "If held by a Sableye, this item allows it to Mega Evolve in battle.", }, sachet: { name: "Sachet", - desc: "Evolves Spritzee into Aromatisse when traded.", + shortDesc: "Evolves Spritzee into Aromatisse when traded.", }, safariball: { name: "Safari Ball", - desc: "A special Poke Ball that is used only in the Safari Zone and Great Marsh.", + shortDesc: "A special Poke Ball that is used only in the Safari Zone and Great Marsh.", }, safetygoggles: { name: "Safety Goggles", - desc: "Holder is immune to powder moves and damage from Sandstorm or Hail.", + shortDesc: "Holder is immune to powder moves and damage from Sandstorm or Hail.", block: " [POKEMON] is not affected by [MOVE] thanks to its Safety Goggles!", }, sailfossil: { name: "Sail Fossil", - desc: "Can be revived into Amaura.", + shortDesc: "Can be revived into Amaura.", }, salacberry: { name: "Salac Berry", - desc: "Raises holder's Speed by 1 stage when at 1/4 max HP or less. Single use.", + shortDesc: "Raises holder's Speed by 1 stage when at 1/4 max HP or less. Single use.", }, salamencite: { name: "Salamencite", - desc: "If held by a Salamence, this item allows it to Mega Evolve in battle.", + shortDesc: "If held by a Salamence, this item allows it to Mega Evolve in battle.", }, sceptilite: { name: "Sceptilite", - desc: "If held by a Sceptile, this item allows it to Mega Evolve in battle.", + shortDesc: "If held by a Sceptile, this item allows it to Mega Evolve in battle.", }, scizorite: { name: "Scizorite", - desc: "If held by a Scizor, this item allows it to Mega Evolve in battle.", + shortDesc: "If held by a Scizor, this item allows it to Mega Evolve in battle.", }, scopelens: { name: "Scope Lens", - desc: "Holder's critical hit ratio is raised by 1 stage.", + shortDesc: "Holder's critical hit ratio is raised by 1 stage.", }, seaincense: { name: "Sea Incense", - desc: "Holder's Water-type attacks have 1.2x power.", + shortDesc: "Holder's Water-type attacks have 1.2x power.", gen3: { - desc: "Holder's Water-type attacks have 1.05x power.", + shortDesc: "Holder's Water-type attacks have 1.05x power.", }, }, sharpbeak: { name: "Sharp Beak", - desc: "Holder's Flying-type attacks have 1.2x power.", + shortDesc: "Holder's Flying-type attacks have 1.2x power.", gen3: { - desc: "Holder's Flying-type attacks have 1.1x power.", + shortDesc: "Holder's Flying-type attacks have 1.1x power.", }, }, sharpedonite: { name: "Sharpedonite", - desc: "If held by a Sharpedo, this item allows it to Mega Evolve in battle.", + shortDesc: "If held by a Sharpedo, this item allows it to Mega Evolve in battle.", }, shedshell: { name: "Shed Shell", - desc: "Holder may switch out even when trapped by another Pokemon, or by Ingrain.", + shortDesc: "Holder may switch out even when trapped by another Pokemon, or by Ingrain.", }, shellbell: { name: "Shell Bell", - desc: "After an attack, holder gains 1/8 of the damage in HP dealt to other Pokemon.", + shortDesc: "After an attack, holder gains 1/8 of the damage in HP dealt to other Pokemon.", heal: " [POKEMON] restored a little HP using its Shell Bell!", }, @@ -1631,143 +1631,147 @@ export const ItemsText: {[k: string]: ItemText} = { }, shockdrive: { name: "Shock Drive", - desc: "Holder's Techno Blast is Electric type.", + shortDesc: "Holder's Techno Blast is Electric type.", }, shucaberry: { name: "Shuca Berry", - desc: "Halves damage taken from a supereffective Ground-type attack. Single use.", + shortDesc: "Halves damage taken from a supereffective Ground-type attack. Single use.", }, silkscarf: { name: "Silk Scarf", - desc: "Holder's Normal-type attacks have 1.2x power.", + shortDesc: "Holder's Normal-type attacks have 1.2x power.", gen3: { - desc: "Holder's Normal-type attacks have 1.1x power.", + shortDesc: "Holder's Normal-type attacks have 1.1x power.", }, }, silverpowder: { name: "Silver Powder", - desc: "Holder's Bug-type attacks have 1.2x power.", + shortDesc: "Holder's Bug-type attacks have 1.2x power.", gen3: { - desc: "Holder's Bug-type attacks have 1.1x power.", + shortDesc: "Holder's Bug-type attacks have 1.1x power.", }, }, sitrusberry: { name: "Sitrus Berry", - desc: "Restores 1/4 max HP when at 1/2 max HP or less. Single use.", + shortDesc: "Restores 1/4 max HP when at 1/2 max HP or less. Single use.", gen3: { - desc: "Restores 30 HP when at 1/2 max HP or less. Single use.", + shortDesc: "Restores 30 HP when at 1/2 max HP or less. Single use.", }, }, skullfossil: { name: "Skull Fossil", - desc: "Can be revived into Cranidos.", + shortDesc: "Can be revived into Cranidos.", }, skyplate: { name: "Sky Plate", - desc: "Holder's Flying-type attacks have 1.2x power. Judgment is Flying type.", + shortDesc: "Holder's Flying-type attacks have 1.2x power. Judgment is Flying type.", }, slowbronite: { name: "Slowbronite", - desc: "If held by a Slowbro, this item allows it to Mega Evolve in battle.", + shortDesc: "If held by a Slowbro, this item allows it to Mega Evolve in battle.", }, smoothrock: { name: "Smooth Rock", - desc: "Holder's use of Sandstorm lasts 8 turns instead of 5.", + shortDesc: "Holder's use of Sandstorm lasts 8 turns instead of 5.", }, snorliumz: { name: "Snorlium Z", - desc: "If held by a Snorlax with Giga Impact, it can use Pulverizing Pancake.", + shortDesc: "If held by a Snorlax with Giga Impact, it can use Pulverizing Pancake.", }, snowball: { name: "Snowball", - desc: "Raises holder's Attack by 1 if hit by an Ice-type attack. Single use.", + shortDesc: "Raises holder's Attack by 1 if hit by an Ice-type attack. Single use.", }, softsand: { name: "Soft Sand", - desc: "Holder's Ground-type attacks have 1.2x power.", + shortDesc: "Holder's Ground-type attacks have 1.2x power.", gen3: { - desc: "Holder's Ground-type attacks have 1.1x power.", + shortDesc: "Holder's Ground-type attacks have 1.1x power.", }, }, solganiumz: { name: "Solganium Z", - desc: "Solgaleo or Dusk Mane Necrozma with Sunsteel Strike can use a special Z-Move.", + shortDesc: "Solgaleo or Dusk Mane Necrozma with Sunsteel Strike can use a special Z-Move.", }, souldew: { name: "Soul Dew", - desc: "If held by a Latias/Latios, its Dragon- and Psychic-type moves have 1.2x power.", + shortDesc: "If held by a Latias/Latios, its Dragon- and Psychic-type moves have 1.2x power.", gen6: { - desc: "If held by a Latias or a Latios, its Sp. Atk and Sp. Def are 1.5x.", + shortDesc: "If held by a Latias or a Latios, its Sp. Atk and Sp. Def are 1.5x.", }, }, spelltag: { name: "Spell Tag", - desc: "Holder's Ghost-type attacks have 1.2x power.", + shortDesc: "Holder's Ghost-type attacks have 1.2x power.", gen3: { - desc: "Holder's Ghost-type attacks have 1.1x power.", + shortDesc: "Holder's Ghost-type attacks have 1.1x power.", }, }, spelonberry: { name: "Spelon Berry", - desc: "Cannot be eaten by the holder. No effect when eaten with Bug Bite or Pluck.", + shortDesc: "Cannot be eaten by the holder. No effect when eaten with Bug Bite or Pluck.", }, splashplate: { name: "Splash Plate", - desc: "Holder's Water-type attacks have 1.2x power. Judgment is Water type.", + shortDesc: "Holder's Water-type attacks have 1.2x power. Judgment is Water type.", }, spookyplate: { name: "Spooky Plate", - desc: "Holder's Ghost-type attacks have 1.2x power. Judgment is Ghost type.", + shortDesc: "Holder's Ghost-type attacks have 1.2x power. Judgment is Ghost type.", }, sportball: { name: "Sport Ball", - desc: "A special Poke Ball for the Bug-Catching Contest.", + shortDesc: "A special Poke Ball for the Bug-Catching Contest.", }, starfberry: { name: "Starf Berry", - desc: "Raises a random stat by 2 when at 1/4 max HP or less (not acc/eva). Single use.", + shortDesc: "Raises a random stat by 2 when at 1/4 max HP or less (not acc/eva). Single use.", }, starsweet: { name: "Star Sweet", - desc: "Evolves Milcery into Alcremie when held and spun around.", + shortDesc: "Evolves Milcery into Alcremie when held and spun around.", }, steelixite: { name: "Steelixite", - desc: "If held by a Steelix, this item allows it to Mega Evolve in battle.", + shortDesc: "If held by a Steelix, this item allows it to Mega Evolve in battle.", }, steelgem: { name: "Steel Gem", - desc: "Holder's first successful Steel-type attack will have 1.3x power. Single use.", + shortDesc: "Holder's first successful Steel-type attack will have 1.3x power. Single use.", gen5: { - desc: "Holder's first successful Steel-type attack will have 1.5x power. Single use.", + shortDesc: "Holder's first successful Steel-type attack will have 1.5x power. Single use.", }, }, steelmemory: { name: "Steel Memory", - desc: "Holder's Multi-Attack is Steel type.", + shortDesc: "Holder's Multi-Attack is Steel type.", }, steeliumz: { name: "Steelium Z", - desc: "If holder has a Steel move, this item allows it to use a Steel Z-Move.", + shortDesc: "If holder has a Steel move, this item allows it to use a Steel Z-Move.", }, stick: { name: "Stick", - desc: "If held by a Farfetch’d, its critical hit ratio is raised by 2 stages.", + shortDesc: "If held by a Farfetch’d, its critical hit ratio is raised by 2 stages.", gen2: { - desc: "If held by a Farfetch’d, its critical hit ratio is always at stage 2. (25% crit rate)", + shortDesc: "If held by a Farfetch’d, its critical hit ratio is always at stage 2. (25% crit rate)", }, }, stickybarb: { name: "Sticky Barb", - desc: "Each turn, holder loses 1/8 max HP. An attacker making contact can receive it.", + shortDesc: "Each turn, holder loses 1/8 max HP. An attacker making contact can receive it.", }, stoneplate: { name: "Stone Plate", - desc: "Holder's Rock-type attacks have 1.2x power. Judgment is Rock type.", + shortDesc: "Holder's Rock-type attacks have 1.2x power. Judgment is Rock type.", + }, + strangeball: { + name: "Strange Ball", + shortDesc: "Placeholder if caught in Poke Ball not in current game.", }, strawberrysweet: { name: "Strawberry Sweet", - desc: "Evolves Milcery into Alcremie when held and spun around.", + shortDesc: "Evolves Milcery into Alcremie when held and spun around.", }, sunstone: { name: "Sun Stone", @@ -1776,43 +1780,43 @@ export const ItemsText: {[k: string]: ItemText} = { }, swampertite: { name: "Swampertite", - desc: "If held by a Swampert, this item allows it to Mega Evolve in battle.", + shortDesc: "If held by a Swampert, this item allows it to Mega Evolve in battle.", }, sweetapple: { name: "Sweet Apple", - desc: "Evolves Applin into Appletun when used.", + shortDesc: "Evolves Applin into Appletun when used.", }, syrupyapple: { name: "Syrupy Apple", - desc: "Evolves Applin into Dipplin when used.", + shortDesc: "Evolves Applin into Dipplin when used.", }, tamatoberry: { name: "Tamato Berry", - desc: "Cannot be eaten by the holder. No effect when eaten with Bug Bite or Pluck.", + shortDesc: "Cannot be eaten by the holder. No effect when eaten with Bug Bite or Pluck.", }, tangaberry: { name: "Tanga Berry", - desc: "Halves damage taken from a supereffective Bug-type attack. Single use.", + shortDesc: "Halves damage taken from a supereffective Bug-type attack. Single use.", }, tapuniumz: { name: "Tapunium Z", - desc: "If held by a Tapu with Nature's Madness, it can use Guardian of Alola.", + shortDesc: "If held by a Tapu with Nature's Madness, it can use Guardian of Alola.", }, tartapple: { name: "Tart Apple", - desc: "Evolves Applin into Flapple when used.", + shortDesc: "Evolves Applin into Flapple when used.", }, terrainextender: { name: "Terrain Extender", - desc: "Holder's use of Electric/Grassy/Misty/Psychic Terrain lasts 8 turns instead of 5.", + shortDesc: "Holder's use of Electric/Grassy/Misty/Psychic Terrain lasts 8 turns instead of 5.", }, thickclub: { name: "Thick Club", - desc: "If held by a Cubone or a Marowak, its Attack is doubled.", + shortDesc: "If held by a Cubone or a Marowak, its Attack is doubled.", }, throatspray: { name: "Throat Spray", - desc: "Raises holder's Special Attack by 1 stage after it uses a sound move. Single use.", + shortDesc: "Raises holder's Special Attack by 1 stage after it uses a sound move. Single use.", }, thunderstone: { name: "Thunder Stone", @@ -1824,469 +1828,472 @@ export const ItemsText: {[k: string]: ItemText} = { }, timerball: { name: "Timer Ball", - desc: "A Poke Ball that becomes better the more turns there are in a battle.", + shortDesc: "A Poke Ball that becomes better the more turns there are in a battle.", }, toxicorb: { name: "Toxic Orb", - desc: "At the end of every turn, this item attempts to badly poison the holder.", + shortDesc: "At the end of every turn, this item attempts to badly poison the holder.", }, toxicplate: { name: "Toxic Plate", - desc: "Holder's Poison-type attacks have 1.2x power. Judgment is Poison type.", + shortDesc: "Holder's Poison-type attacks have 1.2x power. Judgment is Poison type.", }, tr00: { name: "TR00", - desc: "Teaches certain Pokemon the move Swords Dance. One use.", + shortDesc: "Teaches certain Pokemon the move Swords Dance. One use.", }, tr01: { name: "TR01", - desc: "Teaches certain Pokemon the move Body Slam. One use.", + shortDesc: "Teaches certain Pokemon the move Body Slam. One use.", }, tr02: { name: "TR02", - desc: "Teaches certain Pokemon the move Flamethrower. One use.", + shortDesc: "Teaches certain Pokemon the move Flamethrower. One use.", }, tr03: { name: "TR03", - desc: "Teaches certain Pokemon the move Hydro Pump. One use.", + shortDesc: "Teaches certain Pokemon the move Hydro Pump. One use.", }, tr04: { name: "TR04", - desc: "Teaches certain Pokemon the move Surf. One use.", + shortDesc: "Teaches certain Pokemon the move Surf. One use.", }, tr05: { name: "TR05", - desc: "Teaches certain Pokemon the move Ice Beam. One use.", + shortDesc: "Teaches certain Pokemon the move Ice Beam. One use.", }, tr06: { name: "TR06", - desc: "Teaches certain Pokemon the move Blizzard. One use.", + shortDesc: "Teaches certain Pokemon the move Blizzard. One use.", }, tr07: { name: "TR07", - desc: "Teaches certain Pokemon the move Low Kick. One use.", + shortDesc: "Teaches certain Pokemon the move Low Kick. One use.", }, tr08: { name: "TR08", - desc: "Teaches certain Pokemon the move Thunderbolt. One use.", + shortDesc: "Teaches certain Pokemon the move Thunderbolt. One use.", }, tr09: { name: "TR09", - desc: "Teaches certain Pokemon the move Thunder. One use.", + shortDesc: "Teaches certain Pokemon the move Thunder. One use.", }, tr10: { name: "TR10", - desc: "Teaches certain Pokemon the move Earthquake. One use.", + shortDesc: "Teaches certain Pokemon the move Earthquake. One use.", }, tr11: { name: "TR11", - desc: "Teaches certain Pokemon the move Psychic. One use.", + shortDesc: "Teaches certain Pokemon the move Psychic. One use.", }, tr12: { name: "TR12", - desc: "Teaches certain Pokemon the move Agility. One use.", + shortDesc: "Teaches certain Pokemon the move Agility. One use.", }, tr13: { name: "TR13", - desc: "Teaches certain Pokemon the move Focus Energy. One use.", + shortDesc: "Teaches certain Pokemon the move Focus Energy. One use.", }, tr14: { name: "TR14", - desc: "Teaches certain Pokemon the move Metronome. One use.", + shortDesc: "Teaches certain Pokemon the move Metronome. One use.", }, tr15: { name: "TR15", - desc: "Teaches certain Pokemon the move Fire Blast. One use.", + shortDesc: "Teaches certain Pokemon the move Fire Blast. One use.", }, tr16: { name: "TR16", - desc: "Teaches certain Pokemon the move Waterfall. One use.", + shortDesc: "Teaches certain Pokemon the move Waterfall. One use.", }, tr17: { name: "TR17", - desc: "Teaches certain Pokemon the move Amnesia. One use.", + shortDesc: "Teaches certain Pokemon the move Amnesia. One use.", }, tr18: { name: "TR18", - desc: "Teaches certain Pokemon the move Leech Life. One use.", + shortDesc: "Teaches certain Pokemon the move Leech Life. One use.", }, tr19: { name: "TR19", - desc: "Teaches certain Pokemon the move Tri Attack. One use.", + shortDesc: "Teaches certain Pokemon the move Tri Attack. One use.", }, tr20: { name: "TR20", - desc: "Teaches certain Pokemon the move Substitute. One use.", + shortDesc: "Teaches certain Pokemon the move Substitute. One use.", }, tr21: { name: "TR21", - desc: "Teaches certain Pokemon the move Reversal. One use.", + shortDesc: "Teaches certain Pokemon the move Reversal. One use.", }, tr22: { name: "TR22", - desc: "Teaches certain Pokemon the move Sludge Bomb. One use.", + shortDesc: "Teaches certain Pokemon the move Sludge Bomb. One use.", }, tr23: { name: "TR23", - desc: "Teaches certain Pokemon the move Spikes. One use.", + shortDesc: "Teaches certain Pokemon the move Spikes. One use.", }, tr24: { name: "TR24", - desc: "Teaches certain Pokemon the move Outrage. One use.", + shortDesc: "Teaches certain Pokemon the move Outrage. One use.", }, tr25: { name: "TR25", - desc: "Teaches certain Pokemon the move Psyshock. One use.", + shortDesc: "Teaches certain Pokemon the move Psyshock. One use.", }, tr26: { name: "TR26", - desc: "Teaches certain Pokemon the move Endure. One use.", + shortDesc: "Teaches certain Pokemon the move Endure. One use.", }, tr27: { name: "TR27", - desc: "Teaches certain Pokemon the move Sleep Talk. One use.", + shortDesc: "Teaches certain Pokemon the move Sleep Talk. One use.", }, tr28: { name: "TR28", - desc: "Teaches certain Pokemon the move Megahorn. One use.", + shortDesc: "Teaches certain Pokemon the move Megahorn. One use.", }, tr29: { name: "TR29", - desc: "Teaches certain Pokemon the move Baton Pass. One use.", + shortDesc: "Teaches certain Pokemon the move Baton Pass. One use.", }, tr30: { name: "TR30", - desc: "Teaches certain Pokemon the move Encore. One use.", + shortDesc: "Teaches certain Pokemon the move Encore. One use.", }, tr31: { name: "TR31", - desc: "Teaches certain Pokemon the move Iron Tail. One use.", + shortDesc: "Teaches certain Pokemon the move Iron Tail. One use.", }, tr32: { name: "TR32", - desc: "Teaches certain Pokemon the move Crunch. One use.", + shortDesc: "Teaches certain Pokemon the move Crunch. One use.", }, tr33: { name: "TR33", - desc: "Teaches certain Pokemon the move Shadow Ball. One use.", + shortDesc: "Teaches certain Pokemon the move Shadow Ball. One use.", }, tr34: { name: "TR34", - desc: "Teaches certain Pokemon the move Future Sight. One use.", + shortDesc: "Teaches certain Pokemon the move Future Sight. One use.", }, tr35: { name: "TR35", - desc: "Teaches certain Pokemon the move Uproar. One use.", + shortDesc: "Teaches certain Pokemon the move Uproar. One use.", }, tr36: { name: "TR36", - desc: "Teaches certain Pokemon the move Heat Wave. One use.", + shortDesc: "Teaches certain Pokemon the move Heat Wave. One use.", }, tr37: { name: "TR37", - desc: "Teaches certain Pokemon the move Taunt. One use.", + shortDesc: "Teaches certain Pokemon the move Taunt. One use.", }, tr38: { name: "TR38", - desc: "Teaches certain Pokemon the move Trick. One use.", + shortDesc: "Teaches certain Pokemon the move Trick. One use.", }, tr39: { name: "TR39", - desc: "Teaches certain Pokemon the move Superpower. One use.", + shortDesc: "Teaches certain Pokemon the move Superpower. One use.", }, tr40: { name: "TR40", - desc: "Teaches certain Pokemon the move Skill Swap. One use.", + shortDesc: "Teaches certain Pokemon the move Skill Swap. One use.", }, tr41: { name: "TR41", - desc: "Teaches certain Pokemon the move Blaze Kick. One use.", + shortDesc: "Teaches certain Pokemon the move Blaze Kick. One use.", }, tr42: { name: "TR42", - desc: "Teaches certain Pokemon the move Hyper Voice. One use.", + shortDesc: "Teaches certain Pokemon the move Hyper Voice. One use.", }, tr43: { name: "TR43", - desc: "Teaches certain Pokemon the move Overheat. One use.", + shortDesc: "Teaches certain Pokemon the move Overheat. One use.", }, tr44: { name: "TR44", - desc: "Teaches certain Pokemon the move Cosmic Power. One use.", + shortDesc: "Teaches certain Pokemon the move Cosmic Power. One use.", }, tr45: { name: "TR45", - desc: "Teaches certain Pokemon the move Muddy Water. One use.", + shortDesc: "Teaches certain Pokemon the move Muddy Water. One use.", }, tr46: { name: "TR46", - desc: "Teaches certain Pokemon the move Iron Defense. One use.", + shortDesc: "Teaches certain Pokemon the move Iron Defense. One use.", }, tr47: { name: "TR47", - desc: "Teaches certain Pokemon the move Dragon Claw. One use.", + shortDesc: "Teaches certain Pokemon the move Dragon Claw. One use.", }, tr48: { name: "TR48", - desc: "Teaches certain Pokemon the move Bulk Up. One use.", + shortDesc: "Teaches certain Pokemon the move Bulk Up. One use.", }, tr49: { name: "TR49", - desc: "Teaches certain Pokemon the move Calm Mind. One use.", + shortDesc: "Teaches certain Pokemon the move Calm Mind. One use.", }, tr50: { name: "TR50", - desc: "Teaches certain Pokemon the move Leaf Blade. One use.", + shortDesc: "Teaches certain Pokemon the move Leaf Blade. One use.", }, tr51: { name: "TR51", - desc: "Teaches certain Pokemon the move Dragon Dance. One use.", + shortDesc: "Teaches certain Pokemon the move Dragon Dance. One use.", }, tr52: { name: "TR52", - desc: "Teaches certain Pokemon the move Gyro Ball. One use.", + shortDesc: "Teaches certain Pokemon the move Gyro Ball. One use.", }, tr53: { name: "TR53", - desc: "Teaches certain Pokemon the move Close Combat. One use.", + shortDesc: "Teaches certain Pokemon the move Close Combat. One use.", }, tr54: { name: "TR54", - desc: "Teaches certain Pokemon the move Toxic Spikes. One use.", + shortDesc: "Teaches certain Pokemon the move Toxic Spikes. One use.", }, tr55: { name: "TR55", - desc: "Teaches certain Pokemon the move Flare Blitz. One use.", + shortDesc: "Teaches certain Pokemon the move Flare Blitz. One use.", }, tr56: { name: "TR56", - desc: "Teaches certain Pokemon the move Aura Sphere. One use.", + shortDesc: "Teaches certain Pokemon the move Aura Sphere. One use.", }, tr57: { name: "TR57", - desc: "Teaches certain Pokemon the move Poison Jab. One use.", + shortDesc: "Teaches certain Pokemon the move Poison Jab. One use.", }, tr58: { name: "TR58", - desc: "Teaches certain Pokemon the move Dark Pulse. One use.", + shortDesc: "Teaches certain Pokemon the move Dark Pulse. One use.", }, tr59: { name: "TR59", - desc: "Teaches certain Pokemon the move Seed Bomb. One use.", + shortDesc: "Teaches certain Pokemon the move Seed Bomb. One use.", }, tr60: { name: "TR60", - desc: "Teaches certain Pokemon the move X-Scissor. One use.", + shortDesc: "Teaches certain Pokemon the move X-Scissor. One use.", }, tr61: { name: "TR61", - desc: "Teaches certain Pokemon the move Bug Buzz. One use.", + shortDesc: "Teaches certain Pokemon the move Bug Buzz. One use.", }, tr62: { name: "TR62", - desc: "Teaches certain Pokemon the move Dragon Pulse. One use.", + shortDesc: "Teaches certain Pokemon the move Dragon Pulse. One use.", }, tr63: { name: "TR63", - desc: "Teaches certain Pokemon the move Power Gem. One use.", + shortDesc: "Teaches certain Pokemon the move Power Gem. One use.", }, tr64: { name: "TR64", - desc: "Teaches certain Pokemon the move Focus Blast. One use.", + shortDesc: "Teaches certain Pokemon the move Focus Blast. One use.", }, tr65: { name: "TR65", - desc: "Teaches certain Pokemon the move Energy Ball. One use.", + shortDesc: "Teaches certain Pokemon the move Energy Ball. One use.", }, tr66: { name: "TR66", - desc: "Teaches certain Pokemon the move Brave Bird. One use.", + shortDesc: "Teaches certain Pokemon the move Brave Bird. One use.", }, tr67: { name: "TR67", - desc: "Teaches certain Pokemon the move Earth Power. One use.", + shortDesc: "Teaches certain Pokemon the move Earth Power. One use.", }, tr68: { name: "TR68", - desc: "Teaches certain Pokemon the move Nasty Plot. One use.", + shortDesc: "Teaches certain Pokemon the move Nasty Plot. One use.", }, tr69: { name: "TR69", - desc: "Teaches certain Pokemon the move Zen Headbutt. One use.", + shortDesc: "Teaches certain Pokemon the move Zen Headbutt. One use.", }, tr70: { name: "TR70", - desc: "Teaches certain Pokemon the move Flash Cannon. One use.", + shortDesc: "Teaches certain Pokemon the move Flash Cannon. One use.", }, tr71: { name: "TR71", - desc: "Teaches certain Pokemon the move Leaf Storm. One use.", + shortDesc: "Teaches certain Pokemon the move Leaf Storm. One use.", }, tr72: { name: "TR72", - desc: "Teaches certain Pokemon the move Power Whip. One use.", + shortDesc: "Teaches certain Pokemon the move Power Whip. One use.", }, tr73: { name: "TR73", - desc: "Teaches certain Pokemon the move Gunk Shot. One use.", + shortDesc: "Teaches certain Pokemon the move Gunk Shot. One use.", }, tr74: { name: "TR74", - desc: "Teaches certain Pokemon the move Iron Head. One use.", + shortDesc: "Teaches certain Pokemon the move Iron Head. One use.", }, tr75: { name: "TR75", - desc: "Teaches certain Pokemon the move Stone Edge. One use.", + shortDesc: "Teaches certain Pokemon the move Stone Edge. One use.", }, tr76: { name: "TR76", - desc: "Teaches certain Pokemon the move Stealth Rock. One use.", + shortDesc: "Teaches certain Pokemon the move Stealth Rock. One use.", }, tr77: { name: "TR77", - desc: "Teaches certain Pokemon the move Grass Knot. One use.", + shortDesc: "Teaches certain Pokemon the move Grass Knot. One use.", }, tr78: { name: "TR78", - desc: "Teaches certain Pokemon the move Sludge Wave. One use.", + shortDesc: "Teaches certain Pokemon the move Sludge Wave. One use.", }, tr79: { name: "TR79", - desc: "Teaches certain Pokemon the move Heavy Slam. One use.", + shortDesc: "Teaches certain Pokemon the move Heavy Slam. One use.", }, tr80: { name: "TR80", - desc: "Teaches certain Pokemon the move Electro Ball. One use.", + shortDesc: "Teaches certain Pokemon the move Electro Ball. One use.", }, tr81: { name: "TR81", - desc: "Teaches certain Pokemon the move Foul Play. One use.", + shortDesc: "Teaches certain Pokemon the move Foul Play. One use.", }, tr82: { name: "TR82", - desc: "Teaches certain Pokemon the move Stored Power. One use.", + shortDesc: "Teaches certain Pokemon the move Stored Power. One use.", }, tr83: { name: "TR83", - desc: "Teaches certain Pokemon the move Ally Switch. One use.", + shortDesc: "Teaches certain Pokemon the move Ally Switch. One use.", }, tr84: { name: "TR84", - desc: "Teaches certain Pokemon the move Scald. One use.", + shortDesc: "Teaches certain Pokemon the move Scald. One use.", }, tr85: { name: "TR85", - desc: "Teaches certain Pokemon the move Work Up. One use.", + shortDesc: "Teaches certain Pokemon the move Work Up. One use.", }, tr86: { name: "TR86", - desc: "Teaches certain Pokemon the move Wild Charge. One use.", + shortDesc: "Teaches certain Pokemon the move Wild Charge. One use.", }, tr87: { name: "TR87", - desc: "Teaches certain Pokemon the move Drill Run. One use.", + shortDesc: "Teaches certain Pokemon the move Drill Run. One use.", }, tr88: { name: "TR88", - desc: "Teaches certain Pokemon the move Heat Crash. One use.", + shortDesc: "Teaches certain Pokemon the move Heat Crash. One use.", }, tr89: { name: "TR89", - desc: "Teaches certain Pokemon the move Hurricane. One use.", + shortDesc: "Teaches certain Pokemon the move Hurricane. One use.", }, tr90: { name: "TR90", - desc: "Teaches certain Pokemon the move Play Rough. One use.", + shortDesc: "Teaches certain Pokemon the move Play Rough. One use.", }, tr91: { name: "TR91", - desc: "Teaches certain Pokemon the move Venom Drench. One use.", + shortDesc: "Teaches certain Pokemon the move Venom Drench. One use.", }, tr92: { name: "TR92", - desc: "Teaches certain Pokemon the move Dazzling Gleam. One use.", + shortDesc: "Teaches certain Pokemon the move Dazzling Gleam. One use.", }, tr93: { name: "TR93", - desc: "Teaches certain Pokemon the move Darkest Lariat. One use.", + shortDesc: "Teaches certain Pokemon the move Darkest Lariat. One use.", }, tr94: { name: "TR94", - desc: "Teaches certain Pokemon the move High Horsepower. One use.", + shortDesc: "Teaches certain Pokemon the move High Horsepower. One use.", }, tr95: { name: "TR95", - desc: "Teaches certain Pokemon the move Throat Chop. One use.", + shortDesc: "Teaches certain Pokemon the move Throat Chop. One use.", }, tr96: { name: "TR96", - desc: "Teaches certain Pokemon the move Pollen Puff. One use.", + shortDesc: "Teaches certain Pokemon the move Pollen Puff. One use.", }, tr97: { name: "TR97", - desc: "Teaches certain Pokemon the move Psychic Fangs. One use.", + shortDesc: "Teaches certain Pokemon the move Psychic Fangs. One use.", }, tr98: { name: "TR98", - desc: "Teaches certain Pokemon the move Liquidation. One use.", + shortDesc: "Teaches certain Pokemon the move Liquidation. One use.", }, tr99: { name: "TR99", - desc: "Teaches certain Pokemon the move Body Press. One use.", + shortDesc: "Teaches certain Pokemon the move Body Press. One use.", }, twistedspoon: { name: "Twisted Spoon", - desc: "Holder's Psychic-type attacks have 1.2x power.", + shortDesc: "Holder's Psychic-type attacks have 1.2x power.", gen3: { - desc: "Holder's Psychic-type attacks have 1.1x power.", + shortDesc: "Holder's Psychic-type attacks have 1.1x power.", }, }, tyranitarite: { name: "Tyranitarite", - desc: "If held by a Tyranitar, this item allows it to Mega Evolve in battle.", + shortDesc: "If held by a Tyranitar, this item allows it to Mega Evolve in battle.", }, ultraball: { name: "Ultra Ball", - desc: "An ultra-performance Ball that provides a higher catch rate than a Great Ball.", + shortDesc: "An ultra-performance Ball that provides a higher catch rate than a Great Ball.", }, ultranecroziumz: { name: "Ultranecrozium Z", - desc: "Dusk Mane/Dawn Wings Necrozma: Ultra Burst, then Z-Move w/ Photon Geyser.", + shortDesc: "Dusk Mane/Dawn Wings Necrozma: Ultra Burst, then Z-Move w/ Photon Geyser.", transform: " Bright light is about to burst out of [POKEMON]!", activate: "[POKEMON] regained its true power through Ultra Burst!", }, unremarkableteacup: { name: "Unremarkable Teacup", - desc: "Evolves Poltchageist into Sinistcha when used.", + shortDesc: "Evolves Poltchageist into Sinistcha when used.", }, upgrade: { name: "Up-Grade", - desc: "Evolves Porygon into Porygon2 when traded.", + shortDesc: "Evolves Porygon into Porygon2 when traded.", }, utilityumbrella: { name: "Utility Umbrella", - desc: "The holder ignores rain- and sun-based effects. Damage and accuracy calculations from attacks used by the holder are affected by rain and sun, but not attacks used against the holder.", + desc: "The holder ignores rain- and sun-based effects, including those of its Ability unless it is Orichalcum Pulse or Protosynthesis. Damage and accuracy calculations from attacks used by the holder are affected by rain and sun, but not attacks used against the holder.", shortDesc: "The holder ignores rain- and sun-based effects.", + gen8: { + desc: "The holder ignores rain- and sun-based effects, including those of its Ability. Damage and accuracy calculations from attacks used by the holder are affected by rain and sun, but not attacks used against the holder.", + }, }, venusaurite: { name: "Venusaurite", - desc: "If held by a Venusaur, this item allows it to Mega Evolve in battle.", + shortDesc: "If held by a Venusaur, this item allows it to Mega Evolve in battle.", }, wacanberry: { name: "Wacan Berry", - desc: "Halves damage taken from a supereffective Electric-type attack. Single use.", + shortDesc: "Halves damage taken from a supereffective Electric-type attack. Single use.", }, watergem: { name: "Water Gem", - desc: "Holder's first successful Water-type attack will have 1.3x power. Single use.", + shortDesc: "Holder's first successful Water-type attack will have 1.3x power. Single use.", gen5: { - desc: "Holder's first successful Water-type attack will have 1.5x power. Single use.", + shortDesc: "Holder's first successful Water-type attack will have 1.5x power. Single use.", }, }, watermemory: { name: "Water Memory", - desc: "Holder's Multi-Attack is Water type.", + shortDesc: "Holder's Multi-Attack is Water type.", }, waterstone: { name: "Water Stone", @@ -2295,134 +2302,134 @@ export const ItemsText: {[k: string]: ItemText} = { }, wateriumz: { name: "Waterium Z", - desc: "If holder has a Water move, this item allows it to use a Water Z-Move.", + shortDesc: "If holder has a Water move, this item allows it to use a Water Z-Move.", }, watmelberry: { name: "Watmel Berry", - desc: "Cannot be eaten by the holder. No effect when eaten with Bug Bite or Pluck.", + shortDesc: "Cannot be eaten by the holder. No effect when eaten with Bug Bite or Pluck.", }, waveincense: { name: "Wave Incense", - desc: "Holder's Water-type attacks have 1.2x power.", + shortDesc: "Holder's Water-type attacks have 1.2x power.", }, weaknesspolicy: { name: "Weakness Policy", - desc: "If holder is hit super effectively, raises Attack, Sp. Atk by 2 stages. Single use.", + shortDesc: "If holder is hit super effectively, raises Attack, Sp. Atk by 2 stages. Single use.", }, wellspringmask: { name: "Wellspring Mask", - desc: "Ogerpon-Wellspring: 1.2x power attacks; Terastallize to gain Embody Aspect.", + shortDesc: "Ogerpon-Wellspring: 1.2x power attacks; Terastallize to gain Embody Aspect.", }, wepearberry: { name: "Wepear Berry", - desc: "Cannot be eaten by the holder. No effect when eaten with Bug Bite or Pluck.", + shortDesc: "Cannot be eaten by the holder. No effect when eaten with Bug Bite or Pluck.", }, whippeddream: { name: "Whipped Dream", - desc: "Evolves Swirlix into Slurpuff when traded.", + shortDesc: "Evolves Swirlix into Slurpuff when traded.", }, whiteherb: { name: "White Herb", - desc: "Restores all lowered stat stages to 0 when one is less than 0. Single use.", + shortDesc: "Restores all lowered stat stages to 0 when one is less than 0. Single use.", end: " [POKEMON] returned its stats to normal using its White Herb!", }, widelens: { name: "Wide Lens", - desc: "The accuracy of attacks by the holder is 1.1x.", + shortDesc: "The accuracy of attacks by the holder is 1.1x.", }, wikiberry: { name: "Wiki Berry", - desc: "Restores 1/3 max HP at 1/4 max HP or less; confuses if -SpA Nature. Single use.", + shortDesc: "Restores 1/3 max HP at 1/4 max HP or less; confuses if -SpA Nature. Single use.", gen7: { - desc: "Restores 1/2 max HP at 1/4 max HP or less; confuses if -SpA Nature. Single use.", + shortDesc: "Restores 1/2 max HP at 1/4 max HP or less; confuses if -SpA Nature. Single use.", }, gen6: { - desc: "Restores 1/8 max HP at 1/2 max HP or less; confuses if -SpA Nature. Single use.", + shortDesc: "Restores 1/8 max HP at 1/2 max HP or less; confuses if -SpA Nature. Single use.", }, }, wiseglasses: { name: "Wise Glasses", - desc: "Holder's special attacks have 1.1x power.", + shortDesc: "Holder's special attacks have 1.1x power.", }, yacheberry: { name: "Yache Berry", - desc: "Halves damage taken from a supereffective Ice-type attack. Single use.", + shortDesc: "Halves damage taken from a supereffective Ice-type attack. Single use.", }, zapplate: { name: "Zap Plate", - desc: "Holder's Electric-type attacks have 1.2x power. Judgment is Electric type.", + shortDesc: "Holder's Electric-type attacks have 1.2x power. Judgment is Electric type.", }, zoomlens: { name: "Zoom Lens", - desc: "The accuracy of attacks by the holder is 1.2x if it moves after its target.", + shortDesc: "The accuracy of attacks by the holder is 1.2x if it moves after its target.", }, // Gen 2 items berserkgene: { name: "Berserk Gene", - desc: "(Gen 2) On switch-in, raises holder's Attack by 2 and confuses it. Single use.", + shortDesc: "(Gen 2) On switch-in, raises holder's Attack by 2 and confuses it. Single use.", }, berry: { name: "Berry", - desc: "(Gen 2) Restores 10 HP when at 1/2 max HP or less. Single use.", + shortDesc: "(Gen 2) Restores 10 HP when at 1/2 max HP or less. Single use.", }, bitterberry: { name: "Bitter Berry", - desc: "(Gen 2) Holder is cured if it is confused. Single use.", + shortDesc: "(Gen 2) Holder is cured if it is confused. Single use.", }, burntberry: { name: "Burnt Berry", - desc: "(Gen 2) Holder is cured if it is frozen. Single use.", + shortDesc: "(Gen 2) Holder is cured if it is frozen. Single use.", }, goldberry: { name: "Gold Berry", - desc: "(Gen 2) Restores 30 HP when at 1/2 max HP or less. Single use.", + shortDesc: "(Gen 2) Restores 30 HP when at 1/2 max HP or less. Single use.", }, iceberry: { name: "Ice Berry", - desc: "(Gen 2) Holder is cured if it is burned. Single use.", + shortDesc: "(Gen 2) Holder is cured if it is burned. Single use.", }, mintberry: { name: "Mint Berry", - desc: "(Gen 2) Holder wakes up if it is asleep. Single use.", + shortDesc: "(Gen 2) Holder wakes up if it is asleep. Single use.", }, miracleberry: { name: "Miracle Berry", - desc: "(Gen 2) Holder cures itself if it is confused or has a status condition. Single use.", + shortDesc: "(Gen 2) Holder cures itself if it is confused or has a status condition. Single use.", }, mysteryberry: { name: "Mystery Berry", - desc: "(Gen 2) Restores 5 PP to the first of the holder's moves to reach 0 PP. Single use.", + shortDesc: "(Gen 2) Restores 5 PP to the first of the holder's moves to reach 0 PP. Single use.", activate: " [POKEMON] restored PP to its [MOVE] move using Mystery Berry!", }, pinkbow: { name: "Pink Bow", - desc: "(Gen 2) Holder's Normal-type attacks have 1.1x power.", + shortDesc: "(Gen 2) Holder's Normal-type attacks have 1.1x power.", }, polkadotbow: { name: "Polkadot Bow", - desc: "(Gen 2) Holder's Normal-type attacks have 1.1x power.", + shortDesc: "(Gen 2) Holder's Normal-type attacks have 1.1x power.", }, przcureberry: { name: "PRZ Cure Berry", - desc: "(Gen 2) Holder cures itself if it is paralyzed. Single use.", + shortDesc: "(Gen 2) Holder cures itself if it is paralyzed. Single use.", }, psncureberry: { name: "PSN Cure Berry", - desc: "(Gen 2) Holder is cured if it is poisoned. Single use.", + shortDesc: "(Gen 2) Holder is cured if it is poisoned. Single use.", }, // CAP items crucibellite: { name: "Crucibellite", - desc: "If held by a Crucibelle, this item allows it to Mega Evolve in battle.", + shortDesc: "If held by a Crucibelle, this item allows it to Mega Evolve in battle.", }, vilevial: { name: "Vile Vial", - desc: "If held by a Venomicon, its Poison- and Flying-type attacks have 1.2x power.", + shortDesc: "If held by a Venomicon, its Poison- and Flying-type attacks have 1.2x power.", }, }; diff --git a/data/text/moves.ts b/data/text/moves.ts index 2b2c2c4c054d..463f75f1c34a 100644 --- a/data/text/moves.ts +++ b/data/text/moves.ts @@ -1,4 +1,4 @@ -export const MovesText: {[k: string]: MoveText} = { +export const MovesText: {[id: IDEntry]: MoveText} = { "10000000voltthunderbolt": { name: "10,000,000 Volt Thunderbolt", desc: "Has a very high chance for a critical hit.", @@ -293,7 +293,7 @@ export const MovesText: {[k: string]: MoveText} = { }, auroraveil: { name: "Aurora Veil", - desc: "For 5 turns, the user and its party members take 0.5x damage from physical and special attacks, or 0.66x damage if in a Double Battle; does not reduce damage further with Reflect or Light Screen. Critical hits ignore this protection. It is removed from the user's side if the user or an ally is successfully hit by Brick Break, Psychic Fangs, or Defog. Brick Break and Psychic Fangs remove the effect before damage is calculated. Lasts for 8 turns if the user is holding Light Clay. Fails unless the weather is Hail.", + desc: "For 5 turns, the user and its party members take 0.5x damage from physical and special attacks, or 0.66x damage if in a Double Battle; does not reduce damage further with Reflect or Light Screen. Critical hits ignore this protection. It is removed from the user's side if the user or an ally is successfully hit by Brick Break, Psychic Fangs, or Defog. Brick Break and Psychic Fangs remove the effect before damage is calculated. Lasts for 8 turns if the user is holding Light Clay. Fails unless the weather is Snow.", shortDesc: "For 5 turns, damage to allies halved. Snow only.", gen8: { desc: "For 5 turns, the user and its party members take 0.5x damage from physical and special attacks, or 0.66x damage if in a Double Battle; does not reduce damage further with Reflect or Light Screen. Critical hits ignore this protection. It is removed from the user's side if the user or an ally is successfully hit by Brick Break, Psychic Fangs, or Defog. Brick Break and Psychic Fangs remove the effect before damage is calculated. Lasts for 8 turns if the user is holding Light Clay. Fails unless the weather is Hail.", @@ -1080,7 +1080,7 @@ export const MovesText: {[k: string]: MoveText} = { }, coreenforcer: { name: "Core Enforcer", - desc: "If the user moves after the target, the target's Ability is rendered ineffective as long as it remains active. If the target uses Baton Pass, the replacement will remain under this effect. If the target's Ability is As One, Battle Bond, Comatose, Commander, Disguise, Gulp Missile, Hadron Engine, Ice Face, Multitype, Orichalcum Pulse, Power Construct, Protosynthesis, Quark Drive, RKS System, Schooling, Shields Down, Stance Change, Zen Mode, or Zero to Hero, this effect does not happen, and receiving the effect through Baton Pass ends the effect immediately.", + desc: "If the user moves after the target, the target's Ability is rendered ineffective as long as it remains active. If the target uses Baton Pass, the replacement will remain under this effect. If the target's Ability is As One, Battle Bond, Comatose, Disguise, Gulp Missile, Ice Face, Multitype, Power Construct, RKS System, Schooling, Shields Down, Stance Change, Tera Shift, Zen Mode, or Zero to Hero, this effect does not happen, and receiving the effect through Baton Pass ends the effect immediately.", shortDesc: "Nullifies the foe(s) Ability if the foe(s) move first.", gen8: { desc: "If the user moves after the target, the target's Ability is rendered ineffective as long as it remains active. If the target uses Baton Pass, the replacement will remain under this effect. If the target's Ability is As One, Battle Bond, Comatose, Disguise, Gulp Missile, Ice Face, Multitype, Power Construct, RKS System, Schooling, Shields Down, Stance Change, or Zen Mode, this effect does not happen, and receiving the effect through Baton Pass ends the effect immediately.", @@ -1430,7 +1430,7 @@ export const MovesText: {[k: string]: MoveText} = { }, doodle: { name: "Doodle", - desc: "The user and its ally's Abilities change to match the target's Ability. Does not change Ability if the user's or its ally's is As One, Battle Bond, Comatose, Commander, Disguise, Gulp Missile, Hadron Engine, Ice Face, Multitype, Orichalcum Pulse, Power Construct, Protosynthesis, Quark Drive, RKS System, Schooling, Shields Down, Stance Change, Zen Mode, Zero to Hero, or already matches the target. Fails if both the user and its ally's Ability already matches the target, or if the target's Ability is As One, Battle Bond, Comatose, Commander, Disguise, Flower Gift, Forecast, Gulp Missile, Hadron Engine, Hunger Switch, Ice Face, Illusion, Imposter, Multitype, Neutralizing Gas, Orichalcum Pulse, Power Construct, Power of Alchemy, Protosynthesis, Quark Drive, Receiver, RKS System, Schooling, Shields Down, Stance Change, Trace, Wonder Guard, Zen Mode, or Zero to Hero.", + desc: "The user and its ally's Abilities change to match the target's Ability. Does not change Ability if the user's or its ally's is As One, Battle Bond, Comatose, Disguise, Gulp Missile, Ice Face, Multitype, Power Construct, RKS System, Schooling, Shields Down, Stance Change, Tera Shift, Zen Mode, Zero to Hero, or already matches the target. Fails if both the user and its ally's Ability already matches the target, or if the target's Ability is As One, Battle Bond, Comatose, Commander, Disguise, Embody Aspect, Flower Gift, Forecast, Hunger Switch, Ice Face, Illusion, Imposter, Multitype, Neutralizing Gas, Poison Puppeteer, Power Construct, Power of Alchemy, Protosynthesis, Quark Drive, Receiver, RKS System, Schooling, Shields Down, Stance Change, Tera Shell, Tera Shift, Teraform Zero, Trace, Wonder Guard, Zen Mode, or Zero to Hero.", shortDesc: "User and ally's Abilities become target's Ability.", }, doomdesire: { @@ -1808,7 +1808,7 @@ export const MovesText: {[k: string]: MoveText} = { }, entrainment: { name: "Entrainment", - desc: "Causes the target's Ability to become the same as the user's. Fails if the target's Ability is As One, Battle Bond, Comatose, Commander, Disguise, Gulp Missile, Hadron Engine, Ice Face, Multitype, Orichalcum Pulse, Power Construct, Protosynthesis, Quark Drive, RKS System, Schooling, Shields Down, Stance Change, Truant, Zen Mode, Zero to Hero, or the same Ability as the user, or if the user's Ability is As One, Battle Bond, Comatose, Commander, Disguise, Flower Gift, Forecast, Gulp Missile, Hadron Engine, Hunger Switch, Ice Face, Illusion, Imposter, Multitype, Neutralizing Gas, Orichalcum Pulse, Power Construct, Power of Alchemy, Protosynthesis, Quark Drive, Receiver, RKS System, Schooling, Shields Down, Stance Change, Trace, Zen Mode, or Zero to Hero.", + desc: "Causes the target's Ability to become the same as the user's. Fails if the target's Ability is As One, Battle Bond, Comatose, Disguise, Gulp Missile, Ice Face, Multitype, Power Construct, RKS System, Schooling, Shields Down, Stance Change, Tera Shift, Truant, Zen Mode, or Zero to Hero, or the same Ability as the user, or if the user's Ability is As One, Battle Bond, Comatose, Commander, Disguise, Embody Aspect, Flower Gift, Forecast, Hunger Switch, Ice Face, Illusion, Imposter, Multitype, Neutralizing Gas, Poison Puppeteer, Power Construct, Power of Alchemy, Protosynthesis, Quark Drive, Receiver, RKS System, Schooling, Shields Down, Stance Change, Tera Shell, Tera Shift, Teraform Zero, Trace, Wonder Guard, Zen Mode, or Zero to Hero.", shortDesc: "The target's Ability changes to match the user's.", gen8: { desc: "Causes the target's Ability to become the same as the user's. Fails if the target's Ability is As One, Battle Bond, Comatose, Disguise, Gulp Missile, Ice Face, Multitype, Power Construct, RKS System, Schooling, Shields Down, Stance Change, Truant, Zen Mode, or the same Ability as the user, or if the user's Ability is As One, Battle Bond, Comatose, Disguise, Flower Gift, Forecast, Gulp Missile, Hunger Switch, Ice Face, Illusion, Imposter, Multitype, Neutralizing Gas, Power Construct, Power of Alchemy, Receiver, RKS System, Schooling, Shields Down, Stance Change, Trace, or Zen Mode.", @@ -2052,7 +2052,7 @@ export const MovesText: {[k: string]: MoveText} = { firstimpression: { name: "First Impression", desc: "Fails unless it is the user's first turn on the field.", - shortDesc: "Hits first. First turn out only.", + shortDesc: "Nearly always goes first. First turn out only.", }, fishiousrend: { name: "Fishious Rend", @@ -2380,7 +2380,7 @@ export const MovesText: {[k: string]: MoveText} = { }, gastroacid: { name: "Gastro Acid", - desc: "Causes the target's Ability to be rendered ineffective as long as it remains active. If the target uses Baton Pass, the replacement will remain under this effect. If the target's Ability is As One, Battle Bond, Comatose, Commander, Disguise, Gulp Missile, Hadron Engine, Ice Face, Multitype, Orichalcum Pulse, Power Construct, Protosynthesis, Quark Drive, RKS System, Schooling, Shields Down, Stance Change, Zen Mode, or Zero to Hero, this move fails, and receiving the effect through Baton Pass ends the effect immediately.", + desc: "Causes the target's Ability to be rendered ineffective as long as it remains active. If the target uses Baton Pass, the replacement will remain under this effect. If the target's Ability is As One, Battle Bond, Comatose, Disguise, Gulp Missile, Ice Face, Multitype, Power Construct, RKS System, Schooling, Shields Down, Stance Change, Tera Shift, Zen Mode, or Zero to Hero, this move fails, and receiving the effect through Baton Pass ends the effect immediately.", shortDesc: "Nullifies the target's Ability.", gen8: { desc: "Causes the target's Ability to be rendered ineffective as long as it remains active. If the target uses Baton Pass, the replacement will remain under this effect. If the target's Ability is As One, Battle Bond, Comatose, Disguise, Gulp Missile, Ice Face, Multitype, Power Construct, RKS System, Schooling, Shields Down, Stance Change, or Zen Mode, this move fails, and receiving the effect through Baton Pass ends the effect immediately.", @@ -2832,7 +2832,7 @@ export const MovesText: {[k: string]: MoveText} = { }, hardpress: { name: "Hard Press", - desc: "Power is equal to 120 * (target's current HP / target's maximum HP), rounded half down, but not less than 1.", + desc: "Power is equal to 100 * (target's current HP / target's maximum HP), rounded half down, but not less than 1.", shortDesc: "More power the more HP the target has left.", }, haze: { @@ -5334,7 +5334,7 @@ export const MovesText: {[k: string]: MoveText} = { }, roleplay: { name: "Role Play", - desc: "The user's Ability changes to match the target's Ability. Fails if the user's Ability is As One, Battle Bond, Comatose, Commander, Disguise, Gulp Missile, Hadron Engine, Ice Face, Multitype, Orichalcum Pulse, Power Construct, Protosynthesis, Quark Drive, RKS System, Schooling, Shields Down, Stance Change, Zen Mode, Zero to Hero, or already matches the target, or if the target's Ability is As One, Battle Bond, Comatose, Commander, Disguise, Flower Gift, Forecast, Gulp Missile, Hadron Engine, Hunger Switch, Ice Face, Illusion, Imposter, Multitype, Neutralizing Gas, Orichalcum Pulse, Power Construct, Power of Alchemy, Protosynthesis, Quark Drive, Receiver, RKS System, Schooling, Shields Down, Stance Change, Trace, Wonder Guard, Zen Mode, or Zero to Hero.", + desc: "The user's Ability changes to match the target's Ability. Fails if the user's Ability is As One, Battle Bond, Comatose, Disguise, Gulp Missile, Ice Face, Multitype, Power Construct, RKS System, Schooling, Shields Down, Stance Change, Tera Shift, Zen Mode, Zero to Hero, or already matches the target, or if the target's Ability is As One, Battle Bond, Comatose, Commander, Disguise, Embody Aspect, Flower Gift, Forecast, Hunger Switch, Ice Face, Illusion, Imposter, Multitype, Neutralizing Gas, Poison Puppeteer, Power Construct, Power of Alchemy, Protosynthesis, Quark Drive, Receiver, RKS System, Schooling, Shields Down, Stance Change, Tera Shell, Tera Shift, Teraform Zero, Trace, Wonder Guard, Zen Mode, or Zero to Hero.", shortDesc: "User replaces its Ability with the target's.", gen8: { desc: "The user's Ability changes to match the target's Ability. Fails if the user's Ability is As One, Battle Bond, Comatose, Disguise, Gulp Missile, Ice Face, Multitype, Power Construct, RKS System, Schooling, Shields Down, Stance Change, Zen Mode, or already matches the target, or if the target's Ability is As One, Battle Bond, Comatose, Disguise, Flower Gift, Forecast, Gulp Missile, Hunger Switch, Ice Face, Illusion, Imposter, Multitype, Neutralizing Gas, Power Construct, Power of Alchemy, Receiver, RKS System, Schooling, Shields Down, Stance Change, Trace, Wonder Guard, or Zen Mode.", @@ -5716,7 +5716,7 @@ export const MovesText: {[k: string]: MoveText} = { }, simplebeam: { name: "Simple Beam", - desc: "Causes the target's Ability to become Simple. Fails if the target's Ability is As One, Battle Bond, Comatose, Commander, Disguise, Gulp Missile, Hadron Engine, Ice Face, Multitype, Orichalcum Pulse, Power Construct, Protosynthesis, Quark Drive, RKS System, Schooling, Shields Down, Simple, Stance Change, Truant, Zen Mode, or Zero to Hero.", + desc: "Causes the target's Ability to become Simple. Fails if the target's Ability is As One, Battle Bond, Comatose, Disguise, Gulp Missile, Ice Face, Multitype, Power Construct, RKS System, Schooling, Shields Down, Simple, Stance Change, Tera Shift, Truant, Zen Mode, or Zero to Hero.", shortDesc: "The target's Ability becomes Simple.", gen8: { desc: "Causes the target's Ability to become Simple. Fails if the target's Ability is As One, Battle Bond, Comatose, Disguise, Gulp Missile, Ice Face, Multitype, Power Construct, RKS System, Schooling, Shields Down, Simple, Stance Change, Truant, or Zen Mode.", @@ -5746,8 +5746,11 @@ export const MovesText: {[k: string]: MoveText} = { }, sketch: { name: "Sketch", - desc: "This move is permanently replaced by the last move used by the target. The copied move has the maximum PP for that move. Fails if the target has not made a move, if the user has Transformed, or if the move is Chatter, Sketch, Struggle, or any move the user knows.", + desc: "This move is permanently replaced by the last move used by the target. The copied move has the maximum PP for that move. Fails if the target has not made a move, if the user has Transformed, or if the move is Blazing Torque, Combat Torque, Dark Void, Hyperspace Fury, Magical Torque, Noxious Torque, Revival Blessing, Sketch, Struggle, Tera Starstorm, Wicked Torque, or any move the user knows.", shortDesc: "Permanently copies the last move target used.", + gen8: { + desc: "This move is permanently replaced by the last move used by the target. The copied move has the maximum PP for that move. Fails if the target has not made a move, if the user has Transformed, or if the move is Chatter, Sketch, Struggle, or any move the user knows.", + }, gen3: { desc: "This move is permanently replaced by the last move used by the target. The copied move has the maximum PP for that move. Fails if the target has not made a move, if the user has Transformed, or if the move is Sketch, Struggle, or any move the user knows.", }, @@ -5760,7 +5763,7 @@ export const MovesText: {[k: string]: MoveText} = { }, skillswap: { name: "Skill Swap", - desc: "The user swaps its Ability with the target's Ability. Fails if either the user or the target's Ability is As One, Battle Bond, Comatose, Commander, Disguise, Gulp Missile, Hadron Engine, Hunger Switch, Ice Face, Illusion, Multitype, Neutralizing Gas, Orichalcum Pulse, Power Construct, Protosynthesis, Quark Drive, RKS System, Schooling, Shields Down, Stance Change, Wonder Guard, Zen Mode, or Zero to Hero.", + desc: "The user swaps its Ability with the target's Ability. Fails if either the user or the target's Ability is As One, Battle Bond, Comatose, Commander, Disguise, Embody Aspect, Hunger Switch, Ice Face, Illusion, Multitype, Neutralizing Gas, Poison Puppeteer, Power Construct, Protosynthesis, Quark Drive, RKS System, Schooling, Shields Down, Stance Change, Tera Shell, Tera Shift, Teraform Zero, Wonder Guard, Zen Mode, or Zero to Hero.", shortDesc: "The user and the target trade Abilities.", gen8: { desc: "The user swaps its Ability with the target's Ability. Fails if either the user or the target's Ability is As One, Battle Bond, Comatose, Disguise, Gulp Missile, Hunger Switch, Ice Face, Illusion, Multitype, Neutralizing Gas, Power Construct, RKS System, Schooling, Shields Down, Stance Change, Wonder Guard, or Zen Mode.", @@ -6791,12 +6794,12 @@ export const MovesText: {[k: string]: MoveText} = { }, terablast: { name: "Tera Blast", - desc: "If the user is Terastallized, this move becomes a physical attack if the user's Attack is greater than its Special Attack, including stat stage changes, and this move's type becomes the same as the user's Tera Type.", + desc: "If the user is Terastallized, this move becomes a physical attack if the user's Attack is greater than its Special Attack, including stat stage changes, and this move's type becomes the same as the user's Tera Type. In addition, if the user's Tera Type is Stellar, this move has 100 power, is super effective against Terastallized targets and neutral against other targets, and lowers the user's Attack and Special Attack by 1 stage.", shortDesc: "If Terastallized: Phys. if Atk > SpA, type = Tera.", }, terastarstorm: { name: "Tera Starstorm", - desc: "If the user is a Terapagos in Stellar Form, this move's type becomes Stellar and hits all opposing Pokemon.", + desc: "If the user is a Terapagos in Stellar Form, this move's type becomes Stellar, hits all opposing Pokemon, and becomes a physical attack if the user's Attack is greater than its Special Attack, including stat stage changes.", shortDesc: "Terapagos-Stellar: Stellar type, hits both foes.", }, terrainpulse: { @@ -7454,7 +7457,7 @@ export const MovesText: {[k: string]: MoveText} = { }, worryseed: { name: "Worry Seed", - desc: "Causes the target's Ability to become Insomnia. Fails if the target's Ability is As One, Battle Bond, Comatose, Commander, Disguise, Gulp Missile, Hadron Engine, Ice Face, Insomnia, Multitype, Orichalcum Pulse, Power Construct, Protosynthesis, Quark Drive, RKS System, Schooling, Shields Down, Stance Change, Truant, Zen Mode, or Zero to Hero.", + desc: "Causes the target's Ability to become Insomnia. Fails if the target's Ability is As One, Battle Bond, Comatose, Disguise, Gulp Missile, Ice Face, Insomnia, Multitype, Power Construct, RKS System, Schooling, Shields Down, Stance Change, Tera Shift, Truant, Zen Mode, or Zero to Hero.", shortDesc: "The target's Ability becomes Insomnia.", gen8: { desc: "Causes the target's Ability to become Insomnia. Fails if the target's Ability is As One, Battle Bond, Comatose, Disguise, Gulp Missile, Ice Face, Insomnia, Multitype, Power Construct, RKS System, Schooling, Shields Down, Stance Change, Truant, or Zen Mode.", diff --git a/data/text/pokedex.ts b/data/text/pokedex.ts index 532978d0b684..c12211f6deed 100644 --- a/data/text/pokedex.ts +++ b/data/text/pokedex.ts @@ -1,4 +1,4 @@ -export const PokedexText: {[k: string]: PokedexText} = { +export const PokedexText: {[id: IDEntry]: PokedexText} = { bulbasaur: { name: "Bulbasaur", }, diff --git a/data/typechart.ts b/data/typechart.ts index fb4ebc08a63f..fa3833470954 100644 --- a/data/typechart.ts +++ b/data/typechart.ts @@ -1,4 +1,4 @@ -export const TypeChart: {[k: string]: TypeData} = { +export const TypeChart: import('../sim/dex-data').TypeDataTable = { bug: { damageTaken: { Bug: 0, diff --git a/databases/schemas/roomlogs.sql b/databases/schemas/roomlogs.sql new file mode 100644 index 000000000000..6554f654a024 --- /dev/null +++ b/databases/schemas/roomlogs.sql @@ -0,0 +1,22 @@ +CREATE TABLE public.roomlogs ( + type STRING NOT NULL, + roomid STRING NOT NULL, + userid STRING NULL, + time TIMESTAMP(6) NOT NULL, + log STRING NOT NULL, + INDEX linecount (userid, roomid, time), + INDEX month (roomid, time), + INDEX type (roomid, type, time), + INDEX rename_idx (roomid) +); +-- computed columns have to be added after apparently +ALTER TABLE roomlogs ADD COLUMN content TSVECTOR AS (to_tsvector('english', log)) STORED; + +CREATE TABLE public.roomlog_dates ( + roomid STRING NOT NULL, + -- YYYY-MM + month STRING NOT NULL, + -- YYYY-MM-DD + date STRING NOT NULL, + PRIMARY KEY (roomid, date) +); \ No newline at end of file diff --git a/databases/schemas/teams.sql b/databases/schemas/teams.sql index 128599dabedb..f16c05408210 100644 --- a/databases/schemas/teams.sql +++ b/databases/schemas/teams.sql @@ -10,5 +10,5 @@ CREATE TABLE teams ( ); CREATE INDEX owner_idx ON teams(ownerid); -CREATE INDEX format_idx ON teams(ownerid); +CREATE INDEX format_idx ON teams(format); CREATE INDEX owner_fmt_idx ON teams(ownerid, format); diff --git a/lib/STREAMS.md b/lib/STREAMS.md index 078bded666f5..aa95dcc2526f 100644 --- a/lib/STREAMS.md +++ b/lib/STREAMS.md @@ -3,7 +3,7 @@ Streams Streams are variables used to interact with large amounts of data without needing to keep it all loaded in RAM. -A stream is used where you would normally use a string, Buffer, or Array, but only part of it is kept in memory at once. +You can think of a `ReadStream` as like a function that returns a string/Buffer, but only a little at a time, and a `WriteStream` as like a function that takes a string/Buffer as input, but only a little at a time. An `ObjectReadStream` is like a function that takes an array as input, but only a little at a time, and an `ObjectWriteStream` is like a function that returns an array, but only a little at a time. Node.js comes with built-in support for streams, and there is also a WHATWG Streams spec (which are incompatible, of course). Both APIs are hard to use and have unnecessary amounts of boilerplate; the Node version more so. This API can wrap Node's API, or it can be used independently, and is a lot easier to use. @@ -13,11 +13,15 @@ An overview: - `ReadStream` is a string/Buffer read stream. Read inputs by line with `readStream.readLine()` or by chunk with `readStream.read()`, or pipe inputs to a `WriteStream` with `readStream.pipe(writeStream)`. - `ReadWriteStream` is a string/Buffer read/write stream. +- `ObjectWriteStream` is a write stream for arbitrary objects. Write to it with `writeStream.write(data)`. +- `ObjectReadStream` is a read stream for arbitrary objects. Read inputs by line with `readStream.readLine()` or by chunk with `readStream.read()`, or pipe inputs to a `WriteStream` with `readStream.pipe(writeStream)`. +- `ObjectReadWriteStream` is a read/write stream for arbitrary objects. + These streams are not API-compatible with Node streams, but can wrap them. -Consuming streams ------------------ +Using streams +------------- ### "override encoding" @@ -28,20 +32,36 @@ However, if for some reason you need to change which encoding you use on a per-r ## Interface: WriteStream -A `WriteStream` can be written to. +A `WriteStream` can be written to. You can think of it like a function taking a string/Buffer as an argument, except you can give it the string/Buffer one chunk at a time, instead of all at once. + +So you can think of these as being the same thing: + +```js +// option 1: do it normally +await FS('file.txt').write("Here are some words.\n"); + +// option 2: do it as a stream +const stream = FS('file.txt').createWriteStream(); +await stream.write("Here a"); +await stream.write("re some "); +await stream.write("words.\n"); // OR: await stream.writeLine("words."); +await stream.writeEnd(); +``` + +The stream version lets you do it a bit at a time instead of all at once, so you use less memory. ### writeStream.write(chunk, [encoding]) * `chunk` {string|Buffer|null} data to write -* `encoding` [override encoding][] +* `encoding` [override encoding](#override-encoding) * Returns: {Promise} for the next time it's safe to write to the `writeStream`. -Writes to the stream. `writeStream.write(null)` is equivalent to `writeStream.end()`. +Writes to the stream. `writeStream.write(null)` is equivalent to `writeStream.writeEnd()`. ### writeStream.writeLine(chunk, [encoding]) * `chunk` {string} data -* `encoding` [override encoding][] +* `encoding` [override encoding](#override-encoding) * Returns: {Promise} for the next time it's safe to write to the `writeStream`. Writes a line to the stream. Equivalent to `writeStream.write(chunk + '\n')`. @@ -57,11 +77,38 @@ This tells the write stream that you're done writing to it. In the Buffer/string ## Interface: ReadStream -A `ReadStream` can be read from. +A `ReadStream` can be read from. You can think of it like a function that returns a string/Buffer, except you can read it out one chunk at a time, instead of all at once. + +So you can think of these as being the same thing: + +```js +// option 1: do it normally +const contents1 = await FS('file.txt').read(); +console.log(contents1); + +// option 3: do it as a stream +const stream = FS('file.txt').createReadStream(); +let contents2 = ''; +let chunk; +while ((chunk = await stream.read()) !== null) { + contents2 += chunk; +} +console.log(contents2); + +// option 2: do it as a stream, by line (this can add an ending \n where there wasn't one before) +const stream = FS('file.txt').createReadStream(); +let contents3 = ''; +for await (const line of stream.byLine()) { + contents3 += line + '\n'; +} +console.log(contents3); +``` + +The stream version lets you do it a bit at a time instead of all at once, so you use less memory (this example doesn't use less memory, since we're just building the full string ourselves, but you can imagine doing something else that doesn't just build the string back). ### readStream.read([encoding]) -* `encoding` [override encoding][] +* `encoding` [override encoding](#override-encoding) * Returns: {Promise} the data read. Reads data from the read stream as fast as possible. @@ -75,7 +122,7 @@ There's rarely a need to use this function directly; you either know how many by ### readStream.read(byteCount, [encoding]) * `byteCount` number of bytes to read -* `encoding` [override encoding][] +* `encoding` [override encoding](#override-encoding) * Returns: {Promise} the data read. Reads `byteCount` bytes from the read stream. @@ -88,7 +135,7 @@ You may also set `byteCount` to `null` to make this behave like `readStream.read ### readStream.readLine([encoding]) -* `encoding` [override encoding][] +* `encoding` [override encoding](#override-encoding) * Returns: {Promise} the data read. Reads a line (a string delimited by `\n` or `\r\n`) from the stream. @@ -97,7 +144,7 @@ The equivalent of `readDelimitedBy('\n')`, but chopping off any trailing `\r` fr ### readStream.readDelimitedBy(delimiter, [encoding]) -* `encoding` [override encoding][] +* `encoding` [override encoding](#override-encoding) * Returns: {Promise} the data read. Reads a line delimited by `delimiter` from the stream. diff --git a/lib/crashlogger.ts b/lib/crashlogger.ts index 0dc1a53ca207..ba01b148a925 100644 --- a/lib/crashlogger.ts +++ b/lib/crashlogger.ts @@ -15,7 +15,8 @@ const CRASH_EMAIL_THROTTLE = 5 * 60 * 1000; // 5 minutes const logPath = path.resolve( // not sure why this is necessary, but in Windows testing it was - __dirname, '../', __dirname.includes(`${path.sep}dist${path.sep}`) ? '..' : '', 'logs/errors.txt' + __dirname, '../', __dirname.includes(`${path.sep}dist${path.sep}`) ? '..' : '', + path.join(global.Config?.logsdir || 'logs', 'errors.txt') ); let lastCrashLog = 0; let transport: any; diff --git a/lib/database.ts b/lib/database.ts index d0601a2931d9..f14bb5b91b2a 100644 --- a/lib/database.ts +++ b/lib/database.ts @@ -14,6 +14,22 @@ export type BasicSQLValue = string | number | null; export type SQLRow = {[k: string]: BasicSQLValue}; export type SQLValue = BasicSQLValue | SQLStatement | PartialOrSQL | BasicSQLValue[] | undefined; +export function isSQL(value: any): value is SQLStatement { + /** + * This addresses a scenario where objects get out of sync due to hotpatching. + * Table A is instantiated, and retains SQLStatement at that specific point in time. Consumer A is also instantiated at + * the same time, and both can interact freely, since consumer A and table A share the same reference to SQLStatement. + * However, when consumer A is hotpatched, consumer A imports a new instance of SQLStatement. Thus, when consumer A + * provides that new SQLStatement, it does not pass the `instanceof SQLStatement` check in Table A, + * since table A is still referencing he old SQLStatement (checking that the new is an instance of the old). + * This does not work. Thus, we're forced to check constructor name instead. + */ + return value instanceof SQLStatement || ( + // assorted safety checks to be sure it'll actually work (theoretically preventing certain attacks) + value?.constructor.name === 'SQLStatement' && (Array.isArray(value.sql) && Array.isArray(value.values)) + ); +} + export class SQLStatement { sql: string[]; values: BasicSQLValue[]; @@ -25,7 +41,7 @@ export class SQLStatement { } } append(value: SQLValue, nextString = ''): this { - if (value instanceof SQLStatement) { + if (isSQL(value)) { if (!value.sql.length) return this; const oldLength = this.sql.length; this.sql = this.sql.concat(value.sql.slice(1)); diff --git a/lib/repl.ts b/lib/repl.ts index 27b23d5c2e92..d76e7b3f8e3d 100644 --- a/lib/repl.ts +++ b/lib/repl.ts @@ -20,7 +20,7 @@ export const Repl = new class { /** * Contains the pathnames of all active REPL sockets. */ - socketPathnames: Set = new Set(); + socketPathnames = new Set(); listenersSetup = false; @@ -57,6 +57,41 @@ export const Repl = new class { }; } + /** + * Delete old sockets in the REPL directory (presumably from a crashed + * previous launch of PS). + * + * Does everything synchronously, so that the directory is guaranteed + * clean and ready for new REPL sockets by the time this function returns. + */ + cleanup() { + const config = typeof Config !== 'undefined' ? Config : {}; + if (!config.repl) return; + + // Clean up old REPL sockets. + const directory = path.dirname( + path.resolve(FS.ROOT_PATH, config.replsocketprefix || 'logs/repl', 'app') + ); + let files; + try { + files = fs.readdirSync(directory); + } catch {} + if (files) { + for (const file of files) { + const pathname = path.resolve(directory, file); + const stat = fs.statSync(pathname); + if (!stat.isSocket()) continue; + + const socket = net.connect(pathname, () => { + socket.end(); + socket.destroy(); + }).on('error', () => { + fs.unlinkSync(pathname); + }); + } + } + } + /** * Starts a REPL server, using a UNIX socket for IPC. The eval function * parametre is passed in because there is no other way to access a file's @@ -64,38 +99,13 @@ export const Repl = new class { */ start(filename: string, evalFunction: (input: string) => any) { const config = typeof Config !== 'undefined' ? Config : {}; - if (config.repl !== undefined && !config.repl) return; + if (!config.repl) return; // TODO: Windows does support the REPL when using named pipes. For now, // this only supports UNIX sockets. Repl.setupListeners(filename); - if (filename === 'app') { - // Clean up old REPL sockets. - const directory = path.dirname( - path.resolve(FS.ROOT_PATH, config.replsocketprefix || 'logs/repl', 'app') - ); - let files; - try { - files = fs.readdirSync(directory); - } catch {} - if (files) { - for (const file of files) { - const pathname = path.resolve(directory, file); - const stat = fs.statSync(pathname); - if (!stat.isSocket()) continue; - - const socket = net.connect(pathname, () => { - socket.end(); - socket.destroy(); - }).on('error', () => { - fs.unlink(pathname, () => {}); - }); - } - } - } - const server = net.createServer(socket => { repl.start({ input: socket, diff --git a/lib/utils.ts b/lib/utils.ts index 36364950f56a..b121d6738c51 100644 --- a/lib/utils.ts +++ b/lib/utils.ts @@ -314,13 +314,12 @@ export function clearRequireCache(options: {exclude?: string[]} = {}) { } } -export function uncacheModuleTree(mod: NodeJS.Module, excludes: string[], depth = 0) { - depth++; - if (depth >= 10) return; - if (!mod.children || excludes.some(p => mod.filename.includes(p))) return; - for (const child of mod.children) { +export function uncacheModuleTree(mod: NodeJS.Module, excludes: string[]) { + if (!mod.children?.length || excludes.some(p => mod.filename.includes(p))) return; + for (const [i, child] of mod.children.entries()) { if (excludes.some(p => child.filename.includes(p))) continue; - uncacheModuleTree(child, excludes, depth); + mod.children?.splice(i, 1); + uncacheModuleTree(child, excludes); } delete (mod as any).children; } @@ -343,10 +342,8 @@ export function deepFreeze(obj: T): T { Object.freeze(obj); if (Array.isArray(obj)) { for (const elem of obj) deepFreeze(elem); - return obj; - } - for (const key of Object.keys(obj)) { - deepFreeze((obj as any)[key]); + } else { + for (const elem of Object.values(obj)) deepFreeze(elem); } return obj; } @@ -417,12 +414,15 @@ export function formatSQLArray(arr: unknown[], args?: unknown[]) { } export class Multiset extends Map { + get(key: T) { + return super.get(key) ?? 0; + } add(key: T) { - this.set(key, (this.get(key) ?? 0) + 1); + this.set(key, this.get(key) + 1); return this; } remove(key: T) { - const newValue = (this.get(key) ?? 0) - 1; + const newValue = this.get(key) - 1; if (newValue <= 0) return this.delete(key); this.set(key, newValue); return true; diff --git a/package-lock.json b/package-lock.json index e2831db7f947..25a94b4dbe76 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,7 +11,7 @@ "license": "MIT", "dependencies": { "esbuild": "^0.16.10", - "mysql2": "^3.6.5", + "mysql2": "^3.9.7", "preact": "^10.5.15", "preact-render-to-string": "^5.1.19", "probe-image-size": "^7.2.3", @@ -31,13 +31,13 @@ "@types/sockjs": "^0.3.33", "@typescript-eslint/eslint-plugin": "^5.8.0", "@typescript-eslint/parser": "^5.8.0", - "eslint": "^8.5.0", + "eslint": "8.5.0", "mocha": "^8.2.0", "smogon": "^3.0.0", "typescript": "^5.0.4" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" }, "optionalDependencies": { "better-sqlite3": "^7.6.2", @@ -91,32 +91,19 @@ } }, "node_modules/@humanwhocodes/config-array": { - "version": "0.11.8", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz", - "integrity": "sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==", + "version": "0.9.5", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz", + "integrity": "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==", "dev": true, "dependencies": { "@humanwhocodes/object-schema": "^1.2.1", "debug": "^4.1.1", - "minimatch": "^3.0.5" + "minimatch": "^3.0.4" }, "engines": { "node": ">=10.10.0" } }, - "node_modules/@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", - "dev": true, - "engines": { - "node": ">=12.22" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, "node_modules/@humanwhocodes/object-schema": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", @@ -1033,6 +1020,19 @@ "once": "^1.4.0" } }, + "node_modules/enquirer": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz", + "integrity": "sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==", + "dev": true, + "dependencies": { + "ansi-colors": "^4.1.1", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8.6" + } + }, "node_modules/esbuild": { "version": "0.16.15", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.16.15.tgz", @@ -1091,50 +1091,49 @@ } }, "node_modules/eslint": { - "version": "8.31.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.31.0.tgz", - "integrity": "sha512-0tQQEVdmPZ1UtUKXjX7EMm9BlgJ08G90IhWh0PKDCb3ZLsgAOHI8fYSIzYVZej92zsgq+ft0FGsxhJ3xo2tbuA==", + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.5.0.tgz", + "integrity": "sha512-tVGSkgNbOfiHyVte8bCM8OmX+xG9PzVG/B4UCF60zx7j61WIVY/AqJECDgpLD4DbbESD0e174gOg3ZlrX15GDg==", "dev": true, "dependencies": { - "@eslint/eslintrc": "^1.4.1", - "@humanwhocodes/config-array": "^0.11.8", - "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", + "@eslint/eslintrc": "^1.0.5", + "@humanwhocodes/config-array": "^0.9.2", "ajv": "^6.10.0", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", "debug": "^4.3.2", "doctrine": "^3.0.0", + "enquirer": "^2.3.5", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.1.1", + "eslint-scope": "^7.1.0", "eslint-utils": "^3.0.0", - "eslint-visitor-keys": "^3.3.0", - "espree": "^9.4.0", + "eslint-visitor-keys": "^3.1.0", + "espree": "^9.2.0", "esquery": "^1.4.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^6.0.1", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "grapheme-splitter": "^1.0.4", - "ignore": "^5.2.0", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^6.0.1", + "globals": "^13.6.0", + "ignore": "^4.0.6", "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-sdsl": "^4.1.4", "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", + "minimatch": "^3.0.4", "natural-compare": "^1.4.0", "optionator": "^0.9.1", + "progress": "^2.0.0", "regexpp": "^3.2.0", + "semver": "^7.2.1", "strip-ansi": "^6.0.1", "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0" + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" }, "bin": { "eslint": "bin/eslint.js" @@ -1217,6 +1216,15 @@ "node": ">=4.0" } }, + "node_modules/eslint/node_modules/ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, "node_modules/espree": { "version": "9.4.1", "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.1.tgz", @@ -1464,6 +1472,12 @@ "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", "devOptional": true }, + "node_modules/functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", + "dev": true + }, "node_modules/gauge": { "version": "2.7.4", "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", @@ -1613,12 +1627,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/grapheme-splitter": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", - "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", - "dev": true - }, "node_modules/growl": { "version": "1.10.5", "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", @@ -1807,15 +1815,6 @@ "node": ">=0.12.0" } }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/is-plain-obj": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", @@ -1842,16 +1841,6 @@ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", "dev": true }, - "node_modules/js-sdsl": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.2.0.tgz", - "integrity": "sha512-dyBIzQBDkCqCu+0upx25Y2jGdbTGxE9fshMsCdK0ViOongpV+n5tXRcZY9v7CaVQ79AGS9KA1KHtojxiM7aXSQ==", - "dev": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/js-sdsl" - } - }, "node_modules/js-yaml": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", @@ -2190,9 +2179,9 @@ } }, "node_modules/mysql2": { - "version": "3.6.5", - "resolved": "https://registry.npmjs.org/mysql2/-/mysql2-3.6.5.tgz", - "integrity": "sha512-pS/KqIb0xlXmtmqEuTvBXTmLoQ5LmAz5NW/r8UyQ1ldvnprNEj3P9GbmuQQ2J0A4LO+ynotGi6TbscPa8OUb+w==", + "version": "3.9.7", + "resolved": "https://registry.npmjs.org/mysql2/-/mysql2-3.9.7.tgz", + "integrity": "sha512-KnJT8vYRcNAZv73uf9zpXqNbvBG7DJrs+1nACsjZP1HMJ1TgXEy8wnNilXAn/5i57JizXKtrUtwDB7HxT9DDpw==", "dependencies": { "denque": "^2.1.0", "generate-function": "^2.3.1", @@ -2882,6 +2871,15 @@ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", "optional": true }, + "node_modules/progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/pump": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", @@ -3648,6 +3646,12 @@ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", "optional": true }, + "node_modules/v8-compile-cache": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.4.0.tgz", + "integrity": "sha512-ocyWc3bAHBB/guyqJQVI5o4BZkPhznPYUG2ea80Gond/BgNWpap8TOmLSeeQG7bnh2KMISxskdADG59j7zruhw==", + "dev": true + }, "node_modules/websocket-driver": { "version": "0.7.4", "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", @@ -3890,22 +3894,16 @@ } }, "@humanwhocodes/config-array": { - "version": "0.11.8", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz", - "integrity": "sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==", + "version": "0.9.5", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz", + "integrity": "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==", "dev": true, "requires": { "@humanwhocodes/object-schema": "^1.2.1", "debug": "^4.1.1", - "minimatch": "^3.0.5" + "minimatch": "^3.0.4" } }, - "@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", - "dev": true - }, "@humanwhocodes/object-schema": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", @@ -4574,6 +4572,16 @@ "once": "^1.4.0" } }, + "enquirer": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz", + "integrity": "sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==", + "dev": true, + "requires": { + "ansi-colors": "^4.1.1", + "strip-ansi": "^6.0.1" + } + }, "esbuild": { "version": "0.16.15", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.16.15.tgz", @@ -4616,50 +4624,49 @@ "dev": true }, "eslint": { - "version": "8.31.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.31.0.tgz", - "integrity": "sha512-0tQQEVdmPZ1UtUKXjX7EMm9BlgJ08G90IhWh0PKDCb3ZLsgAOHI8fYSIzYVZej92zsgq+ft0FGsxhJ3xo2tbuA==", + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.5.0.tgz", + "integrity": "sha512-tVGSkgNbOfiHyVte8bCM8OmX+xG9PzVG/B4UCF60zx7j61WIVY/AqJECDgpLD4DbbESD0e174gOg3ZlrX15GDg==", "dev": true, "requires": { - "@eslint/eslintrc": "^1.4.1", - "@humanwhocodes/config-array": "^0.11.8", - "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", + "@eslint/eslintrc": "^1.0.5", + "@humanwhocodes/config-array": "^0.9.2", "ajv": "^6.10.0", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", "debug": "^4.3.2", "doctrine": "^3.0.0", + "enquirer": "^2.3.5", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.1.1", + "eslint-scope": "^7.1.0", "eslint-utils": "^3.0.0", - "eslint-visitor-keys": "^3.3.0", - "espree": "^9.4.0", + "eslint-visitor-keys": "^3.1.0", + "espree": "^9.2.0", "esquery": "^1.4.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^6.0.1", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "grapheme-splitter": "^1.0.4", - "ignore": "^5.2.0", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^6.0.1", + "globals": "^13.6.0", + "ignore": "^4.0.6", "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-sdsl": "^4.1.4", "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", + "minimatch": "^3.0.4", "natural-compare": "^1.4.0", "optionator": "^0.9.1", + "progress": "^2.0.0", "regexpp": "^3.2.0", + "semver": "^7.2.1", "strip-ansi": "^6.0.1", "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0" + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" }, "dependencies": { "eslint-scope": { @@ -4677,6 +4684,12 @@ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true + }, + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true } } }, @@ -4912,6 +4925,12 @@ "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", "devOptional": true }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", + "dev": true + }, "gauge": { "version": "2.7.4", "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", @@ -5027,12 +5046,6 @@ "slash": "^3.0.0" } }, - "grapheme-splitter": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", - "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", - "dev": true - }, "growl": { "version": "1.10.5", "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", @@ -5168,12 +5181,6 @@ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true }, - "is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "dev": true - }, "is-plain-obj": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", @@ -5197,12 +5204,6 @@ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", "dev": true }, - "js-sdsl": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.2.0.tgz", - "integrity": "sha512-dyBIzQBDkCqCu+0upx25Y2jGdbTGxE9fshMsCdK0ViOongpV+n5tXRcZY9v7CaVQ79AGS9KA1KHtojxiM7aXSQ==", - "dev": true - }, "js-yaml": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", @@ -5470,9 +5471,9 @@ } }, "mysql2": { - "version": "3.6.5", - "resolved": "https://registry.npmjs.org/mysql2/-/mysql2-3.6.5.tgz", - "integrity": "sha512-pS/KqIb0xlXmtmqEuTvBXTmLoQ5LmAz5NW/r8UyQ1ldvnprNEj3P9GbmuQQ2J0A4LO+ynotGi6TbscPa8OUb+w==", + "version": "3.9.7", + "resolved": "https://registry.npmjs.org/mysql2/-/mysql2-3.9.7.tgz", + "integrity": "sha512-KnJT8vYRcNAZv73uf9zpXqNbvBG7DJrs+1nACsjZP1HMJ1TgXEy8wnNilXAn/5i57JizXKtrUtwDB7HxT9DDpw==", "requires": { "denque": "^2.1.0", "generate-function": "^2.3.1", @@ -6005,6 +6006,12 @@ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", "optional": true }, + "progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true + }, "pump": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", @@ -6573,6 +6580,12 @@ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", "optional": true }, + "v8-compile-cache": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.4.0.tgz", + "integrity": "sha512-ocyWc3bAHBB/guyqJQVI5o4BZkPhznPYUG2ea80Gond/BgNWpap8TOmLSeeQG7bnh2KMISxskdADG59j7zruhw==", + "dev": true + }, "websocket-driver": { "version": "0.7.4", "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", diff --git a/package.json b/package.json index 0d1c8b177b7f..97613739752e 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "main": "dist/sim/index.js", "dependencies": { "esbuild": "^0.16.10", - "mysql2": "^3.6.5", + "mysql2": "^3.9.7", "preact": "^10.5.15", "preact-render-to-string": "^5.1.19", "probe-image-size": "^7.2.3", @@ -28,7 +28,7 @@ "node-oom-heapdump": "^1.2.0" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" }, "scripts": { "start": "node pokemon-showdown start", @@ -57,11 +57,6 @@ "url": "http://guangcongluo.com" }, "contributors": [ - { - "name": "Cathy J. Fitzpatrick", - "email": "cathy@cathyjf.com", - "url": "https://cathyjf.com" - }, { "name": "Bill Meltsner", "email": "bill@meltsner.com", @@ -79,7 +74,7 @@ "@types/sockjs": "^0.3.33", "@typescript-eslint/eslint-plugin": "^5.8.0", "@typescript-eslint/parser": "^5.8.0", - "eslint": "^8.5.0", + "eslint": "8.5.0", "mocha": "^8.2.0", "smogon": "^3.0.0", "typescript": "^5.0.4" diff --git a/server/README.md b/server/README.md index 5ec2d11aa5d7..ed1635869466 100644 --- a/server/README.md +++ b/server/README.md @@ -11,7 +11,7 @@ Installing ./pokemon-showdown -(Requires Node.js v14+) +(Requires Node.js v16+) If your distro package manager has an old Node.js version, the simplest way to upgrade is `n` – usually no root necessary: @@ -67,13 +67,13 @@ If you truly want to host the client yourself, there is [a repository for the Po Setting up an Administrator account ------------------------------------------------------------------------ -Once your server is up, you probably want to make yourself an Administrator (&) on it. +Once your server is up, you probably want to make yourself an Administrator (~) on it. ### config/usergroups.csv To become an Administrator, create a file named `config/usergroups.csv` containing - USER,& + USER,~ Replace `USER` with the username that you would like to become an Administrator. Do not put a space between the comma and the ampersand. diff --git a/server/chat-commands/admin.ts b/server/chat-commands/admin.ts index cce89bc31cb2..3f11448f1466 100644 --- a/server/chat-commands/admin.ts +++ b/server/chat-commands/admin.ts @@ -140,7 +140,7 @@ export const commands: Chat.ChatCommands = { this.globalModlog(`POTD`, null, species.name); }, potdhelp: [ - `/potd [pokemon] - Set the Pokemon of the Day to the given [pokemon]. Requires: &`, + `/potd [pokemon] - Set the Pokemon of the Day to the given [pokemon]. Requires: ~`, ], /********************************************************* @@ -165,7 +165,7 @@ export const commands: Chat.ChatCommands = { }, htmlboxhelp: [ `/htmlbox [message] - Displays a message, parsing HTML code contained.`, - `!htmlbox [message] - Shows everyone a message, parsing HTML code contained. Requires: * # &`, + `!htmlbox [message] - Shows everyone a message, parsing HTML code contained. Requires: * # ~`, ], addhtmlbox(target, room, user, connection, cmd) { if (!target) return this.parse('/help ' + cmd); @@ -181,7 +181,7 @@ export const commands: Chat.ChatCommands = { return `/raw
${target}
`; }, addhtmlboxhelp: [ - `/addhtmlbox [message] - Shows everyone a message, parsing HTML code contained. Requires: * # &`, + `/addhtmlbox [message] - Shows everyone a message, parsing HTML code contained. Requires: * # ~`, ], addrankhtmlbox(target, room, user, connection, cmd) { room = this.requireRoom(); @@ -199,7 +199,7 @@ export const commands: Chat.ChatCommands = { room.sendRankedUsers(`|html|
${html}
`, rank as GroupSymbol); }, addrankhtmlboxhelp: [ - `/addrankhtmlbox [rank], [message] - Shows everyone with the specified rank or higher a message, parsing HTML code contained. Requires: * # &`, + `/addrankhtmlbox [rank], [message] - Shows everyone with the specified rank or higher a message, parsing HTML code contained. Requires: * # ~`, ], changeuhtml: 'adduhtml', adduhtml(target, room, user, connection, cmd) { @@ -223,10 +223,10 @@ export const commands: Chat.ChatCommands = { } }, adduhtmlhelp: [ - `/adduhtml [name], [message] - Shows everyone a message that can change, parsing HTML code contained. Requires: * # &`, + `/adduhtml [name], [message] - Shows everyone a message that can change, parsing HTML code contained. Requires: * # ~`, ], changeuhtmlhelp: [ - `/changeuhtml [name], [message] - Changes the message previously shown with /adduhtml [name]. Requires: * # &`, + `/changeuhtml [name], [message] - Changes the message previously shown with /adduhtml [name]. Requires: * # ~`, ], changerankuhtml: 'addrankuhtml', addrankuhtml(target, room, user, connection, cmd) { @@ -249,10 +249,10 @@ export const commands: Chat.ChatCommands = { room.sendRankedUsers(html, rank as GroupSymbol); }, addrankuhtmlhelp: [ - `/addrankuhtml [rank], [name], [message] - Shows everyone with the specified rank or higher a message that can change, parsing HTML code contained. Requires: * # &`, + `/addrankuhtml [rank], [name], [message] - Shows everyone with the specified rank or higher a message that can change, parsing HTML code contained. Requires: * # ~`, ], changerankuhtmlhelp: [ - `/changerankuhtml [rank], [name], [message] - Changes the message previously shown with /addrankuhtml [rank], [name]. Requires: * # &`, + `/changerankuhtml [rank], [name], [message] - Changes the message previously shown with /addrankuhtml [rank], [name]. Requires: * # ~`, ], deletenamecolor: 'setnamecolor', @@ -297,11 +297,11 @@ export const commands: Chat.ChatCommands = { }, setnamecolorhelp: [ `/setnamecolor OR /snc [username], [source name] - Set [username]'s name color to match the [source name]'s color.`, - `Requires: &`, + `Requires: ~`, ], deletenamecolorhelp: [ `/deletenamecolor OR /dnc [username] - Remove [username]'s namecolor.`, - `Requires: &`, + `Requires: ~`, ], pline(target, room, user) { @@ -313,7 +313,7 @@ export const commands: Chat.ChatCommands = { this.sendReply(target); }, plinehelp: [ - `/pline [protocol lines] - Adds the given [protocol lines] to the current room. Requires: & console access`, + `/pline [protocol lines] - Adds the given [protocol lines] to the current room. Requires: ~ console access`, ], pminfobox(target, room, user, connection) { @@ -334,7 +334,7 @@ export const commands: Chat.ChatCommands = { targetUser.lastPM = user.id; user.lastPM = targetUser.id; }, - pminfoboxhelp: [`/pminfobox [user], [html]- PMs an [html] infobox to [user]. Requires * # &`], + pminfoboxhelp: [`/pminfobox [user], [html]- PMs an [html] infobox to [user]. Requires * # ~`], pmuhtmlchange: 'pmuhtml', pmuhtml(target, room, user, connection, cmd) { @@ -355,9 +355,9 @@ export const commands: Chat.ChatCommands = { targetUser.lastPM = user.id; user.lastPM = targetUser.id; }, - pmuhtmlhelp: [`/pmuhtml [user], [name], [html] - PMs [html] that can change to [user]. Requires * # &`], + pmuhtmlhelp: [`/pmuhtml [user], [name], [html] - PMs [html] that can change to [user]. Requires * # ~`], pmuhtmlchangehelp: [ - `/pmuhtmlchange [user], [name], [html] - Changes html that was previously PMed to [user] to [html]. Requires * # &`, + `/pmuhtmlchange [user], [name], [html] - Changes html that was previously PMed to [user] to [html]. Requires * # ~`, ], closehtmlpage: 'sendhtmlpage', @@ -368,7 +368,8 @@ export const commands: Chat.ChatCommands = { const closeHtmlPage = cmd === 'closehtmlpage'; - const {targetUser, rest} = this.requireUser(target); + const [targetStr, rest] = this.splitOne(target).map(str => str.trim()); + const targets = targetStr.split('|').map(u => u.trim()); let [pageid, content] = this.splitOne(rest); let selector: string | undefined; if (cmd === 'changehtmlpageselector') { @@ -381,56 +382,79 @@ export const commands: Chat.ChatCommands = { pageid = `${user.id}-${toID(pageid)}`; - if (targetUser.locked && !this.user.can('lock')) { - this.errorReply("This user is currently locked, so you cannot send them HTML."); - return false; - } + const successes: string[] = [], errors: string[] = []; - let targetConnections = []; - // find if a connection has specifically requested this page - for (const c of targetUser.connections) { - if (c.lastRequestedPage === pageid) { - targetConnections.push(c); + content = this.checkHTML(content); + + targets.forEach(targetUsername => { + const targetUser = Users.get(targetUsername); + if (!targetUser) return errors.push(`${targetUsername} [offline/misspelled]`); + + if (targetUser.locked && !this.user.can('lock')) { + return errors.push(`${targetUser.name} [locked]`); } - } - if (!targetConnections.length) { - // no connection has requested it - verify that we share a room - this.checkPMHTML(targetUser); - targetConnections = targetUser.connections; - } - content = this.checkHTML(content); + let targetConnections = []; + // find if a connection has specifically requested this page + for (const c of targetUser.connections) { + if (c.lastRequestedPage === pageid) { + targetConnections.push(c); + } + } + if (!targetConnections.length) { + // no connection has requested it - verify that we share a room + try { + this.checkPMHTML(targetUser); + } catch { + return errors.push(`${targetUser.name} [not in room / blocking PMs]`); + } + targetConnections = targetUser.connections; + } - for (const targetConnection of targetConnections) { - const context = new Chat.PageContext({ - user: targetUser, - connection: targetConnection, - pageid: `view-bot-${pageid}`, - }); - if (closeHtmlPage) { - context.send(`|deinit|`); - } else if (selector) { - context.send(`|selectorhtml|${selector}|${content}`); - } else { - context.title = `[${user.name}] ${pageid}`; - context.setHTML(content); + for (const targetConnection of targetConnections) { + const context = new Chat.PageContext({ + user: targetUser, + connection: targetConnection, + pageid: `view-bot-${pageid}`, + }); + if (closeHtmlPage) { + context.send(`|deinit|`); + } else if (selector) { + context.send(`|selectorhtml|${selector}|${content}`); + } else { + context.title = `[${user.name}] ${pageid}`; + context.setHTML(content); + } } - } + successes.push(targetUser.name); + }); if (closeHtmlPage) { - this.sendReply(`Closed the bot page ${pageid} for ${targetUser.name}.`); + if (successes.length) { + this.sendReply(`Closed the bot page ${pageid} for ${Chat.toListString(successes)}.`); + } + if (errors.length) { + this.errorReply(`Unable to close the bot page for ${Chat.toListString(errors)}.`); + } } else { - this.sendReply(`Sent ${targetUser.name}${selector ? ` the selector ${selector} on` : ''} the bot page ${pageid}.`); + if (successes.length) { + this.sendReply(`Sent ${Chat.toListString(successes)}${selector ? ` the selector ${selector} on` : ''} the bot page ${pageid}.`); + } + if (errors.length) { + this.errorReply(`Unable to send the bot page ${pageid} to ${Chat.toListString(errors)}.`); + } } + + if (!successes.length) return false; }, sendhtmlpagehelp: [ - `/sendhtmlpage [userid], [pageid], [html] - Sends [userid] the bot page [pageid] with the content [html]. Requires: * # &`, + `/sendhtmlpage [userid], [pageid], [html] - Sends [userid] the bot page [pageid] with the content [html]. Requires: * # ~`, ], changehtmlpageselectorhelp: [ - `/changehtmlpageselector [userid], [pageid], [selector], [html] - Sends [userid] the content [html] for the selector [selector] on the bot page [pageid]. Requires: * # &`, + `/changehtmlpageselector [userid], [pageid], [selector], [html] - Sends [userid] the content [html] for the selector [selector] on the bot page [pageid]. Requires: * # ~`, ], closehtmlpagehelp: [ - `/closehtmlpage [userid], [pageid], - Closes the bot page [pageid] for [userid]. Requires: * # &`, + `/closehtmlpage [userid], [pageid], - Closes the bot page [pageid] for [userid]. Requires: * # ~`, ], highlighthtmlpage(target, room, user) { @@ -473,15 +497,8 @@ export const commands: Chat.ChatCommands = { room = this.requireRoom(); this.checkCan('addhtml', null, room); - const {targetUser, rest} = this.requireUser(target); - - if (targetUser.locked && !this.user.can('lock')) { - throw new Chat.ErrorMessage("This user is currently locked, so you cannot send them private HTML."); - } - - if (!(targetUser.id in room.users)) { - throw new Chat.ErrorMessage("You cannot send private HTML to users who are not in this room."); - } + const [targetStr, rest] = this.splitOne(target).map(str => str.trim()); + const targets = targetStr.split('|').map(u => u.trim()); let html: string; let messageType: string; @@ -499,18 +516,38 @@ export const commands: Chat.ChatCommands = { html = this.checkHTML(html); if (!html) return this.parse('/help sendprivatehtmlbox'); - html = `${Utils.html`
[Private from ${user.name}]
`}${Chat.collapseLineBreaksHTML(html)}`; if (plainHtml) html = `
${html}
`; - targetUser.sendTo(room, `|${messageType}|${html}`); + const successes: string[] = [], errors: string[] = []; + + targets.forEach(targetUsername => { + const targetUser = Users.get(targetUsername); + + if (!targetUser) return errors.push(`${targetUsername} [offline/misspelled]`); + + if (targetUser.locked && !this.user.can('lock')) { + return errors.push(`${targetUser.name} [locked]`); + } + + if (!(targetUser.id in room!.users)) { + return errors.push(`${targetUser.name} [not in room]`); + } + + successes.push(targetUser.name); + targetUser.sendTo(room, `|${messageType}|${html}`); + }); - this.sendReply(`Sent private HTML to ${targetUser.name}.`); + + if (successes.length) this.sendReply(`Sent private HTML to ${Chat.toListString(successes)}.`); + if (errors.length) this.errorReply(`Unable to send private HTML to ${Chat.toListString(errors)}.`); + + if (!successes.length) return false; }, sendprivatehtmlboxhelp: [ - `/sendprivatehtmlbox [userid], [html] - Sends [userid] the private [html]. Requires: * # &`, - `/sendprivateuhtml [userid], [name], [html] - Sends [userid] the private [html] that can change. Requires: * # &`, - `/changeprivateuhtml [userid], [name], [html] - Changes the message previously sent with /sendprivateuhtml [userid], [name], [html]. Requires: * # &`, + `/sendprivatehtmlbox [userid], [html] - Sends [userid] the private [html]. Requires: * # ~`, + `/sendprivateuhtml [userid], [name], [html] - Sends [userid] the private [html] that can change. Requires: * # ~`, + `/changeprivateuhtml [userid], [name], [html] - Changes the message previously sent with /sendprivateuhtml [userid], [name], [html]. Requires: * # ~`, ], botmsg(target, room, user, connection) { @@ -557,7 +594,7 @@ export const commands: Chat.ChatCommands = { this.sendReply(`||[Main process] RSS: ${results[0]}, Heap: ${results[1]} / ${results[2]}`); }, memoryusagehelp: [ - `/memoryusage OR /memusage - Get the current memory usage of the server. Requires: &`, + `/memoryusage OR /memusage - Get the current memory usage of the server. Requires: ~`, ], forcehotpatch: 'hotpatch', @@ -879,8 +916,8 @@ export const commands: Chat.ChatCommands = { ); }, nohotpatchhelp: [ - `/nohotpatch [chat|formats|battles|validator|tournaments|punishments|modlog|all] [reason] - Disables hotpatching the specified part of the simulator. Requires: &`, - `/allowhotpatch [chat|formats|battles|validator|tournaments|punishments|modlog|all] [reason] - Enables hotpatching the specified part of the simulator. Requires: &`, + `/nohotpatch [chat|formats|battles|validator|tournaments|punishments|modlog|all] [reason] - Disables hotpatching the specified part of the simulator. Requires: ~`, + `/allowhotpatch [chat|formats|battles|validator|tournaments|punishments|modlog|all] [reason] - Enables hotpatching the specified part of the simulator. Requires: ~`, ], async processes(target, room, user) { @@ -976,7 +1013,7 @@ export const commands: Chat.ChatCommands = { this.sendReplyBox(buf); }, processeshelp: [ - `/processes - Get information about the running processes on the server. Requires: &.`, + `/processes - Get information about the running processes on the server. Requires: ~.`, ], async savelearnsets(target, room, user, connection) { @@ -997,7 +1034,7 @@ export const commands: Chat.ChatCommands = { this.sendReply("learnsets.js saved."); }, savelearnsetshelp: [ - `/savelearnsets - Saves the learnset list currently active on the server. Requires: &`, + `/savelearnsets - Saves the learnset list currently active on the server. Requires: ~`, ], toggleripgrep(target, room, user) { @@ -1005,7 +1042,7 @@ export const commands: Chat.ChatCommands = { Config.disableripgrep = !Config.disableripgrep; this.addGlobalModAction(`${user.name} ${Config.disableripgrep ? 'disabled' : 'enabled'} Ripgrep-related functionality.`); }, - toggleripgrephelp: [`/toggleripgrep - Disable/enable all functionality depending on Ripgrep. Requires: &`], + toggleripgrephelp: [`/toggleripgrep - Disable/enable all functionality depending on Ripgrep. Requires: ~`], disablecommand(target, room, user) { this.checkCan('makeroom'); @@ -1028,7 +1065,7 @@ export const commands: Chat.ChatCommands = { this.addGlobalModAction(`${user.name} disabled the command /${fullCmd}.`); this.globalModlog(`DISABLECOMMAND`, null, target); }, - disablecommandhelp: [`/disablecommand [command] - Disables the given [command]. Requires: &`], + disablecommandhelp: [`/disablecommand [command] - Disables the given [command]. Requires: ~`], widendatacenters: 'adddatacenters', adddatacenters() { @@ -1057,10 +1094,10 @@ export const commands: Chat.ChatCommands = { curRoom.addRaw(`
${innerHTML}
`).update(); } for (const u of Users.users.values()) { - if (u.connected) u.send(`|pm|&|${u.tempGroup}${u.name}|/raw
${innerHTML}
`); + if (u.connected) u.send(`|pm|~|${u.tempGroup}${u.name}|/raw
${innerHTML}
`); } }, - disableladderhelp: [`/disableladder - Stops all rated battles from updating the ladder. Requires: &`], + disableladderhelp: [`/disableladder - Stops all rated battles from updating the ladder. Requires: ~`], enableladder(target, room, user) { this.checkCan('disableladder'); @@ -1081,10 +1118,10 @@ export const commands: Chat.ChatCommands = { curRoom.addRaw(`
${innerHTML}
`).update(); } for (const u of Users.users.values()) { - if (u.connected) u.send(`|pm|&|${u.tempGroup}${u.name}|/raw
${innerHTML}
`); + if (u.connected) u.send(`|pm|~|${u.tempGroup}${u.name}|/raw
${innerHTML}
`); } }, - enableladderhelp: [`/enable - Allows all rated games to update the ladder. Requires: &`], + enableladderhelp: [`/enable - Allows all rated games to update the ladder. Requires: ~`], lockdown(target, room, user) { this.checkCan('lockdown'); @@ -1100,7 +1137,7 @@ export const commands: Chat.ChatCommands = { this.stafflog(`${user.name} used /lockdown`); }, lockdownhelp: [ - `/lockdown - locks down the server, which prevents new battles from starting so that the server can eventually be restarted. Requires: &`, + `/lockdown - locks down the server, which prevents new battles from starting so that the server can eventually be restarted. Requires: ~`, ], autolockdown: 'autolockdownkill', @@ -1124,8 +1161,8 @@ export const commands: Chat.ChatCommands = { } }, autolockdownkillhelp: [ - `/autolockdownkill on - Turns on the setting to enable the server to automatically kill itself upon the final battle finishing. Requires &`, - `/autolockdownkill off - Turns off the setting to enable the server to automatically kill itself upon the final battle finishing. Requires &`, + `/autolockdownkill on - Turns on the setting to enable the server to automatically kill itself upon the final battle finishing. Requires ~`, + `/autolockdownkill off - Turns off the setting to enable the server to automatically kill itself upon the final battle finishing. Requires ~`, ], prelockdown(target, room, user) { @@ -1134,7 +1171,7 @@ export const commands: Chat.ChatCommands = { this.privateGlobalModAction(`${user.name} used /prelockdown (disabled tournaments in preparation for server restart)`); }, - prelockdownhelp: [`/prelockdown - Prevents new tournaments from starting so that the server can be restarted. Requires: &`], + prelockdownhelp: [`/prelockdown - Prevents new tournaments from starting so that the server can be restarted. Requires: ~`], slowlockdown(target, room, user) { this.checkCan('lockdown'); @@ -1145,7 +1182,7 @@ export const commands: Chat.ChatCommands = { }, slowlockdownhelp: [ `/slowlockdown - Locks down the server, but disables the automatic restart after all battles end.`, - `Requires: &`, + `Requires: ~`, ], crashfixed: 'endlockdown', @@ -1167,7 +1204,7 @@ export const commands: Chat.ChatCommands = { curRoom.addRaw(message).update(); } for (const curUser of Users.users.values()) { - curUser.send(`|pm|&|${curUser.tempGroup}${curUser.name}|/raw ${message}`); + curUser.send(`|pm|~|${curUser.tempGroup}${curUser.name}|/raw ${message}`); } } else { this.sendReply("Preparation for the server shutdown was canceled."); @@ -1177,8 +1214,8 @@ export const commands: Chat.ChatCommands = { this.stafflog(`${user.name} used /endlockdown`); }, endlockdownhelp: [ - `/endlockdown - Cancels the server restart and takes the server out of lockdown state. Requires: &`, - `/crashfixed - Ends the active lockdown caused by a crash without the need of a restart. Requires: &`, + `/endlockdown - Cancels the server restart and takes the server out of lockdown state. Requires: ~`, + `/crashfixed - Ends the active lockdown caused by a crash without the need of a restart. Requires: ~`, ], emergency(target, room, user) { @@ -1195,7 +1232,7 @@ export const commands: Chat.ChatCommands = { this.stafflog(`${user.name} used /emergency.`); }, emergencyhelp: [ - `/emergency - Turns on emergency mode and enables extra logging. Requires: &`, + `/emergency - Turns on emergency mode and enables extra logging. Requires: ~`, ], endemergency(target, room, user) { @@ -1212,7 +1249,7 @@ export const commands: Chat.ChatCommands = { this.stafflog(`${user.name} used /endemergency.`); }, endemergencyhelp: [ - `/endemergency - Turns off emergency mode. Requires: &`, + `/endemergency - Turns off emergency mode. Requires: ~`, ], remainingbattles() { @@ -1234,7 +1271,7 @@ export const commands: Chat.ChatCommands = { this.sendReplyBox(buf); }, remainingbattleshelp: [ - `/remainingbattles - View a list of the remaining battles during lockdown. Requires: &`, + `/remainingbattles - View a list of the remaining battles during lockdown. Requires: ~`, ], async savebattles(target, room, user) { @@ -1264,7 +1301,7 @@ export const commands: Chat.ChatCommands = { Rooms.global.lockdown = true; // we don't want more battles starting while we save for (const u of Users.users.values()) { u.send( - `|pm|&|${u.getIdentity()}|/raw
The server is restarting soon.
` + + `|pm|~|${u.getIdentity()}|/raw
The server is restarting soon.
` + `While battles are being saved, no more can be started. If you're in a battle, it will be paused during saving.
` + `After the restart, you will be able to resume your battles from where you left off.` ); @@ -1291,7 +1328,7 @@ export const commands: Chat.ChatCommands = { }, killhelp: [ `/kill - kills the server. Use the argument \`nosave\` to prevent the saving of battles.`, - ` If this argument is used, the server must be in lockdown. Requires: &`, + ` If this argument is used, the server must be in lockdown. Requires: ~`, ], loadbanlist(target, room, user, connection) { @@ -1304,16 +1341,21 @@ export const commands: Chat.ChatCommands = { ); }, loadbanlisthelp: [ - `/loadbanlist - Loads the bans located at ipbans.txt. The command is executed automatically at startup. Requires: &`, + `/loadbanlist - Loads the bans located at ipbans.txt. The command is executed automatically at startup. Requires: ~`, ], refreshpage(target, room, user) { this.checkCan('lockdown'); + if (user.lastCommand !== 'refreshpage') { + user.lastCommand = 'refreshpage'; + this.errorReply(`Are you sure you wish to refresh the page for every user online?`); + return this.errorReply(`If you are sure, please type /refreshpage again to confirm.`); + } Rooms.global.sendAll('|refresh|'); this.stafflog(`${user.name} used /refreshpage`); }, refreshpagehelp: [ - `/refreshpage - refreshes the page for every user online. Requires: &`, + `/refreshpage - refreshes the page for every user online. Requires: ~`, ], async updateserver(target, room, user, connection) { @@ -1414,7 +1456,7 @@ export const commands: Chat.ChatCommands = { }, updateclienthelp: [ `/updateclient [full] - Update the client source code. Provide the argument 'full' to make it a full rebuild.`, - `Requires: & console access`, + `Requires: ~ console access`, ], async rebuild() { @@ -1438,7 +1480,7 @@ export const commands: Chat.ChatCommands = { this.runBroadcast(); this.sendReply(`${stdout}${stderr}`); }, - bashhelp: [`/bash [command] - Executes a bash command on the server. Requires: & console access`], + bashhelp: [`/bash [command] - Executes a bash command on the server. Requires: ~ console access`], async eval(target, room, user, connection) { this.canUseConsole(); @@ -1483,7 +1525,7 @@ export const commands: Chat.ChatCommands = { } }, evalhelp: [ - `/eval [code] - Evaluates the code given and shows results. Requires: & console access.`, + `/eval [code] - Evaluates the code given and shows results. Requires: ~ console access.`, ], async evalsql(target, room) { @@ -1565,7 +1607,7 @@ export const commands: Chat.ChatCommands = { }, evalsqlhelp: [ `/evalsql [database], [query] - Evaluates the given SQL [query] in the given [database].`, - `Requires: & console access`, + `Requires: ~ console access`, ], evalbattle(target, room, user, connection) { @@ -1579,7 +1621,7 @@ export const commands: Chat.ChatCommands = { void room.battle.stream.write(`>eval ${target.replace(/\n/g, '\f')}`); }, evalbattlehelp: [ - `/evalbattle [code] - Evaluates the code in the battle stream of the current room. Requires: & console access.`, + `/evalbattle [code] - Evaluates the code in the battle stream of the current room. Requires: ~ console access.`, ], ebat: 'editbattle', diff --git a/server/chat-commands/avatars.tsx b/server/chat-commands/avatars.tsx index 2c6efec8e60b..1c17bfc5ccc7 100644 --- a/server/chat-commands/avatars.tsx +++ b/server/chat-commands/avatars.tsx @@ -202,7 +202,7 @@ export const Avatars = new class { const entry = customAvatars[user.id]; if (entry?.notNotified) { user.send( - `|pm|&|${user.getIdentity()}|/raw ` + + `|pm|~|${user.getIdentity()}|/raw ` + Chat.html`${<>

You have a new custom avatar! @@ -529,7 +529,7 @@ const OFFICIAL_AVATARS = new Set([ ]); const OFFICIAL_AVATARS_BELIOT419 = new Set([ - 'acerola', 'aetheremployee', 'aetheremployeef', 'aetherfoundation', 'aetherfoundationf', 'anabel', + 'acerola', 'aetheremployee', 'aetheremployeef', 'aetherfoundation', 'aetherfoundationf', 'anabel-gen7', 'beauty-gen7', 'blue-gen7', 'burnet', 'colress-gen7', 'dexio', 'elio', 'faba', 'gladion-stance', 'gladion', 'grimsley-gen7', 'hapu', 'hau-stance', 'hau', 'hiker-gen7', 'ilima', 'kahili', 'kiawe', 'kukui-stand', 'kukui', 'lana', 'lass-gen7', 'lillie-z', 'lillie', 'lusamine-nihilego', 'lusamine', @@ -553,7 +553,7 @@ const OFFICIAL_AVATARS_BRUMIRAGE = new Set([ 'mai', 'marnie', 'may-contest', 'melony', 'milo', 'mina-lgpe', 'mustard', 'mustard-master', 'nessa', 'oleana', 'opal', 'peony', 'pesselle', 'phoebe-gen6', 'piers', 'raihan', 'rei', 'rose', 'sabi', 'sada-ai', 'sanqua', 'shielbert', 'sonia', 'sonia-professor', 'sordward', 'sordward-shielbert', 'tateandliza-gen6', - 'turo-ai', 'victor', 'victor-dojo', 'volo', 'yellgrunt', 'yellgruntf', 'zisu', + 'turo-ai', 'victor', 'victor-dojo', 'volo', 'yellgrunt', 'yellgruntf', 'zisu', 'miku-flying', 'miku-ground', ]); const OFFICIAL_AVATARS_ZACWEAVILE = new Set([ @@ -625,14 +625,30 @@ const OFFICIAL_AVATARS_KYLEDOVE = new Set([ 'laventon2', 'liza-masters', 'mallow-masters', 'musician-gen9', 'nemona-s', 'officeworker-gen9', 'officeworkerf-gen9', 'pearlclanmember', 'raifort', 'saguaro', 'salvatore', 'scientist-gen9', 'shauna-masters', 'silver-masters', 'steven-masters4', 'tate-masters', 'waiter-gen9', 'waitress-gen9', + 'acerola-masters2', 'aetherfoundation2', 'amarys', 'artist-gen9', 'backpacker-gen9', 'blackbelt-gen9', 'blue-masters2', + 'brendan-rs', 'briar', 'cabbie-gen9', 'caretaker', 'clair-masters', 'clive-v', 'cook-gen9', 'courier', 'crispin', 'cyrano', + 'delinquent-gen9', 'delinquentf-gen9', 'delinquentf2-gen9', 'drayton', 'flaregrunt', 'flaregruntf', 'florian-festival', + 'gloria-league', 'gloria-tundra', 'hau-masters', 'hiker-gen9', 'hyde', 'janitor-gen9', 'juliana-festival', + 'kieran-champion', 'lacey', 'lana-masters', 'leaf-masters2', 'liza-gen6', 'lysandre-masters', 'may-e', 'may-rs', 'miku-fire', + 'miku-grass', 'miku-psychic', 'miku-water', 'mina-masters', 'mustard-champion', 'nate-masters', 'nate-pokestar', 'ogreclan', + 'perrin', 'piers-masters', 'red-masters3', 'rosa-pokestar2', 'roxanne-masters', 'roxie-masters', 'ruffian', 'sycamore-masters', + 'tate-gen6', 'tucker', 'victor-league', 'victor-tundra', 'viola-masters', 'wallace-masters', 'worker-gen9', 'yukito-hideko', + 'aarune', 'adaman-masters', 'allister-unmasked', 'anabel', 'aquagrunt-rse', 'aquagruntf-rse', 'aquasuit', 'archie-usum', + 'arlo', 'barry-masters', 'blanche-casual', 'blanche', 'brandon', 'candela-casual', 'candela', 'candice-masters', 'christoph', + 'cliff', 'curtis', 'dana', 'gladion-masters', 'greta', 'gurkinn', 'heath', 'irida-masters', 'jamie', 'magmagrunt-rse', + 'magmagruntf-rse', 'magmasuit', 'magnus', 'mateo', 'mirror', 'mohn-anime', 'mohn', 'mom-paldea', 'mom-unova', 'mrbriney', + 'mrstone', 'nancy', 'nate-pokestar3', 'neroli', 'peony-league', 'phil', 'player-go', 'playerf-go', 'rhi', 'rita', 'river', + 'rosa-pokestar3', 'sabrina-frlg', 'selene-masters', 'sierra', 'spark-casual', 'spark', 'spenser', 'toddsnap', 'toddsnap2', + 'victor-masters', 'vince', 'wally-rse', 'willow-casual', 'willow', 'yancy', 'zinnia-masters', + 'acerola-masters3', 'bianca-masters', 'cheren-masters', 'gardenia-masters', ]); const OFFICIAL_AVATARS_HYOOPPA = new Set([ - 'brendan', 'maxie-gen6', 'may', + 'brendan', 'brendan-e', 'maxie-gen6', 'may', ]); const OFFICIAL_AVATARS_GRAPO = new Set([ - 'glacia', 'peonia', 'skyla-masters2', 'volo-ginkgo', + 'glacia', 'peonia', 'phoebe-masters', 'rosa-masters3', 'scottie-masters', 'skyla-masters2', 'volo-ginkgo', ]); const OFFICIAL_AVATARS_FIFTY = new Set([ @@ -640,7 +656,11 @@ const OFFICIAL_AVATARS_FIFTY = new Set([ ]); const OFFICIAL_AVATARS_HORO = new Set([ - 'florian-bb', 'juliana-bb', + 'florian-bb', 'juliana-bb', 'red-lgpe', +]); + +const OFFICIAL_AVATARS_SELENA = new Set([ + 'kris', ]); for (const avatar of OFFICIAL_AVATARS_BELIOT419) OFFICIAL_AVATARS.add(avatar); @@ -652,6 +672,7 @@ for (const avatar of OFFICIAL_AVATARS_HYOOPPA) OFFICIAL_AVATARS.add(avatar); for (const avatar of OFFICIAL_AVATARS_GRAPO) OFFICIAL_AVATARS.add(avatar); for (const avatar of OFFICIAL_AVATARS_FIFTY) OFFICIAL_AVATARS.add(avatar); for (const avatar of OFFICIAL_AVATARS_HORO) OFFICIAL_AVATARS.add(avatar); +for (const avatar of OFFICIAL_AVATARS_SELENA) OFFICIAL_AVATARS.add(avatar); export const commands: Chat.ChatCommands = { avatar(target, room, user) { @@ -701,6 +722,9 @@ export const commands: Chat.ChatCommands = { if (OFFICIAL_AVATARS_HORO.has(avatar)) { this.sendReply(`|raw|(${this.tr`Artist: `}Horo)`); } + if (OFFICIAL_AVATARS_SELENA.has(avatar)) { + this.sendReply(`|raw|(${this.tr`Artist: `}Selena)`); + } } }, avatarhelp: [`/avatar [avatar name or number] - Change your trainer sprite.`], @@ -762,7 +786,7 @@ export const commands: Chat.ChatCommands = { avatarshelp: [ `/avatars - Explains how to change avatars.`, `/avatars [username] - Shows custom avatars available to a user.`, - `!avatars - Show everyone that information. Requires: + % @ # &`, + `!avatars - Show everyone that information. Requires: + % @ # ~`, ], addavatar() { @@ -916,7 +940,7 @@ export const commands: Chat.ChatCommands = { Avatars.tryNotify(Users.get(to)); }, moveavatarshelp: [ - `/moveavatars [from user], [to user] - Move all of the custom avatars from [from user] to [to user]. Requires: &`, + `/moveavatars [from user], [to user] - Move all of the custom avatars from [from user] to [to user]. Requires: ~`, ], async masspavatar(target, room, user) { diff --git a/server/chat-commands/core.ts b/server/chat-commands/core.ts index 17fd2a20af32..9334f78074c6 100644 --- a/server/chat-commands/core.ts +++ b/server/chat-commands/core.ts @@ -16,7 +16,7 @@ /* eslint no-else-return: "error" */ import {Utils} from '../../lib'; import type {UserSettings} from '../users'; -import type {GlobalPermission} from '../user-groups'; +import type {GlobalPermission, RoomPermission} from '../user-groups'; export const crqHandlers: {[k: string]: Chat.CRQHandler} = { userdetails(target, user, trustable) { @@ -131,6 +131,50 @@ export const crqHandlers: {[k: string]: Chat.CRQHandler} = { } return roominfo; }, + fullformat(target, user, trustable) { + if (!trustable) return false; + + if (target.length > 225) { + return null; + } + const targetRoom = Rooms.get(target); + if (!targetRoom?.battle?.playerTable[user.id]) { + return null; + } + + return targetRoom.battle.format; + }, + cmdsearch(target, user, trustable) { + // in no world should ths be a thing. our longest command name is 37 chars + if (target.length > 40) return null; + const cmdPrefix = target.charAt(0); + if (!['/', '!'].includes(cmdPrefix)) return null; + target = toID(target.slice(1)); + + const results = []; + for (const command of Chat.allCommands()) { + if (cmdPrefix === '!' && !command.broadcastable) continue; + const req = command.requiredPermission as GlobalPermission; + if (!!req && + !(command.hasRoomPermissions ? !!this.room && user.can(req as RoomPermission, null, this.room) : user.can(req)) + ) { + continue; + } + const cmds = [ + command.fullCmd, + ...command.aliases.map(x => command.fullCmd.replace(command.cmd, `${x}`)), + ]; + for (const cmd of cmds) { + if (toID(cmd).startsWith(target)) { + results.push(cmdPrefix + cmd); + break; + } + } + // limit number of results to prevent spam + if (results.length >= 20) break; + } + return results; + }, }; export const commands: Chat.ChatCommands = { @@ -229,6 +273,28 @@ export const commands: Chat.ChatCommands = { }, noreplyhelp: [`/noreply [command] - Runs the command without displaying the response.`], + async linksmogon(target, room, user) { + if (Config.smogonauth && !Users.globalAuth.atLeast(user, Config.smogonauth)) { + throw new Chat.ErrorMessage("Access denied."); + } + if (!user.registered) { + throw new Chat.ErrorMessage( + "You must be registered in order to use this command. If you just registered, please refresh and try again." + ); + } + this.sendReply("Linking..."); + const response = await LoginServer.request("smogon/validate", { + username: user.id, + }); + const name = response[0]?.signed_username; + if (response[1] || !name) { + throw new Chat.ErrorMessage("Error while verifying username: " + (response[1]?.message || "malformed name received")); + } + const link = `https://www.smogon.com/tools/connect-ps-account/${user.id}/${name}`; + user.send(`|openpage|${link}`); + this.sendReply(`|html|If the page failed to open, you may link your Smogon and PS accounts by clicking this link.`); + }, + async msgroom(target, room, user, connection) { const [targetId, message] = Utils.splitFirst(target, ',').map(i => i.trim()); if (!targetId || !message) { @@ -279,7 +345,7 @@ export const commands: Chat.ChatCommands = { } user.lastCommand = 'pm'; return this.errorReply( - this.tr`User ${targetUsername} is offline. If you still want to PM them, send the message again, or use /offlinemsg.` + this.tr`User ${targetUsername} is offline. Send the message again to confirm. If you are using /msg, use /offlinemsg instead.` ); } let error = this.tr`User ${targetUsername} not found. Did you misspell their name?`; @@ -299,7 +365,7 @@ export const commands: Chat.ChatCommands = { } user.lastCommand = 'pm'; return this.errorReply( - this.tr`User ${targetUsername} is offline. If you still want to PM them, send the message again, or use /offlinemsg.` + this.tr`User ${targetUsername} is offline. Send the message again to confirm. If you are using /msg, use /offlinemsg instead.` ); } return this.errorReply(`${targetUsername} is offline.`); @@ -362,10 +428,23 @@ export const commands: Chat.ChatCommands = { const pmTarget = this.pmTarget; // not room means it's a PM if (!pmTarget) { - const {targetUser, rest: targetRoomid} = this.requireUser(target); - const targetRoom = targetRoomid ? Rooms.search(targetRoomid) : room; - if (!targetRoom) return this.errorReply(this.tr`The room "${targetRoomid}" was not found.`); - return this.parse(`/pm ${targetUser.name}, /invite ${targetRoom.roomid}`); + const users = target.split(',').map(part => part.trim()); + let targetRoom; + if (users.length > 1 && Rooms.search(users[users.length - 1])) { + targetRoom = users.pop(); + } else { + targetRoom = room; + } + if (users.length > 1 && !user.trusted) { + return this.errorReply("You do not have permission to mass-invite users."); + } + if (users.length > 10) { + return this.errorReply("You cannot invite more than 10 users at once."); + } + for (const toInvite of users) { + this.parse(`/pm ${toInvite}, /invite ${targetRoom}`); + } + return; } const targetRoom = Rooms.search(target); @@ -392,6 +471,7 @@ export const commands: Chat.ChatCommands = { }, invitehelp: [ `/invite [username] - Invites the player [username] to join the room you sent the command to.`, + `/invite [comma-separated usernames] - Invites multiple users to join the room you sent the command to. Requires trusted`, `/invite [username], [roomname] - Invites the player [username] to join the room [roomname].`, `(in a PM) /invite [roomname] - Invites the player you're PMing to join the room [roomname].`, ], @@ -492,7 +572,7 @@ export const commands: Chat.ChatCommands = { }, blockinviteshelp: [ `/blockinvites [rank] - Allows only users with the given [rank] to invite you to rooms.`, - `Valid settings: autoconfirmed, trusted, unlocked, +, %, @, &.`, + `Valid settings: autoconfirmed, trusted, unlocked, +, %, @, ~.`, `/unblockinvites - Allows anyone to invite you to rooms.`, ], @@ -561,7 +641,7 @@ export const commands: Chat.ChatCommands = { }, clearstatushelp: [ `/clearstatus - Clears your status message.`, - `/clearstatus user, reason - Clears another person's status message. Requires: % @ &`, + `/clearstatus user, reason - Clears another person's status message. Requires: % @ ~`, ], unaway: 'back', @@ -620,8 +700,7 @@ export const commands: Chat.ChatCommands = { if (user.tempGroup === group) { return this.errorReply(this.tr`You already have the temporary symbol '${group}'.`); } - if (!Users.Auth.isValidSymbol(group) || !(group in Config.groups) || - (group === Users.SECTIONLEADER_SYMBOL && !(Users.globalAuth.sectionLeaders.has(user.id) || user.can('bypassall')))) { + if (!Users.Auth.isValidSymbol(group) || !(group in Config.groups)) { return this.errorReply(this.tr`You must specify a valid group symbol.`); } if (!isShow && Config.groups[group].rank > Config.groups[user.tempGroup].rank) { @@ -784,7 +863,7 @@ export const commands: Chat.ChatCommands = { this.sendReply(this.tr`Battle input log re-requested.`); } }, - exportinputloghelp: [`/exportinputlog - Asks players in a battle for permission to export an inputlog. Requires: &`], + exportinputloghelp: [`/exportinputlog - Asks players in a battle for permission to export an inputlog. Requires: ~`], importinputlog(target, room, user, connection) { this.checkCan('importinputlog'); @@ -797,22 +876,10 @@ export const commands: Chat.ChatCommands = { } const formatid = target.slice(formatIndex + 12, nextQuoteIndex); - const battleRoom = Rooms.createBattle({format: formatid, inputLog: target}); + const battleRoom = Rooms.createBattle({format: formatid, players: [], inputLog: target}); if (!battleRoom) return; // createBattle will inform the user if creating the battle failed - const nameIndex1 = target.indexOf(`"name":"`); - const nameNextQuoteIndex1 = target.indexOf(`"`, nameIndex1 + 8); - const nameIndex2 = target.indexOf(`"name":"`, nameNextQuoteIndex1 + 1); - const nameNextQuoteIndex2 = target.indexOf(`"`, nameIndex2 + 8); - if (nameIndex1 >= 0 && nameNextQuoteIndex1 >= 0 && nameIndex2 >= 0 && nameNextQuoteIndex2 >= 0) { - const battle = battleRoom.battle!; - battle.p1.name = target.slice(nameIndex1 + 8, nameNextQuoteIndex1); - battle.p2.name = target.slice(nameIndex2 + 8, nameNextQuoteIndex2); - } battleRoom.auth.set(user.id, Users.HOST_SYMBOL); - for (const player of battleRoom.battle!.players) { - player.hasTeam = true; - } this.parse(`/join ${battleRoom.roomid}`); setTimeout(() => { // timer to make sure this goes under the battle @@ -821,7 +888,7 @@ export const commands: Chat.ChatCommands = { battleRoom.battle!.sendInviteForm(user); }, 500); }, - importinputloghelp: [`/importinputlog [inputlog] - Starts a battle with a given inputlog. Requires: + % @ &`], + importinputloghelp: [`/importinputlog [inputlog] - Starts a battle with a given inputlog. Requires: + % @ ~`], showteam: 'showset', async showset(target, room, user, connection, cmd) { @@ -869,7 +936,7 @@ export const commands: Chat.ChatCommands = { confirmready(target, room, user) { const game = this.requireGame(Rooms.BestOfGame); - game.confirmReady(user.id); + game.confirmReady(user); }, acceptopenteamsheets(target, room, user, connection, cmd) { @@ -982,7 +1049,7 @@ export const commands: Chat.ChatCommands = { } } }, - offertiehelp: [`/offertie - Offers a tie to all players in a battle; if all accept, it ties. Can only be used after 100+ turns have passed. Requires: \u2606 @ # &`], + offertiehelp: [`/offertie - Offers a tie to all players in a battle; if all accept, it ties. Can only be used after 100+ turns have passed. Requires: \u2606 @ # ~`], rejectdraw: 'rejecttie', rejecttie(target, room, user) { @@ -1095,7 +1162,7 @@ export const commands: Chat.ChatCommands = { if (room.battle.replaySaved) this.parse('/savereplay'); this.addModAction(room.tr`${user.name} hid the replay of this battle.`); }, - hidereplayhelp: [`/hidereplay - Hides the replay of the current battle. Requires: ${Users.PLAYER_SYMBOL} &`], + hidereplayhelp: [`/hidereplay - Hides the replay of the current battle. Requires: ${Users.PLAYER_SYMBOL} ~`], addplayer: 'invitebattle', invitebattle(target, room, user, connection) { @@ -1221,7 +1288,7 @@ export const commands: Chat.ChatCommands = { }, uninvitebattlehelp: [ `/uninvitebattle [username] - Revokes an invite from a user to join a battle.`, - `Requires: ${Users.PLAYER_SYMBOL} &`, + `Requires: ${Users.PLAYER_SYMBOL} ~`, ], restoreplayers(target, room, user) { @@ -1283,7 +1350,7 @@ export const commands: Chat.ChatCommands = { this.errorReply("/kickbattle - User isn't in battle."); } }, - kickbattlehelp: [`/kickbattle [username], [reason] - Kicks a user from a battle with reason. Requires: % @ &`], + kickbattlehelp: [`/kickbattle [username], [reason] - Kicks a user from a battle with reason. Requires: % @ ~`], kickinactive(target, room, user) { this.parse(`/timer on`); @@ -1329,7 +1396,7 @@ export const commands: Chat.ChatCommands = { } }, timerhelp: [ - `/timer [start|stop] - Starts or stops the game timer. Requires: ${Users.PLAYER_SYMBOL} % @ &`, + `/timer [start|stop] - Starts or stops the game timer. Requires: ${Users.PLAYER_SYMBOL} % @ ~`, ], autotimer: 'forcetimer', @@ -1348,7 +1415,7 @@ export const commands: Chat.ChatCommands = { } }, forcetimerhelp: [ - `/forcetimer [start|stop] - Forces all battles to have the inactive timer enabled. Requires: &`, + `/forcetimer [start|stop] - Forces all battles to have the inactive timer enabled. Requires: ~`, ], forcetie: 'forcewin', @@ -1376,8 +1443,8 @@ export const commands: Chat.ChatCommands = { this.modlog('FORCEWIN', targetUser.id); }, forcewinhelp: [ - `/forcetie - Forces the current match to end in a tie. Requires: &`, - `/forcewin [user] - Forces the current match to end in a win for a user. Requires: &`, + `/forcetie - Forces the current match to end in a tie. Requires: ~`, + `/forcewin [user] - Forces the current match to end in a win for a user. Requires: ~`, ], /********************************************************* @@ -1636,7 +1703,7 @@ export const commands: Chat.ChatCommands = { if (target.startsWith('/') || target.startsWith('!')) target = target.slice(1); if (!target) { - const broadcastMsg = this.tr`(replace / with ! to broadcast. Broadcasting requires: + % @ # &)`; + const broadcastMsg = this.tr`(replace / with ! to broadcast. Broadcasting requires: + % @ # ~)`; this.sendReply(`${this.tr`COMMANDS`}: /report, /msg, /reply, /logout, /challenge, /search, /rating, /whois, /user, /join, /leave, /userauth, /roomauth`); this.sendReply(`${this.tr`BATTLE ROOM COMMANDS`}: /savereplay, /hideroom, /inviteonly, /invite, /timer, /forfeit`); diff --git a/server/chat-commands/info.ts b/server/chat-commands/info.ts index 541c9e2efe8a..3115769ef988 100644 --- a/server/chat-commands/info.ts +++ b/server/chat-commands/info.ts @@ -16,6 +16,11 @@ import {RoomSections} from './room-settings'; const ONLINE_SYMBOL = ` \u25C9 `; const OFFLINE_SYMBOL = ` \u25CC `; +interface DexResources { + url: string; + resources: {resource_name: string, url: string}[]; +} + export function getCommonBattles( userID1: ID, user1: User | null, userID2: ID, user2: User | null, connection: Connection ) { @@ -67,6 +72,30 @@ export function findFormats(targetId: string, isOMSearch = false) { return {totalMatches, sections}; } +export const formatsDataCache = new Map(); +export async function getFormatResources(format: string) { + const cached = formatsDataCache.get(format); + if (cached !== undefined) return cached; + try { + const raw = await Net(`https://www.smogon.com/dex/api/formats/by-ps-name/${format}`).get(); + const data = JSON.parse(raw); + formatsDataCache.set(format, data); + return data; + } catch { + // some sort of json error or request can't be made + // so something on smogon's end. freeze the request, punt + formatsDataCache.set(format, null); + return null; + } +} + +// clear every 15 minutes to ensure it's only minimally stale +const resourceRefreshInterval = setInterval(() => formatsDataCache.clear(), 15 * 60 * 1000); + +export function destroy() { + clearInterval(resourceRefreshInterval); +} + export const commands: Chat.ChatCommands = { ip: 'whois', rooms: 'whois', @@ -318,7 +347,7 @@ export const commands: Chat.ChatCommands = { }, whoishelp: [ `/whois - Get details on yourself: alts, group, IP address, and rooms.`, - `/whois [username] - Get details on a username: alts (Requires: % @ &), group, IP address (Requires: @ &), and rooms.`, + `/whois [username] - Get details on a username: alts (Requires: % @ ~), group, IP address (Requires: @ ~), and rooms.`, ], 'chp': 'offlinewhois', @@ -418,7 +447,7 @@ export const commands: Chat.ChatCommands = { return Utils.html`${shortId}`; }).join(' | ')); }, - sharedbattleshelp: [`/sharedbattles [user1], [user2] - Finds recent battles common to [user1] and [user2]. Requires % @ &`], + sharedbattleshelp: [`/sharedbattles [user1], [user2] - Finds recent battles common to [user1] and [user2]. Requires % @ ~`], sp: 'showpunishments', showpunishments(target, room, user) { @@ -428,14 +457,14 @@ export const commands: Chat.ChatCommands = { } return this.parse(`/join view-punishments-${room}`); }, - showpunishmentshelp: [`/showpunishments - Shows the current punishments in the room. Requires: % @ # &`], + showpunishmentshelp: [`/showpunishments - Shows the current punishments in the room. Requires: % @ # ~`], sgp: 'showglobalpunishments', showglobalpunishments(target, room, user) { this.checkCan('lock'); return this.parse(`/join view-globalpunishments`); }, - showglobalpunishmentshelp: [`/showpunishments - Shows the current global punishments. Requires: % @ # &`], + showglobalpunishmentshelp: [`/showpunishments - Shows the current global punishments. Requires: % @ # ~`], async host(target, room, user, connection, cmd) { if (!target) return this.parse('/help host'); @@ -446,7 +475,7 @@ export const commands: Chat.ChatCommands = { const dnsblMessage = dnsbl ? ` [${dnsbl}]` : ``; this.sendReply(`IP ${target}: ${host || "ERROR"} [${hostType}]${dnsblMessage}`); }, - hosthelp: [`/host [ip] - Gets the host for a given IP. Requires: % @ &`], + hosthelp: [`/host [ip] - Gets the host for a given IP. Requires: % @ ~`], searchip: 'ipsearch', ipsearchall: 'ipsearch', @@ -502,7 +531,7 @@ export const commands: Chat.ChatCommands = { this.sendReply(`More than 100 users found. Use /ipsearchall for the full list.`); } }, - ipsearchhelp: [`/ipsearch [ip|range|host], (room) - Find all users with specified IP, IP range, or host. If a room is provided only users in the room will be shown. Requires: &`], + ipsearchhelp: [`/ipsearch [ip|range|host], (room) - Find all users with specified IP, IP range, or host. If a room is provided only users in the room will be shown. Requires: ~`], checkchallenges(target, room, user) { room = this.requireRoom(); @@ -527,7 +556,7 @@ export const commands: Chat.ChatCommands = { const [from, to] = user1.id === chall.from ? [user1, user2] : [user2, user1]; this.sendReplyBox(Utils.html`${from.name} is challenging ${to.name} in ${Dex.formats.get(chall.format).name}.`); }, - checkchallengeshelp: [`!checkchallenges [user1], [user2] - Check if the specified users are challenging each other. Requires: * @ # &`], + checkchallengeshelp: [`!checkchallenges [user1], [user2] - Check if the specified users are challenging each other. Requires: * @ # ~`], /********************************************************* * Client fallback @@ -552,10 +581,11 @@ export const commands: Chat.ChatCommands = { pokedex: 'data', data(target, room, user, connection, cmd) { if (!this.runBroadcast()) return; + target = target.trim(); const gen = parseInt(cmd.substr(-1)); if (gen) target += `, gen${gen}`; - const {dex, format, targets} = this.splitFormat(target, true); + const {dex, format, targets} = this.splitFormat(target, true, true); let buffer = ''; target = targets.join(','); @@ -630,7 +660,7 @@ export const commands: Chat.ChatCommands = { }; details["Weight"] = `${pokemon.weighthg / 10} kg (${weighthit} BP)`; const gmaxMove = pokemon.canGigantamax || dex.species.get(pokemon.changesFrom).canGigantamax; - if (gmaxMove && dex.gen >= 8) details["G-Max Move"] = gmaxMove; + if (gmaxMove && dex.gen === 8) details["G-Max Move"] = gmaxMove; if (pokemon.color && dex.gen >= 5) details["Dex Colour"] = pokemon.color; if (pokemon.eggGroups && dex.gen >= 2) details["Egg Group(s)"] = pokemon.eggGroups.join(", "); const evos: string[] = []; @@ -716,7 +746,9 @@ export const commands: Chat.ChatCommands = { Gen: String(move.gen) || 'CAP', }; - if (move.isNonstandard === "Past" && dex.gen >= 8) details["✗ Past Gens Only"] = ""; + 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.flags['contact'] && dex.gen >= 3) details["✓ Contact"] = ""; if (move.flags['sound'] && dex.gen >= 3) details["✓ Sound"] = ""; @@ -774,13 +806,11 @@ export const commands: Chat.ChatCommands = { } } - if (dex.gen >= 8) { - if (move.isMax) { - details["✓ Max Move"] = ""; - if (typeof move.isMax === "string") details["User"] = `${move.isMax}`; - } else if (move.maxMove?.basePower) { - details["Dynamax Power"] = String(move.maxMove.basePower); - } + if (move.isMax) { + details["✓ Max Move"] = ""; + if (typeof move.isMax === "string") details["User"] = `${move.isMax}`; + } else if (dex.gen === 8 && move.maxMove?.basePower) { + details["Dynamax Power"] = String(move.maxMove.basePower); } const targetTypes: {[k: string]: string} = { @@ -792,7 +822,7 @@ export const commands: Chat.ChatCommands = { allAdjacentFoes: "All Adjacent Opponents", foeSide: "Opposing Side", allySide: "User's Side", - allyTeam: "User's Side", + allyTeam: "User's Team", allAdjacent: "All Adjacent Pok\u00e9mon", any: "Any Pok\u00e9mon", all: "All Pok\u00e9mon", @@ -820,8 +850,8 @@ export const commands: Chat.ChatCommands = { details = { Gen: String(ability.gen) || 'CAP', }; - if (ability.isPermanent) details["✓ Not affected by Gastro Acid"] = ""; - if (ability.isBreakable) details["✓ Ignored by Mold Breaker"] = ""; + if (ability.flags['cantsuppress']) details["✓ Not affected by Gastro Acid"] = ""; + if (ability.flags['breakable']) details["✓ Ignored by Mold Breaker"] = ""; } break; default: @@ -839,7 +869,7 @@ export const commands: Chat.ChatCommands = { datahelp: [ `/data [pokemon/item/move/ability/nature] - Get details on this pokemon/item/move/ability/nature.`, `/data [pokemon/item/move/ability/nature], Gen [generation number/format name] - Get details on this pokemon/item/move/ability/nature for that generation/format.`, - `!data [pokemon/item/move/ability/nature] - Show everyone these details. Requires: + % @ # &`, + `!data [pokemon/item/move/ability/nature] - Show everyone these details. Requires: + % @ # ~`, ], dt: 'details', @@ -862,7 +892,7 @@ export const commands: Chat.ChatCommands = { `/details [Pok\u00e9mon/item/move/ability/nature], Gen [generation number]: get details on this Pok\u00e9mon/item/move/ability/nature in that generation.
` + `You can also append the generation number to /dt; for example, /dt1 Mewtwo gets details on Mewtwo in Gen 1.
` + `/details [Pok\u00e9mon/item/move/ability/nature], [format]: get details on this Pok\u00e9mon/item/move/ability/nature in that format.
` + - `!details [Pok\u00e9mon/item/move/ability/nature]: show everyone these details. Requires: + % @ # &` + `!details [Pok\u00e9mon/item/move/ability/nature]: show everyone these details. Requires: + % @ # ~` ); }, @@ -968,8 +998,8 @@ export const commands: Chat.ChatCommands = { weaknesshelp: [ `/weakness [pokemon] - Provides a Pok\u00e9mon's resistances, weaknesses, and immunities, ignoring abilities.`, `/weakness [type 1]/[type 2] - Provides a type or type combination's resistances, weaknesses, and immunities, ignoring abilities.`, - `!weakness [pokemon] - Shows everyone a Pok\u00e9mon's resistances, weaknesses, and immunities, ignoring abilities. Requires: + % @ # &`, - `!weakness [type 1]/[type 2] - Shows everyone a type or type combination's resistances, weaknesses, and immunities, ignoring abilities. Requires: + % @ # &`, + `!weakness [pokemon] - Shows everyone a Pok\u00e9mon's resistances, weaknesses, and immunities, ignoring abilities. Requires: + % @ # ~`, + `!weakness [type 1]/[type 2] - Shows everyone a type or type combination's resistances, weaknesses, and immunities, ignoring abilities. Requires: + % @ # ~`, ], eff: 'effectiveness', @@ -1130,23 +1160,14 @@ export const commands: Chat.ChatCommands = { const immune: string[] = []; for (const type in bestCoverage) { - switch (bestCoverage[type]) { - case 0: + if (bestCoverage[type] === 0) { immune.push(type); - break; - case 0.25: - case 0.5: + } else if (bestCoverage[type] < 1) { resists.push(type); - break; - case 1: - neutral.push(type); - break; - case 2: - case 4: + } else if (bestCoverage[type] > 1) { superEff.push(type); - break; - default: - throw new Error(`/coverage effectiveness of ${bestCoverage[type]} from parameters: ${target}`); + } else { + neutral.push(type); } } buffer.push(`Coverage for ${sources.join(' + ')}:`); @@ -1207,23 +1228,14 @@ export const commands: Chat.ChatCommands = { bestEff = Math.pow(2, bestEff); } } - switch (bestEff) { - case 0: + if (bestEff === 0) { cell += `bgcolor=#666666 title="${typing}">${bestEff}`; - break; - case 0.25: - case 0.5: + } else if (bestEff < 1) { cell += `bgcolor=#AA5544 title="${typing}">${bestEff}`; - break; - case 1: - cell += `bgcolor=#6688AA title="${typing}">${bestEff}`; - break; - case 2: - case 4: + } else if (bestEff > 1) { cell += `bgcolor=#559955 title="${typing}">${bestEff}`; - break; - default: - throw new Error(`/coverage effectiveness of ${bestEff} from parameters: ${target}`); + } else { + cell += `bgcolor=#6688AA title="${typing}">${bestEff}`; } cell += ''; buffer += cell; @@ -1286,8 +1298,11 @@ export const commands: Chat.ChatCommands = { } else if (lowercase.startsWith('lv') || lowercase.startsWith('level')) { level = parseInt(arg.replace(/\D/g, '')); lvlSet = true; + if (isNaN(level)) { + return this.sendReplyBox('Invalid value for level: ' + Utils.escapeHTML(arg)); + } if (level < 1 || level > 9999) { - return this.sendReplyBox('Invalid value for level: ' + level); + return this.sendReplyBox('Level should be between 1 and 9999.'); } continue; } @@ -1558,11 +1573,10 @@ export const commands: Chat.ChatCommands = { const globalRanks = [ `Global ranks`, `+ Global Voice - They can use ! commands like !groups`, - `§ Section Leader - They oversee rooms in a particular section`, `% Global Driver - Like Voice, and they can lock users and check for alts`, `@ Global Moderator - The above, and they can globally ban users`, `* Global Bot - An automated account that can use HTML anywhere`, - `& Global Administrator - They can do anything, like change what this message says and promote users globally`, + `~ Global Administrator - They can do anything, like change what this message says and promote users globally`, ]; this.sendReplyBox( @@ -1574,7 +1588,7 @@ export const commands: Chat.ChatCommands = { groupshelp: [ `/groups - Explains what the symbols (like % and @) before people's names mean.`, `/groups [global|room] - Explains only global or room symbols.`, - `!groups - Shows everyone that information. Requires: + % @ # &`, + `!groups - Shows everyone that information. Requires: + % @ # ~`, ], punishments(target, room, user) { @@ -1618,7 +1632,7 @@ export const commands: Chat.ChatCommands = { }, punishmentshelp: [ `/punishments - Explains punishments.`, - `!punishments - Show everyone that information. Requires: + % @ # &`, + `!punishments - Show everyone that information. Requires: + % @ # ~`, ], repo: 'opensource', @@ -1638,7 +1652,7 @@ export const commands: Chat.ChatCommands = { }, opensourcehelp: [ `/opensource - Links to PS's source code repository.`, - `!opensource - Show everyone that information. Requires: + % @ # &`, + `!opensource - Show everyone that information. Requires: + % @ # ~`, ], staff(target, room, user) { @@ -1668,7 +1682,7 @@ export const commands: Chat.ChatCommands = { suggestion: 'suggestions', suggestions(target, room, user) { if (!this.runBroadcast()) return; - this.sendReplyBox(`Make a suggestion for Pokémon Showdown`); + this.sendReplyBox(`Make a suggestion for Pokémon Showdown`); }, suggestionshelp: [`/suggestions - Links to the place to make suggestions for Pokemon Showdown.`], @@ -1677,12 +1691,12 @@ export const commands: Chat.ChatCommands = { bugs(target, room, user) { if (!this.runBroadcast()) return; if (room?.battle) { - this.sendReplyBox(`

QuestionsBug Reports
`); + this.sendReplyBox(`
QuestionsBug Reports
`); } else { this.sendReplyBox( `Have a replay showcasing a bug on Pokémon Showdown?
` + `- Questions
` + - `- Bug Reports (ask in Help before posting in the thread if you're unsure)` + `- Bug Reports (ask in Help before posting if you're unsure)` ); } }, @@ -1718,7 +1732,7 @@ export const commands: Chat.ChatCommands = { }, introhelp: [ `/intro - Provides an introduction to competitive Pok\u00e9mon.`, - `!intro - Show everyone that information. Requires: + % @ # &`, + `!intro - Show everyone that information. Requires: + % @ # ~`, ], mentoring: 'smogintro', @@ -1752,14 +1766,17 @@ export const commands: Chat.ChatCommands = { const SUPPORTED_BATTLESPOT_FORMATS = [ 'gen5gbusingles', 'gen5gbudoubles', 'gen6battlespotsingles', 'gen6battlespotdoubles', 'gen6battlespottriples', 'gen7battlespotsingles', 'gen7battlespotdoubles', 'gen7bssfactory', ]; - const isRandomBattle = room?.battle?.format.endsWith('randombattle'); + const isRandomBattle = (room?.battle && (room.battle.format.endsWith('randombattle') || + room.battle.format.endsWith('randomdoublesbattle'))); const isBattleSpotBattle = (room?.battle && (SUPPORTED_BATTLESPOT_FORMATS.includes(room.battle.format) || room.battle.format.includes("battlespotspecial"))); + const {dex} = this.extractFormat(room?.battle?.format); + if (RANDOMS_CALC_COMMANDS.includes(cmd) || (isRandomBattle && !DEFAULT_CALC_COMMANDS.includes(cmd) && !BATTLESPOT_CALC_COMMANDS.includes(cmd))) { return this.sendReplyBox( - `Random Battles damage calculator. (Courtesy of Austin)
` + - `- Random Battles Damage Calculator` + `Random Battles damage calculator. (Courtesy of dhelmise & jetou)
` + + `- Random Battles Damage Calculator` ); } if (BATTLESPOT_CALC_COMMANDS.includes(cmd) || (isBattleSpotBattle && !DEFAULT_CALC_COMMANDS.includes(cmd))) { @@ -1769,15 +1786,15 @@ export const commands: Chat.ChatCommands = { ); } this.sendReplyBox( - `Pokémon Showdown! damage calculator. (Courtesy of Honko, Austin, & Kris)
` + - `- Damage Calculator` + `Pokémon Showdown! damage calculator. (Courtesy of Honko, Austin, dhelmise, & jetou)
` + + `- Damage Calculator` ); }, calchelp: [ `/calc - Provides a link to a damage calculator`, `/rcalc - Provides a link to the random battles damage calculator`, `/bsscalc - Provides a link to the Battle Spot damage calculator`, - `!calc - Shows everyone a link to a damage calculator. Requires: + % @ # &`, + `!calc - Shows everyone a link to a damage calculator. Requires: + % @ # ~`, ], capintro: 'cap', @@ -1794,21 +1811,9 @@ export const commands: Chat.ChatCommands = { }, caphelp: [ `/cap - Provides an introduction to the Create-A-Pok\u00e9mon project.`, - `!cap - Show everyone that information. Requires: + % @ # &`, + `!cap - Show everyone that information. Requires: + % @ # ~`, ], - gennext(target, room, user) { - if (!this.runBroadcast()) return; - this.sendReplyBox( - "NEXT (also called Gen-NEXT) is a mod that makes changes to the game:
" + - `- README: overview of NEXT
` + - "Example replays:
" + - `- Zergo vs Mr Weegle Snarf
` + - `- NickMP vs Khalogie` - ); - }, - gennexthelp: [`/gennext - Provides information on the Gen-NEXT mod.`], - battlerules(target, room, user) { return this.parse(`/join view-battlerules`); }, @@ -1823,7 +1828,7 @@ export const commands: Chat.ChatCommands = { tiershelp: 'formathelp', formatshelp: 'formathelp', viewbanlist: 'formathelp', - formathelp(target, room, user, connection, cmd) { + async formathelp(target, room, user, connection, cmd) { if (!target && this.runBroadcast()) { return this.sendReplyBox( `- Smogon Tiers
` + @@ -1868,17 +1873,26 @@ export const commands: Chat.ChatCommands = { rulesetHtml = `No ruleset found for ${format.name}`; } } - let formatType: string = (format.gameType || "singles"); - formatType = formatType.charAt(0).toUpperCase() + formatType.slice(1).toLowerCase(); - if (!format.desc && !format.threads) { - if (format.effectType === 'Format') { - return this.sendReplyBox(`No description found for this ${formatType} ${format.section} format.
${rulesetHtml}`); - } else { - return this.sendReplyBox(`No description found for this rule.
${rulesetHtml}`); + const formatDesc = format.desc || ''; + const descHtml: string[] = []; + const data = await getFormatResources(format.id); + if (data) { + for (const {resource_name, url} of data.resources) { + let rn = resource_name; + rn = rn.replace(/ thread$/gi, ''); + rn = rn.replace(/Pokemon Showdown/gi, 'PS'); + rn = rn.split(' ').map((x: string) => x[0].toUpperCase() + x.substr(1)).join(' '); + descHtml.push(`• ${rn}`); } + } else if (format.threads?.length) { + descHtml.push(...format.threads); + } else { + const genID = ['rb', 'gs', 'rs', 'dp', 'bw', 'xy', 'sm', 'ss', 'sv']; + descHtml.push(`This format has no resources linked on its Smogon Dex page. ` + + `Please contact a C&C Leader to resolve this. ` + + `Alternatively, if this format can't have a page on the Smogon Dex, message dhelmise.
`); } - const descHtml = [...(format.desc ? [format.desc] : []), ...(format.threads || [])]; - return this.sendReplyBox(`${descHtml.join("
")}
${rulesetHtml}`); + return this.sendReplyBox(`

${format.name}


${formatDesc ? formatDesc + '
' : ''}${descHtml.join("
")}${rulesetHtml ? `
${rulesetHtml}` : ''}`); } let tableStyle = `border:1px solid gray; border-collapse:collapse`; @@ -1894,7 +1908,13 @@ export const commands: Chat.ChatCommands = { for (const section of sections[sectionId].formats) { const subformat = Dex.formats.get(section); const nameHTML = Utils.escapeHTML(subformat.name); - const desc = [...(subformat.desc ? [subformat.desc] : []), ...(subformat.threads || [])]; + const desc = subformat.desc ? [subformat.desc] : []; + const data = await getFormatResources(subformat.id); + if (data) { + for (const {resource_name, url} of data.resources) { + desc.push(`• ${resource_name}`); + } + } const descHTML = desc.length ? desc.join("
") : "—"; buf.push(`${nameHTML}${descHTML}`); } @@ -2037,9 +2057,9 @@ export const commands: Chat.ChatCommands = { }, ruleshelp: [ `/rules - Show links to room rules and global rules.`, - `!rules - Show everyone links to room rules and global rules. Requires: + % @ # &`, - `/rules [url] - Change the room rules URL. Requires: # &`, - `/rules remove - Removes a room rules URL. Requires: # &`, + `!rules - Show everyone links to room rules and global rules. Requires: + % @ # ~`, + `/rules [url] - Change the room rules URL. Requires: # ~`, + `/rules remove - Removes a room rules URL. Requires: # ~`, ], faq(target, room, user) { @@ -2077,13 +2097,13 @@ export const commands: Chat.ChatCommands = { buffer.push(`${this.tr`Proxy lock help`}`); } if (showAll || ['ca', 'customavatar', 'customavatars'].includes(target)) { - buffer.push(this.tr`Custom avatars are given to Global Staff members, contributors (coders and spriters) to Pokemon Showdown, and Smogon badgeholders at the discretion of Zarel. They are also sometimes given out as prizes for major room events or Smogon tournaments.`); + buffer.push(this.tr`Custom avatars are given to Global Staff members, contributors (coders and spriters) to Pokemon Showdown, and Smogon badgeholders at the discretion of the PS! Administrators. They are also sometimes given out as rewards for major events such as PSPL (Pokemon Showdown Premier League). If you're curious, you can view the entire list of custom avatars.`); } if (showAll || ['privacy', 'private'].includes(target)) { buffer.push(`${this.tr`Pokémon Showdown privacy policy`}`); } if (showAll || ['lostpassword', 'password', 'lostpass'].includes(target)) { - buffer.push(`If you need your Pokémon Showdown password reset, you can fill out a ${this.tr`Password Reset Form`}. You will need to make a Smogon account to be able to fill out the form, as password resets are processed through the Smogon forums.`); + buffer.push(`If you need your Pokémon Showdown password reset, you can fill out a ${this.tr`Password Reset Form`}. You will need to make a Smogon account to be able to fill out a form; that's what the email address you sign in to Smogon with is for (PS accounts for regular users don't have emails associated with them).`); } if (!buffer.length && target) { this.errorReply(`'${target}' is an invalid FAQ.`); @@ -2096,7 +2116,7 @@ export const commands: Chat.ChatCommands = { }, faqhelp: [ `/faq [theme] - Provides a link to the FAQ. Add autoconfirmed, badges, proxy, ladder, staff, or tiers for a link to these questions. Add all for all of them.`, - `!faq [theme] - Shows everyone a link to the FAQ. Add autoconfirmed, badges, proxy, ladder, staff, or tiers for a link to these questions. Add all for all of them. Requires: + % @ # &`, + `!faq [theme] - Shows everyone a link to the FAQ. Add autoconfirmed, badges, proxy, ladder, staff, or tiers for a link to these questions. Add all for all of them. Requires: + % @ # ~`, ], analysis: 'smogdex', @@ -2276,14 +2296,14 @@ export const commands: Chat.ChatCommands = { }, smogdexhelp: [ `/analysis [pokemon], [generation], [format] - Links to the Smogon University analysis for this Pok\u00e9mon in the given generation.`, - `!analysis [pokemon], [generation], [format] - Shows everyone this link. Requires: + % @ # &`, + `!analysis [pokemon], [generation], [format] - Shows everyone this link. Requires: + % @ # ~`, ], - veekun(target, broadcast, user) { - if (!target) return this.parse('/help veekun'); + bulbapedia(target, broadcast, user) { + if (!target) return this.parse('/help bulbapedia'); if (!this.runBroadcast()) return; - const baseLink = 'http://veekun.com/dex/'; + const baseLink = 'https://bulbapedia.bulbagarden.net/wiki/'; const pokemon = Dex.species.get(target); const item = Dex.items.get(target); @@ -2298,28 +2318,11 @@ export const commands: Chat.ChatCommands = { if (pokemon.isNonstandard && pokemon.isNonstandard !== 'Past') { return this.errorReply(`${pokemon.name} is not a real Pok\u00e9mon.`); } + let baseSpecies = pokemon.baseSpecies; + if (pokemon.id.startsWith('flabebe')) baseSpecies = 'Flabébé'; + const link = `${baseLink}${encodeURIComponent(baseSpecies)}_(Pokémon)`; - const baseSpecies = pokemon.baseSpecies || pokemon.name; - let forme = pokemon.forme; - - // Showdown and Veekun have different names for various formes - if (baseSpecies === 'Meowstic' && forme === 'F') forme = 'Female'; - if (baseSpecies === 'Zygarde' && forme === '10%') forme = '10'; - if (baseSpecies === 'Necrozma' && !Dex.species.get(baseSpecies + forme).battleOnly) forme = forme.substr(0, 4); - if (baseSpecies === 'Pikachu' && Dex.species.get(baseSpecies + forme).gen === 7) forme += '-Cap'; - if (forme.endsWith('Totem')) { - if (baseSpecies === 'Raticate') forme = 'Totem-Alola'; - if (baseSpecies === 'Marowak') forme = 'Totem'; - if (baseSpecies === 'Mimikyu') forme += forme === 'Busted-Totem' ? '-Busted' : '-Disguised'; - } - - let link = `${baseLink}pokemon/${baseSpecies.toLowerCase()}`; - if (forme) { - if (baseSpecies === 'Arceus' || baseSpecies === 'Silvally') link += '/flavor'; - link += `?form=${forme.toLowerCase()}`; - } - - this.sendReplyBox(`${pokemon.name} description by Veekun`); + this.sendReplyBox(Utils.html`${pokemon.name} in-game information, provided by Bulbapedia`); } // Item @@ -2328,8 +2331,9 @@ export const commands: Chat.ChatCommands = { if (item.isNonstandard && item.isNonstandard !== 'Past') { return this.errorReply(`${item.name} is not a real item.`); } - const link = `${baseLink}items/${item.name.toLowerCase()}`; - this.sendReplyBox(`${item.name} item description by Veekun`); + let link = `${baseLink}${encodeURIComponent(item.name)}`; + if (Dex.moves.get(item.name).exists) link += '_(item)'; + this.sendReplyBox(Utils.html`${item.name} item description, provided by Bulbapedia`); } // Ability @@ -2338,8 +2342,8 @@ export const commands: Chat.ChatCommands = { if (ability.isNonstandard && ability.isNonstandard !== 'Past') { return this.errorReply(`${ability.name} is not a real ability.`); } - const link = `${baseLink}abilities/${ability.name.toLowerCase()}`; - this.sendReplyBox(`${ability.name} ability description by Veekun`); + const link = `${baseLink}${encodeURIComponent(ability.name)}_(Ability)`; + this.sendReplyBox(`${ability.name} ability description, provided by Bulbapedia`); } // Move @@ -2348,24 +2352,24 @@ export const commands: Chat.ChatCommands = { if (move.isNonstandard && move.isNonstandard !== 'Past') { return this.errorReply(`${move.name} is not a real move.`); } - const link = `${baseLink}moves/${move.name.toLowerCase()}`; - this.sendReplyBox(`${move.name} move description by Veekun`); + const link = `${baseLink}${encodeURIComponent(move.name)}_(move)`; + this.sendReplyBox(`${move.name} move description, provided by Bulbapedia`); } // Nature if (nature.exists) { atLeastOne = true; - const link = `${baseLink}natures/${nature.name.toLowerCase()}`; - this.sendReplyBox(`${nature.name} nature description by Veekun`); + const link = `${baseLink}Nature`; + this.sendReplyBox(`Nature descriptions, provided by Bulbapedia`); } if (!atLeastOne) { return this.sendReplyBox(`Pokémon, item, move, ability, or nature not found.`); } }, - veekunhelp: [ - `/veekun [pokemon] - Links to Veekun website for this pokemon/item/move/ability/nature.`, - `!veekun [pokemon] - Shows everyone this link. Requires: + % @ # &`, + bulbapediahelp: [ + `/bulbapedia [pokemon/item/move/ability/nature] - Links to Bulbapedia wiki page for this pokemon/item/move/ability/nature.`, + `!bulbapedia [pokemon/item/move/ability/nature] - Shows everyone this link. Requires: + % @ # ~`, ], register() { @@ -2484,8 +2488,7 @@ export const commands: Chat.ChatCommands = { pr: 'pickrandom', pick: 'pickrandom', pickrandom(target, room, user) { - if (!target) return false; - if (!target.includes(',')) return this.parse('/help pick'); + if (!target || !target.includes(',')) return this.parse('/help pick'); if (!this.runBroadcast(true)) return false; if (this.broadcasting) { [, target] = Utils.splitFirst(this.message, ' '); @@ -2581,7 +2584,7 @@ export const commands: Chat.ChatCommands = { buf = Utils.html``; if (resized) buf += Utils.html`
full-size image`; } else { - buf = await YouTube.generateVideoDisplay(request.link, false, true); + buf = await YouTube.generateVideoDisplay(request.link, false); if (!buf) return this.errorReply('Could not get YouTube video'); } buf += Utils.html`
(Requested by ${request.name})`; @@ -2593,7 +2596,7 @@ export const commands: Chat.ChatCommands = { room.add(`|c| ${request.name}|/raw ${buf}`); this.privateModAction(`${user.name} approved showing media from ${request.name}.`); }, - approveshowhelp: [`/approveshow [user] - Approves the media display request of [user]. Requires: % @ # &`], + approveshowhelp: [`/approveshow [user] - Approves the media display request of [user]. Requires: % @ # ~`], denyshow(target, room, user) { room = this.requireRoom(); @@ -2617,13 +2620,13 @@ export const commands: Chat.ChatCommands = { room.sendUser(targetUser, `|raw|
Your media request was denied.
`); room.sendUser(targetUser, `|notify|Media request denied`); }, - denyshowhelp: [`/denyshow [user] - Denies the media display request of [user]. Requires: % @ # &`], + denyshowhelp: [`/denyshow [user] - Denies the media display request of [user]. Requires: % @ # ~`], approvallog(target, room, user) { room = this.requireRoom(); return this.parse(`/sl approved showing media from, ${room.roomid}`); }, - approvalloghelp: [`/approvallog - View a log of past media approvals in the current room. Requires: % @ # &`], + approvalloghelp: [`/approvallog - View a log of past media approvals in the current room. Requires: ~`], viewapprovals(target, room, user) { room = this.requireRoom(); @@ -2631,7 +2634,7 @@ export const commands: Chat.ChatCommands = { }, viewapprovalshelp: [ `/viewapprovals - View a list of users who have requested to show media in the current room.`, - `Requires: % @ # &`, + `Requires: % @ # ~`, ], async show(target, room, user, connection) { @@ -2656,14 +2659,12 @@ export const commands: Chat.ChatCommands = { this.runBroadcast(); let buf; if (YouTube.linkRegex.test(link)) { - buf = await YouTube.generateVideoDisplay(link, false, this.broadcasting); + buf = await YouTube.generateVideoDisplay(link, false); this.message = this.message.replace(/&ab_channel=(.*)(&|)/ig, '').replace(/https:\/\/www\./ig, ''); } else if (Twitch.linkRegex.test(link)) { const channelId = Twitch.linkRegex.exec(link)?.[2]?.trim(); if (!channelId) return this.errorReply(`Specify a Twitch channel.`); - const info = await Twitch.getChannel(channelId); - if (!info) return this.errorReply(`Channel ${channelId} not found.`); - buf = `Watching ${info.display_name}...
`; + buf = Utils.html`Watching ${channelId}...
`; buf += ``; } else { if (Chat.linkRegex.test(link)) { @@ -2698,7 +2699,7 @@ export const commands: Chat.ChatCommands = { }, showhelp: [ `/show [url] - Shows you an image, audio clip, video file, or YouTube video.`, - `!show [url] - Shows an image, audio clip, video file, or YouTube video to everyone in a chatroom. Requires: whitelist % @ # &`, + `!show [url] - Shows an image, audio clip, video file, or YouTube video to everyone in a chatroom. Requires: whitelist % @ # ~`, ], rebroadcast(target, room, user, connection) { @@ -2779,7 +2780,7 @@ export const commands: Chat.ChatCommands = { } }, codehelp: [ - `!code [code] - Broadcasts code to a room. Accepts multi-line arguments. Requires: + % @ & #`, + `!code [code] - Broadcasts code to a room. Accepts multi-line arguments. Requires: + % @ ~ #`, `/code [code] - Shows you code. Accepts multi-line arguments.`, ], @@ -2800,7 +2801,7 @@ export const commands: Chat.ChatCommands = { allowEmpty: true, useIDs: false, }); const format = Dex.formats.get(toID(args.format[0])); - if (!format.exists) { + if (format.effectType !== 'Format') { return this.popupReply(`The format '${format}' does not exist.`); } delete args.format; @@ -2925,7 +2926,7 @@ export const commands: Chat.ChatCommands = { } this.sendReplyBox(buf); }, - adminhelphelp: [`/adminhelp - Programmatically generates a list of all administrator commands. Requires: &`], + adminhelphelp: [`/adminhelp - Programmatically generates a list of all administrator commands. Requires: ~`], altlog: 'altslog', altslog(target, room, user) { @@ -2937,8 +2938,65 @@ export const commands: Chat.ChatCommands = { return this.parse(`/join view-altslog-${target}`); }, altsloghelp: [ - `/altslog [userid] - View the alternate account history for the given [userid]. Requires: % @ &`, + `/altslog [userid] - View the alternate account history for the given [userid]. Requires: % @ ~`, ], + + randtopic(target, room, user) { + room = this.requireRoom(); + if (!room.settings.topics?.length) { + return this.errorReply(`This room has no random topics to select from.`); + } + this.runBroadcast(); + this.sendReply(Utils.html`|html|
${Utils.randomElement(room.settings.topics)}
`); + }, + randtopichelp: [ + `/randtopic - Randomly selects a topic from the room's discussion topic pool and displays it.`, + `/addtopic [target] - Adds the [target] to the pool of random discussion topics. Requires: % @ # ~`, + `/removetopic [index] - Removes the topic from the room's topic pool. Requires: % @ # ~`, + `/randomtopics - View the discussion topic pool for the current room.`, + ], + + addtopic(target, room, user) { + room = this.requireRoom(); + this.checkCan('mute', null, room); + target = target.trim(); + if (!toID(target).length) { + return this.parse(`/help randtopic`); + } + if (!room.settings.topics) room.settings.topics = []; + room.settings.topics.push(target); + this.privateModAction(`${user.name} added the topic "${target}" to the random topic pool.`); + this.modlog('ADDTOPIC', null, target); + room.saveSettings(); + }, + addtopichelp: [`/addtopic [target] - Adds the [target] to the pool of random discussion topics. Requires: % @ # ~`], + + removetopic(target, room, user) { + room = this.requireRoom(); + this.checkCan('mute', null, room); + if (!toID(target)) { + return this.parse(`/help randtopic`); + } + const index = Number(toID(target)) - 1; + if (isNaN(index)) { + return this.errorReply(`Invalid topic index: ${target}. Must be a number.`); + } + if (!room.settings.topics?.[index]) { + return this.errorReply(`Topic ${index + 1} not found.`); + } + const topic = room.settings.topics.splice(index, 1)[0]; + room.saveSettings(); + this.privateModAction(`${user.name} removed topic ${index + 1} from the random topic pool.`); + this.modlog('REMOVETOPIC', null, topic); + }, + removetopichelp: [`/removetopic [index] - Removes the topic from the room's topic pool. Requires: % @ # ~`], + + listtopics: 'randomtopics', + randtopics: 'randomtopics', + randomtopics(target, room, user) { + room = this.requireRoom(); + return this.parse(`/join view-topics-${room}`); + }, }; export const handlers: Chat.Handlers = { @@ -3014,6 +3072,22 @@ export const pages: Chat.PageTable = { } return buf; }, + topics(query, user) { + const room = this.requireRoom(); + this.title = `[Topics] ${room.title}`; + const topics = room.settings.topics || []; + let buf; + if (!topics.length) { + buf = `

This room has no discussion topics saved.

`; + return buf; + } + buf = `

Random topics for ${room.title} (${topics.length}):

    `; + for (const [i, topic] of topics.entries()) { + buf += Utils.html`
  • ${i + 1}: "${topic}"
  • `; + } + buf += `
`; + return buf; + }, battlerules(query, user) { const rules = Object.values(Dex.data.Rulesets).filter(rule => rule.effectType !== "Format"); const tourHelp = `https://www.smogon.com/forums/threads/pok%C3%A9mon-showdown-forum-rules-resources-read-here-first.3570628/#post-6777489`; @@ -3078,8 +3152,8 @@ export const pages: Chat.PageTable = { buf += `
`; const formatId = toID(query[0]); const format = Dex.formats.get(formatId); - if (!formatId || !format.exists) { - if (formatId && !format.exists) { + if (!formatId || format.effectType !== 'Format') { + if (formatId) { buf += `
The format '${formatId}' does not exist.

`; } buf += `
`; @@ -3113,7 +3187,8 @@ export const pages: Chat.PageTable = { buf += `

Using a + instead of a - unbans that category.

`; buf += `
  • + Blaziken: Unban/unrestrict a Pokémon.

`; cmd.push(`bans={bans}`); - buf += `Bans/Unbans: (separated by commas)

`; + buf += `Bans/Unbans: (separated by commas)

`; + buf += `
`; buf += `
Clauses`; buf += `

The following rules can be added to challenges/tournaments to modify the style of play. `; buf += `Alternatively, already present rules can be removed from formats by preceding the rule name with !.

`; @@ -3200,6 +3275,12 @@ export const pages: Chat.PageTable = { buf += `Requester ID: ${userid}
`; buf += `Link: ${entry.link}
`; buf += `Comment: ${entry.comment}`; + buf += ``; + buf += ``; + buf += ``; + buf += `
`; + buf += ``; + buf += `
`; buf += `

`; } return buf; diff --git a/server/chat-commands/moderation.ts b/server/chat-commands/moderation.ts index 725ffeed7c58..5023ee007aae 100644 --- a/server/chat-commands/moderation.ts +++ b/server/chat-commands/moderation.ts @@ -23,7 +23,7 @@ const REQUIRE_REASONS = true; /** * Promotes a user within a room. Returns a User object if a popup should be shown to the user, - * and null otherwise. Throws a Chat.ErrorMesage on an error. + * and null otherwise. Throws a Chat.ErrorMessage on an error. * * @param promoter the User object of the user who is promoting * @param room the Room in which the promotion is happening @@ -173,7 +173,7 @@ export const commands: Chat.ChatCommands = { } room.saveSettings(); }, - roomownerhelp: [`/roomowner [username] - Appoints [username] as a room owner. Requires: &`], + roomownerhelp: [`/roomowner [username] - Appoints [username] as a room owner. Requires: ~`], roomdemote: 'roompromote', forceroompromote: 'roompromote', @@ -276,9 +276,9 @@ export const commands: Chat.ChatCommands = { room.saveSettings(); }, roompromotehelp: [ - `/roompromote OR /roomdemote [comma-separated usernames], [group symbol] - Promotes/demotes the user(s) to the specified room rank. Requires: @ # &`, - `/room[group] [comma-separated usernames] - Promotes/demotes the user(s) to the specified room rank. Requires: @ # &`, - `/roomdeauth [comma-separated usernames] - Removes all room rank from the user(s). Requires: @ # &`, + `/roompromote OR /roomdemote [comma-separated usernames], [group symbol] - Promotes/demotes the user(s) to the specified room rank. Requires: @ # ~`, + `/room[group] [comma-separated usernames] - Promotes/demotes the user(s) to the specified room rank. Requires: @ # ~`, + `/roomdeauth [comma-separated usernames] - Removes all room rank from the user(s). Requires: @ # ~`, ], auth: 'authority', @@ -303,8 +303,6 @@ export const commands: Chat.ChatCommands = { const buffer = Utils.sortBy( Object.entries(rankLists) as [GroupSymbol, string[]][], ([symbol]) => -Users.Auth.getGroup(symbol).rank - ).filter( - ([symbol]) => symbol !== Users.SECTIONLEADER_SYMBOL ).map( ([symbol, names]) => ( `${(Config.groups[symbol] ? `**${Config.groups[symbol].name}s** (${symbol})` : symbol)}:\n` + @@ -467,7 +465,7 @@ export const commands: Chat.ChatCommands = { ], async autojoin(target, room, user, connection) { - const targets = target.split(','); + const targets = target.split(',').filter(Boolean); if (targets.length > 16 || connection.inRooms.size > 1) { return connection.popup("To prevent DoS attacks, you can only use /autojoin for 16 or fewer rooms, when you haven't joined any rooms yet. Please use /join for each room separately."); } @@ -614,7 +612,7 @@ export const commands: Chat.ChatCommands = { warnhelp: [ `/warn OR /k [username], [reason] - Warns a user showing them the site rules and [reason] in an overlay.`, `/warn OR /k [username], [reason] spoiler: [private reason] - Warns a user, marking [private reason] only in the modlog.`, - `Requires: % @ # &`, + `Requires: % @ # ~`, ], redirect: 'redir', @@ -658,7 +656,7 @@ export const commands: Chat.ChatCommands = { }, redirhelp: [ `/redirect OR /redir [username], [roomname] - [DEPRECATED]`, - `Attempts to redirect the [username] to the [roomname]. Requires: &`, + `Attempts to redirect the [username] to the [roomname]. Requires: ~`, ], m: 'mute', @@ -694,24 +692,30 @@ export const commands: Chat.ChatCommands = { } this.addModAction(`${targetUser.name} was muted by ${user.name} for ${Chat.toDurationString(muteDuration)}.${(publicReason ? ` (${publicReason})` : ``)}`); this.modlog(`${cmd.includes('h') ? 'HOUR' : ''}MUTE`, targetUser, privateReason); + this.update(); // force an update so the (hide lines from x user) message is on the mod action above + + const ids = [targetUser.getLastId()]; + if (ids[0] !== toID(inputUsername)) { + ids.push(toID(inputUsername)); + } + room.hideText(ids); + if (targetUser.autoconfirmed && targetUser.autoconfirmed !== targetUser.id) { const displayMessage = `${targetUser.name}'s ac account: ${targetUser.autoconfirmed}`; this.privateModAction(displayMessage); } - const userid = targetUser.getLastId(); - this.add(`|hidelines|unlink|${userid}`); - if (userid !== toID(inputUsername)) this.add(`|hidelines|unlink|${toID(inputUsername)}`); + Chat.runHandlers('onPunishUser', 'MUTE', user, room); room.mute(targetUser, muteDuration); }, - mutehelp: [`/mute OR /m [username], [reason] - Mutes a user with reason for 7 minutes. Requires: % @ # &`], + mutehelp: [`/mute OR /m [username], [reason] - Mutes a user with reason for 7 minutes. Requires: % @ # ~`], hm: 'hourmute', hourmute(target) { if (!target) return this.parse('/help hourmute'); this.run('mute'); }, - hourmutehelp: [`/hourmute OR /hm [username], [reason] - Mutes a user with reason for an hour. Requires: % @ # &`], + hourmutehelp: [`/hourmute OR /hm [username], [reason] - Mutes a user with reason for an hour. Requires: % @ # ~`], um: 'unmute', unmute(target, room, user) { @@ -733,7 +737,7 @@ export const commands: Chat.ChatCommands = { this.errorReply(`${(targetUser ? targetUser.name : targetUsername)} is not muted.`); } }, - unmutehelp: [`/unmute [username] - Removes mute from user. Requires: % @ # &`], + unmutehelp: [`/unmute [username] - Removes mute from user. Requires: % @ # ~`], rb: 'ban', weekban: 'ban', @@ -798,6 +802,7 @@ export const commands: Chat.ChatCommands = { const time = week ? Date.now() + 7 * 24 * 60 * 60 * 1000 : null; const affected = Punishments.roomBan(room, targetUser, time, null, privateReason); + for (const u of affected) Chat.runHandlers('onPunishUser', 'ROOMBAN', u, room); if (!room.settings.isPrivate && room.persist) { const acAccount = (targetUser.autoconfirmed !== userid && targetUser.autoconfirmed); let displayMessage = ''; @@ -822,8 +827,8 @@ export const commands: Chat.ChatCommands = { return true; }, banhelp: [ - `/ban [username], [reason] - Bans the user from the room you are in. Requires: @ # &`, - `/weekban [username], [reason] - Bans the user from the room you are in for a week. Requires: @ # &`, + `/ban [username], [reason] - Bans the user from the room you are in. Requires: @ # ~`, + `/weekban [username], [reason] - Bans the user from the room you are in for a week. Requires: @ # ~`, ], unroomban: 'unban', @@ -844,7 +849,7 @@ export const commands: Chat.ChatCommands = { this.errorReply(`User '${target}' is not banned from this room.`); } }, - unbanhelp: [`/unban [username] - Unbans the user from the room you are in. Requires: @ # &`], + unbanhelp: [`/unban [username] - Unbans the user from the room you are in. Requires: @ # ~`], forcelock: 'lock', forceweeklock: 'lock', @@ -918,6 +923,7 @@ export const commands: Chat.ChatCommands = { affected = await Punishments.lock(userid, duration, null, false, publicReason); } + for (const u of affected) Chat.runHandlers('onPunishUser', 'LOCK', u, room); this.globalModlog( (force ? `FORCE` : ``) + (week ? "WEEKLOCK" : (month ? "MONTHLOCK" : "LOCK")), targetUser || userid, privateReason ); @@ -968,7 +974,7 @@ export const commands: Chat.ChatCommands = { return true; }, lockhelp: [ - `/lock OR /l [username], [reason] - Locks the user from talking in all chats. Requires: % @ &`, + `/lock OR /l [username], [reason] - Locks the user from talking in all chats. Requires: % @ ~`, `/weeklock OR /wl [username], [reason] - Same as /lock, but locks users for a week.`, `/lock OR /l [username], [reason] spoiler: [private reason] - Marks [private reason] in modlog only.`, ], @@ -1062,12 +1068,12 @@ export const commands: Chat.ChatCommands = { this.privateGlobalModAction(`${user.name} unlocked the ${range ? "IP range" : "IP"}: ${target}`); this.globalModlog(`UNLOCK${range ? 'RANGE' : 'IP'}`, null, null, target); }, - unlockiphelp: [`/unlockip [ip] - Unlocks a punished ip while leaving the original punishment intact. Requires: @ &`], - unlocknamehelp: [`/unlockname [name] - Unlocks a punished alt, leaving the original lock intact. Requires: % @ &`], + unlockiphelp: [`/unlockip [ip] - Unlocks a punished ip while leaving the original punishment intact. Requires: @ ~`], + unlocknamehelp: [`/unlockname [name] - Unlocks a punished alt, leaving the original lock intact. Requires: % @ ~`], unlockhelp: [ - `/unlock [username] - Unlocks the user. Requires: % @ &`, - `/unlockname [username] - Unlocks a punished alt while leaving the original punishment intact. Requires: % @ &`, - `/unlockip [ip] - Unlocks a punished ip while leaving the original punishment intact. Requires: @ &`, + `/unlock [username] - Unlocks the user. Requires: % @ ~`, + `/unlockname [username] - Unlocks a punished alt while leaving the original punishment intact. Requires: % @ ~`, + `/unlockip [ip] - Unlocks a punished ip while leaving the original punishment intact. Requires: @ ~`, ], forceglobalban: 'globalban', @@ -1122,6 +1128,7 @@ export const commands: Chat.ChatCommands = { this.addGlobalModAction(`${name} was globally banned by ${user.name}.${(publicReason ? ` (${publicReason})` : ``)}`); const affected = await Punishments.ban(userid, null, null, false, publicReason); + for (const u of affected) Chat.runHandlers('onPunishUser', 'BAN', u, room); const acAccount = (targetUser && targetUser.autoconfirmed !== userid && targetUser.autoconfirmed); let displayMessage = ''; if (affected.length > 1) { @@ -1149,7 +1156,7 @@ export const commands: Chat.ChatCommands = { return true; }, globalbanhelp: [ - `/globalban OR /gban [username], [reason] - Kick user from all rooms and ban user's IP address with reason. Requires: @ &`, + `/globalban OR /gban [username], [reason] - Kick user from all rooms and ban user's IP address with reason. Requires: @ ~`, `/globalban OR /gban [username], [reason] spoiler: [private reason] - Marks [private reason] in modlog only.`, ], @@ -1167,7 +1174,7 @@ export const commands: Chat.ChatCommands = { this.addGlobalModAction(`${name} was globally unbanned by ${user.name}.`); this.globalModlog("UNBAN", target); }, - unglobalbanhelp: [`/unglobalban [username] - Unban a user. Requires: @ &`], + unglobalbanhelp: [`/unglobalban [username] - Unban a user. Requires: @ ~`], deroomvoiceall(target, room, user) { room = this.requireRoom(); @@ -1198,7 +1205,7 @@ export const commands: Chat.ChatCommands = { this.addModAction(`All ${count} roomvoices have been cleared by ${user.name}.`); this.modlog('DEROOMVOICEALL'); }, - deroomvoiceallhelp: [`/deroomvoiceall - Devoice all roomvoiced users. Requires: # &`], + deroomvoiceallhelp: [`/deroomvoiceall - Devoice all roomvoiced users. Requires: # ~`], // this is a separate command for two reasons // a - yearticketban is preferred over /ht yearban @@ -1248,7 +1255,7 @@ export const commands: Chat.ChatCommands = { }, yearticketbanhelp: [ `/yearticketban [IP/userid] - Ban an IP or a userid from opening tickets for a year. `, - `Accepts wildcards to ban ranges. Requires: &`, + `Accepts wildcards to ban ranges. Requires: ~`, ], rangeban: 'banip', @@ -1286,7 +1293,7 @@ export const commands: Chat.ChatCommands = { }, baniphelp: [ `/banip [ip] OR /yearbanip [ip] - Globally bans this IP or IP range for an hour. Accepts wildcards to ban ranges.`, - `Existing users on the IP will not be banned. Requires: &`, + `Existing users on the IP will not be banned. Requires: ~`, ], unrangeban: 'unbanip', @@ -1304,7 +1311,7 @@ export const commands: Chat.ChatCommands = { this.addGlobalModAction(`${user.name} unbanned the ${(target.endsWith('*') ? "IP range" : "IP")}: ${target}`); this.modlog('UNRANGEBAN', null, target); }, - unbaniphelp: [`/unbanip [ip] - Unbans. Accepts wildcards to ban ranges. Requires: &`], + unbaniphelp: [`/unbanip [ip] - Unbans. Accepts wildcards to ban ranges. Requires: ~`], forceyearlockname: 'yearlockname', yearlockid: 'yearlockname', @@ -1372,7 +1379,7 @@ export const commands: Chat.ChatCommands = { `/lockip [ip] - Globally locks this IP or IP range for an hour. Accepts wildcards to ban ranges.`, `/yearlockip [ip] - Globally locks this IP or IP range for one year. Accepts wildcards to ban ranges.`, `/yearnamelockip [ip] - Namelocks this IP or IP range for one year. Accepts wildcards to ban ranges.`, - `Existing users on the IP will not be banned. Requires: &`, + `Existing users on the IP will not be banned. Requires: ~`, ], /********************************************************* @@ -1420,7 +1427,10 @@ export const commands: Chat.ChatCommands = { this.privateModAction(`${user.name} notes: ${target}`); }, - modnotehelp: [`/modnote [note] - Adds a moderator note that can be read through modlog. Requires: % @ # &`], + modnotehelp: [ + `/modnote - Adds a moderator note that can be read through modlog. Requires: % @ # ~`, + `/modnote [] - Adds a moderator note to a user's modlog that can be read through modlog. Requires: % @ # ~`, + ], globalpromote: 'promote', promote(target, room, user, connection, cmd) { @@ -1496,7 +1506,7 @@ export const commands: Chat.ChatCommands = { } } }, - promotehelp: [`/promote [username], [group] - Promotes the user to the specified group. Requires: &`], + promotehelp: [`/promote [username], [group] - Promotes the user to the specified group. Requires: ~`], untrustuser: 'trustuser', unconfirmuser: 'trustuser', @@ -1555,8 +1565,8 @@ export const commands: Chat.ChatCommands = { } }, trustuserhelp: [ - `/trustuser [username] - Trusts the user (makes them immune to locks). Requires: &`, - `/untrustuser [username] - Removes the trusted user status from the user. Requires: &`, + `/trustuser [username] - Trusts the user (makes them immune to locks). Requires: ~`, + `/untrustuser [username] - Removes the trusted user status from the user. Requires: ~`, ], desectionleader: 'sectionleader', @@ -1575,19 +1585,10 @@ export const commands: Chat.ChatCommands = { } else if (!Users.globalAuth.sectionLeaders.has(targetUser?.id || userid) && demoting) { throw new Chat.ErrorMessage(`${name} is not a Section Leader.`); } - const staffRoom = Rooms.get('staff'); if (!demoting) { Users.globalAuth.setSection(userid, section); this.addGlobalModAction(`${name} was appointed Section Leader of ${RoomSections.sectionNames[section]} by ${user.name}.`); this.globalModlog(`SECTION LEADER`, userid, section); - if (targetUser) { - // do not use global /forcepromote - if (!Users.globalAuth.atLeast(targetUser, Users.SECTIONLEADER_SYMBOL)) { - this.parse(`/globalsectionleader ${userid}`); - } - } else { - this.sendReply(`User ${userid} is offline and unrecognized, and so can't be globally promoted.`); - } targetUser?.popup(`You were appointed Section Leader of ${RoomSections.sectionNames[section]} by ${user.name}.`); } else { const group = Users.globalAuth.get(userid); @@ -1595,7 +1596,6 @@ export const commands: Chat.ChatCommands = { this.privateGlobalModAction(`${name} was demoted from Section Leader of ${RoomSections.sectionNames[section]} by ${user.name}.`); if (group === ' ') this.sendReply(`They are also no longer manually trusted. If they should be, use '/trustuser'.`); this.globalModlog(`DESECTION LEADER`, userid, section); - if (staffRoom?.auth.getDirect(userid) as any === '\u25B8') this.parse(`/msgroom staff,/roomdeauth ${userid}`); targetUser?.popup(`You were demoted from Section Leader of ${RoomSections.sectionNames[section]} by ${user.name}.`); } @@ -1612,7 +1612,7 @@ export const commands: Chat.ChatCommands = { `/desectionleader [target user] - Demotes [target user] from Section Leader.`, `Valid sections: ${RoomSections.sections.join(', ')}`, `If you want to change which section someone leads, demote them and then re-promote them in the desired section.`, - `Requires: &`, + `Requires: ~`, ], globaldemote: 'demote', @@ -1620,7 +1620,7 @@ export const commands: Chat.ChatCommands = { if (!target) return this.parse('/help demote'); this.run('promote'); }, - demotehelp: [`/demote [username], [group] - Demotes the user to the specified group. Requires: &`], + demotehelp: [`/demote [username], [group] - Demotes the user to the specified group. Requires: ~`], forcepromote(target, room, user, connection) { // warning: never document this command in /help @@ -1677,7 +1677,7 @@ export const commands: Chat.ChatCommands = { this.add(Utils.html`|raw|
${target}
`); this.modlog('DECLARE', null, target); }, - declarehelp: [`/declare [message] - Anonymously announces a message. Requires: # * &`], + declarehelp: [`/declare [message] - Anonymously announces a message. Requires: # * ~`], htmldeclare(target, room, user) { if (!target) return this.parse('/help htmldeclare'); @@ -1695,7 +1695,7 @@ export const commands: Chat.ChatCommands = { this.add(`|raw|
${target}
`); this.modlog(`HTMLDECLARE`, null, target); }, - htmldeclarehelp: [`/htmldeclare [message] - Anonymously announces a message using safe HTML. Requires: # * &`], + htmldeclarehelp: [`/htmldeclare [message] - Anonymously announces a message using safe HTML. Requires: # * ~`], gdeclare: 'globaldeclare', globaldeclare(target, room, user) { @@ -1704,11 +1704,11 @@ export const commands: Chat.ChatCommands = { this.checkHTML(target); for (const u of Users.users.values()) { - if (u.connected) u.send(`|pm|&|${u.tempGroup}${u.name}|/raw
${target}
`); + if (u.connected) u.send(`|pm|~|${u.tempGroup}${u.name}|/raw
${target}
`); } this.globalModlog(`GLOBALDECLARE`, null, target); }, - globaldeclarehelp: [`/globaldeclare [message] - Anonymously sends a private message to all the users on the site. Requires: &`], + globaldeclarehelp: [`/globaldeclare [message] - Anonymously sends a private message to all the users on the site. Requires: ~`], cdeclare: 'chatdeclare', chatdeclare(target, room, user) { @@ -1723,7 +1723,7 @@ export const commands: Chat.ChatCommands = { } this.globalModlog(`CHATDECLARE`, null, target); }, - chatdeclarehelp: [`/cdeclare [message] - Anonymously announces a message to all chatrooms on the server. Requires: &`], + chatdeclarehelp: [`/cdeclare [message] - Anonymously announces a message to all chatrooms on the server. Requires: ~`], wall: 'announce', announce(target, room, user) { @@ -1735,7 +1735,7 @@ export const commands: Chat.ChatCommands = { return `/announce ${target}`; }, - announcehelp: [`/announce OR /wall [message] - Makes an announcement. Requires: % @ # &`], + announcehelp: [`/announce OR /wall [message] - Makes an announcement. Requires: % @ # ~`], notifyoffrank: 'notifyrank', notifyrank(target, room, user, connection, cmd) { @@ -1771,8 +1771,8 @@ export const commands: Chat.ChatCommands = { } }, notifyrankhelp: [ - `/notifyrank [rank], [title], [message], [highlight] - Sends a notification to users who are [rank] or higher (and highlight on [highlight], if specified). Requires: # * &`, - `/notifyoffrank [rank] - Closes the notification previously sent with /notifyrank [rank]. Requires: # * &`, + `/notifyrank [rank], [title], [message], [highlight] - Sends a notification to users who are [rank] or higher (and highlight on [highlight], if specified). Requires: # * ~`, + `/notifyoffrank [rank] - Closes the notification previously sent with /notifyrank [rank]. Requires: # * ~`, ], notifyoffuser: 'notifyuser', @@ -1800,8 +1800,8 @@ export const commands: Chat.ChatCommands = { } }, notifyuserhelp: [ - `/notifyuser [username], [title], [message] - Sends a notification to [user]. Requires: # * &`, - `/notifyoffuser [user] - Closes the notification previously sent with /notifyuser [user]. Requires: # * &`, + `/notifyuser [username], [title], [message] - Sends a notification to [user]. Requires: # * ~`, + `/notifyoffuser [user] - Closes the notification previously sent with /notifyuser [user]. Requires: # * ~`, ], fr: 'forcerename', @@ -1865,8 +1865,8 @@ export const commands: Chat.ChatCommands = { return true; }, forcerenamehelp: [ - `/forcerename OR /fr [username], [reason] - Forcibly change a user's name and shows them the [reason]. Requires: % @ &`, - `/allowname [username] - Unmarks a forcerenamed username, stopping staff from being notified when it is used. Requires % @ &`, + `/forcerename OR /fr [username], [reason] - Forcibly change a user's name and shows them the [reason]. Requires: % @ ~`, + `/allowname [username] - Unmarks a forcerenamed username, stopping staff from being notified when it is used. Requires % @ ~`, ], nfr: 'noforcerename', @@ -1964,6 +1964,7 @@ export const commands: Chat.ChatCommands = { } const duration = week ? 7 * 24 * 60 * 60 * 1000 : 48 * 60 * 60 * 1000; await Punishments.namelock(userid, Date.now() + duration, null, false, publicReason); + if (targetUser) Chat.runHandlers('onPunishUser', 'NAMELOCK', targetUser, room); // Automatically upload replays as evidence/reference to the punishment if (room?.battle) this.parse('/savereplay forpunishment'); Monitor.forceRenames.set(userid, false); @@ -1980,7 +1981,7 @@ export const commands: Chat.ChatCommands = { return true; }, - namelockhelp: [`/namelock OR /nl [user], [reason] - Name locks a [user] and shows the [reason]. Requires: % @ &`], + namelockhelp: [`/namelock OR /nl [user], [reason] - Name locks a [user] and shows the [reason]. Requires: % @ ~`], unl: 'unnamelock', unnamelock(target, room, user) { @@ -2003,7 +2004,7 @@ export const commands: Chat.ChatCommands = { if (!reason) this.globalModlog("UNNAMELOCK", toID(target)); if (targetUser) targetUser.popup(`${user.name} has unnamelocked you.`); }, - unnamelockhelp: [`/unnamelock [username] - Unnamelocks the user. Requires: % @ &`], + unnamelockhelp: [`/unnamelock [username] - Unnamelocks the user. Requires: % @ ~`], hidetextalts: 'hidetext', hidealttext: 'hidetext', @@ -2080,9 +2081,9 @@ export const commands: Chat.ChatCommands = { } }, hidetexthelp: [ - `/hidetext [username], [optional reason] - Removes a user's messages from chat, with an optional reason. Requires: % @ # &`, - `/hidealtstext [username], [optional reason] - Removes a user's messages and their alternate accounts' messages from the chat, with an optional reason. Requires: % @ # &`, - `/hidelines [username], [number], [optional reason] - Removes the [number] most recent messages from a user, with an optional reason. Requires: % @ # &`, + `/hidetext [username], [optional reason] - Removes a user's messages from chat, with an optional reason. Requires: % @ # ~`, + `/hidealtstext [username], [optional reason] - Removes a user's messages and their alternate accounts' messages from the chat, with an optional reason. Requires: % @ # ~`, + `/hidelines [username], [number], [optional reason] - Removes the [number] most recent messages from a user, with an optional reason. Requires: % @ # ~`, `Use /cleartext, /clearaltstext, and /clearlines to remove messages without displaying a button to reveal them.`, ], @@ -2153,6 +2154,7 @@ export const commands: Chat.ChatCommands = { const affected = Punishments.roomBlacklist(room, targetUser, expireTime, null, reason); + for (const u of affected) Chat.runHandlers('onPunishUser', 'BLACKLIST', u, room); if (!room.settings.isPrivate && room.persist) { const acAccount = (targetUser.autoconfirmed !== userid && targetUser.autoconfirmed); let displayMessage = ''; @@ -2174,11 +2176,11 @@ export const commands: Chat.ChatCommands = { return true; }, blacklisthelp: [ - `/blacklist [username], [reason] - Blacklists the user from the room you are in for a year. Requires: # &`, - `/permablacklist OR /permabl - blacklist a user for 10 years. Requires: # &`, - `/unblacklist [username] - Unblacklists the user from the room you are in. Requires: # &`, - `/showblacklist OR /showbl - show a list of blacklisted users in the room. Requires: % @ # &`, - `/expiringblacklists OR /expiringbls - show a list of blacklisted users from the room whose blacklists are expiring in 3 months or less. Requires: % @ # &`, + `/blacklist [username], [reason] - Blacklists the user from the room you are in for a year. Requires: # ~`, + `/permablacklist OR /permabl - blacklist a user for 10 years. Requires: # ~`, + `/unblacklist [username] - Unblacklists the user from the room you are in. Requires: # ~`, + `/showblacklist OR /showbl - show a list of blacklisted users in the room. Requires: % @ # ~`, + `/expiringblacklists OR /expiringbls - show a list of blacklisted users from the room whose blacklists are expiring in 3 months or less. Requires: % @ # ~`, ], forcebattleban: 'battleban', @@ -2228,7 +2230,7 @@ export const commands: Chat.ChatCommands = { }, battlebanhelp: [ `/battleban [username], [reason] - [DEPRECATED]`, - `Prevents the user from starting new battles for 2 days and shows them the [reason]. Requires: &`, + `Prevents the user from starting new battles for 2 days and shows them the [reason]. Requires: ~`, ], unbattleban(target, room, user) { @@ -2246,7 +2248,7 @@ export const commands: Chat.ChatCommands = { this.errorReply(`User ${target} is not banned from battling.`); } }, - unbattlebanhelp: [`/unbattleban [username] - [DEPRECATED] Allows a user to battle again. Requires: % @ &`], + unbattlebanhelp: [`/unbattleban [username] - [DEPRECATED] Allows a user to battle again. Requires: % @ ~`], monthgroupchatban: 'groupchatban', monthgcban: 'groupchatban', @@ -2310,7 +2312,7 @@ export const commands: Chat.ChatCommands = { groupchatbanhelp: [ `/groupchatban [user], [optional reason]`, `/monthgroupchatban [user], [optional reason]`, - `Bans the user from joining or creating groupchats for a week (or month). Requires: % @ &`, + `Bans the user from joining or creating groupchats for a week (or month). Requires: % @ ~`, ], ungcban: 'ungroupchatban', @@ -2331,7 +2333,7 @@ export const commands: Chat.ChatCommands = { this.errorReply(`User ${target} is not banned from using groupchats.`); } }, - ungroupchatbanhelp: [`/ungroupchatban [user] - Allows a groupchatbanned user to use groupchats again. Requires: % @ &`], + ungroupchatbanhelp: [`/ungroupchatban [user] - Allows a groupchatbanned user to use groupchats again. Requires: % @ ~`], nameblacklist: 'blacklistname', permablacklistname: 'blacklistname', @@ -2385,8 +2387,8 @@ export const commands: Chat.ChatCommands = { return true; }, blacklistnamehelp: [ - `/blacklistname OR /nameblacklist [name1, name2, etc.] | reason - Blacklists all name(s) from the room you are in for a year. Requires: # &`, - `/permablacklistname [name1, name2, etc.] | reason - Blacklists all name(s) from the room you are in for 10 years. Requires: # &`, + `/blacklistname OR /nameblacklist [name1, name2, etc.] | reason - Blacklists all name(s) from the room you are in for a year. Requires: # ~`, + `/permablacklistname [name1, name2, etc.] | reason - Blacklists all name(s) from the room you are in for 10 years. Requires: # ~`, ], unab: 'unblacklist', @@ -2406,7 +2408,7 @@ export const commands: Chat.ChatCommands = { this.errorReply(`User '${target}' is not blacklisted.`); } }, - unblacklisthelp: [`/unblacklist [username] - Unblacklists the user from the room you are in. Requires: # &`], + unblacklisthelp: [`/unblacklist [username] - Unblacklists the user from the room you are in. Requires: # ~`], unblacklistall(target, room, user) { room = this.requireRoom(); @@ -2428,7 +2430,7 @@ export const commands: Chat.ChatCommands = { this.modlog('UNBLACKLISTALL'); this.roomlog(`Unblacklisted users: ${unblacklisted.join(', ')}`); }, - unblacklistallhelp: [`/unblacklistall - Unblacklists all blacklisted users in the current room. Requires: # &`], + unblacklistallhelp: [`/unblacklistall - Unblacklists all blacklisted users in the current room. Requires: # ~`], expiringbls: 'showblacklist', expiringblacklists: 'showblacklist', @@ -2492,7 +2494,7 @@ export const commands: Chat.ChatCommands = { this.sendReplyBox(buf); }, showblacklisthelp: [ - `/showblacklist OR /showbl - show a list of blacklisted users in the room. Requires: % @ # &`, - `/expiringblacklists OR /expiringbls - show a list of blacklisted users from the room whose blacklists are expiring in 3 months or less. Requires: % @ # &`, + `/showblacklist OR /showbl - show a list of blacklisted users in the room. Requires: % @ # ~`, + `/expiringblacklists OR /expiringbls - show a list of blacklisted users from the room whose blacklists are expiring in 3 months or less. Requires: % @ # ~`, ], }; diff --git a/server/chat-commands/room-settings.ts b/server/chat-commands/room-settings.ts index 983e396683f4..76e1ce7589a9 100644 --- a/server/chat-commands/room-settings.ts +++ b/server/chat-commands/room-settings.ts @@ -89,7 +89,7 @@ export const commands: Chat.ChatCommands = { if ( room.settings.modchat && room.settings.modchat.length <= 1 && !room.auth.atLeast(user, room.settings.modchat) && - // Upper Staff should probably be able to set /modchat & in secret rooms + // Upper Staff should probably be able to set /modchat ~ in secret rooms !user.can('bypassall') ) { return this.errorReply(`/modchat - Access denied for changing a setting currently at ${room.settings.modchat}.`); @@ -155,7 +155,7 @@ export const commands: Chat.ChatCommands = { room.saveSettings(); }, modchathelp: [ - `/modchat [off/autoconfirmed/trusted/+/%/@/*/player/#/&] - Set the level of moderated chat. Requires: % \u2606 for off/autoconfirmed/+/player options, * @ # & for all the options`, + `/modchat [off/autoconfirmed/trusted/+/%/@/*/player/#/~] - Set the level of moderated chat. Requires: % \u2606 for off/autoconfirmed/+/player options, * @ # ~ for all the options`, ], automodchat(target, room, user) { @@ -185,7 +185,7 @@ export const commands: Chat.ChatCommands = { return this.parse(`/help automodchat`); } } - const validGroups = [...Config.groupsranking as string[], 'trusted']; + const validGroups = [...Config.groupsranking as string[], 'trusted', 'autoconfirmed']; if (!validGroups.includes(rank)) { return this.errorReply(`Invalid rank.`); } @@ -202,7 +202,7 @@ export const commands: Chat.ChatCommands = { }, automodchathelp: [ `/automodchat [number], [rank] - Sets modchat [rank] to automatically turn on after [number] minutes with no staff.`, - `[number] must be between 5 and 480. Requires: # &`, + `[number] must be between 5 and 480. Requires: # ~`, `/automodchat off - Turns off automodchat.`, ], @@ -243,7 +243,7 @@ export const commands: Chat.ChatCommands = { } }, inviteonlyhelp: [ - `/inviteonly [on|off] - Sets modjoin %. Users can't join unless invited with /invite. Requires: # &`, + `/inviteonly [on|off] - Sets modjoin %. Users can't join unless invited with /invite. Requires: # ~`, `/ioo - Shortcut for /inviteonly on`, `/inviteonlynext OR /ionext - Sets your next battle to be invite-only.`, `/ionext off - Sets your next battle to be publicly visible.`, @@ -328,8 +328,8 @@ export const commands: Chat.ChatCommands = { if (!room.settings.isPrivate) return this.parse('/hiddenroom'); }, modjoinhelp: [ - `/modjoin [+|%|@|*|player|&|#|off] - Sets modjoin. Users lower than the specified rank can't join this room unless they have a room rank. Requires: \u2606 # &`, - `/modjoin [sync|off] - Sets modjoin. Only users who can speak in modchat can join this room. Requires: \u2606 # &`, + `/modjoin [+|%|@|*|player|~|#|off] - Sets modjoin. Users lower than the specified rank can't join this room unless they have a room rank. Requires: \u2606 # ~`, + `/modjoin [sync|off] - Sets modjoin. Only users who can speak in modchat can join this room. Requires: \u2606 # ~`, ], roomlanguage(target, room, user) { @@ -349,7 +349,7 @@ export const commands: Chat.ChatCommands = { this.sendReply(`The room's language has been set to ${Chat.languages.get(targetLanguage)}`); }, roomlanguagehelp: [ - `/roomlanguage [language] - Sets the the language for the room, which changes language of a few commands. Requires # &`, + `/roomlanguage [language] - Sets the the language for the room, which changes language of a few commands. Requires # ~`, `Supported Languages: English, Spanish, Italian, French, Simplified Chinese, Traditional Chinese, Japanese, Hindi, Turkish, Dutch, German.`, ], @@ -385,8 +385,8 @@ export const commands: Chat.ChatCommands = { room.saveSettings(); }, slowchathelp: [ - `/slowchat [number] - Sets a limit on how often users in the room can send messages, between 2 and 60 seconds. Requires @ # &`, - `/slowchat off - Disables slowchat in the room. Requires @ # &`, + `/slowchat [number] - Sets a limit on how often users in the room can send messages, between 2 and 60 seconds. Requires % @ # ~`, + `/slowchat off - Disables slowchat in the room. Requires % @ # ~`, ], permission: 'permissions', permissions: { @@ -440,8 +440,8 @@ export const commands: Chat.ChatCommands = { return this.privateModAction(`${user.name} set the required rank for ${perm} to ${displayRank}.`); }, sethelp: [ - `/permissions set [command], [rank symbol] - sets the required permission to use the command [command] to [rank]. Requires: # &`, - `/permissions clear [command] - resets the required permission to use the command [command] to the default. Requires: # &`, + `/permissions set [command], [rank symbol] - sets the required permission to use the command [command] to [rank]. Requires: # ~`, + `/permissions clear [command] - resets the required permission to use the command [command] to the default. Requires: # ~`, ], view(target, room, user) { room = this.requireRoom(); @@ -517,7 +517,7 @@ export const commands: Chat.ChatCommands = { room.saveSettings(); }, stretchfilterhelp: [ - `/stretchfilter [on/off] - Toggles filtering messages in the room for stretchingggggggg. Requires # &`, + `/stretchfilter [on/off] - Toggles filtering messages in the room for stretchingggggggg. Requires # ~`, ], capitals: 'capsfilter', @@ -546,7 +546,7 @@ export const commands: Chat.ChatCommands = { room.saveSettings(); }, - capsfilterhelp: [`/capsfilter [on/off] - Toggles filtering messages in the room for EXCESSIVE CAPS. Requires # &`], + capsfilterhelp: [`/capsfilter [on/off] - Toggles filtering messages in the room for EXCESSIVE CAPS. Requires # ~`], emojis: 'emojifilter', emoji: 'emojifilter', @@ -574,7 +574,7 @@ export const commands: Chat.ChatCommands = { room.saveSettings(); }, - emojifilterhelp: [`/emojifilter [on/off] - Toggles filtering messages in the room for emojis. Requires # &`], + emojifilterhelp: [`/emojifilter [on/off] - Toggles filtering messages in the room for emojis. Requires # ~`], linkfilter(target, room, user) { room = this.requireRoom(); @@ -601,7 +601,7 @@ export const commands: Chat.ChatCommands = { room.saveSettings(); }, - linkfilterhelp: [`/linkfilter [on/off] - Toggles filtering messages in the room for links. Requires # &`], + linkfilterhelp: [`/linkfilter [on/off] - Toggles filtering messages in the room for links. Requires # ~`], banwords: 'banword', banword: { @@ -715,10 +715,10 @@ export const commands: Chat.ChatCommands = { }, }, banwordhelp: [ - `/banword add [words] - Adds the comma-separated list of phrases to the banword list of the current room. Requires: # &`, - `/banword addregex [words] - Adds the comma-separated list of regular expressions to the banword list of the current room. Requires &`, - `/banword delete [words] - Removes the comma-separated list of phrases from the banword list. Requires: # &`, - `/banword list - Shows the list of banned words in the current room. Requires: % @ # &`, + `/banword add [words] - Adds the comma-separated list of phrases to the banword list of the current room. Requires: # ~`, + `/banword addregex [words] - Adds the comma-separated list of regular expressions to the banword list of the current room. Requires ~`, + `/banword delete [words] - Removes the comma-separated list of phrases from the banword list. Requires: # ~`, + `/banword list - Shows the list of banned words in the current room. Requires: % @ # ~`, ], showapprovals(target, room, user) { @@ -750,7 +750,7 @@ export const commands: Chat.ChatCommands = { }, showapprovalshelp: [ `/showapprovals [setting] - Enable or disable the use of media approvals in the current room.`, - `Requires: # &`, + `Requires: # ~`, ], showmedia(target, room, user) { @@ -761,7 +761,7 @@ export const commands: Chat.ChatCommands = { hightraffic(target, room, user) { room = this.requireRoom(); if (!target) { - return this.sendReply(`This room is: ${room.settings.highTraffic ? 'high traffic' : 'low traffic'}`); + return this.sendReply(`This room is: ${room.settings.highTraffic ? 'high' : 'low'} traffic`); } this.checkCan('makeroom'); @@ -774,10 +774,10 @@ export const commands: Chat.ChatCommands = { } room.saveSettings(); this.modlog(`HIGHTRAFFIC`, null, `${!!room.settings.highTraffic}`); - this.addModAction(`This room was marked as high traffic by ${user.name}.`); + this.addModAction(`This room was marked as ${room.settings.highTraffic ? 'high' : 'low'} traffic by ${user.name}.`); }, hightraffichelp: [ - `/hightraffic [on|off] - (Un)marks a room as a high traffic room. Requires &`, + `/hightraffic [on|off] - (Un)marks a room as a high traffic room. Requires ~`, `When a room is marked as high-traffic, PS requires all messages sent to that room to contain at least 2 letters.`, ], @@ -793,7 +793,7 @@ export const commands: Chat.ChatCommands = { const id = toID(target); if (!id || this.cmd === 'makechatroom') return this.parse('/help makechatroom'); if (!Rooms.global.addChatRoom(target)) { - return this.errorReply(`An error occurred while trying to create the room '${target}'.`); + return this.errorReply(`The room '${target}' already exists or it is using an invalid title.`); } const targetRoom = Rooms.search(target); @@ -819,8 +819,8 @@ export const commands: Chat.ChatCommands = { } }, makechatroomhelp: [ - `/makeprivatechatroom [roomname] - Creates a new private room named [roomname]. Requires: &`, - `/makepublicchatroom [roomname] - Creates a new public room named [roomname]. Requires: &`, + `/makeprivatechatroom [roomname] - Creates a new private room named [roomname]. Requires: ~`, + `/makepublicchatroom [roomname] - Creates a new public room named [roomname]. Requires: ~`, ], subroomgroupchat: 'makegroupchat', @@ -960,7 +960,7 @@ export const commands: Chat.ChatCommands = { return this.errorReply(`The room "${target}" isn't registered.`); }, deregisterchatroomhelp: [ - `/deregisterchatroom [roomname] - Deletes room [roomname] after the next server restart. Requires: &`, + `/deregisterchatroom [roomname] - Deletes room [roomname] after the next server restart. Requires: ~`, ], deletechatroom: 'deleteroom', @@ -1019,8 +1019,8 @@ export const commands: Chat.ChatCommands = { room.destroy(); }, deleteroomhelp: [ - `/deleteroom [roomname] - Deletes room [roomname]. Must be typed in the room to delete. Requires: &`, - `/deletegroupchat - Deletes the current room, if it's a groupchat. Requires: ★ # &`, + `/deleteroom [roomname] - Deletes room [roomname]. Must be typed in the room to delete. Requires: ~`, + `/deletegroupchat - Deletes the current room, if it's a groupchat. Requires: ★ # ~`, ], rename() { @@ -1079,7 +1079,7 @@ export const commands: Chat.ChatCommands = { } room.add(Utils.html`|raw|
The room has been renamed to ${target}
`).update(); }, - renameroomhelp: [`/renameroom [new title] - Renames the current room to [new title]. Case-sensitive. Requires &`], + renameroomhelp: [`/renameroom [new title] - Renames the current room to [new title]. Case-sensitive. Requires ~`], hideroom: 'privateroom', hiddenroom: 'privateroom', @@ -1088,10 +1088,11 @@ export const commands: Chat.ChatCommands = { unlistroom: 'privateroom', privateroom(target, room, user, connection, cmd) { room = this.requireRoom(); - if (room.battle) { + const battle = room.battle || room.bestOf; + if (battle) { this.checkCan('editprivacy', null, room); - if (room.battle.forcedSettings.privacy) { - return this.errorReply(`This battle is required to be public because a player has a name prefixed by '${room.battle.forcedSettings.privacy}'.`); + if (battle.forcedSettings.privacy) { + return this.errorReply(`This battle is required to be public because a player has a name prefixed by '${battle.forcedSettings.privacy}'.`); } if (room.tour?.forcePublic) { return this.errorReply(`This battle can't be hidden, because the tournament is set to be forced public.`); @@ -1136,7 +1137,7 @@ export const commands: Chat.ChatCommands = { if (room.parent && room.parent.settings.isPrivate) { return this.errorReply(`This room's parent ${room.parent.title} must be public for this room to be public.`); } - if (room.settings.isPersonal && !room.battle) { + if (room.settings.isPersonal && !battle) { return this.errorReply(`This room can't be made public.`); } if (room.privacySetter && user.can('nooverride', null, room) && !user.can('makeroom')) { @@ -1156,7 +1157,7 @@ export const commands: Chat.ChatCommands = { room.setPrivate(false); } else { const settingName = (setting === true ? 'secret' : setting); - if (room.subRooms) { + if (room.subRooms && !room.bestOf) { if (settingName === 'secret') return this.errorReply("Secret rooms cannot have subrooms."); for (const subRoom of room.subRooms.values()) { if (!subRoom.settings.isPrivate) { @@ -1173,15 +1174,15 @@ export const commands: Chat.ChatCommands = { } this.addModAction(`${user.name} made this room ${settingName}.`); this.modlog(`${settingName.toUpperCase()}ROOM`); - if (!room.settings.isPersonal && !room.battle) room.setSection(); + if (!room.settings.isPersonal && !battle) room.setSection(); room.setPrivate(setting); room.privacySetter = new Set([user.id]); } }, privateroomhelp: [ - `/secretroom - Makes a room secret. Secret rooms are visible to & and up. Requires: &`, - `/hiddenroom [on/off] - Makes a room hidden. Hidden rooms are visible to % and up, and inherit global ranks. Requires: \u2606 &`, - `/publicroom - Makes a room public. Requires: \u2606 &`, + `/secretroom - Makes a room secret. Secret rooms are visible to ~ and up. Requires: ~`, + `/hiddenroom [on/off] - Makes a room hidden. Hidden rooms are visible to % and up, and inherit global ranks. Requires: \u2606 ~`, + `/publicroom - Makes a room public. Requires: \u2606 ~`, ], hidenext(target, room, user) { @@ -1229,8 +1230,8 @@ export const commands: Chat.ChatCommands = { } }, roomspotlighthelp: [ - `/roomspotlight [spotlight] - Makes the room this command is used in a spotlight room for the [spotlight] category on the roomlist. Requires: &`, - `/roomspotlight off - Removes the room this command is used in from the list of spotlight rooms. Requires: &`, + `/roomspotlight [spotlight] - Makes the room this command is used in a spotlight room for the [spotlight] category on the roomlist. Requires: ~`, + `/roomspotlight off - Removes the room this command is used in from the list of spotlight rooms. Requires: ~`, ], setsubroom: 'subroom', @@ -1289,7 +1290,7 @@ export const commands: Chat.ChatCommands = { this.modlog('UNSUBROOM'); return this.addModAction(`This room was unset as a subroom by ${user.name}.`); }, - unsubroomhelp: [`/unsubroom - Unmarks the current room as a subroom. Requires: &`], + unsubroomhelp: [`/unsubroom - Unmarks the current room as a subroom. Requires: ~`], parentroom: 'subrooms', subrooms(target, room, user, connection, cmd) { @@ -1317,8 +1318,8 @@ export const commands: Chat.ChatCommands = { }, subroomhelp: [ - `/subroom [room] - Marks the current room as a subroom of [room]. Requires: &`, - `/unsubroom - Unmarks the current room as a subroom. Requires: &`, + `/subroom [room] - Marks the current room as a subroom of [room]. Requires: ~`, + `/unsubroom - Unmarks the current room as a subroom. Requires: ~`, `/subrooms - Displays the current room's subrooms.`, `/parentroom - Displays the current room's parent room.`, ], @@ -1354,7 +1355,7 @@ export const commands: Chat.ChatCommands = { this.modlog('ROOMDESC', null, `to "${target}"`); room.saveSettings(); }, - roomdeschelp: [`/roomdesc [description] - Sets the [description] of the current room. Requires: &`], + roomdeschelp: [`/roomdesc [description] - Sets the [description] of the current room. Requires: ~`], topic: 'roomintro', roomintro(target, room, user, connection, cmd) { @@ -1391,7 +1392,7 @@ export const commands: Chat.ChatCommands = { }, roomintrohelp: [ `/roomintro - Display the room introduction of the current room.`, - `/roomintro [content] - Set an introduction for the room. Requires: # &`, + `/roomintro [content] - Set an introduction for the room. Requires: # ~`, ], deletetopic: 'deleteroomintro', @@ -1406,7 +1407,7 @@ export const commands: Chat.ChatCommands = { delete room.settings.introMessage; room.saveSettings(); }, - deleteroomintrohelp: [`/deleteroomintro - Deletes the current room's introduction. Requires: # &`], + deleteroomintrohelp: [`/deleteroomintro - Deletes the current room's introduction. Requires: # ~`], stafftopic: 'staffintro', staffintro(target, room, user, connection, cmd) { @@ -1441,7 +1442,7 @@ export const commands: Chat.ChatCommands = { this.roomlog(room.settings.staffMessage.replace(/\n/g, ``)); room.saveSettings(); }, - staffintrohelp: [`/staffintro [content] - Set an introduction for staff members. Requires: @ # &`], + staffintrohelp: [`/staffintro [content] - Set an introduction for staff members. Requires: @ # ~`], deletestafftopic: 'deletestaffintro', deletestaffintro(target, room, user) { @@ -1455,7 +1456,7 @@ export const commands: Chat.ChatCommands = { delete room.settings.staffMessage; room.saveSettings(); }, - deletestaffintrohelp: [`/deletestaffintro - Deletes the current room's staff introduction. Requires: @ # &`], + deletestaffintrohelp: [`/deletestaffintro - Deletes the current room's staff introduction. Requires: @ # ~`], roomalias(target, room, user) { room = this.requireRoom(); @@ -1487,8 +1488,8 @@ export const commands: Chat.ChatCommands = { }, roomaliashelp: [ `/roomalias - displays a list of all room aliases of the room the command was entered in.`, - `/roomalias [alias] - adds the given room alias to the room the command was entered in. Requires: &`, - `/removeroomalias [alias] - removes the given room alias of the room the command was entered in. Requires: &`, + `/roomalias [alias] - adds the given room alias to the room the command was entered in. Requires: ~`, + `/removeroomalias [alias] - removes the given room alias of the room the command was entered in. Requires: ~`, ], deleteroomalias: 'removeroomalias', @@ -1521,7 +1522,7 @@ export const commands: Chat.ChatCommands = { } }, removeroomaliashelp: [ - `/removeroomalias [alias] - removes the given room alias of the room the command was entered in. Requires: &`, + `/removeroomalias [alias] - removes the given room alias of the room the command was entered in. Requires: ~`, ], resettierdisplay: 'roomtierdisplay', @@ -1566,8 +1567,8 @@ export const commands: Chat.ChatCommands = { }, roomtierdisplayhelp: [ `/roomtierdisplay - displays the current room's display.`, - `/roomtierdisplay [option] - changes the current room's tier display. Valid options are: tiers, doubles tiers, numbers. Requires: # &`, - `/resettierdisplay - resets the current room's tier display. Requires: # &`, + `/roomtierdisplay [option] - changes the current room's tier display. Valid options are: tiers, doubles tiers, numbers. Requires: # ~`, + `/resettierdisplay - resets the current room's tier display. Requires: # ~`, ], setroomsection: 'roomsection', @@ -1587,7 +1588,7 @@ export const commands: Chat.ChatCommands = { this.globalModlog('ROOMSECTION', null, section || 'none'); }, roomsectionhelp: [ - `/roomsection [section] - Sets the room this is used in to the specified [section]. Requires: &`, + `/roomsection [section] - Sets the room this is used in to the specified [section]. Requires: ~`, `Valid sections: ${sections.join(', ')}`, ], @@ -1614,7 +1615,7 @@ export const commands: Chat.ChatCommands = { target = toID(target); const format = Dex.formats.get(target); - if (format.exists) { + if (format.effectType === 'Format') { target = format.name; } const {isMatch} = this.extractFormat(target); @@ -1626,8 +1627,8 @@ export const commands: Chat.ChatCommands = { this.privateModAction(`${user.name} set this room's default format to ${target}.`); }, roomdefaultformathelp: [ - `/roomdefaultformat [format] or [mod] or gen[number] - Sets this room's default format/mod. Requires: # &`, - `/roomdefaultformat off - Clears this room's default format/mod. Requires: # &`, + `/roomdefaultformat [format] or [mod] or gen[number] - Sets this room's default format/mod. Requires: # ~`, + `/roomdefaultformat off - Clears this room's default format/mod. Requires: # ~`, `Affected commands: /details, /coverage, /effectiveness, /weakness, /learn`, ], }; @@ -1742,7 +1743,7 @@ export const pages: Chat.PageTable = { atLeastOne = true; buf += `${permission}`; if (room.auth.atLeast(user, '#')) { - buf += roomGroups.filter(group => group !== Users.SECTIONLEADER_SYMBOL).map(group => ( + buf += roomGroups.map(group => ( requiredRank === group ? Utils.html`` : Utils.html`` diff --git a/server/chat-formatter.ts b/server/chat-formatter.ts index c3425eee1be1..672b51e7f9b3 100644 --- a/server/chat-formatter.ts +++ b/server/chat-formatter.ts @@ -39,7 +39,9 @@ REGEXFREE SOURCE FOR LINKREGEX | # parentheses in URLs should be matched, so they're not confused # for parentheses around URLs - \( ( [^\\s()<>&] | & )* \) + \( ( [^\s()<>&[\]] | & )* \) + | + \[ ( [^\s()<>&[\]] | & )* ] )* # URLs usually don't end with punctuation, so don't allow # punctuation symbols that probably arent related to URL. @@ -47,7 +49,7 @@ REGEXFREE SOURCE FOR LINKREGEX [^\s()[\]{}\".,!?;:&<>*`^~\\] | # annoyingly, Wikipedia URLs often end in ) - \( ( [^\s()<>&] | & )* \) + \( ( [^\s()<>&[\]] | & )* \) ) )? )? @@ -58,9 +60,19 @@ REGEXFREE SOURCE FOR LINKREGEX (?! [^ ]*> ) */ -export const linkRegex = /(?:(?:https?:\/\/[a-z0-9-]+(?:\.[a-z0-9-]+)*|www\.[a-z0-9-]+(?:\.[a-z0-9-]+)+|\b[a-z0-9-]+(?:\.[a-z0-9-]+)*\.(?:(?:com?|org|net|edu|info|us|jp)\b|[a-z]{2,3}(?=:[0-9]|\/)))(?::[0-9]+)?(?:\/(?:(?:[^\s()&<>]|&|"|\((?:[^\\s()<>&]|&)*\))*(?:[^\s()[\]{}".,!?;:&<>*`^~\\]|\((?:[^\s()<>&]|&)*\)))?)?|[a-z0-9.]+@[a-z0-9-]+(?:\.[a-z0-9-]+)*\.[a-z]{2,})(?![^ ]*>)/ig; +export const linkRegex = /(?:(?:https?:\/\/[a-z0-9-]+(?:\.[a-z0-9-]+)*|www\.[a-z0-9-]+(?:\.[a-z0-9-]+)+|\b[a-z0-9-]+(?:\.[a-z0-9-]+)*\.(?:(?:com?|org|net|edu|info|us|jp)\b|[a-z]{2,3}(?=:[0-9]|\/)))(?::[0-9]+)?(?:\/(?:(?:[^\s()&<>]|&|"|\((?:[^\s()<>&[\]]|&)*\)|\[(?:[^\s()<>&[\]]|&)*])*(?:[^\s()[\]{}".,!?;:&<>*`^~\\]|\((?:[^\s()<>&[\]]|&)*\)))?)?|[a-z0-9.]+@[a-z0-9-]+(?:\.[a-z0-9-]+)*\.[a-z]{2,})(?![^ ]*>)/ig; -type SpanType = '_' | '*' | '~' | '^' | '\\' | '|' | '<' | '[' | '`' | 'a' | 'spoiler' | '>' | '('; +/** + * A span is a part of the text that's formatted. In the text: + * + * Hi, **this** is an example. + * + * The word `this` is a `*` span. Many spans are just a symbol repeated, and + * that symbol is the span type, but also many are more complicated. + * For an explanation of all of these, see the `TextFormatter#get` function + * implementation. + */ +type SpanType = '_' | '*' | '~' | '^' | '\\' | '|' | '<' | '[' | '`' | 'a' | 'u' | 'spoiler' | '>' | '('; type FormatSpan = [SpanType, number]; @@ -68,12 +80,16 @@ class TextFormatter { readonly str: string; readonly buffers: string[]; readonly stack: FormatSpan[]; + /** Allows access to special formatting (links without URL preview, pokemon icons) */ readonly isTrusted: boolean; + /** Replace \n with
*/ readonly replaceLinebreaks: boolean; + /** Discord-style WYSIWYM output; markup characters are in `` */ + readonly showSyntax: boolean; /** offset of str that's been parsed so far */ offset: number; - constructor(str: string, isTrusted = false, replaceLinebreaks = false) { + constructor(str: string, isTrusted = false, replaceLinebreaks = false, showSyntax = false) { // escapeHTML, without escaping / str = `${str}` .replace(/&/g, '&') @@ -84,6 +100,7 @@ class TextFormatter { // filter links first str = str.replace(linkRegex, uri => { + if (showSyntax) return `${uri}`; let fulluri; if (/^[a-z0-9.]+@/ig.test(uri)) { fulluri = 'mailto:' + uri; @@ -110,6 +127,7 @@ class TextFormatter { this.stack = []; this.isTrusted = isTrusted; this.replaceLinebreaks = this.isTrusted || replaceLinebreaks; + this.showSyntax = showSyntax; this.offset = 0; } // debugAt(i=0, j=i+1) { console.log(`${this.slice(0, i)}[${this.slice(i, j)}]${this.slice(j, this.str.length)}`); } @@ -122,6 +140,15 @@ class TextFormatter { return this.str.charAt(start); } + /** + * We've encountered a possible start for a span. It's pushed onto our span + * stack. + * + * The span stack saves the start position so it can be replaced with HTML + * if we find an end for the span, but we don't actually replace it until + * `closeSpan` is called, so nothing happens (it stays plaintext) if no end + * is found. + */ pushSpan(spanType: SpanType, start: number, end: number) { this.pushSlice(start); this.stack.push([spanType, this.buffers.length]); @@ -155,7 +182,8 @@ class TextFormatter { } /** - * Attempt to close a span. + * We've encountered a possible end for a span. If it's in the span stack, + * we transform it into HTML. */ closeSpan(spanType: SpanType, start: number, end: number) { // loop backwards @@ -181,11 +209,12 @@ class TextFormatter { case '~': tagName = 's'; break; case '^': tagName = 'sup'; break; case '\\': tagName = 'sub'; break; - case '|': tagName = 'span'; attrs = ' class="spoiler"'; break; + case '|': tagName = 'span'; attrs = (this.showSyntax ? ' class="spoiler-shown"' : ' class="spoiler"'); break; } + const syntax = (this.showSyntax ? `${spanType}${spanType}` : ''); if (tagName) { - this.buffers[startIndex] = `<${tagName}${attrs}>`; - this.buffers.push(``); + this.buffers[startIndex] = `${syntax}<${tagName}${attrs}>`; + this.buffers.push(`${syntax}`); this.offset = end; } return true; @@ -203,7 +232,7 @@ class TextFormatter { switch (span[0]) { case 'spoiler': this.buffers.push(``); - this.buffers[span[1]] = ``; + this.buffers[span[1]] = (this.showSyntax ? `` : ``); break; case '>': this.buffers.push(``); @@ -230,9 +259,15 @@ class TextFormatter { return encodeURIComponent(component); } + /** + * Handles special cases. + */ runLookahead(spanType: SpanType, start: number) { switch (spanType) { case '`': + // code span. Not only are the contents not formatted, but + // the start and end delimiters must match in length. + // ``Neither `this` nor ```this``` end this code span.`` { let delimLength = 0; let i = start; @@ -253,9 +288,9 @@ class TextFormatter { i++; } if (curDelimLength !== delimLength) return false; + const end = i; // matching delims found this.pushSlice(start); - this.buffers.push(``); let innerStart = start + delimLength; let innerEnd = i - delimLength; if (innerStart + 1 >= innerEnd) { @@ -268,12 +303,20 @@ class TextFormatter { } else if (this.at(innerEnd - 1) === ' ' && this.at(innerEnd - 2) === '`') { innerEnd--; // strip ending space } + if (this.showSyntax) this.buffers.push(`${this.slice(start, innerStart)}`); + this.buffers.push(``); this.buffers.push(this.slice(innerStart, innerEnd)); this.buffers.push(``); - this.offset = i; + if (this.showSyntax) this.buffers.push(`${this.slice(innerEnd, end)}`); + this.offset = end; } return true; case '[': + // Link span. Several possiblilities: + // [[text ]] - a link with custom text + // [[search term]] - Google search + // [[wiki: search term]] - Wikipedia search + // [[pokemon: species name]] - icon (also item:, type:, category:) { if (this.slice(start, start + 2) !== '[[') return false; let i = start + 2; @@ -287,6 +330,9 @@ class TextFormatter { i++; } if (this.slice(i, i + 2) !== ']]') return false; + + this.pushSlice(start); + this.offset = i + 2; let termEnd = i; let uri = ''; if (anglePos >= 0 && this.slice(i - 4, i) === '>') { // `>` @@ -295,17 +341,21 @@ class TextFormatter { if (this.at(termEnd - 1) === ' ') termEnd--; uri = encodeURI(uri.replace(/^([a-z]*[^a-z:])/g, 'http://$1')); } - let term = this.slice(start + 2, termEnd).replace(/<\/?a(?: [^>]+)?>/g, ''); - if (uri && !this.isTrusted) { + let term = this.slice(start + 2, termEnd).replace(/<\/?[au](?: [^>]+)?>/g, ''); + if (this.showSyntax) { + term += `${this.slice(termEnd, i)}`; + } else if (uri && !this.isTrusted) { const shortUri = uri.replace(/^https?:\/\//, '').replace(/^www\./, '').replace(/\/$/, ''); term += ` <${shortUri}>`; uri += '" rel="noopener'; } + if (colonPos > 0) { const key = this.slice(start + 2, colonPos).toLowerCase(); switch (key) { case 'w': case 'wiki': + if (this.showSyntax) break; term = term.slice(term.charAt(key.length + 1) === ' ' ? key.length + 2 : key.length + 1); uri = `//en.wikipedia.org/w/index.php?title=Special:Search&search=${this.toUriComponent(term)}`; term = `wiki: ${term}`; @@ -314,6 +364,10 @@ class TextFormatter { case 'item': case 'type': case 'category': + if (this.showSyntax) { + this.buffers.push(`${this.slice(start, this.offset)}`); + return true; + } term = term.slice(term.charAt(key.length + 1) === ' ' ? key.length + 2 : key.length + 1); let display = ''; @@ -334,28 +388,42 @@ class TextFormatter { if (!uri) { uri = `//www.google.com/search?ie=UTF-8&btnI&q=${this.toUriComponent(term)}`; } - this.pushSlice(start); - this.buffers.push(`${term}`); - this.offset = i + 2; + if (this.showSyntax) { + this.buffers.push(`[[${term}]]`); + } else { + this.buffers.push(`${term}`); + } } return true; case '<': + // Roomid-link span. Not to be confused with a URL span. + // `<>` { if (this.slice(start, start + 8) !== '<<') return false; // << let i = start + 8; while (/[a-z0-9-]/.test(this.at(i))) i++; if (this.slice(i, i + 8) !== '>>') return false; // >> + this.pushSlice(start); const roomid = this.slice(start + 8, i); - this.buffers.push(`«${roomid}»`); + if (this.showSyntax) { + this.buffers.push(`<<${roomid}>>`); + } else { + this.buffers.push(`«${roomid}»`); + } this.offset = i + 8; } return true; - case 'a': + case 'a': case 'u': + // URL span. Skip to the end of the link - where `` or `` is. + // Nothing inside should be formatted further (obviously we don't want + // `example.com/__foo__` to turn `foo` italic). { - let i = start + 1; - while (this.at(i) !== '/' || this.at(i + 1) !== 'a' || this.at(i + 2) !== '>') i++; // - i += 3; + let i = start + 2; + // Find or . + // We need to check the location of `>` to disambiguate from . + while (this.at(i) !== '<' || this.at(i + 1) !== '/' || this.at(i + 3) !== '>') i++; + i += 4; this.pushSlice(i); } return true; @@ -365,7 +433,9 @@ class TextFormatter { get() { let beginningOfLine = this.offset; - // main loop! i tracks our position + // main loop! `i` tracks our position + // Note that we skip around a lot; `i` is mutated inside the loop + // pretty often. for (let i = beginningOfLine; i < this.str.length; i++) { const char = this.at(i); switch (char) { @@ -375,7 +445,11 @@ class TextFormatter { case '^': case '\\': case '|': + // Must be exactly two chars long. if (this.at(i + 1) === char && this.at(i + 2) !== char) { + // This is a completely normal two-char span. Close it if it's + // already open, open it if it's not. + // The inside of regular spans must not start or end with a space. if (!(this.at(i - 1) !== ' ' && this.closeSpan(char, i, i + 2))) { if (this.at(i + 2) !== ' ') this.pushSpan(char, i, i + 2); } @@ -387,9 +461,11 @@ class TextFormatter { while (this.at(i + 1) === char) i++; break; case '(': + // `(` span - does nothing except end spans this.stack.push(['(', -1]); break; case ')': + // end of `(` span this.closeParenSpan(i); if (i < this.offset) { i = this.offset - 1; @@ -397,6 +473,9 @@ class TextFormatter { } break; case '`': + // ` ``code`` ` span. Uses lookahead because its contents are not + // formatted. + // Must be at least two `` ` `` in a row. if (this.at(i + 1) === '`') this.runLookahead('`', i); if (i < this.offset) { i = this.offset - 1; @@ -405,6 +484,9 @@ class TextFormatter { while (this.at(i + 1) === '`') i++; break; case '[': + // `[` (link) span. Uses lookahead because it might contain a + // URL which can't be formatted, or search terms that can't be + // formatted. this.runLookahead('[', i); if (i < this.offset) { i = this.offset - 1; @@ -413,6 +495,9 @@ class TextFormatter { while (this.at(i + 1) === '[') i++; break; case ':': + // Looks behind for `spoiler:` or `spoilers:`. Spoiler spans + // are also weird because they don't require an ending symbol, + // although that's not handled here. if (i < 7) break; if (this.slice(i - 7, i + 1).toLowerCase() === 'spoiler:' || this.slice(i - 8, i + 1).toLowerCase() === 'spoilers:') { @@ -421,11 +506,16 @@ class TextFormatter { } break; case '&': // escaped '<' or '>' + // greentext or roomid if (i === beginningOfLine && this.slice(i, i + 4) === '>') { + // greentext span, normal except it lacks an ending span + // check for certain emoticons like `>_>` or `>w<` if (!"._/=:;".includes(this.at(i + 4)) && !['w<', 'w>'].includes(this.slice(i + 4, i + 9))) { this.pushSpan('>', i, i); } } else { + // completely normal `<>` span + // uses lookahead because roomids can't be formatted. this.runLookahead('<', i); } if (i < this.offset) { @@ -434,7 +524,10 @@ class TextFormatter { } while (this.slice(i + 1, i + 5) === 'lt;&') i += 4; break; - case '<': // guaranteed to be or + // URL span + // The constructor has already converted `<` to `<` and URLs + // to links, so `<` must be the start of a converted link. this.runLookahead('a', i); if (i < this.offset) { i = this.offset - 1; @@ -444,6 +537,7 @@ class TextFormatter { break; case '\r': case '\n': + // End of the line. No spans span multiple lines. this.popAllSpans(i); if (this.replaceLinebreaks) { this.buffers.push(`
`); @@ -462,8 +556,8 @@ class TextFormatter { /** * Takes a string and converts it to HTML by replacing standard chat formatting with the appropriate HTML tags. */ -export function formatText(str: string, isTrusted = false, replaceLinebreaks = false) { - return new TextFormatter(str, isTrusted, replaceLinebreaks).get(); +export function formatText(str: string, isTrusted = false, replaceLinebreaks = false, showSyntax = false) { + return new TextFormatter(str, isTrusted, replaceLinebreaks, showSyntax).get(); } /** diff --git a/server/chat-plugins/abuse-monitor.ts b/server/chat-plugins/abuse-monitor.ts index a67541832def..acd0e5da46d7 100644 --- a/server/chat-plugins/abuse-monitor.ts +++ b/server/chat-plugins/abuse-monitor.ts @@ -177,7 +177,7 @@ function displayResolved(review: ReviewRequest, justSubmitted = false) { if (!user) return; const resolved = review.resolved; if (!resolved) return; - const prefix = `|pm|&|${user.getIdentity()}|`; + const prefix = `|pm|~|${user.getIdentity()}|`; user.send( prefix + `Your Artemis review for <<${review.room}>> was resolved by ${resolved.by}` + @@ -329,7 +329,7 @@ export async function runActions(user: User, room: GameRoom, message: string, re if (user.trusted) { // force just logging for any sort of punishment. requested by staff Rooms.get('staff')?.add( - `|c|&|/log [Artemis] ${getViewLink(room.roomid)} ${punishment} recommended for trusted user ${user.id}` + + `|c|~|/log [Artemis] ${getViewLink(room.roomid)} ${punishment} recommended for trusted user ${user.id}` + `${user.trusted !== user.id ? ` [${user.trusted}]` : ''} ` ).update(); return; // we want nothing else to be executed. staff want trusted users to be reviewed manually for now @@ -389,8 +389,8 @@ function globalModlog( const getViewLink = (roomid: RoomID) => `<>`; function addGlobalModAction(message: string, room: GameRoom) { - room.add(`|c|&|/log ${message}`).update(); - Rooms.get(`staff`)?.add(`|c|&|/log ${getViewLink(room.roomid)} ${message}`).update(); + room.add(`|c|~|/log ${message}`).update(); + Rooms.get(`staff`)?.add(`|c|~|/log ${getViewLink(room.roomid)} ${message}`).update(); } const DISCLAIMER = ( @@ -402,7 +402,7 @@ const DISCLAIMER = ( export async function lock(user: User, room: GameRoom, reason: string, isWeek?: boolean) { if (settings.recommendOnly) { Rooms.get('staff')?.add( - `|c|&|/log [Artemis] ${getViewLink(room.roomid)} ${isWeek ? "WEEK" : ""}LOCK recommended for ${user.id}` + `|c|~|/log [Artemis] ${getViewLink(room.roomid)} ${isWeek ? "WEEK" : ""}LOCK recommended for ${user.id}` ).update(); room.hideText([user.id], undefined, true); return false; @@ -420,11 +420,11 @@ export async function lock(user: User, room: GameRoom, reason: string, isWeek?: addGlobalModAction(`${user.name} was locked from talking by Artemis${isWeek ? ' for a week. ' : ". "}(${reason})`, room); if (affected.length > 1) { Rooms.get('staff')?.add( - `|c|&|/log (${user.id}'s ` + + `|c|~|/log (${user.id}'s ` + `locked alts: ${affected.slice(1).map(curUser => curUser.getLastName()).join(", ")})` ); } - room.add(`|c|&|/raw ${DISCLAIMER}`).update(); + room.add(`|c|~|/raw ${DISCLAIMER}`).update(); room.hideText(affected.map(f => f.id), undefined, true); let message = `|popup||html|Artemis has locked you from talking in chats, battles, and PMing regular users`; message += ` ${!isWeek ? "for two days" : "for a week"}`; @@ -462,7 +462,7 @@ const punishmentHandlers: Record = { if (room.auth.get(u) !== Users.PLAYER_SYMBOL) continue; u.sendTo( room.roomid, - `|c|&|/uhtml report,` + + `|c|~|/uhtml report,` + `Toxicity has been automatically detected in this battle, ` + `please click below if you would like to report it.
` + `
Make a report` @@ -490,7 +490,7 @@ const punishmentHandlers: Record = { punishments['WARN']++; punishmentCache.set(user, punishments); - room.add(`|c|&|/raw ${DISCLAIMER}`).update(); + room.add(`|c|~|/raw ${DISCLAIMER}`).update(); room.hideText([user.id], undefined, true); }, lock(user, room, response, message) { @@ -553,7 +553,7 @@ export const chatfilter: Chat.ChatFilter = function (message, user, room) { } } else { this.sendReply( - `|c|&|/raw
` + + `|c|~|/raw
` + `Your behavior in this battle has been automatically identified as breaking ` + `Pokemon Showdown's global rules. ` + `Repeated instances of misbehavior may incur harsher punishment.
` @@ -670,11 +670,11 @@ function getFlaggedRooms() { } export function writeStats(type: string, entry: AnyObject) { - const path = `logs/artemis/${type}/${Chat.toTimestamp(new Date()).split(' ')[0].slice(0, -3)}.jsonl`; + const path = `artemis/${type}/${Chat.toTimestamp(new Date()).split(' ')[0].slice(0, -3)}.jsonl`; try { - FS(path).parentDir().mkdirpSync(); + Monitor.logPath(path).parentDir().mkdirpSync(); } catch {} - void FS(path).append(JSON.stringify(entry) + "\n"); + void Monitor.logPath(path).append(JSON.stringify(entry) + "\n"); } function saveSettings(path?: string) { @@ -968,7 +968,7 @@ export const commands: Chat.ChatCommands = { const result = await this.parse(`${cmd} ${rest}`, {bypassRoomCheck: true}); if (result) { // command succeeded - send followup this.add( - '|c|&|/raw If you have questions about this action, please contact staff ' + + '|c|~|/raw If you have questions about this action, please contact staff ' + 'by making a help ticket' ); } @@ -1679,7 +1679,7 @@ export const commands: Chat.ChatCommands = { this.refreshPage('abusemonitor-settings'); }, edithistory(target, room, user) { - this.checkCan('globalban'); + this.checkCan('lock'); target = toID(target); if (!target) { return this.parse(`/help abusemonitor`); @@ -1688,7 +1688,7 @@ export const commands: Chat.ChatCommands = { }, ignoremodlog: { add(target, room, user) { - this.checkCan('globalban'); + this.checkCan('lock'); let targetUser: string; [targetUser, target] = this.splitOne(target).map(f => f.trim()); targetUser = toID(targetUser); @@ -1721,7 +1721,7 @@ export const commands: Chat.ChatCommands = { this.refreshPage(`abusemonitor-edithistory-${targetUser}`); }, remove(target, room, user) { - this.checkCan('globalban'); + this.checkCan('lock'); let [targetUser, rawNum] = this.splitOne(target).map(f => f.trim()); targetUser = toID(targetUser); const num = Number(rawNum); @@ -1759,27 +1759,27 @@ export const commands: Chat.ChatCommands = { abusemonitorhelp() { return this.sendReplyBox([ `Staff commands:`, - `/am userlogs [user] - View the Artemis flagged message logs for the given [user]. Requires: % @ &`, - `/am unmute [user] - Remove the Artemis mute from the given [user]. Requires: % @ &`, - `/am review - Submit feedback for manual abuse monitor review. Requires: % @ &`, + `/am userlogs [user] - View the Artemis flagged message logs for the given [user]. Requires: % @ ~`, + `/am unmute [user] - Remove the Artemis mute from the given [user]. Requires: % @ ~`, + `/am review - Submit feedback for manual abuse monitor review. Requires: % @ ~`, `
Management commands:`, - `/am toggle - Toggle the abuse monitor on and off. Requires: whitelist &`, - `/am threshold [number] - Set the abuse monitor trigger threshold. Requires: whitelist &`, - `/am resolve [room] - Mark a abuse monitor flagged room as handled by staff. Requires: % @ &`, - `/am respawn - Respawns abuse monitor processes. Requires: whitelist &`, + `/am toggle - Toggle the abuse monitor on and off. Requires: whitelist ~`, + `/am threshold [number] - Set the abuse monitor trigger threshold. Requires: whitelist ~`, + `/am resolve [room] - Mark a abuse monitor flagged room as handled by staff. Requires: % @ ~`, + `/am respawn - Respawns abuse monitor processes. Requires: whitelist ~`, `/am logs [count][, userid] - View logs of recent matches by the abuse monitor. `, - `If a userid is given, searches only logs from that userid. Requires: whitelist &`, - `/am edithistory [user] - Clear specific abuse monitor hit(s) for a user. Requires: @ &`, - `/am userclear [user] - Clear all logged abuse monitor hits for a user. Requires: whitelist &`, - `/am deletelog [number] - Deletes a abuse monitor log matching the row ID [number] given. Requires: whitelist &`, - `/am editspecial [type], [percent], [score] - Sets a special case for the abuse monitor. Requires: whitelist &`, + `If a userid is given, searches only logs from that userid. Requires: whitelist ~`, + `/am edithistory [user] - Clear specific abuse monitor hit(s) for a user. Requires: % @ ~`, + `/am userclear [user] - Clear all logged abuse monitor hits for a user. Requires: whitelist ~`, + `/am deletelog [number] - Deletes a abuse monitor log matching the row ID [number] given. Requires: whitelist ~`, + `/am editspecial [type], [percent], [score] - Sets a special case for the abuse monitor. Requires: whitelist ~`, `[score] can be either a number or MAXIMUM, which will set it to the maximum score possible (that will trigger an action)`, - `/am deletespecial [type], [percent] - Deletes a special case for the abuse monitor. Requires: whitelist &`, - `/am editmin [number] - Sets the minimum percent needed to process for all flags. Requires: whitelist &`, - `/am viewsettings - View the current settings for the abuse monitor. Requires: whitelist &`, + `/am deletespecial [type], [percent] - Deletes a special case for the abuse monitor. Requires: whitelist ~`, + `/am editmin [number] - Sets the minimum percent needed to process for all flags. Requires: whitelist ~`, + `/am viewsettings - View the current settings for the abuse monitor. Requires: whitelist ~`, `/am thresholdincrement [num], [amount][, min turns] - Sets the threshold increment for the abuse monitor to increase [amount] every [num] turns.`, - `If [min turns] is provided, increments will start after that turn number. Requires: whitelist &`, - `/am deleteincrement - clear abuse-monitor threshold increment. Requires: whitelist &`, + `If [min turns] is provided, increments will start after that turn number. Requires: whitelist ~`, + `/am deleteincrement - clear abuse-monitor threshold increment. Requires: whitelist ~`, `
`, ].join('
')); }, @@ -2068,7 +2068,7 @@ export const pages: Chat.PageTable = { data += `${cur.successes} (${percent(cur.successes, cur.total)}%)`; if (cur.failures) { data += ` | ${cur.failures} (${percent(cur.failures, cur.total)}%)`; - } else { // so one cannot confuse dead tickets & false hit tickets + } else { // so one cannot confuse dead tickets ~ false hit tickets data += ' | 0 (0%)'; } if (cur.dead) data += ` | ${cur.dead}`; @@ -2092,7 +2092,7 @@ export const pages: Chat.PageTable = { types: {} as Record, }; const inaccurate = new Set(); - const logPath = FS(`logs/artemis/punishments/${dateString}.jsonl`); + const logPath = Monitor.logPath(`artemis/punishments/${dateString}.jsonl`); if (await logPath.exists()) { const stream = logPath.createReadStream(); for await (const line of stream.byLine()) { @@ -2107,7 +2107,7 @@ export const pages: Chat.PageTable = { } } - const reviewLogPath = FS(`logs/artemis/reviews/${dateString}.jsonl`); + const reviewLogPath = Monitor.logPath(`artemis/reviews/${dateString}.jsonl`); if (await reviewLogPath.exists()) { const stream = reviewLogPath.createReadStream(); for await (const line of stream.byLine()) { @@ -2145,7 +2145,7 @@ export const pages: Chat.PageTable = { data += `${curAccurate} (${percent(curAccurate, cur.total)}%)`; if (cur.inaccurate) { data += ` | ${cur.inaccurate} (${percent(cur.inaccurate, cur.total)}%)`; - } else { // so one cannot confuse dead tickets & false hit tickets + } else { // so one cannot confuse dead tickets ~ false hit tickets data += ' | 0 (0%)'; } data += ''; @@ -2312,7 +2312,7 @@ export const pages: Chat.PageTable = { return buf; }, async edithistory(query, user) { - this.checkCan('globalban'); + this.checkCan('lock'); const targetUser = toID(query[0]); if (!targetUser) { return this.errorReply(`Specify a user.`); diff --git a/server/chat-plugins/announcements.ts b/server/chat-plugins/announcements.ts index 3716783d6477..a44ee1e3a91e 100644 --- a/server/chat-plugins/announcements.ts +++ b/server/chat-plugins/announcements.ts @@ -98,7 +98,7 @@ export const commands: Chat.ChatCommands = { this.modlog('ANNOUNCEMENT'); return this.privateModAction(room.tr`An announcement was started by ${user.name}.`); }, - newhelp: [`/announcement create [announcement] - Creates an announcement. Requires: % @ # &`], + newhelp: [`/announcement create [announcement] - Creates an announcement. Requires: % @ # ~`], htmledit: 'edit', edit(target, room, user, connection, cmd, message) { @@ -125,7 +125,7 @@ export const commands: Chat.ChatCommands = { this.privateModAction(room.tr`The announcement was edited by ${user.name}.`); this.parse('/announcement display'); }, - edithelp: [`/announcement edit [announcement] - Edits the announcement. Requires: % @ # &`], + edithelp: [`/announcement edit [announcement] - Edits the announcement. Requires: % @ # ~`], timer(target, room, user) { room = this.requireRoom(); @@ -155,8 +155,8 @@ export const commands: Chat.ChatCommands = { } }, timerhelp: [ - `/announcement timer [minutes] - Sets the announcement to automatically end after [minutes] minutes. Requires: % @ # &`, - `/announcement timer clear - Clears the announcement's timer. Requires: % @ # &`, + `/announcement timer [minutes] - Sets the announcement to automatically end after [minutes] minutes. Requires: % @ # ~`, + `/announcement timer clear - Clears the announcement's timer. Requires: % @ # ~`, ], close: 'end', @@ -170,7 +170,7 @@ export const commands: Chat.ChatCommands = { this.modlog('ANNOUNCEMENT END'); this.privateModAction(room.tr`The announcement was ended by ${user.name}.`); }, - endhelp: [`/announcement end - Ends a announcement and displays the results. Requires: % @ # &`], + endhelp: [`/announcement end - Ends a announcement and displays the results. Requires: % @ # ~`], show: '', display: '', @@ -191,18 +191,18 @@ export const commands: Chat.ChatCommands = { announcementhelp: [ `/announcement allows rooms to run their own announcements. These announcements are limited to one announcement at a time per room.`, `Accepts the following commands:`, - `/announcement create [announcement] - Creates a announcement. Requires: % @ # &`, - `/announcement htmlcreate [announcement] - Creates a announcement, with HTML allowed. Requires: # &`, - `/announcement edit [announcement] - Edits the announcement. Requires: % @ # &`, - `/announcement htmledit [announcement] - Edits the announcement, with HTML allowed. Requires: # &`, - `/announcement timer [minutes] - Sets the announcement to automatically end after [minutes]. Requires: % @ # &`, + `/announcement create [announcement] - Creates a announcement. Requires: % @ # ~`, + `/announcement htmlcreate [announcement] - Creates a announcement, with HTML allowed. Requires: # ~`, + `/announcement edit [announcement] - Edits the announcement. Requires: % @ # ~`, + `/announcement htmledit [announcement] - Edits the announcement, with HTML allowed. Requires: # ~`, + `/announcement timer [minutes] - Sets the announcement to automatically end after [minutes]. Requires: % @ # ~`, `/announcement display - Displays the announcement`, - `/announcement end - Ends a announcement. Requires: % @ # &`, + `/announcement end - Ends a announcement. Requires: % @ # ~`, ], }; process.nextTick(() => { - Chat.multiLinePattern.register('/announcement (new|create|htmlcreate) '); + Chat.multiLinePattern.register('/announcement (new|create|htmlcreate|edit|htmledit) '); }); // should handle restarts and also hotpatches diff --git a/server/chat-plugins/auction.ts b/server/chat-plugins/auction.ts new file mode 100644 index 000000000000..7fca3803eac4 --- /dev/null +++ b/server/chat-plugins/auction.ts @@ -0,0 +1,1124 @@ +/** + * Chat plugin to run auctions for team tournaments. + * + * Based on the original Scrappie auction system + * https://github.com/Hidden50/Pokemon-Showdown-Node-Bot/blob/master/commands/base-auctions.js + * @author Karthik + */ +import {Net, Utils} from '../../lib'; + +interface Player { + id: ID; + name: string; + team?: Team; + price: number; + tiers?: string[]; +} + +interface Manager { + id: ID; + team: Team; +} + +class Team { + id: ID; + name: string; + players: Player[]; + credits: number; + suspended: boolean; + private auction: Auction; + constructor(name: string, auction: Auction) { + this.id = toID(name); + this.name = name; + this.players = []; + this.credits = auction.startingCredits; + this.suspended = false; + this.auction = auction; + } + + getManagers() { + return [...this.auction.managers.values()] + .filter(m => m.team === this) + .map(m => Users.getExact(m.id)?.name || m.id); + } + + addPlayer(player: Player, price = 0) { + player.team?.removePlayer(player); + this.players.push(player); + this.credits -= price; + player.team = this; + player.price = price; + } + + removePlayer(player: Player) { + const pIndex = this.players.indexOf(player); + if (pIndex === -1) return; + this.players.splice(pIndex, 1); + delete player.team; + player.price = 0; + } + + isSuspended() { + return this.suspended || ( + this.auction.type === 'snake' ? + this.players.length >= this.auction.minPlayers : + this.credits < this.auction.minBid + ); + } + + maxBid(credits = this.credits) { + return credits + this.auction.minBid * Math.min(0, this.players.length - this.auction.minPlayers + 1); + } +} + +function parseCredits(amount: string) { + let credits = Number(amount.replace(',', '.')); + if (Math.abs(credits) < 500) credits *= 1000; + if (!credits || credits % 500 !== 0) { + throw new Chat.ErrorMessage(`The amount of credits must be a multiple of 500.`); + } + return credits; +} + +export class Auction extends Rooms.SimpleRoomGame { + override readonly gameid = 'auction' as ID; + owners: Set = new Set(); + teams: Map = new Map(); + managers: Map = new Map(); + auctionPlayers: Map = new Map(); + + startingCredits: number; + minBid = 3000; + minPlayers = 10; + type: 'auction' | 'blind' | 'snake' = 'auction'; + + lastQueue: Team[] | null = null; + queue: Team[] = []; + nomTimer: NodeJS.Timer = null!; + nomTimeLimit = 0; + nomTimeRemaining = 0; + bidTimer: NodeJS.Timer = null!; + bidTimeLimit = 10; + bidTimeRemaining = 10; + nominatingTeam: Team = null!; + nominatedPlayer: Player = null!; + highestBidder: Team = null!; + highestBid = 0; + /** Used for blind mode */ + bidsPlaced: Map = new Map(); + state: 'setup' | 'nom' | 'bid' = 'setup'; + constructor(room: Room, startingCredits = 100000) { + super(room); + this.title = 'Auction'; + this.startingCredits = startingCredits; + } + + sendMessage(message: string) { + this.room.add(`|c|~|${message}`).update(); + } + + sendHTMLBox(htmlContent: string) { + this.room.add(`|html|
${htmlContent}
`).update(); + } + + checkOwner(user: User) { + if (!this.owners.has(user.id) && !Users.Auth.hasPermission(user, 'declare', null, this.room)) { + throw new Chat.ErrorMessage(`You must be an auction owner to use this command.`); + } + } + + addOwners(users: string[]) { + for (const name of users) { + const user = Users.getExact(name); + if (!user) throw new Chat.ErrorMessage(`User "${name}" not found.`); + if (this.owners.has(user.id)) throw new Chat.ErrorMessage(`${user.name} is already an auction owner.`); + this.owners.add(user.id); + } + } + + removeOwners(users: string[]) { + for (const name of users) { + const id = toID(name); + if (!this.owners.has(id)) throw new Chat.ErrorMessage(`User "${name}" is not an auction owner.`); + this.owners.delete(id); + } + } + + generateUsernameList(players: (string | Player)[], max = players.length, clickable = false) { + let buf = ``; + buf += players.slice(0, max).map(p => { + if (typeof p === 'object') { + return `${Utils.escapeHTML(p.name)}`; + } + return `${Utils.escapeHTML(p)}`; + }).join(', '); + if (players.length > max) { + buf += ` (+${players.length - max})`; + } + buf += ``; + return buf; + } + + generatePriceList() { + const players = Utils.sortBy(this.getDraftedPlayers(), p => -p.price); + let buf = ''; + let smogonExport = ''; + + for (const team of this.teams.values()) { + let table = ``; + for (const player of players.filter(p => p.team === team)) { + table += Utils.html``; + } + table += `
${player.name}${player.price}
`; + buf += `
${Utils.escapeHTML(team.name)}${table}

`; + smogonExport += `[SPOILER="${team.name}"]${table.replace(/<(.*?)>/g, '[$1]')}[/SPOILER]`; + } + + let table = ``; + for (const player of players) { + table += Utils.html``; + } + table += `
${player.name}${player.price}
`; + buf += `
All${table}

`; + smogonExport += `[SPOILER="All"]${table.replace(/<(.*?)>/g, '[$1]')}[/SPOILER]`; + + buf += Utils.html`Copy Smogon Export`; + return buf; + } + + generateAuctionTable(ended = false) { + const queue = this.queue.filter(team => !team.isSuspended()); + let buf = `
${!ended ? `` : ''}${this.type !== 'snake' ? ``; + for (const team of this.teams.values()) { + buf += ``; + if (!ended) { + let i1 = queue.indexOf(team) + 1; + let i2 = queue.lastIndexOf(team) + 1; + if (i1 > queue.length / 2) { + [i1, i2] = [i2, i1]; + } + buf += ``; + } + buf += ``; + if (this.type !== 'snake') { + buf += ``; + } + buf += ``; + buf += ``; + } + buf += `
OrderTeamCredits` : ''}Players
${i1 || '-'}${i2 || '-'}${Utils.escapeHTML(team.name)}
${this.generateUsernameList(team.getManagers(), 2, true)}
${team.credits.toLocaleString()}${team.maxBid() >= this.minBid ? `
Max bid: ${team.maxBid().toLocaleString()}` : ''}
${team.players.length}${this.generateUsernameList(team.players)}
`; + + const players = Utils.sortBy(this.getUndraftedPlayers(), p => p.name); + const tierArrays = new Map(); + for (const player of players) { + if (!player.tiers) continue; + for (const tier of player.tiers) { + if (!tierArrays.has(tier)) tierArrays.set(tier, []); + tierArrays.get(tier)!.push(player); + } + } + const sortedTiers = [...tierArrays.keys()].sort(); + if (sortedTiers.length) { + buf += `
Remaining Players (${players.length})`; + buf += `
All${this.generateUsernameList(players)}
`; + buf += `
Tiers
    `; + for (const tier of sortedTiers) { + const tierPlayers = tierArrays.get(tier)!; + buf += `
  • ${Utils.escapeHTML(tier)} (${tierPlayers.length})${this.generateUsernameList(tierPlayers)}
  • `; + } + buf += `
`; + } else { + buf += `
Remaining Players (${players.length})${this.generateUsernameList(players)}
`; + } + buf += `
Auction Settings`; + buf += `- Minimum bid: ${this.minBid.toLocaleString()}
`; + buf += `- Minimum players per team: ${this.minPlayers}
`; + buf += `- Nom timer: ${this.nomTimeLimit ? `${this.nomTimeLimit}s` : 'Off'}
`; + if (this.type !== 'snake') buf += `- Bid timer: ${this.bidTimeLimit}s
`; + buf += `- Auction type: ${this.type}
`; + buf += `
`; + return buf; + } + + sendBidInfo() { + if (this.type === 'blind') return; + let buf = `
`; + buf += Utils.html`Player: ${this.nominatedPlayer.name} `; + buf += `Top bid: ${this.highestBid} `; + buf += Utils.html`Top bidder: ${this.highestBidder.name} `; + buf += Utils.html`Tiers: ${this.nominatedPlayer.tiers?.length ? `${this.nominatedPlayer.tiers.join(', ')}` : 'N/A'}`; + buf += `
`; + this.room.add(`|uhtml|bid-${this.nominatedPlayer.id}|${buf}`).update(); + } + + sendTimer(change = false, nom = false) { + let buf = `
`; + buf += ` ${Chat.toDurationString((nom ? this.nomTimeRemaining : this.bidTimeRemaining) * 1000, {hhmmss: true}).slice(1)}`; + buf += `
`; + this.room.add(`|uhtml${change ? 'change' : ''}|timer|${buf}`).update(); + } + + setMinBid(amount: number) { + if (this.state !== 'setup') { + throw new Chat.ErrorMessage(`The minimum bid cannot be changed after the auction has started.`); + } + if (amount > 500000) throw new Chat.ErrorMessage(`The minimum bid must not exceed 500,000.`); + this.minBid = amount; + } + + setMinPlayers(amount: number) { + if (this.state !== 'setup') { + throw new Chat.ErrorMessage(`The minimum number of players cannot be changed after the auction has started.`); + } + if (!amount || amount > 30) { + throw new Chat.ErrorMessage(`The minimum number of players must be between 1 and 30.`); + } + this.minPlayers = amount; + } + + setNomTimeLimit(seconds: number) { + if (this.state !== 'setup') { + throw new Chat.ErrorMessage(`The nomination time limit cannot be changed after the auction has started.`); + } + if (isNaN(seconds) || (seconds && (seconds < 7 || seconds > 300))) { + throw new Chat.ErrorMessage(`The nomination time limit must be between 7 and 300 seconds.`); + } + this.nomTimeLimit = this.nomTimeRemaining = seconds; + } + + setBidTimeLimit(seconds: number) { + if (this.state !== 'setup') { + throw new Chat.ErrorMessage(`The bid time limit cannot be changed after the auction has started.`); + } + if (!seconds || seconds < 7 || seconds > 120) { + throw new Chat.ErrorMessage(`The bid time limit must be between 7 and 120 seconds.`); + } + this.bidTimeLimit = this.bidTimeRemaining = seconds; + } + + setType(auctionType: string) { + if (this.state !== 'setup') { + throw new Chat.ErrorMessage(`The auction type cannot be changed after the auction has started.`); + } + if (!['auction', 'blind', 'snake'].includes(toID(auctionType))) { + throw new Chat.ErrorMessage(`Invalid auction type "${auctionType}". Valid types are "auction", "blind", and "snake".`); + } + this.type = toID(auctionType) as 'auction' | 'blind' | 'snake'; + this.nomTimeLimit = this.nomTimeRemaining = this.type === 'snake' ? 60 : 0; + this.bidTimeLimit = this.bidTimeRemaining = this.type === 'blind' ? 30 : 10; + } + + getUndraftedPlayers() { + return [...this.auctionPlayers.values()].filter(p => !p.team); + } + + getDraftedPlayers() { + return [...this.auctionPlayers.values()].filter(p => p.team); + } + + importPlayers(data: string) { + if (this.state !== 'setup') { + throw new Chat.ErrorMessage(`Player lists cannot be imported after the auction has started.`); + } + const rows = data.replace('\r', '').split('\n'); + const tierNames = rows.shift()!.split('\t').slice(1); + const playerList = new Map(); + for (const row of rows) { + const tiers = []; + const [name, ...tierData] = row.split('\t'); + for (let i = 0; i < tierData.length; i++) { + if (['y', 'Y', '\u2713', '\u2714'].includes(tierData[i].trim())) { + if (!tierNames[i]) throw new Chat.ErrorMessage(`Invalid tier data found in the pastebin.`); + if (tierNames[i].length > 30) throw new Chat.ErrorMessage(`Tier names must be 30 characters or less.`); + tiers.push(tierNames[i]); + } + } + if (name.length > 25) throw new Chat.ErrorMessage(`Player names must be 25 characters or less.`); + const player: Player = { + id: toID(name), + name, + price: 0, + }; + if (tiers.length) player.tiers = tiers; + playerList.set(player.id, player); + } + this.auctionPlayers = playerList; + } + + addAuctionPlayer(name: string, tiers?: string[]) { + if (this.state === 'bid') throw new Chat.ErrorMessage(`Players cannot be added during a nomination.`); + if (name.length > 25) throw new Chat.ErrorMessage(`Player names must be 25 characters or less.`); + const player: Player = { + id: toID(name), + name, + price: 0, + }; + if (tiers?.length) { + if (tiers.some(tier => tier.length > 30)) { + throw new Chat.ErrorMessage(`Tier names must be 30 characters or less.`); + } + player.tiers = tiers; + } + this.auctionPlayers.set(player.id, player); + return player; + } + + removeAuctionPlayer(name: string) { + if (this.state === 'bid') throw new Chat.ErrorMessage(`Players cannot be removed during a nomination.`); + const player = this.auctionPlayers.get(toID(name)); + if (!player) throw new Chat.ErrorMessage(`Player "${name}" not found.`); + player.team?.removePlayer(player); + this.auctionPlayers.delete(player.id); + if (this.state !== 'setup' && !this.getUndraftedPlayers().length) { + this.end('The auction has ended because there are no players remaining in the draft pool.'); + } + return player; + } + + assignPlayer(name: string, teamName?: string) { + if (this.state === 'bid') throw new Chat.ErrorMessage(`Players cannot be assigned during a nomination.`); + const player = this.auctionPlayers.get(toID(name)); + if (!player) throw new Chat.ErrorMessage(`Player "${name}" not found.`); + if (teamName) { + const team = this.teams.get(toID(teamName)); + if (!team) throw new Chat.ErrorMessage(`Team "${teamName}" not found.`); + team.addPlayer(player); + if (!this.getUndraftedPlayers().length) { + return this.end('The auction has ended because there are no players remaining in the draft pool.'); + } + } else { + player.team?.removePlayer(player); + } + } + + addTeam(name: string) { + if (this.state !== 'setup') throw new Chat.ErrorMessage(`Teams cannot be added after the auction has started.`); + if (name.length > 40) throw new Chat.ErrorMessage(`Team names must be 40 characters or less.`); + const team = new Team(name, this); + this.teams.set(team.id, team); + const teams = [...this.teams.values()]; + this.queue = teams.concat(teams.slice().reverse()); + return team; + } + + removeTeam(name: string) { + if (this.state !== 'setup') throw new Chat.ErrorMessage(`Teams cannot be removed after the auction has started.`); + const team = this.teams.get(toID(name)); + if (!team) throw new Chat.ErrorMessage(`Team "${name}" not found.`); + this.queue = this.queue.filter(t => t !== team); + this.teams.delete(team.id); + return team; + } + + suspendTeam(name: string) { + if (this.state === 'bid') throw new Chat.ErrorMessage(`Teams cannot be suspended during a nomination.`); + const team = this.teams.get(toID(name)); + if (!team) throw new Chat.ErrorMessage(`Team "${name}" not found.`); + if (team.suspended) throw new Chat.ErrorMessage(`Team ${name} is already suspended.`); + if (this.nominatingTeam === team) throw new Chat.ErrorMessage(`The nominating team cannot be suspended.`); + team.suspended = true; + return team; + } + + unsuspendTeam(name: string) { + if (this.state === 'bid') throw new Chat.ErrorMessage(`Teams cannot be unsuspended during a nomination.`); + const team = this.teams.get(toID(name)); + if (!team) throw new Chat.ErrorMessage(`Team "${name}" not found.`); + if (!team.suspended) throw new Chat.ErrorMessage(`Team ${name} is not suspended.`); + team.suspended = false; + return team; + } + + addManagers(teamName: string, users: string[]) { + const team = this.teams.get(toID(teamName)); + if (!team) throw new Chat.ErrorMessage(`Team "${teamName}" not found.`); + const problemUsers = users.filter(user => !toID(user) || toID(user).length > 18); + if (problemUsers.length) { + throw new Chat.ErrorMessage(`Invalid usernames: ${problemUsers.join(', ')}`); + } + for (const id of users.map(toID)) { + const manager = this.managers.get(id); + if (!manager) { + this.managers.set(id, {id, team}); + } else { + manager.team = team; + } + } + return team; + } + + removeManagers(users: string[]) { + const problemUsers = users.filter(user => !this.managers.has(toID(user))); + if (problemUsers.length) { + throw new Chat.ErrorMessage(`Invalid managers: ${problemUsers.join(', ')}`); + } + for (const id of users.map(toID)) { + this.managers.delete(id); + } + } + + addCreditsToTeam(teamName: string, amount: number) { + if (this.type === 'snake') throw new Chat.ErrorMessage(`Snake draft does not support credits.`); + if (this.state === 'bid') throw new Chat.ErrorMessage(`Credits cannot be changed during a nomination.`); + const team = this.teams.get(toID(teamName)); + if (!team) throw new Chat.ErrorMessage(`Team "${teamName}" not found.`); + const newCredits = team.credits + amount; + if (newCredits <= 0 || newCredits > 10000000) { + throw new Chat.ErrorMessage(`A team must have between 0 and 10,000,000 credits.`); + } + if (team.maxBid(newCredits) < this.minBid) { + throw new Chat.ErrorMessage(`A team must have enough credits to draft the minimum amount of players.`); + } + team.credits = newCredits; + return team; + } + + start() { + if (this.state !== 'setup') throw new Chat.ErrorMessage(`The auction has already started.`); + if (this.teams.size < 2) throw new Chat.ErrorMessage(`The auction needs at least 2 teams to start.`); + const problemTeams = [...this.teams.values()].filter(t => t.maxBid() < this.minBid).map(t => t.name); + if (problemTeams.length) { + throw new Chat.ErrorMessage(`The following teams do not have enough credits to draft the minimum amount of players: ${problemTeams.join(', ')}`); + } + this.next(); + } + + reset() { + const teams = [...this.teams.values()]; + for (const team of teams) { + team.credits = this.startingCredits; + team.suspended = false; + for (const player of team.players) { + delete player.team; + player.price = 0; + } + team.players = []; + } + this.lastQueue = null; + this.queue = teams.concat(teams.slice().reverse()); + this.clearNomTimer(); + this.clearBidTimer(); + this.state = 'setup'; + this.sendHTMLBox(this.generateAuctionTable()); + } + + next() { + this.state = 'nom'; + if (!this.queue.filter(team => !team.isSuspended()).length) { + return this.end('The auction has ended because there are no teams remaining that can draft players.'); + } + if (!this.getUndraftedPlayers().length) { + return this.end('The auction has ended because there are no players remaining in the draft pool.'); + } + do { + this.nominatingTeam = this.queue.shift()!; + this.queue.push(this.nominatingTeam); + } while (this.nominatingTeam.isSuspended()); + this.sendHTMLBox(this.generateAuctionTable()); + this.sendMessage(`/html It is now ${Utils.escapeHTML(this.nominatingTeam.name)}'s turn to nominate a player. Managers: ${this.nominatingTeam.getManagers().map(m => `${Utils.escapeHTML(m)}`).join(' ')}`); + this.startNomTimer(); + } + + nominate(user: User, target: string) { + if (this.state !== 'nom') throw new Chat.ErrorMessage(`You cannot nominate players right now.`); + const manager = this.managers.get(user.id); + if (!manager || manager.team !== this.nominatingTeam) this.checkOwner(user); + + // For undo + this.lastQueue = this.queue.slice(); + this.lastQueue.unshift(this.lastQueue.pop()!); + + const player = this.auctionPlayers.get(toID(target)); + if (!player) throw new Chat.ErrorMessage(`${target} is not a valid player.`); + if (player.team) throw new Chat.ErrorMessage(`${player.name} has already been drafted.`); + this.clearNomTimer(); + this.nominatedPlayer = player; + if (this.type === 'snake') { + this.sendMessage(Utils.html`/html ${this.nominatingTeam.name} drafted ${this.nominatedPlayer.name}!`); + this.nominatingTeam.addPlayer(this.nominatedPlayer); + this.next(); + } else { + this.state = 'bid'; + this.highestBid = this.minBid; + this.highestBidder = this.nominatingTeam; + + const notifyMsg = Utils.html`|notify|${this.room.title} Auction|${player.name} has been nominated!`; + for (const currManager of this.managers.values()) { + if (currManager.team === this.nominatingTeam) continue; + Users.getExact(currManager.id)?.sendTo(this.room, notifyMsg); + } + + this.sendMessage(Utils.html`/html ${user.name} from team ${this.nominatingTeam.name} has nominated ${player.name} for auction. Use /bid or type a number to place a bid!`); + this.sendBidInfo(); + this.startBidTimer(); + } + } + + bid(user: User, bid: number) { + if (this.state !== 'bid') throw new Chat.ErrorMessage(`There are no players up for auction right now.`); + const team = this.managers.get(user.id)?.team; + if (!team) throw new Chat.ErrorMessage(`Only managers can bid on players.`); + if (team.isSuspended()) throw new Chat.ErrorMessage(`Your team is suspended and cannot place bids.`); + + if (bid > team.maxBid()) throw new Chat.ErrorMessage(`Your team cannot afford to bid that much.`); + + if (this.type === 'blind') { + if (this.bidsPlaced.has(team)) throw new Chat.ErrorMessage(`Your team has already placed a bid.`); + if (bid <= this.minBid) throw new Chat.ErrorMessage(`Your bid must be higher than the minimum bid.`); + + const msg = `|c:|${Math.floor(Date.now() / 1000)}|&|/html Your team placed a bid of ${bid} on ${Utils.escapeHTML(this.nominatedPlayer.name)}.`; + for (const manager of this.managers.values()) { + if (manager.team !== team) continue; + Users.getExact(manager.id)?.sendTo(this.room, msg); + } + + if (bid > this.highestBid) { + this.highestBid = bid; + this.highestBidder = team; + } + this.bidsPlaced.set(team, bid); + if (this.bidsPlaced.size === this.teams.size) { + this.finishCurrentNom(); + } + } else { + if (bid <= this.highestBid) throw new Chat.ErrorMessage(`Your bid must be higher than the current bid.`); + this.highestBid = bid; + this.highestBidder = team; + this.sendMessage(Utils.html`/html ${user.name}[${team.name}]: ${bid}`); + this.sendBidInfo(); + this.startBidTimer(); + } + } + + onChatMessage(message: string, user: User) { + if (this.state === 'bid' && Number(message.replace(',', '.'))) { + this.bid(user, parseCredits(message)); + return ''; + } + } + + skipNom() { + if (this.state !== 'nom') throw new Chat.ErrorMessage(`Nominations cannot be skipped right now.`); + this.nominatedPlayer = null!; + this.sendMessage(`**${this.nominatingTeam.name}**'s nomination turn has been skipped!`); + this.clearNomTimer(); + this.next(); + } + + finishCurrentNom() { + if (this.type === 'blind') { + let buf = `
`; + if (!this.bidsPlaced.has(this.nominatingTeam)) { + buf += Utils.html``; + } + for (const [team, bid] of this.bidsPlaced) { + buf += Utils.html``; + } + buf += `
TeamBid
${this.nominatingTeam.name}${this.minBid}
${team.name}${bid}
`; + this.sendHTMLBox(buf); + this.bidsPlaced.clear(); + } + this.sendMessage(Utils.html`/html ${this.highestBidder.name} bought ${this.nominatedPlayer.name} for ${this.highestBid} credits!`); + this.highestBidder.addPlayer(this.nominatedPlayer, this.highestBid); + this.clearBidTimer(); + this.next(); + } + + undoLastNom() { + if (this.state !== 'nom') throw new Chat.ErrorMessage(`Nominations cannot be undone right now.`); + if (!this.lastQueue) throw new Chat.ErrorMessage(`Only one nomination can be undone at a time.`); + this.queue = this.lastQueue; + this.lastQueue = null; + if (this.nominatedPlayer) { + this.highestBidder.removePlayer(this.nominatedPlayer); + this.highestBidder.credits += this.highestBid; + } + this.next(); + } + + clearNomTimer() { + clearInterval(this.nomTimer); + this.nomTimeRemaining = this.nomTimeLimit; + this.room.add('|uhtmlchange|timer|'); + } + + startNomTimer() { + if (!this.nomTimeLimit) return; + this.clearNomTimer(); + this.sendTimer(false, true); + this.nomTimer = setInterval(() => this.pokeNomTimer(), 1000); + } + + clearBidTimer() { + clearInterval(this.bidTimer); + this.bidTimeRemaining = this.bidTimeLimit; + this.room.add('|uhtmlchange|timer|'); + } + + startBidTimer() { + if (!this.bidTimeLimit) return; + this.clearBidTimer(); + this.sendTimer(); + this.bidTimer = setInterval(() => this.pokeBidTimer(), 1000); + } + + pokeNomTimer() { + this.nomTimeRemaining--; + if (!this.nomTimeRemaining) { + this.skipNom(); + } else { + this.sendTimer(true, true); + if (this.nomTimeRemaining % 30 === 0 || [20, 10, 5].includes(this.nomTimeRemaining)) { + this.sendMessage(`/html ${this.nomTimeRemaining} seconds left!`); + } + } + } + + pokeBidTimer() { + this.bidTimeRemaining--; + if (!this.bidTimeRemaining) { + this.finishCurrentNom(); + } else { + this.sendTimer(true); + if (this.bidTimeRemaining % 30 === 0 || [20, 10, 5].includes(this.bidTimeRemaining)) { + this.sendMessage(`/html ${this.bidTimeRemaining} seconds left!`); + } + } + } + + end(message?: string) { + this.sendHTMLBox(this.generateAuctionTable(true)); + this.sendHTMLBox(this.generatePriceList()); + if (message) this.sendMessage(message); + this.destroy(); + } + + destroy() { + this.clearNomTimer(); + this.clearBidTimer(); + super.destroy(); + } +} + +export const commands: Chat.ChatCommands = { + auction: { + create(target, room, user) { + room = this.requireRoom(); + this.checkCan('minigame', null, room); + if (room.game) return this.errorReply(`There is already a game of ${room.game.title} in progress in this room.`); + if (room.settings.auctionDisabled) return this.errorReply('Auctions are currently disabled in this room.'); + + let startingCredits; + if (target) { + startingCredits = parseCredits(target); + if (startingCredits < 10000 || startingCredits > 10000000) { + return this.errorReply(`Starting credits must be between 10,000 and 10,000,000.`); + } + } + const auction = new Auction(room, startingCredits); + auction.addOwners([user.id]); + room.game = auction; + this.addModAction(`An auction was created by ${user.name}.`); + this.modlog(`AUCTION CREATE`); + }, + createhelp: [ + `/auction create [startingcredits] - Creates an auction. Requires: % @ # ~`, + ], + start(target, room, user) { + const auction = this.requireGame(Auction); + auction.checkOwner(user); + + auction.start(); + this.addModAction(`The auction was started by ${user.name}.`); + this.modlog(`AUCTION START`); + }, + reset(target, room, user) { + const auction = this.requireGame(Auction); + auction.checkOwner(user); + + auction.reset(); + this.addModAction(`The auction was reset by ${user.name}.`); + this.modlog(`AUCTION RESET`); + }, + delete: 'end', + stop: 'end', + end(target, room, user) { + const auction = this.requireGame(Auction); + auction.checkOwner(user); + + auction.end(); + this.addModAction(`The auction was ended by ${user.name}.`); + this.modlog('AUCTION END'); + }, + info: 'display', + display(target, room, user) { + this.runBroadcast(); + const auction = this.requireGame(Auction); + this.sendReplyBox(auction.generateAuctionTable()); + }, + pricelist(target, room, user) { + this.runBroadcast(); + const auction = this.requireGame(Auction); + this.sendReplyBox(auction.generatePriceList()); + }, + minbid(target, room, user) { + const auction = this.requireGame(Auction); + auction.checkOwner(user); + + if (!target) return this.parse('/help auction minbid'); + const amount = parseCredits(target); + auction.setMinBid(amount); + this.addModAction(`${user.name} set the minimum bid to ${amount}.`); + this.modlog('AUCTION MINBID', null, `${amount}`); + }, + minbidhelp: [ + `/auction minbid [amount] - Sets the minimum bid. Requires: # ~ auction owner`, + ], + minplayers(target, room, user) { + const auction = this.requireGame(Auction); + auction.checkOwner(user); + + if (!target) return this.parse('/help auction minplayers'); + const amount = parseInt(target); + auction.setMinPlayers(amount); + this.addModAction(`${user.name} set the minimum number of players to ${amount}.`); + }, + minplayershelp: [ + `/auction minplayers [amount] - Sets the minimum number of players. Requires: # ~ auction owner`, + ], + nomtimer(target, room, user) { + const auction = this.requireGame(Auction); + auction.checkOwner(user); + + if (!target) return this.parse('/help auction nomtimer'); + const seconds = this.meansNo(target) ? 0 : parseInt(target); + auction.setNomTimeLimit(seconds); + this.addModAction(`${user.name} set the nomination timer to ${seconds} seconds.`); + }, + nomtimerhelp: [ + `/auction nomtimer [seconds/off] - Sets the nomination timer to [seconds] seconds or disables it. Requires: # ~ auction owner`, + ], + bidtimer(target, room, user) { + const auction = this.requireGame(Auction); + auction.checkOwner(user); + + if (!target) return this.parse('/help auction settimer'); + const seconds = parseInt(target); + auction.setBidTimeLimit(seconds); + this.addModAction(`${user.name} set the bid timer to ${seconds} seconds.`); + }, + bidtimerhelp: [ + `/auction timer [seconds] - Sets the bid timer to [seconds] seconds. Requires: # ~ auction owner`, + ], + settype(target, room, user) { + const auction = this.requireGame(Auction); + auction.checkOwner(user); + + if (!target) return this.parse('/help auction settype'); + auction.setType(target); + this.addModAction(`${user.name} set the auction type to ${toID(target)}.`); + }, + settypehelp: [ + `/auction settype [auction|blind|snake] - Sets the auction type. Requires: # ~ auction owner`, + ], + addowner: 'addowners', + addowners(target, room, user) { + const auction = this.requireGame(Auction); + auction.checkOwner(user); + + const owners = target.split(',').map(x => x.trim()); + if (!owners.length) return this.parse('/help auction addowners'); + auction.addOwners(owners); + this.addModAction(`${user.name} added ${Chat.toListString(owners.map(o => Users.getExact(o)!.name))} as auction owner${Chat.plural(owners.length)}.`); + }, + addownershelp: [ + `/auction addowners [user1], [user2], ... - Adds users as auction owners. Requires: # ~ auction owner`, + ], + removeowner: 'removeowners', + removeowners(target, room, user) { + const auction = this.requireGame(Auction); + auction.checkOwner(user); + + const owners = target.split(',').map(x => x.trim()); + if (!owners.length) return this.parse('/help auction removeowners'); + auction.removeOwners(owners); + this.addModAction(`${user.name} removed ${Chat.toListString(owners.map(o => Users.getExact(o)?.name || o))} as auction owner${Chat.plural(owners.length)}.`); + }, + removeownershelp: [ + `/auction removeowners [user1], [user2], ... - Removes users as auction owners. Requires: # ~ auction owner`, + ], + async importplayers(target, room, user) { + const auction = this.requireGame(Auction); + auction.checkOwner(user); + + if (!target) return this.parse('/help auction importplayers'); + if (!/^https?:\/\/pastebin\.com\/[a-zA-Z0-9]+$/.test(target)) { + return this.errorReply('Invalid pastebin URL.'); + } + let data = ''; + try { + data = await Net(`https://pastebin.com/raw/${target.split('/').pop()}`).get(); + } catch {} + if (!data) return this.errorReply('Error fetching data from pastebin.'); + + auction.importPlayers(data); + this.addModAction(`${user.name} imported the player list from ${target}.`); + }, + importplayershelp: [ + `/auction importplayers [pastebin url] - Imports a list of players from a pastebin. Requires: # ~ auction owner`, + `The pastebin should be a list of tab-separated values with the first row containing tier names and subsequent rows containing the player names and a Y in the column corresponding to the tier.`, + `See https://pastebin.com/jPTbJBva for an example.`, + ], + addplayer(target, room, user) { + const auction = this.requireGame(Auction); + auction.checkOwner(user); + + const [name, ...tiers] = target.split(',').map(x => x.trim()); + if (!name) return this.parse('/help auction addplayer'); + const player = auction.addAuctionPlayer(name, tiers); + this.addModAction(`${user.name} added player ${player.name} to the auction.`); + }, + addplayerhelp: [ + `/auction addplayer [name], [tier1], [tier2], ... - Adds a player to the auction. Requires: # ~ auction owner`, + ], + removeplayer(target, room, user) { + const auction = this.requireGame(Auction); + auction.checkOwner(user); + + if (!target) return this.parse('/help auction removeplayer'); + const player = auction.removeAuctionPlayer(target); + this.addModAction(`${user.name} removed player ${player.name} from the auction.`); + }, + removeplayerhelp: [ + `/auction removeplayer [name] - Removes a player from the auction. Requires: # ~ auction owner`, + ], + assignplayer(target, room, user) { + const auction = this.requireGame(Auction); + auction.checkOwner(user); + + const [player, team] = target.split(',').map(x => x.trim()); + if (!player) return this.parse('/help auction assignplayer'); + if (team) { + auction.assignPlayer(player, team); + this.addModAction(`${user.name} assigned player ${player} to team ${team}.`); + } else { + auction.assignPlayer(player); + this.sendReply(`${user.name} returned player ${player} to the draft pool.`); + } + }, + assignplayerhelp: [ + `/auction assignplayer [player], [team] - Assigns a player to a team. If team is blank, returns player to draft pool. Requires: # ~ auction owner`, + ], + addteam(target, room, user) { + const auction = this.requireGame(Auction); + auction.checkOwner(user); + + const [name, ...managerNames] = target.split(',').map(x => x.trim()); + if (!name) return this.parse('/help auction addteam'); + const team = auction.addTeam(name); + this.addModAction(`${user.name} added team ${team.name} to the auction.`); + auction.addManagers(team.name, managerNames); + }, + addteamhelp: [ + `/auction addteam [name], [manager1], [manager2], ... - Adds a team to the auction. Requires: # ~ auction owner`, + ], + removeteam(target, room, user) { + const auction = this.requireGame(Auction); + auction.checkOwner(user); + + if (!target) return this.parse('/help auction removeteam'); + const team = auction.removeTeam(target); + this.addModAction(`${user.name} removed team ${team.name} from the auction.`); + }, + removeteamhelp: [ + `/auction removeteam [team] - Removes a team from the auction. Requires: # ~ auction owner`, + ], + suspendteam(target, room, user) { + const auction = this.requireGame(Auction); + auction.checkOwner(user); + + if (!target) return this.parse('/help auction suspendteam'); + const team = auction.suspendTeam(target); + this.addModAction(`${user.name} suspended team ${team.name}.`); + }, + suspendteamhelp: [ + `/auction suspendteam [team] - Suspends a team from the auction. Requires: # ~ auction owner`, + `Suspended teams have their nomination turns skipped and are not allowed to place bids.`, + ], + unsuspendteam(target, room, user) { + const auction = this.requireGame(Auction); + auction.checkOwner(user); + + if (!target) return this.parse('/help auction unsuspendteam'); + const team = auction.unsuspendTeam(target); + this.addModAction(`${user.name} unsuspended team ${team.name}.`); + }, + unsuspendteamhelp: [ + `/auction unsuspendteam [team] - Unsuspends a team from the auction. Requires: # ~ auction owner`, + ], + addmanager: 'addmanagers', + addmanagers(target, room, user) { + const auction = this.requireGame(Auction); + auction.checkOwner(user); + + const [teamName, ...managerNames] = target.split(',').map(x => x.trim()); + if (!teamName || !managerNames.length) return this.parse('/help auction addmanagers'); + const team = auction.addManagers(teamName, managerNames); + const managers = managerNames.map(m => Users.getExact(m)?.name || toID(m)); + this.addModAction(`${user.name} added ${Chat.toListString(managers)} as manager${Chat.plural(managers.length)} for team ${team.name}.`); + }, + addmanagershelp: [ + `/auction addmanagers [team], [user1], [user2], ... - Adds users as managers to a team. Requires: # ~ auction owner`, + ], + removemanager: 'removemanagers', + removemanagers(target, room, user) { + const auction = this.requireGame(Auction); + auction.checkOwner(user); + + if (!target) return this.parse('/help auction removemanagers'); + const managerNames = target.split(',').map(x => x.trim()); + auction.removeManagers(managerNames); + const managers = managerNames.map(m => Users.getExact(m)?.name || toID(m)); + this.addModAction(`${user.name} removed ${Chat.toListString(managers)} as manager${Chat.plural(managers.length)}.`); + }, + removemanagershelp: [ + `/auction removemanagers [user1], [user2], ... - Removes users as managers. Requires: # ~ auction owner`, + ], + addcredits(target, room, user) { + const auction = this.requireGame(Auction); + auction.checkOwner(user); + + const [teamName, amount] = target.split(',').map(x => x.trim()); + if (!teamName || !amount) return this.parse('/help auction addcredits'); + const credits = parseCredits(amount); + const team = auction.addCreditsToTeam(teamName, credits); + this.addModAction(`${user.name} ${credits < 0 ? 'removed' : 'added'} ${Math.abs(credits)} credits ${credits < 0 ? 'from' : 'to'} team ${team.name}.`); + }, + addcreditshelp: [ + `/auction addcredits [team], [amount] - Adds credits to a team. Requires: # ~ auction owner`, + ], + nom: 'nominate', + nominate(target, room, user) { + const auction = this.requireGame(Auction); + if (!target) return this.parse('/help auction nominate'); + auction.nominate(user, target); + }, + nominatehelp: [ + `/auction nominate OR /nom [player] - Nominates a player for auction.`, + ], + bid(target, room, user) { + const auction = this.requireGame(Auction); + if (!target) return this.parse('/help auction bid'); + auction.bid(user, parseCredits(target)); + }, + bidhelp: [ + `/auction bid OR /bid [amount] - Bids on a player for the specified amount. If the amount is less than 500, it will be multiplied by 1000.`, + `During the bidding phase, all numbers that are sent in the chat will be treated as bids.`, + ], + skip: 'skipnom', + skipnom(target, room, user) { + const auction = this.requireGame(Auction); + auction.checkOwner(user); + + auction.skipNom(); + this.addModAction(`${user.name} skipped the previous nomination.`); + }, + undo(target, room, user) { + const auction = this.requireGame(Auction); + auction.checkOwner(user); + + auction.undoLastNom(); + this.addModAction(`${user.name} undid the last nomination.`); + }, + disable(target, room) { + room = this.requireRoom(); + this.checkCan('gamemanagement', null, room); + if (room.settings.auctionDisabled) { + return this.errorReply('Auctions are already disabled.'); + } + room.settings.auctionDisabled = true; + room.saveSettings(); + this.sendReply('Auctions have been disabled for this room.'); + }, + enable(target, room) { + room = this.requireRoom(); + this.checkCan('gamemanagement', null, room); + if (!room.settings.auctionDisabled) { + return this.errorReply('Auctions are already enabled.'); + } + delete room.settings.auctionDisabled; + room.saveSettings(); + this.sendReply('Auctions have been enabled for this room.'); + }, + ongoing: 'running', + running() { + if (!this.runBroadcast()) return; + const runningAuctions = [...Rooms.rooms.values()].filter(r => r.getGame(Auction)).map(r => r.title); + this.sendReply(`Running auctions: ${runningAuctions.join(', ') || 'None'}`); + }, + '': 'help', + help() { + this.parse('/help auction'); + }, + }, + auctionhelp() { + if (!this.runBroadcast()) return; + this.sendReplyBox( + `Auction commands
` + + `- create [startingcredits]: Creates an auction.
` + + `- start: Starts the auction.
` + + `- reset: Resets the auction.
` + + `- end: Ends the auction.
` + + `- running: Shows a list of rooms with running auctions.
` + + `- display: Displays the current state of the auction.
` + + `- pricelist: Displays the current prices of players by team.
` + + `- nom [player]: Nominates a player for auction.
` + + `- bid [amount]: Bids on a player for the specified amount. If the amount is less than 500, it will be multiplied by 1000.
` + + `You may use /bid and /nom directly without the /auction prefix.
` + + `During the bidding phase, all numbers that are sent in the chat will be treated as bids.

` + + `
Configuration Commands` + + `- minbid [amount]: Sets the minimum bid.
` + + `- minplayers [amount]: Sets the minimum number of players.
` + + `- nomtimer [seconds]: Sets the nomination timer to [seconds] seconds.
` + + `- bidtimer [seconds]: Sets the bid timer to [seconds] seconds.
` + + `- blindmode [on/off]: Enables or disables blind mode.
` + + `- addowners [user1], [user2], ...: Adds users as auction owners.
` + + `- removeowners [user1], [user2], ...: Removes users as auction owners.
` + + `- importplayers [pastebin url]: Imports a list of players from a pastebin.
` + + `- addplayer [name], [tier1], [tier2], ...: Adds a player to the auction.
` + + `- removeplayer [name]: Removes a player from the auction.
` + + `- assignplayer [player], [team]: Assigns a player to a team. If team is blank, returns player to draft pool.
` + + `- addteam [name], [manager1], [manager2], ...: Adds a team to the auction.
` + + `- removeteam [name]: Removes the given team from the auction.
` + + `- suspendteam [name]: Suspends the given team from the auction.
` + + `- unsuspendteam [name]: Unsuspends the given team from the auction.
` + + `- addmanagers [team], [user1], [user2], ...: Adds users as managers to a team.
` + + `- removemanagers [user1], [user2], ...: Removes users as managers..
` + + `- addcredits [team], [amount]: Adds credits to a team.
` + + `- skipnom: Skips the current nomination.
` + + `- undo: Undoes the last nomination.
` + + `- [enable/disable]: Enables or disables auctions from being started in a room.
` + + `
` + ); + }, + nom(target) { + this.parse(`/auction nominate ${target}`); + }, + bid(target) { + this.parse(`/auction bid ${target}`); + }, + overpay() { + this.requireGame(Auction); + this.checkChat(); + return '/announce OVERPAY!'; + }, +}; + +export const roomSettings: Chat.SettingsHandler = room => ({ + label: "Auction", + permission: 'editroom', + options: [ + [`disabled`, room.settings.auctionDisabled || 'auction disable'], + [`enabled`, !room.settings.auctionDisabled || 'auction enable'], + ], +}); diff --git a/server/chat-plugins/battlesearch.ts b/server/chat-plugins/battlesearch.ts index a22216fbd036..21b96dbd3e2d 100644 --- a/server/chat-plugins/battlesearch.ts +++ b/server/chat-plugins/battlesearch.ts @@ -29,11 +29,11 @@ interface BattleSearchResults { const MAX_BATTLESEARCH_PROCESSES = 1; export async function runBattleSearch(userids: ID[], month: string, tierid: ID, turnLimit?: number) { const useRipgrep = await checkRipgrepAvailability(); - const pathString = `logs/${month}/${tierid}/`; + const pathString = `${month}/${tierid}/`; const results: {[k: string]: BattleSearchResults} = {}; let files = []; try { - files = await FS(pathString).readdir(); + files = await Monitor.logPath(pathString).readdir(); } catch (err: any) { if (err.code === 'ENOENT') { return results; @@ -41,7 +41,7 @@ export async function runBattleSearch(userids: ID[], month: string, tierid: ID, throw err; } const [userid] = userids; - files = files.filter(item => item.startsWith(month)).map(item => `logs/${month}/${tierid}/${item}`); + files = files.filter(item => item.startsWith(month)).map(item => Monitor.logPath(`${month}/${tierid}/${item}`).path); if (useRipgrep) { // Matches non-word (including _ which counts as a word) characters between letters/numbers @@ -276,7 +276,7 @@ async function rustBattleSearch( const day = date.getDate().toString().padStart(2, '0'); directories.push( - FS(path.join('logs', `${year}-${month}`, format, `${year}-${month}-${day}`)).path + Monitor.logPath(path.join(`${year}-${month}`, format, `${year}-${month}-${day}`)).path ); } @@ -340,7 +340,7 @@ export const pages: Chat.PageTable = { buf += `

`; const months = Utils.sortBy( - (await FS('logs/').readdir()).filter(f => f.length === 7 && f.includes('-')), + (await Monitor.logPath('/').readdir()).filter(f => f.length === 7 && f.includes('-')), name => ({reverse: name}) ); if (!month) { @@ -357,7 +357,7 @@ export const pages: Chat.PageTable = { } const tierid = toID(formatid); - const tiers = Utils.sortBy(await FS(`logs/${month}/`).readdir(), tier => [ + const tiers = Utils.sortBy(await Monitor.logPath(`${month}/`).readdir(), tier => [ // First sort by gen with the latest being first tier.startsWith('gen') ? -parseInt(tier.charAt(3)) : -6, // Then sort alphabetically @@ -440,11 +440,11 @@ export const commands: Chat.ChatCommands = { this.runBroadcast(); return this.sendReply( '/battlesearch [args] - Searches rated battle history for the provided [args] and returns information on battles between the userids given.\n' + - `If a number is provided in the [args], it is assumed to be a turn limit, else they're assumed to be userids. Requires &` + `If a number is provided in the [args], it is assumed to be a turn limit, else they're assumed to be userids. Requires ~` ); }, rustbattlesearchhelp: [ - `/battlesearch , , - Searches for battles played by in the past days. Requires: &`, + `/battlesearch , , - Searches for battles played by in the past days. Requires: ~`, ], }; diff --git a/server/chat-plugins/calculator.ts b/server/chat-plugins/calculator.ts index 727fc970c48b..0dff3198b78a 100644 --- a/server/chat-plugins/calculator.ts +++ b/server/chat-plugins/calculator.ts @@ -185,10 +185,15 @@ export const commands: Chat.ChatCommands = { if (baseResult === expression) baseResult = ''; } let resultStr = ''; + const resultTruncated = parseFloat(result.toPrecision(15)); + let resultDisplay = resultTruncated.toString(); + if (resultTruncated > 10 ** 15) { + resultDisplay = resultTruncated.toExponential(); + } if (baseResult) { - resultStr = `${baseResult} = ${result}`; + resultStr = `${baseResult} = ${resultDisplay}`; } else { - resultStr = `${result}`; + resultStr = `${resultDisplay}`; } this.sendReplyBox(`${expression}
= ${resultStr}`); } catch (e: any) { diff --git a/server/chat-plugins/cg-teams-leveling.ts b/server/chat-plugins/cg-teams-leveling.ts index 8071ae7fe37c..4abd55b6b282 100644 --- a/server/chat-plugins/cg-teams-leveling.ts +++ b/server/chat-plugins/cg-teams-leveling.ts @@ -35,30 +35,15 @@ async function updateStats(battle: RoomBattle, winner: ID) { if (!incrementWins || !incrementLosses) await dbSetupPromise; if (battle.rated < 1000 || toID(battle.format) !== 'gen9computergeneratedteams') return; - const p1 = Users.get(battle.p1.name); - const p2 = Users.get(battle.p2.name); - if (!p1 || !p2) return; - - const p1team = await battle.getTeam(p1); - const p2team = await battle.getTeam(p2); - if (!p1team || !p2team) return; - - let loserTeam, winnerTeam; - if (winner === p1.id) { - loserTeam = p2team; - winnerTeam = p1team; - } else { - loserTeam = p1team; - winnerTeam = p2team; - } - - for (const species of winnerTeam) { - await addPokemon?.run([toID(species.species), species.level]); - await incrementWins?.run([toID(species.species)]); - } - for (const species of loserTeam) { - await addPokemon?.run([toID(species.species), species.level]); - await incrementLosses?.run([toID(species.species)]); + for (const player of battle.players) { + const team = await battle.getPlayerTeam(player); + if (!team) return; + const increment = (player.id === winner ? incrementWins : incrementLosses); + + for (const species of team) { + await addPokemon?.run([toID(species.species), species.level]); + await increment?.run([toID(species.species)]); + } } } diff --git a/server/chat-plugins/chat-monitor.ts b/server/chat-plugins/chat-monitor.ts index 555d20478359..f74c20783487 100644 --- a/server/chat-plugins/chat-monitor.ts +++ b/server/chat-plugins/chat-monitor.ts @@ -13,7 +13,7 @@ const EVASION_DETECTION_SUBSTITUTIONS: {[k: string]: string[]} = { c: ["c", "ç", "ᑕ", "C", "ⓒ", "Ⓒ", "¢", "͏", "₵", "ċ", "Ċ", "ፈ", "ς", "ḉ", "Ḉ", "Ꮯ", "ƈ", "̾", "c", "C", "ᴄ", "ɔ", "🅒", "𝐜", "𝐂", "𝘤", "𝘊", "𝙘", "𝘾", "𝒸", "𝓬", "𝓒", "𝕔", "ℂ", "𝔠", "ℭ", "𝖈", "𝕮", "🄲", "🅲", "𝒞", "𝚌", "𝙲", "☾", "с"], d: ["d", "ᗪ", "D", "ⓓ", "Ⓓ", "∂", "Đ", "ď", "Ď", "Ꮄ", "Ḋ", "Ꭰ", "ɖ", "d", "D", "ᴅ", "🅓", "𝐝", "𝐃", "𝘥", "𝘋", "𝙙", "𝘿", "𝒹", "𝓭", "𝓓", "𝕕", "​", "𝔡", "𝖉", "𝕯", "🄳", "🅳", "𝒟", "ԃ", "𝚍", "𝙳", "◗", "ⅾ"], e: ["e", "3", "é", "ê", "E", "ⓔ", "Ⓔ", "є", "͏", "Ɇ", "ệ", "Ệ", "Ꮛ", "ε", "Σ", "ḕ", "Ḕ", "Ꭼ", "ɛ", "̾", "e", "E", "ᴇ", "ǝ", "🅔", "𝐞", "𝐄", "𝘦", "𝘌", "𝙚", "𝙀", "ℯ", "𝓮", "𝓔", "𝕖", "𝔻", "𝔢", "𝔇", "𝖊", "𝕰", "🄴", "🅴", "𝑒", "𝐸", "ҽ", "𝚎", "𝙴", "€", "е", "ё", "𝓮"], - f: ["f", "ᖴ", "F", "ⓕ", "Ⓕ", "₣", "ḟ", "Ḟ", "Ꭶ", "ғ", "ʄ", "f", "F", "ɟ", "🅕", "𝐟", "𝐅", "𝘧", "𝘍", "𝙛", "𝙁", "𝒻", "𝓯", "𝓕", "𝕗", "𝔼", "𝔣", "𝔈", "𝖋", "𝕱", "🄵", "🅵", "𝐹", "ϝ", "𝚏", "𝙵", "Ϝ", "f"], + f: ["f", "ᖴ", "F", "ⓕ", "Ⓕ", "₣", "ḟ", "Ḟ", "Ꭶ", "ғ", "ʄ", "f", "F", "ɟ", "🅕", "𝐟", "𝐅", "𝘧", "𝘍", "𝙛", "𝙁", "𝒻", "𝓯", "𝓕", "𝕗", "𝔼", "𝔣", "𝔈", "𝖋", "𝕱", "🄵", "🅵", "𝐹", "ϝ", "𝚏", "𝙵", "Ϝ", "f", "Ƒ"], g: ["g", "q", "6", "9", "G", "ⓖ", "Ⓖ", "͏", "₲", "ġ", "Ġ", "Ꮆ", "ϑ", "Ḡ", "ɢ", "̾", "g", "G", "ƃ", "🅖", "𝐠", "𝐆", "𝘨", "𝘎", "𝙜", "𝙂", "ℊ", "𝓰", "𝓖", "𝕘", "𝔽", "𝔤", "𝔉", "𝖌", "𝕲", "🄶", "🅶", "𝑔", "𝒢", "ɠ", "𝚐", "𝙶", "❡", "ց", "𝙶", "𝓰", "Ԍ"], h: [ "h", "ᕼ", "H", "ⓗ", "Ⓗ", "н", "Ⱨ", "ḧ", "Ḧ", "Ꮒ", "ɦ", "h", "H", "ʜ", "ɥ", "🅗", "𝐡", "𝐇", "𝘩", "𝘏", "𝙝", "𝙃", "𝒽", "𝓱", "𝓗", "𝕙", "𝔾", "𝔥", "𝔊", "𝖍", "𝕳", "🄷", "🅷", "𝐻", "ԋ", "𝚑", "𝙷", "♄", "h", @@ -428,7 +428,7 @@ export const namefilter: Chat.NameFilter = (name, user) => { if (Punishments.namefilterwhitelist.has(id)) return name; if (Monitor.forceRenames.has(id)) { if (typeof Monitor.forceRenames.get(id) === 'number') { - // we check this for hotpatching reasons, since on the initial chat patch this will still be a Utils.MultiSet + // we check this for hotpatching reasons, since on the initial chat patch this will still be a Utils.Multiset // we're gonna assume no one has seen it since that covers people who _haven't_ actually, and those who have // likely will not be attempting to log into it Monitor.forceRenames.set(id, false); @@ -502,7 +502,7 @@ export const nicknamefilter: Chat.NicknameFilter = (name, user) => { lcName = lcName.replace('herapist', '').replace('grape', '').replace('scrape', ''); for (const list in filterWords) { - if (!Chat.monitors[list]) continue; + if (!Chat.monitors[list]) continue; if (Chat.monitors[list].location === 'BATTLES') continue; for (const line of filterWords[list]) { let {regex, word} = line; @@ -742,14 +742,14 @@ export const commands: Chat.ChatCommands = { }, testhelp: [ `/filter test [test string] - Tests whether or not the provided test string would trigger any of the chat monitors.`, - `Requires: % @ &`, + `Requires: % @ ~`, ], }, filterhelp: [ - `/filter add list, word, reason[, optional public reason] - Adds a word to the given filter list. Requires: &`, - `/filter remove list, words - Removes words from the given filter list. Requires: &`, - `/filter view - Opens the list of filtered words. Requires: % @ &`, - `/filter test [test string] - Tests whether or not the provided test string would trigger any of the chat monitors. Requires: % @ &`, + `/filter add list, word, reason[, optional public reason] - Adds a word to the given filter list. Requires: ~`, + `/filter remove list, words - Removes words from the given filter list. Requires: ~`, + `/filter view - Opens the list of filtered words. Requires: % @ ~`, + `/filter test [test string] - Tests whether or not the provided test string would trigger any of the chat monitors. Requires: % @ ~`, `You may use / instead of , in /filter add if you want to specify a reason that includes commas.`, ], allowname(target, room, user) { diff --git a/server/chat-plugins/chatlog.ts b/server/chat-plugins/chatlog.ts index 38039b8b1865..f1a59930318c 100644 --- a/server/chat-plugins/chatlog.ts +++ b/server/chat-plugins/chatlog.ts @@ -5,19 +5,14 @@ * @license MIT */ -import {Utils, FS, Dashycode, ProcessManager, Repl, Net} from '../../lib'; -import {Config} from '../config-loader'; -import {Dex} from '../../sim/dex'; -import {Chat} from '../chat'; +import {Utils, FS, Dashycode, ProcessManager, Net, Streams} from '../../lib'; +import {SQL} from '../../lib/database'; +import {roomlogTable} from '../roomlogs'; const DAY = 24 * 60 * 60 * 1000; -const MAX_RESULTS = 3000; const MAX_MEMORY = 67108864; // 64MB -const MAX_PROCESSES = 1; const MAX_TOPUSERS = 100; -const CHATLOG_PM_TIMEOUT = 1 * 60 * 60 * 1000; // 1 hour - const UPPER_STAFF_ROOMS = ['upperstaff', 'adminlog', 'slowlog']; interface ChatlogSearch { @@ -63,8 +58,12 @@ export class LogReaderRoom { } async listMonths() { + if (roomlogTable) { + const dates = await roomlogTable.query()`SELECT DISTINCT month FROM roomlog_dates WHERE roomid = ${this.roomid}`; + return dates.map(x => x.month); + } try { - const listing = await FS(`logs/chat/${this.roomid}`).readdir(); + const listing = await Monitor.logPath(`chat/${this.roomid}`).readdir(); return listing.filter(file => /^[0-9][0-9][0-9][0-9]-[0-9][0-9]$/.test(file)); } catch { return []; @@ -72,8 +71,14 @@ export class LogReaderRoom { } async listDays(month: string) { + if (roomlogTable) { + const dates = await ( + roomlogTable.query()`SELECT DISTINCT date FROM roomlog_dates WHERE roomid = ${this.roomid} AND month = ${month}` + ); + return dates.map(x => x.date); + } try { - const listing = await FS(`logs/chat/${this.roomid}/${month}`).readdir(); + const listing = await Monitor.logPath(`chat/${this.roomid}/${month}`).readdir(); return listing.filter(file => file.endsWith(".txt")).map(file => file.slice(0, -4)); } catch { return []; @@ -81,21 +86,43 @@ export class LogReaderRoom { } async getLog(day: string) { + if (roomlogTable) { + const [dayStart, dayEnd] = LogReader.dayToRange(day); + const logs = await roomlogTable.selectAll( + ['log', 'time'] + )`WHERE roomid = ${this.roomid} AND time BETWEEN ${dayStart}::int::timestamp AND ${dayEnd}::int::timestamp`; + return new Streams.ObjectReadStream({ + read(this: Streams.ObjectReadStream) { + for (const {log, time} of logs) { + this.buf.push(`${Chat.toTimestamp(time).split(' ')[1]} ${log}`); + } + this.pushEnd(); + }, + }); + } const month = LogReader.getMonth(day); - const log = FS(`logs/chat/${this.roomid}/${month}/${day}.txt`); + const log = Monitor.logPath(`chat/${this.roomid}/${month}/${day}.txt`); if (!await log.exists()) return null; - return log.createReadStream(); + return log.createReadStream().byLine(); } } export const LogReader = new class { async get(roomid: RoomID) { - if (!await FS(`logs/chat/${roomid}`).exists()) return null; + if (roomlogTable) { + if (!(await roomlogTable.selectOne()`WHERE roomid = ${roomid}`)) return null; + } else { + if (!await Monitor.logPath(`chat/${roomid}`).exists()) return null; + } return new LogReaderRoom(roomid); } async list() { - const listing = await FS(`logs/chat`).readdir(); + if (roomlogTable) { + const roomids = await roomlogTable.query()`SELECT DISTINCT roomid FROM roomlogs`; + return roomids.map(x => x.roomid) as RoomID[]; + } + const listing = await Monitor.logPath(`chat`).readdir(); return listing.filter(file => /^[a-z0-9-]+$/.test(file)) as RoomID[]; } @@ -151,25 +178,23 @@ export const LogReader = new class { return {official, normal, hidden, secret, deleted, personal, deletedPersonal}; } - async read(roomid: RoomID, day: string, limit: number) { - const roomLog = await LogReader.get(roomid); - const stream = await roomLog!.getLog(day); - let buf = ''; - let i = (LogSearcher as FSLogSearcher).results || 0; - if (!stream) { - buf += `

Room "${roomid}" doesn't have logs for ${day}

`; - } else { - for await (const line of stream.byLine()) { - const rendered = LogViewer.renderLine(line); - if (rendered) { - buf += `${line}\n`; - i++; - if (i > limit) break; - } - } - } - return buf; + /** @returns [dayStart, dayEnd] as seconds (NOT milliseconds) since Unix epoch */ + dayToRange(day: string): [number, number] { + const nextDay = LogReader.nextDay(day); + return [ + Math.trunc(new Date(day).getTime() / 1000), + Math.trunc(new Date(nextDay).getTime() / 1000), + ]; } + /** @returns [monthStart, monthEnd] as seconds (NOT milliseconds) since Unix epoch */ + monthToRange(month: string): [number, number] { + const nextMonth = LogReader.nextMonth(month); + return [ + Math.trunc(new Date(`${month}-01`).getTime() / 1000), + Math.trunc(new Date(`${nextMonth}-01`).getTime() / 1000), + ]; + } + getMonth(day?: string) { if (!day) day = Chat.toTimestamp(new Date()).split(' ')[0]; return day.slice(0, 7); @@ -204,119 +229,6 @@ export const LogReader = new class { // won't crash on the input text. return /^[0-9]{4}-(?:0[0-9]|1[0-2])-(?:[0-2][0-9]|3[0-1])$/.test(text); } - async findBattleLog(tier: ID, number: number): Promise { - // binary search! - const months = (await FS('logs').readdir()).filter(this.isMonth).sort(); - if (!months.length) return null; - - // find first day - let firstDay!: string; - while (months.length) { - const month = months[0]; - try { - const days = (await FS(`logs/${month}/${tier}/`).readdir()).filter(this.isDay).sort(); - firstDay = days[0]; - break; - } catch {} - months.shift(); - } - if (!firstDay) return null; - - // find last day - let lastDay!: string; - while (months.length) { - const month = months[months.length - 1]; - try { - const days = (await FS(`logs/${month}/${tier}/`).readdir()).filter(this.isDay).sort(); - lastDay = days[days.length - 1]; - break; - } catch {} - months.pop(); - } - if (!lastDay) throw new Error(`getBattleLog month range search for ${tier}`); - - const getBattleNum = (battleName: string) => Number(battleName.split('-')[1].slice(0, -9)); - - const getDayRange = async (day: string) => { - const month = day.slice(0, 7); - - try { - const battles = (await FS(`logs/${month}/${tier}/${day}`).readdir()).filter( - b => b.endsWith('.log.json') - ); - Utils.sortBy(battles, getBattleNum); - - return [getBattleNum(battles[0]), getBattleNum(battles[battles.length - 1])]; - } catch { - return null; - } - }; - - const dayExists = (day: string) => FS(`logs/${day.slice(0, 7)}/${tier}/${day}`).exists(); - - const nextExistingDay = async (day: string) => { - for (let i = 0; i < 3650; i++) { - day = this.nextDay(day); - if (await dayExists(day)) return day; - if (day === lastDay) return null; - } - return null; - }; - - const prevExistingDay = async (day: string) => { - for (let i = 0; i < 3650; i++) { - day = this.prevDay(day); - if (await dayExists(day)) return day; - if (day === firstDay) return null; - } - return null; - }; - - for (let i = 0; i < 100; i++) { - const middleDay = new Date( - (new Date(firstDay).getTime() + new Date(lastDay).getTime()) / 2 - ).toISOString().slice(0, 10); - - let currentDay: string | null = middleDay; - let dayRange = await getDayRange(middleDay); - - if (!dayRange) { - currentDay = await nextExistingDay(middleDay); - if (!currentDay) { - const lastExistingDay = await prevExistingDay(middleDay); - if (!lastExistingDay) throw new Error(`couldn't find existing day`); - lastDay = lastExistingDay; - continue; - } - dayRange = await getDayRange(currentDay); - if (!dayRange) throw new Error(`existing day was a lie`); - } - - const [lowest, highest] = dayRange; - - if (number < lowest) { - // before currentDay - if (firstDay === currentDay) return null; - lastDay = this.prevDay(currentDay); - } else if (number > highest) { - // after currentDay - if (lastDay === currentDay) return null; - firstDay = this.nextDay(currentDay); - } else { - // during currentDay - const month = currentDay.slice(0, 7); - const path = FS(`logs/${month}/${tier}/${currentDay}/${tier}-${number}.log.json`); - if (await path.exists()) { - return JSON.parse(path.readSync()).log; - } - return null; - } - } - - // 100 iterations is enough to search 2**100 days, which is around 1e30 days - // for comparison, a millennium is 365000 days - throw new Error(`Infinite loop looking for ${tier}-${number}`); - } }; export const LogViewer = new class { @@ -343,8 +255,11 @@ export const LogViewer = new class { if (!stream) { buf += `

Room "${roomid}" doesn't have logs for ${day}

`; } else { - for await (const line of stream.byLine()) { - buf += this.renderLine(line, opts, {roomid, date: day}); + for await (const line of stream) { + // sometimes there can be newlines in there. parse accordingly + for (const part of line.split('\n')) { + buf += this.renderLine(part, opts, {roomid, date: day}); + } } } buf += `
`; @@ -358,24 +273,6 @@ export const LogViewer = new class { return this.linkify(buf); } - async battle(tier: string, number: number, context: Chat.PageContext) { - if (number > Rooms.global.lastBattle) { - throw new Chat.ErrorMessage(`That battle cannot exist, as the number has not been used.`); - } - const roomid = `battle-${tier}-${number}` as RoomID; - context.setHTML(`

Locating battle logs for the battle ${tier}-${number}...

`); - const log = await PM.query({ - queryType: 'battlesearch', roomid: toID(tier), search: number, - }); - if (!log) return context.setHTML(this.error("Logs not found.")); - const {connection} = context; - context.close(); - connection.sendTo( - roomid, `|init|battle\n|title|[Battle Log] ${tier}-${number}\n${log.join('\n')}` - ); - connection.sendTo(roomid, `|expire|This is a battle log.`); - } - parseChatLine(line: string, day: string) { const [timestamp, type, ...rest] = line.split('|'); if (type === 'c:') { @@ -567,9 +464,6 @@ export const LogViewer = new class { } }; -/** Match with two lines of context in either direction */ -type SearchMatch = readonly [string, string, string, string, string]; - export abstract class Searcher { static checkEnabled() { if (global.Config.disableripgrep) { @@ -581,19 +475,7 @@ export abstract class Searcher { const id = toID(user); return `.${[...id].join('[^a-zA-Z0-9]*')}[^a-zA-Z0-9]*`; } - constructSearchRegex(str: string) { - // modified regex replace - str = str.replace(/[\\^$.*?()[\]{}|]/g, '\\$&'); - const searches = str.split('+'); - if (searches.length <= 1) { - if (str.length <= 3) return `\b${str}`; - return str; - } - return `^` + searches.filter(Boolean).map(term => `(?=.*${term})`).join(''); - } - abstract searchLogs(roomid: RoomID, search: string, limit?: number | null, date?: string | null): Promise; abstract searchLinecounts(roomid: RoomID, month: string, user?: ID): Promise; - abstract getSharedBattles(userids: string[]): Promise; renderLinecountResults( results: {[date: string]: {[userid: string]: number}} | null, roomid: RoomID, month: string, user?: ID @@ -601,13 +483,13 @@ export abstract class Searcher { let buf = Utils.html`

Linecounts on `; buf += `${roomid}${user ? ` for the user ${user}` : ` (top ${MAX_TOPUSERS})`}

`; buf += `Total lines: {total}
`; - buf += `Month: ${month}:
`; + buf += `Month: ${month}
`; const nextMonth = LogReader.nextMonth(month); const prevMonth = LogReader.prevMonth(month); - if (FS(`logs/chat/${roomid}/${prevMonth}`).existsSync()) { + if (Monitor.logPath(`chat/${roomid}/${prevMonth}`).existsSync()) { buf += `Previous month`; } - if (FS(`logs/chat/${roomid}/${nextMonth}`).existsSync()) { + if (Monitor.logPath(`chat/${roomid}/${nextMonth}`).existsSync()) { buf += ` Next month`; } if (!results) { @@ -616,7 +498,7 @@ export abstract class Searcher { return buf; } else if (user) { buf += '
    '; - const sortedDays = Utils.sortBy(Object.keys(results), day => ({reverse: day})); + const sortedDays = Utils.sortBy(Object.keys(results)); let total = 0; for (const day of sortedDays) { const dayResults = results[day][user]; @@ -630,7 +512,7 @@ export abstract class Searcher { buf += '
      '; // squish the results together const totalResults: {[k: string]: number} = {}; - for (const date in results) { + for (const date of Utils.sortBy(Object.keys(results))) { for (const userid in results[date]) { if (!totalResults[userid]) totalResults[userid] = 0; totalResults[userid] += results[date][userid]; @@ -651,71 +533,39 @@ export abstract class Searcher { buf += `
`; return LogViewer.linkify(buf); } - async runSearch( - context: Chat.PageContext, search: string, roomid: RoomID, date: string | null, limit: number | null - ) { - context.title = `[Search] [${roomid}] ${search}`; - if (!['ripgrep', 'fs'].includes(Config.chatlogreader)) { - throw new Error(`Config.chatlogreader must be 'fs' or 'ripgrep'.`); - } - context.setHTML( - `

Running a chatlog search for "${search}" on room ${roomid}` + - (date ? date !== 'all' ? `, on the date "${date}"` : ', on all dates' : '') + - `.

` - ); - const response = await PM.query({search, roomid, date, limit, queryType: 'search'}); - return context.setHTML(response); - } async runLinecountSearch(context: Chat.PageContext, roomid: RoomID, month: string, user?: ID) { context.setHTML( `

Searching linecounts on room ${roomid}${user ? ` for the user ${user}` : ''}.

` ); - const results = await PM.query({roomid, date: month, search: user, queryType: 'linecount'}); - context.setHTML(results); + context.setHTML(await LogSearcher.searchLinecounts(roomid, month, user)); } - async sharedBattles(userids: string[]) { - let buf = `Logged shared battles between the users ${userids.join(', ')}`; - const results: string[] = await PM.query({ - queryType: 'sharedsearch', search: userids, - }); - if (!results.length) { - buf += `:
None found.`; - return buf; - } - buf += ` (${results.length}):
`; - buf += results.map(id => `${id}`).join(', '); - return buf; + runSearch() { + throw new Chat.ErrorMessage(`This functionality is currently disabled.`); } // this would normally be abstract, but it's very difficult with ripgrep // so it's easier to just do it the same way for both. async roomStats(room: RoomID, month: string) { - if (!FS(`logs/chat/${room}`).existsSync()) { + if (!Monitor.logPath(`chat/${room}`).existsSync()) { return LogViewer.error(Utils.html`Room ${room} not found.`); } - if (!FS(`logs/chat/${room}/${month}`).existsSync()) { + if (!Monitor.logPath(`chat/${room}/${month}`).existsSync()) { return LogViewer.error(Utils.html`Room ${room} does not have logs for the month ${month}.`); } - const stats = await PM.query({ - queryType: 'roomstats', search: month, roomid: room, - }); + const stats = await LogSearcher.activityStats(room, month); let buf = `

Room stats for ${room} [${month}]


`; buf += `Total days with logs: ${stats.average.days}
`; - const next = LogReader.nextMonth(month); - const prev = LogReader.prevMonth(month); - const prevExists = FS(`logs/chat/${room}/${prev}`).existsSync(); - const nextExists = FS(`logs/chat/${room}/${next}`).existsSync(); - if (prevExists) { + /* if (prevExists) { TODO restore buf += `
Previous month`; buf += nextExists ? ` | ` : `
`; } if (nextExists) { buf += `${prevExists ? `` : `
`}Next month
`; - } + }*/ buf += this.visualizeStats(stats.average); buf += `
`; buf += `
Stats by day`; for (const day of stats.days) { - buf += `
${day.day}
`; + buf += `
${(day as any).day}
`; buf += this.visualizeStats(day); buf += `
`; } @@ -749,49 +599,38 @@ export abstract class Searcher { buf += `
`; return buf; } - async activityStats(room: RoomID, month: string) { - const days = (await FS(`logs/chat/${room}/${month}`).readdir()).map(f => f.slice(0, -4)); - const stats: RoomStats[] = []; - const today = Chat.toTimestamp(new Date()).split(' ')[0]; - for (const day of days) { - if (day === today) { // if the day is not over: do not count it, it'll skew the numbers - continue; - } - const curStats = await this.dayStats(room, day); - if (!curStats) continue; - stats.push(curStats); - } - // now, having collected the stats for each day, we need to merge them together - const collected: RoomStats = { - deadTime: 0, - deadPercent: 0, - lines: {}, - users: {}, - days: days.length, - linesPerUser: 0, - totalLines: 0, - averagePresent: 0, - }; + abstract activityStats(room: RoomID, month: string): Promise<{average: RoomStats, days: RoomStats[]}>; +} - // merge - for (const entry of stats) { - for (const k of ['deadTime', 'deadPercent', 'linesPerUser', 'totalLines', 'averagePresent'] as const) { - collected[k] += entry[k]; - } - for (const type of ['lines'] as const) { - for (const k in entry[type]) { - if (!collected[type][k]) collected[type][k] = 0; - collected[type][k] += entry[type][k]; +export class FSLogSearcher extends Searcher { + results: number; + constructor() { + super(); + this.results = 0; + } + async searchLinecounts(roomid: RoomID, month: string, user?: ID) { + const directory = Monitor.logPath(`chat/${roomid}/${month}`); + if (!directory.existsSync()) { + return this.renderLinecountResults(null, roomid, month, user); + } + const files = await directory.readdir(); + const results: {[date: string]: {[userid: string]: number}} = {}; + for (const file of files) { + const day = file.slice(0, -4); + const stream = Monitor.logPath(`chat/${roomid}/${month}/${file}`).createReadStream(); + for await (const line of stream.byLine()) { + const parts = line.split('|').map(toID); + const id = parts[2]; + if (!id) continue; + if (parts[1] === 'c') { + if (user && id !== user) continue; + if (!results[day]) results[day] = {}; + if (!results[day][id]) results[day][id] = 0; + results[day][id]++; } } } - - // average - for (const k of ['deadTime', 'deadPercent', 'linesPerUser', 'totalLines', 'averagePresent'] as const) { - collected[k] /= stats.length; - } - - return {average: collected, days: stats}; + return this.renderLinecountResults(results, roomid, month, user); } async dayStats(room: RoomID, day: string) { const cached = this.roomstatsCache.get(room + '-' + day); @@ -807,7 +646,7 @@ export abstract class Searcher { averagePresent: 0, day, }; - const path = FS(`logs/chat/${room}/${LogReader.getMonth(day)}/${day}.txt`); + const path = Monitor.logPath(`chat/${room}/${LogReader.getMonth(day)}/${day}.txt`); if (!path.existsSync()) return false; const stream = path.createReadStream(); let lastTime = new Date(day).getTime(); // start at beginning of day to be sure @@ -866,244 +705,65 @@ export abstract class Searcher { } return num / waitIncrements.length; } -} - -export class FSLogSearcher extends Searcher { - results: number; - constructor() { - super(); - this.results = 0; - } - async searchLinecounts(roomid: RoomID, month: string, user?: ID) { - const directory = FS(`logs/chat/${roomid}/${month}`); - if (!directory.existsSync()) { - return this.renderLinecountResults(null, roomid, month, user); - } - const files = await directory.readdir(); - const results: {[date: string]: {[userid: string]: number}} = {}; - for (const file of files) { - const day = file.slice(0, -4); - const stream = FS(`logs/chat/${roomid}/${month}/${file}`).createReadStream(); - for await (const line of stream.byLine()) { - const parts = line.split('|').map(toID); - const id = parts[2]; - if (!id) continue; - if (parts[1] === 'c') { - if (user && id !== user) continue; - if (!results[day]) results[day] = {}; - if (!results[day][id]) results[day][id] = 0; - results[day][id]++; - } - } - } - return this.renderLinecountResults(results, roomid, month, user); - } - searchLogs(roomid: RoomID, search: string, limit?: number | null, date?: string | null) { - if (!date) date = Chat.toTimestamp(new Date()).split(' ')[0].slice(0, -3); - const isAll = (date === 'all'); - const isYear = (date.length === 4); - const isMonth = (date.length === 7); - if (!limit || limit > MAX_RESULTS) limit = MAX_RESULTS; - if (isAll) { - return this.runYearSearch(roomid, null, search, limit); - } else if (isYear) { - date = date.substr(0, 4); - return this.runYearSearch(roomid, date, search, limit); - } else if (isMonth) { - date = date.substr(0, 7); - return this.runMonthSearch(roomid, date, search, limit); - } else { - return Promise.resolve(LogViewer.error("Invalid date.")); - } - } - - async fsSearchDay(roomid: RoomID, day: string, search: string, limit?: number | null) { - if (!limit || limit > MAX_RESULTS) limit = MAX_RESULTS; - const text = await LogReader.read(roomid, day, limit); - if (!text) return []; - const lines = text.split('\n'); - const matches: SearchMatch[] = []; - - const searchTerms = search.split('+').filter(Boolean); - const searchTermRegexes: RegExp[] = []; - for (const searchTerm of searchTerms) { - if (searchTerm.startsWith('user-')) { - const id = toID(searchTerm.slice(5)); - searchTermRegexes.push(new RegExp(`\\|c\\|${this.constructUserRegex(id)}\\|`, 'i')); + async activityStats(room: RoomID, month: string) { + const days = (await Monitor.logPath(`chat/${room}/${month}`).readdir()).map(f => f.slice(0, -4)); + const stats: RoomStats[] = []; + const today = Chat.toTimestamp(new Date()).split(' ')[0]; + for (const day of days) { + if (day === today) { // if the day is not over: do not count it, it'll skew the numbers continue; } - searchTermRegexes.push(new RegExp(searchTerm, 'i')); - } - function matchLine(line: string) { - return searchTermRegexes.every(term => term.test(line)); - } - - for (const [i, line] of lines.entries()) { - if (matchLine(line)) { - matches.push([ - lines[i - 2], - lines[i - 1], - line, - lines[i + 1], - lines[i + 2], - ]); - if (matches.length > limit) break; - } + const curStats = await this.dayStats(room, day); + if (!curStats) continue; + stats.push(curStats); } - return matches; - } - - renderDayResults(results: {[day: string]: SearchMatch[]}, roomid: RoomID) { - const renderResult = (match: SearchMatch) => { - this.results++; - return ( - LogViewer.renderLine(match[0]) + - LogViewer.renderLine(match[1]) + - `
${LogViewer.renderLine(match[2])}
` + - LogViewer.renderLine(match[3]) + - LogViewer.renderLine(match[4]) - ); + // now, having collected the stats for each day, we need to merge them together + const collected: RoomStats = { + deadTime: 0, + deadPercent: 0, + lines: {}, + users: {}, + days: days.length, + linesPerUser: 0, + totalLines: 0, + averagePresent: 0, }; - let buf = ``; - for (const day in results) { - const dayResults = results[day]; - const plural = dayResults.length !== 1 ? "es" : ""; - buf += `
${dayResults.length} match${plural} on `; - buf += `${day}

`; - buf += `

${dayResults.filter(Boolean).map(result => renderResult(result)).join(`


`)}

`; - buf += `

`; - } - return buf; - } - - async fsSearchMonth(opts: ChatlogSearch) { - let {limit, room: roomid, date: month, search} = opts; - if (!limit || limit > MAX_RESULTS) limit = MAX_RESULTS; - const log = await LogReader.get(roomid); - if (!log) return {results: {}, total: 0}; - const days = await log.listDays(month); - const results: {[k: string]: SearchMatch[]} = {}; - let total = 0; - - for (const day of days) { - const dayResults = await this.fsSearchDay(roomid, day, search, limit ? limit - total : null); - if (!dayResults.length) continue; - total += dayResults.length; - results[day] = dayResults; - if (total > limit) break; - } - return {results, total}; - } - - /** pass a null `year` to search all-time */ - async fsSearchYear(roomid: RoomID, year: string | null, search: string, limit?: number | null) { - if (!limit || limit > MAX_RESULTS) limit = MAX_RESULTS; - const log = await LogReader.get(roomid); - if (!log) return {results: {}, total: 0}; - let months = await log.listMonths(); - months = months.reverse(); - const results: {[k: string]: SearchMatch[]} = {}; - let total = 0; - - for (const month of months) { - if (year && !month.includes(year)) continue; - const monthSearch = await this.fsSearchMonth({room: roomid, date: month, search, limit}); - const {results: monthResults, total: monthTotal} = monthSearch; - if (!monthTotal) continue; - total += monthTotal; - Object.assign(results, monthResults); - if (total > limit) break; - } - return {results, total}; - } - async runYearSearch(roomid: RoomID, year: string | null, search: string, limit: number) { - const {results, total} = await this.fsSearchYear(roomid, year, search, limit); - if (!total) { - return LogViewer.error(`No matches found for ${search} on ${roomid}.`); - } - let buf = ''; - if (year) { - buf += `

Searching year: ${year}:

`; - } else { - buf += `

Searching all logs:

`; - } - buf += this.renderDayResults(results, roomid); - if (total > limit) { - // cap is met - buf += `
Max results reached, capped at ${limit}`; - buf += `
`; - if (total < MAX_RESULTS) { - buf += ``; - buf += `
`; - } - } - this.results = 0; - return buf; - } - async runMonthSearch(roomid: RoomID, month: string, search: string, limit: number, year = false) { - const {results, total} = await this.fsSearchMonth({room: roomid, date: month, search, limit}); - if (!total) { - return LogViewer.error(`No matches found for ${search} on ${roomid}.`); - } - - let buf = ( - `
Searching for "${search}" in ${roomid} (${month}):
` - ); - buf += this.renderDayResults(results, roomid); - if (total > limit) { - // cap is met & is not being used in a year read - buf += `
Max results reached, capped at ${limit}`; - buf += `
`; - if (total < MAX_RESULTS) { - buf += ``; - buf += `
`; + // merge + for (const entry of stats) { + for (const k of ['deadTime', 'deadPercent', 'linesPerUser', 'totalLines', 'averagePresent'] as const) { + collected[k] += entry[k]; } - } - buf += `
`; - this.results = 0; - return buf; - } - async getSharedBattles(userids: string[]) { - const months = FS("logs/").readdirSync().filter(f => !isNaN(new Date(f).getTime())); - const results: string[] = []; - for (const month of months) { - const tiers = await FS(`logs/${month}`).readdir(); - for (const tier of tiers) { - const days = await FS(`logs/${month}/${tier}/`).readdir(); - for (const day of days) { - const battles = await FS(`logs/${month}/${tier}/${day}`).readdir(); - for (const battle of battles) { - const content = JSON.parse(FS(`logs/${month}/${tier}/${day}/${battle}`).readSync()); - const players = [content.p1, content.p2].map(toID); - if (players.every(p => userids.includes(p))) { - const battleName = battle.slice(0, -9); - results.push(battleName); - } - } + for (const type of ['lines'] as const) { + for (const k in entry[type]) { + if (!collected[type][k]) collected[type][k] = 0; + collected[type][k] += entry[type][k]; } } } - return results; + + // average + for (const k of ['deadTime', 'deadPercent', 'linesPerUser', 'totalLines', 'averagePresent'] as const) { + collected[k] /= stats.length; + } + + return {average: collected, days: stats}; } } -export class RipgrepLogSearcher extends Searcher { +export class RipgrepLogSearcher extends FSLogSearcher { async ripgrepSearchMonth(opts: ChatlogSearch) { - let {raw, search, room: roomid, date: month, args} = opts; + const {search, room: roomid, date: month, args} = opts; let results: string[]; let lineCount = 0; if (Config.disableripgrep) { return {lineCount: 0, results: []}; } - if (!raw) { - search = this.constructSearchRegex(search); - } const resultSep = args?.includes('-m') ? '--' : '\n'; try { const options = [ '-e', search, - `logs/chat/${roomid}/${month}`, + Monitor.logPath(`chat/${roomid}/${month}`).path, '-i', ]; if (args) { @@ -1127,99 +787,6 @@ export class RipgrepLogSearcher extends Searcher { lineCount += results.length; return {results, lineCount}; } - async searchLogs( - roomid: RoomID, - search: string, - limit?: number | null, - date?: string | null - ) { - if (date) { - // if it's more than 7 chars, assume it's a month - if (date.length > 7) date = date.substr(0, 7); - // if it's less, assume they were trying a year - else if (date.length < 7) date = date.substr(0, 4); - } - const months = (date && toID(date) !== 'all' ? [date] : await new LogReaderRoom(roomid).listMonths()).reverse(); - let linecount = 0; - let results: string[] = []; - if (!limit || limit > MAX_RESULTS) limit = MAX_RESULTS; - if (!date) date = 'all'; - const originalSearch = search; - const userRegex = /user-(.[a-zA-Z0-9]*)/gi; - const user = userRegex.exec(search)?.[0]?.slice(5); - const userSearch = user ? `the user '${user}'` : null; - if (userSearch) { - const id = toID(user); - const rest = search.replace(userRegex, '') - .split('-') - .filter(Boolean) - .map(str => `.*${Utils.escapeRegex(str)}`) - .join(''); - search = `\\|c\\|${this.constructUserRegex(id)}\\|${rest}`; - } - while (linecount < MAX_RESULTS) { - const month = months.shift(); - if (!month) break; - const output = await this.ripgrepSearchMonth({ - room: roomid, search, date: month, - limit, args: [`-m`, `${limit}`, '-C', '3', '--engine=auto'], raw: !!userSearch, - }); - results = results.concat(output.results); - linecount += output.lineCount; - } - if (linecount > MAX_RESULTS) { - const diff = linecount - MAX_RESULTS; - results = results.slice(0, -diff); - } - return this.renderSearchResults(results, roomid, search, limit, date, originalSearch); - } - - renderSearchResults( - results: string[], roomid: RoomID, search: string, limit: number, - month?: string | null, originalSearch?: string | null - ) { - results = results.filter(Boolean); - if (results.length < 1) return LogViewer.error('No results found.'); - let exactMatches = 0; - let curDate = ''; - if (limit > MAX_RESULTS) limit = MAX_RESULTS; - const useOriginal = originalSearch && originalSearch !== search; - const searchRegex = new RegExp(useOriginal ? search : this.constructSearchRegex(search), "i"); - const sorted = Utils.sortBy(results, line => ( - {reverse: line.split('.txt')[0].split('/').pop()!} - )).map(chunk => chunk.split('\n').map(rawLine => { - if (exactMatches > limit || !toID(rawLine)) return null; // return early so we don't keep sorting - const sep = rawLine.includes('.txt-') ? '.txt-' : '.txt:'; - const [name, text] = rawLine.split(sep); - let line = LogViewer.renderLine(text, 'all'); - if (!line || name.includes('today')) return null; - // gets rid of some edge cases / duplicates - let date = name.replace(`logs/chat/${roomid}${toID(month) === 'all' ? '' : `/${month}`}`, '').slice(9); - if (searchRegex.test(rawLine)) { - if (++exactMatches > limit) return null; - line = `
${line}
`; - } - if (curDate !== date) { - curDate = date; - date = `
[${date}]`; - } else { - date = ''; - } - return `${date} ${line}`; - }).filter(Boolean).join(' ')).filter(Boolean); - let buf = Utils.html`
Results on ${roomid} for ${originalSearch ? originalSearch : search}:`; - buf += limit ? ` ${exactMatches} (capped at ${limit})` : ''; - buf += `
`; - buf += sorted.join('
'); - if (limit) { - buf += `

Capped at ${limit}.
`; - buf += ``; - buf += `
`; - } - return buf; - } async searchLinecounts(room: RoomID, month: string, user?: ID) { // don't need to check if logs exist since ripgrepSearchMonth does that const regexString = ( @@ -1251,93 +818,44 @@ export class RipgrepLogSearcher extends Searcher { } return this.renderLinecountResults(results, room, month, user); } - async getSharedBattles(userids: string[]) { - const regexString = userids.map(id => `(?=.*?("p(1|2)":"${[...id].join('[^a-zA-Z0-9]*')}[^a-zA-Z0-9]*"))`).join(''); - const results: string[] = []; - try { - const {stdout} = await ProcessManager.exec(['rg', '-e', regexString, '-i', '-tjson', 'logs/', '-P']); - for (const line of stdout.split('\n')) { - const [name] = line.split(':'); - const battleName = name.split('/').pop()!; - results.push(battleName.slice(0, -9)); - } - } catch (e: any) { - if (e.code !== 1) throw e; - } - return results.filter(Boolean); - } } -export const LogSearcher: Searcher = new (Config.chatlogreader === 'ripgrep' ? RipgrepLogSearcher : FSLogSearcher)(); - -export const PM = new ProcessManager.QueryProcessManager(module, async data => { - const start = Date.now(); - try { - let result: any; - const {date, search, roomid, limit, queryType} = data; - switch (queryType) { - case 'linecount': - result = await LogSearcher.searchLinecounts(roomid, date, search); - break; - case 'search': - result = await LogSearcher.searchLogs(roomid, search, limit, date); - break; - case 'sharedsearch': - result = await LogSearcher.getSharedBattles(search); - break; - case 'battlesearch': - result = await LogReader.findBattleLog(roomid, search); - break; - case 'roomstats': - result = await LogSearcher.activityStats(roomid, search); - break; - default: - return LogViewer.error(`Config.chatlogreader is not configured.`); - } - const elapsedTime = Date.now() - start; - if (elapsedTime > 3000) { - Monitor.slow(`[Slow chatlog query]: ${elapsedTime}ms: ${JSON.stringify(data)}`); - } - return result; - } catch (e: any) { - if (e.name?.endsWith('ErrorMessage')) { - return LogViewer.error(e.message); +export class DatabaseLogSearcher extends Searcher { + async searchLinecounts(roomid: RoomID, month: string, user?: ID) { + user = toID(user); + if (!Rooms.Roomlogs.table) throw new Error(`Database search made while database is disabled.`); + const results: {[date: string]: {[user: string]: number}} = {}; + const [monthStart, monthEnd] = LogReader.monthToRange(month); + const rows = await Rooms.Roomlogs.table.selectAll()` + WHERE ${user ? SQL`userid = ${user} AND ` : SQL``}roomid = ${roomid} AND + time BETWEEN ${monthStart}::int::timestamp AND ${monthEnd}::int::timestamp AND + type = ${'c'} + `; + + for (const row of rows) { + // 'c' rows should always have userids, so this should never be an issue. + // this is just to appease TS. + if (!row.userid) continue; + const day = Chat.toTimestamp(row.time).split(' ')[0]; + if (!results[day]) results[day] = {}; + if (!results[day][row.userid]) results[day][row.userid] = 0; + results[day][row.userid]++; } - Monitor.crashlog(e, 'A chatlog search query', data); - return LogViewer.error(`Sorry! Your chatlog search crashed. We've been notified and will fix this.`); + + return this.renderLinecountResults(results, roomid, month, user); } -}, CHATLOG_PM_TIMEOUT, message => { - if (message.startsWith(`SLOW\n`)) { - Monitor.slow(message.slice(5)); + activityStats(room: RoomID, month: string): Promise<{average: RoomStats, days: RoomStats[]}> { + throw new Chat.ErrorMessage('This is not yet implemented for the new logs database.'); } -}); - -if (!PM.isParentProcess) { - // This is a child process! - global.Config = Config; - global.Monitor = { - crashlog(error: Error, source = 'A chatlog search process', details: AnyObject | null = null) { - const repr = JSON.stringify([error.name, error.message, source, details]); - process.send!(`THROW\n@!!@${repr}\n${error.stack}`); - }, - slow(text: string) { - process.send!(`CALLBACK\nSLOW\n${text}`); - }, - }; - global.Dex = Dex; - global.toID = Dex.toID; - process.on('uncaughtException', err => { - if (Config.crashguard) { - Monitor.crashlog(err, 'A chatlog search child process'); - } - }); - // eslint-disable-next-line no-eval - Repl.start('chatlog', cmd => eval(cmd)); -} else { - PM.spawn(MAX_PROCESSES); } -const accessLog = FS(`logs/chatlog-access.txt`).createAppendStream(); +export const LogSearcher: Searcher = new ( + Rooms.Roomlogs.table ? DatabaseLogSearcher : + // no db, determine fs reader type. + Config.chatlogreader === 'ripgrep' ? RipgrepLogSearcher : FSLogSearcher +)(); + +const accessLog = Monitor.logPath(`chatlog-access.txt`).createAppendStream(); export const pages: Chat.PageTable = { async chatlog(args, user, connection) { @@ -1383,22 +901,7 @@ export const pages: Chat.PageTable = { void accessLog.writeLine(`${user.id}: <${roomid}> ${date}`); this.title = '[Logs] ' + roomid; - /** null = no limit */ - let limit: number | null = null; let search; - if (opts?.startsWith('search-')) { - let [input, limitString] = opts.split('--limit-'); - input = input.slice(7); - search = Dashycode.decode(input); - if (search.length < 3) return this.errorReply(`That's too short of a search query.`); - if (limitString) { - limit = parseInt(limitString) || null; - } else { - limit = 500; - } - opts = ''; - } - const isAll = (toID(date) === 'all' || toID(date) === 'alltime'); const parsedDate = new Date(date as string); const validDateStrings = ['all', 'alltime']; @@ -1414,7 +917,7 @@ export const pages: Chat.PageTable = { if (date && search) { Searcher.checkEnabled(); this.checkCan('bypassall'); - return LogSearcher.runSearch(this, search, roomid, isAll ? null : date, limit); + return LogSearcher.runSearch(); } else if (date) { if (date === 'today') { this.setHTML(await LogViewer.day(roomid, LogReader.today(), opts)); @@ -1449,14 +952,6 @@ export const pages: Chat.PageTable = { this.title = `[Log Stats] ${date}`; return LogSearcher.runLinecountSearch(this, room ? room.roomid : args[2] as RoomID, date, toID(target)); }, - battlelog(args, user) { - const [tierName, battleNum] = args; - const tier = toID(tierName); - const num = parseInt(battleNum); - if (isNaN(num)) return this.errorReply(`Invalid battle number.`); - void accessLog.writeLine(`${user.id}: battle-${tier}-${num}`); - return LogViewer.battle(tier, num, this); - }, async logsaccess(query) { this.checkCan('rangeban'); const type = toID(query.shift()); @@ -1479,7 +974,7 @@ export const pages: Chat.PageTable = { let buf = `

${title}`; if (userid) buf += ` for ${userid}`; buf += `


    `; - const accessStream = FS(`logs/chatlog-access.txt`).createReadStream(); + const accessStream = Monitor.logPath(`chatlog-access.txt`).createReadStream(); for await (const line of accessStream.byLine()) { const [id, rest] = Utils.splitFirst(line, ': '); if (userid && id !== userid) continue; @@ -1510,6 +1005,9 @@ export const pages: Chat.PageTable = { export const commands: Chat.ChatCommands = { chatlogs: 'chatlog', cl: 'chatlog', + roomlog: 'chatlog', + rl: 'chatlog', + roomlogs: 'chatlog', chatlog(target, room, user) { const [tarRoom, ...opts] = target.split(','); const targetRoom = tarRoom ? Rooms.search(tarRoom) : room; @@ -1520,7 +1018,7 @@ export const commands: Chat.ChatCommands = { chatloghelp() { const strings = [ `/chatlog [optional room], [opts] - View chatlogs from the given room. `, - `If none is specified, shows logs from the room you're in. Requires: % @ * # &`, + `If none is specified, shows logs from the room you're in. Requires: % @ * # ~`, `Supported options:`, `txt - Do not render logs.`, `txt-onlychat - Show only chat lines, untransformed.`, @@ -1572,7 +1070,7 @@ export const commands: Chat.ChatCommands = { `If you provide a user argument in the form user=username, it will search for messages (that match the other arguments) only from that user.
    ` + `All other arguments will be considered part of the search ` + `(if more than one argument is specified, it searches for lines containing all terms).
    ` + - "Requires: &
"; + "Requires: ~
"; return this.sendReplyBox(buffer); }, topusers: 'linecount', @@ -1648,23 +1146,6 @@ export const commands: Chat.ChatCommands = { `/linecount [room], [month], [user].. This does not use any defaults.
` ); }, - slb: 'sharedloggedbattles', - async sharedloggedbattles(target, room, user) { - this.checkCan('lock'); - if (Config.nobattlesearch) return this.errorReply(`/${this.cmd} has been temporarily disabled due to load issues.`); - const targets = target.split(',').map(toID).filter(Boolean); - if (targets.length < 2 || targets.length > 2) { - return this.errorReply(`Specify two users.`); - } - const results = await LogSearcher.sharedBattles(targets); - if (room?.settings.staffRoom || this.pmTarget?.isStaff) { - this.runBroadcast(); - } - return this.sendReplyBox(results); - }, - sharedloggedbattleshelp: [ - `/sharedloggedbattles OR /slb [user1, user2] - View shared battle logs between user1 and user2`, - ], battlelog(target, room, user) { this.checkCan('lock'); target = target.trim(); @@ -1678,7 +1159,7 @@ export const commands: Chat.ChatCommands = { }, battleloghelp: [ `/battlelog [battle link] - View the log of the given [battle link], even if the replay was not saved.`, - `Requires: % @ &`, + `Requires: % @ ~`, ], @@ -1711,6 +1192,16 @@ export const commands: Chat.ChatCommands = { let log: string[]; if (tarRoom) { log = tarRoom.log.log; + } else if (Rooms.Replays.db) { + let battleId = roomid.replace('battle-', ''); + if (battleId.endsWith('pw')) { + battleId = battleId.slice(0, battleId.lastIndexOf("-", battleId.length - 2)); + } + const replayData = await Rooms.Replays.get(battleId); + if (!replayData) { + return this.errorReply(`No room or replay found for that battle.`); + } + log = replayData.log.split('\n'); } else { try { const raw = await Net(`https://${Config.routes.replays}/${roomid.slice('battle-'.length)}.json`).get(); @@ -1746,7 +1237,7 @@ export const commands: Chat.ChatCommands = { getbattlechathelp: [ `/getbattlechat [battle link][, username] - Gets all battle chat logs from the given [battle link].`, `If a [username] is given, searches only chat messages from the given username.`, - `Requires: % @ &`, + `Requires: % @ ~`, ], logsaccess(target, room, user) { @@ -1757,7 +1248,7 @@ export const commands: Chat.ChatCommands = { logsaccesshelp: [ `/logsaccess [type], [user] - View chatlog access logs for the given [type] and [user].`, `If no arguments are given, shows the entire access log.`, - `Requires: &`, + `Requires: ~`, ], @@ -1769,7 +1260,7 @@ export const commands: Chat.ChatCommands = { if (target.length < 3) { return this.errorReply(`Too short of a search term.`); } - const files = await FS(`logs/chat`).readdir(); + const files = await Monitor.logPath(`chat`).readdir(); const buffer = []; for (const roomid of files) { if (roomid.startsWith('groupchat-') && roomid.includes(target)) { @@ -1783,7 +1274,7 @@ export const commands: Chat.ChatCommands = { ); }, groupchatsearchhelp: [ - `/groupchatsearch [target] - Searches for logs of groupchats with names containing the [target]. Requires: % @ &`, + `/groupchatsearch [target] - Searches for logs of groupchats with names containing the [target]. Requires: % @ ~`, ], roomact: 'roomactivity', @@ -1797,6 +1288,6 @@ export const commands: Chat.ChatCommands = { roomactivityhelp: [ `/roomactivity [room][, date] - View room activity logs for the given room.`, `If a date is provided, it searches for logs from that date. Otherwise, it searches the current month.`, - `Requires: &`, + `Requires: ~`, ], }; diff --git a/server/chat-plugins/daily-spotlight.ts b/server/chat-plugins/daily-spotlight.ts index 3acd8a3f495f..380b6c82360a 100644 --- a/server/chat-plugins/daily-spotlight.ts +++ b/server/chat-plugins/daily-spotlight.ts @@ -52,7 +52,7 @@ function nextDaily() { const midnight = new Date(); midnight.setHours(24, 0, 0, 0); -let timeout = setTimeout(nextDaily, midnight.valueOf() - Date.now()); +let timeout = setTimeout(nextDaily, midnight.getTime() - Date.now()); export async function renderSpotlight(roomid: RoomID, key: string, index: number) { let imgHTML = ''; @@ -308,13 +308,13 @@ export const commands: Chat.ChatCommands = { dailyhelp() { this.sendReply( `|html|
/daily [name]: shows the daily spotlight.
` + - `!daily [name]: shows the daily spotlight to everyone. Requires: + % @ # &
` + - `/setdaily [name], [image], [description]: sets the daily spotlight. Image can be left out. Requires: % @ # &
` + - `/queuedaily [name], [image], [description]: queues a daily spotlight. At midnight, the spotlight with this name will automatically switch to the next queued spotlight. Image can be left out. Requires: % @ # &
` + - `/queuedailyat [name], [queue number], [image], [description]: inserts a daily spotlight into the queue at the specified number (starting from 1). Requires: % @ # &
` + - `/replacedaily [name], [queue number], [image], [description]: replaces the daily spotlight queued at the specified number. Requires: % @ # &
` + - `/removedaily [name][, queue number]: if no queue number is provided, deletes all queued and current spotlights with the given name. If a number is provided, removes a specific future spotlight from the queue. Requires: % @ # &
` + - `/swapdaily [name], [queue number], [queue number]: swaps the two queued spotlights at the given queue numbers. Requires: % @ # &
` + + `!daily [name]: shows the daily spotlight to everyone. Requires: + % @ # ~
` + + `/setdaily [name], [image], [description]: sets the daily spotlight. Image can be left out. Requires: % @ # ~` + + `/queuedaily [name], [image], [description]: queues a daily spotlight. At midnight, the spotlight with this name will automatically switch to the next queued spotlight. Image can be left out. Requires: % @ # ~
` + + `/queuedailyat [name], [queue number], [image], [description]: inserts a daily spotlight into the queue at the specified number (starting from 1). Requires: % @ # ~
` + + `/replacedaily [name], [queue number], [image], [description]: replaces the daily spotlight queued at the specified number. Requires: % @ # ~
` + + `/removedaily [name][, queue number]: if no queue number is provided, deletes all queued and current spotlights with the given name. If a number is provided, removes a specific future spotlight from the queue. Requires: % @ # ~
` + + `/swapdaily [name], [queue number], [queue number]: swaps the two queued spotlights at the given queue numbers. Requires: % @ # ~
` + `/viewspotlights [sorter]: shows all current spotlights in the room. For staff, also shows queued spotlights.` + `[sorter] can either be unset, 'time', or 'alphabet'. These sort by either the time added, or alphabetical order.` + `
` diff --git a/server/chat-plugins/datasearch.ts b/server/chat-plugins/datasearch.ts index c4ae39dbb3b3..ab39045fc85f 100644 --- a/server/chat-plugins/datasearch.ts +++ b/server/chat-plugins/datasearch.ts @@ -180,7 +180,11 @@ export const commands: Chat.ChatCommands = { } } if (!qty) targetsBuffer.push("random1"); - + const defaultFormat = this.extractFormat(room?.settings.defaultFormat || room?.battle?.format); + if (!target.includes('mod=')) { + const dex = defaultFormat.dex; + if (dex) targetsBuffer.push(`mod=${dex.currentMod}`); + } const response = await runSearch({ target: targetsBuffer.join(","), cmd: 'randmove', @@ -227,7 +231,11 @@ export const commands: Chat.ChatCommands = { } } if (!qty) targetsBuffer.push("random1"); - + const defaultFormat = this.extractFormat(room?.settings.defaultFormat || room?.battle?.format); + if (!target.includes('mod=')) { + const dex = defaultFormat.dex; + if (dex) targetsBuffer.push(`mod=${dex.currentMod}`); + } const response = await runSearch({ target: targetsBuffer.join(","), cmd: 'randpoke', @@ -355,7 +363,7 @@ export const commands: Chat.ChatCommands = { `- zmove, max, or gmax as parameters will search for Z-Moves, Max Moves, and G-Max Moves respectively.
` + `- Move targets must be preceded with targets ; e.g. targets user searches for moves that target the user.
` + `- Valid move targets are: one ally, user or ally, one adjacent opponent, all Pokemon, all adjacent Pokemon, all adjacent opponents, user and allies, user's side, user's team, any Pokemon, opponent's side, one adjacent Pokemon, random adjacent Pokemon, scripted, and user.
` + - `- Valid flags are: allyanim, bypasssub (bypasses Substitute), bite, bullet, cantusetwice, charge, contact, dance, defrost, distance (can target any Pokemon in Triples), failcopycat, failencore, failinstruct, failmefirst, failmimic, futuremove, gravity, heal, highcrit, instruct, mefirst, mimic, mirror (reflected by Mirror Move), mustpressure, multihit, noassist, nonsky, noparentalbond, nosleeptalk, ohko, pivot, pledgecombo, powder, priority, protect, pulse, punch, recharge, recovery, reflectable, secondary, slicing, snatch, sound, and wind.
` + + `- Valid flags are: allyanim, bypasssub (bypasses Substitute), bite, bullet, cantusetwice, charge, contact, dance, defrost, distance (can target any Pokemon in Triples), failcopycat, failencore, failinstruct, failmefirst, failmimic, futuremove, gravity, heal, highcrit, instruct, metronome, mimic, mirror (reflected by Mirror Move), mustpressure, multihit, noassist, nonsky, noparentalbond, nosketch, nosleeptalk, ohko, pivot, pledgecombo, powder, priority, protect, pulse, punch, recharge, recovery, reflectable, secondary, slicing, snatch, sound, and wind.
` + `- protection as a parameter will search protection moves like Protect, Detect, etc.
` + `- A search that includes !protect will show all moves that bypass protection.
` + `
` + @@ -387,7 +395,7 @@ export const commands: Chat.ChatCommands = { if (!target) return this.parse('/help itemsearch'); target = target.slice(0, 300); const targetGen = parseInt(cmd[cmd.length - 1]); - if (targetGen) target += ` maxgen${targetGen}`; + if (targetGen) target = `maxgen${targetGen} ${target}`; const response = await runSearch({ target, @@ -543,7 +551,7 @@ export const commands: Chat.ChatCommands = { }, learnhelp: [ `/learn [ruleset], [pokemon], [move, move, ...] - Displays how the Pok\u00e9mon can learn the given moves, if it can at all.`, - `!learn [ruleset], [pokemon], [move, move, ...] - Show everyone that information. Requires: + % @ # &`, + `!learn [ruleset], [pokemon], [move, move, ...] - Show everyone that information. Requires: + % @ # ~`, `Specifying a ruleset is entirely optional. The ruleset can be a format, a generation (e.g.: gen3) or "min source gen [number]".`, `A value of 'min source gen [number]' indicates that trading (or Pokémon Bank) from generations before [number] is not allowed.`, `/learn5 displays how the Pok\u00e9mon can learn the given moves at level 5, if it can at all.`, @@ -1077,11 +1085,7 @@ function runDexsearch(target: string, cmd: string, canAll: boolean, message: str if ( species.gen <= mod.gen && ( - ( - nationalSearch && - species.isNonstandard && - !["Custom", "Glitch", "Pokestar", "Future"].includes(species.isNonstandard) - ) || + (nationalSearch && species.natDexTier !== 'Illegal') || ((species.tier !== 'Unreleased' || unreleasedSearch) && species.tier !== 'Illegal') ) && (!species.tier.startsWith("CAP") || capSearch) && @@ -1100,8 +1104,22 @@ function runDexsearch(target: string, cmd: string, canAll: boolean, message: str Object.values(search).reduce(accumulateKeyCount, 0) )); + // Prepare move validator and pokemonSource outside the hot loop + // but don't prepare them at all if there are no moves to check... + // These only ever get accessed if there are moves to filter by. + let validator; + let pokemonSource; + if (Object.values(searches).some(search => Object.keys(search.moves).length !== 0)) { + const format = Object.entries(Dex.data.Rulesets).find(([a, f]) => f.mod === usedMod)?.[1].name || 'gen9ou'; + const ruleTable = Dex.formats.getRuleTable(Dex.formats.get(format)); + const additionalRules = []; + if (nationalSearch && !ruleTable.has('standardnatdex')) additionalRules.push('standardnatdex'); + if (nationalSearch && ruleTable.valueRules.has('minsourcegen')) additionalRules.push('!!minsourcegen=3'); + validator = TeamValidator.get(`${format}${additionalRules.length ? `@@@${additionalRules.join(',')}` : ''}`); + } for (const alts of searches) { if (alts.skip) continue; + const altsMoves = Object.keys(alts.moves).map(x => mod.moves.get(x)).filter(move => move.gen <= mod.gen); for (const mon in dex) { let matched = false; if (alts.gens && Object.keys(alts.gens).length) { @@ -1131,7 +1149,7 @@ function runDexsearch(target: string, cmd: string, canAll: boolean, message: str // LC handling, checks for LC Pokemon in higher tiers that need to be handled separately, // as well as event-only Pokemon that are not eligible for LC despite being the first stage let format = Dex.formats.get('gen' + mod.gen + 'lc'); - if (!format.exists) format = Dex.formats.get('gen9lc'); + if (format.effectType !== 'Format') format = Dex.formats.get('gen9lc'); if ( alts.tiers.LC && !dex[mon].prevo && @@ -1262,20 +1280,13 @@ function runDexsearch(target: string, cmd: string, canAll: boolean, message: str } if (matched) continue; - const format = Object.entries(Dex.data.Rulesets).find(([a, f]) => f.mod === usedMod); - const formatStr = format ? format[1].name : 'gen9ou'; - const ruleTable = Dex.formats.getRuleTable(Dex.formats.get(formatStr)); - const additionalRules = []; - if (nationalSearch && !ruleTable.has('standardnatdex')) additionalRules.push('standardnatdex'); - if (nationalSearch && ruleTable.valueRules.has('minsourcegen')) additionalRules.push('!!minsourcegen=3'); - const validator = TeamValidator.get(`${formatStr}${additionalRules.length ? `@@@${additionalRules.join(',')}` : ''}`); - const pokemonSource = validator.allSources(); - for (const move of Object.keys(alts.moves).map(x => mod.moves.get(x))) { - if (move.gen <= mod.gen && !validator.checkCanLearn(move, dex[mon], pokemonSource) === alts.moves[move.id]) { + for (const move of altsMoves) { + pokemonSource = validator?.allSources(); + if (validator && !validator.checkCanLearn(move, dex[mon], pokemonSource) === alts.moves[move.id]) { matched = true; break; } - if (!pokemonSource.size()) break; + if (pokemonSource && !pokemonSource.size()) break; } if (matched) continue; @@ -1380,8 +1391,9 @@ function runMovesearch(target: string, cmd: string, canAll: boolean, message: st const allProperties = ['basePower', 'accuracy', 'priority', 'pp']; const allFlags = [ 'allyanim', 'bypasssub', 'bite', 'bullet', 'cantusetwice', 'charge', 'contact', 'dance', 'defrost', 'distance', 'failcopycat', 'failencore', - 'failinstruct', 'failmefirst', 'failmimic', 'futuremove', 'gravity', 'heal', 'mirror', 'mustpressure', 'noassist', 'nonsky', 'noparentalbond', - 'nosleeptalk', 'pledgecombo', 'powder', 'protect', 'pulse', 'punch', 'recharge', 'reflectable', 'slicing', 'snatch', 'sound', 'wind', + 'failinstruct', 'failmefirst', 'failmimic', 'futuremove', 'gravity', 'heal', 'metronome', 'mirror', 'mustpressure', 'noassist', 'nonsky', + 'noparentalbond', 'nosketch', 'nosleeptalk', 'pledgecombo', 'powder', 'protect', 'pulse', 'punch', 'recharge', 'reflectable', 'slicing', + 'snatch', 'sound', 'wind', // Not flags directly from move data, but still useful to sort by 'highcrit', 'multihit', 'ohko', 'protection', 'secondary', @@ -1811,7 +1823,8 @@ function runMovesearch(target: string, cmd: string, canAll: boolean, message: st if (move.gen <= mod.gen) { if ( (!nationalSearch && move.isNonstandard && move.isNonstandard !== "Gigantamax") || - (nationalSearch && move.isNonstandard && !["Gigantamax", "Past"].includes(move.isNonstandard)) + (nationalSearch && move.isNonstandard && !["Gigantamax", "Past", "Unobtainable"].includes(move.isNonstandard)) || + (move.isMax && mod.gen !== 8) ) { continue; } else { @@ -2564,7 +2577,7 @@ function runLearn(target: string, cmd: string, canAll: boolean, formatid: string while (targets.length) { const targetid = toID(targets[0]); if (targetid === 'pentagon') { - if (format.exists) { + if (format.effectType === 'Format') { return {error: "'pentagon' can't be used with formats."}; } minSourceGen = 6; @@ -2572,7 +2585,7 @@ function runLearn(target: string, cmd: string, canAll: boolean, formatid: string continue; } if (targetid.startsWith('minsourcegen')) { - if (format.exists) { + if (format.effectType === 'Format') { return {error: "'min source gen' can't be used with formats."}; } minSourceGen = parseInt(targetid.slice(12)); @@ -2588,14 +2601,15 @@ function runLearn(target: string, cmd: string, canAll: boolean, formatid: string break; } let gen; - if (!format.exists) { + if (format.effectType !== 'Format') { + if (!(formatid in Dex.dexes)) { + // can happen if you hotpatch formats without hotpatching chat + return {error: `"${formatid}" is not a supported format.`}; + } const dex = Dex.mod(formatid).includeData(); - // can happen if you hotpatch formats without hotpatching chat - if (!dex) return {error: `"${formatid}" is not a supported format.`}; - gen = dex.gen; formatName = `Gen ${gen}`; - format = new Dex.Format({mod: formatid}); + format = new Dex.Format({mod: formatid, effectType: 'Format', exists: true}); const ruleTable = dex.formats.getRuleTable(format); if (minSourceGen) { formatName += ` (Min Source Gen = ${minSourceGen})`; diff --git a/server/chat-plugins/friends.ts b/server/chat-plugins/friends.ts index 53cfe28aacb5..d8d43c8a2520 100644 --- a/server/chat-plugins/friends.ts +++ b/server/chat-plugins/friends.ts @@ -58,7 +58,7 @@ export const Friends = new class { for (const f of friends) { const curUser = Users.getExact(f.friend); if (curUser?.settings.allowFriendNotifications) { - curUser.send(`|pm|&|${curUser.getIdentity()}|${message}`); + curUser.send(`|pm|~|${curUser.getIdentity()}|${message}`); } } } @@ -145,9 +145,7 @@ export const Friends = new class { buf += `On an alternate account
`; } if (login && typeof login === 'number' && !user?.connected) { - // THIS IS A TERRIBLE HACK BUT IT WORKS OKAY - const time = Chat.toTimestamp(new Date(Number(login)), {human: true}); - buf += `Last seen: ${time.split(' ').reverse().join(', on ')}`; + buf += `Last seen: `; buf += ` (${Chat.toDurationString(Date.now() - login, {precision: 1})} ago)`; } else if (typeof login === 'string') { buf += `${login}`; diff --git a/server/chat-plugins/github.ts b/server/chat-plugins/github.ts index 3acd015a17de..3239dbac4d3d 100644 --- a/server/chat-plugins/github.ts +++ b/server/chat-plugins/github.ts @@ -238,11 +238,11 @@ export const commands: Chat.ChatCommands = { }, }, githubhelp: [ - `/github ban [username], [reason] - Bans a GitHub user from having their GitHub actions reported to Dev room. Requires: % @ # &`, - `/github unban [username] - Unbans a GitHub user from having their GitHub actions reported to Dev room. Requires: % @ # &`, - `/github bans - Lists all GitHub users that are currently gitbanned. Requires: % @ # &`, - `/github setname [username], [name] - Sets a GitHub user's name on reported GitHub actions to be [name]. Requires: % @ # &`, - `/github clearname [username] - Removes a GitHub user's name from the GitHub username list. Requires: % @ # &`, + `/github ban [username], [reason] - Bans a GitHub user from having their GitHub actions reported to Dev room. Requires: % @ # ~`, + `/github unban [username] - Unbans a GitHub user from having their GitHub actions reported to Dev room. Requires: % @ # ~`, + `/github bans - Lists all GitHub users that are currently gitbanned. Requires: % @ # ~`, + `/github setname [username], [name] - Sets a GitHub user's name on reported GitHub actions to be [name]. Requires: % @ # ~`, + `/github clearname [username] - Removes a GitHub user's name from the GitHub username list. Requires: % @ # ~`, `/github names - Lists all GitHub usernames that are currently on our list.`, ], }; diff --git a/server/chat-plugins/hangman.ts b/server/chat-plugins/hangman.ts index f7d17561bf17..ecc9c3cf2b07 100644 --- a/server/chat-plugins/hangman.ts +++ b/server/chat-plugins/hangman.ts @@ -45,6 +45,7 @@ try { const maxMistakes = 6; export class Hangman extends Rooms.SimpleRoomGame { + override readonly gameid = 'hangman' as ID; gameNumber: number; creator: ID; word: string; @@ -69,7 +70,6 @@ export class Hangman extends Rooms.SimpleRoomGame { this.gameNumber = room.nextGameNumber(); - this.gameid = 'hangman' as ID; this.title = 'Hangman'; this.creator = user.id; this.word = word; @@ -341,7 +341,7 @@ export const commands: Chat.ChatCommands = { this.modlog('HANGMAN'); return this.addModAction(`A game of hangman was started by ${user.name} – use /guess to play!`); }, - createhelp: ["/hangman create [word], [hint] - Makes a new hangman game. Requires: % @ # &"], + createhelp: ["/hangman create [word], [hint] - Makes a new hangman game. Requires: % @ # ~"], guess(target, room, user) { const word = this.filter(target); @@ -363,7 +363,7 @@ export const commands: Chat.ChatCommands = { this.modlog('ENDHANGMAN'); return this.privateModAction(`The game of hangman was ended by ${user.name}.`); }, - endhelp: ["/hangman end - Ends the game of hangman before the man is hanged or word is guessed. Requires: % @ # &"], + endhelp: ["/hangman end - Ends the game of hangman before the man is hanged or word is guessed. Requires: % @ # ~"], disable(target, room, user) { room = this.requireRoom(); @@ -553,20 +553,20 @@ export const commands: Chat.ChatCommands = { hangmanhelp: [ `/hangman allows users to play the popular game hangman in PS rooms.`, `Accepts the following commands:`, - `/hangman create [word], [hint] - Makes a new hangman game. Requires: % @ # &`, + `/hangman create [word], [hint] - Makes a new hangman game. Requires: % @ # ~`, `/hangman guess [letter] - Makes a guess for the letter entered.`, `/hangman guess [word] - Same as a letter, but guesses an entire word.`, `/hangman display - Displays the game.`, - `/hangman end - Ends the game of hangman before the man is hanged or word is guessed. Requires: % @ # &`, - `/hangman [enable/disable] - Enables or disables hangman from being started in a room. Requires: # &`, + `/hangman end - Ends the game of hangman before the man is hanged or word is guessed. Requires: % @ # ~`, + `/hangman [enable/disable] - Enables or disables hangman from being started in a room. Requires: # ~`, `/hangman random [tag]- Runs a random hangman, if the room has any added. `, - `If a tag is given, randomizes from only terms with those tags. Requires: % @ # &`, - `/hangman addrandom [word], [...hints] - Adds an entry for [word] with the [hints] provided to the room's hangman pool. Requires: % @ # &`, + `If a tag is given, randomizes from only terms with those tags. Requires: % @ # ~`, + `/hangman addrandom [word], [...hints] - Adds an entry for [word] with the [hints] provided to the room's hangman pool. Requires: % @ # ~`, `/hangman removerandom [word][, hints] - Removes data from the hangman entry for [word]. If hints are given, removes only those hints.` + - ` Otherwise it removes the entire entry. Requires: % @ & #`, - `/hangman addtag [word], [...tags] - Adds tags to the hangman term matching [word]. Requires: % @ & #`, + ` Otherwise it removes the entire entry. Requires: % @ ~ #`, + `/hangman addtag [word], [...tags] - Adds tags to the hangman term matching [word]. Requires: % @ ~ #`, `/hangman untag [term][, ...tags] - Removes tags from the hangman [term]. If tags are given, removes only those tags. Requires: % @ # * `, - `/hangman terms - Displays all random hangman in a room. Requires: % @ # &`, + `/hangman terms - Displays all random hangman in a room. Requires: % @ # ~`, ], }; diff --git a/server/chat-plugins/helptickets-auto.ts b/server/chat-plugins/helptickets-auto.ts index 1515c49eec71..9f8e56988ba4 100644 --- a/server/chat-plugins/helptickets-auto.ts +++ b/server/chat-plugins/helptickets-auto.ts @@ -122,7 +122,7 @@ export function globalModlog(action: string, user: User | ID | null, note: strin } export function addModAction(message: string) { - Rooms.get('staff')?.add(`|c|&|/log ${message}`).update(); + Rooms.get('staff')?.add(`|c|~|/log ${message}`).update(); } export async function getModlog(params: {user?: ID, ip?: string, actions?: string[]}) { @@ -518,7 +518,7 @@ export async function runPunishments(ticket: TicketState & {text: [string, strin ticket.recommended = []; for (const res of result.values()) { Rooms.get('abuselog')?.add( - `|c|&|/log [${ticket.type} Monitor] Recommended: ${res.action}: for ${res.user} (${res.reason})` + `|c|~|/log [${ticket.type} Monitor] Recommended: ${res.action}: for ${res.user} (${res.reason})` ).update(); ticket.recommended.push(`${res.action}: for ${res.user} (${res.reason})`); } @@ -719,11 +719,11 @@ export const commands: Chat.ChatCommands = { }, }, autohelptickethelp: [ - `/aht addpunishment [args] - Adds a punishment with the given [args]. Requires: whitelist &`, - `/aht deletepunishment [index] - Deletes the automatic helpticket punishment at [index]. Requires: whitelist &`, - `/aht viewpunishments - View automatic helpticket punishments. Requires: whitelist &`, - `/aht togglepunishments [on | off] - Turn [on | off] automatic helpticket punishments. Requires: whitelist &`, - `/aht stats - View success rates of the Artemis ticket handler. Requires: whitelist &`, + `/aht addpunishment [args] - Adds a punishment with the given [args]. Requires: whitelist ~`, + `/aht deletepunishment [index] - Deletes the automatic helpticket punishment at [index]. Requires: whitelist ~`, + `/aht viewpunishments - View automatic helpticket punishments. Requires: whitelist ~`, + `/aht togglepunishments [on | off] - Turn [on | off] automatic helpticket punishments. Requires: whitelist ~`, + `/aht stats - View success rates of the Artemis ticket handler. Requires: whitelist ~`, ], }; @@ -786,7 +786,7 @@ export const pages: Chat.PageTable = { data += `${cur.successes} (${percent(cur.successes, cur.total)}%)`; if (cur.failures) { data += ` | ${cur.failures} (${percent(cur.failures, cur.total)}%)`; - } else { // so one cannot confuse dead tickets & false hit tickets + } else { // so one cannot confuse dead tickets ~ false hit tickets data += ' | 0 (0%)'; } data += ''; diff --git a/server/chat-plugins/helptickets.ts b/server/chat-plugins/helptickets.ts index 62200ac7bbb4..57bf3935eb35 100644 --- a/server/chat-plugins/helptickets.ts +++ b/server/chat-plugins/helptickets.ts @@ -169,48 +169,41 @@ export function writeStats(line: string) { const date = new Date(); const month = Chat.toTimestamp(date).split(' ')[0].split('-', 2).join('-'); try { - FS(`logs/tickets/${month}.tsv`).appendSync(line + '\n'); + Monitor.logPath(`tickets/${month}.tsv`).appendSync(line + '\n'); } catch (e: any) { if (e.code !== 'ENOENT') throw e; } } export class HelpTicket extends Rooms.SimpleRoomGame { - room: ChatRoom; + override readonly gameid = "helpticket" as ID; + override readonly allowRenames = true; + override room: ChatRoom; ticket: TicketState; claimQueue: string[]; - involvedStaff: Set; + involvedStaff = new Set(); createTime: number; activationTime: number; - emptyRoom: boolean; - firstClaimTime: number; - unclaimedTime: number; + emptyRoom = false; + firstClaimTime = 0; + unclaimedTime = 0; lastUnclaimedStart: number; - closeTime: number; - resolution: 'unknown' | 'dead' | 'unresolved' | 'resolved'; - result: TicketResult | null; + closeTime = 0; + resolution: 'unknown' | 'dead' | 'unresolved' | 'resolved' = 'unknown'; + result: TicketResult | null = null; constructor(room: ChatRoom, ticket: TicketState) { super(room); this.room = room; this.room.settings.language = Users.get(ticket.creator)?.language || 'english' as ID; this.title = `Help Ticket - ${ticket.type}`; - this.gameid = "helpticket" as ID; - this.allowRenames = true; this.ticket = ticket; this.claimQueue = []; /* Stats */ - this.involvedStaff = new Set(); this.createTime = Date.now(); this.activationTime = (ticket.active ? this.createTime : 0); - this.emptyRoom = false; - this.firstClaimTime = 0; - this.unclaimedTime = 0; this.lastUnclaimedStart = (ticket.active ? this.createTime : 0); - this.closeTime = 0; - this.resolution = 'unknown'; - this.result = null; } onJoin(user: User, connection: Connection) { @@ -293,8 +286,8 @@ export class HelpTicket extends Rooms.SimpleRoomGame { if ( (!user.isStaff || this.ticket.userid === user.id) && (message.length < 3 || blockedMessages.includes(toID(message))) ) { - this.room.add(`|c|&Staff|${this.room.tr`Hello! The global staff team would be happy to help you, but you need to explain what's going on first.`}`); - this.room.add(`|c|&Staff|${this.room.tr`Please post the information I requested above so a global staff member can come to help.`}`); + this.room.add(`|c|~Staff|${this.room.tr`Hello! The global staff team would be happy to help you, but you need to explain what's going on first.`}`); + this.room.add(`|c|~Staff|${this.room.tr`Please post the information I requested above so a global staff member can come to help.`}`); this.room.update(); return false; } @@ -303,11 +296,11 @@ export class HelpTicket extends Rooms.SimpleRoomGame { this.activationTime = Date.now(); if (!this.ticket.claimed) this.lastUnclaimedStart = Date.now(); notifyStaff(); - this.room.add(`|c|&Staff|${this.room.tr`Thank you for the information, global staff will be here shortly. Please stay in the room.`}`).update(); + this.room.add(`|c|~Staff|${this.room.tr`Thank you for the information, global staff will be here shortly. Please stay in the room.`}`).update(); switch (this.ticket.type) { case 'PM Harassment': this.room.add( - `|c|&Staff|Global staff might take more than a few minutes to handle your report. ` + + `|c|~Staff|Global staff might take more than a few minutes to handle your report. ` + `If you are being disturbed by another user, you can type \`\`/ignore [username]\`\` in any chat to ignore their messages immediately` ).update(); break; @@ -318,7 +311,7 @@ export class HelpTicket extends Rooms.SimpleRoomGame { forfeit(user: User) { if (!(user.id in this.playerTable)) return; - this.removePlayer(user); + this.removePlayer(this.playerTable[user.id]); if (!this.ticket.open) return; this.room.modlog({action: 'TICKETABANDON', isGlobal: false, loggedBy: user.id}); this.addText(`${user.name} is no longer interested in this ticket.`, user); @@ -477,15 +470,11 @@ export class HelpTicket extends Rooms.SimpleRoomGame { } this.room.game = null; - // @ts-ignore - this.room = null; - for (const player of this.players) { - player.destroy(); - } - // @ts-ignore - this.players = null; - // @ts-ignore - this.playerTable = null; + (this.room as any) = null; + this.setEnded(); + for (const player of this.players) player.destroy(); + (this.players as any) = null; + (this.playerTable as any) = null; } onChatMessage(message: string, user: User) { HelpTicket.uploadReplaysFrom(message, user, user.connections[0]); @@ -517,7 +506,7 @@ export class HelpTicket extends Rooms.SimpleRoomGame { recommended: ticket.recommended, }; const date = Chat.toTimestamp(new Date()).split(' ')[0]; - void FS(`logs/tickets/${date.slice(0, -3)}.jsonl`).append(JSON.stringify(entry) + '\n'); + void Monitor.logPath(`tickets/${date.slice(0, -3)}.jsonl`).append(JSON.stringify(entry) + '\n'); } /** @@ -543,7 +532,7 @@ export class HelpTicket extends Rooms.SimpleRoomGame { let lines; try { lines = await ProcessManager.exec([ - `rg`, FS(`logs/tickets/${date ? `${date}.jsonl` : ''}`).path, ...args, + `rg`, Monitor.logPath(`tickets/${date ? `${date}.jsonl` : ''}`).path, ...args, ]); } catch (e: any) { if (e.message.includes('No such file or directory')) { @@ -563,7 +552,7 @@ export class HelpTicket extends Rooms.SimpleRoomGame { } } else { if (!date) throw new Chat.ErrorMessage(`Specify a month.`); - const path = FS(`logs/tickets/${date}.jsonl`); + const path = Monitor.logPath(`tickets/${date}.jsonl`); if (!path.existsSync()) { throw new Chat.ErrorMessage(`There are no logs for the month "${date}".`); } @@ -714,12 +703,12 @@ export class HelpTicket extends Rooms.SimpleRoomGame { const {result, time, by, seen, note} = ticket.resolved as ResolvedTicketInfo; if (seen) return; const timeString = (Date.now() - time) > 1000 ? `, ${Chat.toDurationString(Date.now() - time)} ago.` : '.'; - user.send(`|pm|&Staff|${user.getIdentity()}|Hello! Your report was resolved by ${by}${timeString}`); + user.send(`|pm|~Staff|${user.getIdentity()}|Hello! Your report was resolved by ${by}${timeString}`); if (result?.trim()) { - user.send(`|pm|&Staff|${user.getIdentity()}|The result was "${result}"`); + user.send(`|pm|~Staff|${user.getIdentity()}|The result was "${result}"`); } if (note?.trim()) { - user.send(`|pm|&Staff|${user.getIdentity()}|/raw ${note}`); + user.send(`|pm|~Staff|${user.getIdentity()}|/raw ${note}`); } tickets[userid].resolved!.seen = true; writeTickets(); @@ -770,7 +759,7 @@ function notifyUnclaimedTicket(hasAssistRequest: boolean) { if (ticket.needsDelayWarning && !ticket.claimed && delayWarnings[ticket.type]) { ticketRoom.add( - `|c|&Staff|${ticketRoom.tr(delayWarningPreamble)}${ticketRoom.tr(delayWarnings[ticket.type])}` + `|c|~Staff|${ticketRoom.tr(delayWarningPreamble)}${ticketRoom.tr(delayWarnings[ticket.type])}` ).update(); ticket.needsDelayWarning = false; } @@ -920,13 +909,9 @@ export async function getOpponent(link: string, submitter: ID): Promise { const battleRoom = Rooms.get(battle); const seenPokemon = new Set(); - if (battleRoom && battleRoom.type !== 'chat') { - const playerTable: Partial = {}; - const monTable: BattleInfo['pokemon'] = {}; - // i kinda hate this, but this will always be accurate to the battle players. - // consulting room.battle.playerTable might be invalid (if battle is over), etc. - for (const line of battleRoom.log.log) { - // |switch|p2a: badnite|Dragonite, M|323/323 - if (line.startsWith('|switch|')) { // name cannot have been seen until it switches in + let data: {log: string, players: string[]} | null = null; + // try battle room first + if (battleRoom && battleRoom.type !== 'chat' && battleRoom.battle) { + data = { + log: battleRoom.log.log.join('\n'), + players: battleRoom.battle.players.map(x => x.id), + }; + } else { // fall back to replay + if (noReplay) return null; + battle = battle.replace(`battle-`, ''); // don't wanna strip passwords + + if (Rooms.Replays.db) { // direct conn exists, use it + if (battle.endsWith('pw')) { + battle = battle.slice(0, battle.lastIndexOf("-", battle.length - 2)); + } + data = await Rooms.Replays.get(battle); + } else { + // call out to API + try { + const raw = await Net(`https://${Config.routes.replays}/${battle}.json`).get(); + data = JSON.parse(raw); + } catch {} + } + } + + // parse + if (data?.log?.length) { + const log = data.log.split('\n'); + const players: BattleInfo['players'] = {} as any; + for (const [i, id] of data.players.entries()) { + players[`p${i + 1}` as SideID] = toID(id); + } + const chat = []; + const mons: BattleInfo['pokemon'] = {}; + for (const line of log) { + if (line.startsWith('|c|')) { + chat.push(line); + } else if (line.startsWith('|switch|')) { const [, , playerWithNick, speciesWithGender] = line.split('|'); - let [slot, name] = playerWithNick.split(':'); const species = speciesWithGender.split(',')[0].trim(); // should always exist + let [slot, name] = playerWithNick.split(':'); slot = slot.slice(0, -1); // p2a -> p2 - if (!monTable[slot]) monTable[slot] = []; - const identifier = `${name || ""}-${species}`; - if (seenPokemon.has(identifier)) continue; - // technically, if several mons have the same name and species, this will ignore them. - // BUT if they have the same name and species we only need to see it once - // so it doesn't matter - seenPokemon.add(identifier); + // safe to not check here bc this should always exist in the players table. + // if it doesn't, there's a problem + const id = players[slot as SideID] as string; + if (!mons[id]) mons[id] = []; name = name?.trim() || ""; - monTable[slot].push({ - species, - name: species === name ? undefined : name, + const setId = `${name || ""}-${species}`; + if (seenPokemon.has(setId)) continue; + seenPokemon.add(setId); + mons[id].push({ + species, // don't want to see a name if it's the same as the species + name: name === species ? undefined : name, }); } - if (line.startsWith('|player|')) { - // |player|p1|Mia|miapi.png|1000 - const [, , playerSlot, name] = line.split('|'); - playerTable[playerSlot as SideID] = toID(name); - } - for (const k in monTable) { - // SideID => userID, cannot do conversion at time of collection - // because the playerID => userid mapping might not be there. - // strictly, yes it will, but this is for maximum safety. - const userid = playerTable[k as SideID]; - if (userid) { - monTable[userid] = monTable[k]; - delete monTable[k]; - } - } } return { - log: battleRoom.log.log.filter(k => k.startsWith('|c|')), - title: battleRoom.title, - url: `/${battle}`, - players: playerTable as BattleInfo['players'], - pokemon: monTable, + log: chat, + title: `${players.p1} vs ${players.p2}`, + url: `https://${Config.routes.replays}/${battle}`, + players, + pokemon: mons, }; } - if (noReplay) return null; - battle = battle.replace(`battle-`, ''); // don't wanna strip passwords - try { - const raw = await Net(`https://${Config.routes.replays}/${battle}.json`).get(); - const data = JSON.parse(raw); - if (data.log?.length) { - const log = data.log.split('\n'); - const players = { - p1: toID(data.p1), - p2: toID(data.p2), - p3: toID(data.p3), - p4: toID(data.p4), - }; - const chat = []; - const mons: BattleInfo['pokemon'] = {}; - for (const line of log) { - if (line.startsWith('|c|')) { - chat.push(line); - } else if (line.startsWith('|switch|')) { - const [, , playerWithNick, speciesWithGender] = line.split('|'); - const species = speciesWithGender.split(',')[0].trim(); // should always exist - let [slot, name] = playerWithNick.split(':'); - slot = slot.slice(0, -1); // p2a -> p2 - // safe to not check here bc this should always exist in the players table. - // if it doesn't, there's a problem - const id = players[slot as SideID]; - if (!mons[id]) mons[id] = []; - name = name?.trim() || ""; - const setId = `${name || ""}-${species}`; - if (seenPokemon.has(setId)) continue; - seenPokemon.add(setId); - mons[id].push({ - species, // don't want to see a name if it's the same as the species - name: name === species ? undefined : name, - }); - } - } - return { - log: chat, - title: `${data.p1} vs ${data.p2}`, - url: `https://${Config.routes.replays}/${battle}`, - players, - pokemon: mons, - }; - } - } catch {} return null; } @@ -1205,7 +1159,7 @@ export const textTickets: {[k: string]: TextTicketInfo} = { ]; const tar = toID(ticket.text[0]); // should always be the reported userid const name = Utils.escapeHTML(Users.getExact(tar)?.name || tar); - buf += `
Reported user: ${name} `; + buf += `
Reported user: ${name} `; buf += `
`; buf += `
`; buf += `Punish ${name} (reported user)`; @@ -1350,30 +1304,28 @@ export const textTickets: {[k: string]: TextTicketInfo} = { buf += `

Battle links given:

`; links = links.filter((url, i) => links.indexOf(url) === i); buf += links.map(uri => Chat.formatText(`<<${uri}>>`)).join(', '); - const battleRooms = links.map(r => Rooms.get(r)).filter(room => room?.battle) as GameRoom[]; - if (battleRooms.length) { - buf += `

Names in given battles:
`; - for (const room of battleRooms) { - const names = []; - for (const id in room.battle!.playerTable) { - const user = Users.get(id); - if (!user) continue; - const team = await room.battle!.getTeam(user); - if (team) { - const teamNames = team.map(p => ( - p.name !== p.species ? Utils.html`${p.name} (${p.species})` : p.species - )); - names.push(`${user.id}: ${teamNames.join(', ')}`); - } - } - if (names.length) { - buf += `${room.title}
`; - buf += names.join('
'); - buf += `
`; + buf += `
Names in given battles:
`; + for (const link of links) { + const names = []; + const roomData = await getBattleLog(link); + if (!roomData) continue; + for (const id of Object.values(roomData.players)) { + const user = Users.get(id)?.name || id; + const team = roomData.pokemon[id]; + if (team) { + const teamNames = team.map(p => ( + p.name !== p.species ? Utils.html`${p.name} (${p.species})` : p.species + )); + names.push(`${user}: ${teamNames.join(', ')}`); } } - buf += `
`; + if (names.length) { + buf += `${roomData.title}
`; + buf += names.join('
'); + buf += `
`; + } } + buf += `
`; return buf; }, onSubmit(ticket, text, submitter, conn) { @@ -1445,6 +1397,12 @@ export const textTickets: {[k: string]: TextTicketInfo} = { if (!(user.locked || user.namelocked || user.semilocked)) { return ['You are not punished.']; } + if (!user.registered) { + return [ + "Because this account isn't registered (with a password), we cannot verify your identity.", + "Please come back with a different account you've registered in the past.", + ]; + } const punishments = Punishments.search(user.id); const userids = [user.id, ...user.previousIDs]; @@ -1726,11 +1684,8 @@ export const pages: Chat.PageTable = { buf += `

`; break; case 'password': - buf += `

Password resets are currently closed to regular users due to policy revamp and administrative backlog.

`; - buf += `

Users with a public room auth (Voice or higher) and Smogon badgeholders can still get their passwords reset `; - buf += `(see this post for more informations).

`; - buf += `

To those who do not belong to those groups, we apologize for the temporary inconvenience.

`; - buf += `

Thanks for your understanding!

`; + buf += `

If you need your Pokémon Showdown password reset, you can fill out a Password Reset Form.

`; + buf += `

You will need to make a Smogon account to be able to fill out a form.`; break; case 'roomhelp': buf += `

${this.tr`If you are a room driver or up in a public room, and you need help watching the chat, one or more global staff members would be happy to assist you!`}

`; @@ -1883,10 +1838,7 @@ export const pages: Chat.PageTable = { logUrl = `/view-chatlog-help-${ticket.userid}--${Chat.toTimestamp(created).split(' ')[0]}`; } const room = Rooms.get(roomid); - if (room) { - const ticketGame = room.getGame(HelpTicket)!; - buf += ` `; - } else if (ticket.text) { + if (ticket.text) { let title = Object.entries(ticket.notes || {}) .map(([userid, note]) => Utils.html`${note} (by ${userid})`) .join(' '); @@ -1894,6 +1846,9 @@ export const pages: Chat.PageTable = { title = `title="Staff notes: ${title}"`; } buf += `${ticket.claimed ? `Claim` : `View`}`; + } else if (room) { + const ticketGame = room.getGame(HelpTicket)!; + buf += ` `; } if (logUrl) { buf += ``; @@ -1971,7 +1926,15 @@ export const pages: Chat.PageTable = { for (const staff in ticket.notes) { buf += Utils.html`

${ticket.notes[staff]} (by ${staff})

`; } + buf += `
`; + buf += `Add note: `; + buf += `
`; buf += `
`; + } else { + buf += `
`; + buf += `
`; + buf += `Add note: `; + buf += `
`; } if (!ticket.resolved) { @@ -2092,7 +2055,7 @@ export const pages: Chat.PageTable = { } const dateUrl = Chat.toTimestamp(date).split(' ')[0].split('-', 2).join('-'); - const rawTicketStats = FS(`logs/tickets/${dateUrl}.tsv`).readIfExistsSync(); + const rawTicketStats = Monitor.logPath(`tickets/${dateUrl}.tsv`).readIfExistsSync(); if (!rawTicketStats) return `

${this.tr`No ticket stats found.`}
`; // Calculate next/previous month for stats and validate stats exist for the month @@ -2118,13 +2081,13 @@ export const pages: Chat.PageTable = { const nextString = Chat.toTimestamp(nextDate).split(' ')[0].split('-', 2).join('-'); let buttonBar = ''; - if (FS(`logs/tickets/${prevString}.tsv`).readIfExistsSync()) { + if (Monitor.logPath(`tickets/${prevString}.tsv`).readIfExistsSync()) { buttonBar += `< ${this.tr`Previous Month`}`; } else { buttonBar += `< ${this.tr`Previous Month`}`; } buttonBar += `${this.tr`Ticket Stats`} ${this.tr`Staff Stats`}`; - if (FS(`logs/tickets/${nextString}.tsv`).readIfExistsSync()) { + if (Monitor.logPath(`tickets/${nextString}.tsv`).readIfExistsSync()) { buttonBar += `${this.tr`Next Month`} >`; } else { buttonBar += `${this.tr`Next Month`} >`; @@ -2380,7 +2343,7 @@ export const commands: Chat.ChatCommands = { const validation = await textTicket.checker?.(text, contextString || '', ticket.type, user, reportTarget); if (Array.isArray(validation) && validation.length) { this.parse(`/join view-${pageId}`); - return this.popupReply(`|html|` + validation.join('||')); + return this.popupReply(`|html|` + validation.join('
')); } ticket.text = [text, contextString]; ticket.active = true; @@ -2509,7 +2472,7 @@ export const commands: Chat.ChatCommands = { break; } if (context) { - helpRoom.add(`|c|&Staff|${this.tr(context)}`); + helpRoom.add(`|c|~Staff|${this.tr(context)}`); helpRoom.update(); } if (pmRequestButton) { @@ -2578,7 +2541,7 @@ export const commands: Chat.ChatCommands = { this.checkCan('lock'); return this.parse('/join view-help-tickets'); }, - listhelp: [`/helpticket list - Lists all tickets. Requires: % @ &`], + listhelp: [`/helpticket list - Lists all tickets. Requires: % @ ~`], inapnames: 'massview', usernames: 'massview', @@ -2597,7 +2560,7 @@ export const commands: Chat.ChatCommands = { this.checkCan('lock'); return this.parse('/join view-help-stats'); }, - statshelp: [`/helpticket stats - List the stats for help tickets. Requires: % @ &`], + statshelp: [`/helpticket stats - List the stats for help tickets. Requires: % @ ~`], note: 'addnote', addnote(target, room, user) { @@ -2621,10 +2584,8 @@ export const commands: Chat.ChatCommands = { this.globalModlog(`HELPTICKET NOTE`, ticket.userid, note); }, addnotehelp: [ - `/helpticket note [ticket userid], [note] - Adds a note to the [ticket], to be displayed in the hover text.`, - `Requires: % @ &`, + `/helpticket note [ticket userid], [note] - Adds a note to the [ticket], to be displayed in the hover text. Requires: % @ ~`, ], - removenote(target, room, user) { this.checkCan('lock'); target = target.trim(); @@ -2654,7 +2615,7 @@ export const commands: Chat.ChatCommands = { removenotehelp: [ `/helpticket removenote [ticket userid], [staff] - Removes a note from the [ticket].`, `If a [staff] userid is given, removes the note from that staff member (defaults to your userid).`, - `Requires: % @ &`, + `Requires: % @ ~`, ], ar: 'addresponse', @@ -2685,7 +2646,7 @@ export const commands: Chat.ChatCommands = { }, addresponsehelp: [ `/helpticket addresponse [type], [name], [response] - Adds a [response] button to the given ticket [type] with the given [name].`, - `Requires: % @ &`, + `Requires: % @ ~`, ], rr: 'removeresponse', @@ -2710,7 +2671,7 @@ export const commands: Chat.ChatCommands = { }, removeresponsehelp: [ `/helpticket removeresponse [type], [name] - Removes the response button with the given [name] from the given ticket [type].`, - `Requires: % @ &`, + `Requires: % @ ~`, ], lr: 'listresponses', @@ -2736,7 +2697,7 @@ export const commands: Chat.ChatCommands = { }, listresponseshelp: [ `/helpticket listresponses [optional type] - List current response buttons for text tickets. `, - `If a [type] is given, lists responses only for that type. Requires: % @ &`, + `If a [type] is given, lists responses only for that type. Requires: % @ ~`, ], close(target, room, user) { @@ -2771,7 +2732,7 @@ export const commands: Chat.ChatCommands = { ticket.claimed = user.name; this.sendReply(`You closed ${ticket.creator}'s ticket.`); }, - closehelp: [`/helpticket close [user] - Closes an open ticket. Requires: % @ &`], + closehelp: [`/helpticket close [user] - Closes an open ticket. Requires: % @ ~`], tb: 'ban', ticketban: 'ban', @@ -2870,7 +2831,7 @@ export const commands: Chat.ChatCommands = { notifyStaff(); return true; }, - banhelp: [`/helpticket ban [user], (reason) - Bans a user from creating tickets for 2 days. Requires: % @ &`], + banhelp: [`/helpticket ban [user], (reason) - Bans a user from creating tickets for 2 days. Requires: % @ ~`], unticketban: 'unban', unban(target, room, user) { @@ -2889,7 +2850,7 @@ export const commands: Chat.ChatCommands = { this.globalModlog("UNTICKETBAN", toID(target)); Users.get(target)?.popup(`${user.name} has ticket unbanned you.`); }, - unbanhelp: [`/helpticket unban [user] - Ticket unbans a user. Requires: % @ &`], + unbanhelp: [`/helpticket unban [user] - Ticket unbans a user. Requires: % @ ~`], ignore(target, room, user) { this.checkCan('lock'); @@ -2900,7 +2861,7 @@ export const commands: Chat.ChatCommands = { user.update(); this.sendReply(this.tr`You are now ignoring help ticket notifications.`); }, - ignorehelp: [`/helpticket ignore - Ignore notifications for unclaimed help tickets. Requires: % @ &`], + ignorehelp: [`/helpticket ignore - Ignore notifications for unclaimed help tickets. Requires: % @ ~`], unignore(target, room, user) { this.checkCan('lock'); @@ -2911,7 +2872,7 @@ export const commands: Chat.ChatCommands = { user.update(); this.sendReply(this.tr`You will now receive help ticket notifications.`); }, - unignorehelp: [`/helpticket unignore - Stop ignoring notifications for help tickets. Requires: % @ &`], + unignorehelp: [`/helpticket unignore - Stop ignoring notifications for help tickets. Requires: % @ ~`], delete(target, room, user) { // This is a utility only to be used if something goes wrong @@ -2929,7 +2890,7 @@ export const commands: Chat.ChatCommands = { } this.sendReply(this.tr`You deleted ${target}'s ticket.`); }, - deletehelp: [`/helpticket delete [user] - Deletes a user's ticket. Requires: &`], + deletehelp: [`/helpticket delete [user] - Deletes a user's ticket. Requires: ~`], logs(target, room, user) { this.checkCan('lock'); @@ -2941,7 +2902,7 @@ export const commands: Chat.ChatCommands = { logshelp: [ `/helpticket logs [userid][, month] - View logs of the [userid]'s text tickets. `, `If a [month] is given, searches only that month.`, - `Requires: % @ &`, + `Requires: % @ ~`, ], async private(target, room, user) { @@ -2953,20 +2914,20 @@ export const commands: Chat.ChatCommands = { if (!/[0-9]{4}-[0-9]{2}-[0-9]{2}/.test(date)) { return this.errorReply(`Invalid date (must be YYYY-MM-DD format).`); } - const logPath = FS(`logs/chat/help-${userid}/${date.slice(0, -3)}/${date}.txt`); + const logPath = Monitor.logPath(`chat/help-${userid}/${date.slice(0, -3)}/${date}.txt`); if (!(await logPath.exists())) { return this.errorReply(`There are no logs for tickets from '${userid}' on the date '${date}'.`); } - if (!(await FS(`logs/private/${userid}`).exists())) { - await FS(`logs/private/${userid}`).mkdirp(); + if (!(await Monitor.logPath(`private/${userid}`).exists())) { + await Monitor.logPath(`private/${userid}`).mkdirp(); } - await logPath.copyFile(`logs/private/${userid}/${date}.txt`); + await logPath.copyFile(Monitor.logPath(`private/${userid}/${date}.txt`).path); await logPath.write(''); // empty out the logfile this.globalModlog(`HELPTICKET PRIVATELOGS`, null, `${userid} (${date})`); this.privateGlobalModAction(`${user.name} set the ticket logs for '${userid}' on '${date}' to be private.`); }, privatehelp: [ - `/helpticket private [user], [date] - Makes the ticket logs for a user on a date private to upperstaff. Requires: &`, + `/helpticket private [user], [date] - Makes the ticket logs for a user on a date private to upperstaff. Requires: ~`, ], async public(target, room, user) { this.checkCan('bypassall'); @@ -2977,21 +2938,21 @@ export const commands: Chat.ChatCommands = { if (!/[0-9]{4}-[0-9]{2}-[0-9]{2}/.test(date)) { return this.errorReply(`Invalid date (must be YYYY-MM-DD format).`); } - const logPath = FS(`logs/private/${userid}/${date}.txt`); + const logPath = Monitor.logPath(`private/${userid}/${date}.txt`); if (!(await logPath.exists())) { return this.errorReply(`There are no logs for tickets from '${userid}' on the date '${date}'.`); } - const monthPath = FS(`logs/chat/help-${userid}/${date.slice(0, -3)}`); + const monthPath = Monitor.logPath(`chat/help-${userid}/${date.slice(0, -3)}`); if (!(await monthPath.exists())) { await monthPath.mkdirp(); } - await logPath.copyFile(`logs/chat/help-${userid}/${date.slice(0, -3)}/${date}.txt`); + await logPath.copyFile(Monitor.logPath(`chat/help-${userid}/${date.slice(0, -3)}/${date}.txt`).path); await logPath.unlinkIfExists(); this.globalModlog(`HELPTICKET PUBLICLOGS`, null, `${userid} (${date})`); this.privateGlobalModAction(`${user.name} set the ticket logs for '${userid}' on '${date}' to be public.`); }, publichelp: [ - `/helpticket public [user], [date] - Makes the ticket logs for the [user] on the [date] public to staff. Requires: &`, + `/helpticket public [user], [date] - Makes the ticket logs for the [user] on the [date] public to staff. Requires: ~`, ], }, @@ -3003,18 +2964,17 @@ export const commands: Chat.ChatCommands = { helptickethelp: [ `/helpticket create - Creates a new ticket, requesting help from global staff.`, - `/helpticket list - Lists all tickets. Requires: % @ &`, - `/helpticket close [user] - Closes an open ticket. Requires: % @ &`, - `/helpticket ban [user], (reason) - Bans a user from creating tickets for 2 days. Requires: % @ &`, - `/helpticket unban [user] - Ticket unbans a user. Requires: % @ &`, - `/helpticket ignore - Ignore notifications for unclaimed help tickets. Requires: % @ &`, - `/helpticket unignore - Stop ignoring notifications for help tickets. Requires: % @ &`, - `/helpticket delete [user] - Deletes a user's ticket. Requires: &`, - `/helpticket logs [userid][, month] - View logs of the [userid]'s text tickets. Requires: % @ &`, - `/helpticket note [ticket userid], [note] - Adds a note to the [ticket], to be displayed in the hover text. `, - `Requires: % @ &`, - `/helpticket private [user], [date] - Makes the ticket logs for a user on a date private to upperstaff. Requires: &`, - `/helpticket public [user], [date] - Makes the ticket logs for the [user] on the [date] public to staff. Requires: &`, + `/helpticket list - Lists all tickets. Requires: % @ ~`, + `/helpticket close [user] - Closes an open ticket. Requires: % @ ~`, + `/helpticket ban [user], (reason) - Bans a user from creating tickets for 2 days. Requires: % @ ~`, + `/helpticket unban [user] - Ticket unbans a user. Requires: % @ ~`, + `/helpticket ignore - Ignore notifications for unclaimed help tickets. Requires: % @ ~`, + `/helpticket unignore - Stop ignoring notifications for help tickets. Requires: % @ ~`, + `/helpticket delete [user] - Deletes a user's ticket. Requires: ~`, + `/helpticket logs [userid][, month] - View logs of the [userid]'s text tickets. Requires: % @ ~`, + `/helpticket note [ticket userid], [note] - Adds a note to the [ticket], to be displayed in the hover text. Requires: % @ ~`, + `/helpticket private [user], [date] - Makes the ticket logs for a user on a date private to upperstaff. Requires: ~`, + `/helpticket public [user], [date] - Makes the ticket logs for the [user] on the [date] public to staff. Requires: ~`, ], }; diff --git a/server/chat-plugins/hosts.ts b/server/chat-plugins/hosts.ts index da60a6a6aa6e..bd4ac11fa54c 100644 --- a/server/chat-plugins/hosts.ts +++ b/server/chat-plugins/hosts.ts @@ -231,8 +231,8 @@ export const commands: Chat.ChatCommands = { return this.parse(`/join view-ranges-${type}`); }, viewhelp: [ - `/ipranges view - View the list of all IP ranges. Requires: hosts manager @ &`, - `/ipranges view [type] - View the list of a particular type of IP range ('residential', 'mobile', or 'proxy'). Requires: hosts manager @ &`, + `/ipranges view - View the list of all IP ranges. Requires: hosts manager @ ~`, + `/ipranges view [type] - View the list of a particular type of IP range ('residential', 'mobile', or 'proxy'). Requires: hosts manager @ ~`, ], // Originally by Zarel @@ -269,8 +269,8 @@ export const commands: Chat.ChatCommands = { this.globalModlog('IPRANGE ADD', null, formatRange(range, true)); }, addhelp: [ - `/ipranges add [type], [low]-[high], [host] - Adds an IP range. Requires: hosts manager &`, - `/ipranges widen [type], [low]-[high], [host] - Adds an IP range, allowing a new range to completely cover an old range. Requires: hosts manager &`, + `/ipranges add [type], [low]-[high], [host] - Adds an IP range. Requires: hosts manager ~`, + `/ipranges widen [type], [low]-[high], [host] - Adds an IP range, allowing a new range to completely cover an old range. Requires: hosts manager ~`, `For example: /ipranges add proxy, 5.152.192.0 - 5.152.223.255, redstation.com`, `Get datacenter info from whois; [low], [high] are the range in the last inetnum; [type] is one of res, proxy, or mobile.`, ], @@ -289,7 +289,7 @@ export const commands: Chat.ChatCommands = { this.globalModlog('IPRANGE REMOVE', null, formatRange(range, true)); }, removehelp: [ - `/ipranges remove [low IP]-[high IP] - Removes an IP range. Requires: hosts manager &`, + `/ipranges remove [low IP]-[high IP] - Removes an IP range. Requires: hosts manager ~`, `Example: /ipranges remove 5.152.192.0-5.152.223.255`, ], @@ -316,20 +316,20 @@ export const commands: Chat.ChatCommands = { this.globalModlog('IPRANGE RENAME', null, `IP range ${formatRange(toRename, true)} to ${range.host}`); }, renamehelp: [ - `/ipranges rename [type], [low IP]-[high IP], [host] - Changes the host an IP range resolves to. Requires: hosts manager &`, + `/ipranges rename [type], [low IP]-[high IP], [host] - Changes the host an IP range resolves to. Requires: hosts manager ~`, ], }, iprangeshelp() { const help = [ - `/ipranges view [type]: view the list of a particular type of IP range (residential, mobile, or proxy). Requires: hosts manager @ &`, - `/ipranges add [type], [low IP]-[high IP], [host]: add IP ranges (can be multiline). Requires: hosts manager &/ipranges view: view the list of all IP ranges. Requires: hosts manager @ &`, - `/ipranges widen [type], [low IP]-[high IP], [host]: add IP ranges, allowing a new range to completely cover an old range. Requires: hosts manager &`, + `/ipranges view [type]: view the list of a particular type of IP range (residential, mobile, or proxy). Requires: hosts manager @ ~`, + `/ipranges add [type], [low IP]-[high IP], [host]: add IP ranges (can be multiline). Requires: hosts manager ~/ipranges view: view the list of all IP ranges. Requires: hosts manager @ ~`, + `/ipranges widen [type], [low IP]-[high IP], [host]: add IP ranges, allowing a new range to completely cover an old range. Requires: hosts manager ~`, `For example: /ipranges add proxy, 5.152.192.0-5.152.223.255, redstation.com.`, `Get datacenter info from /whois; [low IP], [high IP] are the range in the last inetnum.`, - `/ipranges remove [low IP]-[high IP]: remove IP range(s). Can be multiline. Requires: hosts manager &`, + `/ipranges remove [low IP]-[high IP]: remove IP range(s). Can be multiline. Requires: hosts manager ~`, `For example: /ipranges remove 5.152.192.0, 5.152.223.255.`, - `/ipranges rename [type], [low IP]-[high IP], [host]: changes the host an IP range resolves to. Requires: hosts manager &`, + `/ipranges rename [type], [low IP]-[high IP], [host]: changes the host an IP range resolves to. Requires: hosts manager ~`, ]; return this.sendReply(`|html|
${help.join('
')}`); }, @@ -343,8 +343,8 @@ export const commands: Chat.ChatCommands = { return this.parse(`/join view-hosts-${type}`); }, viewhostshelp: [ - `/viewhosts - View the list of hosts. Requires: hosts manager @ &`, - `/viewhosts [type] - View the list of a particular type of host. Requires: hosts manager @ &`, + `/viewhosts - View the list of hosts. Requires: hosts manager @ ~`, + `/viewhosts [type] - View the list of a particular type of host. Requires: hosts manager @ ~`, `Host types are: 'all', 'residential', 'mobile', and 'ranges'.`, ], @@ -421,8 +421,8 @@ export const commands: Chat.ChatCommands = { this.globalModlog(removing ? 'REMOVEHOSTS' : 'ADDHOSTS', null, `${type}: ${hosts.join(', ')}`); }, addhostshelp: [ - `/addhosts [category], host1, host2, ... - Adds hosts to the given category. Requires: hosts manager &`, - `/removehosts [category], host1, host2, ... - Removes hosts from the given category. Requires: hosts manager &`, + `/addhosts [category], host1, host2, ... - Adds hosts to the given category. Requires: hosts manager ~`, + `/removehosts [category], host1, host2, ... - Removes hosts from the given category. Requires: hosts manager ~`, `Categories are: 'openproxy' (which takes IP addresses, not hosts), 'proxy', 'residential', and 'mobile'.`, ], @@ -431,7 +431,7 @@ export const commands: Chat.ChatCommands = { return this.parse('/join view-proxies'); }, viewproxieshelp: [ - `/viewproxies - View the list of proxies. Requires: hosts manager @ &`, + `/viewproxies - View the list of proxies. Requires: hosts manager @ ~`, ], markshared(target, room, user) { @@ -471,7 +471,7 @@ export const commands: Chat.ChatCommands = { }, marksharedhelp: [ `/markshared [IP], [owner/organization of IP] - Marks an IP address as shared.`, - `Note: the owner/organization (i.e., University of Minnesota) of the shared IP is required. Requires @ &`, + `Note: the owner/organization (i.e., University of Minnesota) of the shared IP is required. Requires @ ~`, ], unmarkshared(target, room, user) { @@ -501,7 +501,7 @@ export const commands: Chat.ChatCommands = { this.privateGlobalModAction(`The IP '${target}' was unmarked as shared by ${user.name}.`); this.globalModlog('UNSHAREDIP', null, null, target); }, - unmarksharedhelp: [`/unmarkshared [IP] - Unmarks a shared IP address. Requires @ &`], + unmarksharedhelp: [`/unmarkshared [IP] - Unmarks a shared IP address. Requires @ ~`], marksharedblacklist: 'nomarkshared', marksharedbl: 'nomarkshared', @@ -573,10 +573,10 @@ export const commands: Chat.ChatCommands = { }, }, nomarksharedhelp: [ - `/nomarkshared add [IP], [reason] - Prevents an IP from being marked as shared until it's removed from this list. Requires &`, + `/nomarkshared add [IP], [reason] - Prevents an IP from being marked as shared until it's removed from this list. Requires ~`, `Note: Reasons are required.`, - `/nomarkshared remove [IP] - Removes an IP from the nomarkshared list. Requires &`, - `/nomarkshared view - Lists all IPs prevented from being marked as shared. Requires @ &`, + `/nomarkshared remove [IP] - Removes an IP from the nomarkshared list. Requires ~`, + `/nomarkshared view - Lists all IPs prevented from being marked as shared. Requires @ ~`, ], sharedips: 'viewsharedips', @@ -584,6 +584,6 @@ export const commands: Chat.ChatCommands = { return this.parse('/join view-sharedips'); }, viewsharedipshelp: [ - `/viewsharedips — Lists IP addresses marked as shared. Requires: hosts manager @ &`, + `/viewsharedips — Lists IP addresses marked as shared. Requires: hosts manager @ ~`, ], }; diff --git a/server/chat-plugins/mafia.ts b/server/chat-plugins/mafia.ts index 8d5bfb0556f3..090bf2e55c9c 100644 --- a/server/chat-plugins/mafia.ts +++ b/server/chat-plugins/mafia.ts @@ -75,6 +75,7 @@ interface MafiaIDEAData { // eg, GestI has 2 things to pick, role and alignment picks: string[]; } + interface MafiaIDEAModule { data: MafiaIDEAData | null; timer: NodeJS.Timer | null; @@ -83,12 +84,22 @@ interface MafiaIDEAModule { // users that haven't picked a role yet waitingPick: string[]; } + interface MafiaIDEAPlayerData { choices: string[]; originalChoices: string[]; picks: {[choice: string]: string | null}; } +// The different possible ways for a player to be eliminated +enum MafiaEliminateType { + ELIMINATE = "was eliminated", // standard (vote + faction kill + anything else) + KICK = "was kicked from the game", // staff kick + TREESTUMP = "was treestumped", // can still talk + SPIRIT = "became a restless spirit", // can still vote + SPIRITSTUMP = "became a restless treestump" // treestump + spirit +} + const DATA_FILE = 'config/chat-plugins/mafia-data.json'; const LOGS_FILE = 'config/chat-plugins/mafia-logs.json'; @@ -179,8 +190,8 @@ class MafiaPlayer extends Rooms.RoomGamePlayer { /** false - can't hammer (priest), true - can only hammer (actor) */ hammerRestriction: null | boolean; lastVote: number; - treestump: boolean; - restless: boolean; + eliminated: MafiaEliminateType | null; + eliminationOrder: number; silenced: boolean; nighttalk: boolean; revealed: string; @@ -195,8 +206,8 @@ class MafiaPlayer extends Rooms.RoomGamePlayer { this.voting = ''; this.hammerRestriction = null; this.lastVote = 0; - this.treestump = false; - this.restless = false; + this.eliminated = null; + this.eliminationOrder = 0; this.silenced = false; this.nighttalk = false; this.revealed = ''; @@ -205,7 +216,14 @@ class MafiaPlayer extends Rooms.RoomGamePlayer { this.actionArr = []; } - getRole(button = false) { + /** + * Called if the player's name changes. + */ + updateSafeName() { + this.safeName = Utils.escapeHTML(this.name); + } + + getStylizedRole(button = false) { if (!this.role) return; let color = MafiaData.alignments[this.role.alignment].color; if (button && MafiaData.alignments[this.role.alignment].buttonColor) { @@ -214,14 +232,47 @@ class MafiaPlayer extends Rooms.RoomGamePlayer { return `${this.role.safeName}`; } + isEliminated() { + return this.eliminated !== null; + } + + isTreestump() { + return this.eliminated === MafiaEliminateType.TREESTUMP || + this.eliminated === MafiaEliminateType.SPIRITSTUMP; + } + + isSpirit() { + return this.eliminated === MafiaEliminateType.SPIRIT || + this.eliminated === MafiaEliminateType.SPIRITSTUMP; + } + + // Only call updateHtmlRoom if the player is still involved in the game in some way + tryUpdateHtmlRoom() { + if ([null, MafiaEliminateType.SPIRIT, MafiaEliminateType.TREESTUMP, + MafiaEliminateType.SPIRITSTUMP].includes(this.eliminated)) { + this.updateHtmlRoom(); + } + } + + /** + * Updates the mafia HTML room for this player. + * @param id Only provided during the destruction process to update the HTML one last time after player.id is cleared. + */ updateHtmlRoom() { + if (this.game.ended) return this.closeHtmlRoom(); const user = Users.get(this.id); - if (!user?.connected) return; - if (this.game.ended) return user.send(`>view-mafia-${this.game.room.roomid}\n|deinit`); + if (!user || !user.connected) return; for (const conn of user.connections) { void Chat.resolvePage(`view-mafia-${this.game.room.roomid}`, user, conn); } } + + closeHtmlRoom() { + const user = Users.get(this.id); + if (!user || !user.connected) return; + return user.send(`>view-mafia-${this.game.room.roomid}\n|deinit`); + } + updateHtmlVotes() { const user = Users.get(this.id); if (!user?.connected) return; @@ -231,13 +282,13 @@ class MafiaPlayer extends Rooms.RoomGamePlayer { } class Mafia extends Rooms.RoomGame { + override readonly gameid = 'mafia' as ID; started: boolean; theme: MafiaDataTheme | null; hostid: ID; host: string; cohostids: ID[]; cohosts: string[]; - dead: {[userid: string]: MafiaPlayer}; subs: ID[]; autoSub: boolean; @@ -251,9 +302,9 @@ class Mafia extends Rooms.RoomGame { hammerModifiers: {[userid: string]: number}; hasPlurality: ID | null; - enableNL: boolean; + enableNV: boolean; voteLock: boolean; - votingAll: boolean; + votingEnabled: boolean; forceVote: boolean; closedSetup: boolean; noReveal: boolean; @@ -275,12 +326,10 @@ class Mafia extends Rooms.RoomGame { constructor(room: ChatRoom, host: User) { super(room); - this.gameid = 'mafia' as ID; this.title = 'Mafia'; this.playerCap = 20; this.allowRenames = false; this.started = false; - this.ended = false; this.theme = null; @@ -289,7 +338,6 @@ class Mafia extends Rooms.RoomGame { this.cohostids = []; this.cohosts = []; - this.dead = Object.create(null); this.subs = []; this.autoSub = true; this.requestedSub = []; @@ -302,9 +350,9 @@ class Mafia extends Rooms.RoomGame { this.hammerModifiers = Object.create(null); this.hasPlurality = null; - this.enableNL = true; + this.enableNV = true; this.voteLock = false; - this.votingAll = true; + this.votingEnabled = true; this.forceVote = false; this.closedSetup = false; this.noReveal = true; @@ -332,24 +380,52 @@ class Mafia extends Rooms.RoomGame { this.sendHTML(this.roomWindow()); } - join(user: User) { - if (this.phase !== 'signups') return user.sendTo(this.room, `|error|The game of ${this.title} has already started.`); - this.canJoin(user, true); - if (this.playerCount >= this.playerCap) return user.sendTo(this.room, `|error|The game of ${this.title} is full.`); - if (!this.addPlayer(user)) return user.sendTo(this.room, `|error|You have already joined the game of ${this.title}.`); + join(user: User, staffAdd: User | null = null, force = false) { + if (this.phase !== 'signups' && !staffAdd) { + return this.sendUser(user, `|error|The game of ${this.title} has already started.`); + } + + this.canJoin(user, !staffAdd, force); + if (this.playerCount >= this.playerCap) return this.sendUser(user, `|error|The game of ${this.title} is full.`); + + const player = this.addPlayer(user); + if (!player) return this.sendUser(user, `|error|You have already joined the game of ${this.title}.`); + if (this.started) { + player.role = { + name: `Unknown`, + safeName: `Unknown`, + id: `unknown`, + alignment: 'solo', + image: '', + memo: [`You were added to the game after it had started. To learn about your role, PM the host (${this.host}).`], + }; + this.roles.push(player.role); + this.played.push(player.id); + } else { + // TODO improve reseting roles + this.originalRoles = []; + this.originalRoleString = ''; + this.roles = []; + this.roleString = ''; + } + if (this.subs.includes(user.id)) this.subs.splice(this.subs.indexOf(user.id), 1); - this.playerTable[user.id].updateHtmlRoom(); - this.sendRoom(`${this.playerTable[user.id].name} has joined the game.`); + player.updateHtmlRoom(); + if (staffAdd) { + this.sendDeclare(`${player.name} has been added to the game by ${staffAdd.name}.`); + this.logAction(staffAdd, 'added player'); + } else { + this.sendRoom(`${player.name} has joined the game.`); + } } leave(user: User) { - if (!(user.id in this.playerTable)) { - return user.sendTo(this.room, `|error|You have not joined the game of ${this.title}.`); + const player = this.getPlayer(user.id); + if (!player) { + return this.sendUser(user, `|error|You have not joined the game of ${this.title}.`); } - if (this.phase !== 'signups') return user.sendTo(this.room, `|error|The game of ${this.title} has already started.`); - this.playerTable[user.id].destroy(); - delete this.playerTable[user.id]; - this.playerCount--; + if (this.phase !== 'signups') return this.sendUser(user, `|error|The game of ${this.title} has already started.`); + this.removePlayer(player); let subIndex = this.requestedSub.indexOf(user.id); if (subIndex !== -1) this.requestedSub.splice(subIndex, 1); subIndex = this.hostRequestedSub.indexOf(user.id); @@ -398,6 +474,16 @@ class Mafia extends Rooms.RoomGame { return new MafiaPlayer(user, this); } + getPlayer(userid: ID) { + const matches = this.players.filter(p => p.id === userid); + if (matches.length > 1) { + // Should never happen + throw new Error(`Duplicate player IDs in Mafia game! Matches: ${matches.map(p => p.id).join(', ')}`); + } + + return matches.length > 0 ? matches[0] : null; + } + setRoles(user: User, roleString: string, force = false, reset = false) { let roles = roleString.split(',').map(x => x.trim()); @@ -424,14 +510,14 @@ class Mafia extends Rooms.RoomGame { roles = IDEA.roles; this.theme = null; } else { - return user.sendTo(this.room, `|error|${roles[0]} is not a valid theme or IDEA.`); + return this.sendUser(user, `|error|${roles[0]} is not a valid theme or IDEA.`); } } else { this.theme = null; } if (roles.length < this.playerCount) { - return user.sendTo(this.room, `|error|You have not provided enough roles for the players.`); + return this.sendUser(user, `|error|You have not provided enough roles for the players.`); } else if (roles.length > this.playerCount) { user.sendTo( this.room, @@ -482,9 +568,9 @@ class Mafia extends Rooms.RoomGame { } if (problems.length) { for (const problem of problems) { - user.sendTo(this.room, `|error|${problem}`); + this.sendUser(user, `|error|${problem}`); } - return user.sendTo(this.room, `|error|To forcibly set the roles, use /mafia force${reset ? "re" : ""}setroles`); + return this.sendUser(user, `|error|To forcibly set the roles, use /mafia force${reset ? "re" : ""}setroles`); } this.IDEA.data = null; @@ -511,15 +597,15 @@ class Mafia extends Rooms.RoomGame { const host = Users.get(hostid); if (host?.connected) host.send(`>${this.room.roomid}\n|notify|It's night in your game of Mafia!`); } - for (const player of Object.values(this.playerTable)) { + for (const player of this.players) { const user = Users.get(player.id); if (user?.connected) { - user.sendTo(this.room.roomid, `|notify|It's night in the game of Mafia! Send in an action or idle.`); + this.sendUser(user, `|notify|It's night in the game of Mafia! Send in an action or idle.`); } + + player.actionArr.length = 0; // Yes, this works. It empties the array. } - for (const player in this.playerTable) { - this.playerTable[player].actionArr.splice(0, this.playerTable[player].actionArr.length); - } + if (this.timer) this.setDeadline(0); this.sendDeclare(`The game has been reset.`); this.distributeRoles(); @@ -530,6 +616,7 @@ class Mafia extends Rooms.RoomGame { } return; } + static parseRole(roleString: string) { const roleName = roleString.replace(/solo/, '').trim(); @@ -614,21 +701,21 @@ class Mafia extends Rooms.RoomGame { start(user: User, day = false) { if (!user) return; if (this.phase !== 'locked' && this.phase !== 'IDEAlocked') { - if (this.phase === 'signups') return user.sendTo(this.room, `You need to close the signups first.`); + if (this.phase === 'signups') return this.sendUser(user, `You need to close the signups first.`); if (this.phase === 'IDEApicking') { - return user.sendTo(this.room, `You must wait for IDEA picks to finish before starting.`); + return this.sendUser(user, `You must wait for IDEA picks to finish before starting.`); } - return user.sendTo(this.room, `The game is already started!`); + return this.sendUser(user, `The game is already started!`); } - if (this.playerCount < 2) return user.sendTo(this.room, `You need at least 2 players to start.`); + if (this.playerCount < 2) return this.sendUser(user, `You need at least 2 players to start.`); if (this.phase === 'IDEAlocked') { - for (const p in this.playerTable) { - if (!this.playerTable[p].role) return user.sendTo(this.room, `|error|Not all players have a role.`); + for (const p of this.players) { + if (!p.role) return this.sendUser(user, `|error|Not all players have a role.`); } } else { - if (!Object.keys(this.roles).length) return user.sendTo(this.room, `You need to set the roles before starting.`); + if (!Object.keys(this.roles).length) return this.sendUser(user, `You need to set the roles before starting.`); if (Object.keys(this.roles).length < this.playerCount) { - return user.sendTo(this.room, `You have not provided enough roles for the players.`); + return this.sendUser(user, `You have not provided enough roles for the players.`); } } this.started = true; @@ -648,18 +735,19 @@ class Mafia extends Rooms.RoomGame { distributeRoles() { const roles = Utils.shuffle(this.roles.slice()); if (roles.length) { - for (const p in this.playerTable) { + for (const p of this.players) { const role = roles.shift()!; - this.playerTable[p].role = role; - const u = Users.get(p); - this.playerTable[p].revealed = ''; + p.role = role; + const u = Users.get(p.id); + p.revealed = ''; if (u?.connected) { u.send(`>${this.room.roomid}\n|notify|Your role is ${role.safeName}. For more details of your role, check your Role PM.`); } } } - this.dead = {}; - this.played = [this.hostid, ...this.cohostids, ...(Object.keys(this.playerTable) as ID[])]; + + this.clearEliminations(); + this.played = [this.hostid, ...this.cohostids, ...(this.players.map(p => p.id))]; this.sendDeclare(`The roles have been distributed.`); this.updatePlayers(); } @@ -667,10 +755,10 @@ class Mafia extends Rooms.RoomGame { getPartners(alignment: string, player: MafiaPlayer) { if (!player?.role || ['town', 'solo', 'traitor'].includes(player.role.alignment)) return ""; const partners = []; - for (const p in this.playerTable) { - if (p === player.id) continue; - const role = this.playerTable[p].role; - if (role && role.alignment === player.role.alignment) partners.push(this.playerTable[p].name); + for (const p of this.players) { + if (p.id === player.id) continue; + const role = p.role; + if (role && role.alignment === player.role.alignment) partners.push(p.name); } return partners.join(", "); } @@ -680,7 +768,7 @@ class Mafia extends Rooms.RoomGame { if (this.dayNum === 0 && extension !== null) return this.sendUser(this.hostid, `|error|You cannot extend on day 0.`); if (this.timer) this.setDeadline(0); if (extension === null) { - if (!isNaN(this.hammerCount)) this.hammerCount = Math.floor(Object.keys(this.playerTable).length / 2) + 1; + if (!isNaN(this.hammerCount)) this.hammerCount = Math.floor(this.getRemainingPlayers().length / 2) + 1; this.clearVotes(); } this.phase = 'day'; @@ -695,8 +783,8 @@ class Mafia extends Rooms.RoomGame { } else { this.sendDeclare(`Day ${this.dayNum}. The hammer count is set at ${this.hammerCount}`); } - for (const p in this.playerTable) { - this.playerTable[p].action = null; + for (const p of this.players) { + p.action = null; } this.sendPlayerList(); this.updatePlayers(); @@ -710,137 +798,165 @@ class Mafia extends Rooms.RoomGame { const host = Users.get(hostid); if (host?.connected) host.send(`>${this.room.roomid}\n|notify|It's night in your game of Mafia!`); } - for (const player of Object.values(this.playerTable)) { + + for (const player of this.players) { const user = Users.get(player.id); if (user?.connected) { - user.sendTo(this.room.roomid, `|notify|It's night in the game of Mafia! Send in an action or idle.`); + this.sendUser(user, `|notify|It's night in the game of Mafia! Send in an action or idle.`); } } + if (this.takeIdles) { this.sendDeclare(`Night ${this.dayNum}. Submit whether you are using an action or idle. If you are using an action, DM your action to the host.`); } else { this.sendDeclare(`Night ${this.dayNum}. PM the host your action, or idle.`); } + const hasPlurality = this.getPlurality(); + if (!early && hasPlurality) { - this.sendRoom(`Plurality is on ${this.playerTable[hasPlurality] ? this.playerTable[hasPlurality].name : 'No Vote'}`); + this.sendRoom(`Plurality is on ${this.getPlayer(hasPlurality)?.name || 'No Vote'}`); } if (!early && !initial) this.sendRoom(`|raw|
${this.voteBox()}
`); - if (initial && !isNaN(this.hammerCount)) this.hammerCount = Math.floor(Object.keys(this.playerTable).length / 2) + 1; + if (initial && !isNaN(this.hammerCount)) this.hammerCount = Math.floor(this.getRemainingPlayers().length / 2) + 1; this.updatePlayers(); } - vote(userid: ID, target: ID) { - if (!this.votingAll) return this.sendUser(userid, `|error|Voting is not allowed.`); - if (this.phase !== 'day') return this.sendUser(userid, `|error|You can only vote during the day.`); - let player = this.playerTable[userid]; - if (!player && this.dead[userid] && this.dead[userid].restless) player = this.dead[userid]; - if (!player) return; - if (!(target in this.playerTable) && target !== 'novote') { - return this.sendUser(userid, `|error|${target} is not a valid player.`); + vote(voter: MafiaPlayer, targetId: ID) { + if (!this.votingEnabled) return this.sendUser(voter, `|error|Voting is not allowed.`); + if (this.phase !== 'day') return this.sendUser(voter, `|error|You can only vote during the day.`); + if (!voter || (voter.isEliminated() && !voter.isSpirit())) return; + + const target = this.getPlayer(targetId); + if ((!target || target.isEliminated()) && targetId !== 'novote') { + return this.sendUser(voter, `|error|${targetId} is not a valid player.`); } - if (!this.enableNL && target === 'novote') return this.sendUser(userid, `|error|No Vote is not allowed.`); - if (target === player.id && !this.selfEnabled) return this.sendUser(userid, `|error|Self voting is not allowed.`); - if (this.voteLock && player.voting) { - return this.sendUser(userid, `|error|You cannot switch your vote because votes are locked.`); + + if (!this.enableNV && targetId === 'novote') return this.sendUser(voter, `|error|No Vote is not allowed.`); + if (targetId === voter.id && !this.selfEnabled) return this.sendUser(voter, `|error|Self voting is not allowed.`); + + if (this.voteLock && voter.voting) { + return this.sendUser(voter, `|error|You cannot switch your vote because votes are locked.`); } - const hammering = this.hammerCount - 1 <= (this.votes[target] ? this.votes[target].count : 0); - if (target === player.id && !hammering && this.selfEnabled === 'hammer') { - return this.sendUser(userid, `|error|You may only vote yourself when placing the hammer vote.`); + + const currentVotes = this.votes[targetId] ? this.votes[targetId].count : 0; + // 1 is added to the existing count to represent the vote we are processing now + const hammering = currentVotes + 1 >= this.hammerCount; + if (targetId === voter.id && !hammering && this.selfEnabled === 'hammer') { + return this.sendUser(voter, `|error|You may only vote yourself when placing the hammer vote.`); } - if (player.hammerRestriction !== null) { - this.sendUser(userid, `${this.hammerCount - 1} <= ${(this.votes[target] ? this.votes[target].count : 0)}`); - if (player.hammerRestriction && !hammering) { - return this.sendUser(userid, `|error|You can only vote when placing the hammer vote.`); + + if (voter.hammerRestriction !== null) { + if (voter.hammerRestriction && !hammering) { + return this.sendUser(voter, `|error|You can only vote when placing the hammer vote.`); + } else if (!voter.hammerRestriction && hammering) { + return this.sendUser(voter, `|error|You cannot place the hammer vote.`); } - if (!player.hammerRestriction && hammering) return this.sendUser(userid, `|error|You cannot place the hammer vote.`); } - if (player.lastVote + 2000 >= Date.now()) { + + if (voter.lastVote + 2000 >= Date.now()) { return this.sendUser( - userid, - `|error|You must wait another ${Chat.toDurationString((player.lastVote + 2000) - Date.now()) || '1 second'} before you can change your vote.` + voter, + `|error|You must wait another ${Chat.toDurationString((voter.lastVote + 2000) - Date.now()) || '1 second'} before you can change your vote.` ); } - const previousVote = player.voting; - if (previousVote) this.unvote(userid, true); - let vote = this.votes[target]; + + // -- VALID -- + + const previousVote = voter.voting; + if (previousVote) this.unvote(voter, true); + let vote = this.votes[targetId]; if (!vote) { - this.votes[target] = { - count: 1, trueCount: this.getVoteValue(userid), lastVote: Date.now(), dir: 'up', voters: [userid], + this.votes[targetId] = { + count: 1, trueCount: this.getVoteValue(voter), lastVote: Date.now(), dir: 'up', voters: [voter.id], }; - vote = this.votes[target]; + vote = this.votes[targetId]; } else { vote.count++; - vote.trueCount += this.getVoteValue(userid); + vote.trueCount += this.getVoteValue(voter); vote.lastVote = Date.now(); vote.dir = 'up'; - vote.voters.push(userid); + vote.voters.push(voter.id); } - player.voting = target; - const name = player.voting === 'novote' ? 'No Vote' : this.playerTable[player.voting].name; - const targetUser = Users.get(userid); + voter.voting = targetId; + voter.lastVote = Date.now(); + + const name = voter.voting === 'novote' ? 'No Vote' : target?.name; if (previousVote) { - this.sendTimestamp(`${(targetUser ? targetUser.name : userid)} has shifted their vote from ${previousVote === 'novote' ? 'No Vote' : this.playerTable[previousVote].name} to ${name}`); + this.sendTimestamp(`${voter.name} has shifted their vote from ${previousVote === 'novote' ? 'No Vote' : this.getPlayer(previousVote)?.name} to ${name}`); } else { this.sendTimestamp( name === 'No Vote' ? - `${(targetUser ? targetUser.name : userid)} has abstained from voting.` : - `${(targetUser ? targetUser.name : userid)} has voted ${name}.` + `${voter.name} has abstained from voting.` : + `${voter.name} has voted ${name}.` ); } - player.lastVote = Date.now(); + this.hasPlurality = null; - if (this.getHammerValue(target) <= vote.trueCount) { + if (this.getHammerValue(targetId) <= vote.trueCount) { // HAMMER - this.sendDeclare(`Hammer! ${target === 'novote' ? 'Nobody' : Utils.escapeHTML(name)} was voted out!`); + this.sendDeclare(`Hammer! ${targetId === 'novote' ? 'Nobody' : Utils.escapeHTML(name as string)} was voted out!`); this.sendRoom(`|raw|
${this.voteBox()}
`); - if (target !== 'novote') this.eliminate(target, 'kill'); + if (targetId !== 'novote') this.eliminate(target as MafiaPlayer, MafiaEliminateType.ELIMINATE); this.night(true); return; } this.updatePlayersVotes(); } - unvote(userid: ID, force = false) { - if (this.phase !== 'day' && !force) return this.sendUser(userid, `|error|You can only vote during the day.`); - let player = this.playerTable[userid]; + unvote(voter: MafiaPlayer, force = false) { + // Force skips (most) validation + if (!force) { + if (this.phase !== 'day') return this.sendUser(voter, `|error|You can only vote during the day.`); - // autoselfvote blocking doesn't apply to restless spirits - if (player && this.forceVote && !force) { - return this.sendUser(userid, `|error|You can only shift your vote, not unvote.`); - } + if (voter.isEliminated() && !voter.isSpirit()) { + return; // can't vote + } - if (!player && this.dead[userid] && this.dead[userid].restless) player = this.dead[userid]; - if (!player?.voting) return this.sendUser(userid, `|error|You are not voting for anyone.`); - if (this.voteLock && player?.voting) { - return this.sendUser(userid, `|error|You cannot unvote because votes are locked.`); - } - if (player.lastVote + 2000 >= Date.now() && !force) { - return this.sendUser( - userid, - `|error|You must wait another ${Chat.toDurationString((player.lastVote + 2000) - Date.now()) || '1 second'} before you can change your vote.` - ); + // autoselfvote blocking doesn't apply to restless spirits + if (!voter.isEliminated() && this.forceVote) { + return this.sendUser(voter, `|error|You can only shift your vote, not unvote.`); + } + + if (this.voteLock && voter.voting) { + return this.sendUser(voter, `|error|You cannot unvote because votes are locked.`); + } + + if (voter.lastVote + 2000 >= Date.now()) { + return this.sendUser( + voter, + `|error|You must wait another ${Chat.toDurationString((voter.lastVote + 2000) - Date.now()) || '1 second'} before you can change your vote.` + ); + } } - const vote = this.votes[player.voting]; + + if (!voter.voting) return this.sendUser(voter, `|error|You are not voting for anyone.`); + + const vote = this.votes[voter.voting]; vote.count--; - vote.trueCount -= this.getVoteValue(userid); + vote.trueCount -= this.getVoteValue(voter); if (vote.count <= 0) { - delete this.votes[player.voting]; + delete this.votes[voter.voting]; } else { vote.lastVote = Date.now(); vote.dir = 'down'; - vote.voters.splice(vote.voters.indexOf(userid), 1); + vote.voters.splice(vote.voters.indexOf(voter.id), 1); } - const targetUser = Users.get(userid); + + const target = this.getPlayer(voter.voting); + if (!target && voter.voting !== 'novote') { + throw new Error(`Unable to find target when unvoting. Voter: ${voter.id}, Target: ${voter.voting}`); + } + if (!force) { this.sendTimestamp( - player.voting === 'novote' ? - `${(targetUser ? targetUser.name : userid)} is no longer abstaining from voting.` : - `${(targetUser ? targetUser.name : userid)} has unvoted ${this.playerTable[player.voting].name}.` + voter.voting === 'novote' ? + `${voter.name} is no longer abstaining from voting.` : + `${voter.name} has unvoted ${target?.name}.` ); } - player.voting = ''; - player.lastVote = Date.now(); + voter.voting = ''; + voter.lastVote = Date.now(); this.hasPlurality = null; this.updatePlayersVotes(); } @@ -857,45 +973,59 @@ class Mafia extends Rooms.RoomGame { -vote.count, ]); for (const [key, vote] of list) { - buf += `${vote.count}${plur === key ? '*' : ''} ${this.playerTable[key]?.safeName || 'No Vote'} (${vote.voters.map(a => this.playerTable[a]?.safeName || a).join(', ')})
`; + const player = this.getPlayer(toID(key)); + buf += `${vote.count}${plur === key ? '*' : ''} ${player?.safeName || 'No Vote'} (${vote.voters.map(a => this.getPlayer(a)?.safeName || a).join(', ')})
`; } return buf; } + voteBoxFor(userid: ID) { let buf = ''; buf += `

Votes (Hammer: ${this.hammerCount || 'Disabled'})

`; const plur = this.getPlurality(); - for (const key of Object.keys(this.playerTable).concat((this.enableNL ? ['novote'] : [])) as ID[]) { - if (this.votes[key]) { - buf += `

${this.votes[key].count}${plur === key ? '*' : ''} ${this.playerTable[key] ? `${this.playerTable[key].safeName} ${this.playerTable[key].revealed ? `[${this.playerTable[key].revealed}]` : ''}` : 'No Vote'} (${this.votes[key].voters.map(a => this.playerTable[a] ? this.playerTable[a].safeName : a).join(', ')}) `; + const self = this.getPlayer(userid); + + for (const key of this.getRemainingPlayers().map(p => p.id).concat((this.enableNV ? ['novote' as ID] : []))) { + const votes = this.votes[key]; + const player = this.getPlayer(key); + buf += `

${votes?.count || 0}${plur === key ? '*' : ''} `; + if (player) { + buf += `${player.safeName} ${player.revealed ? `[${player.revealed}]` : ''} `; } else { - buf += `

0 ${this.playerTable[key] ? `${this.playerTable[key].safeName} ${this.playerTable[key].revealed ? `[${this.playerTable[key].revealed}]` : ''}` : 'No Vote'} `; - } - const isPlayer = (this.playerTable[userid]); - const isSpirit = (this.dead[userid] && this.dead[userid].restless); - if (this.votingAll && !(this.voteLock && (isPlayer?.voting || (isSpirit && this.dead[userid].voting))) && - (isPlayer || isSpirit)) { - if (isPlayer && this.playerTable[userid].voting === key || isSpirit && this.dead[userid].voting === key) { - buf += ``; - } else if ((this.selfEnabled && !isSpirit) || userid !== key) { - buf += ``; - } - } else if (userid === this.hostid || this.cohostids.includes(userid)) { - const vote = this.votes[key]; - if (vote && vote.count !== vote.trueCount) buf += `(${vote.trueCount})`; + buf += `No Vote `; + } + + if (votes) { + buf += `(${votes.voters.map(v => this.getPlayer(v)?.safeName || v).join(', ')}) `; + } + + if (userid === this.hostid || this.cohostids.includes(userid)) { + if (votes && votes.count !== votes.trueCount) buf += `(${votes.trueCount})`; if (this.hammerModifiers[key]) buf += `(${this.getHammerValue(key)} to hammer)`; + } else if (self && this.votingEnabled && (!this.voteLock || !self.voting) && + (!self.isEliminated() || self.isSpirit())) { + let cmd = ''; + if (self.voting === key) { + cmd = 'unvote'; + } else if (self.id !== key || (this.selfEnabled && !self.isSpirit())) { + cmd = `vote ${key}`; + } + + if (cmd) { + buf += ``; + } } buf += `

`; } return buf; } - applyVoteModifier(user: User, target: ID, mod: number) { - const targetPlayer = this.playerTable[target] || this.dead[target]; - if (!targetPlayer) return this.sendUser(user, `|error|${target} is not in the game of mafia.`); - const oldMod = this.voteModifiers[target]; + + applyVoteModifier(requester: User, targetPlayer: MafiaPlayer, mod: number) { + if (!targetPlayer) return this.sendUser(requester, `|error|${targetPlayer} is not in the game of mafia.`); + const oldMod = this.voteModifiers[targetPlayer.id]; if (mod === oldMod || ((isNaN(mod) || mod === 1) && oldMod === undefined)) { - if (isNaN(mod) || mod === 1) return this.sendUser(user, `|error|${target} already has no vote modifier.`); - return this.sendUser(user, `|error|${target} already has a vote modifier of ${mod}`); + if (isNaN(mod) || mod === 1) return this.sendUser(requester, `|error|${targetPlayer} already has no vote modifier.`); + return this.sendUser(requester, `|error|${targetPlayer} already has a vote modifier of ${mod}`); } const newMod = isNaN(mod) ? 1 : mod; if (targetPlayer.voting) { @@ -906,60 +1036,62 @@ class Mafia extends Rooms.RoomGame { } } if (newMod === 1) { - delete this.voteModifiers[target]; - return this.sendUser(user, `${targetPlayer.name} has had their vote modifier removed.`); + delete this.voteModifiers[targetPlayer.id]; + return this.sendUser(requester, `${targetPlayer.name} has had their vote modifier removed.`); } else { - this.voteModifiers[target] = newMod; - return this.sendUser(user, `${targetPlayer.name} has been given a vote modifier of ${newMod}`); + this.voteModifiers[targetPlayer.id] = newMod; + return this.sendUser(requester, `${targetPlayer.name} has been given a vote modifier of ${newMod}`); } } - applyHammerModifier(user: User, target: ID, mod: number) { - if (!(target in this.playerTable || target === 'novote')) { - return this.sendUser(user, `|error|${target} is not in the game of mafia.`); - } - const oldMod = this.hammerModifiers[target]; + + applyHammerModifier(user: User, target: MafiaPlayer, mod: number) { + const oldMod = this.hammerModifiers[target.id]; if (mod === oldMod || ((isNaN(mod) || mod === 0) && oldMod === undefined)) { if (isNaN(mod) || mod === 0) return this.sendUser(user, `|error|${target} already has no hammer modifier.`); return this.sendUser(user, `|error|${target} already has a hammer modifier of ${mod}`); } const newMod = isNaN(mod) ? 0 : mod; - if (this.votes[target]) { + if (this.votes[target.id]) { // do this manually since we havent actually changed the value yet - if (this.hammerCount + newMod <= this.votes[target].trueCount) { + if (this.hammerCount + newMod <= this.votes[target.id].trueCount) { // make sure these strings are the same this.sendRoom(`${target} has been voted due to a modifier change! They have not been eliminated.`); this.night(true); } } if (newMod === 0) { - delete this.hammerModifiers[target]; + delete this.hammerModifiers[target.id]; return this.sendUser(user, `${target} has had their hammer modifier removed.`); } else { - this.hammerModifiers[target] = newMod; + this.hammerModifiers[target.id] = newMod; return this.sendUser(user, `${target} has been given a hammer modifier of ${newMod}`); } } + clearVoteModifiers(user: User) { - for (const player of [...Object.keys(this.playerTable), ...Object.keys(this.dead)] as ID[]) { - if (this.voteModifiers[player]) this.applyVoteModifier(user, player, 1); + for (const player of this.players) { + if (this.voteModifiers[player.id]) this.applyVoteModifier(user, player, 1); } } + clearHammerModifiers(user: User) { - for (const player of ['novote', ...Object.keys(this.playerTable)] as ID[]) { - if (this.hammerModifiers[player]) this.applyHammerModifier(user, player, 0); + for (const player of this.players) { + if (this.hammerModifiers[player.id]) this.applyHammerModifier(user, player, 0); } } - getVoteValue(userid: ID) { - const mod = this.voteModifiers[userid]; + getVoteValue(player: MafiaPlayer) { + const mod = this.voteModifiers[player.id]; return (mod === undefined ? 1 : mod); } - getHammerValue(userid: ID) { - const mod = this.hammerModifiers[userid]; + + getHammerValue(player: ID) { + const mod = this.hammerModifiers[player]; return (mod === undefined ? this.hammerCount : this.hammerCount + mod); } + resetHammer() { - this.setHammer(Math.floor(Object.keys(this.playerTable).length / 2) + 1); + this.setHammer(Math.floor(this.players.length / 2) + 1); } setHammer(count: number) { @@ -1016,62 +1148,38 @@ class Mafia extends Rooms.RoomGame { return this.hasPlurality; } - eliminate(toEliminate: string, ability: string) { - if (!(toEliminate in this.playerTable || toEliminate in this.dead)) return; + override removePlayer(player: MafiaPlayer) { + player.closeHtmlRoom(); + const result = super.removePlayer(player); + return result; + } + + eliminate(toEliminate: MafiaPlayer, ability: MafiaEliminateType) { if (!this.started) { // Game has not started, simply kick the player - const player = this.playerTable[toEliminate]; - this.sendDeclare(`${player.safeName} was kicked from the game!`); - if (this.hostRequestedSub.includes(player.id)) { - this.hostRequestedSub.splice(this.hostRequestedSub.indexOf(player.id), 1); + this.sendDeclare(`${toEliminate.safeName} was kicked from the game!`); + if (this.hostRequestedSub.includes(toEliminate.id)) { + this.hostRequestedSub.splice(this.hostRequestedSub.indexOf(toEliminate.id), 1); } - if (this.requestedSub.includes(player.id)) { - this.requestedSub.splice(this.requestedSub.indexOf(player.id), 1); + if (this.requestedSub.includes(toEliminate.id)) { + this.requestedSub.splice(this.requestedSub.indexOf(toEliminate.id), 1); } - delete this.playerTable[player.id]; - this.playerCount--; - player.updateHtmlRoom(); - player.destroy(); + this.removePlayer(toEliminate); return; } - if (toEliminate in this.playerTable) { - this.dead[toEliminate] = this.playerTable[toEliminate]; - } else { - this.playerCount++; // so that the playercount decrement later isn't unnecessary - } - - const player = this.dead[toEliminate]; - let msg = `${player.safeName}`; - switch (ability) { - case 'treestump': - this.dead[player.id].treestump = true; - this.dead[player.id].restless = false; - msg += ` has been treestumped`; - break; - case 'spirit': - this.dead[player.id].treestump = false; - this.dead[player.id].restless = true; - msg += ` became a restless spirit`; - break; - case 'spiritstump': - this.dead[player.id].treestump = true; - this.dead[player.id].restless = true; - msg += ` became a restless treestump`; - break; - case 'kick': - this.dead[player.id].treestump = false; - this.dead[player.id].restless = false; - msg += ` was kicked from the game`; - break; - default: - this.dead[player.id].treestump = false; - this.dead[player.id].restless = false; - msg += ` was eliminated`; - } - if (player.voting) this.unvote(player.id, true); - this.sendDeclare(`${msg}! ${!this.noReveal && toID(ability) === 'kill' ? `${player.safeName}'s role was ${player.getRole()}.` : ''}`); - if (player.role && !this.noReveal && toID(ability) === 'kill') player.revealed = player.getRole()!; - const targetRole = player.role; + + toEliminate.eliminationOrder = this.getEliminatedPlayers() // Before eliminating, get other eliminated players + .map(p => p.eliminationOrder) // convert to an array of elimination order numbers + .reduce((a, b) => Math.max(a, b), 0) + 1; // get the largest of the existing elim order numbers and add 1 + toEliminate.eliminated = ability; + + if (toEliminate.voting) this.unvote(toEliminate, true); + this.sendDeclare(`${toEliminate.safeName} ${ability}! ${!this.noReveal && ability === MafiaEliminateType.ELIMINATE ? `${toEliminate.safeName}'s role was ${toEliminate.getStylizedRole()}.` : ''}`); + if (toEliminate.role && !this.noReveal && ability === MafiaEliminateType.ELIMINATE) { + toEliminate.revealed = toEliminate.getStylizedRole()!; + } + + const targetRole = toEliminate.role; if (targetRole) { for (const [roleIndex, role] of this.roles.entries()) { if (role.id === targetRole.id) { @@ -1080,96 +1188,75 @@ class Mafia extends Rooms.RoomGame { } } } - this.clearVotes(player.id); - delete this.playerTable[player.id]; - let subIndex = this.requestedSub.indexOf(player.id); + this.clearVotes(toEliminate.id); + let subIndex = this.requestedSub.indexOf(toEliminate.id); if (subIndex !== -1) this.requestedSub.splice(subIndex, 1); - subIndex = this.hostRequestedSub.indexOf(player.id); + subIndex = this.hostRequestedSub.indexOf(toEliminate.id); if (subIndex !== -1) this.hostRequestedSub.splice(subIndex, 1); - this.playerCount--; this.updateRoleString(); + if (ability === MafiaEliminateType.KICK) { + toEliminate.closeHtmlRoom(); + this.removePlayer(toEliminate); + } this.updatePlayers(); - player.updateHtmlRoom(); } revealRole(user: User, toReveal: MafiaPlayer, revealAs: string) { if (!this.started) { - return user.sendTo(this.room, `|error|You may only reveal roles once the game has started.`); + return this.sendUser(user, `|error|You may only reveal roles once the game has started.`); } if (!toReveal.role) { - return user.sendTo(this.room, `|error|The user ${toReveal.id} is not assigned a role.`); + return this.sendUser(user, `|error|The user ${toReveal.id} is not assigned a role.`); } toReveal.revealed = revealAs; - this.sendDeclare(`${toReveal.safeName}'s role ${toReveal.id in this.playerTable ? `is` : `was`} ${revealAs}.`); + this.sendDeclare(`${toReveal.safeName}'s role ${toReveal.isEliminated() ? `was` : `is`} ${revealAs}.`); this.updatePlayers(); } - revive(user: User, toRevive: string, force = false) { + revive(user: User, toRevive: MafiaPlayer) { if (this.phase === 'IDEApicking') { - return user.sendTo(this.room, `|error|You cannot add or remove players while IDEA roles are being picked.`); + return this.sendUser(user, `|error|You cannot add or remove players while IDEA roles are being picked.`); } - if (toRevive in this.playerTable) { - user.sendTo(this.room, `|error|The user ${toRevive} is already a living player.`); + if (!toRevive.isEliminated()) { + this.sendUser(user, `|error|The user ${toRevive} is already a living player.`); return; } - if (toRevive in this.dead) { - const deadPlayer = this.dead[toRevive]; - if (deadPlayer.treestump) deadPlayer.treestump = false; - if (deadPlayer.restless) deadPlayer.restless = false; - this.sendDeclare(`${deadPlayer.safeName} was revived!`); - this.playerTable[deadPlayer.id] = deadPlayer; - const targetRole = deadPlayer.role; - if (targetRole) { - this.roles.push(targetRole); - } else { - // Should never happen - deadPlayer.role = { - name: `Unknown`, - safeName: `Unknown`, - id: `unknown`, - alignment: 'solo', - image: '', - memo: [ - `You were revived, but had no role. Please let a Mafia Room Owner know this happened. To learn about your role, PM the host (${this.host}).`, - ], - }; - this.roles.push(deadPlayer.role); - } - Utils.sortBy(this.roles, r => [r.alignment, r.name]); - delete this.dead[deadPlayer.id]; + + toRevive.eliminated = null; + this.sendDeclare(`${toRevive.safeName} was revived!`); + const targetRole = toRevive.role; + if (targetRole) { + this.roles.push(targetRole); } else { - const targetUser = Users.get(toRevive); - if (!targetUser) return; - this.canJoin(targetUser, false, force); - const player = this.makePlayer(targetUser); - if (this.started) { - player.role = { - name: `Unknown`, - safeName: `Unknown`, - id: `unknown`, - alignment: 'solo', - image: '', - memo: [`You were added to the game after it had started. To learn about your role, PM the host (${this.host}).`], - }; - this.roles.push(player.role); - this.played.push(targetUser.id); - } else { - this.originalRoles = []; - this.originalRoleString = ''; - this.roles = []; - this.roleString = ''; - } - if (this.subs.includes(targetUser.id)) this.subs.splice(this.subs.indexOf(targetUser.id), 1); - this.playerTable[targetUser.id] = player; - this.sendDeclare(Utils.html`${targetUser.name} has been added to the game by ${user.name}!`); + // Should never happen + toRevive.role = { + name: `Unknown`, + safeName: `Unknown`, + id: `unknown`, + alignment: 'solo', + image: '', + memo: [ + `You were revived, but had no role. Please let a Mafia Room Owner know this happened. To learn about your role, PM the host (${this.host}).`, + ], + }; + this.roles.push(toRevive.role); } - this.playerCount++; + Utils.sortBy(this.roles, r => [r.alignment, r.name]); + this.updateRoleString(); this.updatePlayers(); return true; } + getRemainingPlayers() { + return this.players.filter(player => !player.isEliminated()); + } + + getEliminatedPlayers() { + return this.players.filter(player => player.isEliminated()).sort((a, b) => a.eliminationOrder - b.eliminationOrder); + } + setDeadline(minutes: number, silent = false) { if (isNaN(minutes)) return; if (!minutes) { @@ -1211,56 +1298,46 @@ class Mafia extends Rooms.RoomGame { this.sendTimestamp(`**The deadline has been set for ${minutes} minute${minutes === 1 ? '' : 's'}.**`); } - sub(player: string, replacement: string) { - const oldPlayer = this.playerTable[player]; - if (!oldPlayer) return; // should never happen + sub(player: MafiaPlayer, newUser: User) { + const oldPlayerId = player.id; + const oldSafeName = player.safeName; + this.setPlayerUser(player, newUser); + player.updateSafeName(); - const newUser = Users.get(replacement); - if (!newUser) return; // should never happen - const newPlayer = this.makePlayer(newUser); - newPlayer.role = oldPlayer.role; - newPlayer.IDEA = oldPlayer.IDEA; - if (oldPlayer.voting) { + if (player.voting) { // Dont change plurality - const vote = this.votes[oldPlayer.voting]; - vote.voters.splice(vote.voters.indexOf(oldPlayer.id), 1); - vote.voters.push(newPlayer.id); - newPlayer.voting = oldPlayer.voting; - oldPlayer.voting = ''; + const vote = this.votes[player.voting]; + vote.voters.splice(vote.voters.indexOf(oldPlayerId), 1); + vote.voters.push(player.id); } - this.playerTable[newPlayer.id] = newPlayer; // Transfer votes on the old player to the new one - if (this.votes[oldPlayer.id]) { - this.votes[newPlayer.id] = this.votes[oldPlayer.id]; - delete this.votes[oldPlayer.id]; - for (const p in this.playerTable) { - if (this.playerTable[p].voting === oldPlayer.id) this.playerTable[p].voting = newPlayer.id; - } - for (const p in this.dead) { - if (this.dead[p].restless && this.dead[p].voting === oldPlayer.id) this.dead[p].voting = newPlayer.id; + if (this.votes[oldPlayerId]) { + this.votes[player.id] = this.votes[oldPlayerId]; + delete this.votes[oldPlayerId]; + + for (const p of this.players) { + if (p.voting === oldPlayerId) { + p.voting = player.id; + } } } - if (this.hasPlurality === oldPlayer.id) this.hasPlurality = newPlayer.id; - for (let i = 1; i < this.dayNum; i++) { - newPlayer.actionArr[i] = oldPlayer.actionArr[i]; - } + if (this.hasPlurality === oldPlayerId) this.hasPlurality = player.id; + if (newUser?.connected) { for (const conn of newUser.connections) { void Chat.resolvePage(`view-mafia-${this.room.roomid}`, newUser, conn); } - newUser.send(`>${this.room.roomid}\n|notify|You have been substituted in the mafia game for ${oldPlayer.safeName}.`); + newUser.send(`>${this.room.roomid}\n|notify|You have been substituted in the mafia game for ${oldSafeName}.`); } - if (this.started) this.played.push(newPlayer.id); - this.sendDeclare(`${oldPlayer.safeName} has been subbed out. ${newPlayer.safeName} has joined the game.`); - delete this.playerTable[oldPlayer.id]; - oldPlayer.destroy(); + if (this.started) this.played.push(player.id); + this.sendDeclare(`${oldSafeName} has been subbed out. ${player.safeName} has joined the game.`); this.updatePlayers(); if (this.room.roomid === 'mafia' && this.started) { const month = new Date().toLocaleString("en-us", {month: "numeric", year: "numeric"}); if (!logs.leavers[month]) logs.leavers[month] = {}; - if (!logs.leavers[month][player]) logs.leavers[month][player] = 0; - logs.leavers[month][player]++; + if (!logs.leavers[month][player.id]) logs.leavers[month][player.id] = 0; + logs.leavers[month][player.id]++; writeFile(LOGS_FILE, logs); } } @@ -1274,19 +1351,19 @@ class Mafia extends Rooms.RoomGame { if (!nextSub) return; const sub = Users.get(nextSub, true); if (!sub?.connected || !sub.named || !this.room.users[sub.id]) return; // should never happen, just to be safe - const toSubOut = userid || this.hostRequestedSub.shift() || this.requestedSub.shift(); + const toSubOut = this.getPlayer(userid || this.hostRequestedSub.shift() || this.requestedSub.shift() || ''); if (!toSubOut) { // Should never happen this.subs.unshift(nextSub); return; } - if (this.hostRequestedSub.includes(toSubOut)) { - this.hostRequestedSub.splice(this.hostRequestedSub.indexOf(toSubOut), 1); + if (this.hostRequestedSub.includes(toSubOut.id)) { + this.hostRequestedSub.splice(this.hostRequestedSub.indexOf(toSubOut.id), 1); } - if (this.requestedSub.includes(toSubOut)) { - this.requestedSub.splice(this.requestedSub.indexOf(toSubOut), 1); + if (this.requestedSub.includes(toSubOut.id)) { + this.requestedSub.splice(this.requestedSub.indexOf(toSubOut.id), 1); } - this.sub(toSubOut, sub.id); + this.sub(toSubOut, sub); } customIdeaInit(user: User, choices: number, picks: string[], rolesString: string) { @@ -1318,19 +1395,19 @@ class Mafia extends Rooms.RoomGame { if (moduleID in MafiaData.aliases) moduleID = MafiaData.aliases[moduleID]; this.IDEA.data = MafiaData.IDEAs[moduleID]; - if (!this.IDEA.data) return user.sendTo(this.room, `|error|${moduleID} is not a valid IDEA.`); + if (!this.IDEA.data) return this.sendUser(user, `|error|${moduleID} is not a valid IDEA.`); return this.ideaDistributeRoles(user); } ideaDistributeRoles(user: User) { - if (!this.IDEA.data) return user.sendTo(this.room, `|error|No IDEA module loaded`); + if (!this.IDEA.data) return this.sendUser(user, `|error|No IDEA module loaded`); if (this.phase !== 'locked' && this.phase !== 'IDEAlocked') { - return user.sendTo(this.room, `|error|The game must be in a locked state to distribute IDEA roles.`); + return this.sendUser(user, `|error|The game must be in a locked state to distribute IDEA roles.`); } const neededRoles = this.IDEA.data.choices * this.playerCount; if (neededRoles > this.IDEA.data.roles.length) { - return user.sendTo(this.room, `|error|Not enough roles in the IDEA module.`); + return this.sendUser(user, `|error|Not enough roles in the IDEA module.`); } const roles = []; @@ -1345,8 +1422,7 @@ class Mafia extends Rooms.RoomGame { } Utils.shuffle(roles); this.IDEA.waitingPick = []; - for (const p in this.playerTable) { - const player = this.playerTable[p]; + for (const player of this.players) { player.role = null; player.IDEA = { choices: roles.splice(0, this.IDEA.data.choices), @@ -1356,9 +1432,9 @@ class Mafia extends Rooms.RoomGame { player.IDEA.originalChoices = player.IDEA.choices.slice(); for (const pick of this.IDEA.data.picks) { player.IDEA.picks[pick] = null; - this.IDEA.waitingPick.push(p); + this.IDEA.waitingPick.push(player.id); } - const u = Users.get(p); + const u = Users.get(player.id); if (u?.connected) u.send(`>${this.room.roomid}\n|notify|Pick your role in the IDEA module.`); } @@ -1377,13 +1453,15 @@ class Mafia extends Rooms.RoomGame { if (!this.IDEA?.data) { return this.sendRoom(`Trying to pick an IDEA role with no module running, target: ${JSON.stringify(selection)}. Please report this to a mod.`); } - const player = this.playerTable[user.id]; - if (!player.IDEA) { + + const player = this.getPlayer(user.id); + if (!player?.IDEA) { return this.sendRoom(`Trying to pick an IDEA role with no player IDEA object, user: ${user.id}. Please report this to a mod.`); } + selection = selection.map(toID); if (selection.length === 1 && this.IDEA.data.picks.length === 1) selection = [this.IDEA.data.picks[0], selection[0]]; - if (selection.length !== 2) return user.sendTo(this.room, `|error|Invalid selection.`); + if (selection.length !== 2) return this.sendUser(user, `|error|Invalid selection.`); // input is formatted as ['selection', 'role'] // eg: ['role', 'bloodhound'] @@ -1392,7 +1470,7 @@ class Mafia extends Rooms.RoomGame { if (selection[1]) { const roleIndex = player.IDEA.choices.map(toID).indexOf(selection[1] as ID); if (roleIndex === -1) { - return user.sendTo(this.room, `|error|${selection[1]} is not an available role, perhaps it is already selected?`); + return this.sendUser(user, `|error|${selection[1]} is not an available role, perhaps it is already selected?`); } selection[1] = player.IDEA.choices.splice(roleIndex, 1)[0]; } else { @@ -1418,7 +1496,7 @@ class Mafia extends Rooms.RoomGame { this.ideaFinalizePicks(); return; } - return user.sendTo(this.room, buf); + return this.sendUser(user, buf); } ideaFinalizePicks() { @@ -1426,8 +1504,7 @@ class Mafia extends Rooms.RoomGame { return this.sendRoom(`Tried to finalize IDEA picks with no IDEA module running, please report this to a mod.`); } const randed = []; - for (const p in this.playerTable) { - const player = this.playerTable[p]; + for (const player of this.players) { if (!player.IDEA) { return this.sendRoom(`Trying to pick an IDEA role with no player IDEA object, user: ${player.id}. Please report this to a mod.`); } @@ -1446,7 +1523,7 @@ class Mafia extends Rooms.RoomGame { } role.push(`${choice}: ${player.IDEA.picks[choice]}`); } - if (randPicked) randed.push(p); + if (randPicked) randed.push(player.id); // if there's only one option, it's their role, parse it properly let roleName = ''; if (this.IDEA.data.picks.length === 1) { @@ -1484,10 +1561,13 @@ class Mafia extends Rooms.RoomGame { if (player.IDEA.choices.includes('Innocent Discard')) player.role.alignment = 'town'; } this.IDEA.discardsHTML = `Discards:
`; - for (const p of Object.keys(this.playerTable).sort()) { - const IDEA = this.playerTable[p].IDEA; - if (!IDEA) return this.sendRoom(`No IDEA data for player ${p} when finalising IDEAs. Please report this to a mod.`); - this.IDEA.discardsHTML += `${this.playerTable[p].safeName}: ${IDEA.choices.join(', ')}
`; + for (const player of this.players.sort((a, b) => a.id.localeCompare(b.id))) { + const IDEA = player.IDEA; + if (!IDEA) { + return this.sendRoom(`No IDEA data for player ${player} when finalising IDEAs. Please report this to a mod.`); + } + + this.IDEA.discardsHTML += `${player.safeName}: ${IDEA.choices.join(', ')}
`; } this.phase = 'IDEAlocked'; @@ -1500,26 +1580,20 @@ class Mafia extends Rooms.RoomGame { } sendPlayerList() { - this.room.add(`|c:|${(Math.floor(Date.now() / 1000))}|~|**Players (${this.playerCount})**: ${Object.values(this.playerTable).map(p => p.name).sort().join(', ')}`).update(); + this.room.add(`|c:|${(Math.floor(Date.now() / 1000))}|~|**Players (${this.getRemainingPlayers().length})**: ${this.getRemainingPlayers().map(p => p.name).sort().join(', ')}`).update(); } updatePlayers() { - for (const p in this.playerTable) { - this.playerTable[p].updateHtmlRoom(); - } - for (const p in this.dead) { - if (this.dead[p].restless || this.dead[p].treestump) this.dead[p].updateHtmlRoom(); + for (const p of this.players) { + p.tryUpdateHtmlRoom(); } // Now do the host this.updateHost(); } updatePlayersVotes() { - for (const p in this.playerTable) { - this.playerTable[p].updateHtmlVotes(); - } - for (const p in this.dead) { - if (this.dead[p].restless || this.dead[p].treestump) this.dead[p].updateHtmlVotes(); + for (const p of this.players) { + p.tryUpdateHtmlRoom(); } } @@ -1577,34 +1651,41 @@ class Mafia extends Rooms.RoomGame { } canJoin(user: User, self = false, force = false) { - if (!user?.connected) return `User not found.`; + if (!user?.connected) throw new Chat.ErrorMessage(`User not found.`); const targetString = self ? `You are` : `${user.id} is`; - if (!this.room.users[user.id]) return `${targetString} not in the room.`; + if (!this.room.users[user.id]) throw new Chat.ErrorMessage(`${targetString} not in the room.`); for (const id of [user.id, ...user.previousIDs]) { - if (this.playerTable[id] || this.dead[id]) throw new Chat.ErrorMessage(`${targetString} already in the game.`); + if (this.getPlayer(id)) throw new Chat.ErrorMessage(`${targetString} already in the game.`); if (!force && this.played.includes(id)) { - throw new Chat.ErrorMessage(`${self ? `You were` : `${user.id} was`} already in the game.`); + throw new Chat.ErrorMessage(`${targetString} a previous player and cannot rejoin.`); } if (Mafia.isGameBanned(this.room, user)) { - throw new Chat.ErrorMessage(`${self ? `You are` : `${user.id} is`} banned from joining mafia games.`); + throw new Chat.ErrorMessage(`${targetString} banned from joining mafia games.`); } if (this.hostid === id) throw new Chat.ErrorMessage(`${targetString} the host.`); if (this.cohostids.includes(id)) throw new Chat.ErrorMessage(`${targetString} a cohost.`); } - if (!force) { - for (const alt of user.getAltUsers(true)) { - if (this.playerTable[alt.id] || this.played.includes(alt.id)) { - throw new Chat.ErrorMessage(`${self ? `You already have` : `${user.id} already has`} an alt in the game.`); - } - if (this.hostid === alt.id || this.cohostids.includes(alt.id)) { - throw new Chat.ErrorMessage(`${self ? `You have` : `${user.id} has`} an alt as a game host.`); - } + + for (const alt of user.getAltUsers(true)) { + if (!force && (this.getPlayer(alt.id) || this.played.includes(alt.id))) { + throw new Chat.ErrorMessage(`${self ? `You already have` : `${user.id} already has`} an alt in the game.`); + } + if (this.hostid === alt.id || this.cohostids.includes(alt.id)) { + throw new Chat.ErrorMessage(`${self ? `You have` : `${user.id} has`} an alt as a game host.`); } } } - sendUser(user: User | string | null, message: string) { - const userObject = (typeof user === 'string' ? Users.get(user) : user); + sendUser(user: MafiaPlayer | User | string, message: string) { + let userObject: User | null; + if (user instanceof MafiaPlayer) { + userObject = user.getUser(); + } else if (typeof user === "string") { + userObject = Users.get(user); + } else { + userObject = user; + } + if (!userObject?.connected) return; userObject.sendTo(this.room, message); } @@ -1624,64 +1705,76 @@ class Mafia extends Rooms.RoomGame { } this.selfEnabled = setting; if (!setting) { - for (const player of Object.values(this.playerTable)) { - if (player.voting === player.id) this.unvote(player.id, true); + for (const player of this.players) { + if (player.voting === player.id) this.unvote(player, true); } } this.updatePlayers(); } + setNoVote(user: User, setting: boolean) { - if (this.enableNL === setting) { - return user.sendTo(this.room, `|error|No Vote is already ${setting ? 'enabled' : 'disabled'}.`); + if (this.enableNV === setting) { + return this.sendUser(user, `|error|No Vote is already ${setting ? 'enabled' : 'disabled'}.`); } - this.enableNL = setting; + this.enableNV = setting; this.sendDeclare(`No Vote has been ${setting ? 'enabled' : 'disabled'}.`); - if (!setting) this.clearVotes('novote'); + if (!setting) this.clearVotes('novote' as ID); this.updatePlayers(); } + setVotelock(user: User, setting: boolean) { - if (!this.started) return user.sendTo(this.room, `The game has not started yet.`); + if (!this.started) return this.sendUser(user, `The game has not started yet.`); if ((this.voteLock) === setting) { - return user.sendTo(this.room, `|error|Votes are already ${setting ? 'set to lock' : 'set to not lock'}.`); + return this.sendUser(user, `|error|Votes are already ${setting ? 'set to lock' : 'set to not lock'}.`); } this.voteLock = setting; this.clearVotes(); this.sendDeclare(`Votes are cleared and ${setting ? 'set to lock' : 'set to not lock'}.`); this.updatePlayers(); } + setVoting(user: User, setting: boolean) { - if (!this.started) return user.sendTo(this.room, `The game has not started yet.`); - if (this.votingAll === setting) { - return user.sendTo(this.room, `|error|Voting is already ${setting ? 'allowed' : 'disallowed'}.`); + if (!this.started) return this.sendUser(user, `The game has not started yet.`); + if (this.votingEnabled === setting) { + return this.sendUser(user, `|error|Voting is already ${setting ? 'allowed' : 'disallowed'}.`); } - this.votingAll = setting; + this.votingEnabled = setting; this.clearVotes(); this.sendDeclare(`Voting is now ${setting ? 'allowed' : 'disallowed'}.`); this.updatePlayers(); } - clearVotes(target = '') { + + clearVotes(target: ID = '') { if (target) delete this.votes[target]; if (!target) this.votes = Object.create(null); - for (const player of Object.values(this.playerTable)) { + for (const player of this.players) { + if (player.isEliminated() && !player.isSpirit()) continue; + if (this.forceVote) { if (!target || (player.voting === target)) { player.voting = player.id; this.votes[player.id] = { - count: 1, trueCount: this.getVoteValue(player.id), lastVote: Date.now(), dir: 'up', voters: [player.id], + count: 1, trueCount: this.getVoteValue(player), lastVote: Date.now(), dir: 'up', voters: [player.id], }; } } else { if (!target || (player.voting === target)) player.voting = ''; } } - for (const player of Object.values(this.dead)) { - if (player.restless && (!target || player.voting === target)) player.voting = ''; - } this.hasPlurality = null; } + /** + * Only intended to be used during pre-game setup. + */ + clearEliminations() { + for (const player of this.players) { + player.eliminated = null; + } + } + onChatMessage(message: string, user: User) { const subIndex = this.hostRequestedSub.indexOf(user.id); if (subIndex !== -1) { @@ -1696,13 +1789,8 @@ class Mafia extends Rooms.RoomGame { return; } - let dead = false; - let player = this.playerTable[user.id]; - if (!player) { - player = this.dead[user.id]; - dead = !!player; - } - + const player = this.getPlayer(user.id); + const eliminated = player && player.isEliminated(); const staff = user.can('mute', null, this.room); if (!player) { @@ -1718,8 +1806,8 @@ class Mafia extends Rooms.RoomGame { return `You are silenced and cannot speak.${staff ? " You can remove this with /mafia unsilence." : ''}`; } - if (dead) { - if (!player.treestump) { + if (eliminated) { + if (!player.isTreestump()) { return `You are dead.${staff ? " You can treestump yourself with /mafia treestump." : ''}`; } } @@ -1732,12 +1820,13 @@ class Mafia extends Rooms.RoomGame { } onConnect(user: User) { - user.sendTo(this.room, `|uhtml|mafia|${this.roomWindow()}`); + this.sendUser(user, `|uhtml|mafia|${this.roomWindow()}`); } onJoin(user: User) { - if (user.id in this.playerTable) { - return this.playerTable[user.id].updateHtmlRoom(); + const player = this.getPlayer(user.id); + if (player) { + return player.updateHtmlRoom(); } if (user.id === this.hostid || this.cohostids.includes(user.id)) return this.updateHost(user.id); } @@ -1745,26 +1834,27 @@ class Mafia extends Rooms.RoomGame { removeBannedUser(user: User) { // Player was banned, attempt to sub now // If we can't sub now, make subbing them out the top priority - if (!(user.id in this.playerTable)) return; + if (!this.getPlayer(user.id)) return; this.requestedSub.unshift(user.id); this.nextSub(); } forfeit(user: User) { // Add the player to the sub list. - if (!(user.id in this.playerTable)) return; + const player = this.getPlayer(user.id); + if (!player || player.isEliminated()) return; this.requestedSub.push(user.id); this.nextSub(); } end() { - this.ended = true; + this.setEnded(); this.sendHTML(this.roomWindow()); this.updatePlayers(); if (this.room.roomid === 'mafia' && this.started) { // Intead of using this.played, which shows players who have subbed out as well // We check who played through to the end when recording playlogs - const played = Object.keys(this.playerTable).concat(Object.keys(this.dead)); + const played = this.players.map(p => p.id); const month = new Date().toLocaleString("en-us", {month: "numeric", year: "numeric"}); if (!logs.plays[month]) logs.plays[month] = {}; for (const player of played) { @@ -1785,19 +1875,11 @@ class Mafia extends Rooms.RoomGame { this.destroy(); } - destroy() { - // Slightly modified to handle dead players + override destroy() { + // Ensure timers are cleared as a part of game destruction if (this.timer) clearTimeout(this.timer); if (this.IDEA.timer) clearTimeout(this.IDEA.timer); - this.room.game = null; - // @ts-ignore readonly - this.room = null; - for (const i in this.playerTable) { - this.playerTable[i].destroy(); - } - for (const i in this.dead) { - this.dead[i].destroy(); - } + super.destroy(); } } @@ -1812,31 +1894,35 @@ export const pages: Chat.PageTable = { if (!room?.users[user.id] || !game || game.ended) { return this.close(); } - const isPlayer = user.id in game.playerTable; + + const isPlayer = game.getPlayer(user.id); const isHost = user.id === game.hostid || game.cohostids.includes(user.id); + const players = game.getRemainingPlayers(); this.title = game.title; let buf = `
`; buf += ``; buf += `

${game.title}

Host: ${game.host}

${game.cohostids[0] ? `

Cohosts: ${game.cohosts.sort().join(', ')}

` : ''}`; - buf += `

Players (${game.playerCount}): ${Object.values(game.playerTable).map(p => p.safeName).sort().join(', ')}

`; - if (game.started && Object.keys(game.dead).length > 0) { + buf += `

Players (${players.length}): ${players.map(p => p.safeName).sort().join(', ')}

`; + + const eliminatedPlayers = game.getEliminatedPlayers(); + if (game.started && eliminatedPlayers.length > 0) { buf += `

Dead Players`; - for (const d in game.dead) { - const dead = game.dead[d]; - buf += `

${dead.safeName} ${dead.revealed ? '(' + dead.revealed + ')' : ''}`; - if (dead.treestump) buf += ` (is a Treestump)`; - if (dead.restless) buf += ` (is a Restless Spirit)`; - if (isHost && !dead.revealed) { - buf += ``; + for (const eliminated of eliminatedPlayers) { + buf += `

${eliminated.safeName} ${eliminated.revealed ? '(' + eliminated.revealed + ')' : ''}`; + if (eliminated.isTreestump()) buf += ` (is a Treestump)`; + if (eliminated.isSpirit()) buf += ` (is a Restless Spirit)`; + if (isHost && !eliminated.revealed) { + buf += ``; } buf += `

`; } buf += `

`; } + buf += `
`; if (isPlayer && game.phase === 'IDEApicking') { buf += `

IDEA information:
`; - const IDEA = game.playerTable[user.id].IDEA; + const IDEA = isPlayer.IDEA; if (!IDEA) { return game.sendRoom(`IDEA picking phase but no IDEA object for user: ${user.id}. Please report this to a mod.`); } @@ -1890,12 +1976,12 @@ export const pages: Chat.PageTable = { } } if (isPlayer) { - const role = game.playerTable[user.id].role; + const role = isPlayer.role; let previousActionsPL = `
`; if (role) { - buf += `

${game.playerTable[user.id].safeName}, you are a ${game.playerTable[user.id].getRole()}

`; + buf += `

${isPlayer.safeName}, you are a ${isPlayer.getStylizedRole()}

`; if (!['town', 'solo'].includes(role.alignment)) { - buf += `

Partners: ${game.getPartners(role.alignment, game.playerTable[user.id])}

`; + buf += `

Partners: ${game.getPartners(role.alignment, isPlayer)}

`; } buf += `

Role Details`; buf += `
    ${role.memo.map(m => `
  • ${m}
  • `).join('')}
`; @@ -1903,7 +1989,7 @@ export const pages: Chat.PageTable = { if (game.dayNum > 1) { for (let i = 1; i < game.dayNum; i++) { previousActionsPL += `Night ${i}
`; - previousActionsPL += `${game.playerTable[user.id].actionArr?.[i] ? `${game.playerTable[user.id].actionArr[i]}` : ''}
`; + previousActionsPL += `${isPlayer.actionArr?.[i] ? `${isPlayer.actionArr[i]}` : ''}
`; } buf += `

Previous Actions${previousActionsPL}

`; } @@ -1913,24 +1999,24 @@ export const pages: Chat.PageTable = { buf += ``; buf += game.voteBoxFor(user.id); buf += ``; - } else if (game.phase === "night" && isPlayer) { + } else if (game.phase === "night" && isPlayer && !isPlayer.isEliminated()) { if (!game.takeIdles) { buf += `

PM the host (${game.host}) the action you want to use tonight, and who you want to use it on. Or PM the host "idle".

`; } else { buf += `Night Actions:`; - if (game.playerTable[user.id].action === null) { + if (isPlayer.action === null) { buf += ``; buf += ``; buf += `
`; } else { buf += ``; - if (game.playerTable[user.id].action) { + if (isPlayer.action) { buf += ``; buf += ``; - if (game.playerTable[user.id].action === true) { + if (isPlayer.action === true) { buf += `
`; } else { - buf += `
`; + buf += `
`; } } else { buf += ``; @@ -1945,8 +2031,7 @@ export const pages: Chat.PageTable = { let actions = `
`; let idles = `
`; let noResponses = `
`; - for (const p in game.playerTable) { - const player = game.playerTable[p]; + for (const player of game.getRemainingPlayers()) { if (player.action) { actions += `${player.safeName}${player.action === true ? '' : `: ${player.action}`}
`; } else if (player.action === false) { @@ -1963,8 +2048,7 @@ export const pages: Chat.PageTable = { if (game.dayNum > 1) { for (let i = 1; i < game.dayNum; i++) { previousActions += `Night ${i}
`; - for (const p in game.playerTable) { - const player = game.playerTable[p]; + for (const player of game.players) { previousActions += `${player.safeName}:${player.actionArr[i] ? `${player.actionArr[i]}` : ''}
`; } previousActions += `
`; @@ -1990,18 +2074,17 @@ export const pages: Chat.PageTable = { } } buf += ` `; - buf += ` `; + buf += ` `; buf += ` `; buf += ` `; buf += ``; buf += `

To set a deadline, use /mafia deadline [minutes].
To clear the deadline use /mafia deadline off.


`; buf += `

Player Options`; buf += `

Player Options

`; - for (const p in game.playerTable) { - const player = game.playerTable[p]; + for (const player of game.getRemainingPlayers()) { buf += `

`; - buf += `${player.safeName} (${player.role ? player.getRole(true) : ''})`; - buf += game.voteModifiers[p] !== undefined ? `(votes worth ${game.getVoteValue(p as ID)})` : ''; + buf += `${player.safeName} (${player.role ? player.getStylizedRole(true) : ''})`; + buf += game.voteModifiers[player.id] !== undefined ? `(votes worth ${game.getVoteValue(player)})` : ''; buf += player.hammerRestriction !== null ? `(${player.hammerRestriction ? 'actor' : 'priest'})` : ''; buf += player.silenced ? '(silenced)' : ''; buf += player.nighttalk ? '(insomniac)' : ''; @@ -2012,16 +2095,15 @@ export const pages: Chat.PageTable = { buf += ` `; buf += `

`; } - for (const d in game.dead) { - const dead = game.dead[d]; - buf += `

${dead.safeName} (${dead.role ? dead.getRole() : ''})`; - if (dead.treestump) buf += ` (is a Treestump)`; - if (dead.restless) buf += ` (is a Restless Spirit)`; - if (game.voteModifiers[d] !== undefined) buf += ` (votes worth ${game.getVoteValue(d as ID)})`; - buf += dead.hammerRestriction !== null ? `(${dead.hammerRestriction ? 'actor' : 'priest'})` : ''; - buf += dead.silenced ? '(silenced)' : ''; - buf += dead.nighttalk ? '(insomniac)' : ''; - buf += `:

`; + for (const eliminated of game.getEliminatedPlayers()) { + buf += `

${eliminated.safeName} (${eliminated.role ? eliminated.getStylizedRole() : ''})`; + if (eliminated.isTreestump()) buf += ` (is a Treestump)`; + if (eliminated.isSpirit()) buf += ` (is a Restless Spirit)`; + if (game.voteModifiers[eliminated.id] !== undefined) buf += ` (votes worth ${game.getVoteValue(eliminated)})`; + buf += eliminated.hammerRestriction !== null ? `(${eliminated.hammerRestriction ? 'actor' : 'priest'})` : ''; + buf += eliminated.silenced ? '(silenced)' : ''; + buf += eliminated.nighttalk ? '(insomniac)' : ''; + buf += `:

`; } buf += `

`; if (game.dayNum > 1) { @@ -2048,12 +2130,14 @@ export const pages: Chat.PageTable = { } else { buf += `

`; } - } else if ((!isPlayer && game.subs.includes(user.id)) || (isPlayer && !game.requestedSub.includes(user.id))) { - buf += `

${isPlayer ? 'Request to be subbed out' : 'Cancel sub request'}`; - buf += `

`; - } else { - buf += `

${isPlayer ? 'Cancel sub request' : 'Join the game as a sub'}`; - buf += `

`; + } else if (!isPlayer || !isPlayer.isEliminated()) { + if ((!isPlayer && game.subs.includes(user.id)) || (isPlayer && !game.requestedSub.includes(user.id))) { + buf += `

${isPlayer ? 'Request to be subbed out' : 'Cancel sub request'}`; + buf += `

`; + } else { + buf += `

${isPlayer ? 'Cancel sub request' : 'Join the game as a sub'}`; + buf += `

`; + } } } buf += `
`; @@ -2178,7 +2262,7 @@ export const commands: Chat.ChatCommands = { this.modlog('MAFIAHOST', targetUser, null, {noalts: true, noip: true}); }, hosthelp: [ - `/mafia host [user] - Create a game of Mafia with [user] as the host. Requires whitelist + % @ # &, drivers+ can host other people.`, + `/mafia host [user] - Create a game of Mafia with [user] as the host. Requires whitelist + % @ # ~, drivers+ can host other people.`, ], q: 'queue', @@ -2231,8 +2315,8 @@ export const commands: Chat.ChatCommands = { }, queuehelp: [ `/mafia queue - Shows the upcoming users who are going to host.`, - `/mafia queue add, (user) - Adds the user to the hosting queue. Requires whitelist + % @ # &`, - `/mafia queue remove, (user) - Removes the user from the hosting queue. Requires whitelist + % @ # &`, + `/mafia queue add, (user) - Adds the user to the hosting queue. Requires whitelist + % @ # ~`, + `/mafia queue remove, (user) - Removes the user from the hosting queue. Requires whitelist + % @ # ~`, ], qadd: 'queueadd', @@ -2269,9 +2353,8 @@ export const commands: Chat.ChatCommands = { const game = this.requireGame(Mafia); if (game.hostid !== user.id && !game.cohostids.includes(user.id)) this.checkCan('mute', null, room); if (game.phase !== 'signups') return this.errorReply(`Signups are already closed.`); - if (toID(target) === 'none') target = '20'; const num = parseInt(target); - if (isNaN(num) || num > 20 || num < 2) return this.parse('/help mafia playercap'); + if (isNaN(num) || num > 50 || num < 2) return this.parse('/help mafia playercap'); if (num < game.playerCount) { return this.errorReply(`Player cap has to be equal or more than the amount of players in game.`); } @@ -2281,7 +2364,7 @@ export const commands: Chat.ChatCommands = { game.logAction(user, `set playercap to ${num}`); }, playercaphelp: [ - `/mafia playercap [cap|none]- Limit the number of players being able to join the game. Player cap cannot be more than 20 or less than 2. Requires host % @ # &`, + `/mafia playercap [cap]- Limit the number of players being able to join the game. Player cap cannot be more than 50 or less than 2. Default is 20. Requires host % @ # ~`, ], close(target, room, user) { @@ -2295,7 +2378,7 @@ export const commands: Chat.ChatCommands = { game.updatePlayers(); game.logAction(user, `closed signups`); }, - closehelp: [`/mafia close - Closes signups for the current game. Requires host % @ # &`], + closehelp: [`/mafia close - Closes signups for the current game. Requires host % @ # ~`], cs: 'closedsetup', closedsetup(target, room, user) { @@ -2316,7 +2399,7 @@ export const commands: Chat.ChatCommands = { game.logAction(user, `${game.closedSetup ? 'enabled' : 'disabled'} closed setup`); }, closedsetuphelp: [ - `/mafia closedsetup [on|off] - Sets if the game is a closed setup. Closed setups don't show the role list to players. Requires host % @ # &`, + `/mafia closedsetup [on|off] - Sets if the game is a closed setup. Closed setups don't show the role list to players. Requires host % @ # ~`, ], reveal(target, room, user) { @@ -2336,7 +2419,7 @@ export const commands: Chat.ChatCommands = { game.updatePlayers(); game.logAction(user, `${game.noReveal ? 'disabled' : 'enabled'} reveals`); }, - revealhelp: [`/mafia reveal [on|off] - Sets if roles reveal on death or not. Requires host % @ # &`], + revealhelp: [`/mafia reveal [on|off] - Sets if roles reveal on death or not. Requires host % @ # ~`], takeidles(target, room, user) { room = this.requireRoom(); @@ -2351,7 +2434,7 @@ export const commands: Chat.ChatCommands = { game.sendDeclare(`Actions and idles are ${game.takeIdles ? 'now' : 'no longer'} being accepted.`); game.updatePlayers(); }, - takeidleshelp: [`/mafia takeidles [on|off] - Sets if idles are accepted by the script or not. Requires host % @ # &`], + takeidleshelp: [`/mafia takeidles [on|off] - Sets if idles are accepted by the script or not. Requires host % @ # ~`], resetroles: 'setroles', forceresetroles: 'setroles', @@ -2392,7 +2475,7 @@ export const commands: Chat.ChatCommands = { game.logAction(user, 'reset the game state'); }, resetgamehelp: [ - `/mafia resetgame - Resets game data. Does not change settings from the host (besides deadlines) or add/remove any players. Requires host % @ # &`, + `/mafia resetgame - Resets game data. Does not change settings from the host (besides deadlines) or add/remove any players. Requires host % @ # ~`, ], idea(target, room, user) { @@ -2410,8 +2493,8 @@ export const commands: Chat.ChatCommands = { game.logAction(user, `started an IDEA`); }, ideahelp: [ - `/mafia idea [idea] - starts the IDEA module [idea]. Requires + % @ # &, voices can only start for themselves`, - `/mafia ideareroll - rerolls the IDEA module. Requires host % @ # &`, + `/mafia idea [idea] - starts the IDEA module [idea]. Requires + % @ # ~, voices can only start for themselves`, + `/mafia ideareroll - rerolls the IDEA module. Requires host % @ # ~`, `/mafia ideapick [selection], [role] - selects a role`, `/mafia ideadiscards - shows the discarded roles`, ], @@ -2436,7 +2519,7 @@ export const commands: Chat.ChatCommands = { }, customideahelp: [ `/mafia customidea choices, picks (new line here, shift+enter)`, - `(comma or newline separated rolelist) - Starts an IDEA module with custom roles. Requires % @ # &`, + `(comma or newline separated rolelist) - Starts an IDEA module with custom roles. Requires % @ # ~`, `choices refers to the number of roles you get to pick from. In GI, this is 2, in GestI, this is 3.`, `picks refers to what you choose. In GI, this should be 'role', in GestI, this should be 'role, alignment'`, ], @@ -2444,13 +2527,14 @@ export const commands: Chat.ChatCommands = { room = this.requireRoom(); const args = target.split(','); const game = this.requireGame(Mafia); - if (!(user.id in game.playerTable)) { + const player = game.getPlayer(user.id); + if (!player) { return user.sendTo(room, '|error|You are not a player in the game.'); } if (game.phase !== 'IDEApicking') { return this.errorReply(`The game is not in the IDEA picking phase.`); } - game.ideaPick(user, args); + game.ideaPick(user, args); // TODO use player object }, ideareroll(target, room, user) { @@ -2460,7 +2544,7 @@ export const commands: Chat.ChatCommands = { game.ideaDistributeRoles(user); game.logAction(user, `rerolled an IDEA`); }, - idearerollhelp: [`/mafia ideareroll - rerolls the roles for the current IDEA module. Requires host % @ # &`], + idearerollhelp: [`/mafia ideareroll - rerolls the roles for the current IDEA module. Requires host % @ # ~`], discards: 'ideadiscards', ideadiscards(target, room, user) { @@ -2488,8 +2572,8 @@ export const commands: Chat.ChatCommands = { }, ideadiscardshelp: [ `/mafia ideadiscards - shows the discarded roles`, - `/mafia ideadiscards off - hides discards from the players. Requires host % @ # &`, - `/mafia ideadiscards on - shows discards to the players. Requires host % @ # &`, + `/mafia ideadiscards off - hides discards from the players. Requires host % @ # ~`, + `/mafia ideadiscards on - shows discards to the players. Requires host % @ # ~`, ], daystart: 'start', @@ -2507,7 +2591,7 @@ export const commands: Chat.ChatCommands = { game.start(user, cmd === 'daystart'); game.logAction(user, `started the game`); }, - starthelp: [`/mafia start - Start the game of mafia. Signups must be closed. Requires host % @ # &`], + starthelp: [`/mafia start - Start the game of mafia. Signups must be closed. Requires host % @ # ~`], extend: 'day', night: 'day', @@ -2526,8 +2610,7 @@ export const commands: Chat.ChatCommands = { if (extension > 10) extension = 10; } if (cmd === 'extend') { - for (const p in game.playerTable) { - const player = game.playerTable[p]; + for (const player of game.getRemainingPlayers()) { player.actionArr[game.dayNum] = ''; } } @@ -2536,9 +2619,9 @@ export const commands: Chat.ChatCommands = { game.logAction(user, `set day/night`); }, dayhelp: [ - `/mafia day - Move to the next game day. Requires host % @ # &`, - `/mafia night - Move to the next game night. Requires host % @ # &`, - `/mafia extend (minutes) - Return to the previous game day. If (minutes) is provided, set the deadline for (minutes) minutes. Requires host % @ # &`, + `/mafia day - Move to the next game day. Requires host % @ # ~`, + `/mafia night - Move to the next game night. Requires host % @ # ~`, + `/mafia extend (minutes) - Return to the previous game day. If (minutes) is provided, set the deadline for (minutes) minutes. Requires host % @ # ~`, ], prod(target, room, user) { @@ -2546,7 +2629,7 @@ export const commands: Chat.ChatCommands = { const game = this.requireGame(Mafia); if (game.hostid !== user.id && !game.cohostids.includes(user.id)) this.checkCan('mute', null, room); if (game.phase !== 'night') return; - for (const player of Object.values(game.playerTable)) { + for (const player of game.getRemainingPlayers()) { const playerid = Users.get(player.id); if (playerid?.connected && player.action === null) { playerid.sendTo(room, `|notify|Send in an action or idle!`); @@ -2556,7 +2639,7 @@ export const commands: Chat.ChatCommands = { game.sendDeclare(`Unsubmitted players have been reminded to submit an action or idle.`); }, prodhelp: [ - `/mafia prod - Notifies players that they must submit an action or idle if they haven't yet. Requires host % @ # &`, + `/mafia prod - Notifies players that they must submit an action or idle if they haven't yet. Requires host % @ # ~`, ], v: 'vote', @@ -2564,11 +2647,11 @@ export const commands: Chat.ChatCommands = { room = this.requireRoom(); const game = this.requireGame(Mafia); this.checkChat(null, room); - if (!(user.id in game.playerTable) && - (!(user.id in game.dead) || !game.dead[user.id].restless)) { + const player = game.getPlayer(user.id); + if (!player || (player.isEliminated() && !player.isSpirit())) { return this.errorReply(`You are not in the game of ${game.title}.`); } - game.vote(user.id, toID(target)); + game.vote(player, toID(target)); }, votehelp: [`/mafia vote [player|novote] - Vote the specified player or abstain from voting.`], @@ -2579,11 +2662,11 @@ export const commands: Chat.ChatCommands = { room = this.requireRoom(); const game = this.requireGame(Mafia); this.checkChat(null, room); - if (!(user.id in game.playerTable) && - (!(user.id in game.dead) || !game.dead[user.id].restless)) { + const player = game.getPlayer(user.id); + if (!player || (player.isEliminated() && !player.isSpirit())) { return this.errorReply(`You are not in the game of ${game.title}.`); } - game.unvote(user.id); + game.unvote(player); }, unvotehelp: [`/mafia unvote - Withdraw your vote. Fails if you're not voting anyone`], @@ -2611,7 +2694,7 @@ export const commands: Chat.ChatCommands = { game.logAction(user, `changed selfvote`); }, selfvotehelp: [ - `/mafia selfvote [on|hammer|off] - Allows players to self vote themselves either at hammer or anytime. Requires host % @ # &`, + `/mafia selfvote [on|hammer|off] - Allows players to self vote themselves either at hammer or anytime. Requires host % @ # ~`, ], treestump: 'kill', @@ -2626,35 +2709,42 @@ export const commands: Chat.ChatCommands = { return this.errorReply(`You cannot add or remove players while IDEA roles are being picked.`); // needs to be here since eliminate doesn't pass the user } if (!target) return this.parse('/help mafia kill'); - const player = game.playerTable[toID(target)]; - const dead = game.dead[toID(target)]; - let repeat; - if (dead) { - switch (cmd) { - case 'treestump': - repeat = dead.treestump && !dead.restless; - break; - case 'spirit': - repeat = !dead.treestump && dead.restless; - break; - case 'spiritstump': - repeat = dead.treestump && dead.restless; - break; - case 'kill': case 'kick': - repeat = !dead.treestump && !dead.restless; - break; - } + const player = game.getPlayer(toID(target)); + if (!player) { + return this.errorReply(`${target.trim()} is not a player.`); } - if (dead && repeat) return this.errorReply(`${dead.safeName} has already been ${cmd}ed.`); - if (player || dead) { - game.eliminate(toID(target), cmd); - game.logAction(user, `${cmd}ed ${(dead || player).safeName}`); - } else { - this.errorReply(`${target.trim()} is not a player.`); + + let repeat, elimType; + + switch (cmd) { + case 'treestump': + elimType = MafiaEliminateType.TREESTUMP; + repeat = player.isTreestump() && !player.isSpirit(); + break; + case 'spirit': + elimType = MafiaEliminateType.SPIRIT; + repeat = !player.isTreestump() && player.isSpirit(); + break; + case 'spiritstump': + elimType = MafiaEliminateType.SPIRITSTUMP; + repeat = player.isTreestump() && player.isSpirit(); + break; + case 'kick': + elimType = MafiaEliminateType.KICK; + break; + default: + elimType = MafiaEliminateType.ELIMINATE; + repeat = player.eliminated === MafiaEliminateType.ELIMINATE; + break; } + + if (repeat) return this.errorReply(`${player.safeName} has already been ${cmd}ed.`); + + game.eliminate(player, elimType); + game.logAction(user, `${cmd}ed ${player.safeName}`); }, killhelp: [ - `/mafia kill [player] - Kill a player, eliminating them from the game. Requires host % @ # &`, + `/mafia kill [player] - Kill a player, eliminating them from the game. Requires host % @ # ~`, `/mafia treestump [player] - Kills a player, but allows them to talk during the day still.`, `/mafia spirit [player] - Kills a player, but allows them to vote still.`, `/mafia spiritstump [player] Kills a player, but allows them to talk and vote during the day.`, @@ -2679,10 +2769,9 @@ export const commands: Chat.ChatCommands = { } if (!args[0]) return this.parse('/help mafia revealas'); for (const targetUsername of args) { - let player = game.playerTable[toID(targetUsername)]; - if (!player) player = game.dead[toID(targetUsername)]; + const player = game.getPlayer(toID(targetUsername)); if (player) { - game.revealRole(user, player, `${cmd === 'revealas' ? revealAs : player.getRole()}`); + game.revealRole(user, player, `${cmd === 'revealas' ? revealAs : player.getStylizedRole()}`); game.logAction(user, `revealed ${player.name}`); if (cmd === 'revealas') { game.secretLogAction(user, `fakerevealed ${player.name} as ${revealedRole!.role.name}`); @@ -2693,8 +2782,8 @@ export const commands: Chat.ChatCommands = { } }, revealrolehelp: [ - `/mafia revealrole [player] - Reveals the role of a player. Requires host % @ # &`, - `/mafia revealas [player], [role] - Fakereveals the role of a player as a certain role. Requires host % @ # &`, + `/mafia revealrole [player] - Reveals the role of a player. Requires host % @ # ~`, + `/mafia revealas [player], [role] - Fakereveals the role of a player as a certain role. Requires host % @ # ~`, ], unidle: 'idle', @@ -2704,12 +2793,19 @@ export const commands: Chat.ChatCommands = { idle(target, room, user, connection, cmd) { room = this.requireRoom(); const game = this.requireGame(Mafia); - const player = game.playerTable[user.id]; + const player = game.getPlayer(user.id); if (!player) return this.errorReply(`You are not in the game of ${game.title}.`); - if (game.phase !== 'night') return this.errorReply(`You can only submit an action or idle during the night phase.`); + + if (player.isEliminated()) { + return this.errorReply(`You have been eliminated from the game and cannot take any actions.`); + } + if (game.phase !== 'night') { + return this.errorReply(`You can only submit an action or idle during the night phase.`); + } if (!game.takeIdles) { return this.errorReply(`The host is not accepting idles through the script. Send your action or idle to the host.`); } + switch (cmd) { case 'idle': player.action = false; @@ -2745,21 +2841,40 @@ export const commands: Chat.ChatCommands = { `/mafia action [details] - Tells the host you are using an action with the given submission details.`, ], - forceadd: 'revive', - add: 'revive', + forceadd: 'add', + add(target, room, user, connection, cmd) { + room = this.requireRoom(); + const game = this.requireGame(Mafia); + if (game.hostid !== user.id && !game.cohostids.includes(user.id)) this.checkCan('mute', null, room); + if (!toID(target)) return this.parse('/help mafia add'); + const targetUser = Users.get(target); + if (!targetUser) { + throw new Chat.ErrorMessage(`The user "${target}" was not found.`); + } + game.join(targetUser, user, cmd === 'forceadd'); + }, + addhelp: [ + `/mafia add [player] - Add a new player to the game. Requires host % @ # ~`, + ], + revive(target, room, user, connection, cmd) { room = this.requireRoom(); const game = this.requireGame(Mafia); if (game.hostid !== user.id && !game.cohostids.includes(user.id)) this.checkCan('mute', null, room); if (!toID(target)) return this.parse('/help mafia revive'); - let didSomething = false; - if (game.revive(user, toID(target), cmd === 'forceadd')) { - didSomething = true; + + const player = game.getPlayer(toID(target)); + if (!player) { + throw new Chat.ErrorMessage(`"${target}" is not currently playing`); } - if (didSomething) game.logAction(user, `added players`); + if (!player.isEliminated()) { + throw new Chat.ErrorMessage(`${player.name} has not been eliminated.`); + } + + game.revive(user, player); }, revivehelp: [ - `/mafia revive [player] - Revive a player who died or add a new player to the game. Requires host % @ # &`, + `/mafia revive [player] - Revives a player who was eliminated. Requires host % @ # ~`, ], dl: 'deadline', @@ -2800,12 +2915,17 @@ export const commands: Chat.ChatCommands = { const game = this.requireGame(Mafia); if (game.hostid !== user.id && !game.cohostids.includes(user.id)) this.checkCan('mute', null, room); if (!game.started) return this.errorReply(`The game has not started yet.`); - const [player, mod] = target.split(','); + const [playerId, mod] = target.split(','); + const player = game.getPlayer(toID(playerId)); + if (!player) { + throw new Chat.ErrorMessage(`The player "${playerId}" does not exist.`); + } + if (cmd === 'applyhammermodifier') { - game.applyHammerModifier(user, toID(player), parseInt(mod)); + game.applyHammerModifier(user, player, parseInt(mod)); game.secretLogAction(user, `changed a hammer modifier`); } else { - game.applyVoteModifier(user, toID(player), parseInt(mod)); + game.applyVoteModifier(user, player, parseInt(mod)); game.secretLogAction(user, `changed a vote modifier`); } }, @@ -2872,7 +2992,7 @@ export const commands: Chat.ChatCommands = { if (!game.started) return this.errorReply(`The game has not started yet.`); target = toID(target); - const targetPlayer = game.playerTable[target] || game.dead[target]; + const targetPlayer = game.getPlayer(target as ID); const silence = cmd === 'silence'; if (!targetPlayer) return this.errorReply(`${target} is not in the game of mafia.`); if (silence === targetPlayer.silenced) { @@ -2883,8 +3003,8 @@ export const commands: Chat.ChatCommands = { game.logAction(user, `${!silence ? 'un' : ''}silenced a player`); }, silencehelp: [ - `/mafia silence [player] - Silences [player], preventing them from talking at all. Requires host % @ # &`, - `/mafia unsilence [player] - Removes a silence on [player], allowing them to talk again. Requires host % @ # &`, + `/mafia silence [player] - Silences [player], preventing them from talking at all. Requires host % @ # ~`, + `/mafia unsilence [player] - Removes a silence on [player], allowing them to talk again. Requires host % @ # ~`, ], insomniac: 'nighttalk', @@ -2897,7 +3017,7 @@ export const commands: Chat.ChatCommands = { if (!game.started) return this.errorReply(`The game has not started yet.`); target = toID(target); - const targetPlayer = game.playerTable[target] || game.dead[target]; + const targetPlayer = game.getPlayer(target as ID); const nighttalk = !cmd.startsWith('un'); if (!targetPlayer) return this.errorReply(`${target} is not in the game of mafia.`); if (nighttalk === targetPlayer.nighttalk) { @@ -2908,8 +3028,8 @@ export const commands: Chat.ChatCommands = { game.logAction(user, `${!nighttalk ? 'un' : ''}insomniacd a player`); }, nighttalkhelp: [ - `/mafia nighttalk [player] - Makes [player] an insomniac, allowing them to talk freely during the night. Requires host % @ # &`, - `/mafia unnighttalk [player] - Removes [player] as an insomniac, preventing them from talking during the night. Requires host % @ # &`, + `/mafia nighttalk [player] - Makes [player] an insomniac, allowing them to talk freely during the night. Requires host % @ # ~`, + `/mafia unnighttalk [player] - Removes [player] as an insomniac, preventing them from talking during the night. Requires host % @ # ~`, ], actor: 'priest', unactor: 'priest', @@ -2921,7 +3041,7 @@ export const commands: Chat.ChatCommands = { if (!game.started) return this.errorReply(`The game has not started yet.`); target = toID(target); - const targetPlayer = game.playerTable[target] || game.dead[target]; + const targetPlayer = game.getPlayer(target as ID); if (!targetPlayer) return this.errorReply(`${target} is not in the game of mafia.`); const actor = cmd.endsWith('actor'); @@ -2944,13 +3064,13 @@ export const commands: Chat.ChatCommands = { this.sendReply(`${targetPlayer.name} is now ${targetPlayer.hammerRestriction ? "an actor (can only hammer)" : "a priest (can't hammer)"}.`); if (actor) { // target is an actor, remove their vote because it's now impossible - game.unvote(targetPlayer.id, true); + game.unvote(targetPlayer, true); } game.logAction(user, `made a player actor/priest`); }, priesthelp: [ - `/mafia (un)priest [player] - Makes [player] a priest, preventing them from placing the hammer vote. Requires host % @ # &`, - `/mafia (un)actor [player] - Makes [player] an actor, preventing them from placing non-hammer votes. Requires host % @ # &`, + `/mafia (un)priest [player] - Makes [player] a priest, preventing them from placing the hammer vote. Requires host % @ # ~`, + `/mafia (un)actor [player] - Makes [player] an actor, preventing them from placing non-hammer votes. Requires host % @ # ~`, ], shifthammer: 'hammer', @@ -3000,7 +3120,7 @@ export const commands: Chat.ChatCommands = { game.logAction(user, `changed votelock status`); }, votelockhelp: [ - `/mafia votelock [on|off] - Allows or disallows players to change their vote. Requires host % @ # &`, + `/mafia votelock [on|off] - Allows or disallows players to change their vote. Requires host % @ # ~`, ], voting: 'votesall', @@ -3019,7 +3139,7 @@ export const commands: Chat.ChatCommands = { game.logAction(user, `changed voting status`); }, votinghelp: [ - `/mafia voting [on|off] - Allows or disallows players to vote. Requires host % @ # &`, + `/mafia voting [on|off] - Allows or disallows players to vote. Requires host % @ # ~`, ], enablenv: 'enablenl', @@ -3037,7 +3157,7 @@ export const commands: Chat.ChatCommands = { game.logAction(user, `changed novote status`); }, enablenlhelp: [ - `/mafia [enablenv|disablenv] - Allows or disallows players abstain from voting. Requires host % @ # &`, + `/mafia [enablenv|disablenv] - Allows or disallows players abstain from voting. Requires host % @ # ~`, ], forcevote(target, room, user) { @@ -3060,7 +3180,7 @@ export const commands: Chat.ChatCommands = { game.logAction(user, `changed forcevote status`); }, forcevotehelp: [ - `/mafia forcevote [yes/no] - Forces players' votes onto themselves, and prevents unvoting. Requires host % @ # &`, + `/mafia forcevote [yes/no] - Forces players' votes onto themselves, and prevents unvoting. Requires host % @ # ~`, ], votes(target, room, user) { @@ -3091,7 +3211,8 @@ export const commands: Chat.ChatCommands = { if (this.broadcasting) { game.sendPlayerList(); } else { - this.sendReplyBox(`Players (${game.playerCount}): ${Object.values(game.playerTable).map(p => p.safeName).sort().join(', ')}`); + const players = game.getRemainingPlayers(); + this.sendReplyBox(`Players (${players.length}): ${players.map(p => p.safeName).sort().join(', ')}`); } }, @@ -3122,8 +3243,7 @@ export const commands: Chat.ChatCommands = { return this.errorReply(`Only the host can view roles.`); } if (!game.started) return this.errorReply(`The game has not started.`); - const players = [...Object.values(game.playerTable), ...Object.values(game.dead)]; - this.sendReplyBox(players.map( + this.sendReplyBox(game.players.map( p => `${p.safeName}: ${p.role ? (p.role.alignment === 'solo' ? 'Solo ' : '') + p.role.safeName : 'No role'}` ).join('
')); }, @@ -3151,16 +3271,18 @@ export const commands: Chat.ChatCommands = { const game = this.requireGame(Mafia); const args = target.split(','); const action = toID(args.shift()); + const player = game.getPlayer(user.id); + switch (action) { case 'in': - if (user.id in game.playerTable) { + if (player) { // Check if they have requested to be subbed out. if (!game.requestedSub.includes(user.id)) { return this.errorReply(`You have not requested to be subbed out.`); } game.requestedSub.splice(game.requestedSub.indexOf(user.id), 1); this.errorReply(`You have cancelled your request to sub out.`); - game.playerTable[user.id].updateHtmlRoom(); + player.updateHtmlRoom(); } else { this.checkChat(null, room); if (game.subs.includes(user.id)) return this.errorReply(`You are already on the sub list.`); @@ -3174,12 +3296,15 @@ export const commands: Chat.ChatCommands = { } break; case 'out': - if (user.id in game.playerTable) { + if (player) { + if (player.isEliminated()) { + return this.errorReply(`You cannot request to be subbed out once eliminated.`); + } if (game.requestedSub.includes(user.id)) { return this.errorReply(`You have already requested to be subbed out.`); } game.requestedSub.push(user.id); - game.playerTable[user.id].updateHtmlRoom(); + player.updateHtmlRoom(); game.nextSub(); } else { if (game.hostid === user.id || game.cohostids.includes(user.id)) { @@ -3194,7 +3319,7 @@ export const commands: Chat.ChatCommands = { case 'next': if (game.hostid !== user.id && !game.cohostids.includes(user.id)) this.checkCan('mute', null, room); const toSub = args.shift(); - if (!(toID(toSub) in game.playerTable)) return this.errorReply(`${toSub} is not in the game.`); + if (!game.getPlayer(toID(toSub))) return this.errorReply(`${toSub} is not in the game.`); if (!game.subs.length) { if (game.hostRequestedSub.includes(toID(toSub))) { return this.errorReply(`${toSub} is already on the list to be subbed out.`); @@ -3239,9 +3364,9 @@ export const commands: Chat.ChatCommands = { break; default: if (game.hostid !== user.id && !game.cohostids.includes(user.id)) this.checkCan('mute', null, room); - const toSubOut = action; + const toSubOut = game.getPlayer(action); const toSubIn = toID(args.shift()); - if (!(toSubOut in game.playerTable)) return this.errorReply(`${toSubOut} is not in the game.`); + if (!toSubOut) return this.errorReply(`${toSubOut} is not in the game.`); const targetUser = Users.get(toSubIn); if (!targetUser) return this.errorReply(`The user "${toSubIn}" was not found.`); @@ -3249,23 +3374,24 @@ export const commands: Chat.ChatCommands = { if (game.subs.includes(targetUser.id)) { game.subs.splice(game.subs.indexOf(targetUser.id), 1); } - if (game.hostRequestedSub.includes(toSubOut)) { - game.hostRequestedSub.splice(game.hostRequestedSub.indexOf(toSubOut), 1); + if (game.hostRequestedSub.includes(toSubOut.id)) { + game.hostRequestedSub.splice(game.hostRequestedSub.indexOf(toSubOut.id), 1); } - if (game.requestedSub.includes(toSubOut)) { - game.requestedSub.splice(game.requestedSub.indexOf(toSubOut), 1); + if (game.requestedSub.includes(toSubOut.id)) { + game.requestedSub.splice(game.requestedSub.indexOf(toSubOut.id), 1); } - game.sub(toSubOut, toSubIn); + + game.sub(toSubOut, targetUser); game.logAction(user, `substituted a player`); } }, subhelp: [ `/mafia sub in - Request to sub into the game, or cancel a request to sub out.`, `/mafia sub out - Request to sub out of the game, or cancel a request to sub in.`, - `/mafia sub next, [player] - Forcibly sub [player] out of the game. Requires host % @ # &`, - `/mafia sub remove, [user] - Remove [user] from the sublist. Requres host % @ # &`, - `/mafia sub unrequest, [player] - Remove's a player's request to sub out of the game. Requires host % @ # &`, - `/mafia sub [player], [user] - Forcibly sub [player] for [user]. Requires host % @ # &`, + `/mafia sub next, [player] - Forcibly sub [player] out of the game. Requires host % @ # ~`, + `/mafia sub remove, [user] - Remove [user] from the sublist. Requres host % @ # ~`, + `/mafia sub unrequest, [player] - Remove's a player's request to sub out of the game. Requires host % @ # ~`, + `/mafia sub [player], [user] - Forcibly sub [player] for [user]. Requires host % @ # ~`, ], autosub(target, room, user) { @@ -3287,12 +3413,10 @@ export const commands: Chat.ChatCommands = { game.logAction(user, `changed autosub status`); }, autosubhelp: [ - `/mafia autosub [yes|no] - Sets if players will automatically sub out if a user is on the sublist. Requires host % @ # &`, + `/mafia autosub [yes|no] - Sets if players will automatically sub out if a user is on the sublist. Requires host % @ # ~`, ], cohost: 'subhost', - forcecohost: 'subhost', - forcesubhost: 'subhost', subhost(target, room, user, connection, cmd) { room = this.requireRoom(); const game = this.requireGame(Mafia); @@ -3303,15 +3427,11 @@ export const commands: Chat.ChatCommands = { if (!room.users[targetUser.id]) return this.errorReply(`${targetUser.name} is not in this room, and cannot be hosted.`); if (game.hostid === targetUser.id) return this.errorReply(`${targetUser.name} is already the host.`); if (game.cohostids.includes(targetUser.id)) return this.errorReply(`${targetUser.name} is already a cohost.`); - if (targetUser.id in game.playerTable) return this.errorReply(`The host cannot be ingame.`); - if (targetUser.id in game.dead) { - if (!cmd.includes('force')) { - return this.errorReply(`${targetUser.name} could potentially be revived. To continue anyway, use /mafia force${cmd} ${target}.`); - } - if (game.dead[targetUser.id].voting) game.unvote(targetUser.id); - game.dead[targetUser.id].destroy(); - delete game.dead[targetUser.id]; + + if (game.getPlayer(targetUser.id)) { + return this.errorReply(`${targetUser.name} cannot become a host because they are playing.`); } + if (game.subs.includes(targetUser.id)) game.subs.splice(game.subs.indexOf(targetUser.id), 1); if (cmd.includes('cohost')) { game.cohostids.push(targetUser.id); @@ -3370,7 +3490,7 @@ export const commands: Chat.ChatCommands = { game.end(); this.modlog('MAFIAEND', null); }, - endhelp: [`/mafia end - End the current game of mafia. Requires host + % @ # &`], + endhelp: [`/mafia end - End the current game of mafia. Requires host + % @ # ~`], role: 'data', alignment: 'data', @@ -3385,8 +3505,10 @@ export const commands: Chat.ChatCommands = { if (!game) { return this.errorReply(`There is no game of mafia running in this room. If you meant to display information about a role, use /mafia role [role name]`); } - if (!(user.id in game.playerTable)) return this.errorReply(`You are not in the game of ${game.title}.`); - const role = game.playerTable[user.id].role; + + const player = game.getPlayer(user.id); + if (!player) return this.errorReply(`You are not in the game of ${game.title}.`); + const role = player.role; if (!role) return this.errorReply(`You do not have a role yet.`); return this.sendReplyBox(`Your role is: ${role.safeName}`); } @@ -3502,7 +3624,7 @@ export const commands: Chat.ChatCommands = { for (let faction of args) { faction = toID(faction); const inFaction = []; - for (const player of [...Object.values(game.playerTable), ...Object.values(game.dead)]) { + for (const player of game.players) { if (player.role && toID(player.role.alignment) === faction) { toGiveTo.push(player.id); inFaction.push(player.id); @@ -3593,7 +3715,7 @@ export const commands: Chat.ChatCommands = { }, leaderboardhelp: [ `/mafia [leaderboard|mvpladder] - View the leaderboard or MVP ladder for the current or last month.`, - `/mafia [hostlogs|playlogs|leaverlogs] - View the host, play, or leaver logs for the current or last month. Requires % @ # &`, + `/mafia [hostlogs|playlogs|leaverlogs] - View the host, play, or leaver logs for the current or last month. Requires % @ # ~`, ], gameban: 'hostban', @@ -3639,8 +3761,8 @@ export const commands: Chat.ChatCommands = { this.privateModAction(`${targetUser.name} was banned from ${cmd === 'hostban' ? 'hosting' : 'playing'} mafia games by ${user.name}.`); }, hostbanhelp: [ - `/mafia (un)hostban [user], [reason], [duration] - Ban a user from hosting games for [duration] days. Requires % @ # &`, - `/mafia (un)gameban [user], [reason], [duration] - Ban a user from playing games for [duration] days. Requires % @ # &`, + `/mafia (un)hostban [user], [reason], [duration] - Ban a user from hosting games for [duration] days. Requires % @ # ~`, + `/mafia (un)gameban [user], [reason], [duration] - Ban a user from playing games for [duration] days. Requires % @ # ~`, ], ban: 'gamebanhelp', @@ -3701,7 +3823,7 @@ export const commands: Chat.ChatCommands = { this.sendReply(`The role ${id} was added to the database.`); }, addrolehelp: [ - `/mafia addrole name|alignment|image|memo1|memo2... - adds a role to the database. Name, memo are required. Requires % @ # &`, + `/mafia addrole name|alignment|image|memo1|memo2... - adds a role to the database. Name, memo are required. Requires % @ # ~`, ], overwritealignment: 'addalignment', @@ -3736,7 +3858,7 @@ export const commands: Chat.ChatCommands = { this.sendReply(`The alignment ${id} was added to the database.`); }, addalignmenthelp: [ - `/mafia addalignment name|plural|color|button color|image|memo1|memo2... - adds a memo to the database. Name, plural, memo are required. Requires % @ # &`, + `/mafia addalignment name|plural|color|button color|image|memo1|memo2... - adds a memo to the database. Name, plural, memo are required. Requires % @ # ~`, ], overwritetheme: 'addtheme', @@ -3784,7 +3906,7 @@ export const commands: Chat.ChatCommands = { this.sendReply(`The theme ${id} was added to the database.`); }, addthemehelp: [ - `/mafia addtheme name|description|players:rolelist|players:rolelist... - adds a theme to the database. Requires % @ # &`, + `/mafia addtheme name|description|players:rolelist|players:rolelist... - adds a theme to the database. Requires % @ # ~`, ], overwriteidea: 'addidea', @@ -3829,7 +3951,7 @@ export const commands: Chat.ChatCommands = { }, addideahelp: [ `/mafia addidea name|choices (number)|pick1|pick2... (new line here)`, - `(newline separated rolelist) - Adds an IDEA to the database. Requires % @ # &`, + `(newline separated rolelist) - Adds an IDEA to the database. Requires % @ # ~`, ], overwriteterm: 'addterm', @@ -3855,7 +3977,7 @@ export const commands: Chat.ChatCommands = { this.modlog(`MAFIAADDTERM`, null, id, {noalts: true, noip: true}); this.sendReply(`The term ${id} was added to the database.`); }, - addtermhelp: [`/mafia addterm name|memo1|memo2... - Adds a term to the database. Requires % @ # &`], + addtermhelp: [`/mafia addterm name|memo1|memo2... - Adds a term to the database. Requires % @ # ~`], overwritealias: 'addalias', addalias(target, room, user, connection, cmd) { @@ -3882,7 +4004,7 @@ export const commands: Chat.ChatCommands = { this.sendReply(`The alias ${from} was added, pointing to ${to}.`); }, addaliashelp: [ - `/mafia addalias from,to - Adds an alias to the database, redirecting (from) to (to). Requires % @ # &`, + `/mafia addalias from,to - Adds an alias to the database, redirecting (from) to (to). Requires % @ # ~`, ], deletedata(target, room, user) { @@ -3926,7 +4048,7 @@ export const commands: Chat.ChatCommands = { this.modlog(`MAFIADELETEDATA`, null, `${entry} from ${source}`, {noalts: true, noip: true}); this.sendReply(`The entry ${entry} was deleted from the ${source} database.`); }, - deletedatahelp: [`/mafia deletedata source,entry - Removes an entry from the database. Requires % @ # &`], + deletedatahelp: [`/mafia deletedata source,entry - Removes an entry from the database. Requires % @ # ~`], listdata(target, room, user) { if (!(target in MafiaData)) { return this.errorReply(`Invalid source. Valid sources are ${Object.keys(MafiaData).join(', ')}`); @@ -3956,7 +4078,7 @@ export const commands: Chat.ChatCommands = { this.modlog('MAFIADISABLE', null); return this.sendReply("Mafia has been disabled for this room."); }, - disablehelp: [`/mafia disable - Disables mafia in this room. Requires # &`], + disablehelp: [`/mafia disable - Disables mafia in this room. Requires # ~`], enable(target, room, user) { room = this.requireRoom(); @@ -3969,7 +4091,7 @@ export const commands: Chat.ChatCommands = { this.modlog('MAFIAENABLE', null); return this.sendReply("Mafia has been enabled for this room."); }, - enablehelp: [`/mafia enable - Enables mafia in this room. Requires # &`], + enablehelp: [`/mafia enable - Enables mafia in this room. Requires # ~`], }, mafiahelp(target, room, user) { if (!this.runBroadcast()) return; @@ -3977,18 +4099,18 @@ export const commands: Chat.ChatCommands = { buf += `
General Commands`; buf += [ `
General Commands for the Mafia Plugin:
`, - `/mafia host [user] - Create a game of Mafia with [user] as the host. Roomvoices can only host themselves. Requires + % @ # &`, - `/mafia nexthost - Host the next user in the host queue. Only works in the Mafia Room. Requires + % @ # &`, - `/mafia forcehost [user] - Bypass the host queue and host [user]. Only works in the Mafia Room. Requires % @ # &`, + `/mafia host [user] - Create a game of Mafia with [user] as the host. Roomvoices can only host themselves. Requires + % @ # ~`, + `/mafia nexthost - Host the next user in the host queue. Only works in the Mafia Room. Requires + % @ # ~`, + `/mafia forcehost [user] - Bypass the host queue and host [user]. Only works in the Mafia Room. Requires % @ # ~`, `/mafia sub [in|out] - Request to sub into the game, or cancel a request to sub out.`, `/mafia spectate - Spectate the game of mafia.`, `/mafia votes - Display the current vote count, and who's voting who.`, `/mafia players - Display the current list of players, will highlight players.`, `/mafia [rl|orl] - Display the role list or the original role list for the current game.`, `/mafia data [alignment|role|modifier|theme|term] - Get information on a mafia alignment, role, modifier, theme, or term.`, - `/mafia subhost [user] - Substitues the user as the new game host. Requires % @ # &`, - `/mafia (un)cohost [user] - Adds/removes the user as a cohost. Cohosts can talk during the game, as well as perform host actions. Requires % @ # &`, - `/mafia [enable|disable] - Enables/disables mafia in this room. Requires # &`, + `/mafia subhost [user] - Substitues the user as the new game host. Requires % @ # ~`, + `/mafia (un)cohost [user] - Adds/removes the user as a cohost. Cohosts can talk during the game, as well as perform host actions. Requires % @ # ~`, + `/mafia [enable|disable] - Enables/disables mafia in this room. Requires # ~`, ].join('
'); buf += `
Player Commands`; buf += [ @@ -4005,74 +4127,75 @@ export const commands: Chat.ChatCommands = { buf += `
Host Commands`; buf += [ `
Commands for game hosts and Cohosts to use:
`, - `/mafia playercap [cap|none]- Limit the number of players able to join the game. Player cap cannot be more than 20 or less than 2. Requires host % @ # &`, - `/mafia close - Closes signups for the current game. Requires host % @ # &`, - `/mafia closedsetup [on|off] - Sets if the game is a closed setup. Closed setups don't show the role list to players. Requires host % @ # &`, - `/mafia takeidles [on|off] - Sets if idles are accepted by the script or not. Requires host % @ # &`, - `/mafia prod - Notifies players that they must submit an action or idle if they haven't yet. Requires host % @ # &`, - `/mafia reveal [on|off] - Sets if roles reveal on death or not. Requires host % @ # &`, - `/mafia selfvote [on|hammer|off] - Allows players to self vote either at hammer or anytime. Requires host % @ # &`, - `/mafia [enablenl|disablenl] - Allows or disallows players abstain from voting. Requires host % @ # &`, - `/mafia votelock [on|off] - Allows or disallows players to change their vote. Requires host % @ # &`, - `/mafia voting [on|off] - Allows or disallows voting. Requires host % @ # &`, - `/mafia forcevote [yes/no] - Forces players' votes onto themselves, and prevents unvoting. Requires host % @ # &`, - `/mafia setroles [comma seperated roles] - Set the roles for a game of mafia. You need to provide one role per player. Requires host % @ # &`, - `/mafia forcesetroles [comma seperated roles] - Forcibly set the roles for a game of mafia. No role PM information or alignment will be set. Requires host % @ # &`, - `/mafia start - Start the game of mafia. Signups must be closed. Requires host % @ # &`, - `/mafia [day|night] - Move to the next game day or night. Requires host % @ # &`, - `/mafia extend (minutes) - Return to the previous game day. If (minutes) is provided, set the deadline for (minutes) minutes. Requires host % @ # &`, - `/mafia kill [player] - Kill a player, eliminating them from the game. Requires host % @ # &`, - `/mafia treestump [player] - Kills a player, but allows them to talk during the day still. Requires host % @ # &`, - `/mafia spirit [player] - Kills a player, but allows them to vote still. Requires host % @ # &`, - `/mafia spiritstump [player] - Kills a player, but allows them to talk and vote during the day. Requires host % @ # &`, - `/mafia kick [player] - Kicks a player from the game without revealing their role. Requires host % @ # &`, - `/mafia revive [player] - Revive a player who died or add a new player to the game. Requires host % @ # &`, - `/mafia revealrole [player] - Reveals the role of a player. Requires host % @ # &`, - `/mafia revealas [player], [role] - Fakereveals the role of a player as a certain role. Requires host % @ # &`, - `/mafia (un)silence [player] - Silences [player], preventing them from talking at all. Requires host % @ # &`, - `/mafia (un)nighttalk [player] - Allows [player] to talk freely during the night. Requires host % @ # &`, - `/mafia (un)[priest|actor] [player] - Makes [player] a priest (can't hammer) or actor (can only hammer). Requires host % @ # &`, + `/mafia playercap [cap|none]- Limit the number of players able to join the game. Player cap cannot be more than 20 or less than 2. Requires host % @ # ~`, + `/mafia close - Closes signups for the current game. Requires host % @ # ~`, + `/mafia closedsetup [on|off] - Sets if the game is a closed setup. Closed setups don't show the role list to players. Requires host % @ # ~`, + `/mafia takeidles [on|off] - Sets if idles are accepted by the script or not. Requires host % @ # ~`, + `/mafia prod - Notifies players that they must submit an action or idle if they haven't yet. Requires host % @ # ~`, + `/mafia reveal [on|off] - Sets if roles reveal on death or not. Requires host % @ # ~`, + `/mafia selfvote [on|hammer|off] - Allows players to self vote either at hammer or anytime. Requires host % @ # ~`, + `/mafia [enablenl|disablenl] - Allows or disallows players abstain from voting. Requires host % @ # ~`, + `/mafia votelock [on|off] - Allows or disallows players to change their vote. Requires host % @ # ~`, + `/mafia voting [on|off] - Allows or disallows voting. Requires host % @ # ~`, + `/mafia forcevote [yes/no] - Forces players' votes onto themselves, and prevents unvoting. Requires host % @ # ~`, + `/mafia setroles [comma seperated roles] - Set the roles for a game of mafia. You need to provide one role per player. Requires host % @ # ~`, + `/mafia forcesetroles [comma seperated roles] - Forcibly set the roles for a game of mafia. No role PM information or alignment will be set. Requires host % @ # ~`, + `/mafia start - Start the game of mafia. Signups must be closed. Requires host % @ # ~`, + `/mafia [day|night] - Move to the next game day or night. Requires host % @ # ~`, + `/mafia extend (minutes) - Return to the previous game day. If (minutes) is provided, set the deadline for (minutes) minutes. Requires host % @ # ~`, + `/mafia kill [player] - Kill a player, eliminating them from the game. Requires host % @ # ~`, + `/mafia treestump [player] - Kills a player, but allows them to talk during the day still. Requires host % @ # ~`, + `/mafia spirit [player] - Kills a player, but allows them to vote still. Requires host % @ # ~`, + `/mafia spiritstump [player] - Kills a player, but allows them to talk and vote during the day. Requires host % @ # ~`, + `/mafia kick [player] - Kicks a player from the game without revealing their role. Requires host % @ # ~`, + `/mafia revive [player] - Revives a player who was eliminated. Requires host % @ # ~`, + `/mafia add [player] - Adds a new player to the game. Requires host % @ # ~`, + `/mafia revealrole [player] - Reveals the role of a player. Requires host % @ # ~`, + `/mafia revealas [player], [role] - Fakereveals the role of a player as a certain role. Requires host % @ # ~`, + `/mafia (un)silence [player] - Silences [player], preventing them from talking at all. Requires host % @ # ~`, + `/mafia (un)nighttalk [player] - Allows [player] to talk freely during the night. Requires host % @ # ~`, + `/mafia (un)[priest|actor] [player] - Makes [player] a priest (can't hammer) or actor (can only hammer). Requires host % @ # ~`, `/mafia deadline [minutes|off] - Sets or removes the deadline for the game. Cannot be more than 20 minutes.`, - `/mafia sub next, [player] - Forcibly sub [player] out of the game. Requires host % @ # &`, - `/mafia sub remove, [user] - Forcibly remove [user] from the sublist. Requres host % @ # &`, - `/mafia sub unrequest, [player] - Remove's a player's request to sub out of the game. Requires host % @ # &`, - `/mafia sub [player], [user] - Forcibly sub [player] for [user]. Requires host % @ # &`, - `/mafia autosub [yes|no] - Sets if players will automatically sub out if a user is on the sublist. Defaults to yes. Requires host % @ # &`, - `/mafia (un)[love|hate] [player] - Makes it take 1 more (love) or less (hate) vote to hammer [player]. Requires host % @ # &`, - `/mafia (un)[mayor|voteless] [player] - Makes [player]'s' vote worth 2 votes (mayor) or makes [player]'s vote worth 0 votes (voteless). Requires host % @ # &`, + `/mafia sub next, [player] - Forcibly sub [player] out of the game. Requires host % @ # ~`, + `/mafia sub remove, [user] - Forcibly remove [user] from the sublist. Requres host % @ # ~`, + `/mafia sub unrequest, [player] - Remove's a player's request to sub out of the game. Requires host % @ # ~`, + `/mafia sub [player], [user] - Forcibly sub [player] for [user]. Requires host % @ # ~`, + `/mafia autosub [yes|no] - Sets if players will automatically sub out if a user is on the sublist. Defaults to yes. Requires host % @ # ~`, + `/mafia (un)[love|hate] [player] - Makes it take 1 more (love) or less (hate) vote to hammer [player]. Requires host % @ # ~`, + `/mafia (un)[mayor|voteless] [player] - Makes [player]'s' vote worth 2 votes (mayor) or makes [player]'s vote worth 0 votes (voteless). Requires host % @ # ~`, `/mafia hammer [hammer] - sets the hammer count to [hammer] and resets votes`, `/mafia hammer off - disables hammering`, `/mafia shifthammer [hammer] - sets the hammer count to [hammer] without resetting votes`, `/mafia resethammer - sets the hammer to the default, resetting votes`, `/mafia playerroles - View all the player's roles in chat. Requires host`, - `/mafia resetgame - Resets game data. Does not change settings from the host besides deadlines or add/remove any players. Requires host % @ # &`, - `/mafia end - End the current game of mafia. Requires host + % @ # &`, + `/mafia resetgame - Resets game data. Does not change settings from the host besides deadlines or add/remove any players. Requires host % @ # ~`, + `/mafia end - End the current game of mafia. Requires host + % @ # ~`, ].join('
'); buf += `
IDEA Module Commands`; buf += [ `
Commands for using IDEA modules
`, - `/mafia idea [idea] - starts the IDEA module [idea]. Requires + % @ # &, voices can only start for themselves`, - `/mafia ideareroll - rerolls the IDEA module. Requires host % @ # &`, + `/mafia idea [idea] - starts the IDEA module [idea]. Requires + % @ # ~, voices can only start for themselves`, + `/mafia ideareroll - rerolls the IDEA module. Requires host % @ # ~`, `/mafia ideapick [selection], [role] - selects a role`, `/mafia ideadiscards - shows the discarded roles`, - `/mafia ideadiscards [off|on] - hides discards from the players. Requires host % @ # &`, + `/mafia ideadiscards [off|on] - hides discards from the players. Requires host % @ # ~`, `/mafia customidea choices, picks (new line here, shift+enter)`, - `(comma or newline separated rolelist) - Starts an IDEA module with custom roles. Requires % @ # &`, + `(comma or newline separated rolelist) - Starts an IDEA module with custom roles. Requires % @ # ~`, ].join('
'); buf += `
`; buf += `
Mafia Room Specific Commands`; buf += [ `
Commands that are only useable in the Mafia Room:
`, - `/mafia queue add, [user] - Adds the user to the host queue. Requires + % @ # &, voices can only add themselves.`, - `/mafia queue remove, [user] - Removes the user from the queue. You can remove yourself regardless of rank. Requires % @ # &.`, + `/mafia queue add, [user] - Adds the user to the host queue. Requires + % @ # ~, voices can only add themselves.`, + `/mafia queue remove, [user] - Removes the user from the queue. You can remove yourself regardless of rank. Requires % @ # ~.`, `/mafia queue - Shows the list of users who are in queue to host.`, `/mafia win (points) [user1], [user2], [user3], ... - Award the specified users points to the mafia leaderboard for this month. The amount of points can be negative to take points. Defaults to 10 points.`, - `/mafia winfaction (points), [faction] - Award the specified points to all the players in the given faction. Requires % @ # &`, + `/mafia winfaction (points), [faction] - Award the specified points to all the players in the given faction. Requires % @ # ~`, `/mafia (un)mvp [user1], [user2], ... - Gives a MVP point and 10 leaderboard points to the users specified.`, `/mafia [leaderboard|mvpladder] - View the leaderboard or MVP ladder for the current or last month.`, - `/mafia [hostlogs|playlogs] - View the host logs or play logs for the current or last month. Requires % @ # &`, - `/mafia (un)hostban [user], [duration] - Ban a user from hosting games for [duration] days. Requires % @ # &`, - `/mafia (un)gameban [user], [duration] - Ban a user from playing games for [duration] days. Requires % @ # &`, + `/mafia [hostlogs|playlogs] - View the host logs or play logs for the current or last month. Requires % @ # ~`, + `/mafia (un)hostban [user], [duration] - Ban a user from hosting games for [duration] days. Requires % @ # ~`, + `/mafia (un)gameban [user], [duration] - Ban a user from playing games for [duration] days. Requires % @ # ~`, ].join('
'); buf += `
`; diff --git a/server/chat-plugins/modlog-viewer.ts b/server/chat-plugins/modlog-viewer.ts index cef81f7ea48a..eeecbfaff04e 100644 --- a/server/chat-plugins/modlog-viewer.ts +++ b/server/chat-plugins/modlog-viewer.ts @@ -356,7 +356,7 @@ export const commands: Chat.ChatCommands = { if (!target) return this.parse(`/help modlogstats`); return this.parse(`/join view-modlogstats-${target}`); }, - modlogstatshelp: [`/modlogstats [userid] - Fetch all information on that [userid] from the modlog (IPs, alts, etc). Requires: @ &`], + modlogstatshelp: [`/modlogstats [userid] - Fetch all information on that [userid] from the modlog (IPs, alts, etc). Requires: @ ~`], }; export const pages: Chat.PageTable = { @@ -389,7 +389,7 @@ export const pages: Chat.PageTable = { if (entry.ip) { let ipTable = punishmentsByIp.get(entry.ip); if (!ipTable) { - ipTable = new Utils.Multiset(); + ipTable = new Utils.Multiset(); punishmentsByIp.set(entry.ip, ipTable); } ipTable.add(entry.action); @@ -448,7 +448,7 @@ export const pages: Chat.PageTable = { for (const [ip, table] of punishmentsByIp) { buf += `${ip}`; for (const key of keys) { - buf += `${table.get(key) || 0}`; + buf += `${table.get(key)}`; } buf += ``; } diff --git a/server/chat-plugins/othermetas.ts b/server/chat-plugins/othermetas.ts index 139a43658ef2..b335b4563226 100644 --- a/server/chat-plugins/othermetas.ts +++ b/server/chat-plugins/othermetas.ts @@ -2,7 +2,7 @@ * Other Metagames chat plugin * Lets users see elements of Pokemon in various Other Metagames. * Originally by Spandan. - * @author Kris + * @author dhelmise */ import {Utils} from '../../lib'; @@ -70,11 +70,11 @@ export const commands: Chat.ChatCommands = { } if (target === 'month') this.target = 'omofthemonth'; - this.run('formathelp'); + return this.run('formathelp'); }, othermetashelp: [ `/om - Provides links to information on the Other Metagames.`, - `!om - Show everyone that information. Requires: + % @ # &`, + `!om - Show everyone that information. Requires: + % @ # ~`, ], mnm: 'mixandmega', @@ -91,7 +91,7 @@ export const commands: Chat.ChatCommands = { } else { throw new Chat.ErrorMessage(`A mod by the name of '${mod.trim()}' does not exist.`); } - if (dex === Dex.dexes['ssb']) { + if (dex === Dex.dexes['gen9ssb']) { throw new Chat.ErrorMessage(`The SSB mod supports custom elements for Mega Stones that have the capability of crashing the server.`); } } @@ -208,7 +208,7 @@ export const commands: Chat.ChatCommands = { } else { throw new Chat.ErrorMessage(`A mod by the name of '${sep[1].trim()}' does not exist.`); } - if (dex === Dex.dexes['ssb']) { + if (dex === Dex.dexes['gen9ssb']) { throw new Chat.ErrorMessage(`The SSB mod supports custom elements for Mega Stones that have the capability of crashing the server.`); } } @@ -815,7 +815,7 @@ export const commands: Chat.ChatCommands = { ], reevo: 'showevo', - showevo(target, user, room, connection, cmd) { + showevo(target, room, user, connection, cmd) { if (!this.runBroadcast()) return; const targetid = toID(target); const isReEvo = cmd === 'reevo'; @@ -825,34 +825,36 @@ export const commands: Chat.ChatCommands = { throw new Chat.ErrorMessage(`Error: Pok\u00e9mon ${target} not found.`); } if (!evo.prevo) { - const evoBaseSpecies = Dex.species.get(evo.baseSpecies); + const evoBaseSpecies = Dex.species.get( + (Array.isArray(evo.battleOnly) ? evo.battleOnly[0] : evo.battleOnly) || evo.changesFrom || evo.name + ); if (!evoBaseSpecies.prevo) throw new Chat.ErrorMessage(`Error: ${evoBaseSpecies.name} is not an evolution.`); const prevoSpecies = Dex.species.get(evoBaseSpecies.prevo); const deltas = Utils.deepClone(evo); - if (!isReEvo) { - deltas.tier = 'CE'; - deltas.weightkg = evo.weightkg - prevoSpecies.weightkg; - deltas.types = []; - if (evo.types[0] !== prevoSpecies.types[0]) deltas.types[0] = evo.types[0]; - if (evo.types[1] !== prevoSpecies.types[1]) { - deltas.types[1] = evo.types[1] || evo.types[0]; - } - if (deltas.types.length) { + if (!isReEvo) { + deltas.tier = 'CE'; + deltas.weightkg = evo.weightkg - prevoSpecies.weightkg; + deltas.types = []; + if (evo.types[0] !== prevoSpecies.types[0]) deltas.types[0] = evo.types[0]; + if (evo.types[1] !== prevoSpecies.types[1]) { + deltas.types[1] = evo.types[1] || evo.types[0]; + } + if (deltas.types.length) { // Undefined type remover - deltas.types = deltas.types.filter((type: string | undefined) => type !== undefined); + deltas.types = deltas.types.filter((type: string | undefined) => type !== undefined); if (deltas.types[0] === deltas.types[1]) deltas.types = [deltas.types[0]]; - } else { + } else { deltas.types = null; - } - } - deltas.bst = 0; - let i: StatID; - for (i in evo.baseStats) { + } + } + deltas.bst = 0; + let i: StatID; + for (i in evo.baseStats) { const statChange = evoBaseSpecies.baseStats[i] - prevoSpecies.baseStats[i]; const formeChange = evo.baseStats[i] - evoBaseSpecies.baseStats[i]; if (!isReEvo) { - if (!evo.prevo) { + if (!evo.prevo) { deltas.baseStats[i] = formeChange; } else { deltas.baseStats[i] = statChange; @@ -920,4 +922,24 @@ export const commands: Chat.ChatCommands = { showevohelp: [ `/showevo - Shows the changes that a Pok\u00e9mon applies in Cross Evolution`, ], + + pokemove(target, room, user) { + if (!this.runBroadcast()) return; + const species = Dex.species.get(target); + if (!species.exists) return this.parse('/help pokemove'); + const move = Utils.deepClone(Dex.moves.get('tackle')); + move.name = species.name; + move.type = species.types[0]; + move.flags = {protect: 1}; + move.basePower = Math.max(species.baseStats['atk'], species.baseStats['spa']); + move.pp = 5; + move.gen = species.gen; + move.num = species.num; + move.desc = move.shortDesc = `Gives ${species.abilities['0']} as a second ability after use.`; + move.category = species.baseStats['spa'] >= species.baseStats['atk'] ? 'Special' : 'Physical'; + this.sendReply(`|raw|${Chat.getDataMoveHTML(move)}`); + }, + pokemovehelp: [ + `/pokemove - Shows the Pokemove data for .`, + ], }; diff --git a/server/chat-plugins/permalocks.ts b/server/chat-plugins/permalocks.ts index aaef62c4f768..e5708e903fb7 100644 --- a/server/chat-plugins/permalocks.ts +++ b/server/chat-plugins/permalocks.ts @@ -533,9 +533,9 @@ export const commands: Chat.ChatCommands = { this.sendReply(`Removed ${targetID}'s permalock post icon.`); }, help: [ - '/perma nom OR /perma - Open the page to make a nomination for a permanent punishment. Requires: % @ &', - '/perma list - View open nominations. Requires: &', - '/perma viewnom [userid] - View a nomination for the given [userid]. Requires: &', + '/perma nom OR /perma - Open the page to make a nomination for a permanent punishment. Requires: % @ ~', + '/perma list - View open nominations. Requires: % @ ~', + '/perma viewnom [userid] - View a nomination for the given [userid]. Requires: ~', ], }, }; diff --git a/server/chat-plugins/poll.ts b/server/chat-plugins/poll.ts index 99698e34bc74..2710e055b624 100644 --- a/server/chat-plugins/poll.ts +++ b/server/chat-plugins/poll.ts @@ -117,7 +117,7 @@ export class Poll extends Rooms.MinorActivity { if (this.maxVotes && this.totalVotes >= this.maxVotes) { this.end(this.room); return this.room - .add(`|c|&|/log The poll hit the max vote cap of ${this.maxVotes}, and has ended.`) + .add(`|c|~|/log The poll hit the max vote cap of ${this.maxVotes}, and has ended.`) .update(); } @@ -469,8 +469,8 @@ export const commands: Chat.ChatCommands = { this.addModAction(room.tr`A poll was started by ${user.name}.`); }, newhelp: [ - `/poll create [question], [option1], [option2], [...] - Creates a poll. Requires: % @ # &`, - `/poll createmulti [question], [option1], [option2], [...] - Creates a poll, allowing for multiple answers to be selected. Requires: % @ # &`, + `/poll create [question], [option1], [option2], [...] - Creates a poll. Requires: % @ # ~`, + `/poll createmulti [question], [option1], [option2], [...] - Creates a poll, allowing for multiple answers to be selected. Requires: % @ # ~`, `To queue a poll, use [queue], [queuemulti], [queuehtml], or [htmlqueuemulti].`, `Polls can be used as quiz questions. To do this, prepend all correct answers with a +.`, ], @@ -480,7 +480,7 @@ export const commands: Chat.ChatCommands = { this.checkCan('mute', null, room); this.parse(`/join view-pollqueue-${room.roomid}`); }, - viewqueuehelp: [`/viewqueue - view the queue of polls in the room. Requires: % @ # &`], + viewqueuehelp: [`/viewqueue - view the queue of polls in the room. Requires: % @ # ~`], deletequeue(target, room, user) { room = this.requireRoom(); @@ -509,7 +509,7 @@ export const commands: Chat.ChatCommands = { this.refreshPage(`pollqueue-${room.roomid}`); }, deletequeuehelp: [ - `/poll deletequeue [number] - deletes poll at the corresponding queue slot (1 = next, 2 = the one after that, etc). Requires: % @ # &`, + `/poll deletequeue [number] - deletes poll at the corresponding queue slot (1 = next, 2 = the one after that, etc). Requires: % @ # ~`, ], clearqueue(target, room, user, connection, cmd) { room = this.requireRoom(); @@ -523,7 +523,7 @@ export const commands: Chat.ChatCommands = { this.sendReply(this.tr`Cleared poll queue.`); }, clearqueuehelp: [ - `/poll clearqueue - deletes the queue of polls. Requires: % @ # &`, + `/poll clearqueue - deletes the queue of polls. Requires: % @ # ~`, ], deselect: 'select', @@ -585,8 +585,8 @@ export const commands: Chat.ChatCommands = { } }, timerhelp: [ - `/poll timer [minutes] - Sets the poll to automatically end after [minutes] minutes. Requires: % @ # &`, - `/poll timer clear - Clears the poll's timer. Requires: % @ # &`, + `/poll timer [minutes] - Sets the poll to automatically end after [minutes] minutes. Requires: % @ # ~`, + `/poll timer clear - Clears the poll's timer. Requires: % @ # ~`, ], results(target, room, user) { @@ -610,7 +610,7 @@ export const commands: Chat.ChatCommands = { this.privateModAction(room.tr`The poll was ended by ${user.name}.`); poll.end(room, Poll); }, - endhelp: [`/poll end - Ends a poll and displays the results. Requires: % @ # &`], + endhelp: [`/poll end - Ends a poll and displays the results. Requires: % @ # ~`], show: '', display: '', @@ -659,19 +659,19 @@ export const commands: Chat.ChatCommands = { this.sendReply( `|html|
/poll allows rooms to run their own polls (limit 1 at a time).
` + `Polls can be used as quiz questions, by putting + before correct answers.
` + - `/poll create [question], [option1], [option2], [...] - Creates a poll. Requires: % @ # &
` + - `/poll createmulti [question], [option1], [option2], [...] - Creates a poll, allowing for multiple answers to be selected. Requires: % @ # &
` + - `/poll htmlcreate(multi) [question], [option1], [option2], [...] - Creates a poll, with HTML allowed in the question and options. Requires: # &
` + + `/poll create [question], [option1], [option2], [...] - Creates a poll. Requires: % @ # ~` + + `/poll createmulti [question], [option1], [option2], [...] - Creates a poll, allowing for multiple answers to be selected. Requires: % @ # ~
` + + `/poll htmlcreate(multi) [question], [option1], [option2], [...] - Creates a poll, with HTML allowed in the question and options. Requires: # ~
` + `/poll vote [number] - Votes for option [number].
` + - `/poll timer [minutes] - Sets the poll to automatically end after [minutes]. Requires: % @ # &.
` + + `/poll timer [minutes] - Sets the poll to automatically end after [minutes]. Requires: % @ # ~.
` + `/poll results - Shows the results of the poll without voting. NOTE: you can't go back and vote after using this.
` + `/poll display - Displays the poll.
` + - `/poll end - Ends a poll and displays the results. Requires: % @ # &.
` + - `/poll queue [question], [option1], [option2], [...] - Add a poll in queue. Requires: % @ # &
` + + `/poll end - Ends a poll and displays the results. Requires: % @ # ~.
` + + `/poll queue [question], [option1], [option2], [...] - Add a poll in queue. Requires: % @ # ~
` + `/poll deletequeue [number] - Deletes poll at the corresponding queue slot (1 = next, 2 = the one after that, etc).
` + - `/poll clearqueue - Deletes the queue of polls. Requires: % @ # &.
` + - `/poll viewqueue - View the queue of polls in the room. Requires: % @ # &
` + - `/poll maxvotes [number] - Set the max poll votes to the given [number]. Requires: % @ # &
` + + `/poll clearqueue - Deletes the queue of polls. Requires: % @ # ~.
` + + `/poll viewqueue - View the queue of polls in the room. Requires: % @ # ~
` + + `/poll maxvotes [number] - Set the max poll votes to the given [number]. Requires: % @ # ~
` + `
` ); }, diff --git a/server/chat-plugins/quotes.ts b/server/chat-plugins/quotes.ts index c64a57049f0a..4557e952d383 100644 --- a/server/chat-plugins/quotes.ts +++ b/server/chat-plugins/quotes.ts @@ -45,8 +45,7 @@ export const commands: Chat.ChatCommands = { }, randquotehelp: [`/randquote [showauthor] - Show a random quote from the room. Add 'showauthor' to see who added it and when.`], - addquote: 'quote', - quote(target, room, user) { + addquote(target, room, user) { room = this.requireRoom(); if (!room.persist) { return this.errorReply("This command is unavailable in temporary rooms."); @@ -54,7 +53,7 @@ export const commands: Chat.ChatCommands = { target = target.trim(); this.checkCan('mute', null, room); if (!target) { - return this.parse(`/help quote`); + return this.parse(`/help addquote`); } if (!quotes[room.roomid]) quotes[room.roomid] = []; @@ -78,28 +77,28 @@ export const commands: Chat.ChatCommands = { this.privateModAction(`${user.name} added a new quote: "${collapsedQuote}".`); return this.modlog(`ADDQUOTE`, null, collapsedQuote); }, - quotehelp: [`/quote [quote] - Adds [quote] to the room's quotes. Requires: % @ # &`], + addquotehelp: [`/addquote [quote] - Adds [quote] to the room's quotes. Requires: % @ # ~`], removequote(target, room, user) { room = this.requireRoom(); this.checkCan('mute', null, room); if (!quotes[room.roomid]?.length) return this.errorReply(`This room has no quotes.`); - const index = parseInt(target.trim()); + const roomQuotes = quotes[room.roomid]; + const index = toID(target) === 'last' ? roomQuotes.length - 1 : parseInt(toID(target)) - 1; if (isNaN(index)) { return this.errorReply(`Invalid index.`); } - const roomQuotes = quotes[room.roomid]; - if (!roomQuotes[index - 1]) { + if (!roomQuotes[index]) { return this.errorReply(`Quote not found.`); } - const [removed] = roomQuotes.splice(index - 1, 1); + const [removed] = roomQuotes.splice(index, 1); const collapsedQuote = removed.quote.replace(/\n/g, ' '); - this.privateModAction(`${user.name} removed quote indexed at ${index}: "${collapsedQuote}" (originally added by ${removed.userid}).`); + this.privateModAction(`${user.name} removed quote indexed at ${index + 1}: "${collapsedQuote}" (originally added by ${removed.userid}).`); this.modlog(`REMOVEQUOTE`, null, collapsedQuote); saveQuotes(); this.refreshPage(`quotes-${room.roomid}`); }, - removequotehelp: [`/removequote [index] - Removes the quote from the room's quotes. Requires: % @ # &`], + removequotehelp: [`/removequote [index] - Removes the quote from the room's quotes. Requires: % @ # ~`], viewquote(target, room, user) { room = this.requireRoom(); @@ -122,7 +121,6 @@ export const commands: Chat.ChatCommands = { viewquotehelp: [ `/viewquote [index][, params] - View the quote from the room's quotes.`, `If 'showauthor' is used for the [params] argument, it shows who added the quote and when.`, - `Requires: % @ # &`, ], viewquotes: 'quotes', @@ -132,6 +130,18 @@ export const commands: Chat.ChatCommands = { this.parse(`/join view-quotes-${targetRoom.roomid}`); }, quoteshelp: [`/quotes [room] - Shows all quotes for [room]. Defaults the room the command is used in.`], + + quote() { + this.sendReply(`/quote as a method of adding quotes has been deprecated. Use /addquote instead.`); + return this.parse(`/help quote`); + }, + quotehelp: [ + "/randquote [showauthor] - Show a random quote from the room. Add 'showauthor' to see who added it and when.", + "/removequote [index] - Removes the quote from the room's quotes. Requires: % @ # ~", + "/viewquote [index][, params] - View the quote from the room's quotes.", + "If 'showauthor' is used for the [params] argument, it shows who added the quote and when.", + "/quotes [room] - Shows all quotes for [room]. Defaults the room the command is used in.", + ], }; export const pages: Chat.PageTable = { diff --git a/server/chat-plugins/randombattles/index.ts b/server/chat-plugins/randombattles/index.ts index 5f7c6a8a4838..d9ca18a6adea 100644 --- a/server/chat-plugins/randombattles/index.ts +++ b/server/chat-plugins/randombattles/index.ts @@ -1,12 +1,11 @@ /** * Random Battles chat-plugin - * Written by Kris with inspiration from sirDonovan and The Immortal + * Written by dhelmise with inspiration from sirDonovan and The Immortal * * Set probability code written by Annika */ import {FS, Utils} from '../../../lib'; -import {SSBSet, ssbSets} from '../../../data/mods/ssb/random-teams'; interface SetCriteria { @@ -110,7 +109,7 @@ const GEN_NAMES: {[k: string]: string} = { gen8: '[Gen 8]', gen9: '[Gen 9]', }; -const STAT_NAMES: {[k: string]: string} = { +export const STAT_NAMES: {[k: string]: string} = { hp: "HP", atk: "Atk", def: "Def", spa: "SpA", spd: "SpD", spe: "Spe", }; @@ -124,7 +123,8 @@ function formatAbility(ability: Ability | string) { ability = Dex.abilities.get(ability); return `${ability.name}`; } -function formatNature(n: string) { + +export function formatNature(n: string) { const nature = Dex.natures.get(n); return nature.name; } @@ -143,46 +143,83 @@ function formatItem(item: Item | string) { } } +function formatType(type: TypeInfo | string) { + type = Dex.types.get(type); + return type.name; +} + /** * Gets the sets for a Pokemon for a format that uses the new schema. * Old formats will use getData() */ -function getSets(species: string | Species, format: string | Format = 'gen9randombattle'): any[] | null { +function getSets(species: string | Species, format: string | Format = 'gen9randombattle'): { + level: number, + sets: any[], +} | null { const dex = Dex.forFormat(format); format = Dex.formats.get(format); species = dex.species.get(species); const isDoubles = format.gameType === 'doubles'; + let folderName = format.mod; + if (format.team === 'randomBaby') folderName += 'baby'; + if (species.isNonstandard === 'CAP') folderName += 'cap'; const setsFile = JSON.parse( - FS(`data/${dex.isBase ? '' : `mods/${dex.currentMod}/`}random-${isDoubles ? `doubles-` : ``}sets.json`) + FS(`data/random-battles/${folderName}/${isDoubles ? 'doubles-' : ''}sets.json`) .readIfExistsSync() || '{}' ); - const sets = setsFile[species.id]?.sets; - if (!sets?.length) return null; - return sets; + const data = setsFile[species.id]; + if (!data?.sets?.length) return null; + return data; } /** - * Gets the random battles data for a Pokemon for formats other than gen9 and gen7singles. + * Gets the random battles data for a Pokemon for formats with the old schema. */ function getData(species: string | Species, format: string | Format): any | null { const dex = Dex.forFormat(format); format = Dex.formats.get(format); species = dex.species.get(species); - // Gen 7 Random Doubles has a separate file to Gen 7 singles but still uses the old system. - const isGen7Doubles = format.gameType === 'doubles' && dex.gen === 7; const dataFile = JSON.parse( - FS(`data/mods/${dex.currentMod}/random-${isGen7Doubles ? 'doubles-' : ''}data.json`).readIfExistsSync() || '{}' + FS(`data/random-battles/${format.mod}/data.json`).readIfExistsSync() || '{}' ); const data = dataFile[species.id]; if (!data) return null; return data; } +/** + * Gets the default level for a Pokemon in the given format. + * Returns 0 if the format doesn't use default levels or it can't be determined. + */ +function getLevel(species: string | Species, format: string | Format): number { + const dex = Dex.forFormat(format); + format = Dex.formats.get(format); + species = dex.species.get(species); + switch (format.id) { + // Only formats where levels are not all manually assigned should be copied here + case 'gen2randombattle': + const levelScale: {[k: string]: number} = { + ZU: 81, + ZUBL: 79, + PU: 77, + PUBL: 75, + NU: 73, + NUBL: 71, + UU: 69, + UUBL: 67, + OU: 65, + Uber: 61, + }; + return levelScale[species.tier] || 80; + } + return 0; +} + function getRBYMoves(species: string | Species) { species = Dex.mod(`gen1`).species.get(species); const data = getData(species, 'gen1randombattle'); if (!data) return false; - let buf = ``; + let buf = `
Level: ${data.level}`; if (data.comboMoves) { buf += `
Combo moves: `; buf += data.comboMoves.map(formatMove).sort().join(", "); @@ -230,7 +267,7 @@ function battleFactorySets(species: string | Species, tier: string | null, gen = const genNum = parseInt(gen[3]); if (isNaN(genNum) || genNum < 6 || (isBSS && genNum < 7)) return null; const statsFile = JSON.parse( - FS(`data${gen === 'gen9' ? '/' : `/mods/${gen}`}/${isBSS ? `bss-` : ``}factory-sets.json`).readIfExistsSync() || + FS(`data/random-battles/gen${genNum}/${isBSS ? `bss-` : ``}factory-sets.json`).readIfExistsSync() || "{}" ); if (!Object.keys(statsFile).length) return null; @@ -287,41 +324,79 @@ function battleFactorySets(species: string | Species, tier: string | null, gen = const format = Dex.formats.get(`${gen}bssfactory`); if (!(species.id in statsFile)) return {e: `${species.name} doesn't have any sets in ${format.name}.`}; const setObj = statsFile[species.id]; - buf += `Sets for ${species.name} in ${format.name}:
`; - for (const [i, set] of setObj.sets.entries()) { - buf += `
Set ${i + 1}`; - buf += `
    `; - buf += `
  • ${set.species}${set.gender ? ` (${set.gender})` : ``} @ ${Array.isArray(set.item) ? set.item.map(formatItem).join(" / ") : formatItem(set.item)}
  • `; - buf += `
  • Ability: ${Array.isArray(set.ability) ? set.ability.map(formatAbility).join(" / ") : formatAbility(set.ability)}
  • `; - if (!set.level) buf += `
  • Level: 50
  • `; - if (set.level && set.level < 50) buf += `
  • Level: ${set.level}
  • `; - if (set.shiny) buf += `
  • Shiny: Yes
  • `; - if (set.happiness) buf += `
  • Happiness: ${set.happiness}
  • `; - if (set.evs) { - buf += `
  • EVs: `; - const evs: string[] = []; - let ev: string; - for (ev in set.evs) { - if (set.evs[ev] === 0) continue; - evs.push(`${set.evs[ev]} ${STAT_NAMES[ev]}`); + if (genNum >= 9) { + buf += `Species rarity: ${setObj.weight} (higher is more common, max 10)
    `; + buf += `Sets for ${species.name} in ${format.name}:
    `; + for (const [i, set] of setObj.sets.entries()) { + buf += `
    Set ${i + 1} (${set.weight}%)`; + buf += `
      `; + buf += `
    • ${Dex.forFormat(format).species.get(set.species).name} @ ${set.item.map(formatItem).join(" / ")}
    • `; + buf += `
    • Ability: ${set.ability.map(formatAbility).join(" / ")}
    • `; + buf += `
    • Level: 50
    • `; + buf += `
    • Tera Type: ${set.teraType.map(formatType).join(' / ')}
    • `; + if (set.evs) { + buf += `
    • EVs: `; + const evs: string[] = []; + let ev: string; + for (ev in set.evs) { + if (!set.evs[ev]) continue; + evs.push(`${set.evs[ev]} ${STAT_NAMES[ev]}`); + } + buf += `${evs.join(" / ")}
    • `; } - buf += `${evs.join(" / ")}`; - } - buf += `
    • ${Array.isArray(set.nature) ? set.nature.map(formatNature).join(" / ") : formatNature(set.nature)} Nature
    • `; - if (set.ivs) { - buf += `
    • IVs: `; - const ivs: string[] = []; - let iv: string; - for (iv in set.ivs) { - if (set.ivs[iv] === 31) continue; - ivs.push(`${set.ivs[iv]} ${STAT_NAMES[iv]}`); + buf += `
    • ${formatNature(set.nature)} Nature
    • `; + if (set.ivs) { + buf += `
    • IVs: `; + const ivs: string[] = []; + let iv: string; + for (iv in set.ivs) { + if (set.ivs[iv] === 31) continue; + ivs.push(`${set.ivs[iv]} ${STAT_NAMES[iv]}`); + } + buf += `${ivs.join(" / ")}
    • `; } - buf += `${ivs.join(" / ")}`; + for (const moveSlot of set.moves) { + buf += `
    • - ${moveSlot.map(formatMove).join(' / ')}
    • `; + } + buf += `
    `; } - for (const moveid of set.moves) { - buf += `
  • - ${Array.isArray(moveid) ? moveid.map(formatMove).join(" / ") : formatMove(moveid)}
  • `; + } else { + buf += `Sets for ${species.name} in ${format.name}:
    `; + for (const [i, set] of setObj.sets.entries()) { + buf += `
    Set ${i + 1}`; + buf += `
      `; + buf += `
    • ${set.species}${set.gender ? ` (${set.gender})` : ``} @ ${Array.isArray(set.item) ? set.item.map(formatItem).join(" / ") : formatItem(set.item)}
    • `; + buf += `
    • Ability: ${Array.isArray(set.ability) ? set.ability.map(formatAbility).join(" / ") : formatAbility(set.ability)}
    • `; + if (!set.level) buf += `
    • Level: 50
    • `; + if (set.level && set.level < 50) buf += `
    • Level: ${set.level}
    • `; + if (set.shiny) buf += `
    • Shiny: Yes
    • `; + if (set.happiness) buf += `
    • Happiness: ${set.happiness}
    • `; + if (set.evs) { + buf += `
    • EVs: `; + const evs: string[] = []; + let ev: string; + for (ev in set.evs) { + if (set.evs[ev] === 0) continue; + evs.push(`${set.evs[ev]} ${STAT_NAMES[ev]}`); + } + buf += `${evs.join(" / ")}
    • `; + } + buf += `
    • ${Array.isArray(set.nature) ? set.nature.map(formatNature).join(" / ") : formatNature(set.nature)} Nature
    • `; + if (set.ivs) { + buf += `
    • IVs: `; + const ivs: string[] = []; + let iv: string; + for (iv in set.ivs) { + if (set.ivs[iv] === 31) continue; + ivs.push(`${set.ivs[iv]} ${STAT_NAMES[iv]}`); + } + buf += `${ivs.join(" / ")}
    • `; + } + for (const moveid of set.moves) { + buf += `
    • - ${Array.isArray(moveid) ? moveid.map(formatMove).join(" / ") : formatMove(moveid)}
    • `; + } + buf += `
    `; } - buf += `
`; } } return buf; @@ -330,7 +405,7 @@ function battleFactorySets(species: string | Species, tier: string | null, gen = function CAP1v1Sets(species: string | Species) { species = Dex.species.get(species); const statsFile = JSON.parse( - FS(`data/mods/gen8/cap-1v1-sets.json`).readIfExistsSync() || + FS(`data/random-battles/gen8/cap-1v1-sets.json`).readIfExistsSync() || "{}" ); if (!Object.keys(statsFile).length) return null; @@ -381,380 +456,24 @@ function CAP1v1Sets(species: string | Species) { return buf; } -function generateSSBSet(set: SSBSet, dex: ModdedDex, baseDex: ModdedDex) { - if (set.skip) { - const baseSet = toID(Object.values(ssbSets[set.skip]).join()); - const skipSet = toID(Object.values(set).join()).slice(0, -toID(set.skip).length); - if (baseSet === skipSet) return ``; - } - let buf = ``; - buf += `
Set`; - buf += `
  • ${set.species}${set.gender !== '' ? ` (${set.gender})` : ``} @ ${Array.isArray(set.item) ? set.item.map(x => dex.items.get(x).name).join(' / ') : dex.items.get(set.item).name}
  • `; - buf += `
  • Ability: ${Array.isArray(set.ability) ? set.ability.map(x => dex.abilities.get(x).name).join(' / ') : dex.abilities.get(set.ability).name}
  • `; - if (set.shiny) buf += `
  • Shiny: ${typeof set.shiny === 'number' ? `Sometimes` : `Yes`}
  • `; - if (set.evs) { - const evs: string[] = []; - let ev: StatID; - for (ev in set.evs) { - if (set.evs[ev] === 0) continue; - evs.push(`${set.evs[ev]} ${STAT_NAMES[ev]}`); - } - buf += `
  • EVs: ${evs.join(" / ")}
  • `; - } - if (set.nature) { - buf += `
  • ${Array.isArray(set.nature) ? set.nature.join(" / ") : formatNature(set.nature)} Nature
  • `; - } - if (set.ivs) { - const ivs: string[] = []; - let iv: StatID; - for (iv in set.ivs) { - if (set.ivs[iv] === 31) continue; - ivs.push(`${set.ivs[iv]} ${STAT_NAMES[iv]}`); - } - buf += `
  • IVs: ${ivs.join(" / ")}
  • `; - } - for (const moveid of set.moves) { - buf += `
  • - ${Array.isArray(moveid) ? moveid.map(x => dex.moves.get(x).name).join(" / ") : dex.moves.get(moveid).name}
  • `; - } - const italicize = !baseDex.moves.get(set.signatureMove).exists; - buf += `
  • - ${italicize ? `` : ``}${dex.moves.get(set.signatureMove).name}${italicize ? `` : ``}
  • `; - buf += `
`; - buf += `
`; - return buf; -} - -function generateSSBMoveInfo(sigMove: Move, dex: ModdedDex) { - let buf = ``; - if (sigMove.shortDesc || sigMove.desc) { - buf += `
`; - buf += Chat.getDataMoveHTML(sigMove); - const details: {[k: string]: string} = { - Priority: String(sigMove.priority), - Gen: String(sigMove.gen) || 'CAP', - }; - - if (sigMove.isNonstandard === "Past" && dex.gen >= 8) details["✗ Past Gens Only"] = ""; - if (sigMove.secondary || sigMove.secondaries) details["✓ Secondary effect"] = ""; - if (sigMove.flags['contact']) details["✓ Contact"] = ""; - if (sigMove.flags['sound']) details["✓ Sound"] = ""; - if (sigMove.flags['bullet']) details["✓ Bullet"] = ""; - if (sigMove.flags['pulse']) details["✓ Pulse"] = ""; - if (!sigMove.flags['protect'] && !/(ally|self)/i.test(sigMove.target)) details["✓ Bypasses Protect"] = ""; - if (sigMove.flags['bypasssub']) details["✓ Bypasses Substitutes"] = ""; - if (sigMove.flags['defrost']) details["✓ Thaws user"] = ""; - if (sigMove.flags['bite']) details["✓ Bite"] = ""; - if (sigMove.flags['punch']) details["✓ Punch"] = ""; - if (sigMove.flags['powder']) details["✓ Powder"] = ""; - if (sigMove.flags['reflectable']) details["✓ Bounceable"] = ""; - if (sigMove.flags['charge']) details["✓ Two-turn move"] = ""; - if (sigMove.flags['recharge']) details["✓ Has recharge turn"] = ""; - if (sigMove.flags['gravity']) details["✗ Suppressed by Gravity"] = ""; - if (sigMove.flags['dance']) details["✓ Dance move"] = ""; - - if (sigMove.zMove?.basePower) { - details["Z-Power"] = String(sigMove.zMove.basePower); - } else if (sigMove.zMove?.effect) { - const zEffects: {[k: string]: string} = { - clearnegativeboost: "Restores negative stat stages to 0", - crit2: "Crit ratio +2", - heal: "Restores HP 100%", - curse: "Restores HP 100% if user is Ghost type, otherwise Attack +1", - redirect: "Redirects opposing attacks to user", - healreplacement: "Restores replacement's HP 100%", - }; - details["Z-Effect"] = zEffects[sigMove.zMove.effect]; - } else if (sigMove.zMove?.boost) { - details["Z-Effect"] = ""; - const boost = sigMove.zMove.boost; - for (const h in boost) { - details["Z-Effect"] += ` ${Dex.stats.mediumNames[h as 'atk']} +${boost[h as 'atk']}`; - } - } else if (sigMove.isZ && typeof sigMove.isZ === 'string') { - details["✓ Z-Move"] = ""; - const zCrystal = dex.items.get(sigMove.isZ); - details["Z-Crystal"] = zCrystal.name; - if (zCrystal.itemUser) { - details["User"] = zCrystal.itemUser.join(", "); - details["Required Move"] = dex.items.get(sigMove.isZ).zMoveFrom!; - } - } else { - details["Z-Effect"] = "None"; - } - - const targetTypes: {[k: string]: string} = { - normal: "One Adjacent Pok\u00e9mon", - self: "User", - adjacentAlly: "One Ally", - adjacentAllyOrSelf: "User or Ally", - adjacentFoe: "One Adjacent Opposing Pok\u00e9mon", - allAdjacentFoes: "All Adjacent Opponents", - foeSide: "Opposing Side", - allySide: "User's Side", - allyTeam: "User's Side", - allAdjacent: "All Adjacent Pok\u00e9mon", - any: "Any Pok\u00e9mon", - all: "All Pok\u00e9mon", - scripted: "Chosen Automatically", - randomNormal: "Random Adjacent Opposing Pok\u00e9mon", - allies: "User and Allies", - }; - details["Target"] = targetTypes[sigMove.target] || "Unknown"; - if (sigMove.isNonstandard === 'Unobtainable') { - details[`Unobtainable in Gen ${dex.gen}`] = ""; - } - buf += `${Object.entries(details).map(([detail, value]) => ( - value === '' ? detail : `${detail}: ${value}` - )).join(" |  ")}`; - if (sigMove.desc && sigMove.desc !== sigMove.shortDesc) { - buf += `
In-Depth Description${sigMove.desc}
`; - } - } - return buf; -} - -function generateSSBItemInfo(set: SSBSet, dex: ModdedDex, baseDex: ModdedDex) { - let buf = ``; - if (!Array.isArray(set.item)) { - const baseItem = baseDex.items.get(set.item); - const sigItem = dex.items.get(set.item); - if (!baseItem.exists || (baseItem.desc || baseItem.shortDesc) !== (sigItem.desc || sigItem.shortDesc)) { - buf += `
`; - buf += Chat.getDataItemHTML(sigItem); - const details: {[k: string]: string} = { - Gen: String(sigItem.gen), - }; - - if (dex.gen >= 4) { - if (sigItem.fling) { - details["Fling Base Power"] = String(sigItem.fling.basePower); - if (sigItem.fling.status) details["Fling Effect"] = sigItem.fling.status; - if (sigItem.fling.volatileStatus) details["Fling Effect"] = sigItem.fling.volatileStatus; - if (sigItem.isBerry) details["Fling Effect"] = "Activates the Berry's effect on the target."; - if (sigItem.id === 'whiteherb') details["Fling Effect"] = "Restores the target's negative stat stages to 0."; - if (sigItem.id === 'mentalherb') { - const flingEffect = "Removes the effects of Attract, Disable, Encore, Heal Block, Taunt, and Torment from the target."; - details["Fling Effect"] = flingEffect; - } - } else { - details["Fling"] = "This item cannot be used with Fling."; - } - } - if (sigItem.naturalGift && dex.gen >= 3) { - details["Natural Gift Type"] = sigItem.naturalGift.type; - details["Natural Gift Base Power"] = String(sigItem.naturalGift.basePower); - } - if (sigItem.isNonstandard && sigItem.isNonstandard !== "Custom") { - details[`Unobtainable in Gen ${dex.gen}`] = ""; - } - buf += `${Object.entries(details).map(([detail, value]) => ( - value === '' ? detail : `${detail}: ${value}` - )).join(" |  ")}`; - } - } - return buf; -} - -function generateSSBAbilityInfo(set: SSBSet, dex: ModdedDex, baseDex: ModdedDex) { - let buf = ``; - if (!Array.isArray(set.ability) && !baseDex.abilities.get(set.ability).exists) { - const sigAbil = Dex.deepClone(dex.abilities.get(set.ability)); - if (!sigAbil.desc && !sigAbil.shortDesc) { - sigAbil.desc = `This ability doesn't have a description. Try contacting the SSB dev team.`; - } - buf += `
`; - buf += Chat.getDataAbilityHTML(sigAbil); - const details: {[k: string]: string} = { - Gen: String(sigAbil.gen) || 'CAP', - }; - buf += `${Object.entries(details).map(([detail, value]) => ( - value === '' ? detail : `${detail}: ${value}` - )).join(" |  ")}`; - if (sigAbil.desc && sigAbil.shortDesc && sigAbil.desc !== sigAbil.shortDesc) { - buf += `
In-Depth Description${sigAbil.desc}
`; - } - } - return buf; -} - -function generateSSBPokemonInfo(species: string, dex: ModdedDex, baseDex: ModdedDex) { - let buf = ``; - const origSpecies = baseDex.species.get(species); - const newSpecies = dex.species.get(species); - if ( - newSpecies.types.join('/') !== origSpecies.types.join('/') || - Object.values(newSpecies.abilities).join('/') !== Object.values(origSpecies.abilities).join('/') || - Object.values(newSpecies.baseStats).join('/') !== Object.values(origSpecies.baseStats).join('/') - ) { - buf += `
`; - buf += Chat.getDataPokemonHTML(newSpecies, dex.gen, 'SSB'); - let weighthit = 20; - if (newSpecies.weighthg >= 2000) { - weighthit = 120; - } else if (newSpecies.weighthg >= 1000) { - weighthit = 100; - } else if (newSpecies.weighthg >= 500) { - weighthit = 80; - } else if (newSpecies.weighthg >= 250) { - weighthit = 60; - } else if (newSpecies.weighthg >= 100) { - weighthit = 40; - } - const details: {[k: string]: string} = { - "Dex#": String(newSpecies.num), - Gen: String(newSpecies.gen) || 'CAP', - Height: `${newSpecies.heightm} m`, - }; - details["Weight"] = `${newSpecies.weighthg / 10} kg (${weighthit} BP)`; - if (newSpecies.color && dex.gen >= 5) details["Dex Colour"] = newSpecies.color; - if (newSpecies.eggGroups && dex.gen >= 2) details["Egg Group(s)"] = newSpecies.eggGroups.join(", "); - const evos: string[] = []; - for (const evoName of newSpecies.evos) { - const evo = dex.species.get(evoName); - if (evo.gen <= dex.gen) { - const condition = evo.evoCondition ? ` ${evo.evoCondition}` : ``; - switch (evo.evoType) { - case 'levelExtra': - evos.push(`${evo.name} (level-up${condition})`); - break; - case 'levelFriendship': - evos.push(`${evo.name} (level-up with high Friendship${condition})`); - break; - case 'levelHold': - evos.push(`${evo.name} (level-up holding ${evo.evoItem}${condition})`); - break; - case 'useItem': - evos.push(`${evo.name} (${evo.evoItem})`); - break; - case 'levelMove': - evos.push(`${evo.name} (level-up with ${evo.evoMove}${condition})`); - break; - case 'other': - evos.push(`${evo.name} (${evo.evoCondition})`); - break; - case 'trade': - evos.push(`${evo.name} (trade${evo.evoItem ? ` holding ${evo.evoItem}` : condition})`); - break; - default: - evos.push(`${evo.name} (${evo.evoLevel}${condition})`); - } - } - } - if (!evos.length) { - details[`Does Not Evolve`] = ""; - } else { - details["Evolution"] = evos.join(", "); - } - buf += `${Object.entries(details).map(([detail, value]) => ( - value === '' ? detail : `${detail}: ${value}` - )).join(" |  ")}`; - } - return buf; -} - -function generateSSBInnateInfo(name: string, dex: ModdedDex, baseDex: ModdedDex) { - let buf = ``; - // Special casing for users whose usernames are already existing, i.e. Perish Song - let effect = dex.conditions.get(name + 'user'); - let longDesc = ``; - const baseAbility = Dex.deepClone(baseDex.abilities.get('noability')); - // @ts-ignore hack to record the name of the innate abilities without using name - if (effect.exists && effect.innateName && (effect.desc || effect.shortDesc)) { - // @ts-ignore hack - baseAbility.name = effect.innateName; - if (effect.desc) baseAbility.desc = effect.desc; - if (effect.shortDesc) baseAbility.shortDesc = effect.shortDesc; - buf += `
Innate Ability:
${Chat.getDataAbilityHTML(baseAbility)}`; - if (effect.desc && effect.shortDesc && effect.desc !== effect.shortDesc) { - longDesc = effect.desc; - } - } else { - effect = dex.conditions.get(name); - // @ts-ignore hack - if (effect.exists && effect.innateName && (effect.desc || effect.shortDesc)) { - // @ts-ignore hack - baseAbility.name = effect.innateName; - if (effect.desc) baseAbility.desc = effect.desc; - if (effect.shortDesc) baseAbility.shortDesc = effect.shortDesc; - buf += `
Innate Ability:
${Chat.getDataAbilityHTML(baseAbility)}`; - if (effect.desc && effect.shortDesc && effect.desc !== effect.shortDesc) { - longDesc = effect.desc; - } - } - } - if (buf) { - const details: {[k: string]: string} = {Gen: '8'}; - buf += `${Object.entries(details).map(([detail, value]) => ( - value === '' ? detail : `${detail}: ${value}` - )).join(" |  ")}`; - } - if (longDesc) { - buf += `
In-Depth Description${longDesc}
`; - } - return buf; -} - -function SSBSets(target: string) { - const baseDex = Dex; - const dex = Dex.forFormat('gen8superstaffbros4'); - if (!Object.keys(ssbSets).map(toID).includes(toID(target))) { - return {e: `Error: ${target.trim()} doesn't have a [Gen 8] Super Staff Bros 4 set.`}; - } - let displayName = ''; - const names = []; - for (const member in ssbSets) { - if (toID(member).startsWith(toID(target))) names.push(member); - if (toID(member) === toID(target)) displayName = member; - } - let buf = ''; - for (const name of names) { - if (buf) buf += `
`; - const set = ssbSets[name]; - const mutatedSpecies = dex.species.get(set.species); - if (!set.skip) { - buf += Utils.html`

${displayName === 'yuki' ? name : displayName}

`; - } else { - buf += `
${name.split('-').slice(1).join('-') + ' forme'}`; - } - buf += generateSSBSet(set, dex, baseDex); - const item = dex.items.get(set.item as string); - if (!set.skip || set.signatureMove !== ssbSets[set.skip].signatureMove) { - const sigMove = baseDex.moves.get(set.signatureMove).exists && !Array.isArray(set.item) && - typeof item.zMove === 'string' ? - dex.moves.get(item.zMove) : dex.moves.get(set.signatureMove); - buf += generateSSBMoveInfo(sigMove, dex); - if (sigMove.id === 'blackbird') buf += generateSSBMoveInfo(dex.moves.get('gaelstrom'), dex); - } - buf += generateSSBItemInfo(set, dex, baseDex); - buf += generateSSBAbilityInfo(set, dex, baseDex); - buf += generateSSBInnateInfo(name, dex, baseDex); - buf += generateSSBPokemonInfo(set.species, dex, baseDex); - if (!Array.isArray(set.item) && item.megaStone) { - buf += generateSSBPokemonInfo(item.megaStone, dex, baseDex); - // Psynergy, Struchni, and Raj.shoot have itemless Mega Evolutions - } else if (['Aggron', 'Rayquaza'].includes(set.species)) { - buf += generateSSBPokemonInfo(`${set.species}-Mega`, dex, baseDex); - } else if (set.species === 'Charizard') { - buf += generateSSBPokemonInfo('Charizard-Mega-X', dex, baseDex); - } - if (set.skip) buf += `
`; - } - return buf; -} - export const commands: Chat.ChatCommands = { randbats: 'randombattles', randomdoublesbattle: 'randombattles', randdubs: 'randombattles', + babyrandombattle: 'randombattles', + babyrands: 'randombattles', // randombattlenodmax: 'randombattles', // randsnodmax: 'randombattles', randombattles(target, room, user, connection, cmd) { if (!this.runBroadcast()) return; const battle = room?.battle; let isDoubles = cmd === 'randomdoublesbattle' || cmd === 'randdubs'; + let isBaby = cmd === 'babyrandombattle' || cmd === 'babyrands'; let isNoDMax = cmd.includes('nodmax'); if (battle) { if (battle.format.includes('nodmax')) isNoDMax = true; if (battle.format.includes('doubles') || battle.gameType === 'freeforall') isDoubles = true; + if (battle.format.includes('baby')) isBaby = true; } const args = target.split(','); @@ -776,9 +495,11 @@ export const commands: Chat.ChatCommands = { } const species = dex.species.get(searchResults[0].name); const extraFormatModifier = isLetsGo ? 'letsgo' : (dex.currentMod === 'gen8bdsp' ? 'bdsp' : ''); + const babyModifier = isBaby ? 'baby' : ''; const doublesModifier = isDoubles ? 'doubles' : ''; const noDMaxModifier = isNoDMax ? 'nodmax' : ''; - const format = dex.formats.get(`gen${dex.gen}${extraFormatModifier}random${doublesModifier}battle${noDMaxModifier}`); + const formatName = `gen${dex.gen}${extraFormatModifier}${babyModifier}random${doublesModifier}battle${noDMaxModifier}`; + const format = dex.formats.get(formatName); const movesets = []; let setCount = 0; @@ -802,37 +523,30 @@ export const commands: Chat.ChatCommands = { const setsToCheck = [species]; if (dex.gen >= 8 && !isNoDMax) setsToCheck.push(dex.species.get(`${args[0]}gmax`)); if (species.otherFormes) setsToCheck.push(...species.otherFormes.map(pkmn => dex.species.get(pkmn))); - if ([4, 5, 6, 9].includes(dex.gen) || (dex.gen === 7 && !isDoubles)) { + if ([2, 3, 4, 5, 6, 7, 9].includes(dex.gen)) { for (const pokemon of setsToCheck) { - const sets = getSets(pokemon, format.id); - if (!sets) continue; + const data = getSets(pokemon, format.id); + if (!data) continue; + const sets = data.sets; + const level = data.level || getLevel(pokemon, format); let buf = `Moves for ${pokemon.name} in ${format.name}:
`; + buf += `Level: ${level}`; for (const set of sets) { buf += `
${set.role}`; if (dex.gen === 9) { buf += `Tera Type${Chat.plural(set.teraTypes)}: ${set.teraTypes.join(', ')}
`; - } else if (([4, 5, 6, 7].includes(dex.gen)) && set.preferredTypes) { + } else if (([2, 3, 4, 5, 6, 7].includes(dex.gen)) && set.preferredTypes) { buf += `Preferred Type${Chat.plural(set.preferredTypes)}: ${set.preferredTypes.join(', ')}
`; } - buf += `Moves: ${set.movepool.sort().map(formatMove).join(', ')}
`; + buf += `Moves: ${set.movepool.sort().map(formatMove).join(', ')}
`; + if (set.abilities) { + buf += `Abilit${Chat.plural(set.abilities, 'ies', 'y')}: ${set.abilities.sort().join(', ')}`; + } + buf += ''; setCount++; } movesets.push(buf); } - } else if (dex.gen === 7 && isDoubles) { - for (const pokemon of setsToCheck) { - const data = getData(pokemon, format.name); - if (!data) continue; - if (!data.moves) continue; - const randomMoves = data.moves; - const m = randomMoves.slice().sort().map(formatMove); - movesets.push( - `
` + - `Moves for ${pokemon.name} in ${format.name}:` + - `${m.join(`, `)}
` - ); - setCount++; - } } else { for (let pokemon of setsToCheck) { let data = getData(pokemon, format.name); @@ -843,12 +557,14 @@ export const commands: Chat.ChatCommands = { if (!data) continue; if (!data.moves || pokemon.isNonstandard === 'Future') continue; let randomMoves = data.moves; + const level = data.level || getLevel(pokemon, format); if (isDoubles && data.doublesMoves) randomMoves = data.doublesMoves; if (isNoDMax && data.noDynamaxMoves) randomMoves = data.noDynamaxMoves; const m = randomMoves.slice().sort().map(formatMove); movesets.push( `
` + `Moves for ${pokemon.name} in ${format.name}:` + + (level ? `Level: ${level}
` : '') + `${m.join(`, `)}
` ); setCount++; @@ -870,7 +586,6 @@ export const commands: Chat.ChatCommands = { randombattleshelp: [ `/randombattles OR /randbats [pokemon], [gen] - Displays a Pok\u00e9mon's Random Battle Moves. Defaults to Gen 9. If used in a battle, defaults to the gen of that battle.`, `/randomdoublesbattle OR /randdubs [pokemon], [gen] - Same as above, but instead displays Random Doubles Battle moves.`, - `/randombattlenodmax OR /randsnodmax [pokemon] - Same as above, but instead displays moves for [Gen 8] Random Battle (No Dmax)`, ], bssfactory: 'battlefactory', @@ -884,7 +599,7 @@ export const commands: Chat.ChatCommands = { if (!species.exists) { return this.errorReply(`Error: Pok\u00e9mon '${args[0].trim()}' not found.`); } - let mod = 'gen8'; + let mod = 'gen9'; if (args[1] && toID(args[1]) in Dex.dexes && Dex.dexes[toID(args[1])].gen >= 7) mod = toID(args[1]); const bssSets = battleFactorySets(species, null, mod, true); if (!bssSets) return this.parse(`/help battlefactory`); @@ -928,9 +643,9 @@ export const commands: Chat.ChatCommands = { } }, battlefactoryhelp: [ - `/battlefactory [pokemon], [tier], [gen] - Displays a Pok\u00e9mon's Battle Factory sets. Supports Gens 6-7. Defaults to Gen 7. If no tier is provided, defaults to OU.`, + `/battlefactory [pokemon], [tier], [gen] - Displays a Pok\u00e9mon's Battle Factory sets. Supports Gens 6-8. Defaults to Gen 8. If no tier is provided, defaults to OU.`, `- Supported tiers: OU, Ubers, UU, RU, NU, PU, Monotype (Gen 7 only), LC (Gen 7 only)`, - `/bssfactory [pokemon], [gen] - Displays a Pok\u00e9mon's BSS Factory sets. Supports Gen 7. Defaults to Gen 7.`, + `/bssfactory [pokemon], [gen] - Displays a Pok\u00e9mon's BSS Factory sets. Supports Gen 7-9. Defaults to Gen 9.`, ], cap1v1(target, room, user) { @@ -951,19 +666,6 @@ export const commands: Chat.ChatCommands = { `/cap1v1 [pokemon] - Displays a Pok\u00e9mon's CAP 1v1 sets.`, ], - ssb(target, room, user) { - if (!this.runBroadcast()) return; - if (!target) return this.parse(`/help ssb`); - const set = SSBSets(target); - if (typeof set !== 'string') { - throw new Chat.ErrorMessage(set.e); - } - return this.sendReplyBox(set); - }, - ssbhelp: [ - `/ssb [staff member] - Displays a staff member's Super Staff Bros. set and custom features.`, - ], - setodds: 'randombattlesetprobabilities', randbatsodds: 'randombattlesetprobabilities', randbatsprobabilities: 'randombattlesetprobabilities', @@ -1000,15 +702,13 @@ export const commands: Chat.ChatCommands = { } let setExists: boolean; - if ([4, 5, 6, 9].includes(dex.gen) || dex.gen === 7 && format.gameType !== 'doubles') { + if ([2, 3, 4, 5, 6, 7, 9].includes(dex.gen)) { setExists = !!getSets(species, format); - } else if (dex.gen === 7 && format.gameType === 'doubles') { - setExists = !!getData(species, format); } else { const data = getData(species, format); if (!data) { setExists = false; - } else if ((format.gameType === 'doubles' && dex.gen !== 7) || format.gameType === 'freeforall') { + } else if (format.gameType === 'doubles' || format.gameType === 'freeforall') { setExists = !!data.doublesMoves; } else { setExists = !!data.moves; @@ -1146,7 +846,7 @@ export const commands: Chat.ChatCommands = { `` + `The given probability is for a set that matches EVERY provided condition. ` + `Conditions can be negated by prefixing the [matching value] with !.
` + - `Requires: % @ # & (globally or in the Random Battles room)` + `Requires: % @ # ~ (globally or in the Random Battles room)` ); }, @@ -1157,7 +857,7 @@ export const commands: Chat.ChatCommands = { if (!target) return this.parse('/help generateteam'); const format = Dex.formats.get(target); - if (!format.exists) throw new Chat.ErrorMessage(`"${target}" is not a recognized format.`); + if (format.effectType !== 'Format') throw new Chat.ErrorMessage(`"${target}" is not a recognized format.`); if (!format.team) throw new Chat.ErrorMessage(`"${format.name}" requires you to bring your own team.`); const team = Teams.getGenerator(format).getTeam(); @@ -1172,5 +872,5 @@ export const commands: Chat.ChatCommands = { .join(''); return this.sendReplyBox(`Team for ${format.name}:` + teamHTML); }, - generateteamhelp: [`/genteam [format] - Generates a team for the given format. Requires: % @ & or Random Battles room auth`], + generateteamhelp: [`/genteam [format] - Generates a team for the given format. Requires: % @ ~ or Random Battles room auth`], }; diff --git a/server/chat-plugins/randombattles/ssb.ts b/server/chat-plugins/randombattles/ssb.ts new file mode 100644 index 000000000000..b707400d7706 --- /dev/null +++ b/server/chat-plugins/randombattles/ssb.ts @@ -0,0 +1,430 @@ +import {SSBSet, ssbSets} from "../../../data/mods/gen9ssb/random-teams"; +import {Utils} from "../../../lib"; +import {formatNature, STAT_NAMES} from "."; + +function generateSSBSet(set: SSBSet, dex: ModdedDex, baseDex: ModdedDex) { + if (set.skip) { + const baseSet = toID(Object.values(ssbSets[set.skip]).join()); + const skipSet = toID(Object.values(set).join()).slice(0, -toID(set.skip).length); + if (baseSet === skipSet) return ``; + } + let buf = ``; + buf += `
Set`; + buf += `
  • ${set.species}${set.gender !== '' ? ` (${set.gender})` : ``}`; + buf += `${set.item ? ' @ ' : ''}${Array.isArray(set.item) ? set.item.map(x => dex.items.get(x).name).join(' / ') : dex.items.get(set.item).name}
  • `; + buf += `
  • Ability: ${Array.isArray(set.ability) ? set.ability.map(x => dex.abilities.get(x).name).join(' / ') : dex.abilities.get(set.ability).name}
  • `; + if (set.teraType) { + buf += `
  • Tera Type: ${Array.isArray(set.teraType) ? set.teraType.map(x => dex.types.get(x).name).join(' / ') : set.teraType === 'Any' ? 'Any' : dex.types.get(set.teraType).name}
  • `; + } + if (set.shiny) buf += `
  • Shiny: ${typeof set.shiny === 'number' ? `1 in ${set.shiny} chance` : `Yes`}
  • `; + if (set.evs) { + const evs: string[] = []; + let ev: StatID; + for (ev in set.evs) { + if (set.evs[ev] === 0) continue; + evs.push(`${set.evs[ev]} ${STAT_NAMES[ev]}`); + } + buf += `
  • EVs: ${evs.join(" / ")}
  • `; + } + if (set.nature) { + buf += `
  • ${Array.isArray(set.nature) ? set.nature.map(x => formatNature(x)).join(" / ") : formatNature(set.nature)} Nature
  • `; + } + if (set.ivs) { + const ivs: string[] = []; + let iv: StatID; + for (iv in set.ivs) { + if (set.ivs[iv] === 31) continue; + ivs.push(`${set.ivs[iv]} ${STAT_NAMES[iv]}`); + } + buf += `
  • IVs: ${ivs.join(" / ")}
  • `; + } + for (const moveid of set.moves) { + buf += `
  • - ${Array.isArray(moveid) ? moveid.map(x => dex.moves.get(x).name).join(" / ") : dex.moves.get(moveid).name}
  • `; + } + const italicize = !baseDex.moves.get(set.signatureMove).exists; + buf += `
  • - ${italicize ? `` : ``}${dex.moves.get(set.signatureMove).name}${italicize ? `` : ``}
  • `; + buf += `
`; + buf += `
`; + return buf; +} + +function generateSSBMoveInfo(sigMove: Move, dex: ModdedDex) { + let buf = ``; + if (sigMove.shortDesc || sigMove.desc) { + buf += `
`; + buf += Chat.getDataMoveHTML(sigMove); + const details: {[k: string]: string} = { + Priority: String(sigMove.priority), + Gen: String(sigMove.gen || 9), + }; + + if (sigMove.isNonstandard === "Past" && dex.gen >= 8) details["✗ Past Gens Only"] = ""; + if (sigMove.secondary || sigMove.secondaries || sigMove.hasSheerForce) 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"] = ""; + if (sigMove.flags['pulse'] && dex.gen >= 6) details["✓ Pulse"] = ""; + if (!sigMove.flags['protect'] && sigMove.target !== 'self') details["✓ Bypasses Protect"] = ""; + if (sigMove.flags['bypasssub']) details["✓ Bypasses Substitutes"] = ""; + if (sigMove.flags['defrost']) details["✓ Thaws user"] = ""; + if (sigMove.flags['bite'] && dex.gen >= 6) details["✓ Bite"] = ""; + if (sigMove.flags['punch'] && dex.gen >= 4) details["✓ Punch"] = ""; + if (sigMove.flags['powder'] && dex.gen >= 6) details["✓ Powder"] = ""; + if (sigMove.flags['reflectable'] && dex.gen >= 3) details["✓ Bounceable"] = ""; + if (sigMove.flags['charge']) details["✓ Two-turn move"] = ""; + if (sigMove.flags['recharge']) details["✓ Has recharge turn"] = ""; + if (sigMove.flags['gravity'] && dex.gen >= 4) details["✗ Suppressed by Gravity"] = ""; + if (sigMove.flags['dance'] && dex.gen >= 7) details["✓ Dance move"] = ""; + if (sigMove.flags['slicing'] && dex.gen >= 9) details["✓ Slicing move"] = ""; + if (sigMove.flags['wind'] && dex.gen >= 9) details["✓ Wind move"] = ""; + + if (sigMove.zMove?.basePower) { + details["Z-Power"] = String(sigMove.zMove.basePower); + } else if (sigMove.zMove?.effect) { + const zEffects: {[k: string]: string} = { + clearnegativeboost: "Restores negative stat stages to 0", + crit2: "Crit ratio +2", + heal: "Restores HP 100%", + curse: "Restores HP 100% if user is Ghost type, otherwise Attack +1", + redirect: "Redirects opposing attacks to user", + healreplacement: "Restores replacement's HP 100%", + }; + details["Z-Effect"] = zEffects[sigMove.zMove.effect]; + } else if (sigMove.zMove?.boost) { + details["Z-Effect"] = ""; + const boost = sigMove.zMove.boost; + for (const h in boost) { + details["Z-Effect"] += ` ${Dex.stats.mediumNames[h as 'atk']} +${boost[h as 'atk']}`; + } + } else if (sigMove.isZ && typeof sigMove.isZ === 'string') { + details["✓ Z-Move"] = ""; + const zCrystal = dex.items.get(sigMove.isZ); + details["Z-Crystal"] = zCrystal.name; + if (zCrystal.itemUser) { + details["User"] = zCrystal.itemUser.join(", "); + details["Required Move"] = dex.items.get(sigMove.isZ).zMoveFrom!; + } + } else { + details["Z-Effect"] = "None"; + } + + const targetTypes: {[k: string]: string} = { + normal: "One Adjacent Pok\u00e9mon", + self: "User", + adjacentAlly: "One Ally", + adjacentAllyOrSelf: "User or Ally", + adjacentFoe: "One Adjacent Opposing Pok\u00e9mon", + allAdjacentFoes: "All Adjacent Opponents", + foeSide: "Opposing Side", + allySide: "User's Side", + allyTeam: "User's Side", + allAdjacent: "All Adjacent Pok\u00e9mon", + any: "Any Pok\u00e9mon", + all: "All Pok\u00e9mon", + scripted: "Chosen Automatically", + randomNormal: "Random Adjacent Opposing Pok\u00e9mon", + allies: "User and Allies", + }; + details["Target"] = targetTypes[sigMove.target] || "Unknown"; + if (sigMove.isNonstandard === 'Unobtainable') { + details[`Unobtainable in Gen ${dex.gen}`] = ""; + } + buf += `${Object.entries(details).map(([detail, value]) => ( + value === '' ? detail : `${detail}: ${value}` + )).join(" |  ")}`; + if (sigMove.desc && sigMove.desc !== sigMove.shortDesc) { + buf += `
In-Depth Description${sigMove.desc}
`; + } + } + return buf; +} + +function generateSSBItemInfo(set: SSBSet, dex: ModdedDex, baseDex: ModdedDex) { + let buf = ``; + if (!Array.isArray(set.item)) { + const baseItem = baseDex.items.get(set.item); + const sigItem = dex.items.get(set.item); + if (!baseItem.exists || (baseItem.desc || baseItem.shortDesc) !== (sigItem.desc || sigItem.shortDesc)) { + buf += `
`; + buf += Chat.getDataItemHTML(sigItem); + const details: {[k: string]: string} = { + Gen: String(sigItem.gen), + }; + + if (dex.gen >= 4) { + if (sigItem.fling) { + details["Fling Base Power"] = String(sigItem.fling.basePower); + if (sigItem.fling.status) details["Fling Effect"] = sigItem.fling.status; + if (sigItem.fling.volatileStatus) details["Fling Effect"] = sigItem.fling.volatileStatus; + if (sigItem.isBerry) details["Fling Effect"] = "Activates the Berry's effect on the target."; + if (sigItem.id === 'whiteherb') details["Fling Effect"] = "Restores the target's negative stat stages to 0."; + if (sigItem.id === 'mentalherb') { + const flingEffect = "Removes the effects of Attract, Disable, Encore, Heal Block, Taunt, and Torment from the target."; + details["Fling Effect"] = flingEffect; + } + } else { + details["Fling"] = "This item cannot be used with Fling."; + } + } + if (sigItem.naturalGift && dex.gen >= 3) { + details["Natural Gift Type"] = sigItem.naturalGift.type; + details["Natural Gift Base Power"] = String(sigItem.naturalGift.basePower); + } + if (sigItem.isNonstandard && sigItem.isNonstandard !== "Custom") { + details[`Unobtainable in Gen ${dex.gen}`] = ""; + } + buf += `${Object.entries(details).map(([detail, value]) => ( + value === '' ? detail : `${detail}: ${value}` + )).join(" |  ")}`; + } + } + return buf; +} + +function generateSSBAbilityInfo(set: SSBSet, dex: ModdedDex, baseDex: ModdedDex) { + let buf = ``; + const customMegaAbilities = ['Sableye', 'Ampharos']; + if (!Array.isArray(set.ability) && + (customMegaAbilities.includes(set.species) || !baseDex.abilities.get(set.ability).exists)) { + let sigAbil = baseDex.deepClone(dex.abilities.get(set.ability)); + if (customMegaAbilities.includes(set.species)) { + const megaAbil = dex.species.get(`${set.species}-Mega`).abilities[0]; + sigAbil = baseDex.deepClone(dex.abilities.get(megaAbil)); + } + if (!sigAbil.desc && !sigAbil.shortDesc) { + sigAbil.desc = `This ability doesn't have a description. Try contacting the SSB dev team.`; + } + buf += `
`; + buf += Chat.getDataAbilityHTML(sigAbil); + const details: {[k: string]: string} = { + Gen: String(sigAbil.gen || 9) || 'CAP', + }; + if (sigAbil.flags['cantsuppress']) details["✓ Not affected by Gastro Acid"] = ""; + if (sigAbil.flags['breakable']) details["✓ Ignored by Mold Breaker"] = ""; + buf += `${Object.entries(details).map(([detail, value]) => ( + value === '' ? detail : `${detail}: ${value}` + )).join(" |  ")}`; + if (sigAbil.desc && sigAbil.shortDesc && sigAbil.desc !== sigAbil.shortDesc) { + buf += `
In-Depth Description${sigAbil.desc}
`; + } + } + return buf; +} + +function generateSSBPokemonInfo(species: string, dex: ModdedDex, baseDex: ModdedDex) { + let buf = ``; + const origSpecies = baseDex.species.get(species); + const newSpecies = dex.species.get(species); + if ( + newSpecies.types.join('/') !== origSpecies.types.join('/') || + Object.values(newSpecies.abilities).join('/') !== Object.values(origSpecies.abilities).join('/') || + Object.values(newSpecies.baseStats).join('/') !== Object.values(origSpecies.baseStats).join('/') + ) { + buf += `
`; + buf += Chat.getDataPokemonHTML(newSpecies, dex.gen, 'SSB'); + let weighthit = 20; + if (newSpecies.weighthg >= 2000) { + weighthit = 120; + } else if (newSpecies.weighthg >= 1000) { + weighthit = 100; + } else if (newSpecies.weighthg >= 500) { + weighthit = 80; + } else if (newSpecies.weighthg >= 250) { + weighthit = 60; + } else if (newSpecies.weighthg >= 100) { + weighthit = 40; + } + const details: {[k: string]: string} = { + "Dex#": String(newSpecies.num), + Gen: String(newSpecies.gen) || 'CAP', + Height: `${newSpecies.heightm} m`, + }; + details["Weight"] = `${newSpecies.weighthg / 10} kg (${weighthit} BP)`; + if (newSpecies.color && dex.gen >= 5) details["Dex Colour"] = newSpecies.color; + if (newSpecies.eggGroups && dex.gen >= 2) details["Egg Group(s)"] = newSpecies.eggGroups.join(", "); + const evos: string[] = []; + for (const evoName of newSpecies.evos) { + const evo = dex.species.get(evoName); + if (evo.gen <= dex.gen) { + const condition = evo.evoCondition ? ` ${evo.evoCondition}` : ``; + switch (evo.evoType) { + case 'levelExtra': + evos.push(`${evo.name} (level-up${condition})`); + break; + case 'levelFriendship': + evos.push(`${evo.name} (level-up with high Friendship${condition})`); + break; + case 'levelHold': + evos.push(`${evo.name} (level-up holding ${evo.evoItem}${condition})`); + break; + case 'useItem': + evos.push(`${evo.name} (${evo.evoItem})`); + break; + case 'levelMove': + evos.push(`${evo.name} (level-up with ${evo.evoMove}${condition})`); + break; + case 'other': + evos.push(`${evo.name} (${evo.evoCondition})`); + break; + case 'trade': + evos.push(`${evo.name} (trade${evo.evoItem ? ` holding ${evo.evoItem}` : condition})`); + break; + default: + evos.push(`${evo.name} (${evo.evoLevel}${condition})`); + } + } + } + if (!evos.length) { + details[`Does Not Evolve`] = ""; + } else { + details["Evolution"] = evos.join(", "); + } + buf += `${Object.entries(details).map(([detail, value]) => ( + value === '' ? detail : `${detail}: ${value}` + )).join(" |  ")}`; + } + return buf; +} + +function generateSSBInnateInfo(name: string, dex: ModdedDex, baseDex: ModdedDex) { + let buf = ``; + // Special casing for users whose usernames are already existing, i.e. dhelmise + let effect = dex.conditions.get(name + 'user'); + let longDesc = ``; + const baseAbility = baseDex.deepClone(baseDex.abilities.get('noability')); + if (effect.exists && (effect as any).innateName && (effect.desc || effect.shortDesc)) { + baseAbility.name = (effect as any).innateName; + if (!effect.desc && !effect.shortDesc) { + baseAbility.desc = baseAbility.shortDesc = "This innate does not have a description."; + } + if (effect.desc) baseAbility.desc = effect.desc; + if (effect.shortDesc) baseAbility.shortDesc = effect.shortDesc; + buf += `
Innate Ability:
${Chat.getDataAbilityHTML(baseAbility)}`; + if (effect.desc && effect.shortDesc && effect.desc !== effect.shortDesc) { + longDesc = effect.desc; + } + } else { + effect = dex.deepClone(dex.conditions.get(name)); + if (!effect.desc && !effect.shortDesc) { + effect.desc = effect.shortDesc = "This innate does not have a description."; + } + if (effect.exists && (effect as any).innateName) { + baseAbility.name = (effect as any).innateName; + if (effect.desc) baseAbility.desc = effect.desc; + if (effect.shortDesc) baseAbility.shortDesc = effect.shortDesc; + buf += `
Innate Ability:
${Chat.getDataAbilityHTML(baseAbility)}`; + if (effect.desc && effect.shortDesc && effect.desc !== effect.shortDesc) { + longDesc = effect.desc; + } + } + } + if (buf) { + const details: {[k: string]: string} = {Gen: '9'}; + buf += `${Object.entries(details).map(([detail, value]) => ( + value === '' ? detail : `${detail}: ${value}` + )).join(" |  ")}`; + } + if (longDesc) { + buf += `
In-Depth Description${longDesc}
`; + } + return buf; +} + +function SSBSets(target: string) { + const baseDex = Dex; + const dex = Dex.forFormat('gen9superstaffbrosultimate'); + if (!Object.keys(ssbSets).map(toID).includes(toID(target))) { + return {e: `Error: ${target.trim()} doesn't have a [Gen 9] Super Staff Bros Ultimate set.`}; + } + let name = ''; + for (const member in ssbSets) { + if (toID(member) === toID(target)) name = member; + } + let buf = ''; + const sets: string[] = []; + for (const set in ssbSets) { + if (!set.startsWith(name)) continue; + if (!ssbSets[set].skip && set !== name) continue; + sets.push(set); + } + for (const setName of sets) { + const set = ssbSets[setName]; + const mutatedSpecies = dex.species.get(set.species); + if (!set.skip) { + buf += Utils.html`

${setName}

`; + } else { + buf += `
${setName.split('-').slice(1).join('-') + ' forme'}`; + } + buf += generateSSBSet(set, dex, baseDex); + const item = dex.items.get(set.item as string); + if (!set.skip || set.signatureMove !== ssbSets[set.skip].signatureMove) { + const sigMove = baseDex.moves.get(set.signatureMove).exists && !Array.isArray(set.item) && + typeof item.zMove === 'string' ? + dex.moves.get(item.zMove) : dex.moves.get(set.signatureMove); + buf += generateSSBMoveInfo(sigMove, dex); + } + buf += generateSSBItemInfo(set, dex, baseDex); + buf += generateSSBAbilityInfo(set, dex, baseDex); + buf += generateSSBInnateInfo(setName, dex, baseDex); + buf += generateSSBPokemonInfo(set.species, dex, baseDex); + if (!Array.isArray(set.item) && item.megaStone) { + buf += generateSSBPokemonInfo(item.megaStone, dex, baseDex); + // keys and Kennedy have an itemless forme change + } else if (['Rayquaza'].includes(set.species)) { + buf += generateSSBPokemonInfo(`${set.species}-Mega`, dex, baseDex); + } else if (['Cinderace'].includes(set.species)) { + buf += generateSSBPokemonInfo(`${set.species}-Gmax`, dex, baseDex); + } + if (set.skip) buf += `
`; + } + return buf; +} + + +export const disabledSets = Chat.oldPlugins.ssb?.disabledSets || []; + +function enforceDisabledSets() { + for (const process of Rooms.PM.processes) { + process.getProcess().send(`EVAL\n\nConfig.disabledssbsets = ${JSON.stringify(disabledSets)}`); + } +} + +enforceDisabledSets(); + +export const commands: Chat.ChatCommands = { + ssb(target, room, user) { + if (!this.runBroadcast()) return; + if (!target) return this.parse(`/help ssb`); + const set = SSBSets(target); + if (typeof set !== 'string') { + throw new Chat.ErrorMessage(set.e); + } + return this.sendReplyBox(set); + }, + ssbhelp: [ + `/ssb [staff member] - Displays a staff member's Super Staff Bros. set and custom features.`, + ], + enablessbset: 'disablessbset', + disablessbset(target, room, user, connection, cmd) { + this.checkCan('rangeban'); + target = toID(target); + if (!Object.keys(ssbSets).map(toID).includes(target as ID)) { + throw new Chat.ErrorMessage(`${target} has no SSB set.`); + } + const disableIdx = disabledSets.indexOf(target); + if (cmd.startsWith('enable')) { + if (disableIdx < 0) { + throw new Chat.ErrorMessage(`${target}'s set is not disabled.`); + } + disabledSets.splice(disableIdx, 1); + this.privateGlobalModAction(`${user.name} enabled ${target}'s SSB set.`); + } else { + if (disableIdx > -1) { + throw new Chat.ErrorMessage(`That set is already disabled.`); + } + disabledSets.push(target); + this.privateGlobalModAction(`${user.name} disabled the SSB set for ${target}`); + } + enforceDisabledSets(); + }, +}; diff --git a/server/chat-plugins/randombattles/winrates.ts b/server/chat-plugins/randombattles/winrates.ts index 09a132a65a1c..719c1b0cdc4d 100644 --- a/server/chat-plugins/randombattles/winrates.ts +++ b/server/chat-plugins/randombattles/winrates.ts @@ -21,13 +21,13 @@ interface FormatData { period?: number; // how often it resets - defaults to 1mo } -const STATS_PATH = 'logs/randbats/{{MONTH}}-winrates.json'; +const STATS_PATH = Monitor.logPath('randbats/{{MONTH}}-winrates.json').path; export const stats: Stats = getDefaultStats(); try { const path = STATS_PATH.replace('{{MONTH}}', getMonth()); - if (!FS('logs/randbats/').existsSync()) { - FS('logs/randbats/').mkdirSync(); + if (!Monitor.logPath('randbats/').existsSync()) { + Monitor.logPath('randbats/').mkdirSync(); } const savedStats = JSON.parse(FS(path).readSync()); stats.elo = savedStats.elo; @@ -46,6 +46,8 @@ function getDefaultStats() { // so i'm not spending the time to add commands to toggle this gen9randombattle: {mons: {}}, gen9randomdoublesbattle: {mons: {}}, + gen9babyrandombattle: {mons: {}}, + gen9superstaffbrosultimate: {mons: {}}, gen8randombattle: {mons: {}}, gen7randombattle: {mons: {}}, gen6randombattle: {mons: {}}, @@ -96,6 +98,10 @@ function getSpeciesName(set: PokemonSet, format: Format) { return 'Keldeo'; } else if (species === "Zarude-Dada") { return 'Zarude'; + } else if (species === 'Polteageist-Antique') { + return 'Polteageist'; + } else if (species === 'Sinistcha-Masterpiece') { + return 'Sinistcha'; } else if (species === "Squawkabilly-Blue") { return "Squawkabilly"; } else if (species === "Squawkabilly-White") { @@ -130,6 +136,16 @@ function getSpeciesName(set: PokemonSet, format: Format) { return item.megaStone; } else if (species === "Rayquaza" && moves.includes('Dragon Ascent') && !item.zMove && megaRayquazaPossible) { return "Rayquaza-Mega"; + } else if (species === "Poltchageist-Artisan") { // Babymons from here on out + return "Poltchageist"; + } else if (species === "Shellos-East") { + return "Shellos"; + } else if (species === "Sinistea-Antique") { + return "Sinistea"; + } else if (species.startsWith("Deerling-")) { + return "Deerling"; + } else if (species.startsWith("Flabe\u0301be\u0301-")) { + return "Flabe\u0301be\u0301"; } else { return species; } @@ -158,25 +174,25 @@ async function collectStats(battle: RoomBattle, winner: ID, players: ID[]) { const formatData = stats.formats[battle.format]; let eloFloor = stats.elo; const format = Dex.formats.get(battle.format); - if (format.mod === 'gen2') { - // ladder is inactive, so use a lower threshold + if (format.mod === 'gen2' || format.team === 'randomBaby') { + // ladders are inactive, so use a lower threshold eloFloor = 1150; } else if (format.mod !== `gen${Dex.gen}`) { eloFloor = 1300; } else if (format.gameType === 'doubles') { - // may need to be raised again if doubles ladder takes off - eloFloor = 1300; + // may need to be raised again if ladder takes off further + eloFloor = 1400; } - if (!formatData || battle.rated < eloFloor) return; + if (!formatData || (format.mod !== 'gen9ssb' && battle.rated < eloFloor) || !winner) return; checkRollover(); - for (const p of players) { - const team = await battle.getTeam(p); + for (const p of battle.players) { + const team = await battle.getPlayerTeam(p); if (!team) return; // ??? const mons = team.map(f => getSpeciesName(f, format)); for (const mon of mons) { if (!formatData.mons[mon]) formatData.mons[mon] = {timesGenerated: 0, numWins: 0}; formatData.mons[mon].timesGenerated++; - if (toID(winner) === toID(p)) { + if (toID(winner) === toID(p.name)) { formatData.mons[mon].numWins++; } } diff --git a/server/chat-plugins/repeats.ts b/server/chat-plugins/repeats.ts index eeb5b46eb2aa..66e7e0e3296e 100644 --- a/server/chat-plugins/repeats.ts +++ b/server/chat-plugins/repeats.ts @@ -196,11 +196,11 @@ export const commands: Chat.ChatCommands = { repeathelp() { this.runBroadcast(); this.sendReplyBox( - `/repeat [minutes], [id], [phrase]: repeats a given phrase every [minutes] minutes. Requires: % @ # &
` + - `/repeathtml [minutes], [id], [phrase]: repeats a given phrase containing HTML every [minutes] minutes. Requires: # &
` + - `/repeatfaq [minutes], [FAQ name/alias]: repeats a given Room FAQ every [minutes] minutes. Requires: % @ # &
` + - `/removerepeat [id]: removes a repeated phrase. Requires: % @ # &
` + - `/viewrepeats [optional room]: Displays all repeated phrases in a room. Requires: % @ # &
` + + `/repeat [minutes], [id], [phrase]: repeats a given phrase every [minutes] minutes. Requires: % @ # ~
` + + `/repeathtml [minutes], [id], [phrase]: repeats a given phrase containing HTML every [minutes] minutes. Requires: # ~
` + + `/repeatfaq [minutes], [FAQ name/alias]: repeats a given Room FAQ every [minutes] minutes. Requires: % @ # ~
` + + `/removerepeat [id]: removes a repeated phrase. Requires: % @ # ~
` + + `/viewrepeats [optional room]: Displays all repeated phrases in a room. Requires: % @ # ~
` + `You can append bymessages to a /repeat command to repeat a phrase based on how many messages have been sent in chat. For example, /repeatfaqbymessages ...
` + `Phrases for /repeat can include normal chat formatting, but not commands.` ); diff --git a/server/chat-plugins/responder.ts b/server/chat-plugins/responder.ts index 062b67e0f4bc..d23d6bcfa15c 100644 --- a/server/chat-plugins/responder.ts +++ b/server/chat-plugins/responder.ts @@ -12,7 +12,7 @@ import {LogViewer} from './chatlog'; import {roomFaqs, visualizeFaq} from './room-faqs'; const DATA_PATH = 'config/chat-plugins/responder.json'; -const LOG_PATH = 'logs/responder.jsonl'; +const LOG_PATH = Monitor.logPath('responder.jsonl').path; export let answererData: {[roomid: string]: PluginData} = {}; @@ -421,11 +421,11 @@ export const commands: Chat.ChatCommands = { autoresponderhelp() { const help = [ `/autoresponder view [page] - Views the Autoresponder page [page]. (options: keys, stats)`, - `/autoresponder toggle [on | off] - Enables or disables the Autoresponder for the current room. Requires: @ # &`, + `/autoresponder toggle [on | off] - Enables or disables the Autoresponder for the current room. Requires: @ # ~`, `/autoresponder add [input] => [faq] - Adds regex made from the input string to the current room's Autoresponder, to respond with [faq] to matches.`, `/autoresponder remove [faq], [regex index] - removes the regex matching the [index] from the current room's responses for [faq].`, `Indexes can be found in /autoresponder keys.`, - `Requires: @ # &`, + `Requires: @ # ~`, ]; return this.sendReplyBox(help.join('
')); }, diff --git a/server/chat-plugins/room-events.ts b/server/chat-plugins/room-events.ts index ebdbed03949a..8e46b591fe7d 100644 --- a/server/chat-plugins/room-events.ts +++ b/server/chat-plugins/room-events.ts @@ -567,17 +567,17 @@ export const commands: Chat.ChatCommands = { roomeventshelp() { this.sendReply( `|html|
/roomevents: displays a list of upcoming room-specific events.
` + - `/roomevents add [event name] | [event date/time] | [event description]: adds a room event. A timestamp in event date/time field like YYYY-MM-DD HH:MM±hh:mm will be displayed in user's timezone. Requires: @ # &
` + - `/roomevents start [event name]: declares to the room that the event has started. Requires: @ # &
` + - `/roomevents remove [event name]: deletes an event. Requires: @ # &
` + - `/roomevents rename [old event name] | [new name]: renames an event. Requires: @ # &
` + - `/roomevents addalias [alias] | [event name]: adds an alias for the event. Requires: @ # &
` + - `/roomevents removealias [alias]: removes an event alias. Requires: @ # &
` + - `/roomevents addcategory [category]: adds an event category. Requires: @ # &
` + - `/roomevents removecategory [category]: removes an event category. Requires: @ # &
` + - `/roomevents addtocategory [event name] | [category]: adds the event to a category. Requires: @ # &
` + - `/roomevents removefromcategory [event name] | [category]: removes the event from a category. Requires: @ # &
` + - `/roomevents sortby [column name] | [asc/desc (optional)] sorts events table by column name and an optional argument to ascending or descending order. Ascending order is default. Requires: @ # &
` + + `/roomevents add [event name] | [event date/time] | [event description]: adds a room event. A timestamp in event date/time field like YYYY-MM-DD HH:MM±hh:mm will be displayed in user's timezone. Requires: @ # ~
` + + `/roomevents start [event name]: declares to the room that the event has started. Requires: @ # ~
` + + `/roomevents remove [event name]: deletes an event. Requires: @ # ~` + + `/roomevents rename [old event name] | [new name]: renames an event. Requires: @ # ~
` + + `/roomevents addalias [alias] | [event name]: adds an alias for the event. Requires: @ # ~
` + + `/roomevents removealias [alias]: removes an event alias. Requires: @ # ~
` + + `/roomevents addcategory [category]: adds an event category. Requires: @ # ~
` + + `/roomevents removecategory [category]: removes an event category. Requires: @ # ~
` + + `/roomevents addtocategory [event name] | [category]: adds the event to a category. Requires: @ # ~
` + + `/roomevents removefromcategory [event name] | [category]: removes the event from a category. Requires: @ # ~
` + + `/roomevents sortby [column name] | [asc/desc (optional)] sorts events table by column name and an optional argument to ascending or descending order. Ascending order is default. Requires: @ # ~
` + `/roomevents view [event name or category]: displays information about a specific event or category of events.
` + `/roomevents viewcategories: displays a list of event categories for that room.` + `
` diff --git a/server/chat-plugins/room-faqs.ts b/server/chat-plugins/room-faqs.ts index 6fccecc48b62..cff37190ff27 100644 --- a/server/chat-plugins/room-faqs.ts +++ b/server/chat-plugins/room-faqs.ts @@ -180,10 +180,10 @@ export const commands: Chat.ChatCommands = { roomfaqhelp: [ `/roomfaq - Shows the list of all available FAQ topics`, `/roomfaq - Shows the FAQ for .`, - `/addfaq , - Adds an entry for in this room or updates it. Requires: @ # &`, - `/addhtmlfaq , - Adds or updates an entry for with HTML support. Requires: # &`, - `/addalias , - Adds as an alias for , displaying it when users use /roomfaq . Requires: @ # &`, - `/removefaq - Removes the entry for in this room. If used on an alias, removes the alias. Requires: @ # &`, + `/addfaq , - Adds an entry for in this room or updates it. Requires: @ # ~`, + `/addhtmlfaq , - Adds or updates an entry for with HTML support. Requires: # ~`, + `/addalias , - Adds as an alias for , displaying it when users use /roomfaq . Requires: @ # ~`, + `/removefaq - Removes the entry for in this room. If used on an alias, removes the alias. Requires: @ # ~`, ], }; diff --git a/server/chat-plugins/sample-teams.ts b/server/chat-plugins/sample-teams.ts index 34b99313d506..3ff4663f3307 100644 --- a/server/chat-plugins/sample-teams.ts +++ b/server/chat-plugins/sample-teams.ts @@ -107,7 +107,7 @@ export const SampleTeams = new class SampleTeams { sanitizeFormat(formatid: string, checkExists = false) { const format = Dex.formats.get(formatid); - if (checkExists && !format.exists) { + if (checkExists && format.effectType !== 'Format') { throw new Chat.ErrorMessage(`Format "${formatid.trim()}" not found. Check spelling?`); } if (format.team) { @@ -304,7 +304,11 @@ export const handlers: Chat.Handlers = { }; export const commands: Chat.ChatCommands = { - sampleteams: { + sampleteams(target, room, user) { + this.sendReply(`Sample Teams are being deprecated. Please do \`\`/tier [formatid]\`\` to view their resources.`); + this.sendReply(`If you are room staff for a room and would like to access old samples for your room's formats, please contact an admin.`); + }, + /* sampleteams: { ''(target, room, user) { this.runBroadcast(); let [formatid, category] = target.split(','); @@ -428,162 +432,9 @@ export const commands: Chat.ChatCommands = { sampleteamshelp: [ `/sampleteams [format] - Lists the sample teams for [format], if there are any.`, `/sampleteams addcategory/removecategory [format], [category] - Adds/removes categories for [format].`, - `/sampleteams add - Pulls up the interface to add sample teams. Requires: Room staff in dedicated tier room, &`, + `/sampleteams add - Pulls up the interface to add sample teams. Requires: Room staff in dedicated tier room, ~`, `/sampleteams remove [format], [category], [team name] - Removes a sample team for [format] in [category].`, - `/sampleteams whitelist add [formatid], [formatid] | [roomid], [roomid], ... - Whitelists room staff for the provided roomids to add sample teams. Requires: &`, - `/sampleteams whitelist remove [formatid], [roomid] - Unwhitelists room staff for the provided room to add sample teams. Requires: &`, - ], + `/sampleteams whitelist add [formatid], [formatid] | [roomid], [roomid], ... - Whitelists room staff for the provided roomids to add sample teams. Requires: ~`, + `/sampleteams whitelist remove [formatid], [roomid] - Unwhitelists room staff for the provided room to add sample teams. Requires: ~`, + ], */ }; - -function formatFakeButton(url: string, text: string) { - return `${text}`; -} - -export const pages: Chat.PageTable = { - sampleteams: { - whitelist(query, user, connection) { - this.title = `Sample Teams Whitelist`; - if (!(SampleTeams.isDevMod(user) || user.can('bypassall'))) { - return `

Access denied.

`; - } - const staffRoomAccess = Rooms.get('staff')?.checkModjoin(user); - let buf = `

Sample Teams Rooms Whitelist

`; - if ((!teamData.whitelist || !Object.keys(teamData.whitelist).length) && !query.length) { - buf += `

No rooms are whitelisted for any formats.

`; - } - if (query[0] === 'add') { - buf += `
`; - buf += `

`; - buf += `
`; - buf += `
`; - buf += `
${formatFakeButton("view-sampleteams-whitelist", "Return to list")}`; - } else { - buf += `
`; - for (const formatid of Object.keys(teamData.whitelist).sort().reverse()) { - if (!teamData.whitelist[formatid]?.length) continue; - buf += `
${SampleTeams.getFormatName(formatid)}
`; - for (const roomid of teamData.whitelist[formatid]) { - buf += `
${Rooms.get(roomid)?.title || roomid}`; - buf += `
`; - } - } - buf += `
`; - } - buf += `${query.length ? '' : formatFakeButton("view-sampleteams-whitelist-add", "Whitelist room")}
`; - return buf; - }, - view(query, user, connection) { - this.title = `Sample Teams`; - let buf = `
`; - if (query.slice(0, query.length - 1).join('-')) { - buf += `${formatFakeButton(`view-sampleteams-view-${query.slice(0, query.length - 1).join('-')}`, "« Back")}`; - } else { - buf += ``; - } - buf += ``; - buf += `

Sample Teams


`; - const q0Teams = teamData.teams[query[0]]; - const q0TeamKeys = q0Teams ? Object.keys(q0Teams) : []; - if (!query[0]) { - const formats = Object.keys(teamData.teams); - if (!formats.length) return `${buf}

No teams found.

`; - buf += `

Pick a format

    `; - for (const formatid of formats) { - if (!formatid) continue; - buf += `
  • ${formatFakeButton(`view-sampleteams-view-${formatid}`, `${SampleTeams.getFormatName(formatid)}`)}
  • `; - } - buf += `
`; - } else if (!q0Teams || !q0TeamKeys.length || - (!Object.keys(q0Teams.uncategorized).length && !q0TeamKeys.filter(x => x !== 'uncategorized').length)) { - const name = Dex.formats.get(query[0]).exists ? Dex.formats.get(query[0]).name : query[0]; - return `${buf}

No teams for ${name} were found.

`; - } else if (!query[1] || (!SampleTeams.findCategory(query[0], query[1]) && query[1] !== 'allteams')) { - buf += `

Pick a category

`; - } else if (query[1] === 'allteams') { - buf += `

All teams for ${SampleTeams.getFormatName(query[0])}

`; - for (const categoryName in teamData.teams[query[0]]) { - const category = teamData.teams[query[0]][categoryName]; - if (!Object.keys(category).length) continue; - buf += `

${categoryName}

`; - for (const teamName in category) { - const team = category[teamName]; - if (SampleTeams.checkPermissions(user, teamData.whitelist[query[0]] || [])) { - buf += ``; - } - buf += SampleTeams.formatTeam(teamName, team); - } - buf += `
`; - const index = Object.keys(teamData.teams[query[0]]).indexOf(categoryName); - if (index !== Object.keys(teamData.teams[query[0]]).length - 1) buf += `
`; - } - } else if (SampleTeams.findCategory(query[0], query[1])) { - const categoryName = SampleTeams.findCategory(query[0], query[1])!; - buf += `

Sample teams for ${SampleTeams.getFormatName(query[0])} in the ${categoryName} category

`; - for (const teamName in teamData.teams[query[0]][categoryName]) { - const team = teamData.teams[query[0]][categoryName][teamName]; - buf += SampleTeams.formatTeam(teamName, team); - } - } - buf += ``; - return buf; - }, - add(query, user, connection) { - this.title = `Sample Teams`; - const trimFormatName = (name: string) => (name.includes('(') ? name.slice(0, name.indexOf('(')) : name).trim(); - const formatsSet = new Set(Dex.formats.all().map(format => trimFormatName(format.name))); - const formatsArr = Array.from(formatsSet); - const formats = formatsArr.map(formatName => Dex.formats.get(formatName)) - .filter(format => ( - !format.name.includes('Custom') && format.effectType === 'Format' && - !format.team && SampleTeams.checkPermissions(user, SampleTeams.whitelistedRooms(format.id) || []) - )); - if (!formats.length) return `

Access denied.

`; - let buf = `
`; - if (query.slice(0, query.length - 1).join('-')) { - buf += `${formatFakeButton(`view-sampleteams-add-${query.slice(0, query.length - 1).join('-')}`, "« Back")}`; - } else { - buf += ``; - } - let buttonTitle = 'Refresh'; - if (query[2] === 'submit') buttonTitle = 'Add another team'; - buf += ``; - buf += `

Add a sample team

`; - if (!query[0] || !Dex.formats.get(query[0]).exists) { - buf += `

Pick a format

    `; - for (const format of formats) { - buf += `
  • ${formatFakeButton(`view-sampleteams-add-${format.id}`, format.name)}
  • `; - } - buf += `
`; - } else if (!query[1] || !SampleTeams.findCategory(query[0], query[1]) || query[1] === 'addnewcategory') { - const name = SampleTeams.getFormatName(query[0]); - if (query[1] === 'addnewcategory') { - buf += `

Add a category for ${name}

`; - buf += `
`; - buf += ``; - buf += `
`; - } else { - buf += `

Pick a category for ${name}

    `; - for (const category of Object.keys(teamData.teams[query[0]] || {}) || []) { - buf += `
  • ${formatFakeButton(`view-sampleteams-add-${query[0]}-${toID(category)}-submit`, category)}
  • `; - } - buf += `
  • ${formatFakeButton(`view-sampleteams-add-${query[0]}-addnewcategory`, `Add new category`)}
`; - } - } - const categoryName = SampleTeams.findCategory(query[0], query[1]); - if (categoryName) { - buf += `
`; - buf += `

Enter a team name

`; - buf += `

Enter team importable


`; - buf += `
`; - } - buf += `
`; - return buf; - }, - }, -}; - -Chat.multiLinePattern.register(`/sampleteams add `); diff --git a/server/chat-plugins/scavenger-games.ts b/server/chat-plugins/scavenger-games.ts index 08ebad8b32a8..beeec1aadc36 100644 --- a/server/chat-plugins/scavenger-games.ts +++ b/server/chat-plugins/scavenger-games.ts @@ -7,7 +7,7 @@ * @license MIT license */ -import {ScavengerHunt, ScavengerHuntPlayer} from './scavengers'; +import {ScavengerHunt, ScavengerHuntPlayer, sanitizeAnswer} from './scavengers'; import {Utils} from '../../lib'; export type TwistEvent = (this: ScavengerHunt, ...args: any[]) => void; @@ -92,10 +92,9 @@ class Leaderboard { async htmlLadder(): Promise { const data = await this.visualize('points'); - const display = `
${data.map(line => + return `
RankNamePoints
${data.map(line => ``).join('') }
RankNamePoints
${line.rank}${line.name}${line.points}
`; - return display; } } @@ -341,9 +340,9 @@ const TWISTS: {[k: string]: Twist} = { return true; }, - onLeave(user) { - for (const ip of user.ips) { - this.altIps[ip] = {id: user.id, name: user.name}; + onLeave(player) { + for (const ip of player.joinIps) { + this.altIps[ip] = {id: player.id, name: player.name}; } }, @@ -356,15 +355,21 @@ const TWISTS: {[k: string]: Twist} = { onComplete(player, time, blitz) { const now = Date.now(); - const takenTime = Chat.toDurationString(now - this.startTimes[player.id], {hhmmss: true}); - const result = {name: player.name, id: player.id, time: takenTime, blitz}; + const takenTime = now - this.startTimes[player.id]; + const result = { + name: player.name, + id: player.id, + time: Chat.toDurationString(takenTime, {hhmmss: true}), + duration: takenTime, + blitz, + }; this.completed.push(result); const place = Utils.formatOrder(this.completed.length); this.announce( Utils.html`${result.name} is the ${place} player to finish the hunt! (${takenTime}${(blitz ? " - BLITZ" : "")})` ); - Utils.sortBy(this.completed, entry => entry.time); + Utils.sortBy(this.completed, entry => entry.duration); player.destroy(); // remove from user.games; return true; @@ -400,7 +405,7 @@ const TWISTS: {[k: string]: Twist} = { const currentQuestion = player.currentQuestion; if (currentQuestion + 1 === this.questions.length) { - this.guesses[player.id] = value.split(',').map((part: string) => toID(part)); + this.guesses[player.id] = value.split(',').map((part: string) => sanitizeAnswer(part)); this.onComplete(player); return true; @@ -506,7 +511,7 @@ const TWISTS: {[k: string]: Twist} = { const curr = player.currentQuestion; if (!this.guesses[curr][player.id]) this.guesses[curr][player.id] = new Set(); - this.guesses[curr][player.id].add(toID(value)); + this.guesses[curr][player.id].add(sanitizeAnswer(value)); throw new Chat.ErrorMessage("That is not the answer - try again!"); }, @@ -517,11 +522,8 @@ const TWISTS: {[k: string]: Twist} = { const mines: {mine: string, users: string[]}[][] = []; - for (let index = 0; index < this.mines.length; index++) { - mines[index] = []; - for (const mine of this.mines[index]) { - mines[index].push({mine: mine.substr(1), users: []}); - } + for (const mineSet of this.mines as string[][]) { + mines.push(mineSet.map(mine => ({mine: mine.substr(1), users: [] as string[]}))); } for (const player of Object.values(this.playerTable)) { @@ -541,7 +543,7 @@ const TWISTS: {[k: string]: Twist} = { `${this.completed.length > sliceIndex ? `Consolation Prize: ${this.completed.slice(sliceIndex).map(e => `${Utils.escapeHTML(e.name)} [${e.time}]`).join(', ')}
` : ''}
` + `
Solution:
` + `${this.questions.map((q, i) => ( - `${i + 1}) ${Chat.formatText(q.hint)} [${Utils.escapeHTML(q.answer.join(' / '))}]
` + + `${i + 1}) ${this.formatOutput(q.hint)} [${Utils.escapeHTML(q.answer.join(' / '))}]
` + `
Mines: ${mines[i].map(({mine, users}) => Utils.escapeHTML(`${mine}: ${users.join(' / ') || '-'}`)).join('
')}
` )).join("
")}` + `
` @@ -555,9 +557,10 @@ const TWISTS: {[k: string]: Twist} = { const mines: string[] = this.mines[q]; for (const [playerId, guesses] of Object.entries(guessObj)) { const player = this.playerTable[playerId]; + if (!player) continue; if (!player.mines) player.mines = []; (player.mines as {index: number, mine: string}[]).push(...mines - .filter(mine => (guesses as Set).has(toID(mine))) + .filter(mine => (guesses as Set).has(sanitizeAnswer(mine))) .map(mine => ({index: q, mine: mine.substr(1)}))); } } @@ -784,11 +787,11 @@ const MODES: {[k: string]: GameMode | string} = { if (staffHost) staffHost.sendTo(this.room, `${targetUser.name} has received their first hint early.`); targetUser.sendTo( this.room, - `|raw|The first hint to the next hunt is: ${Chat.formatText(this.questions[0].hint)}` + `|raw|The first hint to the next hunt is:
${this.formatOutput(this.questions[0].hint)}
` ); targetUser.sendTo( this.room, - `|notify|Early Hint|The first hint to the next hunt is: ${Chat.formatText(this.questions[0].hint)}` + `|notify|Early Hint|The first hint to the next hunt is:
${this.formatOutput(this.questions[0].hint)}
` ); } }, (maxTime - time) * 1000 + 5000); diff --git a/server/chat-plugins/scavengers.ts b/server/chat-plugins/scavengers.ts index bb2114768094..956e65468056 100644 --- a/server/chat-plugins/scavengers.ts +++ b/server/chat-plugins/scavengers.ts @@ -17,6 +17,7 @@ type GameTypes = 'official' | 'regular' | 'mini' | 'unrated' | 'practice' | 'rec export interface QueuedHunt { hosts: {id: string, name: string, noUpdate?: boolean}[]; questions: (string | string[])[]; + isHTML: boolean; staffHostId: string; staffHostName: string; gameType: GameTypes; @@ -63,6 +64,11 @@ function getScavsRoom(room?: Room) { return null; } +// Normalize answers before checking, eg: Pokémon! -> pokemon +export function sanitizeAnswer(answer: string): string { + return toID(answer.normalize('NFD')); +} + class Ladder { file: string; data: {[userid: string]: AnyObject}; @@ -226,19 +232,19 @@ function formatQueue(queue: QueuedHunt[] | undefined, viewer: User, room: Room, return Utils.html`[${q.join(' / ')}]
`; } else { q = q as string; - return Utils.escapeHTML(q); + return item.isHTML ? q : Utils.escapeHTML(q); } } ).join(" "); } else { questions = `[${item.questions.length / 2} hidden questions]`; } - return `${removeButton}${startButton} ${unratedText}${hosts}${queuedBy}${questions}`; + return `${removeButton}${startButton} ${unratedText}${hosts}${queuedBy}
${questions}
`; }).join(""); } else { buffer = `The scavenger queue is currently empty.`; } - let template = `
${showStaff ? buffer : buffer.replace(/.+?<\/button>/gi, '')}
ByQuestions
`; + let template = `
${showStaff ? buffer : buffer.replace(/.+?<\/button>/gi, '')}
ByQuestions
`; if (showStaff) { template += `
Auto Timer Duration: ${timerDuration} minutesAuto Dequeue: